pax_global_header00006660000000000000000000000064126360325710014517gustar00rootroot0000000000000052 comment=0da164d588a45fc452523f2798aede0115d68b35 libkml-1.3.0/000077500000000000000000000000001263603257100127725ustar00rootroot00000000000000libkml-1.3.0/.travis.yml000066400000000000000000000003431263603257100151030ustar00rootroot00000000000000language: cpp compiler: - gcc - clang before_script: - mkdir build - cd build - sudo apt-get update -qq - sudo apt-get install swig python-dev script: cmake -DCMAKE_INSTALL_PREFIX=../../install .. && make libkml-1.3.0/AUTHORS000066400000000000000000000000271263603257100140410ustar00rootroot00000000000000opensource@google.com libkml-1.3.0/CMakeLists.txt000066400000000000000000000150721263603257100155370ustar00rootroot00000000000000cmake_minimum_required(VERSION 2.8) project(LibKML) set(VERSION_MAJOR "1") set(VERSION_MINOR "3") set(VERSION_PATCH "0") set(VERSION_STRING "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "Release") endif() option(BUILD_TESTING "Build testing." OFF) option(BUILD_EXAMPLES "Build examples." OFF) option(INSTALL_EXAMPLES "Install examples sources and executables" OFF) option(BUILD_SHARED_LIBS "Build shared libs." ON) option(WITH_SWIG "Build all swig bindings" OFF) option(WITH_PYTHON "Build python bindings" OFF) option(WITH_JAVA "Build java bindings" OFF) set(LIBKML_DATA_DIR ${CMAKE_SOURCE_DIR}/testdata CACHE "Directory containing test data" PATH) #AM_CXXFLAGS = -Wall -Wextra -Wno-unused-parameter -pedantic -fno-rtti #AM_TEST_CXXFLAGS = -Wall -Wextra -Wno-unused-parameter -Werror -fno-rtti -DGTEST_HAS_RTTI=0 if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-unused-parameter -pedantic -fno-rtti") set(TEST_FLAGS "-Wall -Wextra -Wno-unused-parameter -fno-rtti -DGTEST_HAS_RTTI=0") else() if(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /DUNICODE /D_UNICODE") set(BUILD_SHARED_LIBS OFF) endif() endif() set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) if(NOT DEFINED BIN_INSTALL_DIR) set(BIN_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/bin") endif(NOT DEFINED BIN_INSTALL_DIR) if(NOT DEFINED LIB_INSTALL_DIR) set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib") endif(NOT DEFINED LIB_INSTALL_DIR) if(NOT DEFINED DATA_INSTALL_DIR) set(DATA_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share") endif(NOT DEFINED DATA_INSTALL_DIR) if(NOT DEFINED INCLUDE_INSTALL_DIR) set(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include/kml") endif(NOT DEFINED INCLUDE_INSTALL_DIR) if(NOT DEFINED MAN_INSTALL_DIR) set(MAN_INSTALL_DIR "${DATA_INSTALL_DIR}/man") endif(NOT DEFINED MAN_INSTALL_DIR) if(NOT DEFINED RESOURCE_INSTALL_DIR) set(RESOURCE_INSTALL_DIR "${DATA_INSTALL_DIR}/libkml${VERSION_MAJOR}/resource/") endif(NOT DEFINED RESOURCE_INSTALL_DIR) if(NOT DEFINED LOCALE_INSTALL_DIR) set(LOCALE_INSTALL_DIR "${DATA_INSTALL_DIR}/locale/") endif(NOT DEFINED LOCALE_INSTALL_DIR) if(NOT DEFINED JAVA_INSTALL_DIR) set(JAVA_INSTALL_DIR "${DATA_INSTALL_DIR}/java") endif(NOT DEFINED JAVA_INSTALL_DIR) if(NOT DEFINED JNI_INSTALL_DIR) set(JNI_INSTALL_DIR "${LIB_INSTALL_DIR}/jni") endif(NOT DEFINED JNI_INSTALL_DIR) if(NOT DEFINED PKGCONFIG_INSTALL_DIR) set(PKGCONFIG_INSTALL_DIR "${LIB_INSTALL_DIR}/pkgconfig") endif(NOT DEFINED PKGCONFIG_INSTALL_DIR) if(WIN32 AND NOT CYGWIN) set(DEF_INSTALL_CMAKE_DIR cmake) else() set(DEF_INSTALL_CMAKE_DIR lib/cmake/libkml) endif() set(CMAKE_INSTALL_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files") set(INSTALL_DIR "${CMAKE_INSTALL_PREFIX}" CACHE "install directory " PATH) # Path to additional CMake modules set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) include(LibKMLHelper) include(ExternalProject) set(KMLBASE_LINK_LIBS "" CACHE INTERNAL "KMLBASE_LINK_LIBS") set(KMLBASE_DEPENDS "" CACHE INTERNAL "KMLBASE_DEPENDS") set(MINIZIP_DEPENDS "" CACHE INTERNAL "MINIZIP_DEPENDS") set(LIBKML_TARGETS) find_package(EXPAT) if(EXPAT_FOUND) include_directories(${EXPAT_INCLUDE_DIR}) else() include(External_expat) list(APPEND KMLBASE_DEPENDS EXPAT) endif() find_package(ZLIB 1.2.8) if(ZLIB_FOUND) include_directories(${ZLIB_INCLUDE_DIR}) else() include(External_zlib) list(APPEND KMLBASE_DEPENDS ZLIB) list(APPEND MINIZIP_DEPENDS ZLIB) endif() find_package(MiniZip) if(MINIZIP_FOUND) include_directories(${MINIZIP_INCLUDE_DIR}) else() include(External_minizip) list(APPEND KMLBASE_DEPENDS MINIZIP) endif() find_package(UriParser) if(URIPARSER_FOUND) include_directories(${URIPARSER_INCLUDE_DIR}) else() include(External_uriparser) list(APPEND KMLBASE_DEPENDS URIPARSER) endif() find_package(Boost) if(Boost_FOUND) message(STATUS "Found Boost: ${Boost_VERSION}") else() include(External_boost) list(APPEND KMLBASE_DEPENDS BOOST) message(STATUS "Found Boost includes: ${Boost_INCLUDE_DIRS}") endif() include_directories(${Boost_INCLUDE_DIRS}) if(WITH_SWIG) find_package(SWIG) if(SWIG_EXECUTABLE) include(${SWIG_USE_FILE}) else() set(WITH_SWIG OFF) set(WITH_PYTHON OFF) set(WITH_JAVA OFF) message(WARNING "Swig not found. Hence bindings will not be built") endif() endif() list(APPEND KMLBASE_LINK_LIBS ${EXPAT_LIBRARY}) list(APPEND KMLBASE_LINK_LIBS ${ZLIB_LIBRARY}) list(APPEND KMLBASE_LINK_LIBS ${MINIZIP_LIBRARY}) list(APPEND KMLBASE_LINK_LIBS ${URIPARSER_LIBRARY}) include_directories(${CMAKE_SOURCE_DIR}/src) add_subdirectory(src) configure_file("${CMAKE_SOURCE_DIR}/cmake/libkml.pc.in" "${CMAKE_BINARY_DIR}/libkml.pc" @ONLY) install(FILES ${CMAKE_BINARY_DIR}/libkml.pc DESTINATION ${PKGCONFIG_INSTALL_DIR}) if(BUILD_TESTING) enable_testing() find_package(GoogleTest REQUIRED) include_directories(${GTEST_INCLUDE_DIR}) include_directories(${CMAKE_SOURCE_DIR}/tests) add_definitions("-DDATADIR=\"${LIBKML_DATA_DIR}\"") add_subdirectory(tests) endif() if(BUILD_EXAMPLES) add_subdirectory(examples) endif() string(TOUPPER ${CMAKE_BUILD_TYPE} CONFIG_TYPE) # Make relative paths absolute (needed later on) foreach(p LIB BIN INCLUDE CMAKE) set(var ${p}_INSTALL_DIR) if(NOT IS_ABSOLUTE "${${var}}") set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}") endif() endforeach() export(TARGETS ${LIBKML_TARGETS} FILE "${CMAKE_BINARY_DIR}/LibKMLTargets.cmake") # Create the LibKMLConfig.cmake and LibKMLConfigVersion files file(RELATIVE_PATH REL_INCLUDE_DIR "${CMAKE_INSTALL_DIR}" "${INCLUDE_INSTALL_DIR}") # ... for the build tree set(CONF_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/src") configure_file(cmake/LibKMLConfig.cmake.in "${PROJECT_BINARY_DIR}/LibKMLConfig.cmake" @ONLY) # ... for the install tree set(CONF_INCLUDE_DIRS "\${LIBKML_CMAKE_DIR}/${REL_INCLUDE_DIR}") configure_file(cmake/LibKMLConfig.cmake.in "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/LibKMLConfig.cmake" @ONLY) # ... for both configure_file(cmake/LibKMLConfigVersion.cmake.in "${CMAKE_BINARY_DIR}/LibKMLConfigVersion.cmake" @ONLY) # Install the LibKMLConfig.cmake and LibKMLConfigVersion.cmake install(FILES "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/LibKMLConfig.cmake" "${CMAKE_BINARY_DIR}/LibKMLConfigVersion.cmake" DESTINATION "${CMAKE_INSTALL_DIR}" ) # Install the export set for use with the install-tree install(EXPORT LibKMLTargets DESTINATION "${CMAKE_INSTALL_DIR}")libkml-1.3.0/COPYING000066400000000000000000000026351263603257100140330ustar00rootroot00000000000000Copyright 2008, Google Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. libkml-1.3.0/ChangeLog000066400000000000000000000003041263603257100145410ustar00rootroot00000000000000The project wiki contains a UserGuideXXX page that acts as both a quick guide to the most recent release and what's changed since the previous release. See: http://code.google.com/p/libkml/w/list libkml-1.3.0/DEPENDENCIES000066400000000000000000000013161263603257100145440ustar00rootroot00000000000000This file records the source URL and latest version of each external package used by libkml. Other versions may work fine. The given version are based on the official linux packages on Fedora 21. If you have trouble building, create an issue on github.com/libkml/libkml Required: g++: version higher than 4.4 is tested expat: expat.sourceforge.net version >= 2.1.0 zlib: www.zlib.net version >= 1.2.8 boost: www.boost.org version >= 1.44.0 minizip: >= 1.2.8 googletest: http://googletest.googlecode.com >= 1.7.0 Optional: java: java.sun.com 1.5.0_13, 1.6.0_04 python: www.python.org 2.7 swig: www.swig.org 2.0 Development: cmake: www.cmake.org >= 2.8 NOTE: This file will be changed to markdown or RST soon..libkml-1.3.0/INSTALL000066400000000000000000000065651263603257100140370ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `mkdir build; cmake ..; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd /path/to/libkml/sources and create a directory to keep build files. eg: '/path/to/libkml/sources/build' `mkdir build; cd build` 2. Run cmake from build directory `cmake /path/to/libkml/sources' to configure the package for your system. 3. Optionally, set cmake variable BUILD_TESTING=ON to build testing code. Later after compiling you can run test suite via launching ctest 4. Type `make' to compile the package. 5. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by changing cmake variable CMAKE_INSTALL_PREFIX= libkml-1.3.0/LICENSE000066400000000000000000000026371263603257100140070ustar00rootroot00000000000000Copyright 2010, Google Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of Google Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. libkml-1.3.0/NEWS000066400000000000000000000000001263603257100134570ustar00rootroot00000000000000libkml-1.3.0/README.md000066400000000000000000000041721263603257100142550ustar00rootroot00000000000000![Awesome logo](bactrian128.png) [![Travis Build Status](https://travis-ci.org/libkml/libkml.png?branch=master)](https://travis-ci.org/libkml/libkml) [![Coverity Scan Build Status](https://scan.coverity.com/projects/4788/badge.svg)](https://scan.coverity.com/projects/4788) This is Google's reference implementation of [OGC KML 2.2](http://www.opengeospatial.org/standards/kml). It also includes implementations of Google's `gx:` extensions used by Google Earth, as well as several utility libraries for working with other formats. All of original documentation written by google is imported into "wiki" branch: https://github.com/libkml/libkml/tree/wiki The wiki contains documents that describe: - An overview of the most recent release - Building and running the code - Running the unit tests - A general API reference guide - More details guides to each of the libkml modules This libkml project was imported from code.google.com using their "Export to Github" tool and then all commits from google/libkml and rashadkm/libkml were merged. All issues and wiki from code.google.com have also been imported, thanks to GoogleCodeExporter tool. The primary motivation for the fork is the lack of alternatives to the libkml library. Most of the open source GIS projects uses this library for processing kml/kmz filesnotably GDAL, OSSIM, OTB and osgEarth. The development of the libkml project has been shelved by Google without any publicly stated reason so far. Contacting the libkml maintainers on code.google.com failed to get a response. Google copied the project from code.google.com to GitHub and the GitHub repository was a little more active in terms of commits for a short while. Via the GitHub issue https://github.com/google/libkml/issues/4 another attempt to get feedback from Google was made, but other than the discussion between Bas Couwenberg and Rashad and a comment by Simon there was no response from anybody else. Because of that the decision was made to attempt to revitalize the libkml project with a fork on GitHub. At this point, the github way or forking from google/libkml and sending back a Pull Requests would also result in no effect. libkml-1.3.0/bactrian128.png000066400000000000000000000231161263603257100155210ustar00rootroot00000000000000PNG  IHDRmiigAMA7 AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYs  iTXtXML:com.adobe.xmp 2013-11-12T22:11:95 Adobe ImageReady 1 72 5 1 72 400 1 342 nIDATx ]UyoI !TZA4XZV;J)J[jqŶ8T,Qad|d%X(-j"![ ͽ^ӕ}}|{=kǹwP,;#ו QItb= *+T(^OxxSd~="0weGm\|ʕڵc=ܐ obb3 7W߿)v8x6s  qjRB ct, !BEµBx9"#Cς?dɒH(O7fpBY*ZΑZcr=4"骫c9q`/83Z2ֹQ!kV1~HrȇbGNQ8(O@MUݼ~e'l(m@d):#hpTՁjd]>V?o޼  wV XQ4]'ZFעԵԹ׮;Y?srhdP:);/^|~ƷNHbJ*XבVy:#w/?w 'yp#NDC###5_M+:OZ}jaOV?εvZt;.-MW' IQ9R}On\xp8˖-[5@0+!۸y?rM<d] xUw)!:{=~}>On~.G6_~Z8WIBCۜ 8&`0jFK CPա ҭ{Lb!.'ѺGVhq| .#; ,8BT@60ůFdҴƹ-U!s$а#ġAds^ꂽ. p EP͢KB8i[fW_g??ZhG]}AoU8|[NcB²fk0cN` zvjϓCœmo"8ghKD)kEh"UB [P"eneϊ  ߈e)XNpоI0MB4@ZG Qj週:bݻw_78̞>1(Kد oV̋`llzuWӥ %d2YzMeF3ǟk?bFJG Dѷ5&nX),Fۋhs]m${K52c-oל@_|HS@ _-\iv5EggjZU#MsiҔBW&&dx<\,D΀` ֯`$!I4wgEЌĮiU`l~KQ2\/Sdrt0$j2!^8i4#.06F?]x]N8_.3@{`Aޫ QJ?8 iyq[8AHT%2Ŋ<"B[! ~Bv&2|6oP?.vT9Qy]P16}+@{ 'ecI#Cb|^T\}H— |?SuSD~Pe;)8IX})b.v_pnQ`@74ޅAV `SKb;)g  `hg?+3⒢ !ppdk;m<8pz/&e&6&rp4#zѸ%2V7W1^"l㍞`G S pz!Tzx@!Ɇ=#/* IO0[㥅pxXE4`}W,= ྫྷ5[H!e,eË+QNe}??p-gȲ8kJlWčfyN\xUTEg<³Ѷ N6+ն-yrw_!z #Zc/j 46S>(+Nk~ aCѯHpǡxݠh04_j%Bbr x)#LN,]OijM)Ï$XSNGIY|OF %ʥN'`8s66zO*ͤ z<%=UK@\-$F(l4)1ȯ-wP.-iű28>#!v EA<:6~LP(6nRX._H񘢥#e)>*_HTf @{r67哨ѣuNq5'Ck- nVmxH)60SpvP%\+4Bh.%6A_ gkz#:yΩvj`dmgYvgV.?>&ubHa!`>`U]EN>כ&hWo,uiG-]'ȐNSC0@64ϩ8C hp[z tָ&P̢8EWbuXx4+VtY[fs 2My2%{_0|\{g8'*ysB<#ggLJez%,y|6dRzhdF𑟃I߯sO; `)P~9`WVqkțF*u8E`F68Fpvs;hnKU TgBrAQ'NCXtZSexxFɀܪ2lt߹mFqVpTƮvl6fW!\p y˫zN$QHa3`%i‘F2{vrn4;*H& g=lMuPKa7nF̆KNɰ&MgNTZn55PpA;V[|#V0;@Zh98ϣp4;bx' TY;t8}w}<Ceծ퀯cK\ۑbszqP Csx쀢 m>|02q_޵S|zUy/G-8h J;! N ?CLfZY6 v Gcg!ACVeXs^WnOO D6|I-0X}>6R(:ǒA7*M4~g2ߩ+^pM(J%;cm:s2czWC;-t~8_hѫE !R(Go_!kuh3BXc¹jYQ/ˀq>{;1 4+EmUgV[iFa0<_1Lo ߨ'idXi'3&oW8*FL S#[2R[+2:xK-Ib/~.SZi85F6NR0Y|1BV Q6fS'8Gc'UgNƵ#3vc9);%jV=2cBUN+ཊysrռO{(dhllm]b@P Be>(FK\`S).qbYF#t~^@2őJݤ|JyܷUwTWyd(5`, o;Cu$k^plߋpv/(|B;y7U8;$D?s1";xB3 ?(X; $<=/N%+²ch\<5"h 5?)RP_NXqU}q{Z&GͷTz#> z1߇izh0&.PGzq߯:w!pB Oٙ6 s@eƑ {oW̃aO"P~<#s#xܩ?ѾE䙟;[|)]#>496bh%|)ʏC8B޴~+U ce~3ç Open File command to load a file. You may also supply a file # (local filesystem or over http) to open on the command line as # ./domviewer.py input.kml import os import sys import tempfile import urllib2 import zipfile from idlelib.TreeWidget import TreeItem, TreeNode from Tkinter import * from tkFileDialog import askopenfilename from tkSimpleDialog import askstring from tkMessageBox import showwarning import kmldom class DomTreeItem(TreeItem): def __init__(self, element): self.__element = element if element.has_name(): self.__name = element.get_name() elif element.IsA(kmldom.Type_Document): self.__name = 'Unnamed Document' elif element.IsA(kmldom.Type_Folder): self.__name = 'Unnamed Folder' elif element.IsA(kmldom.Type_Placemark): self.__name = 'Unnamed Placemark' elif element.IsA(kmldom.Type_ScreenOverlay): self.__name = 'Unnamed ScreenOverlay' elif element.IsA(kmldom.Type_PhotoOverlay): self.__name = 'Unnamed PhotoOverlay' elif element.IsA(kmldom.Type_GroundOverlay): self.__name = 'Unnamed GroundOverlay' elif element.IsA(kmldom.Type_NetworkLink): self.__name = 'Unnamed NetworkLink' else: self.__name = 'Unknown Feature' def GetText(self): return self.__name def GetSubList(self): container = kmldom.AsContainer(self.__element) if container: size = container.get_feature_array_size() if size == 0: return child_list = [] for i in range(container.get_feature_array_size()): child_list.append(container.get_feature_array_at(i)) children = [DomTreeItem(child) for child in child_list] return children def IsExpandable(self): container = kmldom.AsContainer(self.__element) if container: return container.get_feature_array_size() > 0 return False class DomViewer: def __init__(self, root): self.__root = root self.__yscrollbar = Scrollbar(self.__root) self.__yscrollbar.pack(side=RIGHT, fill=Y) self.__canvas = Canvas(self.__root, yscrollcommand=self.__yscrollbar.set) self.__canvas.pack(fill=BOTH, expand=YES) self.__yscrollbar.config(command=self.__canvas.yview) self.__filetypes = [('KML or KMZ files', '*.km*')] self.__CreateMenus() def __CreateMenus(self): self.__app_menu = Menu(self.__root) self.__root.config(menu=self.__app_menu) self.__filemenu = Menu(self.__app_menu) self.__app_menu.add_cascade(label='File', menu=self.__filemenu) self.__filemenu.add_command(label='Open File...', command=self.__OpenFile) self.__filemenu.add_command(label='Open URL...', command=self.__OpenURL) self.__filemenu.add_command(label='Quit', command=self.__Quit) def __SetDom(self, dom): item = DomTreeItem(dom) node = TreeNode(self.__canvas, None, item) node.update() node.expand() def __GetRootFeature(self, element): kml = kmldom.AsKml(element) if kml: if kml.has_feature(): return kml.get_feature() else: return None feature = kmldom.AsFeature(element) if feature: return feature return None def __ReadKmlFromKmz(self, filename): if not zipfile.is_zipfile(filename): showwarning('Error', '%s is not a valid KMZ file' % filename) return None zfile = zipfile.ZipFile(filename, 'r') if 'doc.kml' in zfile.namelist(): kml = zfile.read('doc.kml') else: kml = zfile.read(zfile.namelist()[0]) if not kml: showwarning('Error', 'Failed reading KML from KMZ') return None return kml def LoadFile(self, filename): # Public, can be called indirectly from command line. if zipfile.is_zipfile(filename): kml = self.__ReadKmlFromKmz(filename) else: kml = open(filename).read() # consume the entire file dom = self.__GetRootFeature(kmldom.ParseKml(kml)) if dom is None: showwarning('Bad KML', 'The KML data could not be parsed') return self.__SetDom(dom) def __OpenFile(self): f = askopenfilename(parent=self.__root, filetypes=self.__filetypes) if not f: return try: self.LoadFile(f) except IOError: showwarning('OpenFile', 'Cannot open the file') return def LoadUrl(self, url): # Public, can be called indirectly from command line. response = urllib2.urlopen(url).read() (fd, name) = tempfile.mkstemp() os.write(fd, response) os.close(fd) self.LoadFile(name) os.unlink(name) def __OpenURL(self): f = askstring('Open URL', 'URL', parent=self.__root, initialvalue='http://') if not f: return try: self.LoadUrl(f) except: showwarning('OpenUrl', 'Cannot open the URL: %s' %f) return def __Quit(self, event=None): self.__root.quit() def main(argv): if len(argv) > 2: print 'usage: %s kmlfile' % argv[0] sys.exit(1) root = Tk() app = DomViewer(root) if (len(argv) == 2): if argv[1].startswith('http://'): try: app.LoadUrl(argv[1]) except: pass else: try: app.LoadFile(argv[1]) except: pass root.mainloop() if __name__ == '__main__': main(sys.argv) libkml-1.3.0/examples/engine/000077500000000000000000000000001263603257100160555ustar00rootroot00000000000000libkml-1.3.0/examples/engine/CMakeLists.txt000066400000000000000000000017361263603257100206240ustar00rootroot00000000000000build_example( NAME balloonwalker DEPENDS kmlengine) build_example( NAME clone DEPENDS kmlengine) build_example( NAME csv2kml DEPENDS kmlconvenience) build_example( NAME csvinfo DEPENDS kmlconvenience) build_example( NAME import DEPENDS kmlengine) build_example( NAME inlinestyles DEPENDS kmlengine) build_example( NAME kmlfile DEPENDS kmlengine) build_example( NAME kml2kmz DEPENDS kmlengine) build_example( NAME kmzchecklinks DEPENDS kmlengine) build_example( NAME oldschema DEPENDS kmlengine) build_example( NAME parsebig DEPENDS kmlengine) build_example( NAME printstyle DEPENDS kmlengine) build_example( NAME change DEPENDS kmlconvenience) build_example( NAME splitstyles DEPENDS kmlconvenience) build_example( NAME streamkml DEPENDS kmlconvenience) if(INSTALL_EXAMPLES) file(GLOB eg_files "${CMAKE_CURRENT_SOURCE_DIR}/*.cc") install(FILES ${eg_files} DESTINATION examples/engine) endif(INSTALL_EXAMPLES) libkml-1.3.0/examples/engine/balloonwalker.cc000066400000000000000000000073761263603257100212350ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This example program that takes as its only argument a KML or KMZ file, // then walks through all contained Features, computing the markup required // to display the description balloon for each feature. #include #include "boost/scoped_ptr.hpp" #include "kml/base/file.h" #include "kml/dom.h" #include "kml/engine.h" using kmldom::BalloonStylePtr; using kmldom::DocumentPtr; using kmldom::ElementPtr; using kmldom::KmlFactory; using kmldom::PlacemarkPtr; using kmldom::SerializePretty; using kmldom::SnippetPtr; using kmldom::StylePtr; using kmlengine::CreateBalloonText; using kmlengine::FeatureVisitor; using kmlengine::GetRootFeature; using kmlengine::KmlFile; using kmlengine::KmlFilePtr; using kmlengine::VisitFeatureHierarchy; using std::cout; using std::cerr; using std::endl; // The FeatureVisitor class implements the mechanism to walk a Feature // hierarchy. This subclass calls CreateBalloonText on each Feature and prints // the composited text to stdout. class FeatureBalloonPrinter : public FeatureVisitor { public: FeatureBalloonPrinter(const KmlFilePtr& kml_file) : kml_file_(kml_file) {} // The callback from VisitFeatureHierarchy. virtual void VisitFeature(const kmldom::FeaturePtr& f) { std::string fname = f->has_name() ? f->get_name() : "Unnamed feature"; cout << "Feature balloon text for " << fname << endl; cout << CreateBalloonText(kml_file_, f) << endl << endl; } private: const KmlFilePtr kml_file_; }; void VisitFeatureBalloons(const KmlFilePtr& kml_file) { FeatureBalloonPrinter feature_balloon_printer(kml_file); VisitFeatureHierarchy(GetRootFeature(kml_file->get_root()), feature_balloon_printer); } int HandleFile(const char* filename) { std::string file_data; if (!kmlbase::File::ReadFileToString(filename, &file_data)) { cerr << "error: read of " << filename << " failed" << endl; return 1; } std::string errors; KmlFilePtr kml_file = KmlFile::CreateFromParse(file_data, &errors); if (!kml_file || !errors.empty()) { cerr << "parse failed: " << errors << endl;; return 1; } VisitFeatureBalloons(kml_file); return 0; } int main(int argc, char** argv) { if (argc != 2) { std::cerr << "usage: " << argv[0] << " kmlfile" << endl; return -1; } return HandleFile(argv[1]); } libkml-1.3.0/examples/engine/change.cc000066400000000000000000000060621263603257100176150ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program shows basic ProcessUpdate() with . #include #include "kml/convenience/convenience.h" #include "kml/dom.h" #include "kml/engine.h" using kmldom::ChangePtr; using kmldom::FolderPtr; using kmldom::KmlFactory; using kmldom::KmlPtr; using kmldom::PlacemarkPtr; using kmldom::UpdatePtr; using kmlengine::KmlFile; using kmlengine::KmlFilePtr; static void HelloUpdateChange() { // This is the same KML as in the kmlfile.cc example. KmlFactory* kml_factory = KmlFactory::GetFactory(); FolderPtr folder = kml_factory->CreateFolder(); folder->set_id("f0"); folder->set_name("Folder 0"); PlacemarkPtr placemark = kml_factory->CreatePlacemark(); placemark->set_id("pm0"); placemark->set_name("Placemark 0"); folder->add_feature(placemark); placemark = kml_factory->CreatePlacemark(); placemark->set_id("pm1"); placemark->set_name("Placemark 1"); folder->add_feature(placemark); KmlPtr kml = kml_factory->CreateKml(); kml->set_feature(folder); // Importing to a KmlFile creates an internal database of object id mappings. KmlFilePtr kml_file = KmlFile::CreateFromImport(kml); ChangePtr change = kml_factory->CreateChange(); placemark = kmlconvenience::CreatePointPlacemark("new name", 38, -120); placemark->set_targetid("pm0"); change->add_object(placemark); UpdatePtr update = kml_factory->CreateUpdate(); update->add_updateoperation(change); kmlengine::ProcessUpdate(update, kml_file); std::string xml; kml_file->SerializeToString(&xml); std::cout << xml; } int main(int argc, char** argv) { HelloUpdateChange(); return 0; } libkml-1.3.0/examples/engine/clone.cc000066400000000000000000000066501263603257100174730ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program makes some basic use of the KML Engine Clone() function. // Since element is shared in XML the Clone() function provides away to use the // same element data with multiple parents. Note that Clone() is a "deep" // clone: all simple and complex elements are cloned. #include #include "kml/dom.h" #include "kml/engine.h" // This function creates a Region with a LatLonAltBox of the specified bounds // and a Lod with the specified minLodPixels. kmldom::RegionPtr CreateRegionLatLonAltBoxLod(double north, double south, double east, double west, double minlodpixels) { kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::LatLonAltBoxPtr latlonaltbox = factory->CreateLatLonAltBox(); latlonaltbox->set_north(north); latlonaltbox->set_south(south); latlonaltbox->set_east(east); latlonaltbox->set_west(west); kmldom::LodPtr lod = factory->CreateLod(); lod->set_minlodpixels(minlodpixels); kmldom::RegionPtr region = factory->CreateRegion(); region->set_latlonaltbox(latlonaltbox); region->set_lod(lod); return region; } void HelloClone() { kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); // Create a Container and some Features. kmldom::FolderPtr folder = factory->CreateFolder(); kmldom::PlacemarkPtr pm0 = factory->CreatePlacemark(); kmldom::PlacemarkPtr pm1 = factory->CreatePlacemark(); // Create a Region with LatLonAltBox and Lod. kmldom::RegionPtr region = CreateRegionLatLonAltBoxLod(1, 2, 3, 4, 100); // Create a clone of this Region for each Placemark. pm0->set_region(kmldom::AsRegion(kmlengine::Clone(region))); pm1->set_region(kmldom::AsRegion(kmlengine::Clone(region))); folder->add_feature(pm0); folder->add_feature(pm1); // Print the resulting XML. std::cout << kmldom::SerializePretty(folder); } int main(int argc, char** argv) { HelloClone(); return 0; } libkml-1.3.0/examples/engine/csv2kml.cc000066400000000000000000000110451263603257100177460ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This creates a KML file from a CSV file whose first row is a schema such as: // name,latitude,longitude,description,a,b,c // And each of whose lines look like: // hello,37.1,-111.123,how are you,1,2,3 // A Point Placemark is created for each line in the CSV file. This example // prints an error for and drops each line not exactly matching the schema. // For very very large CSV files see: examples/regionator/csvregionator.cc. // For very very large KML files see: streamkml.cc. #include #include #include "kml/base/csv_splitter.h" #include "kml/base/file.h" #include "kml/base/string_util.h" #include "kml/convenience/csv_parser.h" #include "kml/convenience/convenience.h" #include "kml/dom.h" #include "kml/engine.h" using kmlbase::File; using kmlconvenience::CreatePointPlacemark; using kmlconvenience::CsvParser; using kmlconvenience::CsvParserHandler; using kmlconvenience::CsvParserStatus; using kmldom::ContainerPtr; using kmldom::FolderPtr; using kmldom::KmlFactory; using kmldom::KmlPtr; using kmldom::PlacemarkPtr; using kmlengine::KmlFile; using kmlengine::KmlFilePtr; // This CsvParserHandler saves all "OK" Placemarks to the passed Container. class ContainerSaver : public CsvParserHandler { public: ContainerSaver(ContainerPtr container) : container_(container) { } virtual bool HandleLine(int line, CsvParserStatus status, PlacemarkPtr p) { if (status == kmlconvenience::CSV_PARSER_STATUS_OK) { container_->add_feature(p); } else { if (line == 1 && status == kmlconvenience::CSV_PARSER_STATUS_NO_LAT_LON) { std::cerr << "Schema line must have both \"latitude\" and " << "\"longitude\"." << std::endl; } else { std::cerr << "Error on line " << line << std::endl; } } return true; } private: ContainerPtr container_; }; int main(int argc, char** argv) { if (argc != 3) { std::cerr << "usage: " << argv[0] << " input.csv output.kml" << std::endl; return 1; } std::string csv_data; if (!kmlbase::File::ReadFileToString(argv[1], &csv_data)) { std::cerr << "Read failed: " << argv[1] << std::endl; return 1; } kmlbase::CsvSplitter csv_splitter(csv_data); // Create a and a ContainerSaver to write to it. FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ContainerSaver container_saver(folder); // Call the CsvParser in strict mode to convert each line of CSV data into // a Placemark saved into the supplied Folder. if (!kmlconvenience::CsvParser::ParseCsv(&csv_splitter, &container_saver)) { std::cerr << "ParseCsv failed: " << argv[1] << std::endl; return 1; } std::cout << "Feature count " << folder->get_feature_array_size() << std::endl; // Import to kmlengine::KmlFile to get a nice xml header and xml namespace on // the root element. kmldom::KmlPtr kml = kmldom::KmlFactory::GetFactory()->CreateKml(); kml->set_feature(folder); KmlFilePtr kml_file = KmlFile::CreateFromImport(kml); std::string xml; kml_file->SerializeToString(&xml); return File::WriteStringToFile(xml, argv[2]) ? 1 : 0; } libkml-1.3.0/examples/engine/csvinfo.cc000066400000000000000000000066031263603257100200400ustar00rootroot00000000000000// Copyright 2010, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program parses the given CSV file and prints out some basic info. #include #include #include "kml/base/csv_splitter.h" #include "kml/base/file.h" #include "kml/base/string_util.h" #include "kml/convenience/csv_parser.h" #include "kml/convenience/convenience.h" #include "kml/dom.h" using kmlbase::File; using kmlconvenience::CreatePointPlacemark; using kmlconvenience::CsvParser; using kmlconvenience::CsvParserHandler; using kmlconvenience::CsvParserStatus; using kmldom::ContainerPtr; using kmldom::FolderPtr; using kmldom::KmlFactory; using kmldom::KmlPtr; using kmldom::PlacemarkPtr; // This CsvParserHandler saves all "OK" Placemarks to the passed Container. class CsvInfo : public CsvParserHandler { public: CsvInfo() : good_(0), bad_(0) { } virtual bool HandleLine(int line, CsvParserStatus status, PlacemarkPtr p) { if (status == kmlconvenience::CSV_PARSER_STATUS_OK) { ++good_; } else { ++bad_; } return true; } unsigned int get_good() const { return good_; } unsigned int get_bad() const { return bad_; } private: unsigned int good_; unsigned int bad_; }; int main(int argc, char** argv) { if (argc != 2) { std::cerr << "usage: " << argv[0] << "input.csv" << std::endl; return 1; } std::string csv_data; if (!kmlbase::File::ReadFileToString(argv[1], &csv_data)) { std::cerr << "Read failed: " << argv[1] << std::endl; return 1; } kmlbase::CsvSplitter csv_splitter(csv_data); CsvInfo csv_info; // Call the CsvParser in strict mode to convert each line of CSV data into // a Placemark saved into the supplied Folder. if (!kmlconvenience::CsvParser::ParseCsv(&csv_splitter, &csv_info)) { std::cerr << "ParseCsv failed: " << argv[1] << std::endl; return 1; } std::cout << "Good lines " << csv_info.get_good() << std::endl; std::cout << "Bad lines " << csv_info.get_bad() << std::endl; } libkml-1.3.0/examples/engine/import.cc000066400000000000000000000067311263603257100177050ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program shows basic use of KML Engine KmlFile::CreateFromImport(). // KmlFile's GetObjectById() provides an efficient and convenient means to find // an element by its XML ID. #include #include "kml/dom.h" #include "kml/engine.h" using kmldom::FolderPtr; using kmldom::KmlFactory; using kmldom::KmlPtr; using kmldom::PlacemarkPtr; using kmlengine::KmlFile; using kmlengine::KmlFilePtr; static void HelloKmlFileCreateFromImport() { // This is the same KML as in the kmlfile.cc example. KmlFactory* kml_factory = KmlFactory::GetFactory(); FolderPtr folder = kml_factory->CreateFolder(); folder->set_id("f0"); folder->set_name("Folder 0"); PlacemarkPtr placemark = kml_factory->CreatePlacemark(); placemark->set_id("pm0"); placemark->set_name("Placemark 0"); folder->add_feature(placemark); placemark = kml_factory->CreatePlacemark(); placemark->set_id("pm1"); placemark->set_name("Placemark 1"); folder->add_feature(placemark); KmlPtr kml = kml_factory->CreateKml(); kml->set_feature(folder); // Importing to a KmlFile creates an internal database of object id mappings. KmlFilePtr kml_file = KmlFile::CreateFromImport(kml); // Access the 3 Features by their XML Id. Note that GetObjectById() returns // a ObjectPtr, hence the use of the cast to access . FolderPtr folder0 = AsFolder(kml_file->GetObjectById("f0")); std::cout << "Folder 0 name: " << folder0->get_name() << std::endl; PlacemarkPtr placemark0 = AsPlacemark(kml_file->GetObjectById("pm0")); std::cout << "Placemark 0 name: " << placemark0->get_name() << std::endl; PlacemarkPtr placemark1 = AsPlacemark(kml_file->GetObjectById("pm1")); std::cout << "Placemark 1 name: " << placemark1->get_name() << std::endl; // KmlFile's serialize defaults to the OGC KML 2.2 XML namespace and adds // an XML header specifying UTF-8 encoding. std::string xml; kml_file->SerializeToString(&xml); std::cout << xml; } int main(int argc, char** argv) { HelloKmlFileCreateFromImport(); return 0; } libkml-1.3.0/examples/engine/inlinestyles.cc000066400000000000000000000053251263603257100211130ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program shows use of the kmlengine::InlineStyles function which parses // a KML file inlining shared style selectors to features from the root // . See kml/engine/style_inliner.h for details. #include #include "kml/base/file.h" #include "kml/dom.h" #include "kml/engine.h" bool InlineStyles(const char* input_filename, const char* output_filename) { std::string kml_input; if (!kmlbase::File::ReadFileToString(input_filename, &kml_input)) { std::cerr << "read failed: " << input_filename << std::cerr; return false; } std::string errors; kmldom::ElementPtr root = kmlengine::InlineStyles(kml_input, &errors); if (!root) { std::cerr << "parse failed: " << input_filename << std::cerr; std::cerr << "parse failed: " << errors << std::cerr; return false; } std::string kml_output = kmldom::SerializePretty(root); if (!kmlbase::File::WriteStringToFile(kml_output, output_filename)) { std::cerr << "write failed: " << output_filename << std::cerr; return false; } return true; } int main(int argc, char** argv) { if (argc != 3) { std::cerr << "usage: " << argv[0] << " input.kml output.kml" << std::endl; return 1; } return InlineStyles(argv[1], argv[2]) ? 0 : 1; } libkml-1.3.0/examples/engine/kml2kmz.cc000066400000000000000000000054151263603257100177600ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program uses KmzFile::CreateFromKmlFilepath to create a KMZ archive // from a KML file. The file's resources are bundled into the archive if their // location is relative to the directory in which the KML file is located. // A listing of the generated archive is printed at the end. #include #include #include "kml/engine.h" using kmlbase::StringVector; using kmlengine::KmzFile; using kmlengine::KmzFilePtr; static void ListFiles(const std::string& kmz_filepath) { KmzFilePtr kmz(KmzFile::OpenFromFile(kmz_filepath.c_str())); if (!kmz) { return; } StringVector list; kmz->List(&list); StringVector::const_iterator itr; std::cout << "contents:" << std::endl; for (itr = list.begin(); itr != list.end(); ++itr) { std::cout << " " << *itr << std::endl; } } int main(int argc, char** argv) { if (argc != 3) { std::cerr << "usage: " << argv[0] << " input.kml output.kmz" << std::endl; return -1; } const std::string kml_filepath = argv[1]; const std::string kmz_filepath = argv[2]; if (!KmzFile::CreateFromKmlFilepath(kml_filepath, kmz_filepath)) { std::cerr << "could not create KMZ file from " << kml_filepath << std::endl; return -1; } std::cout << "wrote " << kmz_filepath << std::endl; ListFiles(kmz_filepath); return 0; } libkml-1.3.0/examples/engine/kmlfile.cc000066400000000000000000000057331263603257100200170ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program makes some basic use of the KML Engine KmlFile class. // KmlFile's GetObjectById() provides an efficient and convenient means to fine // an element by its XML ID. #include #include "kml/dom.h" #include "kml/engine.h" void HelloKmlFile() { const std::string kKml = "" "" "Folder 0" "" "Placemark 0" "" "" "Placemark 1" "" "" ""; // Parsing into a KmlFile creates an internal database of object id mappings. kmlengine::KmlFilePtr kml_file = kmlengine::KmlFile::CreateFromParse(kKml, NULL); // Access the 3 Features by their XML Id. Note that GetObjectById() returns // a ObjectPtr, hence the use of the cast to access . kmldom::FolderPtr folder0 = AsFolder(kml_file->GetObjectById("f0")); std::cout << "Folder 0 name: " << folder0->get_name() << std::endl; kmldom::PlacemarkPtr placemark0 = AsPlacemark(kml_file->GetObjectById("pm0")); std::cout << "Placemark 0 name: " << placemark0->get_name() << std::endl; kmldom::PlacemarkPtr placemark1 = AsPlacemark(kml_file->GetObjectById("pm1")); std::cout << "Placemark 1 name: " << placemark1->get_name() << std::endl; } int main(int argc, char** argv) { HelloKmlFile(); return 0; } libkml-1.3.0/examples/engine/kmzchecklinks.cc000066400000000000000000000062671263603257100212370ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program checks the KMZ archive for all files the KML references. #include #include #include "boost/scoped_ptr.hpp" #include "kml/dom.h" #include "kml/engine.h" using boost::scoped_ptr; using kmlengine::Href; using kmlengine::KmzFile; int PrintAndCheckLinks(const char* kmz_filename) { // Open the KMZ file. scoped_ptr kmz_file(KmzFile::OpenFromFile(kmz_filename)); if (!kmz_file.get()) { return -1; } // Dig out the KML. std::string kml; if (!kmz_file->ReadKml(&kml)) { return -1; } // Get the links. // TODO engine support for links in and kmlengine::href_vector_t href_vector; if (!kmlengine::GetLinks(kml, &href_vector)) { return -1; } // TODO Model/Alias/targetHref is relative to Model/Link/href. // TODO if Model/Link/href="dir/model.kml" then textures/foo.jpg is // TODO access with Model/ResourceMap/Alias/targetHref="../textures/foo.jpg" // Try to access each relative link within the KMZ. int ret = 0; for (size_t i = 0; i < href_vector.size(); ++i) { std::cout << href_vector[i] << " ... "; Href href(href_vector[i]); if (href.IsRelativePath()) { std::string content; if (!kmz_file->ReadFile(href.get_path().c_str(), &content)) { std::cout << "NO"; ret = -1; } else { std::cout << "yes"; } } else if (href.IsFragmentOnly()) { std::cout << "(fragment only)"; } else { std::cout << "(absolute)"; } std::cout << std::endl; } return ret; } int main(int argc, char** argv) { if (argc != 2) { std::cerr << "usage: " << argv[0] << " file.kmz" << std::endl; return -1; } return PrintAndCheckLinks(argv[1]); } libkml-1.3.0/examples/engine/oldschema.cc000066400000000000000000000070601263603257100203260ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This example uses the kmlengine::SchemaParserObserver and // kmlengine::OldSchemaParserObserver to convert "old-style" to valid // OGC KML 2.2. See kml/engine/parse_old_schema.h for details. #include #include #include "boost/scoped_ptr.hpp" #include "kml/dom.h" #include "kml/engine.h" #include "kml/engine/old_schema_parser_observer.h" #include "kml/engine/schema_parser_observer.h" #include "kml/engine/engine_types.h" #include "kml/base/file.h" using kmlengine::KmzFile; using std::cout; using std::endl; int main(int argc, char** argv) { if (argc != 2) { cout << "usage: " << argv[0] << " kmlfile" << endl; return 1; } // Read the file. std::string file_data; if (!kmlbase::File::ReadFileToString(argv[1], &file_data)) { cout << argv[1] << " read failed" << endl; return 1; } // If the file was KMZ, extract the KML file. std::string kml; if (KmzFile::IsKmz(file_data)) { boost::scoped_ptr kmz_file(KmzFile::OpenFromString(argv[1])); if (!kmz_file.get()) { cout << "Failed opening KMZ file" << endl; return 1; } if (!kmz_file->ReadKml(&kml)) { cout << "Failed to read KML from KMZ" << endl; return 1; } } else { kml = file_data; } // This holds mappings from to SchemaPtr. kmlengine::SchemaNameMap schema_name_map; // This finds all 's in the parse and saves them in schema_name_map. kmlengine::SchemaParserObserver schema_parser_observer(&schema_name_map); // This uses mappings in schema_name_map to convert each "old-style" // instances into an OGC KML 2.2 . kmlengine::OldSchemaParserObserver old_schema_parser_observer( schema_name_map); // Configure the parser with the two observers. kmldom::Parser parser; parser.AddObserver(&schema_parser_observer); parser.AddObserver(&old_schema_parser_observer); std::string errors; kmldom::ElementPtr root = parser.Parse(kml, &errors); if (!root) { cout << errors << endl; return 1; } cout << kmldom::SerializePretty(root); return 0; } libkml-1.3.0/examples/engine/parsebig.cc000066400000000000000000000050661263603257100201670ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program shows basic use of streamed parsing. #include #include #include "boost/scoped_ptr.hpp" #include "kml/dom.h" #include "kml/engine.h" using kmldom::FolderPtr; using kmldom::KmlFactory; using kmldom::KmlPtr; using kmldom::PlacemarkPtr; using kmlengine::KmlStream; using std::cerr; using std::endl; static int HelloKmlStreamCreateFromIstream(const char* filename) { std::ifstream input_file(filename, std::ios_base::in|std::ios_base::binary); if (!input_file.is_open() || !input_file.good()) { cerr << "open failed: " << filename << endl; return 1; } std::string errors; boost::scoped_ptr kml_stream( KmlStream::ParseFromIstream(&input_file, &errors, NULL)); if (!kml_stream.get()) { cerr << "KmlStream::CreateFromIstream failed: " << filename << endl; if (!errors.empty()) { cerr << errors << endl; } return 1; } return 0; } int main(int argc, char** argv) { if (argc != 2) { cerr << "usage: " << argv[0] << "big.kml" << endl; return 1; } return HelloKmlStreamCreateFromIstream(argv[1]); } libkml-1.3.0/examples/engine/printstyle.cc000066400000000000000000000057461263603257100206150ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program makes some basic use of the KML Engine CreateResolvedStyle() // function. For example: // printstyle ../../../examples/kml/polygons2d.kml pm300 #include #include "kml/dom.h" #include "kml/engine.h" #include "kml/base/file.h" // This prints out the normal libkml-1.3.0/examples/kml/altitudemode.kml000066400000000000000000000001611263603257100205560ustar00rootroot00000000000000 absolute libkml-1.3.0/examples/kml/attrs.kml000066400000000000000000000010661263603257100172400ustar00rootroot00000000000000 Placemark 42 Maxlines is 4 2 1 10 1,2,3 libkml-1.3.0/examples/kml/extendeddata.kml000066400000000000000000000036701263603257100205400ustar00rootroot00000000000000 Trail Head Name]]> The length in miles]]> change in altitude]]> __NAME__
__ADDRESS__
__SNIPPET__ __DESCRIPTION__ 1 234 Mount Everest 347.45 10000
libkml-1.3.0/examples/kml/folder.kml000066400000000000000000000006751263603257100173630ustar00rootroot00000000000000 My first Folder libkml-1.3.0/examples/kml/inline-stylemap.kml000066400000000000000000000021771263603257100212210ustar00rootroot00000000000000 inline StyleMap Example of inline StyleMap with inlined Styles normal highlight -95.45175317119345,37.68193012013741,0 libkml-1.3.0/examples/kml/kmlsamples.kml000066400000000000000000001065441263603257100202620ustar00rootroot00000000000000 KML Samples 1 Unleash your creativity with the help of these examples! Placemarks These are just some of the different kinds of placemarks with which you can mark your favorite places -122.0839597145766 37.42222904525232 0 500.6566641072245 40.5575073395506 -148.4122922628044 Simple placemark Attached to the ground. Intelligently places itself at the height of the underlying terrain. -122.0822035425683,37.42228990140251,0 Floating placemark 0 Floats a defined distance above the ground. -122.0839597145766 37.42222904525232 0 500.6566641072245 40.5575073395506 -148.4122922628044 #downArrowIcon relativeToGround -122.084075,37.4220033612141,50 Extruded placemark 0 Tethered to the ground by a customizable "tail" -122.0845787421525 37.42215078737763 0 365.2646606980322 40.55750733918048 -148.4126684946234 #globeIcon 1 relativeToGround -122.0857667006183,37.42156927867553,50 Styles and Markup 0 With KML it is easy to create rich, descriptive markup to annotate and enrich your placemarks -122.0845787422371 37.42215078726837 0 365.2646826292919 40.55750733930874 -148.4126777488172 #noDrivingDirections Highlighted Icon 0 Place your mouse over the icon to see it display the new icon -122.0856552124024 37.4224281311035 0 265.8520424250024 0 0 normal #normalPlacemark highlight #highlightPlacemark Roll over this icon 0 #exampleStyleMap -122.0856545755255,37.42243077405461,0 Descriptive HTML 0
Placemark descriptions can be enriched by using many standard HTML tags.
For example:
Styles:
Italics, Bold, Underlined, Strike Out, subscriptsubscript, superscriptsuperscript, Big, Small, Typewriter, Emphasized, Strong, Code
Fonts:
red by name, leaf green by hexadecimal RGB
size 1, size 2, size 3, size 4, size 5, size 6, size 7
Times, Verdana, Arial

Links:
Google Earth!
or: Check out our website at www.google.com
Alignment:

left

center

right


Ordered Lists:
  1. First
  2. Second
  3. Third
  1. First
  2. Second
  3. Third
  1. First
  2. Second
  3. Third

Unordered Lists:
  • A
  • B
  • C
  • A
  • B
  • C
  • A
  • B
  • C

Definitions:
Google:
The best thing since sliced bread

Centered:
Time present and time past
Are both perhaps present in time future,
And time future contained in time past.
If all time is eternally present
All time is unredeemable.

Block Quote:
We shall not cease from exploration
And the end of all our exploring
Will be to arrive where we started
And know the place for the first time.
-- T.S. Eliot


Headings:

Header 1

Header 2

Header 3

Header 4

Header 5


Images:
Remote image

Scaled image


Simple Tables:
12345
abcde

[Did you notice that double-clicking on the placemark doesn't cause the viewer to take you anywhere? This is because it is possible to directly author a "placeless placemark". If you look at the code for this example, you will see that it has neither a point coordinate nor a LookAt element.]]]>
Ground Overlays 0 Examples of ground overlays Large-scale overlay on terrain 0 Overlay shows Mount Etna erupting on July 13th, 2001. 15.02468937557116 37.67395167941667 0 30350.36838438907 58.31228652890705 -16.5581842842829 http://code.google.com/apis/kml/documentation/etna.jpg 37.91904192681665 37.46543388598137 15.35832653742206 14.60128369746704 -0.1556640799496235 Screen Overlays 0 Screen overlays have to be authored directly in KML. These examples illustrate absolute and dynamic positioning in screen space. Simple crosshairs 0 This screen overlay uses fractional positioning to put the image in the exact center of the screen http://code.google.com/apis/kml/documentation/crosshairs.png Absolute Positioning: Top left 0 http://code.google.com/apis/kml/documentation/top_left.jpg Absolute Positioning: Top right 0 http://code.google.com/apis/kml/documentation/top_right.jpg Absolute Positioning: Bottom left 0 http://code.google.com/apis/kml/documentation/bottom_left.jpg Absolute Positioning: Bottom right 0 http://code.google.com/apis/kml/documentation/bottom_right.jpg Dynamic Positioning: Top of screen 0 http://code.google.com/apis/kml/documentation/dynamic_screenoverlay.jpg Dynamic Positioning: Right of screen 0 http://code.google.com/apis/kml/documentation/dynamic_right.jpg Paths 0 Examples of paths. Note that the tessellate tag is by default set to 0. If you want to create tessellated lines, they must be authored (or edited) directly in KML. Tessellated 0 tag has a value of 1, the line will contour to the underlying terrain]]> -112.0822680013139 36.09825589333556 0 2889.145007690472 62.04855796276328 103.8120432044965 1 -112.0814237830345,36.10677870477137,0 -112.0870267752693,36.0905099328766,0 Untessellated 0 tag has a value of 0, the line follow a simple straight-line path from point to point]]> -112.0822680013139 36.09825589333556 0 2889.145007690472 62.04855796276328 103.8120432044965 0 -112.080622229595,36.10673460007995,0 -112.085242575315,36.09049598612422,0 Absolute 0 Transparent purple line -112.2719329043177 36.08890633450894 0 2569.386744398339 44.60763714063257 -106.8161545998597 #transPurpleLineGreenPoly 1 absolute -112.265654928602,36.09447672602546,2357 -112.2660384528238,36.09342608838671,2357 -112.2668139013453,36.09251058776881,2357 -112.2677826834445,36.09189827357996,2357 -112.2688557510952,36.0913137941187,2357 -112.2694810717219,36.0903677207521,2357 -112.2695268555611,36.08932171487285,2357 -112.2690144567276,36.08850916060472,2357 -112.2681528815339,36.08753813597956,2357 -112.2670588176031,36.08682685262568,2357 -112.2657374587321,36.08646312301303,2357 Absolute Extruded 0 Transparent green wall with yellow outlines -112.2643334742529 36.08563154742419 0 4451.842204068102 44.61038665812578 -125.7518698668815 #yellowLineGreenPoly 1 1 absolute -112.2550785337791,36.07954952145647,2357 -112.2549277039738,36.08117083492122,2357 -112.2552505069063,36.08260761307279,2357 -112.2564540158376,36.08395660588506,2357 -112.2580238976449,36.08511401044813,2357 -112.2595218489022,36.08584355239394,2357 -112.2608216347552,36.08612634548589,2357 -112.262073428656,36.08626019085147,2357 -112.2633204928495,36.08621519860091,2357 -112.2644963846444,36.08627897945274,2357 -112.2656969554589,36.08649599090644,2357 Relative 0 Black line (10 pixels wide), height tracks terrain -112.2580438551384 36.1072674824385 0 2927.61105910266 44.61324882043339 4.947421249553717 #thickBlackLine 1 relativeToGround -112.2532845153347,36.09886943729116,645 -112.2540466121145,36.09919570465255,645 -112.254734666947,36.09984998366178,645 -112.255493345654,36.10051310621746,645 -112.2563157098468,36.10108441943419,645 -112.2568033076439,36.10159722088088,645 -112.257494011321,36.10204323542867,645 -112.2584106072308,36.10229131995655,645 -112.2596588987972,36.10240001286358,645 -112.2610581199487,36.10213176873407,645 -112.2626285262793,36.10157011437219,645 Relative Extruded 0 Opaque blue walls with red outline, height tracks terrain -112.2683594333433 36.09884362144909 0 2184.193522571467 44.60855445139561 -72.24271551768405 #redLineBluePoly 1 1 relativeToGround -112.2656634181359,36.09445214722695,630 -112.2652238941097,36.09520916122063,630 -112.2645079986395,36.09580763864907,630 -112.2638827428817,36.09628572284063,630 -112.2635746835406,36.09679275951239,630 -112.2635711822407,36.09740038871899,630 -112.2640296531825,36.09804913435539,630 -112.264327720538,36.09880337400301,630 -112.2642436562271,36.09963644790288,630 -112.2639148687042,36.10055381117246,630 -112.2626894973474,36.10149062823369,630 Polygons 0 Examples of polygon shapes Google Campus 0 A collection showing how easy it is to create 3-dimensional buildings -122.084120030116 37.42174011925477 0 276.7870053764046 53.454348562403 -34.82469740081282 Building 40 0 #transRedPoly 1 relativeToGround -122.0848938459612,37.42257124044786,17 -122.0849580979198,37.42211922626856,17 -122.0847469573047,37.42207183952619,17 -122.0845725380962,37.42209006729676,17 -122.0845954886723,37.42215932700895,17 -122.0838521118269,37.42227278564371,17 -122.083792243335,37.42203539112084,17 -122.0835076656616,37.42209006957106,17 -122.0834709464152,37.42200987395161,17 -122.0831221085748,37.4221046494946,17 -122.0829247374572,37.42226503990386,17 -122.0829339169385,37.42231242843094,17 -122.0833837359737,37.42225046087618,17 -122.0833607854248,37.42234159228745,17 -122.0834204551642,37.42237075460644,17 -122.083659133885,37.42251292011001,17 -122.0839758438952,37.42265873093781,17 -122.0842374743331,37.42265143972521,17 -122.0845036949503,37.4226514386435,17 -122.0848020460801,37.42261133916315,17 -122.0847882750515,37.42256395055121,17 -122.0848938459612,37.42257124044786,17 Building 41 0 #transBluePoly 1 relativeToGround -122.0857412771483,37.42227033155257,17 -122.0858169768481,37.42231408832346,17 -122.085852582875,37.42230337469744,17 -122.0858799945639,37.42225686138789,17 -122.0858860101409,37.4222311076138,17 -122.0858069157288,37.42220250173855,17 -122.0858379542653,37.42214027058678,17 -122.0856732640519,37.42208690214408,17 -122.0856022926407,37.42214885429042,17 -122.0855902778436,37.422128290487,17 -122.0855841672237,37.42208171967246,17 -122.0854852065741,37.42210455874995,17 -122.0855067264352,37.42214267949824,17 -122.0854430712915,37.42212783846172,17 -122.0850990714904,37.42251282407603,17 -122.0856769818632,37.42281815323651,17 -122.0860162273783,37.42244918858722,17 -122.0857260327004,37.42229239604253,17 -122.0857412771483,37.42227033155257,17 Building 42 0 #transGreenPoly 1 relativeToGround -122.0857862287242,37.42136208886969,25 -122.0857312990603,37.42136935989481,25 -122.0857312992918,37.42140934910903,25 -122.0856077073679,37.42138390166565,25 -122.0855802426516,37.42137299550869,25 -122.0852186221971,37.42137299504316,25 -122.0852277765639,37.42161656508265,25 -122.0852598189347,37.42160565894403,25 -122.0852598185499,37.42168200156,25 -122.0852369311478,37.42170017860346,25 -122.0852643957828,37.42176197982575,25 -122.0853239032746,37.42176198013907,25 -122.0853559454324,37.421852864452,25 -122.0854108752463,37.42188921823734,25 -122.0854795379357,37.42189285337048,25 -122.0855436229819,37.42188921797546,25 -122.0856260178042,37.42186013499926,25 -122.085937287963,37.42186013453605,25 -122.0859428718666,37.42160898590042,25 -122.0859655469861,37.42157992759144,25 -122.0858640462341,37.42147115002957,25 -122.0858548911215,37.42140571326184,25 -122.0858091162768,37.4214057134039,25 -122.0857862287242,37.42136208886969,25 Building 43 0 #transYellowPoly 1 relativeToGround -122.0844371128284,37.42177253003091,19 -122.0845118855746,37.42191111542896,19 -122.0850470999805,37.42178755121535,19 -122.0850719913391,37.42143663023161,19 -122.084916406232,37.42137237822116,19 -122.0842193868167,37.42137237801626,19 -122.08421938659,37.42147617161496,19 -122.0838086419991,37.4214613409357,19 -122.0837899728564,37.42131306410796,19 -122.0832796534698,37.42129328840593,19 -122.0832609819207,37.42139213944298,19 -122.0829373621737,37.42137236399876,19 -122.0829062425667,37.42151569778871,19 -122.0828502269665,37.42176282576465,19 -122.0829435788635,37.42176776969635,19 -122.083217411188,37.42179248552686,19 -122.0835970430103,37.4217480074456,19 -122.0839455556771,37.42169364237603,19 -122.0840077894637,37.42176283815853,19 -122.084113587521,37.42174801104392,19 -122.0840762473784,37.42171341292375,19 -122.0841447047739,37.42167881534569,19 -122.084144704223,37.42181720660197,19 -122.0842503333074,37.4218170700446,19 -122.0844371128284,37.42177253003091,19 Extruded Polygon A simple way to model a building The Pentagon -77.05580139178142 38.870832443487 742.0552506670548 48.09646074797388 59.88865561738225 1 relativeToGround -77.05788457660967,38.87253259892824,100 -77.05465973756702,38.87291016281703,100 -77.05315536854791,38.87053267794386,100 -77.05552622493516,38.868757801256,100 -77.05844056290393,38.86996206506943,100 -77.05788457660967,38.87253259892824,100 -77.05668055019126,38.87154239798456,100 -77.05542625960818,38.87167890344077,100 -77.05485125901024,38.87076535397792,100 -77.05577677433152,38.87008686581446,100 -77.05691162017543,38.87054446963351,100 -77.05668055019126,38.87154239798456,100 Absolute and Relative 0 Four structures whose roofs meet exactly. Turn on/off terrain to see the difference between relative and absolute positioning. -112.3348969157552 36.14845533214919 0 990.6761201087104 49.30695423894192 -86.91235037566909 Absolute 0 #transBluePoly 1 absolute -112.3372510731295,36.14888505105317,1784 -112.3356128688403,36.14781540589019,1784 -112.3368169371048,36.14658677734382,1784 -112.3384408457543,36.14762778914076,1784 -112.3372510731295,36.14888505105317,1784 Absolute Extruded 0 #transRedPoly 1 1 absolute -112.3396586818843,36.14637618647505,1784 -112.3380597654315,36.14531751871353,1784 -112.3368254237788,36.14659596244607,1784 -112.3384555043203,36.14762621763982,1784 -112.3396586818843,36.14637618647505,1784 Relative 0 -112.3350152490417 36.14943123077423 0 345.5169113679813 37.92486261093203 -118.9214100848499 #transGreenPoly 1 relativeToGround -112.3349463145932,36.14988705767721,100 -112.3354019540677,36.14941108398372,100 -112.3344428289146,36.14878490381308,100 -112.3331289492913,36.14780840132443,100 -112.3317019516947,36.14680755678357,100 -112.331131440106,36.1474173426228,100 -112.332616324338,36.14845453364654,100 -112.3339876620524,36.14926570522069,100 -112.3349463145932,36.14988705767721,100 Relative Extruded 0 -112.3351587892382 36.14979247129029 0 401.0997279712519 56.10280503739589 -55.42811560891606 #transYellowPoly 1 1 relativeToGround -112.3348783983763,36.1514008468736,100 -112.3372535345629,36.14888517553886,100 -112.3356068927954,36.14781612679284,100 -112.3350034807972,36.14846469024177,100 -112.3358353861232,36.1489624162954,100 -112.3345888301373,36.15026229372507,100 -112.3337937856278,36.14978096026463,100 -112.3331798208424,36.1504472788618,100 -112.3348783983763,36.1514008468736,100
libkml-1.3.0/examples/kml/lines.kml000066400000000000000000064152241263603257100172300ustar00rootroot00000000000000 Geologic Map of Marin County, CA 1 From USGS Scientific Investigations Map 2918 contacts #khStyle84754 1 -122.585721893393,38.1858473049571,0 -122.585644410362,38.1857929553359,0 -122.585556503179,38.1856889999166,0 -122.585494823827,38.1854905060747,0 -122.585385202212,38.1853143734671,0 -122.585264467809,38.1852103014087,0 -122.585044689036,38.1850788402271,0 -122.584823355957,38.1849699043878,0 -122.584593027341,38.184811367369,0 -122.584502802818,38.1847389467015,0 -122.584411381412,38.1846259654161,0 -122.584304720609,38.18443181728831,0 -122.584269831524,38.1842919993342,0 -122.584289026067,38.1841794112014,0 -122.584327668054,38.1840353484151,0 -122.584327363798,38.1839632472476,0 -122.584281997697,38.1839090108928,0 -122.58421303028,38.1838637031055,0 -122.583908308494,38.183736443945,0 -122.583666388072,38.18360940762871,0 -122.583591737832,38.1835595729854,0 -122.583536103727,38.1834286934266,0 -122.583450215034,38.1833472748728,0 -122.583434317056,38.1833383323323,0 -122.5833050947,38.1832656451818,0 -122.583228838208,38.1832473483726,0 -122.583054125632,38.1832241942132,0 -122.582958098019,38.1832404481718,0 -122.582845538488,38.1832595002691,0 -122.582705280477,38.1833265936221,0 -122.582451856246,38.1834653828257,0 -122.582263989375,38.1834962555804,0 -122.582092156802,38.1834686040237,0 -122.582015238226,38.1834412915501,0 -122.581910160203,38.1833462845094,0 -122.581855596201,38.1832784955622,0 -122.581679677317,38.182966934687,0 -122.581626901582,38.1828360644473,0 -122.581503432652,38.1825877785307,0 -122.581317518198,38.1824023564811,0 -122.581100746556,38.182122192211,0 contacts #khStyle84754 1 -122.576699646341,38.18065532829931,0 -122.577060473052,38.1807016964803,0 -122.577176635539,38.1807291541065,0 -122.577511356891,38.1808475266129,0 -122.57774365677,38.1809069470254,0 -122.578100839436,38.180966817624,0 -122.578701261491,38.1810455887834,0 -122.578937182877,38.1810960073718,0 -122.579164437603,38.1811644193228,0 -122.579714898654,38.181369180672,0 -122.58014560385,38.1815509782227,0 -122.580349818647,38.1816553552034,0 -122.580743900116,38.1818775754231,0 -122.581100746556,38.182122192211,0 contacts #khStyle84754 1 -122.576443007176,38.1806093364363,0 -122.576699646341,38.18065532829931,0 contacts #khStyle84754 1 -122.576081545976,38.1805494452898,0 -122.576443007176,38.1806093364363,0 contacts #khStyle84754 1 -122.575752693819,38.1804040524658,0 -122.576081545976,38.1805494452898,0 contacts #khStyle84754 1 -122.575752693819,38.1804040524658,0 -122.575569314255,38.1802772118371,0 -122.575509841479,38.18019588334171,0 -122.575476850602,38.1801011321858,0 -122.57545862827,38.1799208157553,0 contacts #khStyle84754 1 -122.57545862827,38.1799208157553,0 -122.575454895281,38.17982617080561,0 -122.575503325277,38.1795965275065,0 contacts #khStyle84754 1 -122.575503325277,38.1795965275065,0 -122.57554474958,38.179344327462,0 contacts #khStyle84754 1 -122.57554474958,38.179344327462,0 -122.575539502579,38.17914152682871,0 -122.575462739467,38.1789655041242,0 -122.575293467758,38.1787226474741,0 -122.575245469526,38.1786537833583,0 -122.575035789388,38.1783871523416,0 -122.574767465887,38.1781428390043,0 contacts #khStyle84754 1 -122.574767465887,38.1781428390043,0 -122.574451576311,38.1779794646168,0 contacts #khStyle84754 1 -122.574148984183,38.1778612003864,0 -122.574451576311,38.1779794646168,0 contacts #khStyle84754 1 -122.574148984183,38.1778612003864,0 -122.574032113777,38.1778337371893,0 -122.573808494504,38.1777563160425,0 -122.573567487362,38.1777238936504,0 -122.573446865765,38.177727960001,0 -122.573211094848,38.1777766686258,0 -122.572983755246,38.1778479388537,0 -122.572772696198,38.1779417994079,0 -122.572563815963,38.1779835362874,0 -122.5724183376,38.1780126044328,0 -122.57219102284,38.17807936695181,0 -122.571970024598,38.178164177179,0 -122.571855666421,38.17819530236321,0 -122.571611488096,38.1782169394389,0 -122.571490944701,38.178207485291,0 -122.571394953364,38.178148552172,0 -122.57131690732,38.1780716597266,0 -122.571257441012,38.1779903290892,0 -122.571221575855,38.1779000724408,0 -122.571202889534,38.1778008662543,0 -122.571198051527,38.1776521420038,0 -122.571217898622,38.17755307709851,0 -122.571320466655,38.1773416589856,0 -122.571353131512,38.177247147294,0 -122.571412541412,38.1770941522509,0 -122.571415446854,38.1769634814024,0 -122.571388250357,38.1768552315239,0 -122.571276244346,38.1767286457243,0 -122.571227693766,38.1766113050023,0 -122.571199598173,38.1764129266003,0 -122.571173802942,38.1763091880603,0 contacts #khStyle84754 1 -122.573172535925,38.1763300889356,0 -122.573338527784,38.1762359930995,0 contacts #khStyle84754 1 -122.573338527784,38.1762359930995,0 -122.57340258263,38.1761439830263,0 -122.573545053412,38.1759393332694,0 contacts #khStyle84754 1 -122.572200988444,38.1758803120989,0 -122.572198820207,38.1758893537637,0 -122.57220468956,38.1759840066831,0 -122.572222546853,38.176026191654,0 -122.572244810091,38.1760787848861,0 -122.572307130238,38.1761601254859,0 -122.572388769464,38.1762325241746,0 -122.572599433201,38.1763279257169,0 -122.572632991463,38.1763386641138,0 -122.572713393824,38.1763643922255,0 -122.572831714823,38.1763873557732,0 -122.572952281704,38.176392302366,0 -122.573093673437,38.17637479356121,0 -122.573172535925,38.1763300889356,0 contacts #khStyle84754 1 -122.573545053412,38.1759393332694,0 -122.574109374167,38.1753465634484,0 contacts #khStyle84754 1 -122.572543403487,38.1744350917458,0 -122.572534620976,38.174595297731,0 -122.572530613846,38.1746683934594,0 -122.572519445917,38.1748721114475,0 -122.572432484446,38.1753449508613,0 -122.572364331208,38.1755294583244,0 -122.572259125014,38.1757048177044,0 -122.572221493395,38.1757948052511,0 -122.572200988444,38.1758803120989,0 contacts #khStyle84754 1 -122.572543403487,38.1744350917458,0 -122.57249783806,38.1742952311082,0 -122.572436495849,38.1741688315541,0 -122.572367860534,38.1740694428642,0 contacts #khStyle84754 1 -122.570386764832,38.1747200961562,0 -122.570496678113,38.1744726555553,0 -122.570603974509,38.17430631791961,0 -122.570750594178,38.1740049366963,0 -122.570876600617,38.1739332989424,0 -122.571045974683,38.1738888576894,0 -122.571259430032,38.1738716153669,0 -122.571647914464,38.1738189637755,0 -122.571769930488,38.1738194106188,0 -122.571888273445,38.1738378689337,0 -122.572111878823,38.173915293698,0 -122.572367860534,38.1740694428642,0 contacts #khStyle84754 1 -122.574109374167,38.1753465634484,0 -122.574225566972,38.1751216735213,0 -122.574279790935,38.17500020189261,0 -122.574280314784,38.1749100785875,0 -122.574254541911,38.174801834507,0 -122.574200940556,38.1746934890994,0 -122.57414078639,38.1746076511082,0 -122.573976768442,38.1744673596367,0 -122.57383925731,38.1743091394855,0 -122.573779817424,38.1742233039088,0 -122.573727513149,38.1741374943106,0 -122.57356977736,38.1737764183587,0 -122.57353380127,38.17358251793,0 -122.573607385191,38.1731997539953,0 -122.57361889083,38.17281676367441,0 -122.573619546599,38.1727041095106,0 -122.573575249829,38.1725912914459,0 -122.573468424845,38.1724331827067,0 -122.573343494759,38.17219840135461,0 -122.573317614361,38.17198651259061,0 -122.573310049501,38.1718152470044,0 -122.573438337688,38.1714732389988,0 -122.573475934242,38.1712660880117,0 -122.573492313834,38.1711489848998,0 -122.573577479572,38.1709825637089,0 -122.573749058917,38.1708029386408,0 -122.573894289857,38.1706142047907,0 -122.573940740973,38.1704791861044,0 -122.573995806455,38.1703351862465,0 -122.574015353488,38.1701640194066,0 -122.574025231783,38.1700604113076,0 -122.574062112426,38.1698532574681,0 -122.574244829342,38.1694753965425,0 -122.574309064233,38.1693494549489,0 -122.57433696278,38.169214368542,0 -122.574346153168,38.1691062516287,0 -122.574365803761,38.1689170600067,0 -122.574375629019,38.168822464192,0 -122.574402682846,38.1687099060095,0 -122.574517149233,38.1685345781443,0 -122.574725979057,38.1683280494685,0 -122.574807152791,38.1682337130266,0 -122.574871333323,38.168116783427,0 -122.575017157285,38.16782440611021,0 -122.575045924251,38.1676622850515,0 -122.57502844538,38.1674774646159,0 -122.574984123371,38.1673691531592,0 -122.574912689218,38.1672607431445,0 -122.574814038432,38.1671702592098,0 -122.57473367677,38.1671249043626,0 -122.574571873926,38.1670972783108,0 -122.574346257406,38.1671234950075,0 -122.574220076297,38.1671050106429,0 -122.573941021365,38.1669958440049,0 -122.573761722978,38.166909571635,0 -122.573628407615,38.1668910606352,0 -122.573455431324,38.1669445051133,0 -122.57331067898,38.1670521275061,0 -122.573183233492,38.1671282690123,0 -122.573075261774,38.1671684313334,0 -122.572966760317,38.1671770477558,0 -122.572841161591,38.1671810953689,0 -122.572741379524,38.1671627058301,0 -122.572616227687,38.167090148307,0 -122.572265903192,38.166845529248,0 -122.571966477297,38.1666822082241,0 -122.571753701402,38.1665867977373,0 -122.571394558634,38.1665088756525,0 contacts #khStyle84754 1 -122.568965300144,38.1658735773259,0 -122.569096657553,38.1658605425335,0 -122.569292860916,38.1658612652028,0 -122.569317714381,38.1658622968996,0 -122.569411983389,38.1658662100696,0 -122.569560992073,38.16588478360541,0 -122.569647196218,38.1659173886413,0 -122.569681303355,38.1659302889752,0 -122.569776564032,38.1659892208806,0 -122.569946289439,38.1661250330636,0 -122.57012674397,38.1662563781671,0 -122.57032947533,38.1663607672318,0 -122.57043765884,38.1664062272732,0 -122.570551603091,38.16644269583391,0 -122.570669194034,38.1664656588707,0 -122.571033646713,38.1664895274477,0 -122.571394558634,38.1665088756525,0 contacts #khStyle84754 1 -122.5686885573,38.1657373691405,0 -122.568965300144,38.1658735773259,0 contacts #khStyle84754 1 -122.568393530846,38.1655560301681,0 -122.5686885573,38.1657373691405,0 contacts #khStyle84754 1 -122.56797318344,38.165090332807,0 -122.568248701147,38.165433826441,0 -122.568393530846,38.1655560301681,0 contacts #khStyle84754 1 -122.56797318344,38.165090332807,0 -122.567931567625,38.1650090662774,0 -122.56788593689,38.1648827222271,0 -122.567841126071,38.1647383561168,0 contacts #khStyle84754 1 -122.56788486349,38.1645807983473,0 -122.567874662538,38.1646168108006,0 -122.567841126071,38.1647383561168,0 contacts #khStyle84754 1 -122.56802219965,38.1642793857061,0 -122.56788486349,38.1645807983473,0 contacts #khStyle84754 1 -122.568116541859,38.1640093580195,0 -122.56802219965,38.1642793857061,0 contacts #khStyle84754 1 -122.56937800661,38.1633921440017,0 -122.569252573102,38.163369150794,0 -122.568968649429,38.1633635985829,0 -122.568836503466,38.1633901491497,0 -122.568618240217,38.1635020010929,0 -122.568273586984,38.1637530805021,0 -122.568180281321,38.1638473677024,0 -122.568116541859,38.1640093580195,0 contacts #khStyle84754 1 -122.566553052946,38.1599569448234,0 -122.567197650687,38.1601350761944,0 -122.567986516585,38.1604083686371,0 -122.568393952447,38.1605180232287,0 -122.56864924894,38.1605369900469,0 -122.569193929153,38.1604804158818,0 -122.569430554888,38.1604513075448,0 -122.569585171564,38.1604322872202,0 -122.569849637402,38.1603476409349,0 -122.570045667892,38.1602537299737,0 -122.570182643284,38.1601325640633,0 -122.570311083722,38.1600068603648,0 -122.570429694722,38.1599757521259,0 -122.570600041289,38.1600034152331,0 -122.570718864052,38.1600579266383,0 -122.570890967632,38.1601843984153,0 -122.570946892785,38.1602254953415,0 -122.571132699269,38.1604154401541,0 -122.571242434826,38.1605600431345,0 -122.571377985609,38.1606822092565,0 -122.571623403226,38.1608047776476,0 -122.571793041229,38.1609541057506,0 -122.571910494888,38.1611212677094,0 -122.571899772543,38.1613690733591,0 -122.571846665816,38.1615446235274,0 -122.571736142316,38.16177854496491,0 -122.5715645793,38.1619581674769,0 -122.571376870113,38.1620926678629,0 -122.57111200411,38.1622449101299,0 -122.570771090753,38.1624689730601,0 -122.570659240592,38.1625631942102,0 -122.570573364758,38.1627296109275,0 -122.570444629409,38.1629048827205,0 -122.570316289796,38.1630125617823,0 -122.569915124015,38.1632904760477,0 -122.569803377333,38.163366671668,0 -122.569633419179,38.1633930840535,0 -122.56937800661,38.1633921440017,0 contacts #khStyle84754 1 -122.566276596769,38.1598973385612,0 -122.566553052946,38.1599569448234,0 contacts #khStyle84754 1 -122.565934461278,38.1597248311737,0 -122.56611864684,38.1598246524622,0 -122.566276596769,38.1598973385612,0 contacts #khStyle84754 1 -122.565612302745,38.1595523969757,0 -122.565934461278,38.1597248311737,0 contacts #khStyle84754 1 -122.565237741004,38.1583523372498,0 -122.56532321464,38.1583751862547,0 -122.56538879345,38.1583844424669,0 -122.565428476345,38.15842965261551,0 -122.56538793841,38.1585286399871,0 -122.565347980148,38.1586501608548,0 contacts #khStyle84754 1 -122.565001348912,38.1582748518007,0 -122.564882185529,38.1582789148822,0 -122.564823027415,38.1582696822739,0 -122.564816080769,38.1582381125279,0 -122.564849110852,38.1582021852286,0 -122.56494883406,38.1581079244427,0 contacts #khStyle84754 1 -122.564404019497,38.1577093450124,0 -122.564592906578,38.1577370858598,0 -122.564669845406,38.1577553972998,0 -122.564731196771,38.1577556256014,0 -122.564779814179,38.1577377814056,0 contacts #khStyle84754 1 -122.564519652889,38.1572185918531,0 -122.56444613811,38.1573444937847,0 -122.564385222988,38.1575109990384,0 -122.564404019497,38.1577093450124,0 contacts #khStyle84754 1 -122.564519652889,38.1572185918531,0 -122.564509202573,38.1570563271337,0 -122.564434146483,38.1569614159623,0 contacts #khStyle84754 1 -122.564434146483,38.1569614159623,0 -122.564414020794,38.1568667092948,0 -122.564376033915,38.1567764423826,0 -122.56429471859,38.156654470172,0 contacts #khStyle84754 1 -122.56429471859,38.156654470172,0 -122.564304742458,38.1565283318619,0 contacts #khStyle84754 1 -122.564304742458,38.1565283318619,0 -122.564325637372,38.1562535270194,0 contacts #khStyle84754 1 -122.564325637372,38.1562535270194,0 -122.564323373102,38.1561543805732,0 -122.564303961137,38.1560596765329,0 -122.564205616145,38.1558024526125,0 contacts #khStyle84754 1 -122.564205616145,38.1558024526125,0 -122.564235999259,38.1554916329078,0 contacts #khStyle84754 1 -122.564235999259,38.1554916329078,0 -122.564533108979,38.15507365580021,0 -122.564578586109,38.1549836995958,0 -122.564606255885,38.1548891708219,0 -122.564640194469,38.154700033605,0 -122.564643485302,38.1545062760431,0 -122.564611794971,38.1543168945606,0 -122.56451988074,38.1539380253372,0 -122.564502796516,38.1538117860335,0 contacts #khStyle84754 1 -122.564502796516,38.1538117860335,0 -122.564627945558,38.1535193439668,0 -122.564760877881,38.1533576127015,0 -122.564771567751,38.1533480568838,0 -122.564941603662,38.15319605903241,0 -122.565018653373,38.1530746761062,0 -122.565010583119,38.1528718636802,0 -122.564973658475,38.1527230192636,0 -122.564861521358,38.1525063009488,0 -122.564749384894,38.1522895825233,0 -122.564703080696,38.1521587282176,0 -122.564666558384,38.1519422910363,0 -122.564612239013,38.1515996118486,0 -122.564584736198,38.1514099234624,0 -122.564512874921,38.1509142878674,0 contacts #khStyle84754 1 -122.564512874921,38.1509142878674,0 -122.564704090756,38.1499461497797,0 -122.564726051927,38.1498515996486,0 -122.564789920022,38.1496670798499,0 -122.564806174525,38.149572508469,0 -122.564822865749,38.1492841687246,0 -122.56485180793,38.1490950126695,0 -122.564854536201,38.1489958846803,0 -122.564831558834,38.1489011673526,0 -122.564758445356,38.1487206442008,0 -122.564672243435,38.1483417960027,0 -122.564481277932,38.14782736936961,0 contacts #khStyle84754 1 -122.564481277932,38.14782736936961,0 -122.564398893577,38.1476468114534,0 -122.564156799362,38.14697447404711,0 contacts #khStyle84754 1 -122.564156799362,38.14697447404711,0 -122.564055596815,38.1466000756945,0 -122.563893004029,38.1458739584829,0 contacts #khStyle84754 1 -122.563893004029,38.1458739584829,0 -122.563818533266,38.1455627474472,0 contacts #khStyle84754 1 -122.563818533266,38.1455627474472,0 -122.563709987161,38.1452243715921,0 -122.563667496756,38.1450529744238,0 -122.563618222506,38.1448229702669,0 -122.563612886496,38.1445210294617,0 -122.563644800758,38.1441921898829,0 -122.563667297725,38.1440075162014,0 -122.563808633853,38.1436295154684,0 -122.563912789018,38.1433865644527,0 -122.563937709335,38.1432740002565,0 -122.563912197071,38.1428863647929,0 -122.563926696706,38.1426070292496,0 contacts #khStyle84754 1 -122.563926696706,38.1426070292496,0 -122.564228891815,38.1420448696982,0 -122.564413256034,38.1416264717837,0 -122.564484249893,38.1414419784011,0 -122.564577523094,38.1411088604812,0 -122.564690168373,38.1406361196967,0 -122.564699484787,38.14038830865471,0 -122.56463691785,38.1398743592719,0 -122.564550948978,38.1396982941891,0 -122.564399026493,38.1394588955005,0 -122.564145624903,38.1391334991786,0 -122.563917793745,38.1388262227525,0 -122.563755418254,38.1385462276652,0 -122.563589746092,38.1382211571765,0 contacts #khStyle84754 1 -122.563589746092,38.1382211571765,0 -122.563406218658,38.137900526103,0 -122.563270407435,38.13747192194261,0 -122.563255736753,38.1373006282498,0 -122.563273848211,38.1365346268834,0 -122.563286412703,38.1363409033774,0 -122.563314640237,38.1361517446102,0 -122.563352262004,38.1360617592406,0 -122.563463110453,38.1358909338815,0 -122.563525719865,38.1357965353858,0 contacts #khStyle84754 1 -122.563525719865,38.1357965353858,0 -122.563695664209,38.1355222855792,0 -122.563813642758,38.1353514864559,0 -122.564046735662,38.1351315469821,0 -122.564124540349,38.1350316795798,0 -122.56415525418,38.1349922562806,0 contacts #khStyle84754 1 -122.56415525418,38.1349922562806,0 -122.564499215776,38.1345969835069,0 -122.564616451068,38.134430687064,0 -122.564708817838,38.1342430114444,0 -122.564749277131,38.1341608038151,0 -122.564899191266,38.1338954902358,0 -122.565050690926,38.1336031445983,0 -122.565146795898,38.1333917061293,0 -122.565163134292,38.1331619459971,0 -122.5651640157,38.1330132416577,0 -122.56515813956,38.1328014241196,0 -122.565101104008,38.13255787239261,0 -122.565051138639,38.13244502937521,0 -122.564986857136,38.1323411456954,0 -122.564717360228,38.13208779110781,0 contacts #khStyle84754 1 -122.564717360228,38.13208779110781,0 -122.56409196578,38.13172045328,0 contacts #khStyle84754 1 -122.56409196578,38.13172045328,0 -122.563827064303,38.1315347081435,0 -122.563690152881,38.1314125278173,0 -122.563595574184,38.1313671121925,0 -122.563531526261,38.1313443418412,0 contacts #khStyle84754 1 -122.563531526261,38.1313443418412,0 -122.563472470306,38.1313215900782,0 -122.56337158094,38.1312581255604,0 -122.563328535832,38.1311813579584,0 -122.563228183291,38.1310277694689,0 contacts #khStyle84754 1 -122.563228183291,38.1310277694689,0 -122.563062196548,38.1308784421171,0 contacts #khStyle84754 1 -122.548682308937,38.1300758218937,0 -122.548804252283,38.1300762921017,0 -122.548991989529,38.1301626352837,0 contacts #khStyle84754 1 -122.548682308937,38.1300758218937,0 -122.54856121731,38.1300528233914,0 -122.548455925271,38.1300118605639,0 -122.548186133225,38.129817048789,0 -122.548099570647,38.1297444934755,0 -122.548018698071,38.1296767072404,0 -122.547708269884,38.1293645738507,0 contacts #khStyle84754 1 -122.563062196548,38.1308784421171,0 -122.562979834176,38.1306978828291,0 -122.56295401218,38.1306031542366,0 -122.562935885192,38.1304138222267,0 -122.562948449371,38.13022009855181,0 -122.563041983173,38.1298419192267,0 -122.563060815411,38.1295535867586,0 -122.563129979105,38.1290761778452,0 -122.563153362038,38.128981632965,0 -122.563242833734,38.1288062214752,0 -122.563418912618,38.1285770575376,0 contacts #khStyle84754 1 -122.563418912618,38.1285770575376,0 -122.563586637045,38.1284334817654,0 -122.563834780764,38.1283172433013,0 -122.564023361371,38.1282638705312,0 contacts #khStyle84754 1 -122.564023361371,38.1282638705312,0 -122.564247703873,38.1281926054565,0 -122.564481922384,38.1281394018896,0 -122.564746777187,38.12809081810961,0 -122.565219090615,38.128052017344,0 -122.565462284756,38.1280484144162,0 contacts #khStyle84754 1 -122.546328025213,38.13126539214941,0 -122.546796631883,38.13160067320321,0 -122.547234679417,38.1320349725124,0 -122.547334703711,38.13212097893981,0 -122.547459827063,38.1321845508975,0 -122.547526751011,38.1322028348263,0 -122.547654755004,38.1322619114252,0 -122.547718521007,38.1323297522148,0 -122.547768107611,38.13238401930991,0 -122.547809572053,38.1324833178866,0 -122.547791817959,38.1325868939211,0 -122.547731821674,38.1327173444372,0 -122.547597713592,38.132838495863,0 -122.547453861733,38.1330362163516,0 -122.547209250626,38.13338225434681,0 -122.546922265316,38.1336605334435,0 -122.546762007461,38.13385818952781,0 -122.54664358515,38.133979400579,0 -122.546434697612,38.1344292198711,0 -122.54635546989,38.1345550888057,0 -122.546270480864,38.1346899479191,0 -122.546178853399,38.1347521611401,0 -122.546178092627,38.1347526776884,0 -122.546068616162,38.1348108348147,0 -122.545967892683,38.1348374817926,0 -122.545801012148,38.1348368342153,0 -122.545650813424,38.1347911883044,0 -122.545475192203,38.1347048868862,0 -122.545325384852,38.1345961540684,0 -122.545247691005,38.1344741824465,0 -122.545176806875,38.1342891492232,0 -122.545132436496,38.1341988510344,0 -122.545073061978,38.1341130007891,0 -122.544999340641,38.1340406135943,0 -122.544913495792,38.1339681792086,0 -122.544744379658,38.1338683831295,0 -122.54464427217,38.1337958930616,0 -122.544578675922,38.1336784743446,0 -122.544588464239,38.1334802357996,0 -122.544588269544,38.1334476107614,0 -122.54458741543,38.1333044865121,0 -122.544552932564,38.1331150882445,0 -122.544471941664,38.132835383187,0 -122.544428286149,38.1327450874976,0 -122.544363893622,38.1326637236322,0 -122.544281616703,38.13259130266551,0 -122.544076246314,38.1324733392807,0 -122.543801212911,38.1323190536986,0 -122.543475547817,38.1321645699748,0 -122.543384341702,38.1321313667572,0 -122.542812390486,38.1319231479391,0 -122.542715027759,38.1318686920921,0 -122.542670661823,38.1317783929671,0 -122.542645578692,38.1316836628933,0 -122.542590915223,38.1313004147434,0 -122.542528503091,38.1310162746103,0 -122.542492010368,38.1309214998933,0 -122.542431900309,38.1308401516959,0 -122.542364265758,38.1308218620894,0 -122.542221528222,38.1308393290137,0 -122.542129028978,38.1309200803651,0 -122.542052790871,38.1310234267154,0 -122.541976243205,38.1311763409766,0 -122.54191723224,38.13126172949811,0 -122.54179991323,38.1313198519898,0 -122.541640031329,38.1313417573678,0 -122.541255541338,38.1313582760477,0 -122.541087673877,38.13140268081241,0 -122.540693235938,38.1315273095564,0 -122.540441874814,38.1315803982668,0 -122.540189884897,38.1316199651037,0 -122.539922431765,38.13162342031,0 -122.539755586893,38.1316182580193,0 -122.539643879401,38.1315772620837,0 -122.539540786163,38.1315272873581,0 -122.539461367788,38.13145487426631,0 -122.539402002066,38.131369021176,0 -122.539322549691,38.1311884569435,0 -122.539310335642,38.1310892705282,0 -122.539323765908,38.1309946913415,0 -122.539365692897,38.1309047306012,0 -122.539429670109,38.1308238691965,0 -122.539512131873,38.1307520930622,0 -122.539609484281,38.1306938943108,0 -122.539762403654,38.1306449265808,0 -122.539979645125,38.130573680048,0 -122.540089917844,38.1305020128122,0 -122.5401903478,38.1304077753577,0 -122.540241600417,38.1303088383515,0 -122.540284295462,38.1302098677073,0 -122.540285798866,38.1300836975197,0 -122.5402864198,38.129984561598,0 -122.540294828563,38.1298944688429,0 -122.540211845605,38.12982204224011,0 -122.540094012103,38.1298486169998,0 -122.539968051805,38.1299202225893,0 -122.539703724874,38.1301084474556,0 -122.53958908886,38.1301936160364,0 -122.539438909686,38.1302606194855,0 -122.539328919534,38.1302872243373,0 -122.539204208392,38.1302732145293,0 -122.539069598518,38.130245646739,0 -122.538953643072,38.1302001271265,0 -122.538802971471,38.1301184202932,0 -122.538721359332,38.1300550106235,0 -122.538634783839,38.1299870750426,0 -122.538563240609,38.129910186087,0 -122.538523872725,38.1298199050901,0 -122.538531627164,38.1297207973073,0 -122.538698797304,38.1294465726783,0 -122.538691632775,38.1293383934961,0 -122.538608991929,38.1292118916364,0 -122.53853354396,38.1291890627352,0 -122.538495519004,38.1291860678235,0 -122.538413085148,38.1291795751465,0 -122.538290288624,38.1292016222382,0 -122.538195076498,38.1292598283591,0 -122.538071971976,38.1294441004182,0 -122.537955895078,38.1295957907022,0 -122.537851943937,38.1297316343093,0 -122.537675180207,38.1298300745523,0 -122.537642036269,38.1298840190889,0 -122.537633595887,38.1299786178079,0 -122.537697325857,38.1301636273897,0 -122.537706713501,38.1302582965288,0 -122.537705205684,38.1303844666485,0 -122.537595643972,38.1304561344497,0 -122.537486053653,38.1305323083223,0 -122.537386017724,38.1305634569752,0 -122.537284583874,38.1305900937276,0 -122.537158989014,38.1306031159835,0 -122.53706768086,38.1306072611503,0 -122.536925084702,38.1306021907563,0 -122.53679207198,38.1305475889496,0 -122.536590969616,38.1304341356718,0 -122.5362961061,38.1302617288668,0 -122.535790759559,38.129993854636,0 -122.535693404598,38.1299393930062,0 -122.535601868747,38.1298669292316,0 -122.535561734377,38.1297856567883,0 -122.535585181291,38.1296866114808,0 -122.535643257097,38.1296372727342,0 -122.535794350989,38.1295387337445,0 -122.535879153596,38.1294354254141,0 -122.535929926085,38.1293004380737,0 -122.535939138648,38.1291968299564,0 -122.535924959309,38.12884528318791,0 -122.535992703381,38.1287328945431,0 -122.536144449886,38.1285307130105,0 -122.536212364159,38.1283912871678,0 -122.536238690611,38.1282877468226,0 -122.536197215594,38.1281929503935,0 -122.536082177608,38.12811588755341,0 -122.536074653078,38.1281135478101,0 -122.535964744196,38.1280793717117,0 -122.535841378169,38.1280788825443,0 -122.535737779401,38.1281100156857,0 -122.535418311307,38.128221405297,0 -122.535348291028,38.1282527501968,0 -122.535208773908,38.1283152054727,0 -122.535100011606,38.1283733552801,0 -122.53498183608,38.1284539990339,0 -122.534846830614,38.1286021701211,0 -122.534779484751,38.1286514716378,0 -122.534687265842,38.1286871553665,0 -122.534553145114,38.1286956346651,0 -122.534375696495,38.1286769037174,0 -122.534243743658,38.128680884998,0 -122.534014124154,38.1286799710441,0 -122.53389979861,38.1287155661386,0 -122.533765219816,38.1287961433348,0 -122.53372950664,38.1288345615312,0 -122.53369844304,38.1288679779381,0 -122.533663727299,38.1289444465349,0 -122.533677356406,38.1290034967228,0 -122.533688712118,38.1290526970064,0 -122.533688196852,38.1291338081482,0 -122.533612235167,38.129192087238,0 -122.533539250923,38.12922186148121,0 -122.533502843128,38.1292367141753,0 -122.533423762611,38.12928271210481,0 -122.533410508306,38.1292904215856,0 -122.533284628511,38.1293485014546,0 -122.533183822032,38.1293886560388,0 -122.533024826994,38.1293835155117,0 -122.532799742133,38.1293420606754,0 -122.532574145277,38.12926905934621,0 -122.532359360332,38.1291780756293,0 -122.531582152441,38.12871532641,0 -122.531480494913,38.1286653503617,0 -122.531254188345,38.1285923436589,0 -122.531144629523,38.128551348254,0 -122.530831814817,38.1284013872762,0 -122.530532665549,38.1282334551224,0 -122.530459677465,38.1281610617339,0 -122.530421775445,38.1280662776204,0 -122.530412397394,38.1279716079322,0 -122.530426551531,38.1278770326502,0 -122.530454967531,38.1277825145776,0 -122.530499755802,38.12769256845811,0 -122.530560174384,38.1276116975866,0 -122.530639817524,38.1275354100627,0 -122.53073220974,38.127472692465,0 -122.530834498684,38.1274235333307,0 -122.531031059452,38.127352220408,0 contacts #khStyle84754 1 -122.546328025213,38.13126539214941,0 -122.546229156921,38.1308774679471,0 -122.546167923039,38.1307465481045,0 -122.546054219735,38.130591776008,0 -122.545733004973,38.1301545367619,0 -122.545580744544,38.1299827066285,0 -122.544838875617,38.1293264116153,0 -122.544818976791,38.12931544172351,0 -122.544542514887,38.1291630321883,0 -122.544336496398,38.1290360541136,0 -122.544264836186,38.1289771933096,0 -122.54423248094,38.1289049666615,0 -122.544267786937,38.12884652236851,0 -122.544411527125,38.1286668303695,0 -122.544518645916,38.1285142326823,0 -122.544534558655,38.1284915638878,0 -122.544568941311,38.12835200266391,0 -122.544581678949,38.12802309296161,0 -122.544572632146,38.127757186554,0 -122.544504510485,38.1274730250658,0 -122.544443701948,38.1272745115413,0 -122.544443408374,38.1272069160177,0 -122.544459433474,38.1271183535717,0 contacts #khStyle84754 1 -122.544459433474,38.1271183535717,0 -122.544467038305,38.1270763255212,0 -122.544523330399,38.1269683935957,0 -122.544680139717,38.1268653590292,0 -122.544763710704,38.12684315266281,0 -122.544847910901,38.126834467561,0 -122.544978979292,38.1268575086725,0 -122.545267264481,38.127056906,0 -122.545641962595,38.1273512702623,0 -122.545862870003,38.1274918227286,0 -122.546182998606,38.1277318979904,0 -122.546511380205,38.1280215735665,0 -122.546594802107,38.1281390603731,0 -122.546679177323,38.12833315776981,0 -122.546919785841,38.1287486683293,0 -122.547294322753,38.1291872279752,0 -122.547448400806,38.1292959748728,0 -122.547588539814,38.129332968175,0 -122.547708269884,38.1293645738507,0 contacts #khStyle84754 1 -122.528709151938,38.1266894825432,0 -122.528584806494,38.126508730238,0 -122.528526623108,38.1264634329998,0 -122.528410140771,38.1263908631297,0 -122.528318500684,38.126336418411,0 contacts #khStyle84754 1 -122.548991989529,38.1301626352837,0 -122.549021113568,38.130165265005,0 -122.549356913203,38.1301955851097,0 -122.549476114932,38.1301780189007,0 -122.549591120856,38.1301469175497,0 -122.549699791559,38.1301022728366,0 -122.550045521531,38.1300089705228,0 -122.550264260478,38.1299241918115,0 -122.55047238498,38.1298258530446,0 -122.550690409784,38.1297410707908,0 -122.551035423723,38.1296477627998,0 -122.551365654235,38.1295228530774,0 -122.551946296258,38.1293808762615,0 -122.552170681087,38.1293051281788,0 -122.552385877471,38.1292158256445,0 -122.552802143796,38.1290146339419,0 -122.552898770428,38.1289564213477,0 -122.552982951986,38.1288905660835,0 -122.552984755184,38.1288891554389,0 -122.552988808893,38.1288834413874,0 -122.553102720208,38.1287228731615,0 -122.553108673985,38.1287112782978,0 -122.553195095232,38.1285429741814,0 -122.553227761037,38.1284484667475,0 -122.553250306278,38.1282592885173,0 -122.553250882339,38.1281646585644,0 -122.553177955348,38.1274929424502,0 -122.553058870195,38.1270238331705,0 -122.553045212138,38.1269246425431,0 -122.553042086205,38.1267353662572,0 -122.553066798051,38.126541689987,0 -122.553106566513,38.1264517159713,0 -122.553169811766,38.1263708441689,0 -122.553260784824,38.1263035970641,0 -122.553276703037,38.12629844256631,0 contacts #khStyle84754 1 -122.531248125293,38.1263031243655,0 -122.531314528112,38.1262898714005,0 -122.531414899919,38.1263173110036,0 -122.531464269171,38.1264031281484,0 -122.531471992161,38.12653384147801,0 -122.531429201233,38.126646327438,0 -122.531176008592,38.1269877916162,0 -122.53118304681,38.1271139959179,0 -122.531241139785,38.1272854675879,0 -122.531172964546,38.1273527888808,0 -122.531031059452,38.127352220408,0 contacts #khStyle84754 1 -122.565462284756,38.1280484144162,0 -122.56605405848,38.1279469657168,0 -122.56651546657,38.1278224996732,0 -122.566673673515,38.1277194408556,0 -122.566833412622,38.1275983623101,0 -122.566972630994,38.1274501698283,0 -122.567001686644,38.1273601514286,0 -122.567018278806,38.1272069987552,0 -122.566989600429,38.1271122604119,0 -122.566917928895,38.1269317433133,0 -122.566839666144,38.1268060914417,0 -122.566757573933,38.1266742908091,0 -122.566645204247,38.1265026354361,0 -122.566507744019,38.1263534184886,0 -122.566197378061,38.1261404723477,0 contacts #khStyle84754 1 -122.523805917003,38.1254709652178,0 -122.523744242065,38.12552478977931,0 -122.523569276145,38.1255646343942,0 contacts #khStyle84754 1 -122.527693076778,38.1260094436441,0 -122.527689725948,38.1258652288476,0 -122.52772085201,38.1257932537974,0 -122.527766836648,38.1257393638434,0 -122.527827766803,38.125690040449,0 -122.52793410183,38.1256769504656,0 -122.528094659432,38.12565957270831,0 -122.528170505936,38.1256193218498,0 -122.52822430499,38.1255699695027,0 -122.528247557651,38.1255024688642,0 -122.528247029081,38.1253627717324,0 -122.528216772391,38.125299561721,0 -122.528125539251,38.1251820304194,0 -122.528109283459,38.1251594334343,0 -122.528078255972,38.1251052328595,0 -122.52806300293,38.1250375770043,0 -122.528062193504,38.1249939562483,0 contacts #khStyle84754 1 -122.566197378061,38.1261404723477,0 -122.566056640715,38.1260633434704,0 -122.565818031718,38.1258957253773,0 -122.565489689973,38.1255880784213,0 -122.565368732065,38.1254460765562,0 -122.565366468602,38.1254434192955,0 -122.565332961635,38.1253216248083,0 -122.565317861226,38.1252224301726,0 -122.565317209158,38.1250917451222,0 -122.565354243104,38.12497922524501,0 -122.565393125932,38.1249349948259,0 contacts #khStyle84754 1 -122.553276703037,38.12629844256631,0 -122.553370818985,38.12626796669561,0 -122.55361620165,38.1262553840367,0 -122.553860048501,38.12626082018841,0 -122.554102578739,38.126248225639,0 -122.554467677015,38.1262496161621,0 -122.554824600993,38.1261878863286,0 -122.55504557313,38.12611279795,0 -122.55504754703,38.1261121271981,0 -122.555258506776,38.1260137906158,0 -122.555352302524,38.1259510589024,0 -122.555424074547,38.1258747245633,0 -122.555468118247,38.1257847659694,0 -122.555471543725,38.1256901467803,0 -122.555421461168,38.125599830624,0 -122.555349904564,38.1255229517422,0 -122.555201679398,38.1254164905442,0 -122.555078684309,38.1253281502143,0 -122.554935875675,38.1252419875776,0 -122.554884285943,38.1251651843432,0 -122.554853816774,38.1250288245399,0 -122.554853044947,38.125025370349,0 -122.554869283901,38.1249339399575,0 contacts #khStyle84754 1 -122.523735894338,38.1249301538151,0 -122.52380684639,38.1249978085839,0 -122.523846867489,38.1251070333126,0 -122.52384818682,38.1251106339949,0 -122.523864365389,38.1252549010735,0 -122.523834615223,38.12544404422251,0 -122.523805917003,38.1254709652178,0 contacts #khStyle84754 1 -122.528062193504,38.1249939562483,0 -122.528066684775,38.1249295583555,0 contacts #khStyle84754 1 -122.523569276145,38.1255646343942,0 -122.52340788768,38.1256000277387,0 -122.523398348943,38.125599580108,0 -122.52336737152,38.1255981264043,0 -122.523197589611,38.125590158759,0 -122.523060259211,38.1255445364099,0 -122.522952252773,38.12548551454011,0 -122.52285642729,38.1254175296439,0 -122.522624249046,38.1252633691921,0 -122.52242686558,38.1251318816872,0 -122.522229453497,38.1250049000227,0 -122.522110390017,38.1249280529695,0 contacts #khStyle84754 1 -122.554869283901,38.1249339399575,0 -122.554872240693,38.124917292265,0 contacts #khStyle84754 1 -122.565393125932,38.1249349948259,0 -122.565433214657,38.1248893925927,0 -122.565562127571,38.1247952390095,0 contacts #khStyle84754 1 -122.523478871461,38.1247711594293,0 -122.523488573917,38.1247755366465,0 -122.523650223208,38.12484846377,0 -122.523735894338,38.1249301538151,0 contacts #khStyle84754 1 -122.528066684775,38.1249295583555,0 -122.528067321349,38.1249204308573,0 -122.528068950234,38.1248888933893,0 -122.528091576638,38.1248078713762,0 -122.528170140621,38.1246775056468,0 -122.528247730684,38.1245876925553,0 contacts #khStyle84754 1 -122.523369355185,38.1241758832591,0 -122.523589386819,38.12411369088781,0 -122.523762063977,38.1240963683633,0 -122.523941725567,38.12410160544221,0 -122.524047199853,38.12411104692071,0 -122.524125360664,38.1241288234504,0 -122.52416824466,38.1241385767604,0 -122.524329476862,38.1241547979909,0 -122.524354949409,38.124157360709,0 -122.524456174659,38.1241622782649,0 -122.524558229693,38.1241491739412,0 -122.524663995845,38.12411355314501,0 -122.524749024862,38.1240868606447,0 -122.524825642923,38.1240376024865,0 -122.524906626698,38.1239748431237,0 -122.524971297479,38.1238984986335,0 -122.525027353153,38.1238311317323,0 -122.525116763007,38.1236782805885,0 -122.525134371738,38.1236017450727,0 -122.525163505846,38.12350723114011,0 -122.525169851345,38.1234081184711,0 -122.525160567978,38.1232999298212,0 contacts #khStyle84754 1 -122.528247730684,38.1245876925553,0 -122.528329877778,38.1245654921394,0 -122.528367453176,38.1245496186917,0 -122.528424975736,38.124525318677,0 -122.528532995531,38.1244716783102,0 -122.528615692092,38.124363860373,0 -122.528650786906,38.1242288129563,0 -122.528655904176,38.1240981511106,0 -122.528639369327,38.12400795869841,0 -122.528616359141,38.1239267527898,0 -122.528477496943,38.1237864984661,0 -122.528465781295,38.123777339967,0 -122.528407964742,38.1237321428558,0 -122.528313359921,38.1236957113414,0 -122.528175913982,38.12366811966,0 -122.528048277129,38.1236676051173,0 -122.527920582335,38.1236761027856,0 -122.527771206045,38.1237295757656,0 -122.527644879248,38.1237470912356,0 -122.527563590891,38.123746763186,0 -122.527468128421,38.1237328589886,0 -122.52736419634,38.1237054016419,0 -122.527305017001,38.1236822078314,0 -122.52729449098,38.1236780824248,0 -122.527197863686,38.1236236166803,0 -122.527136118142,38.123578304353,0 -122.527085926646,38.1235105072144,0 -122.527051335328,38.12345629195961,0 -122.527036286732,38.12335709274,0 -122.52707331992,38.1232535976536,0 -122.527079749901,38.12314096633461,0 -122.527076968272,38.1230192852136,0 -122.527091780663,38.1229337255071,0 -122.527125045182,38.1228617592158,0 -122.527331360006,38.1227138848344,0 -122.527504786975,38.122579396217,0 -122.527540103079,38.1225209569605,0 -122.527574851043,38.122439983937,0 -122.527599848259,38.122322921211,0 -122.527572138352,38.12219663318611,0 -122.527512617174,38.1221160428999,0 -122.527512051804,38.1221152774016,0 -122.527446499117,38.1220643041923,0 -122.527401368606,38.1220292110308,0 -122.527357917297,38.1219910466281,0 -122.527286903897,38.1219286736119,0 -122.527267358472,38.1219115063034,0 -122.527192982731,38.1218345989399,0 -122.527107067005,38.1217794085732,0 -122.527072972807,38.1217575071726,0 -122.526983304373,38.1217301071142,0 -122.526892777805,38.121725234984,0 -122.526797056728,38.1217518858365,0 -122.526714054067,38.1217966132051,0 -122.526644540917,38.1218504076486,0 -122.526570633229,38.1219222094482,0 -122.526523908035,38.1219806022713,0 -122.52643824274,38.1221064319394,0 -122.526341459165,38.122187153629,0 -122.526271974447,38.1222364416689,0 -122.526176194332,38.12227210435641,0 -122.5260991277,38.1222808049717,0 -122.526037648925,38.1222651436556,0 -122.526027226859,38.1222624886984,0 -122.525920648874,38.122203475316,0 -122.525787353844,38.1220857718064,0 -122.525607377153,38.1219092971709,0 -122.525467011886,38.1218038611627,0 -122.525426426184,38.1217733749413,0 -122.525375145808,38.12176415445,0 -122.525316676825,38.1217639173719,0 -122.525248079667,38.1217861706524,0 -122.52520654873,38.1218130399678,0 -122.525074228902,38.1218755913054,0 -122.524942767649,38.1219156145148,0 -122.524841399649,38.12193322826871,0 -122.524632392016,38.1219458985837,0 -122.524519790358,38.121936428687,0 -122.524358047493,38.1219177464383,0 -122.524295377328,38.1219050338928,0 -122.524222032456,38.1218901559519,0 -122.52403921517,38.1218375246747,0 -122.524015631299,38.1218307350865,0 -122.523825542651,38.1217848990917,0 -122.523705010269,38.1217889150316,0 -122.523644969052,38.121811202186,0 -122.523580444933,38.1218650151106,0 -122.523570140821,38.1219145423887,0 -122.523573267477,38.1219821494962,0 -122.523601467438,38.122031833476,0 -122.52363305724,38.1221085689957,0 -122.523666669308,38.1222033379028,0 -122.523713858475,38.12229365574871,0 -122.523788260251,38.1223660591127,0 -122.523912575165,38.1224386654361,0 contacts #khStyle84754 1 -122.522110390017,38.1249280529695,0 -122.522095954084,38.1249187355769,0 -122.522003812792,38.1248327398659,0 -122.521886382818,38.12468805903131,0 -122.52178279497,38.1244983717278,0 -122.521666158522,38.1242320240803,0 -122.521627137225,38.1240921696333,0 -122.521603060915,38.12395688253751,0 -122.521585762944,38.1238756986199,0 -122.521542153266,38.1235645863482,0 -122.521511211018,38.123388714544,0 -122.521483892891,38.1232038449597,0 -122.521444872462,38.1230639904338,0 -122.521441865186,38.1229783586127,0 -122.521453089487,38.12289729126,0 -122.521489446558,38.1227892888949,0 -122.521504412177,38.1226811990805,0 -122.52152846277,38.1224920331519,0 -122.521513988015,38.1224153670353,0 -122.521465551575,38.1222980054686,0 -122.521356955589,38.12222095454261,0 -122.52124128819,38.122134862013,0 -122.521168227088,38.1220759814005,0 -122.52109528365,38.1219990760573,0 -122.521053978514,38.1218817434891,0 -122.520980292955,38.1218093413284,0 -122.520943549684,38.1217940998426,0 -122.520903490815,38.1217774829923,0 -122.520815522749,38.1218176795687,0 -122.520783142054,38.1218626099363,0 -122.520773460888,38.1219256583881,0 -122.520759832222,38.1220472724683,0 -122.520738595339,38.1221328050649,0 -122.520693173859,38.1222092260548,0 -122.520662490837,38.1223217577061,0 -122.520634814042,38.1225199211894,0 -122.520619935437,38.1226144923752,0 -122.52063346093,38.1227272050373,0 -122.520589465062,38.1228036318156,0 -122.520494842789,38.1228798512159,0 -122.520363347884,38.1229243754333,0 -122.520239218816,38.1229328793644,0 -122.520103369644,38.1229199917599,0 -122.520090280313,38.1229187500057,0 -122.519951501269,38.1228776243757,0 -122.5198719936,38.1228232228205,0 -122.519735707641,38.1227280316716,0 -122.519572591677,38.1225921736407,0 -122.519463343186,38.1225061057135,0 -122.519403978406,38.122424748777,0 -122.519356882924,38.1223209107301,0 -122.519255060479,38.1221898101856,0 -122.519158824682,38.1220767576629,0 -122.518978434627,38.1219651030565,0 -122.518975598586,38.1219633476494,0 -122.518810675795,38.1218860629153,0 -122.518628134207,38.1217771614644,0 -122.518493990887,38.1216819776797,0 -122.518379365796,38.1215463174193,0 -122.51834679894,38.121401982105,0 -122.518361768849,38.1212938926968,0 -122.518439544456,38.1211770490707,0 -122.518553566126,38.1210783796267,0 -122.518648842016,38.1210111770367,0 -122.518762626928,38.1209485567479,0 -122.518879116152,38.1209084789219,0 -122.518956270698,38.1208862645239,0 contacts #khStyle84754 1 -122.516522260814,38.1176947949477,0 -122.516455654483,38.117631431748,0 -122.516406219481,38.1175591268525,0 -122.516299357655,38.1173288643877,0 -122.516255656618,38.1172520768221,0 -122.516202627426,38.117184263281,0 -122.516063415067,38.1169944235521,0 -122.515981064265,38.1168318565165,0 -122.515919301067,38.11657474235681,0 -122.51587768042,38.116506975835,0 -122.515861001441,38.116498611797,0 -122.515805193612,38.1164706257115,0 -122.515711792668,38.11647023939181,0 -122.515612658137,38.1164743355708,0 -122.515533338557,38.1165010451372,0 -122.515443264697,38.1165367227296,0 -122.515348793913,38.1165904072296,0 -122.515216386041,38.1166664660433,0 -122.515097762622,38.1167065314427,0 -122.514959947941,38.1167375046257,0 -122.514949038045,38.1167362628281,0 -122.514836690515,38.11672347502811,0 -122.514683874741,38.1166507409487,0 -122.514536912056,38.1165554994682,0 -122.514471081009,38.1164831257655,0 -122.514453199555,38.1164553560119,0 -122.514328518064,38.11626172601861,0 -122.514302216701,38.1162022544192,0 -122.514252648311,38.1160901720616,0 -122.51416780821,38.1158735178784,0 -122.514099039181,38.1157064995737,0 -122.514087929626,38.1156613905146,0 -122.51404467655,38.1156251606311,0 -122.513901102687,38.1155569701849,0 -122.513826387573,38.1155341279245,0 -122.51382330263,38.1155331847798,0 -122.513766618799,38.1155158550861,0 -122.513697639221,38.1154885308187,0 -122.513593219839,38.115429515214,0 -122.513523706482,38.1153751508556,0 -122.513511469801,38.1152849741044,0 -122.51351990933,38.115194883265,0 -122.513560760755,38.1150553578423,0 -122.513599798213,38.11497440670831,0 -122.513601612023,38.1149158324008,0 -122.513579244575,38.11484814504,0 -122.513544043748,38.1147804043533,0 -122.513465381835,38.1147079767615,0 -122.513321869993,38.1146307732705,0 -122.513165734107,38.1145219730416,0 -122.512986963068,38.1143860406773,0 -122.5129542383,38.1143768952121,0 -122.512937858187,38.1143723175206,0 -122.51288723776,38.1143721069258,0 -122.512752039302,38.1144391387939,0 -122.512652638317,38.1144837880382,0 -122.512524125245,38.1145102908078,0 -122.51240633647,38.1145323318034,0 contacts #khStyle84754 1 -122.512104812033,38.1145220630997,0 -122.512049853859,38.1145308466588,0 -122.511981439135,38.1145260552164,0 -122.511909373285,38.1145096547541,0 -122.511799902537,38.114484741734,0 -122.511615783898,38.1144028605405,0 -122.511194585375,38.1141622691661,0 -122.511044930262,38.1140444805883,0 -122.510947794635,38.1139629615702,0 -122.510891141488,38.1139356871023,0 -122.510881699399,38.1139311414024,0 -122.510821930838,38.1139128665183,0 -122.51078851178,38.1138992079996,0 -122.510758507486,38.1139080952195,0 -122.510741246422,38.1139305545705,0 -122.51074816595,38.1139621275558,0 -122.510812858074,38.1140975867381,0 -122.510869084893,38.1142194916307,0 -122.510908350776,38.1143187941666,0 -122.510924028954,38.1144270107507,0 -122.51091130857,38.114517083523,0 -122.51084170091,38.1145843871597,0 -122.510755252019,38.1146110637241,0 -122.510679423475,38.1145984444889,0 -122.510644149415,38.114592574232,0 -122.510560319682,38.1145471608753,0 -122.51048795754,38.1144927828137,0 -122.510441825036,38.1144610458611,0 -122.510417137566,38.1144564360813,0 -122.510293708677,38.1144333886758,0 -122.510196002556,38.1144374862682,0 -122.510097433216,38.1144641116437,0 -122.510007329215,38.1145042912497,0 -122.509903618657,38.1145534264216,0 -122.509825514594,38.1146116812971,0 -122.509776762302,38.1146520338384,0 -122.50970430162,38.1147193248503,0 -122.50965213474,38.1147371315648,0 -122.509600600957,38.11473691572801,0 -122.509596523319,38.1147368986488,0 -122.509514772805,38.1147005058475,0 -122.509433202912,38.1146370759762,0 -122.509340788201,38.1145961320764,0 -122.509324538048,38.11459155743981,0 -122.509243292532,38.1145686856924,0 -122.509138546855,38.1145592340128,0 -122.50904288907,38.1145768581178,0 -122.508957925721,38.1145945269969,0 -122.508879198281,38.1146392597413,0 -122.508836239568,38.1146661173075,0 -122.508784755356,38.1146884327951,0 -122.50871693532,38.1147016666939,0 -122.508716933153,38.1147016666848,0 -122.508716929526,38.1147016666696,0 -122.508707710144,38.1147005276548,0 -122.508679176062,38.11469700238781,0 -122.508602326391,38.1146741484028,0 -122.508551173687,38.1146468959363,0 -122.508470257355,38.1145924807317,0 -122.508354326168,38.1144432862534,0 -122.508291947253,38.1143889487638,0 -122.508225200162,38.1143481117789,0 -122.508173210458,38.1143399989417,0 -122.508136170291,38.1143342189198,0 -122.508064191213,38.114329410224,0 -122.507929274993,38.1143421067779,0 -122.507880839032,38.11434666489951,0 -122.507677403013,38.1143818600206,0 -122.507539961578,38.1144026212812,0 -122.507503258728,38.1144081654129,0 -122.507370375572,38.1144481630421,0 -122.507270820265,38.1145153385466,0 -122.507159235055,38.1145689444452,0 -122.507076228774,38.1146136579674,0 -122.506968450028,38.1146312293519,0 -122.506917781124,38.1146238393334,0 -122.506873003374,38.11461730851551,0 -122.506805483405,38.1145854800615,0 -122.50677729757,38.1145357920921,0 -122.506779237779,38.1144591932572,0 -122.506772350156,38.1144231138861,0 -122.506735608847,38.114373389865,0 -122.506650947794,38.11434599540241,0 -122.506551344855,38.1143140316139,0 -122.506508066018,38.1142823051483,0 -122.50650049585,38.114241716589,0 -122.506554482494,38.1141653371108,0 -122.50658975048,38.1141159164952,0 -122.506612185135,38.1140664417909,0 -122.506602566837,38.1140123257213,0 -122.506548395313,38.1139039463531,0 -122.506501474593,38.1137775723391,0 -122.506513016433,38.1136514447215,0 -122.506533053159,38.1135343654927,0 -122.506528439092,38.1133721194143,0 -122.506509734154,38.1132909272618,0 -122.506443063133,38.1131329259003,0 -122.506395066836,38.1130606228431,0 -122.506198168904,38.1128660219048,0 -122.506143407004,38.1127396146602,0 -122.506129162057,38.1126314034763,0 -122.506125019541,38.1125052097171,0 -122.506093011645,38.1123879110079,0 -122.506052175893,38.1123111317126,0 -122.506005075227,38.1122117944901,0 -122.505935812906,38.1121213763297,0 -122.505851700228,38.1120128702709,0 -122.505748489997,38.1118817520569,0 -122.505670460825,38.1118228408057,0 -122.505628176082,38.1118059133401,0 -122.505579447287,38.111786406158,0 -122.505474023445,38.1117724420615,0 -122.505464735969,38.1117665584204,0 -122.505309319641,38.1116681015064,0 -122.505168203879,38.111554847814,0 -122.505080937711,38.1114913908376,0 -122.505002075123,38.1114505008054,0 -122.504925791674,38.1114501782944,0 -122.504848081224,38.1114498496994,0 -122.504694678763,38.1114672260794,0 -122.504598341414,38.1114803374137,0 -122.504495587616,38.1114934215159,0 -122.504363103274,38.1114748356102,0 -122.50427309523,38.1114294794752,0 -122.504245864256,38.1114157574356,0 -122.50420332439,38.1113743363702,0 -122.504192734214,38.1113640247062,0 -122.504171492671,38.1113433417861,0 -122.504116144057,38.1111989059081,0 -122.504069381239,38.111050000069,0 -122.504038029316,38.1109417161554,0 -122.504016669208,38.1108810833267,0 -122.504007565221,38.1108552407073,0 -122.504003052007,38.1108424294686,0 contacts #khStyle84754 1 -122.532335560463,38.1105716449441,0 -122.532233245039,38.1105800904417,0 -122.531773917604,38.1106097983388,0 -122.531686135721,38.1106138846162,0 contacts #khStyle84754 1 -122.539919121731,38.1107592573588,0 -122.539882734537,38.1112187573252,0 -122.539871616269,38.1115567179508,0 -122.539867763308,38.1116738351221,0 -122.539850321082,38.1118404997768,0 -122.539823532891,38.1121333041656,0 -122.539748009876,38.1124664736512,0 -122.539676411238,38.1126284190088,0 -122.53959867821,38.11274527716701,0 -122.539457576985,38.1128483670727,0 -122.539371740145,38.112893092357,0 -122.539269674904,38.112910715893,0 -122.539165527308,38.1129193185381,0 -122.538970348065,38.1128915121872,0 -122.538677664396,38.112836283483,0 -122.538363762585,38.1127539325643,0 -122.538212414071,38.1126722221725,0 -122.538097940869,38.112622201211,0 -122.53788667688,38.1125447602694,0 -122.537727316723,38.1124900554387,0 -122.537444900665,38.112389801192,0 -122.537225824017,38.1123078218899,0 -122.536993343927,38.1122032576555,0 -122.536814963012,38.1121124259372,0 -122.53665660181,38.1120126605849,0 -122.536498070415,38.1119399321591,0 -122.536266533071,38.1117993198002,0 -122.536043779604,38.1116226913774,0 -122.535900106362,38.111455388676,0 -122.53574823271,38.1113508957596,0 -122.535735416822,38.1113420780821,0 -122.535587931994,38.1112249441711,0 -122.535587153802,38.1112243261218,0 -122.535287349799,38.1110564031675,0 -122.535069135071,38.1109518917525,0 -122.534797822074,38.1107885870013,0 -122.534506234115,38.1106747703376,0 -122.534287251558,38.1105792670235,0 -122.534137850764,38.1105291032504,0 -122.534104824963,38.1105168285825,0 -122.533978526355,38.1104698871777,0 -122.533781159626,38.1104510761194,0 -122.533395436919,38.1104540456505,0 -122.533145797537,38.1104710755898,0 -122.532950369254,38.1104838149867,0 -122.53271552918,38.1105279408695,0 -122.532452229031,38.1105629400157,0 -122.532337390079,38.11057149392,0 -122.532335560463,38.1105716449441,0 contacts #khStyle84754 1 -122.502554324447,38.1103180596739,0 -122.502475678087,38.1102456247862,0 -122.502410394321,38.1102002844124,0 -122.502379147754,38.1101821264134,0 -122.502363524542,38.1101730474489,0 -122.502300878955,38.1101592623053,0 -122.502253856628,38.1101545561349,0 -122.502200356957,38.110158835003,0 -122.502094661311,38.1101854233975,0 -122.50195533607,38.1102298938506,0 -122.501884481821,38.1102701491332,0 -122.501847703671,38.1102954444198,0 -122.501741225027,38.11036867816731,0 -122.501588139722,38.1104446337061,0 -122.501383815206,38.1105068519766,0 -122.501154161515,38.1105193927244,0 -122.501090741755,38.1105146162311,0 contacts #khStyle84754 1 -122.531686135721,38.1106138846162,0 -122.53150648286,38.1106222473138,0 -122.531204229514,38.1106165310467,0 -122.530774902095,38.11063734256081,0 -122.530564703062,38.1106184746674,0 -122.530466462825,38.1105955491839,0 -122.530192763248,38.1104727809741,0 -122.53017467778,38.1104618264326,0 -122.530110380681,38.1104228810157,0 -122.530035898081,38.1103640001083,0 -122.529994536275,38.1103213028733,0 -122.529990602262,38.11031724184221,0 -122.529965779658,38.1102916177684,0 -122.529927800689,38.1102103518346,0 -122.52989901132,38.110029984133,0 -122.529930820447,38.1098498597522,0 -122.530021759758,38.1094536702045,0 -122.530066854298,38.1093141558288,0 -122.530097748006,38.1091655718271,0 -122.53010793826,38.1090214110209,0 -122.530094089649,38.1089101490954,0 -122.530091664234,38.1088906629006,0 contacts #khStyle84754 1 -122.502554324447,38.1103180596739,0 -122.502602867013,38.1103020313651,0 -122.502648643848,38.1102869162501,0 -122.502718906758,38.1102286328059,0 -122.502767160446,38.1101567369687,0 -122.502800034665,38.1100397128358,0 -122.502828570285,38.10993168286451,0 -122.502875233636,38.1097786668724,0 -122.502894226765,38.1097111530442,0 -122.502926021885,38.1096481998556,0 -122.50295190026,38.1096167656251,0 -122.502998361761,38.10959893764721,0 -122.503126747699,38.1095904699089,0 -122.503244500784,38.109572944327,0 -122.503343248722,38.1095192876362,0 -122.503575768325,38.1093986035982,0 -122.503834012914,38.1092690155067,0 -122.503903348058,38.1092422714931,0 -122.503973396065,38.10921553045801,0 -122.504042731109,38.1091887863611,0 -122.504146998819,38.1091621901557,0 -122.504289142,38.1091222353124,0 -122.504439218226,38.1090687949757,0 -122.504521476522,38.1090285863921,0 -122.504593132203,38.1089748139975,0 -122.504628581238,38.108898356898,0 -122.504641277853,38.1088127909392,0 -122.504637577543,38.1087271556124,0 -122.504600992357,38.1086549000566,0 -122.504553592112,38.1086006239238,0 -122.504479101484,38.1085462331338,0 -122.504367661416,38.10847366070971,0 -122.50435005152,38.108442042079,0 -122.504355285003,38.1084060138413,0 -122.504391234175,38.1083611030149,0 -122.504441941583,38.1083477987283,0 -122.504476572292,38.1083442688911,0 -122.504484384218,38.108343472636,0 -122.504526838012,38.1083391453904,0 -122.504565309543,38.1083438150633,0 -122.504642237444,38.1083531525294,0 -122.504743348452,38.1083716054215,0 -122.5048465375,38.1083990796118,0 -122.504935347086,38.1084445181131,0 -122.505014828295,38.1084989297121,0 -122.505077852067,38.1085622842953,0 -122.505230929764,38.1086981201733,0 -122.505325913451,38.1087796348567,0 -122.505464445497,38.1088523207967,0 -122.505568545015,38.1088795864175,0 -122.505586853742,38.1088843818057,0 -122.505723019561,38.10888495667111,0 -122.505787302691,38.1088672028122,0 -122.505880754489,38.1088585846073,0 -122.505964908144,38.1088544333968,0 -122.506019650738,38.108877195846,0 -122.506035835632,38.1089088082154,0 -122.506033487484,38.1089149379929,0 -122.506022048001,38.1089448004405,0 -122.505996110576,38.1089852477041,0 -122.505935179868,38.1090345599126,0 -122.505870001907,38.109079347867,0 -122.505786257839,38.1091285637227,0 -122.50566030023,38.1092001328018,0 -122.505586354764,38.1092764276705,0 -122.505567182285,38.1093709789799,0 -122.505585111688,38.1094611806521,0 -122.505654098286,38.1095921545701,0 -122.50576526853,38.1097052813138,0 -122.505869582641,38.1097778223362,0 -122.505968724745,38.1098773792323,0 -122.505984498969,38.1099304652026,0 -122.505986153901,38.1099360346413,0 -122.505958137934,38.1099674605232,0 -122.505926569635,38.1099766621647,0 -122.505912420122,38.1099807865121,0 -122.505848791419,38.1099805180033,0 -122.505836137613,38.1099804646011,0 -122.505756502666,38.1099485844048,0 -122.505660622203,38.1098941040808,0 -122.505454482019,38.1098031076592,0 -122.50531666113,38.1097304247179,0 -122.505220993666,38.109644400849,0 -122.505114905809,38.1095177761783,0 -122.504972960076,38.1094225439091,0 -122.504922399799,38.1094133168351,0 -122.504821291342,38.1093948648229,0 -122.504718601228,38.1093989368077,0 -122.504644958359,38.1094301693769,0 -122.504589077556,38.1094704896465,0 -122.504561409515,38.1095559922442,0 -122.504541522733,38.1096505403548,0 -122.504520913642,38.1096852599339,0 -122.504514840947,38.1096954904313,0 -122.504438876607,38.1097537508317,0 -122.504426106754,38.1097578575155,0 -122.504383555004,38.1097715418087,0 -122.504245442793,38.1098159574191,0 -122.504245250136,38.1098160193758,0 -122.504089316841,38.1098919661349,0 -122.504013882393,38.10997726628621,0 -122.503974215502,38.1100446927199,0 -122.50395438867,38.1101302283796,0 -122.503947894384,38.1102473645983,0 -122.503948559737,38.1103600248482,0 -122.503961723133,38.1105223073101,0 -122.504003052007,38.1108424294686,0 contacts #khStyle84754 1 -122.513235229186,38.1060774574502,0 -122.513185721244,38.1061366053545,0 -122.513137500763,38.1061942149961,0 -122.513015030058,38.1062793254404,0 -122.512976351094,38.1063067777469,0 -122.512914035273,38.1063510061886,0 -122.512857269164,38.1064183645637,0 -122.512855544664,38.1064634204093,0 -122.512887325894,38.106508615648,0 -122.512954811312,38.1065449467937,0 -122.51304326918,38.1065363021036,0 -122.513091151967,38.1065184760801,0 -122.51313903504,38.1065006499216,0 -122.513142130555,38.1065002400977,0 -122.513271038684,38.106483173511,0 -122.513372951785,38.1064881034096,0 -122.513473973003,38.1065200673263,0 -122.513574520051,38.1065159787698,0 -122.513644940029,38.1064937396362,0 -122.513673107362,38.1064848441748,0 -122.513817915666,38.1063637753809,0 -122.513971931398,38.1062517572289,0 -122.514029537167,38.1062166008338,0 -122.514338627479,38.1060279641304,0 -122.514419301273,38.1059787289102,0 contacts #khStyle84754 1 -122.514419301273,38.1059787289102,0 -122.514433354268,38.1058719201851,0 contacts #khStyle84754 1 -122.529838344927,38.10859222981121,0 -122.529717183867,38.1085307816008,0 -122.529659221508,38.1085013852505,0 -122.529383204556,38.1083613990186,0 -122.529318882441,38.1083287769017,0 -122.528994123939,38.1081652438629,0 -122.528815820477,38.108065387703,0 -122.528480004865,38.1078477330938,0 -122.52830632746,38.1076938191425,0 -122.528180270343,38.1075626283749,0 -122.528092123784,38.10730090746141,0 -122.528003659393,38.1070887545402,0 -122.527854194177,38.1069394438234,0 -122.527723033027,38.1068262571899,0 -122.527523944744,38.1067443404354,0 -122.527402619182,38.1067173681508,0 -122.527317496067,38.106698444065,0 -122.527043236004,38.1066657923296,0 -122.526776701889,38.1066511964011,0 -122.526416808269,38.1066317159608,0 -122.526082637034,38.1066033259329,0 -122.525666367362,38.1065926275886,0 -122.525298836366,38.1065415686528,0 -122.52523810619,38.106531634619,0 -122.525044596981,38.1064999808198,0 -122.524758481927,38.1064267189241,0 -122.524460656667,38.106290320509,0 -122.524216415654,38.1061361138846,0 -122.524031736819,38.106031718254,0 -122.523858914715,38.1059679272929,0 -122.523723025478,38.1059358309889,0 -122.523645370925,38.1059174893197,0 -122.523437980335,38.1059076327455,0 -122.523340297182,38.1059147615637,0 -122.523262523356,38.1059204373602,0 -122.522934655556,38.105910089274,0 -122.522733798122,38.1058822328596,0 -122.522624735828,38.1058542453242,0 -122.522573258657,38.1058410352244,0 -122.522483986222,38.1058181260191,0 -122.522337396126,38.1057769713285,0 -122.522197192825,38.1057403488236,0 -122.522065239468,38.1057137107726,0 -122.522037712563,38.1057081537645,0 -122.521837480938,38.10569381728751,0 -122.521697756268,38.105693246577,0 -122.521442413544,38.1057102293933,0 -122.521326339572,38.105717949274,0 -122.521314763069,38.105718719201,0 -122.521133829992,38.1057385716964,0 -122.521077197422,38.1057447855246,0 -122.520876223638,38.1057349506784,0 -122.52070254515,38.1056936830989,0 -122.52053694377,38.1056163979058,0 -122.520330502705,38.1055704893054,0 -122.520103476693,38.10551097706071,0 -122.519937788037,38.1054472095789,0 -122.519859639256,38.1053878368648,0 -122.519585938565,38.1051798944856,0 contacts #khStyle84754 1 -122.537795371062,38.1050776867513,0 -122.537803164072,38.105081989407,0 -122.537906162723,38.1051409780077,0 -122.538017744412,38.1051954940811,0 -122.53809052002,38.1052110511695,0 -122.538146605323,38.1052230403712,0 -122.538247635752,38.1052549830606,0 -122.538275924315,38.1052911450978,0 -122.538282040679,38.105303403378,0 -122.538298453233,38.1053362970287,0 -122.538296687628,38.105390365759,0 -122.538260075857,38.1054307781317,0 -122.538195548398,38.1054891056072,0 -122.53817438337,38.1055177777738,0 -122.538092728135,38.10562839550131,0 -122.538079424177,38.1056587358956,0 -122.538049331825,38.1057273630341,0 -122.538035021952,38.1058489768674,0 -122.538050280362,38.1059166316879,0 -122.538094795436,38.1059798956371,0 -122.538111042283,38.1059944830875,0 -122.538185534865,38.1060613671542,0 -122.538338810319,38.1061746293801,0 -122.538369773874,38.1061919805484,0 -122.538444090729,38.1062336257078,0 -122.538581768662,38.1063107764573,0 -122.538616530393,38.106337951307,0 -122.538673849917,38.1064057718055,0 -122.538706874684,38.1064825091609,0 -122.538709873206,38.106572647116,0 -122.538667218343,38.1066671114766,0 -122.538584069992,38.1067388846892,0 -122.538430231773,38.1068284043754,0 -122.538277875617,38.1069089170898,0 -122.538159738097,38.1069895646049,0 -122.538087966889,38.1070658886495,0 -122.538055777698,38.1071964445217,0 -122.538079421152,38.1072911702484,0 -122.538145923598,38.1073725461462,0 -122.53823743433,38.1074450080399,0 -122.538371521029,38.1075491819026,0 -122.538379762032,38.1075549089072,0 -122.538475864423,38.1076216942122,0 -122.538584598656,38.1076761985112,0 -122.538710555896,38.1077127453526,0 -122.538913280455,38.1077856448964,0 -122.538930942495,38.107794840794,0 -122.538978656788,38.1078196836393,0 -122.539009211272,38.1078355920671,0 -122.539070894557,38.1078899106252,0 -122.539126591971,38.1079892686446,0 -122.539138772898,38.1080164724774,0 -122.539158933265,38.1080614968591,0 -122.539197719047,38.1081292441258,0 -122.539312016508,38.1082063011783,0 -122.539313426971,38.1082072119329,0 -122.539438405386,38.1082879119965,0 -122.539608253724,38.1083741999103,0 -122.539664181455,38.1084104692561,0 -122.539699138936,38.1084331392842,0 -122.539807021202,38.1085101706293,0 -122.540019419383,38.1086326756546,0 -122.540086750939,38.1086960284813,0 -122.540148407522,38.1087548526711,0 -122.540180750145,38.1088270806043,0 -122.540195841859,38.1089217722975,0 -122.540204489168,38.1090209449807,0 -122.540201842676,38.1091020480814,0 -122.540176298221,38.1091965801553,0 -122.540132676847,38.109331597956,0 -122.54004117685,38.1094844528429,0 -122.539960906529,38.1095517319928,0 -122.539924067772,38.1096281943982,0 -122.539898663909,38.1097001954303,0 -122.53987885046,38.1097902436483,0 -122.539875151905,38.10992541824981,0 -122.539894838718,38.1100832162875,0 -122.539898050844,38.1103671260868,0 -122.539919121731,38.1107592573588,0 contacts #khStyle84754 1 -122.513235229186,38.1060774574502,0 -122.513315460144,38.106019209025,0 -122.513350779367,38.1059607738914,0 -122.513385180043,38.1058257277854,0 -122.513386430035,38.1057446195329,0 -122.513351532044,38.1056318169288,0 -122.513316959071,38.1055775975999,0 -122.51324677554,38.1054105726599,0 -122.51323183845,38.1052978529916,0 -122.51323540631,38.1051897165513,0 -122.513215094626,38.105027405199,0 -122.513178207862,38.1048920627474,0 -122.513143844329,38.1048063001097,0 -122.513079689592,38.104697882063,0 -122.513049561082,38.1045986182231,0 -122.513042713657,38.1045760581022,0 contacts #khStyle84754 1 -122.514433354268,38.1058719201851,0 -122.514464337064,38.1056364366541,0 -122.514499299574,38.1055239240523,0 -122.514534587854,38.10546999472881,0 -122.514569163206,38.1054160624385,0 -122.514707819879,38.1052544102811,0 -122.514778781405,38.1051961224234,0 -122.514870356695,38.1051469325378,0 -122.514991219201,38.1050888512896,0 -122.515127764743,38.10503083486061,0 -122.515204190888,38.1050086197998,0 -122.515263448577,38.1049953462224,0 -122.515467538402,38.1049646468229,0 -122.515756430255,38.1049388041149,0 -122.515807150327,38.1049363867443,0 -122.515930441926,38.1049305104481,0 -122.516104431016,38.1049222175979,0 -122.516341877028,38.1049141860433,0 -122.516416134425,38.1048964675376,0 -122.516485579576,38.1048516912893,0 -122.516600024499,38.10479358187631,0 -122.516760033735,38.10474467301681,0 -122.516801080822,38.1047448424156,0 -122.516889063441,38.1047452054661,0 -122.516953693692,38.1047409647992,0 -122.517212142185,38.1047240065285,0 -122.517455408794,38.1046979715036,0 -122.517629733837,38.1046401078451,0 -122.517769098417,38.1045866062507,0 -122.517838424197,38.1045598539231,0 -122.517977611126,38.1045333891753,0 -122.518135986328,38.1045160158402,0 -122.518216170273,38.1045231685075,0 -122.518294867554,38.1045301885051,0 -122.518445818689,38.10455784725491,0 -122.518669811835,38.1046443880581,0 -122.518908598798,38.10475802704811,0 -122.519289430439,38.1049533622968,0 -122.519585938565,38.1051798944856,0 contacts #khStyle84754 1 -122.535800095381,38.1039049016758,0 -122.535882577159,38.1039613330807,0 -122.535947580384,38.1040275821588,0 -122.536015742169,38.1040970501685,0 -122.536153213328,38.1042282778567,0 -122.536334084702,38.1043731962024,0 -122.53635159125,38.1043845066083,0 -122.536516553096,38.104491082742,0 -122.536652116629,38.1045535262164,0 -122.536684307523,38.10456835399471,0 -122.536899083476,38.1046503173293,0 -122.537170747828,38.1047550367288,0 -122.537497705112,38.104909543344,0 -122.537688075048,38.1050184466635,0 -122.537795371062,38.1050776867513,0 contacts #khStyle84754 1 -122.542359566811,38.1040048567951,0 -122.542451134712,38.1039910412262,0 -122.542490988382,38.1039850281659,0 -122.54250513195,38.1039828942027,0 -122.542741943901,38.1039612878718,0 -122.543098000563,38.1039086023588,0 -122.543422550616,38.1038783244378,0 -122.543797112925,38.10383021528661,0 -122.544110829569,38.1038224247946,0 -122.544265465408,38.1038320395126,0 -122.544442004507,38.1038732834366,0 -122.544458379253,38.1038784199385,0 -122.544572920373,38.1039143496129,0 -122.544745015088,38.1039826136524,0 -122.544810981359,38.10403111910371,0 -122.544880558457,38.1040822795129,0 contacts #khStyle84754 1 -122.539955880067,38.1042072321989,0 -122.540018894049,38.1042018725806,0 -122.540057163818,38.1041986175503,0 -122.540133581776,38.1041763862127,0 -122.540193688336,38.1041405718334,0 -122.540236714218,38.1041001840342,0 -122.540304118518,38.1040373604025,0 -122.540418712828,38.1039521904496,0 -122.540617594041,38.1038403133017,0 -122.54071545375,38.1038091530999,0 -122.540819616497,38.1037960427769,0 -122.540926433556,38.1038144869367,0 -122.540934721468,38.1038190253732,0 -122.541025896798,38.1038689526445,0 -122.541096676662,38.1039503436905,0 -122.541174669782,38.1040182440361,0 -122.541236435933,38.1040590428846,0 -122.541269496582,38.1040632734379,0 -122.541309092116,38.1040683402045,0 -122.541433787637,38.1040778413344,0 -122.541653378913,38.104074194981,0 -122.542129883285,38.1040264902352,0 -122.542359566811,38.1040048567951,0 contacts #khStyle84754 1 -122.539955880067,38.1042072321989,0 -122.53994891329,38.1040675092404,0 -122.539942772277,38.1039097642864,0 -122.539932269445,38.1037655211147,0 -122.539907481173,38.1036257281061,0 contacts #khStyle84754 1 -122.51017109409,38.1034149733301,0 -122.510129027486,38.1035229486429,0 -122.510115685408,38.1035994999885,0 -122.510138721227,38.1037798485031,0 -122.510157870421,38.1039015988048,0 -122.510144498264,38.1039826563261,0 -122.510131276258,38.1040411829562,0 -122.510083153915,38.1040950572663,0 -122.510013465296,38.1041758791331,0 -122.509874057548,38.1043420289131,0 -122.509839831514,38.1044500369201,0 -122.509824582337,38.10459868108161,0 -122.5098110594,38.1047022694363,0 -122.509803419734,38.1047788446008,0 -122.509767265185,38.1048553003859,0 -122.50973351973,38.1048912095222,0 -122.509664723236,38.1049449970875,0 -122.509532210284,38.105039074466,0 -122.509424115202,38.105106216181,0 -122.509338892084,38.1051644410329,0 -122.509281320516,38.105245313218,0 -122.50921105815,38.10541175192221,0 -122.509186329405,38.1055919003523,0 -122.509182364353,38.1057586169017,0 -122.509145164714,38.1058846374173,0 -122.509068756397,38.1060104935372,0 -122.50897048929,38.1061002075298,0 -122.508792077692,38.1062346482742,0 -122.50872220488,38.1063425063692,0 -122.508655022567,38.1065810584424,0 -122.508582498289,38.1067655124361,0 -122.508482974179,38.1069363341431,0 -122.508414917899,38.106985617755,0 -122.508303937226,38.1070572525906,0 -122.508198780114,38.1071108865771,0 -122.507990392926,38.10724970646501,0 -122.507921702371,38.1073936194283,0 -122.507907493493,38.107492698321,0 -122.507843502446,38.1075735427798,0 -122.507723754249,38.1076766843045,0 -122.507642713638,38.10774844437,0 -122.507537404073,38.1078246086119,0 -122.50748773075,38.1078965004861,0 -122.50751368528,38.10795969784941,0 -122.507574904206,38.1079734742162,0 -122.507704833404,38.1079469827528,0 -122.507719472803,38.10794325274251,0 -122.507896222877,38.10789821796021,0 -122.508071988625,38.1078403746175,0 -122.508156321977,38.1078091847873,0 -122.508167860287,38.1078069331275,0 -122.508178929714,38.1078047729671,0 -122.508224137941,38.1077959507265,0 -122.508237800222,38.1078050202248,0 -122.508278790003,38.10783223064681,0 -122.508299815187,38.1078863945388,0 -122.508343894434,38.1079046048303,0 -122.508399560995,38.1078958259541,0 -122.508413672801,38.1078823653534,0 -122.508441893431,38.1078554469748,0 -122.508510161473,38.1077746201453,0 -122.50855710267,38.1076846911662,0 -122.508570386875,38.1076171524166,0 -122.508580970136,38.1075270708275,0 -122.50861629382,38.1074686371655,0 -122.508650874422,38.1074147066744,0 -122.508763401586,38.107325052802,0 -122.508894554078,38.1072219580369,0 -122.509071361485,38.1071145482456,0 -122.509185162983,38.1070474308085,0 -122.509312539313,38.10697586384621,0 -122.50938276375,38.106922082496,0 -122.509431811927,38.1068366682782,0 -122.50946808813,38.1067421879318,0 -122.509497617387,38.1066972486225,0 -122.509538050467,38.1066208108697,0 -122.509568322594,38.1065713683517,0 -122.509624971525,38.106522036292,0 -122.509717384996,38.1064548287549,0 -122.509784518733,38.1064268980881,0 -122.509824618627,38.1064102146922,0 -122.50986618904,38.1064040783948,0 -122.509973049289,38.1063883044529,0 -122.510043092424,38.10636155974961,0 -122.510111817969,38.106335045298,0 -122.510112422622,38.1063348120215,0 -122.510112641037,38.1063343481833,0 -122.510142071475,38.1062718478392,0 -122.510155323928,38.1062088150572,0 -122.510176516158,38.1060241453395,0 -122.510202187873,38.105916101482,0 -122.510233772779,38.1057765382361,0 -122.510260606179,38.105728956075,0 -122.510322508006,38.1056191887823,0 -122.510347551448,38.1055942446128,0 -122.510403603719,38.105538414452,0 -122.510496668097,38.1054802216105,0 -122.510564393349,38.1054521694706,0 -122.510590549908,38.105441335276,0 -122.510658228548,38.1054133023594,0 -122.510850322423,38.1053645356495,0 -122.510983960199,38.1053155245091,0 -122.511151492636,38.1052080727923,0 -122.511271944924,38.1051049306406,0 -122.511363822024,38.1050106817259,0 -122.511416341115,38.104938800033,0 -122.511485226202,38.1048714928987,0 -122.51157609038,38.1048223026168,0 -122.511654887278,38.104806340299,0 -122.511900751966,38.1047565337614,0 -122.511903034471,38.1047560713756,0 -122.512307501424,38.10471719995011,0 -122.512419541693,38.1046996413318,0 -122.512532324671,38.1046775793951,0 -122.512677720314,38.10468269090361,0 -122.512778947893,38.1046831121542,0 -122.512908216356,38.1046475995408,0 -122.513042713657,38.1045760581022,0 contacts #khStyle84754 1 -122.534703968083,38.1023949014548,0 -122.534599429303,38.102379031164,0 -122.534472257355,38.1023109309211,0 -122.534413926815,38.1022830468837,0 contacts #khStyle84754 1 -122.534075734046,38.1021851609887,0 -122.533919202144,38.1021780475496,0 -122.533733005758,38.1021998377062,0 -122.533554564783,38.1022351773936,0 -122.533423855919,38.10227521335,0 -122.533342276297,38.1023244576126,0 -122.533278374704,38.1023963038372,0 -122.53324578118,38.1024772874644,0 -122.533238137402,38.1025583705532,0 -122.533254017745,38.10263954742521,0 -122.53329345091,38.1027163118766,0 -122.53339589893,38.102860922106,0 -122.533490165017,38.1029469176284,0 -122.533632791158,38.1030511309591,0 -122.5338239778,38.1031420185594,0 -122.534087106473,38.1032422047877,0 -122.5343995374,38.10332456127501,0 -122.534687817397,38.1033933020217,0 -122.534799479651,38.1034343025462,0 -122.534895430564,38.1034797468575,0 -122.535072895811,38.1035556593672,0 -122.535139998989,38.103584363303,0 -122.535230275913,38.1036252785029,0 -122.535405897011,38.1036980765028,0 -122.535535145047,38.1037565620762,0 -122.535556596708,38.1037662690686,0 -122.535723578663,38.1038525512467,0 -122.535800095381,38.1039049016758,0 contacts #khStyle84754 1 -122.538057729413,38.101921259119,0 -122.538267455712,38.1019879871047,0 -122.53849866507,38.1020750768478,0 -122.538545527922,38.10209272862121,0 -122.538557712074,38.1021017324789,0 -122.538698795766,38.1022059904006,0 -122.538749696553,38.1022737856084,0 -122.538776960218,38.1023595129153,0 -122.538750844962,38.1024315109906,0 -122.538680476245,38.10251234730821,0 -122.538533175879,38.102583867744,0 -122.538324456575,38.1026731710431,0 -122.538084172861,38.1027938936021,0 -122.537694302065,38.1028959998206,0 -122.537410301815,38.1029399410908,0 -122.53708723609,38.1029611956659,0 -122.53669145884,38.102982161625,0 -122.536400471288,38.1030035412528,0 -122.53612245725,38.1030024400185,0 -122.53586103819,38.1029698597538,0 -122.535681027317,38.1029150702562,0 -122.535587129761,38.1028831536556,0 -122.535496541354,38.1028329282316,0 -122.53541521715,38.1027878390922,0 -122.535109145932,38.1026018654416,0 -122.534967288444,38.1024886443255,0 -122.5348557131,38.1024341253751,0 -122.534781510768,38.1024112975316,0 -122.534751836607,38.1024021684607,0 -122.534703968083,38.1023949014548,0 contacts #khStyle84754 1 -122.537111426849,38.10170361078041,0 -122.5375777848,38.1018140252527,0 -122.537778608705,38.101846362473,0 -122.537850732635,38.10186467301961,0 -122.53799497372,38.1019012922331,0 -122.538057729413,38.101921259119,0 contacts #khStyle84754 1 -122.539907481173,38.1036257281061,0 -122.539831613751,38.1033325197964,0 -122.539780019455,38.1031475582843,0 -122.539714083588,38.1029760592885,0 -122.539631639414,38.1028225205759,0 -122.539443827826,38.1025333780319,0 -122.53941864538,38.1024566716882,0 -122.539420607814,38.1023710595132,0 -122.539451740596,38.1022945747142,0 -122.539543902718,38.1022035185751,0 -122.539547142711,38.102200317458,0 -122.539666724953,38.1021151678233,0 -122.540101547089,38.10189156122761,0 -122.540354027543,38.1017573634596,0 -122.540474433723,38.101654190982,0 contacts #khStyle84754 1 -122.540474433723,38.101654190982,0 -122.540731893952,38.1014073541563,0 -122.540749236699,38.1013950702611,0 -122.541079883041,38.1011608716581,0 -122.541137107181,38.1011295517812,0 -122.541220021602,38.10109382624211,0 -122.541273597036,38.1010760109345,0 -122.541359250167,38.1010583212746,0 -122.541448467447,38.1010406455123,0 -122.541523343569,38.1010364324553,0 -122.541626020366,38.1010323282029,0 -122.541791397464,38.101032975594,0 -122.541804942718,38.1010330286084,0 contacts #khStyle84754 1 -122.501089009968,38.1010232077041,0 -122.501085330984,38.1010198187338,0 contacts #khStyle84754 1 -122.561638732406,38.1022265467311,0 -122.561828055197,38.1022768250675,0 -122.561968379547,38.1022953755418,0 -122.562103216081,38.1022778548013,0 -122.562218226996,38.1022377281834,0 -122.56229205354,38.1021704095614,0 -122.562301859238,38.1021352241612,0 -122.562314635281,38.102089380338,0 -122.562301883657,38.10201639473051,0 -122.562292576001,38.1019631210333,0 -122.562254646145,38.1018683465748,0 -122.562199176031,38.1017963623726,0 -122.562164100004,38.1017508437235,0 -122.561985349377,38.1016014665579,0 -122.561807606465,38.1015043914729,0 -122.56176934338,38.1014834938494,0 -122.561696957138,38.1014497437905,0 -122.561603707879,38.1014062662459,0 -122.561565841779,38.1013912713016,0 -122.56146584918,38.101351674226,0 -122.56145436049,38.1013471246962,0 -122.561365470398,38.1013107411042,0 -122.561187166082,38.1012064275468,0 -122.561156328691,38.1011830962644,0 -122.561083117473,38.1011277052495,0 -122.561049494185,38.1011022660988,0 -122.560939099134,38.1009666625991,0 contacts #khStyle84754 1 -122.544880558457,38.1040822795129,0 -122.545033812276,38.1042000392889,0 -122.545116765791,38.1042615638085,0 -122.545204832539,38.1043268805083,0 -122.545322093532,38.1043859180397,0 -122.545354874354,38.1044013582862,0 -122.545592203928,38.10451314352121,0 -122.545875999138,38.1046178899214,0 -122.546151066996,38.1046820458118,0 -122.546170710988,38.1046866274806,0 -122.546363780235,38.1047326432752,0 -122.546439787737,38.1047507586706,0 -122.546614219459,38.1047874848601,0 -122.546784513119,38.1048016632209,0 -122.546942854729,38.1047887572191,0 -122.547171196899,38.1047535902581,0 -122.547426766891,38.1046959965717,0 -122.547743588117,38.10464765160351,0 -122.548011026601,38.1046306592872,0 -122.548316793869,38.1046408521229,0 -122.548612359471,38.1046870553081,0 -122.54871131053,38.1047099683764,0 -122.548954753802,38.1047694886789,0 -122.549185421026,38.104819946655,0 -122.549311434067,38.1048474697459,0 -122.549411153723,38.1048613725642,0 -122.549513150227,38.1048527525087,0 -122.549612405726,38.1048260965771,0 -122.549988289247,38.1046788339528,0 -122.550074823024,38.1046341034791,0 -122.550149320644,38.1045758077554,0 -122.550281974655,38.104450140763,0 -122.550392611971,38.104310870123,0 -122.550438704532,38.1042344398635,0 -122.550546107755,38.1040410809181,0 -122.550605965015,38.1039286529481,0 -122.550769411757,38.1036634079421,0 -122.550956027005,38.103339669518,0 -122.551059398262,38.1031057377914,0 -122.551131155342,38.1029122415506,0 -122.55121220669,38.1027142745791,0 -122.551237624616,38.10263776471491,0 -122.551274971153,38.102475680634,0 -122.551317692814,38.1022505287619,0 -122.551348020566,38.1020703924921,0 -122.551367652776,38.1020073793541,0 -122.551409630893,38.1019038950299,0 -122.551488897008,38.1017645030566,0 -122.551571809569,38.1016116060546,0 -122.551680411638,38.101454301064,0 -122.551884343451,38.101211740976,0 -122.55208226898,38.1010187269893,0 -122.552315204876,38.10081232761551,0 -122.552562752204,38.100664565702,0 -122.552863706253,38.1005260198977,0 -122.553089455339,38.1004457683129,0 -122.553274325847,38.1004059171289,0 -122.553436988771,38.1003840061958,0 -122.553752992767,38.1003491607465,0 -122.554076673507,38.10034138157801,0 -122.554326164926,38.1003423317146,0 -122.554883572775,38.1003489588883,0 -122.555451482354,38.1003871675047,0 -122.555988631753,38.1004432819657,0 -122.556488192218,38.1004677073558,0 -122.556696998213,38.1004775109324,0 -122.55680099044,38.1004914236565,0 -122.556898512833,38.1005143244283,0 -122.557214549616,38.1005921276686,0 -122.557618815923,38.1006973014225,0 -122.55783801691,38.1007567117236,0 -122.558033830178,38.1007935017385,0 -122.558312305725,38.1008351096836,0 -122.55858728722,38.1008767035775,0 -122.558617842365,38.1008813253277,0 -122.558895330821,38.10094047077751,0 -122.55889763602,38.1009409621175,0 -122.55922130169,38.1010548392353,0 -122.559411910341,38.101127657878,0 -122.559660232511,38.1012051996518,0 -122.559885366247,38.1013457421256,0 -122.560188535954,38.1015496658128,0 -122.560338244915,38.1016673924179,0 -122.560516441275,38.1017897321086,0 -122.560728573405,38.1018966024181,0 -122.560741740118,38.1019032356698,0 -122.561017797264,38.102048151982,0 -122.561052998204,38.1020666306428,0 contacts #khStyle84754 1 -122.509284656255,38.1002613548057,0 -122.509389282454,38.1003924760742,0 -122.509423850151,38.10044669656751,0 -122.509458417898,38.1005009170504,0 -122.50946649069,38.100573051762,0 -122.509457515699,38.1006361024472,0 -122.509501049658,38.1007354235338,0 -122.509587263506,38.1008484422706,0 -122.509701248086,38.1009660835282,0 -122.50973578622,38.1010248101078,0 -122.509770354462,38.1010790304974,0 -122.509804562121,38.1011873250328,0 -122.509787175106,38.1013359603251,0 -122.509794977818,38.101448650622,0 -122.509838010217,38.1015164253369,0 -122.509930851364,38.1015979274159,0 -122.510002517775,38.1016477966816,0 -122.510047719042,38.1017110740889,0 -122.510082287829,38.1017652943844,0 -122.51008192739,38.101819368537,0 -122.51007262235,38.1019319872307,0 -122.510046951895,38.1020400311427,0 -122.509941945188,38.1021792871827,0 -122.509829160514,38.10230518097831,0 -122.5098212855,38.1023139712964,0 -122.509695102948,38.1024215943299,0 -122.509646133747,38.1024490892466,0 -122.509588818599,38.102481270141,0 -122.509575606286,38.1024886884869,0 -122.509535401544,38.102494529623,0 -122.509485169437,38.1025018275619,0 -122.50945501454,38.1025062085854,0 -122.509246149805,38.102505333427,0 -122.50907162222,38.1024865766419,0 -122.508953911866,38.1024996020015,0 -122.508887121893,38.1025225395775,0 -122.508863169284,38.1025307655719,0 -122.508795237808,38.1025620247621,0 -122.508758521071,38.102615946387,0 -122.508758149664,38.1027781717762,0 -122.508827256256,38.1028911192666,0 -122.508850057681,38.1029993662,0 -122.508835700387,38.1031209761828,0 -122.508777326678,38.1032153636992,0 -122.508702737852,38.1032826453315,0 -122.508626761376,38.1033228832657,0 -122.508618319529,38.1033273541499,0 -122.508509253417,38.1033684783132,0 -122.508464663546,38.1033852912025,0 -122.508349943211,38.1034839482663,0 -122.508313848105,38.1035513912612,0 -122.508316658746,38.1036640606453,0 -122.508313766505,38.1037767060813,0 -122.508277460179,38.1038756922958,0 -122.508219205764,38.1039520548074,0 -122.508130207625,38.1040418070617,0 -122.508085406866,38.104131744924,0 -122.508123569804,38.10418147456811,0 -122.508172576552,38.104208718232,0 -122.508246061973,38.1042000142548,0 -122.508294120037,38.1041694314703,0 -122.508407862747,38.1040970486666,0 -122.508554764847,38.1040143618682,0 -122.508558849595,38.1040120626802,0 -122.50876823059,38.103936334087,0 -122.509061819174,38.1038474392866,0 -122.509248267281,38.1037896388957,0 -122.509318218637,38.1037628943969,0 -122.509428683353,38.1037206603018,0 -122.509434805333,38.1037183196739,0 -122.509452127083,38.1037089426644,0 -122.509512603461,38.1036762041569,0 -122.509525669432,38.1036691309674,0 -122.509596291543,38.1036018332424,0 -122.509601000837,38.10359734562231,0 -122.509652747625,38.1035344740756,0 -122.509705207184,38.1034716054894,0 -122.509749160585,38.1034160703954,0 -122.509769192605,38.1033907599181,0 -122.509839593596,38.1033099411658,0 -122.509845448382,38.1033024387927,0 -122.509895677215,38.1032380750534,0 -122.509981550428,38.10318886509811,0 -122.509998188274,38.1031871533528,0 -122.510065727466,38.10318020471841,0 -122.510143188442,38.1032165792227,0 -122.510158480835,38.1032752251465,0 -122.510168070397,38.1033338472122,0 -122.51017109409,38.1034149733301,0 contacts #khStyle84754 1 -122.509284656255,38.1002613548057,0 -122.509176195485,38.1001707741252,0 -122.509059773511,38.1000981851921,0 -122.508949646777,38.1000436477667,0 -122.508839429875,38.1000026287784,0 contacts #khStyle84754 1 -122.534483406302,38.09982274950741,0 -122.534459389051,38.0998414216629,0 -122.534359649497,38.0999446701877,0 -122.534274679126,38.1000795215538,0 -122.534217451663,38.1002234958506,0 -122.534224778645,38.100304638597,0 -122.534247787926,38.1003858437288,0 -122.534320210001,38.1005438526878,0 -122.534411964563,38.1006884195484,0 -122.534469275882,38.1007562421052,0 -122.534663479628,38.1009327602573,0 -122.534853863688,38.1010371619433,0 -122.534990788092,38.1011114119966,0 -122.535063147826,38.1011506504153,0 -122.535163606046,38.1012051256204,0 -122.535197014087,38.101220267261,0 -122.535434428486,38.1013278709476,0 -122.535754580249,38.1014282797161,0 -122.535757363497,38.1014288325228,0 -122.536148136891,38.1015064469078,0 -122.536453539453,38.1015671041458,0 -122.536472243044,38.1015708189126,0 -122.536977736665,38.101671958016,0 -122.537111426849,38.10170361078041,0 contacts #khStyle84754 1 -122.560939099134,38.1009666625991,0 -122.560853400954,38.10090776002,0 -122.560846807209,38.1009032279616,0 -122.560768826096,38.1008308343214,0 -122.560734220415,38.100776628675,0 -122.560699614786,38.1007224230181,0 -122.560696259763,38.1007162375264,0 -122.56065307966,38.1006366283658,0 -122.560577803632,38.1004696121203,0 -122.560565442083,38.1004186102393,0 -122.560561022376,38.1004003751797,0 -122.560547193778,38.1003433203638,0 -122.560543482928,38.1002486737988,0 -122.560561210945,38.1001450950871,0 -122.560588043966,38.1000685884471,0 -122.560664169999,38.0999742415562,0 -122.560735036562,38.099924938039,0 -122.560770126867,38.099898031819,0 -122.560874550103,38.0998398414964,0 -122.561048090552,38.0997864166065,0 -122.561187253518,38.0997599004877,0 -122.561441975145,38.0997202982691,0 -122.561595042104,38.0997120511262,0 -122.561617925142,38.09971081818651,0 -122.56167657601,38.099707658053,0 -122.561897525578,38.0997129915417,0 -122.562145455177,38.0997364508077,0 -122.562339263726,38.0997506945707,0 -122.562585714276,38.0997831600116,0 contacts #khStyle84754 1 -122.534838943761,38.0994072438932,0 -122.534809587314,38.0994732960801,0 -122.534740414557,38.09959018531921,0 -122.534649258166,38.0996889618933,0 -122.534574724847,38.0997517539857,0 -122.534483406302,38.09982274950741,0 contacts #khStyle84754 1 -122.562585714276,38.0997831600116,0 -122.562773188054,38.0997838604367,0 -122.563001818203,38.0998162584392,0 -122.563194147887,38.0998395079054,0 -122.563421459878,38.0998538749062,0 -122.563636074893,38.0998456625501,0 -122.563911360564,38.0998241569042,0 -122.564226118987,38.0997577344056,0 -122.564426690867,38.09971341778531,0 -122.564680065132,38.0996602845763,0 -122.565036825576,38.0996030287363,0 -122.565205239364,38.0995721102296,0 -122.56537908898,38.0995862748382,0 -122.565573823854,38.0995644661682,0 -122.565788624301,38.0995247063435,0 -122.566018500355,38.0994669767519,0 -122.566240879839,38.09940314493771,0 -122.566281985255,38.0993913459792,0 contacts #khStyle84754 1 -122.501738497786,38.0990984075059,0 -122.501744017057,38.0991254688213,0 -122.501693824802,38.0992739633368,0 -122.501630893259,38.0994088846977,0 -122.501569509334,38.0995257873877,0 -122.501534214524,38.0995797128228,0 -122.501466537151,38.0996785634468,0 -122.50145653704,38.0997866721932,0 -122.501681147481,38.1001977019071,0 -122.501704619922,38.1003104593995,0 -122.501637318876,38.1004588810577,0 -122.501602023663,38.1005128065014,0 -122.501557838341,38.10061626344211,0 -122.501542380021,38.1006882985131,0 -122.501531911488,38.1007603548205,0 -122.501510078178,38.1009315014383,0 -122.501487369167,38.1010215308491,0 -122.501463586927,38.1010593995833,0 -122.50145349924,38.1010754623091,0 -122.501392633237,38.1011157599082,0 -122.501306909653,38.1011424327113,0 -122.501255646687,38.101133201791,0 -122.50116396621,38.101092254563,0 -122.501089009968,38.1010232077041,0 contacts #khStyle84754 1 -122.508839429875,38.1000026287784,0 -122.508702718121,38.0999795237562,0 -122.508525937648,38.0999787819451,0 -122.508395309946,38.1000052714673,0 -122.50829604645,38.1000318925444,0 -122.508203820688,38.1000720620121,0 -122.508190416427,38.1000800091577,0 -122.508120801253,38.1001212826897,0 -122.508048413783,38.10017956058551,0 -122.507938386053,38.1003233000877,0 -122.507899612248,38.1003666369466,0 -122.507880927037,38.10038752108311,0 -122.507829934415,38.100444514578,0 -122.507738952477,38.1005117267367,0 -122.507686910751,38.1005475593233,0 -122.507660891865,38.1005654742337,0 -122.507534268091,38.1006325363746,0 -122.507377173544,38.1006724323652,0 -122.507276543543,38.1006900342146,0 -122.50717107474,38.1006850840868,0 -122.507067684007,38.1006891552226,0 -122.50696628063,38.1007157661609,0 -122.506780037433,38.1007812166778,0 -122.506776213924,38.1007825603501,0 -122.506689628583,38.1008317649854,0 -122.506634337093,38.1008765943643,0 -122.506612219214,38.1008945271328,0 -122.506525193072,38.1009031730429,0 -122.506463297611,38.1008848869762,0 -122.506413732153,38.100835108713,0 -122.506412760376,38.1007675100408,0 -122.506469951505,38.1006370682374,0 -122.506515965949,38.1005786801883,0 -122.506612120357,38.1004844529424,0 -122.506664464109,38.10045873399201,0 -122.506739427291,38.1004219009785,0 -122.506792641465,38.1003743566635,0 -122.506849867995,38.1003232274042,0 -122.506959154778,38.1001839921143,0 -122.507030830278,38.1001257118952,0 -122.507099774036,38.1000855323937,0 -122.507115276086,38.1000764979938,0 -122.507385618086,38.0999694849338,0 -122.507396884208,38.0999650252948,0 -122.507477795666,38.0999112899565,0 -122.50751890967,38.0998393619743,0 -122.507559673028,38.0997133568284,0 -122.507595978207,38.0996143707566,0 -122.507667090738,38.0995335562416,0 -122.5078253481,38.0994260701383,0 -122.507911218219,38.0993768616409,0 -122.508005463737,38.0993361302403,0 -122.508092553054,38.099298491527,0 -122.508097093849,38.0992965290597,0 -122.508306552326,38.099207282591,0 -122.508488150207,38.0991269314246,0 -122.508613495517,38.099037331328,0 contacts #khStyle84754 1 -122.566942968739,38.0991189079732,0 -122.566952815626,38.0991123278586,0 -122.567333784331,38.098857746594,0 -122.567358764024,38.0988410538789,0 contacts #khStyle84754 1 -122.502831726142,38.0987155114819,0 -122.502824638992,38.0987265639556,0 -122.502823080974,38.0987289936974,0 -122.502766614312,38.098757991621,0 -122.502727510528,38.0987780729721,0 -122.502718644666,38.0987826259422,0 -122.50261947229,38.0987957236975,0 -122.502561174129,38.0987729445503,0 contacts #khStyle84754 1 -122.508613495517,38.099037331328,0 -122.508712616971,38.0989250895453,0 -122.508758718914,38.0988531820374,0 -122.508795022057,38.0987541955654,0 -122.508827499875,38.0985875984267,0 contacts #khStyle84754 1 -122.502352583484,38.0986278565491,0 -122.502271719674,38.0985689309168,0 -122.502193554662,38.0985325482307,0 -122.502127232828,38.0985367725968,0 -122.502096953583,38.098548453129,0 -122.502057907137,38.0985635156828,0 -122.501813709016,38.0987292104234,0 -122.501732733704,38.0987919542027,0 contacts #khStyle84754 1 -122.508827499875,38.0985875984267,0 -122.508773416144,38.098253904821,0 -122.508785342844,38.09806919623901,0 contacts #khStyle84754 1 -122.541804942718,38.1010330286084,0 -122.541893122947,38.1010322267845,0 -122.542151410113,38.1010298777956,0 -122.542429501162,38.1010174461081,0 -122.542742605316,38.10099163158681,0 -122.542986019363,38.1009385063247,0 -122.543229084426,38.1008267971364,0 -122.543438240697,38.1006653857684,0 -122.543543014461,38.1005531365173,0 -122.543612663171,38.1004722944313,0 -122.543677489828,38.1003643956309,0 -122.543710686676,38.1001842725122,0 -122.543727684194,38.0999725420527,0 -122.54373259155,38.0997562581506,0 -122.543710243656,38.0995669058948,0 -122.543648229717,38.0993368421939,0 -122.543579352904,38.0991788527144,0 -122.543544760639,38.0991246420834,0 -122.543302140042,38.0988217728545,0 -122.543058276167,38.0986045182277,0 -122.543050351408,38.098596402933,0 -122.542851446414,38.0983927148796,0 -122.542815322802,38.0983557224485,0 -122.542745971951,38.0982743379518,0 -122.542641889863,38.0981612735391,0 -122.542458899111,38.0979738796772,0 contacts #khStyle84754 1 -122.508785342844,38.09806919623901,0 -122.508683662535,38.0979245678313,0 -122.508608085245,38.0978206056399,0 -122.508547155854,38.09765812286961,0 contacts #khStyle84754 1 -122.508390300007,38.097450174321,0 -122.508346950255,38.0973238157028,0 -122.508309684291,38.0972470520009,0 -122.508216790064,38.0971745609978,0 -122.50819386998,38.0971699587976,0 -122.508102180444,38.097151548099,0 -122.507971472731,38.0971690245893,0 -122.507948808373,38.097172054949,0 -122.507938799083,38.0971733932492,0 -122.507804621641,38.0972248950174,0 -122.50779944155,38.0972268833044,0 -122.507695191999,38.0972534829414,0 -122.507618164967,38.0972731365859,0 -122.507604778612,38.0972765521424,0 -122.507590942375,38.0972800824854,0 -122.507451735353,38.0973110412187,0 -122.507312558417,38.0973374936051,0 -122.507080246287,38.0973320102699,0 -122.507080216198,38.0973320101433,0 -122.507080187677,38.0973320100232,0 -122.506859931148,38.0973355884446,0 -122.506581576677,38.0973884916459,0 -122.506338831543,38.0974460506096,0 -122.506173486489,38.0974966549533,0 -122.506164545141,38.0974993914706,0 -122.505900856364,38.0975929836811,0 -122.505850868565,38.0976107259752,0 -122.50548791675,38.0977353704932,0 -122.505090900826,38.0978373383938,0 -122.504911683686,38.0978816439348,0 -122.50490139926,38.0978831676343,0 -122.504645534577,38.0979210752122,0 -122.504401482132,38.0979605994004,0 -122.504144720517,38.0979820444237,0 -122.504144711715,38.0979820443864,0 -122.503937233527,38.0979901779351,0 -122.503837186377,38.0980283058505,0 -122.503808594099,38.0980392023293,0 -122.503728546972,38.0980704072858,0 -122.503685795915,38.0980868997737,0 -122.503665314016,38.0980948012652,0 -122.503659222289,38.0980971513264,0 -122.503588224566,38.0981363946588,0 -122.503554044239,38.0981552874872,0 -122.503542678671,38.0981611243193,0 -122.503449609269,38.098208920397,0 -122.503380284356,38.0982356642706,0 -122.503321918485,38.0982579486884,0 -122.503310246587,38.0982624050797,0 -122.503181723355,38.0983158735787,0 -122.50317085325,38.0983203957721,0 -122.503132318609,38.0983505220668,0 -122.503109694218,38.0983682097471,0 -122.503102058192,38.09837417956611,0 -122.503070298638,38.0984326267853,0 contacts #khStyle84754 1 -122.542458899111,38.0979738796772,0 -122.542398939349,38.0979124769001,0 -122.5419468926,38.0974735966468,0 -122.541564912326,38.0971161026848,0 -122.541401815094,38.0969885940205,0 contacts #khStyle84754 1 -122.566790507508,38.0963244260156,0 -122.566821172637,38.0963773842104,0 -122.566923870873,38.0965547418387,0 -122.566933657604,38.0965708419259,0 -122.567022706302,38.0967173349917,0 -122.567129250195,38.096902488164,0 -122.567171566848,38.0969792520838,0 -122.567205856912,38.0970875305467,0 -122.567207251912,38.0972137126511,0 -122.567178788764,38.097326265391,0 -122.567160570344,38.0973937928129,0 -122.567108664107,38.0974927398816,0 -122.567002451558,38.0976140176411,0 -122.566955747142,38.0976769333278,0 -122.566937448727,38.0977579793712,0 -122.566927863396,38.0978120197347,0 -122.566942487022,38.0978706559857,0 -122.566965708363,38.0979202918456,0 -122.566984724331,38.0979609386241,0 -122.567056926397,38.098046825765,0 -122.567177546778,38.0981419045485,0 -122.567310099485,38.0982685715486,0 -122.567357512966,38.0983273289529,0 -122.567380690812,38.0983859967639,0 -122.567417567692,38.0985393478877,0 contacts #khStyle84754 1 -122.541322954414,38.096939852306,0 -122.541253280291,38.096898578276,0 -122.54121499291,38.0968758972997,0 -122.540998152489,38.0967849210764,0 -122.540871612477,38.0967303491281,0 -122.540818907988,38.0966852492278,0 -122.540802837284,38.0966714973058,0 -122.540754076794,38.0966037113239,0 -122.540696219054,38.0965088517419,0 -122.54062687226,38.0964274659973,0 -122.540522767826,38.0963189059175,0 -122.54042075951,38.0962440404117,0 contacts #khStyle84754 1 -122.532148901518,38.0959477702692,0 -122.532148901454,38.0959477705188,0 -122.532153173837,38.0960604454366,0 -122.532198673335,38.0961913103316,0 -122.532294723848,38.0963313897733,0 -122.53239374058,38.0964534557263,0 -122.532467666508,38.0965979529746,0 -122.532534407439,38.09675143411431,0 -122.532566192913,38.0969092819799,0 -122.532583951823,38.0970310233331,0 -122.532638149547,38.0971393911992,0 -122.532693375419,38.0971981936991,0 -122.532751695058,38.0972329256761,0 -122.532777170707,38.097248097556,0 -122.532888793996,38.0972936060642,0 -122.533005550208,38.0973166033746,0 -122.533107366289,38.0973350346805,0 -122.533298254021,38.0973583272896,0 -122.533432830517,38.0973813952071,0 -122.533467357725,38.0973981617014,0 -122.533545110015,38.0974359183338,0 -122.53364957744,38.0974859039244,0 -122.533743951398,38.0975538744795,0 -122.533814004422,38.0976352670618,0 -122.533883886111,38.0977436967967,0 -122.533929503999,38.097856536217,0 -122.533924996847,38.09800522659471,0 -122.533881428062,38.0981312299028,0 -122.533837916296,38.0982482207938,0 -122.533777952548,38.0983741587797,0 -122.533725829535,38.0985001279573,0 -122.533706467194,38.098630733899,0 -122.533736517777,38.0987254861297,0 -122.533783249091,38.0987752416549,0 -122.53385347481,38.0988295970162,0 -122.533981524505,38.0988706635705,0 -122.534105139019,38.0988873652894,0 -122.534118983805,38.098889235868,0 -122.534271355211,38.0989168799478,0 -122.534415172926,38.0989444898158,0 -122.534599535728,38.0989857796198,0 -122.53460874528,38.0989948288519,0 -122.534731093143,38.09903587192571,0 -122.534794191624,38.0990901984019,0 -122.534804726413,38.0991073914514,0 -122.534830174544,38.0991489234264,0 -122.534856035425,38.0992301397857,0 -122.534859086096,38.099311265519,0 -122.534843574888,38.0993968238182,0 -122.534838943761,38.0994072438932,0 contacts #khStyle84754 1 -122.540378832999,38.0962191921016,0 -122.540266380052,38.0961691910333,0 -122.540175311981,38.0961417955086,0 -122.540118486122,38.0961100281053,0 -122.540060403953,38.0960512178472,0 -122.540035851178,38.0959880329752,0 -122.540023259528,38.09572211089301,0 -122.540020795612,38.0955463549026,0 -122.53986295092,38.0950275083337,0 -122.539793973262,38.0948875414248,0 -122.539759385758,38.0948333296732,0 -122.53961997767,38.0945578962877,0 -122.539585390445,38.0945036844837,0 -122.539550803271,38.0944494726694,0 -122.539418869015,38.0942903061865,0 -122.539412144426,38.0942821935694,0 -122.538807996009,38.0937808216293,0 -122.538751975075,38.0937343303591,0 -122.538682463291,38.0936799806947,0 -122.538301061228,38.0933495161818,0 -122.537918577022,38.0929649703448,0 -122.537849264919,38.0928790767511,0 -122.537637368921,38.0926844685288,0 -122.537477707496,38.0925711799905,0 -122.537359159432,38.0924941042335,0 -122.537254781594,38.0924306033135,0 -122.537174509177,38.0924132516599,0 -122.537127368777,38.0924030617805,0 -122.537014069212,38.0923981075053,0 -122.536875709688,38.0924110792715,0 -122.536644865024,38.0925093049446,0 -122.536171227618,38.0926786696859,0 -122.535877031107,38.0927631239094,0 -122.535592323434,38.0928337379559,0 -122.535519369944,38.09285183196501,0 -122.535427538411,38.0928756962878,0 -122.53537669516,38.0928889089205,0 -122.535297331654,38.09290953305641,0 -122.53519930987,38.0929363641559,0 -122.535118828363,38.0929583939515,0 -122.535112369836,38.0929588374387,0 -122.534870673975,38.0929754336896,0 -122.534458670342,38.0929783026034,0 -122.534242946615,38.0929774446886,0 -122.534135790213,38.0929770183896,0 -122.534038654931,38.0930081760888,0 -122.533952923731,38.0930393790996,0 -122.533865424002,38.093124650804,0 -122.533791922064,38.0932505350237,0 -122.533687685279,38.0933898157428,0 -122.533552599025,38.093560517685,0 -122.533377683028,38.0937175417937,0 -122.533204334918,38.0938520403076,0 -122.532974136437,38.0939592739234,0 -122.532779747663,38.0940396120893,0 -122.532579058164,38.094101899517,0 -122.532486140055,38.094142085386,0 -122.532404568845,38.0941913291262,0 -122.532282652181,38.0943080063816,0 -122.532249315604,38.0945061510763,0 -122.532253579736,38.0948441417286,0 -122.532282533126,38.0952227878182,0 -122.532275052889,38.0955021494286,0 -122.53224907301,38.0956642729555,0 -122.532189108706,38.0957902101823,0 -122.532148901518,38.0959477702692,0 contacts #khStyle84754 1 -122.556193892491,38.0888853510289,0 -122.556406854976,38.0887915253468,0 -122.556738441532,38.0886454838563,0 -122.556822773082,38.0886083412592,0 -122.557064378536,38.0884920911793,0 -122.55711238738,38.0884733166626,0 -122.557224156895,38.0884296075485,0 -122.557320848683,38.0883917946731,0 -122.55752089108,38.0883135645059,0 contacts #khStyle84754 1 -122.55752089108,38.0883135645059,0 -122.557820079955,38.0881592308485,0 -122.558015834207,38.0880582521643,0 -122.558155077862,38.0879864237712,0 -122.558388124784,38.0878662065776,0 -122.559090857324,38.087512855596,0 -122.559634001661,38.0872670520022,0 -122.559850680629,38.0871461960504,0 -122.560018074342,38.087043179782,0 -122.560124071527,38.0870046700725,0 -122.560214499689,38.0869718166183,0 -122.560400988398,38.0869229479248,0 -122.56041794388,38.0869185047839,0 -122.560597626081,38.0869056603483,0 -122.560769306887,38.0869198235754,0 -122.560976907529,38.0869767300145,0 -122.56126706251,38.0870562650718,0 -122.561319339347,38.087070594703,0 -122.561416079027,38.0871025014488,0 -122.562205207982,38.0873172525026,0 -122.562976995335,38.087572490462,0 -122.563194602577,38.0876544164821,0 -122.563485545528,38.0877694238488,0 -122.563505334676,38.0877772462982,0 -122.563741109224,38.0878425785848,0 -122.563802054281,38.0878594661474,0 -122.563861944373,38.0878741887136,0 -122.564044029242,38.0879189497595,0 -122.56417204179,38.0879644866195,0 -122.56432567615,38.0880191374601,0 -122.564601568699,38.0881283157363,0 -122.564690417932,38.0881692030941,0 -122.564853728925,38.0882734557584,0 -122.564918925381,38.0883367866493,0 -122.564927655284,38.0883599030384,0 -122.565039376366,38.0886557341063,0 -122.565062079335,38.0887158499766,0 -122.565176485732,38.0891353632595,0 -122.56518583665,38.0891805364446,0 -122.565227598666,38.0893822831565,0 -122.565243352851,38.0894583892288,0 -122.565243700429,38.0894600683227,0 -122.565339573039,38.0898569657137,0 -122.565359187904,38.08993816761791,0 -122.565360622188,38.0899466586985,0 -122.565409458342,38.0902357716847,0 -122.565469270926,38.090483695463,0 -122.565494333611,38.090587580059,0 -122.565543266152,38.090749989349,0 -122.565551410321,38.09078140581691,0 -122.56561225569,38.0910161184965,0 -122.56567881446,38.0913318081354,0 -122.565683897299,38.09155714317651,0 -122.565622194683,38.0917461798157,0 -122.56556374244,38.0918676336293,0 -122.565435280271,38.0920158654684,0 -122.565375115755,38.0920652116549,0 -122.565330471795,38.0921416533813,0 -122.565302221117,38.092218155967,0 -122.565288172176,38.0923037239314,0 -122.565289117762,38.09238484125491,0 -122.565301246955,38.09247951066021,0 -122.565305060409,38.0925092749483,0 -122.565315688874,38.0925922307748,0 -122.565334952963,38.0927094666976,0 -122.565314542436,38.0927859983904,0 -122.565252132263,38.0928533614562,0 -122.565172695695,38.092907142275,0 -122.56498056249,38.0929740232491,0 -122.564778583725,38.0930183356907,0 -122.564682173814,38.0930495214556,0 -122.564594949633,38.0930942602748,0 -122.564370126482,38.0932646640561,0 -122.564105592132,38.093520539646,0 -122.56405598333,38.09359245605301,0 -122.564018464767,38.0936689237899,0 -122.56396647677,38.0937813881894,0 -122.563939720442,38.0939660477006,0 -122.56395119567,38.0940742421595,0 -122.563980697922,38.0941373129236,0 -122.563991315615,38.0941600117067,0 -122.564019345223,38.0942412298882,0 -122.564103283107,38.0943902510827,0 -122.564207205833,38.094534840297,0 -122.564324725211,38.0946704673817,0 -122.564606283004,38.0949103499857,0 -122.564894337744,38.0951367370987,0 -122.565100137941,38.0952907167979,0 -122.56523781896,38.0954288993905,0 -122.565325470403,38.095516869796,0 -122.565331857996,38.0955216654669,0 -122.565470239277,38.095625558987,0 -122.565546161167,38.0956844229653,0 -122.565642201147,38.0957163236271,0 -122.565746161808,38.09573473463451,0 -122.565902922202,38.0957443287306,0 -122.566047432119,38.095776408804,0 -122.566147063002,38.0958038160459,0 -122.566240225631,38.0958402118751,0 -122.566326920031,38.0958855963071,0 -122.566407859011,38.0959399719964,0 -122.566539874772,38.0960674845343,0 -122.56664671395,38.0961706788636,0 -122.566746409558,38.0962772756296,0 -122.566790507508,38.0963244260156,0 contacts #khStyle84754 1 -122.554527117752,38.0880093001558,0 -122.554557488727,38.0879373145254,0 -122.554555814895,38.0878607006429,0 -122.554534,38.0878011344382,0 -122.554532677777,38.0877975240675,0 -122.554487719815,38.0876892012083,0 -122.554453288719,38.0876079563395,0 -122.554418144989,38.0875267087475,0 -122.554417439292,38.0875258067693,0 -122.554345124789,38.0874333787324,0 -122.554333275703,38.0874182339189,0 -122.554246735277,38.0873503095876,0 -122.554234261155,38.087345826073,0 -122.554107345355,38.0873002092224,0 -122.553975000646,38.0872636545066,0 -122.553809022093,38.0872495030882,0 -122.553628104143,38.0872307881533,0 -122.553306015726,38.0872205470551,0 -122.552792812541,38.0872276005177,0 -122.552700492212,38.0872259563009,0 -122.552470696837,38.0872218633507,0 -122.552157983657,38.08719362964521,0 -122.551952204004,38.0871612980561,0 -122.551759280708,38.0871245090045,0 -122.551679757217,38.0871063134839,0 -122.551619070258,38.0870924278488,0 -122.551575760231,38.08706522402851,0 -122.55152474797,38.0870154590664,0 -122.551505605303,38.08694558980041,0 -122.551497557465,38.08691621577011,0 -122.55146404497,38.08678321691581,0 -122.551463460008,38.0867808954084,0 -122.551455157385,38.0866231422359,0 -122.551463904562,38.0864744670278,0 -122.551533453094,38.0861728096739,0 -122.551568487267,38.0860377541088,0 -122.551599495,38.0859578593652,0 -122.551603178023,38.0859483696504,0 -122.551627862832,38.0858847664489,0 -122.551707878722,38.0857363641116,0 -122.551847157474,38.08557016326961,0 -122.551908915826,38.0854937921109,0 -122.551996413236,38.0854040004329,0 -122.552055512778,38.085296074739,0 -122.552165789436,38.0850937119296,0 -122.552369481914,38.0848826935451,0 -122.552515171698,38.0847165163885,0 -122.55262363689,38.0845772347717,0 -122.552683420104,38.0844738176809,0 -122.552718149717,38.0843883301555,0 -122.55275285183,38.08430734884,0 -122.552754126868,38.0842965226089,0 -122.55276187007,38.0842307757331,0 -122.552754085302,38.0841848555781,0 -122.552748110063,38.0841496092867,0 -122.552746135306,38.0840905710312,0 -122.552745698057,38.08407749884171,0 -122.55271834243,38.0840052931075,0 -122.552699065885,38.083990678847,0 -122.552624964649,38.0839344998795,0 -122.552604835542,38.0839192392142,0 -122.552591275891,38.0839164434966,0 -122.552448951951,38.083887099157,0 -122.552381241407,38.0838913452469,0 -122.552178026074,38.083904088528,0 -122.551986418858,38.0839214280406,0 -122.551891366306,38.08393002971091,0 -122.551799658342,38.0839439831088,0 -122.551660239982,38.0839651955122,0 -122.551429963612,38.0839778324805,0 -122.551232580249,38.0839725697703,0 -122.551217874104,38.0839715237542,0 -122.551031688591,38.0839582806223,0 -122.550857796035,38.0839576136851,0 -122.550666689119,38.0839749057348,0 -122.550429258262,38.0839920196112,0 -122.550307938163,38.0840185916718,0 -122.550272409706,38.0840348068903,0 -122.550210025967,38.0840632788388,0 -122.550120919593,38.0840958286477,0 -122.550075739608,38.0841123324792,0 -122.549950060365,38.0841524063968,0 -122.549782167474,38.0842193558231,0 -122.54962285402,38.0842818316836,0 -122.549464197738,38.0843533225077,0 -122.549309900109,38.0844113109154,0 -122.549170734322,38.0844423194285,0 -122.549070191312,38.0844509449011,0 -122.548989686237,38.0844461284975,0 -122.548927710822,38.0844413834261,0 -122.548898490056,38.0844412708488,0 -122.548886970124,38.0844412264645,0 -122.548857868294,38.0844411143354,0 -122.548824652397,38.0844352373251,0 -122.548675616178,38.0844088676736,0 -122.548483331371,38.0843855946928,0 -122.548379293948,38.0843667292932,0 -122.548330984347,38.0843579691424,0 -122.548145854264,38.08433021688391,0 -122.548021191078,38.0843207230693,0 -122.547942083863,38.0843204176705,0 -122.547783018152,38.0843423350546,0 -122.547656707809,38.0843688850982,0 -122.547563125108,38.0844045741257,0 -122.547454576065,38.0844402052334,0 -122.547355319492,38.0844713658388,0 -122.54725400806,38.0844889994374,0 -122.547161248733,38.08450666602451,0 -122.547004743888,38.0844940841124,0 -122.546984587573,38.084492463668,0 -122.546963741691,38.084486540632,0 -122.546936466367,38.0844787907625,0 -122.546904193702,38.0844696209641,0 -122.546764980949,38.0843924746293,0 -122.546611080187,38.0842702079985,0 -122.546515556855,38.0841585983432,0 -122.546487251318,38.0841255260171,0 -122.546427090948,38.0840576980973,0 -122.546385566952,38.0840018034337,0 -122.546373372563,38.0839853887784,0 -122.546346708068,38.0839176905827,0 -122.546329475226,38.0838229909689,0 -122.546314307402,38.0836246538529,0 -122.546315826559,38.0834939762803,0 -122.546318993521,38.0833272544789,0 -122.546327260364,38.0831425271267,0 -122.546350788668,38.083025453797,0 -122.546406988219,38.0829265323367,0 -122.546502689863,38.0827781942545,0 -122.546633200361,38.0826480161813,0 -122.546706965689,38.082589719525,0 -122.54694799327,38.0824509562386,0 -122.547123261079,38.0823434824161,0 -122.547276237568,38.0822808742361,0 -122.547284804383,38.0822773681152,0 -122.547286876116,38.0822765202213,0 -122.54745830235,38.0822140943144,0 -122.547656670616,38.0821743038802,0 -122.547696663536,38.0821670562257,0 -122.547851447674,38.0821390055701,0 -122.547925077066,38.082125770872,0 -122.548096878544,38.0820948897902,0 -122.548198899154,38.0820772581835,0 -122.548325205388,38.0820507075182,0 -122.54833323738,38.0820487367584,0 -122.548487939993,38.0820107782129,0 -122.548567560895,38.081983927829,0 -122.548593634351,38.0819751351179,0 -122.548680882578,38.0819259018442,0 -122.54875820885,38.0818676176116,0 -122.548820679898,38.0817912507741,0 -122.548875532855,38.0816788039262,0 -122.548919668228,38.08157082208951,0 -122.54894653398,38.0814898116779,0 -122.549005005053,38.0813683660436,0 -122.549068381549,38.0812604582542,0 contacts #khStyle84754 1 -122.549068381549,38.0812604582542,0 -122.549119394126,38.0811930597752,0 -122.549205381574,38.081116783275,0 -122.549307593954,38.0810676071358,0 -122.549463392724,38.0809961054664,0 -122.549629880869,38.0809246447049,0 -122.549789049081,38.0808846998627,0 -122.550003007989,38.0808584843769,0 -122.550164750712,38.0808636122086,0 -122.550433992567,38.0808871779325,0 -122.550677799712,38.080874594805,0 -122.550776282357,38.0808524410441,0 -122.550859251952,38.0808031897195,0 -122.551048955701,38.0806642210522,0 contacts #khStyle84754 1 -122.551065409961,38.0803037777873,0 -122.551105546111,38.07991638731231,0 -122.551111167384,38.0798127632749,0 -122.551122352142,38.0797316922141,0 -122.551137895209,38.0796371188685,0 -122.551183698887,38.0794885855535,0 -122.551290706047,38.0793538057678,0 -122.55139409468,38.0792280246775,0 -122.551455930614,38.0791381349646,0 -122.551494879858,38.0790616765448,0 -122.551494004403,38.0789715465785,0 -122.551486517412,38.0789376744693,0 -122.551478053849,38.0788993841881,0 -122.551413589834,38.0788360486043,0 -122.551353976809,38.0787952632262,0 -122.551276812145,38.0787810105432,0 -122.551257551576,38.078777453015,0 -122.551254319366,38.0787768560085,0 -122.551126979672,38.0787403172645,0 -122.551031680659,38.0787084075741,0 -122.550830558713,38.0786175096067,0 -122.550573828758,38.0784137395971,0 -122.550368845826,38.0782552310546,0 -122.550223558276,38.078123989459,0 -122.550042010513,38.0779790893545,0 -122.549971359878,38.077944568559,0 -122.549930460696,38.0779245846662,0 -122.549777468964,38.0778879458591,0 -122.549670057174,38.0778559884906,0 -122.54964181526,38.077844844427,0 -122.549566263766,38.077815032281,0 -122.549475214704,38.0777876440092,0 -122.549353862843,38.0777569386307,0 -122.549258198683,38.0777327328452,0 -122.54892519282,38.077650336527,0 -122.548732980788,38.0776180515994,0 -122.548564340482,38.0775768445746,0 -122.548557630348,38.0775740593636,0 -122.548432839231,38.0775222615453,0 -122.548429355447,38.0775207950334,0 -122.548324798996,38.0774767815315,0 contacts #khStyle84754 1 -122.539432724584,38.0770050311733,0 -122.539292291512,38.07712614967151,0 -122.539214250233,38.0771844249021,0 -122.538963905145,38.0773321484379,0 -122.538773214492,38.0773989924754,0 -122.538569894434,38.0774342421319,0 -122.538362411674,38.0774514497086,0 -122.538257629637,38.0774555429268,0 -122.537841635027,38.0774268639388,0 -122.537555431774,38.0774088526426,0 -122.537536038611,38.0774076321697,0 -122.537420081602,38.0773756298751,0 -122.537327069948,38.0773211864776,0 -122.537279729191,38.0772675524926,0 -122.537234377757,38.0772161721902,0 -122.537171401998,38.0771448244973,0 -122.537124593284,38.0769959306168,0 -122.537107855965,38.0768246239358,0 -122.537125639175,38.07671654231561,0 -122.537197406305,38.0765230537808,0 -122.537240644434,38.0764466170417,0 -122.537415785199,38.0761072191044,0 -122.53743326134,38.0760733526352,0 -122.537467717532,38.0759720424179,0 -122.537489892488,38.0759068420909,0 contacts #khStyle84754 1 -122.548324798996,38.0774767815315,0 -122.548127142033,38.0774093960974,0 -122.547990564039,38.0773628335084,0 -122.547829444333,38.0773225580595,0 -122.547715912131,38.0772941780055,0 -122.547640256858,38.0772772514408,0 -122.547408480715,38.0772253951683,0 -122.547217806683,38.0771750883854,0 -122.547029409538,38.077102258445,0 -122.546867198416,38.07704367785091,0 -122.546739304369,38.0769974902322,0 -122.546498397628,38.07688840552271,0 -122.546387495272,38.0768440365026,0 -122.546339163138,38.0768247000793,0 -122.546321114715,38.076822750205,0 -122.546260375105,38.0768161881366,0 -122.546166111313,38.0768060041829,0 -122.546096018575,38.0768190144036,0 -122.54607951692,38.0768220773415,0 -122.546023423379,38.0768324890676,0 -122.545815498569,38.0769218094,0 -122.545550258353,38.07706047657881,0 -122.545278002525,38.0771810905856,0 -122.545085207914,38.0772434303839,0 -122.54493887471,38.0772780614436,0 -122.544785465727,38.0773143668183,0 -122.544681368888,38.07732297475971,0 -122.544472574196,38.0773221627051,0 -122.544263863297,38.0773078316138,0 -122.544058799354,38.0772799953603,0 -122.543794044145,38.0772248882295,0 -122.543608670268,38.0771697665596,0 -122.543532992242,38.0771472632861,0 -122.543399329716,38.0770971725403,0 -122.543335018631,38.0770608704272,0 -122.543198361604,38.0769837304762,0 -122.543095704142,38.0769258502773,0 -122.542981060198,38.07686121166211,0 -122.5428363891,38.0767479886812,0 -122.542717484243,38.0766168408191,0 -122.54265792192,38.0764543802982,0 -122.542663514708,38.0762426045817,0 -122.542688235489,38.0760489288838,0 -122.542666385206,38.075895628285,0 -122.542625351071,38.0757907996071,0 -122.542618685419,38.0757737710376,0 -122.542548014605,38.0756788620253,0 -122.542482848466,38.0756155187976,0 -122.542297394523,38.0755291737834,0 -122.542114651092,38.0754653707333,0 -122.542022238672,38.0754289587,0 -122.541911288009,38.0753722163239,0 -122.541826893696,38.0753290552655,0 -122.54170625881,38.0752474692413,0 -122.541685608766,38.075227517096,0 -122.54162196622,38.0751660253534,0 -122.541550359941,38.0751071627299,0 -122.541436504289,38.0749670206536,0 -122.541350872982,38.0748198445585,0 -122.541349783523,38.0748179720807,0 -122.541347450623,38.0748075375317,0 -122.541324002873,38.0747026607309,0 -122.541316506903,38.0746691327876,0 contacts #khStyle84754 1 -122.541316506903,38.0746691327876,0 -122.541286624685,38.0745473447712,0 -122.541273609773,38.0743490151703,0 -122.541278544894,38.0742218184433,0 contacts #khStyle84754 1 -122.535289669589,38.07393787786481,0 -122.535381969142,38.07389046394461,0 -122.53543765676,38.0738618573671,0 -122.5355763517,38.0737903061631,0 -122.535594314957,38.0737797093709,0 -122.535750874191,38.0736873525041,0 -122.535970430446,38.0735620453699,0 -122.536153332203,38.07348616229901,0 -122.536254687915,38.07345952570871,0 -122.536362286265,38.0734599517378,0 -122.536460535983,38.0734738596619,0 -122.536555080907,38.0735102845032,0 -122.536655726811,38.0735963030596,0 -122.536682909825,38.0736296327138,0 -122.536754826626,38.073717811212,0 -122.536758967808,38.0737228887823,0 -122.536765612822,38.0737462184546,0 -122.536824502526,38.0739529709198,0 -122.536884620761,38.074137968277,0 -122.536909050288,38.0742191788519,0 -122.536963323118,38.0743140264167,0 -122.537050803747,38.0744540685505,0 -122.537153078792,38.0746212070778,0 -122.537218475534,38.074727502152,0 -122.537292040145,38.0748470727764,0 -122.53730102252,38.0748671660354,0 -122.537370744211,38.07502313063401,0 -122.537452841543,38.0752262398232,0 -122.537519262321,38.0754292870402,0 -122.537561884542,38.0756773035449,0 contacts #khStyle84754 1 -122.539432724584,38.0770050311733,0 -122.539445646864,38.0769899667663,0 -122.539505922429,38.0769196992211,0 -122.539548300661,38.0768702957779,0 -122.539683342273,38.0766995861407,0 -122.539783606776,38.0765062080206,0 -122.539841340345,38.076276612045,0 -122.539905684271,38.0760154976873,0 -122.539961569038,38.0758534893312,0 -122.54002657635,38.0757140484312,0 -122.540053449625,38.0756330400244,0 -122.540125723379,38.0754710959469,0 -122.540113725893,38.0751105423211,0 -122.540104099796,38.0748266056253,0 -122.540082689945,38.0743758883519,0 -122.54006861142,38.0740063138174,0 -122.540059855174,38.0739251654441,0 -122.540066775617,38.07384407864,0 -122.540038775956,38.0733077150784,0 contacts #khStyle84754 1 -122.535289669589,38.07393787786481,0 -122.535093825517,38.0740317335274,0 -122.534875178451,38.0741254982971,0 -122.534740273146,38.0741610130713,0 -122.53460260294,38.07418299770891,0 -122.534538059247,38.0741917536193,0 -122.534473512121,38.0742005099579,0 -122.534349102123,38.0741910024511,0 -122.534286902077,38.0741862490261,0 -122.534215327992,38.074160901582,0 -122.534158210752,38.0741406738817,0 -122.534015496427,38.0740589921509,0 -122.533934748027,38.07398206319751,0 -122.533853401455,38.07388710648201,0 -122.533787817425,38.0737786934656,0 -122.533725767887,38.0736748008149,0 -122.533688715703,38.0735619950027,0 -122.533686893889,38.073399759813,0 -122.533750287239,38.0731792019582,0 -122.533808178141,38.07303973613121,0 -122.533886504796,38.0729364022644,0 contacts #khStyle84754 1 -122.541278544894,38.0742218184433,0 -122.541279553486,38.0741958231518,0 -122.541302139415,38.0740021393241,0 -122.541328607222,38.0738715593478,0 -122.54136071933,38.0737500141338,0 -122.541363728203,38.0736103295992,0 -122.541322304635,38.0735110280343,0 -122.541294938665,38.0734654581795,0 -122.541287041371,38.0734523075815,0 -122.54123747051,38.0734025437346,0 -122.541082176484,38.0732802642747,0 -122.540884353849,38.0731217672176,0 -122.540736158536,38.0730040214617,0 -122.540674825052,38.0729480554177,0 -122.540671680715,38.0729451862456,0 -122.540618632211,38.0728818894954,0 contacts #khStyle84754 1 -122.533886504796,38.0729364022644,0 -122.534002113032,38.0727971660365,0 -122.534106062928,38.0726984403025,0 -122.534320489064,38.0724829891722,0 -122.534433245527,38.072343741165,0 -122.534472208652,38.0722672883962,0 -122.534499029667,38.07219529368431,0 -122.534513138639,38.0721052231089,0 -122.534525196141,38.0717763087312,0 -122.534519638978,38.0715284383223,0 -122.53449874718,38.0714517476193,0 -122.534460070153,38.071370479882,0 -122.534404918975,38.0713026656388,0 -122.534334063266,38.0712392952601,0 -122.534274683428,38.0712112738988,0 -122.534247388924,38.0711983935978,0 -122.534148544261,38.071166456129,0 -122.534065261593,38.0711526058242,0 -122.533986254254,38.0711387724724,0 -122.533945433742,38.0711265802332,0 -122.533925089224,38.0711205037411,0 -122.533860475703,38.0710841959189,0 -122.533798199807,38.0710163530322,0 -122.533768045781,38.070939625325,0 -122.533757900245,38.07085396459811,0 -122.533756817893,38.0707998842859,0 -122.533722303034,38.0707366582048,0 -122.533681203932,38.0707004438992,0 -122.533603138261,38.07065056337041,0 -122.533553703068,38.0706320671635,0 -122.533505748276,38.0706141248205,0 -122.53339749873,38.0706046809274,0 -122.533292811932,38.0705952511322,0 -122.533259515465,38.070586402483,0 -122.533206737088,38.070572376426,0 -122.533135170561,38.0705090024891,0 -122.533090709374,38.0704412302381,0 -122.533088943573,38.070382640859,0 -122.533067767538,38.07035101209771,0 -122.533022393724,38.0703147805182,0 -122.532974836565,38.0702843930034,0 -122.5329656193,38.0702785034589,0 -122.532900921147,38.0702557137719,0 -122.532870476805,38.0702445194722,0 -122.532814191517,38.0702238234992,0 -122.5327418845,38.0701649527012,0 -122.532689073791,38.0700656026464,0 -122.532649289301,38.069934760209,0 -122.532589754356,38.0697722945954,0 -122.532550339122,38.0696955296038,0 -122.532478261935,38.0696006088835,0 -122.532445064752,38.0695728198165,0 -122.532375488708,38.0695145782297,0 contacts #khStyle84754 1 -122.532119185219,38.0692566935371,0 -122.532138379528,38.06928124561701,0 -122.532182797198,38.0693380616645,0 contacts #khStyle84754 1 -122.528821621064,38.0674589653388,0 -122.528622859812,38.067787128039,0 -122.528535605766,38.0679490049008,0 -122.52848637479,38.0680704777579,0 -122.528436257832,38.0682189850317,0 -122.528390560232,38.0683449784024,0 -122.528307840169,38.0684663163231,0 -122.528186816922,38.0685604618849,0 -122.528081526721,38.0686456580443,0 -122.527937557505,38.0687622425582,0 -122.527690040006,38.0689144600432,0 -122.527579674226,38.0690131542781,0 -122.527500833077,38.069084937585,0 -122.52743507781,38.0691162166334,0 -122.527377276106,38.0691295024048,0 -122.527220432798,38.0691423884003,0 -122.527021121155,38.0690955386258,0 -122.52698635831,38.06908736730411,0 -122.526884611583,38.0690644246809,0 -122.526786427561,38.0690414963642,0 -122.526744353806,38.0690395400247,0 -122.526680289829,38.069036561158,0 -122.526579023823,38.06904967088221,0 -122.526481916941,38.0690808226681,0 -122.526296849757,38.0691611883247,0 -122.526230367743,38.0691760217595,0 -122.526197663064,38.0691833187957,0 -122.52609146712,38.0691873954887,0 -122.525990404038,38.0691689611919,0 -122.525710393673,38.06905516931,0 -122.525617512821,38.0690505352483,0 -122.525612093815,38.069050264878,0 -122.525508602838,38.0690768836676,0 -122.525406793372,38.0690896007852,0 -122.525403773936,38.0690899779445,0 -122.525304136221,38.0690715488339,0 -122.525210315104,38.0690351178844,0 -122.525082525451,38.0689624984639,0 -122.52500814646,38.0688946018508,0 -122.524715168991,38.0685824763391,0 -122.524526540448,38.0684420144163,0 -122.524434174768,38.0684010824581,0 -122.524293807618,38.06840051244851,0 -122.524214761763,38.0684118064802,0 -122.524140469931,38.0684224212077,0 contacts #khStyle84754 1 -122.529122471379,38.06709966840341,0 -122.529090763611,38.0671553075523,0 -122.529076351574,38.0671805970184,0 -122.529064144027,38.0671954947858,0 -122.528988020402,38.0672883938828,0 -122.528889742648,38.0673916443349,0 -122.528821621064,38.0674589653388,0 contacts #khStyle84754 1 -122.523811488878,38.06838953984461,0 -122.523655650833,38.0683573618395,0 -122.52352050522,38.0683207614735,0 -122.523416827408,38.0682662636617,0 -122.523299016132,38.0681936829031,0 -122.523206347666,38.0680896600417,0 -122.523142659049,38.068021805763,0 -122.523129471674,38.0679676760688,0 -122.523131755255,38.06794515369721,0 -122.523144130894,38.0679046470775,0 -122.523175715267,38.0678687249891,0 -122.52340987577,38.06768942465,0 -122.523507361458,38.067599694591,0 -122.523621497293,38.0674694751605,0 -122.52373124098,38.0673572630931,0 -122.523866722202,38.0672316365433,0 -122.523904268438,38.0671551814773,0 -122.523913343386,38.0670741043418,0 -122.523914988918,38.0669299083215,0 -122.523910671977,38.0668262450757,0 -122.523936847016,38.06674523743801,0 -122.523979380464,38.0666688026106,0 -122.524160243154,38.0664667524293,0 -122.524247271865,38.0663409285661,0 -122.524346791481,38.0661565730001,0 contacts #khStyle84754 1 -122.529122471379,38.06709966840341,0 -122.529131116493,38.0669735257612,0 -122.529143978943,38.0668564127413,0 -122.529181008897,38.0667484095402,0 -122.529225587969,38.0666855000278,0 -122.529273700661,38.0666271110353,0 -122.52933458071,38.0665777860004,0 -122.529473527113,38.0664656858692,0 -122.529644197715,38.0662951306021,0 -122.529756550172,38.0662189740192,0 -122.529809689549,38.0662018397078,0 -122.529880784568,38.0661789157114,0 -122.529996353679,38.0661568478456,0 -122.530107820392,38.0661077253883,0 -122.530185770684,38.0660629747242,0 -122.530208177163,38.0660503926126,0 -122.530241547082,38.0660316540859,0 -122.530266886623,38.0660295310636,0 -122.530292875831,38.0660273536045,0 -122.530326334551,38.0660319941161,0 -122.530344060751,38.0660455842071,0 -122.530367170562,38.0661087655849,0 -122.530408064178,38.06617652459671,0 -122.530503906773,38.066230984861,0 -122.530629674602,38.0662855649749,0 -122.530801582874,38.0663673678205,0 -122.53088175093,38.0664217649835,0 -122.530962941928,38.0665392548978,0 -122.531010674133,38.0666521044464,0 -122.531037772506,38.0667603650217,0 -122.531136064309,38.0668779232821,0 -122.531243733886,38.0669774936472,0 -122.531424079762,38.0670773546933,0 -122.531527474951,38.0671769076965,0 -122.531583672492,38.0673033098717,0 -122.531629636847,38.0674702281182,0 -122.531698803468,38.06757415041741,0 -122.531785869212,38.0676646252238,0 -122.531873049861,38.0677370750818,0 -122.531956041583,38.0677959891281,0 -122.532102160897,38.0679002186824,0 -122.532238760016,38.0680449670521,0 -122.532274382271,38.0681577677018,0 -122.532255509194,38.0683244267367,0 -122.532222246087,38.0684009015876,0 -122.532165498293,38.0684727762861,0 -122.532130097453,38.0685492425693,0 -122.532115331101,38.0686302976104,0 -122.532120515436,38.0687114323505,0 -122.532154086212,38.0688107058243,0 -122.532214733127,38.0689100874344,0 -122.532229065845,38.0690092840441,0 -122.532204922005,38.069108326975,0 -122.532164447212,38.0691982919968,0 -122.532119185219,38.0692566935371,0 contacts #khStyle84754 1 -122.524346791481,38.0661565730001,0 -122.524399346136,38.0657422035362,0 -122.524428417054,38.06532323233591,0 -122.524415912564,38.0652736118682,0 -122.524378441766,38.0652283963597,0 -122.524307425676,38.0651920572822,0 -122.524210730855,38.0651601201934,0 -122.524106823784,38.0651416727312,0 -122.523848189726,38.0651406216433,0 -122.523700050041,38.0651310066758,0 -122.523385987725,38.065107197487,0 -122.523126133256,38.0650745954931,0 -122.522928236389,38.0650467516259,0 -122.52278365947,38.06503715001501,0 -122.522642165607,38.06504402855581,0 -122.522612603551,38.06504546565521,0 -122.522457076147,38.0650763760352,0 -122.52227871968,38.0651116994398,0 -122.522178851981,38.0651293178051,0 -122.522128921188,38.0651381264135,0 -122.521949285813,38.0651509124208,0 -122.52120256661,38.0651523688355,0 -122.520927574684,38.0651467381201,0 -122.520592733634,38.0651408618268,0 -122.520339292751,38.0651082799249,0 -122.52007946908,38.0650711649907,0 -122.519978413159,38.0650527255639,0 -122.519878128579,38.0650252765412,0 -122.51978716524,38.0649888529764,0 -122.51970273203,38.0649344307757,0 -122.519650507956,38.0648576089244,0 -122.519616037322,38.0647898725301,0 -122.519600032552,38.0647312245301,0 -122.519556652748,38.0646093755511,0 -122.519492699326,38.064473923153,0 -122.519441841903,38.0644061194825,0 -122.519373143085,38.064342748921,0 -122.519300881975,38.0642793637004,0 -122.519218557933,38.0642294561403,0 -122.519126883417,38.0641930291448,0 -122.519050824663,38.0641656788669,0 -122.518955440629,38.0641517681864,0 contacts #khStyle84754 1 -122.519857154264,38.0491268177142,0 -122.519890758732,38.0492170823849,0 -122.519885437629,38.0492422686886,0 contacts #khStyle84754 1 -122.519857154264,38.0491268177142,0 -122.51982512853,38.0491221801093,0 -122.519684174196,38.0491080832621,0 -122.51952544093,38.04908940698531,0 -122.519411019605,38.0490483805389,0 -122.519318945545,38.0489668885438,0 -122.519238445561,38.0488584058859,0 -122.519196382332,38.0487545872687,0 -122.519229408241,38.0486060133216,0 -122.519287041938,38.048507110162,0 -122.519319985621,38.0484802072431,0 -122.519382105376,38.0484579303575,0 -122.519388405081,38.04845775597491,0 -122.519523888361,38.04845400557031,0 -122.519627293735,38.0484364042148,0 -122.519725771541,38.0484097698715,0 -122.519742287201,38.0484035841582,0 -122.519975703655,38.0483161608754,0 contacts #khStyle84754 1 -122.519975703655,38.0483161608754,0 -122.520049484679,38.0482533742796,0 -122.520124154112,38.0481635531849,0 contacts #khStyle84754 1 -122.520124154112,38.0481635531849,0 -122.520181668812,38.04808267448091,0 -122.520207775231,38.0480347880824,0 -122.520230694205,38.04799274828551,0 -122.520286754648,38.0479163699203,0 -122.520383388074,38.0478446639814,0 contacts #khStyle84754 1 -122.520383388074,38.0478446639814,0 -122.520434233018,38.0478250448263,0 -122.520510504486,38.0477956144686,0 -122.520537395526,38.0477867113195,0 -122.520671841561,38.0477421984829,0 -122.520832436758,38.0476932855892,0 -122.520933343297,38.0476215966698,0 -122.521010713736,38.0475543177869,0 -122.521092152799,38.0475185999276,0 -122.521108838596,38.0475145080786,0 -122.521146377086,38.0475053025248,0 -122.521202650411,38.0475055325185,0 -122.521281337138,38.0475644366116,0 -122.521317401865,38.047605141115,0 -122.521382047382,38.0476324433252,0 -122.52147969404,38.0476238295046,0 -122.521532812048,38.0476008481946,0 -122.521572559379,38.0475836516332,0 -122.521658359955,38.04753443214431,0 contacts #khStyle84754 1 -122.521658359955,38.04753443214431,0 -122.521707149026,38.0474805551473,0 contacts #khStyle84754 1 -122.506894026792,38.0468468405708,0 -122.506936326664,38.0468500099902,0 -122.507021470446,38.0468563895454,0 -122.507153278477,38.0468524376994,0 contacts #khStyle84754 1 -122.507153278477,38.0468524376994,0 -122.507210613792,38.0468501837769,0 -122.507463937282,38.046840224979,0 -122.507612188714,38.0468273290459,0 -122.507803118615,38.0468236249109,0 -122.507986032434,38.0468469248869,0 -122.508153897512,38.0468836804488,0 -122.508360789596,38.0469431312725,0 -122.508507105219,38.0470068339882,0 -122.508636947652,38.0470839864804,0 -122.508736100652,38.04717002285,0 -122.5087862543,38.047233321984,0 -122.508880211093,38.047350880874,0 -122.509026991261,38.0475587879856,0 -122.509120798663,38.04769887778651,0 -122.509198343128,38.0478208740004,0 -122.509251226784,38.0479022097536,0 -122.509292181208,38.0479564574425,0 -122.509332543464,38.0479926772513,0 -122.509511186727,38.0480159569762,0 -122.509621596987,38.0480164191366,0 -122.509739812817,38.0480214202015,0 -122.509844344536,38.0480488956335,0 -122.509941633137,38.0480943660633,0 -122.510020401394,38.0481397589622,0 -122.510095518185,38.0481986555795,0 -122.510175591409,38.0482620792164,0 -122.510240526081,38.0483524775965,0 -122.510288065364,38.0484878666956,0 -122.510288740859,38.0486005281736,0 -122.510302268279,38.0487087370203,0 -122.510343074099,38.0487855154486,0 -122.510425967537,38.04885345704381,0 -122.51050123514,38.0488898222986,0 -122.510615028701,38.0489173357412,0 -122.510686854567,38.0489356611173,0 -122.510762092446,38.04897653242711,0 -122.510777224914,38.0490577098416,0 -122.510752107377,38.0491927953333,0 -122.510707247633,38.0494044062463,0 -122.51067995657,38.0496521412729,0 -122.510703511117,38.0498595315303,0 -122.510752590417,38.0500850537466,0 -122.510824201786,38.0502430748395,0 -122.510901691824,38.0503740823574,0 -122.511005036149,38.0504736533197,0 -122.511075971747,38.0505190128118,0 -122.511168247984,38.050568967648,0 -122.511246870065,38.050636890831,0 -122.511303080452,38.0507542902716,0 -122.511324804455,38.0508084570206,0 -122.511386534499,38.0509529175085,0 -122.511462302577,38.0511289809097,0 -122.511497143006,38.0512462911382,0 -122.511509721114,38.0513905466001,0 -122.511511080908,38.05150771721871,0 -122.511516864335,38.0516023745586,0 -122.511538912477,38.0517151250852,0 -122.511574495546,38.0518279320327,0 -122.511615897176,38.0519227378476,0 -122.511677568922,38.0520762106044,0 -122.51169843179,38.0521529054036,0 -122.511702760883,38.052252063007,0 -122.511678804541,38.0523195583116,0 -122.511663931623,38.0523435160908,0 -122.511634159638,38.0523914737164,0 -122.511555440594,38.0524452216752,0 -122.511542330978,38.0524580403829,0 -122.511486604888,38.0525125298215,0 -122.511430591687,38.0525798913993,0 -122.511403013337,38.0526563842247,0 -122.511399386372,38.0527735340216,0 -122.511387151129,38.0528996606011,0 -122.511418783919,38.0530710335572,0 -122.511394737333,38.0531520474449,0 -122.51129760974,38.0532958453012,0 -122.51126928869,38.0533768413291,0 -122.511270175026,38.0534579591938,0 -122.511302405974,38.05353920781,0 -122.511384563288,38.0536116519663,0 -122.51153576173,38.0536933966261,0 -122.511670281824,38.0537119827795,0 -122.511879068703,38.0537038401744,0 -122.512010206213,38.0536953737906,0 -122.512159746117,38.0537050092603,0 -122.51225140422,38.0537414416329,0 -122.512344427478,38.05378689230161,0 -122.512533473042,38.0538552741842,0 -122.512730444624,38.0539101697017,0 -122.512831483496,38.0539286152683,0 -122.513040834237,38.0539430046594,0 -122.513142081826,38.0539299064287,0 -122.513264522074,38.0539439342164,0 -122.513489426241,38.0539764127975,0 -122.513595630702,38.0539678411034,0 -122.513695483232,38.0539502302612,0 -122.513781266644,38.053905522888,0 -122.513887026371,38.0538563919991,0 -122.513956484306,38.0538026040697,0 -122.514038764977,38.0537488692884,0 -122.51411166564,38.053713120918,0 -122.514211636643,38.0536774847545,0 -122.514342892769,38.0536509908869,0 -122.514586912615,38.0535934197479,0 -122.514757438363,38.053553569089,0 -122.514899587587,38.053495575313,0 -122.515114042803,38.0533838045319,0 -122.515334166713,38.0532765631504,0 -122.515401945583,38.0532477341905,0 -122.51550204942,38.0532051560658,0 -122.515447339302,38.053285011925,0 -122.515425083841,38.05331749633261,0 -122.515352808029,38.0534749193812,0 -122.51530320899,38.0535423093367,0 -122.515217882697,38.0536341566522,0 -122.515169757082,38.053685960116,0 -122.514978601815,38.0538293718573,0 -122.514918791658,38.0538670236206,0 -122.514895689088,38.05388156716,0 -122.514736807276,38.0539815862243,0 -122.514538823713,38.0540799055265,0 -122.514323742409,38.054178153612,0 -122.514151403635,38.0542765785664,0 -122.51410115106,38.054331854457,0 -122.514086100738,38.05434840920941,0 -122.514058673163,38.0544023715548,0 -122.514013019432,38.0545193470799,0 -122.513996513985,38.0546454561927,0 -122.513997076085,38.0547761424475,0 -122.514013548759,38.05487084396631,0 -122.514030823104,38.05495202978091,0 -122.514075940268,38.0550243183977,0 -122.514209749805,38.0551510509097,0 -122.514365733209,38.0552643561629,0 -122.514451635737,38.0553097756447,0 -122.514642824342,38.0553781630185,0 -122.51484553043,38.055428572412,0 -122.515023570089,38.05543832227,0 -122.515181069009,38.05542996148691,0 -122.515304343214,38.0554259652396,0 -122.515480780194,38.05546274582581,0 -122.515645819002,38.0554994790228,0 -122.51570919268,38.0555042473634,0 -122.515798242296,38.0555046154537,0 -122.515900945987,38.0554870145321,0 -122.51601923348,38.0554829969286,0 -122.516086940793,38.0554787702851,0 -122.51618148225,38.055510705164,0 -122.516346789838,38.0556150336176,0 -122.516415478031,38.0556784059639,0 -122.516457777969,38.0557461756953,0 -122.516489243999,38.0558364324059,0 -122.516504502457,38.055899584166,0 -122.516508926939,38.0559852229192,0 -122.516516913442,38.0560708763719,0 -122.516542769234,38.056147590885,0 -122.516601454841,38.0562154281808,0 -122.516680889044,38.0562698320264,0 -122.516870657406,38.0563382099209,0 -122.51703596781,38.0564425374114,0 -122.51711255295,38.0564969292193,0 -122.517172398164,38.0566053280807,0 -122.517235155436,38.05681287841801,0 -122.51727763727,38.0569617627356,0 -122.517283668031,38.057128522204,0 -122.517268355937,38.0572906873803,0 -122.517191923791,38.0574300689626,0 -122.517164231285,38.0575245879818,0 -122.517160790458,38.0576147006119,0 -122.51717248775,38.0576778375911,0 -122.517222921656,38.0577005771496,0 -122.51729348061,38.0576963615711,0 -122.517408239025,38.0576878217003,0 -122.517593615396,38.0576660535205,0 -122.517782018455,38.0576172594629,0 -122.517941006216,38.0575687565039,0 -122.517956914855,38.0575639031837,0 -122.517979183026,38.0575566190026,0 -122.518201804789,38.0574837964882,0 -122.51823125909,38.0574726542962,0 -122.518390354408,38.0574124703492,0 -122.518580652681,38.0572915813402,0 -122.518690388705,38.0571793737279,0 -122.518737761527,38.0571254922611,0 -122.51881576801,38.0570717366081,0 -122.51889148392,38.057050596552,0 -122.518927110485,38.0570406495119,0 -122.519022691477,38.0570230166216,0 -122.519079596106,38.057036769271,0 -122.519117206751,38.0570594553754,0 -122.519217038798,38.0571544983118,0 -122.519286266723,38.0572449092393,0 -122.519346945837,38.0573352850493,0 -122.519369213492,38.0574164905539,0 -122.519376226217,38.0575426968769,0 -122.519369020025,38.0576643385183,0 -122.519287369058,38.05783975078001,0 -122.519247303028,38.0579747765814,0 -122.519223975761,38.0580557949776,0 -122.519209238956,38.0583486466283,0 -122.519186629918,38.0585378201262,0 -122.519115010409,38.0587042607307,0 -122.518982092175,38.0588749559355,0 -122.518847212774,38.0590186048888,0 -122.51869351494,38.0592072397611,0 -122.518617260277,38.0593195849189,0 -122.518564781007,38.0593914706836,0 -122.518429187414,38.0595351162037,0 -122.518293622784,38.0596742553421,0 -122.518157168206,38.0598404286929,0 -122.518024781099,38.060038162986,0 -122.517950097004,38.0601279824569,0 -122.517880488375,38.0602043037513,0 -122.517791883721,38.0603526482268,0 -122.517750923963,38.0605147077985,0 -122.517749650536,38.0606003229858,0 -122.517758380887,38.0606814730167,0 -122.517823786282,38.0609205781801,0 -122.517835366549,38.0610017399318,0 -122.517824299957,38.061168428887,0 -122.517740980266,38.0613798837783,0 -122.517646231269,38.061595797877,0 -122.517562792424,38.0618252774823,0 -122.517502358573,38.0620233074158,0 -122.517485709535,38.0621719479645,0 -122.517472918182,38.0622755410276,0 -122.517453862348,38.0623565765969,0 -122.517412351903,38.06240918233141,0 -122.517400696855,38.0624239526301,0 -122.517314163657,38.0624731658016,0 -122.517217774079,38.0625043129399,0 -122.517040550631,38.0625846964605,0 -122.516925924284,38.0626581786947,0 -122.516893874095,38.0626787247054,0 -122.516737875939,38.0627817269818,0 -122.516656151591,38.0628579975203,0 -122.516602272542,38.0629253702388,0 -122.516568253729,38.063006343904,0 -122.51655489647,38.0630874028311,0 -122.51657378004,38.0632497088649,0 -122.516601746134,38.0633309383241,0 -122.516649008255,38.063403234726,0 -122.516711262007,38.0634710866248,0 -122.516993971563,38.0637110884749,0 -122.517275494458,38.0639150340653,0 -122.517458427388,38.0640509778535,0 -122.517691828987,38.0642051545104,0 -122.517792111628,38.064232605388,0 -122.517891947549,38.0642194973213,0 -122.517994721902,38.0641928822539,0 -122.518098773603,38.0641888040297,0 -122.518202736789,38.0641982443564,0 -122.518306405048,38.0642527467352,0 -122.518394546309,38.0642846535068,0 -122.518489217922,38.0642985617138,0 -122.518606836381,38.0642900324721,0 -122.518660155287,38.0642722254374,0 -122.518709492104,38.0642557482808,0 -122.518726798548,38.0642499683918,0 -122.518736976742,38.0642432236995,0 -122.518787624662,38.064209661266,0 -122.518852696131,38.0641738778821,0 -122.518874822498,38.064169116495,0 -122.518955440629,38.0641517681864,0 contacts #khStyle84754 1 -122.519885437629,38.0492422686886,0 -122.519874587791,38.04929362402251,0 -122.51978715359,38.0493743799201,0 -122.519708920818,38.0494641861685,0 -122.519629946117,38.049558495668,0 -122.519682130157,38.0496398238777,0 -122.519726419765,38.0497301323947,0 -122.519764386569,38.04980689593471,0 -122.51978460365,38.0498745740126,0 -122.519785558093,38.0499466794773,0 -122.519774343897,38.0500277477551,0 -122.519722320225,38.0501401931653,0 -122.519673233972,38.0502391315529,0 -122.519659052622,38.0503382130366,0 -122.519655644658,38.0504238196497,0 -122.519668650116,38.0505049872114,0 -122.519706617249,38.0505817507623,0 -122.519760285569,38.0506540723178,0 -122.519891960033,38.0507807897104,0 -122.519924228715,38.0508575298353,0 -122.51994150866,38.0509387148783,0 -122.519941317361,38.0511865631337,0 -122.519954323258,38.0512677306565,0 -122.520010871118,38.0513355575448,0 -122.520128446897,38.0514396851681,0 -122.520230351101,38.0515437484946,0 -122.520306551899,38.0516567191798,0 -122.520331609696,38.051746948695,0 -122.520325742386,38.0518821150415,0 -122.520326433125,38.051994776509,0 -122.520335877755,38.0520759293985,0 -122.520369572178,38.0521526752251,0 -122.520518405818,38.0522704494555,0 -122.520584157036,38.052347326419,0 -122.520615119737,38.0524060356127,0 -122.520648785257,38.0524872875833,0 -122.520654110986,38.0526540441453,0 -122.52063648596,38.052735086238,0 -122.520593244862,38.052811517157,0 -122.520525188036,38.0528698215497,0 -122.520424479384,38.0529099659916,0 -122.520371022092,38.05291425348641,0 -122.520326201346,38.0529050572853,0 -122.520125510511,38.052764538689,0 -122.520007044005,38.0526874454996,0 -122.519876496852,38.0526057963356,0 -122.519783499776,38.0525558453702,0 -122.51965987098,38.0525057687395,0 -122.519536925312,38.0524602011255,0 -122.519458917781,38.0524058050329,0 -122.519417241081,38.0523515579317,0 -122.51932442116,38.0522745692591,0 -122.519221422327,38.0522290831559,0 -122.519139023352,38.0521926942089,0 -122.519068110608,38.0521428333224,0 -122.519019369576,38.0520795443881,0 -122.518960684977,38.052011708259,0 -122.518881341958,38.0519437872623,0 -122.518803188192,38.051911921859,0 -122.518662228762,38.0518978237556,0 -122.518572053381,38.0518523897699,0 -122.518479264438,38.0517708942102,0 -122.518375908203,38.0516713297528,0 -122.518275342715,38.0515807893701,0 -122.51815628564,38.0514856665021,0 -122.51806596359,38.0514627632518,0 -122.51796112891,38.0514803573289,0 -122.517823972441,38.0515383753967,0 -122.517678326485,38.0515873456616,0 -122.517572007766,38.0516139459712,0 -122.517473583998,38.0516315660113,0 -122.517368213817,38.051622119281,0 -122.517269313992,38.0516036864269,0 -122.517087065158,38.0514767576666,0 -122.516947975088,38.0513950700365,0 -122.516771189569,38.0513042140745,0 -122.516580692206,38.0512403393403,0 -122.516349294913,38.0512213589117,0 -122.516157789656,38.0512025427855,0 -122.516065272283,38.0511886416242,0 -122.515834171613,38.0511245979548,0 -122.515664126311,38.0510923506743,0 -122.515578940248,38.0510469350218,0 -122.515508832321,38.0509835562817,0 -122.515411951103,38.0507668510166,0 -122.515320887891,38.0505321443521,0 -122.515227213205,38.0502613760371,0 -122.514889413921,38.0494172910861,0 -122.514485523354,38.04865855179461,0 -122.514376745642,38.0485184042099,0 -122.514044686626,38.0481024434377,0 -122.513729756797,38.0476820464572,0 -122.513621783545,38.0475283824558,0 -122.513549069461,38.0474289409246,0 -122.513514612365,38.0473612026399,0 -122.513505768999,38.047298077051,0 -122.513481261216,38.0469104293619,0 -122.513511704419,38.0466509216442,0 -122.513512964518,38.0466401801136,0 -122.513513135773,38.04663682699611,0 -122.513520327891,38.0464960075401,0 contacts #khStyle84754 1 -122.521799565129,38.0473998181164,0 -122.521916287644,38.0473056611541,0 -122.521995227765,38.0472158562734,0 -122.522083544805,38.0471080641911,0 -122.522130127399,38.0469550383176,0 -122.52212969708,38.0468018206681,0 -122.522101954509,38.04657639000621,0 -122.522081422935,38.0463374696952,0 -122.522079528457,38.0460805999977,0 -122.52207023523,38.0459717541039,0 contacts #khStyle84754 1 -122.52207023523,38.0459717541039,0 -122.522062978429,38.0458867594118,0 contacts #khStyle84754 1 -122.506894026792,38.0468468405708,0 -122.506815231664,38.0468059518117,0 -122.506757184207,38.0467516313022,0 -122.506727719829,38.0466839120596,0 -122.506713334752,38.0465982309067,0 -122.506731685764,38.046517193918,0 -122.506768556762,38.0464362348879,0 -122.506818188873,38.0463643422533,0 -122.506942293035,38.0462341804908,0 -122.507055140187,38.046137000631,0 -122.507155796815,38.0460503184961,0 -122.50716706617,38.0460386998374,0 -122.507249759198,38.0459534435173,0 -122.507275997873,38.0459263914495,0 -122.507282036767,38.0459201653479,0 -122.507576390478,38.04568256636021,0 -122.507764188063,38.04550760789151,0 -122.507837354567,38.0454313073289,0 -122.507897408768,38.0452918627746,0 -122.5079322313,38.045197375708,0 -122.507973343991,38.045120940437,0 -122.508021579552,38.0450445350584,0 -122.508090351176,38.0449862412703,0 -122.508098958309,38.0449839479146,0 -122.508190253014,38.0449596225515,0 -122.50834333622,38.0449692777031,0 -122.508498436066,38.0449969665091,0 -122.508900221784,38.0450977909016,0 -122.509095862939,38.0451346615348,0 -122.509292096496,38.0451895597183,0 -122.509383000357,38.0452304975307,0 -122.509466721314,38.0452804178984,0 -122.509676841504,38.0453894497593,0 -122.50979398093,38.0454485224355,0 -122.509905542089,38.0454895462682,0 -122.509950387006,38.0454942401877,0 -122.51001025019,38.0454899841999,0 -122.510129414104,38.0454589380385,0 -122.510207324489,38.0454187066146,0 -122.510210099831,38.045417061416,0 -122.510263366813,38.0453854851905,0 -122.510275262603,38.0453784334578,0 -122.510284376589,38.0453675085381,0 -122.510447592214,38.0451718615756,0 -122.510495795317,38.0450999613874,0 -122.510531206953,38.0450235013936,0 -122.510570605621,38.0447758167772,0 -122.510591088824,38.0446947880517,0 -122.510627212455,38.0446183309966,0 -122.510689600964,38.044555502666,0 -122.510693811988,38.0445531466206,0 -122.510777542027,38.0445063000441,0 -122.51087248617,38.0444751519886,0 -122.510975175662,38.04445755523151,0 -122.511387268049,38.0444006919174,0 -122.511595346289,38.04438804041201,0 -122.511915966204,38.0443758574068,0 -122.512248784471,38.0443502052582,0 -122.512601427326,38.0443426600354,0 -122.513048774795,38.0443400137411,0 -122.513256170106,38.0443228501061,0 -122.513670337431,38.0442750000998,0 -122.513770591641,38.0443024542906,0 -122.513845084529,38.04434782690831,0 -122.513903016389,38.0444201688721,0 -122.513908861904,38.044505813775,0 -122.513885562955,38.044582325061,0 -122.51384691912,38.04471735522021,0 -122.513819138042,38.0448253923405,0 -122.513829346497,38.0448975362962,0 -122.513844422055,38.0449877258441,0 -122.513909328657,38.0450826284867,0 -122.51394333897,38.0452179600691,0 -122.513949065623,38.0453216298633,0 -122.513942030376,38.0454162340145,0 -122.51389216784,38.0455241795313,0 -122.513811170444,38.0457086037653,0 -122.513740501946,38.0458389946168,0 -122.513696811517,38.0459830164476,0 -122.513642674397,38.0460909441034,0 -122.513570521086,38.0462303413758,0 -122.513528937248,38.0463788782271,0 -122.513520327891,38.0464960075401,0 contacts #khStyle84754 1 -122.522062978429,38.0458867594118,0 -122.522021800676,38.0457559072536,0 -122.521979110704,38.0456385679607,0 -122.521907606981,38.0455706809309,0 -122.521834532481,38.0455253192005,0 -122.521734536963,38.0454573157755,0 -122.521644572376,38.0453803405203,0 -122.521572913165,38.0452268319825,0 -122.521545504509,38.0450599850644,0 -122.521544128849,38.0449428143162,0 -122.521563946375,38.0448527682209,0 -122.521625935577,38.0447403625636,0 -122.521643557525,38.0446593201894,0 -122.521629155544,38.0445736407076,0 -122.521491663999,38.0443567743617,0 -122.521445862945,38.0442799793114,0 -122.521417869206,38.0442032569845,0 -122.521373151959,38.0439597313124,0 -122.521299650716,38.0437611515314,0 -122.521252689306,38.0436437944895,0 -122.521206147353,38.0435715026634,0 -122.521136753863,38.0435081301255,0 -122.521053709918,38.043462727154,0 -122.52078104412,38.0433309279822,0 -122.520767062424,38.0432903136218,0 -122.520769375205,38.0432632849679,0 -122.520804121736,38.0431778063926,0 -122.520879262822,38.0431240374696,0 -122.52098429016,38.0430748970443,0 -122.521121692166,38.0429763189761,0 -122.521244018832,38.04289570455411,0 -122.521312631672,38.0428599340842,0 -122.521334468567,38.0427879216565,0 -122.521314369089,38.0427022188336,0 -122.5212721013,38.0426299444865,0 -122.521185789856,38.0425394647234,0 -122.521091077874,38.0424264187935,0 -122.52064887036,38.0419694687379,0 -122.520415590793,38.0418062853658,0 -122.520324714274,38.0417608498125,0 -122.520225914889,38.0417289008061,0 -122.520136463111,38.0416834709416,0 -122.520138269321,38.0416248957441,0 -122.520112678956,38.0415076257404,0 -122.520058363286,38.041426288894,0 -122.519986035622,38.0413764227049,0 -122.519885812375,38.0413444675793,0 contacts #khStyle84754 1 -122.519885812375,38.0413444675793,0 -122.519726295253,38.0413393074516,0 -122.519596157216,38.0413072294509,0 -122.519461980937,38.0412390839149,0 -122.519418893043,38.0412103021637,0 -122.519319434247,38.0411438657636,0 contacts #khStyle84754 1 -122.519319434247,38.0411438657636,0 -122.519256007421,38.0410399593966,0 -122.519210446032,38.0409271135988,0 -122.519182302516,38.0407647693678,0 -122.519147942374,38.040354550133,0 -122.519170522272,38.0402780347757,0 -122.519237202804,38.0402107130858,0 -122.519281515942,38.0401716960637,0 -122.519328900174,38.04012997492671,0 -122.51943837416,38.0400538159616,0 contacts #khStyle84754 1 -122.51943837416,38.0400538159616,0 -122.519540071982,38.0399686122963,0 -122.519611142944,38.0398832829734,0 -122.519619421905,38.0398697979353,0 -122.519677374948,38.0397754019945,0 -122.519719067208,38.0397169902906,0 -122.519766228357,38.0396621901515,0 -122.519769306341,38.0396586136025,0 -122.519818742346,38.0396155132262,0 -122.519825896841,38.0396092756316,0 -122.519840743344,38.0395978142231,0 -122.519878155054,38.0395689325901,0 -122.519879759665,38.0395664269813,0 -122.519909816885,38.0395194924231,0 -122.519953315099,38.0394025054155,0 -122.519982274675,38.0393305223795,0 -122.520031051985,38.0391684934127,0 -122.52005377741,38.0390694466851,0 -122.520073595097,38.0389794007519,0 -122.520086202277,38.0389028443468,0 -122.520114302494,38.0388533895294,0 -122.52016513554,38.0388130405158,0 -122.520202307132,38.0387949723652,0 -122.520303037468,38.0387460098479,0 -122.520492932349,38.0386791918093,0 -122.520665021014,38.0386123006177,0 -122.520762831764,38.0385766498763,0 -122.52083853384,38.0385454149965,0 -122.520864563326,38.0385206158476,0 -122.520871501808,38.038514005324,0 contacts #khStyle84754 1 -122.523184549615,38.0377979178135,0 -122.523325383098,38.0377173761147,0 -122.523479065986,38.0376323807836,0 -122.52361135238,38.0375518042941,0 -122.523665060678,38.0375069590823,0 -122.523702416891,38.0374575410156,0 -122.523720122166,38.0373629794823,0 -122.523729164177,38.0372864081598,0 -122.52374342481,38.03717380718731,0 -122.523769284866,38.0370297088537,0 -122.52376371979,38.0368990018576,0 -122.523702122645,38.036732016231,0 -122.523614115509,38.0365739359079,0 -122.523537983204,38.036451954671,0 -122.523495804188,38.0363661623368,0 -122.523429018514,38.0362306999624,0 -122.523398439225,38.0361134102626,0 -122.523345127624,38.03598701536021,0 -122.523263865074,38.035887544859,0 -122.523173169021,38.03581507406221,0 -122.523050190384,38.0357785226581,0 -122.522880859999,38.0357507951046,0 -122.522698651611,38.0357320275653,0 -122.522561283176,38.0357179488239,0 -122.522516589365,38.0356907285468,0 -122.522477622454,38.0356590252342,0 -122.522417523101,38.035591184906,0 -122.522376087288,38.035500888834,0 -122.522365305583,38.035406211351,0 -122.522378680389,38.0353206450551,0 -122.522417157546,38.0352081429225,0 -122.522440923147,38.0351676825581,0 -122.522476551325,38.0350551687907,0 -122.522500188831,38.034924580709,0 -122.522529319387,38.0348255595183,0 -122.522564684413,38.0347536018779,0 -122.522610557118,38.0347087251939,0 -122.522684176263,38.0346684678844,0 -122.52272717086,38.0346280857887,0 -122.522751023684,38.0345741066333,0 -122.522759412515,38.0344885199715,0 -122.522777772052,38.0344029739176,0 -122.522782990948,38.0343669442967,0 -122.522825477443,38.034295015575,0 -122.522899241981,38.0342322269198,0 -122.52296084076,38.0341784014067,0 -122.522988995597,38.03411993335281,0 -122.523013052304,38.0340344104491,0 -122.523013781732,38.0339217544195,0 -122.522999350941,38.0338405811924,0 -122.522995007532,38.0337414235881,0 -122.523011463456,38.03361981885401,0 -122.523028754982,38.0335027236259,0 -122.523030085057,38.0334937165703,0 contacts #khStyle84754 1 -122.523321011238,38.0332200124918,0 -122.523288949014,38.033254863058,0 -122.523201230816,38.0333502095944,0 -122.523095927064,38.03344441461061,0 -122.523087435455,38.033450773064,0 -122.523030085057,38.0334937165703,0 contacts #khStyle84754 1 -122.523420212859,38.0329680598224,0 -122.523421700237,38.0329371163178,0 -122.523424327634,38.0328824557024,0 -122.523412003969,38.0328057974419,0 -122.523367661439,38.0327245025765,0 -122.523309670993,38.032661177615,0 -122.52325229303,38.0325032215332,0 -122.523241660971,38.0321652011777,0 -122.523212116552,38.0319983455883,0 -122.523199997389,38.0318901435962,0 -122.523205332543,38.0318360889662,0 -122.523269707102,38.0316831345987,0 -122.52333088286,38.0315842435209,0 -122.523379210299,38.0314898065094,0 -122.5234091379,38.0313772691902,0 -122.523423543532,38.0312421369195,0 -122.523421452759,38.0311249629986,0 -122.523397734767,38.0310482583702,0 -122.523325473197,38.0309893817167,0 -122.523221585025,38.0309754399589,0 -122.523138378749,38.0309570759173,0 -122.5230808395,38.0309343099261,0 -122.52303706473,38.0308755490375,0 -122.523019044496,38.0307988675238,0 -122.523007462907,38.0307177058543,0 -122.523001595811,38.0305239083809,0 -122.522977737849,38.0302489231309,0 -122.522900118478,38.0300277953345,0 -122.522818080737,38.0298291813026,0 -122.522742985419,38.0297079497621,0 -122.522722932847,38.02967557744181,0 -122.522660964361,38.02956717230081,0 contacts #khStyle84754 1 -122.522356329118,38.0294307400252,0 -122.52210033618,38.02937111353191,0 -122.521916865572,38.0293298078476,0 -122.521784074491,38.0292706832639,0 -122.521689739443,38.0292117155105,0 -122.521617451758,38.0291573440558,0 -122.521570947652,38.02908054601421,0 -122.521543700759,38.0289993202217,0 -122.521537340133,38.02888212879761,0 -122.521547446538,38.0287514855176,0 -122.521616514169,38.0286436147772,0 -122.521754922244,38.0284954697397,0 -122.52191600118,38.0283654424882,0 -122.522110013139,38.0282085111411,0 -122.522162878718,38.0281757388407,0 -122.522326666491,38.0280742035876,0 -122.522390253827,38.0280339045397,0 -122.522503293622,38.0279622643542,0 -122.52259283041,38.0279089801544,0 -122.522691314329,38.0278503712619,0 -122.522784442036,38.0277876617588,0 -122.522890874453,38.0277159930261,0 contacts #khStyle84754 1 -122.518109870228,38.0255705458721,0 -122.518162194122,38.02559241395321,0 -122.518172499495,38.0255967209437,0 -122.518227066809,38.02563750258291,0 -122.51828866692,38.0256918322027,0 -122.518363473272,38.0257957860883,0 -122.518448784845,38.0259268212866,0 -122.518498903214,38.0259946227078,0 -122.518555519022,38.026048931706,0 -122.518646434152,38.0260853561108,0 -122.518753992861,38.0260812915108,0 -122.51884822734,38.02604562754791,0 -122.518913441574,38.0259828061815,0 -122.518913494086,38.0259827189793,0 -122.519048789393,38.0257580434865,0 -122.519127503901,38.0256997837697,0 -122.519132045454,38.0256984899943,0 -122.519236662639,38.0256686870981,0 -122.51940412616,38.0256513485554,0 -122.51963493804,38.0256387758364,0 -122.519821599018,38.0256260217575,0 -122.519892927465,38.0256082885513,0 -122.519958470939,38.0256040507012,0 -122.520073715365,38.0256225482044,0 -122.520135551574,38.0256408269017,0 -122.520194627392,38.02564557516661,0 -122.520243109571,38.0256367609339,0 -122.52030660472,38.0256189954062,0 -122.52040718821,38.0255923689081,0 -122.520559931538,38.0255389175441,0 -122.520624050697,38.0255346734952,0 -122.520682355735,38.025548431094,0 -122.520759087729,38.0255757831234,0 -122.5208442479,38.0256211950295,0 -122.520950323029,38.0256261350832,0 -122.521052271949,38.0256085263466,0 -122.521147928958,38.0255728663462,0 -122.521202994686,38.0255154088869,0 -122.521221061869,38.0254965569469,0 -122.521305022613,38.0253977599019,0 -122.521379667205,38.0253079374768,0 -122.52143992317,38.025240588074,0 -122.521520059475,38.0251823325489,0 -122.521532415956,38.0251806596835,0 -122.521616993659,38.0251692092092,0 -122.521724463166,38.0251786606218,0 -122.521829942582,38.025165571983,0 -122.521908478881,38.0251343478617,0 -122.521968364423,38.0250885049231,0 -122.521972889931,38.02508504060051,0 -122.52204804092,38.0250267643752,0 -122.522121055477,38.0249684793885,0 contacts #khStyle84754 1 -122.522121055477,38.0249684793885,0 -122.522167293732,38.024973716459,0 -122.522286146778,38.0249871779918,0 -122.522472064397,38.0249789230335,0 -122.522597657476,38.024938877466,0 -122.522647777703,38.0249030300288,0 -122.522829458739,38.0247730860194,0 -122.522863645374,38.0247597383945,0 -122.522920841215,38.0247374071592,0 -122.52302916821,38.02472432903411,0 -122.523127321621,38.0247427539779,0 -122.523205956764,38.0248061630962,0 -122.523243231747,38.0248784166286,0 -122.523234786374,38.024973015975,0 -122.523198510564,38.025076514817,0 -122.523138385222,38.0252339929954,0 -122.523099827009,38.0253600143465,0 -122.523104969785,38.0254456562416,0 -122.523135806838,38.0255223899667,0 -122.523248928048,38.0256490285153,0 -122.523368312916,38.025798224263,0 -122.523401998836,38.0258749695027,0 -122.523424203576,38.025965187137,0 contacts #khStyle84754 1 -122.532492581376,38.018908580204,0 -122.532667970123,38.0188463016002,0 -122.532845840944,38.01875688336101,0 -122.532926616234,38.0187076352406,0 -122.5329982205,38.018644831394,0 -122.533052764143,38.0185774531466,0 -122.533084607952,38.0184964653049,0 -122.533085634046,38.0184905423737,0 contacts #khStyle84754 1 -122.51794455141,38.0252803378877,0 -122.517921700395,38.0251811038403,0 -122.51792807521,38.0250774836517,0 -122.517959137836,38.0250100159428,0 -122.518005007216,38.02496514095651,0 -122.518039541829,38.0249112066031,0 -122.518123299865,38.0248439555605,0 -122.518180768903,38.02476758363881,0 -122.518202750611,38.0246730403267,0 -122.518219089287,38.024461308285,0 -122.518250264069,38.0242676626905,0 -122.5183298906,38.0240697098736,0 -122.518399758892,38.02394832512781,0 -122.518465059968,38.023871985239,0 -122.518541101171,38.0237866767044,0 -122.518597709685,38.0237328328607,0 -122.518687215804,38.0236919798902,0 -122.518705346509,38.0236837045408,0 -122.518793411309,38.0236435092929,0 -122.518958521599,38.0235624165413,0 -122.518966296167,38.0235585981071,0 -122.519051387785,38.0235048709559,0 -122.519110196,38.0234687084852,0 -122.519131465255,38.0234556295345,0 -122.519261947318,38.023320973863,0 -122.519373378888,38.0231592017053,0 -122.519379862205,38.0229294035438,0 -122.519377594787,38.0227311140593,0 -122.519392629837,38.0226095037863,0 -122.519427661841,38.02247896277881,0 -122.519473734416,38.022402543448,0 -122.519590684508,38.0222678318913,0 -122.519731044608,38.0221467352617,0 -122.51976659207,38.0221268464769,0 -122.519986907237,38.0220035797822,0 -122.520147593619,38.0219321359583,0 -122.520298369314,38.0218516386071,0 -122.52034883676,38.0218202995943,0 -122.520384882152,38.0217979162832,0 -122.520445877521,38.0217260640003,0 -122.520476019125,38.0216901363895,0 -122.520508619395,38.0216046487716,0 -122.52054795068,38.0214696186217,0 -122.520570669732,38.021370571448,0 -122.520570007714,38.021253403139,0 -122.52054795437,38.0211406536813,0 -122.520529813194,38.0209738437901,0 -122.520515056525,38.0208340859572,0 -122.520529230659,38.020735003818,0 -122.520565332125,38.0206585432331,0 -122.52063368145,38.020550669962,0 -122.52073256127,38.020456440622,0 -122.52083402542,38.0204027790936,0 -122.521014908734,38.0202908592994,0 -122.521166567851,38.0201833261877,0 -122.521324635041,38.0200758190517,0 -122.521437520406,38.02001769727631,0 -122.521448878015,38.0200138749642,0 -122.521609506236,38.0199598166657,0 -122.521758618311,38.01991536157,0 -122.521945410676,38.0198800727421,0 -122.522097282959,38.019849147587,0 -122.522294580584,38.01984093926781,0 -122.522511757317,38.0198418243583,0 -122.522693302133,38.0198470702962,0 -122.522835508913,38.0198791940101,0 -122.523088534071,38.0199523259299,0 -122.523224245273,38.0199979418521,0 -122.523351978307,38.0200660570217,0 -122.523506565845,38.020165825843,0 -122.52362943152,38.0202158954372,0 -122.523757281775,38.0202659851602,0 -122.523883083354,38.0203025473088,0 -122.523986244664,38.020316485507,0 -122.524092341544,38.0203169164243,0 -122.524197159761,38.0202948102006,0 -122.52427927928,38.0202590926274,0 -122.5242986102,38.0202445172069,0 -122.524356559713,38.0202008235013,0 -122.524563536433,38.0200169021953,0 -122.524623102179,38.0199450419056,0 -122.524789577588,38.0197474367725,0 -122.524890078524,38.0196216658768,0 -122.524971775342,38.019540882384,0 -122.525171947519,38.0193073623039,0 -122.52530517243,38.0191862300004,0 -122.525456227111,38.019060663372,0 -122.52559998679,38.0189621052461,0 -122.525750895541,38.0188590695014,0 -122.525905306126,38.0187650604715,0 -122.526027746687,38.0187098999294,0 -122.526073841301,38.0186891338487,0 -122.526249438637,38.0186222482774,0 -122.526500656956,38.0185331361531,0 -122.526683287151,38.0184797974639,0 -122.526931540617,38.0184086979296,0 -122.527281134633,38.0183019557262,0 -122.527717596484,38.0181955626028,0 -122.527905064947,38.0181647733721,0 -122.528146705923,38.0181251892348,0 -122.528346933061,38.018103463417,0 -122.528542686083,38.018113263871,0 -122.528733965235,38.0181545906207,0 -122.528914391196,38.0182229116701,0 -122.529061034855,38.0183406667907,0 -122.529160231233,38.0184176737394,0 -122.529252760398,38.0185352111792,0 -122.529316038488,38.0186616438047,0 -122.529401332655,38.0187971775559,0 -122.529508786885,38.0189192810986,0 -122.529617895645,38.0190053402008,0 -122.529784026031,38.0190826152767,0 -122.530007149429,38.0191556123435,0 -122.530250210665,38.0192286889135,0 -122.530478577695,38.0192611487518,0 -122.530752688308,38.0192667530952,0 -122.531108030041,38.0192636691191,0 -122.531415807647,38.0192378620159,0 -122.531569753657,38.0192159456445,0 -122.531585043106,38.0192123144951,0 -122.531681717285,38.0191893549228,0 -122.531820112538,38.0191493505807,0 -122.532002826361,38.0190824848423,0 -122.532492581376,38.018908580204,0 contacts #khStyle84754 1 -122.539621304613,38.0188422820191,0 -122.539514317354,38.018882419161,0 -122.539434406153,38.0189123984065,0 -122.539423436046,38.0189165139128,0 -122.539276568897,38.0189716119247,0 -122.539178821037,38.01900277217121,0 -122.53907899332,38.0190249114053,0 -122.538978594451,38.0190245164343,0 -122.53879636639,38.0190147865776,0 -122.538545210765,38.0189822531404,0 -122.538343186672,38.0189499127481,0 -122.538144581788,38.0189401173587,0 -122.537878332429,38.0189300548774,0 -122.537567280705,38.0189108022431,0 -122.537264717128,38.0189005950554,0 -122.537008408401,38.0188950762347,0 -122.53682908578,38.0188763420622,0 -122.536681833692,38.01885322805241,0 -122.536581633447,38.0188212872009,0 -122.53638410975,38.0187529102498,0 -122.536170549719,38.0186303929993,0 -122.535964139204,38.0185033972988,0 -122.535837906348,38.0184217826016,0 -122.535520246104,38.0182087242784,0 -122.53496288546,38.0178414973363,0 -122.534888693127,38.0177905522187,0 -122.534771460412,38.0177100526334,0 contacts #khStyle84754 1 -122.533085634046,38.0184905423737,0 -122.533098650633,38.0184154065273,0 -122.533097028371,38.0183342853319,0 -122.533070315085,38.01816744305101,0 -122.533044454975,38.018090731644,0 -122.533003642112,38.0180139606414,0 -122.532938819952,38.0179055493109,0 -122.532823272018,38.0178239739701,0 -122.532707069445,38.017733383156,0 -122.532631424565,38.0176474603669,0 -122.532532940108,38.01745779980471,0 -122.532527672568,38.0173901831724,0 -122.53253755777,38.0172910823637,0 -122.53260306705,38.0171786843025,0 -122.532657609958,38.0171113062163,0 -122.532717763289,38.01705746960071,0 -122.532831868961,38.0169840605119,0 -122.532850031362,38.0169723758345,0 -122.532935731776,38.0169321600705,0 -122.533081071134,38.0169192201411,0 -122.533183488987,38.0169376536818,0 -122.533280837089,38.0169695860669,0 -122.533370295899,38.0170104997064,0 -122.533473169268,38.0170694921847,0 -122.533585156605,38.0171510527241,0 -122.533697941751,38.0172190972063,0 -122.533785179485,38.0172735208167,0 -122.533883838357,38.0173234834178,0 -122.533968399185,38.01735085799461,0 -122.53406443806,38.0173647590251,0 -122.534197531137,38.0173743008998,0 -122.534315529203,38.0174063145117,0 -122.534409887946,38.017460765958,0 -122.534514072996,38.017537788237,0 -122.534675078785,38.0176375679455,0 -122.534771460412,38.0177100526334,0 contacts #khStyle84754 1 -122.509499771717,38.0154522534453,0 -122.509529386469,38.0154305511567,0 -122.50956196652,38.0153495728016,0 contacts #khStyle84754 1 -122.501691224488,38.0136580303043,0 -122.501794791484,38.0138206999202,0 -122.501936593683,38.0140150765161,0 -122.502056689819,38.0141552842748,0 -122.502136068512,38.0142096979182,0 -122.502215508161,38.0142550990247,0 -122.502321474372,38.0142735744856,0 -122.502449755868,38.0142560936106,0 -122.502578371682,38.0141890439321,0 -122.502672902544,38.01410833038111,0 -122.502760161296,38.0140501177591,0 -122.502863613552,38.0140190119825,0 -122.502972579452,38.0140149677228,0 -122.503067032092,38.0140514191744,0 -122.503141397075,38.0141103172572,0 -122.503272236353,38.0142415565776,0 -122.503381655385,38.0143817177385,0 -122.503679919766,38.0148155927128,0 -122.503720049091,38.0148833581938,0 -122.503733925255,38.0149374933958,0 -122.503727092597,38.0150005536567,0 -122.503688992281,38.0150544687805,0 -122.503594900271,38.0151757423287,0 -122.503505110351,38.0152925276512,0 -122.503465872878,38.0154095270673,0 -122.503473870794,38.0154906756145,0 -122.503512576264,38.0155584351274,0 -122.503561992331,38.0156217336217,0 -122.503622211476,38.015654131535,0 -122.503646418456,38.0156671548787,0 -122.503753811078,38.01568563509291,0 -122.503830087439,38.0156724389002,0 -122.503876580521,38.0156410911138,0 -122.503956756199,38.0155762023659,0 -122.503981822341,38.0155559154987,0 -122.504123209966,38.0153897780462,0 -122.504261945159,38.0152254575123,0 -122.504271065625,38.0152146550319,0 -122.50427543776,38.0152106433245,0 -122.504354173564,38.0151383981996,0 -122.504427040653,38.0151026553453,0 -122.504534735462,38.0150760724155,0 -122.50469784566,38.0150677490572,0 -122.504870802884,38.0150774925537,0 -122.505022278933,38.0151051705657,0 -122.505245395757,38.0151737081489,0 -122.50550434191,38.0153144984109,0 -122.505600963711,38.0153464506096,0 -122.505704826534,38.0153604077829,0 -122.505808067997,38.0153608431322,0 -122.50596266477,38.0153479757546,0 -122.506130729314,38.0153441776643,0 -122.506283069275,38.0153493258398,0 -122.506446059248,38.015359025036,0 -122.506620260507,38.0153958094266,0 -122.506755095561,38.0154541112344,0 -122.506799174733,38.01547317073051,0 -122.507021642586,38.01553268947551,0 -122.507204388694,38.0155695089418,0 -122.507361743403,38.0155701704348,0 -122.507494328191,38.0155481957804,0 -122.507622199655,38.0154856438356,0 -122.507670489721,38.0154699633557,0 -122.507690703202,38.0154633997394,0 -122.507782612824,38.0154547730148,0 -122.507934983225,38.0154554128078,0 -122.508022440333,38.0154738054301,0 -122.508112565152,38.0155192474107,0 -122.508207022271,38.015555694758,0 -122.508263211129,38.0155649432541,0 -122.508316642104,38.0155606610403,0 -122.508406565969,38.0155294936417,0 -122.508530104498,38.0154759352758,0 -122.508679095074,38.0154495217041,0 -122.508892638423,38.0154594294174,0 -122.509108257863,38.0154783581815,0 -122.509227785823,38.0154923778551,0 -122.509339541676,38.0154973521279,0 -122.509388143825,38.0154904089467,0 contacts #khStyle84754 1 -122.538402513437,38.0136478268063,0 -122.538303961808,38.0136602038764,0 -122.538206784072,38.0136724083146,0 -122.537943232103,38.0136893949321,0 -122.537267919153,38.0137408067572,0 -122.537057779583,38.01376172158701,0 -122.536948493237,38.01377259851581,0 contacts #khStyle84754 1 -122.509994909355,38.0147024660641,0 -122.510052348803,38.01463060423271,0 -122.510098236974,38.014545174493,0 -122.510100651867,38.0145406786944,0 -122.510140913222,38.0144822641317,0 -122.510164888288,38.0144102623731,0 -122.510160173716,38.014369685317,0 -122.510136175253,38.0143380404097,0 -122.510075242616,38.0142927219994,0 -122.510005616321,38.0142698990758,0 -122.509903088313,38.01426947040011,0 -122.50971930241,38.014282220874,0 -122.50962383445,38.0142908342321,0 -122.509545574375,38.014281494031,0 -122.509476690236,38.0142541675279,0 -122.509358978036,38.0141815728695,0 -122.509241858094,38.0141270060631,0 -122.509158764243,38.0140951135028,0 -122.509056266493,38.0140901778437,0 -122.508985748659,38.0140943888178,0 -122.508921518753,38.014116651585,0 -122.508851562802,38.0141433966949,0 -122.508782318799,38.0141701447467,0 -122.508712332723,38.0142013960193,0 -122.508593188586,38.0142369475308,0 -122.508509764482,38.0142546232237,0 -122.508417234557,38.0142497288052,0 -122.508364696812,38.014226976582,0 -122.508293857472,38.0141726029524,0 -122.508244498404,38.0141002939149,0 -122.508157202563,38.0139512173361,0 -122.50811837341,38.0139014842928,0 -122.508052488467,38.0138516376806,0 -122.50789793501,38.01375184869,0 -122.507765243206,38.0136836959173,0 -122.507607541597,38.0136289570493,0 contacts #khStyle84754 1 -122.539718872926,38.0134667995004,0 -122.539659756864,38.0134843508961,0 -122.539634358943,38.0134878683746,0 -122.539501553077,38.0135062611936,0 -122.539093860642,38.01355544434391,0 -122.539031269513,38.0135629950737,0 -122.538798221163,38.0135981291148,0 -122.538402513437,38.0136478268063,0 contacts #khStyle84754 1 -122.540391598719,38.0131165164517,0 -122.540268204103,38.0131938249077,0 -122.53992595004,38.01338625597321,0 -122.539824537323,38.0134354279379,0 -122.539718872926,38.0134667995004,0 contacts #khStyle84754 1 -122.507607541597,38.0136289570493,0 -122.507378881756,38.0135378687784,0 -122.507297876153,38.0134944804343,0 -122.50720080402,38.0134424863709,0 -122.507104424964,38.0133744855219,0 -122.507027390335,38.0132885404652,0 -122.506980790657,38.0132297616165,0 -122.506958428815,38.0131665783349,0 -122.506944942319,38.0130538622822,0 -122.506958481237,38.0129457662838,0 -122.506993198925,38.01286479760361,0 -122.507045625798,38.0127974225125,0 -122.507113468162,38.012747213605,0 -122.507124335779,38.0127391706682,0 -122.507225889369,38.0126720020648,0 -122.507365980217,38.01259147623071,0 -122.507519006838,38.0124929790867,0 contacts #khStyle84754 1 -122.501691224488,38.0136580303043,0 -122.501619149373,38.0135766091847,0 -122.50155543556,38.0135222618052,0 -122.501405285441,38.0134044575461,0 -122.501311169667,38.0133184361078,0 -122.501269680357,38.0132416512671,0 -122.501265123105,38.013178542674,0 -122.50127985049,38.01310650339001,0 -122.501311878854,38.0130029931092,0 -122.501367463606,38.0128905702853,0 -122.501426048459,38.0127556283336,0 -122.501466091066,38.01262511385921,0 -122.501500845039,38.0125396405979,0 -122.501580168192,38.0123912676379,0 contacts #khStyle84754 1 -122.507728720851,38.0124352771976,0 -122.50792919913,38.01248118275191,0 -122.508126057627,38.0125360855214,0 -122.508322886371,38.0125954942105,0 -122.508418914063,38.0126094161146,0 -122.508514941792,38.0126233379405,0 -122.508697119653,38.0126376208333,0 -122.508835244601,38.0126381997276,0 -122.508946554225,38.0126026151293,0 -122.509022976546,38.01256688429071,0 -122.509095126893,38.01253113550981,0 -122.509212964052,38.0124775525017,0 -122.509282768354,38.0124733383977,0 -122.50935598264,38.0124916703958,0 -122.509438422764,38.0125145473361,0 -122.509487519626,38.0125192591882,0 -122.509537388424,38.0125149615023,0 -122.509625082227,38.0124973029314,0 -122.509740011103,38.0124527199735,0 -122.509850727857,38.01239910654011,0 -122.509987727879,38.0123546156348,0 -122.510080345379,38.0123459900554,0 -122.510221287808,38.0123510854708,0 -122.510417082771,38.01235190347721,0 -122.510717628763,38.0123396393633,0 -122.510833681767,38.0123401237674,0 -122.510952522927,38.0123496324391,0 -122.511101237478,38.0123637719774,0 contacts #khStyle84754 1 -122.541270031595,38.012273943164,0 -122.541097640399,38.0125166127091,0 -122.540908469083,38.0127096460702,0 -122.54077232096,38.0128488103675,0 -122.540568420835,38.0130057344066,0 -122.540391598719,38.0131165164517,0 contacts #khStyle84754 1 -122.516294335018,38.0118580729517,0 -122.51632079643,38.0118401566532,0 -122.516395731394,38.0118134276177,0 -122.51647858072,38.0117921377356,0 contacts #khStyle84754 1 -122.536948493237,38.01377259851581,0 -122.53691952575,38.0137754815417,0 -122.536650989162,38.0137924455626,0 -122.536459584338,38.0137842546313,0 -122.536418934424,38.0137825150284,0 -122.536188587302,38.0137275270138,0 -122.535907402327,38.0136047415518,0 -122.535901155364,38.0136012854506,0 -122.535644872103,38.0134594974486,0 -122.535471114913,38.01335065571831,0 -122.535123459968,38.0131555028205,0 -122.534911997172,38.0130420043013,0 -122.534716312576,38.0129105425351,0 -122.534569424841,38.0128123400774,0 -122.534343371732,38.0126612103876,0 -122.534179984802,38.0124893186515,0 -122.53409306566,38.0123853264065,0 -122.533997204333,38.0122317283701,0 -122.533927743699,38.012069222496,0 -122.533807261945,38.0117169866442,0 contacts #khStyle84754 1 -122.501679536637,38.0121213077836,0 -122.501660697487,38.0119589982773,0 -122.5016461723,38.0118958473053,0 -122.501618089143,38.0118371450582,0 -122.501593504997,38.0117874704275,0 -122.501553226978,38.0117422354287,0 -122.501479547133,38.0116878456167,0 -122.501404942158,38.0116649964331,0 -122.501330276286,38.0116511596888,0 -122.501209271186,38.0116461384642,0 -122.501149404412,38.011654896443,0 -122.50108675069,38.0116546297822,0 -122.501086644353,38.0116546139306,0 contacts #khStyle84754 1 -122.501086644353,38.0116546139306,0 -122.500962280642,38.0116360749262,0 -122.500766147339,38.0115811640404,0 -122.500596631233,38.0114858087737,0 -122.500370647887,38.0113181108432,0 -122.500193240377,38.0112317341334,0 -122.500095886473,38.0112042811269,0 -122.500016209183,38.0111949288622,0 contacts #khStyle84754 1 -122.541814052683,38.0145562995915,0 -122.541861297189,38.0145159269072,0 -122.541901505617,38.0144620075609,0 -122.541959222181,38.0143405609575,0 -122.542042250656,38.0141561239441,0 -122.542130642505,38.0137959590339,0 -122.542196861905,38.0135663924154,0 -122.542310408316,38.0132829340563,0 -122.542457641226,38.0129635560689,0 -122.542588077653,38.0127117080151,0 -122.542674774478,38.0125092592909,0 -122.542784533863,38.0122618366766,0 -122.542888024406,38.0119918575892,0 -122.542981267073,38.0117669022384,0 -122.543043558904,38.0115959026864,0 -122.543238320204,38.0110739217718,0 -122.543299019381,38.0109299541426,0 -122.543363473585,38.0107544564377,0 -122.543389495304,38.0106914684905,0 -122.54339486989,38.0106284000861,0 -122.543391877178,38.0105472720255,0 contacts #khStyle84754 1 -122.542693356429,38.0104580052937,0 -122.542625735254,38.0105442857345,0 -122.542556715192,38.0106521694869,0 -122.542419302512,38.0108814584571,0 -122.542274741263,38.0111152257137,0 -122.54215560206,38.0112679772485,0 -122.541926997953,38.0115059220431,0 -122.541656733314,38.0118022863861,0 -122.541635658947,38.0118292421365,0 -122.541532722639,38.0119609053237,0 -122.541528346298,38.0119665029773,0 -122.541424913561,38.0120988005408,0 -122.541402374101,38.0121242885319,0 -122.541270031595,38.012273943164,0 contacts #khStyle84754 1 -122.543391877178,38.0105472720255,0 -122.543391212201,38.0105292454303,0 -122.543368931723,38.010448043734,0 -122.543343663844,38.0103893623015,0 -122.543303500564,38.0103216100477,0 -122.543268097737,38.0102899273917,0 -122.543190772787,38.01024456216251,0 -122.543083405762,38.0102216116581,0 -122.542956648123,38.0102256237222,0 -122.542911693128,38.0102445804142,0 -122.542893115604,38.0102524142052,0 -122.542855869856,38.0102883199683,0 -122.542738408711,38.0104005212318,0 -122.542693356429,38.0104580052937,0 contacts #khStyle84754 1 -122.533807261945,38.0117169866442,0 -122.53377185038,38.01161345809461,0 -122.533729502878,38.0114420471946,0 -122.533648140254,38.0111352896342,0 -122.533503756109,38.0106615450955,0 -122.533400808125,38.0103907524449,0 -122.533247074127,38.0101185725202,0 contacts #khStyle84754 1 -122.51647858072,38.0117921377356,0 -122.516482028385,38.0117912517838,0 -122.516692921258,38.0117695897418,0 -122.516791233118,38.0117609823525,0 -122.516903666388,38.0117704585917,0 -122.517006873507,38.0117753903271,0 -122.517133575879,38.0117804187725,0 -122.517307445753,38.0117586030908,0 -122.517484222414,38.0117277863666,0 -122.517553461043,38.01170103313961,0 -122.517662865064,38.0116293814135,0 -122.517700575165,38.011598363959,0 -122.517733733809,38.0115710901546,0 -122.517771051229,38.0115261799397,0 -122.517805726996,38.0114497142101,0 -122.51784265648,38.0113552322351,0 -122.517856031859,38.0112696661065,0 -122.517883676096,38.0111796522943,0 -122.517975898404,38.0110132956794,0 -122.518131220408,38.0108877558211,0 -122.518144172996,38.0108796445537,0 -122.518231308201,38.0108250780013,0 -122.518354861309,38.01076700290451,0 -122.518458985116,38.0107403924904,0 -122.518633681822,38.01070055272361,0 -122.518769014321,38.01069209571531,0 -122.518910725088,38.01068817110971,0 -122.51901484859,38.01066156020071,0 -122.519068481207,38.0106257292715,0 -122.519119354077,38.0105763678626,0 -122.519130167668,38.0105613405934,0 -122.519203418033,38.0104595469338,0 -122.519308870001,38.0103383072856,0 -122.519394893041,38.0102485325135,0 -122.519539619718,38.0101094281847,0 -122.51975595273,38.0099075278129,0 -122.519813973582,38.0098536890052,0 -122.519845593207,38.0098087547676,0 -122.519867245384,38.0097637796892,0 -122.519878188831,38.0097232671169,0 -122.519898857161,38.0096106923297,0 -122.519923855836,38.0094891225176,0 -122.519964781445,38.0093270605254,0 -122.520024393622,38.0091380367695,0 -122.520078163244,38.0089715209461,0 contacts #khStyle84754 1 -122.520078163244,38.0089715209461,0 -122.520178561159,38.0087511194463,0 -122.520262144386,38.0085545927853,0 -122.520302921733,38.0084587138622,0 -122.520426084272,38.0082262799496,0 contacts #khStyle84754 1 -122.533247074127,38.0101185725202,0 -122.533224785515,38.0100791112372,0 -122.533082139295,38.0098937813928,0 -122.532954871398,38.0097535764659,0 -122.532856394497,38.0096765754964,0 -122.532752791298,38.009622085909,0 -122.532581809443,38.0095267700876,0 -122.532419114279,38.0094720445066,0 -122.532349514064,38.0094447285093,0 -122.532280625855,38.0094174153124,0 -122.532211025743,38.0093900992336,0 -122.531804617092,38.0092577912748,0 -122.531611452237,38.0091804109424,0 -122.531461802816,38.0090896851309,0 -122.531109280718,38.00888098171971,0 -122.530944968263,38.0087451327733,0 -122.530826703617,38.0086455189981,0 -122.530770235305,38.0085686844453,0 -122.53074925479,38.0083973579576,0 -122.530742169085,38.0082801636736,0 -122.530752045592,38.00822474468521,0 -122.530760627332,38.0081765908083,0 -122.530784781068,38.0080730407412,0 -122.530843848555,38.0079651240557,0 -122.530890969498,38.0078647591368,0 -122.530900866059,38.0078436799877,0 -122.53097864428,38.0077042934478,0 -122.53111594291,38.0074975492684,0 -122.531183100967,38.0074009655037,0 contacts #khStyle84754 1 -122.520426084272,38.0082262799496,0 -122.520474474655,38.0081349565621,0 -122.520552955347,38.0080000862425,0 -122.520677887581,38.0078383675656,0 -122.520801931628,38.0077036833972,0 -122.52098287163,38.0075782444,0 -122.52101880897,38.0075607346416,0 -122.52115714024,38.0074933352844,0 -122.521320553909,38.0074354198564,0 -122.521513068944,38.0073911421495,0 -122.521721129409,38.0073649530846,0 -122.521897689298,38.0073656734399,0 -122.52209626077,38.0073754960453,0 -122.522348023118,38.0074170797624,0 contacts #khStyle84754 1 -122.531183100967,38.0074009655037,0 -122.531250307083,38.0073043123287,0 -122.531340244239,38.0071559613993,0 -122.531432054322,38.0070375369926,0 contacts #khStyle84754 1 -122.523566780768,38.0065523088236,0 -122.523619114059,38.0066065981199,0 -122.52372152866,38.0067331930152,0 -122.523856285043,38.0069230085478,0 -122.523890675039,38.0069997567296,0 -122.523887870043,38.007103392096,0 -122.52388082253,38.0072025038453,0 -122.523855831142,38.0073240745995,0 -122.523813215874,38.0074185354589,0 -122.523731385769,38.0075218497148,0 -122.523646234091,38.0075994384926,0 -122.523613217498,38.0076295225962,0 -122.523469681184,38.0076965347931,0 -122.523287017099,38.0077588812912,0 -122.523183727672,38.0077674738867,0 -122.52307910178,38.0077625418125,0 -122.522978893295,38.0077350957233,0 -122.522861178012,38.0076625144775,0 -122.522733525004,38.0075853862663,0 -122.522617146553,38.0075263293605,0 -122.522534707792,38.0075034616499,0 -122.522450874395,38.0074760818188,0 -122.522348023118,38.0074170797624,0 contacts #khStyle84754 1 -122.523781337079,38.0060709979765,0 -122.523682393157,38.0061787490714,0 -122.523599852332,38.0062820603732,0 -122.523578354447,38.0063388183772,0 -122.523570880397,38.0063585510921,0 -122.523564748273,38.00642612188571,0 -122.523572142747,38.0064937476634,0 -122.523570544207,38.0065207794531,0 -122.523566780768,38.0065523088236,0 contacts #khStyle84754 1 -122.52434422164,38.0057803688784,0 -122.524400129229,38.0057220127901,0 -122.524473921881,38.00565021009311,0 -122.524537689427,38.0055873794446,0 -122.524582147931,38.0055379895856,0 -122.524626548277,38.0054976122379,0 contacts #khStyle84754 1 -122.531432054322,38.0070375369926,0 -122.531434280805,38.0070346650805,0 -122.531576216886,38.0068820154637,0 -122.531644963042,38.00681920085751,0 -122.531800138785,38.0067116676982,0 -122.531884461207,38.006662434323,0 -122.531976250892,38.0066240270375,0 -122.532076484961,38.0065820862656,0 -122.532339160647,38.0064749815432,0 -122.532687238208,38.0063727231761,0 -122.532936783623,38.0063151349693,0 -122.533032410037,38.00627946496281,0 -122.533116645284,38.00624374906921,0 -122.533201792617,38.0061764929232,0 -122.533245476768,38.0061361094594,0 -122.533352380582,38.0060058500494,0 -122.533415942329,38.0058618988421,0 -122.533480415329,38.0056864065365,0 -122.533553886396,38.0055515074579,0 -122.53363051775,38.0054797102821,0 -122.533727737569,38.0054170077367,0 -122.533857672544,38.0053545782184,0 -122.534081218817,38.0052471709376,0 -122.534474394955,38.00510452905411,0 -122.534700239317,38.0050294413851,0 -122.534704429637,38.0050280482018,0 -122.534889610478,38.0049664797005,0 -122.535244995452,38.0048326980091,0 -122.535432682614,38.0047613399923,0 -122.535668124195,38.0046811581162,0 -122.535807013858,38.0046040813017,0 -122.535837442749,38.0045871947457,0 -122.53595214241,38.0044614701772,0 -122.536021849735,38.00435809930501,0 -122.536108518883,38.0042822666057,0 contacts #khStyle84754 1 -122.536108518883,38.0042822666057,0 -122.536211554002,38.0041921139235,0 -122.536338420975,38.0041248423159,0 -122.536388701709,38.00409818072811,0 -122.536777539335,38.0039645266922,0 -122.537198411192,38.0038309978688,0 -122.537597670168,38.0037379397343,0 -122.53780010452,38.0036981807982,0 -122.538108640154,38.0036543333404,0 -122.538268134218,38.0036504554435,0 -122.538457471698,38.003655707637,0 -122.538661019037,38.0036655218502,0 contacts #khStyle84754 1 -122.538661019037,38.0036655218502,0 -122.538838881616,38.0036842474176,0 -122.538947623599,38.0036935425887,0 -122.539004670134,38.0036984188362,0 -122.539123585869,38.0036943801542,0 -122.539191526309,38.0036450770635,0 -122.539200786346,38.0036318842869,0 -122.539264075961,38.0035417154143,0 contacts #khStyle84754 1 -122.539264075961,38.0035417154143,0 -122.539181572216,38.00341521220651,0 -122.538868081856,38.0029993915389,0 -122.538670985641,38.0027552709579,0 -122.53856040292,38.0025655673496,0 -122.538350805208,38.0022718267366,0 -122.538146819553,38.00199162701941,0 -122.537756192185,38.0013907374137,0 contacts #khStyle84754 1 -122.525046576205,38.0050576895989,0 -122.525135505369,38.0048462499444,0 -122.525194607439,38.0047338298122,0 -122.525263676054,38.0046214500169,0 -122.525338236689,38.0045406371022,0 -122.525444775002,38.0044689663841,0 -122.525485809912,38.0044489038105,0 -122.525627603102,38.0043795788312,0 -122.525759682588,38.0043215303456,0 -122.525910983322,38.0042635594609,0 -122.526266438716,38.0041207924443,0 -122.52652190807,38.0040271906928,0 -122.527047881495,38.0038265270319,0 -122.527588090089,38.0036259183805,0 -122.527841680065,38.00349174870831,0 -122.52790507782,38.0034490648208,0 -122.528081204206,38.0033304835411,0 -122.52830241979,38.0031375995024,0 -122.528461468997,38.0029805160261,0 -122.528637207879,38.0027739292139,0 -122.528773475107,38.0026167536769,0 -122.528878101987,38.0025090210371,0 -122.528955648031,38.0024056858529,0 -122.529018157888,38.0023158093508,0 -122.529087757683,38.0022304676856,0 -122.529158781089,38.0021451316966,0 -122.529279808851,38.0020329581859,0 -122.529471600234,38.0018760047938,0 -122.529672674005,38.0017145819451,0 -122.529768580227,38.0016481806407,0 -122.5298020992,38.0016249735125,0 -122.529909182299,38.0015426394056,0 -122.529918710243,38.0015353135415,0 -122.529933235621,38.0015271180662,0 -122.530077321871,38.001445821857,0 -122.530249458803,38.0013563841651,0 -122.530447934786,38.0012670517419,0 contacts #khStyle84754 1 -122.536710656607,37.9999357452189,0 -122.537133292837,38.0005951546687,0 -122.53734797725,38.0008708920325,0 -122.537505396892,38.0010833135969,0 -122.537756192185,38.0013907374137,0 contacts #khStyle84754 1 -122.53133032834,37.9999352282608,0 -122.531370175033,37.999981916057,0 -122.53152447428,38.0001222309184,0 -122.531611007184,38.0001721470266,0 -122.531772143245,38.0002448930677,0 -122.531943503177,38.0002771222281,0 -122.532100711662,38.0002957754821,0 -122.532263758076,38.0002919198853,0 -122.532362793484,38.0002787959061,0 -122.53254096046,38.00024796192641,0 -122.53276992683,38.0001767727047,0 -122.533361917154,37.9999988756255,0 -122.53357238928,37.99993811019211,0 contacts #khStyle84754 1 -122.530712659754,38.0001640471443,0 -122.530728521536,38.0001325659398,0 -122.530729462787,38.0000965186075,0 -122.530699426035,38.0000062705897,0 -122.530676322255,37.9999433570532,0 -122.530672916503,37.9999340828947,0 contacts #khStyle84754 1 -122.460917273556,37.9999224000256,0 -122.460917507737,37.9999226155316,0 contacts #khStyle84754 1 -122.530672916503,37.9999340828947,0 -122.530667936975,37.9999205231468,0 -122.530598439348,37.999767028474,0 -122.530574414937,37.9996272349806,0 -122.530606656311,37.9994831604609,0 -122.530620960401,37.9994665735067,0 -122.530703475624,37.9993708890609,0 contacts #khStyle84754 1 -122.530703475624,37.9993708890609,0 -122.530849148295,37.9994120295129,0 -122.530954641139,37.9995025790039,0 -122.531041535659,37.9995963796233,0 -122.531239569691,37.999810151642,0 -122.531320004887,37.9999231324071,0 -122.53133032834,37.9999352282608,0 contacts #khStyle84754 1 -122.53357238928,37.99993811019211,0 -122.533623656264,37.9999233088222,0 -122.534203571439,37.9997408540074,0 -122.534395832166,37.9996199460831,0 -122.53453769307,37.9993636467408,0 contacts #khStyle84754 1 -122.53453769307,37.9993636467408,0 -122.534769190012,37.9991167157742,0 -122.534912557876,37.9989595619722,0 -122.535099120566,37.99883863025621,0 -122.535136726067,37.9988314859004,0 -122.535331469571,37.9987944879898,0 -122.535574753101,37.9988224904458,0 -122.535802832138,37.9988909894754,0 -122.535998594063,37.999004423787,0 -122.536159276831,37.9991492635121,0 -122.536292112572,37.9993075119429,0 -122.536688768592,37.9999023861777,0 -122.53670184569,37.9999219980264,0 -122.536710656607,37.9999357452189,0 contacts #khStyle84754 1 -122.458828196301,37.9982771934244,0 -122.459104150531,37.9983100100995,0 -122.459407857826,37.998450447996,0 -122.459419139548,37.9984556647737,0 -122.459865371463,37.9987596450863,0 -122.460070313006,37.9989633740465,0 -122.460183884757,37.9990615720696,0 -122.460211785997,37.9990856963798,0 -122.460441114896,37.999361638497,0 -122.460609912256,37.9995755282417,0 -122.460690274672,37.9996773580844,0 -122.460794473632,37.9998093914875,0 -122.460850879812,37.99986130020941,0 -122.460917273556,37.9999224000256,0 contacts #khStyle84754 1 -122.469859694947,37.99708379242021,0 -122.469922520982,37.9970724221208,0 -122.470151214208,37.99703103274851,0 -122.470373170362,37.99695092029251,0 -122.470630199028,37.9968439275011,0 -122.470858754705,37.9967368057628,0 -122.470970508914,37.9966381697949,0 -122.471170365436,37.9963641829062,0 -122.471235463425,37.9962202728611,0 -122.471263774128,37.9960446525421,0 -122.471257756571,37.9958914093254,0 contacts #khStyle84754 1 -122.471257756571,37.9958914093254,0 -122.471247985856,37.9957651873309,0 -122.471241709417,37.9956479937898,0 -122.471291017689,37.995522037975,0 -122.471401572357,37.9953918516749,0 -122.471527041911,37.9952662387919,0 contacts #khStyle84754 1 -122.471527041911,37.9952662387919,0 -122.471718998599,37.995100367886,0 -122.471970132558,37.9948427272267,0 -122.472073240505,37.9947369471394,0 -122.472167712298,37.99456613053191,0 contacts #khStyle84754 1 -122.457775647522,37.9982407905561,0 -122.457246928512,37.9977336349317,0 -122.456889357664,37.997475118531,0 -122.456635926287,37.9972846785551,0 -122.456541588308,37.9972391781936,0 -122.456246141444,37.9971476825895,0 -122.45612152912,37.9970569780755,0 -122.455996971315,37.9968626275345,0 -122.455944027538,37.9966100262633,0 -122.455925708018,37.996559009631,0 -122.455828945376,37.9962895415288,0 -122.454833363044,37.9947167093497,0 -122.454700193651,37.994436696599,0 -122.4545578495,37.9942422618126,0 -122.454361822126,37.9940881344788,0 -122.454166253286,37.9937762864729,0 -122.454015059839,37.9935277335732,0 -122.453934997197,37.99347779115361,0 -122.453765007755,37.9933643411689,0 -122.453684400906,37.9932918642607,0 -122.453217785442,37.99257768681151,0 -122.453075381836,37.9923922626158,0 -122.45289768388,37.9920714829869,0 -122.452738057621,37.9918093699972,0 -122.452622167271,37.9916961705893,0 -122.452461202171,37.99161430528861,0 -122.452273559603,37.9914827453273,0 -122.452013795994,37.9913823928462,0 -122.451763729148,37.9913181359533,0 -122.451657544335,37.9912398310383,0 -122.451566936558,37.9911730130424,0 -122.451281109025,37.9910364862737,0 -122.451164550253,37.991013409462,0 -122.450833251186,37.9910569232864,0 -122.450831900988,37.99105708192041,0 -122.450501273624,37.9910959266417,0 -122.450339874844,37.9910726390612,0 -122.450313299455,37.9910094255779,0 -122.450265327844,37.99076135117231,0 -122.450311210879,37.9906218689663,0 -122.4503477065,37.9905003682095,0 -122.45028570729,37.9903198234772,0 -122.450268547977,37.9901394887466,0 -122.449965808799,37.9898857142119,0 -122.449930010565,37.98972331750241,0 -122.449842352357,37.98945252506151,0 -122.449735314102,37.989298807032,0 -122.449619129157,37.9892261604825,0 -122.449483694037,37.9891579298825,0 contacts #khStyle84754 1 -122.458570658939,37.9891596456378,0 -122.458497099763,37.9891716123532,0 -122.458435976032,37.9891815560141,0 -122.458302303163,37.98916291365511,0 -122.458138457068,37.9890855491508,0 -122.458127401029,37.9890404344996,0 -122.458121492934,37.98897281181401,0 contacts #khStyle84754 1 -122.458570658939,37.9891596456378,0 -122.458652905607,37.9891059487225,0 -122.458800002822,37.988944398171,0 contacts #khStyle84754 1 -122.458800002822,37.988944398171,0 -122.458952428957,37.9888324419648,0 -122.459133770611,37.9887566697085,0 -122.459589970649,37.988664137701,0 -122.459835829379,37.9885255723727,0 contacts #khStyle84754 1 -122.458121492934,37.98897281181401,0 -122.458117475253,37.98864833530051,0 -122.458104202688,37.9885779991347,0 -122.458089388975,37.9884994957099,0 -122.458030930899,37.9883189713294,0 -122.457918581357,37.9881111598385,0 contacts #khStyle84754 1 -122.457918581357,37.9881111598385,0 -122.457754937128,37.9880067575547,0 contacts #khStyle84754 1 -122.459835829379,37.9885255723727,0 -122.460184010223,37.9884100090255,0 -122.460377316771,37.9883523153221,0 -122.460652221556,37.9882319072731,0 -122.460837726756,37.9879758970578,0 contacts #khStyle84754 1 -122.460837726756,37.9879758970578,0 -122.460928478086,37.9879267439694,0 -122.461016863238,37.9879091244742,0 -122.461112813421,37.9879275905417,0 contacts #khStyle84754 1 -122.461112813421,37.9879275905417,0 -122.461303059717,37.9879960593796,0 -122.461439512227,37.9880237238089,0 -122.461643874836,37.98801114236831,0 -122.462089074699,37.987864473846,0 -122.462276520055,37.9878292819558,0 -122.462492368177,37.9878032325794,0 -122.462586709677,37.98774958829,0 -122.462604284225,37.9876820733405,0 -122.462650841812,37.9876417292669,0 -122.462809368961,37.98757035321881,0 contacts #khStyle84754 1 -122.457754937128,37.9880067575547,0 -122.457527917193,37.9879065684809,0 -122.457282905646,37.9878333339377,0 -122.457177903586,37.987787784712,0 -122.457154848801,37.9877290953785,0 -122.457160518293,37.987690751999,0 -122.457166834271,37.9876480363109,0 -122.45719641328,37.9875940967825,0 -122.457284784685,37.987481846436,0 -122.457528095663,37.9873027168673,0 contacts #khStyle84754 1 -122.462809368961,37.98757035321881,0 -122.463256425292,37.98755887961781,0 -122.463507858085,37.9875329911181,0 -122.46373040573,37.9874664128347,0 -122.464187379098,37.9872657137998,0 contacts #khStyle84754 1 -122.457528095663,37.9873027168673,0 -122.457649316394,37.9872610805181,0 -122.457709335395,37.987240465399,0 contacts #khStyle84754 1 -122.464187379098,37.9872657137998,0 -122.464520437426,37.987172600342,0 contacts #khStyle84754 1 -122.469859694947,37.99708379242021,0 -122.469749332036,37.9970878001543,0 -122.469596101544,37.9970812445676,0 -122.469513788082,37.9970777229074,0 -122.469319756532,37.9970362884356,0 -122.469105502075,37.9970353193533,0 -122.468945926869,37.997052622754,0 -122.468794083934,37.9970834800042,0 -122.46831512549,37.9972660715235,0 -122.468308336426,37.9972681498124,0 -122.468228089233,37.9972927152866,0 -122.468172334236,37.9972898701578,0 -122.467743508745,37.9972679866771,0 -122.46731389547,37.9973201136208,0 -122.467202396265,37.9973826964167,0 -122.467064331429,37.9974767029479,0 -122.466883400421,37.99749390656171,0 -122.466725055311,37.9974642716616,0 -122.466710658393,37.9974615772109,0 -122.466510417115,37.9973930717608,0 -122.466320631635,37.9972570181993,0 -122.46623813401,37.9971484904881,0 -122.466163200374,37.9968121379278,0 -122.466095430594,37.9965079389307,0 -122.465957544326,37.9963811335829,0 -122.465819396931,37.9962903777258,0 -122.465654160926,37.9963031445402,0 -122.465335221071,37.9964301185329,0 -122.465273657892,37.9964546274626,0 -122.465133334529,37.996467507057,0 -122.465043459543,37.9963949957139,0 -122.464954207055,37.9962368663884,0 -122.46490012791,37.9960383401771,0 -122.464772743009,37.9957403398007,0 -122.464780558004,37.9955466021434,0 -122.464858095808,37.995357688795,0 -122.464955587325,37.99526349984301,0 -122.465191395059,37.9951383967323,0 -122.465281898894,37.9950261502357,0 -122.46531734122,37.9948505638222,0 -122.465394386016,37.9947292431978,0 -122.465493624004,37.994651359113,0 -122.465617027191,37.9945545093153,0 -122.465700248286,37.9944647611052,0 -122.465735067961,37.9943747924933,0 -122.465722205881,37.9941854669464,0 -122.465723750658,37.9938745353387,0 -122.46568250801,37.9937707013503,0 -122.465503254419,37.9935580862729,0 -122.465343890565,37.9934492077569,0 -122.465199826094,37.9933899686789,0 -122.464999138871,37.9933845475958,0 -122.464750884948,37.9934600236669,0 -122.464506147272,37.9936391614765,0 -122.464401441252,37.9937468362295,0 -122.464338992096,37.9938186529161,0 -122.464329139204,37.9939988622271,0 -122.464337202348,37.9942602677337,0 -122.464315773717,37.99436832248471,0 -122.464253853018,37.9944450927717,0 -122.46422886095,37.9944760782877,0 -122.464051387268,37.9946059522596,0 -122.463857486481,37.9946456237839,0 -122.463677503372,37.9946312823158,0 -122.463525060746,37.9945494711252,0 -122.463394760293,37.9943596084233,0 -122.463343730576,37.9941503584896,0 -122.463340850956,37.9941385504298,0 -122.463278356741,37.994021099352,0 -122.463160212619,37.99392141911171,0 -122.462985093794,37.9938259844089,0 -122.462804149688,37.9937485482078,0 -122.462595730861,37.9937295685599,0 -122.462387727746,37.9937511476612,0 -122.462192141441,37.9938268595819,0 -122.46205313472,37.9939524004695,0 -122.461885676398,37.9941724442261,0 -122.461830045746,37.9942848480467,0 -122.46169787859,37.9945456105621,0 -122.461603547317,37.9946938875957,0 -122.461477218227,37.9948375113665,0 -122.461366462667,37.9948955857108,0 -122.461172559712,37.99493525279381,0 -122.460890295852,37.9949880327474,0 -122.460707847043,37.9950187389683,0 -122.460472278167,37.9950131498592,0 -122.460390008035,37.9949722144031,0 -122.460205850584,37.9947505560486,0 -122.460079681574,37.9946778739553,0 -122.459963363014,37.9946347388177,0 -122.459858199871,37.9945957403708,0 -122.459830837092,37.9945415381536,0 -122.459884003167,37.9942804141817,0 -122.459868093278,37.9940234786315,0 -122.459840944747,37.9938430994075,0 -122.45986158081,37.9932618743252,0 -122.459889190154,37.9931853933195,0 -122.459952222634,37.9931316071062,0 -122.46024302121,37.9930788686336,0 -122.460479112248,37.993012358877,0 -122.460715052267,37.9928692398717,0 -122.460809151907,37.9927525069439,0 -122.460881931291,37.992631169641,0 -122.460983576908,37.9924558885793,0 -122.461229445841,37.9923173204859,0 -122.461857904622,37.99203179704151,0 -122.462291686933,37.99179494835351,0 -122.462487136092,37.9917372610411,0 -122.462946996621,37.9917303536567,0 -122.463112934492,37.9917175938356,0 -122.463328191489,37.9915788812812,0 -122.463401644446,37.9914620518277,0 -122.463480342143,37.991309195431,0 -122.463632032067,37.9911025962939,0 -122.463729191196,37.9910534703591,0 -122.464110141515,37.9910326787297,0 -122.4643111173,37.9909975454078,0 -122.464526402699,37.9908543244084,0 -122.464602765541,37.9907284947454,0 -122.464718577996,37.9904631478207,0 -122.464774749222,37.9903732768168,0 -122.464924027617,37.99030185577511,0 -122.465034347775,37.9903023587185,0 -122.465228326312,37.990348306404,0 -122.465452190329,37.9904935298161,0 -122.465614812346,37.9906429803071,0 -122.465794066789,37.9907564554055,0 -122.465973779372,37.9908068432797,0 -122.466146766806,37.9908031239711,0 -122.466243956544,37.9907494897335,0 -122.466321060749,37.9906191559611,0 -122.466308230362,37.99042532414011,0 -122.466267152095,37.9902989592443,0 -122.466057536238,37.9899555223556,0 -122.466037458548,37.9897796829518,0 -122.466065975081,37.9895770264749,0 -122.466136549107,37.9893655485933,0 -122.466268945407,37.98916787092541,0 -122.466470437511,37.9890606344682,0 -122.466477202257,37.9890110952511,0 -122.466360975074,37.9888438314429,0 -122.466353897208,37.9887401529511,0 -122.466375223123,37.9886456163365,0 -122.466479755637,37.988560470739,0 -122.466625470058,37.9884890313071,0 -122.466784674337,37.9884221593478,0 -122.466855043302,37.9883368581835,0 -122.466840749661,37.9882466660149,0 -122.466778542234,37.9881878006832,0 -122.466530059612,37.9881010505394,0 -122.466468662233,37.9880286696397,0 -122.466482975105,37.9878214420629,0 -122.466317412644,37.9876854984198,0 -122.466081964783,37.9876664020305,0 -122.466051655648,37.9876397786253,0 -122.465958198583,37.9875576861978,0 -122.465902684702,37.9875574335644,0 -122.465833386695,37.9875931690619,0 -122.465615699688,37.9876304160074,0 -122.465576841617,37.98763706470141,0 -122.465403959783,37.9876272645771,0 -122.465325269839,37.9875858701268,0 -122.46526569855,37.9875545328828,0 -122.465111821003,37.9873780835213,0 -122.464963179505,37.9872647468976,0 -122.464768628579,37.9872007707002,0 -122.464520437426,37.987172600342,0 contacts #khStyle84754 1 -122.457709335395,37.987240465399,0 -122.457861560532,37.9871555478143,0 -122.457967110956,37.9870298572147,0 -122.458068276035,37.9868230317498,0 contacts #khStyle84754 1 -122.458068276035,37.9868230317498,0 -122.458167619213,37.9866702741258,0 contacts #khStyle84754 1 -122.458167619213,37.9866702741258,0 -122.458185942416,37.9865982569226,0 contacts #khStyle84754 1 -122.458185942416,37.9865982569226,0 -122.458154744636,37.9864854538306,0 -122.458227835888,37.9864181958275,0 contacts #khStyle84754 1 -122.477195201384,37.9846430967759,0 -122.47734877458,37.9847654527007,0 -122.477440262946,37.9848109237764,0 -122.477498101741,37.9847841431233,0 -122.477541858087,37.9846356278892,0 -122.477541689826,37.9845590189322,0 -122.477420790408,37.984445821489,0 -122.477389340028,37.9843645668583,0 -122.477400686799,37.9842699837159,0 -122.477409182252,37.98424599052571,0 -122.477450072555,37.9841305063028,0 -122.477386044699,37.9840265747728,0 -122.477359416427,37.9839678734313,0 -122.477370475384,37.9839138462948,0 -122.47739689531,37.9838013048096,0 -122.477386699715,37.9837336639185,0 -122.477263051114,37.983606934958,0 -122.477242956132,37.983530237224,0 -122.477276980693,37.9834492741959,0 -122.477217807466,37.9833633896514,0 -122.477093064191,37.9832907320226,0 -122.477055889257,37.983213958146,0 -122.477071314348,37.98314643138821,0 -122.477123418997,37.9830742751898,0 contacts #khStyle84754 1 -122.477123418997,37.9830742751898,0 -122.477197816577,37.9829712467308,0 -122.477314578644,37.9827644739838,0 contacts #khStyle84754 1 -122.452538358068,37.9826740440649,0 -122.452481357664,37.9826827908965,0 -122.45213294995,37.98273524140511,0 -122.451313255947,37.9829026540322,0 -122.451182684586,37.9829471071815,0 -122.451065976971,37.9830411950386,0 -122.451058222017,37.9831267796926,0 -122.451086627981,37.9832305589311,0 -122.451236648882,37.9836323268937,0 -122.451287184449,37.98372719681641,0 -122.45141695145,37.9837908925352,0 -122.451707316148,37.9837922493873,0 -122.451859313395,37.9838335166488,0 -122.451989483514,37.9838431372509,0 -122.452077321771,37.9838029900845,0 -122.452193921058,37.9836277861762,0 -122.452412992997,37.9833584266449,0 -122.452582664711,37.9832240272236,0 -122.452761621021,37.9830851644809,0 -122.452952641569,37.9829508640597,0 -122.452973505606,37.9828247830931,0 -122.452952657663,37.982757090448,0 -122.452887485491,37.982716229373,0 -122.45274264012,37.9826704904179,0 -122.452538358068,37.9826740440649,0 contacts #khStyle84754 1 -122.472167712298,37.99456613053191,0 -122.472179691866,37.9944629553259,0 -122.472221576432,37.9941022179903,0 -122.472232475959,37.9937733029029,0 -122.472295531079,37.9936158639415,0 -122.472591881752,37.9931845858184,0 -122.472705342179,37.9930453985768,0 -122.472837243641,37.99291530678061,0 -122.473287396549,37.9925748448259,0 -122.473424958019,37.9924492841207,0 -122.473532009849,37.9923100673046,0 -122.473591502081,37.9921526116205,0 -122.473605927632,37.992026498273,0 -122.473544484851,37.991859487356,0 -122.473524743157,37.9916340808205,0 -122.473588051354,37.9914405913619,0 -122.47358779064,37.9913775011571,0 -122.473429098878,37.991273142923,0 -122.473036950575,37.9910685964652,0 -122.472817858286,37.9909504470821,0 -122.472748694308,37.9908539924031,0 -122.472704395995,37.9907922147198,0 -122.472573271244,37.9907150173467,0 -122.472532973789,37.9907000903977,0 -122.472290026675,37.9906100977136,0 -122.472030885342,37.9905188049209,0 -122.471792579222,37.9904005671759,0 -122.471712831028,37.9903055746339,0 -122.471713703967,37.9901839068318,0 -122.471776563058,37.990053505331,0 -122.47189487301,37.9899323660644,0 -122.472137672289,37.9898207994249,0 -122.472285710667,37.9897876735797,0 -122.47239431813,37.9897633708652,0 -122.472498813045,37.9896827261201,0 -122.472635398727,37.9894940728311,0 -122.47268709358,37.9893428879494,0 -122.472701554288,37.989300596575,0 -122.472680783133,37.9892193887402,0 -122.472611775582,37.9891154323279,0 -122.472626169884,37.9889938252573,0 -122.472717301902,37.988890588446,0 -122.47293230466,37.9886842616492,0 -122.473016576579,37.9885449428943,0 -122.473017445047,37.9883241350603,0 -122.472976453077,37.9881842537523,0 -122.472804341144,37.98796717530171,0 -122.472756621652,37.9878723273099,0 -122.472805694139,37.987678774188,0 -122.472792492146,37.9875345112779,0 -122.472723873182,37.9873764802964,0 -122.472579617511,37.9871460075575,0 -122.472539143435,37.9869340265899,0 -122.472518889541,37.9867807192093,0 -122.472554439442,37.9865871053741,0 -122.472589505057,37.9864610847966,0 -122.472736209592,37.9862499449375,0 -122.472803494932,37.9860970308627,0 -122.472866542034,37.9859395913441,0 -122.472911441586,37.98583164028321,0 -122.472919070295,37.9855612927057,0 -122.47288519696,37.9854214432739,0 -122.472816644235,37.9852543998603,0 -122.472816944594,37.9852495266092,0 -122.472824696634,37.9851237514656,0 -122.472839121977,37.9849976380596,0 -122.472759733079,37.9848530777476,0 -122.472545728886,37.9847383858943,0 -122.472335756222,37.984625853942,0 -122.472315115886,37.9845266211083,0 -122.472346461025,37.9844231156539,0 -122.472402908767,37.9842926848563,0 -122.472402095222,37.9842484276785,0 -122.472397275402,37.9839862266977,0 -122.472324632679,37.98387950013211,0 -122.472280363084,37.9838144591437,0 -122.472239504107,37.9836565526112,0 -122.472288962457,37.9834089249105,0 -122.472419972517,37.9832022211216,0 -122.472536975967,37.9830630497164,0 -122.472683707891,37.9829465436053,0 -122.472848134374,37.982843635891,0 -122.473397117377,37.9826072631879,0 -122.473574223303,37.982522436812,0 -122.473914361527,37.9823301883325,0 -122.47406675095,37.9822182122058,0 -122.474238258349,37.9821198406316,0 -122.474441340001,37.9820846993477,0 -122.474636014603,37.9821306346815,0 -122.474703806204,37.9821860318106,0 -122.474907719735,37.9823526626894,0 -122.475163181316,37.9824574518869,0 -122.475283501077,37.9824700281683,0 -122.475298301932,37.9824715752015,0 -122.475443840884,37.982521795863,0 -122.475498805518,37.9825986497665,0 -122.475498131635,37.982693280452,0 -122.475486310814,37.9827150093351,0 -122.475441883206,37.9827966754705,0 -122.475372664027,37.9829225443071,0 -122.475365392323,37.9830441836882,0 -122.475371307825,37.98316588850901,0 -122.475384014266,37.98342730805331,0 -122.47542996384,37.9834603097146,0 -122.475535543119,37.9835361381287,0 -122.475618681172,37.9835545351143,0 -122.475850586066,37.9834699501742,0 -122.476054901741,37.983461849823,0 -122.476289986484,37.9835304946542,0 -122.476470304403,37.9835943883393,0 -122.476600812223,37.9837571996507,0 -122.476914351008,37.9839028013308,0 -122.477082995523,37.98400719933121,0 -122.477179504503,37.984147326662,0 -122.477195401408,37.9843141330045,0 -122.47717788104,37.984476284101,0 -122.477195201384,37.9846430967759,0 contacts #khStyle84754 1 -122.477314578644,37.9827644739838,0 -122.477366482224,37.9825709313828,0 -122.477426222173,37.9824765637183,0 -122.477523784681,37.9824679853903,0 -122.477735263493,37.98265368777731,0 -122.477768541005,37.9826670427101,0 -122.478064552446,37.9827858374094,0 -122.478226069961,37.9827910620272,0 -122.478379526133,37.982728655092,0 -122.478431649388,37.9826860871645,0 -122.478527703428,37.9826076417306,0 -122.47861839456,37.9824638409558,0 -122.478600401562,37.9823916591434,0 -122.478546081676,37.9823238222821,0 -122.478554388537,37.982256263688,0 -122.478588676123,37.9822383905686,0 -122.478660851449,37.9822972940012,0 -122.47875771678,37.9823318850957,0 -122.478788632611,37.9823429252701,0 -122.478983151327,37.9824113845527,0 -122.479193242227,37.9825925717949,0 -122.479383714921,37.9826294678895,0 -122.479467830446,37.9827109556283,0 -122.479548026377,37.98274285588911,0 -122.47964141449,37.9827207381915,0 -122.479700508992,37.9825327866862,0 -122.479716403626,37.9824822332393,0 -122.479769255475,37.9821535027516,0 -122.479835258122,37.9819780470044,0 -122.479992683121,37.981857072768,0 -122.480044324503,37.9816995787259,0 -122.48012952105,37.9816278542966,0 -122.480290706063,37.98157899819281,0 -122.480349641565,37.9815499002829,0 -122.480456945451,37.9814969215729,0 contacts #khStyle84754 1 -122.480456945451,37.9814969215729,0 -122.480643505263,37.9814048117403,0 -122.480668921635,37.9813328223354,0 -122.480584742778,37.9812603478921,0 contacts #khStyle84754 1 -122.458460831676,37.9859956730862,0 -122.458496676661,37.9859397503269,0 -122.458610588182,37.9857620331425,0 -122.458697893595,37.9857176315921,0 -122.458821333971,37.9856548524166,0 -122.458979579176,37.9855248974845,0 -122.459045187691,37.9853134008401,0 -122.459157204837,37.9851787262076,0 -122.459443354376,37.9850763981811,0 -122.45953203409,37.9850182238739,0 -122.459672383621,37.9847079310266,0 -122.459858694004,37.9844384068098,0 -122.460087556664,37.9842862435217,0 -122.460134542907,37.9841873196563,0 -122.460132422957,37.984088169889,0 -122.460117940143,37.9840250141647,0 -122.460119078486,37.9837726629882,0 -122.460154743567,37.9836646742963,0 -122.460269305601,37.9835705675508,0 -122.460322365983,37.9835167351799,0 -122.460322843136,37.983354508238,0 -122.460376167477,37.9832646261344,0 -122.460388196357,37.9830799204733,0 -122.460441322324,37.9830170756149,0 -122.460575347658,37.9829861471524,0 -122.461002251598,37.983001627643,0 -122.461140118063,37.9830292989262,0 -122.461503307899,37.9831931950915,0 -122.461632588834,37.9833244728005,0 -122.461689793308,37.9834824579758,0 -122.461723380905,37.9836583602615,0 -122.461770305847,37.9837622218647,0 -122.461836808518,37.9838166032125,0 -122.461976778957,37.9838487895258,0 -122.462052599542,37.9838942007382,0 -122.462168776225,37.9840659750585,0 -122.462296899734,37.9841611958011,0 -122.462461002487,37.9842025048297,0 -122.462641572801,37.9842303699376,0 -122.462833858897,37.9842132247486,0 -122.462986389213,37.984182378244,0 -122.46330863918,37.9840081041339,0 -122.463391106441,37.983922860303,0 -122.463379303389,37.983882249052,0 -122.463187521955,37.9837326619456,0 -122.462988843315,37.9836506384378,0 -122.462892548066,37.9835826022996,0 -122.46285853042,37.98346528112,0 -122.462817910586,37.9833749678995,0 -122.46264897095,37.983216471724,0 -122.462375625635,37.9829313188385,0 -122.462271120878,37.9828181809222,0 -122.46222584585,37.982706140491,0 -122.46219632138,37.9826330771893,0 -122.462189875135,37.9824437802893,0 -122.462173074737,37.9820155985343,0 -122.462103278417,37.9819251513365,0 -122.461864633911,37.9817618281376,0 -122.461569881426,37.9814855878912,0 -122.461398451347,37.981376648483,0 -122.461252726704,37.9813534477922,0 -122.460913530836,37.9813158392937,0 -122.460703955505,37.9812653064159,0 -122.460228633023,37.98106033477431,0 -122.460031190032,37.9810053501286,0 -122.459775872186,37.9809816433322,0 -122.459326273621,37.9809570411165,0 -122.459098942258,37.9809019172104,0 -122.458917868523,37.98084700613731,0 -122.458649924573,37.9807015667815,0 -122.458405019513,37.9805201821967,0 -122.458218618712,37.9804156754248,0 -122.458125757757,37.9803656766783,0 -122.457944553426,37.9803287889697,0 contacts #khStyle84754 1 -122.449483694037,37.9891579298825,0 -122.449419259572,37.9890179304713,0 -122.449282060628,37.9889001214045,0 -122.449166685925,37.9887193255671,0 -122.449000610761,37.98856082339591,0 -122.448870770036,37.9885061374293,0 -122.448711310207,37.988509894877,0 -122.448595468005,37.9884868188811,0 -122.448414417434,37.988427385444,0 -122.448370319003,37.988233404693,0 -122.448342421513,37.988062031873,0 -122.44835133355,37.98801250379731,0 -122.448511433642,37.9879231289943,0 -122.44856169266,37.9878647824592,0 -122.448599036456,37.987725260732,0 -122.448570396105,37.9876530243989,0 -122.448476379336,37.9875669617755,0 -122.448491730399,37.9875129575821,0 -122.448571101896,37.9874637605589,0 -122.448614887638,37.9874143963037,0 -122.448623084662,37.9872702312604,0 -122.448703336226,37.9871985064743,0 -122.448645853304,37.9870810710558,0 -122.448617483123,37.9869727851053,0 -122.448581354723,37.9869500835615,0 -122.448457888769,37.9868999334398,0 -122.44841487969,37.98684565498011,0 -122.44837284703,37.9865660630173,0 -122.448356570998,37.9862685666438,0 -122.448320915718,37.9861827781754,0 -122.448237948067,37.9860471972967,0 -122.448258743711,37.9859735929299,0 -122.448267192693,37.9859436884517,0 -122.448525499707,37.9857601416132,0 -122.448696916179,37.9856753742534,0 -122.448823390502,37.9856128310007,0 -122.448860327843,37.9855273835756,0 -122.448809693018,37.985446031263,0 -122.448788541329,37.9853242601365,0 -122.448883226789,37.9852255648134,0 -122.449014447838,37.9851901300163,0 -122.449060103616,37.9852045657817,0 -122.449130183843,37.985226724196,0 -122.449246189611,37.9852272686262,0 -122.44939137069,37.985133316201,0 -122.449481006818,37.9850519568917,0 -122.449529670314,37.985007786779,0 -122.449553930867,37.9849042542164,0 -122.449552604277,37.9847960952822,0 -122.449603470936,37.9847512702063,0 -122.449698226375,37.9847381954431,0 -122.449828801819,37.9846937439796,0 -122.449974755281,37.9844961480886,0 -122.450134273636,37.9844833764622,0 -122.450306818513,37.9845495494813,0 -122.450633887684,37.9846749833889,0 -122.450742170704,37.9847566047312,0 -122.450763459938,37.98486035071321,0 -122.450828363938,37.98493726260081,0 -122.450994596835,37.9849785975844,0 -122.451255243159,37.9849572847232,0 -122.451524563871,37.9849179863697,0 -122.451771244463,37.9848605561927,0 -122.45195224814,37.9848298570086,0 -122.452221292133,37.984731973043,0 -122.45246820612,37.9846429979466,0 -122.452649677922,37.98454921078261,0 -122.452897092989,37.9843926416648,0 -122.453078840212,37.9843574378449,0 -122.453226961814,37.9842499752747,0 -122.453405890813,37.9840811655363,0 -122.453497884198,37.9839943743888,0 -122.453573312844,37.9839000919515,0 -122.453592485253,37.9838100539317,0 -122.453570924791,37.9837423580894,0 -122.453533573706,37.9836926141767,0 -122.453422685813,37.9836740723558,0 -122.45321243087,37.9836190166184,0 -122.453154474945,37.9835646702229,0 -122.45316216058,37.9834880978398,0 -122.453279133895,37.9833579582298,0 -122.453323482703,37.9832319866065,0 -122.453346137496,37.98305634390911,0 -122.453407709147,37.9830070606663,0 -122.453600094313,37.9829764119357,0 -122.453738459238,37.9829364987407,0 -122.453854919496,37.9827793179661,0 -122.453888458274,37.9826713212718,0 -122.453873436535,37.9825856304369,0 -122.453794398322,37.9824951353233,0 -122.453813493418,37.9823194759456,0 -122.453918442203,37.9822749006521,0 -122.454205843856,37.9821951229656,0 -122.454300862344,37.9821459947835,0 -122.454453992681,37.98203404754301,0 -122.454717785952,37.981778410597,0 -122.454832652147,37.9816437532417,0 -122.454982255688,37.9815272825534,0 -122.455120505607,37.9814062525956,0 -122.455241775363,37.9812716245598,0 -122.455385449327,37.9809694934027,0 -122.455393588686,37.9809523771095,0 -122.455531091872,37.9808358495566,0 -122.45571177208,37.9807510666521,0 -122.455871268888,37.9806436534253,0 -122.455949225404,37.9804953047206,0 -122.455972339001,37.9802565744157,0 -122.455973770315,37.980062807265,0 -122.455992905435,37.9799772749846,0 contacts #khStyle84754 1 -122.480584742778,37.9812603478921,0 -122.480570147895,37.9812580345811,0 -122.480175273575,37.9811954456634,0 -122.480022064772,37.9811226650203,0 -122.479772155188,37.9809367963362,0 -122.479662910659,37.9808867419509,0 -122.479480079458,37.9808769184054,0 -122.479344631477,37.9808087220226,0 -122.479182661466,37.9807674459898,0 -122.479083380718,37.9807174352847,0 -122.479010813654,37.9806134666743,0 -122.478505927134,37.9802552210377,0 -122.478334378726,37.9801598248464,0 -122.478010889968,37.9800141826156,0 -122.477838726956,37.9799052638585,0 -122.477619559807,37.97961576612561,0 -122.477602531417,37.979593273224,0 -122.477456020984,37.9794799617202,0 -122.477283052484,37.979384557663,0 -122.476739665999,37.9791387921297,0 -122.476492625151,37.9790520693486,0 -122.476263055363,37.979010487714,0 -122.475939614238,37.9789594737387,0 -122.475673328784,37.9788771696651,0 -122.475501075678,37.9787817661778,0 -122.475286959685,37.9785690096598,0 -122.475165265596,37.9784693253526,0 -122.475122538696,37.9784007208987,0 -122.475103348617,37.9783699082982,0 -122.475078912881,37.9781039231775,0 -122.475036986042,37.9779955827543,0 -122.475038238428,37.9778198399204,0 -122.475036120069,37.9777467049569,0 -122.475033669384,37.9776620965218,0 -122.474992133328,37.977598821527,0 -122.474935005935,37.9775264640197,0 contacts #khStyle84754 1 -122.481155675562,37.9749719804569,0 -122.481351802087,37.9750317041714,0 -122.48165866212,37.9751251471881,0 -122.481666235289,37.9751274533069,0 -122.481667952891,37.9751284348874,0 -122.481928480778,37.9752773216136,0 -122.482120880699,37.97534126004691,0 -122.482429778311,37.9753336100589,0 -122.482967929131,37.9752654563953,0 -122.483048727612,37.975255223515,0 -122.483257906124,37.9752606511547,0 -122.483466499439,37.97524805035561,0 -122.483661856523,37.9751948335942,0 -122.483848151962,37.9751145384147,0 -122.483998029314,37.9750521083047,0 -122.48415959342,37.975048312223,0 -122.484468805311,37.9751659494231,0 -122.4844711648,37.9751668470671,0 -122.485035499709,37.9753676052466,0 -122.485186296009,37.9753772796219,0 -122.48554037048,37.9753202495431,0 -122.485691890222,37.9752262798657,0 -122.485782860837,37.9751410574351,0 -122.48576164163,37.9750698335804,0 -122.485742531691,37.9750056895207,0 -122.485874817587,37.9748124951031,0 -122.485915881555,37.9747405730277,0 -122.485886446366,37.9745737082622,0 -122.485937861245,37.9743441084485,0 -122.486014415728,37.974230861256,0 contacts #khStyle84754 1 -122.496003375093,37.97531608307331,0 -122.496269917442,37.9753622912972,0 -122.496545615125,37.97531841072781,0 -122.496719769024,37.9752425494314,0 -122.496833467361,37.9751619222898,0 -122.497120417971,37.9749288209234,0 -122.49719757797,37.9748840878262,0 -122.497489082097,37.9748177408964,0 -122.497683839397,37.9747464727669,0 -122.497736029915,37.97467059708641,0 -122.497745650907,37.9746566098647,0 -122.497787409552,37.9744810399984,0 -122.497838823195,37.9743505751729,0 -122.49802128351,37.97420880247061,0 -122.498023396191,37.9742071609006,0 -122.498249369261,37.9741495444788,0 -122.498392674911,37.9741095997758,0 -122.498443627159,37.9740467283233,0 -122.498475053532,37.9739251905266,0 -122.498553062863,37.9738089604264,0 -122.498598703724,37.9737409575694,0 -122.498762423193,37.9736289976378,0 -122.498860261144,37.9735835014854,0 -122.499060103733,37.9734905711761,0 -122.499582673788,37.9733485968413,0 -122.499879456591,37.9732372027204,0 -122.500064306412,37.9731568756473,0 contacts #khStyle84754 1 -122.486014415728,37.974230861256,0 -122.48611402374,37.9740835103258,0 -122.48622458234,37.9739442968228,0 -122.486257023226,37.9737822093834,0 -122.486256373136,37.9737188085793,0 -122.48625448174,37.9735343476787,0 -122.486184465826,37.9732681650537,0 -122.486145739581,37.9729029791458,0 -122.486115797722,37.97274913691331,0 -122.486066736899,37.9724970594474,0 -122.486128383294,37.9723305935271,0 -122.486139424888,37.972073778486,0 -122.486099788652,37.9719299616156,0 -122.486049895456,37.9717489273866,0 contacts #khStyle84754 1 -122.496003375093,37.97531608307331,0 -122.495580928761,37.975174570342,0 -122.495195394566,37.9750467340084,0 -122.494961680224,37.9749871455183,0 -122.494586265713,37.97494046546571,0 -122.494041398842,37.9749065728398,0 -122.493857497647,37.9748471969217,0 -122.493745498875,37.9747836245624,0 -122.493684426068,37.9746616889764,0 -122.493674650104,37.9745309619531,0 -122.493757535914,37.9743781028399,0 -122.493834242831,37.9742587600836,0 -122.493942395598,37.9740904922409,0 -122.494107731584,37.9737442143003,0 -122.494160048404,37.9735867167177,0 -122.494139752641,37.973433412487,0 -122.494038058255,37.9733203146887,0 -122.493589763963,37.9730074410711,0 -122.493553133964,37.9729624888955,0 -122.493457102342,37.9728446389945,0 -122.493365836591,37.9726639899911,0 -122.493346254297,37.9725106886815,0 -122.493375996477,37.9724774928445,0 -122.493438759734,37.9724074414025,0 -122.49355125085,37.9722952675529,0 -122.493613405913,37.9721558381368,0 -122.493614180033,37.9720431820821,0 -122.493440712931,37.971916254877,0 -122.493246795786,37.9718658474972,0 -122.492960530254,37.9717925089353,0 -122.4928902743,37.9717405075088,0 -122.492838049487,37.9717018521368,0 -122.492808103454,37.971607088813,0 -122.492844643045,37.9714675490725,0 contacts #khStyle84754 1 -122.486049895456,37.9717489273866,0 -122.485990418245,37.9716044628672,0 -122.485738862568,37.9713510037278,0 contacts #khStyle84754 1 -122.500064306412,37.9731568756473,0 -122.500237984466,37.9730449560746,0 -122.500330313926,37.9728960331197,0 -122.500413534395,37.9727618019381,0 -122.500639888818,37.97254195299771,0 -122.500752308156,37.9724387847001,0 -122.500765050586,37.972358814979,0 -122.500773117456,37.9723081883281,0 -122.500795004536,37.9721235200202,0 -122.500754313439,37.9720377257566,0 -122.50074648235,37.9720279031613,0 -122.500357771784,37.9715403365768,0 -122.500271493268,37.9712515610677,0 contacts #khStyle84754 1 -122.514244119042,37.9706625593239,0 -122.514008666471,37.9708721699589,0 -122.513766956017,37.9710794897737,0 contacts #khStyle84754 1 -122.492844643045,37.9714675490725,0 -122.492845050495,37.9713518652312,0 -122.49284538901,37.9712557526088,0 -122.492830386312,37.9712258439944,0 -122.492795550466,37.9711563969259,0 -122.492635331253,37.9708627898408,0 -122.492595703253,37.9707274271981,0 -122.492646660022,37.9705609115738,0 -122.49279828492,37.9704489075934,0 -122.492923179222,37.9703940018053,0 -122.492981000649,37.97036858239,0 -122.493007873764,37.9702931950793,0 -122.493041949001,37.9701976033751,0 -122.492992141894,37.9700937415164,0 -122.492770853384,37.9698854918709,0 contacts #khStyle84754 1 -122.511040070314,37.9696611333083,0 -122.510973254241,37.9699717950096,0 -122.511009502596,37.9701927588105,0 -122.511299333876,37.9704228705822,0 -122.511386089048,37.9704917495024,0 -122.512164095714,37.9708870434527,0 -122.512310294045,37.97094623445111,0 -122.512444280351,37.9709152468884,0 -122.512596920391,37.9707536516588,0 -122.512752882768,37.9705199679314,0 -122.512878249614,37.9701780037557,0 -122.513006848669,37.9697774698815,0 -122.513089870298,37.9695975593279,0 -122.513172266427,37.9695122801321,0 -122.513330621661,37.9694543543999,0 -122.513598231021,37.9694464518289,0 -122.513829371969,37.9694654357691,0 -122.514036644983,37.9695429033245,0 -122.514218449119,37.969705886282,0 -122.514352192641,37.9699272529121,0 -122.514436689793,37.970170947408,0 -122.514479649693,37.9703468741552,0 -122.514396630578,37.9705267856894,0 -122.51437655654,37.97054465667391,0 -122.514244119042,37.9706625593239,0 contacts #khStyle84754 1 -122.506954649646,37.969369140337,0 -122.50660141074,37.969648082878,0 -122.506256446826,37.9699204878028,0 -122.505683001487,37.9704363058802,0 -122.505460326051,37.970746307277,0 -122.505293348121,37.9709213518272,0 -122.50512574859,37.97108287437371,0 -122.504903689268,37.9711945966279,0 -122.504745172386,37.9712750421556,0 -122.504546458284,37.9713012411262,0 -122.504253284996,37.9713000022543,0 -122.504142595072,37.9713581172293,0 -122.504074129725,37.9714189365018,0 -122.504046666344,37.971443332787,0 -122.503895809905,37.9714426947569,0 -122.503808770147,37.97137022450241,0 -122.503761822092,37.9712618728031,0 -122.50376182502,37.9710500730594,0 -122.503675544541,37.9708649464685,0 -122.503670735385,37.9708013558579,0 -122.503667703565,37.9707612665917,0 -122.503810899473,37.9706311875317,0 -122.503826978944,37.9705681662626,0 -122.503787676671,37.9704868851766,0 -122.503542715336,37.9703010870082,0 -122.503463717106,37.9701971058828,0 -122.503479813805,37.9700259316456,0 -122.50344063364,37.96992662544191,0 -122.50325839737,37.9698312197986,0 -122.503012527938,37.9697806080369,0 -122.502869866944,37.969725926892,0 -122.502616809495,37.9695806498868,0 -122.502141245514,37.9694028834011,0 -122.501951531158,37.96936152054,0 -122.501713339114,37.9693334705651,0 -122.501618731255,37.9693285622129,0 -122.501544789307,37.9693192352354,0 -122.50140742654,37.9693231577597,0 -122.501244355891,37.9693404899409,0 -122.501086174608,37.969371361828,0 contacts #khStyle84754 1 -122.511040070314,37.9696611333083,0 -122.511148916508,37.9695579402896,0 -122.511744843396,37.9691863930813,0 -122.511800793293,37.96911903027,0 contacts #khStyle84754 1 -122.506954649646,37.969369140337,0 -122.506921718492,37.969292393431,0 -122.506839417992,37.9692559963562,0 -122.506613911843,37.969246035158,0 -122.506412991323,37.9691775940574,0 -122.506330430373,37.9691288673191,0 -122.50625918539,37.9690868190657,0 -122.506082622998,37.9688877949171,0 -122.50598774001,37.9687116464702,0 -122.505988719861,37.9684592932926,0 -122.506060475929,37.9681576680046,0 -122.506203071757,37.968009557878,0 -122.506440122471,37.967888883378,0 -122.50676006211,37.9678226335828,0 -122.506869430134,37.9678546381416,0 contacts #khStyle84754 1 -122.513766956017,37.9710794897737,0 -122.51375246304,37.9710919206318,0 -122.513727258202,37.9712450330708,0 -122.513811962852,37.9714571841542,0 -122.513823433649,37.9716600188312,0 -122.513921068351,37.9717460447782,0 -122.514456360971,37.9719375302358,0 -122.514492941679,37.9719394850608,0 -122.514639180981,37.9719472997825,0 -122.514882130837,37.9719032412317,0 -122.515218951148,37.9717604298807,0 -122.515418196264,37.97165310020991,0 -122.515859054408,37.9714881849509,0 -122.516430604152,37.97125170489671,0 -122.516601055407,37.9710856715022,0 -122.516763144186,37.9708925651028,0 -122.516900831573,37.9707309026267,0 -122.517083111663,37.9706054746753,0 -122.51730349174,37.9705297734671,0 -122.517601374473,37.9704634034373,0 -122.51822097393,37.9702766824282,0 -122.518455436185,37.970223568813,0 -122.518819434414,37.970166479914,0 -122.519062675868,37.9701855032357,0 -122.519208819643,37.9702536982305,0 -122.519232248938,37.9703709602432,0 -122.519098572135,37.9705731993783,0 -122.518965870902,37.9707348849087,0 -122.518658606106,37.9711482113274,0 -122.518364707945,37.9714724797173,0 -122.518267964034,37.9715792199518,0 -122.518218309125,37.9717727903798,0 -122.51829207901,37.9718091444787,0 -122.518529607673,37.9716723789868,0 -122.51874280046,37.9715496248842,0 -122.519128799602,37.9713934849496,0 -122.51947361963,37.9713318090386,0 -122.519612973291,37.9713504055014,0 -122.519811542515,37.9714548655517,0 -122.51998710661,37.9715952821628,0 -122.520118281276,37.971667921138,0 -122.520435738784,37.9716557006441,0 -122.521250803041,37.9716139671537,0 -122.521883309378,37.9715219136279,0 -122.522119820143,37.97148232022821,0 -122.52233432982,37.9714336239704,0 -122.522541781727,37.9713758858176,0 -122.522663393893,37.9712772404687,0 -122.522821821864,37.9710976299018,0 -122.523006233695,37.9707513886053,0 -122.523128223285,37.9705941613005,0 -122.523310463408,37.9704732298655,0 -122.523542251225,37.97039305692191,0 -122.52378529091,37.970443614358,0 -122.524065637237,37.9705574120894,0 -122.524612521733,37.9708300134209,0 -122.525062126308,37.9710706735759,0 -122.52539066175,37.9712162080082,0 -122.525536813484,37.9712843952001,0 -122.525581237361,37.9713476643119,0 -122.525638176008,37.9714429711179,0 -122.525646007324,37.9714560795522,0 -122.525693917826,37.9716410350927,0 -122.525728334892,37.9717069413249,0 -122.525767024317,37.9717810286691,0 -122.525851980501,37.9718489679708,0 -122.525961362938,37.9718809548857,0 -122.526095403341,37.9718409392109,0 -122.526217185404,37.971715252559,0 -122.526278697237,37.9714451180183,0 -122.526376909035,37.9713328551206,0 -122.526425239119,37.9713420630808,0 -122.526509765521,37.9716984087709,0 -122.526582451528,37.97179333630811,0 -122.526679939734,37.9717937298474,0 -122.52674059876,37.9717669363693,0 -122.526826406739,37.9715915336603,0 -122.527119789666,37.971227699979,0 -122.527193123292,37.9711108296772,0 -122.527253492488,37.9711290986077,0 -122.527326485833,37.9712871163218,0 -122.527386804453,37.9715352105967,0 -122.527459838191,37.9715760623864,0 -122.527544719727,37.9715448597135,0 -122.527678826924,37.9713831701073,0 -122.527837810216,37.9712260868919,0 -122.52819147886,37.9711148507788,0 -122.52853235757,37.971111715419,0 -122.528641576169,37.9710580778678,0 -122.528678674046,37.97093204819291,0 -122.528642421053,37.9708147364535,0 -122.528564386609,37.9706657120364,0 -122.528539346243,37.9705754836526,0 -122.528588771512,37.9704134524707,0 -122.528917912937,37.9701308728623,0 -122.529136971707,37.9700371185609,0 -122.529332202578,37.9699973448476,0 -122.530188882347,37.9700097929685,0 -122.530430645884,37.9700377996489,0 -122.530671101251,37.9700477750508,0 -122.530963559131,37.9700489452018,0 -122.53123159915,37.9699734084398,0 -122.531298062602,37.9698847351922,0 -122.531319156518,37.9698565923628,0 -122.531352409618,37.9696629506201,0 -122.531248393924,37.9694558785006,0 -122.531173223321,37.9693062297702,0 -122.531062883303,37.9690894819803,0 -122.531037478242,37.9688325162907,0 -122.531150283284,37.9686617246236,0 -122.5313986044,37.96832924447521,0 -122.531508561596,37.968158441062,0 -122.531576521201,37.9680358048989,0 -122.531605738901,37.9679830801046,0 -122.531732003595,37.96782135438011,0 -122.531813583,37.9676369181725,0 -122.531859670291,37.9674388210521,0 -122.531712612491,37.9672895230578,0 -122.531456884268,37.9672209057435,0 -122.531023126039,37.9671741079845,0 -122.530872593241,37.9671239356052,0 -122.530654469488,37.9669608328103,0 -122.530569606524,37.9667667184038,0 -122.5305135728,37.9666267960231,0 -122.530390992623,37.9665451902087,0 contacts #khStyle84754 1 -122.530390992623,37.9665451902087,0 -122.53023701222,37.966589637387,0 -122.53003213851,37.9666924634743,0 -122.529869698226,37.9668360168211,0 -122.529758280633,37.9669546641126,0 -122.529650469968,37.9670694699586,0 -122.529456555039,37.9671272750927,0 -122.529219070698,37.967099283623,0 -122.52889385288,37.9668816709426,0 -122.528700033161,37.9668132963348,0 -122.52851565654,37.9668260743681,0 -122.528189105435,37.9669284079654,0 -122.527943506619,37.9669454451612,0 -122.527776072557,37.9668681624664,0 -122.527557197729,37.9666014040014,0 -122.527478093442,37.9663982978161,0 -122.527456897656,37.9663733265328,0 -122.527389815428,37.966294295153,0 -122.52723238495,37.9660998858946,0 -122.527214549792,37.9659961670535,0 -122.527250079877,37.9658926633432,0 -122.527189563778,37.96567611271,0 contacts #khStyle84754 1 -122.524311805672,37.9636185748243,0 -122.524558875328,37.9635925383341,0 -122.524943775101,37.963598604429,0 -122.525183613241,37.9635905628932,0 -122.525424307908,37.9635599923836,0 -122.525666846946,37.9635744927418,0 -122.52589480801,37.9636430103522,0 -122.52608545204,37.9637609470255,0 -122.526261750506,37.963896851004,0 -122.526422367275,37.9640371977857,0 -122.526756629696,37.9643945518937,0 -122.5269585921,37.9646342053491,0 -122.527006952925,37.9648597198882,0 -122.527010187196,37.9652427760346,0 -122.527132836967,37.965423526205,0 -122.527189563778,37.96567611271,0 contacts #khStyle84754 1 -122.524311805672,37.9636185748243,0 -122.524236297964,37.9636317877119,0 -122.52391900492,37.9637341471081,0 -122.523765084819,37.9637695733123,0 -122.523438499391,37.9637682467161,0 -122.52308650353,37.9637352711622,0 -122.522815200833,37.9636575590079,0 -122.521585861617,37.9630802393558,0 -122.521362789865,37.9629170991937,0 -122.521251873507,37.9627949739778,0 -122.521174916073,37.9624837189374,0 -122.521090776834,37.9620732939294,0 -122.521013566071,37.96191074859231,0 -122.520965870163,37.9618755308999,0 -122.52088468867,37.9618155880079,0 -122.520653795834,37.961652414543,0 -122.520559246876,37.9615303555539,0 -122.520585417433,37.9614448411138,0 -122.520654836908,37.9613405491138,0 -122.520731997398,37.9612246270372,0 -122.520757895569,37.9610715155803,0 -122.520689584319,37.96096308306331,0 -122.520526440379,37.960885807606,0 contacts #khStyle84754 1 -122.515837195529,37.962250006029,0 -122.516183431401,37.9624001455675,0 -122.516533760852,37.9625773395292,0 -122.516560708835,37.9625909695351,0 -122.51674057391,37.9627223960226,0 -122.516911606248,37.9628988497363,0 -122.517091502217,37.9630257694263,0 -122.517314472901,37.9630942830753,0 -122.517589085483,37.963099919288,0 -122.517866628405,37.9629838944223,0 -122.518021315657,37.9628313129894,0 -122.518053745861,37.962768356814,0 -122.518054360103,37.96256557185001,0 -122.518029154065,37.9623942255005,0 -122.517934991614,37.9622135829668,0 -122.517755151091,37.9619694986648,0 -122.517598370556,37.9617729837633,0 -122.517592833726,37.9617660436597,0 -122.517523991972,37.9616305688196,0 -122.517533562105,37.9614728845598,0 -122.517447792425,37.9613148080896,0 -122.517294221738,37.9610798439185,0 -122.517182747759,37.960827027277,0 -122.517183957755,37.9606422702738,0 -122.517265594773,37.96045333791231,0 -122.517481343657,37.9602108805897,0 -122.517507631573,37.9599991883798,0 -122.517413705821,37.9596743418477,0 -122.517457452496,37.9594041383773,0 -122.517611661258,37.9593236576461,0 -122.517934075781,37.9593069576156,0 -122.518175117379,37.9593304799823,0 -122.518410290745,37.9593810161094,0 -122.518641877653,37.9594360434404,0 -122.519062517026,37.9596315437756,0 -122.519264611504,37.959736019256,0 -122.51944376306,37.9598674387401,0 -122.519850074274,37.9602972098982,0 -122.520020727134,37.960532240702,0 -122.520226625124,37.96070883235021,0 -122.520526440379,37.960885807606,0 contacts #khStyle84754 1 -122.507414205657,37.9575688495276,0 -122.507660338538,37.957574389221,0 -122.507875307491,37.9576654190622,0 -122.507990903541,37.9578281339826,0 -122.508005262608,37.95802196894681,0 -122.507956331881,37.9582110320535,0 -122.5078505742,37.9583863375594,0 -122.507699462895,37.9585344142972,0 -122.507507978115,37.9586552830026,0 -122.507288305121,37.958735475498,0 -122.50705458311,37.958788570212,0 -122.50658014406,37.9588767032648,0 -122.506327970644,37.9590288594492,0 -122.506220983402,37.9592807668574,0 -122.506231250304,37.9594475464171,0 -122.506337005526,37.9595921959347,0 -122.506480770946,37.959691941407,0 -122.506887710357,37.9599099594087,0 -122.50697366669,37.9600364995698,0 -122.506993974764,37.9602979553848,0 -122.507078949087,37.9604650488198,0 -122.507185298407,37.9606277256093,0 -122.507071739175,37.9607984911524,0 -122.506847910975,37.9608606397541,0 -122.506600995422,37.9608641077912,0 -122.506360724601,37.9608315521816,0 -122.506036891311,37.9607400611959,0 -122.505909609382,37.9606223590785,0 -122.505785915474,37.9605001655537,0 -122.505517728526,37.9601745754739,0 -122.505368604222,37.9600252359827,0 -122.505176580275,37.959907260051,0 -122.504942867793,37.95985219729,0 -122.504689446283,37.9597655061382,0 -122.504590188156,37.9596073634375,0 -122.504393444087,37.9593451619111,0 -122.504362352261,37.9591016856371,0 -122.504416106789,37.9588315295077,0 -122.504525188299,37.9586922922864,0 -122.5046989217,37.9585668471222,0 -122.505115807414,37.9583613127721,0 -122.505332665996,37.9582766060778,0 -122.5055753646,37.9582641101081,0 -122.505841118488,37.9583148001994,0 -122.505979443792,37.9582703189464,0 -122.506408371309,37.9579656901407,0 -122.506599825914,37.95784932947271,0 -122.507030750657,37.9576708856499,0 -122.507414205657,37.9575688495276,0 contacts #khStyle84754 1 -122.54740418955,37.9540662744209,0 -122.547365295532,37.95406962939741,0 contacts #khStyle84754 1 -122.547365295532,37.95406962939741,0 -122.547204168707,37.9540835279678,0 -122.546935139616,37.9541005146102,0 -122.546696951,37.9540770622097,0 -122.546405627533,37.954017352608,0 -122.546175514646,37.9539533727547,0 -122.545983357267,37.9538489817579,0 -122.545837609324,37.9537177317503,0 -122.545722813851,37.9535280182066,0 -122.545684602092,37.9533791588666,0 -122.545720238912,37.9532531175957,0 -122.545992930664,37.9527869606696,0 contacts #khStyle84754 1 -122.540309989753,37.952650711481,0 -122.540210232742,37.9527900189489,0 -122.540117159112,37.9528842885061,0 -122.539889945973,37.9530411214847,0 -122.539711614419,37.9531170306155,0 -122.539427189514,37.9530933820607,0 -122.539381258735,37.9530668284969,0 -122.539207439711,37.9529663396728,0 -122.538937997581,37.9527084158772,0 -122.538781931573,37.9525230397833,0 -122.538715966927,37.952396977692,0 contacts #khStyle84754 1 -122.545048027675,37.9518323238617,0 -122.545004748688,37.9518353331145,0 -122.544874144865,37.9519024224576,0 -122.544528211438,37.9521624510364,0 -122.544396950886,37.9522205244821,0 -122.544251112667,37.9522199578786,0 -122.544182245573,37.952197158235,0 -122.544129308034,37.9521293564234,0 contacts #khStyle84754 1 -122.545992930664,37.9527869606696,0 -122.546027971073,37.9527270598459,0 -122.546132651234,37.9524796127311,0 -122.546132799682,37.9523399147578,0 -122.546063914011,37.9522044560193,0 -122.545948593051,37.9521003623159,0 -122.545448497075,37.9518640921589,0 -122.545250293651,37.951818259791,0 -122.545048027675,37.9518323238617,0 contacts #khStyle84754 1 -122.538715966927,37.952396977692,0 -122.538696866043,37.95236047475861,0 -122.538626310938,37.9521529027207,0 -122.538619585103,37.9519771265527,0 -122.538717941358,37.95169378112071,0 -122.538819539742,37.9514010933178,0 -122.538827238685,37.9511938290275,0 -122.538771313522,37.95103588500041,0 -122.538650595497,37.9508866989203,0 contacts #khStyle84754 1 -122.538650595497,37.9508866989203,0 -122.538536991869,37.9507375407049,0 contacts #khStyle84754 1 -122.540309989753,37.952650711481,0 -122.540419022781,37.9525069338675,0 -122.540478228814,37.9523674673467,0 -122.540525050508,37.9521603562278,0 -122.540531939688,37.9518539477805,0 -122.540545718171,37.951583617534,0 -122.540494572161,37.9511147511616,0 -122.540468372239,37.950866796285,0 -122.54048037229,37.9507677024027,0 -122.540607008914,37.9505383718314,0 -122.540740337655,37.9503766633862,0 -122.540949671939,37.95023327789,0 -122.541164051617,37.9501935590677,0 -122.541402253876,37.9502125162652,0 -122.54163090013,37.9502810060937,0 -122.542063754866,37.9504584466587,0 -122.542687249155,37.9507537956189,0 -122.54325987659,37.9511075264776,0 -122.543923248706,37.951628344428,0 -122.54401568976,37.9517503767776,0 -122.544080847062,37.9519128606406,0 -122.544129308034,37.9521293564234,0 contacts #khStyle84754 1 -122.538536991869,37.9507375407049,0 -122.538332866838,37.9505024044489,0 -122.538048130599,37.95030300161941,0 -122.537600771311,37.9500578930874,0 -122.53739987353,37.949989504885,0 -122.537186797769,37.9499345875032,0 -122.536878910339,37.9499108402603,0 -122.53654945508,37.9499230582297,0 -122.536207821188,37.9499487463339,0 -122.535686464483,37.9500458246217,0 -122.535104411442,37.950178711271,0 -122.534601063876,37.9502398048819,0 -122.53451870244,37.95024142818501,0 -122.53422041551,37.9502473067894,0 -122.53408619133,37.9502107224993,0 -122.534063996417,37.9501205062784,0 -122.534125375072,37.9499765451725,0 -122.534364741166,37.9496980986091,0 -122.534536354226,37.9495590812148,0 -122.535061035146,37.949160092118,0 -122.535420588689,37.9488866260636,0 contacts #khStyle84754 1 -122.522400836855,37.9466712669612,0 -122.522701020512,37.9468933023706,0 -122.523346953457,37.947112235935,0 -122.52360298292,37.9471222887348,0 -122.52404875628,37.9470519957048,0 -122.524360881533,37.9469676399759,0 -122.524538647594,37.9468692197306,0 -122.52493845618,37.9466455193123,0 -122.525156651573,37.9465652874462,0 -122.525398655408,37.9465437347369,0 -122.525766133311,37.9465902848755,0 -122.526311292415,37.9467727435589,0 -122.52641165087,37.9467641359455,0 -122.526445402652,37.9467147017604,0 -122.526412183695,37.9465703627486,0 contacts #khStyle84754 1 -122.522400836855,37.9466712669612,0 -122.521978321892,37.9463360723293,0 contacts #khStyle84754 1 -122.535420588689,37.9488866260636,0 -122.535531475866,37.948787924294,0 -122.535648850205,37.9486757288837,0 -122.535732818171,37.9485588947324,0 -122.53610635312,37.9477582324514,0 -122.53622255725,37.9476054741589,0 -122.536462424118,37.9474712301067,0 -122.536586423682,37.9473230086522,0 -122.536639856888,37.9471970403656,0 -122.536710839963,37.9468818723047,0 -122.536784549026,37.9467160626396,0 -122.536850823443,37.9465669766359,0 -122.536890449097,37.9462606974269,0 -122.536841556373,37.9460036391968,0 contacts #khStyle84754 1 -122.506578412788,37.9453124520498,0 -122.506822370756,37.9453179841589,0 -122.507053844584,37.9453820464944,0 -122.507225826308,37.9455134545034,0 -122.507345640142,37.9456806944081,0 -122.507465353452,37.94596960652271,0 contacts #khStyle84754 1 -122.480857675788,37.9450437642448,0 -122.480979182266,37.9450623272274,0 -122.481396752609,37.9450520404094,0 -122.48159956794,37.9450470435312,0 -122.481851165484,37.9449760522367,0 -122.482010466248,37.9449812618176,0 -122.482110443915,37.9450267669882,0 -122.482214736535,37.9451669254239,0 -122.482378099794,37.9453028379084,0 -122.482499196082,37.9453799806564,0 -122.482628496345,37.9454030826967,0 -122.482829986551,37.9453769323737,0 -122.483098055456,37.9453916325172,0 -122.483269939815,37.9454284405845,0 -122.483399225803,37.9455551888154,0 -122.483411160257,37.9455867869891,0 -122.483457191644,37.9457086614001,0 contacts #khStyle84754 1 -122.521978321892,37.9463360723293,0 -122.521792883876,37.9461911117058,0 -122.521468442122,37.9460906479005,0 -122.521225844368,37.9460941644965,0 -122.520990067399,37.9461427724647,0 -122.520553757638,37.9462897014406,0 -122.520210683488,37.94631984368281,0 -122.520019565825,37.9462830106982,0 -122.519829570397,37.9461830923714,0 -122.519687052399,37.9460022528927,0 -122.51944898043,37.9458570730912,0 -122.519095642823,37.9457159267773,0 -122.519072538489,37.9457084985295,0 -122.5188968789,37.9456520222205,0 -122.518868390001,37.9455482581425,0 -122.518945002891,37.9454719634757,0 -122.519085660145,37.9454488041998,0 -122.519212048514,37.9454279941455,0 -122.519536499821,37.945307650478,0 -122.519717766211,37.9452182646401,0 -122.519928509211,37.9449948563208,0 -122.520005717291,37.9449130077194,0 contacts #khStyle84754 1 -122.507465353452,37.94596960652271,0 -122.507709352944,37.9461824312999,0 -122.508043955328,37.9464632314852,0 -122.508219498064,37.9465946529704,0 -122.50840648308,37.946717109342,0 -122.508878432735,37.947097623322,0 -122.50900095686,37.9471792513139,0 -122.509164178401,37.9472385174599,0 -122.509464931462,37.9472623073091,0 -122.509616150404,37.9473080034516,0 -122.509824659921,37.9474035091539,0 -122.509975280627,37.9475393302948,0 -122.509985260733,37.9475436116053,0 -122.51020865888,37.9476394455847,0 -122.510391059199,37.9477032964977,0 -122.510609063939,37.9476546357062,0 -122.51087520168,37.947642226376,0 -122.511012051372,37.9476022392576,0 -122.511303096802,37.9473736256509,0 -122.511455953755,37.9472796279055,0 -122.511619893615,37.9472307400805,0 -122.511852063609,37.9471911487344,0 -122.512036219036,37.9470972804493,0 -122.51222769612,37.94697189752,0 -122.512358026168,37.9468417537338,0 -122.512494344384,37.9466665706881,0 -122.512507895799,37.94664742345631,0 -122.512694686378,37.9463834998333,0 -122.512857557878,37.9462805290287,0 -122.513055195563,37.9461912214965,0 -122.513199097775,37.9460521202779,0 -122.51332210516,37.9458453362006,0 -122.51344923533,37.9454447938623,0 -122.513520761196,37.9450620464071,0 -122.513590592588,37.944936156715,0 -122.513787456573,37.94474770387791,0 -122.514076081004,37.9445596307826,0 -122.514253290971,37.9445468453996,0 -122.514492030584,37.94458839120491,0 -122.514703295424,37.9445892652694,0 contacts #khStyle84754 1 -122.506578412788,37.9453124520498,0 -122.506188872424,37.9452702556098,0 -122.50600150245,37.9452063772796,0 -122.505791822974,37.9450748087056,0 -122.505769664143,37.9449845873962,0 -122.505770220847,37.9447953209983,0 -122.505657874253,37.944682187736,0 -122.505478814189,37.9445462412076,0 contacts #khStyle84754 1 -122.515837195529,37.962250006029,0 -122.515604534291,37.9621408920745,0 -122.515332711755,37.962036122234,0 -122.515080367177,37.9618908748024,0 -122.514915033506,37.96171444199701,0 -122.514931101609,37.9615432656864,0 -122.514872166529,37.9614168430609,0 -122.514755600937,37.961290181998,0 -122.514383997063,37.9611038821331,0 -122.51422254972,37.960986047492,0 -122.514029414193,37.9607103577331,0 -122.513991056394,37.9604848793532,0 -122.513924059776,37.960394473952,0 -122.513682453302,37.9603484085821,0 -122.513197044688,37.9603734333583,0 -122.512954399805,37.9603769324638,0 -122.512590344279,37.9603585839978,0 -122.512467184138,37.960352376447,0 -122.51225409759,37.960297413909,0 -122.512081003352,37.9602200854056,0 -122.511885947689,37.9600209927642,0 -122.511762811817,37.9598131863999,0 -122.511762906071,37.9596915142895,0 -122.511802250716,37.9595519799881,0 -122.51222081784,37.9591977165709,0 -122.512388136274,37.9590722333278,0 -122.512522193936,37.9589195732792,0 -122.512572685371,37.9587079827766,0 -122.512571090745,37.9585187077655,0 -122.51273754995,37.9583075990131,0 -122.512753860506,37.958100372804,0 -122.51276966473,37.9579697531235,0 -122.51299914695,37.9576958162608,0 -122.513002366345,37.9576862877028,0 -122.513063004961,37.9575068129418,0 -122.513055568654,37.9573400455987,0 -122.512963294108,37.9570918109871,0 -122.512844901937,37.9569200764882,0 -122.512700779121,37.9567662605463,0 -122.512505164727,37.9566527879704,0 -122.512295202826,37.9565572809854,0 -122.512062236719,37.9564977290732,0 -122.511823131928,37.956505747027,0 -122.511581474867,37.9565768433474,0 -122.511313081086,37.9566027638735,0 -122.511106289692,37.9565658510691,0 -122.510792249849,37.9565014523326,0 -122.510635050693,37.95649629025,0 -122.510409755765,37.9565674524162,0 -122.510211937364,37.9566792863936,0 -122.510045242349,37.9568182883778,0 -122.509890551463,37.9569708594464,0 -122.50971961645,37.9571053368503,0 -122.50951684539,37.9572126425461,0 -122.509292970117,37.95728380848491,0 -122.509050896718,37.9573098339315,0 -122.508813512131,37.9572727890527,0 -122.508590627092,37.957195246928,0 -122.508380668796,37.9570997329985,0 -122.508181472942,37.9569907446489,0 -122.508003771431,37.9568593141648,0 -122.507983715557,37.9568411793064,0 -122.507878597226,37.9567461293473,0 -122.50779247311,37.956538474059,0 -122.507805360197,37.95631320861321,0 -122.507834339606,37.9561285681895,0 -122.507943651224,37.955953277522,0 -122.508010336265,37.9557687951945,0 -122.507986698841,37.9555794276345,0 -122.507899536378,37.9554267311949,0 -122.507886136578,37.9554032565596,0 -122.507814240528,37.9553451679805,0 -122.507740363559,37.955285478774,0 -122.507575322196,37.9551766327097,0 -122.50756359548,37.9551288977213,0 -122.507547617321,37.9550638566281,0 -122.507613260106,37.9549289404294,0 -122.507643180862,37.9548164062252,0 -122.507595917169,37.9546494713571,0 -122.507354145001,37.9544186303029,0 -122.507186441137,37.9542827341571,0 -122.506806716296,37.9540422995851,0 -122.506249260306,37.9537830903122,0 -122.506099211669,37.9537734459003,0 -122.50591752862,37.9538132383779,0 -122.50563802165,37.95411849548331,0 -122.505149339637,37.95453102311771,0 -122.504896829881,37.9546290982976,0 -122.504473342134,37.9547737924897,0 -122.504414786028,37.9547937993457,0 -122.50404392063,37.9548237767699,0 -122.503854181897,37.9547914297324,0 -122.50377516925,37.9546919549498,0 -122.503791760613,37.9545523270223,0 -122.503908618047,37.9543139825383,0 -122.504029969738,37.9541477591815,0 -122.504181079274,37.9539996870302,0 -122.504401377411,37.953824868642,0 -122.504584457117,37.9535671846048,0 -122.504746126152,37.9533396342523,0 -122.504825470832,37.9531777390782,0 -122.504778653591,37.9530513624813,0 -122.504652900418,37.9529201462022,0 -122.504298013964,37.9527969746224,0 -122.504030041476,37.95265614388,0 -122.503809204632,37.9524884735458,0 -122.503588763112,37.9522622213704,0 -122.5034232795,37.9522209635025,0 -122.503210145415,37.9522831506535,0 -122.502996950237,37.9523543499412,0 -122.502720032182,37.9523802148318,0 -122.502452106809,37.9523385213302,0 -122.502215228287,37.95222936307851,0 -122.502122343985,37.9520969638357,0 -122.502113759961,37.9520847279594,0 -122.502111290518,37.9520669479089,0 -122.502097477356,37.9519674926639,0 -122.502098773865,37.9516700762818,0 -122.502027774796,37.951543595956,0 -122.501926840292,37.951496556136,0 -122.501783815949,37.9514299003911,0 -122.501753743548,37.9513531640094,0 -122.501729149235,37.9513079956327,0 -122.501605436274,37.9510866569125,0 -122.501374457018,37.9508925332649,0 -122.501195857383,37.9507424304124,0 -122.50108648665,37.9507149270048,0 -122.50077235956,37.9506316276252,0 -122.500602902693,37.9505866910767,0 -122.500077328512,37.9505664277166,0 -122.50002756375,37.9505617093138,0 -122.499646182281,37.9505736030154,0 -122.499264058747,37.950589998707,0 -122.498887503482,37.9506244425054,0 -122.498702985071,37.950664211974,0 -122.498529695071,37.9507265610973,0 -122.498215499699,37.9509009673688,0 -122.49803939394,37.9509587973343,0 -122.497852801508,37.95098954381,0 -122.497659929404,37.9510022375397,0 -122.497471478952,37.9509924179261,0 -122.497313985832,37.95092865391331,0 -122.497227813716,37.9508381569139,0 -122.497133904304,37.9506304604901,0 -122.496952994367,37.9504539358305,0 -122.496827601998,37.95027314254831,0 -122.496806718176,37.9501018100742,0 -122.496824093905,37.9499531736077,0 -122.496901715092,37.9497326931318,0 -122.496949858616,37.949453503126,0 -122.496990089252,37.9492914454048,0 -122.49698306346,37.94917424905581,0 -122.496944180765,37.9490343841803,0 -122.496841957767,37.9488987541274,0 -122.496746510371,37.9488127233727,0 -122.4964876388,37.9486989531142,0 -122.496172818274,37.9485488909455,0 -122.496035061151,37.948408601228,0 -122.495956779867,37.9483091243603,0 -122.495816329395,37.9480426437696,0 -122.495737709911,37.94799273563751,0 -122.494997020472,37.947809294867,0 -122.494532177373,37.9476495698334,0 -122.494052336538,37.9474987910931,0 -122.493650248998,37.9474204482132,0 -122.493263780624,37.9473466777968,0 -122.492917333335,37.9472460406733,0 -122.492720079854,37.9471730858867,0 -122.492409510596,37.9470275383941,0 -122.492070797493,37.9469404514115,0 -122.491834484912,37.9468583132921,0 -122.491700386132,37.946808162215,0 -122.491519992535,37.9466631761114,0 -122.491292003274,37.9465089706365,0 -122.491165730036,37.9464588528688,0 -122.490828661452,37.9463402246678,0 -122.490511942065,37.946262241403,0 -122.490377938693,37.9461985700429,0 -122.490244060124,37.9461168734895,0 -122.490079039689,37.9460125094985,0 -122.489985120097,37.9459129606786,0 -122.489655398916,37.9455555220553,0 -122.489537077613,37.9454874115291,0 -122.489210966651,37.94532826877591,0 -122.488564713324,37.9450730961082,0 -122.488321149029,37.9449098041788,0 -122.487895711028,37.9447141735014,0 -122.487553770612,37.944581995448,0 -122.487373444339,37.94453163757011,0 -122.487185848663,37.9445037796354,0 -122.487037866633,37.9445076393277,0 -122.486511462024,37.9446134908676,0 -122.486141051114,37.9446884783812,0 -122.485960745994,37.9447372591544,0 -122.485615563766,37.944866432264,0 -122.485452109146,37.9449468308816,0 -122.485093147778,37.9451403250696,0 -122.484979431451,37.9452016221641,0 -122.484829395838,37.9452955979839,0 -122.484676018909,37.945387566919,0 -122.484640019441,37.9454091531061,0 -122.48442651675,37.9455371742033,0 -122.484275295811,37.9456987400364,0 -122.484101911014,37.9457745867313,0 -122.483699861253,37.9457953507097,0 contacts #khStyle84754 1 -122.504609464942,37.9442406451635,0 -122.504339781937,37.9442530254073,0 contacts #khStyle84754 1 -122.505478814189,37.9445462412076,0 -122.505366105834,37.9444871829275,0 -122.50478927892,37.9442639362227,0 -122.504609464942,37.9442406451635,0 contacts #khStyle84754 1 -122.526412183695,37.9465703627486,0 -122.526016144519,37.9462082509823,0 -122.525812071928,37.9459730932861,0 -122.525501500076,37.9454851458999,0 -122.525445868586,37.9452866390926,0 -122.525502004007,37.9450750651522,0 -122.525624946462,37.9448727741447,0 -122.525626234766,37.944561837429,0 -122.525715395887,37.9444134865619,0 -122.526217213432,37.94425328365251,0 -122.526462141496,37.9442182213027,0 -122.526658323194,37.9442415450417,0 contacts #khStyle84754 1 -122.515283117115,37.9444699893647,0 -122.515590766076,37.9444171831787,0 -122.516340946686,37.9442445284771,0 -122.516777550591,37.9441607059001,0 -122.517254820557,37.9441671770856,0 -122.517439382003,37.9442265195877,0 -122.517636364559,37.9443444961051,0 -122.517752698193,37.94439454477691,0 -122.517893423311,37.9444131487494,0 contacts #khStyle84754 1 -122.547895983986,37.9539194599381,0 -122.548011103144,37.9538252691669,0 -122.548084040594,37.9535326339564,0 -122.548102302232,37.9533389289269,0 -122.548108206814,37.9529559072727,0 -122.548128685313,37.9527486915453,0 -122.54817578958,37.9524920079255,0 -122.548237474134,37.952293963708,0 -122.548352976728,37.9521366843607,0 -122.548491216164,37.9519839988319,0 -122.548706617468,37.95177753319721,0 -122.548894870741,37.9516504695292,0 -122.549091661475,37.9515176426085,0 -122.549321585964,37.9513788277492,0 -122.549437575931,37.9512576004207,0 -122.549553404667,37.951046244219,0 -122.549751919429,37.9508081669053,0 -122.549833473265,37.9507221964355,0 -122.550084150312,37.9504579420801,0 -122.550315275667,37.950238014499,0 -122.55039135066,37.950145076326,0 -122.550399851307,37.9501346913633,0 -122.550407810521,37.9500957237065,0 -122.550419002289,37.9500409296513,0 -122.550454114716,37.9498690212989,0 -122.550436321736,37.94976825119371,0 -122.550423857797,37.9496976618181,0 -122.550400696307,37.9496553094412,0 -122.550302846579,37.9494763839027,0 -122.550087222811,37.9492547429639,0 -122.549726314585,37.9490595824154,0 -122.549312468308,37.948796621231,0 -122.548606808976,37.9483252411135,0 -122.548192887989,37.9480757949349,0 -122.546950070606,37.9473860269206,0 -122.54678865599,37.9472592238931,0 -122.546635787091,37.9470152870403,0 -122.546010296796,37.946237765368,0 -122.545882569332,37.9460705337849,0 -122.545726249856,37.9459257233809,0 -122.545524894174,37.9458167895602,0 -122.545325228639,37.9457799645019,0 -122.545156667896,37.9457748045909,0 -122.544695216295,37.9458541297012,0 -122.544512163653,37.9458534190232,0 -122.544334564553,37.94585272924571,0 -122.544096626219,37.945793221376,0 -122.543905009197,37.9457203739188,0 -122.543728498013,37.9456205464542,0 -122.543494019902,37.9454619098237,0 -122.543326297084,37.9453215582742,0 -122.543206666804,37.9452264578719,0 -122.543091211439,37.9450896890826,0 -122.543046365537,37.9450365643185,0 -122.542832130241,37.9447112680655,0 -122.542632778872,37.94439504226691,0 -122.542487390818,37.9442097124966,0 -122.542274998947,37.94404665316201,0 -122.542157450115,37.9439605726305,0 -122.541751455986,37.9437021219427,0 -122.541421407972,37.9434710052357,0 -122.541061318395,37.9432668085378,0 contacts #khStyle84754 1 -122.520005717291,37.9449130077194,0 -122.520109564197,37.9448052788768,0 -122.520222980509,37.944648018639,0 -122.520470754147,37.9441758592872,0 -122.520536439494,37.9440074122027,0 -122.520623391709,37.9437844259417,0 -122.520668489264,37.9436313924664,0 -122.520614449676,37.9435185115651,0 -122.520516396365,37.9433919315529,0 -122.520490537939,37.9432115696976,0 contacts #khStyle84754 1 -122.517893423311,37.9444131487494,0 -122.518004596606,37.9443820607194,0 -122.518134823619,37.9442654291898,0 -122.518148422264,37.9441438121636,0 -122.518128411997,37.94404909551571,0 -122.518026241548,37.9438999645317,0 -122.518033914183,37.9438143743922,0 -122.518179637117,37.9436121847902,0 -122.518239436862,37.943387110187,0 -122.518346305963,37.9432523568625,0 -122.518498787114,37.9431042714271,0 -122.518915600004,37.9427815202124,0 -122.519175552153,37.9427330154063,0 -122.519509128161,37.9427388884214,0 -122.51971375135,37.9427757774997,0 -122.519929257218,37.9428893196298,0 contacts #khStyle84754 1 -122.541061318395,37.9432668085378,0 -122.539941115667,37.9426720808823,0 -122.539815803533,37.9425769547473,0 contacts #khStyle84754 1 -122.480715655077,37.9449079440794,0 -122.480737171196,37.94478186018801,0 -122.480819827507,37.9446605531639,0 -122.480820108106,37.94462068925861,0 -122.480820557047,37.94455690927891,0 -122.480644667259,37.944281240901,0 -122.480607748529,37.9440692768897,0 -122.480627098955,37.9439476898129,0 -122.480823688426,37.9438088613096,0 -122.48083062927,37.9437322832667,0 -122.480818587228,37.9436240764721,0 -122.480620808316,37.9433257791999,0 -122.480453565845,37.9431357702981,0 -122.480390661009,37.9429777679115,0 -122.480422878093,37.9428472250139,0 -122.480518716633,37.94267189974461,0 -122.480726117313,37.9424114464811,0 contacts #khStyle84754 1 -122.504339781937,37.9442530254073,0 -122.504032671284,37.9442246892421,0 -122.50383723882,37.9441968245845,0 -122.503140899628,37.944081217944,0 -122.502750899511,37.9440029570212,0 -122.50254823337,37.9439930851644,0 -122.502352802567,37.9440082920689,0 -122.502218708667,37.9440187260213,0 -122.502106441351,37.94400022408561,0 -122.501769902316,37.9438005140107,0 -122.501761944727,37.9437148586527,0 -122.501762852814,37.9434161038822,0 -122.501763108999,37.9433318197257,0 -122.501689524573,37.9429574761461,0 -122.501567350457,37.942826271655,0 -122.501467877785,37.9427041762893,0 -122.501269096394,37.9425411011839,0 -122.501085934152,37.942382598555,0 contacts #khStyle84754 1 -122.480726117313,37.9424114464811,0 -122.481164002264,37.9421475055627,0 contacts #khStyle84754 1 -122.481640641271,37.9418341637858,0 -122.481958549534,37.9418400738347,0 -122.482151368341,37.9418319119663,0 -122.482316890123,37.941760539803,0 -122.482404914379,37.94168431925911,0 -122.482545730585,37.941383011481,0 -122.482685344795,37.9412529413798,0 -122.482685581549,37.9411177504551,0 contacts #khStyle84754 1 -122.496250383993,37.9412533673001,0 -122.496209133813,37.9413568374219,0 -122.496148894571,37.9414286812057,0 -122.49608812861,37.9414734842989,0 -122.49607080859,37.9414758734683,0 -122.495961398862,37.9414909656735,0 -122.495917484658,37.9414637386608,0 -122.495901861245,37.94125187077,0 -122.495841680362,37.9412110546558,0 -122.495726577747,37.9411925345294,0 -122.49569849938,37.9412419842734,0 -122.495714522626,37.9413952707146,0 -122.49576323373,37.9415532039999,0 -122.495762648551,37.94163882307501,0 -122.495680051065,37.9417556345417,0 -122.495674548458,37.9418322196831,0 -122.49575658824,37.9419107063039,0 -122.495783376686,37.9419363344872,0 -122.495789347016,37.9419994497263,0 -122.495744754965,37.9420713605196,0 -122.495700162827,37.9421432712946,0 -122.495683341332,37.9422107949941,0 -122.495683002483,37.9422603639264,0 -122.495645058155,37.9422962520543,0 -122.495551169067,37.942295848519,0 -122.495452177739,37.9423134485687,0 -122.495320189985,37.9423714642326,0 -122.495111165698,37.9423570459703,0 -122.494891410571,37.9423515939491,0 -122.494699765834,37.9422921857682,0 -122.494595578008,37.9422376603411,0 -122.494419427555,37.9422008504228,0 -122.49420523962,37.9422134466994,0 -122.494051603139,37.9422127844509,0 -122.493809520459,37.9421441445658,0 -122.493474601078,37.942025533143,0 -122.493150505946,37.941988082696,0 -122.493085408996,37.9419382311484,0 -122.493019601833,37.9417847293173,0 -122.492953731934,37.9417438871547,0 -122.492509651545,37.9415707245122,0 -122.492135831858,37.9415240434399,0 -122.492012411657,37.94147393889241,0 -122.491945800295,37.9414375993541,0 -122.491781312866,37.9413602783791,0 -122.491638319165,37.9412605182814,0 -122.491316524299,37.9409932463689,0 -122.491092299453,37.9407083710981,0 -122.49106515075,37.9406226317731,0 -122.491073843841,37.9404784652065,0 -122.491083623592,37.9403162766775,0 -122.490973782279,37.9402572171145,0 -122.490896810643,37.9402794152429,0 -122.490637751803,37.9404044703812,0 -122.490511084911,37.9404129333619,0 -122.490291865303,37.9403308662783,0 -122.490269429009,37.94034016127191,0 -122.490055041291,37.9404289782968,0 -122.489884208337,37.9405499086871,0 -122.489812614553,37.94061719347791,0 -122.489735798034,37.94061685952,0 -122.489611919153,37.9405306992566,0 -122.489447467423,37.9404488687668,0 -122.48942028955,37.9403676353337,0 -122.489453849567,37.9402461085297,0 -122.489432361837,37.9401648998497,0 -122.489399955769,37.9401196948649,0 -122.489325741435,37.9400517759577,0 contacts #khStyle84754 1 -122.499498280682,37.9418621086423,0 -122.499258610859,37.9418565798438,0 -122.498993709771,37.9419005132379,0 -122.498955116442,37.9418919044433,0 -122.498314028451,37.9417488984425,0 -122.497993181676,37.941756539213,0 -122.497922813914,37.9417346208662,0 -122.497861160374,37.9417154168046,0 -122.497697806803,37.9415750193555,0 -122.49757846071,37.9414483292871,0 -122.497359557368,37.9411094119399,0 -122.497272588157,37.9409287834182,0 -122.497230451252,37.9408498886504,0 -122.497217104297,37.9408248985241,0 -122.497122096848,37.940675780247,0 -122.49703442217,37.9405987957216,0 -122.496827373847,37.9403996265622,0 -122.49670153758,37.9402864269568,0 -122.496677776634,37.9400159410165,0 -122.496766829001,37.93978649646881,0 -122.496805386132,37.9396604825702,0 -122.496768304287,37.9395701955477,0 -122.496692630388,37.939506781417,0 -122.496547626804,37.939492640253,0 -122.496427736321,37.9395507090885,0 -122.496423863377,37.9395554024165,0 -122.496338802495,37.9396584810718,0 -122.496211529214,37.9399643700455,0 -122.496191963044,37.9402256572874,0 -122.496209474738,37.9404735844862,0 -122.496252684412,37.9407081027808,0 -122.496282291991,37.9407615707193,0 -122.496315217955,37.9408210311872,0 -122.496327497779,37.9408976926909,0 -122.496329296893,37.9410509180109,0 -122.496300880565,37.941149936848,0 -122.496250383993,37.9412533673001,0 contacts #khStyle84754 1 -122.484086050747,37.9410247742288,0 -122.484350025446,37.9410124151218,0 -122.484538637229,37.9409952180551,0 -122.485105309141,37.9409256031128,0 -122.485287739226,37.940876832929,0 -122.485464541805,37.9408190249913,0 -122.485632191923,37.9407476574768,0 -122.485722298834,37.9406817415367,0 -122.485773033552,37.9406446274675,0 -122.486106365945,37.9403757035044,0 -122.486231652615,37.9402590856279,0 -122.486453837178,37.9400167124491,0 -122.486617916821,37.9397425398838,0 -122.486757602971,37.939396157994,0 contacts #khStyle84754 1 -122.489325741435,37.9400517759577,0 -122.489338331891,37.9399797283374,0 -122.489441713759,37.9399441269217,0 -122.489608983975,37.9399268288759,0 -122.489784950529,37.9397833891868,0 -122.49012205977,37.939685713432,0 -122.490204615154,37.9396633736199,0 -122.490335129732,37.9396280557152,0 -122.490534192105,37.9395387920006,0 -122.490773359973,37.9395127915814,0 -122.491059559943,37.9395771226567,0 -122.491234963506,37.9395147935597,0 -122.491283176779,37.9394338873421,0 -122.491283578498,37.9394329158048,0 -122.49136129687,37.9392449570999,0 -122.491391483285,37.9390963766885,0 -122.491429561768,37.9387315232026,0 -122.491509597054,37.938574145948,0 -122.491510280294,37.9384750080742,0 -122.491439034852,37.9383890777373,0 -122.491319794627,37.9383525097602,0 -122.491216322677,37.9384016316533,0 -122.491104098102,37.9384822603135,0 -122.491000781264,37.9385088506805,0 -122.490777606227,37.9384853505458,0 -122.49064287438,37.9384261826578,0 -122.49050016797,37.9382858647661,0 -122.490405364187,37.9381097034909,0 -122.49044557162,37.9379521540026,0 -122.490637396757,37.937777237022,0 -122.490645873639,37.9376826393679,0 -122.490582360219,37.937610261266,0 -122.490439682067,37.9375690842554,0 -122.49011338109,37.93754513506481,0 -122.489858733406,37.9374448876096,0 -122.489692310402,37.9373405168452,0 -122.489556901476,37.9372768383587,0 -122.48941388753,37.9371815818135,0 -122.489355911113,37.9370642658895,0 -122.489340237501,37.9370325500937,0 contacts #khStyle84754 1 -122.515681063537,37.9361888601494,0 -122.515752807951,37.9359863678757,0 contacts #khStyle84754 1 -122.515752807951,37.9359863678757,0 -122.515965286142,37.9355816677772,0 contacts #khStyle84754 1 -122.515965286142,37.9355816677772,0 -122.516089720105,37.9353703797883,0 contacts #khStyle84754 1 -122.539815803533,37.9425769547473,0 -122.53966021466,37.9424321391555,0 -122.539516091746,37.9422738491341,0 -122.53911934826,37.9417901051479,0 -122.538707616286,37.9413153136944,0 -122.538560624194,37.9411615176217,0 -122.538397899577,37.9410211786949,0 -122.53820945608,37.9408987639513,0 -122.537985589563,37.9407536773487,0 -122.5374808993,37.940472291147,0 -122.537245056637,37.9403091302747,0 -122.536989638317,37.9400918147331,0 -122.536473540608,37.9395895650199,0 -122.535935402897,37.939199886155,0 -122.535897398675,37.9391797107399,0 -122.535533440695,37.9389864941005,0 -122.535131509216,37.9387685943859,0 -122.534722382123,37.9385641840013,0 -122.534308989673,37.9383597552673,0 -122.534147505076,37.938291177883,0 -122.534094754826,37.9382687764505,0 -122.533867575301,37.9382002778756,0 -122.53363533186,37.9381452779703,0 -122.532932143247,37.938101922925,0 -122.532478353717,37.93810011548611,0 -122.531944302599,37.93811583778541,0 -122.531939097623,37.9381159910063,0 -122.531583009397,37.938074012149,0 -122.531423317429,37.9380192975278,0 -122.531340585702,37.9379423580813,0 -122.531110998996,37.9376935881151,0 -122.531126602128,37.9376491987063,0 -122.531188507377,37.9374730836719,0 -122.531156872818,37.9374143739057,0 -122.531041166238,37.9373778601778,0 -122.530851173429,37.9374068852886,0 -122.530811199454,37.9374129920516,0 -122.530644930735,37.9374979488429,0 -122.530529820851,37.9374794626473,0 -122.530479040091,37.93741166326421,0 -122.530440723694,37.9372853303901,0 -122.530312983623,37.9372397549636,0 -122.530230167849,37.9371763336351,0 -122.530223829935,37.937054635136,0 -122.530332543624,37.9369604357234,0 -122.530512009945,37.9369251027072,0 -122.530716680086,37.9369529600005,0 -122.53100712226,37.9370865550529,0 -122.531023055445,37.9370938838255,0 -122.531170142887,37.9371170037354,0 -122.531406681634,37.9370548589275,0 -122.531566461336,37.9369833943739,0 -122.531583515377,37.9369584848535,0 -122.531631075281,37.9368890176713,0 -122.531643942858,37.9366547355826,0 -122.531811009185,37.9364436009754,0 -122.532272168468,37.936133004847,0 -122.532323176843,37.9360986498403,0 -122.532464006864,37.9359865507842,0 -122.532496412777,37.9359235901253,0 -122.532496018158,37.93576135766401,0 -122.532394348196,37.93568905678001,0 -122.532340153668,37.9356505171595,0 -122.532253857459,37.9355891487791,0 -122.532081714046,37.9353676481021,0 -122.532050451181,37.9352503566578,0 -122.532024592535,37.9351781508983,0 -122.531928860907,37.9351327048862,0 -122.531851789648,37.9351729551185,0 -122.531794204139,37.9352808792676,0 -122.531627393995,37.9355641175451,0 -122.531467441625,37.9357752803392,0 -122.531313464567,37.93594140264211,0 -122.531185464016,37.9360490451654,0 -122.531057296006,37.9360710650304,0 contacts #khStyle84754 1 -122.515681063537,37.9361888601494,0 -122.515662575139,37.9365132452268,0 -122.515698109558,37.9366260520983,0 -122.515847415155,37.9367438348582,0 -122.516050449594,37.936803255739,0 -122.51626237394,37.9368086360245,0 -122.516605166476,37.936706401346,0 -122.516839523062,37.9366532896956,0 -122.517093499476,37.93664532240861,0 -122.517224698034,37.9367044456007,0 -122.517322681748,37.9369481947588,0 -122.517390351126,37.9372594152678,0 -122.517442962724,37.937480445641,0 -122.517557362048,37.9376070954891,0 -122.517830790367,37.9377794629189,0 -122.518121138263,37.937866277456,0 -122.518509670958,37.9379489878243,0 -122.51874794505,37.9379499653677,0 -122.519030611398,37.93790606032921,0 -122.519444597327,37.9379032501969,0 -122.520009672398,37.9379641465059,0 -122.520150591035,37.937951203676,0 -122.520274673635,37.9379021405753,0 -122.52048618312,37.93786244748901,0 -122.520688805913,37.9378767946212,0 -122.520953522777,37.9379680038869,0 -122.521121293899,37.9379822079767,0 -122.521227594267,37.9379330712905,0 -122.521165870817,37.9376894733402,0 -122.521060857814,37.9375403332413,0 -122.520946335521,37.9374317119027,0 -122.520734634361,37.9372821358686,0 -122.52058531983,37.9371643592406,0 -122.520276734609,37.9369287647106,0 -122.519977192444,37.9367247512319,0 -122.519318221274,37.9363390087172,0 -122.519219680435,37.9362890344878,0 -122.518884757682,37.9360578348008,0 -122.518656053519,37.9358991724942,0 -122.518523991404,37.9357544255677,0 -122.518418539912,37.935564723615,0 -122.51837490277,37.9352761342874,0 -122.518393501917,37.9350418773112,0 -122.518503615111,37.9348440471634,0 contacts #khStyle84754 1 -122.529593523713,37.935957051528,0 -122.529475945792,37.9359242213809,0 -122.529331533164,37.93588389823781,0 -122.52901233488,37.9357474249587,0 -122.528897774798,37.9356433175431,0 -122.528891439183,37.9355216189608,0 -122.528887569952,37.93545879464731,0 -122.528873394577,37.9352286296693,0 -122.528815792225,37.9351157380353,0 -122.528669227649,37.9350115018627,0 -122.528522289173,37.93496584737551,0 -122.528375062855,37.9349652556791,0 -122.52817010185,37.9350951176177,0 -122.527984507161,37.9353106789449,0 -122.52788121381,37.9355581160477,0 -122.527848285021,37.9360356632418,0 -122.5277712297,37.9361840647314,0 -122.527323467801,37.93635350537581,0 -122.527169837481,37.9363528863588,0 -122.526843508851,37.9362887124354,0 -122.526818912749,37.9362838754654,0 -122.526160319019,37.9360558970113,0 -122.526103286731,37.9359655384426,0 -122.526122866647,37.9359070341722,0 -122.526256795691,37.9357633698305,0 -122.526500226925,37.9356246536957,0 -122.526711362264,37.9355308709017,0 -122.526993112302,37.935405827533,0 -122.527076732004,37.9353430748312,0 -122.527070630468,37.935185325803,0 -122.526962948349,37.9348964813168,0 -122.526924332465,37.9347070562924,0 -122.527007817902,37.9345541748287,0 -122.527135879631,37.9344375242593,0 -122.527283537898,37.934370523044,0 -122.52753889919,37.9343670451586,0 -122.527940197772,37.9344542822171,0 -122.528824972048,37.9344578385559,0 -122.528838779729,37.9344568077635,0 -122.529168670314,37.9344321797706,0 -122.529368361697,37.9343473590621,0 -122.529404979417,37.9342934289677,0 -122.5292973321,37.9342208945461,0 -122.528696292552,37.9341148343053,0 contacts #khStyle84754 1 -122.516089720105,37.9353703797883,0 -122.516347745734,37.9350695141838,0 -122.516601000004,37.9348452372959,0 -122.517624649179,37.9341689819574,0 -122.518016262058,37.93399484116631,0 -122.518309846817,37.9339104249072,0 -122.518589447248,37.9338980531149,0 -122.518754187415,37.9339392865731,0 -122.518873709087,37.9340434241558,0 -122.518886817217,37.9342147215151,0 -122.51881987945,37.9343361201303,0 -122.518625936277,37.9346282413442,0 contacts #khStyle84754 1 -122.528350191584,37.9339602255107,0 -122.528117600229,37.9338511363955,0 contacts #khStyle84754 1 -122.527766782679,37.9336559491964,0 -122.527434881445,37.9335059012796,0 -122.527217055337,37.9334239083385,0 -122.526764190767,37.9332823839007,0 -122.526302648667,37.9331633547627,0 -122.526082691184,37.9330813511234,0 -122.525668642236,37.9328768894556,0 -122.525456567661,37.9327859036878,0 -122.525227250473,37.93272188625651,0 -122.524905417625,37.93266650665521,0 contacts #khStyle84754 1 -122.524905417625,37.93266650665521,0 -122.524744769929,37.9326523368548,0 -122.524584920605,37.932624650829,0 -122.523999722142,37.9324915923663,0 -122.523633288426,37.9324044834615,0 -122.523311067178,37.9322995273831,0 -122.523210518022,37.9322658902393,0 -122.523120158815,37.932235661884,0 -122.523085024602,37.93222008150191,0 -122.522594342029,37.932002484929,0 -122.522453515541,37.9319400338388,0 -122.522247195668,37.9318400528974,0 -122.52196723196,37.931690201056,0 -122.521764196295,37.9315226364435,0 -122.521561891899,37.9312424141157,0 -122.5215301015,37.9309899253113,0 -122.521574194789,37.9306611368547,0 contacts #khStyle84754 1 -122.522205823819,37.9297714402253,0 -122.522521276608,37.9296014804376,0 -122.522732399635,37.9295077045767,0 -122.522954784568,37.9294319997792,0 -122.523420626684,37.9293212322403,0 -122.523660499094,37.9292906612818,0 -122.523903099765,37.9292781265669,0 -122.524146324379,37.9292791131302,0 -122.524388184718,37.9292710808288,0 -122.524867957269,37.9292054281672,0 -122.525088945779,37.929125207247,0 -122.525288090095,37.9290133526243,0 -122.525450426316,37.9288743103105,0 -122.525588726703,37.9287126385104,0 -122.525830535997,37.9283801409861,0 -122.525983000201,37.92822753876741,0 -122.526199717555,37.9281472984745,0 -122.526675300938,37.9280681022209,0 -122.527098372161,37.9279706667558,0 contacts #khStyle84754 1 -122.51214521268,37.9212534791354,0 -122.512222538917,37.9214029886014,0 -122.512259663998,37.9214747693254,0 -122.51222561332,37.9216774166533,0 -122.512209933732,37.9218045784647,0 -122.512200066004,37.9218846057234,0 -122.51219970523,37.922046835281,0 -122.512357297771,37.922304355993,0 -122.512673589543,37.9225445098731,0 -122.512905854803,37.9226941858465,0 -122.513097824928,37.9228076428576,0 -122.513236907268,37.922853283952,0 -122.513704940503,37.92305350654381,0 -122.51392094263,37.9231895938785,0 -122.514170042203,37.9233753884254,0 -122.514294814823,37.9234344882905,0 -122.514463233102,37.92345321083601,0 -122.514594613642,37.9234807927968,0 -122.51482774496,37.9236079364799,0 -122.515043869197,37.9237259965926,0 -122.515285238736,37.9237900835645,0 -122.515782942385,37.923913811352,0 -122.516325303922,37.92416840721301,0 -122.516639657261,37.9242733499387,0 -122.516999288275,37.9244145295213,0 -122.517423663595,37.9245514678345,0 -122.51790638327,37.9246841378895,0 -122.518297661751,37.9247713665012,0 -122.518705591201,37.9248135979237,0 -122.518742229688,37.9248130693854,0 -122.518948830311,37.9248100887992,0 -122.519433651504,37.9248391136019,0 -122.519670725466,37.9248714092451,0 -122.519672389262,37.9248716358956,0 -122.51990600271,37.9249266688342,0 -122.520597483252,37.9251097523137,0 -122.521402380472,37.925460031812,0 -122.521710287912,37.9255739475809,0 -122.521915663528,37.9255973165237,0 -122.522143230719,37.9255982433813,0 -122.522610093221,37.9255460664634,0 -122.523092974478,37.9256561838628,0 -122.523409535556,37.9257521046909,0 -122.523455114678,37.92575475925191,0 -122.523659061655,37.9257666370529,0 -122.523817285642,37.92571320216161,0 -122.524075984693,37.9256286296437,0 -122.524192540863,37.92552996106161,0 -122.524434810059,37.9253461799073,0 -122.524573120539,37.9252926632888,0 -122.524868027599,37.9252172485339,0 -122.524967645775,37.9252086389819,0 -122.525239115459,37.9253494365594,0 -122.525309060634,37.9254145380834,0 -122.525399589334,37.9254987975085,0 -122.525850208815,37.9258201776179,0 -122.525939734425,37.925884026408,0 -122.526330132551,37.9261109238152,0 -122.526606123817,37.9263238392046,0 -122.526639334476,37.926468178586,0 -122.5266301937,37.9265627765136,0 -122.526441648269,37.9267244718486,0 -122.526363457325,37.9267915275935,0 -122.526380224784,37.9268446458617,0 -122.526396216781,37.9268953074415,0 -122.526637202123,37.9270224595055,0 -122.527186515469,37.9272004243949,0 -122.527361653425,37.9272822454636,0 -122.527425503798,37.9274176951753,0 -122.527410895223,37.9275888802468,0 -122.527388361247,37.9276297620006,0 -122.527343977518,37.9277102840265,0 -122.527201953797,37.9278989814522,0 -122.527098372161,37.9279706667558,0 contacts #khStyle84754 1 -122.48631198659,37.9206475520839,0 -122.486375982926,37.920647832155,0 -122.486672405298,37.9206626481977,0 -122.486909840243,37.9206726992269,0 -122.487003710697,37.9205694620029,0 -122.487190261376,37.9205342259013,0 -122.487589296434,37.9205179430158,0 -122.487699262017,37.9205544743711,0 -122.487902557576,37.920668021927,0 -122.48801383607,37.9205152892807,0 contacts #khStyle84754 1 -122.51214521268,37.9212534791354,0 -122.512016744752,37.9211087396744,0 -122.511813291918,37.92079695070211,0 -122.511590223822,37.9205481696158,0 -122.511461191656,37.9204890491592,0 -122.511318972211,37.9204884571051,0 -122.511060719437,37.9206135613013,0 -122.510761431045,37.9207069489499,0 -122.510632662344,37.9207154249681,0 -122.510489253308,37.9206858712443,0 -122.510476429643,37.9206832285349,0 -122.510327726489,37.9205879734462,0 -122.510220154127,37.9204027614354,0 -122.510131632357,37.9202401609297,0 contacts #khStyle84754 1 -122.48801383607,37.9205152892807,0 -122.488277345088,37.9203542075068,0 -122.488489711609,37.9202875369874,0 -122.48857479684,37.920220311537,0 -122.488626000454,37.9201168870837,0 -122.488702739829,37.920022586682,0 -122.488906385073,37.9199829159067,0 -122.489262721801,37.9199709478165,0 contacts #khStyle84754 1 -122.489262721801,37.9199709478165,0 -122.489431980558,37.92007082537771,0 -122.489588170768,37.9201615478407,0 -122.489643036928,37.9201934165289,0 -122.489719987825,37.9201712190332,0 -122.489778821141,37.9201386058328,0 -122.489961973183,37.920037078387,0 -122.490148490025,37.9200063438586,0 -122.490441541963,37.9199940972712,0 contacts #khStyle84754 1 -122.510131632357,37.9202401609297,0 -122.510084802895,37.92001013810061,0 -122.510112219604,37.9198435150252,0 contacts #khStyle84754 1 -122.510112219604,37.9198435150252,0 -122.510113105591,37.9198417193862,0 contacts #khStyle84754 1 -122.492249348994,37.9198577267319,0 -122.492511141553,37.9200481284685,0 -122.492638298376,37.9200667038827,0 -122.492769351136,37.9200357254225,0 -122.49287638234,37.9199821109456,0 -122.492913476199,37.91993454681671,0 -122.492995471192,37.9198294073062,0 -122.493072544478,37.9197891824798,0 contacts #khStyle84754 1 -122.494475053944,37.9208947972453,0 -122.493985059523,37.9204871082968,0 -122.493858457676,37.92038742125,0 -122.4936807211,37.9202785006493,0 -122.493401395293,37.920155622077,0 -122.493172834048,37.920096051891,0 -122.493063175775,37.920014462814,0 -122.493045956095,37.9199332729497,0 -122.493052998776,37.9198951065972,0 -122.493072544478,37.9197891824798,0 contacts #khStyle84754 1 -122.490441541963,37.9199940972712,0 -122.490524881919,37.9199753699299,0 -122.49059893596,37.9199587291711,0 -122.490683925637,37.9199050210225,0 -122.49069002892,37.91989641592781,0 -122.490734908488,37.9198331395962,0 -122.490803578307,37.9196712065623,0 -122.490892958159,37.9195994916417,0 contacts #khStyle84754 1 -122.490892958159,37.9195994916417,0 -122.491050692794,37.9195145538339,0 -122.491084849999,37.91951014876921,0 -122.49111830561,37.919505834175,0 -122.491355302906,37.9195789641624,0 -122.491516434358,37.9196202201029,0 -122.491855796571,37.919594651368,0 -122.492041875495,37.919730649335,0 -122.492249348994,37.9198577267319,0 contacts #khStyle84754 1 -122.510113105591,37.9198417193862,0 -122.510225385394,37.9196141599112,0 -122.510331134582,37.9195379920019,0 -122.510348903457,37.9195346163527,0 -122.510679304581,37.9194718477208,0 -122.510897763007,37.9193420720817,0 -122.51104881681,37.9191894831569,0 -122.511131785016,37.9190095719491,0 -122.511096151438,37.9188066346154,0 -122.511067426728,37.9187458848817,0 -122.51100007633,37.9186034454719,0 -122.510749434827,37.9183320157641,0 -122.510701684478,37.9181335342087,0 -122.510702227594,37.9179442667981,0 -122.510813046396,37.9177464461851,0 -122.510971148081,37.9176028995187,0 -122.511154047033,37.917472975175,0 -122.51134609975,37.91735660791431,0 -122.5114381852,37.9173029141827,0 contacts #khStyle84754 1 -122.494475053944,37.9208947972453,0 -122.49453067344,37.9209761522755,0 -122.494829666156,37.9212165416583,0 -122.494885690568,37.921261584883,0 -122.495071715454,37.9213029430827,0 -122.495402736182,37.9212502897555,0 -122.495606627636,37.9211745571309,0 -122.495709019508,37.9210713495817,0 -122.495760583038,37.9209138465918,0 -122.495819971451,37.9208600247452,0 -122.496041238353,37.920842949403,0 -122.49659311469,37.9206245034819,0 -122.496865265976,37.9205490614304,0 -122.49695844693,37.9205449544403,0 -122.497093770311,37.9206176370321,0 -122.497303389547,37.9208900176929,0 -122.497312980611,37.9209024803294,0 -122.497487573126,37.92105644613141,0 -122.497693453764,37.9212105455861,0 -122.497854065249,37.9212247521276,0 -122.497964803127,37.9211486168142,0 -122.498008356234,37.9210181170636,0 -122.497975198762,37.9207701223822,0 -122.497972229451,37.92073195031061,0 -122.497951003329,37.920459076197,0 -122.497960087699,37.9203779995711,0 -122.498112961002,37.9202750058429,0 -122.498325471663,37.9201857860997,0 -122.498375828054,37.92010037943291,0 -122.498369567694,37.9198705254465,0 -122.498412102117,37.9197850853268,0 -122.498578300125,37.91970918642711,0 -122.498646463417,37.9196868383973,0 -122.498931071252,37.9195935262435,0 -122.499275430788,37.9194598034448,0 -122.499357072331,37.9194250264804,0 -122.49944301875,37.919388415665,0 -122.499585069344,37.9193079059275,0 -122.499782307414,37.9192681889996,0 -122.499966969025,37.9193005208287,0 -122.500137135063,37.9193733483819,0 -122.500295152422,37.919455136796,0 -122.500476015057,37.9195715598672,0 -122.500753228078,37.9197500033818,0 -122.500905741181,37.9198047290583,0 -122.501077107573,37.9198054576883,0 -122.501131241433,37.91979216852931,0 -122.501246894515,37.9197250637579,0 -122.501376697126,37.9195633842264,0 -122.501477435927,37.9193880618597,0 -122.501510101561,37.919293635698,0 -122.501541258727,37.9192035698046,0 -122.501582387415,37.9190099685115,0 -122.501638387735,37.9188254431729,0 -122.501758263199,37.9186592146178,0 -122.5019383365,37.9185292927187,0 -122.502143855993,37.9184220105575,0 -122.502377538614,37.9183962578725,0 -122.502380115566,37.9183959738803,0 -122.502617311455,37.918442043385,0 -122.502829286189,37.9185375761883,0 -122.503183066394,37.9188004463651,0 -122.503602297301,37.91927088751,0 -122.503858907048,37.9194972933319,0 -122.503988234046,37.9195113591643,0 -122.504245178526,37.9194763933347,0 -122.504485041172,37.91933770722,0 -122.504620628396,37.919135534536,0 -122.504623671392,37.9191309971425,0 -122.504715945253,37.9190502710078,0 -122.504936985168,37.9189610751278,0 -122.505093588019,37.9188310493903,0 -122.505246890073,37.9185568041267,0 -122.505285845276,37.9183676987254,0 -122.505281424738,37.9181784104958,0 -122.505240739518,37.91798896940841,0 -122.505087296295,37.91775398873701,0 -122.504940648576,37.9176722547821,0 -122.504867134517,37.9175007007706,0 -122.504803785477,37.9170858429308,0 -122.504611404001,37.916931812902,0 -122.504409794321,37.9166695895188,0 contacts #khStyle84754 1 -122.5114381852,37.9173029141827,0 -122.511624608115,37.917177510183,0 -122.511660433795,37.9170289473187,0 -122.511660978601,37.9167315257328,0 -122.511584635388,37.9165554576244,0 -122.511449836729,37.9164016782868,0 contacts #khStyle84754 1 -122.48631198659,37.9206475520839,0 -122.486298478213,37.9206458175893,0 -122.486057642988,37.9206148937353,0 -122.485981318051,37.92054696327391,0 -122.485880733474,37.9203887981979,0 -122.48572855539,37.9201853428291,0 -122.485668533265,37.9201237839085,0 -122.485446139131,37.9198956944733,0 -122.485192407224,37.91967376748011,0 -122.48485390365,37.919473999979,0 -122.48459153543,37.9193692005863,0 -122.484507474007,37.9193585113027,0 -122.484481415863,37.9193551977261,0 -122.484057279088,37.9194029046543,0 -122.484023236585,37.9194027550062,0 -122.48398901751,37.9194026045719,0 -122.483945294038,37.9193587813314,0 -122.483794831375,37.919207974818,0 -122.483727627667,37.9191581086611,0 -122.483655549266,37.9191638991065,0 -122.483514895918,37.9191751984162,0 -122.483430532513,37.9191387758271,0 -122.483304294326,37.918989508444,0 -122.483084039957,37.9188623589897,0 -122.483042134073,37.9187540204383,0 -122.483043757377,37.9187433595627,0 -122.483059277068,37.9186414355344,0 -122.483030107127,37.9185421658992,0 -122.482868444612,37.9183747163378,0 -122.482455119498,37.9180980031447,0 -122.482311677933,37.9180703320697,0 -122.482073999231,37.9180963220262,0 -122.482030980077,37.91809613219151,0 -122.481938189591,37.9180957226727,0 -122.481777098629,37.9180499473778,0 -122.481566219869,37.91790481079521,0 -122.481481147853,37.91786838367341,0 -122.481379658635,37.9178408967853,0 -122.481268735975,37.9178404066203,0 -122.48118418523,37.9178310200884,0 -122.481142740417,37.9177587342184,0 -122.481142726083,37.9176595929828,0 -122.481147729419,37.917617024902,0 -122.481169195856,37.9174343891375,0 -122.48114461184,37.9172900751165,0 -122.481078376098,37.9172041603747,0 -122.480992594099,37.9171677297576,0 -122.480864843357,37.917234761061,0 -122.480780198291,37.9172388930733,0 -122.480729288882,37.9171981101043,0 -122.480730081212,37.9170854531764,0 -122.480713491777,37.9170177835223,0 -122.48062854801,37.9169633306777,0 -122.480526775015,37.9169763995529,0 -122.4803824801,37.9170703956176,0 -122.480297648076,37.9171148773896,0 -122.480237600674,37.9171463632459,0 -122.480135986008,37.9171369003971,0 -122.480025762632,37.9170372709777,0 -122.479966264113,37.9168026736766,0 -122.479925817781,37.9166898340325,0 -122.479798816372,37.9165495722925,0 -122.479639762738,37.9164058612036,0 -122.479638428859,37.9164046559894,0 -122.479611143397,37.9163414451722,0 -122.479598840805,37.9161701467461,0 contacts #khStyle84754 1 -122.511449836729,37.9164016782868,0 -122.511247100523,37.9163061994187,0 -122.511015803238,37.9162286269138,0 -122.510745667104,37.9161103342752,0 -122.510582518458,37.9159429165079,0 -122.510489794552,37.91577128580411,0 contacts #khStyle84754 1 -122.504409794321,37.9166695895188,0 -122.504351713502,37.9163178435188,0 -122.504254827824,37.9159208693893,0 -122.504302044464,37.9157723569099,0 -122.504440003108,37.9156647853135,0 -122.504688552532,37.9156072508793,0 -122.504872623733,37.9156215467009,0 -122.504889111919,37.915624803027,0 -122.505152414972,37.9156768035837,0 contacts #khStyle84754 1 -122.505152414972,37.9156768035837,0 -122.50546154079,37.9157051448675,0 -122.505711360864,37.9156701457294,0 -122.505959120353,37.9155179704336,0 -122.506284545654,37.9152354350689,0 -122.506497984969,37.9148983509612,0 contacts #khStyle84754 1 -122.506497984969,37.9148983509612,0 -122.506543714133,37.9147588441216,0 -122.506514404096,37.9145694511748,0 -122.50647178175,37.9144843214255,0 -122.506392309672,37.9143255910233,0 contacts #khStyle84754 1 -122.506392309672,37.9143255910233,0 -122.506321308251,37.9142036190347,0 -122.506274132746,37.9140276701455,0 -122.506274205014,37.9139105034612,0 contacts #khStyle84754 1 -122.479598840805,37.9161701467461,0 -122.479591293106,37.9160304143225,0 -122.479629353338,37.9156745760215,0 -122.479581531565,37.9154986136814,0 -122.479472105584,37.9152863267886,0 -122.479292023565,37.9150106364994,0 -122.47908192141,37.9147573447932,0 -122.478893543983,37.9145492133456,0 -122.478886486144,37.9144410279496,0 -122.478933560368,37.914319563611,0 -122.478918999416,37.9141662807094,0 -122.478857905127,37.9140578554047,0 -122.478703987529,37.9139039536604,0 contacts #khStyle84754 1 -122.510489794552,37.91577128580411,0 -122.510442309405,37.9156404015135,0 -122.510407193141,37.9152527026939,0 -122.510431942311,37.9150590297318,0 -122.510456183501,37.9149419638326,0 -122.510549005668,37.9147671970418,0 -122.510599473087,37.9146721759418,0 -122.510576104058,37.9145504050745,0 -122.510457216914,37.9144642872704,0 -122.510266837715,37.9144364546012,0 -122.510195829776,37.9143144848928,0 -122.510089150661,37.9142103919628,0 -122.509970766354,37.9141558207317,0 -122.50944716696,37.91430234571961,0 -122.509247900201,37.914443639131,0 -122.509244985054,37.9144457061584,0 -122.508983404572,37.9145392471391,0 -122.508661714783,37.9145829652948,0 -122.50835330337,37.9145546354202,0 -122.50800860865,37.9144225049465,0 -122.507795396991,37.9142999377063,0 -122.507474569619,37.9140011681017,0 -122.507282683111,37.9137376875916,0 -122.507273758837,37.9137254335651,0 contacts #khStyle84754 1 -122.506274205014,37.9139105034612,0 -122.506381932509,37.9138568794402,0 -122.506571838524,37.9138486650102,0 -122.506594681454,37.9138401278441,0 -122.506702999683,37.9137996456162,0 -122.506863044524,37.9136600511441,0 -122.506893247604,37.9136337072981,0 -122.50702434801,37.9135937001324,0 -122.507273758837,37.9137254335651,0 contacts #khStyle84754 1 -122.476345212744,37.9100359578609,0 -122.476563606088,37.90961783464,0 -122.476800386073,37.909213312207,0 contacts #khStyle84754 1 -122.518641555873,37.9031103859947,0 -122.518708794397,37.9030475715808,0 -122.518879417689,37.9030482709501,0 -122.519133181878,37.9031570836886,0 -122.5191977456,37.9031847681322,0 -122.519525295041,37.9034339630667,0 -122.51973612024,37.9034843965094,0 -122.520178564259,37.9035583086451,0 -122.520400882266,37.9035907621331,0 -122.520836101329,37.9036826680256,0 -122.521056257984,37.9037196178915,0 -122.521958291407,37.9037458266686,0 -122.522066149102,37.9037420917238,0 -122.522424071968,37.9037296966983,0 -122.522629142237,37.9036809599792,0 -122.522844905392,37.9036277599277,0 -122.523259571904,37.90348974511521,0 -122.523454949511,37.9034004096641,0 -122.523633409538,37.9032884730575,0 -122.523795575684,37.9031674572093,0 -122.523947875384,37.9030328818144,0 -122.524428086297,37.9024309656283,0 -122.524753296551,37.902161896378,0 contacts #khStyle84754 1 -122.52701554934,37.9020448524858,0 -122.526769549008,37.902269182987,0 -122.526699070105,37.902395079114,0 -122.526572903451,37.9028902784967,0 -122.526439521434,37.9032908134136,0 -122.526321876696,37.90356523142101,0 -122.526220680965,37.9037135354602,0 -122.526044720587,37.9038795633235,0 -122.525874054152,37.90399604149891,0 -122.525690677039,37.9040989487583,0 -122.525495982235,37.9041927971098,0 -122.525206252291,37.9042502093164,0 -122.524909876181,37.904235490939,0 -122.524808777418,37.9042576139242,0 -122.524761449335,37.9043205124346,0 -122.524783318824,37.9050100855744,0 -122.524735947361,37.9051901511976,0 -122.524602521313,37.9053743747647,0 -122.524383626963,37.9055335439883,0 -122.52433750987,37.9055670779328,0 -122.52403340937,37.9056469611501,0 -122.523807209199,37.9056640695259,0 -122.523526730379,37.9056088542212,0 -122.523440909045,37.9055677518934,0 -122.523355913508,37.9055270449577,0 -122.523223068428,37.9054003253303,0 -122.523137986741,37.9053639282713,0 -122.523004876504,37.9054985805081,0 -122.522965902942,37.9055885508231,0 -122.522950252078,37.905777918825,0 -122.522933510819,37.905980478941,0 -122.522847916993,37.9061333498078,0 -122.522738021463,37.9061959931375,0 -122.522605666215,37.9062134806924,0 -122.522411299889,37.9061450935935,0 -122.522317616383,37.9060095194103,0 -122.522287779803,37.905675921903,0 -122.522272302125,37.905540665901,0 -122.522218374725,37.9054142662791,0 -122.522077955802,37.9053596174863,0 -122.521828732203,37.9053090318194,0 -122.521587464832,37.9051277914647,0 -122.521549063038,37.9050194805415,0 -122.521658488232,37.9046999696348,0 -122.521604620847,37.9045645570972,0 -122.521589807641,37.9045533965636,0 -122.521472316295,37.904464876306,0 -122.521067779253,37.9043550721907,0 -122.520942565585,37.9043680805959,0 -122.520743423052,37.9044889415047,0 -122.520598194757,37.90462804798861,0 -122.520478472252,37.9047807777757,0 -122.520343166902,37.9049244308986,0 -122.520186620337,37.9050544777434,0 -122.520105101574,37.9051085043924,0 -122.519997398756,37.905179884343,0 -122.519779437627,37.9052420830042,0 -122.519592545288,37.9052277990387,0 -122.519389799564,37.9051368405074,0 -122.519304324527,37.9049427139056,0 -122.519304757199,37.9047669647681,0 -122.519477135804,37.9043891300358,0 -122.519493267387,37.9042044322682,0 -122.519408005689,37.9040869159696,0 -122.519218558792,37.9039194022015,0 -122.519042979435,37.9038060221535,0 -122.518863223045,37.9036791054222,0 -122.518676768966,37.9034890708749,0 -122.518568071816,37.9032587970147,0 -122.518641555873,37.9031103859947,0 contacts #khStyle84754 1 -122.524753296551,37.902161896378,0 -122.524971634646,37.9019284453115,0 -122.525128237353,37.9016767183689,0 contacts #khStyle84754 1 -122.525128237353,37.9016767183689,0 -122.525215198232,37.9014202031354,0 -122.525360713921,37.9011233666311,0 -122.525435401434,37.90100650117271,0 -122.525658015929,37.9008812205719,0 -122.525784512321,37.9007780835193,0 -122.525917522201,37.9006569468753,0 -122.526030836857,37.9004638820925,0 -122.526118062298,37.9003152671719,0 contacts #khStyle84754 1 -122.501800016254,37.9002416338994,0 -122.501528779208,37.9004027142442,0 -122.501339546257,37.9005367323642,0 -122.501180896157,37.9006490905538,0 -122.501022875415,37.9007836119508,0 -122.500937271404,37.9008696206456,0 -122.500799558622,37.9010079838895,0 -122.500603223607,37.9012369766347,0 -122.500309130208,37.9015196300484,0 -122.500220827816,37.9015417862248,0 -122.500044741239,37.9015094912666,0 -122.49989465261,37.9015223711301,0 -122.499653356772,37.9015664070326,0 -122.499526168982,37.9015568518981,0 -122.498989769081,37.9012976968664,0 -122.498891666993,37.9012972780611,0 -122.498692535228,37.901413594897,0 -122.498550396121,37.9015121291801,0 -122.498136643215,37.9017221629649,0 -122.497989985816,37.9017530807912,0 -122.497823944078,37.9017073061841,0 -122.497815296095,37.90169413625151,0 -122.497755692437,37.9016033662472,0 -122.497795771406,37.9014593319704,0 -122.497806084943,37.90130165103041,0 -122.497786854036,37.901202427271,0 -122.497604696116,37.9003904901207,0 -122.497595871423,37.9001200664629,0 -122.497645191196,37.8999760717551,0 -122.497733890672,37.8998953355916,0 -122.497961539234,37.8998028608584,0 -122.497988283701,37.8997919967547,0 -122.498008341393,37.8997838489383,0 contacts #khStyle84754 1 -122.501800016254,37.9002416338994,0 -122.501918785355,37.9001294769897,0 -122.501945216023,37.8998997610726,0 -122.501997870905,37.899787323609,0 -122.502103071212,37.8996841218131,0 -122.502125162019,37.8996859035302,0 -122.502338967384,37.8997031476196,0 -122.502522924804,37.8996228113901,0 -122.502603771717,37.8995465445493,0 -122.502770771629,37.8993405957058,0 -122.50278585524,37.8993219941158,0 -122.5029826376,37.899237205031,0 -122.503048589766,37.8992374841866,0 -122.503335950986,37.89923870006881,0 -122.503585080566,37.8992983372483,0 contacts #khStyle84754 1 -122.527271884819,37.9019827948484,0 -122.527649172178,37.9017950431012,0 -122.527732272571,37.9016962357883,0 -122.527766837929,37.9015161172923,0 -122.527807965023,37.9014216475094,0 -122.528055208491,37.901224358408,0 -122.528185314283,37.9011122204,0 -122.528254453922,37.9009727986379,0 -122.52828986883,37.9004366746511,0 -122.528372802488,37.90025224382571,0 -122.528509727532,37.9001851972242,0 -122.528550824166,37.9000952334697,0 -122.528544922883,37.89990593928871,0 -122.528703296879,37.8997082918202,0 -122.528943365771,37.8995199848347,0 -122.52917869392,37.8991829457881,0 contacts #khStyle84754 1 -122.52917869392,37.8991829457881,0 -122.529218394803,37.89911594483691,0 -122.529239583944,37.8990801850578,0 -122.529333201205,37.8989221917494,0 -122.529483406816,37.8987785877251,0 -122.529681579394,37.8986937594129,0 -122.529904884775,37.8986811344678,0 -122.530124973969,37.8987270799662,0 -122.530338579489,37.8987865184406,0 -122.530618020936,37.898935149832,0 -122.530688585889,37.8989726822448,0 -122.530870173779,37.899036498201,0 -122.530925374058,37.8990332895211,0 -122.530942713484,37.8990322816101,0 -122.531071074652,37.8989697042177,0 -122.531149272825,37.8989700165424,0 -122.531421823253,37.8991513623721,0 contacts #khStyle84754 1 -122.526118062298,37.9003152671719,0 -122.526127125095,37.9001215268693,0 -122.526093616279,37.9000463419793,0 -122.52606475084,37.8999815754662,0 -122.525709151059,37.8997818560638,0 -122.525631530749,37.8996914136682,0 -122.525571261544,37.8995559769448,0 -122.525536816329,37.8993845930392,0 -122.52546886517,37.8987849619026,0 -122.525348891877,37.89831580713471,0 contacts #khStyle84754 1 -122.467424191347,37.8990271802639,0 -122.467412208088,37.8989144651373,0 -122.467036506812,37.8984711298151,0 -122.466919187959,37.8983759620708,0 -122.466471143423,37.8980089056994,0 -122.466251311786,37.897921028385,0 contacts #khStyle84754 1 -122.466251311786,37.897921028385,0 -122.466208878105,37.8979040655234,0 -122.466048134403,37.8978177123003,0 -122.465819958417,37.8977175327369,0 -122.465676015131,37.897667306902,0 -122.465506768612,37.8976755492927,0 contacts #khStyle84754 1 -122.461842721772,37.8973163207832,0 -122.462414283193,37.8975082096643,0 -122.462875512669,37.8976229816732,0 -122.463145470078,37.8976467486927,0 -122.463493335292,37.8976122875674,0 -122.463755604422,37.8976179923258,0 -122.463982780609,37.8976595877192,0 -122.464139166642,37.8976603016788,0 -122.464388934836,37.8976253900817,0 -122.464614820359,37.8976489526419,0 -122.465062033102,37.8977366135714,0 -122.465295868978,37.8977421853284,0 -122.465506768612,37.8976755492927,0 contacts #khStyle84754 1 -122.535256565451,37.8966520102719,0 -122.535472004359,37.8967587643692,0 -122.535599862134,37.896775042766,0 -122.535714439927,37.8967552169486,0 contacts #khStyle84754 1 -122.516086613982,37.8978679103084,0 -122.515867876322,37.8981599270206,0 -122.51571373894,37.8984657290949,0 -122.515541619445,37.8986948473159,0 -122.515560549328,37.8988436378493,0 -122.51561712697,37.8989970901401,0 -122.515559014768,37.8991861207255,0 -122.515549154468,37.8993888696932,0 -122.515674280317,37.8996175117023,0 -122.515682629426,37.899632767943,0 -122.515682601857,37.8997454287409,0 -122.515614832042,37.8998893551255,0 -122.515356097089,37.900100089874,0 -122.515126951312,37.9002433497048,0 -122.514993301539,37.9002427976718,0 -122.514888087089,37.9001342085223,0 -122.514841432399,37.8998771488904,0 -122.514688676772,37.8996466893208,0 -122.5146331371,37.8994436700994,0 -122.514584647822,37.8993578473429,0 -122.514451651149,37.8992581558023,0 -122.514237850224,37.8990139238552,0 -122.513765228702,37.8986694783288,0 -122.513650806411,37.8985563434943,0 -122.513642010801,37.898380556025,0 -122.513680429184,37.898268054239,0 -122.513861883145,37.898133612576,0 -122.514072452949,37.8980037975692,0 -122.514273632461,37.8978964755194,0 -122.514477717573,37.8978367506613,0 -122.51460768664,37.8977987153918,0 -122.514722611766,37.8977270874483,0 -122.514847162721,37.8975969154742,0 -122.514912916888,37.89747026031431,0 -122.51492420285,37.8974485213341,0 -122.514981367753,37.8972955385989,0 -122.515086705725,37.8968430766449,0 -122.515185867622,37.8964649452944,0 contacts #khStyle84754 1 -122.488765818602,37.9000233547092,0 -122.488627795726,37.9000700121623,0 -122.488542074715,37.9000989893052,0 -122.488394088532,37.9001163700996,0 -122.488133878125,37.9001197420724,0 -122.487849584167,37.900213137006,0 -122.487534901422,37.9003830079001,0 -122.487246027696,37.9005214456803,0 -122.487054426641,37.9005746856955,0 -122.486880847614,37.9005919527395,0 -122.486646195737,37.9005999395788,0 -122.486411951054,37.900549344136,0 -122.486394993658,37.9004321027439,0 -122.486413172769,37.9003735986904,0 -122.486639866365,37.9001808138499,0 -122.486891743269,37.9000467222569,0 -122.487066438587,37.8999708764697,0 -122.487348349824,37.8999135244656,0 -122.487534847831,37.8998782874086,0 -122.487716463313,37.899829509453,0 -122.487831194413,37.8997894522516,0 -122.487987405592,37.89971352443661,0 -122.488151380713,37.8995429952117,0 -122.488223435002,37.89940361002421,0 -122.488311759111,37.8990705191546,0 -122.488370406723,37.8988139081908,0 -122.488389207911,37.8986652778849,0 -122.488391799538,37.8985646786811,0 -122.48839698533,37.8983633808286,0 -122.488459816972,37.89791301142451,0 -122.488537555842,37.8977736507774,0 -122.488664630005,37.8974902991532,0 -122.488794216039,37.8970492331527,0 -122.488812320625,37.8968983464825,0 -122.488781377201,37.8967472461955,0 -122.488669164477,37.8966295901449,0 -122.488499265112,37.896527455135,0 -122.488421650165,37.89644374786071,0 contacts #khStyle84754 1 -122.531421823253,37.8991513623721,0 -122.531761853023,37.8993419896154,0 -122.53206119475,37.8994468313162,0 -122.532361419368,37.8995246371256,0 -122.532580944288,37.8995480435893,0 -122.532881654229,37.8995492404994,0 -122.532981407864,37.8995135858435,0 -122.532956328301,37.8994323701187,0 -122.532652151593,37.8993049792315,0 -122.532591925006,37.8992731943653,0 -122.532556836402,37.8992009515874,0 -122.532567758271,37.8990477760498,0 -122.532392909143,37.8989299122428,0 -122.532138155415,37.898856794182,0 -122.532078243349,37.8987754394445,0 -122.532038210444,37.8985860093071,0 -122.531918983788,37.8984413278462,0 -122.531789348286,37.8983687078279,0 -122.53168865943,37.8983277482366,0 -122.531474832524,37.8980790407473,0 -122.531339996948,37.8979297899604,0 -122.531145161953,37.8978253638422,0 -122.530705474461,37.8976568686956,0 -122.530695211978,37.8975937374769,0 -122.530840889453,37.897490671545,0 -122.530916046629,37.8974098558957,0 -122.530906589411,37.8971078864364,0 -122.530992537947,37.8970068348546,0 -122.531232349223,37.8968568267817,0 -122.531713159009,37.89670552651871,0 -122.532049529333,37.8966865887377,0 -122.532272585831,37.8967122630449,0 -122.532484026192,37.8967761954445,0 -122.532565297184,37.8968270054148,0 -122.532661756659,37.89688731094,0 -122.532793081409,37.8970297866062,0 -122.532862034814,37.8971427220819,0 -122.533026728875,37.8972920899231,0 -122.533251279687,37.8974191633055,0 -122.533402252067,37.8974926501823,0 -122.533633987538,37.8976054484075,0 -122.533856655131,37.8977042443409,0 -122.534105415431,37.897814616604,0 -122.534370830808,37.8978877726995,0 -122.534630244097,37.89788272280261,0 -122.534755474963,37.8978802847775,0 -122.535166391229,37.8977647449767,0 -122.53539133897,37.8976034034591,0 -122.535411838644,37.8975088492627,0 -122.535346976231,37.8974229701236,0 -122.535161720565,37.8973771723098,0 -122.535056936031,37.8973091607091,0 -122.534972651821,37.8971465948943,0 -122.534867768499,37.89709435528821,0 -122.534502790495,37.89702756525,0 -122.534337639617,37.89695030075,0 -122.534016210008,37.8966290678369,0 -122.533718952608,37.8964205911583,0 -122.533604389277,37.8963255007614,0 -122.533569116434,37.8961698882965,0 -122.533664642639,37.89612745655511,0 -122.533949884438,37.8960992973373,0 -122.534186275859,37.8961520596186,0 -122.534394119388,37.8962227339894,0 -122.534594072819,37.8963046428281,0 -122.534786861271,37.8963955358255,0 -122.53501053962,37.8965176722603,0 -122.535256565451,37.8966520102719,0 contacts #khStyle84754 1 -122.498008341393,37.8997838489383,0 -122.498328753007,37.8997086095547,0 -122.498366401179,37.8996983721264,0 -122.498508228492,37.8996598057912,0 -122.498860903196,37.8995441449153,0 -122.499019296337,37.8994591988958,0 -122.499158617904,37.8993561455521,0 -122.499266102843,37.8992304240601,0 -122.499342401015,37.8990910501423,0 -122.499388192885,37.8989425331935,0 -122.499397730678,37.898793861599,0 -122.499349352996,37.8986945137316,0 -122.499344378593,37.898685985802,0 -122.499127998008,37.8983150289589,0 -122.499002290573,37.89819281875,0 -122.498604716569,37.8979072157388,0 -122.498469830809,37.8977759528785,0 -122.4982759073,37.8975452959716,0 -122.498198754404,37.8973917474007,0 -122.498200879907,37.8972881085131,0 -122.498226769269,37.8971395068805,0 -122.498325752983,37.89700924342021,0 -122.498413372093,37.8969310815222,0 -122.498579646447,37.8967827534303,0 -122.498663701417,37.8966524258989,0 -122.498601338641,37.89651921969621,0 -122.498485044208,37.8963722637229,0 -122.498175365334,37.8961253394114,0 -122.498098251623,37.8960709324698,0 contacts #khStyle84754 1 -122.487671085532,37.8953331562393,0 -122.487755430599,37.8953367659678,0 -122.488111616801,37.8953293069665,0 -122.488289089222,37.8953638790499,0 -122.488362781139,37.8953979985457,0 -122.488444659893,37.8954817244551,0 -122.48852631393,37.8957006423592,0 -122.488621418311,37.89582498368,0 -122.488646783527,37.8959602872115,0 -122.488594558849,37.8961110252271,0 -122.48844641804,37.8962545855847,0 -122.488421650165,37.89644374786071,0 contacts #khStyle84754 1 -122.498098251623,37.8960709324698,0 -122.497797647698,37.8958488313516,0 -122.497681248718,37.8957176466447,0 -122.497623848989,37.8955867143632,0 -122.497691249159,37.8953115104683,0 -122.497693307434,37.895303106226,0 -122.497790760748,37.8951886091473,0 -122.497917005485,37.8951260591568,0 -122.498311727485,37.89509620194791,0 contacts #khStyle84754 1 -122.503585080566,37.8992983372483,0 -122.504200396549,37.899454155843,0 -122.504357504195,37.8994548191484,0 -122.504724899592,37.8993707472322,0 -122.504947469668,37.899362672997,0 -122.505406525917,37.8993916462202,0 -122.505563754077,37.8993742826882,0 -122.505865305926,37.8992493720089,0 -122.505642430016,37.8990907086425,0 -122.505601131644,37.8990251897665,0 -122.505525658526,37.8989054531417,0 -122.505499820888,37.898729593399,0 -122.505277430057,37.8984988284346,0 -122.505265371472,37.8982824687785,0 -122.505173650729,37.8981784342838,0 -122.505016317874,37.89810566818061,0 -122.504913039743,37.8978168209424,0 -122.504784640153,37.8975639191334,0 -122.504403517296,37.8971522255366,0 -122.504207573197,37.8970071924184,0 -122.504089326322,37.8968309421018,0 -122.504089809985,37.8966529399528,0 -122.504169396268,37.89644598002191,0 -122.50417013673,37.8962296742413,0 -122.503934311636,37.8959898370982,0 -122.503896046216,37.8958657484483,0 -122.503870062266,37.8956065185968,0 -122.503779133274,37.8954912202492,0 -122.503765884457,37.8953469583025,0 -122.503793018175,37.8952231459709,0 -122.503936368605,37.8949420993786,0 contacts #khStyle84754 1 -122.515185867622,37.8964649452944,0 -122.515196870619,37.8964131666802,0 -122.515232071233,37.89624882699891,0 -122.51531245211,37.8958075278026,0 -122.515329123981,37.8955417166954,0 -122.515364292739,37.8952737287012,0 -122.515399714045,37.8950755915447,0 -122.515486984761,37.894992582558,0 -122.515771038268,37.8949342428981,0 -122.515932888536,37.8949010013133,0 contacts #khStyle84754 1 -122.487011889789,37.8948593598669,0 -122.487083248374,37.89501271526671,0 -122.487098496871,37.8950454854396,0 -122.487200057952,37.895160843263,0 -122.48739121459,37.8952720858711,0 -122.487520920576,37.8953267294566,0 -122.487671085532,37.8953331562393,0 contacts #khStyle84754 1 -122.488765818602,37.9000233547092,0 -122.488933901994,37.8998753744514,0 -122.489125287572,37.8997500275293,0 -122.489246945185,37.8996333897608,0 -122.489352252484,37.8995166807326,0 -122.489369069569,37.8994491574221,0 -122.489380790976,37.8994203523181,0 -122.48942764618,37.8993052064274,0 -122.489512462222,37.8991703823855,0 -122.489635539981,37.8990537503786,0 -122.489784052751,37.8989597609646,0 -122.490102958303,37.8987944087807,0 -122.490368692764,37.8986406863799,0 -122.490520489057,37.8985528745105,0 -122.490542929552,37.89849438829321,0 -122.490529302779,37.8984087069322,0 -122.490460633327,37.8982642030141,0 -122.490376486354,37.8981199072032,0 -122.490365786904,37.8981015596677,0 -122.490258052312,37.8979523795688,0 -122.490132733476,37.8977760843888,0 -122.490115988403,37.89762729936341,0 -122.490142200827,37.8975372845674,0 -122.490233535458,37.8973844625442,0 -122.490328268517,37.8972541873687,0 -122.490551049999,37.8970073006833,0 -122.490609963085,37.8969298916093,0 -122.490747606544,37.8967490337027,0 -122.490760415343,37.8966712858369,0 -122.490772089064,37.8966004276073,0 -122.490746692121,37.89636598286,0 -122.490816869762,37.896188283169,0 -122.491034900268,37.8960112246394,0 -122.491487752058,37.8957991317805,0 -122.491722221853,37.8956086238784,0 -122.491941547944,37.8953459469968,0 -122.492098426835,37.8951708749754,0 -122.492150364946,37.8950606920487,0 -122.492168601471,37.89488952641591,0 -122.492151403831,37.8948060829568,0 -122.49209965477,37.8946819320731,0 contacts #khStyle84754 1 -122.515932888536,37.8949010013133,0 -122.515981706244,37.89489097484851,0 -122.516250821196,37.8948289937387,0 -122.516441385132,37.8947126112504,0 -122.516475263234,37.8946488245056,0 contacts #khStyle84754 1 -122.535428827027,37.8949199638381,0 -122.535846812412,37.8950342782443,0 -122.536081978164,37.8950554867503,0 -122.536308129158,37.8950406076134,0 -122.536541699519,37.8949761864218,0 -122.536698040671,37.8948709020034,0 -122.537075587572,37.89451863524241,0 -122.537237675562,37.8945170210289,0 -122.537305381074,37.8946029103723,0 -122.537196603142,37.894832310397,0 -122.537069111369,37.8949850269302,0 -122.53693258047,37.8952188236985,0 -122.536898238189,37.8953674009595,0 -122.53692480379,37.8955522700344,0 -122.537019324944,37.8956698104199,0 -122.537133863462,37.8957694038682,0 -122.537207671398,37.8959026349946,0 -122.537200709132,37.8959927364635,0 -122.537119379287,37.8961523946453,0 -122.537111965199,37.8963145974501,0 -122.537259652877,37.8965697938321,0 -122.537239824368,37.8966711106914,0 -122.537144812746,37.8967450924812,0 -122.537010217976,37.8967828665327,0 -122.536821027137,37.896797892816,0 -122.536679125582,37.89686718277331,0 -122.536638709115,37.8969639118234,0 -122.536685550902,37.8972029382639,0 -122.536632280039,37.8972545745273,0 -122.536597576154,37.89728821348171,0 -122.536462707444,37.8972561359269,0 -122.536300454048,37.8971698727229,0 -122.536105341617,37.8969956037902,0 -122.535889798792,37.8967919618777,0 -122.53580892924,37.89676460348251,0 -122.535714439927,37.8967552169486,0 contacts #khStyle84754 1 -122.498311727485,37.89509620194791,0 -122.498618062369,37.8951020173647,0 -122.498787315077,37.895091474158,0 -122.499021344424,37.8950676879061,0 -122.499256557713,37.8949740564888,0 -122.499380323864,37.8948574171227,0 -122.499538383178,37.8946102372133,0 -122.499539082351,37.8942970428933,0 -122.499449043897,37.8941569594225,0 contacts #khStyle84754 1 -122.485834127376,37.893711386939,0 -122.485869461105,37.8937152166743,0 -122.485982197791,37.8937562683315,0 -122.486042653651,37.8938534214229,0 -122.486120347255,37.8940272593519,0 -122.486232473628,37.8941561835867,0 -122.486465852352,37.8943284493855,0 -122.486526465876,37.8944030707338,0 -122.486529377468,37.8944360105025,0 -122.486535033292,37.8944999965677,0 -122.486645783238,37.8946177227966,0 -122.486664868972,37.8946380107178,0 -122.4868981965,37.8947156402897,0 -122.486982931749,37.8947971264922,0 -122.487011889789,37.8948593598669,0 contacts #khStyle84754 1 -122.525348891877,37.89831580713471,0 -122.524950689281,37.8977779301429,0 -122.524717708216,37.89763728754841,0 -122.524664952586,37.8976353629671,0 -122.52443981253,37.8976271493526,0 -122.524266009914,37.8976805225079,0 -122.524084271271,37.8977518889973,0 -122.523934091605,37.8978452882784,0 -122.523666721517,37.89801156920231,0 -122.52335465731,37.8981184572466,0 -122.523250360969,37.8980864886939,0 -122.523250406066,37.8979693214369,0 -122.523303666877,37.8977577350151,0 -122.523277758253,37.8975863850858,0 -122.523156388694,37.8974461925552,0 -122.522838618376,37.8971159313539,0 -122.522689540944,37.896973372506,0 -122.522620399485,37.8968919754648,0 -122.522525904863,37.896553608152,0 -122.522603962081,37.8962452343546,0 -122.522563634482,37.8961053706936,0 -122.522215585289,37.8956217656348,0 -122.522086346384,37.8953801450187,0 -122.521962554079,37.894956035533,0 -122.5218366452,37.8945296640524,0 -122.52169940798,37.8940964866022,0 -122.52160436674,37.8938437386119,0 -122.521630540469,37.8937537163964,0 -122.521821581861,37.8937815332401,0 -122.52199485235,37.8938092774284,0 -122.522237380573,37.8937899855451,0 -122.522523852334,37.893680743009,0 -122.522584409165,37.8936407132048,0 -122.52271018216,37.8935575734032,0 -122.522800989825,37.8934470729281,0 -122.52281282262,37.8934326740099,0 -122.522831985098,37.89340935583991,0 -122.522994234315,37.8931621607078,0 contacts #khStyle84754 1 -122.484865879633,37.8929852815198,0 -122.484874220481,37.8930123557175,0 -122.484938986207,37.8931027686454,0 -122.48547055068,37.89363235291621,0 -122.485609492864,37.8936870391045,0 -122.485834127376,37.893711386939,0 contacts #khStyle84754 1 -122.535428827027,37.8949199638381,0 -122.535428718104,37.8949199411038,0 -122.535362802609,37.8949061832185,0 -122.535283567972,37.8949058696107,0 -122.535222053541,37.894905626102,0 -122.53500673764,37.8950061685392,0 -122.534851643643,37.8950258331686,0 -122.534664134011,37.895000304659,0 -122.534455738934,37.8949048431269,0 -122.53427459822,37.8947711845556,0 -122.533982039252,37.8946077916037,0 -122.53380644477,37.8944966865568,0 -122.533698182389,37.894417393814,0 -122.533376026609,37.8942133237916,0 -122.53316793434,37.8940705435064,0 -122.532993224075,37.8939324020879,0 -122.532872780658,37.8937561715423,0 -122.532765913552,37.8936813899397,0 -122.532537692374,37.8935745800032,0 -122.532329874447,37.8933889880904,0 -122.532175741212,37.8931450259305,0 -122.532027846966,37.8930385350495,0 -122.531786833818,37.892931672673,0 -122.531524878675,37.89287655038,0 -122.531343305266,37.8928127354947,0 -122.531159532097,37.8926475165008,0 -122.531041452309,37.892547903104,0 -122.530692806422,37.8924879262281,0 -122.530397177711,37.8923628169101,0 contacts #khStyle84754 1 -122.449742971215,37.8942769733958,0 -122.44954509139,37.8942174621496,0 -122.449397136521,37.89413565256,0 -122.449300864107,37.8939864887294,0 -122.449171178938,37.8937425329613,0 -122.449157423776,37.8937315028505,0 -122.449131609015,37.8937108022686,0 -122.449066760034,37.89371049797,0 -122.448852262391,37.8937094912028,0 -122.448738226195,37.8936548786057,0 -122.448722842108,37.8936351133267,0 -122.448681899855,37.8935825111826,0 -122.448642325687,37.8934561452073,0 -122.448586033226,37.893379271462,0 -122.448500470259,37.8933238952466,0 -122.448256381093,37.8931659203309,0 -122.448136895419,37.8930797365029,0 -122.448007535547,37.8927929698308,0 -122.447939598477,37.8926574573799,0 -122.447685022696,37.8923858739908,0 -122.447453733311,37.8920422966899,0 contacts #khStyle84754 1 -122.516086613982,37.8978679103084,0 -122.516192768453,37.8977241417651,0 -122.516435732303,37.8974232113177,0 -122.516629791306,37.8970995468235,0 -122.516754176889,37.8968611196755,0 -122.516765855561,37.8968387334529,0 -122.516788362749,37.8967717899656,0 -122.51687025388,37.8965282187816,0 -122.517017008649,37.8962629426354,0 -122.51708930766,37.8961806448488,0 -122.51727341181,37.8959710785057,0 -122.517385321691,37.895816066378,0 -122.517628985229,37.89551513619091,0 -122.517735932379,37.895357850102,0 -122.517854129929,37.8951104812963,0 -122.517949928194,37.8950275054876,0 -122.518158040935,37.8949449905663,0 -122.518262442307,37.8948507837007,0 -122.518373960623,37.8946461981259,0 -122.518375611598,37.894640255605,0 -122.51842273284,37.8944706469675,0 -122.518499169103,37.8943042221144,0 -122.518601862244,37.8941446645227,0 -122.518958129469,37.8936887208119,0 -122.519138646525,37.89358581206421,0 -122.51926661443,37.8935535358386,0 -122.519367207025,37.8935281641302,0 -122.519489214653,37.893458813638,0 -122.519605800486,37.8933474498953,0 -122.519820397067,37.8931424642895,0 -122.519933022771,37.8929851993235,0 -122.519985262781,37.8927127730961,0 -122.520063913967,37.8925328368758,0 -122.52018604229,37.8923350524939,0 -122.520325150901,37.8922590113222,0 -122.520515871795,37.8922259919723,0 -122.52078514867,37.8921369624005,0 -122.521114757426,37.8920616976175,0 -122.521314459779,37.8919588637155,0 -122.521522064197,37.891952950222,0 -122.521712969671,37.8920010456726,0 -122.521748581782,37.8920448510187,0 -122.52177361945,37.8920756490362,0 -122.521799377006,37.8922695310365,0 -122.521884990098,37.8924411245503,0 -122.522067320245,37.8926063520518,0 contacts #khStyle84754 1 -122.483977040397,37.8917060548611,0 -122.483995464928,37.8917031440665,0 -122.484060297251,37.891692901524,0 -122.48427274169,37.8916037063607,0 -122.484489485314,37.8916114180943,0 -122.484585064763,37.8916659150607,0 -122.484602347396,37.8917358407221,0 -122.484567094357,37.8917965228301,0 -122.484636076267,37.8918937141109,0 -122.484748432452,37.8919888425321,0 -122.484791731944,37.8920994402931,0 -122.484773196281,37.8923111614649,0 -122.484693174286,37.8926758315573,0 -122.48471886117,37.8927638198299,0 -122.484809362171,37.8928526744557,0 -122.484831819631,37.8928747233297,0 -122.484865879633,37.8929852815198,0 contacts #khStyle84754 1 -122.483977040397,37.8917060548611,0 -122.483820619308,37.8917121267734,0 -122.483612688344,37.8916638946428,0 -122.483387239932,37.8915795335528,0 -122.483247925275,37.8915789203343,0 -122.483126413517,37.8916752737422,0 -122.482977750961,37.8918931812363,0 -122.482802535833,37.8921470230382,0 -122.482680644007,37.8922974515396,0 -122.482554755098,37.8924095575806,0 -122.482296926197,37.892584171764,0 -122.482149348783,37.8926466109096,0 -122.481946393301,37.8926851855863,0 -122.48194080029,37.89268624861461,0 -122.481845316299,37.8926182306238,0 -122.48184609042,37.8925078263509,0 -122.48191628571,37.89233013194611,0 -122.481943327533,37.8921229552114,0 -122.481841115979,37.8915952509567,0 -122.481860196976,37.8913069232031,0 contacts #khStyle84754 1 -122.513361521176,37.89131554988601,0 -122.513473239247,37.8911898324401,0 -122.513623208388,37.8909763976983,0 -122.513754370144,37.8907043011189,0 contacts #khStyle84754 1 -122.516475263234,37.8946488245056,0 -122.516493925835,37.8946136859267,0 -122.516503130887,37.8944019211187,0 -122.516495555724,37.8943839758722,0 -122.516434529411,37.89423940674161,0 -122.516347505274,37.8940678035562,0 -122.515820003536,37.8935316162769,0 -122.515776876381,37.8933872323107,0 -122.515786718088,37.8930785816558,0 -122.516171327302,37.8926385357757,0 -122.516274719169,37.8924812362822,0 -122.516424797698,37.8921416180533,0 -122.516407905348,37.8917900459586,0 -122.516167367968,37.8912888399134,0 -122.516058920107,37.8911329207222,0 -122.515916961133,37.8909926358338,0 -122.51574855499,37.8908747739254,0 -122.515560113733,37.89077710811671,0 -122.515263125739,37.8906474488633,0 contacts #khStyle84754 1 -122.513361521176,37.89131554988601,0 -122.513105851507,37.8914976265394,0 -122.513081559744,37.8915149259846,0 -122.512792343406,37.8916083616218,0 -122.51256822711,37.8916389766108,0 -122.512344984985,37.8916448093734,0 -122.512214432002,37.891608215589,0 -122.512158857254,37.8915201091031,0 -122.512168502474,37.8913511576077,0 -122.512328400164,37.89103411762031,0 -122.512655089184,37.890539765255,0 contacts #khStyle84754 1 -122.530397177711,37.8923628169101,0 -122.530256152406,37.8922946560775,0 -122.529972514652,37.8920727050685,0 -122.529830513016,37.891934689896,0 -122.529693135318,37.8917403624889,0 -122.52967356822,37.8915757988008,0 -122.529727797422,37.8914318097138,0 -122.529862406244,37.8912791295798,0 -122.529862813421,37.89110337976801,0 -122.529783170857,37.890884498147,0 -122.529803208612,37.8907516381904,0 -122.529863561925,37.8906504847936,0 -122.529810672606,37.890472268325,0 contacts #khStyle84754 1 -122.481860196976,37.8913069232031,0 -122.481879006015,37.8906913655967,0 -122.481883258422,37.8905521966995,0 -122.481770055958,37.8900717613334,0 contacts #khStyle84754 1 -122.447453733311,37.8920422966899,0 -122.447305863722,37.891759948521,0 -122.447276580988,37.8915885661535,0 -122.447305057243,37.8913926703044,0 -122.447264587566,37.8911964498671,0 -122.447337940764,37.8910748472507,0 -122.447368948539,37.8910234434023,0 -122.447368928741,37.8909310613902,0 -122.447233496071,37.890506818907,0 -122.447165242169,37.8904141156064,0 -122.446987726882,37.8901045887517,0 -122.446893088495,37.8899283919437,0 -122.446660357186,37.8896839477543,0 -122.446515996648,37.88957016981221,0 -122.446496421473,37.8895547415722,0 -122.446379516631,37.8895046195736,0 -122.446290686609,37.8894963513798,0 -122.446161408336,37.8894843181874,0 -122.446124521009,37.8894808846966,0 -122.445938569931,37.8893493206546,0 contacts #khStyle84754 1 -122.445938569931,37.8893493206546,0 -122.445711732544,37.8890778637678,0 -122.445593542731,37.8890097091739,0 -122.445507607843,37.8889056553085,0 contacts #khStyle84754 1 -122.512655089184,37.890539765255,0 -122.512759582504,37.8903238896299,0 -122.512786567705,37.8901121987815,0 -122.512759338591,37.8899295748593,0 -122.512690496857,37.8898053620074,0 -122.512522839102,37.8896829921617,0 -122.512319344568,37.8896055376843,0 -122.512136448786,37.8895304216587,0 -122.511764324278,37.8892629949021,0 -122.511429774397,37.888903341216,0 -122.511374176942,37.8887115860367,0 -122.511309875771,37.88843867861771,0 contacts #khStyle84754 1 -122.513385952206,37.88900835225731,0 -122.513416136645,37.8889559283479,0 -122.513470079232,37.8888622414106,0 -122.513477575013,37.888816652788,0 -122.513488590588,37.8887496570005,0 -122.513433964527,37.8886255034528,0 -122.513285293161,37.888426603789,0 -122.513229735749,37.8882280899475,0 -122.513193104221,37.8879620578624,0 contacts #khStyle84754 1 -122.509439904997,37.8875566317835,0 -122.509078611474,37.8874807656567,0 -122.508633252065,37.8874338385908,0 -122.508275625138,37.8874481142208,0 -122.508126691292,37.8873979196262,0 -122.507969372385,37.8872192560668,0 -122.507754442,37.8871530119179,0 -122.507698920885,37.8870581438615,0 -122.507727892079,37.8869771493193,0 -122.508184443218,37.8868371092411,0 -122.508668907452,37.8866678922793,0 -122.508949123933,37.8865361242129,0 -122.509024121569,37.8863742057802,0 -122.509126980857,37.88608397007601,0 contacts #khStyle84754 1 -122.473026150288,37.8850442052961,0 -122.473158718562,37.8850921179582,0 -122.473389367162,37.8851404704934,0 -122.473746626467,37.8852750126143,0 contacts #khStyle84754 1 -122.529810672606,37.890472268325,0 -122.52966281577,37.8903612681684,0 -122.529501834917,37.8903020393876,0 -122.52924041505,37.890276206095,0 -122.529012080247,37.8901896678962,0 -122.528877213453,37.8901598349217,0 -122.528710001243,37.8901862025647,0 -122.528508088684,37.8901921516193,0 -122.527963445874,37.8901043408168,0 -122.52760847441,37.8900353165243,0 -122.527494293878,37.8899942990729,0 -122.527380022218,37.88985639252321,0 -122.527347301278,37.8896376981044,0 -122.527299903387,37.8894910477494,0 -122.527200242559,37.8894027707639,0 -122.526998678111,37.8893546412686,0 -122.526770262247,37.8892816177512,0 -122.526602625479,37.8891525082512,0 -122.526535850231,37.8890350713721,0 -122.526509962296,37.8887488075342,0 -122.526584461989,37.8882150937954,0 -122.526631063581,37.8880417834001,0 -122.526814694305,37.8876707415028,0 -122.526787868096,37.8875309334744,0 -122.526701321966,37.8873931379628,0 -122.526516006667,37.887250437713,0 -122.526352163122,37.8871956995449,0 -122.526089972375,37.8871811223148,0 -122.525854805779,37.8871644004004,0 -122.525570521123,37.8870483376943,0 -122.525380654873,37.8869506817684,0 -122.524338959186,37.8862367009853,0 -122.523869837908,37.8859058289715,0 -122.523629108101,37.8855398302278,0 -122.523636043607,37.8852356729971,0 -122.523748475375,37.88499503395471,0 contacts #khStyle84754 1 -122.473026150288,37.8850442052961,0 -122.472886796312,37.8849511975998,0 -122.472674443763,37.8847294282625,0 -122.472638064964,37.8846481488916,0 contacts #khStyle84754 1 -122.509126980857,37.88608397007601,0 -122.509285638504,37.8859539462365,0 -122.509397722104,37.8858800581847,0 -122.509594932723,37.8858313109875,0 -122.509807466131,37.8858299450948,0 -122.510059270758,37.8858017039906,0 -122.510292436841,37.8856900153821,0 -122.510521994081,37.8854791694565,0 -122.510694008376,37.8852635768819,0 -122.510750759787,37.8850655296938,0 -122.510820861244,37.8849982250246,0 -122.510947007926,37.8849469262811,0 -122.511124224512,37.8849116125721,0 -122.511291654206,37.8848514724119,0 -122.511496906401,37.8846608023924,0 -122.511500431582,37.8846467283636,0 contacts #khStyle84754 1 -122.523748475375,37.88499503395471,0 -122.524086912134,37.8844263400555,0 contacts #khStyle84754 1 -122.511500431582,37.8846467283636,0 -122.511553848718,37.8844334636727,0 -122.511508228388,37.88429455026651,0 contacts #khStyle84754 1 -122.472638064964,37.8846481488916,0 -122.472645509758,37.8846008646967,0 -122.47260900244,37.8845376105053,0 -122.472513923555,37.8844155093884,0 -122.472485649236,37.8841945666779,0 -122.472560763,37.883827629139,0 -122.472554761947,37.8835729881741,0 -122.47245708275,37.883417076989,0 contacts #khStyle84754 1 -122.511508228388,37.88429455026651,0 -122.511507166368,37.8842913164219,0 -122.511433311971,37.8841738415715,0 -122.51123792003,37.8840558609161,0 -122.511051679001,37.8839514373782,0 -122.510838196502,37.88377479692681,0 -122.510754348538,37.88366403969321,0 -122.510578482447,37.8833884136266,0 contacts #khStyle84754 1 -122.504840689403,37.8832562074312,0 -122.505212349562,37.8834785896594,0 -122.506049822965,37.8837682742613,0 -122.506552868181,37.8839010758722,0 -122.506813426105,37.8839449815877,0 -122.507055640156,37.8839685307264,0 -122.507493324582,37.8839906460402,0 -122.507655032599,37.8839778407697,0 -122.507763558164,37.883969246763,0 -122.507996556916,37.8838823474088,0 -122.508058890471,37.8838284104092,0 -122.508162409149,37.8837388358215,0 -122.508250228934,37.8835724650498,0 -122.50836780953,37.8834197381342,0 -122.508517253081,37.8832851702302,0 -122.508571055736,37.8832521015631,0 -122.508695671653,37.8831755088066,0 -122.508895232218,37.8830929742022,0 -122.509443412272,37.8829578185921,0 contacts #khStyle84754 1 -122.470070749112,37.8824825082345,0 -122.470344255822,37.8825986568519,0 -122.470710704029,37.8827377561256,0 -122.470885214216,37.882783607233,0 -122.471042796736,37.8828113560373,0 -122.471468572287,37.8828042608537,0 -122.471637977281,37.882768971884,0 -122.471748168396,37.8827649613346,0 -122.471911275869,37.8828152660538,0 -122.472062416893,37.8829488859295,0 contacts #khStyle84754 1 -122.524086912134,37.8844263400555,0 -122.524175465863,37.8842509473241,0 -122.524303487004,37.8839067224848,0 -122.524385352076,37.8835555508736,0 -122.52441135873,37.8833799045899,0 -122.524378388297,37.883201766216,0 -122.524171185262,37.8828178784178,0 -122.524070652305,37.8826462258471,0 -122.524144583154,37.8825338641429,0 -122.524432168999,37.8824651791117,0 -122.524500573303,37.8824384173922,0 -122.524612752425,37.8823464892862,0 contacts #khStyle84754 1 -122.524612752425,37.8823464892862,0 -122.524900146422,37.8820862780871,0 contacts #khStyle84754 1 -122.470070749112,37.8824825082345,0 -122.469743521115,37.8823255583506,0 -122.468323120793,37.8818842622376,0 -122.468249741576,37.8818616895682,0 contacts #khStyle84754 1 -122.468249741576,37.8818616895682,0 -122.467431016202,37.8816098319669,0 contacts #khStyle84754 1 -122.467431016202,37.8816098319669,0 -122.467163589203,37.8815387686036,0 -122.467033553246,37.8814367833428,0 -122.466875642626,37.8812580618083,0 -122.466787976892,37.8810954316815,0 -122.466617210248,37.8809256642878,0 -122.466392503907,37.88094266892,0 -122.466313362736,37.8808792189534,0 -122.466277687252,37.8808001939932,0 -122.466278224101,37.8807258401023,0 -122.466336130962,37.8806787856825,0 contacts #khStyle84754 1 -122.520550894719,37.8810185988304,0 -122.520257206936,37.8810421849591,0 -122.52000066655,37.8810366302507,0 -122.519649211902,37.8809811158309,0 -122.519486691644,37.8809443993626,0 -122.519055959905,37.8808389878087,0 -122.518845998192,37.8807750374533,0 -122.51864897642,37.880688607502,0 -122.51851082828,37.8806004375012,0 contacts #khStyle84754 1 -122.51851082828,37.8806004375012,0 -122.51829720402,37.8804640958036,0 -122.518011338962,37.880269145501,0 -122.517909877966,37.8801335354906,0 -122.517893280027,37.8798450544086,0 -122.517845627792,37.8797412103786,0 -122.517726567119,37.8796888973192,0 -122.517577186552,37.8797085628379,0 -122.517129847782,37.8798621970515,0 -122.517034480506,37.8798820839429,0 -122.516962699021,37.8798817887316,0 contacts #khStyle84754 1 -122.520550894719,37.8810185988304,0 -122.520801953795,37.8809925848071,0 -122.521047954585,37.8808696608887,0 -122.521167417838,37.8807507270408,0 -122.521199555019,37.8807076527867,0 -122.521296470128,37.88057775472011,0 -122.521426072097,37.8804295699816,0 -122.521518149212,37.8803803596971,0 -122.521614356501,37.8803289419076,0 -122.521757213148,37.8802191156377,0 -122.521780073081,37.88011925063,0 -122.521802559665,37.8800210163423,0 -122.521892823003,37.8799109757346,0 -122.522474695636,37.8796356046539,0 -122.522591470634,37.8795803403164,0 contacts #khStyle84754 1 -122.524900146422,37.8820862780871,0 -122.525061625349,37.88195399090661,0 -122.525247791059,37.8818510952475,0 -122.525448040619,37.8817685352428,0 -122.525668626127,37.8817288683415,0 -122.525882930463,37.881671149853,0 -122.526031861122,37.881599473027,0 -122.526073286462,37.8815795359258,0 -122.526239679509,37.8814562798413,0 -122.526261432397,37.8814362980732,0 -122.526515649511,37.8812027782075,0 -122.52663255023,37.8810387639077,0 -122.526718236517,37.8808656107815,0 -122.526804186068,37.8807623086898,0 -122.526978855233,37.8805669816034,0 -122.527124705836,37.8804323753466,0 -122.527215541075,37.8803661209986,0 -122.527622405713,37.8800693555104,0 -122.527732040239,37.87996257945021,0 -122.528048650081,37.87965422214321,0 -122.528287966782,37.879350997893,0 -122.528429577131,37.8792118664806,0 -122.52860441752,37.8790999070194,0 -122.528783191309,37.8790397873242,0 contacts #khStyle84754 1 -122.516962699021,37.8798817887316,0 -122.516772391324,37.8798562203669,0 -122.516563262965,37.8797742435738,0 -122.516426700754,37.8796812990923,0 -122.516230613488,37.8794529157104,0 -122.516087874268,37.8792179921441,0 -122.516100292434,37.8790580642492,0 -122.516130301063,37.8789252475372,0 -122.516107464393,37.8787223630788,0 -122.51598862783,37.8786362507946,0 -122.515780939929,37.8785520253259,0 -122.515356682804,37.8784376140776,0 -122.514957330806,37.8783187977097,0 contacts #khStyle84754 1 -122.473722889079,37.8782268276275,0 -122.473513701293,37.8782334745755,0 -122.472542179157,37.8782643398313,0 -122.472206361953,37.8783169078764,0 -122.472015776422,37.8783340766589,0 -122.471888503905,37.8783170602701,0 contacts #khStyle84754 1 -122.522591470634,37.8795803403164,0 -122.522846557528,37.8794799817792,0 -122.5230490226,37.8793839154418,0 -122.523198909678,37.8792853820732,0 -122.523326316433,37.8790357910388,0 -122.523409659049,37.87878602104271,0 -122.523408909837,37.8787817306492,0 -122.52337264664,37.8785740674535,0 -122.523231147913,37.8783639429472,0 -122.523089578724,37.8780546759642,0 -122.52307476975,37.8778862529345,0 contacts #khStyle84754 1 -122.466336130962,37.8806787856825,0 -122.466365338977,37.8805707637853,0 -122.466338017846,37.8804174204785,0 -122.466258714596,37.8803765019566,0 -122.466164986336,37.8803648096783,0 -122.46578376942,37.8804036335813,0 -122.465510369753,37.8803730972773,0 -122.465344559811,37.8803047455935,0 -122.465259350114,37.880196202829,0 -122.46523787982,37.88002035368571,0 -122.465180804155,37.8799524970137,0 -122.464797380284,37.8797074016423,0 -122.464650147874,37.8796256143304,0 -122.464571417614,37.8795058344912,0 -122.464514954318,37.8792554692498,0 -122.464401311668,37.8790499075772,0 -122.46434460439,37.8788333394653,0 -122.464208499291,37.8785893703126,0 -122.464072452375,37.878435530179,0 -122.463900628011,37.8783153248604,0 -122.46357718891,37.8782282249776,0 -122.463325723224,37.8781144145641,0 -122.462822312755,37.8778552448054,0 contacts #khStyle84754 1 -122.461133810737,37.8777483649914,0 -122.460937029761,37.8778353373179,0 -122.460755813053,37.8778345051036,0 -122.460574004475,37.87791478592141,0 -122.459851230458,37.8783057768,0 -122.45976044995,37.8783774622308,0 -122.459707835637,37.8784925913394,0 -122.459634058819,37.8786540269642,0 -122.459571605323,37.8787393619573,0 -122.459350029054,37.8788149513569,0 -122.459275903875,37.8787470132997,0 -122.459117556299,37.8786313695297,0 -122.459050109434,37.8786220458871,0 -122.458942172927,37.8787071709677,0 -122.458850597909,37.87879011814201,0 -122.458651959999,37.87883877328291,0 -122.458475864084,37.8788176821644,0 -122.45836866877,37.8787045265423,0 -122.458289422589,37.8785913256532,0 contacts #khStyle84754 1 -122.528783191309,37.8790397873242,0 -122.528933664361,37.8790325585983,0 -122.529562377623,37.8790023531135,0 -122.529938312667,37.8789711327181,0 -122.53008005412,37.8789593611523,0 -122.53085983535,37.8789399465553,0 -122.53163995583,37.8789791120882,0 -122.531823308121,37.8790025302751,0 -122.53189489765,37.8790116737771,0 -122.53225880306,37.8791212787376,0 -122.532476874615,37.8791401729382,0 -122.532905541969,37.8791238529055,0 -122.533164194876,37.8791316410946,0 -122.533186383999,37.8791354460894,0 -122.533330537149,37.8791601653863,0 -122.533419777533,37.8791754681778,0 -122.533794986275,37.8792963794547,0 -122.533990813916,37.8793489809778,0 -122.534546116703,37.8794255398162,0 -122.534764402452,37.8794106322017,0 -122.534786432473,37.8792980580309,0 -122.534688851631,37.8792188084098,0 -122.534579559353,37.8791935897876,0 -122.534580083007,37.8791104031107,0 -122.53458031108,37.879074171632,0 -122.534623662298,37.8789616819853,0 -122.53460222625,37.8788669614149,0 -122.534504474525,37.87870208825591,0 -122.534516000298,37.8785646869642,0 -122.534897543336,37.8784693098359,0 -122.535028637312,37.8784180046895,0 -122.53500643352,37.8783322940596,0 -122.534854342887,37.8782190302789,0 -122.534519278483,37.87815686546401,0 -122.534070049517,37.878166350139,0 -122.533721468903,37.8782190441203,0 -122.53365581495,37.8781489333186,0 -122.533721297921,37.8780207592696,0 -122.53367848555,37.8778223050982,0 -122.533515183353,37.8776842095499,0 -122.533160393982,37.8775949237738,0 -122.532452734499,37.8775628165666,0 contacts #khStyle84754 1 -122.503627593636,37.8932869321037,0 -122.503513197443,37.8927501823704,0 -122.503542130616,37.8925700471689,0 -122.503609440895,37.8924407694944,0 -122.503826583424,37.892023717142,0 -122.503895351766,37.8918392436966,0 -122.504090720065,37.8912204335162,0 -122.504120014326,37.891092123696,0 -122.504111045528,37.8909456265339,0 -122.504013905936,37.8908032634374,0 -122.50385162657,37.8906126788927,0 -122.50377129289,37.8905183327649,0 -122.503703585046,37.8903332825933,0 -122.503733757026,37.8900742897947,0 -122.503734589256,37.8898444648538,0 -122.503696024909,37.8896595378155,0 -122.503501795898,37.8894739527255,0 -122.503346797178,37.8893741556077,0 -122.50314249645,37.8893124544477,0 -122.502995876608,37.889235224523,0 -122.502608545446,37.8888032195339,0 -122.502326395813,37.8885857149996,0 -122.502112539162,37.8885712891922,0 -122.501927463361,37.8885051609959,0 -122.501771970625,37.8883738146268,0 -122.501675519278,37.8882359589385,0 -122.501607989026,37.8879202214843,0 -122.501511492985,37.88778912512781,0 -122.501113064067,37.8873187633324,0 -122.501084515266,37.8872307664401,0 -122.501027515346,37.8869353522025,0 -122.501029994211,37.8865680877167,0 -122.501084379529,37.8864083402051,0 -122.501135285042,37.8863432130401,0 -122.501476988915,37.8861598998935,0 -122.501633182709,37.8860126208962,0 -122.50168157428,37.8859669911216,0 -122.501799567002,37.8857556889053,0 -122.502231367023,37.8848584843903,0 -122.502303686235,37.8846740266852,0 -122.502275834779,37.8844823847816,0 -122.502171086073,37.8843106959323,0 -122.502019291954,37.8841590865163,0 -122.50191746047,37.8840820451382,0 -122.501599022,37.8838733977677,0 -122.501227762382,37.8836983235593,0 -122.501016632822,37.8835982847833,0 -122.500798463161,37.8834892024271,0 -122.500599470041,37.8833644032307,0 -122.500570572483,37.8833462799682,0 -122.500336529934,37.8831672793194,0 -122.500219405035,37.883040600208,0 -122.500201170312,37.8830044710048,0 -122.500079222879,37.8827646557603,0 -122.50005878575,37.882724465039,0 -122.49996516098,37.8825911260912,0 -122.499954724147,37.8825796892367,0 -122.49985369277,37.8824689771484,0 -122.499463611758,37.8821383438246,0 -122.499173009877,37.8819162883942,0 -122.498935803514,37.881680940853,0 -122.498670759425,37.8814634997148,0 -122.498537653406,37.8813885747696,0 -122.498369025342,37.8813277263763,0 -122.498246972896,37.88128368429301,0 -122.498159229492,37.8812269786063,0 -122.498080145036,37.881046382611,0 -122.497904851206,37.8808000315772,0 -122.497729344269,37.8805852244874,0 -122.497607567272,37.8803013353087,0 -122.497595716231,37.8802737077828,0 -122.497554474999,37.88017213619981,0 -122.497437347154,37.8798381576886,0 -122.497379653615,37.8797522881595,0 -122.497221595813,37.879584872692,0 -122.497177911141,37.8794247066835,0 -122.497147106191,37.87938322963121,0 -122.497011709602,37.8792009254454,0 -122.496967979622,37.8790475188266,0 -122.497029612607,37.878867525031,0 -122.497137882933,37.8786223875095,0 -122.497227286335,37.878329851359,0 -122.497243978961,37.8780080165304,0 -122.49724528002,37.8779829319038,0 -122.497242753083,37.8778319550526,0 -122.497327410228,37.8775056000891,0 contacts #khStyle84754 1 -122.458289422589,37.8785913256532,0 -122.45826739024,37.8785598530046,0 -122.458092698669,37.8782503552772,0 -122.457974910737,37.8780312489177,0 -122.45794424164,37.8779162091295,0 -122.457919578369,37.87782369693641,0 -122.457886887852,37.87753288021901,0 -122.457903695446,37.8774698675797,0 contacts #khStyle84754 1 -122.457903695446,37.8774698675797,0 -122.458170948821,37.8773674530167,0 -122.458190556969,37.8773406175715,0 contacts #khStyle84754 1 -122.458190556969,37.8773406175715,0 -122.458216892713,37.8773045747936,0 -122.458211901073,37.8772099163832,0 contacts #khStyle84754 1 -122.473993014431,37.8778179516128,0 -122.474009044205,37.8770631934907,0 -122.473986689303,37.8768463073446,0 contacts #khStyle84754 1 -122.45816222023,37.8769100084103,0 -122.45802683331,37.8766682885972,0 contacts #khStyle84754 1 -122.52307476975,37.8778862529345,0 -122.523060444725,37.8777233331766,0 -122.523135780274,37.8775028227612,0 -122.523278527504,37.8774087667059,0 -122.523435183095,37.8773620847004,0 -122.523622774713,37.8773673522168,0 -122.523861143905,37.8774336624642,0 -122.524086605171,37.8775179457488,0 -122.524228669851,37.8775297874892,0 -122.524385934349,37.8774988792812,0 -122.524641156504,37.8773759850392,0 -122.524806194596,37.877351867415,0 -122.524810159267,37.8773518834567,0 -122.525150165814,37.8773532586743,0 -122.52544993002,37.8773770025931,0 -122.525727212645,37.8773600968535,0 -122.525891611914,37.8773247089843,0 -122.525958254575,37.8772812580322,0 -122.526056473167,37.8772172194392,0 -122.526304364874,37.8770176822147,0 -122.526364697122,37.8769187834864,0 -122.52644752202,37.8767478721041,0 -122.526433214656,37.8765405173714,0 -122.526397341493,37.87638942808571,0 contacts #khStyle84754 1 -122.45802683331,37.8766682885972,0 -122.458015925557,37.8766051479865,0 -122.457954479451,37.8764561515605,0 -122.457892471835,37.8763837621073,0 -122.457751021546,37.8762907267181,0 -122.457490630934,37.876136304575,0 -122.457186793395,37.8759952003294,0 -122.457008126963,37.8759380435505,0 -122.456821412066,37.8759123943957,0 -122.456351732246,37.8759034607995,0 -122.455869791827,37.87582236534951,0 -122.455773643241,37.8757543229879,0 contacts #khStyle84754 1 -122.514957330806,37.8783187977097,0 -122.514856056565,37.878264301984,0 -122.514660141373,37.8781192860614,0 -122.51449936139,37.8779270973029,0 -122.51433873058,37.8778205315455,0 -122.514195349298,37.87779289984591,0 -122.513539813892,37.8778329978243,0 -122.513319101428,37.8777847657005,0 -122.513152298983,37.8776443743628,0 -122.51290833112,37.877350443397,0 -122.512801507867,37.87727564385811,0 -122.512600711498,37.8772252397796,0 -122.512265004848,37.8771562493886,0 -122.512164459739,37.8770995011559,0 -122.512069246356,37.8769886975532,0 -122.511967785853,37.8768553356504,0 -122.511717496687,37.8767664195595,0 -122.511528095621,37.8764974980603,0 -122.511217981737,37.8763204562568,0 -122.510944272911,37.8762269346113,0 -122.510807058358,37.8761272212263,0 -122.510694409487,37.8759667729046,0 -122.510652723534,37.8758223927316,0 -122.510617483515,37.8755631248348,0 -122.510576584913,37.8754964241915,0 contacts #khStyle84754 1 -122.455637566692,37.8757041212144,0 -122.455541385289,37.8756405849575,0 -122.455302617118,37.8752861002437,0 contacts #khStyle84754 1 -122.473986689303,37.8768463073446,0 -122.473937247962,37.87636662556771,0 -122.473859195904,37.8758502874312,0 -122.473779786955,37.8756246090725,0 -122.473709215757,37.8754553008847,0 -122.473510176462,37.8751637424456,0 -122.473433013697,37.8750640662448,0 contacts #khStyle84754 1 -122.471888503905,37.8783170602701,0 -122.471865993325,37.878314050581,0 -122.471736744696,37.8782967698102,0 -122.471725157803,37.8782890753784,0 -122.471599474893,37.8782056137785,0 -122.471576181911,37.8781901456929,0 -122.471415716248,37.8780700024521,0 -122.471211140513,37.8778572781517,0 -122.471091297751,37.8777236980868,0 -122.471077179922,37.87770796192311,0 -122.471023158019,37.8776750019328,0 -122.470961843181,37.8776375922919,0 -122.470851078068,37.877623573742,0 -122.470594483984,37.8776291765652,0 -122.470433521369,37.8776780215014,0 -122.470326261141,37.8776707779386,0 -122.470094135846,37.8775345369861,0 -122.469836412371,37.8772021495195,0 -122.469765557935,37.8770733957698,0 -122.469649819896,37.8769602117845,0 -122.469582486307,37.8769351221193,0 -122.469247692193,37.8768457332669,0 -122.46915865241,37.8767754807476,0 -122.469060633316,37.8766691359697,0 -122.468970837575,37.8764073558562,0 -122.468857494277,37.8761589884736,0 -122.468768763287,37.8760459257924,0 -122.46865273692,37.8759732975399,0 -122.468482427085,37.8759387282275,0 -122.468267912142,37.8759242374758,0 -122.468178777163,37.8758675031202,0 -122.46806375935,37.8755560370907,0 -122.467977308113,37.8754227051148,0 -122.467870200269,37.8752960391179,0 -122.46759712041,37.8749275254452,0 contacts #khStyle84754 1 -122.455302617118,37.8752861002437,0 -122.455265822556,37.87523147323051,0 -122.455249614208,37.8751164836075,0 -122.455155074423,37.874926774104,0 contacts #khStyle84754 1 -122.510576584913,37.8754964241915,0 -122.510386165744,37.8751858719345,0 -122.51030321774,37.8750480792972,0 -122.510306866047,37.8749264202529,0 contacts #khStyle84754 1 -122.473433013697,37.8750640662448,0 -122.473326387342,37.8749263294675,0 contacts #khStyle84754 1 -122.52820252914,37.8745850756565,0 -122.528227200932,37.8746167199805,0 -122.52830984495,37.87469591496781,0 -122.528343511092,37.8747659002957,0 -122.528316181904,37.8749280230776,0 -122.528320201553,37.8749663441252,0 -122.528287100692,37.8751419630915,0 -122.528218351412,37.8753354646825,0 -122.528130025551,37.8755897247652,0 -122.528129859165,37.875727171087,0 -122.528153954194,37.8760720119706,0 -122.528227718567,37.8763179102842,0 -122.528326802666,37.8764940601353,0 -122.52848790301,37.8766411669245,0 -122.528736647309,37.8767525735534,0 -122.529083832499,37.8769184519235,0 -122.529281624707,37.8769958546506,0 -122.529517570923,37.8769968001156,0 -122.529793429933,37.8769798790837,0 -122.530346468827,37.8768942952481,0 -122.530375353956,37.8768898251415,0 -122.530397043394,37.8768909620707,0 -122.530561495019,37.8768995822571,0 -122.530846816919,37.8769593063739,0 -122.531405391527,37.8771891126155,0 -122.531814300279,37.87737325506171,0 -122.531998636347,37.8774438399048,0 -122.532310725343,37.8775419720474,0 -122.532452734499,37.8775628165666,0 contacts #khStyle84754 1 -122.526397341493,37.87638942808571,0 -122.526388232904,37.87635106476551,0 -122.526187679671,37.875928902033,0 -122.526082595285,37.87569188899741,0 -122.526045778847,37.8754483916897,0 -122.52611946523,37.8752616710076,0 -122.526219110421,37.8750164710307,0 -122.526242429007,37.8749264359223,0 -122.526344425285,37.874757855106,0 -122.526332658093,37.8745978283575,0 -122.526327416745,37.874417548857,0 -122.526315404284,37.8742958260123,0 -122.526318752036,37.8742169764775,0 contacts #khStyle84754 1 -122.526318752036,37.8742169764775,0 -122.526321157651,37.8741813205149,0 -122.526323463358,37.8741471453595,0 -122.526373234424,37.8740324313645,0 -122.526444685587,37.8738614740174,0 -122.526474193678,37.8736926007537,0 -122.526504845065,37.8734561351879,0 -122.52652427095,37.8733400656114,0 -122.526542530572,37.8732309641096,0 -122.526585338466,37.8730936896315,0 -122.52662182253,37.8729451234954,0 -122.526699480352,37.8728034829625,0 -122.526796895888,37.8727412492994,0 -122.526818647534,37.8727273532907,0 -122.526916178196,37.8727007074146,0 -122.527061931424,37.872690028257,0 -122.527165007768,37.8727963450943,0 -122.52721281279,37.8728776538301,0 -122.527301892782,37.8729501157504,0 -122.527439892139,37.8730408002828,0 -122.527555124426,37.8731575393295,0 -122.527618533505,37.8732217773319,0 -122.527713722332,37.8733393281136,0 -122.527747910903,37.8734386077151,0 -122.527788567333,37.87352664715961,0 -122.527794373295,37.8736190529369,0 -122.527800164884,37.8737137118849,0 -122.527799008237,37.8737835573657,0 -122.527798475915,37.8738669247357,0 -122.527852663795,37.8739505120958,0 -122.527935392973,37.874016188312,0 -122.527989264724,37.874149345396,0 -122.528016347479,37.87424859635151,0 -122.528042863448,37.8743253127233,0 -122.528076241594,37.8744403615691,0 -122.528158827749,37.8745285693497,0 -122.52820252914,37.8745850756565,0 contacts #khStyle84754 1 -122.939040080512,38.3091417726121,0 -122.938530453959,38.3089636025381,0 -122.93705793883,38.3084487805295,0 -122.936677736209,38.308315849577,0 contacts #khStyle84754 1 -122.947177160593,38.281130690037,0 -122.947815146194,38.281104580541,0 -122.94793932407,38.2810994981684,0 contacts #khStyle84754 1 -122.876106050845,38.2694816296462,0 -122.875539536852,38.2695531180729,0 -122.875087752549,38.2696788069072,0 -122.874547654024,38.2698449536541,0 -122.873894510427,38.2700965927656,0 -122.87346686571,38.2703406606509,0 contacts #khStyle84754 1 -122.835395754011,38.2654654098419,0 -122.834326640507,38.26546851619001,0 -122.833855565719,38.2657292022715,0 -122.833384937013,38.26579612116931,0 -122.832942481528,38.2657278930679,0 -122.832416634383,38.2657271358709,0 -122.831835365952,38.2659020391009,0 -122.831586121835,38.2660098283048,0 -122.831281654977,38.2660544492179,0 -122.830755699992,38.2660987469813,0 -122.830279906213,38.26623323868251,0 contacts #khStyle84754 1 -122.859380490778,38.2684172584978,0 -122.859018753957,38.2679119568326,0 -122.858729454978,38.266965298563,0 -122.858579694801,38.2662756634011,0 -122.858520184342,38.2656537309648,0 -122.858521893011,38.26496428023891,0 -122.85842807219,38.2647163223972,0 -122.858290527599,38.2645404112619,0 -122.858129566792,38.2644636090988,0 -122.857960330711,38.2644183393699,0 -122.857776377321,38.2644091014531,0 -122.85743400218,38.2644852886927,0 -122.8567929505,38.2647593779461,0 -122.856296322394,38.2649795696144,0 -122.855864526195,38.2651097144981,0 -122.855506135722,38.2651543313129,0 -122.85533157808,38.265091026125,0 -122.855258250525,38.2649602541352,0 -122.855277367791,38.2646899043821,0 -122.855388520573,38.2643070117619,0 -122.85561902807,38.2639017394311,0 -122.855984708947,38.263244285855,0 -122.856061907534,38.2628658576473,0 -122.856025690522,38.2625774139507,0 -122.856043884274,38.2624107058222,0 -122.856136644812,38.2622891528062,0 -122.856344062427,38.26217224904821,0 -122.856577369859,38.2619697547623,0 contacts #khStyle84754 1 -122.84195444388,38.2617705230109,0 -122.841321095685,38.2617966928068,0 -122.840931743616,38.2619538783445,0 -122.840715699653,38.2620842628064,0 -122.840373246262,38.2623541662605,0 -122.840173869031,38.262538647745,0 -122.840005206611,38.2627394549658,0 contacts #khStyle84754 1 -122.966222335303,38.2503738766665,0 -122.96644087062,38.251212105674,0 -122.966779070374,38.252032344735,0 -122.967009760848,38.2528705760745,0 -122.967135738132,38.2530974897549,0 -122.967227450771,38.2532626840573,0 -122.967468777737,38.2535412963229,0 -122.967535882158,38.2536187679883,0 -122.968654487403,38.2545563879974,0 -122.968903984322,38.2549394892142,0 -122.969058096029,38.2553676259579,0 -122.969115404393,38.2558137606936,0 -122.968971158169,38.2558718368555,0 -122.968679202261,38.2559893828032,0 -122.9682392416,38.2557864771668,0 -122.96775884168,38.2549842268287,0 -122.967457187739,38.2546326517786,0 -122.966655240656,38.2540511090862,0 -122.965803994345,38.2535146083673,0 -122.96541232177,38.2532170755236,0 -122.96436952585,38.25222537357511,0 -122.962805408333,38.2510307095944,0 -122.962458423236,38.2507016378096,0 -122.961955497376,38.2501246684145,0 contacts #khStyle84754 1 -122.964521397187,38.2499498274294,0 -122.964566044173,38.2499587900839,0 -122.965060968469,38.2501482079683,0 -122.966222335303,38.2503738766665,0 contacts #khStyle84754 1 -122.961955497376,38.2501246684145,0 -122.962312369464,38.2499399903116,0 contacts #khStyle84754 1 -122.810848421178,38.2524322310006,0 -122.811129412959,38.2519234827241,0 -122.811272089969,38.2515857475314,0 -122.811394645067,38.2512930400798,0 -122.811487088436,38.2509056552886,0 -122.811558948356,38.25060385505821,0 -122.811631046974,38.2503471157095,0 -122.81170430613,38.2499182209924,0 contacts #khStyle84754 1 -122.962312369464,38.2499399903116,0 -122.962416714875,38.2498859924453,0 -122.962948895968,38.2498501195782,0 -122.964048933929,38.2498549829902,0 -122.964521397187,38.2499498274294,0 contacts #khStyle84754 1 -122.959084650052,38.2407102523892,0 -122.959503741692,38.2409897870398,0 -122.959829237617,38.2413323733727,0 -122.960032215937,38.2417289895368,0 -122.960094824169,38.2421706174791,0 -122.959908899893,38.2425716015595,0 -122.959464855233,38.2428282950237,0 -122.959009635419,38.2426343646827,0 -122.958587697361,38.2423232840695,0 -122.958242913309,38.2419896995732,0 -122.958033534269,38.24156153463701,0 -122.958131957855,38.2411875580811,0 -122.958572063794,38.2409398805293,0 -122.959084650052,38.2407102523892,0 contacts #khStyle84754 1 -122.965665530149,38.2458810430582,0 -122.965124076398,38.2459529746521,0 -122.964629005176,38.24611504192011,0 -122.963753400373,38.2466329728249,0 -122.963345404299,38.2469122233537,0 -122.962316314025,38.2479122542139,0 -122.961876531029,38.2481689581052,0 -122.961398196968,38.2483805853885,0 -122.961314683042,38.2484081825822,0 -122.960894169775,38.2485471400575,0 -122.960355610605,38.2485063963441,0 -122.959857839742,38.2483349855711,0 -122.958055874463,38.247365502402,0 -122.95763138929,38.2470949733687,0 -122.956839240559,38.2465088705326,0 -122.956480153776,38.2461842880516,0 -122.955819867689,38.24549909287501,0 -122.955545455897,38.24513398484741,0 -122.955371428497,38.2447238539667,0 -122.955122749154,38.2443362241195,0 -122.955025378451,38.24412996289,0 -122.954937643861,38.2439441128504,0 -122.954965234664,38.2426508497385,0 -122.954881221584,38.2422227289691,0 -122.95469862842,38.2418216057849,0 -122.954406380355,38.241456487631,0 -122.954045540881,38.2411364027295,0 -122.952420715429,38.2399911612164,0 -122.951253224513,38.23908942823601,0 -122.950866699315,38.2387693222702,0 -122.950577687358,38.2384177142064,0 -122.95094141129,38.2376022522633,0 -122.95094098758,38.2371741642903,0 -122.950562305287,38.2368901100573,0 -122.949154411692,38.2362090536049,0 -122.948193418735,38.2358030622835,0 -122.946699748742,38.2352841597554,0 -122.945632899077,38.2351259380954,0 -122.945115587453,38.2349905040079,0 -122.943284777031,38.2342259487421,0 -122.943192611183,38.234187458653,0 -122.941680412989,38.2337045320935,0 -122.940200419929,38.233163022294,0 -122.939726759078,38.2329509818845,0 -122.939286703523,38.2326938954879,0 -122.938901320863,38.2323917747561,0 -122.938622405154,38.232022117113,0 -122.938454225026,38.231602950392,0 -122.938417818864,38.2311658297896,0 -122.938528043368,38.2310815556231,0 -122.938782974594,38.2308866421349,0 -122.939313702073,38.2307292088348,0 -122.939856492494,38.230661903418,0 -122.94039562599,38.2306982360801,0 -122.940925421268,38.2308021543531,0 -122.941953176302,38.2310865727939,0 -122.943536154663,38.2313982960561,0 -122.946222463143,38.2317375622193,0 -122.947807976711,38.2320447226981,0 -122.948347471865,38.2320945375079,0 -122.948893085689,38.2320767597105,0 -122.949430442564,38.23212206238351,0 -122.951558328809,38.2324879930631,0 -122.953123127258,38.2328626655255,0 -122.953661218282,38.2328899243304,0 -122.954275751807,38.23287214970811,0 -122.954458510525,38.2328612061523,0 contacts #khStyle84754 1 -122.831694381554,38.2121146123329,0 -122.831829890594,38.2123230117978,0 -122.832013925214,38.2125485898025,0 -122.832287296504,38.2127337412057,0 -122.83259456566,38.2127702349125,0 -122.832895500781,38.21261295003231,0 -122.832971747483,38.2123652158309,0 -122.83295775303,38.2120858088811,0 -122.832953384983,38.2120622781908,0 contacts #khStyle84754 1 -122.832474083864,38.2100650379282,0 -122.832453203625,38.2099806675839,0 -122.832401518441,38.2098231555581,0 contacts #khStyle84754 1 -122.828207889833,38.20695077509851,0 -122.828470911791,38.2071224004914,0 -122.828696748014,38.2073210101822,0 -122.828868611971,38.2075510806696,0 -122.829699732631,38.208403981916,0 -122.830086003365,38.2088416557017,0 -122.830243221578,38.2090807151983,0 -122.830368290057,38.2093287379476,0 -122.830558768653,38.2098472367583,0 -122.83071235401,38.2101738311011,0 contacts #khStyle84754 1 -122.832137799287,38.2089493473801,0 -122.83213541394,38.2089392662221,0 -122.832025081647,38.2078711286446,0 -122.832045348427,38.2075962761592,0 -122.83218936992,38.2073666675246,0 -122.832441810589,38.2071777686321,0 -122.832900324887,38.2067818815517,0 -122.833189076286,38.206633590869,0 -122.83351584323,38.2065619596822,0 -122.833857418157,38.2065714617747,0 -122.835403140782,38.2071324387164,0 -122.835965730852,38.2074306475258,0 -122.836008396995,38.2074568096661,0 contacts #khStyle84754 1 -122.828207889833,38.20695077509851,0 -122.827958466857,38.2067656493764,0 -122.827687205728,38.2066075283721,0 -122.827388396506,38.2064764034476,0 -122.826134753598,38.2060554519956,0 -122.825852398293,38.2059108278811,0 -122.825406841654,38.2055045977517,0 -122.825148484206,38.2053284650902,0 -122.82416371375,38.2048763540762,0 contacts #khStyle84754 1 -122.736462134344,38.2053506917762,0 -122.736473002167,38.2053459714374,0 -122.736681907496,38.2052552350168,0 -122.736782092144,38.2052117203742,0 -122.736794839101,38.205204003285,0 -122.736879184657,38.2051529398729,0 -122.736918896825,38.2051288977925,0 -122.736974900483,38.205094992657,0 -122.73702435769,38.2050714609108,0 -122.737155523268,38.2050090521359,0 -122.737182277287,38.2049963225036,0 -122.737442407485,38.2049011735249,0 -122.737512875115,38.2048753981246,0 -122.737562168706,38.2048603588572,0 -122.737964468916,38.2047376177464,0 -122.737967390717,38.2047367263035,0 -122.737969271155,38.2047358061081,0 -122.73806657307,38.2046881911776,0 -122.738068222601,38.2046873839742,0 -122.738174372755,38.2046526270169,0 -122.73817757203,38.20465157947001,0 -122.738355311831,38.204580664554,0 -122.738384636473,38.20456896452121,0 -122.738390965203,38.2045664394643,0 -122.738503883566,38.20453064266211,0 -122.738570725702,38.2045125217828,0 -122.738610346731,38.2045017805137,0 -122.738619284142,38.2044993575775,0 -122.738737507716,38.2044770912291,0 -122.739088300234,38.204396764003,0 -122.739120258803,38.2043879346795,0 -122.739188654239,38.2043690387585,0 -122.739201558798,38.2043654735512,0 -122.739321907417,38.2043477176286,0 -122.739601461094,38.2043258109859,0 -122.739693271581,38.2043034846811,0 -122.739789890999,38.2042954884325,0 -122.739799310762,38.2042947088461,0 -122.739906400442,38.2042634894446,0 -122.740029412219,38.20422762818761,0 -122.740094585388,38.2042139232284,0 -122.740163940982,38.20419933872121,0 -122.740262661324,38.2041785791393,0 -122.740376648968,38.2041427829126,0 -122.740483887031,38.2040979590261,0 -122.740575779188,38.2040424245974,0 -122.74058046536,38.2040395925355,0 -122.740613825556,38.204012572376,0 -122.7407912631,38.2038688559764,0 -122.740835690033,38.2038328720361,0 -122.740839618,38.2038289177619,0 -122.740872943202,38.2037953693463,0 -122.740957051511,38.2037106974969,0 -122.740978615259,38.2036889892265,0 contacts #khStyle84754 1 -122.923983719525,38.204719218975,0 -122.923323390131,38.2047187785169,0 -122.922980348006,38.2047455857618,0 -122.922674554753,38.2046507493324,0 -122.92209341768,38.2043619571704,0 -122.921475813183,38.204136224681,0 -122.921205432531,38.2039738137811,0 -122.920982571694,38.2037708818809,0 -122.920819711677,38.2035364440926,0 -122.920560052344,38.20304058028161,0 -122.920381745954,38.2022473615173,0 -122.920435932939,38.2019815331148,0 -122.920566117793,38.2017382855486,0 -122.920758029923,38.2015131076867,0 -122.920901418665,38.201269870971,0 -122.921375668266,38.2003689521885,0 contacts #khStyle84754 1 -122.721146678252,38.19997515854911,0 -122.721160117052,38.2000371749527,0 -122.721174034335,38.2001013993157,0 -122.721126809467,38.2003175870721,0 -122.721092029409,38.200452691819,0 -122.721093602063,38.2006014022616,0 -122.721198747002,38.2007323352295,0 -122.721360025589,38.2009309961385,0 -122.721367361004,38.201066201543,0 -122.721411212524,38.2013592133463,0 -122.721454436634,38.2016296923096,0 -122.721497498014,38.2017559704678,0 -122.721608880496,38.2019364868221,0 -122.721868482229,38.2021849504896,0 -122.721980106824,38.2023023793935,0 -122.722120216378,38.2024379010962,0 -122.722266157278,38.2025418926821,0 -122.722537716354,38.20265068921301,0 -122.722810481187,38.2028180693809,0 -122.722943506245,38.2029400544748,0 -122.723082956293,38.2030620546694,0 -122.723293042756,38.2031932348047,0 -122.723487647644,38.2032657964674,0 -122.723690224725,38.2033068328636,0 -122.723954260665,38.2033299893286,0 -122.724454578378,38.20335370361061,0 -122.724802474155,38.2033815625038,0 -122.724983739027,38.20339550881631,0 -122.725199319359,38.2033960169162,0 -122.725463423994,38.2034011451048,0 -122.725623290735,38.2034105338014,0 -122.725943278458,38.2033617172168,0 -122.726143952672,38.2033396572494,0 -122.726296951663,38.203276928718,0 -122.726456782608,38.2032006972237,0 -122.726616051481,38.2030839078365,0 -122.726866080942,38.2030349247339,0 -122.727025930204,38.203048817741,0 -122.727199393061,38.2030492235868,0 -122.727484878097,38.2030634097554,0 -122.727762527845,38.2030730706797,0 -122.727992434513,38.2030600883019,0 -122.728248732222,38.2029570417259,0 -122.728422429928,38.2028943586412,0 -122.728442434166,38.2028898989574,0 -122.728624218629,38.202764146729,0 -122.728671828979,38.2027349475794,0 -122.728719376871,38.2027057866929,0 -122.728780780294,38.2026736905929,0 -122.728822370384,38.2026519510592,0 -122.728864938303,38.20263837362081,0 -122.728906813075,38.202625017248,0 -122.728934576568,38.2026161617962,0 -122.728945896474,38.2026135679852,0 -122.729016267438,38.2025974433541,0 -122.729051389066,38.2025893956517,0 -122.729173471523,38.2025851729409,0 -122.729203259663,38.2025897487171,0 -122.729235568214,38.20259471164611,0 -122.729292614951,38.2026034745941,0 -122.729295815276,38.2026042240502,0 -122.72938960391,38.2026261875423,0 -122.729409226559,38.2026307827775,0 -122.729429730019,38.2026395897034,0 -122.729489584399,38.2026652991409,0 -122.729514706919,38.2026760900801,0 -122.729573346509,38.2027205945121,0 -122.729604042518,38.2027438911706,0 -122.729609786371,38.2027465460376,0 -122.729640387222,38.2027606900517,0 -122.729702027876,38.20278918092761,0 -122.729851010003,38.2029081752983,0 -122.729871776885,38.2029247620887,0 -122.729933337178,38.20299024857001,0 -122.729943947598,38.2030015356855,0 -122.729946071446,38.2030060448043,0 -122.730111809172,38.2033579189704,0 -122.730310754852,38.2038991306118,0 -122.730455363125,38.2041743468779,0 -122.730550819113,38.2042286425971,0 contacts #khStyle84754 1 -122.842094771027,38.2095402813288,0 -122.842376373659,38.2094718488968,0 -122.842569135895,38.2093053796684,0 -122.8421106228,38.2085657339212,0 -122.841612354425,38.2075646701683,0 -122.841472959572,38.2073211409113,0 -122.841297130974,38.2070910835985,0 -122.841049778986,38.206595054639,0 -122.840620547909,38.2058644573722,0 -122.840511523043,38.2056119581517,0 -122.840157217862,38.2045750352111,0 -122.839780872171,38.2038264802026,0 -122.839607477447,38.2033080217411,0 -122.839490956031,38.2030600183917,0 -122.839040689859,38.202333888773,0 -122.838462152054,38.2016751718607,0 -122.838250255118,38.2014630824467,0 -122.837763540831,38.20108838457101,0 -122.837500508578,38.2009212850336,0 -122.836348961487,38.2003473715279,0 -122.835529501878,38.1998685508881,0 -122.834360433444,38.1993216325944,0 -122.833394529468,38.1990588871591,0 -122.832780465851,38.1988281843163,0 -122.831810604946,38.1985834452109,0 -122.831489908979,38.1986685982325,0 -122.83059956001,38.1990728652141,0 -122.830298047344,38.1991940932598,0 -122.829979812315,38.1992927635662,0 -122.829682560537,38.1994230109427,0 -122.829408799278,38.1995803256054,0 -122.829161386987,38.1997647182204,0 -122.828950311497,38.1999762015746,0 -122.828774527754,38.2002057617528,0 -122.828334564653,38.2006151804328,0 -122.828141306375,38.2008356991402,0 -122.827706327296,38.2012451228308,0 -122.827530525899,38.2014791842329,0 -122.827318738716,38.201686160438,0 -122.826299110864,38.2023966254339,0 -122.826003621599,38.2025268640426,0 -122.825688211514,38.2026300364056,0 -122.825391640374,38.2027647770853,0 -122.825149916631,38.2029491697853,0 -122.824237006354,38.2040878711315,0 -122.824094729006,38.2043264875183,0 -122.82410730361,38.2045878687661,0 -122.82416371375,38.2048763540762,0 contacts #khStyle84754 1 -122.720088729567,38.2014822229102,0 -122.720071468658,38.2014361777139,0 -122.72004138783,38.2013559339626,0 -122.71999803064,38.2011215042582,0 -122.719969352399,38.2009682224937,0 -122.719935408027,38.2007765754885,0 -122.719919047885,38.20068420717761,0 -122.719973587715,38.2004229748574,0 -122.720049022478,38.20029698054,0 -122.720187133986,38.2002071866286,0 -122.720367377234,38.2001129872882,0 -122.720450104567,38.1999464538135,0 -122.720455619464,38.199811279123,0 -122.720399309678,38.1996038560474,0 -122.720411594413,38.199378572299,0 -122.720529020762,38.199284222126,0 -122.720674595748,38.1991088264815,0 -122.720707596955,38.1988790860181,0 -122.720658828206,38.1987527938477,0 -122.720629383896,38.1986130291402,0 -122.720628681358,38.1984237643442,0 -122.720655275526,38.1981895022597,0 -122.720723672455,38.1980364530108,0 -122.720835219972,38.1981719079453,0 -122.720850964446,38.19834768994941,0 -122.720886729739,38.1985145073199,0 -122.720963981586,38.1986588925922,0 -122.720978436805,38.1987986213661,0 -122.721070403118,38.1990151419844,0 -122.721161286985,38.1991415346532,0 -122.721141480168,38.19928118149651,0 -122.721073117407,38.1994252185092,0 -122.721003937127,38.1995962911057,0 -122.721019647807,38.1997810854921,0 -122.721146678252,38.19997515854911,0 contacts #khStyle84754 1 -122.709929866643,38.1972620772722,0 -122.709990260701,38.1972853292968,0 -122.710130134952,38.19733918143061,0 -122.710297498073,38.1974342286138,0 -122.710534205994,38.1975024100184,0 -122.710763259249,38.1975210030671,0 -122.711083284494,38.1974587081996,0 -122.711326666932,38.1974638168354,0 -122.71152884697,38.1975995047735,0 -122.711738414909,38.1976721229162,0 -122.711953406807,38.1976366037357,0 -122.712134761685,38.1976235325012,0 -122.712509104926,38.1975433426843,0 -122.712531360027,38.19769210423711,0 -122.712462090548,38.19788119665,0 -122.712442285368,38.1980163357621,0 -122.712436382882,38.198246140672,0 -122.712500698541,38.198408524656,0 -122.712702972076,38.1985216794728,0 -122.71286962742,38.1986167212403,0 -122.713064528937,38.1986081881759,0 -122.713391051979,38.1985278779603,0 -122.71356457477,38.1985102790208,0 -122.713745878477,38.1985107239694,0 -122.713932751159,38.198547232402,0 -122.714004710116,38.19876370946411,0 -122.71400520128,38.1990025426321,0 -122.714229720099,38.1992689622918,0 -122.714383442439,38.1993865015444,0 -122.714543765864,38.1994589941141,0 -122.714669703611,38.1995629462192,0 -122.714905972865,38.19956352379001,0 -122.715086600586,38.1995549524957,0 -122.715488823997,38.1994658087728,0 -122.715649429784,38.1994662003117,0 -122.7158998695,38.1994938479969,0 -122.715964018386,38.1997012922924,0 -122.715930288202,38.1999310295832,0 -122.716028390165,38.2000349124496,0 -122.716257452744,38.2000534948143,0 -122.716473561761,38.2000990828302,0 -122.716611729758,38.1999957744783,0 -122.716687866118,38.1998742902896,0 -122.716763358421,38.1997347794321,0 -122.716860404535,38.1995592707265,0 -122.717018627411,38.1994379854984,0 -122.717205940924,38.1993618332065,0 -122.717400044951,38.1991910655264,0 -122.71766338661,38.1990204650967,0 -122.717761402628,38.1991468776447,0 -122.717657830312,38.1993494089009,0 -122.717575863513,38.1995024234643,0 -122.717472552036,38.1996373612243,0 -122.717341314398,38.19979476254921,0 -122.717342008481,38.199984027282,0 -122.717502266318,38.2000745407065,0 -122.717628678849,38.20024157846801,0 -122.717664577297,38.2003723469724,0 -122.717735173678,38.2005752996215,0 -122.717819802663,38.2008413738387,0 -122.717953372836,38.2010039222829,0 -122.718030638925,38.2011438031889,0 -122.718052018178,38.2013376241331,0 -122.718061071375,38.2013962274194,0 contacts #khStyle84754 1 -122.947706995126,38.196860219022,0 -122.947929640433,38.1969414343919,0 -122.948060242809,38.1969730372239,0 -122.948270101271,38.19696862829281,0 -122.948575151604,38.1971039530787,0 -122.948703967108,38.1971400616804,0 -122.948845663839,38.19712660823591,0 -122.948913467034,38.1971356514347,0 -122.949042989058,38.1971807724897,0 -122.949109010737,38.1971898105745,0 -122.949350298403,38.1971538732457,0 -122.949802506867,38.1971270377389,0 -122.949941706483,38.1971135818621,0 -122.950073778811,38.1970820955557,0 -122.950763882315,38.1967579507674,0 contacts #khStyle84754 1 -122.871897346042,38.19436279680691,0 -122.872240326056,38.1943541639254,0 -122.872572529868,38.1943860735997,0 -122.872886399322,38.1944945699138,0 -122.873219633704,38.1945490113167,0 -122.873559363221,38.1945629013447,0 -122.874234047206,38.1944644996238,0 -122.874541501676,38.1943611905974,0 -122.874777743078,38.1941631728521,0 -122.87494803836,38.1939200205008,0 -122.874980241237,38.1936631986529,0 -122.874762544596,38.1934556762296,0 -122.874489465142,38.1932886486763,0 -122.874183473719,38.1931666474106,0 -122.873862796482,38.1930761721991,0 -122.873527409561,38.193030744878,0 -122.873186982451,38.193012344533,0 -122.872890994519,38.1928858456297,0 -122.872620774521,38.1927188168326,0 -122.872375575854,38.1925292847008,0 -122.872092146263,38.1923667474032,0 -122.871782887233,38.1922807843407,0 -122.871468285201,38.1923930907679,0 -122.871247385221,38.19259112112011,0 -122.870988471002,38.1930955313378,0 -122.870886656305,38.1933522723331,0 -122.870833013214,38.1936180817293,0 -122.870864645512,38.1938929968527,0 -122.871018046162,38.194127492458,0 -122.871312637214,38.194235971483,0 -122.871897346042,38.19436279680691,0 contacts #khStyle84754 1 -122.944751541849,38.1921723431382,0 -122.944770158616,38.1925643935554,0 -122.944740103624,38.1926635165666,0 -122.944687259106,38.1926995408214,0 -122.944496266248,38.1927850651945,0 -122.9444305847,38.1928030580073,0 -122.944293531941,38.1928210156912,0 -122.944085130409,38.192802887942,0 -122.943606975041,38.1927260455281,0 -122.943475673121,38.1926899300192,0 -122.943360805175,38.1926312902378,0 -122.943162156971,38.1924644623324,0 -122.94312436116,38.1924193807783,0 -122.943121229626,38.1923202415117,0 -122.943184567946,38.1920994697497,0 -122.943435526793,38.1920004576342,0 -122.943708895159,38.1919960865139,0 -122.94394974231,38.1920502810794,0 -122.944276605338,38.1920909955918,0 -122.944544933081,38.1921452045528,0 -122.944751541849,38.1921723431382,0 contacts #khStyle84754 1 -122.915384206651,38.191952382001,0 -122.91541462225,38.1919876273491,0 -122.915648505835,38.1921815681382,0 -122.915915254291,38.1923484949679,0 -122.916211660769,38.1924838958584,0 -122.917166329232,38.1927729931095,0 -122.917502108925,38.1928092834293,0 -122.917841523507,38.1927869970895,0 -122.918156023218,38.192706109467,0 contacts #khStyle84754 1 -122.918023267207,38.1922388748164,0 -122.917842522049,38.1922192125396,0 -122.917308737065,38.1921332100429,0 -122.916769186588,38.1920967694782,0 -122.916224221203,38.1921143972604,0 -122.915384206651,38.191952382001,0 contacts #khStyle84754 1 -122.915384206651,38.191952382001,0 -122.915168828353,38.1919108404776,0 -122.914630745161,38.1918428475293,0 -122.914109851391,38.1917252964236,0 -122.913607218631,38.1915581881894,0 -122.913127114041,38.1913550449862,0 -122.910604312094,38.190560009564,0 -122.910111358622,38.1903703626248,0 -122.90968272711,38.1901131706978,0 -122.909330919456,38.1897794318801,0 -122.909099795584,38.1893962190085,0 -122.908611216171,38.1877240171144,0 -122.908687763326,38.1872959854341,0 -122.908691512782,38.186867895785,0 -122.908628175338,38.186439752715,0 -122.908693398082,38.18565121279,0 contacts #khStyle84754 1 -122.908693398082,38.18565121279,0 -122.90922237166,38.1855434827089,0 -122.909723928564,38.185386160049,0 -122.910199500872,38.1851747400429,0 -122.911736453672,38.1848424714324,0 -122.911959573484,38.1848035412856,0 contacts #khStyle84754 1 -122.964624799352,38.184060151874,0 -122.963964625567,38.1836796876074,0 contacts #khStyle84754 1 -122.873043636055,38.1812869315284,0 -122.873278402076,38.1815034911535,0 -122.873561933118,38.1815849130198,0 -122.874231602944,38.1814279254397,0 -122.874872405309,38.18124837238241,0 -122.876105608988,38.1807855519329,0 -122.877728023873,38.1804042573577,0 -122.877993781413,38.1802332997845,0 -122.878484312084,38.1798597988212,0 -122.878770716887,38.1797159010499,0 -122.879076348909,38.17959455102031,0 -122.87939904853,38.1795092725285,0 -122.880076586312,38.1795370145063,0 -122.880420210862,38.1795283586817,0 -122.8807286576,38.1794295418588,0 -122.881017559946,38.1792811338708,0 -122.881321405271,38.17915977826811,0 -122.881967499857,38.1789937098393,0 -122.882285583673,38.17889039146551,0 -122.88255665462,38.1787329489227,0 -122.882757534938,38.1785123463942,0 -122.882846799823,38.1782510746275,0 -122.882817608774,38.1779896824446,0 -122.882641724657,38.1777551787331,0 -122.882419414657,38.177547665129,0 -122.882151718401,38.1773851654843,0 -122.88086962055,38.1770188418858,0 -122.880562956668,38.176905868537,0 -122.880270257329,38.1767658711503,0 -122.879949273423,38.1766844242873,0 -122.879280092885,38.1765800822402,0 -122.877590563301,38.1764250900797,0 -122.877254553289,38.1763706576197,0 -122.876922429373,38.1763387608373,0 -122.876592272638,38.1764105067288,0 -122.876287362288,38.1765318489964,0 -122.876002741186,38.1766802500133,0 -122.875469116925,38.1770131387337,0 -122.875229024742,38.1772021435695,0 -122.875015303296,38.1774091974324,0 -122.87442508934,38.1780664708155,0 -122.874263054177,38.1783006193445,0 -122.874012423449,38.1788005409538,0 -122.873277616667,38.179700988061,0 -122.872987035809,38.1801873436462,0 -122.872887747908,38.180444089622,0 -122.872878008081,38.180709948794,0 -122.873043636055,38.1812869315284,0 contacts #khStyle84754 1 -122.899099692167,38.1730662531908,0 -122.899394963778,38.1734270122052,0 -122.89960706433,38.1738192415629,0 -122.89973956682,38.1742384385797,0 -122.9000537808,38.174581187355,0 -122.901106030698,38.1755689665981,0 -122.901177002305,38.1756218320594,0 -122.901899452851,38.1761599655044,0 -122.902265457034,38.1764757148965,0 -122.902429260731,38.1766633416699,0 -122.902572544465,38.176827463138,0 -122.903262780833,38.1774904649787,0 -122.904797573668,38.1787084342606,0 -122.905142171127,38.1790421816671,0 -122.906334920801,38.18047614688281,0 -122.906901674119,38.1812111256873,0 -122.907653471601,38.182351812472,0 -122.907852785203,38.1827530282184,0 -122.908162182795,38.1835779184173,0 -122.908281722723,38.1844251872773,0 -122.908766889376,38.1850970037735,0 contacts #khStyle84754 1 -122.938733675171,38.1738964768574,0 -122.938692679387,38.1738558992697,0 -122.938661677139,38.17381081975181,0 -122.938547729524,38.17354939620121,0 -122.93844153043,38.1734051377834,0 -122.938291179054,38.1731572140585,0 -122.938229945613,38.1729994621265,0 -122.938239314809,38.172891316623,0 -122.938299695272,38.1727922135422,0 -122.938391107761,38.1727021377527,0 -122.938448212954,38.1726751311237,0 -122.938514582616,38.172666154595,0 -122.93865620207,38.1726932689865,0 -122.938713976552,38.1727203378958,0 -122.938956412319,38.1729232500836,0 -122.939010618645,38.1729548221483,0 -122.939144737782,38.1729909444589,0 -122.939187873196,38.1730315230443,0 -122.939364583664,38.1733335371193,0 -122.939498628538,38.1734597823737,0 -122.93965587931,38.1735680168347,0 -122.939765295937,38.1737077685258,0 -122.93989791098,38.173838519873,0 -122.940023695817,38.1740323552849,0 -122.94035837087,38.1744516081427,0 -122.940664397227,38.1750060394779,0 -122.940735690046,38.1750871897289,0 -122.940742102457,38.17509620563101,0 -122.940771341214,38.175118751245,0 contacts #khStyle84754 1 -122.927540690167,38.1717088713758,0 -122.927505697661,38.1717358867922,0 -122.927379927836,38.1719205631023,0 -122.927333805038,38.1720196718395,0 -122.927338033279,38.1720737477867,0 -122.927363309008,38.1721278392502,0 -122.9274406367,38.1722225193267,0 -122.927546525379,38.1722946871698,0 -122.927750566602,38.1723308669691,0 -122.927921723904,38.1724256061857,0 -122.928130444355,38.1724212307258,0 -122.928336276103,38.1724483980765,0 -122.928545001027,38.1724395166531,0 -122.928801962131,38.1723540593416,0 -122.929002867926,38.17231362931751,0 -122.92912458068,38.1722596297991,0 -122.929231685481,38.17218759596251,0 -122.929322032757,38.1721020338406,0 -122.929434546675,38.1719669173755,0 -122.929693039859,38.1717733083825,0 -122.929724835289,38.1717282652296,0 -122.929723812006,38.1716786965814,0 -122.929646552714,38.1715164228205,0 -122.929573505196,38.1714217468425,0 -122.929516803715,38.1713946740749,0 -122.929379120664,38.1713630458419,0 -122.929317064054,38.1713404748848,0 -122.928895555379,38.1711419382373,0 -122.928830283651,38.1711238723415,0 -122.928763925705,38.1711238308474,0 -122.92842705343,38.1712047326509,0 -122.928200736237,38.1713307639298,0 -122.928004457787,38.17138471539061,0 -122.927770653093,38.1715062358797,0 -122.927664975286,38.1715782693003,0 -122.927540690167,38.1717088713758,0 contacts #khStyle84754 1 -122.899099692167,38.1730662531908,0 -122.89919565373,38.1729122595533,0 -122.899582414382,38.172291600727,0 -122.899871905093,38.17192684694831,0 -122.900345984816,38.1717199715655,0 -122.900458033061,38.17171260605851,0 -122.900887258435,38.1716843898669,0 -122.901433361487,38.1717704786292,0 -122.901767746431,38.1716608276253,0 -122.901913077297,38.1716131705494,0 -122.902937759729,38.1710552660952,0 -122.903154545798,38.17093033184391,0 contacts #khStyle84754 1 -122.626095351786,38.16655238926571,0 -122.626347446525,38.16623775787,0 -122.626397943873,38.1659900732506,0 contacts #khStyle84754 1 -122.897354796504,38.1702032372581,0 -122.897890427952,38.1701135893134,0 -122.898381575807,38.1699427870218,0 -122.89922038271,38.1693892565455,0 -122.899563697082,38.1690515881201,0 -122.89981502671,38.1686687759407,0 -122.899794836258,38.1682637345038,0 -122.899773019841,38.1678260695523,0 -122.900049667343,38.16744778516,0 -122.900200302308,38.1666052462641,0 -122.900478351452,38.1662404808004,0 -122.900934566637,38.1657632121138,0 -122.900958043218,38.1657482003452,0 contacts #khStyle84754 1 -122.82720387755,38.1673708089938,0 -122.826866576307,38.1674424066904,0 -122.826603659854,38.1675862135437,0 -122.82621718902,38.1680813246675,0 -122.826006273875,38.1681125535452,0 -122.825827833004,38.1678419070879,0 -122.825857004835,38.1675760818177,0 -122.82601845873,38.1673419982285,0 -122.826277184798,38.1671576285651,0 -122.827427999024,38.1665825439649,0 -122.827699500854,38.1664252280455,0 -122.828004228951,38.1659435106941,0 -122.828177088191,38.1657094410365,0 -122.828484467616,38.1656152627196,0 -122.829163568635,38.1655216341918,0 -122.829800069829,38.1653378129916,0 -122.830128797329,38.16526619432801,0 -122.830792606491,38.1651500034813,0 -122.831131569707,38.1651234600593,0 -122.832491053444,38.1651479679695,0 -122.83282735221,38.1651935125571,0 -122.833146790007,38.1652840991888,0 -122.833748746971,38.1655373157056,0 -122.834299563674,38.1658490369398,0 -122.835162985361,38.1662783647679,0 -122.835410505204,38.1664634742589,0 -122.835611219987,38.1666800599133,0 -122.835755858496,38.1669281109224,0 -122.83581161709,38.1671985662917,0 -122.835747515605,38.1674643464861,0 -122.835455784997,38.1675810943884,0 -122.835109023985,38.1675806013795,0 -122.834787467315,38.1674764992774,0 -122.83450597163,38.1673273904459,0 -122.833998057773,38.1669706687068,0 -122.833723720237,38.1668125556129,0 -122.833090253698,38.1666043567628,0 -122.832760661396,38.1665858541999,0 -122.832433682912,38.16667100273041,0 -122.831756200343,38.1666790337128,0 -122.831431001131,38.1667641799416,0 -122.831098402512,38.1668132640199,0 -122.830757676672,38.1668262869195,0 -122.83008392765,38.1667622127737,0 -122.829406304225,38.1668288109659,0 -122.829077233954,38.1668914144958,0 -122.82846876215,38.1671338542389,0 -122.828154590454,38.1672325277062,0 -122.82720387755,38.1673708089938,0 contacts #khStyle84754 1 -122.921619751728,38.1653556525566,0 -122.921361186793,38.1656168371777,0 -122.921077761055,38.1657743605196,0 -122.920949646272,38.1658148273982,0 -122.920672758526,38.1658642034346,0 -122.920606046548,38.1658641570637,0 -122.920542923905,38.1658460880096,0 -122.920119684691,38.1656475182233,0 -122.920007025319,38.16558435135481,0 -122.919662001111,38.1653092288405,0 -122.919616387642,38.16526413388001,0 -122.919589323924,38.165219051963,0 -122.919586887941,38.1651649748088,0 -122.919625534174,38.1650568532322,0 -122.919744128147,38.16491724279711,0 -122.919936346629,38.1646515078533,0 contacts #khStyle84754 1 -122.921619751728,38.1653556525566,0 -122.921744751579,38.1652250549964,0 -122.921797304049,38.1651214474923,0 -122.92183458049,38.1649592488307,0 -122.921821262571,38.1647384327314,0 -122.921794558692,38.164688846333,0 -122.92174858328,38.1646482592874,0 -122.921418105401,38.16444525035961,0 -122.921241617351,38.1643550029717,0 -122.921046546026,38.1642962875195,0 -122.920906720824,38.1642826708063,0 -122.920838226843,38.164282623326,0 -122.920448539172,38.1644040211329,0 -122.919936346629,38.1646515078533,0 contacts #khStyle84754 1 -122.626702375441,38.16421557389,0 -122.626797245186,38.1644997713286,0 -122.626896119169,38.1648380571994,0 -122.626842798237,38.1652209203167,0 -122.626770186747,38.1654685345567,0 contacts #khStyle84754 1 -122.915038544564,38.1638503637991,0 -122.917929935475,38.1638029081074,0 contacts #khStyle84754 1 -122.626095188924,38.1644300789032,0 -122.625282161708,38.1641569540421,0 -122.625283450678,38.1640442993269,0 -122.625283727466,38.1639902265687,0 -122.625769199991,38.1637889988069,0 contacts #khStyle84754 1 -122.626095255858,38.1638804916133,0 -122.625769199991,38.1637889988069,0 contacts #khStyle84754 1 -122.625769199991,38.1637889988069,0 -122.62582139769,38.16376663539301,0 -122.626095275221,38.16369665721621,0 contacts #khStyle84754 1 -122.917929935475,38.1638029081074,0 -122.917801555297,38.1637622602792,0 -122.917557666423,38.163658440995,0 -122.916922229713,38.1634326664008,0 -122.915929898579,38.1630353916489,0 -122.915611462117,38.1629270061055,0 -122.915315470064,38.1627960444034,0 -122.915295205563,38.1627870783292,0 contacts #khStyle84754 1 -122.897354796504,38.1702032372581,0 -122.896695746514,38.1695222023366,0 -122.896535803565,38.1692971389307,0 -122.896429777595,38.1691479438053,0 -122.895296252377,38.1682231344897,0 -122.894887820355,38.1679388676337,0 -122.893120508105,38.1669323431463,0 -122.892848482318,38.1665715893632,0 -122.89242835556,38.165764576851,0 -122.891551827792,38.1652905965085,0 -122.891360506275,38.164884852576,0 -122.8912554771,38.1640285638334,0 -122.891001334983,38.1636497973656,0 -122.890666163296,38.1633070034182,0 -122.889579230895,38.1623461314609,0 -122.889501181804,38.162287323742,0 contacts #khStyle84754 1 -122.889501181804,38.162287323742,0 -122.889178015938,38.1620438260966,0 -122.889046275171,38.1616471479737,0 -122.889047957395,38.1607774407116,0 -122.889103915827,38.1602500765232,0 contacts #khStyle84754 1 -122.630750079755,38.1549815389323,0 -122.630586303516,38.15534603023471,0 -122.630167183007,38.1557007031736,0 -122.629648219894,38.1557666538944,0 -122.629323794587,38.1557340803289,0 contacts #khStyle84754 1 -122.627140510496,38.1548168689357,0 -122.626636574705,38.154594451955,0 -122.62609512688,38.1542953064559,0 contacts #khStyle84754 1 -122.613556720484,38.1519157732607,0 -122.614034276417,38.1518542621556,0 -122.61536935056,38.1519127374424,0 -122.615564099583,38.1519133779281,0 contacts #khStyle84754 1 -122.610937183513,38.150595756844,0 -122.611248450502,38.1506824132376,0 -122.611525072174,38.1508455580023,0 -122.611974507689,38.1512436022513,0 -122.61255436983,38.151529422174,0 -122.61347960895,38.1519290383865,0 -122.613556720484,38.1519157732607,0 contacts #khStyle84754 1 -122.627377910703,38.1503609067692,0 -122.6274680476,38.1505910154438,0 -122.627490807022,38.1507443008383,0 -122.627529007041,38.1508075110676,0 -122.627635776022,38.1508529144152,0 -122.627826164855,38.1508670406919,0 -122.62819235486,38.1508186352936,0 -122.628413417495,38.1508328581693,0 -122.62856547101,38.1508108087121,0 -122.628748515343,38.1507257710572,0 -122.628977676093,38.15069044798641,0 -122.629411857402,38.1505971934132,0 -122.629732161478,38.150593703068,0 -122.629976517361,38.1506575631817,0 -122.630075141941,38.1507615196878,0 -122.630098179962,38.15086073169181,0 -122.630082631417,38.1509733395157,0 -122.629976308664,38.1511217106322,0 -122.629907857472,38.1512566836291,0 -122.629862144392,38.1514097517694,0 -122.629800668313,38.1515762899876,0 -122.629694432608,38.15170663581661,0 -122.629544707312,38.1518323342692,0 contacts #khStyle84754 1 -122.62609497238,38.1489102945126,0 -122.626575829509,38.1491596760591,0 -122.626788810578,38.149358632291,0 -122.626903289468,38.1495707938413,0 -122.627040388787,38.1498235832995,0 -122.627130359781,38.1499455399654,0 contacts #khStyle84754 1 -122.922371823389,38.1318836338067,0 -122.922522535958,38.1319963933032,0 -122.922647553099,38.1321316656381,0 -122.922790416496,38.1322489268042,0 -122.923029206554,38.1323617453951,0 -122.923312158568,38.132524163756,0 -122.923375970457,38.1325422299182,0 -122.923444071295,38.1325467831481,0 -122.923727556306,38.1325469736674,0 -122.923790650994,38.132565041221,0 -122.923947785858,38.1326778031645,0 -122.924011258198,38.1326778456085,0 -122.924151070503,38.1326463958552,0 -122.92436074088,38.1326465355693,0 -122.924491639599,38.1326150773811,0 -122.924916172155,38.1324215862495,0 -122.925002549251,38.132340533897,0 -122.925062204045,38.132236929159,0 -122.92524983384,38.1318224742581,0 -122.925287797507,38.1316602741316,0 -122.925290110008,38.1314935431892,0 -122.925264842531,38.1314439581957,0 -122.925077356255,38.1313717337292,0 -122.925011911598,38.131213970703,0 -122.924885104356,38.1310832049543,0 -122.924096009893,38.130735697764,0 -122.923769130613,38.1306408475011,0 -122.923631488977,38.1306452603786,0 -122.92329054895,38.1306991065927,0 -122.923081954803,38.1306989656715,0 -122.922755946766,38.1307933761996,0 -122.922581485123,38.1308833838194,0 -122.9224854819,38.13096442995491,0 -122.922273444065,38.1311805840517,0 -122.922240944915,38.1312301344227,0 -122.922184435766,38.1313878156584,0 -122.922176828719,38.1315004672081,0 -122.92219240093,38.1316086293488,0 -122.922234011123,38.1317123019271,0 -122.922371823389,38.1318836338067,0 contacts #khStyle84754 1 -122.582952135272,38.1280579870207,0 -122.582993579389,38.12779226216,0 -122.582980116079,38.1275263436695,0 -122.582919590564,38.127260255303,0 -122.582921437991,38.12680963273371,0 contacts #khStyle84754 1 -122.858553506297,38.12635661055911,0 -122.859013901207,38.1261273528527,0 -122.859328124762,38.1259075979226,0 -122.859419132402,38.1258439505477,0 -122.860120655217,38.1251868836992,0 -122.860507014557,38.1248854295506,0 -122.861793501121,38.1240938697309,0 -122.862323164918,38.1238118932899,0 contacts #khStyle84754 1 -122.91279738343,38.1220079484178,0 -122.912878924203,38.1220936297985,0 -122.913353903088,38.1223283182748,0 -122.913545997996,38.1223915525689,0 -122.913705953498,38.1224998212464,0 -122.913765822795,38.1225224012929,0 -122.91396685467,38.1225676163662,0 -122.914143588891,38.1226578739128,0 -122.914330327445,38.1227301155226,0 -122.914486008059,38.1228383841077,0 -122.91471510932,38.1229647306199,0 -122.915150118819,38.1232399397719,0 -122.915507889027,38.12340693836411,0 -122.915890890584,38.1236460535015,0 -122.91607120509,38.123727300211,0 -122.91629602985,38.1238581478155,0 -122.916589649607,38.1240070706484,0 -122.916914934859,38.1242145969386,0 -122.917166192561,38.1243049063072,0 -122.917284497085,38.1243635733775,0 -122.917505399948,38.1244989231549,0 -122.917650737267,38.1246161905225,0 -122.917830339107,38.1247019413517,0 -122.917876292336,38.1247380271461,0 -122.918226309185,38.1251528540199,0 -122.918295665127,38.1253061186189,0 -122.918399257606,38.1254503929779,0 -122.918469326133,38.1256036558759,0 -122.918683006621,38.1258246171949,0 -122.918877509655,38.1259824760066,0 -122.918914538941,38.1260275655581,0 -122.919072863403,38.1263341035771,0 -122.919255159302,38.1265685614956,0 -122.919280418367,38.1266181478433,0 -122.919310544219,38.1267803965982,0 -122.919384895609,38.1269336619363,0 -122.919418945539,38.1270959113334,0 -122.919377403495,38.1272581093033,0 -122.919364385027,38.1274248327286,0 -122.919312866968,38.1275825162363,0 -122.919140160164,38.12834395580601,0 -122.919101179091,38.1284475702218,0 -122.919003319791,38.1285917027418,0 -122.918968903937,38.1287584108679,0 -122.918903837734,38.1289115771624,0 -122.918869178075,38.1292990934532,0 -122.918845881124,38.1294072263074,0 -122.918773325033,38.1295603892771,0 -122.918758459157,38.1297811870319,0 -122.918707107922,38.1301056008192,0 -122.918740087176,38.1302678516585,0 -122.918744536936,38.1304345873986,0 -122.918764088096,38.1304886729138,0 -122.919175936426,38.1311243550798,0 -122.919339912002,38.1314894795421,0 -122.919347346326,38.1315390531994,0 -122.919334740279,38.1316517010414,0 -122.919344664273,38.1317057838228,0 -122.919410523308,38.1318049693245,0 -122.919451771009,38.1319086426454,0 -122.919505671723,38.1321790574011,0 -122.919528248899,38.1323998816048,0 -122.91956657637,38.1325621338156,0 -122.919564261073,38.1327243573104,0 -122.919463874327,38.1332154711914,0 -122.919291314356,38.1335127635017,0 -122.919193737259,38.1337199825413,0 -122.919123740078,38.1338145643512,0 -122.918992370563,38.1339451550812,0 -122.918965928112,38.1339947046479,0 -122.918941849874,38.1341614199749,0 -122.918870588013,38.1344317458012,0 -122.918873381153,38.1344858235183,0 -122.918952372923,38.1346390921994,0 -122.91898285999,38.1348013410593,0 -122.919111729079,38.1349952008219,0 -122.919231617801,38.1352521445055,0 -122.919495158866,38.1355587580156,0 -122.919538261294,38.1355993442054,0 -122.919591716859,38.1356309271666,0 -122.920190632211,38.1357845608151,0 -122.920506096245,38.1358974381364,0 -122.920706813049,38.1359426411695,0 -122.921087870838,38.1360780930717,0 -122.92195204049,38.1362904843043,0 -122.922157412152,38.1363176628057,0 -122.922357055605,38.1363673675313,0 -122.922701131735,38.1364081575092,0 -122.922834829266,38.1364352861093,0 -122.923534219185,38.1366836042408,0 -122.923647551806,38.1367467686799,0 -122.923858509785,38.1368911098421,0 -122.923916606512,38.1369181865661,0 -122.924111965789,38.1369769001384,0 -122.924717005711,38.1374324340826,0 -122.92489156656,38.1376037891871,0 -122.925191236067,38.1378338052554,0 -122.925323408589,38.1379600687339,0 -122.925435595468,38.1380998368194,0 -122.925641361192,38.1384469540179,0 -122.92568904068,38.1385506291809,0 -122.925715562814,38.1387714544389,0 -122.925873828509,38.1391906410047,0 -122.925946416156,38.1393484079472,0 -122.926076385144,38.1395422626138,0 -122.926094521922,38.1395918427116,0 -122.926109741018,38.139704509174,0 -122.926179839327,38.1398577669816,0 -122.926287570289,38.1401777834628,0 -122.926319089277,38.14039410439921,0 -122.926461479315,38.14064654754381,0 -122.926627423508,38.1408899952019,0 -122.926785699004,38.1413091782496,0 -122.926960498759,38.1416112119911,0 -122.926971500536,38.1416652946965,0 -122.926969552085,38.1418275182455,0 -122.927004696538,38.1419897656234,0 -122.926910103428,38.1424268130088,0 -122.926860074917,38.1425304247243,0 -122.926782595995,38.1426205008789,0 -122.9267322739,38.1426565188665,0 -122.926608111048,38.1427105143846,0 -122.92655850357,38.1427465306609,0 -122.926357844828,38.14297622119511,0 contacts #khStyle84754 1 -122.948343429385,38.15317705526,0 -122.948036937201,38.1528209198219,0 -122.947794666481,38.1524422821405,0 -122.94761055619,38.15203663353171,0 -122.946717874622,38.1504680369463,0 -122.945877314545,38.1493636025817,0 -122.94554801045,38.1490254743345,0 -122.944784145542,38.1484167572491,0 -122.943777011024,38.1474023505531,0 -122.941466283498,38.1455851511218,0 -122.940654312335,38.1450124316134,0 -122.939485627492,38.1441150647955,0 -122.939177429502,38.1437634106593,0 -122.938619917362,38.1430240817573,0 -122.93836668377,38.1426318988647,0 -122.938232935197,38.1422262619851,0 -122.938410542785,38.14179826378491,0 -122.938809460646,38.1415506360501,0 -122.938919206535,38.141541108472,0 -122.939376893861,38.141501373263,0 -122.94098439045,38.1417140200665,0 -122.943069362963,38.14212060392,0 -122.943092803102,38.1421251746701,0 -122.944701750802,38.1423377712036,0 -122.945243800924,38.1423740865848,0 -122.945785555527,38.1423292865917,0 -122.946308821387,38.1422078688018,0 -122.946802898104,38.1420098283949,0 -122.94710057561,38.1416674931041,0 -122.94724781357,38.1412439736914,0 -122.94730161802,38.1408159039618,0 -122.947294443035,38.1403832992853,0 -122.947230915909,38.1399596806134,0 -122.947104265175,38.1395405383958,0 -122.946938025135,38.1391303898203,0 -122.946344791722,38.13793144117871,0 -122.94539844559,38.1363853354939,0 -122.944758892035,38.1351998743307,0 -122.944574128725,38.134794219156,0 -122.94445891305,38.1343750792414,0 -122.944439991487,38.1339379617525,0 -122.944621437514,38.1335460058669,0 -122.945008926316,38.1332352636179,0 -122.945514682738,38.1330777907346,0 -122.945979975218,38.1329829350505,0 -122.946043934692,38.1329698959498,0 -122.948179408072,38.1326239206886,0 -122.948611774174,38.1323582500541,0 -122.948726627078,38.1321723759313,0 -122.948845601535,38.1319798305044,0 -122.948844842958,38.1315382156937,0 -122.94874530039,38.13111458073011,0 -122.948536268698,38.13072243925,0 -122.94820918202,38.1303753055201,0 -122.947954504721,38.1299966606208,0 -122.947558931848,38.1291988659329,0 -122.94726786312,38.1283695750929,0 -122.946827726901,38.1275852754766,0 -122.946683981839,38.1271706299614,0 -122.946676815058,38.1267335179347,0 -122.946814031949,38.12632351215701,0 -122.947128416423,38.1259631589953,0 -122.947584956465,38.1257470724352,0 -122.94785343061,38.1256668482827,0 -122.948608825223,38.1254411206708,0 -122.949220013008,38.1253041425035,0 -122.949652245455,38.1252072692192,0 -122.950112351165,38.1249731493735,0 -122.950837637709,38.1243380863841,0 -122.951271730869,38.1240679003387,0 -122.951617435086,38.1237435990573,0 -122.951822354735,38.1233426292916,0 -122.951820146091,38.1229100258501,0 -122.951630733634,38.1225133914928,0 -122.951255162496,38.1221932822569,0 -122.950938832369,38.1219673985904,0 -122.950289589394,38.1215037828473,0 -122.950219588325,38.1214537954483,0 contacts #khStyle84754 1 -122.863925749974,38.120931760947,0 -122.86374839212,38.1208606727568,0 -122.863564910739,38.12080856817091,0 contacts #khStyle84754 1 -122.863564910739,38.12080856817091,0 -122.863238476306,38.1207158672374,0 -122.86270671286,38.120625109101,0 -122.862636377234,38.120589783667,0 -122.862239040586,38.1203902234778,0 -122.861754409905,38.120263466902,0 -122.86121991801,38.1203650133608,0 -122.861212300405,38.1203664605863,0 -122.859582630802,38.1203689939881,0 -122.858484786719,38.1204262341235,0 -122.858437518287,38.120249792083,0 contacts #khStyle84754 1 -122.858437518287,38.120249792083,0 -122.858382138823,38.1200430723418,0 -122.85849246451,38.1195925773649,0 -122.858951418999,38.1187955237068,0 -122.859015314365,38.1183855281125,0 -122.858927562515,38.1182193472818,0 contacts #khStyle84754 1 -122.858553506297,38.12635661055911,0 -122.858095811746,38.1261127084072,0 -122.857753434816,38.1257923395814,0 -122.857587031905,38.1253730484609,0 -122.857624939445,38.124949503053,0 -122.85813114623,38.1237108939866,0 -122.858113412589,38.1232962924816,0 -122.857827851867,38.12291741160711,0 -122.857409078555,38.1226555292865,0 -122.856907077292,38.1224746556981,0 -122.856385024069,38.1223388180168,0 -122.855932683134,38.1221084327062,0 -122.855588578504,38.1217745361672,0 -122.855458224111,38.1213462741537,0 -122.855138671756,38.1210394448037,0 -122.854127005803,38.1206055652708,0 -122.854094881537,38.120267551828,0 -122.854333874338,38.1198487673983,0 -122.854303756973,38.1193980988751,0 -122.854027053897,38.1190642826019,0 -122.853502981766,38.1188833663004,0 -122.852938857899,38.1189412308367,0 -122.852488752928,38.1188550366463,0 -122.852265363041,38.1184311581451,0 -122.852281550544,38.1180075860387,0 -122.852421344814,38.1174579954154,0 contacts #khStyle84754 1 -122.858927562515,38.1182193472818,0 -122.858814331346,38.1180049135514,0 -122.858798635574,38.117975189269,0 -122.858370930559,38.1177358306416,0 -122.857345175771,38.1174101125028,0 -122.8568125804,38.1173959336841,0 -122.854465303372,38.1177074627321,0 -122.854121656428,38.1177530671736,0 -122.853586581752,38.1177298579927,0 -122.852421344814,38.1174579954154,0 contacts #khStyle84754 1 -122.740102027097,38.1168507004627,0 -122.740440593403,38.11688299738051,0 -122.740778217443,38.1168792424104,0 -122.741465827267,38.1168041604201,0 -122.741765297643,38.1167011759619,0 -122.741902375004,38.1164491248259,0 -122.741606039949,38.1163718619726,0 -122.741239973764,38.1163530254952,0 -122.740550373701,38.1163875455163,0 -122.740231125364,38.1163372664523,0 -122.739995859783,38.116129449802,0 -122.739702407487,38.1160431779393,0 -122.739352878619,38.1160874594801,0 -122.738363951492,38.1162835249071,0 -122.737773362698,38.11654356876231,0 -122.737440520551,38.1166059075483,0 -122.736769000435,38.1166674842206,0 -122.736713773542,38.1169557648856,0 -122.736992024267,38.11700596323081,0 -122.737362204671,38.116970745831,0 -122.738030987422,38.1168776140321,0 -122.738685735846,38.1167213578974,0 -122.739016634289,38.1167040769838,0 -122.739351535795,38.1167634070322,0 -122.740102027097,38.1168507004627,0 contacts #khStyle84754 1 -122.731682403618,38.11569154973711,0 -122.731654608664,38.1159798910796,0 -122.731479942892,38.1161687546613,0 -122.731121138746,38.116212992466,0 -122.730810290992,38.11610862869691,0 -122.730578961869,38.1159053118264,0 -122.730459772529,38.1156481770819,0 -122.730520317045,38.1153734296587,0 -122.730750852998,38.1152117324356,0 -122.731116176941,38.1152351072839,0 -122.731375516178,38.115384413294,0 -122.731682403618,38.11569154973711,0 contacts #khStyle84754 1 -122.849445616255,38.112596350762,0 -122.850351100186,38.1125448043395,0 contacts #khStyle84754 1 -122.850351100186,38.1125448043395,0 -122.850529099507,38.1125346705556,0 -122.850950636136,38.1125352157096,0 contacts #khStyle84754 1 -122.722333179355,38.1123124721682,0 -122.722581268009,38.1125068345126,0 -122.722899639125,38.1125932124512,0 -122.723246277036,38.1125579835965,0 -122.723356262145,38.1123194078661,0 -122.723256707477,38.1120623101373,0 -122.722985752521,38.1118814151091,0 -122.722079768355,38.1114556681099,0 -122.721806415433,38.1115316244002,0 -122.721714893954,38.1117882660733,0 -122.721907334137,38.1119915099543,0 -122.722333179355,38.1123124721682,0 contacts #khStyle84754 1 -122.871218863246,38.112667795451,0 -122.870251501999,38.1121890390012,0 -122.869194074723,38.1116470855065,0 -122.868415212143,38.1110288343122,0 -122.867735682487,38.1103127627586,0 contacts #khStyle84754 1 -122.895955727605,38.1099169897643,0 -122.895749997578,38.1099483459614,0 -122.895552087146,38.109997734275,0 -122.895343895146,38.1100065568857,0 -122.895138164607,38.1100379120129,0 -122.89507008386,38.110033344375,0 -122.894865514421,38.1100016134807,0 -122.894517599368,38.11000129362441,0 -122.894243770855,38.1100415971335,0 -122.894035582468,38.1100459121434,0 -122.89383269326,38.1100862802885,0 -122.8934152419,38.1100994106736,0 -122.893347163861,38.1100948420398,0 -122.893214608997,38.1100586678918,0 -122.892990935649,38.1099277765176,0 -122.892794605978,38.1098690116852,0 -122.892493596483,38.1097290343059,0 -122.892361020096,38.1097063792283,0 -122.892220922138,38.1097107528523,0 -122.89208542273,38.1097376633744,0 -122.892024068329,38.1097646436135,0 -122.891863146962,38.1098681366104,0 -122.891739721914,38.1099266014363,0 -122.891675181617,38.1099400563255,0 -122.891469187694,38.1099083202626,0 -122.8913903985,38.1099127530266,0 -122.891325139646,38.1099307165278,0 -122.891305473213,38.1099712538681,0 -122.891347470612,38.1102551897698,0 -122.89133669461,38.1103092555993,0 -122.891260625726,38.1104038154962,0 -122.891209240683,38.11043981744,0 -122.891021982357,38.11051174098,0 -122.890846106615,38.1106016983086,0 -122.890435003516,38.11065988963121,0 -122.890297780565,38.1106462383694,0 -122.890092150603,38.1106099928643,0 -122.889972447675,38.110560307316,0 -122.889832901241,38.1104339979982,0 -122.889761748318,38.1103392975879,0 -122.889673211992,38.1101905022621,0 -122.889651275649,38.1100823311542,0 -122.889656436571,38.1099696787293,0 -122.889700169936,38.10980749474301,0 -122.889671458443,38.1096993150161,0 -122.889673680906,38.1096452410999,0 -122.889702979975,38.1096002059051,0 -122.889837922105,38.1094696528681,0 -122.890040984291,38.1093166343791,0 -122.890448739312,38.1091097310492,0 -122.890825026316,38.1089658913725,0 -122.89102756083,38.108925528082,0 -122.891305249212,38.1089257917237,0 -122.891372996992,38.1089123358817,0 -122.891506361193,38.1088809188731,0 -122.891697179056,38.1088089979245,0 -122.891763852304,38.1088000482295,0 -122.892180904682,38.1088094540039,0 -122.89270647268,38.1089586553713,0 -122.892831525118,38.1090038357679,0 -122.89300463626,38.1090941242903,0 -122.893308008813,38.1093242293276,0 -122.893478976719,38.1094190225309,0 -122.893606889439,38.1094596952679,0 -122.893674604441,38.1094687708034,0 -122.894023205196,38.1094871191485,0 -122.89422998538,38.1094692849056,0 -122.894563037343,38.1093929852687,0 -122.895042236105,38.1093213239984,0 -122.895319580417,38.1093125651583,0 -122.895938512454,38.1092410278779,0 -122.896200618999,38.1091691664987,0 -122.896471962097,38.1091198414236,0 -122.896734785847,38.1090434721184,0 -122.896872057999,38.109021063129,0 -122.89700821519,38.1090301983807,0 -122.897073061372,38.1090527894356,0 -122.897185260669,38.1091159747767,0 -122.897269608525,38.1092106867147,0 -122.897290570719,38.1092602741742,0 -122.89729584087,38.1093143549365,0 -122.897269303789,38.1094269884763,0 -122.897187551309,38.1095125344143,0 -122.897080509582,38.109584539603,0 -122.896961365181,38.1096430137447,0 -122.896645366458,38.1097598936387,0 -122.896580106368,38.10977786005151,0 -122.896371552818,38.1097911894403,0 -122.896305587254,38.1098046497758,0 -122.895955727605,38.1099169897643,0 contacts #khStyle84754 1 -122.849445616255,38.112596350762,0 -122.847595975994,38.1104714503468,0 -122.846454333673,38.1095551558459,0 -122.846103539364,38.1092302341183,0 -122.845493609507,38.1085624848517,0 contacts #khStyle84754 1 -122.845677621316,38.1085221741586,0 -122.845493609507,38.1085624848517,0 contacts #khStyle84754 1 -122.841148729956,38.1090207411543,0 -122.840905109961,38.1089444448461,0 -122.840642892271,38.1088623234124,0 -122.840163523951,38.10866338324851,0 -122.839373431623,38.1082522126236,0 contacts #khStyle84754 1 -122.878076890318,38.1084213154313,0 -122.878265341554,38.1084936166663,0 -122.878469177572,38.1085298810348,0 -122.87860998098,38.1085300298494,0 -122.87874050767,38.1084941190171,0 -122.878794386492,38.1084626304161,0 -122.878884713793,38.1083771062094,0 -122.878976210532,38.1082284943794,0 -122.879023535968,38.1080663180038,0 -122.879010177955,38.1079536464392,0 -122.87898709805,38.1078995460309,0 -122.878947598583,38.1078589483966,0 -122.878888112766,38.1078318476626,0 -122.878748070055,38.1078046619248,0 -122.878678558755,38.1078045885584,0 -122.878475316332,38.1078404224479,0 -122.878295516473,38.10792585372721,0 -122.878088157729,38.108078847487,0 -122.878045663172,38.1081238658242,0 -122.878027756884,38.1081734176348,0 -122.878028380912,38.1082274923038,0 -122.878076890318,38.1084213154313,0 contacts #khStyle84754 1 -122.726591688339,38.1125162938013,0 -122.726255663519,38.112574090293,0 -122.725924492438,38.1125733134045,0 -122.724959799018,38.1123006630501,0 -122.724642903866,38.1122007782159,0 -122.724090090529,38.1118930424553,0 -122.72349720142,38.1116257654491,0 -122.723216861475,38.1114763922377,0 -122.722982319925,38.1112820654416,0 -122.722577559127,38.1108530028107,0 -122.722129214949,38.1104508711702,0 -122.721722325632,38.1100218025853,0 -122.721369032217,38.10956131273671,0 -122.721228798997,38.109317636279,0 -122.721121395751,38.1090650253138,0 -122.72096831398,38.1088258210651,0 -122.720775238931,38.1086045527623,0 -122.720536436991,38.1084102087355,0 -122.72034978084,38.10818895088631,0 -122.720225273362,38.1079362981035,0 -122.720163657648,38.1076432396215,0 -122.720330334313,38.1074949297476,0 -122.720707399099,38.1075138576001,0 -122.721043024474,38.1075552160629,0 -122.721694743533,38.1077144929004,0 -122.72195931499,38.1078818577392,0 -122.722180973217,38.1080851708508,0 -122.722569979925,38.10852771564701,0 -122.722798095128,38.1087220301815,0 -122.723307204708,38.1090792375877,0 -122.723585380762,38.1092331129222,0 -122.723888629067,38.1093555012544,0 -122.725137183273,38.1097775359893,0 -122.725716823652,38.1100582917219,0 -122.725987114876,38.1102256608963,0 -122.726374763121,38.1106591770808,0 -122.72682489973,38.1110657999718,0 -122.727004790381,38.1112915390799,0 -122.727259566282,38.1120852488099,0 -122.727071367212,38.1122695669312,0 -122.726591688339,38.1125162938013,0 contacts #khStyle84754 1 -122.851928614585,38.1075385971514,0 -122.851532638093,38.1074348193235,0 -122.851002768098,38.1073440099868,0 -122.850457086055,38.1073162661816,0 -122.849940008903,38.1074192401953,0 -122.847906196478,38.10803394320501,0 -122.845677621316,38.1085221741586,0 contacts #khStyle84754 1 -122.866977686351,38.1091886069957,0 -122.866470269462,38.108692326003,0 -122.866062274744,38.1084124629942,0 -122.865450212429,38.1080332186059,0 -122.864448989326,38.1074146804356,0 -122.863762504407,38.1071930605933,0 -122.863596455332,38.1071613207074,0 contacts #khStyle84754 1 -122.526297686975,38.1069535739286,0 -122.526097682146,38.1069233350798,0 -122.525714977056,38.1069037600127,0 -122.525089854327,38.1068877080155,0 -122.524687191912,38.1068680465489,0 -122.524283369697,38.1069159772119,0 -122.523921016232,38.1069460476642,0 -122.523677814689,38.107071235956,0 -122.523357252225,38.10681307114401,0 -122.5230965271,38.1066723139956,0 -122.522895101563,38.1066219246921,0 -122.522713636713,38.1065716143172,0 -122.522452005761,38.1065705474814,0 -122.522069183687,38.10656898542241,0 -122.521827193223,38.1066175681335,0 -122.521685305594,38.1067296459673,0 -122.52149961851,38.1068177580191,0 contacts #khStyle84754 1 -122.74569063863,38.1059847196181,0 -122.746005364083,38.1060935558248,0 -122.746333469356,38.1061483458822,0 -122.746676065599,38.1061355677227,0 -122.747047644412,38.1060913141101,0 -122.747258791085,38.1059520750042,0 -122.747153210289,38.1056634404679,0 -122.746869493504,38.1055546724867,0 -122.746175319475,38.1054990883835,0 -122.745497325768,38.1054029791446,0 -122.745345219325,38.1056820404733,0 -122.74569063863,38.1059847196181,0 contacts #khStyle84754 1 -122.519446791223,38.1064809261626,0 -122.519441455514,38.1062337775188,0 -122.519342615556,38.1058683594802,0 -122.519083494052,38.1054842598575,0 -122.518702153542,38.1052573781142,0 -122.518278913484,38.1052240942596,0 -122.5179158517,38.105254143306,0 -122.517492465695,38.1053515387759,0 -122.517128573891,38.10550775733,0 -122.516906129125,38.1056194992498,0 -122.51664349099,38.1056634766145,0 -122.516382160039,38.1056173362339,0 -122.516141355948,38.1054856586347,0 -122.515718321068,38.1054208209923,0 -122.515254623728,38.1054684708861,0 -122.514871064036,38.1055795418253,0 -122.514627851902,38.1057047092373,0 -122.514433354268,38.1058719201851,0 contacts #khStyle84754 1 -122.741777375052,38.1028892833036,0 -122.741461227489,38.1027849379292,0 -122.741133512626,38.1027256298117,0 -122.74045322397,38.1026835629075,0 -122.740123744463,38.1026197406268,0 -122.739809722169,38.1025199008692,0 -122.738890681419,38.1021618483251,0 -122.738619384393,38.1019764808438,0 -122.738471897534,38.1017553391498,0 -122.738791257046,38.101656915969,0 -122.739118234821,38.1017207363948,0 -122.739440841293,38.1018115823142,0 -122.740120067116,38.10184914737511,0 -122.740456039135,38.1018904532701,0 -122.740782628953,38.1019632788588,0 -122.742384966812,38.1024219668856,0 -122.742692821027,38.102553329757,0 -122.742917731296,38.1027566111908,0 -122.742655742581,38.1028596794902,0 -122.742287048174,38.1028994224064,0 -122.741777375052,38.1028892833036,0 contacts #khStyle84754 1 -122.730876255608,38.1015057544643,0 -122.731111608928,38.1016439871796,0 -122.731353997431,38.1018338128797,0 -122.731637172285,38.1019831713014,0 -122.731954033275,38.10208303939771,0 -122.732311335268,38.1021379356118,0 -122.732562094576,38.1019898009126,0 -122.732495876384,38.1017733452985,0 -122.732146208028,38.101677910827,0 -122.731856603517,38.1015330420868,0 -122.731588095952,38.1013701977265,0 -122.731345349845,38.1011803737717,0 -122.731065728545,38.1010355260466,0 -122.730857928452,38.1009659757381,0 contacts #khStyle84754 1 -122.952434341029,38.1094815720689,0 -122.952981887181,38.1094682862717,0 -122.953263409848,38.1094188182672,0 -122.953519147444,38.1093738804678,0 -122.953994452156,38.1091667893828,0 -122.954175788256,38.1087703112581,0 -122.954141840738,38.1083376937156,0 -122.953668968223,38.1075353781041,0 -122.953614761009,38.1072786694901,0 -122.953583320563,38.107129776416,0 -122.953740625185,38.1068729840373,0 -122.953842734942,38.1067062935905,0 -122.954261534014,38.1067650488784,0 -122.95469085029,38.1071077030929,0 -122.954832850332,38.107303567163,0 -122.954988238559,38.1075178964693,0 -122.955315571569,38.1073512964084,0 -122.955320109792,38.1069277072312,0 -122.9550401772,38.1065355468901,0 -122.954966656493,38.1061074196523,0 -122.955029376225,38.1058841742327,0 -122.955083116743,38.1056928884232,0 -122.955309348155,38.1053009328736,0 -122.955105262538,38.1046185536815,0 -122.955035114317,38.1043840035567,0 -122.954931938652,38.10403901885771,0 -122.955398634159,38.10327764489671,0 -122.955523650223,38.1028495976385,0 -122.956307676099,38.1025822658276,0 -122.956500488459,38.1025165208819,0 -122.956610702541,38.1024342695279,0 -122.956898803803,38.1022192618926,0 -122.957104607969,38.1013766656578,0 -122.957393903003,38.100984730417,0 -122.957852980037,38.1009894131598,0 -122.958015236648,38.1010408200479,0 -122.958339207477,38.10114346109071,0 -122.958935259042,38.1013323001587,0 -122.958993560873,38.1009718186273,0 -122.958911689806,38.1006461978892,0 -122.958877982185,38.100512133784,0 -122.958797588179,38.1003242395588,0 -122.958702497543,38.1001019955302,0 -122.958553414788,38.0998292759238,0 contacts #khStyle84754 1 -122.719076963254,38.0978528639651,0 -122.719416755381,38.0979122625758,0 -122.719719169706,38.0980526852978,0 -122.719845954578,38.0982647881302,0 -122.7195078146,38.0983315711732,0 -122.719157922792,38.0983036921282,0 -122.718836817486,38.0982037793163,0 -122.718259792249,38.0979229956317,0 -122.716974507172,38.0975683951737,0 -122.716674150512,38.0974505012182,0 -122.715514656496,38.0968303146491,0 -122.715600893483,38.0966502695521,0 -122.715927956431,38.0964978506625,0 -122.716256179341,38.0964130282886,0 -122.71657888858,38.096463380848,0 -122.716872009369,38.09660829368621,0 -122.717362402565,38.0969835095959,0 -122.717912209947,38.097295775571,0 -122.719076963254,38.0978528639651,0 contacts #khStyle84754 1 -122.603806273247,38.0943060735538,0 -122.603755954927,38.0943325019157,0 -122.603576101471,38.0944269648383,0 -122.603511196858,38.0945664410954,0 -122.603493551978,38.0945971133787,0 -122.603402700326,38.0947550413285,0 -122.603389592666,38.0947778263866,0 -122.60332476043,38.0949037837932,0 -122.603281287199,38.0950343199062,0 -122.60328053204,38.0950755473907,0 -122.603278527021,38.0951850100135,0 -122.603277242887,38.0952551162353,0 -122.603289342578,38.0953903470754,0 -122.60333560757,38.0955347063903,0 -122.603350738978,38.0955735525659,0 -122.603409428207,38.0957242223527,0 -122.603503847245,38.095927327045,0 -122.603639925276,38.09607199053251,0 -122.603709485884,38.0961864363365,0 -122.603782645401,38.0963068028839,0 -122.603960439514,38.0965146958169,0 -122.604133115395,38.096614419328,0 -122.604157877212,38.0967812371742,0 -122.603938860011,38.0969472300951,0 -122.60381110532,38.0971090253244,0 -122.603633971702,38.0973067037537,0 -122.603540114197,38.09752719573,0 -122.603537593426,38.097729971836,0 -122.603541731329,38.097887707244,0 -122.603636372421,38.0980502555888,0 -122.603739122484,38.0981632617406,0 -122.603769228634,38.098193840641,0 -122.603930537376,38.0983576818176,0 -122.604102261649,38.0985024653824,0 -122.604274966635,38.098597682438,0 -122.604426433127,38.0986657894888,0 -122.604656528716,38.0986936051241,0 -122.604900531911,38.0986538723995,0 -122.605109703605,38.0985959963159,0 -122.605261134448,38.0985520019145,0 -122.605431694296,38.0985024497667,0 -122.605525264263,38.0987325878496,0 -122.605502343376,38.0988857256172,0 -122.60546193749,38.0992415890267,0 -122.605326122933,38.0994439155788,0 -122.605226167278,38.0996058060419,0 -122.605167531185,38.0997723421808,0 -122.605137456642,38.0999299620303,0 -122.605156747276,38.100032298805,0 -122.605179384106,38.1001523867871,0 -122.605182506164,38.1001689492219,0 -122.605209409741,38.1002182830986,0 -122.605283448122,38.1003540490747,0 -122.605392038002,38.1005752252188,0 -122.605597889779,38.1007381469547,0 -122.605707013719,38.1008601854845,0 -122.605809722427,38.1009822022979,0 -122.60585174805,38.1010558732515,0 -122.605897292363,38.1011357122899,0 -122.606034073255,38.1012848816055,0 -122.606130464188,38.1013888515671,0 -122.606364676684,38.1014835993971,0 -122.606400053406,38.1014979105601,0 -122.606551527798,38.1015660148861,0 -122.606829201038,38.1016300368504,0 -122.607063862482,38.1017389769417,0 -122.607201528518,38.1018566036055,0 -122.607199413542,38.1019981696886,0 -122.607199306944,38.1020053047986,0 -122.607148707706,38.1021358182658,0 -122.607001594206,38.1021848937474,0 -122.60684808895,38.102229441243,0 -122.606679685981,38.1022604194882,0 -122.606428374074,38.1023316755233,0 -122.606099166771,38.1024387193702,0 -122.605874555144,38.1025821652582,0 -122.605844601914,38.10271725401261,0 -122.605828047731,38.10287942582971,0 -122.60587444324,38.103001252817,0 -122.606039959782,38.1031099619896,0 -122.606281584158,38.1032504713222,0 -122.606433037851,38.103323082042,0 -122.60674459713,38.1034503066913,0 contacts #khStyle84754 1 -122.712516943988,38.0922393493987,0 -122.712399002051,38.0924560371604,0 -122.712452092813,38.0927310538844,0 -122.712655374409,38.0932407718293,0 -122.712655007315,38.0935156548283,0 -122.712748817201,38.0937682427727,0 -122.713040627861,38.09424212659081,0 -122.713213614263,38.0944813884165,0 -122.713478815899,38.0946532794648,0 -122.71380158598,38.094685616379,0 -122.713802572416,38.0944332636863,0 -122.713735254206,38.0941491979195,0 -122.713648602601,38.0938876176577,0 -122.713521984016,38.0936394595046,0 -122.713483823993,38.0933734905781,0 -122.713487019514,38.0931031177323,0 -122.713622712696,38.0923058306137,0 -122.713532697743,38.0921820197052,0 contacts #khStyle84754 1 -122.696839128388,38.09210576447261,0 -122.696551266884,38.09225372467971,0 -122.696233093443,38.0923204947788,0 -122.695546004355,38.0923141993384,0 -122.695215449431,38.092272781351,0 -122.694901569941,38.0921638092511,0 -122.694563287806,38.0920953309887,0 -122.694268674099,38.0919819022211,0 -122.694302401205,38.0917566736389,0 -122.694645576246,38.0916764560017,0 -122.695327183363,38.0916286658602,0 -122.696319455382,38.0914329679267,0 -122.696653602514,38.0914653814731,0 -122.696982473183,38.0915698803507,0 -122.697287614536,38.0917238880575,0 -122.697159285056,38.0919038086103,0 -122.696839128388,38.09210576447261,0 contacts #khStyle84754 1 -122.714056123089,38.0917806305352,0 -122.714393793444,38.0917939930116,0 -122.715407723328,38.09188208771531,0 -122.716764965037,38.0918493332504,0 -122.717784860014,38.0918698293431,0 -122.718103778739,38.091789484546,0 -122.71864052276,38.09159700526641,0 -122.718324471094,38.0914880904117,0 -122.717998132205,38.0914602668414,0 -122.717660126012,38.0915000067423,0 -122.716995539432,38.0913902474795,0 -122.716316384652,38.0913615597543,0 -122.714957169499,38.0913537457636,0 -122.714007009423,38.0914169257237,0 contacts #khStyle84754 1 -122.819226694743,38.0921754398351,0 -122.818139862696,38.0912589504238,0 contacts #khStyle84754 1 -122.591691804113,38.0880746887653,0 -122.591909408615,38.0880870129776,0 -122.592124524338,38.0881102945303,0 -122.592568560634,38.0882380184719,0 -122.5926575756,38.08825184732171,0 contacts #khStyle84754 1 -122.590654422347,38.088190782154,0 -122.590664425524,38.0881863108103,0 -122.590854359236,38.0881238866332,0 -122.590908626366,38.088106050961,0 -122.590949327354,38.0880926739746,0 -122.591169451762,38.088074430092,0 contacts #khStyle84754 1 -122.591169451762,38.088074430092,0 -122.591262361009,38.088066729659,0 -122.591485466732,38.0880630023002,0 -122.591691804113,38.0880746887653,0 contacts #khStyle84754 1 -122.694489533639,38.0870480303961,0 -122.694443769154,38.0870839618116,0 -122.69439886918,38.0870838444145,0 -122.694353104628,38.0871197757941,0 -122.694307490417,38.0871196564941,0 -122.694261725799,38.08715558783761,0 -122.694171211549,38.0871553510177,0 -122.693800991372,38.0872309890946,0 -122.693608292702,38.0872935734245,0 -122.693589685749,38.0874827905704,0 -122.693623780879,38.0875099182424,0 -122.693669395328,38.0875100378089,0 -122.693758897137,38.0875823744666,0 -122.694076772819,38.0875832069629,0 -122.694167588502,38.0875113425414,0 -122.694213202954,38.0875114618969,0 -122.694304729962,38.087439603426,0 -122.694375984359,38.08744429301431,0 -122.694595558074,38.0874313468077,0 -122.694953963438,38.0872835753833,0 -122.694986540614,38.0871619870491,0 -122.694987402219,38.0871259403407,0 -122.694852438352,38.0870174348643,0 -122.694580181881,38.0870167236962,0 -122.694535147808,38.08704814962531,0 -122.694489533639,38.0870480303961,0 contacts #khStyle84754 1 -122.682345860122,38.087114799133,0 -122.682445855928,38.08739446428501,0 -122.682356522045,38.0876150331368,0 -122.682024851515,38.0876727133041,0 -122.681769846234,38.0874737407681,0 -122.681682564806,38.0872211479529,0 -122.681707276974,38.0869463271043,0 -122.68178469253,38.0866806645745,0 -122.682004531809,38.086442425683,0 -122.682197422046,38.0865015321376,0 -122.682345860122,38.087114799133,0 contacts #khStyle84754 1 -122.851473428675,38.0869489982526,0 -122.851554854752,38.0870392304466,0 -122.851585043248,38.0870888382879,0 -122.851594911209,38.0871429273761,0 -122.851577943195,38.0872510561975,0 -122.851542798344,38.0873591637055,0 -122.851478452348,38.0874582187542,0 -122.851366755777,38.0875346840481,0 -122.851308293334,38.0875436213861,0 -122.851248113531,38.0875210129729,0 -122.851081209872,38.0874081373132,0 -122.85094212128,38.087286286747,0 -122.850815880941,38.0871554399076,0 -122.850713543184,38.0870111058345,0 -122.850664577607,38.0869073949584,0 -122.850618939277,38.0867451087627,0 -122.850628782385,38.0866369687353,0 -122.850683874493,38.0865333947356,0 -122.850787364859,38.0864614268749,0 -122.850918577279,38.0864255478033,0 -122.85105894937,38.0864392472986,0 -122.851181437915,38.0864889765658,0 -122.851396020369,38.0866379603123,0 -122.851437991535,38.0866785727517,0 -122.851468422986,38.0867822573275,0 -122.851473428675,38.0869489982526,0 contacts #khStyle84754 1 -122.692930654559,38.086404043017,0 -122.692408163251,38.0864206967408,0 -122.692268993248,38.0866366346373,0 -122.692322437542,38.0868080157541,0 -122.692485098671,38.0869391278679,0 -122.692705309816,38.0869442144918,0 -122.692980511915,38.0869224047822,0 -122.69311861296,38.0867920834518,0 -122.693175821845,38.0865759294126,0 -122.693177158644,38.0864272233593,0 -122.692930654559,38.086404043017,0 contacts #khStyle84754 1 -122.589962122137,38.0862375343778,0 -122.589738844194,38.0863534994663,0 -122.589697987785,38.08637258397421,0 -122.589355828779,38.0865324095115,0 -122.589344400343,38.0865368757447,0 contacts #khStyle84754 1 -122.68497947116,38.0865946827623,0 -122.684862383505,38.0871396360786,0 -122.68475007555,38.0874007012108,0 -122.684486682953,38.0873278884774,0 -122.684246038443,38.0871019217684,0 -122.684162370315,38.0868358224275,0 -122.684197706801,38.0865745478142,0 -122.684296469388,38.0863134465923,0 -122.68434404179,38.0860251687659,0 -122.684549325184,38.0858544825286,0 -122.684894792297,38.085900478113,0 -122.684965768438,38.0861349991539,0 -122.68497947116,38.0865946827623,0 contacts #khStyle84754 1 -122.853765999687,38.0867175987942,0 -122.853800867744,38.0867446812256,0 -122.853993027429,38.0867043686192,0 -122.854054364776,38.0866819155438,0 -122.854104316561,38.0866504331934,0 -122.854197990539,38.086497337442,0 -122.8542532996,38.08628110398071,0 -122.85425494113,38.0861729532893,0 -122.854213097237,38.086069255001,0 -122.853975023864,38.0857264718597,0 -122.853926624553,38.0856948670047,0 -122.853854316209,38.0856767498571,0 -122.853777696167,38.0856811579737,0 -122.853724911441,38.0857036238607,0 -122.853697025629,38.0857486521184,0 -122.853611303885,38.0860234284173,0 -122.85359254854,38.0861360626813,0 -122.853599816398,38.086244224687,0 -122.853733539657,38.0865553305528,0 -122.853765999687,38.0867175987942,0 contacts #khStyle84754 1 -122.692954203006,38.0854268972561,0 -122.692942554182,38.0854352114645,0 -122.692657562492,38.0855831698846,0 -122.692338589295,38.0856769657668,0 -122.691997165778,38.0856850793014,0 -122.691668893549,38.0856166190826,0 -122.691369416172,38.0854806371958,0 -122.691124292039,38.0852997364641,0 -122.690934864336,38.08509871892461,0 contacts #khStyle84754 1 -122.591498012546,38.08486409344351,0 -122.591432402998,38.08491739730001,0 -122.591226933916,38.0850834141802,0 -122.590979525677,38.085357436124,0 -122.590851963804,38.085483167576,0 -122.590660519737,38.085689789463,0 -122.590272153011,38.0860624561015,0 -122.590040484285,38.0861968348116,0 -122.589962122137,38.0862375343778,0 contacts #khStyle84754 1 -122.591621921488,38.0847733430525,0 -122.591587044982,38.0847917597009,0 -122.591498012546,38.08486409344351,0 contacts #khStyle84754 1 -122.691745169486,38.0842508787495,0 -122.691947389576,38.0843014979266,0 -122.692942241689,38.0844888764373,0 -122.693208767099,38.0846653242499,0 -122.693308017157,38.0848524624799,0 contacts #khStyle84754 1 -122.685590181312,38.0844558134608,0 -122.685861871376,38.0842537577334,0 -122.685858504469,38.0840419497342,0 -122.685579961682,38.0838474274232,0 -122.684913258553,38.083760012026,0 -122.684598696894,38.0836555179607,0 -122.682954887512,38.08324099357,0 -122.682858470715,38.08345253100021,0 -122.682979944026,38.0837097211679,0 -122.683437140088,38.0841210378311,0 -122.683690098342,38.0842974704452,0 -122.683982411312,38.0844379578498,0 -122.684305685002,38.0845064260247,0 -122.684989228677,38.0844902466035,0 -122.685590181312,38.0844558134608,0 contacts #khStyle84754 1 -122.593835459581,38.0830150757168,0 -122.593856789833,38.0830241624088,0 -122.593828738894,38.0830664902757,0 -122.593713772351,38.0832399701076,0 -122.59362826647,38.0833658506281,0 -122.593577072028,38.0834308579091,0 -122.593473183631,38.0835627761455,0 -122.593422995546,38.0836265051336,0 -122.593294703189,38.0837567430914,0 -122.593140016349,38.0838913954869,0 -122.5928642868,38.0841337786899,0 -122.592527514722,38.08433088538591,0 -122.592310334249,38.0844247620741,0 -122.592115349602,38.0845232987154,0 -122.592106644173,38.0845276980416,0 -122.592087006667,38.08453676127121,0 -122.59195159131,38.0845992588988,0 -122.591621921488,38.0847733430525,0 contacts #khStyle84754 1 -122.729685261511,38.0834801116849,0 -122.729451123738,38.0836778485713,0 -122.729185404482,38.0838394627432,0 -122.728569063452,38.0840903876634,0 -122.728254277852,38.0841257067897,0 -122.727615104018,38.0839034059039,0 -122.727360921454,38.0837405849492,0 -122.727248578757,38.083478952099,0 -122.727219295823,38.0832085045618,0 -122.727276572874,38.0829472656352,0 -122.727446349509,38.0827133338745,0 -122.727686870309,38.0825246286155,0 -122.727985267826,38.08239013434001,0 -122.728545124737,38.0820895097766,0 -122.72941967709,38.0816769553781,0 -122.729737894395,38.0815785515625,0 -122.730072705653,38.0815207438016,0 -122.730409796248,38.08152152238,0 -122.730747947893,38.0816214409405,0 -122.730908978043,38.0818245986074,0 -122.730879428725,38.0821084320842,0 -122.730808250025,38.0823741419352,0 -122.730654164742,38.08260811687681,0 -122.730411853145,38.08280133152621,0 -122.729685261511,38.0834801116849,0 contacts #khStyle84754 1 -122.691876288416,38.081209955648,0 -122.691919507726,38.08093067572411,0 -122.691725766979,38.0807363913497,0 -122.691409861282,38.0806138863766,0 -122.691081633725,38.0805409171925,0 -122.69075141645,38.080431890736,0 -122.6904493869,38.0803995476235,0 -122.69026025404,38.080633376599,0 -122.690432477946,38.0808591500544,0 -122.690698232131,38.0810446143566,0 -122.69100774597,38.0811625990015,0 -122.691338979329,38.0811995252395,0 -122.691876288416,38.081209955648,0 contacts #khStyle84754 1 -122.688997336154,38.0833469052187,0 -122.688598165208,38.0831885684189,0 -122.688041441988,38.0828806519287,0 -122.687529812696,38.08252778950211,0 -122.687068249574,38.0821345024654,0 -122.686872496792,38.0819131664575,0 -122.686704577618,38.0816828940472,0 -122.68657023041,38.0814346837715,0 -122.686482958811,38.0811775889276,0 -122.686441336723,38.0809116015962,0 -122.686438930283,38.080641214099,0 -122.686522714268,38.0803800705244,0 -122.686698296734,38.0801507165997,0 -122.686973453702,38.0799666929468,0 -122.687277158062,38.0799404695912,0 -122.687881006737,38.0802214773196,0 -122.688159019576,38.0803709248081,0 -122.688912136339,38.0809136957344,0 -122.689085049151,38.0811439804137,0 -122.689308803739,38.0816537937818,0 -122.689675361935,38.0821008965069,0 -122.689778322912,38.0823580327065,0 -122.689928400614,38.0825972661661,0 -122.69000797492,38.0827026585901,0 contacts #khStyle84754 1 -122.81867700551,38.0830402309292,0 -122.817076927297,38.08279887538121,0 -122.816560932708,38.0826628679854,0 -122.816146563437,38.0825055796336,0 -122.816072146352,38.0824773317985,0 -122.815611626652,38.0822467751826,0 -122.814605055229,38.0819342288064,0 -122.814145980365,38.0816991623654,0 -122.812625250247,38.0812415688524,0 -122.811029542476,38.0809866187069,0 -122.809948627409,38.0809127471658,0 -122.808792812127,38.080730589652,0 -122.808068320953,38.0802156670508,0 -122.806982076615,38.07987137847451,0 contacts #khStyle84754 1 -122.868614214411,38.07968760608251,0 -122.868773659859,38.0797914315102,0 -122.868963817738,38.07985924500031,0 -122.86907879667,38.0799224630569,0 -122.869182001414,38.07999468243,0 -122.869270575279,38.0800804031197,0 -122.869331927673,38.0802427020689,0 -122.869380340765,38.0802697952958,0 -122.869524256589,38.0802924895457,0 -122.869580862629,38.0803195919901,0 -122.869720675215,38.0804459288066,0 -122.869901901927,38.0805272465857,0 -122.870193675639,38.0807619054293,0 -122.870359547805,38.0808612327083,0 -122.870557395374,38.0810146700556,0 -122.870724694272,38.0811139984174,0 -122.871153080229,38.0814749866528,0 -122.8714552025,38.0817051464834,0 -122.871640924501,38.0818675832261,0 -122.872241619571,38.0823233923646,0 -122.872531974377,38.0825625490052,0 -122.872696297229,38.0827384783328,0 -122.872835897467,38.0829909871815,0 -122.873024359685,38.083221019102,0 -122.873156343672,38.0833473430666,0 -122.873374643432,38.0836314815954,0 -122.873635755319,38.0838886265301,0 -122.873745981893,38.08402844810581,0 -122.87379330315,38.0840690563164,0 -122.873910796322,38.0841277670042,0 -122.874005444505,38.084208985375,0 -122.874269295749,38.0845337304333,0 -122.874368365869,38.0847366219509,0 -122.874407131063,38.0847817279577,0 -122.874756122845,38.08512459038241,0 -122.874907733118,38.08523741358,0 -122.875059584241,38.0854223386095,0 -122.875459596486,38.0857292034906,0 -122.875598723004,38.085851024957,0 -122.875750927608,38.0860359494437,0 -122.875922755582,38.0862073747998,0 -122.876031566899,38.0863471884167,0 -122.876375930348,38.086694548287,0 -122.876479866049,38.086766759785,0 -122.87678325391,38.0869022744186,0 -122.87704866904,38.087154912932,0 -122.877360473129,38.0873760569276,0 -122.877495679442,38.087502379307,0 -122.877644329105,38.0876872974609,0 -122.877773114183,38.0878181179752,0 -122.878120838256,38.0880843596211,0 -122.878344994734,38.0882963951405,0 -122.878394468838,38.0883324984192,0 -122.878567861604,38.0884273144237,0 -122.87866644698,38.0885040277918,0 -122.878819379075,38.0886889468342,0 -122.879015483901,38.0888423677313,0 -122.879274138299,38.0890995013515,0 -122.879425758976,38.0892168238969,0 -122.879554557356,38.0893431371064,0 -122.879880161665,38.0896318830341,0 -122.880140247723,38.0898890161865,0 -122.880291878809,38.0900018322901,0 -122.880724170487,38.0904348883234,0 -122.881191203707,38.0907598282715,0 -122.881649189301,38.0911748840841,0 -122.882095529154,38.0915223297343,0 -122.882317925981,38.0917343556479,0 -122.88256887258,38.0919238775369,0 -122.882734075207,38.0920231862955,0 -122.883331703279,38.0924879447762,0 -122.883378323696,38.0925285504078,0 -122.883489293482,38.0926683590609,0 -122.883785441301,38.09289848032,0 -122.883912464799,38.0930292921181,0 -122.884107514672,38.0931872106418,0 -122.88421670513,38.093327016784,0 -122.884344085954,38.0934578284602,0 -122.884496442528,38.0935706439385,0 -122.884675573496,38.0936564396377,0 -122.88478405145,38.09379624661581,0 -122.884869449959,38.0938819520065,0 -122.885113632305,38.0940759689411,0 -122.885238512923,38.0942112824155,0 -122.885484479088,38.0944053003448,0 -122.885592361086,38.0944730022418,0 -122.886013673377,38.0946671938578,0 -122.886185665086,38.0947619970201,0 -122.886437706546,38.094947006247,0 -122.886602202603,38.0950508140655,0 -122.886748143581,38.095168123421,0 -122.886964619686,38.0953080307595,0 -122.887207739563,38.0955020422033,0 -122.887428865105,38.0956329426447,0 -122.887460507405,38.0956825446056,0 -122.887488133108,38.09579522940631,0 -122.88747120644,38.0959078704724,0 -122.887444759119,38.0959574132993,0 -122.887402995966,38.0959979304778,0 -122.887285284998,38.0960609015914,0 -122.88715050944,38.0960968197949,0 -122.887081004918,38.0961012587558,0 -122.887017941128,38.0960876765282,0 -122.886839878588,38.0959973760304,0 -122.886643228394,38.0959431055803,0 -122.886473726748,38.0958483055871,0 -122.885992930549,38.0956270184705,0 -122.88576824406,38.0954961117688,0 -122.885468009,38.095360621805,0 -122.885248323474,38.0952252137891,0 -122.884877281696,38.0950175498224,0 -122.884423082003,38.0948864120154,0 -122.884147500513,38.0947148947724,0 -122.883946016816,38.0945659804694,0 -122.883768666234,38.0944801812846,0 -122.88347608995,38.094241050998,0 -122.883256760085,38.094110142768,0 -122.88312510498,38.0939793255703,0 -122.882890318255,38.0937087071319,0 -122.882837986477,38.0936726049846,0 -122.882657434387,38.0935867987269,0 -122.88238685127,38.0934152823899,0 -122.882151465906,38.0932978757078,0 -122.881986617008,38.0931985686231,0 -122.881838905882,38.09308125144221,0 -122.881713311901,38.0929504388621,0 -122.881564887438,38.0928331205925,0 -122.881455349627,38.0926933136892,0 -122.881409439136,38.0926527080255,0 -122.881240673494,38.0925533958253,0 -122.88094560986,38.0923187597229,0 -122.880774337594,38.0922284569485,0 -122.880474132569,38.0920884487795,0 -122.880153559388,38.0919844694033,0 -122.879977296992,38.0918941581456,0 -122.879235903397,38.0913165713776,0 -122.879050506533,38.0911496421116,0 -122.878744511955,38.0908519019782,0 -122.878458025786,38.0906127632507,0 -122.878159408076,38.090382625744,0 -122.877776703889,38.0901433831737,0 -122.877275921725,38.0897643192956,0 -122.876871365514,38.08938535435221,0 -122.876623423477,38.0891192121211,0 -122.876401625363,38.0889882903107,0 -122.876054980939,38.0887175415663,0 -122.875943545389,38.08865433224331,0 -122.875761580283,38.0885730211107,0 -122.87561781512,38.0884511948942,0 -122.875287809244,38.0882480519855,0 -122.874943665609,38.0879772984147,0 -122.874612588645,38.0877786598182,0 -122.873987707283,38.0872597479206,0 -122.873823960848,38.0871559229782,0 -122.873625378304,38.087002490583,0 -122.873460199373,38.0869031688595,0 -122.87331500772,38.0867858455989,0 -122.872768586975,38.0864472658636,0 -122.872175352568,38.0859824554771,0 -122.872057999918,38.0858426329351,0 -122.871965847533,38.0857614137011,0 -122.871504598056,38.0854274302466,0 -122.871359409811,38.08531010242,0 -122.870883096148,38.0848364034385,0 -122.870733402033,38.0846514774688,0 -122.870580726798,38.0845386476435,0 -122.870496543069,38.0843853364956,0 -122.870353145309,38.0842680094067,0 -122.870314382883,38.0842229041486,0 -122.870163741661,38.0839703798603,0 -122.870124257314,38.0839297769359,0 -122.869953381818,38.0838349511572,0 -122.869833535808,38.0836996267045,0 -122.869567096203,38.0834424630127,0 -122.869457590016,38.0833026424812,0 -122.869326324022,38.0831763172492,0 -122.869103041988,38.0828966707485,0 -122.86901921357,38.0827478641976,0 -122.868978671311,38.0827027564523,0 -122.868874403768,38.0826260304222,0 -122.868800558751,38.08247272977701,0 -122.868765361134,38.0824276259561,0 -122.868627322421,38.0823057974963,0 -122.868565856357,38.08220658721481,0 -122.868397267578,38.0820306492644,0 -122.868329023934,38.0819359385076,0 -122.868240093183,38.0818502146332,0 -122.867987081007,38.0816606591438,0 -122.867507236532,38.0811914493514,0 -122.867405946701,38.0810471309746,0 -122.867191814917,38.0806413129782,0 -122.867020143481,38.0804022781851,0 -122.866940489725,38.08031205870191,0 -122.866788187775,38.0801992242348,0 -122.866679408535,38.0800594018361,0 -122.866417976327,38.0798022386459,0 -122.866305392671,38.0795993223233,0 -122.866263538086,38.0794956282508,0 -122.866246995132,38.0793829508708,0 -122.866251015284,38.079328879136,0 -122.866304643265,38.0792298014138,0 -122.866397088737,38.07914428892791,0 -122.86651549363,38.0790858447151,0 -122.866648110804,38.0790499476567,0 -122.866786014428,38.0790456021973,0 -122.867128325868,38.0791090853559,0 -122.867180289286,38.0791406910207,0 -122.867245308125,38.0792444115186,0 -122.867299072092,38.0792670043754,0 -122.86772166092,38.0792719988028,0 -122.867919677911,38.0793263007918,0 -122.868102689356,38.079403120212,0 -122.868393173318,38.0795566675311,0 -122.868614214411,38.07968760608251,0 contacts #khStyle84754 1 -122.695792821602,38.0793441087998,0 -122.69563725708,38.0794397983741,0 -122.695330315635,38.0795606722015,0 -122.695002256527,38.07961839859171,0 -122.694320048433,38.0796661856255,0 -122.6939859315,38.0796382730171,0 -122.693665636815,38.0795428009211,0 -122.693370435614,38.0794113426827,0 -122.693098883706,38.0792484000358,0 -122.692860944381,38.0790585088583,0 -122.692730283474,38.0789803106819,0 contacts #khStyle84754 1 -122.692535086434,38.07817775440701,0 -122.692812962189,38.0780940240703,0 -122.69314527414,38.0780408202686,0 -122.693484522544,38.0780326976037,0 -122.694164203001,38.0780750344389,0 -122.694481659568,38.0781659924294,0 -122.695482892614,38.0785155940349,0 -122.695808863674,38.0786155834019,0 -122.696017908345,38.0787725879063,0 contacts #khStyle84754 1 -122.932001200804,38.0831072800458,0 -122.931810941955,38.0830504840349,0 -122.931537306627,38.0830142673535,0 -122.931406560633,38.0829781391782,0 -122.930750927073,38.0825676638649,0 -122.930377622586,38.082423230863,0 -122.930322426686,38.0823871459902,0 -122.929832478213,38.08199930050541,0 -122.929706817382,38.0818685392157,0 -122.929597919815,38.0817242681536,0 -122.92933661894,38.08146724606171,0 -122.929167806899,38.0813725058369,0 -122.928875488467,38.08113799391411,0 -122.928768660325,38.0810658249489,0 -122.92829924362,38.0808311996593,0 -122.928135792819,38.0807274507329,0 -122.927998267544,38.0807093377115,0 -122.927875736345,38.0806596907067,0 -122.927266071496,38.0802897810661,0 -122.927061328058,38.0801454479184,0 -122.926871834149,38.0800732237934,0 -122.926693756728,38.0799874887652,0 -122.926366498297,38.0797844912172,0 -122.926191633761,38.0796942501114,0 -122.926044590405,38.079576990942,0 -122.925987968574,38.0795454083656,0 -122.925677379868,38.0794190288081,0 -122.925560211053,38.079360370184,0 -122.925452670018,38.0792927050877,0 -122.925214855771,38.079089761133,0 -122.925161802039,38.0790536773085,0 -122.924981228954,38.0789724433012,0 -122.924835258869,38.0788551812027,0 -122.924656831052,38.0787694428133,0 -122.9244937431,38.0786656889827,0 -122.924296397261,38.0786114808261,0 -122.92423727675,38.0785844031235,0 -122.924073117889,38.0784851553861,0 -122.92359660265,38.0782550116063,0 -122.923343813053,38.0780700811884,0 -122.922788115108,38.0778202091073,0 contacts #khStyle84754 1 -122.78482765381,38.0764118796191,0 -122.785004476812,38.0764168623125,0 -122.785331394407,38.0764760501682,0 -122.785933857554,38.076738532748,0 -122.786180621165,38.0769147363047,0 -122.786453545649,38.0774064326474,0 -122.786806022198,38.077866728871,0 -122.786946412822,38.0781103298492,0 -122.787038663418,38.078367362427,0 -122.787071740164,38.0786332969153,0 -122.787069527314,38.0789036740005,0 -122.786987019218,38.0797056530183,0 -122.78698710216,38.0807781647277,0 -122.787015902784,38.081044093359,0 -122.787149517119,38.0812921889206,0 -122.787248199682,38.0815447234517,0 -122.787260238761,38.0818151286555,0 -122.787187449052,38.082094388826,0 -122.786984525376,38.0822742694372,0 -122.786628189805,38.0822736141568,0 -122.786312753438,38.08217840015111,0 -122.785785328446,38.08183043413191,0 -122.784998405229,38.081238556223,0 contacts #khStyle84754 1 -122.806982076615,38.07987137847451,0 -122.807105425026,38.0794434810463,0 -122.807393890543,38.0790969725909,0 -122.807830724821,38.0788318241077,0 -122.807970397887,38.0784264845656,0 -122.807986696041,38.0782769473643,0 -122.808111330144,38.0771333961474,0 -122.808226092251,38.07671449584821,0 -122.808480062555,38.0763363830128,0 -122.808787417006,38.0759808895815,0 -122.809513388594,38.0752295263255,0 contacts #khStyle84754 1 -122.805895883539,38.079243179946,0 -122.806340883626,38.0789915697188,0 -122.80672365602,38.0786902840908,0 -122.807015374777,38.0783257565606,0 -122.807227703814,38.07793405801051,0 -122.807384861061,38.07748620961931,0 -122.807809291507,38.0762766885228,0 -122.807830417951,38.0762307428506,0 -122.807995635606,38.0758714262824,0 -122.808271314969,38.0755023625649,0 -122.808641412049,38.0751058708335,0 -122.809006288698,38.0747149664817,0 contacts #khStyle84754 1 -122.809513388594,38.0752295263255,0 -122.809429727443,38.0751446350875,0 -122.809006288698,38.0747149664817,0 contacts #khStyle84754 1 -122.805895883539,38.079243179946,0 -122.805319875346,38.0785121842526,0 -122.80426136906,38.0775370279498,0 -122.803343162132,38.0764719732077,0 -122.802352481827,38.0749426330095,0 -122.801533543862,38.0738191502465,0 -122.801165588107,38.0735210996131,0 -122.799956359186,38.0731179513321,0 contacts #khStyle84754 1 -122.81867700551,38.0830402309292,0 -122.818911724133,38.0826530532219,0 -122.819213364475,38.082293017718,0 -122.819603940753,38.0819917026524,0 -122.820117082672,38.0818392863244,0 -122.820644389846,38.0818671434455,0 -122.821120244948,38.0821224447054,0 -122.822000610559,38.0825947602741,0 -122.822382976292,38.0827061630647,0 -122.822513731336,38.0827442583649,0 -122.823046994634,38.0828171772304,0 -122.824141622453,38.0828368728885,0 -122.824655019982,38.0827249942429,0 -122.82511455457,38.0824868543259,0 -122.82551614332,38.0821900427179,0 -122.825820967087,38.0818254888275,0 -122.825960211589,38.081411115156,0 -122.825639207449,38.08109068105131,0 -122.825247653103,38.0807701393941,0 -122.825151610435,38.0806569216823,0 -122.824945270209,38.08041368074581,0 -122.824559380456,38.0801111706837,0 -122.824111352624,38.0798671472545,0 -122.823624369007,38.0796726324436,0 -122.823102250337,38.0795681887168,0 -122.822862549637,38.0795403710263,0 -122.821488917172,38.0793809486964,0 -122.820946662058,38.0793530721351,0 -122.818231838619,38.0793533429051,0 -122.817695743601,38.079284903912,0 -122.816124516906,38.0789399344206,0 -122.815629320008,38.0787633986728,0 -122.815175272894,38.0785193313789,0 -122.814903246587,38.0781583886785,0 -122.81457289569,38.0773331980401,0 -122.814466364503,38.0769094305207,0 -122.81442113083,38.0764812548757,0 -122.814566186703,38.0752016844079,0 -122.814742564271,38.074354773289,0 -122.814790323456,38.0739267465072,0 -122.814817826624,38.072633467854,0 -122.814752986262,38.0722097669757,0 -122.814598439824,38.0718819821091,0 -122.814561619955,38.07180388863871,0 -122.814265750527,38.0714429057037,0 -122.813884227485,38.0711403667774,0 -122.813419866734,38.0709097946358,0 -122.812901801907,38.0707827799088,0 -122.812359257564,38.0707548629571,0 -122.811816470149,38.0708215765278,0 -122.811697570025,38.0708635097633,0 -122.811320431704,38.0709965163345,0 -122.810914606753,38.0712797540133,0 -122.810661011246,38.0716623792877,0 -122.810535938798,38.0720812653603,0 -122.81050948124,38.0729419353531,0 -122.81055860916,38.07337011923891,0 -122.81066975616,38.0737893918689,0 -122.810706012243,38.0742355799658,0 -122.810576350412,38.0746364330004,0 -122.81017623826,38.0749061583424,0 -122.809513388594,38.0752295263255,0 contacts #khStyle84754 1 -122.809006288698,38.0747149664817,0 -122.809098311045,38.0738589115525,0 -122.809090521255,38.0734307952677,0 -122.809026081397,38.0730025854699,0 -122.808563016648,38.0713254569312,0 -122.808353936544,38.0707796248995,0 -122.80831602065,38.0706806393929,0 contacts #khStyle84754 1 -122.799956359186,38.0731179513321,0 -122.799961207295,38.0722572459309,0 -122.800022934151,38.0718337551491,0 -122.800022793404,38.0709730409421,0 -122.80030344882,38.0697027327639,0 -122.800502416541,38.0691006970597,0 -122.800718726828,38.06844617455191,0 contacts #khStyle84754 1 -122.69660069575,38.068964229616,0 -122.696667397033,38.0690192721014,0 -122.696971168615,38.0691372262927,0 -122.697600948334,38.0693371365818,0 -122.697911008549,38.069486648336,0 -122.698217424337,38.0694829323979,0 -122.698303837896,38.0692623431068,0 -122.698041013169,38.0690633851058,0 -122.697467912045,38.06876899059831,0 -122.696961539867,38.0684422424227,0 contacts #khStyle84754 1 -122.800718726828,38.06844617455191,0 -122.801184625121,38.0682216576817,0 -122.80168455104,38.0680602862779,0 -122.802223432456,38.0679846001168,0 -122.802700348094,38.0680612309221,0 -122.804349434907,38.06832619001121,0 -122.804675636006,38.0684161898457,0 -122.804858880902,38.06846674715071,0 -122.805326073263,38.06868834542521,0 -122.805748614997,38.0689549304505,0 -122.807364125572,38.0701067516127,0 -122.80831602065,38.0706806393929,0 contacts #khStyle84754 1 -122.80831602065,38.0706806393929,0 -122.808346052426,38.07065184303241,0 -122.808663196158,38.07034774376171,0 -122.808966249171,38.0699922424841,0 -122.809199195572,38.0696050803386,0 -122.809324271368,38.0691861955019,0 -122.809383459326,38.0687581892599,0 -122.809472372224,38.0675866831328,0 contacts #khStyle84754 1 -122.690512853967,38.0684037925686,0 -122.690792134032,38.0685802799692,0 -122.691104077142,38.0686171557968,0 -122.691413135651,38.06849179503101,0 -122.6915922557,38.068257937218,0 -122.691626861549,38.0679921521808,0 -122.691493947726,38.0677439507486,0 -122.690958220213,38.0673820282379,0 -122.690685085815,38.06726864492181,0 -122.690445495624,38.0674798103561,0 -122.690360334004,38.0677364483759,0 -122.69036418009,38.0680068402379,0 -122.690512853967,38.0684037925686,0 contacts #khStyle84754 1 -122.800718726828,38.06844617455191,0 -122.800863799942,38.068027332874,0 -122.80110636516,38.0676537221146,0 -122.801884668442,38.0670466982936,0 -122.802323539388,38.0667995988495,0 -122.802819939101,38.066620191167,0 -122.803330514028,38.0664678436325,0 -122.803859775177,38.0663876272948,0 -122.806033056552,38.0663507330072,0 -122.806989685167,38.0664525967164,0 -122.807107945695,38.0664651887706,0 -122.807632774355,38.0665787214587,0 -122.808140397818,38.0667327804835,0 -122.808611175316,38.0669453590021,0 -122.809472372224,38.0675866831328,0 contacts #khStyle84754 1 -122.865770676471,38.065209515026,0 -122.865652845036,38.0651287077405,0 -122.865529673585,38.0650789945627,0 -122.865326684537,38.0650381984075,0 -122.865188118114,38.0650290273865,0 -122.864982867842,38.0650558226198,0 -122.86478646421,38.0651141736055,0 -122.864544723333,38.0652220399631,0 -122.864223902633,38.0653253071116,0 -122.864042062383,38.065406207002,0 -122.863841050488,38.0654510328733,0 -122.86378256519,38.0654825071892,0 -122.863623474117,38.0655904716617,0 -122.863328581629,38.06573432348911,0 -122.863070857792,38.0658151316451,0 -122.862765291284,38.0659499586897,0 -122.862715348891,38.0659859480015,0 -122.862641781712,38.0660804930458,0 -122.862614504319,38.0661886135473,0 -122.862631036114,38.0663012917174,0 -122.862702475439,38.0663915046165,0 -122.862885282722,38.0665584577164,0 -122.863103412944,38.0666939068899,0 -122.863301918481,38.0668473599314,0 -122.86392721642,38.0671995970922,0 -122.864106978562,38.0672809224231,0 -122.864430274303,38.0673849497743,0 -122.86453738304,38.0674526727512,0 -122.864654486475,38.0675113925444,0 -122.864977781358,38.0676154183771,0 -122.865252048212,38.0676472880147,0 -122.865600120064,38.0676476955539,0 -122.865874858788,38.0676164687181,0 -122.866082933694,38.0676076986105,0 -122.866285714749,38.067571883715,0 -122.866586307802,38.0674280311263,0 -122.866640169797,38.0673920426332,0 -122.866677660085,38.0673470223681,0 -122.866696628386,38.0672974752782,0 -122.86670895104,38.0671848312,0 -122.866701061102,38.0670180871486,0 -122.866743396634,38.0668559066762,0 -122.866740485953,38.0666936758189,0 -122.866682026591,38.0665524334056,0 contacts #khStyle84754 1 -122.712921709379,38.0652975124223,0 -122.713034703172,38.0655546495702,0 -122.713065691059,38.06582961717141,0 -122.712987645674,38.0661088202636,0 -122.712775668629,38.0660181714313,0 -122.712579305685,38.0657608269383,0 -122.712477716079,38.0655037132268,0 -122.712355093873,38.0649761677651,0 -122.712232804521,38.0647280156624,0 -122.712175043889,38.0641961221965,0 -122.711716331214,38.0637984323405,0 -122.711545521936,38.0635681853923,0 -122.711431270662,38.0632704828663,0 -122.711518743633,38.063131001388,0 -122.711869451359,38.0632715640119,0 -122.71212382954,38.0634479395583,0 -122.712339596942,38.0636602686389,0 -122.712528254254,38.0638815455365,0 -122.71266908494,38.064125235505,0 -122.712756410255,38.0643868194019,0 -122.712812041161,38.0649187073401,0 -122.712921709379,38.0652975124223,0 contacts #khStyle84754 1 -122.72648015069,38.0637708350135,0 -122.72652794506,38.0640413290495,0 -122.726507003156,38.06430715471,0 -122.72637745618,38.0645592078786,0 -122.726114529269,38.0647523660835,0 -122.725819723838,38.0648012439758,0 -122.725567204736,38.0645933586213,0 -122.725498682539,38.0643408411419,0 -122.725521104061,38.0640614988854,0 -122.725489251971,38.063529672564,0 -122.725518052112,38.0632593580649,0 -122.72563758751,38.0627323926334,0 -122.725651069391,38.0624620441878,0 -122.725761481405,38.0621829083807,0 -122.725951997288,38.0620121120126,0 -122.726178858618,38.0622199364846,0 -122.726353933216,38.0624636925686,0 -122.72645630044,38.062716290981,0 -122.72640228605,38.06325241933,0 -122.72648015069,38.0637708350135,0 contacts #khStyle84754 1 -122.711726561482,38.0624645707389,0 -122.711703076109,38.0619147357714,0 -122.711656383855,38.0616487458995,0 -122.711322931102,38.061652428069,0 -122.711203095342,38.0618684372868,0 -122.711303895955,38.06214357590541,0 -122.711726561482,38.0624645707389,0 contacts #khStyle84754 1 -122.832699771068,38.0613768349738,0 -122.832804895877,38.0615166843559,0 -122.833005463074,38.0616701899023,0 -122.833284548292,38.0619139384417,0 -122.833449253089,38.0620178221663,0 -122.833557589149,38.0621576754848,0 -122.833690178456,38.0622840434367,0 -122.833912548593,38.0625637577059,0 -122.833957201031,38.062667469953,0 -122.834028903765,38.0629379522188,0 -122.834117625787,38.0630867895551,0 -122.83424593423,38.063217658133,0 -122.834306984914,38.0633168863472,0 -122.834364917127,38.0635332740406,0 -122.834406364482,38.063636979396,0 -122.834538804993,38.0638309429929,0 -122.834662909914,38.0640879839131,0 -122.834692243988,38.0641916717989,0 -122.834680467066,38.0643583902083,0 -122.834638540033,38.0644664813306,0 -122.834600683443,38.0645069856116,0 -122.834357621667,38.06470942126061,0 -122.834290076309,38.0648039594683,0 -122.834257770208,38.064912064264,0 -122.834264057744,38.0649661499362,0 -122.834304436081,38.0650698537641,0 -122.834459556864,38.0653179265925,0 -122.83449173165,38.0654261260159,0 -122.834485999701,38.0657550808488,0 -122.834402737535,38.0660253424748,0 -122.834369504248,38.0660703586447,0 -122.834217124369,38.0661827984586,0 -122.834144224087,38.0662818321108,0 -122.834088596617,38.0663042851368,0 -122.833667131831,38.0663081838528,0 -122.833460554148,38.0662853550897,0 -122.83327904757,38.0662039781099,0 -122.833082161582,38.0661496169254,0 -122.832959366311,38.066099870088,0 -122.832788222272,38.0660049892293,0 -122.832628865582,38.065896605001,0 -122.832546411563,38.0658108651207,0 -122.832500112353,38.065648570124,0 -122.832287934479,38.0654274501382,0 -122.832240068666,38.0653282400698,0 -122.832142514682,38.0648369051869,0 -122.832182347105,38.0643998466493,0 -122.832264182568,38.0641340918588,0 -122.832289857267,38.0639673938567,0 -122.832286941954,38.0635302731043,0 -122.832239346113,38.0633138993855,0 -122.832236877926,38.0631471604653,0 -122.832018498714,38.0626826879394,0 -122.831986221542,38.0624663363741,0 -122.831780266704,38.0621776295707,0 -122.831721491778,38.0620198213075,0 -122.831579567797,38.0617717660143,0 -122.83147660233,38.061622905907,0 -122.831462110707,38.0615733134073,0 -122.831485873061,38.0614651968341,0 -122.83155144066,38.0613030645873,0 -122.831592139863,38.0612625654134,0 -122.831646359728,38.0612310987277,0 -122.831840338685,38.0611502685727,0 contacts #khStyle84754 1 -122.832699771068,38.0613768349738,0 -122.832497166391,38.0613359846399,0 -122.832245871148,38.0612454918535,0 -122.831840338685,38.0611502685727,0 contacts #khStyle84754 1 -122.825294594247,38.0618705787808,0 -122.825498988035,38.061906938896,0 -122.825635145163,38.061875600838,0 -122.825694713522,38.0618441449632,0 -122.825735777216,38.061803650455,0 -122.825762267201,38.0617496137238,0 -122.825777130654,38.0616414848486,0 -122.825765159262,38.0615828826499,0 -122.825709822712,38.0614836606393,0 -122.82566574628,38.0614430355423,0 -122.825282661724,38.0611991136092,0 -122.825159880059,38.06114935854801,0 -122.82500851216,38.0611356111882,0 -122.824964646331,38.0611580756324,0 -122.824948491383,38.0612076204135,0 -122.82496873338,38.0613833993283,0 -122.825098857384,38.0616404597263,0 -122.825294594247,38.0618705787808,0 contacts #khStyle84754 1 -122.809472372224,38.0675866831328,0 -122.809664028762,38.0671814265114,0 -122.809728889781,38.0667624420097,0 -122.809622983716,38.0659781615777,0 -122.809849869196,38.0655864816057,0 -122.809985966431,38.0651721202907,0 -122.810032818948,38.0634552744823,0 -122.809918607099,38.0621662678519,0 -122.809817812575,38.0617470106088,0 -122.809619720543,38.0613456185831,0 -122.809313207063,38.0609936174746,0 -122.808925155124,38.0606279617828,0 contacts #khStyle84754 1 -122.82625201148,38.0610338405154,0 -122.826394223407,38.0610025106904,0 -122.82645198576,38.060980068697,0 -122.8264855799,38.0609350510611,0 -122.826505795567,38.0608224247824,0 -122.826491101455,38.0607097418561,0 -122.826433983659,38.0606105174964,0 -122.826325872014,38.0605337473412,0 -122.826263572196,38.0605156280642,0 -122.826116438337,38.0605199119658,0 -122.826055825711,38.0605423536989,0 -122.826016557193,38.0605783435872,0 -122.825976748077,38.0606909444635,0 -122.825969343012,38.0608080974031,0 -122.825984531357,38.0608621969946,0 -122.826020416967,38.0609028075396,0 -122.82625201148,38.0610338405154,0 contacts #khStyle84754 1 -122.673518665848,38.06904704787101,0 -122.673482546351,38.0693173305913,0 -122.673361024674,38.069564839656,0 -122.673115065073,38.0697534187465,0 -122.672776443623,38.0697885228217,0 -122.672457584336,38.0697065171763,0 -122.672201892053,38.069521039677,0 -122.67188191671,38.0690514795845,0 -122.671622665904,38.0688659908284,0 -122.671307987218,38.068806524718,0 -122.670962895593,38.068855125624,0 -122.670638326584,38.0689353249179,0 -122.670306753885,38.0689884673115,0 -122.669287597068,38.0690351589061,0 -122.668953067833,38.06911082002771,0 -122.668653518724,38.06901533640711,0 -122.668392116351,38.0688343439883,0 -122.668159320183,38.0686308970494,0 -122.66807208665,38.0683828010493,0 -122.668044809425,38.0681123421609,0 -122.6678605715,38.0678865015175,0 -122.667613446798,38.0677010383533,0 -122.667327684881,38.0675515159133,0 -122.666374923465,38.0672603948174,0 -122.666044517788,38.06721438789231,0 -122.665704520423,38.0672404549144,0 -122.665081377671,38.0674820152301,0 -122.664760329426,38.0675712232776,0 -122.664580232258,38.0673769330692,0 -122.66450313409,38.0670973176656,0 -122.664495106356,38.066826913143,0 -122.664423628156,38.0665653393584,0 -122.664222174069,38.0660555418323,0 -122.664162827106,38.0657894973407,0 -122.664141954559,38.0655235611983,0 -122.664203548137,38.06498748235481,0 -122.664271736857,38.0647218018628,0 -122.664482852363,38.0645196230414,0 -122.665022310009,38.0641876939661,0 -122.665304443647,38.0640352884202,0 -122.665604956342,38.0639144763617,0 -122.666919364547,38.0636343272114,0 -122.667227652292,38.0635270512674,0 -122.668039257913,38.0630381636188,0 -122.668616937609,38.0627559019923,0 -122.668923814281,38.0626441122228,0 -122.669587658787,38.06252882323321,0 -122.669905851721,38.0624350884495,0 -122.670506888721,38.06218442713501,0 -122.670782611251,38.0620274807345,0 -122.671032806608,38.0618434234903,0 -122.671237520747,38.0616322015701,0 -122.671366719856,38.0611008117584,0 -122.671493998315,38.0608398003021,0 -122.671792049195,38.0607865603264,0 -122.672134359517,38.0608731431018,0 -122.672629278837,38.0612485575036,0 -122.672916492765,38.0613890584478,0 -122.673248973348,38.0614440646455,0 -122.673588190196,38.0614269842257,0 -122.673914145713,38.0613467804626,0 -122.674212536997,38.0612169275695,0 -122.674798790639,38.0609211390214,0 -122.675084881436,38.0609940366179,0 -122.675379222793,38.0611345513621,0 -122.675723424892,38.0611174807118,0 -122.67604227297,38.0610327438773,0 -122.676332903793,38.0608848384861,0 -122.676603659172,38.06071885180831,0 -122.676897750281,38.0605934855267,0 -122.677232845213,38.0605403361838,0 -122.677910314844,38.060560227588,0 -122.678248256787,38.0605070831896,0 -122.678516813393,38.0603546041833,0 -122.678752770854,38.0601614805504,0 -122.67907380973,38.0600632212284,0 -122.679407992587,38.0600551250768,0 -122.679739662515,38.060132641658,0 -122.680044773415,38.060255148645,0 -122.680354992836,38.0603506304004,0 -122.6806969726,38.0603515647014,0 -122.681034122003,38.0603164336258,0 -122.681363570474,38.0602497368414,0 -122.682004137943,38.0600712266407,0 -122.682332892681,38.0600000177953,0 -122.682669961787,38.05998290740721,0 -122.683350297948,38.0599982698801,0 -122.684702862527,38.0600920528724,0 -122.685037482842,38.0601470315164,0 -122.685361227629,38.0602470439585,0 -122.685619865637,38.0604099679953,0 -122.685692843607,38.0606715333633,0 -122.685700926309,38.0609464445048,0 -122.685659890263,38.061212208693,0 -122.685382772112,38.061702657872,0 -122.685288336705,38.06195926539451,0 -122.685243022697,38.06222501997,0 -122.68523618085,38.0624908780897,0 -122.685257820429,38.06276131612,0 -122.685347203137,38.0630184204074,0 -122.685614418245,38.0635103335655,0 -122.685699510456,38.0637719313697,0 -122.685738981361,38.0640379118391,0 -122.68573283843,38.0643082771363,0 -122.685783037049,38.0645652757036,0 -122.685975140433,38.0647956170672,0 -122.686042422474,38.0650571667354,0 -122.685988557075,38.0653228963971,0 -122.685817209449,38.0655702868921,0 -122.685531183443,38.0656416181977,0 -122.685173657474,38.0656046069652,0 -122.684808180213,38.0655946094961,0 -122.68459523202,38.0657382378535,0 -122.684519196833,38.0660219325778,0 -122.684379807332,38.0662919401916,0 -122.684131423892,38.0663904080594,0 -122.683781966387,38.0662993334341,0 -122.683483276106,38.0661678449868,0 -122.68323109136,38.06599141361851,0 -122.683048968356,38.06576109488501,0 -122.682793976934,38.0655756421701,0 -122.682484407475,38.0654891814375,0 -122.682158457011,38.0655649035533,0 -122.681517072233,38.0657569323289,0 -122.68124632621,38.0659184227426,0 -122.680308114915,38.0666954626236,0 -122.679928533018,38.0671405542069,0 -122.679689685766,38.0673381794512,0 -122.679373837302,38.0673823777521,0 -122.679023314827,38.0673724032867,0 -122.678684054809,38.0673940003423,0 -122.678355303249,38.0674561881243,0 -122.678032845455,38.0675454285848,0 -122.677372491249,38.0676697875126,0 -122.676411522256,38.0679375137419,0 -122.675430103851,38.0681556039459,0 -122.675148709087,38.0683035325065,0 -122.674617796265,38.068640032782,0 -122.673518665848,38.06904704787101,0 contacts #khStyle84754 1 -122.710588901308,38.0607944021672,0 -122.711338352433,38.0613550455933,0 -122.711678517597,38.0612747679178,0 -122.711685745257,38.0610674974452,0 -122.71145155271,38.06083258643,0 -122.710724925284,38.0602674948232,0 -122.710135561662,38.059585572669,0 -122.709883871678,38.0596345175846,0 -122.709900646488,38.0598959286248,0 -122.710014335588,38.060153074797,0 -122.710167978338,38.0603967996732,0 -122.710588901308,38.0607944021672,0 contacts #khStyle84754 1 -122.627563783886,38.0587299060356,0 -122.627572536763,38.0593923685074,0 -122.627703091353,38.0599200287755,0 -122.627668237335,38.06019029936,0 -122.627523133945,38.0604241679164,0 -122.627066528899,38.0608282868999,0 -122.626794280858,38.0609851395521,0 -122.626495808324,38.0611148716163,0 -122.626093939596,38.0612006356193,0 contacts #khStyle84754 1 -122.818521664013,38.0583361658566,0 -122.818427965663,38.05848472868981,0 -122.818430192063,38.0585928856853,0 -122.818469463741,38.0587010987773,0 -122.81865018865,38.0589402204332,0 -122.818699980296,38.0589718422769,0 -122.818766527633,38.0589989850316,0 -122.818841646078,38.05901712839461,0 -122.818902926301,38.0590127190972,0 -122.818943980995,38.0589767322651,0 -122.818972614124,38.0589227003795,0 -122.818994621638,38.0588100760184,0 -122.818970321175,38.0586973791165,0 -122.818923914142,38.0585936603605,0 -122.818890195075,38.0585440361188,0 -122.818792412773,38.0584717825975,0 -122.818521664013,38.0583361658566,0 contacts #khStyle84754 1 -122.820013193665,38.0578878612036,0 -122.82029972076,38.0582713497637,0 -122.820329165006,38.0583209648545,0 -122.82034671069,38.0584291456263,0 -122.820334812074,38.0584877092151,0 -122.820304779686,38.0585327264652,0 -122.820245578438,38.0585596727518,0 -122.820170729795,38.0585775818664,0 -122.820102334967,38.0585774754005,0 -122.820044691849,38.0585503451698,0 -122.819991349261,38.0585142130165,0 -122.819800469555,38.05834717991131,0 -122.819685030861,38.0582118079583,0 -122.819629360551,38.0581080750191,0 -122.819497970166,38.0577969316772,0 -122.819393598499,38.0576525639146,0 -122.819296908711,38.0575712997142,0 -122.819274944469,38.0575216939553,0 -122.819275803099,38.057463113195,0 -122.81929553967,38.057404561958,0 -122.819332684429,38.0573640635227,0 -122.819396146868,38.0573416297004,0 -122.819472044414,38.057332735511,0 -122.819540068671,38.0573373492151,0 -122.819598788678,38.0573599718407,0 -122.819759152232,38.0574773884064,0 -122.819850144248,38.057558643343,0 -122.819882080018,38.0576082645371,0 -122.820013193665,38.0578878612036,0 contacts #khStyle84754 1 -122.822881335308,38.0552921233361,0 -122.823011390846,38.0554230071661,0 -122.823205323819,38.05565312937241,0 -122.823300245513,38.0557298823254,0 -122.823469561607,38.0558292819627,0 -122.823543057186,38.0559285349969,0 -122.823553980745,38.0559781209976,0 -122.823533903196,38.0560321670807,0 -122.823489966787,38.0560816692546,0 -122.823434669488,38.056117635905,0 -122.823373378414,38.0561265549853,0 -122.823301446012,38.056117432169,0 -122.823167609295,38.0560766708241,0 -122.822956371404,38.0559321425405,0 -122.822728546092,38.0557245009569,0 -122.822401684747,38.0555212120377,0 -122.822094288344,38.0552233188803,0 -122.821584404289,38.0548485046091,0 -122.821345341738,38.0545777533475,0 -122.821285407396,38.0544695049854,0 -122.821268084774,38.0544154056028,0 -122.82127923771,38.0543703588759,0 -122.821334548395,38.0543298879012,0 -122.821402991609,38.0543074607001,0 -122.821463523519,38.0543165670692,0 -122.821525781247,38.0543482091139,0 -122.821641382061,38.0544159825893,0 -122.821998727894,38.0546779027933,0 -122.822539312681,38.0550257240623,0 -122.822881335308,38.0552921233361,0 contacts #khStyle84754 1 -122.906976244694,38.0712037320919,0 -122.90677034724,38.071176525483,0 -122.906561197139,38.0711853667492,0 -122.90649459145,38.0711717919291,0 -122.906169787776,38.0710723868385,0 -122.905753679879,38.0710495103534,0 -122.905620108059,38.0710223615567,0 -122.905367627696,38.0709275194659,0 -122.905156534474,38.0707876476578,0 -122.905042250058,38.0707244633465,0 -122.904917614278,38.0706747904242,0 -122.904721018558,38.0706205497919,0 -122.904599598342,38.0705663739042,0 -122.904396713832,38.0704174948567,0 -122.904038877879,38.0702459521814,0 -122.903894384171,38.0701286670153,0 -122.903677232617,38.0699932927144,0 -122.903088572735,38.0695241358578,0 -122.902923754802,38.0694203502344,0 -122.902687340341,38.0693074905405,0 -122.902475193186,38.0691631055199,0 -122.902379459675,38.069086416402,0 -122.902255654504,38.068951119329,0 -122.902149584418,38.0688789264723,0 -122.901921020869,38.068757061318,0 -122.901376966541,38.0685132524044,0 -122.901116993129,38.0684364158693,0 -122.900817204835,38.0682964591934,0 -122.900463078836,38.0680302781482,0 -122.900341053935,38.0678994879811,0 -122.900154477735,38.0678227155051,0 -122.900098587535,38.0677911230419,0 -122.899838404502,38.0676106422555,0 -122.899617350044,38.0674752569028,0 -122.899519126615,38.0673985632191,0 -122.899293640372,38.0671189716561,0 -122.899200498612,38.0669746877057,0 -122.899119206742,38.0667628175762,0 -122.899007622095,38.0665599333064,0 -122.898971150186,38.0663976738312,0 -122.898977357003,38.0662895264701,0 -122.899019262374,38.0661273363789,0 -122.899017000518,38.0659605976644,0 -122.89917504428,38.06554165034151,0 -122.899190869926,38.0654335114562,0 -122.899185754323,38.065266772303,0 -122.89928360978,38.0648342514247,0 -122.899355150606,38.0646225162215,0 -122.899350393008,38.0644557773694,0 -122.899382680096,38.0642935786176,0 -122.899383265477,38.0641268444709,0 -122.899447251189,38.0639691789744,0 -122.899438850759,38.0638610186683,0 -122.899337680677,38.0635995620026,0 -122.899273296611,38.06327054320761,0 -122.899130508329,38.0629639858509,0 -122.898909487738,38.0625582209037,0 -122.898874289996,38.0625086185611,0 -122.898774648686,38.0624319229,0 -122.898738377861,38.062386826984,0 -122.898710816066,38.062224573111,0 -122.898604853976,38.06208027924771,0 -122.898394961792,38.0616159371441,0 -122.898128769486,38.0611650666205,0 -122.89801307754,38.0608495192042,0 -122.897927076237,38.0607007330037,0 -122.897714359316,38.0604797312091,0 -122.897614004353,38.0604075413034,0 -122.897298904323,38.0602900923671,0 -122.897093752451,38.0602628692781,0 -122.896909342002,38.0601815901768,0 -122.896771504766,38.06016343797,0 -122.896636111448,38.0601813430077,0 -122.896310379792,38.0602801856563,0 -122.89589815104,38.0603293815748,0 -122.895717776871,38.060414836994,0 -122.895651853017,38.0604282948233,0 -122.895309800741,38.0604775507143,0 -122.894827036772,38.0605266781779,0 -122.894630668922,38.060585078952,0 -122.89429145273,38.0606433472514,0 -122.894035555166,38.0607287301606,0 -122.893830324702,38.0607555799015,0 -122.893413176829,38.060755191375,0 -122.893011115716,38.0606691933243,0 -122.892651569143,38.0605021211935,0 -122.892429117498,38.0603712281175,0 -122.892159823248,38.0601186193171,0 -122.892069914572,38.0599698250691,0 -122.892004246225,38.0598120409095,0 -122.891953539301,38.0596542687584,0 -122.891951015343,38.0594334591829,0 -122.891934433323,38.0593252904679,0 -122.891917415709,38.059271197854,0 -122.891821098967,38.0591223973252,0 -122.891771104195,38.058964629944,0 -122.891745339972,38.058802375972,0 -122.891715992393,38.0584147997396,0 -122.891585009225,38.05810374074,0 -122.891563881033,38.0579369857716,0 -122.891522445587,38.0577747189427,0 -122.891380414321,38.0574681524126,0 -122.891345033345,38.0573058891623,0 -122.891255132412,38.0571570963026,0 -122.89114473829,38.0568956191398,0 -122.890956289249,38.0566656193913,0 -122.890823092521,38.0564086296599,0 -122.890680535903,38.0562192275447,0 -122.890624759805,38.0561200359279,0 -122.890382580674,38.0558539285393,0 -122.890261765056,38.0556555297853,0 -122.890130159554,38.0555292288975,0 -122.890069395315,38.0554300301057,0 -122.889980663784,38.0552181459074,0 -122.889946535692,38.0551730513448,0 -122.889652519158,38.0547987414207,0 -122.889520567434,38.0546679299581,0 -122.889321790727,38.0544424186054,0 -122.889096629363,38.0542349089281,0 -122.888930120122,38.0540405075805,0 contacts #khStyle84754 1 -122.821219848651,38.0563710927836,0 -122.82143715439,38.0565111261185,0 -122.821757038563,38.0568000273934,0 -122.821980389389,38.0569445743785,0 -122.822039834722,38.0569626915555,0 -122.822100054443,38.0569537715184,0 -122.822216368575,38.0568773429032,0 -122.822256361841,38.0568368458333,0 -122.82230435644,38.0567287682635,0 -122.822335965242,38.0566206633735,0 -122.82233871994,38.0565125161972,0 -122.82231926228,38.0564584095129,0 -122.822251099321,38.0563636713697,0 -122.82215547495,38.0562824090492,0 -122.821835760543,38.0560701167891,0 -122.820555875112,38.0550632165288,0 -122.820373551326,38.0548961996121,0 -122.820089709976,38.0545848175154,0 -122.819996584986,38.0545035572874,0 -122.819890258762,38.0544312892014,0 -122.819661177376,38.054304754786,0 -122.819301335958,38.0540473288661,0 -122.819191082814,38.0539795614433,0 -122.819055838311,38.0539342857262,0 -122.818990653706,38.0539341836238,0 -122.818925780117,38.0539521075693,0 -122.818863359179,38.0539880609209,0 -122.818821215418,38.0540330588354,0 -122.818813622539,38.0540781109202,0 -122.818831646001,38.0541367213207,0 -122.818917675759,38.0543486558832,0 -122.819028820403,38.0544885273334,0 -122.819340663185,38.0547098278338,0 -122.819516930577,38.0548768348099,0 -122.819661970161,38.0549942297403,0 -122.820058938587,38.05522016648671,0 -122.820240564926,38.05538267744801,0 -122.820535635643,38.0556174688596,0 -122.820663906761,38.0557483525217,0 -122.820814306004,38.0558612447734,0 -122.820901366272,38.0559470002703,0 -122.821219848651,38.0563710927836,0 contacts #khStyle84754 1 -122.881172540946,38.05360507665281,0 -122.881361455955,38.0537449693821,0 -122.881623337664,38.0541372905268,0 -122.881751247813,38.0543357056491,0 -122.882195227856,38.0546831516506,0 -122.882321613646,38.054723840119,0 -122.882662041702,38.05478727679731,0 -122.88328533924,38.0548239650643,0 -122.8834916166,38.0548016422575,0 -122.883700345495,38.0548063619715,0 -122.883973966098,38.0547705886329,0 -122.88411323393,38.054775237173,0 -122.884251107828,38.05476185651191,0 -122.884592426874,38.0547126320935,0 -122.884771733049,38.05462719258961,0 -122.884838364918,38.0546137394763,0 -122.884977305251,38.05460036113671,0 -122.885254785045,38.0546006397562,0 -122.885870086727,38.0545111276143,0 -122.886065733992,38.0544527407353,0 -122.886400673581,38.0543809717636,0 -122.886655142316,38.0542910986895,0 -122.886860005974,38.05425975581681,0 -122.88718607486,38.054165444977,0 -122.888009100658,38.0538012402698,0 contacts #khStyle84754 1 -122.65753155322,38.0518591230376,0 -122.65732169924,38.0516422011426,0 -122.657180342368,38.0514029507346,0 -122.657021285252,38.0508346817827,0 contacts #khStyle84754 1 -122.881172540946,38.05360507665281,0 -122.881224454268,38.0534429027961,0 -122.88118829918,38.0531139024076,0 -122.881155437466,38.0529516384764,0 -122.881127734892,38.0529020405435,0 -122.881082207716,38.0528614368621,0 -122.880689356102,38.0526266983256,0 -122.880628123683,38.0526041015407,0 -122.880492095512,38.0525814266937,0 -122.880213916907,38.0525766307335,0 -122.880076093403,38.0525629683945,0 -122.879531972131,38.0524767771218,0 -122.879130691472,38.0523862266945,0 -122.878645227284,38.0523721974462,0 -122.877922845907,38.0521731469582,0 -122.877650427125,38.052132299975,0 -122.877468550676,38.0520509906894,0 -122.877209374664,38.0519741057524,0 -122.877029642996,38.051888292743,0 -122.87656022876,38.0516534539128,0 -122.876178795844,38.0514142092243,0 -122.876062067083,38.0513555010837,0 -122.875429152243,38.0511294998462,0 -122.875103239313,38.0509218493081,0 -122.874902778611,38.0508810742988,0 -122.874727115991,38.0507096397567,0 -122.874477399998,38.0505201004375,0 -122.874208785869,38.0503440579588,0 -122.873717568013,38.0499559728004,0 -122.873465845704,38.0496943268567,0 -122.872919849058,38.0492701246124,0 -122.872655515724,38.0490940832554,0 -122.872541426694,38.0489542594876,0 -122.872414008635,38.0486972567411,0 -122.872213203683,38.0484875146187,0 contacts #khStyle84754 1 -122.664322619261,38.0478275778688,0 -122.664999134097,38.0478745812416,0 -122.665338899005,38.0478800590997,0 -122.666693379334,38.0478118236966,0 -122.667364787468,38.0477281141122,0 -122.668048404574,38.04762190434111,0 -122.668307003388,38.0474604071835,0 -122.668360123482,38.0472127084505,0 -122.667680823735,38.04730991949931,0 -122.667343036762,38.04734050531031,0 -122.666664997949,38.0473160420814,0 -122.66632649673,38.0473466208368,0 -122.665990336351,38.0473321433129,0 -122.664318160681,38.0470885183118,0 -122.663979888998,38.0470695236246,0 -122.663643462126,38.0471136187907,0 -122.663314056575,38.0471802683899,0 -122.662998039277,38.0472784973426,0 -122.662675992639,38.0474488126847,0 -122.662767158934,38.047606798755,0 -122.663124191024,38.04772949939211,0 -122.663451536732,38.0478025420089,0 -122.663789059157,38.0478305530811,0 -122.664322619261,38.0478275778688,0 contacts #khStyle84754 1 -122.656487090071,38.0479219974295,0 -122.656825324099,38.0479500284796,0 -122.657163681925,38.047951020479,0 -122.657501478308,38.0479204660618,0 -122.658524120746,38.0479820376342,0 -122.658839016721,38.0481271613539,0 -122.658981967832,38.048330365391,0 -122.658700487865,38.0485052912785,0 -122.658367594362,38.0485538911743,0 -122.658020788473,38.0485303448572,0 -122.657341172735,38.0485373691243,0 -122.657005114116,38.0485003331189,0 -122.656678485673,38.0484272725757,0 -122.655726702297,38.0481405752525,0 -122.654797935665,38.0478088740751,0 -122.654468420076,38.0477448116906,0 -122.654132369194,38.0477077696022,0 -122.653217987585,38.0473490579342,0 -122.653014527569,38.0471411621089,0 -122.652828983642,38.046910786005,0 -122.652584230428,38.0466982594365,0 -122.652692835887,38.0464777710602,0 -122.652991300456,38.0464786566275,0 -122.653558892506,38.0468093032117,0 -122.653853913963,38.0469363557981,0 -122.654827988332,38.0471735646226,0 -122.655138770449,38.0472826327555,0 -122.655740953329,38.0475322575266,0 -122.656487090071,38.0479219974295,0 contacts #khStyle84754 1 -122.870267094026,38.047176770968,0 -122.86988766893,38.0468918751769,0 -122.869537519938,38.0467157293151,0 -122.869428297981,38.0466480102374,0 -122.869234117182,38.0464900664164,0 -122.869042256867,38.0464267581079,0 -122.868861837201,38.0463409316463,0 -122.868671768913,38.04627311943321,0 -122.868507399493,38.0461737905624,0 -122.868306444486,38.0460203448621,0 -122.867947015363,38.0458576995849,0 -122.867807271617,38.0457313638906,0 -122.867697827562,38.0455915406305,0 -122.867599311268,38.0455148193803,0 -122.867429239599,38.0454199898402,0 -122.867124604744,38.0452889531957,0 -122.866798090423,38.0450837987733,0 contacts #khStyle84754 1 -122.679988020527,38.0459833129982,0 -122.680444313471,38.0463811227298,0 -122.680706416998,38.04655308011811,0 -122.681019967622,38.0466891280564,0 -122.68133536942,38.0467260370548,0 -122.681594842925,38.0465194530323,0 -122.681438993906,38.0463207465181,0 -122.680919929077,38.0459407950392,0 -122.680312277742,38.045294723976,0 -122.680056649499,38.0451092631115,0 -122.679738182903,38.0449596809378,0 -122.679573644081,38.0451214611195,0 -122.679603015702,38.045409949868,0 -122.679988020527,38.0459833129982,0 contacts #khStyle84754 1 -122.805525093607,38.051181458105,0 -122.804760785775,38.0514235145664,0 -122.803614840435,38.0499975615869,0 -122.803262100094,38.0496454652302,0 -122.80204967992,38.048719590683,0 -122.801724378353,38.0483675365278,0 -122.801155015122,38.0476545523229,0 -122.8002612373,38.0461433772442,0 -122.799241268814,38.0446643172503,0 contacts #khStyle84754 1 -122.799241268814,38.0446643172503,0 -122.799090648071,38.0444458957334,0 contacts #khStyle84754 1 -122.664852902446,38.0447963090042,0 -122.664761397372,38.0448681472872,0 -122.664761232838,38.0449041980985,0 -122.664578245283,38.0450433712478,0 -122.664578080659,38.0450794220573,0 -122.664532327831,38.0451153421468,0 -122.664532163184,38.0451513929557,0 -122.664486410299,38.0451873109281,0 -122.664485534473,38.0452233596967,0 -122.664394760245,38.0452906965207,0 -122.664349174588,38.045290565737,0 -122.664304462192,38.0452543861616,0 -122.664213999426,38.0452541265402,0 -122.664079154134,38.0451455855751,0 -122.664081382814,38.0449698430292,0 -122.664265908781,38.0446504207512,0 -122.664402452839,38.0445426607785,0 -122.664403328704,38.0445066099081,0 -122.664494122527,38.0444347698592,0 -122.664494287188,38.0443987190461,0 -122.664540036936,38.044362798957,0 -122.664540915375,38.0443267501901,0 -122.66463168562,38.0442594153259,0 -122.664858199064,38.0442600644593,0 -122.664902908482,38.044296243821,0 -122.664948496184,38.0442963743944,0 -122.665128050846,38.0444410915547,0 -122.664852902446,38.0447963090042,0 contacts #khStyle84754 1 -122.665536366384,38.0444062083656,0 -122.666168723246,38.0446017892123,0 -122.666468030019,38.0447288224533,0 -122.666735812683,38.0448963217755,0 -122.667021527204,38.0450368288687,0 -122.667353891801,38.0451008662956,0 -122.667711388445,38.0451199100694,0 -122.668027920865,38.0450622243837,0 -122.668039114986,38.0447918736007,0 -122.667777679541,38.0446379155461,0 -122.667454781529,38.0445288442159,0 -122.665824920013,38.0440780681402,0 -122.665526754644,38.0440141262766,0 -122.665536366384,38.0444062083656,0 contacts #khStyle84754 1 -122.648191261562,38.04446799781271,0 -122.648184416669,38.0450042366321,0 -122.648217313329,38.0452747178967,0 -122.648367893239,38.0455140090468,0 -122.648613468216,38.0456995063216,0 -122.648927082172,38.0458086014666,0 -122.649255870434,38.04587267719001,0 -122.649931517216,38.0459468030576,0 -122.65026913304,38.0459523180153,0 -122.650944731435,38.0458867403373,0 -122.651613353365,38.0457895920981,0 -122.651975987075,38.0457771531086,0 -122.652276041734,38.045741993952,0 -122.652179001083,38.0454758285034,0 -122.651610540671,38.0451812239023,0 -122.651141564766,38.0447877722196,0 -122.65097740147,38.0445574568736,0 -122.650926665789,38.0442914284652,0 -122.650841007292,38.0440298053751,0 -122.650702554399,38.0437860460627,0 -122.650519183507,38.0435511673467,0 -122.650259903753,38.0434016822043,0 -122.649572993155,38.04330499352011,0 -122.649243936363,38.0432995022481,0 -122.648951228221,38.043438322103,0 -122.648698193667,38.0436223244281,0 -122.648493444167,38.0438380150684,0 -122.648357653788,38.044080951044,0 -122.648191261562,38.04446799781271,0 contacts #khStyle84754 1 -122.798565090969,38.0448876642311,0 -122.798413564565,38.044607692281,0 -122.797263946517,38.0424834924438,0 contacts #khStyle84754 1 -122.659136127984,38.0461181842113,0 -122.658637042912,38.0457562205605,0 -122.658405038609,38.0455572614109,0 -122.657855866925,38.0452447176282,0 -122.65759811732,38.0450682146809,0 -122.657309549802,38.044932179636,0 -122.656995194844,38.0448276100012,0 -122.656443184644,38.044515051287,0 -122.656148903192,38.04438350197281,0 -122.655236688689,38.0440248122476,0 -122.654657480514,38.0437437109114,0 -122.654389726861,38.0435761842085,0 -122.654149926239,38.043372688243,0 -122.653958019729,38.0431332821594,0 -122.65418777963,38.0430483407001,0 -122.654900781866,38.0430504458278,0 -122.655223067791,38.0431325113385,0 -122.656177255274,38.0435003352684,0 -122.6564209865,38.0434740127856,0 -122.656410938408,38.0431855751175,0 -122.655859006199,38.0428594935569,0 -122.655619140453,38.0426695206485,0 -122.655470850482,38.0423941961789,0 -122.655520237493,38.0421915541481,0 -122.655889951144,38.0421836292388,0 -122.656865331571,38.0424343432624,0 -122.657160341398,38.0425613875838,0 -122.657699429254,38.042891930845,0 -122.6581891932,38.04326288628361,0 -122.659453386218,38.0445238518507,0 -122.65964040631,38.0447452091059,0 -122.659912579883,38.04519213409421,0 contacts #khStyle84754 1 -122.667575887249,38.0425553829298,0 -122.667479021794,38.0424785114799,0 -122.667313061139,38.0423203162345,0 -122.667232149039,38.0420992729269,0 -122.667372142986,38.0420140502648,0 -122.667734287105,38.0421052076664,0 -122.668122906969,38.0423271218927,0 -122.668233514565,38.0424400970001,0 -122.66824802755,38.0425320631458,0 contacts #khStyle84754 1 -122.649976046663,38.0427293836571,0 -122.650284557008,38.0428609909428,0 -122.650620586559,38.0428980460354,0 -122.650959309009,38.04281794574251,0 -122.651012462219,38.0425747560479,0 -122.650866218587,38.0423219629146,0 -122.65058634955,38.0421588988531,0 -122.650271452297,38.042022765801,0 -122.649956169825,38.0419677482385,0 -122.649713718206,38.0421743154745,0 -122.649772391201,38.0424178351464,0 -122.649976046663,38.0427293836571,0 contacts #khStyle84754 1 -122.675652075275,38.042758321317,0 -122.675314883867,38.042820475611,0 -122.674989427649,38.0428060535645,0 -122.674676541189,38.04268801701841,0 -122.674347050722,38.0426195050129,0 -122.674004521915,38.0426005252474,0 -122.673648197605,38.0426400883211,0 -122.673470906839,38.0424638444746,0 -122.673440137927,38.0421753523052,0 -122.673516147645,38.0419006742843,0 -122.673739893879,38.0417210441015,0 -122.6740785838,38.0416408728225,0 -122.674416304819,38.0416192823035,0 -122.674755962112,38.0416427582428,0 -122.675426409311,38.0417617873019,0 -122.675730072344,38.0418707813683,0 -122.675978437404,38.0420832700564,0 -122.67597028162,38.0423175788969,0 -122.675652075275,38.042758321317,0 contacts #khStyle84754 1 -122.742868615239,38.0410733705837,0 -122.742832036062,38.0413481787621,0 -122.742677345196,38.0415866775062,0 -122.742396712234,38.0416851982014,0 -122.742237291467,38.0414460092429,0 -122.742143153903,38.041175418167,0 -122.742065976952,38.0406389864878,0 -122.742079632277,38.0400982499163,0 -122.742256419309,38.0398552952738,0 -122.742531235202,38.0397883059728,0 -122.742787634398,38.0399961642438,0 -122.74283123318,38.0402576307619,0 -122.742868615239,38.0410733705837,0 contacts #khStyle84754 1 -122.799090648071,38.0444458957334,0 -122.798932704498,38.0442168534576,0 -122.798112362913,38.042840979764,0 -122.797290746574,38.0415507188832,0 -122.796414400743,38.0404856746234,0 -122.794244360144,38.038372849874,0 contacts #khStyle84754 1 -122.810959795698,38.0390367802711,0 -122.81110072286,38.0392127597489,0 -122.811213810323,38.03927603431481,0 -122.811278588828,38.0392896583055,0 -122.811754316207,38.0393129673271,0 -122.811964811041,38.0393042972051,0 -122.812233101614,38.0392551618742,0 -122.812495073663,38.0391699664803,0 -122.812732518608,38.0390667051072,0 -122.813025645054,38.0389139617873,0 -122.813101659653,38.0388509970949,0 -122.813144670248,38.0387429127623,0 -122.813124095577,38.038571637913,0 -122.813058489685,38.0384633778844,0 -122.812927655678,38.0383775453399,0 -122.81275115739,38.0383231824953,0 -122.812548352806,38.038250753158,0 -122.812333314535,38.0382278709954,0 -122.812196941552,38.0382186366057,0 -122.811919440988,38.0382497312059,0 -122.811531678982,38.0383662640765,0 -122.8112024554,38.03856851421681,0 -122.811100407309,38.038644955427,0 -122.810952897671,38.0388114504479,0 -122.810928899282,38.0388654860439,0 -122.810925198858,38.0389195611403,0 -122.810959795698,38.0390367802711,0 contacts #khStyle84754 1 -122.804575358487,38.0476333428247,0 -122.803494978102,38.0475458913602,0 -122.802969579704,38.0474323383032,0 -122.80250179302,38.0472197410338,0 -122.802088684853,38.0469396398256,0 -122.801731975497,38.0466145700652,0 -122.801097412012,38.0459149926771,0 -122.800677893461,38.0456393817539,0 -122.800332237496,38.0453143266683,0 -122.800103587639,38.0449218771092,0 -122.800033829831,38.0445177146966,0 -122.799883408953,38.0436461918164,0 -122.799839360903,38.0432135033688,0 -122.799865817397,38.0427854432363,0 -122.800042147461,38.042380174101,0 -122.800168164336,38.04215236875671,0 -122.800587831434,38.0413937098278,0 -122.800699617186,38.0411916246862,0 -122.800720689085,38.0407770740953,0 -122.800495993185,38.0403756189983,0 -122.800199468848,38.0400463823418,0 -122.800178926907,38.0400235740927,0 -122.799919949488,38.0396581096431,0 -122.799867000363,38.03922540550441,0 -122.799867393435,38.0391645286095,0 -122.799872557741,38.0383646963136,0 -122.799778745818,38.0375083214185,0 -122.79977408781,38.0372817295639,0 contacts #khStyle84754 1 -122.831840338685,38.0611502685727,0 -122.831909675095,38.0610512289811,0 -122.83192011891,38.0610016749442,0 -122.831839607533,38.0608483403908,0 -122.831809709918,38.0606815635182,0 -122.83173667578,38.0605282397793,0 -122.831710718895,38.0601992385353,0 -122.831634487246,38.06004591005511,0 -122.831630333303,38.0599918272992,0 -122.831669891772,38.059829657007,0 -122.831738294963,38.0596720340958,0 -122.83183986842,38.0591854960213,0 -122.832072699016,38.05878026184981,0 -122.832114827057,38.0587397666616,0 -122.832305917456,38.0586724496575,0 -122.832422891058,38.058614037525,0 -122.83252564849,38.05854208442,0 -122.832616681881,38.0584565960924,0 -122.832830731437,38.0583172071604,0 -122.833027012735,38.0581597707563,0 -122.833432872331,38.0579485579407,0 -122.833492776887,38.0579216060463,0 -122.833689175711,38.05786781258651,0 -122.833867123461,38.0577824485349,0 -122.834403851386,38.0576660560268,0 -122.834732128721,38.0575763989018,0 -122.834922858058,38.05750907713501,0 -122.835042667972,38.05745517180161,0 -122.835208185232,38.0573517623792,0 -122.835391644862,38.057189794175,0 -122.835551114744,38.0570818681981,0 -122.835673590336,38.0569513604943,0 -122.835770457833,38.0568027885356,0 -122.835808224586,38.0566406121561,0 -122.835898096888,38.05643344806911,0 -122.835957599343,38.0561090744956,0 -122.836086411635,38.0558523942466,0 -122.836107801817,38.055685691229,0 -122.836157084366,38.05546945644781,0 -122.836159586768,38.0553072298248,0 -122.836118633762,38.0551449435593,0 -122.836063651081,38.0550412194086,0 -122.836024213952,38.0549960973084,0 -122.835975494477,38.0549599789797,0 -122.835858088619,38.0548967224388,0 -122.83572529373,38.0548649896723,0 -122.835586763145,38.0548512741572,0 -122.835447119892,38.0548555803704,0 -122.835035219492,38.0549135741115,0 -122.834971774079,38.05493150893901,0 -122.834799159188,38.0550258950978,0 -122.834480823381,38.05513359224531,0 -122.834074567549,38.0552141216489,0 -122.833937410638,38.0552229370914,0 -122.833798529025,38.0552047115222,0 -122.833734812014,38.0551865962341,0 -122.833617039208,38.0551278422679,0 -122.833363271787,38.0550373502263,0 -122.83320001057,38.0549334661812,0 -122.833021222442,38.0547664699046,0 -122.832955183587,38.0546717431618,0 -122.832934290763,38.0546176382672,0 -122.832857835215,38.0544057280047,0 -122.832815820494,38.0542434410923,0 -122.832810980148,38.0540226196435,0 -122.832788554041,38.0538603568962,0 -122.83284840108,38.0537027229068,0 -122.832801515785,38.0534863479612,0 -122.832806901164,38.0531573919862,0 -122.832765954118,38.052995102368,0 -122.832757431574,38.05282835648801,0 -122.832684539829,38.052616451204,0 -122.832590782452,38.0521837052798,0 -122.832593661178,38.0520169738075,0 -122.832581438379,38.0519088025343,0 -122.832550697364,38.0518006043817,0 -122.83248230398,38.051647289676,0 -122.832442780907,38.0514850061613,0 -122.832371906465,38.051327178232,0 -122.832284919677,38.0508944396925,0 -122.832251329373,38.0507862372971,0 -122.831835537209,38.0499113990218,0 -122.831805019071,38.0498617830947,0 -122.831610908385,38.0497037770228,0 -122.831539536599,38.0496090394944,0 -122.831501086149,38.049446755061,0 -122.831434122187,38.0492934396548,0 -122.831379768343,38.049077055136,0 -122.831267463766,38.0488155218437,0 -122.831226241899,38.0487749049979,0 -122.831052293056,38.0486800170539,0 -122.830952741634,38.0486032634796,0 -122.830911530485,38.0485581348899,0 -122.830824610406,38.0484093015035,0 -122.830714519171,38.0482694405588,0 -122.830318634854,38.0478858202092,0 -122.829993358815,38.0476194647798,0 -122.829826188944,38.0475200775226,0 -122.829612638558,38.0473034572011,0 -122.829515937865,38.0472267065878,0 -122.829040995717,38.046996178462,0 -122.82891322534,38.0469554325276,0 -122.828577532362,38.0468828319094,0 -122.828390360717,38.0468104512842,0 -122.828186718694,38.046774099157,0 -122.827991679804,38.0467152243385,0 -122.827872147271,38.0466564639339,0 -122.827719776252,38.0464759825643,0 -122.827595592554,38.0464262256376,0 -122.827528676498,38.0464081000444,0 -122.82732106614,38.0463942714444,0 -122.827124237743,38.0463398999511,0 -122.8269184402,38.0463125530955,0 -122.826399532911,38.0461540507215,0 -122.826117827324,38.0459959036137,0 -122.825989718107,38.0459506486168,0 -122.825657970817,38.0458690327603,0 -122.825533433971,38.0458192731072,0 -122.825086722116,38.0455572319463,0 -122.824950250368,38.0454353490172,0 -122.824879602491,38.0453406084227,0 -122.824828206763,38.0452368841903,0 -122.824758236298,38.0448582420993,0 -122.824761033177,38.0445833587929,0 -122.82479811485,38.0444166791405,0 -122.824798244288,38.044362602475,0 -122.824766806733,38.04425440312901,0 -122.82471611493,38.0441551852493,0 -122.8245698338,38.0439656961038,0 -122.824519702356,38.0439295686628,0 -122.824390517565,38.0438888135118,0 -122.823980040332,38.0438205933195,0 -122.823912025662,38.0438159842382,0 -122.823708578775,38.0438517249868,0 -122.823500210933,38.043860417327,0 -122.823107651331,38.0437471574156,0 -122.822834217206,38.0437106889995,0 -122.822642404485,38.0436473048197,0 -122.822339295953,38.0435116466225,0 -122.822245457738,38.0434348943333,0 -122.822127710501,38.0432319257508,0 -122.822082162216,38.0430696270274,0 -122.822078771408,38.0428533163678,0 -122.822034432585,38.0426324351351,0 -122.822043292101,38.0423575610923,0 -122.82201804348,38.0421952915045,0 -122.821972709168,38.0420915752865,0 -122.821842479664,38.041897599928,0 -122.82175507669,38.0418118443296,0 -122.821646261861,38.0417440812231,0 -122.821218991909,38.0415586587539,0 -122.820881181618,38.0414905401434,0 -122.820667473847,38.0413550161852,0 -122.820401240651,38.0412915126885,0 -122.819921689295,38.0412231707711,0 -122.819783176405,38.0412139418742,0 -122.819644616489,38.0412227383761,0 -122.819378426263,38.041285412074,0 -122.819036057338,38.0413344455523,0 -122.818551053967,38.0413111535889,0 -122.818345987552,38.041283792784,0 -122.8180844178,38.0412067731873,0 -122.817965602118,38.0411525090769,0 -122.817703770961,38.0408952318348,0 -122.817519850496,38.0408138260375,0 -122.817468658011,38.0407776959701,0 -122.817428881768,38.0407325690075,0 -122.817406221259,38.0406784562695,0 -122.817399727491,38.0405702921664,0 -122.817419019567,38.0404035865431,0 -122.817487065627,38.0402504782413,0 -122.817568133537,38.0401604781105,0 -122.817672301771,38.0400885421312,0 -122.817901098172,38.039881608214,0 -122.81800775985,38.0398096758681,0 -122.81846210694,38.0395535265907,0 -122.818606628554,38.0394365891029,0 -122.818721991559,38.0393015779292,0 -122.818806771172,38.0391484951151,0 -122.818836375313,38.0389863107734,0 -122.818818125299,38.0388781282815,0 -122.818696822894,38.0386796579196,0 -122.818617273856,38.0385894068795,0 -122.81852310145,38.0385081435286,0 -122.818470485246,38.0384720095429,0 -122.818286928182,38.0383906075606,0 -122.818120150764,38.0382912039716,0 -122.817936227806,38.0382143020252,0 -122.817890033699,38.038173674636,0 -122.817778202087,38.038033800526,0 -122.817530112798,38.0378396341625,0 -122.81731035579,38.0377086018543,0 -122.817167501192,38.0375867037178,0 -122.816810743932,38.03741489684531,0 -122.816379037035,38.0371663596846,0 -122.816274531098,38.0370895855297,0 -122.816217978174,38.0370624570827,0 -122.816153198052,38.0370488358015,0 -122.815870430519,38.0370528907491,0 -122.815736129751,38.0370707022375,0 -122.815551456857,38.037151522932,0 -122.815200240076,38.0373267106458,0 -122.814776442581,38.037614440234,0 -122.814650618326,38.0376593025536,0 -122.814515224043,38.0376861258207,0 -122.814377016965,38.037699419928,0 -122.814238866992,38.0376901850478,0 -122.814035624369,38.0376493014045,0 -122.813905022877,38.0376130398034,0 -122.813779436114,38.0375632679494,0 -122.813671348707,38.0374954964325,0 -122.813581824642,38.037409731214,0 -122.813457677743,38.0372157561058,0 -122.813326604831,38.0370848594582,0 -122.813078874592,38.0368951916549,0 -122.812807241482,38.0367235081521,0 -122.812585579549,38.0365068430343,0 -122.812533311707,38.0364752143907,0 -122.812469255409,38.0364570847846,0 -122.812329350794,38.0364388319721,0 -122.811980005832,38.0364382640337,0 -122.811848185085,38.0364605804829,0 -122.811726242468,38.0365189662942,0 -122.811397385928,38.0367212155098,0 -122.811307066023,38.036806688883,0 -122.81097321139,38.03728832642661,0 -122.810767716564,38.0374321953622,0 -122.810529129008,38.0377021871774,0 -122.810268843121,38.0379631300557,0 -122.810161287587,38.0381026512083,0 -122.810032746109,38.0382331249415,0 -122.80992802769,38.0383771580034,0 -122.809698369458,38.0384984543048,0 -122.809598455833,38.038574895634,0 -122.809468843235,38.0387053669827,0 -122.809345470163,38.0387637458676,0 -122.809314384268,38.0388042512577,0 -122.809288308205,38.0389709444745,0 -122.809102154714,38.0392049685615,0 -122.808939649851,38.0393849565844,0 -122.808643107597,38.0396142899611,0 -122.808372144019,38.0398661981054,0 -122.808163431592,38.0400100571395,0 -122.807981012629,38.0401764904931,0 -122.807714876052,38.0403517950728,0 -122.807530899855,38.0404326064479,0 -122.807479164796,38.0404685695069,0 -122.807264559616,38.0406845197276,0 -122.806878380151,38.0411390176833,0 -122.806358832067,38.0416563829338,0 -122.80613586189,38.041935404731,0 -122.806021917784,38.0421965834032,0 -122.805619760747,38.0428943965594,0 -122.805560577938,38.0430520203931,0 -122.805524120068,38.043101528555,0 -122.805428103037,38.0431824824324,0 -122.804987433242,38.04348640075851,0 contacts #khStyle84754 1 -122.79977408781,38.0372817295639,0 -122.799769945022,38.0370801998595,0 -122.799875788219,38.0366612894405,0 -122.800082925769,38.03618397104141,0 contacts #khStyle84754 1 -122.739796662755,38.0356228462456,0 -122.739867282306,38.0358933891635,0 -122.739786584461,38.0361545780488,0 -122.73954320061,38.0362982413872,0 -122.739359194064,38.0360680042901,0 -122.739270414726,38.0357974226523,0 -122.739261050072,38.0355270181942,0 -122.739196116166,38.0352609971679,0 -122.739168606602,38.0349860446954,0 -122.739233763731,38.03468876797331,0 -122.739418714745,38.0347522706227,0 -122.739606490311,38.0350230728772,0 -122.739796662755,38.0356228462456,0 contacts #khStyle84754 1 -122.737855697143,38.0349650805939,0 -122.737929885733,38.035231125221,0 -122.737965225799,38.0355060934263,0 -122.737939299824,38.0357854316832,0 -122.737655008349,38.0358163397231,0 -122.73738460566,38.0356489954912,0 -122.73713893195,38.0351392198701,0 -122.737055828596,38.0348776621609,0 -122.73693774272,38.0343411366501,0 -122.736947582027,38.0340797859514,0 -122.737200481615,38.0338640506669,0 -122.737460356581,38.0338871659851,0 -122.737646019238,38.034148953787,0 -122.737732703245,38.0344060116743,0 -122.737855697143,38.0349650805939,0 contacts #khStyle84754 1 -122.789876087749,38.03280862817801,0 -122.791153973662,38.0336085717031,0 -122.791970332098,38.034173340333,0 -122.793253631664,38.0349642576324,0 -122.79354546586,38.0351875706004,0 -122.79364912603,38.0352668913697,0 -122.794084541338,38.0354839608313,0 -122.794093638503,38.0354884960493,0 -122.794100792213,38.0354893091052,0 -122.795046043336,38.0355967377611,0 -122.795181207238,38.0356120986147,0 -122.795717506345,38.0356130467111,0 -122.79623956861,38.035483282137,0 -122.796726180922,38.0352948699687,0 -122.797488140895,38.0349399127435,0 -122.79776700054,38.0348100045543,0 contacts #khStyle84754 1 -122.737095644523,38.0316196296563,0 -122.737232575896,38.0313675775624,0 -122.737232413783,38.0311152191713,0 -122.737144120306,38.0309767667302,0 contacts #khStyle84754 1 -122.642578539513,38.0306344346224,0 -122.642635917896,38.0306976996844,0 -122.643069754811,38.0311136097873,0 -122.643280482593,38.0312764811877,0 contacts #khStyle84754 1 -122.735502389448,38.0280179823404,0 -122.735208717403,38.0277669034349,0 contacts #khStyle84754 1 -122.716615654364,38.0263308263046,0 -122.71676420983,38.0265880497879,0 -122.716730445457,38.026849341017,0 -122.716501622207,38.02690736889531,0 -122.716317474375,38.0266455512511,0 -122.716042576462,38.0264646307904,0 -122.715910208231,38.0262570112383,0 -122.716018058696,38.0259913969271,0 -122.716010020726,38.02567592924,0 -122.716059630736,38.0255543771142,0 -122.716296538895,38.0257982975223,0 -122.716615654364,38.0263308263046,0 contacts #khStyle84754 1 -122.637810486792,38.0248516042081,0 -122.637855173946,38.0248877938438,0 -122.637900749579,38.0248879348373,0 -122.638034806074,38.0249965014762,0 -122.638034628661,38.0250325523007,0 -122.638348877322,38.0252813736671,0 -122.638347631919,38.0253895239338,0 -122.63821037475,38.0254972538909,0 -122.638165509705,38.025497115213,0 -122.638119758974,38.0255330251501,0 -122.637622185254,38.0254909269682,0 -122.63735086744,38.0254900867066,0 -122.637305471862,38.0254538946876,0 -122.637170168508,38.025453475372,0 -122.636990711826,38.0253087156018,0 -122.636990889749,38.0252726647835,0 -122.636946205442,38.0252364748311,0 -122.636948853353,38.0249886330148,0 -122.636994606962,38.0249527235395,0 -122.637039469019,38.024952862654,0 -122.637085222563,38.02491695314291,0 -122.63713079821,38.0249170944348,0 -122.637176551688,38.0248811848876,0 -122.637176729517,38.0248451340658,0 -122.637216762422,38.0248137142417,0 -122.637810486792,38.0248516042081,0 contacts #khStyle84754 1 -122.869253897727,38.0240619023125,0 -122.868958527608,38.02417422437,0 contacts #khStyle84754 1 -122.857414815054,38.03555034559271,0 -122.857070223153,38.0351105218858,0 -122.856981488142,38.0349617011895,0 -122.856850694304,38.0348308536555,0 -122.856753405337,38.0346865274764,0 -122.856597071802,38.0345060784076,0 -122.856428042649,38.0342625235909,0 -122.856385745748,38.0342219120463,0 -122.856155597584,38.0340954469656,0 -122.856019448215,38.0339736045825,0 -122.85586182903,38.0337255557553,0 -122.855731030509,38.0335992122812,0 -122.855698011626,38.0335496014141,0 -122.855649782827,38.0334458945639,0 -122.855528392244,38.033247462271,0 -122.855438113763,38.03298147183511,0 -122.855365771249,38.0328281651004,0 -122.855357332408,38.0327740776022,0 -122.85536788096,38.0326614317611,0 -122.855340310335,38.0325577507584,0 -122.855274985113,38.0324585275699,0 -122.855088713197,38.0322960643169,0 -122.85502837372,38.0321968472705,0 -122.855011578551,38.0318678615058,0 -122.854937083488,38.0315433082673,0 -122.854931113926,38.0313224878044,0 -122.854857704913,38.0311691793559,0 -122.854825989263,38.0310024032534,0 -122.854754363641,38.030849094884,0 -122.854699243439,38.0306327197143,0 -122.854412282176,38.0300735661075,0 -122.854402882732,38.029965402485,0 -122.854444271116,38.0297446419125,0 -122.854440818303,38.0296905606297,0 -122.854323225352,38.0293749650896,0 -122.854226522854,38.0289422313523,0 -122.854146827463,38.0287303300289,0 -122.854106557622,38.0285680502549,0 -122.854040287912,38.0284102428075,0 -122.854007494508,38.0282479724833,0 -122.853915924705,38.028099143538,0 -122.853896795046,38.0280495497554,0 -122.853841085416,38.0277745910194,0 -122.853779799196,38.0276167897356,0 -122.853752327297,38.0272877878219,0 -122.853765933752,38.0270714994904,0 -122.853816464055,38.026909335058,0 -122.85393602543,38.0267697893619,0 -122.85394609392,38.0267202347777,0 -122.853899060738,38.0265579420777,0 -122.853902132105,38.0264452867364,0 -122.853879553285,38.0263416116074,0 -122.853823144965,38.026237893449,0 -122.853706982716,38.0261025532813,0 -122.853642731874,38.02600333250871,0 -122.853598907132,38.0258410458482,0 -122.85362155336,38.0257329228938,0 -122.853704696487,38.0256429005097,0 -122.853763142626,38.0256159364188,0 -122.853899220383,38.0255845656538,0 -122.854079906476,38.0255036797951,0 -122.854287149647,38.0254949299369,0 -122.854493009315,38.025468152312,0 -122.854701667977,38.0254639109777,0 -122.85484805475,38.0254415628781,0 -122.854920023584,38.0254191227568,0 -122.854963159487,38.0253921387389,0 -122.854954703925,38.0253470639415,0 -122.854877295881,38.0252388123017,0 -122.85486230789,38.0250765646159,0 -122.854719432694,38.0247654447222,0 -122.854675000024,38.0245490807091,0 -122.85467160289,38.024107452107,0 -122.854720208222,38.0238371308586,0 -122.854693799886,38.023508130307,0 -122.854733949035,38.0230124797204,0 -122.854776037087,38.0227962271352,0 -122.854766337623,38.0223005134604,0 -122.854926601484,38.0220771677702,0 contacts #khStyle84754 1 -122.730411689814,38.0229115552549,0 -122.73050615293,38.0231731464152,0 -122.730774964956,38.02366045684281,0 -122.730446320667,38.0237588388188,0 -122.730226224314,38.0235780756572,0 -122.729830175003,38.0231265193165,0 -122.729573737487,38.0229546837824,0 -122.728986184101,38.0226829387766,0 -122.728710830947,38.022524575753,0 -122.728455836677,38.0223482336371,0 -122.72813825445,38.0222483558783,0 -122.727874634403,38.0220945256679,0 -122.727680357988,38.0218687513566,0 -122.727569049994,38.0218324404799,0 -122.727565261667,38.0217017460283,0 -122.727711747919,38.0216615304843,0 -122.727988732823,38.0216666807989,0 -122.728205841933,38.021784353219,0 -122.729126734632,38.02212897813411,0 -122.729411378595,38.0222783488295,0 -122.729658169216,38.0224591752921,0 -122.729873171439,38.0226669684862,0 -122.730411689814,38.0229115552549,0 contacts #khStyle84754 1 -122.732538931012,38.0229615071486,0 -122.732690789005,38.0232052000604,0 -122.732810522701,38.0234713525588,0 -122.732859028707,38.02374184751781,0 -122.732572875909,38.0237096469671,0 -122.732315782166,38.0235197901663,0 -122.732204581027,38.0232581642072,0 -122.731741126145,38.0225405831638,0 -122.731626690976,38.0222879620724,0 -122.731551096683,38.0220264172067,0 -122.731516486586,38.0214630382696,0 -122.731571057466,38.021242349216,0 -122.731771852008,38.0214410913799,0 -122.731959260068,38.0216983872335,0 -122.73210043362,38.0219420564467,0 -122.732538931012,38.0229615071486,0 contacts #khStyle84754 1 -122.854792262518,38.0211915054847,0 -122.854968797771,38.02146708873601,0 -122.854926601484,38.0220771677702,0 contacts #khStyle84754 1 -122.854477968635,38.0208536242375,0 -122.854720338098,38.021079226016,0 -122.854792262518,38.0211915054847,0 contacts #khStyle84754 1 -122.730275468063,38.0206445208528,0 -122.730553211867,38.0208299243959,0 -122.730865153778,38.0208171206628,0 -122.730900706017,38.0206369491947,0 -122.730214304767,38.0203334385962,0 -122.730024330294,38.0202924451381,0 -122.730275468063,38.0206445208528,0 contacts #khStyle84754 1 -122.854926601484,38.0220771677702,0 -122.854910517559,38.0223097083571,0 -122.855929912338,38.0226534761966,0 -122.856440644802,38.0227532559982,0 -122.857016619319,38.0226277958342,0 -122.857136163115,38.0223079916346,0 -122.856928392516,38.0218616013609,0 -122.856752749427,38.0210096764738,0 -122.856703385757,38.0205815086792,0 -122.856902473064,38.020185195349,0 -122.857263421336,38.0198566786973,0 -122.857748741021,38.0196499873925,0 -122.858270596772,38.0196956965747,0 -122.859311098335,38.0199763720605,0 -122.859803859813,38.0201572301896,0 -122.860270208308,38.0203741051306,0 -122.860704074497,38.0206360025861,0 -122.861816700917,38.0215746746891,0 -122.862225622815,38.0218545618999,0 -122.862675560529,38.0220984457301,0 -122.863163351518,38.0222837900506,0 -122.864177867035,38.0225914293882,0 -122.865224593016,38.0228134766062,0 -122.86725474091,38.0234242056364,0 -122.868885716502,38.0241421732387,0 -122.868958527608,38.02417422437,0 contacts #khStyle84754 1 -122.679066655835,38.0175855746238,0 -122.679178929602,38.0175818372649,0 -122.679126838318,38.0174979211025,0 contacts #khStyle84754 1 -122.801646380252,38.0173554385838,0 -122.801856544231,38.0171610444382,0 -122.80203619759,38.0170802365136,0 -122.802415652992,38.0168375406142,0 -122.802538972982,38.0167881816745,0 -122.802673276161,38.0167568649884,0 -122.802810710727,38.0167525941821,0 -122.803150893106,38.0168162620691,0 -122.803339047034,38.0168841799339,0 -122.803452801684,38.0169474635024,0 -122.803549788054,38.0170242367009,0 -122.80371343136,38.0172047699289,0 -122.803765856133,38.0173040004512,0 -122.803763985233,38.0174707341792,0 -122.803689064587,38.0177950636712,0 -122.803694671104,38.0179618121848,0 -122.803658633558,38.0181239824694,0 -122.80366246957,38.0182862183891,0 -122.803631617135,38.0185069800119,0 -122.803700529852,38.0188315579627,0 -122.803694740838,38.0189982849912,0 -122.803740446987,38.0192146691539,0 -122.803735647987,38.0195436272213,0 -122.80369478502,38.01964720674731,0 -122.803633636007,38.0197462422148,0 -122.80330655407,38.0201016907907,0 -122.803178274195,38.0201420271236,0 -122.803038673677,38.0201553117457,0 -122.802622077421,38.0201681193166,0 -122.802417088255,38.0201362251294,0 -122.802208782739,38.0201448817249,0 -122.802141161705,38.020135753135,0 -122.802012757011,38.0200904689728,0 -122.801958722823,38.0200588324506,0 -122.801769052971,38.0198917704865,0 -122.801706648239,38.0197970294741,0 -122.801645588877,38.0194679563756,0 -122.801600773173,38.0193361074146,0 contacts #khStyle84754 1 -122.84851196441,38.0162988183932,0 -122.848884224922,38.0163760480935,0 -122.849887515921,38.0167063287947,0 -122.850355949219,38.0169232461167,0 -122.851246431594,38.0174110917002,0 -122.851738434732,38.0175964892634,0 -122.852197239288,38.017826905903,0 -122.852601466186,38.0181113273465,0 -122.853151822275,38.018851078988,0 -122.853383523718,38.0192434302368,0 -122.853767146449,38.020046055273,0 -122.854017395746,38.0204249096209,0 -122.85440482149,38.0207855372085,0 -122.854477968635,38.0208536242375,0 contacts #khStyle84754 1 -122.848224665077,38.0160684338941,0 -122.848272138758,38.0162490631066,0 -122.84851196441,38.0162988183932,0 contacts #khStyle84754 1 -122.848221682908,38.016057087225,0 -122.848224665077,38.0160684338941,0 contacts #khStyle84754 1 -122.848219258328,38.01603001284821,0 -122.848215268512,38.0160326814686,0 -122.848221682908,38.016057087225,0 contacts #khStyle84754 1 -122.839894199965,38.0105546224702,0 -122.839949711751,38.010631835157,0 -122.840279093775,38.0109161955523,0 -122.84129945694,38.0106942731627,0 -122.841349705348,38.010683344196,0 -122.84188977849,38.010666062064,0 -122.842415677084,38.0107839498163,0 -122.84286230611,38.0110143867624,0 -122.843225789533,38.0113393429365,0 -122.843631360298,38.0116283040438,0 -122.843910641236,38.0117741701039,0 -122.844081192637,38.0118632470366,0 -122.844155636767,38.0118820120898,0 -122.844602446744,38.0119946378137,0 -122.845080840344,38.0121935644054,0 -122.845501057032,38.0124645131385,0 -122.84617710002,38.0131413779345,0 -122.846284511451,38.01321075009061,0 -122.846596614175,38.0134123217301,0 -122.84764136631,38.0136390303288,0 -122.848143696522,38.0138064313232,0 -122.848279899866,38.0139106938991,0 -122.848532905428,38.0141043664322,0 -122.848811606679,38.01447425714831,0 -122.848835416271,38.0145360844408,0 -122.848973081704,38.0148935634818,0 -122.848929496309,38.0153126002574,0 -122.848699406195,38.0157088597477,0 -122.848219258328,38.01603001284821,0 contacts #khStyle84754 1 -122.83910854486,38.00947465528391,0 -122.839125976649,38.0094860625909,0 -122.839894199965,38.0105546224702,0 contacts #khStyle84754 1 -122.869253897727,38.0240619023125,0 -122.869169490491,38.0238869181658,0 -122.868803604377,38.0231283914092,0 -122.868673196595,38.0228580360093,0 -122.868149381621,38.0221048697013,0 -122.867846674713,38.0217485172873,0 -122.867466976226,38.0214416452285,0 -122.867037353557,38.0211797778044,0 -122.866573480362,38.020958426338,0 -122.865608979639,38.0205652449547,0 -122.864616991269,38.0202170869422,0 -122.864127567727,38.0200120786067,0 -122.86365679998,38.0198148817388,0 -122.861697514183,38.0190779964289,0 -122.86078551832,38.018766044973,0 -122.86020351929,38.0185669650105,0 -122.858773108768,38.0179568523007,0 -122.858260357532,38.0178120160981,0 -122.857776533659,38.017622149652,0 -122.857637161958,38.017553117367,0 -122.857590415907,38.0175299634843,0 -122.857149964547,38.0173118009778,0 -122.856855325818,38.0171658601133,0 -122.855896997193,38.0167635933159,0 -122.854978659962,38.01630729251751,0 -122.854685000307,38.0161991010689,0 -122.854487716319,38.0161264161953,0 -122.854052512217,38.0158626626539,0 -122.852334315868,38.0148213228177,0 -122.851924758862,38.0145413997341,0 -122.851159155612,38.0139320482635,0 -122.851129320833,38.0139127856993,0 -122.85024067128,38.013339028741,0 -122.849480682167,38.0128483289302,0 -122.847208292887,38.0116736696242,0 -122.846177965816,38.0110486330739,0 -122.845488549318,38.0106303951101,0 -122.845287907564,38.0105195668792,0 -122.84459712902,38.0101379972023,0 -122.842745070598,38.0092432141136,0 -122.842625691377,38.0091619037763,0 contacts #khStyle84754 1 -122.842397787869,38.0090066756606,0 -122.842115665269,38.00881451666851,0 contacts #khStyle84754 1 -122.719861495556,38.0093765413172,0 -122.720061447119,38.0095933296082,0 -122.720240648578,38.0098371044785,0 -122.720361436612,38.01008975226321,0 -122.720062927604,38.010138607775,0 -122.719750765326,38.0100342127724,0 -122.719190206217,38.0097219262544,0 -122.718656060884,38.0093916727381,0 -122.718435416708,38.0091883547166,0 -122.71825116996,38.0089625886113,0 -122.717821809752,38.0082315152825,0 -122.717723853466,38.0079699070615,0 -122.717538846429,38.007757660456,0 -122.716974960315,38.0073912758182,0 -122.716940752985,38.00721544473951,0 -122.717298586509,38.00710364819501,0 -122.717633792788,38.0071360022238,0 -122.717958821982,38.0072224102123,0 -122.718260205606,38.00734931520531,0 -122.718537993178,38.0075032034077,0 -122.718790775225,38.007679559902,0 -122.719017110269,38.0078828951748,0 -122.719179252847,38.0081176178295,0 -122.719406574273,38.0086228813601,0 -122.719861495556,38.0093765413172,0 contacts #khStyle84754 1 -122.958553414788,38.0998292759238,0 -122.958271321514,38.0993132318021,0 -122.958039872462,38.0989256026864,0 -122.95774068838,38.0985694911723,0 -122.957023606047,38.0979203076699,0 -122.95673049807,38.0975506769643,0 -122.956588888762,38.097145054831,0 -122.956760584793,38.096703505357,0 -122.957180166735,38.0965504550461,0 -122.957386399267,38.09659151303,0 -122.957747144234,38.0966633312729,0 -122.958252792828,38.0968257507489,0 -122.95919097449,38.0972542007666,0 -122.960899715149,38.0983723833896,0 -122.961354458228,38.0984536579564,0 -122.961610308972,38.0981536867159,0 -122.96167721473,38.0980752428127,0 -122.96104959292,38.0973675334359,0 -122.960859134465,38.0969573928782,0 -122.961140526827,38.0966105084079,0 -122.961370962558,38.09624107382031,0 -122.961222214041,38.0958129232962,0 -122.96080932296,38.09547931057231,0 -122.960720752217,38.0951593319237,0 -122.961203821171,38.0948846200548,0 -122.961738126884,38.0947631381712,0 -122.961657802471,38.0943440245893,0 -122.961666797512,38.0943062006915,0 -122.961746742333,38.0939700331936,0 -122.962212362215,38.0937936493208,0 -122.962269675732,38.0937719379054,0 -122.962332367286,38.0937752624698,0 -122.962868400164,38.0938036871817,0 -122.96315909753,38.0937116539756,0 -122.963252297482,38.0936821471764,0 -122.963224380159,38.0932134830155,0 -122.963002905309,38.0928213603659,0 -122.962651323844,38.0924832683796,0 -122.962248756729,38.0921947269649,0 -122.961879008546,38.091852120024,0 -122.961635442183,38.0914735058382,0 -122.962039350359,38.091230306775,0 -122.962615282692,38.0911899487714,0 -122.962957185234,38.0909287001186,0 -122.963193643164,38.09057728895941,0 -122.96377800572,38.0907712556068,0 -122.963925638394,38.0905865464207,0 -122.963719888843,38.0901133167697,0 -122.963468124413,38.0897301972556,0 -122.963319726357,38.0893155679151,0 -122.963307828619,38.0888829592012,0 -122.963504031383,38.0884864707736,0 -122.963716395556,38.0882582475838,0 -122.963785091797,38.0881844208303,0 -122.963830995701,38.088135088532,0 -122.964263042076,38.0878693596585,0 -122.964818614309,38.0878695409665,0 -122.965306878955,38.0877750658522,0 -122.965608901054,38.0873921265988,0 -122.965649722841,38.08697755995781,0 -122.965634960842,38.0865449504602,0 -122.965702166141,38.08640137096511,0 -122.965826874836,38.0861349378221,0 -122.965805775027,38.0860491553935,0 -122.965513175596,38.084859555187,0 -122.96578881483,38.0844766069403,0 -122.966186857628,38.0844722257242,0 -122.966425406145,38.0849139175956,0 -122.966979131088,38.0850087205482,0 -122.967077989687,38.08467979074451,0 -122.966898239338,38.0842291056289,0 -122.966592662087,38.08386400110241,0 -122.966539072807,38.0836103542131,0 -122.966506970398,38.08345840736941,0 -122.966526083453,38.0833147924623,0 -122.966564541236,38.0830258201424,0 -122.966447165723,38.0825571282479,0 -122.966647844453,38.08240221336611,0 -122.966715583939,38.0823499213287,0 -122.96705788337,38.0822557704059,0 -122.967124710666,38.0822373891281,0 -122.967002337984,38.0817822151232,0 -122.966987214739,38.0813450990262,0 -122.967124234625,38.0809305608887,0 -122.967439032636,38.0805791646842,0 -122.967704221112,38.0804637088191,0 -122.967914823703,38.0803720174824,0 -122.968034216363,38.0803435868645,0 -122.968798715442,38.0801615355889,0 -122.968954338805,38.0801244760532,0 -122.969428224438,38.0793495278102,0 -122.969801424382,38.0790386986619,0 -122.970724844914,38.0785657935721,0 -122.971119774343,38.0782459535902,0 -122.970992714786,38.0780157559324,0 -122.970933199635,38.0779079299777,0 -122.970631195413,38.0775338238853,0 -122.970694447333,38.0770787043634,0 -122.970853902583,38.0769762006425,0 -122.971065819949,38.0768399715587,0 -122.971107479771,38.0768328771097,0 -122.971620633067,38.0767454884753,0 -122.971888007718,38.0763805487057,0 -122.972419731318,38.0751549727509,0 -122.972651118311,38.0747674902868,0 -122.972937366139,38.0743980466287,0 -122.973004149274,38.0742517786816,0 -122.973123989889,38.0739893030531,0 -122.973124575537,38.07398802035771,0 -122.973133638692,38.0735689360097,0 -122.972887950621,38.0731542929278,0 -122.973127971986,38.0729118897837,0 -122.973173448269,38.0728659619941,0 -122.973558711499,38.0725596301727,0 -122.973699243901,38.0721360722594,0 -122.973576773377,38.0716935116208,0 -122.973573284339,38.0716809035218,0 -122.973648925339,38.0713835060105,0 -122.974252117911,38.0713746425952,0 -122.974779349769,38.0711782705627,0 -122.974784119551,38.07117649400111,0 -122.974903949722,38.0708340431942,0 -122.974629454358,38.0702706884232,0 -122.974368792452,38.0698920950545,0 -122.974192228676,38.0694729649399,0 -122.974149632012,38.0690358422818,0 -122.974540896773,38.0689163746427,0 -122.974606779249,38.0688962581141,0 -122.975005168002,38.0686755445646,0 -122.975170979689,38.06825199071221,0 -122.975822831249,38.0675491588601,0 -122.975637355161,38.0671390413193,0 -122.975591879812,38.0667650067506,0 -122.976080396951,38.0665172726977,0 -122.977130936834,38.0667473310962,0 -122.977681716171,38.066751957622,0 -122.978049237553,38.0664664738813,0 -122.978081892708,38.0664411078037,0 -122.978080936255,38.0660715899778,0 -122.977648892431,38.0657560554453,0 -122.977413543423,38.06531889192961,0 -122.977516243135,38.0650034723591,0 -122.977640089006,38.0650090808299,0 -122.978116165516,38.06503063915591,0 -122.978585283032,38.0652605598022,0 -122.979044086494,38.0654409070045,0 -122.979584923137,38.0652968143079,0 -122.979870735185,38.0649543912977,0 -122.979999462722,38.0645218105836,0 -122.980060501451,38.0640892164659,0 -122.979961230662,38.0639274400951,0 -122.979598659817,38.0633365706662,0 -122.979881753947,38.062493946079,0 -122.979901465434,38.0620703563579,0 -122.979872746436,38.0620055657306,0 -122.979721678894,38.0616647523553,0 -122.979456390203,38.061286168765,0 -122.979124121926,38.0609436214218,0 -122.978665718648,38.0607091985418,0 -122.978247588751,38.0604207065727,0 -122.978002980339,38.0600195923493,0 -122.978319396894,38.0599818071023,0 -122.979015259657,38.0598987067209,0 -122.979020049828,38.0598981346608,0 -122.979441904103,38.0596188287151,0 -122.97975548912,38.0592448671223,0 -122.980231757443,38.0592629860941,0 -122.981265777737,38.0596552324499,0 -122.981706482545,38.0594525293011,0 -122.981930182541,38.0591034927167,0 -122.981957720532,38.0590605252394,0 -122.98194038102,38.0586008777719,0 -122.982320520016,38.058398161392,0 -122.982379976797,38.0583814135134,0 -122.982848119171,38.0582495451274,0 -122.983198006822,38.0579116311735,0 -122.983405773081,38.0575196165961,0 -122.983580871556,38.0566634454393,0 -122.983521836478,38.0562443479826,0 -122.983169381174,38.0554196322303,0 -122.983140269585,38.055005045879,0 -122.983154431039,38.0549688451708,0 -122.983291957543,38.0546172863164,0 -122.983464606956,38.0541759377822,0 -122.983582249083,38.0537568696379,0 -122.98360795665,38.053577527303,0 -122.98364361285,38.0533287793767,0 -122.983602748073,38.0529006720829,0 -122.983464640121,38.0524860674418,0 -122.983384829012,38.0523513721695,0 -122.983234986462,38.0520984850384,0 -122.982675233037,38.0513593518744,0 -122.982637436429,38.0512123035676,0 -122.982561716558,38.0509177123727,0 -122.982761264443,38.0505662540081,0 -122.982933483459,38.0504765961833,0 -122.983237183036,38.0503184879683,0 -122.9834684344,38.04993098318,0 -122.983345697615,38.0496409013158,0 -122.983275846996,38.0494758120027,0 -122.983407334968,38.0492234800661,0 -122.9840128393,38.049205555157,0 -122.984035144288,38.0491564798148,0 -122.984191014019,38.0488135339092,0 -122.984183318879,38.0487550193172,0 -122.984134121782,38.0483809175518,0 -122.983970719955,38.0479751256801,0 -122.983967169514,38.0479663084672,0 -122.983962993191,38.0475291942475,0 -122.983750801508,38.0471551342936,0 -122.983383669874,38.0468261111418,0 -122.983096686788,38.0464610499458,0 -122.982629944144,38.0456858809063,0 -122.982079508033,38.0449377327994,0 -122.981848107957,38.0445366277339,0 -122.981881977106,38.0445037136707,0 -122.982172642364,38.0442212433522,0 -122.982290949322,38.0439937164461,0 -122.982343676294,38.0438923118987,0 -122.981734494568,38.043135138747,0 -122.981632328362,38.0429342319328,0 -122.981530525237,38.0427340379123,0 -122.981510343073,38.0422743885303,0 -122.981643296754,38.042226143309,0 -122.981919944796,38.042125754685,0 -122.982065606887,38.0421461473557,0 -122.982196067198,38.0421644116162,0 -122.982500080668,38.0422069724772,0 -122.982947336919,38.0424548987165,0 -122.983245030017,38.0426550996129,0 -122.983778450208,38.0430138241364,0 -122.98445284608,38.0436853768241,0 -122.985243729339,38.0442938548105,0 -122.985697069413,38.0445057207081,0 -122.986225981172,38.0443841276034,0 -122.986116211984,38.0440772624076,0 -122.986085733119,38.0439920567538,0 -122.985822617717,38.0435864485758,0 -122.985537059749,38.0432213933413,0 -122.98512970091,38.0428653313228,0 -122.985025412368,38.0425678975073,0 -122.985030462637,38.0425661775454,0 -122.9856205703,38.0423652034828,0 -122.985624097563,38.0422135056436,0 -122.985630629174,38.0419325974101,0 -122.985526720666,38.0415134931568,0 -122.985285694047,38.0411259121959,0 -122.984571421237,38.0404813955601,0 -122.984295142008,38.0401118321697,0 -122.984083687334,38.0397152407049,0 -122.983782231151,38.0388905324021,0 -122.983589302274,38.0384894366735,0 -122.983325856957,38.0381153666351,0 -122.981885308972,38.0368263017752,0 -122.981215274172,38.0361502276323,0 -122.980657798174,38.0354155889082,0 -122.980459171004,38.0351905598661,0 -122.980339534548,38.0350550202877,0 -122.980189733295,38.0346178763046,0 -122.98033796673,38.0342754237917,0 -122.980892044344,38.0343521385037,0 -122.981407638192,38.034527982829,0 -122.982755677729,38.0352582526421,0 -122.983223553188,38.035479143922,0 -122.98394444434,38.0355928172856,0 -122.984825638308,38.0357317614198,0 -122.985232262428,38.0359976983392,0 -122.985946736285,38.03669992145711,0 -122.986259452849,38.0370072703787,0 -122.986648632686,38.0373092504126,0 -122.987189885556,38.037575199397,0 -122.987208835113,38.03756945028991,0 -122.987427430372,38.0375031303796,0 -122.987220254216,38.0370254310164,0 -122.986963207364,38.0366423573069,0 -122.985976970392,38.0356057594146,0 -122.985760175284,38.03522268885321,0 -122.985763541162,38.0352062990164,0 -122.98581891083,38.03493668040141,0 -122.985856417258,38.0347540443963,0 -122.986235642825,38.0348983027995,0 -122.986667536841,38.0352408461376,0 -122.986781134383,38.0353569844954,0 -122.987002572852,38.0355833744564,0 -122.987435903692,38.0358988770944,0 -122.987879945422,38.0360746831837,0 -122.98793458622,38.0358880308692,0 -122.988003944011,38.0356511040704,0 -122.987757222715,38.0352815523474,0 -122.98653985165,38.0344026497964,0 -122.98621657459,38.0340601217639,0 -122.985968808179,38.0336455026104,0 -122.985974518855,38.0335456063754,0 -122.985990962325,38.0332579610152,0 -122.986227077304,38.0331149589179,0 -122.986452163668,38.0329786352967,0 -122.986967074495,38.03301475876581,0 -122.987475905261,38.0332040945622,0 -122.987919561695,38.03345650830671,0 -122.988010330941,38.0335190904012,0 -122.988736722237,38.03401990436201,0 -122.990138252035,38.0346734882434,0 -122.990641762078,38.0348537969271,0 -122.991036496851,38.0348957341583,0 -122.991193720451,38.0349124374531,0 -122.991416622204,38.0348512315686,0 -122.991685876555,38.0347772971731,0 -122.991590845651,38.0343627050921,0 -122.991295325103,38.03398864956531,0 -122.990182279311,38.0330422002427,0 -122.990092573033,38.0329804879862,0 -122.989363338078,38.0324788139281,0 -122.98826137892,38.0315323472601,0 -122.987864031489,38.0312393837454,0 -122.986840815803,38.0302343313307,0 -122.986534294133,38.0298782871805,0 -122.986310036191,38.0294907097801,0 -122.986274319929,38.0292876615163,0 -122.986226804381,38.0290175321084,0 -122.986468276824,38.0287471867061,0 -122.987062913598,38.0288148657266,0 -122.987484463612,38.0290762910506,0 -122.987875029993,38.0293827741435,0 -122.989350437677,38.0306447336078,0 -122.990187517647,38.0312171349938,0 -122.990700656485,38.0311090392257,0 -122.990719473982,38.0310752708856,0 -122.990770101837,38.0309844181132,0 -122.990901536982,38.0307485537664,0 -122.99077269177,38.0303024127476,0 -122.990320927393,38.0295182609007,0 -122.990172426385,38.0291764378209,0 -122.99014472374,38.0291126708498,0 -122.990239149925,38.0286395159447,0 -122.9906088864,38.0285996397831,0 -122.990614816269,38.0285990002355,0 -122.991120767006,38.0288694342727,0 -122.991535920199,38.029148869681,0 -122.992698778494,38.0300727798714,0 -122.993142794039,38.0302846170582,0 -122.993741020846,38.0302350977805,0 -122.993823652931,38.0299789369663,0 -122.993848587939,38.0299016376669,0 -122.993641388542,38.0294554934438,0 -122.993449445635,38.0292361591462,0 -122.993333768459,38.0291039733616,0 -122.992627732639,38.0284504921317,0 -122.991847640009,38.0278510753521,0 -122.991412551862,38.0275806516029,0 -122.991123116682,38.0271750513145,0 -122.991131904884,38.0270624235435,0 -122.991148081706,38.0268551038385,0 -122.991706373618,38.0270489331573,0 -122.992183169113,38.0268777386381,0 -122.992242387899,38.0265182435241,0 -122.992245522887,38.0264992120817,0 -122.991898044716,38.0261296588306,0 -122.991621071008,38.025755605248,0 -122.991442717448,38.0254009601247,0 -122.991417096457,38.0253500140487,0 -122.991348074323,38.0249128919734,0 -122.991790317063,38.0247597208653,0 -122.992363936184,38.0246696492661,0 -122.992699840579,38.0245266467621,0 -122.992818997548,38.0244759184376,0 -122.993103324672,38.0240037160803,0 -122.9931608675,38.0239081497709,0 -122.992992851258,38.023498057978,0 -122.992685614353,38.0231555484189,0 -122.991872110119,38.02254711524451,0 -122.991691282308,38.0221730709285,0 -122.991782793343,38.0220447412338,0 -122.991967617811,38.0217855526791,0 -122.992471053624,38.02187572748,0 -122.992964151317,38.0221055958141,0 -122.993782646401,38.0226914901605,0 -122.994225908328,38.0229033236686,0 -122.994551600364,38.0228780751813,0 -122.994806627515,38.0228583041772,0 -122.995049119815,38.0225383714395,0 -122.99506811701,38.0224400691788,0 -122.995227873955,38.0216133855162,0 -122.995231125681,38.0215965588287,0 -122.995561534075,38.0215830623481,0 -122.996066387077,38.021844462824,0 -122.996627162899,38.02170930630151,0 -122.996672030434,38.0214325549379,0 -122.996684147388,38.02135781492841,0 -122.996543890246,38.0209116789474,0 -122.996635116098,38.0206272764192,0 -122.996812740357,38.0200735146788,0 -122.996831274533,38.0196499194852,0 -122.996563557177,38.0192713713057,0 -122.996516381029,38.0191490667887,0 -122.996400161645,38.0188477653331,0 -122.996460184391,38.0185645010672,0 -122.996487054399,38.018437693202,0 -122.997051359224,38.0184016744865,0 -122.997129013811,38.018362248238,0 -122.997415226306,38.0182169336062,0 -122.997374774569,38.017905435391,0 -122.997354364998,38.0177482706686,0 -122.997132582092,38.0172931181514,0 -122.997154868851,38.0172812731272,0 -122.997403876433,38.0171489293888,0 -122.997988463217,38.0171399453296,0 -122.998025346411,38.0171019051766,0 -122.998342358072,38.0167749473266,0 -122.998249092042,38.0163919039028,0 -122.997988423328,38.0161299167694,0 -122.997894866733,38.0160358863785,0 -122.997596255272,38.0158370992456,0 -122.997468371203,38.0157519656196,0 -122.997440243308,38.0157075262723,0 -122.997240181385,38.015391446068,0 -122.997235918686,38.0152401396013,0 -122.997227739771,38.0149498234556,0 -122.9973142684,38.0145127123822,0 -122.997111716054,38.0141431811283,0 -122.997096869987,38.01413007730281,0 -122.99673899353,38.0138141969865,0 -122.996421458954,38.0134086070392,0 -122.996578470134,38.0131382354777,0 -122.997117451923,38.0132419119113,0 -122.997972550876,38.013796235857,0 -122.998441047483,38.0140125615322,0 -122.998955473024,38.0141612918945,0 -122.99921095289,38.0141342623945,0 -122.999393961346,38.0141148999403,0 -123.000019933037,38.0140486693626,0 -123.000565690374,38.0141117730023,0 -123.001110022451,38.0139630757886,0 -123.001124267444,38.0139461949917,0 -123.001361001855,38.0136656553447,0 -123.001109659426,38.0132781111244,0 -123.001109657486,38.0130888445577,0 -123.001122389038,38.0129729437274,0 -123.001141338468,38.0128004381772,0 -123.001457461669,38.0125210424646,0 -123.002050199716,38.0125841249446,0 -123.002126509518,38.0125034728189,0 -123.002613014742,38.0119892782088,0 -123.002666935353,38.0120249758727,0 -123.003069055951,38.0122911943863,0 -123.003651116837,38.01242637059901,0 -123.003750707848,38.0123642208879,0 -123.003954417465,38.01223709543,0 -123.003862547834,38.0117639315376,0 -123.003696923181,38.011516258451,0 -123.003356293118,38.0110068784236,0 -123.003290773611,38.0105742704957,0 -123.003358436698,38.010281360839,0 -123.003387585259,38.0101551776427,0 -123.003632486767,38.0097676252417,0 -123.00401622257,38.0094521697997,0 -123.004265035429,38.00908714765281,0 -123.004318765361,38.0086545362335,0 -123.004226187322,38.00820841047,0 -123.004333671506,38.0078208607615,0 -123.004787167746,38.00755046386121,0 -123.005306181112,38.0076000135053,0 -123.005831967057,38.0077622193503,0 -123.006325008463,38.007960475298,0 -123.006689574643,38.0079110966676,0 -123.006857542113,38.007888345927,0 -123.007267244676,38.0076179418132,0 -123.007314767787,38.00746632022981,0 -123.007404252994,38.0071808176177,0 -123.007381067333,38.0071286768704,0 -123.007307152636,38.0069624543204,0 contacts #khStyle84754 1 -122.837388080749,38.0062705600662,0 -122.837335931492,38.0063493687965,0 -122.837134849018,38.006653245799,0 -122.836956684321,38.0070540629086,0 -122.836876349941,38.0074820567805,0 -122.836879675958,38.0078108259447,0 -122.83688072658,38.0079146770322,0 -122.83699299433,38.0083339308897,0 -122.837239883418,38.0087263366505,0 -122.837666894768,38.0089612721824,0 -122.838725715674,38.009224131528,0 -122.83910854486,38.00947465528391,0 contacts #khStyle84754 1 -122.841362992156,38.0083397288723,0 -122.840082283585,38.0077929909979,0 -122.839983341947,38.0077406043158,0 -122.839630007028,38.0075535225888,0 -122.839499575008,38.0074752796572,0 -122.838334907047,38.0067766103653,0 -122.837388080749,38.0062705600662,0 contacts #khStyle84754 1 -122.836302367284,38.0056381254812,0 -122.836282146816,38.0057250726495,0 -122.836203886487,38.0060615868034,0 -122.836087300102,38.00694016836771,0 -122.836035710028,38.0069482498152,0 -122.835602653017,38.0070160860797,0 -122.835155725305,38.0067811143884,0 -122.834063313545,38.005810669672,0 -122.83400784122,38.0057674302354,0 -122.833428571203,38.0053158975813,0 contacts #khStyle84754 1 -122.520984722956,38.004991589313,0 -122.520996942539,38.0049736137243,0 -122.52105783551,38.0049152795974,0 -122.521124306627,38.0048749937569,0 -122.521219878244,38.0048483458993,0 -122.521347485769,38.0048218287953,0 -122.521464414549,38.004795267954,0 -122.521572088415,38.0047686692193,0 -122.521686257075,38.0047285777434,0 -122.521831154587,38.0046705859936,0 -122.52193544387,38.0046169348223,0 -122.522039733003,38.0045632835568,0 -122.522149834041,38.0044916303627,0 -122.522242195582,38.0044108919912,0 -122.522394590493,38.0042943471254,0 -122.522498137759,38.0042451988078,0 -122.522536654772,38.0042396468123,0 contacts #khStyle84754 1 -123.007307152636,38.0069624543204,0 -123.007231926321,38.00679328132731,0 -123.006953680241,38.0064991535524,0 -123.006247229276,38.0057523663337,0 -123.005430924263,38.0046393343124,0 -123.005210083354,38.004224521472,0 contacts #khStyle84754 1 -123.005210083354,38.004224521472,0 -123.004999093805,38.0038282080024,0 -123.005017577305,38.0034136226279,0 -123.005422285857,38.0032513774018,0 -123.005836642532,38.0036163739044,0 -123.006266273689,38.0035352390275,0 -123.006487644093,38.0031341622242,0 -123.006308922029,38.0027150801908,0 -123.006184657504,38.0022374125823,0 -123.006271190442,38.0020307851157,0 -123.006309215407,38.0019399869079,0 -123.006887282733,38.0020481091797,0 -123.007006944021,38.0021191112327,0 -123.00732013904,38.0023049469644,0 -123.007689646003,38.0026293824197,0 -123.008099730933,38.0029177632218,0 -123.008569256696,38.0031475558694,0 -123.009084335206,38.0032736971175,0 -123.009561999814,38.0030753813803,0 -123.009871633603,38.0027283675185,0 -123.009965439725,38.00245509573881,0 -123.010114819257,38.0020199256368,0 -123.010160909488,38.00188565522021,0 -123.010401121292,38.0015025947302,0 -123.010712666777,38.001199743787,0 contacts #khStyle84754 1 -123.010712666777,38.001199743787,0 -123.010748831715,38.0011645879161,0 -123.011674947369,38.0008490579631,0 contacts #khStyle84754 1 -122.836302367284,38.0056381254812,0 -122.835861883297,38.0053896463608,0 -122.835390342567,38.0051816787544,0 -122.835097701278,38.0050900736432,0 -122.834884164669,38.0050232299581,0 -122.834426562401,38.0047927464467,0 -122.834091223579,38.0045739090422,0 -122.832751769258,38.0036997772829,0 -122.83200140884,38.0030813081838,0 -122.831674008251,38.0027383436265,0 -122.82990644852,38.0017121061593,0 -122.828553709311,38.0009266741381,0 -122.827700034012,38.0006775483892,0 contacts #khStyle84754 1 -123.006292503101,38.0065860407909,0 -123.006041880948,38.0063201771558,0 -123.005907311583,38.0061309172952,0 -123.005774882199,38.0060002370709,0 -123.005667014217,38.0058605449331,0 -123.005403582249,38.0056036953598,0 -123.005241611678,38.005500056194,0 -123.005175750228,38.0054054257604,0 -123.005053640148,38.0051485675332,0 -123.00486211871,38.0049187501241,0 -123.004773831397,38.004770043638,0 -123.004693734942,38.0046799208865,0 -123.004519659368,38.0045086842788,0 -123.004276885891,38.0043104134343,0 -123.003905957878,38.0039138669169,0 -123.003754669765,38.00379670515981,0 -123.00362723183,38.003670533983,0 -123.003475589281,38.0035533697759,0 -123.00334744149,38.0034271941148,0 -123.003150235954,38.0032694762474,0 -123.003024223953,38.0031387948418,0 -123.002874721161,38.0030261393453,0 -123.002693891286,38.0028639150278,0 -123.00244222802,38.0026701458812,0 -123.002319421833,38.0025349583187,0 -123.002272437489,38.0024989079433,0 -123.00210513663,38.0023817443008,0 -123.001945313132,38.0023006314421,0 -123.001754169873,38.0022330389395,0 -123.001574056488,38.0021519299986,0 -123.001413167896,38.0020663068896,0 -123.001223446946,38.0019761805146,0 -123.001163291103,38.0019536500017,0 -123.000905227935,38.0018184541694,0 -123.000756086605,38.0017688835432,0 -123.000528636993,38.0016967756236,0 -123.000081925713,38.0015841044818,0 -122.999608518333,38.0014534030748,0 -122.999428411279,38.0014038276058,0 -122.999052890689,38.001300167807,0 -122.998445656835,38.0010793307371,0 -122.998132429795,38.0009486323343,0 -122.998039887645,38.0009080715333,0 -122.997730933094,38.0008134233859,0 -122.997480353794,38.00073680093541,0 -122.997277823556,38.0006556772902,0 -122.997095941162,38.0005925779043,0 -122.996908722371,38.000493426794,0 -122.996739652312,38.0004303296772,0 -122.996386569326,38.0002545603278,0 -122.996331399329,38.00023202392381,0 contacts #khStyle84754 1 -123.006703502087,38.0007502882215,0 -123.006746228354,38.0009080085979,0 -123.00675300066,38.0010206669766,0 -123.006738416185,38.0011288211575,0 -123.006699626994,38.0012369745282,0 -123.00661385313,38.0013226036514,0 -123.006491412653,38.0013766825208,0 -123.00635330905,38.00139471511801,0 -123.006217693091,38.001381203741,0 -123.005769903786,38.0012280076086,0 -123.005540667904,38.0011018409295,0 -123.005338481443,38.0009531396717,0 -123.005271202472,38.0008585092882,0 -123.005152300213,38.0005971455089,0 -123.005128443264,38.0004349163624,0 -123.005133063339,38.0003177520885,0 -123.005150143995,38.0002681800439,0 -123.005188936726,38.0002276220018,0 -123.005316003899,38.0001735400857,0 -123.005447699774,38.000137483402,0 -123.005584021471,38.0001149465932,0 -123.005792247252,38.00011944472121,0 -123.006122206713,38.0002095549532,0 -123.00624109524,38.000263625843,0 -123.006541527495,38.0004934334599,0 -123.006703502087,38.0007502882215,0 contacts #khStyle84754 1 -123.004752068607,38.0039769263276,0 -123.004619650348,38.0039363746498,0 -123.00456020528,38.0039138458487,0 -123.004512147269,38.0038732889701,0 -123.004166141566,38.0035263116137,0 -123.004022326641,38.0033415551671,0 -123.003885633356,38.0032153803459,0 -123.003721890633,38.0031117391184,0 -123.003599440508,38.0030621732349,0 -123.003487314209,38.0029945813991,0 -123.003388710531,38.002917976339,0 -123.003216779688,38.0027467377186,0 -123.002919907483,38.0025124141878,0 -123.002754741033,38.0024132790791,0 -123.002398076426,38.0021744479497,0 -123.002048174932,38.0019716667637,0 -123.001883013517,38.0018725283302,0 -123.001285016531,38.0015931400812,0 -123.001109182893,38.0015120282963,0 -123.000735438657,38.0013678153602,0 -122.999864088818,38.0010208021067,0 -122.999705338919,38.0009847458511,0 -122.999476113181,38.000921648593,0 -122.999067137375,38.0008360132111,0 -122.998794130672,38.0007999512761,0 -122.998596228501,38.0007458642511,0 -122.99839262959,38.0007143138441,0 -122.99806374308,38.0006241710267,0 -122.997817434519,38.0005250206787,0 -122.997619178444,38.000470934081,0 -122.997561162525,38.0004438927699,0 -122.997353655394,38.0002951720592,0 -122.997321265352,38.0002726394252,0 -122.997005203555,38.00002477161761,0 -122.996985272365,38.00000674492931,0 contacts #khStyle84754 1 -122.522536654772,38.0042396468123,0 -122.522589349136,38.0042320512152,0 -122.522668283097,38.0042458918496,0 -122.522784090366,38.0042824144817,0 -122.522970026652,38.0043732990361,0 -122.523147507921,38.00445062974981,0 -122.523359814803,38.0045371145899,0 -122.52344942786,38.0045509981283,0 -122.523616755399,38.00454717196051,0 -122.523742109444,38.00453866862451,0 -122.523861289047,38.004494089009,0 -122.523964094641,38.00444944277001,0 -122.524054826777,38.00440024103101,0 -122.524124230682,38.0043464462445,0 -122.524193838005,38.0042611075603,0 -122.524228358335,38.0042071710941,0 -122.524263764937,38.004126199915,0 -122.524298285657,38.0038514506426,0 -122.524303254678,38.0037433176058,0 -122.524318553815,38.0034684902947,0 -122.524345388129,38.0033919906727,0 -122.524361282371,38.0033560041031,0 -122.524387085026,38.0033290705062,0 -122.524439256885,38.0032977375132,0 -122.524509226099,38.0032664766986,0 -122.524619148555,38.0032218587424,0 -122.524685645276,38.0031770645858,0 -122.524719394759,38.0031321376048,0 -122.524736291059,38.003051091204,0 -122.524753274438,38.0029565259999,0 -122.524772814964,38.0029070350029,0 -122.524813596086,38.0028756556551,0 -122.524890683665,38.0028444234687,0 -122.524995563978,38.0028087974847,0 -122.525214346803,38.002773632858,0 -122.525487204148,38.0027431931398,0 -122.52592741355,38.0027044170317,0 -122.526314884733,38.00267443891731,0 -122.526524383058,38.0026437407111,0 -122.526686867556,38.0026173586707,0 -122.526940647264,38.0025643066087,0 -122.527051933217,38.0025287046384,0 -122.527149039074,38.0024840325856,0 -122.527294784293,38.002403505548,0 -122.527373582918,38.0023272147751,0 -122.527428090611,38.0022643451664,0 -122.527461924642,38.0022058985695,0 -122.527497326747,38.0021249263564,0 -122.527495258735,38.0020032456118,0 -122.527491055078,38.001881556255,0 -122.527457548785,38.001777774303,0 -122.527393518332,38.0016603501065,0 -122.527219984461,38.0014117990311,0 -122.527012455095,38.0011360721945,0 -122.526881057967,38.0009778183615,0 -122.526700090573,38.0007788067444,0 -122.526468899601,38.0005300216999,0 -122.526284346114,38.0003355013334,0 -122.526080746938,38.0001138653477,0 -122.525937875578,37.999932651803,0 contacts #khStyle84754 1 -122.525937875578,37.999932651803,0 -122.525931047872,37.9999239917285,0 contacts #khStyle84754 1 -122.827700034012,38.0006775483892,0 -122.825633448644,37.9999263765222,0 -122.825315229588,37.9997816879973,0 -122.825071132152,37.9996010594786,0 contacts #khStyle84754 1 -122.61815012185,37.9996028907981,0 -122.618063461228,37.9995665547348,0 -122.617236569566,37.9990951935366,0 -122.616369569623,37.9986732626656,0 -122.615809463374,37.9983740069795,0 -122.615478921879,37.9982827937892,0 -122.615159137372,37.9983132873828,0 -122.6147923907,37.9984743108636,0 contacts #khStyle84754 1 -123.001669404113,37.9980781051181,0 -123.001513153278,37.9981907719927,0 -123.001370781902,37.9983079419732,0 -123.001249765652,37.9984431400187,0 -123.001195308849,37.9985467904769,0 -123.001174663507,37.9986549462222,0 -123.001210256878,37.9987631037023,0 -123.001245137145,37.99881267470011,0 -123.001350491683,37.9988847790626,0 -123.00141491696,37.9989073103479,0 -123.001553020069,37.9989163222546,0 -123.001685426788,37.9988847759701,0 -123.001741307499,37.9988487227931,0 -123.001871931381,37.9987225372772,0 -123.002149556802,37.998294412435,0 contacts #khStyle84754 1 -123.002149556802,37.998294412435,0 -123.001669404113,37.9980781051181,0 contacts #khStyle84754 1 -123.003096316285,37.9977626235946,0 -123.003090623835,37.997929365821,0 -123.003060015723,37.9980375242222,0 -123.003032967719,37.9980870960585,0 -123.002936512728,37.9981637109109,0 -123.002748583661,37.9982403233216,0 -123.002549263899,37.9982853927863,0 -123.002411517563,37.9983034214671,0 -123.002149556802,37.998294412435,0 contacts #khStyle84754 1 -122.833428571203,38.0053158975813,0 -122.83290492397,38.0049077148089,0 -122.832682758772,38.0046577398649,0 -122.832592125927,38.0045557613528,0 -122.832354927804,38.0043513299959,0 -122.832225498893,38.0042397798276,0 -122.831366709719,38.003715783147,0 -122.830795619662,38.0034530467313,0 -122.830423363728,38.0032817836757,0 -122.830260657108,38.0030933355619,0 -122.830123388269,38.00293434875761,0 -122.829862287286,38.0025554256508,0 -122.829135183418,38.0019009211242,0 -122.82871359279,38.0016652280333,0 -122.828706827185,38.0016614456517,0 -122.828168784042,38.001750772495,0 -122.827667764246,38.0019888635643,0 -122.827324073452,38.0015235879047,0 -122.827157895631,38.001298620138,0 -122.827032023581,38.0012477927397,0 -122.826665028091,38.0010995980123,0 -122.825433328964,38.00100761070421,0 -122.824388523397,38.0009068825746,0 -122.823450507117,38.0005088860181,0 -122.822380184249,37.9999259154978,0 -122.821921469941,37.9995962366246,0 -122.821920610047,37.9995106126465,0 -122.82119011763,37.9989732138853,0 -122.820897457593,37.99871589172021,0 -122.820824624061,37.9986617011055,0 -122.82071577567,37.9986344931894,0 -122.820532824805,37.99849000203,0 -122.820495661826,37.998404321534,0 -122.820349361481,37.9982643935913,0 -122.820166122615,37.99809286268321,0 -122.81976404383,37.9977542508407,0 -122.81961861445,37.9976954395566,0 -122.819545426936,37.9976412476021,0 -122.819292286724,37.9976723964518,0 -122.819167220591,37.9976956487636,0 contacts #khStyle84754 1 -123.003096316285,37.9977626235946,0 -123.002917276711,37.9974066114825,0 -123.002779882298,37.9969965193829,0 contacts #khStyle84754 1 -123.002779882298,37.9969965193829,0 -123.003170322913,37.99668556063131,0 -123.00327567534,37.99661345298241,0 -123.003399887761,37.99655937105641,0 -123.003465376668,37.9965458507241,0 -123.003533713857,37.9965413434255,0 -123.003673237084,37.9965593638687,0 -123.003806706714,37.9965909050858,0 -123.003932348746,37.9966359671496,0 -123.004433854496,37.99693338286431,0 -123.004680868944,37.997032518803,0 -123.005071677983,37.9971451673113,0 -123.005745093732,37.9972803360146,0 -123.006004568369,37.9973614402112,0 -123.006120958974,37.9974200211229,0 -123.006169723769,37.9974605768491,0 -123.006408564884,37.9976903990463,0 -123.006232391902,37.9978616554561,0 -123.006127753937,37.99793376569981,0 -123.006068314045,37.9979608079861,0 -123.005868641996,37.9980103886078,0 -123.005661850243,37.9980284242607,0 -123.005385648797,37.9980059023037,0 -123.005046447961,37.9979473317137,0 -123.004788038364,37.9978662253754,0 -123.004552767953,37.9977490629899,0 -123.004351667837,37.9977085117607,0 -123.004142738665,37.9977130240496,0 -123.003735561111,37.9977806357921,0 -123.003597105047,37.9977896506375,0 -123.003096316285,37.9977626235946,0 contacts #khStyle84754 1 -123.001669404113,37.9980781051181,0 -123.001453714029,37.9977356098223,0 -123.001327716416,37.9976049213035,0 -123.001043688068,37.9973615685665,0 -123.000965384842,37.99727143751551,0 -123.000907726467,37.9971722916366,0 -123.000863232888,37.9969559772457,0 -123.000877830263,37.9967351565706,0 -123.000920899308,37.9966315074196,0 -123.001000624278,37.9965368721977,0 -123.001049744123,37.9965008206706,0 -123.001167553966,37.9964377295549,0 -123.001366514226,37.9963926624336,0 -123.001504965288,37.9963881557434,0 -123.00178187281,37.9964106847368,0 -123.002054863926,37.9964512415212,0 -123.002180504647,37.9964963033632,0 -123.002294042839,37.9965593936504,0 -123.002779882298,37.9969965193829,0 contacts #khStyle84754 1 -122.681891266331,37.9961977136405,0 -122.681977094799,37.9962336193969,0 -122.68210477026,37.99650434857,0 -122.682044713691,37.9967295032587,0 -122.681739378792,37.9968818943338,0 -122.681393227125,37.996926016816,0 -122.681075322971,37.9968575553017,0 -122.680844870514,37.9966496307589,0 -122.680842484802,37.9963792399078,0 -122.681006513746,37.9961453543112,0 -122.681121537235,37.9960996195287,0 contacts #khStyle84754 1 -122.819167220591,37.9976956487636,0 -122.819148070476,37.9976992091423,0 -122.81898622474,37.9978026037279,0 -122.818821464876,37.99764461911,0 -122.818782525014,37.9974147287174,0 -122.818745075489,37.99730200849001,0 -122.818707915175,37.997216327437,0 -122.818669831997,37.9970720609983,0 -122.818632093746,37.996932301543,0 -122.818486088854,37.996819410497,0 -122.818376899278,37.99678769344351,0 -122.817938243234,37.9964219790763,0 -122.817829121626,37.9963632228915,0 -122.817593814635,37.9963808769132,0 -122.817356809579,37.996222776008,0 -122.817101043045,37.9960240867885,0 -122.816992199917,37.995996875464,0 -122.816882146919,37.9958840394622,0 -122.816844989473,37.9957983578271,0 -122.816807832112,37.9957126761797,0 -122.816734371506,37.9956269368654,0 -122.816696637642,37.9954871767962,0 -122.816695439173,37.9953970457739,0 -122.816658282185,37.995311364077,0 -122.816584810884,37.995230131107,0 -122.816547654108,37.9951444493747,0 -122.81625594639,37.9949457011823,0 -122.81610988128,37.9948598458486,0 -122.815928790266,37.9948325184004,0 -122.815783646401,37.9948052480621,0 -122.815637938029,37.9947193927162,0 -122.815528741452,37.9946921794862,0 -122.815346730773,37.9946062657495,0 -122.815090687463,37.9943805330119,0 -122.815053245088,37.9942678116184,0 -122.81497978795,37.99418207122001,0 -122.814942633558,37.99409638898801,0 -122.814918784925,37.9939711828489,0 contacts #khStyle84754 1 -122.748476201621,37.9894286060311,0 -122.748431125985,37.9893924573296,0 -122.748063923926,37.989369133076,0 -122.747839497641,37.9892244444545,0 -122.747646898825,37.98862016708811,0 contacts #khStyle84754 1 -122.615868039407,37.9874236631675,0 -122.61595277524,37.9876898172932,0 -122.615946406083,37.9879556747929,0 -122.61580629629,37.9882075733824,0 -122.615493293041,37.98831019325591,0 -122.615173973159,37.9882595750046,0 -122.614994457741,37.9880156399916,0 -122.614975182728,37.9877542057576,0 -122.615056313649,37.9874840886297,0 -122.615065103127,37.9871641640467,0 -122.61522778424,37.9870880881158,0 -122.615868039407,37.9874236631675,0 contacts #khStyle84754 1 -122.814918784925,37.9939711828489,0 -122.814903995282,37.9938935365027,0 -122.814866553436,37.9937808150454,0 -122.814827904158,37.9935824689659,0 -122.814785216546,37.9930100804797,0 -122.814747143159,37.99286581276021,0 -122.814709702066,37.99275309124041,0 -122.814672548697,37.9926674089118,0 -122.814635395414,37.9925817265711,0 -122.814598242217,37.9924960442181,0 -122.814560733206,37.9924103612813,0 -122.814086751094,37.9920986533652,0 -122.814013297223,37.9920129123626,0 -122.81397614503,37.9919272298144,0 -122.813938992924,37.9918415472541,0 -122.813901840903,37.9917558646816,0 -122.813864333072,37.991670181523,0 -122.813791235778,37.99158444095571,0 -122.813753728161,37.9914987577615,0 -122.813716300706,37.9913815294807,0 -122.813679149172,37.9912958468358,0 -122.813641986281,37.9912146706179,0 -122.813604834916,37.99112898794861,0 -122.813531669754,37.9910702858558,0 -122.813530819634,37.9909846617845,0 -122.813404087496,37.99099797641291,0 -122.813239343223,37.9908444904887,0 -122.8130564951,37.9906729491945,0 -122.812946742988,37.9905871487523,0 -122.812909592741,37.9905014658649,0 -122.812836773149,37.9904472703606,0 -122.812763609271,37.9903885677955,0 -122.812654776041,37.9903613525255,0 -122.812545587003,37.9903341365778,0 -122.812537573805,37.9903344193646,0 -122.811568933848,37.9903685987423,0 -122.811351829617,37.9903727507617,0 -122.811280717903,37.9904852960092,0 -122.811172171409,37.9904851185822,0 -122.811064185889,37.9905435259139,0 -122.810956200199,37.9906019331443,0 -122.810848214338,37.9906603402732,0 -122.810524897717,37.990862600844,0 -122.810417541439,37.9909525537966,0 -122.810382372929,37.9910651574696,0 -122.810280276584,37.9911767141688,0 -122.810275302184,37.991182149491,0 -122.810203616102,37.9912406156367,0 -122.81009591465,37.9913260612592,0 -122.810024800105,37.9914386057017,0 -122.809881426934,37.9915555376286,0 -122.809809740179,37.991614003524,0 -122.809738339116,37.9916995085776,0 -122.809523849205,37.9919289842591,0 -122.809415860277,37.9919873900301,0 -122.809308501016,37.9920773419242,0 -122.809273400538,37.9921629066093,0 -122.809129954459,37.9923068761927,0 -122.809095139237,37.9924194800175,0 -122.808952048212,37.9925634499577,0 -122.808736697026,37.9927118065308,0 -122.808593045712,37.9927971911869,0 -122.808485054781,37.9928555960753,0 -122.808340761699,37.9929139406295,0 -122.808269072408,37.9929724055478,0 -122.808124861393,37.9929992047936,0 -122.80801658462,37.9930305700483,0 -122.807871447248,37.9930032899998,0 -122.807636148659,37.9930209241904,0 -122.807581172828,37.9929487293682,0 -122.807507725677,37.99286298438,0 -122.807541712147,37.992660250602,0 -122.807576244831,37.9925206080683,0 -122.807611359254,37.9924305374814,0 -122.807645333426,37.992232310088,0 -122.807716381523,37.9921468057487,0 -122.807751851493,37.9920567357032,0 -122.807858915697,37.991944252482,0 -122.807966620628,37.9918588089506,0 -122.808110841255,37.9918275034376,0 -122.808219745597,37.9918276842995,0 -122.808327105814,37.9917377334045,0 -122.80836192188,37.9916251298019,0 -122.808395905425,37.9914223957057,0 -122.808430721235,37.9913097920742,0 -122.808465822278,37.9912242276336,0 -122.808537224348,37.9911387233552,0 -122.808572692831,37.9910486530322,0 -122.808643738715,37.990963148094,0 -122.808822842714,37.9907921993436,0 -122.809038544011,37.9906438430964,0 -122.809146449248,37.9906169826988,0 -122.809290451571,37.9905315978754,0 -122.80943354969,37.9903831209919,0 -122.809541524563,37.9903292216029,0 -122.809649155077,37.990270815089,0 -122.809757427118,37.990239448271,0 -122.809865699068,37.9902080813521,0 -122.809973959259,37.9901812207702,0 -122.810118805943,37.9901814589808,0 -122.810190216748,37.9900914472178,0 -122.810298202294,37.9900330406842,0 -122.810406187668,37.9899746340493,0 -122.810477860723,37.9899206741921,0 -122.810586131903,37.9898893066009,0 -122.810693760954,37.9898308991127,0 -122.810801745722,37.9897724921067,0 -122.810981128105,37.989628579174,0 -122.811052812006,37.9895701125172,0 -122.81148325734,37.9892238186442,0 -122.811518353854,37.9891382532183,0 -122.811589750379,37.9890527470029,0 -122.811624846688,37.9889671815408,0 -122.811731912082,37.98885018819491,0 -122.81169215081,37.9885346712626,0 -122.811653512732,37.9883363240687,0 -122.811616090188,37.9882190951032,0 -122.811578942663,37.9881334117868,0 -122.811505495625,37.9880476692253,0 -122.811468348314,37.9879619858735,0 -122.811394889994,37.9878807496835,0 -122.811029778706,37.9875962460156,0 -122.810884650863,37.9875689697516,0 -122.810811491377,37.9875102659854,0 -122.810556058613,37.9873386019177,0 -122.810373785777,37.987225641382,0 -122.810008955883,37.9869726802472,0 -122.809862697958,37.9868327393929,0 -122.809642938708,37.9866295868477,0 -122.809569839586,37.9865483501177,0 -122.809532339394,37.9864626655747,0 -122.809504197163,37.9863364383134,0 contacts #khStyle84754 1 -122.747646898825,37.98862016708811,0 -122.747466881353,37.9883944572915,0 -122.747326074293,37.9881508061289,0 -122.747224464524,37.987893719123,0 -122.746886904542,37.98742882825,0 -122.746755370509,37.9871806889434,0 -122.746425283477,37.98620207814061,0 contacts #khStyle84754 1 -122.809504197163,37.9863364383134,0 -122.809649226499,37.9862944323699,0 -122.811156559898,37.9858578384829,0 -122.811329754406,37.9858076717156,0 -122.811334713389,37.98581669273601,0 -122.811480960533,37.9859611382339,0 -122.811518462732,37.9860468221824,0 -122.811664722251,37.98618676101211,0 -122.8117747529,37.9862996018693,0 -122.811848198524,37.9863853442749,0 -122.811957873877,37.9864981843829,0 -122.81203131991,37.98658392667511,0 -122.8121779258,37.9867283718941,0 -122.8124339338,37.9869541109306,0 -122.812580185335,37.9870985550757,0 -122.812653644187,37.9871797905415,0 -122.812836195843,37.9873242932463,0 -122.812873344424,37.9874099761877,0 -122.812984900677,37.98751644781661,0 -122.813019965073,37.9875499139265,0 -122.813129356903,37.9876357137271,0 -122.813166861855,37.9877213971517,0 -122.813276541198,37.9878342360425,0 -122.813313690543,37.9879199188446,0 -122.813350839973,37.9880056016345,0 -122.813424289114,37.9880913430645,0 -122.813461438758,37.988177025819,0 -122.813498944368,37.9882627091361,0 -122.813608337805,37.9883485084962,0 -122.813645487791,37.9884341911921,0 -122.813669721771,37.9884624805906,0 -122.813718937697,37.9885199324391,0 -122.813756087896,37.9886056150996,0 -122.813865838021,37.9886914147968,0 -122.813902988475,37.9887770974108,0 -122.814049257895,37.9889170333047,0 -122.814086764558,37.9890027164335,0 -122.814160491543,37.9891200030684,0 -122.814270174471,37.9892328410398,0 -122.814343625892,37.9893185818995,0 -122.814380777213,37.9894042643617,0 -122.814454228933,37.9894900051527,0 -122.814491380467,37.9895756875794,0 -122.814564843872,37.9896569218606,0 -122.814601995617,37.9897426042519,0 -122.814675447928,37.9898283449054,0 -122.814712599888,37.9899140272613,0 -122.81478576485,37.9899727286293,0 -122.814822917009,37.9900584109502,0 -122.814932958224,37.9901712488791,0 -122.815005767727,37.9902299495413,0 -122.815042920269,37.9903156317925,0 -122.815116097244,37.9903698265163,0 -122.815153249984,37.9904555087326,0 -122.81522670364,37.9905412490442,0 -122.815263856593,37.990626931225,0 -122.815337310547,37.9907126714679,0 -122.815374463714,37.9907983536133,0 -122.815447917966,37.9908840937874,0 -122.815485071347,37.9909697758974,0 -122.815558525897,37.9910555160028,0 -122.815595679491,37.9911411980773,0 -122.815669134339,37.9912269381139,0 -122.81577917858,37.9913397752574,0 -122.815816332571,37.9914254572619,0 -122.815925733369,37.9915112544903,0 -122.815962887616,37.9915969364484,0 -122.816036343341,37.9916826762574,0 -122.816109799236,37.9917684160208,0 -122.816183266591,37.9918496492982,0 -122.816220421305,37.9919353311744,0 -122.816293877663,37.9920210708236,0 -122.816331309527,37.99213829831331,0 -122.816368464557,37.9922239801415,0 -122.816441921373,37.9923097196983,0 -122.816515378359,37.9923954592097,0 -122.81655253373,37.9924811409792,0 -122.816625713951,37.9925353347746,0 -122.816662869519,37.9926210165091,0 -122.81673632707,37.9927067558832,0 -122.816773482852,37.9927924375823,0 -122.816883531102,37.99290527370051,0 -122.816920687153,37.9929909553527,0 -122.816994145369,37.9930766945667,0 -122.817031301635,37.9931623761835,0 -122.817323926278,37.9934197078776,0 -122.817470211334,37.9935596395547,0 -122.817580261787,37.9936724750271,0 -122.817653721443,37.9937582138328,0 -122.817799719034,37.993871105902,0 -122.817836876629,37.9939567872653,0 -122.817910336865,37.994042525912,0 -122.818020377528,37.9941598674163,0 -122.818130073803,37.99427270181781,0 -122.818167231981,37.9943583830763,0 -122.818240415242,37.9944125758785,0 -122.818277573618,37.994498257102,0 -122.818387626697,37.9946110918257,0 -122.818497668962,37.9947284328873,0 -122.818607366807,37.9948412668474,0 -122.818680828812,37.9949270050168,0 -122.818754290987,37.9950127431406,0 -122.818827753333,37.9950984812188,0 -122.819156350278,37.9953513584094,0 -122.819193866097,37.9954370399021,0 -122.819303566054,37.9955498732193,0 -122.819413332909,37.9956356677968,0 -122.819450493254,37.9957213486505,0 -122.819523957109,37.9958070862978,0 -122.819561117668,37.995892767116,0 -122.81967081886,37.9960056000935,0 -122.819708335606,37.9960912814213,0 -122.819818037316,37.9962041142625,0 -122.819855198414,37.9962897949871,0 -122.819965245501,37.9964071346875,0 -122.820356619733,37.9967205579423,0 -122.820918111801,37.9971702093522,0 -122.821025240057,37.9972559983704,0 -122.821135580423,37.9974003761769,0 -122.821244148112,37.9973960380658,0 -122.821499284502,37.9975676786397,0 -122.821681599831,37.9976806221368,0 -122.82179108238,37.9977393753316,0 -122.822046588086,37.9979065088418,0 -122.822156296056,37.9980193395261,0 -122.822374057666,37.9980467139516,0 -122.822666073742,37.9982769927618,0 -122.822884417559,37.9983584446242,0 -122.823103902952,37.9985570657082,0 -122.823213032003,37.9986158170473,0 -122.823358186119,37.9986430782962,0 -122.823467391434,37.99867028432121,0 -122.823650283475,37.9988418096102,0 -122.823831743134,37.99886912581461,0 -122.824086901433,37.9990362543963,0 -122.8241961076,37.9990634597508,0 -122.824305238268,37.9991222100865,0 -122.8244143799,37.9991764538817,0 -122.824596703657,37.9992893929082,0 -122.825071132152,37.9996010594786,0 contacts #khStyle84754 1 -122.746506684879,37.9857779820112,0 -122.746811675069,37.9858153618447,0 -122.747127379209,37.9859061744829,0 -122.747426948114,37.9860330052259,0 -122.747749415212,37.9861238266127,0 -122.748082776689,37.9861515842932,0 -122.7485814644,37.9861211116515,0 contacts #khStyle84754 1 -122.746474803954,37.9857740746126,0 -122.746506684879,37.9857779820112,0 contacts #khStyle84754 1 -122.679527361212,37.9794585716309,0 -122.679324991842,37.9796788326347,0 -122.679227123613,37.9799264183874,0 -122.679248719498,37.9801968626464,0 -122.679184730106,37.9809988295766,0 -122.679229365664,37.9815352165494,0 -122.679179609718,37.9823372222888,0 -122.679266965397,37.9828692187011,0 -122.679258468329,37.9836758427301,0 -122.679225244407,37.983950644101,0 -122.679236936377,37.9842075406404,0 -122.67950431455,37.9844245826136,0 -122.679692681484,37.9843169434143,0 -122.679875158837,37.9837631523816,0 -122.679905515729,37.9834928525666,0 -122.679853490703,37.9826905662325,0 -122.679894501827,37.9824248009093,0 -122.67989469975,37.981888536857,0 -122.679966759608,37.981356976742,0 -122.679923790482,37.9810909817207,0 -122.679904771834,37.9805546650007,0 -122.679869632501,37.980288691335,0 -122.679662578431,37.9794589417149,0 contacts #khStyle84754 1 -122.560241023306,37.9807253878069,0 -122.56017485417,37.9806034672195,0 -122.559808922219,37.9801469481851,0 -122.559704444399,37.9798851854372,0 -122.559542817591,37.9796592592392,0 -122.559509504996,37.9796366009032,0 -122.55914040519,37.9794729842334,0 -122.559034087161,37.9794004815805,0 contacts #khStyle84754 1 -122.735085913435,37.97663231376,0 -122.735158386898,37.9765928956646,0 contacts #khStyle84754 1 -122.731978309658,37.9771569928211,0 -122.731859790711,37.9770665925026,0 -122.731834769248,37.9770158168403,0 -122.731784201585,37.9769132004498,0 -122.731707353768,37.9767147411223,0 -122.731644000675,37.976426184026,0 -122.731537747026,37.975997828967,0 -122.731511438579,37.9758870276957,0 -122.73144032438,37.9755875197995,0 contacts #khStyle84754 1 -122.735158386898,37.9765928956646,0 -122.735158388141,37.9765928949888,0 -122.735195127572,37.97657291249081,0 -122.735316943928,37.9765066566745,0 -122.73543250749,37.9764303087647,0 -122.73552712563,37.9763403940724,0 -122.735608577967,37.9762504495393,0 -122.735697842086,37.9761650290365,0 -122.735831276889,37.9760661889374,0 -122.735974286265,37.9759763831694,0 -122.736160398536,37.9758731551644,0 -122.736310701265,37.9757337946454,0 -122.736449826919,37.9755358250798,0 -122.736513921821,37.97532416701981,0 -122.73653210017,37.9752160535126,0 -122.736556648893,37.9750865741656,0 contacts #khStyle84754 1 -122.729558470964,37.9744926267966,0 -122.729557883665,37.9744777166712,0 -122.729554565501,37.9743934761994,0 -122.729518073989,37.9742536923404,0 -122.72945655954,37.9741453956419,0 -122.729383742035,37.9740145405854,0 -122.729255566916,37.9738429994506,0 -122.72912183198,37.9737676068755,0 -122.728950553022,37.9736710485508,0 -122.728806830458,37.9735670674282,0 contacts #khStyle84754 1 -122.736556648893,37.9750865741656,0 -122.736558575281,37.9750764136375,0 -122.736604684912,37.9749187922291,0 -122.736643128598,37.9748152307706,0 -122.736690419269,37.9747252085243,0 -122.736734555828,37.9746216598482,0 -122.736758782579,37.9745135599059,0 -122.736764167059,37.9744009111124,0 -122.736741781686,37.9742927062487,0 -122.736715838216,37.9741844933694,0 -122.736667090356,37.9740852420133,0 -122.736591284528,37.9739904361363,0 -122.736495504848,37.9739091045212,0 -122.736396377758,37.9738683232153,0 -122.736274316638,37.9737734128722,0 -122.736090570486,37.9736152731131,0 -122.735903396378,37.9734210738284,0 contacts #khStyle84754 1 -122.728378781372,37.9729892505425,0 -122.728284112778,37.9728989019743,0 -122.728181210867,37.9728220535062,0 -122.728066145055,37.972763202416,0 -122.727942150887,37.9727133433213,0 -122.72749693423,37.9724509337861,0 -122.727395101186,37.9723740871197,0 -122.727125100405,37.9721661615778,0 -122.726885834182,37.9719222556809,0 -122.726709818974,37.9717010292501,0 -122.726692773694,37.9716786876074,0 -122.726596158302,37.9715520512754,0 -122.726416771078,37.9712812457152,0 contacts #khStyle84754 1 -122.725836273691,37.9708517752882,0 -122.725874797445,37.97073019176401,0 -122.725930583994,37.97055907785811,0 -122.725949672782,37.9704013972742,0 -122.725923048258,37.9701940387892,0 -122.725835854672,37.9700090705566,0 -122.725686736399,37.9698284635165,0 -122.725421730836,37.9696205457388,0 -122.725053969928,37.9693943601788,0 -122.72484289646,37.9692271257636,0 -122.724701424201,37.9690961062645,0 -122.724617062681,37.9688210150117,0 -122.724575770782,37.9686361538495,0 -122.724492732198,37.9683881042345,0 -122.724436990052,37.9682617926856,0 -122.724354123923,37.9681579494029,0 -122.724232799331,37.9680630283004,0 -122.724023358393,37.9679363541938,0 -122.723977496604,37.9679099761441,0 -122.723826675721,37.9678232291455,0 -122.723420368505,37.9676329989814,0 -122.723196190611,37.9674522113002,0 contacts #khStyle84754 1 -122.722337521586,37.9633047320429,0 -122.722361469901,37.9633133214478,0 -122.722387966993,37.9633280076175,0 -122.722414166287,37.9633425287188,0 -122.722590106169,37.9634400440611,0 -122.722766903385,37.9635396047755,0 -122.722863873994,37.9636750277282,0 -122.722864407074,37.9636758409809,0 -122.722994049579,37.96387361939101,0 -122.723098525879,37.9640946823016,0 -122.723243509611,37.9645186307822,0 -122.723399964334,37.9649200739713,0 -122.723477641587,37.9650779829926,0 contacts #khStyle84754 1 -122.722737096773,37.9671086349635,0 -122.722603443329,37.9668875026673,0 -122.72253535605,37.9666394870725,0 -122.722481653251,37.9663509475906,0 -122.722440705809,37.96626522811501,0 -122.722356353628,37.966179405642,0 -122.722311950647,37.9660666392823,0 -122.722315848376,37.9659765197366,0 -122.722318104376,37.9657557095353,0 -122.722259572722,37.9656158709789,0 -122.722218693955,37.9655121258202,0 -122.722030289911,37.9652818499623,0 -122.72197157197,37.9651915816561,0 -122.721967864318,37.9650428603135,0 -122.722070091409,37.9649169228292,0 -122.722123848301,37.9648134023635,0 -122.722143468108,37.9647052943758,0 -122.722100829608,37.9645024032847,0 -122.722000607933,37.9642858560616,0 -122.721918512268,37.9641684935289,0 -122.721834520628,37.9639880362535,0 -122.721807275363,37.9638591702042,0 -122.721792577883,37.9637896531256,0 -122.72179131175,37.9635598216001,0 -122.721805239473,37.9634517001132,0 -122.721835464177,37.9633616431297,0 -122.721868381701,37.9633121505132,0 -122.721958932825,37.9632627948395,0 -122.722065695824,37.9632540355783,0 -122.722234988109,37.9632679568703,0 -122.722337521586,37.9633047320429,0 contacts #khStyle84754 1 -122.636601644468,37.9557105878579,0 -122.636261328161,37.9557591041353,0 -122.635942844471,37.9557085430142,0 -122.635639679976,37.9555814219745,0 -122.635292050115,37.9555262630569,0 -122.634984994673,37.9556109287432,0 -122.634799612855,37.9558356721049,0 -122.634884423745,37.95609280358541,0 -122.635053990616,37.956332173139,0 -122.63568833382,37.9569650450958,0 -122.635825155846,37.9572088171261,0 -122.636195759062,37.9576561067658,0 -122.636310438214,37.95791783320641,0 -122.636507248393,37.9581167259966,0 -122.637401773536,37.958511558362,0 -122.637732297882,37.9585756711196,0 -122.638350933345,37.9587938900465,0 -122.638677057329,37.95888502323181,0 -122.639018611132,37.9588770630436,0 -122.639323693772,37.95876083667541,0 -122.63948274767,37.9585360031708,0 -122.639627339575,37.958211987037,0 contacts #khStyle84754 1 -122.711389791998,37.9534672387737,0 -122.71114091014,37.9532548219198,0 -122.711024483223,37.9531914443247,0 -122.710817312148,37.9530467264446,0 -122.710610212702,37.9528839825874,0 -122.710508868438,37.9527845901861,0 -122.710414939854,37.9526086064348,0 -122.710171537889,37.9520897626354,0 -122.709936997317,37.9516700821124,0 -122.709790853059,37.9513858137024,0 -122.70947477161,37.9508983333436,0 -122.709401870035,37.9508035169966,0 -122.709307573158,37.9507221668289,0 -122.70898175039,37.9505410994454,0 -122.708841159726,37.9504731531696,0 -122.708714708266,37.9504277741478,0 -122.708593912525,37.9503914219648,0 -122.708420669401,37.9503053681175,0 -122.708319295925,37.9502149866359,0 -122.707664547515,37.949920434484,0 -122.707583917085,37.949871879373,0 -122.707536800165,37.9498435058207,0 contacts #khStyle84754 1 -122.707242348923,37.9480356836794,0 -122.7071532002,37.9479034864636,0 -122.707032305812,37.9477242132463,0 -122.706977924159,37.9476249352563,0 -122.706947765215,37.9475167049658,0 -122.706936831351,37.9474040163351,0 -122.706886718291,37.9473047489825,0 -122.7067116911,37.947133065578,0 -122.70660472282,37.9470201363265,0 -122.706490748896,37.9468801507108,0 -122.70646349029,37.9467584082033,0 -122.706424849925,37.9466366371515,0 -122.706351992366,37.9465328060846,0 -122.706157725504,37.9463700864968,0 -122.70595266319,37.9462388846375,0 -122.705854112696,37.9461917245833,0 -122.70572545945,37.9461301590356,0 -122.70555580446,37.9460396035243,0 contacts #khStyle84754 1 -122.705007431243,37.9454839298046,0 -122.704816069667,37.945307695958,0 -122.704690197715,37.9451668571116,0 -122.704654603798,37.9451270307522,0 -122.704120271979,37.9446209592503,0 -122.703925267497,37.9444672470023,0 -122.703745256378,37.9443000530053,0 -122.703539565274,37.9441508195324,0 -122.703456682906,37.944064987084,0 -122.703254400951,37.9437760617157,0 -122.703091501408,37.9435998971648,0 -122.70272989933,37.9431303087261,0 -122.702699458342,37.943105438205,0 -122.702447717415,37.9428997629906,0 contacts #khStyle84754 1 -122.724869739839,37.9424712362658,0 -122.724831081128,37.9424948471098,0 -122.724661193953,37.9425575380753,0 -122.724578629455,37.9425708632291,0 -122.724421459817,37.9425614804319,0 -122.724284308563,37.9425251058237,0 -122.724129728615,37.9423940543583,0 -122.724002365228,37.9422134958134,0 -122.723882911445,37.9420104234895,0 -122.723838756891,37.9418345674453,0 -122.723834877453,37.941730909739,0 -122.723898607033,37.9416183985843,0 -122.724008403229,37.941551060595,0 -122.724112373703,37.9415197604464,0 -122.724187756461,37.9415244445303,0 -122.724301449192,37.941556257548,0 -122.72441575221,37.9416151106478,0 -122.724537287107,37.9417213768848,0 -122.72464830673,37.9418184485246,0 -122.724740931983,37.9418727438593,0 -122.724831541219,37.9418954891693,0 -122.724952364836,37.9419228118614,0 -122.725051815267,37.9419590971513,0 -122.725158989477,37.9420224392452,0 -122.725243723595,37.9420947414939,0 -122.725241796384,37.9422299309728,0 -122.725177998817,37.9422658326552,0 -122.725128122044,37.9422882478477,0 -122.72508747565,37.9423151911544,0 -122.724985436589,37.9424005741995,0 -122.724869739839,37.9424712362658,0 contacts #khStyle84754 1 -122.723631962241,37.9412027255616,0 -122.723575767514,37.9412120554202,0 -122.723395788098,37.94121613678,0 -122.723215165061,37.941202190506,0 -122.723034559032,37.941183737536,0 -122.722860405769,37.941151780187,0 -122.722678513015,37.9410972719519,0 -122.722480328233,37.9410246989808,0 -122.722377459604,37.9409523517421,0 -122.722373599234,37.9408441875656,0 -122.72247132036,37.9407723159081,0 -122.722611651994,37.94071857097201,0 -122.722781688857,37.9407099608048,0 -122.722986562895,37.9407059392864,0 -122.723164474883,37.9406838278205,0 -122.72335512265,37.9406797720193,0 -122.72340632517,37.9406942193881,0 -122.723451759209,37.9407070390915,0 -122.723565433457,37.9407433592349,0 -122.723725936007,37.9408113350042,0 -122.723878614432,37.9408792921015,0 -122.72397220362,37.9409606290746,0 -122.723996812571,37.941037296907,0 -122.723887660895,37.9411226622521,0 -122.723709579081,37.94118983899931,0 -122.723631962241,37.9412027255616,0 contacts #khStyle84754 1 -122.702299922078,37.9425073259513,0 -122.702199259873,37.9424214474075,0 -122.702061744267,37.942301686403,0 -122.701908637585,37.9421683466374,0 -122.701468567755,37.94175713841041,0 -122.701231566486,37.9415509195921,0 -122.701136129153,37.94146787749311,0 -122.7008553263,37.9412508507981,0 -122.700559349541,37.9410923685391,0 -122.700310811936,37.9409880843848,0 -122.699957276406,37.9408159339521,0 -122.69983520657,37.94074802435191,0 -122.699743759905,37.9406711802283,0 -122.699680109483,37.9405808879492,0 -122.699634315322,37.9404726156129,0 -122.699455720214,37.9399629281027,0 -122.699352041362,37.9397463521836,0 -122.69924123176,37.9395342643117,0 -122.698988642395,37.9392046442083,0 -122.69888211694,37.9390884900899,0 -122.698822936311,37.9390239600203,0 -122.698583551744,37.938770982728,0 -122.698500313697,37.938661757583,0 -122.698356445108,37.9384729720094,0 -122.698292872044,37.9383646533365,0 -122.698242795117,37.93826087585451,0 -122.698117433045,37.9381298656031,0 contacts #khStyle84754 1 -122.697388733754,37.9371726165727,0 -122.69725169854,37.9371136785314,0 -122.696968982353,37.9370228183422,0 -122.696691827238,37.93696351706931,0 -122.696566136209,37.936913620518,0 -122.696456148975,37.9368502451596,0 -122.69635975031,37.9367688790981,0 -122.696276173266,37.9366830397472,0 -122.696172885223,37.9365475781903,0 -122.696078899758,37.9363986213079,0 -122.695948059015,37.9362180234923,0 -122.695813100098,37.93600136317931,0 -122.695690665611,37.93585233209821,0 -122.695544666996,37.93572577193,0 -122.695355554345,37.9356193123192,0 -122.695255143712,37.93556278662581,0 -122.695121070046,37.9354768150675,0 -122.694971516869,37.9353502449354,0 contacts #khStyle84754 1 -122.529855644068,37.935786858763,0 -122.530156321292,37.9359277620232,0 -122.530475386028,37.9359741037607,0 -122.530807343685,37.935894315669,0 -122.531128321487,37.9357513945916,0 -122.531249155934,37.9355400754208,0 -122.53112640688,37.9352692001784,0 -122.530889343935,37.9350789859664,0 -122.530574211224,37.9349740741219,0 -122.530229973793,37.93497269636,0 -122.529883822828,37.9350479205855,0 -122.529629587608,37.9352091316646,0 -122.529683542151,37.9354481886194,0 -122.529855644068,37.935786858763,0 contacts #khStyle84754 1 -122.741510577014,37.9358617762445,0 -122.741419241554,37.935944217914,0 -122.741306039734,37.9359755130366,0 -122.74118962973,37.9359076586745,0 -122.740856390503,37.9355058457316,0 -122.740799822579,37.9354110846541,0 -122.740689224142,37.9352080486327,0 -122.740620993603,37.9349915869942,0 -122.740598829667,37.9347211497935,0 -122.740504613931,37.9346127857195,0 -122.740389835708,37.934486350091,0 -122.740212595044,37.9343237239864,0 -122.740106305058,37.9342108263228,0 -122.740037324055,37.9341070243659,0 -122.739957201856,37.9339356005876,0 -122.739956987987,37.9335931084871,0 -122.739984730725,37.93339037901311,0 -122.740026103974,37.9332552768367,0 -122.740078761496,37.9331472385153,0 -122.740146955971,37.9330916591785,0 -122.740150447454,37.93308881357361,0 -122.740262642009,37.9330394914202,0 -122.740440894212,37.9330356963526,0 -122.740454336137,37.9330354101572,0 -122.740524104575,37.9330555274918,0 -122.740538236992,37.9330596024881,0 -122.740548835399,37.9330626584725,0 -122.740557569696,37.9330684089723,0 -122.740644985938,37.9331259621261,0 -122.740750627377,37.9332208320077,0 -122.740909571537,37.9334284815224,0 -122.741077660468,37.9335640475413,0 -122.741324911232,37.933740346513,0 -122.74163268221,37.933898752694,0 -122.741890224361,37.9339804373447,0 -122.742115175916,37.9340259978791,0 -122.742564928915,37.9340585332316,0 -122.742616800702,37.9340784427122,0 -122.742706633767,37.9341129224486,0 -122.742813827593,37.9341717421369,0 -122.742862557706,37.9342709915226,0 -122.74284685696,37.9343881252209,0 -122.742781802887,37.9344826181206,0 -122.742639388982,37.9346310185297,0 -122.742597805775,37.9347255629286,0 -122.742585654311,37.9349463531613,0 -122.74257506721,37.9349561286653,0 -122.742502881005,37.9350227810496,0 -122.742398502326,37.9351110786058,0 -122.742348792783,37.9351531295302,0 -122.74232421606,37.9352657371299,0 -122.742212651908,37.9353375949513,0 -122.742038962775,37.9353777704834,0 -122.741905082818,37.9354544337251,0 -122.741866490736,37.9354765325247,0 -122.741602779329,37.935732819284,0 -122.741543752408,37.9358318312408,0 -122.741510577014,37.9358617762445,0 contacts #khStyle84754 1 -122.732611015143,37.9330628221941,0 -122.732429972771,37.9330714214922,0 -122.732273533502,37.9330620509075,0 -122.732235519476,37.9330497963067,0 -122.732118664168,37.9330121254993,0 -122.732048092818,37.9329578863882,0 -122.732034702638,37.932915652145,0 -122.732026645929,37.932890240285,0 -122.73205249614,37.9328227024365,0 -122.732116221854,37.9327056801074,0 -122.732182305667,37.9326247148784,0 -122.732273249691,37.9325528194002,0 -122.732370594615,37.9324809384829,0 -122.732487755647,37.9324361415736,0 -122.73261636143,37.9324329005069,0 -122.732815665502,37.9324278774545,0 -122.732919439795,37.9324461401167,0 -122.732956060118,37.9324613240835,0 -122.733017798284,37.93248692267781,0 -122.733107863485,37.9325592315278,0 -122.733123216841,37.9326403829547,0 -122.733101263133,37.9327124363957,0 -122.733069029137,37.9327754534562,0 -122.732975530976,37.9328653695944,0 -122.732871785013,37.9329372364022,0 -122.732719253818,37.9330270176182,0 -122.732611015143,37.9330628221941,0 contacts #khStyle84754 1 -122.750750424818,37.9338329027324,0 -122.750934057829,37.9336890866287,0 -122.751021362515,37.93353154591231,0 -122.751015275775,37.9333332482181,0 -122.750998276822,37.9332070308455,0 -122.750712359261,37.9328909691193,0 -122.750360475173,37.9326067342557,0 -122.749727858104,37.9320957287981,0 -122.74947501012,37.9318878900906,0 -122.749417750154,37.9316804697748,0 -122.749420470051,37.9316740041351,0 -122.749506269597,37.9314700440162,0 -122.749506269672,37.9314700438395,0 contacts #khStyle84754 1 -122.74716848915,37.9310582456823,0 -122.747049561251,37.9309994045738,0 -122.747007197643,37.9309091835602,0 -122.747045170559,37.9308281491282,0 contacts #khStyle84754 1 -122.734524623163,37.9270375198734,0 -122.73439589821,37.9271363703278,0 -122.734285340502,37.9272262489248,0 contacts #khStyle84754 1 -122.728203532914,37.9325108537627,0 -122.72817133976,37.93251182228001,0 -122.728011040371,37.9324889176714,0 -122.727922386088,37.9324211146844,0 -122.727860765012,37.9323586612002,0 -122.727837710292,37.9323352950101,0 -122.727708271267,37.9321412159681,0 -122.727628029932,37.9320103417803,0 -122.727497241944,37.9318928693079,0 -122.727375889205,37.9318204833331,0 -122.727039102777,37.9317295693279,0 -122.726909454818,37.9316887088062,0 -122.72671984238,37.9316116564624,0 -122.726354127619,37.9313629466168,0 -122.726125734452,37.9311956733256,0 -122.725935580443,37.9310735537761,0 -122.725410877931,37.9307388458749,0 -122.725365734127,37.9307057355735,0 -122.725281434165,37.9306439064273,0 -122.725215543384,37.9305761548015,0 -122.725168583836,37.9304859152337,0 -122.725158097761,37.930341683645,0 -122.725155181878,37.9302669377547,0 -122.725149658599,37.9301253533653,0 -122.725116990772,37.93001712144311,0 -122.725065459283,37.9299133516894,0 -122.72499789221,37.9298185571899,0 -122.724908583141,37.9297372309805,0 -122.724793603657,37.9296738702482,0 -122.724670411875,37.9296195030314,0 -122.724578724784,37.9296039892894,0 -122.72440032332,37.9295738029817,0 -122.724269613808,37.9295329370579,0 -122.724146050185,37.9294830748862,0 -122.724033916556,37.9294197201168,0 -122.723744641729,37.92918019519891,0 -122.723573986445,37.9289815078553,0 -122.723503764811,37.9288904446676,0 -122.723445174215,37.9288144643692,0 -122.723365892431,37.9287151347909,0 -122.723291521547,37.9286338426385,0 -122.723183690939,37.9285614842871,0 -122.723171151383,37.9285558364886,0 -122.723062991372,37.9285071212799,0 -122.722925900704,37.9284617323062,0 -122.722734742735,37.9284207216408,0 -122.722448962684,37.9283884993779,0 -122.722361605024,37.9283567470165,0 -122.72235767733,37.9282666083245,0 -122.722424936392,37.9281586125094,0 -122.722579959621,37.9279742146186,0 -122.72275201662,37.9277988697823,0 -122.722931167699,37.9276280479404,0 -122.723163859663,37.9274032747608,0 -122.723290144722,37.9272954179487,0 -122.723381480172,37.9272145172684,0 -122.723471393065,37.9271336131563,0 -122.723573378889,37.9270572439423,0 -122.723689520487,37.9269989339207,0 -122.723814687725,37.9269992291847,0 -122.723914643095,37.9270850878159,0 -122.723978940116,37.9271710313238,0 -122.72398894563,37.9271844053128,0 -122.724089595766,37.9272747719021,0 -122.724221113523,37.9272886011085,0 -122.724338542529,37.9272663452422,0 -122.724451791539,37.9271798771784,0 -122.724456224124,37.9271764927978,0 -122.724642447876,37.9270146978948,0 -122.724755066336,37.9269473655923,0 -122.724900720661,37.9268891237341,0 -122.725100594869,37.9268805801655,0 -122.725230961374,37.9269169378936,0 -122.725338808399,37.926984787956,0 -122.725403884219,37.9270795764561,0 -122.725478899934,37.9271788946922,0 -122.725528925861,37.927247804499,0 -122.725541164938,37.927264663584,0 -122.725586866488,37.9272875259506,0 -122.725649774249,37.9273189957354,0 -122.725812228753,37.92733289564111,0 -122.725897691458,37.9273961863058,0 -122.72592243576,37.9275314383375,0 -122.725917695345,37.9276155927333,0 -122.725916344176,37.9276395793688,0 -122.725864753503,37.9277431074209,0 -122.725688098046,37.9279139395956,0 -122.725589501391,37.9280353832765,0 -122.725596328094,37.9281120092627,0 -122.725670040122,37.9281797790204,0 -122.725823727595,37.9282567489542,0 -122.725985368946,37.9282988031556,0 -122.726085905426,37.92832495957771,0 -122.72629503308,37.928411071509,0 -122.726441204002,37.92850154247751,0 -122.726521962246,37.9285873540414,0 -122.726565671737,37.9286911049201,0 -122.726581966915,37.928803804711,0 -122.726565591152,37.9288461994014,0 -122.726526314303,37.9289478817735,0 -122.726558084106,37.9290110465392,0 -122.726686221241,37.929074436269,0 -122.726806196519,37.9291333003479,0 -122.726905158233,37.9292011282357,0 -122.726983767486,37.9292914409345,0 -122.727045985943,37.9293907283114,0 -122.727060876284,37.9294989182818,0 -122.727047301868,37.9296115483672,0 -122.727007073954,37.9297196098419,0 -122.726931724752,37.9298050570555,0 -122.726860253607,37.9298995262029,0 -122.726816469228,37.9300075793093,0 -122.726796137869,37.9301201935895,0 -122.726821474123,37.9301923561999,0 -122.726935950305,37.9302962719979,0 -122.72706772947,37.9303371374588,0 -122.727232680116,37.9303510412406,0 -122.727500500645,37.9303381454313,0 -122.727770843605,37.9303162419394,0 -122.727910273966,37.9303075530915,0 -122.728043559253,37.930325888618,0 -122.728169971776,37.9303757533194,0 -122.728386591989,37.93045737246001,0 -122.728532447105,37.9305388271539,0 -122.728624250384,37.9306201564015,0 -122.728649100263,37.9307283692409,0 -122.728649354152,37.9309491867847,0 -122.728651767665,37.93106636055511,0 -122.728722235197,37.93114764027361,0 -122.728847499864,37.9312200339288,0 -122.728896263163,37.9312610987724,0 -122.728965553156,37.9313194495666,0 -122.728976634584,37.9313443150463,0 -122.7290459695,37.9314998944178,0 -122.729128495525,37.9315902147313,0 -122.729238147551,37.9316535589125,0 -122.729361329554,37.9317124277993,0 -122.729467343634,37.9317248595558,0 -122.729635745984,37.9317446070773,0 -122.729746771551,37.9318214733611,0 -122.729783036117,37.9319206993582,0 -122.72976076243,37.9320011836187,0 -122.729753123699,37.9320287855461,0 -122.729700824061,37.9321323135739,0 -122.729618346673,37.9322222524855,0 -122.729514242755,37.9322941155059,0 -122.72939489684,37.9323524238028,0 -122.729137489333,37.9324329449942,0 -122.728727588601,37.9324950865293,0 -122.728203532914,37.9325108537627,0 contacts #khStyle84754 1 -122.735423078195,37.929153089053,0 -122.735384188085,37.9292881952965,0 -122.735292620368,37.9294367018435,0 -122.73514093943,37.9295895788053,0 -122.735092883899,37.9297021318502,0 -122.735133371913,37.930013169935,0 -122.735203748454,37.9301214844271,0 -122.735272395737,37.9302162755544,0 -122.735327465472,37.9303290618273,0 -122.735460800475,37.9306312967007,0 -122.735478515884,37.9307485049534,0 -122.735537207085,37.9308432734231,0 -122.735621534545,37.9309290868197,0 -122.735734019901,37.9309969378411,0 -122.735880643895,37.93106486578,0 -122.735942022591,37.9310650042407,0 -122.735973813364,37.93106507594301,0 -122.736089337175,37.9309797134982,0 -122.736258718772,37.9308494075835,0 -122.736407652879,37.9307686265554,0 -122.736593117532,37.9307149663591,0 -122.736807321691,37.9306793963668,0 -122.737010469677,37.9306528140877,0 -122.737104742023,37.9306613479361,0 -122.737265714972,37.9306759195676,0 -122.737450676712,37.9307096371191,0 -122.737616118697,37.9307397960504,0 -122.737763987131,37.9307581532633,0 -122.7379023504,37.9307494501861,0 -122.738068902701,37.9307137711981,0 -122.738253331215,37.9306510931201,0 -122.738543518415,37.9305480927676,0 -122.738680586657,37.9305397373382,0 -122.738686148479,37.9305393982963,0 -122.738874767808,37.9305984033112,0 -122.739086666038,37.9307115375629,0 -122.739116494249,37.93072983173901,0 -122.739256279501,37.9308155643137,0 -122.739384866012,37.930856408896,0 -122.739614201173,37.930865932187,0 -122.739860605573,37.9308754929651,0 -122.740237146653,37.9308898485537,0 -122.740515587675,37.9308904661061,0 -122.740651737945,37.9309042872464,0 -122.740781392214,37.9309451326713,0 -122.74090461399,37.9309949766582,0 -122.741041720507,37.9310403447624,0 -122.741453807744,37.93105928156451,0 -122.741728598583,37.9310869270143,0 -122.742126549442,37.931182440282,0 -122.742367274512,37.9312911256718,0 -122.742596913404,37.9314178120758,0 -122.74280087044,37.9315669739587,0 -122.743227341652,37.9318473114885,0 -122.743685863483,37.9322178470772,0 -122.743898437997,37.9323444935705,0 -122.744063532913,37.9324214646909,0 -122.744446788729,37.9325529897599,0 -122.744695392093,37.9326481681797,0 -122.744727732216,37.9326641219407,0 -122.744814676367,37.9327070124303,0 -122.744920044964,37.9327793456454,0 -122.745039700838,37.9328336840073,0 -122.745381506414,37.933023699853,0 -122.745492503658,37.93311407068201,0 -122.745585302354,37.93322242773001,0 -122.74570961152,37.9333714114038,0 -122.745755824564,37.9334796670889,0 -122.7457853391,37.9335833800152,0 -122.745793500878,37.9336915530264,0 -122.745754024867,37.9337951160892,0 -122.745673698814,37.9338850709655,0 -122.745390138054,37.9341278038065,0 -122.745312300564,37.9342177638418,0 -122.745206415296,37.9342941433579,0 -122.745192934522,37.93430438806,0 -122.745135458979,37.9343480664971,0 -122.745111136198,37.9343885717536,0 -122.74515480013,37.9344111991853,0 -122.74533295269,37.9344160934402,0 -122.745610355789,37.9344121902586,0 -122.74578705479,37.9344260936058,0 -122.746019833901,37.9344716636885,0 -122.746146433413,37.9344686977046,0 -122.746195883965,37.9344675391359,0 -122.746430040514,37.93442298200251,0 -122.746568038558,37.934418774442,0 -122.746839983372,37.9344509082999,0 -122.746976790769,37.9344827494429,0 -122.747118870802,37.9345326276991,0 -122.747206153716,37.9345914003725,0 -122.747298291889,37.9346862352223,0 -122.747377674085,37.9347675230561,0 -122.747419993985,37.93487126320041,0 -122.747457706287,37.9349704869158,0 -122.747491120672,37.9351823630788,0 -122.747497615903,37.9354662846537,0 -122.747486996936,37.9354891971818,0 -122.747426675884,37.9356193515188,0 -122.747300952842,37.9357768065252,0 -122.747173250067,37.9359928412065,0 -122.747067935997,37.9362134305976,0 -122.747024517479,37.936325998459,0 -122.747032062919,37.936407131199,0 -122.747079949839,37.9364432864481,0 -122.747133465202,37.9363938309422,0 -122.747216142512,37.9363444384059,0 -122.74749506798,37.9363134952864,0 -122.747500649604,37.9362414038339,0 -122.747532532656,37.9361738755929,0 -122.747598139055,37.9361244459555,0 -122.747729104702,37.9360976895352,0 -122.747769445534,37.9360527118028,0 -122.747783577479,37.9359761322922,0 -122.747858074344,37.9359267216674,0 -122.748027417008,37.9359090605297,0 -122.748163253145,37.9359138593924,0 -122.748303666336,37.9359321873494,0 -122.748456588279,37.93593251615121,0 -122.748596026946,37.9359238028511,0 -122.748718425969,37.9359060398604,0 -122.74885755501,37.935883806178,0 -122.74905818381,37.9358842365703,0 -122.749128902386,37.9358843881955,0 -122.749544651774,37.9358807722603,0 -122.749689038452,37.9358810811925,0 -122.749818041129,37.9359083958747,0 -122.749945189264,37.9359582387992,0 -122.750031332765,37.9360395392883,0 -122.750093943508,37.9361388153369,0 -122.750126681167,37.9362380275668,0 -122.750158133917,37.9362966788217,0 -122.75016523044,37.9364800779518,0 -122.750168597305,37.9365670892977,0 -122.75019020357,37.9366978230193,0 -122.750291863059,37.9369233634304,0 -122.750340107552,37.9369595181197,0 -122.750408019032,37.9369641694594,0 -122.75049696957,37.9368471909676,0 -122.750520235147,37.9367946056563,0 -122.750668275633,37.93645999977521,0 -122.750775769839,37.9363024925208,0 -122.750834113313,37.9362170036756,0 -122.75095981437,37.9360640513048,0 -122.751099618404,37.9359471805482,0 -122.751194473801,37.9358707734847,0 -122.751378809864,37.9358351158439,0 -122.751514659031,37.9358354061089,0 -122.751541285396,37.9358489823918,0 -122.751903221781,37.9358767937041,0 -122.75208450021,37.935904219015,0 -122.752699658337,37.9359280608207,0 -122.752856484627,37.9359009723035,0 -122.752880066824,37.935896898944,0 -122.753060830788,37.9358657375439,0 -122.753169296804,37.9358659677629,0 -122.753202519301,37.9356091694246,0 -122.753056735037,37.9354961982494,0 -122.752983672815,37.9354374589981,0 -122.752691485593,37.9351844757901,0 -122.752362777352,37.9348998688258,0 -122.751597260303,37.9343304213948,0 -122.751524185189,37.93427618768821,0 -122.751390291843,37.9342326894523,0 -122.751342661794,37.93421721572101,0 -122.751257669015,37.934217034029,0 -122.751099683144,37.9342437349559,0 -122.750900198303,37.9343424528518,0 -122.750768942248,37.9343511863234,0 -122.750582330719,37.9343237499149,0 -122.750404919771,37.9343098522466,0 -122.750360730698,37.9343367968136,0 -122.75030964727,37.9344042848889,0 -122.750274424521,37.9344820338767,0 -122.750256617592,37.9345213399625,0 -122.750229085895,37.934669994726,0 -122.75016491617,37.9346112736332,0 -122.750104084742,37.9345120014001,0 -122.750035332792,37.9344643548847,0 -122.750019288983,37.9344532361803,0 -122.749863800467,37.9343717874662,0 -122.749667755783,37.9342947582702,0 -122.749533452247,37.93425841914,0 -122.749262852752,37.9342488267382,0 -122.749119999176,37.9342169752881,0 -122.748974484972,37.9341310403126,0 -122.748828490294,37.9339775070681,0 -122.748727058737,37.9338961728594,0 -122.748622613305,37.933864403266,0 -122.748545203862,37.93385429907251,0 -122.748482203958,37.9338460757052,0 -122.748331481635,37.9338277258001,0 -122.748131621906,37.933827295844,0 -122.748040304028,37.9338045669274,0 -122.747958494437,37.9337052484182,0 -122.747868149206,37.93350226263731,0 -122.747722529117,37.9333442223531,0 -122.747604045345,37.9332583439455,0 -122.747410943625,37.9331542785159,0 -122.74725315698,37.93312239257431,0 -122.747076754551,37.9331265179598,0 -122.746956926461,37.9331217524714,0 -122.746875784312,37.932932305231,0 -122.746785148757,37.9328149409277,0 -122.746695471899,37.9327291239256,0 -122.746507893126,37.9325709913141,0 -122.746105386713,37.9322456529232,0 -122.745826279671,37.9320242300366,0 -122.745723447198,37.9319383837197,0 -122.745609235356,37.9318525125803,0 -122.745440461862,37.9317079385459,0 -122.745255764411,37.9315407972532,0 -122.745013923673,37.9313419858933,0 -122.744704318982,37.9310979615332,0 -122.744463469867,37.9309216835603,0 -122.744176936279,37.9306912275899,0 -122.74389400752,37.93044725939,0 -122.743699281405,37.930302626061,0 -122.743613245611,37.930194282308,0 -122.743463682419,37.9300497475011,0 -122.743205969304,37.9299184947103,0 -122.743085995311,37.9298551408356,0 -122.742907608351,37.9298186973938,0 -122.742688619926,37.9298001903289,0 -122.742400257588,37.929790543155,0 -122.742239619732,37.92976315070491,0 -122.742098168757,37.9297403067823,0 -122.741972490596,37.9296814456798,0 -122.741875292354,37.9296136343028,0 -122.741753494622,37.929563794468,0 -122.7416166986,37.9295319472925,0 -122.741512665432,37.9294866528914,0 -122.741353965212,37.9292114075258,0 -122.741242070302,37.9290759660618,0 -122.741160583185,37.9289901629295,0 -122.740865872798,37.9287641872784,0 -122.740687949388,37.9285970537918,0 -122.740532492796,37.9284119439408,0 -122.74018557161,37.9280686825434,0 -122.739999812453,37.9279060370908,0 -122.739890172591,37.9278381964359,0 -122.739535540093,37.9276661619666,0 -122.739157328569,37.9275256192099,0 -122.739038396803,37.9274712764788,0 -122.738814126099,37.9273400886153,0 -122.738404817616,37.9271453963804,0 -122.738248358071,37.9271450466736,0 -122.738036218299,37.9272031563369,0 -122.737886028023,37.9271397295483,0 -122.737754828549,37.9270357868477,0 -122.737699158606,37.9268914549825,0 -122.737619116402,37.9268011461533,0 -122.737504841679,37.9267377993636,0 -122.737351016641,37.9266968961111,0 contacts #khStyle84754 1 -122.647546423336,37.932860324538,0 -122.647640864429,37.9325947291839,0 -122.647554547989,37.9323511217563,0 -122.64736148246,37.9321207115677,0 -122.646873393978,37.9314162372692,0 -122.646757251789,37.9311635243084,0 -122.646630316264,37.9306403959991,0 -122.64653411092,37.9303832374555,0 -122.646401594906,37.9301349843695,0 -122.646234161748,37.9299001420637,0 -122.646116582366,37.9296519337184,0 -122.646037469201,37.9293903167021,0 -122.645990385572,37.929124297211,0 -122.645899875257,37.9288671594943,0 -122.645744559961,37.9286278455277,0 -122.645492996811,37.9284378148158,0 -122.645352553198,37.9282120657979,0 -122.645336785983,37.9279416311053,0 -122.645157231441,37.9277157656114,0 -122.644694718231,37.927322303706,0 -122.644219019874,37.9270099146036,0 -122.643652570432,37.9263457460903,0 -122.643429533847,37.9261422792431,0 -122.642927063048,37.9257802331845,0 -122.642726831058,37.925567819383,0 -122.642559422479,37.9253329739308,0 -122.641982148288,37.9248535292007,0 contacts #khStyle84754 1 -122.711623289797,37.9247301404233,0 -122.711621466804,37.9248112424134,0 -122.711504378844,37.9249281222926,0 -122.711332690133,37.9250043092862,0 -122.711089403628,37.9250217353603,0 -122.71088885716,37.9250212405521,0 -122.710616731376,37.9249574780258,0 -122.710507743967,37.9248220146589,0 -122.710450671229,37.9246866795265,0 -122.710506672048,37.9245516238656,0 -122.710667176617,37.9244258392837,0 -122.710803982902,37.9243585800759,0 -122.710871720099,37.924357219874,0 -122.711003834082,37.9243545668371,0 -122.711178689041,37.9243775304463,0 -122.711373227046,37.9244591263999,0 -122.711525719298,37.9245631508403,0 -122.711624910654,37.9246580309359,0 -122.711623289797,37.9247301404233,0 contacts #khStyle84754 1 -122.638438004088,37.922328052737,0 -122.638620511063,37.9220897725759,0 -122.638892133392,37.9219509093357,0 -122.639237762214,37.921947467828,0 -122.639825941415,37.9222241686806,0 -122.640134730531,37.9223377779638,0 -122.640195582179,37.922838181709,0 contacts #khStyle84754 1 -122.734524623163,37.9270375198734,0 -122.734630880449,37.9269394631225,0 -122.734651279129,37.9269206386948,0 -122.734715625679,37.9268261485773,0 -122.734734898506,37.9267724590145,0 -122.734754418392,37.926718081115,0 -122.73475367711,37.9265288075646,0 -122.734782060322,37.9264477553438,0 -122.734985908553,37.9264211780862,0 -122.735130163898,37.9263539074154,0 -122.735247055568,37.9261829258018,0 -122.735452067142,37.9259310266764,0 -122.735561199159,37.9258411437311,0 -122.735658580507,37.925755740627,0 -122.735688546341,37.9256296270044,0 -122.735680092978,37.9254087906858,0 -122.735565304961,37.925192220725,0 -122.735475181957,37.924939654577,0 -122.735369607938,37.9247321181785,0 -122.735201097347,37.9245244393624,0 -122.73504907303,37.9243798882573,0 -122.734861264816,37.9242983465795,0 -122.734737718925,37.9242439890544,0 -122.734643427739,37.9241626588527,0 -122.73458871916,37.9240498729795,0 -122.734566126019,37.9239056145606,0 -122.734473017308,37.9236935991175,0 -122.734319994362,37.9235310188953,0 -122.734187934564,37.923372992538,0 -122.734105750765,37.9232871829085,0 -122.733971170343,37.92313816353211,0 -122.733783466545,37.9229304390502,0 -122.733546551516,37.9226640181079,0 -122.733062170421,37.922198747866,0 -122.732975853016,37.9220768762069,0 -122.73286042857,37.9219414186554,0 -122.732727275354,37.9217924010963,0 -122.732528392518,37.9216297138395,0 -122.732428352665,37.9215663946233,0 -122.73231809545,37.9215751555907,0 -122.732209824275,37.9216244792844,0 -122.732161884136,37.9217054862187,0 -122.73214023925,37.9217910597596,0 -122.73209751308,37.9220027663997,0 -122.732072193018,37.9222190193184,0 -122.7320456307,37.922385698147,0 -122.732015643626,37.9225163173213,0 -122.731979950973,37.9226514299014,0 -122.731927779099,37.9233092558721,0 -122.731889996652,37.9235299866434,0 -122.731897425926,37.9236381590495,0 -122.731836153894,37.9239624849213,0 -122.731790433403,37.9242147427745,0 -122.73167456555,37.9244938787197,0 -122.731557553467,37.92469640185531,0 -122.73125904183,37.9250382091337,0 -122.730990063309,37.92527643459171,0 -122.730792495636,37.9254337071021,0 -122.730662975037,37.9255550840287,0 -122.73054828965,37.9257035337848,0 -122.730433050473,37.9259060598214,0 -122.730390630118,37.9260321433905,0 -122.730289978331,37.9263293387787,0 -122.730234087458,37.92654101422371,0 -122.730092847786,37.9268516353119,0 -122.729952019643,37.9270495953672,0 -122.729849486613,37.9271800465302,0 -122.729722028845,37.92731945301271,0 -122.729548600139,37.92748579200841,0 -122.729307227546,37.927755622523,0 -122.729203319687,37.9278725505083,0 -122.729175574772,37.9279716286987,0 -122.729174600741,37.9280132502296,0 -122.72917430931,37.9280257034214,0 -122.729219370404,37.9280528464608,0 -122.729336021777,37.9280486096948,0 -122.729429658777,37.9280172808095,0 -122.729664929808,37.9280098101513,0 -122.729694253628,37.9280088789869,0 -122.729824657443,37.9280362187796,0 -122.72990199528,37.9280859683843,0 -122.729976455639,37.9281529691135,0 -122.729992374665,37.9281672933086,0 -122.730121713812,37.9283884085614,0 -122.730179677771,37.9285823203863,0 -122.730237856433,37.928717648556,0 -122.730319999388,37.9287178377792,0 -122.73034746942,37.9286858862924,0 -122.730432134847,37.9285874083535,0 -122.73051011348,37.9282676284315,0 -122.730577044786,37.92805147185391,0 -122.730624968242,37.9275874155767,0 -122.730674714974,37.9274027646803,0 -122.73088106913,37.9271779155595,0 -122.731042562379,37.9270656248259,0 -122.731164288959,37.9270343590667,0 -122.731306119747,37.9270482040375,0 -122.731959376476,37.9272344666561,0 -122.732213651585,37.9273251779169,0 -122.732464710646,37.9274203877527,0 -122.732692914448,37.9275425837088,0 -122.732885703081,37.9277232825669,0 -122.73307471168,37.9278679207152,0 -122.733195368695,37.9279357928023,0 -122.733274923805,37.9279630128933,0 -122.733375912406,37.9279632429111,0 -122.73345427338,37.9279273695566,0 -122.733832018543,37.9276037629254,0 -122.734116593688,37.9273790859017,0 -122.734285340502,37.9272262489248,0 contacts #khStyle84754 1 -122.636229267269,37.9217398895593,0 -122.636074020367,37.9214960596049,0 -122.635836662737,37.9213195707283,0 -122.635524346412,37.9212014316938,0 -122.63524635099,37.9210473487945,0 -122.634943262493,37.920933742364,0 -122.63427922102,37.9207604287599,0 -122.633974019679,37.920786515415,0 -122.633432471497,37.9211498460837,0 contacts #khStyle84754 1 -122.512295859369,37.9213752259089,0 -122.512800616059,37.9211840986348,0 -122.51351409983,37.9206102362717,0 -122.513692055142,37.9203676273222,0 -122.513697212957,37.9201243022567,0 -122.513448215272,37.9199249884156,0 -122.513177675763,37.9197571288328,0 -122.512882012172,37.9196252159981,0 -122.512230276379,37.9194647844849,0 -122.511892717966,37.9194318349605,0 -122.511336130528,37.9197224374789,0 -122.511005027377,37.9197886542678,0 -122.510113105591,37.9198417193862,0 contacts #khStyle84754 1 -122.712720207244,37.91878878946851,0 -122.712659351306,37.9187120301566,0 -122.712633532364,37.9185857855467,0 -122.712719732953,37.9185454386961,0 -122.712904705503,37.91852335978031,0 -122.713214528492,37.9184910403181,0 -122.713411215527,37.9184705222956,0 -122.71357341516,37.9184528930882,0 -122.713714246896,37.9184442243891,0 contacts #khStyle84754 1 -122.71406895558,37.918661401478,0 -122.713986800415,37.9185755779075,0 -122.713829356794,37.9184670380127,0 -122.713821671266,37.9184655148224,0 -122.713714246896,37.9184442243891,0 contacts #khStyle84754 1 -122.692241020443,37.9218777956005,0 -122.692575343699,37.9218561408677,0 -122.692828560882,37.921843285532,0 -122.693046970323,37.9218213255403,0 -122.693306194875,37.9217318749691,0 -122.693504337039,37.9216242381971,0 -122.693704574568,37.9215256194996,0 -122.69395969885,37.92139559855,0 -122.694246953427,37.9212341156095,0 -122.694557860286,37.9210276289341,0 -122.694745499845,37.9208794044528,0 -122.694918279787,37.9207131151039,0 -122.69517440824,37.9205109905997,0 -122.695317077666,37.9204032064083,0 -122.69553383246,37.9202640692822,0 -122.695743512521,37.9201159004423,0 -122.696177710553,37.9198421324417,0 -122.696182978744,37.9198380940307,0 -122.696535106108,37.9195681639338,0 -122.696634394435,37.919460265756,0 -122.696724567843,37.9193207986106,0 -122.696768352635,37.9192217695858,0 -122.696778060084,37.9191091329537,0 -122.696770264014,37.9188665418935,0 -122.696767342305,37.9187756264175,0 -122.69673980628,37.9185547381022,0 -122.696711788664,37.9184510167643,0 -122.696620106412,37.9182660141319,0 contacts #khStyle84754 1 -122.631747706449,37.9181793214216,0 -122.631924341243,37.9186936114908,0 -122.632427097349,37.9196911150256,0 -122.632501881917,37.9199527236171,0 -122.632582711733,37.920714568053,0 contacts #khStyle84754 1 -122.729751980232,37.92506628598101,0 -122.729480846658,37.9251152311294,0 -122.729432711304,37.9251198109142,0 -122.72934212088,37.9251284299845,0 -122.729205272272,37.9251145941788,0 -122.729096018637,37.9250422379074,0 -122.72899602684,37.9249653964965,0 -122.728912069436,37.9248795791748,0 -122.728846635447,37.9247847917399,0 -122.728794746737,37.9246810226926,0 -122.728763498233,37.9245727949575,0 -122.728715876708,37.92446903575651,0 -122.728663074963,37.9243812672673,0 -122.728596421728,37.9242704741272,0 -122.728520660401,37.9241801690425,0 -122.728427087314,37.92409883555,0 -122.728378121243,37.9240656520202,0 -122.728320324961,37.9240264843318,0 -122.728083572235,37.9239132729876,0 -122.72782393044,37.9238360597609,0 -122.727700373893,37.9237862013152,0 -122.727593612705,37.9237138494409,0 -122.72711487949,37.9231719579987,0 -122.727057448779,37.9231298187777,0 -122.727016297874,37.92309962465821,0 -122.726899904578,37.9230362626476,0 -122.726683508179,37.922900563586,0 -122.726565320926,37.9228417035319,0 -122.726190375776,37.9226966203228,0 -122.725920683839,37.922646418252,0 -122.725791035641,37.92261006297,0 -122.725245202734,37.9225231606769,0 -122.72510692067,37.9225138232316,0 -122.724968215836,37.9225225105274,0 -122.724835471525,37.9225537440344,0 -122.72457772089,37.9226387611648,0 -122.724443198368,37.9226699900454,0 -122.724298854632,37.9226651438616,0 -122.72423682477,37.92262559606031,0 -122.724192437113,37.9225972961895,0 -122.724213498285,37.9224801774652,0 -122.724263665281,37.9223766466864,0 -122.724319231291,37.9221604667383,0 -122.72439255835,37.9219488350269,0 -122.724530967928,37.9216382139156,0 -122.724758603149,37.9212376728453,0 -122.724950987661,37.9209452039266,0 -122.725156881859,37.9206527663769,0 -122.725745815789,37.9200457727032,0 -122.725906485752,37.9198658897777,0 -122.726204745864,37.9194970563374,0 -122.726381024354,37.9193262221798,0 -122.726480863063,37.9192498452762,0 -122.726599478945,37.9191915380286,0 -122.726730455425,37.91915579188681,0 -122.727006818753,37.9191293975259,0 -122.727144772544,37.9191297190025,0 -122.727272959786,37.9191750823471,0 -122.72738079745,37.91924293057161,0 -122.727461731425,37.91933268434781,0 -122.727462241192,37.919333249666,0 -122.727509146587,37.9194370077808,0 -122.727524035691,37.91954519787,0 -122.727507219791,37.9197659761132,0 -122.727516775637,37.9198741537884,0 -122.727526348161,37.919977825023,0 -122.727547348445,37.9200680034112,0 -122.727640171084,37.9201583488447,0 -122.72777996067,37.9202397904306,0 -122.728023117849,37.9203485108085,0 -122.728255236856,37.920461711549,0 -122.728504812104,37.9205659393486,0 -122.728835818471,37.9207649912007,0 -122.729046846104,37.9209096868773,0 -122.729143276897,37.9209865200424,0 -122.729250060288,37.9211490001103,0 -122.729339785357,37.9214060766501,0 -122.729387810995,37.9214963171555,0 -122.729473137783,37.9215956567662,0 -122.729575936994,37.9216815172358,0 -122.729650663429,37.9217628063346,0 -122.729720800734,37.9218350718425,0 -122.729783843404,37.9219028144623,0 -122.729865002325,37.92178132686011,0 -122.729879223684,37.9215875812029,0 -122.729879048533,37.9213442310941,0 -122.729793042415,37.9210420987737,0 -122.729780246438,37.9209438773296,0 -122.729761917378,37.9208031837041,0 -122.729748463509,37.9206904907439,0 -122.729750637716,37.9205823403221,0 -122.729798719624,37.9203661403845,0 -122.729823532403,37.9202790777028,0 -122.729889847661,37.9200463907376,0 -122.729875682617,37.9199336961367,0 -122.72977195872,37.9197126394584,0 -122.729701169696,37.9195277105218,0 -122.729680679078,37.9192978328713,0 -122.729672955369,37.9190769976342,0 -122.729769155141,37.9187122902003,0 -122.72978581162,37.9186491426697,0 -122.729902463328,37.9184466202364,0 -122.729991042695,37.9182395264819,0 -122.73013608738,37.918050588691,0 -122.730289822155,37.9179157484722,0 -122.730449402951,37.9178349992505,0 -122.730572991078,37.917776699408,0 -122.730706320306,37.9177770060618,0 -122.730833796328,37.9178223639028,0 -122.730938774508,37.917894708795,0 -122.731020932227,37.9179850270987,0 -122.731195859512,37.9182783498604,0 -122.731245241902,37.91838661868621,0 -122.731337962787,37.9186031424062,0 -122.731429112954,37.9187877589177,0 -122.731438199993,37.9188061638488,0 -122.731530019389,37.9189776205555,0 -122.731623288919,37.9192392100738,0 -122.731739057311,37.9194738121818,0 -122.731801432841,37.9196271752998,0 -122.731935822311,37.9198257680257,0 -122.732026982138,37.9199837033809,0 -122.732089068632,37.9201190397652,0 -122.732108423367,37.920182461725,0 -122.732122097948,37.9202272707849,0 -122.732104282716,37.9203353854897,0 -122.732051994733,37.92043891484,0 -122.731756232386,37.9208122753311,0 -122.731623665151,37.92106503861041,0 -122.731616952026,37.9210778383398,0 -122.731536814212,37.9212128489491,0 -122.731446572644,37.9213883946171,0 -122.731379250853,37.9215189280235,0 -122.731341894661,37.9216224912812,0 -122.731311649636,37.9217260708414,0 -122.731254310132,37.9219467565901,0 -122.731241771564,37.9221675451314,0 -122.731153041587,37.9227081185221,0 -122.731085761325,37.9229242748487,0 -122.730999412528,37.9232601854889,0 -122.730920202998,37.9235683204443,0 -122.730840736722,37.9240052658339,0 -122.730732895732,37.9243249775663,0 -122.730680619441,37.9244239997718,0 -122.730611291778,37.9245184762516,0 -122.730445644952,37.92469835400461,0 -122.730257306235,37.9248601533516,0 -122.730230972478,37.9248745219376,0 -122.73005991964,37.9249678538524,0 -122.729751980232,37.92506628598101,0 contacts #khStyle84754 1 -122.72325929577,37.9206857058142,0 -122.723262484501,37.9206437990723,0 -122.72322166263,37.920531040732,0 -122.723159253148,37.9202965565176,0 -122.722987045119,37.9199491507386,0 -122.722852628709,37.9197640672512,0 -122.72273146982,37.919646612129,0 -122.722663593389,37.91954280248451,0 -122.722593177877,37.919357870219,0 -122.722590354089,37.9193406678065,0 -122.72257023702,37.919218115126,0 -122.722467958189,37.9189970554917,0 -122.72235052633,37.9188345440367,0 -122.722223054748,37.918694541035,0 -122.722177392295,37.9186418712658,0 -122.722089945828,37.9185410050888,0 -122.72194055025,37.9183694044217,0 -122.721836342338,37.9182835339394,0 -122.721350848541,37.917918337694,0 -122.721343528621,37.917912831489,0 -122.720986400949,37.9175785020656,0 -122.720752089187,37.9172985421292,0 -122.720509837754,37.9170501081169,0 -122.720404194114,37.9169687394121,0 -122.720287087967,37.9169098756284,0 -122.720157131275,37.9168645004613,0 -122.720028528472,37.9168371542963,0 -122.719879878614,37.916845811872,0 -122.719717529819,37.9169040077325,0 -122.71955705697,37.9170298050156,0 -122.719453161615,37.917236854176,0 -122.719327950265,37.9174393456858,0 -122.719230382471,37.9175535929086,0 -122.719093667244,37.9177136791663,0 -122.718831007584,37.9179699181468,0 -122.718773610115,37.9180381012336,0 -122.718755288293,37.9180598658955,0 -122.718608081326,37.9182487843577,0 -122.71848227526,37.9184197281584,0 -122.718423500932,37.9185412617358,0 -122.718338920382,37.9187168109379,0 -122.718221926715,37.9190004375133,0 -122.718166276444,37.9192346403395,0 -122.718128174622,37.9193427040599,0 -122.718182740159,37.9193924065758,0 -122.718303847327,37.9193568134022,0 -122.718350038925,37.9193432377346,0 -122.718518168978,37.9192625253261,0 -122.718617218602,37.9192086856021,0 -122.718861854965,37.9192047665359,0 -122.719062650543,37.9193224166532,0 -122.719303858413,37.9193727447292,0 -122.719324841876,37.919377122907,0 -122.719464183961,37.9193864696648,0 -122.719671132366,37.9193824586498,0 -122.719866959868,37.9193108235443,0 -122.720004982355,37.9192931276532,0 -122.720141462857,37.9193069732441,0 -122.720264295691,37.91935683788801,0 -122.720380540789,37.9194562579075,0 -122.720545647565,37.9196098721013,0 -122.720669886319,37.9196642461518,0 -122.720915758715,37.9197098969987,0 -122.721088336194,37.9197688922499,0 -122.721203211945,37.9198547887698,0 -122.721340673173,37.9199858036647,0 -122.721440548136,37.9200896901635,0 -122.721575438013,37.920148595065,0 -122.72194904086,37.9202666509199,0 -122.722417493093,37.9205020987715,0 -122.722646606917,37.9206558616929,0 -122.722850053698,37.9208275893341,0 -122.723007414066,37.920963155839,0 -122.723123038867,37.9210400393048,0 -122.723205765633,37.9209771441939,0 -122.723246028086,37.9208600709909,0 -122.72325929577,37.9206857058142,0 contacts #khStyle84754 1 -122.713747655617,37.9193636267864,0 -122.713812342654,37.9195530567394,0 -122.713838533375,37.9195358755241,0 -122.713880783597,37.9195081591845,0 -122.713990124422,37.9193687255007,0 -122.714090879197,37.9192427901776,0 -122.714313650884,37.919008997013,0 -122.714404985817,37.9189281031809,0 -122.71451192983,37.9188562602663,0 -122.714632367058,37.918788956598,0 -122.71477979091,37.9187307314635,0 -122.714963393387,37.9186951265524,0 -122.715157575114,37.9186820794525,0 -122.715572960045,37.9186560499028,0 -122.715848119772,37.9186657306266,0 -122.716080492312,37.9187068523361,0 -122.716256029313,37.9187343165076,0 -122.716382431374,37.9187796873646,0 -122.716502399057,37.9188340554643,0 -122.716606636152,37.9189109177613,0 -122.716684528138,37.9189967292003,0 -122.716803734967,37.9192493800447,0 -122.716843710953,37.91931869758731,0 -122.716902631951,37.9194208651351,0 -122.716914493526,37.9194007248531,0 -122.717000693082,37.9192543625208,0 -122.71717676497,37.9189573604201,0 -122.717309061221,37.9187639013322,0 -122.717482303576,37.9184623854363,0 -122.717560158108,37.9183724436686,0 -122.717728420876,37.9180709153763,0 -122.717802904818,37.9177466285628,0 -122.717789842493,37.9176294287138,0 -122.71777102254,37.9175302408947,0 -122.71772235431,37.9174264746731,0 -122.717634490325,37.91734514633931,0 -122.717519464098,37.9172847155007,0 -122.717513847648,37.9172817648051,0 -122.717388175792,37.9172318904438,0 -122.717260267201,37.9172090494085,0 -122.717146407512,37.9172313069216,0 -122.716943368311,37.9173299589692,0 -122.716778258356,37.917365611705,0 -122.716601892102,37.9173696916445,0 -122.716448956967,37.9173828409897,0 -122.716344323542,37.9174096265323,0 -122.716233134226,37.9174769543849,0 -122.716135333928,37.9175758599072,0 -122.716030320773,37.917678071426,0 -122.715821275149,37.9178815388097,0 -122.715701412594,37.9179848969133,0 -122.715574682104,37.91802514756131,0 -122.715315862488,37.9180200123923,0 -122.715163169452,37.917970069993,0 -122.715061085864,37.9178887051786,0 -122.715049432627,37.9177760149476,0 -122.715040606362,37.9176678380656,0 -122.715058090311,37.9175597251795,0 -122.715009425875,37.9174559578601,0 -122.715001917389,37.9173748230302,0 -122.71516845284,37.917154410743,0 -122.71525529412,37.9169473239559,0 -122.71528059945,37.9168392300321,0 -122.715297806653,37.9166184545107,0 -122.715292259347,37.9163976236799,0 -122.71529710197,37.9160641561707,0 -122.715261965911,37.915955915331,0 -122.71521111682,37.9158656621904,0 -122.715099011472,37.9158022989355,0 -122.714973343768,37.915752422009,0 -122.7148390563,37.9157250563524,0 -122.714421641628,37.9157285460543,0 -122.7142837467,37.9157146904019,0 -122.714009414086,37.9156779692165,0 -122.713609432743,37.9155868625824,0 -122.713232399239,37.9154462395189,0 -122.713102431961,37.9154053630282,0 -122.712833148731,37.9153506255636,0 -122.712721757276,37.9152872617994,0 -122.712419739994,37.9150566905203,0 -122.712179112016,37.9149479441737,0 -122.712110411298,37.9149234175167,0 -122.712052008036,37.9149025670823,0 -122.711919162932,37.9148706951683,0 -122.711641990415,37.9148339614931,0 -122.711514017281,37.9148291399753,0 -122.711330475695,37.9148512202789,0 -122.711147521531,37.9149048470818,0 -122.710995818472,37.9149675636443,0 -122.710883934606,37.9150303782774,0 -122.710815266339,37.9151338577673,0 -122.710777849337,37.9152464273183,0 -122.710824373198,37.9153501911151,0 -122.710898664075,37.9154450104601,0 -122.710995068832,37.9155218584041,0 -122.711112041786,37.9156122764158,0 -122.711301385228,37.91574343095211,0 -122.71149737574,37.915811510886,0 -122.711692708388,37.9158660694468,0 -122.712050737714,37.9159103029394,0 -122.71210209106,37.915916647404,0 -122.71228179846,37.9159666601144,0 -122.712464104443,37.9160797695957,0 -122.712563355947,37.9161566232429,0 -122.712885981775,37.9163917511127,0 -122.713153198218,37.9166132230129,0 -122.713193428583,37.9166421172216,0 -122.713360965832,37.9167624452505,0 -122.713655171107,37.9169929949904,0 -122.713743723873,37.9170788344402,0 -122.71380065579,37.9171697329688,0 -122.713803087496,37.91717361546911,0 -122.713861495421,37.9173314847908,0 -122.713875070245,37.91749825753951,0 -122.713857584583,37.9176063702403,0 -122.713789903025,37.9178225157165,0 -122.713736818776,37.918154099645,0 -122.713720670342,37.9182549681481,0 -122.713714246896,37.9184442243891,0 contacts #khStyle84754 1 -122.723096714901,37.9176356690931,0 -122.72285107359,37.9177181232284,0 -122.722729308076,37.91776289982341,0 -122.722721858314,37.9178530117326,0 -122.722793881257,37.9179883765213,0 -122.722945614499,37.9181059039262,0 -122.72321291811,37.918313833835,0 -122.723592949658,37.9186121587501,0 -122.723854394226,37.9187999114387,0 -122.723901450034,37.9188337037337,0 -122.724041367894,37.9188790982427,0 -122.724198605141,37.918856936219,0 -122.724414472399,37.9187492888909,0 -122.724524945139,37.9186819516179,0 -122.724657596293,37.9185786145633,0 -122.724809581193,37.91843927096541,0 -122.725015846574,37.9183315999584,0 -122.72529393177,37.9182240970548,0 -122.725683691161,37.91810784213871,0 -122.726087537243,37.9180276706926,0 -122.726730437652,37.9178173679954,0 -122.727386372923,37.9176386374551,0 -122.727512063073,37.9175893586822,0 -122.727629964391,37.917531048704,0 -122.72772005407,37.9174758634032,0 -122.727849833571,37.9173963654519,0 -122.728048080361,37.917243605663,0 -122.728278936497,37.9171179600655,0 -122.728548586158,37.9170780270314,0 -122.728680624583,37.9170422811502,0 -122.728816896227,37.9170155578804,0 -122.728945395569,37.9169752970271,0 -122.729302987055,37.9168048778498,0 -122.729417346857,37.9167420513983,0 -122.729728881252,37.9165264596995,0 -122.729918266401,37.9163646633048,0 -122.729997525786,37.9162747164522,0 -122.730049102586,37.9161711863011,0 -122.730105747359,37.9160889140094,0 -122.730114156639,37.9160767001426,0 -122.730155083548,37.9159686389185,0 -122.730185327787,37.9158650595485,0 -122.730201739054,37.9157524353428,0 -122.730170548863,37.9155315459401,0 -122.730068259658,37.9152113501015,0 -122.729871457291,37.91477827418781,0 -122.729764432942,37.9144896125013,0 -122.729683776662,37.9142821282328,0 -122.729650520811,37.9138494292334,0 -122.729597852855,37.9136690483775,0 -122.729474857527,37.9134704791539,0 -122.729386629715,37.9133891586667,0 -122.729269894081,37.9133257981524,0 -122.729134522504,37.9133029527673,0 -122.728979936212,37.9132845692505,0 -122.728966319226,37.9132169405095,0 -122.729008874791,37.9131494417403,0 -122.729049834778,37.9130323679579,0 -122.7290527042,37.9129287255003,0 -122.729013638722,37.9128204795476,0 -122.728939931118,37.9126580756266,0 -122.728803206544,37.9124234220451,0 -122.728661695319,37.9122338220395,0 -122.728464378123,37.911944949879,0 -122.728177804806,37.9115657406215,0 -122.728098501766,37.9114754268994,0 -122.727837319184,37.9112494961709,0 -122.727633481542,37.91109129546471,0 -122.72747056191,37.9109241766423,0 -122.72740229792,37.9108293816458,0 -122.727353620505,37.9107256192314,0 -122.72721476039,37.910301686461,0 -122.727123528475,37.9099770071143,0 -122.727062809466,37.9097650608915,0 -122.726958580539,37.9094944289246,0 -122.726792184346,37.9091154962474,0 -122.726717564111,37.9088178941837,0 -122.726701983943,37.9087051957081,0 -122.72668024765,37.9080471981233,0 -122.726654353442,37.9078398393612,0 -122.726550283722,37.9076232851625,0 -122.726530500251,37.9073979146789,0 -122.726441729874,37.9070822533851,0 -122.726304529798,37.9067890113089,0 -122.726300195371,37.9067814045034,0 -122.726240248383,37.9066761989485,0 -122.726154181869,37.9065903745507,0 -122.726074729464,37.9065490757786,0 -122.726058383446,37.9065405792273,0 -122.725900478702,37.9065582358341,0 -122.725775788992,37.9066300478202,0 -122.725691930265,37.9067154747429,0 -122.725657317109,37.9068460817992,0 -122.725654277765,37.9068556897753,0 -122.725621704395,37.9069586605557,0 -122.725494525289,37.907030466405,0 -122.725298192576,37.9070570451215,0 -122.725159925542,37.9071468505508,0 -122.725017716892,37.9073402957387,0 -122.724960894948,37.9074690027948,0 -122.724926292901,37.90754737945601,0 -122.724919795781,37.90766903931241,0 -122.724952758745,37.9077907918163,0 -122.725053047907,37.907971286649,0 -122.725194950598,37.9082420087193,0 -122.725313488893,37.9083910007317,0 -122.725506280233,37.90864832227,0 -122.725630933887,37.9088739385282,0 -122.72568792188,37.9090363054361,0 -122.725743622145,37.9091626174213,0 -122.725769171798,37.9092708328635,0 -122.725776946319,37.9093790066905,0 -122.725756928159,37.9095997775624,0 -122.725697109935,37.90981594875021,0 -122.725608528799,37.9100230395616,0 -122.725510995733,37.9103427714138,0 -122.725440463823,37.9106670729358,0 -122.725381954759,37.9111040646577,0 -122.725388645574,37.9112167424173,0 -122.72537646381,37.9114330250361,0 -122.725387485029,37.9117415806556,0 -122.725392239815,37.9118746973143,0 -122.725320639329,37.9121989961668,0 -122.725267297923,37.9122980136816,0 -122.725166045321,37.9123743863602,0 -122.725052284777,37.9124483182445,0 -122.72495185777,37.9125135845753,0 -122.72475927204,37.912675365562,0 -122.724654480018,37.9127472229936,0 -122.724568124379,37.9128326431258,0 -122.72444766829,37.9129967964488,0 -122.724429475216,37.9130215892554,0 -122.724277349181,37.9132014905294,0 -122.724187690123,37.9132193053804,0 -122.72415736799,37.9131516367642,0 -122.724127214465,37.91303890372461,0 -122.724088933106,37.9128179959789,0 -122.724090048725,37.9127098430521,0 -122.724123161098,37.9126017654824,0 -122.724167845176,37.9125449005963,0 -122.724190318945,37.9125163004745,0 -122.72431087182,37.9124129351754,0 -122.724656902491,37.9120982953038,0 -122.724866294545,37.9118148789164,0 -122.724930738538,37.9115987191024,0 -122.724920831956,37.91149054025791,0 -122.724875712736,37.9113867851974,0 -122.724813156681,37.9112874956405,0 -122.724648499097,37.9111113558915,0 -122.724546827999,37.9110279750809,0 -122.724477663939,37.9109712532438,0 -122.724287480233,37.9108716631569,0 -122.724079213003,37.9108470158991,0 -122.724054366017,37.910844075372,0 -122.723894571575,37.9107941275439,0 -122.7237100604,37.9106990563782,0 -122.723610262376,37.9105771459226,0 -122.723604420425,37.9104284181977,0 -122.723645956955,37.9103403297693,0 -122.72365960776,37.91031137982941,0 -122.723739849249,37.9101493356843,0 -122.72380837435,37.909888121218,0 -122.723794559057,37.9097799330387,0 -122.723715429947,37.9094552796142,0 -122.723673868683,37.9093515324587,0 -122.723615226487,37.90925225147461,0 -122.723519053144,37.9091123235342,0 -122.723383774935,37.9089723031861,0 -122.723201672506,37.9088051331523,0 -122.723095208196,37.908755310232,0 -122.72295442979,37.9087549774014,0 -122.722708727548,37.9088625517253,0 -122.72247715991,37.9089926914357,0 -122.722270408788,37.9091409154536,0 -122.722077165973,37.9092891711479,0 -122.721891760468,37.90943293863981,0 -122.721780520218,37.9095182977023,0 -122.721720153006,37.909565838864,0 -122.721683533918,37.9095946775542,0 -122.721566639116,37.9096710100105,0 -122.721474663505,37.9097383886288,0 -122.721367011419,37.9098147428569,0 -122.721213888349,37.9098819758221,0 -122.72114160354,37.9098187130245,0 -122.721222629123,37.909638646534,0 -122.721290549686,37.9095396655046,0 -122.721405081528,37.9093322072931,0 -122.721459504987,37.9092336264514,0 -122.721697749251,37.9088421285567,0 -122.721746573378,37.9087160629763,0 -122.721736911248,37.9084501574635,0 -122.721702950891,37.9083317977198,0 -122.721695506323,37.9083058516164,0 -122.721659299566,37.9081029738036,0 -122.721686810429,37.9079723511083,0 -122.721717947928,37.9078540171341,0 -122.72171999214,37.9078462483579,0 -122.721859264462,37.9076798391452,0 -122.722129680826,37.9074281176589,0 -122.722429144078,37.9072035032672,0 -122.722690787797,37.9070148504714,0 -122.722937397984,37.9068532004462,0 -122.723157057412,37.9066734602707,0 -122.723308410957,37.9065070778365,0 -122.723365288117,37.9063179397291,0 -122.7233828585,37.9061827866253,0 -122.72333923418,37.9060610084852,0 -122.723297043804,37.9059905302547,0 -122.723247382033,37.9059075710079,0 -122.723140498362,37.9057811368565,0 -122.723000910332,37.9056546252894,0 -122.722784724164,37.9054783609881,0 -122.722504467083,37.9053244769904,0 -122.722297169437,37.9052428690682,0 -122.721944732989,37.9051879553469,0 -122.72162694743,37.9051826942588,0 -122.721403924806,37.9051235798382,0 -122.721239895733,37.9050691118544,0 -122.721102985817,37.9049876692782,0 -122.720996664737,37.9049017928996,0 -122.720891782879,37.9048114133662,0 -122.72072022426,37.90468031644551,0 -122.720583821807,37.9046529523177,0 -122.720392385045,37.90470206698941,0 -122.720239811801,37.9048143649625,0 -122.720154813962,37.9049178111775,0 -122.720086168102,37.9050212963942,0 -122.720009058852,37.90510673539841,0 -122.719916325242,37.9051876305157,0 -122.719752412125,37.9052824807558,0 -122.719714676316,37.9053043169553,0 -122.719563419969,37.9054436560982,0 -122.719444173899,37.9055785652074,0 -122.719427375997,37.9056956936172,0 -122.719445107296,37.9058940214495,0 -122.719526946468,37.9060609573525,0 -122.719661483962,37.9062054868687,0 -122.71983999999,37.9063771603097,0 -122.720027793796,37.9065398426775,0 -122.720129901484,37.9066121903914,0 -122.72034909934,37.906743401859,0 -122.720482996989,37.9068699029622,0 -122.720587676441,37.9070143601756,0 -122.720600775565,37.9071225470553,0 -122.720550631,37.9072215701326,0 -122.720381700046,37.9073338292054,0 -122.72034091748,37.907401329138,0 -122.720327976504,37.90762662248,0 -122.720465384185,37.9081406896217,0 -122.720490871493,37.9083570616672,0 -122.720489562904,37.908514785484,0 -122.720446254011,37.9086859285376,0 -122.720371507056,37.90889755489101,0 -122.720319938958,37.9089965744364,0 -122.720249899179,37.90909880878981,0 -122.720181234948,37.9091990349917,0 -122.720095845816,37.9092168569507,0 -122.720044284389,37.909126604087,0 -122.7200151405,37.9089372621398,0 -122.720014857078,37.9088245993747,0 -122.720028065581,37.9087164753331,0 -122.720030067341,37.9086491495058,0 -122.720037846021,37.9083875253894,0 -122.720000676222,37.9082522420453,0 -122.719935469261,37.9080568174568,0 -122.719904364638,37.9079635968511,0 -122.719804935989,37.9077470478621,0 -122.719645819,37.9075213430036,0 -122.719411286855,37.9073089767955,0 -122.719195764001,37.9071462270094,0 -122.7191522763,37.9070907273533,0 -122.719068404209,37.9069836882526,0 -122.71900203506,37.9068618540086,0 -122.71888688307,37.9066677989335,0 -122.718791937867,37.90658194788201,0 -122.71866194865,37.9065500904326,0 -122.718534528396,37.9065903427707,0 -122.718431143784,37.9066667046124,0 -122.718325855259,37.9068692433569,0 -122.718291211834,37.9070043546062,0 -122.718268448544,37.9071935722218,0 -122.718277696829,37.9073783603176,0 -122.718262926369,37.9075225322963,0 -122.718270317042,37.9076352121707,0 -122.718237363989,37.9080722618669,0 -122.718142290226,37.9083919935244,0 -122.718047749544,37.9085720253868,0 -122.718028931619,37.9086068848467,0 -122.717979722188,37.9086980431905,0 -122.717883340669,37.9088014602655,0 -122.717792315151,37.9088057475332,0 -122.717701720725,37.9086973736922,0 -122.717670225803,37.9085666097913,0 -122.717646168675,37.9083502406204,0 -122.717629031913,37.9081834594342,0 -122.71750248482,37.907809116244,0 -122.717450251058,37.9077098476491,0 -122.717371658989,37.9076240349034,0 -122.717302572815,37.907567643537,0 -122.717283061436,37.9075517174143,0 -122.717040317617,37.9074429758256,0 -122.716700048027,37.9073655433598,0 -122.716438037183,37.9073435018947,0 -122.71642427117,37.9073423438228,0 -122.716275310277,37.907251853533,0 -122.716236738203,37.90713006344871,0 -122.716232460035,37.9071165552456,0 -122.716216627363,37.9069813223788,0 -122.716288436311,37.9067967304237,0 -122.716371222148,37.9067158141299,0 -122.716490198583,37.9066530112871,0 -122.716851826827,37.9065367171376,0 -122.717101916591,37.9063976201993,0 -122.717262577648,37.9062177485973,0 -122.717346348974,37.9060647302204,0 -122.717419438076,37.9059161925021,0 -122.717457533893,37.9058081287251,0 -122.717509883551,37.9056910863281,0 -122.717592107307,37.9053848435169,0 -122.717654789389,37.90516868326,0 -122.71767582128,37.9050605782764,0 -122.717688735346,37.9048442980629,0 -122.717682781849,37.904802155124,0 -122.717672814255,37.9047315975488,0 -122.717597068917,37.9046457917798,0 -122.717463770411,37.9046100450078,0 -122.71746141318,37.9046094128655,0 -122.717434915235,37.9046165444093,0 -122.717096309619,37.9047076746307,0 -122.716839323465,37.9047926771226,0 -122.716613463385,37.9049183127043,0 -122.716478137648,37.9049810761432,0 -122.716274316347,37.9051067643897,0 -122.715938687728,37.9053042365854,0 -122.715759762609,37.9054284128829,0 -122.715518086975,37.9055961377301,0 -122.715241290971,37.9058388155739,0 -122.715220853705,37.9058594116537,0 -122.715152071327,37.9059287284134,0 -122.715116122411,37.9060322901641,0 -122.715084767389,37.9062350057301,0 -122.715028130235,37.9063565430786,0 -122.714962337204,37.9064555257033,0 -122.714878110751,37.9065409439837,0 -122.714800248093,37.9066353906594,0 -122.714781327067,37.9067480067045,0 -122.71476944613,37.9068786658171,0 -122.714831556675,37.9071807514046,0 -122.714978223222,37.9074965621097,0 -122.715036141435,37.9075958456169,0 -122.715212810555,37.907875677112,0 -122.715517824502,37.9082010229004,0 -122.715640496131,37.9083318706345,0 -122.715875748984,37.90853973955461,0 -122.715998266171,37.9086662181061,0 -122.716181791255,37.9088288961888,0 -122.716331102319,37.9090140235663,0 -122.716391867546,37.9091133132848,0 -122.716420603019,37.909221538417,0 -122.71641222881,37.9094079909023,0 -122.716405829299,37.9095504758656,0 -122.716416512534,37.9097307610075,0 -122.716470394398,37.9099562155086,0 -122.716569729628,37.910195299389,0 -122.716683424309,37.9103983660503,0 -122.716824190245,37.9105879785866,0 -122.716905628883,37.9106737985419,0 -122.717000594396,37.9107551446338,0 -122.717204087303,37.9109043498791,0 -122.717291925938,37.9109901850134,0 -122.717365509765,37.9110849986565,0 -122.717624768845,37.9117120246715,0 -122.717676070383,37.9118698751347,0 -122.717719550774,37.9120277067276,0 -122.717721963785,37.9121403745542,0 -122.717738614753,37.9122485702026,0 -122.717809222538,37.912564193916,0 -122.717924329075,37.9127717692035,0 -122.718000742409,37.9128710957229,0 -122.718093578811,37.9129524357925,0 -122.718214960425,37.91300680557231,0 -122.718345132848,37.9129935991635,0 -122.718478269791,37.9129488543745,0 -122.718623528662,37.912895125589,0 -122.7187376089,37.9128775577288,0 -122.718854043547,37.9128596271767,0 -122.719012502746,37.9128870462306,0 -122.719101091192,37.9129638688407,0 -122.719166181089,37.9130496480151,0 -122.719234757742,37.9131534614296,0 -122.719277416356,37.9132776825448,0 -122.719364860675,37.9135323174794,0 -122.719443221323,37.9136812190011,0 -122.719513983507,37.9137715180405,0 -122.719597527647,37.9138663541118,0 -122.719729509149,37.91393877362051,0 -122.719846695743,37.9139751057644,0 -122.719980287983,37.9139979575695,0 -122.720138124487,37.9140028412272,0 -122.720286006279,37.9140077009043,0 -122.720568902691,37.9140354149281,0 -122.721002997901,37.9141310856694,0 -122.721255792368,37.91422181706341,0 -122.721373606105,37.9142806815804,0 -122.721475538558,37.9144025989346,0 -122.721532487573,37.9145739805481,0 -122.721556626033,37.91477232302,0 -122.721516973252,37.9149164360946,0 -122.721547310692,37.9149795989213,0 -122.721895713983,37.9149849330684,0 -122.72203215294,37.9150077893083,0 -122.722160685416,37.9150531590336,0 -122.722230809054,37.9151254290047,0 -122.722297817084,37.9152697952132,0 -122.722366839824,37.915445711509,0 -122.722374237465,37.9155583910154,0 -122.722306497836,37.9157970738222,0 -122.722322411299,37.9159142799914,0 -122.72248021815,37.9159281734097,0 -122.722755521201,37.9158972799861,0 -122.722874981076,37.9158975626708,0 -122.723028106854,37.9159112840262,0 -122.723029943717,37.9159114486233,0 -122.723158478378,37.9159568172653,0 -122.723269185677,37.9160156630875,0 -122.723381061758,37.9161421087461,0 -122.72349488559,37.9163181301592,0 -122.723561321216,37.9164264424532,0 -122.723627503718,37.916602351287,0 -122.723637225993,37.917044009089,0 -122.723581661929,37.9172601889167,0 -122.723530075326,37.9173637161546,0 -122.723455784527,37.9174536703322,0 -122.723355945147,37.9175300446892,0 -122.723237684944,37.9175883495254,0 -122.723096714901,37.9176356690931,0 contacts #khStyle84754 1 -122.488055219467,37.8975320946251,0 -122.488077939268,37.8974201454433,0 -122.488036838768,37.8968882072139,0 -122.488097405876,37.896354458594,0 -122.488008683206,37.8958223125623,0 -122.487893838699,37.8955717051821,0 -122.487671085532,37.8953331562393,0 contacts #khStyle84754 1 -122.555168266461,37.8917405068262,0 -122.554551306549,37.8919679972841,0 -122.554219680116,37.8920298293123,0 -122.553903127438,37.8919497596418,0 -122.553615429289,37.8917999571967,0 -122.553372760889,37.8916097638311,0 -122.553180027137,37.8913904652333,0 -122.553039348452,37.8911443276828,0 -122.552950642684,37.8908848694649,0 -122.552905347604,37.8906165635246,0 -122.552904183019,37.8903394105517,0 -122.55310509195,37.8901463996259,0 -122.553429875986,37.8900394797621,0 -122.553771145867,37.8900272589865,0 -122.554107837099,37.8900668418371,0 -122.554430738738,37.8901536921539,0 -122.554713483774,37.8902989704977,0 -122.554968304641,37.8904779404583,0 -122.55520098164,37.890674854026,0 -122.555413621957,37.8908942226518,0 -122.555552913213,37.891135846718,0 -122.555451964244,37.8913743052607,0 -122.555168266461,37.8917405068262,0 contacts #khStyle84754 1 -122.472012761362,37.8885073573665,0 -122.471899634982,37.8891197246183,0 -122.471972523365,37.8892642575185,0 -122.471977517361,37.8892620241222,0 contacts #khStyle84754 1 -122.629881368036,37.8907471021007,0 -122.630565659616,37.8913643914995,0 -122.63087583489,37.8913135434079,0 -122.630874865547,37.891081457735,0 -122.630391592031,37.8903521397074,0 -122.630115398425,37.8898623166442,0 -122.629950942502,37.8896297133234,0 -122.629574317066,37.8891823855962,0 -122.629377797912,37.8889654524975,0 -122.628866371971,37.8886100785256,0 -122.628590652662,37.8884537330473,0 -122.628266891986,37.8883806036187,0 -122.627927252315,37.8883547418422,0 -122.627248222556,37.8883953980446,0 -122.626923746664,37.8884642172209,0 -122.626635831578,37.88861201524921,0 -122.626406660965,37.8888095701795,0 -122.626247644642,37.8890501615516,0 -122.626218532378,37.8893249627787,0 -122.626338882799,37.8895619362867,0 -122.626643135293,37.8896980979823,0 -122.626973379895,37.8897554802318,0 -122.627991004023,37.8898105374328,0 -122.628324125532,37.8898611594841,0 -122.628647137751,37.8899433015146,0 -122.628954355863,37.8900569351382,0 -122.629241511588,37.8902020511879,0 -122.629485827549,37.89038533502631,0 -122.629881368036,37.8907471021007,0 contacts #khStyle84754 1 -122.471638161848,37.890299235363,0 -122.471638177962,37.890296981675,0 -122.470904619813,37.8897033330615,0 -122.469861149391,37.8890136479103,0 -122.469645079602,37.8888143892523,0 -122.469510391626,37.8885659257287,0 -122.469150429771,37.8881136554283,0 -122.468899450591,37.8873329055693,0 -122.468913477816,37.887062582694,0 -122.469009172558,37.88680164217691,0 -122.469187880187,37.8865613566131,0 -122.469485856529,37.8865379184941,0 -122.469822616364,37.8865574636673,0 -122.470078434414,37.8863670951339,0 -122.470407522935,37.88636632434411,0 -122.471098426148,37.8864595707659,0 -122.471228363693,37.8866764689927,0 -122.471308441991,37.8871071911384,0 -122.471374711462,37.88758066619071,0 -122.471446065904,37.8878401070973,0 -122.471606425048,37.8880774172864,0 -122.472012761362,37.8885073573665,0 contacts #khStyle84754 1 -122.472012761362,37.8885073573665,0 -122.472230359413,37.8882942809967,0 -122.472311734366,37.8880467918292,0 -122.472290952855,37.8877718045726,0 -122.472359428484,37.8872403526483,0 -122.472353692786,37.886649983977,0 -122.472374794868,37.8863819462046,0 -122.472341851658,37.8861181709289,0 -122.472216415867,37.8858675003055,0 -122.471646927229,37.8851957306408,0 -122.471394391669,37.8850278573223,0 -122.470942271517,37.8848410561551,0 -122.470651293609,37.8847811592057,0 -122.470343196328,37.8846310568788,0 -122.470035535228,37.88451926128321,0 -122.469064953701,37.8842805410197,0 -122.468456829218,37.8840457061126,0 contacts #khStyle84754 1 -122.468456829218,37.8840457061126,0 -122.468102502844,37.8835055820379,0 contacts #khStyle84754 1 -122.468102502844,37.8835055820379,0 -122.468200416554,37.8829359599707,0 contacts #khStyle84754 1 -122.463889315655,37.8817140736607,0 -122.463534559632,37.8819480997872,0 -122.463337381012,37.8816970917095,0 -122.463282423076,37.8814354668538,0 -122.46325425144,37.8811063683075,0 -122.463282509714,37.8808361109017,0 -122.463376005648,37.8805864292707,0 -122.463748909233,37.8801262227913,0 -122.46383316034,37.8798765006341,0 -122.463431326309,37.8791333546661,0 -122.463215351849,37.8789273230663,0 -122.462960805093,37.8787481556031,0 -122.462684776168,37.8785914185212,0 -122.461577624716,37.8780906375184,0 contacts #khStyle84754 1 -122.516592657173,37.8789012664787,0 -122.517178110997,37.8786749453162,0 -122.517496381267,37.8785861235546,0 -122.517826555194,37.8785243908237,0 -122.518149145331,37.8784265720475,0 -122.518399714652,37.8782563532631,0 -122.518874540311,37.8776995011149,0 contacts #khStyle84754 1 -122.518874540311,37.8776995011149,0 -122.51902187193,37.8774477412013,0 -122.519282892335,37.8773091097553,0 -122.519693409647,37.8772409392555,0 contacts #khStyle84754 1 -122.519693409647,37.8772409392555,0 -122.519931794163,37.8777421310551,0 -122.520235682366,37.8782255639932,0 -122.520317891315,37.8784805148238,0 -122.520286288739,37.8787507729493,0 -122.520133984004,37.8790025119793,0 -122.520083378388,37.8792433996787,0 -122.520297971631,37.8794695986892,0 -122.520943794697,37.8796141886821,0 -122.521191183612,37.879824747659,0 -122.521093851059,37.8800384084295,0 -122.52081189411,37.8802265286817,0 -122.520479090627,37.8802544629743,0 -122.520170024193,37.8801292727473,0 -122.519841734969,37.8801189180186,0 -122.519362973036,37.8801868096479,0 contacts #khStyle84754 1 -122.518874540311,37.8776995011149,0 -122.518737569232,37.8774510840934,0 -122.518699487801,37.8771873000122,0 -122.518721855702,37.8769170044241,0 -122.518547000817,37.8767022321554,0 -122.518167987397,37.8764077571053,0 -122.517881814835,37.8762623771777,0 -122.517628525306,37.8760878368077,0 -122.516983745745,37.8754632976384,0 -122.516663479134,37.8753155186719,0 -122.516622170418,37.8751125597727,0 -122.516919159899,37.8750146388816,0 -122.517562333222,37.875231340255,0 -122.517854243985,37.8753677315377,0 -122.518123950305,37.87553107204,0 -122.518428034267,37.8756539913279,0 -122.518704256456,37.8757993312602,0 -122.519297220268,37.8764168918808,0 -122.519700255475,37.8767339929558,0 -122.519779039743,37.8769686504777,0 -122.519693409647,37.8772409392555,0 contacts #khStyle84754 1 -122.526397341493,37.87638942808571,0 -122.526362231153,37.8764163034804,0 -122.526027692865,37.8764960707043,0 -122.525684364839,37.8765059534778,0 -122.525351362017,37.8764572873426,0 -122.525038588242,37.8763568800483,0 -122.524182894065,37.8759185436549,0 -122.52409710512,37.8758866516697,0 -122.523488844623,37.8756521015853,0 -122.522899980126,37.875386082768,0 -122.522586507374,37.8752856682386,0 -122.521931423522,37.8751500626072,0 -122.521615819283,37.8750496368245,0 -122.52128138954,37.8750032071694,0 -122.520941635389,37.8750108369424,0 -122.520606505136,37.8750725604046,0 -122.520328221141,37.8752449246414,0 -122.520248542295,37.8754766787617,0 -122.520607204742,37.8759513216394,0 -122.520809067992,37.8761662010946,0 -122.52104519363,37.8763586885273,0 -122.521231379486,37.8765802646301,0 -122.521370503194,37.8768264338236,0 -122.522546996198,37.8776626620726,0 -122.522829586814,37.8778147774528,0 -122.52307476975,37.8778862529345,0 contacts #khStyle84754 1 -122.51218160717,37.8749266592987,0 -122.512023269177,37.8750169338292,0 -122.511515602095,37.8751612828963,0 contacts #khStyle84754 1 -122.515194097858,37.8775446663687,0 -122.515407482964,37.8767591705913,0 -122.515501567154,37.8765004361759,0 -122.515554449738,37.8762392800645,0 -122.515502919858,37.875968680274,0 -122.51534026287,37.87573818139421,0 -122.515092753857,37.8755501410261,0 -122.514811594805,37.8754002668204,0 -122.51451252209,37.8752728513969,0 -122.513892810997,37.8750562305121,0 -122.513415796526,37.8749194179202,0 contacts #khStyle84754 1 -122.517557679647,37.8710425669074,0 -122.516911955067,37.8712224264454,0 -122.516562028533,37.8712660516763,0 -122.516362145148,37.87107820989771,0 -122.516376660554,37.8708146413885,0 -122.516609707248,37.87060379654591,0 -122.516881527597,37.8704404294191,0 -122.517189264029,37.8703267796721,0 -122.517522259164,37.8702628053517,0 -122.517877594406,37.8702597568318,0 -122.518204748545,37.8703286976561,0 -122.518250715697,37.8705812477637,0 -122.518072304665,37.8708058384891,0 -122.517557679647,37.8710425669074,0 contacts #khStyle84754 1 -122.513098947193,37.868908387997,0 -122.513173245014,37.8691723242449,0 -122.513186958422,37.8694324814215,0 contacts #khStyle84754 1 -122.512482683231,37.8686084054667,0 -122.511916489515,37.8689057345044,0 -122.511640499326,37.86901600848771,0 contacts #khStyle84754 1 -122.507679196745,37.8678674213689,0 -122.507568111684,37.8678511015009,0 -122.507228494453,37.8678429160446,0 -122.50655453786,37.8678874056861,0 -122.506218713726,37.8678431834088,0 -122.50609989419,37.8678403191026,0 contacts #khStyle84754 1 -122.513119117344,37.8683271391271,0 -122.513074585577,37.86829090258891,0 -122.512819191982,37.8677941334776,0 -122.512732788131,37.8675346521867,0 -122.512689053969,37.8667300671856,0 -122.512749132988,37.8664554233284,0 -122.512901970489,37.8662307344914,0 -122.513258947778,37.8661916546551,0 -122.513466018385,37.86668822490171,0 -122.513657813867,37.86691434179551,0 -122.513698035673,37.8671736291722,0 -122.513612080469,37.8677095430594,0 -122.513343664809,37.8684362233851,0 contacts #khStyle84754 1 -122.507503012067,37.8658882637409,0 -122.507178437128,37.8659702732272,0 -122.506869237251,37.8660906499811,0 -122.506606601789,37.8662607939761,0 -122.506557947345,37.8665242158258,0 -122.506681369701,37.8667703365108,0 -122.506955209463,37.86694498457731,0 -122.50729556874,37.8670545684433,0 -122.507558994378,37.8669790615688,0 -122.50766886193,37.8667001236664,0 -122.50764928421,37.8664386691665,0 -122.507503012067,37.8658882637409,0 contacts #khStyle84754 1 -122.528308787363,37.8729676830955,0 -122.528586260413,37.8728065654027,0 -122.528893859899,37.8727131642744,0 -122.529914369841,37.8727127457128,0 -122.530246610048,37.8726554916278,0 -122.530582090491,37.8726478199603,0 -122.530919427797,37.8726829659417,0 -122.531259116056,37.8726843221437,0 -122.531596115424,37.8726608814366,0 -122.532251512584,37.8725215393387,0 -122.532564835554,37.8724213921607,0 -122.532858485447,37.8722851118218,0 -122.533123185387,37.8721194250063,0 -122.533613735739,37.8717495916381,0 -122.534147386743,37.8714182308025,0 -122.534562927669,37.8709962716378,0 -122.534756200593,37.8707739683362,0 -122.534897724067,37.870531177918,0 -122.534971140122,37.8702700937744,0 -122.534955783954,37.8699996451139,0 -122.534867152056,37.8697424268226,0 -122.534718019758,37.8695007389275,0 -122.534399406533,37.8681858425527,0 -122.534318195465,37.8676537576984,0 -122.534309223468,37.8673855858347,0 -122.534332941084,37.86711754566191,0 -122.534387906982,37.8668518831221,0 -122.534476940796,37.8665931126995,0 -122.534566963173,37.8660639601767,0 -122.53481117098,37.8658756565985,0 -122.534982414732,37.8656510095412,0 -122.535113348595,37.8652819987881,0 contacts #khStyle84754 1 -122.509241620113,37.8659203270682,0 -122.508436447786,37.866358592891,0 -122.508276823769,37.8661055632583,0 -122.508281463926,37.8658351951076,0 -122.508428082953,37.8655857008889,0 -122.509153243083,37.8649961315637,0 -122.509452135748,37.8650356857801,0 -122.509662465907,37.8652506176967,0 -122.509658468223,37.8655322574973,0 -122.509241620113,37.8659203270682,0 contacts #khStyle84754 1 -122.510233899355,37.8642660882665,0 -122.510124209214,37.8645202505753,0 -122.510075565837,37.8647836719726,0 -122.510156363662,37.8653518231803,0 -122.510296011439,37.8655101316944,0 -122.510574475477,37.86530850091851,0 -122.510650075413,37.8650519487451,0 -122.510757481902,37.8644981002207,0 -122.510233899355,37.8642660882665,0 contacts #khStyle84754 1 -122.512841867956,37.8652142772081,0 -122.513017997106,37.8654448377492,0 -122.513287623353,37.8659371601186,0 -122.513557819679,37.8661275500321,0 -122.513853241004,37.8661558119637,0 -122.514095547975,37.865940504768,0 -122.51416796252,37.8654090418848,0 -122.514284436238,37.8648777589846,0 -122.51428547507,37.8646118830874,0 -122.514192669112,37.8643523783475,0 -122.514039377774,37.8641061417739,0 -122.513822601089,37.8638979480312,0 -122.51349583593,37.8638830746995,0 -122.513171140172,37.8639853779746,0 -122.512913443616,37.8641645696695,0 -122.512811591719,37.864416509062,0 -122.512793453447,37.8646890753319,0 -122.512841867956,37.8652142772081,0 contacts #khStyle84754 1 -122.546157076232,37.86358118562081,0 -122.54620574275,37.8638720418161,0 -122.546067416261,37.8640652839703,0 -122.545711357444,37.8640751741531,0 -122.545537232446,37.8638491772931,0 -122.545462907349,37.8635717400143,0 -122.545500135765,37.8632947364856,0 -122.545789574841,37.8631403831691,0 -122.54602845016,37.8632359422813,0 -122.546157076232,37.86358118562081,0 contacts #khStyle84754 1 -122.509839545453,37.8632978078513,0 -122.509725441144,37.8631463666845,0 -122.50953455599,37.8628932081647,0 -122.509214108595,37.8629977699509,0 -122.509158351644,37.8631552654508,0 -122.509127938742,37.8632407607705,0 -122.509242676561,37.86351162784381,0 -122.5095456259,37.8636886432275,0 -122.509749481604,37.8635926070634,0 -122.509839545453,37.8632978078513,0 contacts #khStyle84754 1 -122.502072727472,37.8592273567012,0 -122.502238728977,37.8592663658598,0 -122.502403582035,37.8592648103908,0 -122.5025652011,37.8592159222454,0 -122.502715557723,37.8591512160881,0 -122.502852518508,37.8590706787368,0 -122.502973955336,37.8589743033333,0 -122.503177192116,37.8587588530952,0 -122.503359912905,37.858529797325,0 -122.50352279957,37.8582916423497,0 -122.503636418209,37.8581952332022,0 -122.503782568256,37.8581214948862,0 -122.503937155436,37.8580613062608,0 -122.504069851498,37.8579807536527,0 -122.504178555997,37.8578753102294,0 -122.504803722356,37.8573574507886,0 contacts #khStyle84754 1 -122.524129161971,37.8547762443662,0 -122.523818224415,37.8548470865508,0 -122.523660165978,37.8548982722344,0 -122.523358810993,37.8550254818213,0 -122.523077187911,37.8551775601929,0 -122.522696051005,37.855446400719,0 -122.522289481417,37.8556926050919,0 -122.52186597266,37.8559207130756,0 -122.52171775778,37.8559877063337,0 -122.521561799643,37.8560434010803,0 -122.521396764414,37.8560742754812,0 -122.521226175059,37.8560848451157,0 -122.52088518848,37.8560766958099,0 -122.520544797172,37.8560865739697,0 -122.519697334971,37.856170988799,0 -122.519530472664,37.85615453217851,0 -122.519373110968,37.8560975587868,0 -122.518984756578,37.8558345942067,0 -122.518757287517,37.855633124762,0 -122.518458882865,37.8553051819985,0 -122.518348723588,37.8552010818616,0 -122.518225702381,37.8551081956699,0 -122.518087673979,37.8550287662635,0 -122.517943919375,37.8549560724357,0 -122.517642792727,37.8548286543732,0 -122.517169909019,37.8546734928916,0 -122.517003824094,37.8546480249873,0 -122.516833355136,37.8546405648439,0 -122.516421465837,37.85471998528361,0 -122.516254327725,37.8547463362783,0 -122.516085149961,37.8547591580684,0 -122.51574263098,37.8547690136125,0 -122.515576573197,37.8547390383527,0 -122.515416998489,37.854695569033,0 -122.515255456644,37.8547354601563,0 -122.515114977492,37.8548137438029,0 -122.514999928075,37.8549146658298,0 -122.514824343729,37.8551460232743,0 -122.514721311259,37.8552560055528,0 -122.514600619818,37.8553501425414,0 -122.514330256705,37.8555157648738,0 -122.514187674064,37.8555895332413,0 -122.513883487273,37.8557122013064,0 -122.513719841391,37.8557475761409,0 -122.513547892398,37.8557491181141,0 -122.51338470557,37.8557146440955,0 -122.512929085784,37.8555279905475,0 -122.512442501641,37.8554042978085,0 -122.511805760832,37.855210128957,0 -122.511636861151,37.8551801363384,0 -122.511497346772,37.8551119577518,0 -122.511382933789,37.8550078334591,0 -122.511239183244,37.8549351314958,0 -122.511080337546,37.8548894097644,0 -122.510740275778,37.8548496862869,0 -122.510571231023,37.8548422209114,0 -122.510395431477,37.8548888072893,0 -122.510403952959,37.8549969988866,0 -122.510454211491,37.8551324013122,0 -122.510417793055,37.8552674446706,0 -122.510323281633,37.8553774585715,0 -122.510073376793,37.8555634361327,0 -122.509794537488,37.8557199996406,0 -122.50963857113,37.8557756785226,0 -122.509477723582,37.855817818359,0 -122.508968720428,37.8558607572384,0 -122.508802968584,37.8558916109711,0 -122.508330873832,37.8560473607919,0 -122.508164456924,37.8560714495113,0 -122.507822628062,37.8560835386454,0 -122.507652868848,37.8560760681751,0 -122.507486102229,37.8560460764459,0 -122.506995927083,37.8559291054154,0 -122.506048230664,37.855593899815,0 contacts #khStyle84754 1 -122.515628403235,37.85148783109521,0 -122.51574587006,37.8512337012499,0 -122.515770521202,37.8511571911559,0 contacts #khStyle84754 1 -122.543109343764,37.8517443745239,0 -122.542622023447,37.8516208034201,0 -122.542286264252,37.85157443060901,0 -122.541955609232,37.8515077968975,0 -122.54178879133,37.8514846148533,0 -122.541617575626,37.8514839469432,0 -122.541448562885,37.8514720205691,0 -122.540946741571,37.8513957006891,0 -122.539969928016,37.8511575452344,0 -122.539620024788,37.8509871829018,0 contacts #khStyle84754 1 -122.516742657643,37.8506857615409,0 -122.516829258617,37.8506973823873,0 -122.517151929731,37.8507865852174,0 -122.5173100318,37.8508368074661,0 -122.517583214622,37.8509979078496,0 -122.517878540766,37.8511410745261,0 -122.518033919055,37.8511732585942,0 -122.518352187168,37.8510664074688,0 -122.518788361653,37.8508541401781,0 -122.519091143203,37.8507246879157,0 -122.519254687673,37.8507028256821,0 -122.519425725468,37.8507305644265,0 -122.519579538795,37.8507852715547,0 -122.520047032915,37.8510012387055,0 -122.520085192939,37.8510329411937,0 -122.52009371752,37.8510329760122,0 -122.520119162441,37.8510533576574,0 -122.520127672413,37.8510556461933,0 -122.520136153175,37.8510624400696,0 -122.520144677759,37.8510624748845,0 -122.520161641923,37.85107606474331,0 -122.520170166509,37.8510760995564,0 -122.520195611466,37.8510964811852,0 -122.520204136054,37.8510965159958,0 -122.520255008747,37.8511395350409,0 -122.520254964936,37.8511462941017,0 -122.520288890702,37.8511734737747,0 -122.520288137614,37.8511802299397,0 -122.520313565386,37.8512028652522,0 -122.520313477762,37.8512163854723,0 -122.520355887046,37.8512503569016,0 -122.520355131316,37.8512571130562,0 -122.520363612122,37.8512639069163,0 -122.520363553717,37.8512729196968,0 -122.520397479594,37.8513000972404,0 -122.520406004206,37.8513001320366,0 -122.520557931179,37.85142693434261,0 -122.520557887395,37.8514336934034,0 -122.520651167445,37.8515106836103,0 -122.520659694728,37.8515107183992,0 -122.520702087097,37.851546943414,0 -122.520710611738,37.85154697818851,0 -122.52071909261,37.85155377202321,0 -122.520727622545,37.85155380681801,0 -122.520744581634,37.85156739657211,0 -122.520753106278,37.8515674313435,0 -122.520761587156,37.85157422517521,0 -122.5207701118,37.8515742599453,0 -122.520778595327,37.8515810537866,0 -122.520804169262,37.8515811580916,0 -122.520813347486,37.851590208543,0 -122.520821872132,37.85159024330941,0 -122.520830355665,37.851597037147,0 -122.520882218124,37.8515972486429,0 -122.520890699017,37.8516040424654,0 -122.520924800254,37.8516041815159,0 -122.520933281152,37.8516109753354,0 -122.520951025147,37.8516133014621,0 -122.520959508681,37.8516200973889,0 -122.521089504944,37.851622879011,0 -122.521106641712,37.8516094303807,0 -122.521159213465,37.8516096446456,0 -122.521167781842,37.8516029203256,0 -122.52120188308,37.8516030592959,0 -122.521211163383,37.8515963378739,0 -122.521237449256,37.8515964449859,0 -122.521254588651,37.8515829942461,0 -122.521263113296,37.8515830289806,0 -122.521280961954,37.8515695832253,0 -122.521290198529,37.8515696208585,0 -122.52129876689,37.8515628965288,0 -122.521307291533,37.85156293126,0 -122.521333693985,37.8515450106887,0 -122.521342925263,37.8515450482962,0 -122.521351498909,37.8515383239841,0 -122.521368548191,37.8515383934384,0 -122.521377828471,37.8515316720029,0 -122.52139487775,37.8515317414533,0 -122.521404158027,37.8515250200158,0 -122.521421207306,37.8515250894624,0 -122.521439055935,37.8515116415842,0 -122.521447583219,37.851511676316,0 -122.521465434473,37.85149823054291,0 -122.521473956462,37.8514982652513,0 -122.521482524798,37.8514915409079,0 -122.521491761363,37.8514915785252,0 -122.521500329683,37.8514848562789,0 -122.521508854318,37.8514848909955,0 -122.521517422676,37.8514781624527,0 -122.521526659239,37.85147820006721,0 -122.521535227568,37.85147147572,0 -122.521543754848,37.8514715104448,0 -122.521553032457,37.8514647889845,0 -122.521561559736,37.851464823708,0 -122.521570125413,37.8514580993473,0 -122.521578652691,37.8514581340696,0 -122.521587930309,37.85145141050811,0 -122.521596440373,37.8514536989385,0 -122.521605011339,37.8514469745968,0 -122.521622772529,37.8514470469127,0 -122.521631340859,37.8514403204599,0 -122.521640577418,37.8514403580654,0 -122.521649145732,37.8514336337097,0 -122.521674719619,37.8514337378251,0 -122.521683999858,37.8514270163651,0 -122.521701051762,37.8514270857817,0 -122.521710329351,37.85142036430881,0 -122.521727381253,37.8514204337216,0 -122.521735949556,37.8514137093595,0 -122.521745186113,37.8514137469568,0 -122.521753754427,37.8514070204949,0 -122.521770806326,37.8514070899014,0 -122.521780083907,37.8514003684228,0 -122.521814879777,37.8514027638219,0 -122.521832728319,37.8513893137844,0 -122.521849780214,37.8513893831794,0 -122.521858348489,37.8513826609066,0 -122.521893158912,37.8513828025622,0 -122.521901727196,37.8513760781877,0 -122.521910254465,37.8513761128859,0 -122.52191953203,37.8513693913962,0 -122.52193658392,37.8513694607786,0 -122.521954432405,37.8513560149192,0 -122.521980718195,37.8513561218646,0 -122.521989286482,37.8513493953852,0 -122.522006335722,37.8513494647467,0 -122.522015615921,37.85134274326011,0 -122.52204117787,37.8513451010268,0 -122.522059026344,37.8513316530528,0 -122.52207607558,37.8513317224042,0 -122.52208535577,37.851325000912,0 -122.522093880387,37.85132503558611,0 -122.522103160575,37.8513183140924,0 -122.522120209808,37.8513183834374,0 -122.522128778078,37.8513116569476,0 -122.522146539237,37.8513117291843,0 -122.522155110137,37.8513050048018,0 -122.522172868649,37.8513050770237,0 -122.522190007794,37.8512916282434,0 -122.522216293562,37.851291735136,0 -122.52222486182,37.8512850086391,0 -122.522251147586,37.8512851155239,0 -122.5222597158,37.8512783953198,0 -122.522268228539,37.8512806795156,0 -122.522277520605,37.8512717042767,0 -122.522381230546,37.8512743796875,0 -122.522389711541,37.8512811734034,0 -122.522415288025,37.8512812773683,0 -122.522432947412,37.8512971214088,0 -122.52244999664,37.851297190706,0 -122.522458477631,37.8513039865154,0 -122.522457550285,37.8513377810473,0 -122.522448270126,37.8513445025692,0 -122.522448226515,37.8513512616324,0 -122.52243965827,37.85135798814551,0 -122.522438861764,37.851371503389,0 -122.52241244249,37.851391671626,0 -122.522411689566,37.8513984320029,0 -122.522403121325,37.8514051564148,0 -122.522394596698,37.85140512176311,0 -122.522350328946,37.85143874010921,0 -122.522332570403,37.8514386679137,0 -122.522323999503,37.851445392309,0 -122.522323955867,37.8514521534704,0 -122.522314678329,37.8514588749921,0 -122.522306151049,37.8514588403231,0 -122.522271166066,37.85148573713911,0 -122.52226264143,37.8514857024777,0 -122.522244792969,37.8514991483837,0 -122.522244749339,37.8515059074465,0 -122.522226900857,37.8515193554482,0 -122.522225220486,37.8515599061545,0 -122.5222421825,37.8515734957062,0 -122.52224213887,37.8515802547689,0 -122.522267570026,37.8516028896753,0 -122.522300784825,37.8516300637819,0 -122.5223007412,37.8516368228446,0 -122.52232617238,37.851659459837,0 -122.522326128757,37.85166621889971,0 -122.522360055538,37.8516933958841,0 -122.522360011919,37.8517001549468,0 -122.522385455035,37.8517205381953,0 -122.522384658514,37.8517340534374,0 -122.522401606069,37.8517498945883,0 -122.522401518823,37.8517634148121,0 -122.522409999876,37.8517702085264,0 -122.522409246961,37.8517769668044,0 -122.522426209072,37.8517905542313,0 -122.522426121845,37.8518040723567,0 -122.522443086599,37.8518176618904,0 -122.5224423337,37.8518244180701,0 -122.522451509508,37.8518334683848,0 -122.52245075661,37.8518402245645,0 -122.522459237676,37.8518470182754,0 -122.522459194065,37.851853777338,0 -122.52246767512,37.8518605731466,0 -122.52246763151,37.8518673322093,0 -122.52247611258,37.8518741259189,0 -122.52247535967,37.8518808841972,0 -122.522483840743,37.8518876779063,0 -122.522483753526,37.8519011960315,0 -122.522492234602,37.85190798974,0 -122.522491481693,37.85191474801841,0 -122.522499962771,37.8519215417263,0 -122.522499861016,37.85193731357181,0 -122.522508342098,37.8519441072791,0 -122.522507545583,37.8519576246202,0 -122.522516026668,37.8519644183269,0 -122.522515939443,37.8519779385505,0 -122.522524425837,37.8519847301797,0 -122.522523624032,37.8519982474993,0 -122.522549069941,37.8520186307235,0 -122.522549026338,37.8520253897861,0 -122.522557492896,37.8520344372101,0 -122.522557449294,37.8520411962727,0 -122.522582892581,37.8520615794789,0 -122.52259141993,37.8520616141285,0 -122.522599901034,37.8520684078293,0 -122.522608425737,37.8520684424668,0 -122.522659303143,37.8521114604954,0 -122.522667827851,37.8521114951288,0 -122.522676308968,37.85211828882411,0 -122.522684833677,37.8521183234562,0 -122.522693317429,37.8521251192595,0 -122.522701842139,37.8521251538904,0 -122.52271032326,37.8521319475833,0 -122.522718847971,37.852131982213,0 -122.522728041031,37.85213877879671,0 -122.522736565742,37.8521388134251,0 -122.522752804174,37.8521546516446,0 -122.522762040824,37.852154689163,0 -122.522770521941,37.85216148495,0 -122.522779046655,37.8521615195754,0 -122.522787527787,37.8521683132628,0 -122.522813104579,37.8521684171441,0 -122.522821585715,37.8521752108291,0 -122.522856399162,37.852175352214,0 -122.522864865774,37.8521843996163,0 -122.522908201295,37.8521845755938,0 -122.522916685089,37.8521913692827,0 -122.522960020614,37.8521915452411,0 -122.522968588897,37.85218482079,0 -122.523028964636,37.852187317588,0 -122.523064661603,37.8521604255389,0 -122.523064705159,37.85215366647591,0 -122.523073982732,37.8521469427977,0 -122.523074026287,37.8521401837347,0 -122.523082594553,37.85213345927501,0 -122.523084248087,37.8520974139096,0 -122.523092816347,37.8520906894491,0 -122.523093615403,37.85207717211421,0 -122.523102183661,37.8520704476529,0 -122.523103909766,37.8520231378809,0 -122.523112478016,37.8520164134188,0 -122.523116206074,37.851878979477,0 -122.523107724944,37.851872185813,0 -122.523109317738,37.8518451532188,0 -122.523100127326,37.8518383566753,0 -122.523100981805,37.8518158265449,0 -122.523092500683,37.8518090328798,0 -122.523093253523,37.8518022766953,0 -122.523084063117,37.8517954801506,0 -122.523084946631,37.8517684446774,0 -122.52307646553,37.8517616489126,0 -122.523077395234,37.851727856485,0 -122.523069623424,37.8517210635989,0 -122.523069710534,37.8517075454719,0 -122.523061241317,37.8516984959746,0 -122.523062258152,37.8516511833212,0 -122.523054486338,37.8516443925326,0 -122.523057154074,37.8515610324013,0 -122.523065719628,37.8515543079308,0 -122.523066608439,37.8515272724782,0 -122.523075176634,37.8515205480177,0 -122.52307690274,37.8514732382417,0 -122.523085470942,37.85146651168191,0 -122.523088981222,37.8513628772449,0 -122.523097549396,37.8513561527824,0 -122.523098522663,37.8513155970913,0 -122.523107802759,37.8513088755176,0 -122.523107889861,37.8512953573895,0 -122.523117167321,37.8512886337058,0 -122.523117210844,37.8512818788387,0 -122.523125779033,37.851275150177,0 -122.523126534511,37.8512683940024,0 -122.523161519083,37.8512414969276,0 -122.523170043692,37.8512415315237,0 -122.523196460087,37.8512213589063,0 -122.523205696622,37.85122139638891,0 -122.523214264769,37.8512146719175,0 -122.523240550514,37.8512147785812,0 -122.523248322301,37.8512215693579,0 -122.523257558835,37.8512216068364,0 -122.523266039892,37.8512284025883,0 -122.523274564499,37.8512284371768,0 -122.523325441724,37.8512714549221,0 -122.523325398193,37.8512782139864,0 -122.523377679532,37.8513234911854,0 contacts #khStyle84754 1 -122.523289995799,37.8507080004358,0 -122.523179919585,37.8508112024708,0 -122.523045835744,37.8508917754423,0 -122.522732448849,37.8510144313829,0 -122.522572616227,37.8510115282472,0 -122.522428199248,37.850932077928,0 -122.522351560622,37.8508078378845,0 -122.522345315164,37.8506748730583,0 -122.522496102908,37.8504276289221,0 -122.522601218534,37.850322153586,0 -122.52274243417,37.8502371046173,0 -122.522901570387,37.8502377509067,0 -122.523058152461,37.8503037294499,0 -122.52317544354,37.8504033487463,0 -122.523249255267,37.8505253230164,0 -122.523289995799,37.8507080004358,0 contacts #khStyle84754 1 -122.547159523666,37.8513724979033,0 -122.547369160377,37.8512944422621,0 -122.54781606346,37.8510573188831,0 -122.548502888639,37.8507377470867,0 -122.548749135803,37.85066659101191,0 -122.549016450755,37.8506360708148,0 -122.550643434445,37.850509363509,0 -122.550903724112,37.8504652957392,0 -122.551156992136,37.8504076778599,0 -122.551646682674,37.8502585819962,0 -122.551825476685,37.8501804006554,0 contacts #khStyle84754 1 -122.506048230664,37.855593899815,0 -122.505715377646,37.855538422001,0 -122.5055558399,37.8554904340473,0 -122.505226645063,37.8554191980178,0 -122.504555868909,37.8553239897675,0 -122.503895300276,37.855190512917,0 -122.503735032113,37.8551447731946,0 -122.502826693794,37.8547714021863,0 -122.502041225006,37.85451120646351,0 -122.501814545132,37.8544111046478,0 -122.501389786692,37.85418397997691,0 -122.501084252915,37.8540542514321,0 -122.500787656449,37.8539222987509,0 -122.500357885317,37.8537041602603,0 -122.500223466713,37.8536202193308,0 -122.499930992217,37.8534815249049,0 -122.499568478227,37.8531938197643,0 -122.499063736942,37.8531375888789,0 -122.498554608145,37.85309936309631,0 -122.498387858971,37.8530693599791,0 -122.498229047313,37.853021362448,0 -122.498088192589,37.8529441507921,0 -122.497935139867,37.8528849128057,0 -122.497766939708,37.8528594059575,0 -122.497441758991,37.8529346258328,0 -122.497270548187,37.8529338927224,0 -122.496613103172,37.8528724918056,0 -122.496447817213,37.8528357308887,0 -122.496296896495,37.8527764999189,0 -122.496165357291,37.852688057055,0 -122.496075190483,37.8525750085138,0 -122.496004285092,37.8524507779178,0 -122.495821429572,37.8520737002652,0 -122.495732277161,37.8518119443611,0 -122.495613227763,37.85155907083151,0 -122.495475225289,37.8511686668387,0 -122.495284560644,37.8507915589101,0 -122.495088565091,37.8501553021649,0 contacts #khStyle84754 1 -122.541839566832,37.8498241736806,0 -122.542585942901,37.8498721471459,0 -122.543096875638,37.8498516058577,0 -122.54352756737,37.8498239850641,0 contacts #khStyle84754 1 -122.520833021165,37.8494294323396,0 -122.521604920634,37.8500319404925,0 contacts #khStyle84754 1 -122.552266717712,37.8499364793856,0 -122.55231449286,37.8499073685518,0 -122.552550924241,37.8498136334309,0 -122.553074996082,37.84973451096781,0 -122.553311415007,37.8496430280475,0 -122.553806025668,37.8495006990062,0 -122.554064193109,37.8494543623722,0 -122.554332895657,37.8494283429069,0 -122.554828773172,37.8495473904768,0 contacts #khStyle84754 1 -122.531329447601,37.851488421366,0 -122.531278415456,37.85135752576991,0 -122.531244444298,37.8512244528335,0 -122.531233224242,37.8510892126828,0 -122.531371384647,37.8506999541357,0 -122.531438237817,37.8505762921812,0 -122.531524232787,37.8504594678557,0 -122.531625798301,37.8503517164652,0 -122.53223479529,37.84987871015101,0 -122.532371709778,37.8497981379116,0 -122.532517079901,37.8497288659651,0 -122.532819802127,37.849603887666,0 -122.533895144457,37.8491935613597,0 -122.534062264011,37.8491671872351,0 -122.534530730295,37.8491184959571,0 contacts #khStyle84754 1 -122.527906809963,37.8486514087411,0 -122.527774835557,37.8491826427987,0 -122.527733884143,37.8495880622883,0 -122.527689730576,37.8497163188501,0 -122.527549273963,37.8497946175991,0 -122.527384283858,37.8498209931241,0 -122.527036392089,37.8497857928088,0 -122.526879928924,37.8498122019507,0 -122.526752158437,37.8499063251933,0 -122.526638553628,37.8500072625113,0 -122.526104476116,37.8505346200393,0 -122.525989462681,37.8506332993478,0 -122.525534283797,37.850820733494,0 -122.525108103243,37.8510285628992,0 -122.525081021523,37.8510419740177,0 -122.525072453563,37.8510486986268,0 -122.525063926328,37.8510486641579,0 -122.525054649086,37.8510553858986,0 -122.52504612185,37.85105535142841,0 -122.525028985907,37.8510688027392,0 -122.525020461315,37.8510687682778,0 -122.525002613451,37.8510822146082,0 -122.524993376932,37.8510821772667,0 -122.524922697304,37.8511359696301,0 -122.524914172705,37.8511359351609,0 -122.524905602073,37.8511426597468,0 -122.524904849406,37.8511494159451,0 -122.524887004134,37.8511628643666,0 -122.524886960746,37.8511696234329,0 -122.524860542178,37.8511897964233,0 -122.524860498787,37.8511965554896,0 -122.524842650864,37.8512100017948,0 -122.524842607471,37.85121676086111,0 -122.524824762172,37.8512302092727,0 -122.524824718778,37.8512369683388,0 -122.524806870824,37.8512504167369,0 -122.5248061155,37.8512571729237,0 -122.524797547491,37.8512638975121,0 -122.524796754049,37.8512774148847,0 -122.524788180743,37.8512841394509,0 -122.524788093935,37.8512976596815,0 -122.524778816637,37.8513043813997,0 -122.524778773238,37.8513111404657,0 -122.524770202574,37.85131786504131,0 -122.524770159161,37.8513246262057,0 -122.524760881885,37.8513313437255,0 -122.524760795058,37.8513448660543,0 -122.524751500634,37.851353841481,0 -122.524751457233,37.8513606005469,0 -122.524742889193,37.8513673272295,0 -122.524742136522,37.8513740813279,0 -122.524733565833,37.8513808079991,0 -122.524732769745,37.8513943232617,0 -122.524724204373,37.8514010457567,0 -122.524724160943,37.8514078090194,0 -122.524714878332,37.8514145307108,0 -122.524714791523,37.8514280488425,0 -122.524705511542,37.8514347726422,0 -122.524705424732,37.8514482907738,0 -122.524696856691,37.8514550153544,0 -122.524696813271,37.85146177651861,0 -122.524687533298,37.8514684982184,0 -122.524687446484,37.85148201634981,0 -122.524678169154,37.8514887380596,0 -122.524678082325,37.8515022582894,0 -122.524668802345,37.8515089799876,0 -122.524668758936,37.8515157390533,0 -122.524660190871,37.8515224657295,0 -122.52465943553,37.8515292219148,0 -122.524650867476,37.85153594649181,0 -122.524650071357,37.8515494638519,0 -122.5246415033,37.8515561884281,0 -122.524641373052,37.8515764677233,0 -122.52463209306,37.8515831894184,0 -122.524632006235,37.8515967075494,0 -122.524622726239,37.85160342924381,0 -122.52462266835,37.8516124420306,0 -122.524614114745,37.8516169149819,0 -122.524613260742,37.8516394430297,0 -122.524603980739,37.85164616472251,0 -122.524603937311,37.8516529258863,0 -122.524595369237,37.851659650459,0 -122.524594483628,37.8516866859383,0 -122.52458591555,37.8516934105102,0 -122.524585076001,37.8517136869346,0 -122.524575795986,37.8517204086249,0 -122.524574869598,37.8517542031797,0 -122.524566298863,37.8517609277393,0 -122.52456460264,37.8518037321993,0 -122.52455604901,37.8518082051459,0 -122.524555059421,37.8518510124649,0 -122.524545784679,37.8518577341739,0 -122.524544855628,37.8518915287168,0 -122.524536287521,37.8518982532846,0 -122.524535361099,37.8519320499363,0 -122.524526081052,37.8519387716222,0 -122.524525053313,37.8519883380261,0 -122.524515773258,37.8519950597111,0 -122.524514803401,37.8520356154268,0 -122.524505523339,37.8520423371108,0 -122.524505393052,37.8520626164038,0 -122.524496824921,37.8520693409683,0 -122.524496026135,37.8520828562166,0 -122.524486748698,37.8520895800081,0 -122.524485819616,37.852123374549,0 -122.524477251477,37.8521300991119,0 -122.524476411919,37.8521503713368,0 -122.524459272958,37.8521638246468,0 -122.524458433367,37.8521841010683,0 -122.524449138814,37.8521930743701,0 -122.52444905194,37.8522065945977,0 -122.524431203684,37.8522200429339,0 -122.524431160252,37.8522268019984,0 -122.524421880159,37.8522335236754,0 -122.524421749848,37.8522538029673,0 -122.524412472397,37.8522605246542,0 -122.524412342083,37.852280803946,0 -122.524394493815,37.8522942501778,0 -122.524393695007,37.8523077654247,0 -122.524385126825,37.8523144920789,0 -122.524384374097,37.852321248272,0 -122.524367235106,37.8523346973708,0 -122.524366438926,37.8523482147265,0 -122.52435787075,37.8523549392801,0 -122.524357028482,37.85237521568931,0 -122.52433989212,37.8523886647945,0 -122.524339093301,37.8524021800407,0 -122.524330525103,37.8524089066907,0 -122.524330481661,37.8524156657549,0 -122.524321201535,37.8524223874234,0 -122.524321158107,37.8524291443891,0 -122.524311880597,37.8524358702644,0 -122.524311837155,37.8524426293286,0 -122.524276849778,37.85246952672751,0 -122.524276097038,37.8524762829196,0 -122.524258957979,37.8524897341002,0 -122.524249723932,37.8524896967096,0 -122.524231875584,37.85250314291551,0 -122.524223350829,37.852503108395,0 -122.524205502473,37.8525165545968,0 -122.524188450314,37.8525164855406,0 -122.524179882088,37.8525232121792,0 -122.524153595876,37.852523105721,0 -122.52414431572,37.8525298273752,0 -122.524101689283,37.8525296547237,0 -122.524092411768,37.8525363763845,0 -122.524014986201,37.8525338089598,0 -122.524005703371,37.8525405326906,0 -122.523841608981,37.8525376139959,0 -122.523833127709,37.85253082038351,0 -122.523824602951,37.8525307858341,0 -122.523816121668,37.8525239943191,0 -122.523807594264,37.8525239597577,0 -122.523773681087,37.8524945273669,0 -122.523773724579,37.8524877683034,0 -122.523765243332,37.85248097258791,0 -122.523767012546,37.85242689954541,0 -122.52377558077,37.8524201771338,0 -122.523776377046,37.8524066618817,0 -122.52378494794,37.8523999352832,0 -122.523784991404,37.8523931804165,0 -122.523794268955,37.852386454583,0 -122.523794312445,37.8523796955194,0 -122.523802883321,37.852372971018,0 -122.523803636102,37.8523662148291,0 -122.523830052731,37.8523460420755,0 -122.523830096218,37.85233928301181,0 -122.523839376391,37.85233255928381,0 -122.523839419877,37.8523258002201,0 -122.523847988096,37.8523190757045,0 -122.523848075079,37.8523055554785,0 -122.523857355234,37.8522988338474,0 -122.523857456701,37.8522830619991,0 -122.523866734205,37.8522763403565,0 -122.523866777701,37.8522695791943,0 -122.523884626058,37.8522561330432,0 -122.523893156077,37.8522561676094,0 -122.523937406485,37.8522248023963,0 -122.523938214578,37.85220903341081,0 -122.523946782789,37.8522023067892,0 -122.52394686974,37.8521887886612,0 -122.523956149871,37.85218206702201,0 -122.523956989599,37.8521617906053,0 -122.523965563081,37.85215506610211,0 -122.523966487108,37.8521212715462,0 -122.523975055278,37.8521145491193,0 -122.523975941133,37.8520875115503,0 -122.523985218615,37.8520807877994,0 -122.523987045623,37.8520177019632,0 -122.523995613779,37.8520109795345,0 -122.524000049475,37.851873550522,0 -122.523991568263,37.8518667569209,0 -122.523991655219,37.8518532366935,0 -122.523983888591,37.85184644598691,0 -122.523983975534,37.851832927858,0 -122.52397548905,37.8518261321358,0 -122.523975532522,37.8518193730714,0 -122.523967051319,37.8518125794685,0 -122.523967809372,37.8518058232992,0 -122.523962860123,37.8518012956873,0 -122.523958613592,37.8517990268006,0 -122.523933036924,37.8517989231692,0 -122.523924570224,37.8517898758423,0 -122.523924613701,37.8517831167778,0 -122.523907648681,37.8517695274551,0 -122.523899124011,37.8517694929118,0 -122.523865196626,37.8517423163658,0 -122.523856671959,37.8517422818195,0 -122.523822759102,37.8517128515404,0 -122.523814234438,37.8517128169911,0 -122.523747103582,37.8516562150934,0 -122.52373786964,37.8516561776635,0 -122.52362833054,37.8515656033862,0 -122.523619805893,37.85156556882291,0 -122.523602843612,37.8515519815658,0 -122.523594362474,37.8515451879364,0 -122.523594405994,37.8515384267736,0 -122.523552012205,37.8515022027873,0 -122.523552055716,37.8514954437229,0 -122.523535090817,37.8514818564455,0 -122.523535843612,37.8514751002574,0 -122.523434079495,37.8513913165692,0 -122.523425615549,37.8513822692175,0 -122.523425659071,37.8513755101532,0 -122.523391729393,37.8513483334613,0 -122.52338395758,37.85134154269411,0 -122.523384044645,37.851328022467,0 -122.523377679532,37.8513234911854,0 contacts #khStyle84754 1 -122.550369281738,37.8478066773481,0 -122.550338678899,37.847815573264,0 -122.549884999129,37.8480031077391,0 -122.549573171582,37.8481123229035,0 -122.549137823243,37.8483224563053,0 -122.548829500998,37.8484384421905,0 -122.548680613259,37.8485054670766,0 -122.547663280169,37.84873814525331,0 -122.547161970817,37.8488128238238,0 -122.547001838241,37.8488595254664,0 -122.546849437806,37.84891977522211,0 -122.546574417651,37.8490494021159,0 contacts #khStyle84754 1 -122.540948736308,37.8471798979183,0 -122.540853857507,37.847472447739,0 -122.5409312504,37.8478296776519,0 contacts #khStyle84754 1 -122.527906809963,37.8486514087411,0 -122.528520510412,37.8481108416785,0 -122.528811546733,37.8479249914328,0 -122.529629852593,37.8474933951541,0 -122.530191282375,37.8471261091875,0 -122.531080810781,37.8471116365048,0 contacts #khStyle84754 1 -122.555255568814,37.8469758028473,0 -122.554926417866,37.84713228359841,0 -122.55467526718,37.847194423183,0 -122.554138579294,37.8472487196672,0 -122.553861469063,37.84725667862,0 -122.553588826027,37.8472308576003,0 -122.55303915467,37.847199476861,0 -122.552953195685,37.8471991498024,0 contacts #khStyle84754 1 -122.507756110739,37.8466422031026,0 -122.508404397311,37.8464759233598,0 -122.509029550433,37.8462622265974,0 -122.509672250926,37.846080144233,0 -122.510292499107,37.8458551534493,0 -122.510609274568,37.8457573277975,0 -122.511077806963,37.8455925424729,0 -122.511240739898,37.8455549143978,0 -122.511441304538,37.8455264874171,0 contacts #khStyle84754 1 -122.491792671191,37.8437930592096,0 -122.491769370558,37.8438657166979,0 contacts #khStyle84754 1 -122.508239263992,37.8438502104914,0 -122.508772131579,37.8437307643746,0 -122.510175808889,37.8436284672321,0 -122.510614551893,37.8436403692492,0 contacts #khStyle84754 1 -122.490630733072,37.8436512306713,0 -122.491111579428,37.8435564266201,0 -122.491611880476,37.8434978267827,0 contacts #khStyle84754 1 -122.529758846519,37.84262014945,0 -122.529824832757,37.8427443422436,0 -122.52991646436,37.8428573707744,0 -122.530038044823,37.8429524929418,0 -122.530173193137,37.8430364024118,0 -122.530319081462,37.8431068361496,0 -122.530625938511,37.8432229779957,0 -122.530924882092,37.8433548597456,0 -122.531080813798,37.8434095603441,0 -122.531243973117,37.8434462634949,0 -122.531755345375,37.8434618250954,0 -122.531934527798,37.8434354977775,0 -122.532077949405,37.8434473337215,0 -122.532136766385,37.8435827634969,0 -122.532224110887,37.8437002786378,0 -122.532347840208,37.8437931552971,0 -122.532515868546,37.8438456483601,0 -122.532516578206,37.843958313104,0 -122.532492238064,37.8441001710781,0 -122.532558261293,37.8442198549167,0 -122.532723605032,37.8442475516776,0 -122.532899064398,37.8442482493079,0 -122.533577154333,37.8441878516872,0 -122.533945764033,37.8442005811344,0 contacts #khStyle84754 1 -122.492092781396,37.8420757919711,0 -122.492341309336,37.842177206938,0 contacts #khStyle84754 1 -122.531680587811,37.8427021802603,0 -122.531538673293,37.8427894911748,0 -122.531386527096,37.8428091643717,0 -122.530910908097,37.8426450319382,0 -122.530342383802,37.8423453349139,0 -122.530244330236,37.8422367865019,0 -122.530130442164,37.8420493090273,0 contacts #khStyle84754 1 -122.487258681808,37.8404752603968,0 -122.487178701071,37.84007580143771,0 contacts #khStyle84754 1 -122.504346404761,37.8412989637769,0 -122.504683921353,37.8413905149257,0 -122.50498498612,37.8415157119931,0 -122.505926937248,37.8418328758274,0 -122.50608860887,37.8418763667494,0 -122.506253924718,37.8419063542727,0 -122.506591761786,37.841950584509,0 -122.506760866768,37.8419445351303,0 -122.506925212173,37.8419069189015,0 -122.507069181504,37.8418354186568,0 -122.507333873964,37.8416630294224,0 -122.507705107428,37.8413851833951,0 -122.508120806335,37.84115033364191,0 -122.508374185679,37.8409688816461,0 -122.50851182106,37.84088834008551,0 -122.508808925215,37.840754388914,0 -122.508936642582,37.8406692999311,0 -122.509270429598,37.8403597457411,0 -122.509364228944,37.8402474755603,0 -122.509434660223,37.8401238409481,0 -122.509473187922,37.8399910622006,0 -122.509474098429,37.8398536167702,0 -122.509395425047,37.8397203467013,0 -122.509266159394,37.8397175553215,0 -122.508713388906,37.8400577388757,0 -122.508567309411,37.840126976473,0 -122.508546664106,37.8401336514864,0 contacts #khStyle84754 1 -122.535985051603,37.8428769843139,0 -122.536153961771,37.842902434457,0 -122.536322968154,37.8429121187357,0 -122.536493511191,37.8429037743568,0 -122.537497504553,37.842752259195,0 -122.537658324867,37.8427078289821,0 -122.537969437627,37.8425986424296,0 -122.538260856883,37.8424578330602,0 -122.538416776674,37.8424021157179,0 -122.539064956457,37.8422356661358,0 -122.539397081083,37.842173877214,0 -122.539732675026,37.8421256215582,0 -122.539895583569,37.84208795151421,0 -122.540207413652,37.8419765122295,0 -122.54035419616,37.841904984246,0 -122.540479074298,37.84181308844111,0 -122.540524641242,37.84168258062,0 -122.540490629777,37.8415540111908,0 -122.540386911466,37.8414409435149,0 -122.54030312183,37.8413211923557,0 -122.540260587421,37.8411925916093,0 -122.540278476471,37.8410574680023,0 -122.540350264217,37.840936073763,0 -122.540453947971,37.8408260710563,0 -122.540773953114,37.8405411584023,0 -122.540908738833,37.8404560621866,0 -122.541062519629,37.8404003308371,0 -122.54123377953,37.8403897348686,0 -122.541380427016,37.8404533986643,0 -122.541511278892,37.8405440376915,0 -122.54162716129,37.84064363332601,0 -122.54192703173,37.840971522033,0 -122.542148098512,37.8411774299429,0 -122.542387720758,37.8413698890826,0 -122.542655198131,37.8415376708021,0 -122.54279609807,37.8416125773018,0 -122.542955633328,37.841660514881,0 -122.543120224501,37.8416949533823,0 -122.543455174803,37.8417503335862,0 -122.543624849822,37.8417667650422,0 -122.54379608479,37.8417606707413,0 -122.543947037979,37.8417026729738,0 -122.54407264237,37.8416085223645,0 -122.544272898018,37.8413884827002,0 -122.544388582029,37.8412897877925,0 -122.544532528368,37.84121598978291,0 -122.544694706831,37.8411805661287,0 -122.545035196004,37.841143579023,0 -122.545202055646,37.8411554918267,0 -122.545366619109,37.8411944325594,0 -122.545535556452,37.8412153659798,0 -122.545705286045,37.841222781598,0 -122.545875838091,37.8412121719528,0 -122.546042974315,37.8411790256825,0 -122.546193938428,37.8411187670733,0 -122.546437324952,37.8409304348719,0 -122.546699804528,37.8407556943426,0 -122.546820428963,37.8406615236495,0 -122.546930457292,37.8405582989216,0 -122.547057460562,37.8404664021661,0 -122.547201388876,37.8403948566802,0 -122.547366420092,37.84035718653301,0 -122.547704413497,37.8403787679535,0 -122.54819945343,37.8402747696402,0 -122.548690281281,37.84016174000661,0 -122.549334925299,37.839986204901,0 -122.549695498379,37.8399154870763,0 -122.549831334971,37.8398889684143,0 -122.549985806122,37.8398354818032,0 -122.55027579833,37.8396901315322,0 -122.550435881663,37.8396479326485,0 -122.550634937101,37.8396216549182,0 contacts #khStyle84754 1 -122.54076351302,37.8429115318538,0 -122.541101183858,37.8428722913793,0 -122.541599005182,37.8427818524577,0 -122.543144944113,37.8426391592982,0 -122.543466580123,37.8425502789765,0 -122.543616862367,37.8424855176834,0 -122.543750939215,37.8424004154912,0 -122.543860262547,37.8422971909577,0 -122.543940558029,37.842178081347,0 -122.544038567975,37.8420657996819,0 -122.544162724082,37.8419761509375,0 -122.544488577519,37.841894045516,0 -122.544799690828,37.8417825891541,0 -122.545103058092,37.8416598351401,0 -122.545578494987,37.8415107067858,0 -122.545903621834,37.8414308484022,0 -122.546217529076,37.8413261583267,0 -122.546372033408,37.84126816904931,0 -122.546796078921,37.8410422274504,0 -122.546951989428,37.8409864987138,0 -122.547116978081,37.8409555901246,0 -122.54728755688,37.8409404730577,0 -122.54745187744,37.8409028000617,0 -122.547620298298,37.8408921838737,0 -122.547789232977,37.840913114052,0 -122.547944468354,37.8409677876022,0 -122.548239852756,37.8411041194378,0 -122.548515923655,37.8412629079026,0 -122.548681168208,37.8413063542044,0 -122.548843949579,37.84128895324671,0 -122.549004119516,37.8412332381458,0 -122.549167035227,37.8411933035779,0 -122.549333433398,37.8411646510783,0 -122.549503995899,37.84115178452681,0 -122.54980731444,37.8410357795086,0 -122.549883363393,37.8409121398237,0 -122.549988412976,37.8408088952504,0 -122.550130236372,37.84073282844331,0 -122.550293166713,37.8406906406727,0 -122.550448332078,37.840639407815,0 -122.550725704198,37.8404669690208,0 -122.550797364959,37.8403635939386,0 -122.550719298336,37.8402348610171,0 -122.550703058343,37.8401018568974,0 -122.550713111284,37.8399667016236,0 -122.550640467995,37.83964646144631,0 -122.550634937101,37.8396216549182,0 contacts #khStyle84754 1 -122.547243519951,37.8393134611285,0 -122.546902468952,37.8393279188274,0 -122.546734666803,37.8393543108114,0 -122.546573596901,37.839441566116,0 -122.546586623168,37.83951822628001,0 -122.546776739842,37.839559517428,0 -122.547116084146,37.8395923725729,0 -122.547284278997,37.8396178060909,0 -122.547457012386,37.8395981915842,0 -122.54759595274,37.839528875976,0 -122.547647989946,37.8393826157752,0 -122.547531812186,37.839330343932,0 -122.547243519951,37.8393134611285,0 contacts #khStyle84754 1 -122.506874725533,37.8392478828917,0 -122.506894631544,37.83924571473041,0 -122.507061480203,37.8392576814783,0 -122.507268345629,37.8393122876719,0 -122.507547207702,37.8393858980949,0 -122.507861902047,37.8394908672018,0 -122.508027195727,37.8395231038159,0 -122.508368888357,37.8395200261321,0 -122.508537370892,37.8395004509735,0 -122.509014966071,37.8393559870498,0 -122.509328221254,37.8392491410643,0 -122.509493241362,37.8392160315798,0 -122.510001415427,37.8391730862827,0 -122.510512829917,37.8391774691288,0 -122.510681972981,37.8391646549932,0 -122.511018295127,37.8391142304087,0 -122.511178413848,37.8390698313486,0 -122.511315330864,37.8389892834649,0 -122.511464956695,37.838920055065,0 -122.51162643625,37.8388846761791,0 -122.511962088267,37.8389356411503,0 -122.512131764234,37.8389498641417,0 -122.51247141305,37.8389332475559,0 -122.513153255907,37.8389450892541,0 -122.513320742772,37.8389683144989,0 -122.513646259828,37.8390485255906,0 -122.513976111825,37.8391174868959,0 -122.514316236405,37.8391369190959,0 -122.514442713603,37.83913632550711,0 contacts #khStyle84754 1 -122.536719196396,37.8397591393115,0 -122.536867217421,37.8398295733844,0 -122.537024628851,37.8398752589171,0 -122.537367602986,37.839894635817,0 -122.537536006137,37.8398862856622,0 -122.537693325324,37.839832826425,0 -122.537837261343,37.839761288246,0 -122.538109647513,37.8395956189141,0 -122.538228859875,37.8395014514948,0 -122.538326877486,37.8393891745862,0 -122.538464461065,37.8393108514085,0 -122.538623877788,37.8392619067259,0 -122.539130023963,37.839200801603,0 -122.539291550072,37.8391563697607,0 -122.53944111982,37.83909161304791,0 -122.539574466775,37.8390087643822,0 -122.539681672055,37.8389032815855,0 -122.539761970487,37.83878417478061,0 -122.539825502365,37.838619937009,0 contacts #khStyle84754 1 -122.550239327391,37.8385611146276,0 -122.549866243435,37.8387038948842,0 -122.549179236846,37.8390730459055,0 -122.548534207846,37.8395460032267,0 -122.548280356404,37.83970500877321,0 -122.548049482107,37.8398235423562,0 contacts #khStyle84754 1 -122.486444379798,37.8382955865108,0 -122.486330072554,37.8381526169096,0 contacts #khStyle84754 1 -122.54361581454,37.8380466212596,0 -122.544054022401,37.8381722513511,0 -122.544187768333,37.8382538877112,0 -122.544293667732,37.8383602013013,0 -122.544295074841,37.8383624584477,0 contacts #khStyle84754 1 -122.537029049542,37.8372367258023,0 -122.537086442341,37.8372594855776,0 -122.53736300983,37.8373326770337,0 contacts #khStyle84754 1 -122.535570497129,37.837052965319,0 -122.535858195717,37.837389834424,0 -122.535970511888,37.8374894215319,0 -122.536222236733,37.8376729279428,0 -122.53636808071,37.837750113316,0 -122.536524803839,37.8377912892205,0 -122.536673652604,37.8377287848506,0 -122.536832388747,37.8376753344098,0 -122.536998797688,37.8376444455604,0 -122.537143441897,37.83757291097551,0 -122.53725770837,37.8374742174414,0 -122.53736300983,37.8373326770337,0 contacts #khStyle84754 1 -122.516175580218,37.8356466588365,0 -122.516062020806,37.8355839983385,0 contacts #khStyle84754 1 -122.538881047981,37.8355602643,0 -122.538744158296,37.8355760682499,0 -122.538585484157,37.8356205106029,0 -122.538440833759,37.8356942986731,0 -122.538180483005,37.835869029306,0 -122.538030204259,37.8359337837909,0 -122.537863841759,37.8359579150448,0 -122.53769270419,37.8359504826421,0 -122.537359959434,37.8358883355598,0 -122.537198991186,37.835844888166,0 -122.537048093652,37.83578120453041,0 -122.536916515667,37.8356950631534,0 -122.536741379549,37.8355321379282,0 contacts #khStyle84754 1 -122.534871967465,37.83551574065201,0 -122.535028560335,37.8355772000107,0 -122.535140915108,37.83567002671191,0 -122.535265746759,37.8359251375772,0 -122.535503576536,37.8362843398405,0 -122.53559378801,37.836397362666,0 -122.535913573026,37.8367140806699,0 -122.536047298475,37.8367979778466,0 -122.536409842035,37.8369796696476,0 contacts #khStyle84754 1 -122.499578190448,37.8347308346455,0 -122.499961228378,37.8349104716101,0 -122.500230384497,37.8352315772835,0 -122.500277728945,37.8355832849684,0 -122.500069871716,37.8361772558033,0 -122.500129192044,37.8367543381362,0 contacts #khStyle84754 1 -122.539362444574,37.8342957783826,0 -122.539053715191,37.8343425048093,0 -122.5387244251,37.8344110634068,0 -122.538386110614,37.8344457871982,0 -122.53821631042,37.8344518793583,0 -122.538045958331,37.8344331837262,0 -122.538018327873,37.8344218082653,0 contacts #khStyle84754 1 -122.482191357778,37.8344706683182,0 -122.481704651038,37.8339885804873,0 contacts #khStyle84754 1 -122.483187781695,37.8340518147405,0 -122.482562230524,37.8337422521039,0 contacts #khStyle84754 1 -122.506218237248,37.8334092324394,0 -122.506296534662,37.83349067869,0 -122.506308420861,37.83349987714101,0 contacts #khStyle84754 1 -122.503554830216,37.8323277238455,0 -122.503725394683,37.8323126718326,0 -122.503894420167,37.8323156370546,0 -122.504062552871,37.8323456394807,0 -122.504230974918,37.83233282938141,0 -122.504393197777,37.8322907021008,0 -122.504537874907,37.8322169560502,0 -122.504700097342,37.8321748283421,0 -122.504869122553,37.8321777942614,0 -122.505022859151,37.8322370254767,0 -122.505163682699,37.8323142282071,0 -122.505290215732,37.8324048912306,0 -122.505405324767,37.8325045190862,0 -122.505713554119,37.8328280292073,0 -122.505811544255,37.8329388493969,0 -122.505891006061,37.8330586046537,0 -122.506073671196,37.8332531516829,0 contacts #khStyle84754 1 -122.508341983885,37.8304123101354,0 -122.507922736818,37.8304421003378,0 -122.507629706804,37.8305164536758,0 contacts #khStyle84754 1 -122.526630846468,37.8308794544914,0 -122.526610571557,37.830606730012,0 -122.526636878178,37.8305753641958,0 -122.526682142356,37.8305213948944,0 -122.526717505406,37.8304336606867,0 -122.526752340473,37.8302062230496,0 contacts #khStyle84754 1 -122.510162221277,37.8301402793523,0 -122.510893026276,37.82990245241051,0 contacts #khStyle84754 1 -122.515714219654,37.8298976302139,0 -122.516460453292,37.8300426575186,0 -122.51661849613,37.8300951320973,0 -122.517220547011,37.8303499698291,0 -122.517381520746,37.8303889369008,0 -122.51755264314,37.8303963986882,0 -122.517893511224,37.830404556608,0 -122.518232469326,37.8303789073004,0 -122.518734390793,37.83030435367661,0 -122.519054624781,37.8302087747116,0 -122.51921821172,37.8301733917769,0 -122.519664545437,37.8301278997207,0 contacts #khStyle84754 1 -122.489926806561,37.83065374082111,0 -122.489791008093,37.8305720333986,0 -122.489667359881,37.830479113912,0 -122.489332111382,37.8301734687277,0 -122.489085524174,37.8299876296379,0 -122.488946870856,37.8299081625955,0 -122.488484297109,37.829734902457,0 -122.488223418163,37.8295625177923,0 -122.48795290474,37.8294486763307,0 contacts #khStyle84754 1 -122.492497834181,37.8315842066292,0 -122.492411973559,37.8314689197393,0 -122.492340367128,37.831346935171,0 -122.492229914437,37.8310895869892,0 -122.492151901155,37.8309698283722,0 -122.492044661203,37.8308657155404,0 -122.491878675294,37.8306284065799,0 -122.491596187549,37.8302914494979,0 -122.491046473086,37.8297753286481,0 -122.490706946972,37.8294719225783,0 -122.490340068786,37.8290151750977,0 contacts #khStyle84754 1 -122.524590147023,37.8293502761989,0 -122.524728730373,37.8293373181326,0 -122.524863713515,37.8292206941607,0 -122.524958708059,37.8291377089477,0 -122.525215339264,37.8289900315201,0 -122.525370080992,37.8290041750361,0 contacts #khStyle84754 1 -122.515504000862,37.8280491032257,0 -122.515858760091,37.8287558304859,0 -122.515976728815,37.8288532061063,0 -122.516105419195,37.8289416126977,0 -122.516253428307,37.82900756917931,0 -122.516728306297,37.8291582327282,0 -122.517061032394,37.8292159323835,0 -122.517229946116,37.8292346523911,0 -122.517399662374,37.829239854826,0 -122.517570187789,37.8292292901211,0 -122.517737265212,37.829202936608,0 -122.517899461734,37.829163042211,0 -122.518269567204,37.8290428845186,0 contacts #khStyle84754 1 -122.52177195078,37.8280229478142,0 -122.52198134483,37.8281522340573,0 -122.522174462872,37.8282724407078,0 -122.522322461626,37.82834063914,0 -122.522423803658,37.8283748514863,0 -122.522949668046,37.828550486742,0 -122.523119279033,37.8285714549243,0 -122.523287686863,37.8285586174502,0 -122.523610444795,37.8285103553096,0 contacts #khStyle84754 1 -122.515504000862,37.8280491032257,0 -122.515427003382,37.828093851083,0 -122.515176108992,37.8281221073317,0 -122.514936648127,37.8280309909693,0 -122.514890644928,37.82800601155391,0 contacts #khStyle84754 1 -122.523610444795,37.8285103553096,0 -122.523476777394,37.8284219366931,0 -122.523145558438,37.8284611510873,0 -122.522974451709,37.8284514458159,0 -122.522816364245,37.8284057367336,0 -122.522212165177,37.8281531725593,0 -122.522087053754,37.8280602816725,0 -122.521948344949,37.8279831055751,0 -122.521758458583,37.8279124824605,0 contacts #khStyle84754 1 -122.515504000862,37.8280491032257,0 -122.515630920608,37.8279730164159,0 -122.515801637442,37.8279331621005,0 -122.516136546011,37.8279818581881,0 -122.516297469902,37.8280275857884,0 -122.516452637408,37.8280845542302,0 -122.516591337971,37.82816173673701,0 -122.516709312034,37.8282591095571,0 -122.516858017357,37.8283273198344,0 -122.517022610607,37.8283550312281,0 -122.517189715595,37.82832417521381,0 -122.517349127651,37.828275259169,0 -122.517658123158,37.8281593578908,0 -122.518414403452,37.8278492579617,0 -122.518819839554,37.8277562823901,0 contacts #khStyle84754 1 -122.526387274854,37.8274287519158,0 -122.526302768571,37.827649230269,0 -122.526218068884,37.8277885902437,0 -122.526087687037,37.8279638182025,0 -122.525921851011,37.8281298899527,0 -122.525710242791,37.8283453475339,0 -122.525437077783,37.82852450396671,0 -122.525174965095,37.8286406130073,0 -122.525081087628,37.828660513622,0 contacts #khStyle84754 1 -122.510593810144,37.8281053714082,0 -122.510533566893,37.8279789399788,0 -122.510455535913,37.82785693991211,0 -122.510357548085,37.8277461213999,0 -122.510002221494,37.8274562252472,0 -122.509967660819,37.8274200310741,0 contacts #khStyle84754 1 -122.508155391888,37.8270654607032,0 -122.508228907989,37.8271175927951,0 -122.508662856787,37.8273312130688,0 -122.50920469428,37.8276624498059,0 -122.509312697545,37.8277620442437,0 -122.509361547904,37.8278929363105,0 -122.509398122097,37.8281612245275,0 -122.509463337558,37.82828767727501,0 -122.509647921532,37.8285137736312,0 -122.509634242322,37.8286489122777,0 -122.509573732806,37.8287770920806,0 -122.509472862135,37.8288870815249,0 -122.509318387878,37.8289405150578,0 -122.509146408792,37.828955569316,0 -122.50897527576,37.8289503490763,0 -122.508480912443,37.8288491393798,0 -122.508326443701,37.8287944150767,0 -122.508040503338,37.8286445044576,0 -122.507918959606,37.828551613545,0 -122.507702315368,37.82834115464301,0 -122.507579354451,37.8282482553459,0 -122.507296256588,37.8280983548319,0 -122.506715759657,37.8278142640615,0 -122.506243782579,37.8276590627684,0 -122.505881514841,37.8275606507796,0 -122.505543077065,37.8275096569409,0 -122.505494917486,37.8274891744714,0 contacts #khStyle84754 1 -122.499357172589,37.8323324419118,0 -122.4990604757,37.8322004882499,0 -122.498920371344,37.8321232805559,0 -122.498661619681,37.8319464226603,0 -122.498517208154,37.8318759553432,0 -122.498362767904,37.8318189635014,0 -122.498034408361,37.8317477115192,0 -122.497519221682,37.8316824162563,0 -122.497385371826,37.8316255112624,0 -122.497345112878,37.8314878916476,0 -122.497345333857,37.8313504453469,0 -122.497395921337,37.8312222277253,0 -122.497530036966,37.8311349252435,0 -122.497621708313,37.8310226535515,0 -122.49765032323,37.8308875825278,0 -122.497522763084,37.83063692741791,0 -122.497414407787,37.8303818468113,0 -122.497369841356,37.8302509679902,0 -122.497266003673,37.8298539517225,0 -122.497096725197,37.8294724294141,0 -122.497016570604,37.8293526648071,0 -122.496555237394,37.82878512162861,0 -122.496160176436,37.8281863185377,0 -122.495961738573,37.8278114286083,0 -122.495812823044,37.827569690781,0 -122.495686695461,37.8273190397052,0 -122.495551718581,37.8269083694534,0 contacts #khStyle84754 1 -122.515204212908,37.8270834768337,0 -122.515031972691,37.8270309417919,0 -122.514959455952,37.8269337527798,0 -122.515033447726,37.82680562364351,0 -122.515479374387,37.82660241825851,0 -122.515638131084,37.826544486648,0 -122.515755191335,37.8264548405108,0 -122.515905845137,37.8262233754234,0 contacts #khStyle84754 1 -122.515204212908,37.8270834768337,0 -122.515254766133,37.8269552508885,0 -122.515348539305,37.8268429754471,0 -122.515481196388,37.8267578993755,0 -122.515768365069,37.8266126221832,0 -122.515886193227,37.8265139639271,0 -122.515971472589,37.8263971454147,0 -122.516105290848,37.8261340660955,0 contacts #khStyle84754 1 -122.506570165064,37.8261079477942,0 -122.506613176545,37.8262613501709,0 -122.506673444379,37.82638327823,0 -122.506895760313,37.8265937628437,0 -122.507020168391,37.8266821592597,0 -122.507226671585,37.82670781048,0 contacts #khStyle84754 1 -122.495535323997,37.8262909106963,0 -122.495483528152,37.8255538763559,0 contacts #khStyle84754 1 -122.518022091931,37.8254884999729,0 -122.518126410499,37.8253920378273,0 contacts #khStyle84754 1 -122.496740790124,37.8355524032428,0 -122.496702841254,37.8345518024225,0 -122.496676772297,37.8344164951668,0 -122.496616532538,37.8342923082002,0 -122.496520000163,37.8341792323711,0 -122.496193983655,37.83386688720911,0 -122.495827271558,37.8335859109341,0 -122.495562798356,37.8334157809553,0 -122.495228236448,37.8331079018359,0 -122.494842061433,37.8326623524614,0 -122.494759052816,37.8325448278859,0 -122.494692428247,37.8324206124218,0 -122.494645738269,37.8322897234788,0 -122.494587890373,37.8320235909378,0 -122.494572462562,37.8318905848562,0 -122.494613369332,37.8316203719657,0 -122.494676260225,37.8313547591478,0 -122.494719763919,37.8312242584052,0 -122.494835134509,37.8309701381674,0 -122.494906983305,37.830848772351,0 -122.495236918928,37.8303747583577,0 -122.495310914261,37.8302511477262,0 -122.495357951327,37.8301229156956,0 -122.495371671628,37.8299855273975,0 -122.495316411495,37.8298613610825,0 -122.495216331043,37.8297482709528,0 -122.49488248339,37.8294426454343,0 -122.494685120627,37.8292232293411,0 -122.494216941493,37.8288291491099,0 -122.494121110873,37.8287183280284,0 -122.493988590001,37.8284676476378,0 -122.493946877479,37.82833677978701,0 -122.493917567797,37.8281563926051,0 -122.493882472085,37.8278881059267,0 -122.493835072013,37.8277572135042,0 -122.493744229833,37.82764415982,0 -122.493523348117,37.827438160913,0 -122.493287492794,37.8272411121006,0 -122.492980063653,37.8269175711121,0 -122.492901341839,37.8267978077511,0 -122.492850378412,37.8266691533045,0 -122.49281601167,37.8263986156082,0 -122.49281123913,37.8262656531058,0 -122.492833469255,37.8261305555664,0 -122.49282443737,37.825997574658,0 -122.492743153811,37.8257335934777,0 -122.492650941897,37.825199175716,0 -122.492669974669,37.8249085908831,0 contacts #khStyle84754 1 -122.509697989211,37.82685108860381,0 -122.509693122345,37.8268352938917,0 -122.509647314238,37.8265669671843,0 -122.509589200967,37.82644054203971,0 -122.509459092373,37.8263543762203,0 -122.509303224899,37.8262973956713,0 -122.508974897147,37.8262216664394,0 -122.508656679515,37.8261211952883,0 -122.508542979013,37.8260238302055,0 -122.508380936364,37.8258271192847,0 -122.508287955389,37.8257118145047,0 -122.508167095233,37.8256234321599,0 -122.507844619135,37.8255229410053,0 -122.507704467047,37.8254525035172,0 -122.507410520925,37.82512004511081,0 -122.507254463115,37.8248782924551,0 -122.507154339249,37.8247697181978,0 -122.506950708581,37.824633668508,0 contacts #khStyle84754 1 -122.523810298531,37.8242682994622,0 -122.523815981302,37.8242683224838,0 -122.523849170058,37.824297749908,0 -122.523857694218,37.8242977844375,0 -122.523875359392,37.8243113745379,0 -122.523883883553,37.8243114090655,0 -122.52390931778,37.82433179200011,0 -122.52391782746,37.8243340802568,0 -122.52393478363,37.8243476674767,0 -122.52394330515,37.8243477019893,0 -122.524002657063,37.8243952614539,0 -122.524011164122,37.8243975475948,0 -122.52402812031,37.8244111368998,0 -122.524036644482,37.8244111714164,0 -122.524052891666,37.8244247557484,0 -122.524062124866,37.8244247931341,0 -122.524104500929,37.8244610169579,0 -122.524113025108,37.8244610514691,0 -122.524138459449,37.8244814343547,0 -122.52414698363,37.8244814688634,0 -122.524180187087,37.8245086424637,0 -122.524154342534,37.8242201219332,0 contacts #khStyle84754 1 -122.524154342534,37.8242201219332,0 -122.524457558572,37.82422585450901,0 contacts #khStyle84754 1 -122.506704720819,37.82445913683111,0 -122.506527428025,37.8243141817804,0 -122.506222152975,37.8241912289248,0 -122.506062664424,37.824145493633,0 -122.505892194322,37.82414928270531,0 -122.505344813447,37.82412219528911,0 contacts #khStyle84754 1 -122.523784992711,37.8241172286654,0 -122.523794182412,37.8241240272668,0 -122.523854532711,37.8241265234383,0 -122.523863097645,37.8241197988598,0 -122.523914940919,37.82412000884901,0 -122.523924214868,37.8241132871378,0 -122.523932739006,37.8241133216616,0 -122.523959145458,37.8240931486908,0 -122.52396837597,37.8240931860727,0 -122.523976943535,37.8240864614965,0 -122.523985465025,37.8240864960058,0 -122.523994741609,37.8240797742996,0 -122.524003263098,37.8240798088076,0 -122.524011827999,37.8240730863166,0 -122.524020349487,37.8240731208233,0 -122.524028830211,37.8240799123385,0 -122.524045771865,37.8240957532745,0 -122.524045728442,37.8241025123713,0 -122.524054206512,37.8241093059724,0 -122.524054119654,37.8241228262646,0 -122.524061888705,37.8241296169943,0 -122.524061845284,37.8241363760912,0 -122.524070323359,37.8241431696912,0 -122.524070279938,37.824149928788,0 -122.524078760648,37.8241567244966,0 -122.52407800556,37.8241634807119,0 -122.524137342951,37.8242132917429,0 -122.524145864456,37.8242133262407,0 -122.524154342534,37.8242201219332,0 contacts #khStyle84754 1 -122.529164931209,37.8155878147019,0 -122.529347962586,37.8156155868593,0 -122.529449004484,37.8156948552627,0 -122.529458112021,37.81593824275311,0 contacts #khStyle84754 1 -122.910624559021,38.3179733037043,0 -122.910799547261,38.3184060342701,0 -122.911156357049,38.3186676698531,0 -122.911726502854,38.318713171085,0 -122.912269920245,38.3186910562329,0 -122.913345082336,38.3185431676997,0 -122.913866842887,38.3183948556605,0 -122.914387345442,38.3183997509752,0 -122.914797042651,38.3185125879396,0 -122.914912329252,38.3185443393361,0 -122.916363979661,38.3186535545507,0 contacts #khStyle84754 1 -122.906621877704,38.3140317088072,0 -122.907164927533,38.3139915924219,0 -122.908769205607,38.3137495411179,0 -122.910470557734,38.3136247046055,0 contacts #khStyle84754 1 -122.910624559021,38.3179733037043,0 -122.9108680016,38.3176831555132,0 -122.911225315391,38.3172572842343,0 -122.911487457821,38.3168834721811,0 -122.911645614675,38.31647353006001,0 -122.911860075029,38.3156265298402,0 -122.911837723821,38.3151984240183,0 -122.911592469371,38.3143510705975,0 -122.911247179667,38.314039876912,0 -122.910470557734,38.3136247046055,0 contacts #khStyle84754 1 -122.94376613144,38.3118594101381,0 -122.944030731568,38.3116405104426,0 contacts #khStyle84754 1 -122.94376613144,38.3118594101381,0 -122.943691224625,38.3117564357144,0 -122.943652420679,38.3115820074524,0 -122.943683155686,38.3115910330614,0 -122.944027704209,38.3116407729222,0 -122.944030731568,38.3116405104426,0 contacts #khStyle84754 1 -122.944030731568,38.3116405104426,0 -122.944438690337,38.3113030085318,0 -122.944872846616,38.3110418601545,0 -122.945331282351,38.3108122652752,0 -122.945560531232,38.3107144776805,0 contacts #khStyle84754 1 -122.895865390471,38.30998042888301,0 -122.896415421776,38.3100395048473,0 -122.896886997405,38.3102201754592,0 -122.897611333778,38.3108742197478,0 -122.897921104241,38.3112259779004,0 -122.898170422504,38.31160922521661,0 -122.898601117265,38.3123981894356,0 -122.898703468136,38.3128218619421,0 -122.89870214861,38.31324994945601,0 -122.898630050321,38.3136779747065,0 -122.898608354518,38.314106044231,0 -122.898596043315,38.3149757291074,0 -122.898888702495,38.3153094446724,0 -122.899360236188,38.3155486857687,0 -122.899858665703,38.3157293678164,0 -122.900385444998,38.3158334669543,0 -122.900928393335,38.3158789971047,0 -122.902017330528,38.315839372807,0 -122.902553653252,38.3157632225364,0 -122.903071107733,38.315628473392,0 -122.904049674449,38.31525077259641,0 -122.905477903242,38.3146255929232,0 -122.906621877704,38.3140317088072,0 contacts #khStyle84754 1 -122.939040080512,38.3091417726121,0 -122.9392942551,38.3095249357436,0 -122.939520351307,38.3097659665278,0 -122.939615667486,38.3098675781195,0 -122.940393882724,38.3104090449929,0 -122.940432321983,38.3104357899313,0 -122.940963794792,38.3107651033859,0 -122.941291198815,38.3109679681819,0 -122.942222725592,38.3114100529624,0 -122.942661472309,38.3116716347932,0 -122.943152108095,38.3118656478757,0 -122.943692901956,38.3119199914461,0 -122.94376613144,38.3118594101381,0 contacts #khStyle84754 1 -122.924769266637,38.3092504320779,0 -122.925548233038,38.3098502659619,0 -122.926415215389,38.3103825581919,0 -122.926428502884,38.3103883189985,0 -122.926883627733,38.3105856373671,0 -122.927431205201,38.3106265415925,0 -122.927969232176,38.3105683007945,0 -122.928489462472,38.3104334409582,0 -122.929459262318,38.31004200330391,0 -122.930862899638,38.3093804484675,0 -122.931841238475,38.3090025147662,0 -122.932348599529,38.3088496052454,0 -122.932875579657,38.3087372608919,0 -122.933741114608,38.3086681792601,0 -122.93450099988,38.3086075245541,0 -122.935590846118,38.3086081446282,0 -122.935918778236,38.3085343166462,0 -122.936109959811,38.3084912750808,0 -122.936677736209,38.308315849577,0 contacts #khStyle84754 1 -122.945560531232,38.3107144776805,0 -122.945717959262,38.3104609669262,0 -122.945791115735,38.3101545796777,0 -122.945771261107,38.3099427779739,0 -122.94548607766,38.3093973916267,0 -122.945412212765,38.3092261190155,0 -122.945510987567,38.3090774657551,0 -122.945708369907,38.3089829260849,0 -122.946003665167,38.3089244868066,0 -122.946286373172,38.3089651760276,0 -122.946643059017,38.3090239264301,0 -122.946925818441,38.3089970215725,0 -122.947132934209,38.308789831175,0 -122.947530389741,38.3083393957606,0 -122.948025823579,38.3073437517586,0 -122.94844560597,38.3066454831278,0 -122.948998846816,38.3060018064046,0 contacts #khStyle84754 1 -122.945560531232,38.3107144776805,0 -122.946302086303,38.310398157675,0 -122.946561133371,38.3095916691181,0 -122.947455500748,38.3090693668678,0 -122.947794592437,38.3087540889727,0 -122.948115791391,38.307487992115,0 -122.948702519823,38.3067582533555,0 -122.948946566877,38.3063753357942,0 -122.948998846816,38.3060018064046,0 contacts #khStyle84754 1 -122.906621877704,38.3140317088072,0 -122.906621212304,38.313171024585,0 -122.906849504053,38.31189595552221,0 -122.906927476141,38.3110353345999,0 -122.906925530144,38.3106072440737,0 -122.906747688799,38.3102015421319,0 -122.906421068077,38.309858805836,0 -122.90596493005,38.3096105930959,0 -122.904907097773,38.3094475009925,0 -122.904486390727,38.3091722745582,0 -122.904035255774,38.3089330708622,0 -122.90355154182,38.3087343939562,0 -122.902677209743,38.3082244578282,0 -122.90217631017,38.3080527979324,0 -122.901153367103,38.3077545156006,0 -122.899697759954,38.30754531117311,0 -122.899008447713,38.3074462343383,0 -122.898491771192,38.3073196069072,0 -122.897560933299,38.306868163497,0 -122.897118784189,38.3066199287763,0 -122.895895809114,38.305767159192,0 -122.895111763091,38.3051716302457,0 -122.894616290265,38.3049819181982,0 -122.89408487811,38.3049273571387,0 -122.893535481906,38.3049493825173,0 -122.89294869006,38.3048812465963,0 -122.892628113111,38.3046195890422,0 -122.892742249071,38.3043610413032,0 -122.892807073051,38.3042141971958,0 -122.893912401247,38.3040935512181,0 -122.894421938642,38.3039498201075,0 -122.894819462066,38.303657279999,0 -122.895369515377,38.30293228140291,0 -122.895716432335,38.303270560827,0 -122.896037979168,38.3040999925111,0 -122.896274746866,38.3044877391353,0 -122.897216119087,38.3055430333573,0 -122.897607091685,38.30583177812691,0 -122.898074647298,38.3060575024868,0 -122.898948563637,38.3065674726052,0 -122.899947106239,38.30691532119991,0 -122.900472749601,38.307019418966,0 -122.901017425664,38.30706044390741,0 -122.901546300915,38.3071555272398,0 -122.902061527247,38.3073001648047,0 -122.903048638499,38.3076614959009,0 -122.904474699824,38.30828904950981,0 -122.904993532367,38.3084201585903,0 -122.905970283856,38.3087994813581,0 -122.906503133669,38.308876520803,0 -122.90759621182,38.3088683911857,0 -122.90814485503,38.3088958676455,0 -122.908659414938,38.3090224509128,0 -122.908929286086,38.3091927706667,0 -122.909095507148,38.3092976745819,0 -122.909275532626,38.3096808437723,0 -122.909437728011,38.3112698131453,0 -122.909451717231,38.311406857222,0 -122.90983476377,38.3126598814539,0 -122.910058049073,38.3130475893556,0 -122.910470557734,38.3136247046055,0 contacts #khStyle84754 1 -122.916363979661,38.3186535545507,0 -122.917242214592,38.3181449910337,0 -122.917654013273,38.3178613969128,0 -122.918022982581,38.3175146839958,0 -122.918080619621,38.31713169849081,0 -122.917783279949,38.3167439529788,0 -122.917489171775,38.3165568137843,0 -122.917364973961,38.3164777869803,0 -122.916441787347,38.31600847427381,0 -122.916010258491,38.3157468000046,0 -122.915626682568,38.3154446036103,0 -122.915327191329,38.3150793812118,0 -122.915158944035,38.3146736992732,0 -122.915105473696,38.3142455709686,0 -122.915075607653,38.3138084476669,0 -122.915159389761,38.3133939393175,0 -122.915645392257,38.3126147248482,0 -122.91593964029,38.3122634570281,0 -122.916123657908,38.3121318752808,0 -122.916751754998,38.3116827488334,0 -122.917083153778,38.3113450235971,0 -122.917732939647,38.3101648663585,0 -122.918021826617,38.3097955644716,0 -122.918839590735,38.3092373765202,0 -122.919029778974,38.3089683296472,0 -122.919107031909,38.3088590443082,0 -122.919436619679,38.3085213109275,0 -122.919860498231,38.3082467293309,0 -122.920355036322,38.3080713317324,0 -122.921413329627,38.30782872658731,0 -122.921722880556,38.3074954791626,0 -122.921910631435,38.307081036346,0 -122.922027622958,38.3066530264939,0 -122.921891879094,38.3062518818784,0 -122.92169466367,38.3058461889267,0 -122.921680880257,38.3053775341263,0 -122.922059583207,38.30520655626,0 -122.922632220363,38.3051708943486,0 -122.922921057778,38.3048060861493,0 -122.923031601215,38.3043825769783,0 -122.923005623147,38.3039454574603,0 -122.923057552954,38.3035174026206,0 -122.923199903711,38.3030939145281,0 -122.923484503816,38.3026705212409,0 -122.923699431471,38.3028914686704,0 -122.923826509706,38.3033782236255,0 -122.923801987228,38.3042524115591,0 -122.923839252104,38.3046074456682,0 -122.923846923295,38.3046805310706,0 -122.924366846995,38.3048025428842,0 -122.924646806633,38.3050505686513,0 -122.924410317991,38.30594264174061,0 -122.924600800433,38.306307769876,0 -122.92494893224,38.306654976223,0 -122.925084039359,38.3069679835037,0 -122.925127929293,38.3070696642001,0 -122.925102639371,38.3072765861197,0 -122.925077815202,38.307479696084,0 -122.9248439905,38.3078760889515,0 -122.924789928138,38.3082996366727,0 -122.924769266637,38.3092504320779,0 contacts #khStyle84754 1 -122.936677736209,38.308315849577,0 -122.936897557749,38.307919425267,0 -122.937187406976,38.3075545825398,0 -122.937572637504,38.3072483720012,0 -122.938077103057,38.3071089546406,0 -122.939149928217,38.3069247778694,0 -122.939662267393,38.3067673330475,0 -122.940111045689,38.306533247054,0 -122.940763241268,38.3058216072685,0 -122.940940137885,38.3054296590216,0 -122.940677018181,38.3050645193735,0 -122.940246565707,38.3047713908128,0 -122.939776027955,38.3045458326222,0 -122.939772086527,38.3041357655053,0 -122.940029757482,38.3037483673926,0 -122.940435321205,38.3034511703018,0 -122.940575418751,38.3030366721381,0 -122.940543620967,38.3025950469219,0 -122.940393508788,38.3021668784572,0 -122.940869679461,38.3020499651258,0 -122.941348104795,38.3022304609521,0 -122.941951881379,38.3029742951532,0 -122.942196399523,38.3033574474672,0 -122.942509544503,38.3041822425044,0 -122.942569248579,38.3046058563445,0 -122.94251707526,38.3050339198709,0 -122.942397351008,38.3054574429579,0 -122.942196510662,38.3058538874663,0 -122.941215939596,38.30688530689801,0 -122.940476514847,38.3080340055375,0 -122.940124876761,38.308358268075,0 -122.939040080512,38.3091417726121,0 contacts #khStyle84754 1 -122.948998846816,38.3060018064046,0 -122.949005848736,38.3059517788356,0 -122.948938918921,38.3050865564877,0 -122.949161513634,38.3047036286897,0 -122.950071208712,38.3036225426123,0 -122.950307374856,38.3032396185013,0 -122.950449920877,38.3028206032707,0 -122.950465171855,38.3019689358536,0 -122.950675973355,38.3015589625036,0 -122.951062538845,38.3012617201667,0 -122.951581587748,38.3011267569612,0 -122.952106536411,38.3012486481085,0 -122.9525670655,38.3015011900895,0 -122.952920674986,38.3018393038325,0 -122.952901177874,38.30217433981571,0 -122.952896812162,38.3022493592494,0 -122.952608843782,38.3026232545527,0 -122.95217045227,38.3028796335049,0 -122.952162255901,38.3028844268502,0 -122.951797833842,38.3031997070005,0 -122.951646856764,38.3033849947001,0 -122.951206879195,38.3039249537843,0 -122.95069309445,38.30468177457761,0 -122.950530894012,38.3050917689596,0 -122.950431592871,38.3055108030524,0 -122.950386253142,38.3059433793099,0 -122.950391119059,38.3060871526389,0 -122.950430024785,38.307236680414,0 -122.950226733865,38.3076151127271,0 -122.949907645944,38.307970962466,0 -122.949711479875,38.308376434223,0 -122.949634331097,38.3087954772158,0 -122.949615435639,38.30922806467,0 -122.949501455275,38.3096651159478,0 -122.949166669091,38.3099623758413,0 -122.948968030405,38.3100097735289,0 -122.948620032239,38.3100928093043,0 -122.948405977322,38.3105027767971,0 -122.94853189271,38.3108678366737,0 -122.949104828231,38.3109582195292,0 -122.94951995972,38.3110650091041,0 -122.9496312638,38.3110936409713,0 -122.950110475675,38.311287619921,0 -122.950195312584,38.31134877447,0 -122.950517056686,38.3115807016932,0 -122.950975873918,38.3118107178244,0 -122.951484079374,38.311959641667,0 -122.952580761815,38.31196911934921,0 -122.95309440148,38.3120297317723,0 -122.953117268012,38.3120324300993,0 -122.953130716226,38.3120401036987,0 -122.953994507731,38.3125329796217,0 -122.954508443841,38.31268189270251,0 -122.955052109138,38.312740691292,0 -122.955566431942,38.3128490440525,0 -122.956010957606,38.3131060720835,0 -122.956803100094,38.3136921852066,0 -122.957313467242,38.3138546032407,0 -122.957862511029,38.3139043784481,0 -122.95838662074,38.3138054371218,0 -122.958460242893,38.3137165201212,0 -122.958692474482,38.313436041168,0 -122.959144095146,38.3131973774286,0 -122.95965095934,38.3132381165066,0 -122.959780119493,38.3136617460914,0 -122.959775937468,38.3141888725385,0 -122.959773183871,38.3145359472221,0 -122.960055384894,38.314892038104,0 -122.960453796525,38.315198601082,0 -122.960880829859,38.3154691230618,0 -122.96110510324,38.3158702531826,0 -122.961401992551,38.3161902962414,0 -122.961947092636,38.3162986316309,0 -122.962491865847,38.3163528899459,0 -122.963033820505,38.3163305393517,0 -122.964072084725,38.3160650120186,0 -122.964184798273,38.31601864717921,0 -122.96455371177,38.3158668930393,0 -122.964987110486,38.31560116388501,0 -122.965330453176,38.31527231828311,0 -122.96603483868,38.3142180833701,0 -122.966098883618,38.3140920095134,0 -122.966167587504,38.3139567638854,0 contacts #khStyle84754 1 -122.98261273146,38.3067641901004,0 -122.982593984693,38.3066974971361,0 -122.982545595863,38.30652534982751,0 -122.982507463302,38.3060927471084,0 -122.982315989156,38.3056781438561,0 -122.982236603873,38.3055527833116,0 -122.982081971282,38.3053085952685,0 -122.98182758737,38.3049210178767,0 -122.981463814566,38.3046055204511,0 -122.981020321874,38.30435309481101,0 -122.980528203406,38.30416825191061,0 -122.979486748551,38.3039247230669,0 -122.979075445748,38.3036362464598,0 -122.978771033945,38.3032847024012,0 -122.978568504305,38.3028836093656,0 -122.978168957287,38.3016308016788,0 -122.978196629269,38.3011576545183,0 -122.978474413244,38.3009098680818,0 -122.978968277568,38.3011397821542,0 -122.97906105471,38.3015051867449,0 -122.979185676279,38.3019960053197,0 -122.97935282154,38.3024015968124,0 -122.979570721673,38.3028071976588,0 -122.979955931651,38.3030911615003,0 -122.980493462058,38.303176878329,0 -122.980962843904,38.303036722926,0 -122.981036424658,38.303014751809,0 -122.981410936319,38.30323562196971,0 -122.981729898359,38.3035604742372,0 -122.981756106477,38.3035871661683,0 -122.981849335237,38.3036116382916,0 -122.982288624522,38.3037269485018,0 -122.982797966666,38.3036549325603,0 -122.983276610341,38.3034206858136,0 -122.983864943163,38.3033306527959,0 -122.983989962568,38.3036506131153,0 -122.983820327866,38.3045473240597,0 -122.983771256517,38.304975406913,0 -122.983781516593,38.3054080050453,0 -122.983982911012,38.3062191542355,0 -122.984059702826,38.3064534889533,0 contacts #khStyle84754 1 -122.981851026986,38.3094497649902,0 -122.981686005039,38.3090081290017,0 -122.981757622554,38.3085394938284,0 -122.981933897114,38.3083322385936,0 -122.982128082894,38.3079852935099,0 -122.982122825406,38.3076067721419,0 -122.981800521988,38.3071966523879,0 -122.981654459327,38.3067234746437,0 -122.981465504526,38.3062593017566,0 -122.981502516988,38.30553831273641,0 -122.981292826057,38.3051237056778,0 -122.9809616153,38.3046730246323,0 -122.980378363039,38.3044431041574,0 -122.979714310533,38.3043123009857,0 -122.979381955102,38.3041500151549,0 -122.979154384144,38.3038074986774,0 -122.978356489608,38.3030998662354,0 -122.978209331036,38.3027934138989,0 -122.97793292062,38.3020813747678,0 -122.977686124035,38.3015495910165,0 -122.977827805531,38.3010944918377,0 -122.978084924257,38.300661948113,0 -122.978303730327,38.300418656599,0 -122.978652948557,38.3003105758804,0 -122.978936003823,38.3003331636108,0 -122.979178988276,38.300495433603,0 -122.979635255343,38.30095515401041,0 -122.979936399423,38.30145540116,0 -122.980406276511,38.3018610460385,0 -122.980722207223,38.3019286979549,0 -122.981143982958,38.3018206228519,0 -122.981424933701,38.3017350541946,0 -122.981670449723,38.3018207142321,0 -122.98177867812,38.3020685754667,0 -122.981914751588,38.3024426142222,0 -122.982071939634,38.3027220261425,0 -122.982317457371,38.30281669732,0 -122.98257803166,38.3027491475407,0 -122.982914740751,38.302654571942,0 -122.983146421429,38.3023526933203,0 -122.983406740595,38.3018660613704,0 -122.983618234717,38.30079361483331,0 -122.983885695063,38.3002844525646,0 -122.984062665277,38.3000546615787,0 -122.984360406735,38.2999420529603,0 -122.985069133575,38.29994666116241,0 -122.985450132291,38.2999061595374,0 -122.985668900159,38.2997394594482,0 -122.986145399007,38.2993384704691,0 -122.986508608148,38.2988878950025,0 -122.98800404452,38.2964772514023,0 -122.989012466766,38.29507142584091,0 -122.989002193356,38.2945487030894,0 -122.988470346208,38.29296245180281,0 -122.988134138365,38.2925388291664,0 -122.987455523092,38.2924351055905,0 -122.986086836121,38.2923403005615,0 -122.98474282838,38.2921688757026,0 -122.984062775413,38.29213272513541,0 -122.98339453241,38.2920289817429,0 -122.982750250414,38.29185764139901,0 -122.982142443541,38.2916142055735,0 -122.980660284634,38.2910011016335,0 contacts #khStyle84754 1 -122.94793932407,38.2810994981684,0 -122.948603198716,38.2840603918335,0 -122.948773705843,38.28446602923301,0 -122.949051439051,38.2848356647356,0 -122.949690915518,38.2855344149736,0 -122.949626645317,38.2859669840517,0 -122.949262664035,38.2862687389283,0 -122.948824025884,38.2865299029995,0 -122.948549320326,38.2869037954215,0 -122.948404296534,38.2873183021891,0 -122.948376465949,38.2877508869845,0 -122.94845119923,38.2881745059119,0 -122.948596337028,38.288589144222,0 -122.948988835843,38.2893959351128,0 -122.949263379208,38.2897565559638,0 -122.949679848997,38.290040633443,0 -122.949807097284,38.2901083985547,0 -122.950577542684,38.2905186877717,0 -122.950407856083,38.2909467046725,0 -122.949905076778,38.2909149400878,0 -122.948810641957,38.2907071653288,0 -122.948717521085,38.2907207385881,0 -122.948286702006,38.290783533567,0 -122.947753783817,38.2909184762007,0 -122.947326589613,38.2909972445226,0 -122.947168709589,38.2910263548371,0 -122.947098174897,38.2907289114487,0 -122.947360065384,38.2898368013336,0 -122.94747853474,38.2892402569107,0 -122.947528291036,38.2889897094711,0 -122.947562803747,38.2884332338893,0 -122.947608218266,38.2877009666851,0 -122.947509869232,38.2868447388166,0 -122.947503357057,38.28598855321761,0 -122.947421805993,38.2851323327903,0 -122.947442018244,38.283415470106,0 -122.947210352913,38.2821401004943,0 -122.947177160593,38.281130690037,0 contacts #khStyle84754 1 -122.857026552235,38.2784721012114,0 -122.856998888603,38.2785486722662,0 -122.856958380467,38.2786162148271,0 -122.856842178974,38.27865662705431,0 -122.856842177918,38.2786566274217,0 -122.856642950023,38.2787645314411,0 -122.856524845321,38.2788635222598,0 -122.856416626984,38.2790211060494,0 -122.856342424188,38.2791426818716,0 -122.856215439731,38.2792146240273,0 -122.856215438318,38.279214624828,0 -122.856077529236,38.2793901940944,0 -122.856077528592,38.2793901949148,0 -122.855742783419,38.2799034876482,0 -122.855742782703,38.2799034887456,0 -122.855644174675,38.28007910645341,0 -122.855644174079,38.2800791075153,0 -122.855565286232,38.2802187014618,0 -122.855565285881,38.2802187030912,0 -122.855515876573,38.2804484570567,0 -122.855423696527,38.2806240847137,0 -122.855324872847,38.2807276042961,0 -122.855217856834,38.2808175951601,0 -122.855217835169,38.2808176354613,0 -122.855195624196,38.2808589517865,0 contacts #khStyle84754 1 -122.857389759199,38.2781931624756,0 -122.857461432499,38.2780851017153,0 contacts #khStyle84754 1 -122.85702757062,38.2779583918922,0 -122.857043077094,38.2778863128217,0 -122.857089953807,38.2778503208612,0 -122.857461432499,38.2780851017153,0 contacts #khStyle84754 1 -122.897177090993,38.2791410998726,0 -122.897498319683,38.2788800247621,0 -122.897992495696,38.2786055819158,0 -122.899271578127,38.2781245410745,0 -122.899922794608,38.2779628824213,0 -122.900594266711,38.2778778450419,0 -122.901356082453,38.2778289311753,0 -122.901858478528,38.277797816954,0 -122.901970415266,38.277721304693,0 -122.902125097058,38.277478100168,0 -122.902461767296,38.2771404190768,0 -122.902867643878,38.2768794006652,0 -122.90343397626,38.2765914777447,0 -122.904059166036,38.2763711939074,0 -122.904696819426,38.27617795458781,0 -122.905360447087,38.27606584580731,0 -122.90604218499,38.2760348607249,0 -122.906724562215,38.2760624525398,0 -122.907383951411,38.2761846523436,0 -122.908002829808,38.2764149663654,0 -122.908573755723,38.2767083246292,0 -122.909083867224,38.2770647197752,0 -122.909517807878,38.2774796353123,0 -122.909786428416,38.2778133050724,0 -122.909889108078,38.2779656473633,0 contacts #khStyle84754 1 -122.971225884303,38.27504697396,0 -122.970931367924,38.2751307658304,0 -122.970893574748,38.2751415181731,0 -122.970569093899,38.27530816329141,0 -122.970140665927,38.2754207047744,0 -122.969626171146,38.2754430964908,0 -122.969594369164,38.2754521002674,0 -122.969058517342,38.2752942342288,0 -122.968588431744,38.2750823094859,0 -122.96790458844,38.2746754227143,0 -122.967701908431,38.2745548264672,0 -122.967480139229,38.2745687172815,0 -122.967200634031,38.2745862238632,0 -122.966660364283,38.2747257571416,0 -122.96608368948,38.2747841646435,0 -122.966039530005,38.27474091749771,0 contacts #khStyle84754 1 -122.981941325993,38.2899964362096,0 -122.984019744779,38.2897624449879,0 -122.98466730249,38.2896093302055,0 -122.985210171503,38.2893750823487,0 -122.985867758034,38.2890732567601,0 -122.986360546147,38.2890462847875,0 -122.986559218575,38.2891093983062,0 -122.986816493675,38.2891905439984,0 -122.987108453267,38.2891635431833,0 -122.987327886331,38.2890599273647,0 -122.987492298985,38.2888887094952,0 -122.987876119893,38.2887310394355,0 -122.988113768957,38.2886454472334,0 -122.988499703401,38.2886545039127,0 -122.988698052319,38.2885328580881,0 -122.988734893311,38.2883300814286,0 -122.988644533083,38.2880596977473,0 -122.988586006306,38.2876180816723,0 -122.988147629359,38.2871809274048,0 -122.987191898483,38.28641925967211,0 -122.985608210916,38.2846706329037,0 -122.985132699789,38.2842650091163,0 -122.984570346037,38.2839494918317,0 -122.98398858043,38.2841251486597,0 -122.983469648345,38.2845216182977,0 -122.983088268615,38.2849721805961,0 -122.982845152983,38.2854903568417,0 -122.982551311117,38.2859364261388,0 -122.982353299478,38.286130161887,0 -122.982097417966,38.2862337644653,0 -122.981915198681,38.2861751513758,0 -122.9818319888,38.2859813690342,0 -122.981679128007,38.2856974515821,0 -122.981624300533,38.2849539139439,0 -122.981153456692,38.2845437654773,0 -122.980541772315,38.2843408758331,0 -122.979871470693,38.2842100723304,0 -122.979239427729,38.28400266689041,0 -122.978652431015,38.2837276718915,0 -122.97815265206,38.2833670756161,0 -122.977907959613,38.2831462202967,0 -122.977762997753,38.2828127313807,0 -122.97779985162,38.2826550206639,0 -122.977993164869,38.2826415400564,0 -122.978765272569,38.2828174368971,0 -122.979368744248,38.2829347162671,0 -122.980787746325,38.282615034109,0 -122.981425252462,38.2824168703687,0 -122.982082741677,38.2823133412315,0 -122.982418631677,38.2822638269645,0 -122.982772347525,38.2823585151309,0 -122.983111435012,38.28238110175371,0 -122.983349074986,38.2822820013277,0 -122.983458810809,38.2821107824273,0 -122.983696863418,38.2817773575893,0 -122.983825549996,38.2815610785669,0 -122.984081058063,38.2814484616075,0 -122.984281872682,38.2814079341524,0 -122.984591995302,38.2815071176774,0 -122.984810658696,38.2815522120427,0 -122.984993995935,38.2813945200049,0 -122.984994414935,38.2811196388116,0 -122.985130252854,38.2808537914484,0 -122.985260695088,38.2807366468457,0 -122.985489025004,38.2806871107308,0 -122.985782368921,38.2807141885151,0 -122.985912795167,38.280678156001,0 -122.986049679981,38.2805024309476,0 -122.98617442441,38.2802906539764,0 -122.986224156192,38.2799707186486,0 -122.986204974486,38.2794434837392,0 -122.986096055174,38.2791640869259,0 -122.985865991554,38.2789928178779,0 -122.985268295673,38.2787043365651,0 -122.984598755488,38.2785420172961,0 -122.984289341348,38.2785284519358,0 -122.984028529893,38.2784653272751,0 -122.983931739582,38.2783120995004,0 -122.983980729594,38.2781453759866,0 -122.984287374011,38.27778492450801,0 -122.984862344759,38.2774019807008,0 -122.984960650218,38.2771811864677,0 -122.984977841841,38.2769919255577,0 -122.984896408783,38.2768612352274,0 -122.984229401979,38.276653849391,0 -122.984033966095,38.2766538201394,0 -122.983838192683,38.2765636650963,0 -122.983724972839,38.27641043670361,0 -122.983578899479,38.2761805954751,0 -122.983481400417,38.2760138494026,0 -122.983257780815,38.2758560939435,0 -122.983042722666,38.2757524230663,0 -122.982830880781,38.2756487418192,0 -122.982828073789,38.27544595810441,0 -122.982816003541,38.2751485485314,0 -122.982711388525,38.274882662669,0 -122.982589267971,38.2746122686317,0 -122.982443182941,38.2744545262865,0 -122.982231701464,38.2743643659672,0 -122.981905846379,38.2744319066191,0 -122.98162820869,38.2745580330063,0 -122.981334841225,38.2747111957344,0 -122.980959662997,38.2748373035697,0 -122.980177924456,38.2748867329034,0 -122.97981920762,38.274913702126,0 -122.979699478641,38.2750488678948,0 -122.979573981151,38.2753597738815,0 -122.979410295203,38.27552647599551,0 -122.979263413828,38.2756571267241,0 -122.9789865165,38.2756660860145,0 -122.978742146379,38.2756299883088,0 -122.978400247,38.2755623279297,0 -122.978041888448,38.2755802813359,0 -122.977421582804,38.275773923268,0 -122.976738078917,38.2758413729134,0 -122.976044289414,38.27568350490451,0 -122.975451315947,38.2753634317395,0 -122.975026978233,38.2750524044528,0 -122.974814058881,38.274998282728,0 -122.974623629227,38.2749982389585,0 -122.974454946032,38.2751243734128,0 -122.974388098065,38.275228001055,0 -122.974365168199,38.2753992339995,0 -122.97421843647,38.2770124317582,0 -122.974062456379,38.2775486379934,0 -122.973910145412,38.2778234812651,0 -122.973752865618,38.2780081998716,0 -122.973416587496,38.2781748480808,0 -122.973080342129,38.2782603866975,0 -122.972721641664,38.2781972109091,0 -122.97245157422,38.2780754757135,0 -122.971854657925,38.2777734085886,0 -122.971626401775,38.2776426695804,0 -122.971312740819,38.2775434508732,0 -122.970987981385,38.2774983036453,0 -122.970595671793,38.27750721285511,0 -122.970349881714,38.2774440596928,0 -122.970114852786,38.27728627832401,0 -122.970025995098,38.27703841274981,0 -122.969913294327,38.2765697324155,0 -122.96977050736,38.2762767893096,0 -122.969613025384,38.2760919903686,0 -122.969078649329,38.2758169637732,0 -122.968708880455,38.2757763050429,0 -122.968428038019,38.2758167811423,0 -122.968121418415,38.2759699048808,0 -122.967807609026,38.2762176584353,0 -122.967723910197,38.27642041528911,0 -122.967608449547,38.2765510625533,0 -122.967320088237,38.2766095588786,0 -122.967174682009,38.2765869838002,0 -122.967021468829,38.2764562578842,0 -122.966973686867,38.2762579700254,0 -122.966385020707,38.2752258660598,0 -122.966039530005,38.27474091749771,0 contacts #khStyle84754 1 -122.966039530005,38.27474091749771,0 -122.965793718772,38.2745001834507,0 -122.965758047746,38.2743458089436,0 contacts #khStyle84754 1 -122.959150706439,38.2750801806971,0 -122.958722962795,38.2755342414718,0 -122.958339423395,38.2758315118411,0 -122.957814106398,38.2760160721651,0 -122.957121703016,38.2754074696501,0 -122.956062192752,38.2751096510014,0 -122.955782280568,38.2747986116685,0 -122.9557829205,38.2743479884721,0 -122.955601342335,38.2739108125239,0 -122.955239578481,38.2736673331991,0 -122.954790433394,38.2737421561562,0 -122.954672883433,38.2737617384622,0 -122.954216853996,38.27399137284691,0 -122.95384364767,38.27431567016551,0 -122.953816269837,38.27435058714791,0 -122.953554011269,38.2746850629234,0 -122.953161294434,38.2749508453822,0 -122.953154752935,38.274955272503,0 -122.952650871976,38.2751308061231,0 -122.95226409138,38.2754325614866,0 -122.951959445837,38.2757884251887,0 -122.951459081049,38.2765542716069,0 -122.950858698863,38.2772705039291,0 -122.950501963791,38.2775994589949,0 -122.950150446629,38.277923598492,0 -122.949978579898,38.2780327648016,0 -122.949725075421,38.2781937847117,0 -122.949340413456,38.2784910249259,0 -122.949019665683,38.2788423673331,0 -122.948751421549,38.27921626369,0 -122.948528538855,38.2796082048874,0 -122.94793932407,38.2810994981684,0 contacts #khStyle84754 1 -122.909889108078,38.2779656473633,0 -122.9098906858,38.2787236448982,0 -122.909764202457,38.2795752223095,0 -122.90958126758,38.2804222489209,0 -122.909043705757,38.2825307378404,0 -122.908945791407,38.2833823363309,0 -122.90863923199,38.2842067319594,0 -122.908036312547,38.2854094128486,0 -122.907937145575,38.28583291823801,0 -122.908361373862,38.2866128324227,0 -122.908402272004,38.2870454619247,0 -122.908367777666,38.2874735251986,0 -122.908271468522,38.2878970329914,0 -122.908090461938,38.2883249793239,0 -122.908255093475,38.2886856079631,0 -122.908670647817,38.2889968672588,0 -122.909008626673,38.2893351010922,0 -122.909277600052,38.2897048230973,0 -122.909918406416,38.2913500950506,0 -122.910139119878,38.2917423082757,0 -122.910418834378,38.292107529716,0 -122.910768277036,38.2924412610597,0 -122.911212106598,38.2927435207202,0 -122.911678268878,38.2929061032039,0 -122.91192316203,38.29253678136631,0 -122.911948726028,38.2920906856849,0 -122.911812377714,38.29166699705,0 -122.911711905043,38.2914363829295,0 -122.911635627244,38.2912613020708,0 -122.911393097272,38.2908780872472,0 -122.911215233195,38.2906544205956,0 -122.911102661947,38.2905128597705,0 -122.910522748288,38.289309250614,0 -122.910401073767,38.2887739864695,0 -122.909945959376,38.2867718002597,0 -122.909755862984,38.28506379429441,0 -122.909778386169,38.2842031238676,0 -122.909932929078,38.2829234780508,0 -122.910026363412,38.2824999662459,0 -122.910297180056,38.28166652641081,0 -122.9104942277,38.2803869123643,0 -122.910773072994,38.2791208797775,0 -122.910866320941,38.2782647692341,0 -122.911137654108,38.276994223241,0 -122.911162128659,38.2765616443713,0 -122.911261258591,38.2761426417029,0 -122.911430760855,38.275732705525,0 -122.911658470129,38.2753453448819,0 -122.912193754482,38.2741155540188,0 -122.912546752805,38.2738139053605,0 -122.913068562666,38.2736565825628,0 -122.913600665939,38.2735533399163,0 -122.914138722498,38.2735492363445,0 -122.914616608707,38.27364222061091,0 -122.914673434728,38.273653277336,0 -122.914934053081,38.2736403661758,0 -122.915211161375,38.2736266374556,0 -122.915835426882,38.2735324650074,0 contacts #khStyle84754 1 -122.965758047746,38.2743458089436,0 -122.965379972939,38.2738151083756,0 -122.964859952924,38.2734769791768,0 -122.964208722566,38.2733280671138,0 -122.963826787978,38.2733549800418,0 -122.963507712879,38.2734134592359,0 -122.962932321486,38.2737647555265,0 -122.96132012911,38.2747330547676,0 -122.96075830273,38.2750663198643,0 -122.960425573215,38.2752464540875,0 -122.960004310716,38.2752958730976,0 -122.959970373359,38.2752868484989,0 contacts #khStyle84754 1 -122.890703765354,38.2760018103995,0 -122.889688143915,38.2760834769153,0 -122.889145079455,38.2760784510726,0 -122.888611079785,38.2759878131995,0 -122.888138716337,38.2757800707381,0 -122.886455494299,38.2746879235552,0 -122.8860937292,38.2743631195644,0 -122.885498934222,38.2736460423634,0 -122.885122516084,38.2733302332849,0 -122.884670580279,38.273099965996,0 -122.884145597793,38.2729732670096,0 -122.882539023293,38.2727147919514,0 -122.882003413246,38.27275480294,0 -122.881503664097,38.27293003497181,0 -122.881091242498,38.2732270227139,0 -122.880855510136,38.2736188217688,0 -122.880877324723,38.2740379230973,0 -122.881280188744,38.2743402541856,0 -122.881782593664,38.2745120051456,0 -122.882330938689,38.2745576264211,0 -122.883386697885,38.2743333843328,0 -122.88392557061,38.2742708392199,0 -122.884430182872,38.27440653128,0 -122.885418876021,38.2747860379383,0 -122.886107737118,38.2754446272074,0 -122.886518519284,38.2757289232152,0 -122.887851451093,38.2764737508426,0 -122.888320231347,38.2766905034292,0 -122.889371123214,38.2770835555132,0 -122.889561892015,38.2773315802409,0 -122.888571430821,38.2778263140368,0 -122.888209031335,38.2781233747628,0 -122.888056879394,38.278546812371,0 -122.887982973932,38.2789703256045,0 -122.88798341973,38.2798310142742,0 -122.887943092098,38.280259066143,0 -122.887822384111,38.280678027538,0 -122.887593809864,38.2810698466028,0 -122.886638863586,38.2821143568655,0 -122.886388146265,38.2824926330841,0 -122.886203480081,38.2829025173047,0 -122.886012788203,38.2841820952279,0 -122.885830273864,38.2845829684143,0 -122.885541331316,38.2849476862206,0 -122.884840988513,38.2856048982336,0 -122.884379486462,38.2863885190933,0 -122.884262335616,38.2867984674345,0 -122.884397097312,38.2876592892382,0 -122.884517562815,38.2880784875451,0 -122.884648898811,38.2882942153612,0 -122.884775600165,38.2885023291268,0 -122.885100407518,38.2882908604007,0 -122.885377309324,38.2878675512058,0 -122.885935255625,38.2866559314091,0 -122.886635679722,38.2854940168728,0 -122.886741044576,38.2850705358329,0 -122.887194280276,38.2842959097892,0 -122.887801095921,38.2826427185121,0 -122.887995743215,38.2822418538464,0 -122.888237525534,38.281859059294,0 -122.889083914614,38.2807558509017,0 -122.889581738806,38.2795306356081,0 -122.890218953083,38.2782649944132,0 -122.89067741582,38.2779950557335,0 -122.891160929052,38.2779324250932,0 -122.891590152358,38.2780825434761,0 -122.892181538207,38.278289373692,0 -122.892701220317,38.2784115255921,0 -122.893783982505,38.2785477130702,0 -122.894281106438,38.2787058870111,0 -122.894678335156,38.2790081668975,0 -122.894961853633,38.2793734291582,0 -122.895129186086,38.2797836474669,0 -122.895176797264,38.2802117817681,0 -122.89512079019,38.2806398219421,0 -122.895005482441,38.2810587957034,0 -122.895004850221,38.2814913923195,0 -122.895095352422,38.281910553085,0 -122.895712841264,38.2831052607959,0 -122.895964257863,38.2839391381967,0 -122.896327710298,38.2856338032534,0 -122.896474508562,38.2869182068865,0 -122.896480414612,38.2877788994847,0 -122.896626101798,38.2888470031521,0 -122.896745203773,38.2892706939886,0 -122.896780687074,38.2896943099079,0 -122.896560859603,38.2909738778157,0 -122.896408748666,38.2913838067645,0 -122.895717701848,38.2925547996017,0 -122.895396646868,38.2928969811371,0 -122.894674887284,38.2935452191397,0 -122.894288133065,38.2938422754765,0 -122.893387186532,38.2943326237875,0 -122.892962588158,38.2945980972619,0 -122.892618618928,38.2949537684013,0 -122.892657654704,38.2953773884046,0 -122.893070124969,38.2955805506369,0 -122.893642767036,38.2954999679304,0 -122.89416403164,38.2953607545971,0 -122.894603606868,38.295117821538,0 -122.894731690674,38.2949916840445,0 -122.895289327349,38.2944425142302,0 -122.895605750373,38.2940958226964,0 -122.895875043216,38.2937175442836,0 -122.896231803885,38.2933979246647,0 -122.89708097913,38.2928534336401,0 -122.897419874923,38.2925247819754,0 -122.897850562067,38.2917275644853,0 -122.897960503703,38.2913130901686,0 -122.897958974453,38.2908804923165,0 -122.897719736165,38.2887398285747,0 -122.897677720303,38.2884444352589,0 -122.897416535868,38.2866081191766,0 -122.897400153211,38.2853193264212,0 -122.89740972245,38.2852403865102,0 -122.897503928766,38.284463237165,0 -122.897318877656,38.283183306435,0 -122.897004460042,38.2819212846585,0 -122.896741604574,38.2810873989517,0 -122.896593383903,38.2798029931019,0 -122.896605850309,38.2795856692234,0 contacts #khStyle84754 1 -122.913914588416,38.272118430992,0 -122.913410232428,38.2723770708063,0 -122.911847448609,38.2727499019109,0 -122.910229866317,38.2729334078114,0 -122.909761832647,38.2730270799796,0 -122.909669169944,38.2730456252246,0 -122.909304105808,38.2732459309254,0 -122.909267320018,38.2732661146606,0 -122.909352875253,38.2736987799865,0 -122.909594248627,38.2740955177832,0 -122.9098863975,38.2744607511992,0 -122.909968396335,38.2748844007607,0 -122.909938204459,38.2753124687937,0 -122.909816196324,38.2757359587057,0 -122.909782073063,38.2761640235544,0 -122.909811189113,38.2765921378964,0 -122.909928567119,38.2770113088065,0 -122.909952324998,38.27743941886311,0 -122.90988890371,38.2778674607057,0 -122.909889108078,38.2779656473633,0 contacts #khStyle84754 1 -122.960226006899,38.2720532224584,0 -122.960301792393,38.2723714316371,0 -122.960657608611,38.2724419967087,0 -122.960870854683,38.2724842868473,0 -122.961161510231,38.2727727867208,0 -122.961078016842,38.2732233814972,0 -122.960714496344,38.273538691663,0 -122.959837804345,38.27407011809161,0 -122.95937647485,38.2748405188477,0 -122.959150706439,38.2750801806971,0 contacts #khStyle84754 1 -122.926357325376,38.2719129414069,0 -122.926147902178,38.2723228739404,0 -122.925778551734,38.27260652823361,0 -122.924763900286,38.2729573535993,0 -122.924336334818,38.2732139277401,0 -122.924006558087,38.2735651959293,0 -122.92382321231,38.2739616227244,0 -122.92362042817,38.2748266842009,0 -122.923821872427,38.2752188600407,0 -122.924272530524,38.275435457252,0 -122.924675775139,38.2753404273653,0 -122.924806441117,38.2753096338611,0 -122.925276143189,38.2750846291809,0 -122.925986398994,38.274634092188,0 -122.926127741672,38.2745444330176,0 -122.926937206082,38.2739681539145,0 -122.927434366307,38.2737792078467,0 -122.927965681138,38.273729974297,0 -122.928502205412,38.2738294472258,0 -122.929532662653,38.2741094717115,0 -122.930072089814,38.2741683831702,0 -122.931127994122,38.27437630948161,0 -122.932197170844,38.2745346656138,0 -122.932721542412,38.274652136991,0 -122.933801865064,38.274742891591,0 -122.934323731472,38.2748693668268,0 -122.934857788381,38.2749507843728,0 -122.935952786856,38.2750189963818,0 -122.936442395919,38.27486605777,0 -122.937274313215,38.2743436980698,0 -122.937302841099,38.274325785213,0 -122.937755360966,38.2740872023164,0 -122.938738556818,38.2737001978484,0 -122.939260974027,38.2736013398002,0 -122.939815768067,38.2736602146557,0 -122.940186374237,38.273948808384,0 -122.940440778285,38.2743454899245,0 -122.940631939416,38.2747511504671,0 -122.940650521499,38.275174745957,0 -122.940527266641,38.2755937613359,0 -122.940273274721,38.2759766583438,0 -122.939671715587,38.2766928326558,0 -122.939333916544,38.2772276174085,0 -122.939185146023,38.2774631398452,0 -122.939017582236,38.2778731173725,0 -122.938936074382,38.2783417216699,0 -122.939091983359,38.2786120944542,0 -122.939118025003,38.2786572548955,0 -122.93971793798,38.2786440546353,0 -122.940117266298,38.2783738911346,0 -122.940500558678,38.2780496431369,0 -122.940546157218,38.278020472962,0 -122.940929897163,38.277774986247,0 -122.941448402987,38.277685129022,0 -122.941993579314,38.2777484949025,0 -122.943894777553,38.278596618111,0 -122.944926443878,38.2788629893687,0 -122.945421513207,38.27905248951091,0 -122.945831128493,38.2793230590364,0 -122.946142063131,38.279683705026,0 -122.946713554781,38.2804139833437,0 -122.947177160593,38.281130690037,0 contacts #khStyle84754 1 -122.914779039982,38.2716751204755,0 -122.913914588416,38.272118430992,0 contacts #khStyle84754 1 -122.915835426882,38.2735324650074,0 -122.915072326428,38.2721907885915,0 -122.914779039982,38.2716751204755,0 contacts #khStyle84754 1 -122.960297418898,38.2716739550254,0 -122.96020734149,38.2719748494446,0 -122.960226006899,38.2720532224584,0 contacts #khStyle84754 1 -122.960297418898,38.2716739550254,0 -122.96031746866,38.2718171706411,0 -122.960226006899,38.2720532224584,0 contacts #khStyle84754 1 -122.926357325376,38.2719129414069,0 -122.927393473986,38.2717634713891,0 -122.928752053439,38.271567474173,0 contacts #khStyle84754 1 -122.973288157276,38.2730557344333,0 -122.973454003204,38.2728665124534,0 -122.973623039552,38.2727403783287,0 -122.973939354703,38.2723889669495,0 -122.974324243132,38.2720871393232,0 -122.974776270762,38.2718484131707,0 -122.975281858878,38.2716817971497,0 -122.975448699427,38.2715924105488,0 -122.975727450149,38.2714430658571,0 -122.976296355717,38.2710241100037,0 -122.976306394502,38.2710143233222,0 -122.976448255405,38.27087602458211,0 -122.976564389879,38.2707628057534,0 contacts #khStyle84754 1 -122.896605850309,38.2795856692234,0 -122.896617939271,38.2793749239778,0 -122.89674323941,38.2789559574197,0 -122.897003544277,38.278573161015,0 -122.897432309113,38.2783166880698,0 -122.897580451791,38.2782664189412,0 -122.897935623628,38.278145897736,0 -122.898467423683,38.2780427236533,0 -122.898978926264,38.27788996092501,0 -122.899497158491,38.2777777578366,0 -122.900616511456,38.2778102709966,0 -122.901145717377,38.2777701696616,0 -122.901304869332,38.27739628929741,0 -122.90143969618,38.276522196911,0 -122.900928413543,38.2765262651929,0 -122.900502503695,38.2765623353448,0 -122.899769596289,38.2766244013039,0 -122.899485969742,38.2763267437391,0 -122.899407998234,38.2758760532558,0 -122.899422314442,38.274582778842,0 -122.899471293764,38.2742599755887,0 -122.899487944241,38.27415023824911,0 -122.899536013716,38.274069246187,0 -122.899712483934,38.2737719105144,0 -122.900089137133,38.2734522950752,0 -122.900807105224,38.2725246315085,0 -122.901312439143,38.2726692641356,0 -122.901789335669,38.2724488658763,0 -122.902309939905,38.272399739379,0 -122.902417001099,38.2724102489057,0 -122.903421248668,38.272508824698,0 -122.903888746302,38.2723650159057,0 -122.904254322792,38.2720273528097,0 -122.904290750587,38.2720029733922,0 -122.904671263872,38.2717483120055,0 -122.905128149502,38.2715188710997,0 -122.905626403357,38.2713435370284,0 -122.90591782405,38.2712702840983,0 -122.906144602428,38.2712132793722,0 -122.907744749533,38.2709532097901,0 -122.909225331846,38.2705765387799,0 -122.90929861276,38.2705578949892,0 -122.910448524184,38.2703016860346,0 contacts #khStyle84754 1 -122.913914588416,38.272118430992,0 -122.914006672687,38.2716475081013,0 -122.914074619177,38.2709941555794,0 -122.914076275539,38.2705074842793,0 -122.913958948135,38.2703316532997,0 -122.913630695394,38.27027733227801,0 -122.913130882791,38.2702859687426,0 -122.912485937276,38.2703665931187,0 -122.911552764118,38.2703839052172,0 -122.910724286931,38.2703832660229,0 -122.910448524184,38.2703016860346,0 contacts #khStyle84754 1 -122.87346686571,38.2703406606509,0 -122.873515505684,38.27047920841891,0 -122.87351945247,38.2706729808797,0 -122.873482323754,38.270862201144,0 -122.873296280339,38.2714207695663,0 -122.873267365445,38.2716099993675,0 -122.873266620569,38.27165064425,0 -122.873263810308,38.271803763157,0 -122.873277410794,38.2719930387749,0 -122.873272799019,38.2723805697365,0 -122.873287487958,38.272763614785,0 -122.873217869251,38.2731420621801,0 -122.872992185089,38.2738898472709,0 -122.872959338484,38.2740790724405,0 -122.872820532051,38.2745881236057,0 -122.872798754116,38.2747818670732,0 -122.872791631379,38.2749711205358,0 -122.872798077143,38.2751648955957,0 -122.872825626598,38.2755479543428,0 -122.872883902041,38.2759310471671,0 -122.872885727414,38.2763140776707,0 -122.872954745727,38.2768864437803,0 -122.872954745856,38.2768864448523,0 -122.873068061125,38.2772605849734,0 -122.873210692024,38.2778285243993,0 -122.873320794769,38.2782026611657,0 -122.873356905971,38.2783919618974,0 -122.873407684283,38.278775045623,0 -122.873493126859,38.2791536618895,0 -122.873548897544,38.279338476403,0 -122.873548897978,38.2793384778406,0 -122.873622194542,38.2797170803273,0 -122.87365142318,38.27980758705421,0 -122.873743021935,38.2800912281712,0 -122.873756135215,38.2801918052489,0 -122.873767701422,38.2802805162525,0 -122.873847423895,38.2806636319635,0 -122.873846020434,38.2808528913125,0 -122.873842106158,38.2808928959624,0 -122.873808546627,38.28123587897401,0 -122.873825001354,38.2814296640757,0 -122.873816816092,38.2816144102473,0 -122.873813252908,38.2818126795042,0 -122.873729736069,38.2825741396287,0 -122.873727966781,38.2827679048637,0 -122.873728670953,38.2827748798151,0 -122.873747986189,38.2829662002131,0 -122.873756237901,38.28315096407201,0 -122.873710526504,38.2833401749622,0 -122.873566973901,38.28369600964791,0 -122.873566973418,38.2836960108442,0 -122.873549381414,38.2837474916298,0 -122.87350232359,38.283885200055,0 -122.873428399351,38.2842681475497,0 -122.873393057572,38.2846556433884,0 -122.873345208295,38.2848403458504,0 -122.873281636366,38.2850250310768,0 -122.873241282016,38.2852142478349,0 -122.873241281754,38.2852142490634,0 -122.873178583378,38.2853088097251,0 -122.873178582841,38.2853088105346,0 -122.873147775481,38.2853538373249,0 -122.873147774611,38.2853538385964,0 -122.873088696819,38.2854213652094,0 -122.873088695502,38.2854213667143,0 -122.873053978125,38.28545287204651,0 -122.872992542764,38.2854392861712,0 -122.872954753224,38.2853896757167,0 -122.872990334421,38.2852725544769,0 -122.873016412164,38.2850743080632,0 -122.873005303624,38.2846867621731,0 -122.872949156318,38.284308178233,0 -122.872938420547,38.2841143995235,0 -122.872933046283,38.2839206272993,0 -122.872933046229,38.283920626337,0 -122.87291156765,38.2835375777183,0 -122.872911567465,38.2835375744078,0 -122.872926909671,38.2833483302297,0 -122.872961903507,38.2831591075695,0 -122.872981524373,38.2827715940694,0 -122.873005441542,38.2825823596717,0 -122.873040735037,38.2824428213313,0 -122.873053298125,38.2823931510662,0 -122.873064335766,38.2820101347593,0 -122.873064335719,38.2820101337527,0 -122.873045048752,38.2816000478617,0 -122.873051045003,38.2814826026536,0 -122.873053561539,38.2814333271829,0 -122.873053562084,38.28143332390231,0 -122.873084981236,38.2812441005762,0 -122.873096756691,38.2810503460743,0 -122.873096756641,38.2810503450699,0 -122.873090546397,38.28092416513431,0 -122.873013772595,38.2804914841424,0 -122.873013772356,38.28049148302401,0 -122.872956010079,38.280221047537,0 -122.872956009897,38.2802210466054,0 -122.872857919566,38.2797207502522,0 -122.872821824815,38.279522436427,0 -122.872753158789,38.2792806394289,0 -122.872718138595,38.2791573180773,0 -122.872675954129,38.2789680111925,0 -122.872593961753,38.2784587182253,0 -122.872577984069,38.2782322759383,0 -122.872575836793,38.2782018437648,0 -122.872509953303,38.2780801038614,0 -122.872466721377,38.2778772758678,0 -122.872416043963,38.2776428969173,0 -122.872327398882,38.2774625498291,0 -122.872216941926,38.2772911918434,0 -122.872137567817,38.277183169482,0 -122.872094329648,38.2771243266634,0 -122.871603552701,38.2762450702067,0 -122.871367268277,38.2759113474274,0 -122.871107746375,38.2755866115866,0 -122.871107745616,38.2755866105773,0 -122.870751315501,38.2751130616197,0 -122.8707513151,38.275113060656,0 -122.870702577772,38.2749958447196,0 -122.870704574178,38.2748786842855,0 -122.870718020197,38.2747525258139,0 -122.870763223356,38.2746489332421,0 -122.870763224473,38.2746489319533,0 -122.870915380404,38.27447336015,0 -122.871274324378,38.2741402996074,0 -122.871442182741,38.2739737553475,0 -122.871544452622,38.2738792210601,0 -122.871602864118,38.2738252286819,0 -122.871602864832,38.2738252277667,0 -122.871729269462,38.2736631442584,0 -122.871916397803,38.2733073604442,0 -122.8719935322,38.2731271956003,0 -122.872073866607,38.2727532682387,0 -122.872093841766,38.2721674811688,0 -122.872094188482,38.2717709337987,0 -122.872085695326,38.271635902481,0 -122.872083417359,38.2715996853656,0 -122.872074829854,38.2714059082138,0 -122.872019123515,38.2711895473605,0 -122.872030482166,38.2708290633332,0 -122.872030482344,38.2708290624284,0 -122.872067615292,38.2706398414554,0 -122.872142991588,38.270441651264,0 -122.87248111849,38.2699463391643,0 -122.872558575275,38.2698016255195,0 contacts #khStyle84754 1 -122.890703765354,38.2760018103995,0 -122.890311982555,38.27583622849591,0 -122.889759036084,38.2755202663373,0 -122.889285534446,38.2751232671331,0 -122.888767260414,38.2748028261856,0 -122.888090729371,38.27470303339911,0 -122.887439659931,38.27454468538491,0 -122.886821212245,38.2743187707612,0 -122.886233573086,38.2740433153912,0 -122.885716428701,38.2737003318241,0 -122.884753367505,38.2729378276517,0 -122.884229799672,38.2725993342159,0 -122.881983515905,38.2713803845936,0 -122.880409361848,38.2703423346566,0 -122.879798412303,38.2701524408387,0 -122.879108858494,38.2701832654279,0 -122.878428705092,38.2701465050669,0 -122.87775901403,38.2700511693695,0 -122.87710155487,38.2699062729168,0 -122.876106048722,38.2695927323295,0 contacts #khStyle84754 1 -122.910448524184,38.2703016860346,0 -122.910478148111,38.2702950854268,0 -122.910870623155,38.2702076359071,0 -122.911357125525,38.2700415200379,0 -122.912872085417,38.2695242202822,0 -122.913416191,38.2695156182961,0 -122.913945156577,38.2696196582853,0 -122.914002148833,38.269645885405,0 -122.91442575458,38.2698408219865,0 -122.91471434885,38.2701970285603,0 -122.91482602336,38.2706206970816,0 -122.914779039982,38.2716751204755,0 contacts #khStyle84754 1 -122.908495380091,38.2692504527651,0 -122.907217176132,38.2697721537659,0 -122.907047916734,38.2698386406156,0 -122.906797016292,38.2699371962393,0 contacts #khStyle84754 1 -122.899203668267,38.268976839512,0 -122.899832881617,38.2696758530145,0 -122.900636219105,38.2707985987528,0 -122.900799276814,38.27120880593211,0 -122.900836179282,38.2716504481187,0 -122.900700579574,38.2720513858851,0 -122.900254006103,38.2723033495462,0 -122.899860242176,38.272600419607,0 -122.899512154944,38.272933577926,0 -122.898660027553,38.2734690739751,0 -122.898275533539,38.2737706529932,0 -122.897938483365,38.274121841179,0 -122.897747147243,38.2745092073401,0 -122.897872035627,38.27537451330841,0 -122.89781141631,38.2757935386398,0 -122.897507926383,38.2761537675941,0 -122.897151951119,38.2764869116367,0 -122.896752448288,38.2767749534073,0 -122.896256292757,38.2769412389315,0 -122.89519839135,38.27716559477011,0 -122.895133861266,38.2771692963218,0 -122.894657051983,38.2771966457743,0 -122.893567392929,38.2771460782621,0 -122.893033730473,38.2770599670343,0 -122.89251765053,38.2769243012807,0 -122.892031679405,38.2767255742681,0 -122.891623728364,38.27644130019841,0 -122.891527051668,38.27633921947821,0 -122.89148163686,38.2762912659505,0 -122.891290555116,38.2760895017207,0 -122.890795860694,38.2759944045333,0 -122.890703765354,38.2760018103995,0 contacts #khStyle84754 1 -122.897175537038,38.2732379449146,0 -122.896930356092,38.2738010037246,0 -122.896926661634,38.2748824946113,0 -122.896863763037,38.2751437994333,0 -122.896717778853,38.2752923744621,0 -122.896531909453,38.2753507883697,0 -122.896293662622,38.2753100193294,0 -122.895791242263,38.2751203019686,0 -122.895108064572,38.27491690698081,0 -122.892824746656,38.2736846112802,0 -122.892515334758,38.2734545055843,0 -122.892423738533,38.2733057147759,0 -122.892398387849,38.2730578457665,0 -122.892716462557,38.2727472147842,0 -122.894128668347,38.2715859125447,0 -122.894666549001,38.2712078803229,0 -122.895024390193,38.2708071518375,0 -122.895028409858,38.2705007316827,0 -122.89497649082,38.2703339537857,0 -122.89481770171,38.2702076339177,0 -122.894368849767,38.2700585186821,0 -122.894077874594,38.2699320789614,0 -122.893866563741,38.2698057096349,0 -122.893798319475,38.2695713232951,0 -122.894015961621,38.2690352808694,0 -122.894536242604,38.2687068049473,0 -122.894811057283,38.2686439678107,0 -122.895239746901,38.268648862612,0 -122.895855660316,38.2688837432796,0 -122.896312717361,38.2692852089394,0 -122.896488496963,38.269524197599,0 -122.896550616193,38.2698036395527,0 -122.896286208106,38.2703261248164,0 -122.896220206398,38.2705108212843,0 -122.896271986483,38.2707722289918,0 -122.896337496899,38.2709300059858,0 -122.896508486719,38.2710247898349,0 -122.897010773323,38.2710387566614,0 -122.897407884371,38.2711517657242,0 -122.897627336102,38.27133671835831,0 -122.897869997735,38.2715306994429,0 -122.897922558109,38.2717515517655,0 -122.897762436851,38.2723011699266,0 -122.897457722992,38.2727785592819,0 -122.897175537038,38.2732379449146,0 contacts #khStyle84754 1 -122.85426671255,38.2800717637944,0 -122.854376214616,38.2800234475514,0 -122.854557629667,38.2798929955915,0 -122.854557630376,38.279892994837,0 -122.85513734314,38.2792763682473,0 -122.855299488175,38.2791323724278,0 -122.855539148141,38.2789974840064,0 -122.855696227848,38.2788850248631,0 -122.855857657015,38.2787410266881,0 -122.856102356454,38.2784078705746,0 -122.856367757097,38.2780837515864,0 -122.856475643274,38.2779126492322,0 -122.856569246065,38.2777370225596,0 -122.856813224365,38.2774038636878,0 -122.857297135398,38.2769718635203,0 -122.858224632901,38.2762565131054,0 -122.858224633677,38.2762565124084,0 -122.858384980334,38.2761125087123,0 -122.858533911951,38.2759594799861,0 -122.858699964408,38.2758199899671,0 -122.859069887288,38.2755680917265,0 -122.85939806523,38.2752845990155,0 -122.859398066047,38.2752845976903,0 -122.859539639032,38.2750549531121,0 -122.859539639629,38.2750549522797,0 -122.859978495329,38.2744426373244,0 -122.860093512606,38.2742715403181,0 -122.860182110099,38.274091397242,0 -122.860234271187,38.2739067052449,0 -122.860236809589,38.2735191739955,0 -122.860269348786,38.2731361845778,0 -122.860249726762,38.27275313133511,0 -122.860257604995,38.2725593738592,0 -122.860204383919,38.2720005380773,0 -122.86017047953,38.271797716683,0 -122.859866714574,38.2712926533698,0 -122.859633759982,38.2709363796121,0 -122.859532728308,38.2707809664686,0 -122.8595194224,38.2707604984458,0 -122.859442963004,38.2705801560081,0 -122.859393673636,38.2703908357141,0 -122.859292278448,38.2696246546584,0 -122.85934624806,38.2692461973646,0 -122.859375931044,38.268863204175,0 -122.859360947281,38.2686694197309,0 -122.859360947388,38.26866941834321,0 -122.859380490778,38.2684172584978,0 contacts #khStyle84754 1 -122.908495380091,38.2692504527651,0 -122.909039761342,38.269304958536,0 -122.909575660301,38.2692873554112,0 -122.910097058627,38.26915257648231,0 -122.910428032082,38.2690190748344,0 -122.911067121687,38.2687612872316,0 -122.912585646294,38.2682892953469,0 -122.912639346658,38.2682649340761,0 -122.913319475425,38.2679563888332,0 contacts #khStyle84754 1 -122.899203668267,38.268976839512,0 -122.898971977314,38.2685079556546,0 -122.898693542777,38.267944466008,0 contacts #khStyle84754 1 -122.872558575275,38.2698016255195,0 -122.872577523655,38.2697662238877,0 -122.872577538458,38.2697661962298,0 -122.872582723206,38.2696625602208,0 -122.872582722421,38.2696625591034,0 -122.872528913236,38.2695858935303,0 -122.872468166652,38.2693920590677,0 -122.872511536982,38.2693109957335,0 -122.872511537877,38.2693109950114,0 -122.872606344322,38.2692344924707,0 -122.873021484869,38.2690231563892,0 -122.873217827574,38.2689017040254,0 -122.873217828489,38.268901703222,0 -122.873376692471,38.2687621840972,0 -122.873409943072,38.2687220232906,0 -122.873440059885,38.2686856474951,0 -122.873461684669,38.2685775216684,0 -122.873458993346,38.2684828879451,0 -122.873458992901,38.2684828868499,0 -122.873422354855,38.2683927233697,0 -122.873337902002,38.2682421772917,0 -122.873323706434,38.2682168725613,0 -122.873080209418,38.2679327148948,0 -122.873080208426,38.2679327137375,0 contacts #khStyle84754 1 -122.873080208426,38.2679327137375,0 -122.873225574882,38.267950897846,0 -122.873314153034,38.2679331526237,0 -122.873337431348,38.267928488901,0 -122.873396106842,38.2678789847287,0 -122.873409475468,38.2677933818971,0 -122.873376450758,38.26768068901171,0 -122.873304461013,38.2675814734725,0 contacts #khStyle84754 1 -122.873304461013,38.2675814734725,0 -122.873564295919,38.2677169442448,0 -122.873783272154,38.26792897561341,0 -122.873914771435,38.2681138743676,0 -122.873930433627,38.26814111970861,0 -122.873961428574,38.2681950372511,0 -122.874200785514,38.2683980779894,0 -122.874200786587,38.268398078899,0 -122.874209468045,38.2684119979111,0 -122.874254223315,38.2684837540923,0 -122.874272277656,38.2685784049146,0 -122.87425423449,38.2686820281118,0 -122.874242286202,38.268700802512,0 -122.874202649239,38.2687630841817,0 -122.874095047228,38.2688035234775,0 -122.873994549788,38.2688665011869,0 -122.873994548315,38.2688665021098,0 -122.873916582914,38.268915984824,0 -122.873834242152,38.26901503214881,0 -122.873701776666,38.2691771122145,0 -122.873623222116,38.2693572744765,0 -122.873574302874,38.2695464840473,0 -122.873438621275,38.2699113396007,0 -122.873435633646,38.2699205153965,0 -122.873403420408,38.2700194505582,0 -122.873399975906,38.2701501273574,0 -122.873399975877,38.2701501284614,0 -122.873399981209,38.2701501436512,0 -122.87346686571,38.2703406606509,0 contacts #khStyle84754 1 -122.899203668267,38.268976839512,0 -122.898662002351,38.2690304400558,0 -122.898120035906,38.2690434817553,0 -122.897577081033,38.2689979390759,0 -122.897048851529,38.2688983322471,0 -122.896017878815,38.2686180222575,0 -122.895485704835,38.2685319235385,0 -122.894941650773,38.2685088988334,0 -122.89386081966,38.26861606038041,0 -122.893326607948,38.2687011867571,0 -122.892239158829,38.2689299954507,0 -122.89171710977,38.26900160713781,0 -122.891812006631,38.2686141602395,0 -122.892300473085,38.2678260261712,0 -122.892454674129,38.2674341276864,0 -122.893448356222,38.2677865342774,0 -122.893992364536,38.2678366032387,0 -122.895626071648,38.2678155597324,0 -122.897050027863,38.2679757454797,0 -122.89724126847,38.2679972574265,0 -122.897784637029,38.2679977397005,0 -122.898693542777,38.267944466008,0 contacts #khStyle84754 1 -122.841611855883,38.272819422333,0 -122.841548484497,38.2722858737078,0 -122.841548142535,38.2722829856819,0 -122.841548142428,38.2722829847758,0 -122.841421487591,38.2717150283634,0 -122.841226519892,38.2711830287664,0 -122.841205520629,38.2709847269455,0 -122.841205520628,38.2709847255918,0 -122.841205262963,38.2707774388887,0 -122.841266063075,38.2705837545462,0 -122.841383708416,38.270209899193,0 -122.841469207555,38.2698314932331,0 -122.841469207602,38.2698314901516,0 -122.841472124871,38.26964223607491,0 -122.841441141852,38.2694349075898,0 -122.841376020885,38.2691912423731,0 -122.841344760909,38.2690742776218,0 -122.841257622571,38.2688984175722,0 -122.841257621971,38.2688984165085,0 -122.841158336402,38.26872253806911,0 -122.841047182392,38.2685402876486,0 -122.840946538573,38.26837526907781,0 -122.840780856987,38.2680145442562,0 -122.840591211616,38.2676673041453,0 -122.840412534554,38.2673696485594,0 -122.840325745634,38.2671982931036,0 contacts #khStyle84754 1 -122.965758047746,38.2743458089436,0 -122.965688545778,38.2740450213985,0 -122.965572352309,38.2727562020168,0 -122.965420359068,38.272346087553,0 -122.965208699944,38.2719449668129,0 -122.964927716198,38.2715798738808,0 -122.964437282052,38.271408482214,0 -122.963351651579,38.2712414018474,0 -122.962993835856,38.2709393664821,0 -122.962445855813,38.2701686177842,0 -122.96248001458,38.2697585614566,0 -122.962720299833,38.26936209240961,0 -122.963104161184,38.2690332637091,0 -122.963190842987,38.2686006931348,0 -122.962948086096,38.2682761639901,0 -122.962395358612,38.2684021550323,0 -122.961854506605,38.2683659228534,0 -122.961364475922,38.2681629747646,0 -122.960967379168,38.2678744383315,0 -122.960258634403,38.2671937480557,0 -122.96024841092,38.2671943498695,0 -122.959725970235,38.2672251025796,0 -122.959389629465,38.2675314062483,0 -122.95935614281,38.2679865244432,0 -122.959525971179,38.268261226953,0 -122.959587422361,38.2683606255222,0 -122.960195044937,38.2690863464207,0 -122.960453838141,38.269464961698,0 -122.960637598098,38.2698660813642,0 -122.960702733461,38.2702987030296,0 -122.960665341546,38.2707222763646,0 -122.960538276882,38.2711458182524,0 -122.960335483858,38.2715468021252,0 -122.960297418898,38.2716739550254,0 contacts #khStyle84754 1 -122.913319475425,38.2679563888332,0 -122.912848538763,38.2677352278788,0 -122.912344293278,38.2675861394275,0 -122.911256250006,38.2674906752928,0 -122.910724082947,38.2673911269426,0 -122.91021814263,38.2671744345399,0 -122.909855266079,38.2673949566573,0 -122.90939339414,38.2682102226305,0 -122.908495380091,38.2692504527651,0 contacts #khStyle84754 1 -122.857461432499,38.2780851017153,0 -122.85751400721,38.2780581286943,0 -122.857531541276,38.2780446315861,0 -122.857549075666,38.2780311337335,0 -122.857819819184,38.2777115257569,0 -122.85798587851,38.2775720365581,0 -122.858379697347,38.2773472068231,0 -122.858720017518,38.2770727419654,0 -122.858835756291,38.2769016475681,0 -122.858835756846,38.2769016467467,0 -122.859187490147,38.276636208055,0 -122.859187491072,38.2766362071532,0 -122.859339984186,38.2764876880107,0 -122.859395093801,38.2764469278315,0 -122.859516380465,38.2763572215235,0 -122.859950108194,38.2761820036993,0 -122.860234984409,38.276091585675,0 -122.860402707785,38.2760383508381,0 -122.860634698799,38.2759800487759,0 -122.860877347091,38.2759533030858,0 -122.861118459814,38.2759806296594,0 -122.861328717528,38.2760755116184,0 -122.861502097585,38.2762109054725,0 -122.861814083017,38.2765113720896,0 -122.86212049063,38.2768064636043,0 -122.862241649076,38.2769733373141,0 -122.86240031111,38.2773340239265,0 -122.862441073295,38.2775053084528,0 -122.862441073632,38.2775053098702,0 -122.86245781939,38.2777171205637,0 -122.862527896464,38.2778794275611,0 -122.862576050122,38.2781093017949,0 -122.862620070309,38.278258059067,0 -122.862715030993,38.2784879888096,0 -122.862802536792,38.2788801333701,0 -122.862811466663,38.2790694048497,0 -122.862808280545,38.2790955657944,0 -122.86278787314,38.2792631444956,0 -122.862781082008,38.2794523971217,0 -122.862673565496,38.279623506566,0 -122.86267356488,38.27962350754601,0 -122.862601752907,38.2798081762587,0 -122.862502416119,38.2801865805603,0 -122.862314129675,38.2807406224342,0 -122.862228389303,38.2809207685057,0 -122.862036191343,38.2812765309283,0 -122.861812582296,38.2816142299301,0 -122.861604676777,38.2819609620277,0 -122.861483575875,38.2821320527107,0 -122.861382128076,38.2823031668943,0 -122.861364809756,38.2823564698454,0 -122.861320662217,38.2824923550777,0 -122.861307292435,38.2825718911108,0 -122.861288854328,38.2826815780239,0 -122.861177399357,38.2828526807298,0 -122.861091653352,38.2830328265655,0 -122.861019485021,38.2832129886134,0 -122.860985174794,38.2834022084504,0 -122.860971222951,38.2835959589061,0 -122.860939771167,38.2837851811093,0 -122.860939770995,38.2837851821471,0 -122.860743595268,38.2843437172927,0 -122.860743593576,38.2843437200495,0 -122.860638567218,38.2845148269123,0 -122.860557820473,38.2846949783086,0 -122.860518864098,38.2848841913504,0 -122.860518863884,38.2848841923867,0 -122.860510270528,38.2850779491172,0 -122.860523168845,38.2852446941515,0 -122.860566518132,38.285370920642,0 -122.860566519847,38.2853709214274,0 -122.860675049305,38.2854206190237,0 -122.860675050329,38.2854206194924,0 -122.86082369928,38.2854207980885,0 -122.860896689009,38.2853713181186,0 -122.860896689824,38.2853713172258,0 -122.860991224933,38.2852677887518,0 -122.86103856673,38.2851777205896,0 -122.861282240986,38.2846327606203,0 -122.861345842771,38.2844480828759,0 -122.861410951892,38.2842228492133,0 -122.861463280694,38.2839010865729,0 -122.861466637884,38.283880443572,0 -122.861518098096,38.2836912434114,0 -122.861644244609,38.2833128727966,0 -122.861769511703,38.2830380748397,0 -122.861806434868,38.2829570752783,0 -122.861806435241,38.2829570743349,0 -122.861884710287,38.2827588952583,0 -122.861914834959,38.282515595365,0 -122.862098339305,38.2822229100957,0 -122.862243692021,38.2820743786533,0 -122.86224369288,38.2820743779213,0 -122.862740092308,38.2816513825987,0 -122.862795307494,38.2815871145985,0 -122.862875455815,38.2814938252967,0 -122.863048364503,38.2811335325923,0 -122.863048365353,38.2811335312715,0 -122.863158382887,38.2809624262465,0 -122.863237455034,38.28081516485191,0 -122.86325268839,38.2807867952153,0 -122.863252688619,38.2807867943046,0 -122.863348091819,38.2804083861661,0 -122.863425968629,38.28022822863,0 -122.863467112903,38.2800829882745,0 -122.863479565043,38.2800390304829,0 -122.863559244982,38.27966060218121,0 -122.863573896039,38.2794713584114,0 -122.863573905474,38.27927759107641,0 -122.863598106243,38.2790352218425,0 -122.863612147657,38.2788946076566,0 -122.863615720383,38.27870535065,0 -122.863560011052,38.2781239829132,0 -122.863560010774,38.2781239797041,0 -122.863543576025,38.2779347024218,0 -122.863561093742,38.277551694463,0 -122.863535021046,38.27735789635661,0 -122.863464269494,38.2771730582497,0 -122.863464268876,38.277173057062,0 -122.8633727807,38.2769972087,0 -122.863372780092,38.2769972077262,0 -122.863265918008,38.2768258448136,0 -122.863184449972,38.2766409943501,0 -122.863184449264,38.2766409934508,0 -122.863056492875,38.2764786192039,0 -122.862831688816,38.2761403869149,0 -122.862333828279,38.2754773823672,0 -122.862035418351,38.2749588122043,0 -122.861959689606,38.2747649546173,0 -122.861796033667,38.2744042630579,0 -122.861796033181,38.2744042619594,0 -122.861724175549,38.2742419520582,0 -122.861681350061,38.274030108925,0 -122.861681350131,38.2740301080252,0 -122.861696370539,38.2738363601185,0 -122.861753905456,38.2736426607653,0 -122.861882511417,38.27346256477081,0 -122.862203491232,38.273197079653,0 -122.862357400424,38.2730485572542,0 -122.862482754293,38.2728864819379,0 -122.862493013766,38.2728543367733,0 -122.862514382887,38.272787382563,0 -122.862502433062,38.2726837257306,0 -122.862439148777,38.2725214263514,0 -122.862439148237,38.2725214254767,0 -122.862330519366,38.27234555540951,0 -122.862330519147,38.27234555451441,0 -122.862292941603,38.2721922982212,0 -122.862308561844,38.2720571302295,0 -122.862363465164,38.27193102115331,0 -122.862490924681,38.2717869733017,0 -122.862595213216,38.271686332564,0 -122.862644830778,38.2716384503902,0 -122.863023990409,38.2713955629514,0 -122.863077395176,38.2713382789571,0 -122.863099525652,38.2713145409287,0 -122.863099526054,38.2713145400637,0 -122.863139345247,38.2712289696772,0 -122.863123107551,38.2711253066089,0 -122.863091552572,38.271072030945,0 -122.863075031591,38.2710441378074,0 -122.862870162734,38.2709402518057,0 -122.862870161474,38.2709402514176,0 -122.862414924433,38.2708000201937,0 -122.86219393742,38.2707186458802,0 -122.861989070103,38.2706147593005,0 -122.86163078974,38.2704025391773,0 -122.86145071402,38.270226581519,0 -122.861312402484,38.2700686983166,0 -122.861196972653,38.2699018310553,0 -122.861196971986,38.2699018300904,0 -122.861088033137,38.2695186705296,0 -122.86106804461,38.2693248780939,0 -122.861203754887,38.2691628175579,0 -122.861664755885,38.2687127455751,0 -122.861694752897,38.2685325316162,0 -122.861667982648,38.2683342264836,0 -122.861603458295,38.2681905568488,0 -122.861589011429,38.2681583894401,0 -122.861513665194,38.2679555192548,0 -122.861360716375,38.267608357357,0 -122.861292157527,38.267220739687,0 -122.861282647839,38.266928890706,0 -122.861282187173,38.2669147529695,0 contacts #khStyle84754 1 -122.974123788446,38.2702620654439,0 -122.974466847822,38.2697584411527,0 -122.974560891248,38.2696203804035,0 -122.97469463438,38.269424037339,0 -122.97503307293,38.2690906528195,0 -122.975630654312,38.2683607758225,0 -122.975890810583,38.26813101492171,0 -122.976157370549,38.2679733546996,0 -122.976939210255,38.2674147479916,0 -122.977339203871,38.2671725572383,0 -122.977772462832,38.2669102213947,0 contacts #khStyle84754 1 -122.840325745634,38.2671982931036,0 -122.840515558269,38.2673067032672,0 -122.840676365396,38.2674466168952,0 -122.840994736561,38.2677399577128,0 -122.841003796957,38.2677463918964,0 -122.841357130444,38.2679973080259,0 -122.84152437109,38.2681372292828,0 -122.841524372125,38.2681372301486,0 -122.841687325456,38.2682771451058,0 -122.842006746918,38.2685840028713,0 -122.842080944339,38.2686336721913,0 -122.842160254855,38.2686337800229,0 -122.842240394828,38.2685798144515,0 -122.84230772452,38.268503300304,0 -122.842335816325,38.2683996954263,0 -122.842351889509,38.268237491858,0 -122.842321052092,38.2679625710941,0 -122.84228401425,38.2677462220633,0 -122.842284014685,38.26774622098,0 -122.8423292724,38.2676336279851,0 -122.84240534823,38.26759317936751,0 -122.842422263406,38.2675841853398,0 -122.842560931025,38.2675573367073,0 -122.842699531981,38.2675620310287,0 -122.842802873032,38.2675171083982,0 -122.842873396892,38.2674496110353,0 -122.842902915496,38.2673460071881,0 -122.842915329503,38.267245079362,0 -122.842926191463,38.2671567788428,0 -122.842926191657,38.267156777274,0 -122.842912740541,38.2666069997891,0 contacts #khStyle84754 1 -122.843319071552,38.2736599764177,0 -122.843255054531,38.2733172259885,0 -122.843220301305,38.2730332872746,0 -122.843224142945,38.2727448944414,0 -122.843240704156,38.272649710661,0 -122.843257065093,38.2725556776843,0 -122.84328414063,38.2724738913634,0 -122.84331820122,38.2723710052102,0 -122.843459021113,38.2720152038647,0 -122.843459021547,38.2720152024906,0 -122.843521615185,38.2718170146714,0 -122.843596672677,38.2716368668576,0 -122.843755358771,38.2714433130542,0 -122.843964234192,38.2709745152996,0 -122.843980094385,38.2709389185862,0 -122.844048015195,38.2707542547891,0 -122.844087007643,38.2705650458798,0 -122.844123886237,38.2703623151879,0 -122.844171830962,38.2699973758814,0 -122.844192979219,38.2697991312104,0 -122.844209454748,38.269614397871,0 -122.8441952837,38.2693935733505,0 -122.84415674211,38.2692087668154,0 -122.844119957833,38.2690374809928,0 -122.844082797264,38.2688752081612,0 -122.844082796932,38.2688752071102,0 -122.84397031917,38.2685190659115,0 -122.843970318488,38.2685190644796,0 -122.843759784992,38.2680771716505,0 -122.843555453992,38.2675767053112,0 -122.843441873908,38.2674008097877,0 -122.843107531266,38.266891155256,0 -122.842912740541,38.2666069997891,0 contacts #khStyle84754 1 -122.928752053439,38.271567474173,0 -122.929608600757,38.2720997388681,0 -122.930060306531,38.2723388457708,0 -122.930569984615,38.2724833551913,0 -122.931629795892,38.2726912793641,0 -122.932712959013,38.27276852694941,0 -122.933247696382,38.2728679771458,0 -122.933787520701,38.2728773031942,0 -122.934319946352,38.2727739666886,0 -122.934365925156,38.2727448488732,0 -122.934760713651,38.2724948324301,0 -122.935217062026,38.2723644110267,0 -122.935741008693,38.272544955958,0 -122.936295783765,38.2726128598985,0 -122.936792834536,38.2725094924392,0 -122.937197169584,38.2722077976712,0 -122.937630050803,38.2719421669445,0 -122.938096825707,38.2717261215493,0 -122.938613552307,38.2715822008922,0 -122.939149157768,38.2715013752984,0 -122.939692929387,38.271479132622,0 -122.941303282945,38.27170077771971,0 -122.941623526834,38.2718041005785,0 -122.941806890683,38.271863260205,0 -122.942267931276,38.2720933125046,0 -122.942685344711,38.2723774158779,0 -122.942969799979,38.2727335510581,0 -122.943373230322,38.27353586186081,0 -122.943577648196,38.2748112272497,0 -122.943704857011,38.2752393822671,0 -122.943902473293,38.2756405344213,0 -122.94440614582,38.2757624496562,0 -122.944867236786,38.27596996052461,0 -122.945238918737,38.2762945886243,0 -122.945674946717,38.2765786901885,0 -122.946164374841,38.2766510225287,0 -122.946699702764,38.2765025689973,0 -122.947691283608,38.276836490682,0 -122.948241857891,38.2768457552437,0 -122.948808952278,38.2767378626419,0 -122.949129630269,38.2764721390448,0 -122.949089067959,38.27630498620381,0 -122.94902026787,38.2760214667762,0 -122.948794069141,38.2755797542282,0 -122.948986114583,38.2753229853692,0 -122.949571423728,38.2752060847397,0 -122.950003914078,38.2749494207377,0 -122.950371063849,38.274629639295,0 -122.950952148761,38.2738953758258,0 -122.951138562322,38.2734989076346,0 -122.951138503949,38.2730663090625,0 -122.950890783548,38.2722280423271,0 -122.950981005129,38.27177447684121,0 -122.950985789917,38.2717504224098,0 -122.95134445109,38.2717956391654,0 -122.951851223628,38.2720662296112,0 -122.95239312736,38.2721655956636,0 -122.952805066719,38.2721121334433,0 -122.952912278709,38.2720982190308,0 -122.953880746104,38.2716705250769,0 -122.95439385113,38.2715535708076,0 -122.954944737901,38.2715718164442,0 -122.955463394496,38.2717117151969,0 -122.955739624694,38.2718827106683,0 -122.955885873026,38.271973242551,0 -122.956465253519,38.2727169962136,0 -122.956810178141,38.2730370713694,0 -122.957310952457,38.2732310299392,0 -122.957865062688,38.2732582755795,0 -122.958366398608,38.2731142621711,0 -122.958574208579,38.2727132836847,0 -122.958571112855,38.2726572338317,0 -122.958549817312,38.2722716635499,0 -122.958420734802,38.2718525360142,0 -122.959267379621,38.2713571589786,0 -122.959453037342,38.27094265207201,0 -122.959463284873,38.2705190693929,0 -122.959246926067,38.2696628060664,0 -122.958959185317,38.269311215053,0 -122.958542443101,38.2690226633261,0 -122.957618149175,38.2685762022996,0 -122.957216423547,38.2682831452434,0 -122.956157799662,38.2673003791773,0 -122.955848654396,38.26693975966101,0 -122.955652427673,38.2665341212354,0 -122.955697351316,38.266106045957,0 -122.9557494687,38.266119424655,0 contacts #khStyle84754 1 -122.9557494687,38.266119424655,0 -122.956172041642,38.2662278994373,0 -122.957139869047,38.2666924134424,0 -122.957263085981,38.2667141211556,0 -122.957678170395,38.2667872475044,0 -122.958090257269,38.2667524695487,0 -122.958209768547,38.266742383151,0 -122.958695380184,38.2665307686398,0 -122.959098152057,38.2662470222256,0 -122.959840517879,38.2655713528839,0 -122.960279975481,38.26546335886,0 -122.960746010066,38.2657384030363,0 -122.961017708431,38.2661685433691,0 -122.961429558478,38.2668205544679,0 -122.961474847998,38.2668922527465,0 -122.96167687372,38.2669321713415,0 -122.96200029096,38.2669960750719,0 -122.962547963777,38.266951196498,0 -122.963070676667,38.266816182332,0 -122.963260498443,38.2667493735261,0 -122.963582336671,38.2666360998278,0 -122.964108566919,38.2666002194833,0 -122.964629695048,38.2667626098055,0 -122.96490530467,38.2671186895475,0 -122.964915496867,38.2671825122688,0 -122.964974392587,38.2675513103328,0 -122.965071155011,38.2683669701355,0 -122.964945892742,38.2688175550326,0 -122.964848539815,38.2691780237231,0 -122.964876255943,38.2694754442387,0 -122.964945409182,38.2697818901884,0 -122.965056795692,38.2699351371355,0 -122.965613007357,38.270002902969,0 -122.965853302903,38.27006628825831,0 -122.96604058635,38.2701156895697,0 -122.966521352364,38.2703231215813,0 -122.966914907594,38.2706206506,0 -122.96719660788,38.2709947515352,0 -122.967206905547,38.2710413475532,0 -122.967322097001,38.27156257439431,0 contacts #khStyle84754 1 -122.859380490778,38.2684172584978,0 -122.859390533319,38.2682876832694,0 -122.859390630825,38.2682864251879,0 -122.859381629937,38.2681574218861,0 -122.859377424465,38.2680971477094,0 -122.85936282421,38.2678898436366,0 -122.859362824652,38.267889842342,0 -122.859412047705,38.2677457040898,0 -122.859551766989,38.26754309316161,0 -122.859551767356,38.267543092264,0 -122.859625352401,38.2673629332677,0 -122.859696493172,38.2671235568106,0 -122.859736467032,38.2669890509313,0 -122.859761522503,38.2664122841569,0 -122.859803687822,38.2662230736755,0 -122.859841024135,38.2661284880357,0 -122.860066580426,38.265731872337,0 -122.860089435017,38.2656916848093,0 -122.860089435593,38.26569168397181,0 -122.860321934137,38.2653539972578,0 -122.860321934813,38.265353996347,0 -122.860572648644,38.2650163317169,0 contacts #khStyle84754 1 -122.840325745634,38.2671982931036,0 -122.840201875629,38.2669953438851,0 -122.84020187514,38.2669953426377,0 -122.840127629886,38.2668059794053,0 -122.840078046704,38.2666121432752,0 -122.840045253687,38.2664183304104,0 -122.839984974081,38.2660532433515,0 -122.839965835369,38.2658926950743,0 -122.839959722617,38.2658414170875,0 -122.839959722318,38.2658414160659,0 -122.839908312594,38.2656656031797,0 -122.839806534698,38.2654897198166,0 -122.839681516511,38.2653228165784,0 -122.839547764217,38.2651931720412,0 -122.839527881372,38.2651738991549,0 -122.839346331641,38.2650474729428,0 -122.839142951616,38.2649390428982,0 -122.839047335911,38.2648848363383,0 -122.839047334752,38.264884836031,0 -122.83892773411,38.2648531255746,0 -122.838927732637,38.2648531257996,0 -122.838810880039,38.2648709894387,0 -122.838810878864,38.2648709896183,0 -122.838693965765,38.2649158891385,0 -122.83847444621,38.2649966961319,0 -122.838262040286,38.26509103081361,0 -122.837870358773,38.26532030270591,0 -122.837665790153,38.2654236601613,0 -122.83743665424,38.265490932424,0 -122.83743665301,38.2654909327851,0 -122.837200768999,38.26554017209261,0 -122.836965051251,38.2655617315765,0 -122.836958157926,38.2655623620803,0 -122.836470536978,38.2655616766957,0 -122.836228017678,38.2655433101693,0 -122.835744808047,38.2654885534691,0 -122.835744806576,38.26548855337901,0 -122.835395754011,38.2654654098419,0 contacts #khStyle84754 1 -122.860572648644,38.2650163317169,0 -122.860592793168,38.2653137669772,0 -122.860618688157,38.2654084288857,0 -122.860667014184,38.265456608427,0 -122.860677517031,38.2654670794272,0 -122.860677518144,38.2654670805373,0 -122.860720980839,38.2654624677371,0 -122.86076148492,38.2654581689267,0 -122.860849790799,38.2654222253886,0 -122.860932841995,38.26533220016301,0 -122.86106676743,38.2651656302543,0 -122.861099833171,38.2651325993053,0 -122.861219956614,38.2650126019258,0 -122.861366602454,38.264918146537,0 -122.861526108132,38.2648237063192,0 contacts #khStyle84754 1 -122.861282187173,38.2669147529695,0 -122.861279679233,38.2668377847838,0 -122.861279676073,38.2668376955017,0 -122.86127967571,38.2668376945311,0 -122.861154927647,38.2665040854082,0 -122.86115429824,38.2662742669896,0 -122.861146812163,38.2660804903395,0 -122.861198260886,38.265891290382,0 -122.861262933742,38.2655128446538,0 -122.861362605778,38.2651389469389,0 -122.861424334992,38.2649903151923,0 -122.861526108132,38.2648237063192,0 contacts #khStyle84754 1 -122.873304461013,38.2675814734725,0 -122.873270261439,38.2675273612321,0 -122.873215380474,38.2674506953835,0 -122.873186722496,38.2672929462479,0 -122.873208775093,38.2671442647713,0 -122.873288033834,38.2669686083047,0 -122.873397292663,38.2667974912389,0 -122.873449029471,38.266717151022,0 -122.87345818859,38.2667029281364,0 -122.873458188854,38.2667029269165,0 -122.873517615072,38.2664281118564,0 -122.873531173915,38.2662343588809,0 -122.873534363979,38.2660451007364,0 -122.87358540637,38.265662127342,0 -122.873538234404,38.2654683075473,0 -122.873483179762,38.2652879982698,0 -122.873449574108,38.2650987000272,0 -122.873459759677,38.2649950677375,0 -122.873492083546,38.2648959658169,0 -122.873492084178,38.2648959648484,0 -122.873550828037,38.2648059055196,0 -122.873640626688,38.2647293975983,0 -122.873830836427,38.2646349747186,0 -122.873830837747,38.2646349742376,0 -122.8740528181,38.2645541041612,0 -122.874291524033,38.2645093005461,0 -122.874417276929,38.2645049309129,0 -122.874530126816,38.2645230772941,0 -122.874530128346,38.2645230775402,0 -122.874753968417,38.26460443238161,0 -122.875359271848,38.2649250267996,0 -122.875359272943,38.2649250273791,0 -122.875487737875,38.2650077342215,0 -122.875737872754,38.2651687710569,0 -122.876106079823,38.2654345202828,0 contacts #khStyle84754 1 -122.872558575275,38.2698016255195,0 -122.872245553495,38.2692160721557,0 -122.872016370036,38.2689184059324,0 -122.871805662873,38.2686793442439,0 -122.871520924328,38.2684852606041,0 -122.871025314303,38.26834501683691,0 -122.87045572693,38.2682227133303,0 -122.870015124039,38.2680915393156,0 -122.869813108884,38.2679876695381,0 -122.869574781015,38.2678161635701,0 -122.868877640557,38.2671169135438,0 -122.86858424902,38.266778612579,0 -122.868327777866,38.2663727620329,0 -122.868127787099,38.26594894803791,0 -122.867836075512,38.26547546127191,0 -122.867274278881,38.2648259236487,0 -122.866925873184,38.2644965700621,0 -122.866641445602,38.2643430302002,0 -122.866227978909,38.26423440344361,0 -122.865842217743,38.2642114273612,0 -122.865513726219,38.2643191949655,0 -122.865085398273,38.2645169728702,0 -122.864752236186,38.2648275136927,0 -122.86387443401,38.2652545781716,0 -122.86332247586,38.2656504778085,0 -122.863138712833,38.2657268664475,0 -122.862936519744,38.265726627604,0 -122.862449576569,38.2657440760138,0 -122.862109753589,38.265793240231,0 -122.861834476066,38.2659010628414,0 -122.861665236642,38.2660405541331,0 -122.861539189134,38.2661981218034,0 -122.861401143951,38.2666485788327,0 -122.861282187173,38.2669147529695,0 contacts #khStyle84754 1 -122.875269545462,38.2641363420608,0 -122.875405359711,38.2643032180327,0 -122.875423074973,38.2643167281848,0 -122.875576958813,38.2644340826961,0 -122.875748551633,38.2645694538501,0 -122.876106059794,38.2647946701581,0 contacts #khStyle84754 1 -122.876106053371,38.2645878392859,0 -122.876095753241,38.2645833445452,0 -122.875806228348,38.2644748848701,0 -122.875534247327,38.2643439121824,0 -122.875269545462,38.2641363420608,0 contacts #khStyle84754 1 -122.87288403329,38.2651251175091,0 -122.872926456113,38.26497195277941,0 -122.872953288581,38.26454389034061,0 -122.873123598679,38.2641880854979,0 -122.873264972129,38.2640350272414,0 -122.873454871078,38.2639135673912,0 -122.873682176618,38.263850727932,0 contacts #khStyle84754 1 -122.87412306224,38.2638373185601,0 -122.874397377692,38.2638289745193,0 -122.87465669849,38.26384277413351,0 -122.874887721135,38.26390160553401,0 -122.875099382211,38.264000970711,0 -122.875099383451,38.2640009712932,0 -122.875269544416,38.264136340775,0 -122.875269545462,38.2641363420608,0 contacts #khStyle84754 1 -122.894856383681,38.2637907965005,0 -122.893511195763,38.2639517881499,0 -122.89214858488,38.264054167669,0 -122.891502126759,38.2642112809761,0 -122.891100847704,38.2642875091283,0 -122.890925810064,38.2645216700122,0 -122.890732530403,38.2650036528301,0 -122.890644537715,38.2655488247647,0 -122.89040085091,38.2660532916225,0 -122.88978779381,38.2670125360393,0 -122.889534626526,38.267170012642,0 -122.88940816011,38.2674042154193,0 -122.889332057927,38.2676429735855,0 -122.889507311939,38.26774227694641,0 -122.889883138283,38.2677381303344,0 -122.890184645069,38.2677429223696,0 -122.890648166281,38.2676262010096,0 -122.891857463916,38.26713164963961,0 -122.89310771752,38.2667092301725,0 -122.893876880552,38.2664485778249,0 -122.89442850644,38.2664130330627,0 -122.895056402425,38.2662558868659,0 -122.895563533023,38.2658643043873,0 -122.895855042842,38.2653643750494,0 -122.896008378799,38.2648147527218,0 -122.895842244333,38.26433694280621,0 -122.895641550041,38.2640438573708,0 -122.895341710471,38.2638858677676,0 -122.894856383681,38.2637907965005,0 contacts #khStyle84754 1 -122.915835426882,38.2735324650074,0 -122.916026564273,38.2736339774186,0 -122.916294236438,38.2737761361857,0 -122.916796394424,38.2739206998829,0 -122.917346937305,38.2739346155578,0 -122.918881570687,38.273494097967,0 -122.919782831475,38.2731925739563,0 -122.920386959672,38.27299045274121,0 -122.920840593317,38.2727564421269,0 -122.921244980783,38.2724683212196,0 -122.921605465907,38.27213961286151,0 -122.921853101839,38.2717657643361,0 -122.922155896488,38.2709323169295,0 -122.922227094393,38.2705087792619,0 -122.922221843848,38.2700806835486,0 -122.922122273756,38.2696570301353,0 -122.921916571877,38.2692603419292,0 -122.921604724901,38.2689041370748,0 -122.921461561028,38.2684939719791,0 -122.921337823279,38.2676377027163,0 -122.921364372553,38.2672096285279,0 -122.921480226206,38.2667861215915,0 -122.921833349781,38.26597523982261,0 -122.921913475482,38.2655517080485,0 -122.921915486656,38.2646910181043,0 -122.921978111284,38.2642629680565,0 -122.922138262267,38.2638304778271,0 -122.92243190487,38.2634972147843,0 -122.922964822579,38.2635516481977,0 -122.923275070529,38.2636536148605,0 -122.923486899043,38.2637232341749,0 -122.923945682138,38.2639578632732,0 -122.924742033876,38.264544198888,0 -122.925228365792,38.2647472973467,0 -122.925613858483,38.2650494657203,0 -122.925854948648,38.2654326519052,0 -122.925864507047,38.2658607506299,0 -122.925674816332,38.2675775040676,0 -122.925709650498,38.26843371136831,0 -122.925868007389,38.2697180906571,0 -122.926357325376,38.2719129414069,0 contacts #khStyle84754 1 -122.861526108132,38.2648237063192,0 -122.861643357113,38.2647832907889,0 -122.861643358443,38.2647832902345,0 -122.861715111784,38.2647533788347,0 -122.861858937817,38.2646934225022,0 -122.861858938919,38.2646934222466,0 -122.862090882043,38.2646396239951,0 -122.862208661865,38.2646173967024,0 -122.862328167027,38.2645948436704,0 -122.862833261032,38.264457146908,0 -122.863019403645,38.2644064003467,0 -122.863019404868,38.2644064001404,0 -122.863258107824,38.2643661264033,0 -122.863500698711,38.2643483872488,0 -122.863734426374,38.2642945875118,0 -122.864172350372,38.264123864665,0 -122.864586397193,38.2639215684837,0 -122.865021825186,38.263746333497,0 -122.865225636019,38.2636429273284,0 -122.865894784011,38.2634138856037,0 -122.866122825335,38.2633420501271,0 -122.866360102114,38.263297261244,0 -122.866360103464,38.2632972611197,0 -122.866601626301,38.2632750071854,0 -122.866845267621,38.2632662757072,0 -122.867333196371,38.2632848595038,0 -122.867333198116,38.2632848595702,0 -122.867571022527,38.2633301942884,0 -122.867571024079,38.2633301945843,0 -122.867774091501,38.2634340689198,0 -122.867774092842,38.2634340696056,0 -122.867780287783,38.263438570161,0 -122.867954250467,38.2635649556025,0 -122.868107583965,38.2637138357946,0 -122.868225877225,38.2638807008696,0 -122.868328793909,38.2640565608134,0 -122.868378833493,38.2642368668524,0 -122.868551463398,38.264579536245,0 -122.868633596931,38.264791422166,0 -122.868666478568,38.26517448893,0 -122.868756545267,38.2653458266373,0 -122.868756545861,38.2653458277668,0 -122.868904144605,38.2655082189864,0 -122.86901850385,38.2656795851688,0 -122.869064634079,38.2658508746659,0 -122.869074276448,38.2660491587844,0 -122.869161119492,38.2664232737635,0 -122.869242567624,38.2666216397542,0 -122.869242568105,38.2666216409263,0 -122.869261032529,38.2666507632878,0 -122.869351214364,38.2667929990299,0 -122.869653963456,38.2670952572649,0 -122.869840580003,38.2672171351997,0 -122.869845538592,38.2672212203033,0 -122.870180169352,38.2674969023055,0 -122.870365357792,38.26761877724,0 -122.870365358778,38.267618777889,0 -122.870579176913,38.267713647626,0 -122.870780873521,38.2677949848575,0 -122.87103730144,38.267835825787,0 -122.871280925753,38.2678451101007,0 -122.87152273029,38.26787241522,0 -122.87176563156,38.2678862041895,0 -122.872475491185,38.2678779753084,0 -122.872739526147,38.2678602406434,0 -122.872904563034,38.2678649270606,0 -122.872943913925,38.267880114044,0 -122.873080208426,38.2679327137375,0 contacts #khStyle84754 1 -122.898693542777,38.267944466008,0 -122.89854298441,38.2676918437092,0 -122.898250184205,38.2672005478609,0 -122.898019516581,38.2668713894013,0 -122.897761936427,38.26662782506861,0 -122.897409709653,38.2663706574214,0 -122.89725308265,38.2662308249564,0 -122.897034478154,38.26596476251751,0 -122.896846259464,38.2656852081071,0 -122.89665813941,38.2653380599727,0 -122.896507549714,38.2649774264536,0 -122.896417612282,38.264670921937,0 -122.896281067941,38.2639858518198,0 -122.896214527211,38.2638055426741,0 -122.896113680389,38.2636342151073,0 -122.895897231148,38.26336815239781,0 -122.895523698253,38.2630388600369,0 -122.895339192669,38.2629170246882,0 -122.895188505225,38.2628763319652,0 -122.895028821678,38.26288069322641,0 -122.894794433137,38.2629165299159,0 -122.894644692189,38.2629614558216,0 -122.894359458814,38.2630783574945,0 -122.894281922164,38.26309180528361,0 -122.894122608585,38.2630871531793,0 -122.893891924146,38.2630328667614,0 -122.893734423461,38.2630101908561,0 -122.893495773932,38.2630279960911,0 -122.89318988661,38.2630998135316,0 -122.892706945901,38.2633246779077,0 -122.892328850553,38.2634279696774,0 -122.891934045943,38.2634771697939,0 -122.891058035054,38.2635439410046,0 -122.890661449705,38.2635886289232,0 -122.890427049898,38.2636289630977,0 -122.890205818937,38.2637008529461,0 -122.890009895287,38.2638088163233,0 -122.889525702342,38.2641418159525,0 -122.889122994386,38.2644478543239,0 -122.888795706978,38.2647224202192,0 -122.888665782118,38.2648845195674,0 -122.888568350624,38.2650556625485,0 -122.888380666522,38.2656052418524,0 -122.888299301894,38.265780906325,0 -122.888218041896,38.265888977361,0 -122.888048502694,38.2660240002936,0 -122.887781787872,38.2661634349464,0 -122.887485134687,38.2662577775495,0 -122.887248245088,38.2662845842145,0 -122.886928183083,38.2662707530316,0 -122.886769542068,38.2662886227452,0 -122.886540468668,38.2663424730192,0 -122.886321354833,38.2664233700203,0 -122.886112943355,38.2665132896102,0 -122.885855132546,38.2666662473182,0 -122.885088330089,38.2672197544244,0 -122.88471534586,38.2674582134956,0 -122.88443257971,38.2675750933262,0 -122.884205629505,38.2676379535969,0 -122.884049828277,38.2676648349224,0 -122.883811868406,38.2676871273273,0 -122.883572165911,38.2676823801182,0 -122.883257151049,38.26763700038491,0 -122.882400741569,38.2674784150828,0 -122.882083927356,38.2674420428329,0 -122.88176458317,38.2674236920614,0 -122.881365514959,38.2674413085552,0 -122.880260677398,38.2675888762997,0 -122.879940930719,38.2675975575237,0 -122.879621586407,38.2675792009204,0 -122.879306931719,38.2675338109641,0 -122.878713864276,38.26734843569,0 -122.87724471298,38.2670314511793,0 -122.877170080705,38.2670133471105,0 -122.877109776473,38.2669727270573,0 -122.876780872334,38.2666974975187,0 -122.876642891459,38.2665396325731,0 -122.87650788495,38.2663141771918,0 -122.876355008369,38.2658859222277,0 -122.876276004335,38.26571009487451,0 -122.876106079823,38.2654345202828,0 contacts #khStyle84754 1 -122.842912740541,38.2666069997891,0 -122.842870126394,38.2664897812358,0 -122.842870125787,38.2664897804616,0 -122.842760401441,38.2663499388786,0 -122.842760400508,38.2663499373497,0 -122.842644712339,38.2661605207338,0 -122.842598461161,38.26609603320431,0 -122.84256707097,38.2660522661179,0 -122.84245687244,38.2659664984068,0 -122.842318354409,38.2659257543011,0 -122.84231835311,38.2659257540017,0 -122.842160897528,38.2658894916655,0 -122.842160893249,38.2658894906802,0 -122.842107390252,38.2658488568615,0 -122.842089565588,38.2658353195831,0 -122.841947017337,38.2656774080484,0 -122.841919251816,38.26563230766871,0 -122.841814608504,38.2652941990444,0 -122.841814608208,38.2652941978624,0 -122.841765029984,38.2650958559634,0 -122.84174151062,38.2649065629436,0 -122.841735667758,38.2641495098352,0 -122.84170568869,38.2639737254661,0 -122.841671284051,38.2638610235353,0 -122.841620390137,38.2637753359095,0 -122.841543060361,38.2636896107744,0 -122.841461394758,38.2636264128541,0 -122.841365410883,38.2635767133065,0 -122.841249035799,38.2635405044884,0 -122.841010520846,38.2634906097453,0 -122.840790611516,38.2634272213451,0 -122.840569075595,38.2632917306832,0 -122.840439385785,38.2631383409058,0 -122.840298101586,38.2628991681509,0 -122.840252899786,38.2628226488992,0 -122.840252898654,38.26282264820381,0 -122.840216156603,38.2628000670634,0 -122.840005206611,38.2627394549658,0 contacts #khStyle84754 1 -122.87288403329,38.2651251175091,0 -122.872928146975,38.2652288096289,0 -122.872928147472,38.2652288107983,0 -122.872967363078,38.26527391458971,0 -122.872999313959,38.265326616935,0 -122.873076714777,38.2654542841098,0 -122.87310120593,38.2655444356158,0 -122.873095278679,38.2655848752681,0 -122.873086018754,38.2656480621774,0 -122.873073238328,38.2656967842938,0 -122.873036387205,38.2658372694261,0 -122.873034974539,38.26603103474631,0 -122.873034974531,38.2660310357702,0 -122.873012492025,38.2662202727178,0 -122.872972504944,38.2664094902851,0 -122.872912560711,38.266571648979,0 -122.872852028724,38.2666617067425,0 -122.872832933157,38.2666802379157,0 -122.872731432688,38.2667787366349,0 -122.872642963936,38.2669093200289,0 -122.872609303186,38.26695829405551,0 -122.872522263611,38.26708493017,0 -122.872441431762,38.2671389159271,0 -122.87229599627,38.2671612871058,0 -122.871810086218,38.2671968005223,0 -122.871810084876,38.2671968004709,0 -122.871567892524,38.2671875197451,0 -122.871325374416,38.2671602130582,0 -122.871095433432,38.26709236455261,0 -122.870892276866,38.2670290506611,0 -122.870715215543,38.2669567530152,0 -122.87059742369,38.2669025469931,0 -122.870400714882,38.2668302274762,0 -122.8702411971,38.2667467607396,0 -122.870210842673,38.2667308779186,0 -122.870102210508,38.2665505078596,0 -122.870035747514,38.266361170375,0 -122.869866606037,38.2660590637692,0 -122.869814605203,38.2659733867252,0 -122.869814604744,38.2659733855527,0 -122.869770510973,38.2658606817409,0 -122.869759138086,38.2656308514676,0 -122.869736454204,38.2655316881746,0 -122.869703394169,38.2654415269918,0 -122.869636078228,38.2653820187266,0 -122.869555379625,38.2653106798163,0 -122.86946581612,38.2651920624029,0 -122.869432786086,38.2651483174929,0 -122.869357429013,38.2649409460067,0 -122.869366678222,38.2647652134804,0 -122.869361109572,38.2646840950686,0 -122.8692905998,38.2645623485571,0 -122.869290598783,38.2645623475586,0 -122.868982503822,38.2642600822812,0 -122.868862755495,38.26410673430161,0 -122.868766225498,38.2639534136791,0 -122.86871535639,38.2638361954045,0 -122.868715356331,38.263836194064,0 -122.868710551642,38.2637280391086,0 -122.868671736722,38.2635488461525,0 -122.86867052207,38.2635432383407,0 -122.868551165432,38.2633718659717,0 -122.86855116449,38.2633718651262,0 -122.868390321285,38.2632274843131,0 -122.868197279648,38.2631101032385,0 -122.867986335651,38.2630152317313,0 -122.867986334404,38.2630152312453,0 -122.867766088042,38.2629293625691,0 -122.867527889158,38.26289304072621,0 -122.867045759992,38.2628294014787,0 -122.866849328399,38.262814576419,0 -122.866803241881,38.2628110981348,0 -122.866559959421,38.2628198307944,0 -122.866445267529,38.2628414803879,0 -122.86632268279,38.2628646197207,0 -122.866083888842,38.2629218056256,0 -122.865854516687,38.2629767346743,0 -122.865625421576,38.2630395565758,0 -122.865389564129,38.2630888514857,0 -122.864912175418,38.2631649024504,0 -122.864682364464,38.2632277221516,0 -122.864458244169,38.26330406498,0 -122.864458242846,38.2633040655307,0 -122.864026738562,38.2634838088428,0 -122.864026737368,38.26348380934021,0 -122.863794789852,38.2635421181277,0 -122.86333694084,38.263672260041,0 -122.861943448407,38.2640266013371,0 -122.861913452883,38.2640310689707,0 -122.861703324566,38.2640623651563,0 -122.861458974334,38.2640665797247,0 -122.861220051619,38.2640347512893,0 -122.860990129826,38.2639668810633,0 -122.860766297929,38.2638900072426,0 -122.860562880769,38.2637861195869,0 -122.860410599344,38.2636552557608,0 -122.860191902223,38.2633260376089,0 -122.860123395715,38.26310064443931,0 -122.860123395638,38.2631006435298,0 -122.860106633364,38.2629023492242,0 -122.86014020415,38.2627221405229,0 -122.860185223225,38.2625329339552,0 -122.860190417657,38.2622490466123,0 -122.86023061694,38.2621499593663,0 -122.860230617581,38.2621499583882,0 -122.86036031298,38.26195183991671,0 -122.8605149335,38.2617943093746,0 -122.860514934211,38.2617943082675,0 -122.860593028303,38.26167275554181,0 -122.860593042107,38.2616727340569,0 contacts #khStyle84754 1 -122.906797016292,38.2699371962393,0 -122.906427241315,38.2700824452254,0 -122.905913284674,38.27025326371601,0 -122.905685630045,38.2703161649493,0 -122.905529116438,38.2703430742025,0 -122.90529044573,38.27036090333291,0 -122.90523459607,38.270361306713,0 -122.904170079055,38.2703689902171,0 -122.90353025177,38.2703549381414,0 -122.903051571462,38.2703229932012,0 -122.902900507138,38.2702823100692,0 -122.902760548417,38.27021910495201,0 -122.902305040258,38.2699618649715,0 -122.901811227417,38.2696413307186,0 -122.901748931873,38.2696008942907,0 -122.901511587853,38.269433961406,0 -122.90124182808,38.2691994068355,0 -122.901055265614,38.2689964666217,0 -122.900768302641,38.2685455970927,0 -122.900409078708,38.2679099089977,0 -122.899945252801,38.2669722115475,0 -122.899801956896,38.2667467756169,0 -122.899670356292,38.2665889431634,0 -122.899461643598,38.2663949935636,0 -122.89910941194,38.2661378309917,0 -122.898852411964,38.2659889004244,0 -122.898518085105,38.2658357086437,0 -122.898507546274,38.2658308796238,0 -122.898319092697,38.26571355175281,0 -122.898093934252,38.2655331039227,0 -122.897855304622,38.265280544005,0 -122.89771738336,38.2650506040069,0 -122.897637353276,38.2648071964667,0 -122.897601448919,38.264433147206,0 -122.897585380954,38.2636760855566,0 -122.897582182775,38.2636288112819,0 -122.897564039978,38.2633606301834,0 -122.897463569932,38.26292343620941,0 -122.897352548699,38.2626214198123,0 -122.897256701872,38.2624500976338,0 -122.897098770834,38.2622291514839,0 -122.896959319024,38.26207581514191,0 -122.896747405041,38.2618863639923,0 -122.896516540385,38.2617104141898,0 -122.896505345644,38.2617041225883,0 -122.896388047464,38.2616381992302,0 -122.896245603987,38.26157949030961,0 -122.896014558994,38.2615297139702,0 -122.895855248711,38.2615250642278,0 -122.895620143963,38.2615654081768,0 -122.89510475641,38.2617064470432,0 -122.894487680484,38.2618753098304,0 -122.894019603615,38.2619604999546,0 -122.892586647361,38.2620718328809,0 -122.891408987165,38.2622554881568,0 -122.891013480687,38.262300178306,0 -122.890693758408,38.2623088889194,0 -122.889973988179,38.2622946874774,0 -122.889576715288,38.2623258523965,0 -122.889424121549,38.2623662626817,0 -122.889280080039,38.2624201996607,0 -122.888612618992,38.2627665386892,0 -122.888401005822,38.2628564593481,0 -122.888174073715,38.2629193274068,0 -122.887861065341,38.26297309912561,0 -122.887542747507,38.2629953212084,0 -122.887143025779,38.26299042562201,0 -122.887063303398,38.2629824189308,0 -122.886825864356,38.2629585720831,0 -122.886525935004,38.2628726597886,0 -122.886369880085,38.262840962956,0 -122.88629129193,38.262840885729,0 -122.886213389714,38.2628588340592,0 -122.88607682507,38.2629262931493,0 -122.885964872628,38.2630163075125,0 -122.885925842825,38.2630748500666,0 -122.88590957505,38.2631965023272,0 -122.8859778687,38.2633813252323,0 -122.886061294453,38.263485050801,0 -122.886179414193,38.2635692698745,0 -122.886181542873,38.2635707876149,0 -122.886383567159,38.2636746295908,0 -122.886442444954,38.2637152435073,0 -122.886511568589,38.2638279671765,0 -122.886521729114,38.2639541516689,0 -122.886501168327,38.264080306016,0 -122.886461324397,38.2642019351968,0 -122.886368525477,38.2643775871411,0 -122.886280483999,38.2644811439637,0 -122.886225035458,38.2645306579928,0 -122.886035169433,38.2646431268893,0 -122.885764890699,38.2647780472508,0 -122.884999867587,38.2651242691053,0 -122.884799652867,38.2652277132315,0 -122.884675563897,38.2653087017667,0 -122.884514228597,38.2654482340033,0 -122.884375019367,38.265601306823,0 -122.884068159936,38.2660426103839,0 -122.88394036563,38.2662047065666,0 -122.883839108041,38.2663037420215,0 -122.883715380688,38.2663802236517,0 -122.883500900402,38.2664656262654,0 -122.883346165831,38.2664970139722,0 -122.88318682361,38.2665058656706,0 -122.882950384137,38.2664740831119,0 -122.88287647281,38.2664514771673,0 -122.882747992434,38.266374741127,0 -122.88247793984,38.2661446494076,0 -122.882349103189,38.266067912567,0 -122.882143141092,38.2659685659067,0 -122.881927504686,38.2658872339372,0 -122.88170327295,38.2658194114779,0 -122.881471867296,38.2657696061662,0 -122.881157941154,38.2657197156909,0 -122.880918237862,38.2657194693056,0 -122.880764210776,38.2657553605718,0 -122.880620870653,38.265809287581,0 -122.880426705865,38.265921742915,0 -122.880236320161,38.2661243264407,0 -122.880120433516,38.2662098248475,0 -122.880044312367,38.26622777090391,0 -122.879962505461,38.2662276860938,0 -122.879805002258,38.2662049914972,0 -122.879272233852,38.2660692501572,0 -122.878957585898,38.2660238592764,0 -122.878797552477,38.2660191856037,0 -122.878407338439,38.2660863698599,0 -122.878358041151,38.2660991580642,0 -122.877646091754,38.2662838419614,0 -122.877567864808,38.2662792530354,0 -122.877417188069,38.2662340313056,0 -122.877159160486,38.2660850522528,0 -122.876958368361,38.2658910711672,0 -122.876853576756,38.26572473162301,0 -122.876850419301,38.2657197196656,0 -122.876653330205,38.2652418494795,0 -122.876460663544,38.26489466433821,0 -122.876273831655,38.2646871782546,0 -122.876106053371,38.2645878392859,0 contacts #khStyle84754 1 -122.913319475425,38.2679563888332,0 -122.915497556493,38.2679895520635,0 -122.916035140695,38.2680485266279,0 -122.916555845997,38.2681840924701,0 -122.916744578084,38.2682667950788,0 -122.917029670465,38.2683917219434,0 -122.917441605498,38.2686759110724,0 -122.917767736648,38.2690186184683,0 -122.918169797215,38.2698210147873,0 -122.918679230375,38.269830388657,0 -122.918767585239,38.2694796980703,0 -122.918783661542,38.2694158890078,0 -122.918860032602,38.2685417335716,0 -122.918942679135,38.2681182058385,0 -122.919204051862,38.2672847363582,0 -122.919292410782,38.2668612122929,0 -122.91932040072,38.2664331395475,0 -122.91915323546,38.26514874478111,0 -122.919150630165,38.2642925578909,0 -122.919056801357,38.2638689055483,0 -122.918504519394,38.2626247937815,0 -122.918927996434,38.2624718809377,0 -122.9216628759,38.2621267964578,0 -122.92217063148,38.2619874480095,0 -122.923621217266,38.2613800790419,0 -122.924111851243,38.2612091670873,0 -122.924659065705,38.2612410710352,0 -122.925158629978,38.2614081286038,0 -122.925273227891,38.2614836383072,0 -122.925583064506,38.2616877913854,0 -122.925926715653,38.262021475411,0 -122.926169583563,38.2624046622782,0 -122.926287028307,38.2628283242996,0 -122.926499170506,38.26322050318381,0 -122.926798152511,38.2635811934142,0 -122.927595237561,38.2641675102161,0 -122.928029008104,38.2644246387742,0 -122.928426886727,38.26459586670691,0 -122.928542836927,38.2646457657231,0 -122.928780083544,38.2649568437496,0 -122.928696673404,38.2651743018122,0 -122.928612463085,38.2653938446313,0 -122.928217630169,38.2661957084868,0 -122.92815289706,38.26662376047981,0 -122.9281410347,38.2670518455412,0 -122.928171606127,38.2679125558187,0 -122.928083223624,38.2687641789577,0 -122.92820875562,38.2700485345207,0 -122.928304789056,38.2704721806111,0 -122.928752053439,38.271567474173,0 contacts #khStyle84754 1 -122.84195444388,38.2617705230109,0 -122.841954087664,38.2617930506642,0 -122.842017782257,38.2619057924106,0 -122.842077387677,38.2619284046103,0 -122.842300949981,38.2619512390606,0 -122.842300954312,38.26195123950291,0 -122.842471584604,38.262005545818,0 -122.84266709324,38.2621184670492,0 -122.842839690342,38.2622538870374,0 -122.842882395685,38.2623053861692,0 -122.842974365076,38.2624162933897,0 -122.843141923943,38.2625697315511,0 -122.843556053537,38.2630118997963,0 -122.843732207727,38.2631563368337,0 -122.843732208639,38.2631563375818,0 -122.843915874902,38.2632962773859,0 -122.844280409234,38.2635491150033,0 -122.844470778209,38.2636555275335,0 -122.844878396605,38.2638833761539,0 -122.845088230997,38.2639827926778,0 -122.84530060574,38.2640641884941,0 -122.845534076195,38.2641365989464,0 -122.845675158104,38.2641636809491,0 -122.845770462662,38.2641819754504,0 -122.846003276448,38.264195840798,0 -122.846234797414,38.2642096286878,0 -122.846979929486,38.2642286372482,0 -122.84697993064,38.2642286372776,0 -122.847237113607,38.264237989226,0 -122.847493506091,38.2642833886007,0 -122.847493507206,38.2642833887983,0 -122.847943787003,38.2643695975456,0 -122.848183409303,38.2644059604287,0 -122.848425600083,38.2644107842246,0 -122.848913231949,38.2644024074057,0 -122.849151943429,38.2643621607566,0 -122.849151944918,38.26436216013601,0 -122.849367538794,38.2642723168005,0 -122.849547138266,38.2641418691497,0 -122.84971568191,38.2640023944516,0 -122.84999933367,38.2636512756133,0 -122.850406767488,38.2632101914492,0 -122.85062573844,38.2628680001279,0 -122.850734347416,38.2626878910774,0 -122.8508479114,38.2625303183023,0 -122.850847912275,38.2625303172332,0 -122.851245782563,38.2620441564,0 -122.851245783271,38.2620441556137,0 -122.851407971573,38.2618641149134,0 -122.851555008749,38.2617561535642,0 -122.851635942608,38.2616571205205,0 -122.851625173987,38.2615084011058,0 -122.851657189732,38.2614002917006,0 -122.851730787307,38.26122013695481,0 -122.851742412224,38.2611811908893,0 contacts #khStyle84754 1 -122.973669636151,38.2610328510445,0 -122.973353157315,38.261082663325,0 -122.972743353777,38.2611996780337,0 -122.97231715648,38.261307723038,0 -122.971969170072,38.26146084700821,0 -122.971626922994,38.2615553908051,0 -122.971401150139,38.2615868757473,0 -122.971337931454,38.2615643290806,0 -122.971327953977,38.26150574590031,0 -122.971390879239,38.2613750810414,0 -122.971623156365,38.2611543339711,0 -122.971912919015,38.26099218371681,0 -122.972339490577,38.26084358058381,0 -122.972754584327,38.2608031301241,0 -122.973158631579,38.2607201296331,0 contacts #khStyle84754 1 -122.856577369859,38.2619697547623,0 -122.856595973664,38.2619562600154,0 -122.856909641862,38.2615781252924,0 -122.857047802846,38.2612583518729,0 -122.85710354624,38.26088890682431,0 -122.857085632601,38.2605554274342,0 -122.857067912445,38.2603030568431,0 -122.857003928376,38.2601452597573,0 -122.856893686721,38.2600775309002,0 -122.856737615394,38.2600638184494,0 -122.856241584881,38.2601803678315,0 -122.855748186986,38.2604050666499,0 -122.855221302834,38.2605846589525,0 -122.854908602793,38.2606563686224,0 -122.854628889601,38.2606650310785,0 -122.854329925516,38.2606556436449,0 -122.853889349241,38.2605469394166,0 -122.853595039023,38.2605330507561,0 -122.85332889281,38.2605462324447,0 -122.852979348639,38.2606404206737,0 -122.85257514768,38.2607390457569,0 -122.852244442665,38.2608783183601,0 -122.851742412224,38.2611811908893,0 contacts #khStyle84754 1 -122.840005206611,38.2627394549658,0 -122.839995535581,38.2627366762323,0 -122.839995534361,38.2627366761191,0 -122.839749105397,38.2627138053449,0 -122.839576292602,38.2626775170073,0 -122.839322621215,38.2625374733603,0 -122.839105270711,38.2624515553382,0 -122.83910526708,38.2624515539028,0 -122.838867808633,38.2624106690286,0 -122.838380148217,38.26243702877691,0 -122.838380146976,38.2624370288439,0 -122.838138709668,38.2624186678087,0 -122.837891924711,38.2623957926421,0 -122.837661999144,38.2623413968062,0 -122.837661997736,38.2623413961733,0 -122.837541381803,38.26228715353331,0 -122.837467600397,38.262214950712,0 -122.837313976298,38.26206602971741,0 -122.837313975235,38.2620660287813,0 -122.837149981928,38.2619216012048,0 -122.836999216025,38.2617726842976,0 -122.836882773624,38.261610296709,0 -122.836795684136,38.2614209128766,0 -122.836737876675,38.2612360769598,0 -122.836694265124,38.2610918153029,0 -122.83665836982,38.2608529361622,0 -122.836672187819,38.2607448052731,0 -122.836698447584,38.2606637294727,0 -122.83683991079,38.2605017046279,0 -122.837019165905,38.2603712759299,0 -122.837221577382,38.260267916713,0 -122.83744037679,38.260182605643,0 -122.837440380772,38.2601826045606,0 -122.837671276293,38.2601198402937,0 -122.838147959673,38.2600438989845,0 -122.838392287524,38.2600442391149,0 -122.838872955058,38.2601034880911,0 -122.839116547334,38.2601128382193,0 -122.839288440652,38.2601083101463,0 -122.83960416143,38.2600999934186,0 -122.83984603984,38.2600777959752,0 -122.840577246616,38.2600742949238,0 -122.840577247953,38.2600742949174,0 -122.840810750842,38.2601241848132,0 -122.841017344225,38.2602281107574,0 -122.841214630881,38.2603410361026,0 -122.841394732985,38.260471962795,0 -122.841554803081,38.2606163802607,0 -122.841688757293,38.2607787876647,0 -122.841702697355,38.260798645742,0 -122.841805913268,38.2609456775136,0 -122.841846291374,38.2610299630181,0 -122.841892320524,38.2611260442925,0 -122.841935129569,38.2613153640713,0 -122.841958646721,38.2615046561218,0 -122.841958646917,38.2615046576963,0 -122.841958572455,38.2615094241682,0 -122.84195444388,38.2617705230109,0 contacts #khStyle84754 1 -122.906348847042,38.2698891000624,0 -122.906235280296,38.2698975336671,0 -122.905769510028,38.2698295609992,0 -122.904195748902,38.2693370844731,0 -122.90352825329,38.2689174485432,0 -122.902665760936,38.2681957277616,0 -122.902280894071,38.2677537904157,0 -122.901279682851,38.2663515006777,0 -122.899203909222,38.2642227649082,0 -122.89886483463,38.2637628310475,0 -122.898682315225,38.2632399479775,0 -122.898668775495,38.2627082004507,0 -122.898778475089,38.2621765609689,0 -122.899352543822,38.2606314233148,0 -122.899446276657,38.2600186561801,0 -122.899245191493,38.2597481087537,0 -122.898919038419,38.2597658467129,0 -122.898643137353,38.25986474288,0 -122.898441367827,38.2600808645855,0 -122.897901449151,38.2604589132798,0 -122.897135411716,38.2605889144242,0 -122.896605548707,38.26042621559311,0 -122.896258180817,38.2602907181213,0 -122.896058144977,38.2602905383184,0 -122.895706926064,38.2603488022791,0 -122.895262674156,38.2605151314015,0 -122.894624417033,38.2607083196988,0 -122.893999502018,38.2608158965548,0 -122.892921086078,38.26081490240681,0 -122.892219318442,38.2607151142982,0 -122.891227976681,38.2607727662208,0 -122.889871504982,38.2608706200494,0 -122.889205835751,38.2609916523919,0 -122.888555036826,38.2611983133576,0 -122.88801589822,38.2614952042571,0 -122.887424949541,38.2615712360976,0 -122.88669911121,38.2613316961656,0 -122.885699078994,38.260555642428,0 -122.885423565943,38.2603976494101,0 -122.885122568752,38.2603162401798,0 -122.884872132629,38.2603385215574,0 -122.884770760826,38.26051416411691,0 -122.884793516051,38.2610278972994,0 -122.884690291987,38.2619155262998,0 -122.884895384299,38.2625511070138,0 -122.88484128508,38.2630963063456,0 -122.884605450182,38.2635872513671,0 -122.88417252063,38.2640149109814,0 -122.883620101646,38.2643252859007,0 -122.882989278709,38.2645229233277,0 -122.882312551662,38.2646078571699,0 -122.881632330071,38.2646432135558,0 -122.880952578897,38.2646109714437,0 -122.880275409942,38.2645291601915,0 -122.879610206424,38.2643437165121,0 -122.879110299967,38.2640052287478,0 -122.878812176218,38.2639102844183,0 -122.878523516761,38.263711708288,0 -122.877979316597,38.2633776744274,0 -122.877562784803,38.2629626624015,0 -122.877178826486,38.2625116332977,0 -122.876755566385,38.2620695715304,0 -122.876462746924,38.2615961046089,0 -122.876105961567,38.2610604816941,0 contacts #khStyle84754 1 -122.859331123894,38.2593781154953,0 -122.859389052332,38.2593821152193,0 -122.859438656103,38.2593781646191,0 -122.859500516771,38.2593732378111,0 -122.859500517081,38.2593732366005,0 -122.859528231831,38.2592651218004,0 -122.859551488411,38.2590623695721,0 -122.859533925648,38.2589091363284,0 -122.859263195721,38.2588952895789,0 -122.859232499003,38.2590664890885,0 -122.859204956138,38.2592692361202,0 -122.859220175116,38.2593413543067,0 -122.859256191006,38.259372940418,0 -122.859331123894,38.2593781154953,0 contacts #khStyle84754 1 -122.851742412224,38.2611811908893,0 -122.851787257567,38.2610309485866,0 -122.851787257559,38.2610309474363,0 -122.851785860429,38.2608416839989,0 -122.851745046503,38.260673884398,0 -122.851739811993,38.2606523635303,0 -122.851666249624,38.2604675139568,0 -122.851558010848,38.26029613898611,0 -122.851309000652,38.2599668658056,0 -122.851308999636,38.2599668647101,0 -122.851020307517,38.2596555653722,0 -122.850906347045,38.2594886886857,0 -122.850798872357,38.2592947825013,0 -122.850768498265,38.2591280161056,0 -122.850768498502,38.25912801294861,0 -122.850776945819,38.2590153672824,0 -122.850840338022,38.2589343373065,0 -122.85091833741,38.2588713505578,0 -122.851044888405,38.2588219441847,0 -122.851250901279,38.2587832003058,0 -122.851282875555,38.258777187017,0 -122.851525751313,38.2587865110818,0 -122.851769306861,38.2588138594078,0 -122.851990969197,38.2588907478624,0 -122.85202747847,38.2589159688851,0 -122.852173953955,38.2590171555319,0 -122.852300784729,38.2591795418455,0 -122.852374384099,38.2593463662538,0 -122.852399589374,38.2594230034937,0 -122.852464875014,38.2594636419605,0 -122.852592432265,38.2594457797267,0 -122.852829028453,38.25938299274,0 -122.852960843037,38.2593786539544,0 -122.852960844871,38.259378653894,0 -122.85307188744,38.2594013248264,0 -122.853071888958,38.2594013251365,0 -122.853229964148,38.2594826375387,0 -122.853401439369,38.2594738414917,0 -122.853401440471,38.2594738408716,0 -122.853521239197,38.2594063995968,0 -122.853728278142,38.2592985112627,0 -122.85372827976,38.2592985107806,0 -122.853954165899,38.259231202183,0 -122.854197456015,38.2592134831694,0 -122.854441031099,38.25923181371331,0 -122.854673817232,38.2592861806534,0 -122.854829465429,38.2593314378053,0 -122.85493363248,38.259399161258,0 -122.855018135786,38.2594758724071,0 -122.855115810203,38.2595751315891,0 -122.855115810964,38.2595751323628,0 -122.855135208375,38.2595826424387,0 -122.855279281952,38.2596384231111,0 -122.855489600756,38.2596747348268,0 -122.855489602062,38.2596747345931,0 -122.855714721131,38.2596344591332,0 -122.856164387531,38.2594818055345,0 -122.856392772047,38.2594144955556,0 -122.856392774167,38.2594144951113,0 -122.856627911475,38.2593652169808,0 -122.856872219588,38.2593745311397,0 -122.856958829343,38.2593910007862,0 -122.857110739789,38.2594198877916,0 -122.857353307273,38.2594066673676,0 -122.857597624153,38.2594114738687,0 -122.857836521228,38.2594478165608,0 -122.85807217583,38.2594976734478,0 -122.858072176953,38.2594976736854,0 -122.858302092221,38.2595610421537,0 -122.859164746655,38.2599225914604,0 -122.859222774722,38.259963467567,0 -122.859344173701,38.2600489831436,0 -122.859507135678,38.2601933788573,0 -122.859507136459,38.26019337954931,0 -122.859642923701,38.2603512627147,0 -122.859642924393,38.2603512635199,0 -122.859707218359,38.26053609573791,0 -122.859683623552,38.2607298348751,0 -122.859627539941,38.2609145228257,0 -122.859538244152,38.26109466327331,0 -122.859521053275,38.2611220271517,0 -122.859430747384,38.2612657705232,0 -122.85936295948,38.2613521590103,0 -122.859300040313,38.2614323425898,0 -122.859079218301,38.2616483735979,0 -122.858834087706,38.261873387054,0 -122.858664145588,38.2620083671191,0 -122.858664144592,38.2620083679105,0 -122.858362063308,38.2623099165841,0 -122.858301879774,38.2623754751166,0 -122.858217438724,38.2624674573544,0 -122.858148355803,38.2625493516557,0 -122.857947824717,38.2627870698093,0 -122.857883733057,38.2628635964687,0 -122.857883732294,38.2628635973806,0 -122.857849671723,38.2629266426846,0 -122.857841180721,38.2630663250302,0 -122.857872420343,38.2631655011036,0 -122.857916903685,38.2632511735499,0 -122.858038253275,38.2633053964995,0 -122.858038254872,38.263305397213,0 -122.858205726487,38.26333714474281,0 -122.858525413014,38.2633510550757,0 -122.858991716387,38.2634687836158,0 -122.859196209926,38.2635681695172,0 -122.859360626377,38.2637035550976,0 -122.859523229616,38.2638524585765,0 -122.859523230552,38.2638524594336,0 -122.859570565201,38.2639130681841,0 -122.859646522275,38.2640103257244,0 -122.859858485883,38.26412774397561,0 -122.860080173919,38.2642046175181,0 -122.860293610979,38.26429950519,0 -122.860315254566,38.2643143663304,0 -122.860477695743,38.26442590162,0 -122.860604198205,38.264588277633,0 -122.860630615267,38.2647820775291,0 -122.860572648644,38.2650163317169,0 contacts #khStyle84754 1 -122.821445833321,38.262322122673,0 -122.821616100204,38.2622277538888,0 -122.82161610125,38.26222775330681,0 -122.822214183563,38.2618952092738,0 -122.822401952078,38.2618008658001,0 -122.822401952988,38.2618008646186,0 -122.822464307403,38.2617198487996,0 -122.822519606116,38.261602770108,0 -122.822543690851,38.2613955211825,0 -122.822550982814,38.26116603205441,0 -122.822554142777,38.261066582735,0 -122.82262506566,38.2608413797031,0 -122.822704754925,38.26068208143581,0 -122.822715166802,38.2606612681117,0 -122.822757840135,38.2605937397898,0 -122.822855232375,38.2604992578719,0 -122.823014218919,38.260341781937,0 -122.823313892375,38.2600583450339,0 -122.823456445296,38.2599008440089,0 -122.823456446192,38.2599008427738,0 -122.823577228959,38.2597342966346,0 -122.823577229811,38.2597342956435,0 -122.823712636511,38.2595767842947,0 -122.82382128589,38.2594057123754,0 -122.823880509424,38.2592886402114,0 -122.823922316858,38.2591354912708,0 -122.823963994744,38.2590364180781,0 -122.823963995527,38.2590364167021,0 -122.824235556101,38.2585591677483,0 contacts #khStyle84754 1 -122.819372311664,38.2584120235029,0 -122.819372312598,38.2584120243153,0 -122.81942609127,38.2584534439474,0 -122.819530603021,38.2585339373305,0 -122.819738916561,38.2586675351401,0 -122.819925034304,38.2587868973834,0 -122.820116927181,38.2588998494034,0 -122.820116930472,38.2588998513401,0 -122.820780746434,38.2591306923008,0 -122.82078074759,38.2591306927026,0 -122.821007791526,38.2591851168018,0 -122.82126525472,38.2592170563797,0 -122.821508128542,38.2592264418709,0 -122.821676478635,38.259210925154,0 -122.821748579829,38.2592042799316,0 -122.821748583739,38.2592042791602,0 -122.822224601576,38.25911037777611,0 -122.822224602811,38.2591103774124,0 -122.822453019353,38.2590431331072,0 -122.822598637817,38.2589652861978,0 -122.822654743889,38.2589352915313,0 -122.822831531754,38.2588003737239,0 -122.823035388871,38.2586970414058,0 -122.823260966885,38.2586207789356,0 -122.82348550761,38.2585309951719,0 -122.823658352325,38.2584005768454,0 contacts #khStyle84754 1 -122.833593744676,38.2587351665246,0 -122.833549974784,38.2586630036372,0 -122.833498891853,38.2585097196957,0 -122.833498891718,38.2585097187431,0 -122.833470771841,38.2583114044746,0 -122.833443399384,38.2580995724228,0 contacts #khStyle84754 1 -122.848128224451,38.2580340808978,0 -122.848199925744,38.2580792371133,0 -122.848246379131,38.2580702855507,0 -122.84829648158,38.2580252882514,0 -122.84840102877,38.2579082639989,0 contacts #khStyle84754 1 -122.860593042107,38.2616727340569,0 -122.860593053217,38.2616727168293,0 -122.860703393097,38.2615016303331,0 -122.8607033937,38.2615016293985,0 -122.860721280976,38.2614881326634,0 -122.860942697269,38.2611459244719,0 -122.860942697876,38.2611459233948,0 -122.861133027634,38.2608081856229,0 -122.861133027965,38.26080818465,0 -122.861180447573,38.2606685490771,0 -122.861210555288,38.2604297548335,0 -122.861194104079,38.2602539923364,0 -122.861156543997,38.2600962291106,0 -122.861051498895,38.2599248672923,0 -122.860911796782,38.2597579692507,0 -122.860911795956,38.2597579684528,0 -122.860762405184,38.2596135892692,0 -122.860594085041,38.2594691881039,0 -122.860487872952,38.259406923802,0 -122.860463141232,38.2593924253926,0 -122.860463140503,38.2593924244798,0 -122.86043071353,38.2593518292589,0 -122.86046293064,38.2591310662057,0 -122.860462931222,38.2591310629781,0 -122.860482429068,38.2590229371394,0 -122.860444374643,38.2589372734576,0 -122.860273903481,38.2587973741988,0 -122.860065762576,38.25870307604521,0 -122.859914876521,38.2586347167947,0 -122.859658340444,38.2584857010292,0 -122.859441679753,38.2584043265189,0 -122.858968944836,38.2583046160593,0 -122.858968943326,38.2583046158127,0 -122.858302271572,38.2581956529835,0 -122.857430249021,38.2580684114619,0 -122.857193901907,38.2580095392282,0 -122.856643200885,38.2578933175971,0 -122.85663548259,38.2578916886671,0 -122.856167245229,38.2578685779259,0 -122.856022635176,38.2578413619802,0 -122.855760993532,38.257750911974,0 -122.855760992433,38.2577509116951,0 -122.855528933931,38.2576920419039,0 -122.855335273679,38.2576548808889,0 -122.855292562351,38.2576466850635,0 -122.855050439077,38.2576193456515,0 -122.854562505659,38.2576232404092,0 -122.854077876511,38.2575820768385,0 -122.853347014556,38.2576036867981,0 -122.853104434827,38.2576259111989,0 -122.852863980908,38.2576571495834,0 -122.852863979697,38.2576571497408,0 -122.852378146115,38.2576835705476,0 -122.852378141964,38.2576835707734,0 -122.852136990481,38.2577057951777,0 -122.852136988989,38.25770579531521,0 -122.85190184638,38.25775956999131,0 -122.851662452669,38.2577953141701,0 -122.851429441809,38.2578535970812,0 -122.851429440665,38.2578535973672,0 -122.851190047605,38.2578893404024,0 -122.850948171369,38.25791606747471,0 -122.850735594212,38.25793832549291,0 -122.850463036267,38.2579469874567,0 -122.850463035009,38.2579469874967,0 -122.850339024758,38.2579783707844,0 -122.850254943522,38.2580458560459,0 -122.850119587131,38.2582079057113,0 -122.849975170051,38.2584330308535,0 -122.849860990561,38.258716775776,0 -122.849860990059,38.258716777024,0 -122.849828815808,38.2589014896109,0 -122.849828815543,38.2589014911323,0 -122.84984520008,38.2590952785999,0 -122.849924105983,38.2592846423892,0 -122.849924106596,38.2592846438614,0 -122.850014826678,38.2594605022057,0 -122.850648135802,38.2605022584099,0 -122.850728336376,38.2606696220296,0 -122.85082099348,38.26086297907641,0 -122.850882408835,38.2610478124894,0 -122.850882409139,38.261047813402,0 -122.850889867393,38.2612415908549,0 -122.850823401252,38.2614262612369,0 -122.850664511401,38.2615657494754,0 -122.850468157898,38.2616826594194,0 -122.849926177161,38.2620694941767,0 -122.849926175965,38.2620694950306,0 -122.849532262533,38.2621951594647,0 -122.849532261273,38.2621951598666,0 -122.849243821212,38.2622758964269,0 -122.849031107667,38.2623567330492,0 -122.848875783547,38.2624962240206,0 -122.848850040114,38.2625156631407,0 -122.84850046761,38.2627796271841,0 -122.848319807444,38.2629055656541,0 -122.848163032948,38.2630540658685,0 -122.847970959242,38.263170977301,0 -122.847764267828,38.2632743491348,0 -122.847545468168,38.2633596802124,0 -122.84731564173,38.2634224654796,0 -122.847080485957,38.263471724166,0 -122.846820331869,38.2635164438265,0 -122.846597427876,38.2635161495203,0 -122.846597426191,38.2635161493509,0 -122.84587099254,38.2634430879089,0 -122.845870991382,38.2634430876151,0 -122.845703300591,38.2634005349927,0 -122.845638922725,38.2633841985442,0 -122.845418691555,38.2633027936651,0 -122.845212439696,38.263198875484,0 -122.845030172257,38.2630724588746,0 -122.845030171083,38.2630724579551,0 -122.844857210182,38.2629370400737,0 -122.844665279299,38.2628196223342,0 -122.844665278445,38.2628196216444,0 -122.844491971759,38.2626796972755,0 -122.844209367463,38.2623683879578,0 -122.844072537904,38.2622104866385,0 -122.843953231052,38.2620435959592,0 -122.843852123151,38.2618857420826,0 -122.843791845151,38.2616783745373,0 -122.843768321292,38.2614890813181,0 -122.843782784577,38.2609123037231,0 -122.843770703033,38.2607185192161,0 -122.843719307046,38.2605336949476,0 -122.843637896849,38.2603533362132,0 -122.843502510895,38.260190930664,0 -122.843502509718,38.2601909298953,0 -122.843315955577,38.2600690098923,0 -122.842945368588,38.259816160514,0 -122.842848776613,38.2597598756343,0 -122.842774841126,38.2597167927499,0 -122.842717930991,38.2595959905173,0 -122.842691996308,38.2595409378548,0 -122.842522737355,38.2593514465122,0 -122.842522736267,38.2593514454748,0 -122.84236660754,38.2592025292604,0 -122.842170711262,38.2591076324111,0 -122.841937401624,38.2590418683259,0 -122.841929749248,38.2590397111893,0 -122.841929748019,38.2590397110292,0 -122.84144052439,38.2589759564333,0 -122.840725600013,38.25888936083121,0 -122.8404823775,38.2588755088243,0 -122.839994465057,38.2588658249392,0 -122.8399944639,38.2588658248298,0 -122.839510559663,38.2588200955002,0 -122.839510555603,38.2588200952693,0 -122.839266980429,38.2588062396658,0 -122.839023371112,38.2588059023633,0 -122.838678638527,38.2588234481434,0 -122.838678634335,38.2588234483568,0 -122.838038445726,38.2588631148123,0 -122.838038443962,38.2588631150568,0 -122.837555716477,38.2589300339551,0 -122.837322333659,38.25898828839431,0 -122.837109239223,38.2590781143209,0 -122.836693715427,38.2592803114195,0 -122.836688414384,38.2592839769768,0 -122.836511614822,38.2594062297316,0 -122.836202318101,38.2597032046195,0 -122.836065499313,38.2598652364444,0 -122.836058745033,38.2598774389127,0 -122.835968298238,38.2600408421536,0 -122.835891089245,38.26022098247141,0 -122.835828515486,38.2604056497668,0 -122.835795570444,38.2605993704068,0 -122.835805142208,38.26078864548081,0 -122.835855077667,38.2609779772777,0 -122.835927172569,38.2611628347142,0 -122.836301875288,38.2616410232847,0 -122.836425420247,38.2618214469259,0 -122.836635748802,38.2621687220862,0 -122.83672644117,38.2623445925087,0 -122.836774962038,38.2625294155135,0 -122.836774962291,38.262529416474,0 -122.836798377627,38.2629169838052,0 -122.836767505944,38.2632999696103,0 -122.836765092545,38.2634165852792,0 -122.83676349597,38.2634937316674,0 -122.836740563874,38.2636829602112,0 -122.8367383707,38.2638632075052,0 -122.836733809182,38.2641425863583,0 -122.836666028413,38.26425965243001,0 -122.836602708128,38.2642989533956,0 -122.836492172751,38.2643675577591,0 -122.836277959907,38.2644708993079,0 -122.83604350695,38.2645201370725,0 -122.835555831459,38.2645464851748,0 -122.835312958546,38.2645281162635,0 -122.835074423796,38.2644872222638,0 -122.834835552898,38.2644373140993,0 -122.834605296898,38.2643693931926,0 -122.834390800443,38.2642834695674,0 -122.834390799328,38.2642834690692,0 -122.833965780257,38.2640936014212,0 -122.833766698826,38.263985166936,0 -122.833604482816,38.2638452422525,0 -122.833469080765,38.2636963428685,0 -122.833358421073,38.263506922789,0 -122.833263754093,38.2633535759896,0 -122.833164573868,38.2629884280759,0 -122.833132587918,38.26276307158721,0 -122.833140270855,38.2623755472455,0 -122.83314027131,38.2623755440023,0 -122.83316678349,38.26218632382411,0 -122.833270995814,38.2617628881585,0 -122.83330453972,38.2616232437171,0 -122.833302422545,38.2614565100887,0 -122.833260372355,38.26125817628841,0 -122.833236928776,38.2610463495378,0 -122.833237007308,38.2608570878804,0 -122.833245392443,38.2604740706258,0 -122.833245392498,38.26047406966531,0 -122.833267361648,38.2600865666079,0 -122.833270288289,38.2599018154821,0 -122.833287341861,38.25973060418701,0 -122.833290034625,38.2597035697967,0 -122.833327717155,38.2596270188155,0 -122.83348080736,38.259537113177,0 -122.833607800677,38.2594561830263,0 -122.833654759932,38.2593841512186,0 -122.833654760116,38.2593841502125,0 -122.833669592707,38.2593030599955,0 -122.83364605433,38.259131790339,0 -122.83364605409,38.2591317890346,0 -122.833592076916,38.25883880713051,0 -122.833593744676,38.2587351665246,0 contacts #khStyle84754 1 -122.833593744676,38.2587351665246,0 -122.833826414291,38.2589878480691,0 -122.833910382085,38.2591321671086,0 -122.833942177958,38.2592854247751,0 -122.83388753145,38.2600604174624,0 -122.833863613526,38.2602090890426,0 -122.833697909782,38.2608126861129,0 -122.833664077874,38.2610106841803,0 -122.833600145918,38.26138483694501,0 -122.833560327798,38.2617678091523,0 -122.833553094478,38.26196156651101,0 -122.83356786039,38.2625293722536,0 -122.833610628194,38.2627277072695,0 -122.833687025508,38.2629035594258,0 -122.833803422363,38.2630839745828,0 -122.83391197919,38.26325536701851,0 -122.834054168865,38.2634042756804,0 -122.834263578624,38.2635262422738,0 -122.834472336402,38.2636211705772,0 -122.834708580326,38.2637251499314,0 -122.834708581525,38.2637251504592,0 -122.834915626018,38.2637885317009,0 -122.835156014953,38.2637978855247,0 -122.835413970339,38.2637802261869,0 -122.835659139161,38.2637310055109,0 -122.835862563235,38.2636591928468,0 -122.836049675809,38.2635332826148,0 -122.836049676928,38.2635332816888,0 -122.836218243724,38.2633938273262,0 -122.836274174393,38.2633037816525,0 -122.836306886057,38.2632137031735,0 -122.836335177481,38.2630244816241,0 -122.836297383838,38.2628351669,0 -122.836204874874,38.2626728123883,0 -122.835940219157,38.2623389778312,0 -122.835560198443,38.2618427561558,0 -122.835443381404,38.2616893790722,0 -122.835354152295,38.2614999911523,0 -122.835304920967,38.2613151660869,0 -122.835301817712,38.2611465076092,0 -122.835301107177,38.2611078738931,0 -122.83529155692,38.260909586722,0 -122.8352880066,38.2607428512995,0 -122.835259705148,38.2601524961077,0 -122.835257636661,38.2599632301974,0 -122.835283796315,38.2597695012487,0 -122.835283796539,38.2597695001717,0 -122.835323162315,38.2595802939338,0 -122.835479733947,38.2592155116794,0 -122.835620472429,38.2590579928624,0 -122.835808992395,38.2589365916433,0 -122.836015679037,38.2588377460965,0 -122.836015680925,38.2588377452456,0 -122.836862747009,38.2584559089813,0 -122.837090545407,38.2583390666358,0 -122.83724516916,38.2581995907765,0 -122.837345294678,38.2581501614647,0 -122.837446442079,38.2581232660802,0 -122.837930798559,38.2581239427215,0 -122.838185916235,38.2580882492263,0 -122.838396475663,38.258011935638,0 -122.838834420874,38.2578413072434,0 -122.839256340484,38.25764812388041,0 -122.8394804707,38.2575718281929,0 -122.839480471843,38.25757182786661,0 -122.839716010236,38.257504559613,0 -122.839856406732,38.2574957412211,0 -122.839856407874,38.2574957411494,0 -122.839970271094,38.2575319475222,0 -122.840160712662,38.2576673966199,0 -122.840359161709,38.257735261919,0 -122.840359162772,38.2577352622825,0 -122.840595513851,38.2577851564391,0 -122.84059551498,38.2577851566775,0 -122.840757580278,38.2578004481769,0 -122.841080127458,38.2578308823475,0 -122.841313613349,38.2578852763083,0 -122.841534538224,38.2579666898409,0 -122.841541709351,38.2579707254484,0 -122.841727186506,38.2580751022371,0 -122.842141784175,38.2582874592517,0 -122.842328303383,38.2584229000123,0 -122.842508788641,38.2585403063542,0 -122.842508789718,38.2585403070545,0 -122.842809831128,38.2587389890149,0 -122.843111032199,38.2588655692459,0 -122.843301861212,38.2589920022648,0 -122.843504505669,38.2591049310089,0 -122.843906261236,38.2593127571793,0 -122.84390626457,38.2593127589035,0 -122.844135441008,38.2593806588141,0 -122.84413544234,38.2593806592089,0 -122.844327721054,38.2594980793751,0 -122.844494233588,38.2596379955812,0 -122.844808299245,38.2599313195937,0 -122.844808300082,38.2599313203752,0 -122.845130246756,38.260215642981,0 -122.845320357242,38.2603465769632,0 -122.845735673273,38.2605679343877,0 -122.845735674981,38.2605679352977,0 -122.845959479097,38.2606448378528,0 -122.84642144634,38.2607671178515,0 -122.84642144745,38.2607671181453,0 -122.846643824371,38.2608440175902,0 -122.847284780054,38.2611242486025,0 -122.847718776757,38.2613005615128,0 -122.847948330448,38.26136395006471,0 -122.848185066497,38.2614093225653,0 -122.848428289571,38.2614276652785,0 -122.848428290726,38.2614276652586,0 -122.84862814519,38.2614242340378,0 -122.848672273688,38.2614234763438,0 -122.848936628679,38.2614148084056,0 -122.849125715473,38.2613564737699,0 -122.849125716883,38.2613564731101,0 -122.849260159241,38.261293561137,0 -122.849315358638,38.2612035078178,0 -122.849384685308,38.2610188432466,0 -122.849388661377,38.2608250801744,0 -122.849306523462,38.2606447250473,0 -122.849306522671,38.2606447240347,0 -122.849179694838,38.2604823349182,0 -122.849040000561,38.2603244353235,0 -122.848875620953,38.2601845283327,0 -122.848681903979,38.2600671140255,0 -122.848536828513,38.2599562754126,0 -122.848504656211,38.2599316959638,0 -122.848347432673,38.2597872913419,0 -122.848290441059,38.259720687967,0 -122.848254788102,38.2596790209377,0 -122.848245294822,38.259606908297,0 -122.848261238719,38.2594987802193,0 -122.848316746398,38.2594312583972,0 -122.848418203779,38.2592556486778,0 -122.848418204214,38.2592556475856,0 -122.848491817309,38.2590709892153,0 -122.848550428372,38.2588863102244,0 -122.84857582893,38.25869708163741,0 -122.84857582883,38.2586970806562,0 -122.84853698356,38.2583140013389,0 -122.84840102877,38.2579082639989,0 contacts #khStyle84754 1 -122.84840102877,38.2579082639989,0 -122.848401028419,38.2579082629497,0 -122.84844120514,38.2578272030575,0 -122.848744446359,38.2574941376428,0 contacts #khStyle84754 1 -122.848596307758,38.257277645101,0 -122.848708888401,38.2572462490747,0 -122.848787038576,38.2572824010145,0 -122.848826225968,38.25733201992711,0 -122.848831846005,38.2573770901605,0 -122.848791718383,38.2574356182015,0 -122.848744446359,38.2574941376428,0 contacts #khStyle84754 1 -122.824235556101,38.2585591677483,0 -122.824290425147,38.2584691270764,0 -122.824290425938,38.2584691256585,0 -122.824388366702,38.2582935322258,0 -122.824616361957,38.2579559105858,0 -122.824616362597,38.2579559092298,0 -122.82478654669,38.2575956679511,0 -122.824883771362,38.2574200712407,0 -122.825037269815,38.2571634471216,0 contacts #khStyle84754 1 -122.876105961258,38.2611225706159,0 -122.875974413727,38.26077995135571,0 -122.875938015412,38.2605500979413,0 -122.875892300676,38.2603382554015,0 -122.875874541427,38.2600723696746,0 -122.875728032702,38.2596891828751,0 -122.875719406916,38.2595134301791,0 -122.875756206199,38.2593016760583,0 -122.875831863741,38.2589277399785,0 -122.875885778341,38.2587340292191,0 -122.875895180162,38.2586664462968,0 -122.875821682339,38.258616799606,0 -122.87566558984,38.2586166321582,0 -122.875343945113,38.2587109170734,0 -122.875160212133,38.2587873247374,0 -122.874957959996,38.25883216928581,0 -122.874691474927,38.258840893865,0 -122.874581496965,38.2588182424518,0 -122.87448057344,38.258723502534,0 -122.874324619507,38.2586422206017,0 -122.874159236247,38.2586420410709,0 -122.873966082834,38.2587950442586,0 -122.873405130171,38.2590828317837,0 -122.87305589869,38.2592221429496,0 -122.872669930966,38.2593298677733,0 -122.872421628917,38.2593566322479,0 -122.872201263037,38.259342871644,0 -122.871751328957,38.2592612616892,0 -122.871365897866,38.2590670659638,0 -122.871200811558,38.2589001516966,0 -122.871100428861,38.2587062736677,0 -122.870981656116,38.2584087277378,0 -122.870936263662,38.25802564954791,0 -122.870982517236,38.2577282893573,0 -122.871177406851,38.2572057809501,0 -122.871195352902,38.2569579591826,0 -122.871094396066,38.2568857466059,0 -122.870901515253,38.25688553190551,0 -122.870377379081,38.2571598283054,0 -122.870037277277,38.257190990276,0 -122.869807725517,38.2571231396503,0 -122.869635357665,38.2570373257285,0 -122.869330962169,38.2566809928754,0 -122.869092865989,38.2564013354633,0 -122.868964345151,38.2563651421842,0 -122.868844638184,38.2563920465231,0 -122.868384912025,38.256797083483,0 -122.868219360057,38.2568915260204,0 -122.867989607375,38.2569363273111,0 -122.867622059269,38.2569359081867,0 -122.867318912585,38.2568769811771,0 -122.867089745882,38.2567956058226,0 -122.866884628869,38.2566511698583,0 -122.866614803913,38.2564577511906,0 contacts #khStyle84754 1 -122.819372311664,38.2584120235029,0 -122.8188793808,38.25798316574,0 -122.81887937913,38.2579831647888,0 -122.818681063818,38.25787020073391,0 -122.818465500008,38.2577977647114,0 -122.818465498932,38.2577977643498,0 -122.818253598973,38.2576892845003,0 -122.818052782303,38.257576315096,0 -122.817841172013,38.2574948711888,0 -122.817646441092,38.2573774045602,0 -122.817585101849,38.2573241013843,0 -122.817475007436,38.2572284301875,0 -122.817250094488,38.25698389683731,0 -122.817188611765,38.2569170510307,0 -122.817188610948,38.2569170502004,0 -122.816966653707,38.2566913903707,0 -122.816784412746,38.256438754746,0 -122.816605433405,38.256168099063,0 contacts #khStyle84754 1 -122.839151254714,38.2560753038589,0 -122.839151255417,38.2560753070766,0 -122.83915190031,38.2560781245545,0 -122.839163635801,38.2561293957812,0 -122.839214613656,38.2561745282174,0 -122.839378908359,38.2561792621419,0 -122.839524249639,38.2561688196291,0 -122.839625049303,38.2561615780466,0 -122.839799365758,38.2561573111862,0 -122.839856248814,38.2561168344993,0 -122.839843866501,38.2560627420069,0 -122.83981859622,38.2560221510886,0 contacts #khStyle84754 1 -122.825037269815,38.2571634471216,0 -122.825143229817,38.2569202703777,0 -122.825276842365,38.2567627532356,0 -122.82540011122,38.2566778672393,0 -122.825459670058,38.2566368534254,0 -122.826094014398,38.2563494055256,0 -122.82632100009,38.2562776445979,0 -122.826592591443,38.2562239750055,0 -122.826778154426,38.2561476462667,0 -122.827008732913,38.2560668774458,0 -122.827208213416,38.2560236015311,0 -122.827235663724,38.2560176464796,0 -122.827235665221,38.2560176460619,0 -122.827476567338,38.2559504106424,0 -122.827777834631,38.2558832638682,0 -122.827976493845,38.25585652125781,0 contacts #khStyle84754 1 -122.825037269815,38.2571634471216,0 -122.825202444659,38.2571006085475,0 -122.825389816167,38.2570573097944,0 -122.825570556378,38.2570155421881,0 -122.825811724663,38.256988867212,0 -122.826054970556,38.2569892313783,0 -122.82629671194,38.25702113630221,0 -122.826296713187,38.2570211364668,0 -122.826533496086,38.2570350085991,0 -122.826687055342,38.2569751499634,0 -122.826752300869,38.2569497160558,0 -122.827280470336,38.2565494479859,0 -122.827358438256,38.2564525702932,0 -122.827410873675,38.2563874173924,0 -122.827527368288,38.2562163538074,0 -122.827527369177,38.2562163528588,0 -122.827670605698,38.2560633544295,0 -122.827670606461,38.2560633536142,0 -122.827976493845,38.25585652125781,0 contacts #khStyle84754 1 -122.827976493845,38.25585652125781,0 -122.828030817681,38.2558430817846,0 -122.828293182744,38.2557623579441,0 -122.828727624526,38.2557179372758,0 -122.828727625873,38.2557179369607,0 -122.828893577979,38.2556791137415,0 -122.829512430276,38.2555343355646,0 -122.829512434201,38.2555343347656,0 -122.829644298394,38.25550749065901,0 contacts #khStyle84754 1 -122.835395754011,38.2654654098419,0 -122.834772567861,38.2654240875699,0 -122.834598842851,38.2654009721529,0 -122.834532939194,38.2653922027416,0 -122.834300872716,38.2653332913512,0 -122.833629809433,38.2651025146773,0 -122.833526042077,38.2650212543693,0 -122.833447795229,38.2649877636269,0 -122.833420406245,38.2649760407398,0 -122.83325365748,38.2649486940039,0 -122.83319865054,38.2649396728295,0 -122.832479442619,38.264830488536,0 -122.8319922056,38.2648207729631,0 -122.831756907914,38.2647708640807,0 -122.831526285583,38.2647074426574,0 -122.830848785632,38.2644856537279,0 -122.830617440424,38.2644267358688,0 -122.83014757486,38.2643224069683,0 -122.829700332599,38.264168540881,0 -122.829484781669,38.2640781006661,0 -122.829289299748,38.2639606517181,0 -122.829124645803,38.2637981855865,0 -122.829040388389,38.2636268253766,0 -122.829040387918,38.26362682411,0 -122.829010217058,38.26354566876481,0 -122.828999409132,38.2634329979011,0 -122.829025689036,38.2633474186978,0 -122.829025689691,38.2633474178272,0 -122.829093417116,38.2632573927938,0 -122.82920760593,38.2631346076969,0 -122.829239891877,38.2630998904279,0 -122.829398120133,38.2629559269015,0 -122.829398123966,38.2629559234143,0 -122.82951236842,38.262891143697,0 -122.829596288192,38.2628435577898,0 -122.829768786105,38.2627086245374,0 -122.829969784822,38.2626052762298,0 -122.829969786181,38.2626052758239,0 -122.830510635859,38.2624438408493,0 -122.830694182986,38.26231793469,0 -122.830855992357,38.2621694652951,0 -122.830937490994,38.261993841069,0 -122.830984739438,38.2618001413916,0 -122.83098482466,38.2616108803157,0 -122.830908088543,38.2614305196639,0 -122.830799897206,38.2612591256208,0 -122.830725231299,38.2611103114375,0 -122.830697506166,38.2610516901144,0 -122.830642616222,38.2606956182072,0 -122.83064261577,38.2606956169809,0 -122.830506314363,38.260325909001,0 -122.830397758276,38.2601590200745,0 -122.830225251853,38.2599965441217,0 -122.830225250828,38.259996542669,0 -122.830117021695,38.25984317439,0 -122.830031002548,38.2596628000603,0 -122.829963472908,38.2595185015493,0 -122.829963472595,38.2595185006333,0 -122.829927995819,38.2594148065707,0 -122.82991864912,38.25928861834151,0 -122.829977275036,38.25899356042,0 -122.830031430696,38.2587209986296,0 -122.830110795019,38.2585408655357,0 -122.830266167649,38.2583923869939,0 -122.830442225276,38.2582574571017,0 -122.830727281023,38.25794694281321,0 -122.830848045816,38.2577803887426,0 -122.831045324256,38.2574291892352,0 -122.831133255741,38.2572490676757,0 -122.831133256101,38.257249066439,0 -122.831188347466,38.2570598860674,0 -122.831241738968,38.2566814404927,0 -122.831221831905,38.2564876438859,0 -122.831191323549,38.2563974742996,0 -122.831139028476,38.2563072748602,0 -122.830995798456,38.2561538540064,0 -122.830823602526,38.2560139104884,0 -122.830614936003,38.2558919385566,0 -122.830201004756,38.2557200979079,0 -122.829871654624,38.2555799237289,0 -122.829871653384,38.2555799233339,0 -122.829644298394,38.25550749065901,0 contacts #khStyle84754 1 -122.829644298394,38.25550749065901,0 -122.829810567741,38.2554311287478,0 -122.830009697051,38.2553548141838,0 -122.830009698514,38.2553548139224,0 -122.830234817874,38.2553145864139,0 -122.830234818883,38.2553145859824,0 -122.830413231003,38.2552382410557,0 -122.830650935626,38.255161982252,0 -122.830893451023,38.2551668405249,0 -122.831125113369,38.2552302649817,0 -122.831405573708,38.2553523403326,0 -122.831774931352,38.2554925686289,0 -122.8319775481,38.2556055172088,0 -122.832129373694,38.2557499370608,0 -122.832216443422,38.2559393238041,0 -122.832324999463,38.2561062112025,0 -122.832357314434,38.2561873696199,0 -122.832357314845,38.2561873706521,0 -122.832368903274,38.2562730046431,0 -122.83235966012,38.25640817821541,0 -122.832397618781,38.2565208880762,0 -122.832440758768,38.2565912238311,0 -122.83248337625,38.2566607054696,0 -122.832596922609,38.2568321065011,0 -122.832600392507,38.2570303849066,0 -122.832601966464,38.2570331562891,0 -122.832741265949,38.2572784303599,0 -122.832753874631,38.25738659766021,0 -122.832756997749,38.2575803704408,0 -122.832759785602,38.25776512976,0 -122.832847890167,38.2579725430419,0 -122.833034832932,38.2582251603261,0 -122.83306820258,38.25831533352301,0 -122.833130999587,38.2585001786444,0 -122.833160976387,38.2586669521455,0 -122.833160976567,38.2586669531453,0 -122.833182307163,38.2588652572322,0 -122.833181081913,38.2589400101058,0 -122.833178982286,38.2590680323035,0 -122.833170159867,38.2591761691133,0 -122.833131048193,38.2592527188371,0 -122.833077320078,38.2593052575605,0 -122.832974597525,38.2594057058392,0 -122.832921985009,38.259450692659,0 -122.832921984147,38.2594506933956,0 -122.832840629082,38.2595677374218,0 -122.832810859047,38.2597749800684,0 -122.832810858901,38.2597749810877,0 -122.832855796561,38.2599598010333,0 -122.832869636655,38.2601535887125,0 -122.832870526229,38.2602905464311,0 -122.832873324606,38.260721378621,0 -122.832874770266,38.2610232969156,0 -122.832973011644,38.26148307459511,0 -122.83298031519,38.2615687030175,0 -122.832972205845,38.2616768395349,0 -122.832972205764,38.2616768406146,0 -122.832927962691,38.2618055567345,0 -122.832845255997,38.2620461687786,0 -122.832805167495,38.2622353726019,0 -122.8328051673,38.2622353735187,0 -122.83280256175,38.2622659255286,0 -122.832788644385,38.262429116511,0 -122.832795351619,38.2626183883137,0 -122.832810987756,38.2628076715854,0 -122.832969016519,38.2633666708238,0 -122.832999459254,38.2634289215673,0 -122.833132209768,38.2637003658219,0 -122.83325349316,38.2639303568209,0 -122.833366830136,38.2640431759078,0 -122.833596927352,38.2641786924606,0 -122.834001533463,38.264391064038,0 -122.834424117402,38.2645538903349,0 -122.834662191559,38.2646398476179,0 -122.835350830561,38.264839099209,0 -122.835350832259,38.2648390997003,0 -122.83559900983,38.2648800065273,0 -122.835599011578,38.2648800068154,0 -122.835612186911,38.2648793163595,0 -122.835850173654,38.264866843337,0 -122.836004352229,38.2648391557058,0 -122.836074246923,38.2648266033318,0 -122.836538204679,38.2647055893703,0 -122.836745610322,38.2646112503022,0 -122.836923457184,38.2644763133543,0 -122.837043860388,38.2643097516192,0 -122.837043861998,38.264309748576,0 -122.837136778752,38.26413413952991,0 -122.83718579794,38.2639404405675,0 -122.837196938608,38.2638685806949,0 -122.837214434872,38.2637557254691,0 -122.837210041087,38.2633276279048,0 -122.837226448126,38.2632313694344,0 -122.837235381524,38.26317895796681,0 -122.837279031367,38.2629897576341,0 -122.837308034881,38.2628005378469,0 -122.837308034723,38.2628005367989,0 -122.83727952706,38.2626112348837,0 -122.837122459527,38.26224601092801,0 -122.837024621742,38.26207013089281,0 -122.836908556367,38.2618987314124,0 -122.836813435447,38.2617859429649,0 -122.836813434626,38.2617859423014,0 -122.8367631596,38.2617453147524,0 -122.836379553445,38.2612535971952,0 -122.836295700064,38.26111717845521,0 -122.83627420723,38.2610822116062,0 -122.836195672463,38.2609018523859,0 -122.836153278146,38.2606945068401,0 -122.836166546663,38.260514275815,0 -122.836195214352,38.2603160421713,0 -122.836270278757,38.2601358988624,0 -122.836330591574,38.2600319598733,0 -122.836361723152,38.2599783097088,0 -122.836535682154,38.25982083691851,0 -122.836856396527,38.2595283824741,0 -122.836856397564,38.2595283818152,0 -122.837047416789,38.25940698241781,0 -122.837264788009,38.2593216687365,0 -122.837494610069,38.2592589032091,0 -122.837730473782,38.2592096643546,0 -122.838205741985,38.2591247088376,0 -122.838655200165,38.2590802716453,0 -122.838655201441,38.2590802715481,0 -122.838945653778,38.2590581434855,0 -122.839403950944,38.2590542717051,0 -122.839887876835,38.2590909894997,0 -122.839890931234,38.2590911582036,0 -122.84013895813,38.2591048540061,0 -122.840395407746,38.2591142190971,0 -122.840616822007,38.2591370542499,0 -122.840855343049,38.2591779369188,0 -122.841579566556,38.2592600396741,0 -122.841579568436,38.2592600398872,0 -122.841811628631,38.2593144304838,0 -122.842022160562,38.2594138539177,0 -122.842204415306,38.2595402768622,0 -122.842349451772,38.2596981912084,0 -122.842476619436,38.2598605879979,0 -122.842622024727,38.2600139969025,0 -122.843107597512,38.2604472518353,0 -122.84324299378,38.2606051525993,0 -122.843352989641,38.2607810439993,0 -122.843387943401,38.2609703522984,0 -122.843416707559,38.2615426832714,0 -122.84344414059,38.2617409935085,0 -122.84350126131,38.2619213196071,0 -122.843609116547,38.26209720778,0 -122.843723798397,38.262255080127,0 -122.844005287477,38.2625844124497,0 -122.844202758569,38.2627829522896,0 -122.844453368431,38.2630221182877,0 -122.84461592103,38.2631800538613,0 -122.844616999583,38.2631809539877,0 -122.844940410652,38.2634508612369,0 -122.845042148239,38.26351401378921,0 -122.845144113437,38.2635773074309,0 -122.845343201987,38.2636902284448,0 -122.845559852988,38.2637761349928,0 -122.845559854521,38.2637761356004,0 -122.845789402085,38.2638440330175,0 -122.846024707974,38.2638939144755,0 -122.846509363716,38.2639396184113,0 -122.846626355024,38.2639310676345,0 -122.846751599631,38.2639219135009,0 -122.846951942164,38.2638882420006,0 -122.846991026106,38.2638816729197,0 -122.84722370054,38.2638233990369,0 -122.847223701725,38.2638233986321,0 -122.847447128084,38.2637470866758,0 -122.847571642625,38.2636917725621,0 -122.847659517576,38.26365273412911,0 -122.848082162521,38.2634595208864,0 -122.848281720021,38.26335163222,0 -122.849001174103,38.2628343541932,0 -122.849001175367,38.2628343533308,0 -122.849198998303,38.262699424608,0 -122.849369221897,38.26260952101021,0 -122.849369223018,38.2626095205612,0 -122.849817547283,38.2624298528295,0 -122.850061299477,38.2623670803866,0 -122.850262627446,38.2622636973769,0 -122.850822779967,38.2618994149225,0 -122.850822781069,38.2618994140006,0 -122.850989530777,38.2617599354565,0 -122.851087593974,38.26166993604001,0 -122.851161411511,38.26155737542401,0 -122.851197063439,38.2614177280284,0 -122.851226744797,38.2612285044416,0 -122.851240360537,38.2610347539968,0 -122.851230044982,38.2608409728854,0 -122.851166484225,38.2606561360558,0 -122.851166483819,38.260656134873,0 -122.850984328847,38.2602999101379,0 -122.85087251988,38.2601285297989,0 -122.850609921716,38.2598082497899,0 -122.850609921043,38.259808248765,0 -122.850497399986,38.2596368681599,0 -122.850401676594,38.25946100184331,0 -122.850353132208,38.2592716775808,0 -122.85035639181,38.2590779136219,0 -122.850452538448,38.2587040205681,0 -122.850479635419,38.2585553498222,0 -122.85050727106,38.2584922981889,0 -122.850566375905,38.2584112628627,0 -122.85063332213,38.2583392490097,0 -122.850734162219,38.2582853035254,0 -122.850837832232,38.2582448810382,0 -122.851297108185,38.2581102827011,0 -122.85177094342,38.2580162581365,0 -122.852010338812,38.2579805135304,0 -122.852496882872,38.2579586018926,0 -122.852740490482,38.2579589112715,0 -122.852983711436,38.2579727382442,0 -122.85322697926,38.2579640336646,0 -122.853466372768,38.2579282862947,0 -122.854195149387,38.2578796355863,0 -122.854693765185,38.25789377965211,0 -122.855410170405,38.2579577617233,0 -122.855849561957,38.2581160262543,0 -122.85608664974,38.2581613831168,0 -122.856086650899,38.2581613833386,0 -122.856561905934,38.2582475896921,0 -122.857049077502,38.2582707227674,0 -122.857049079492,38.2582707228619,0 -122.85754392005,38.2583884930635,0 -122.857880301949,38.2584384733172,0 -122.858885815791,38.258619950868,0 -122.859570249126,38.2587830053246,0 -122.8597573425,38.2588237886663,0 -122.859850124496,38.2588689620871,0 -122.859850125751,38.2588689626981,0 -122.859947484099,38.2589501922171,0 -122.860003798143,38.2590133479322,0 -122.860174067874,38.2594416451547,0 -122.860262409575,38.2595679261162,0 -122.860412173149,38.2597032936457,0 -122.86059981816,38.25982969357221,0 -122.860755270574,38.2599785853327,0 -122.860755271432,38.2599785861543,0 -122.860852450245,38.2601544450993,0 -122.860900307765,38.2603437656555,0 -122.860910301825,38.2605330384798,0 -122.860881248245,38.2606251693368,0 -122.860850640391,38.2607222286413,0 -122.86075920398,38.2609023688637,0 -122.860649210512,38.2610734728467,0 -122.860520302045,38.261235541475,0 -122.860520301414,38.2612355422679,0 -122.860368556118,38.26138406519781,0 -122.860368554819,38.2613840664696,0 -122.860330484475,38.2614173732472,0 -122.860203959561,38.2615280663729,0 -122.860047177239,38.2616946078369,0 -122.859880765658,38.2620368795251,0 -122.859880765235,38.2620368803947,0 -122.859767918668,38.2622034745742,0 -122.859720937446,38.2624828040235,0 -122.859688733261,38.2626945578711,0 -122.859718216236,38.2628675424322,0 -122.85975018836,38.2630551305631,0 -122.859771619278,38.2632399087137,0 -122.859771620389,38.2632399117083,0 -122.859845179641,38.2634382752392,0 -122.859945538857,38.2636321647467,0 -122.860039557845,38.2637809829078,0 -122.860039558459,38.2637809838789,0 -122.860197145344,38.2639388916502,0 -122.860375146523,38.2640697860141,0 -122.860375147736,38.2640697869062,0 -122.860772668078,38.2642910687569,0 -122.860995064293,38.2643724482693,0 -122.861014160339,38.2643761168457,0 -122.861231101592,38.2644177935189,0 -122.861231103179,38.2644177938236,0 -122.861471447396,38.2644541302999,0 -122.861677837807,38.2644658470916,0 -122.861714691426,38.2644679392344,0 -122.86171469269,38.26446793930621,0 -122.86195587127,38.2644411894096,0 -122.862418355374,38.2643200707584,0 -122.862612194061,38.2642031391607,0 -122.862828844488,38.2641132707766,0 -122.863053675918,38.264041436318,0 -122.863514020002,38.2639158050115,0 -122.863657268854,38.2638673211067,0 -122.863739573251,38.2638394635875,0 -122.863961553257,38.2637631191649,0 -122.864176771298,38.263673246895,0 -122.864411236449,38.2636059278873,0 -122.864622872796,38.2635205568353,0 -122.865316934426,38.2633411160222,0 -122.86575769787,38.2631748971371,0 -122.865987865598,38.263112076134,0 -122.86598786708,38.2631120759694,0 -122.866228681859,38.2630853165803,0 -122.866842477047,38.2630364547461,0 -122.867198250971,38.2630458758177,0 -122.867428608081,38.2630731765743,0 -122.867428609549,38.2630731767483,0 -122.867665354217,38.2631230155119,0 -122.867693913556,38.2631318536648,0 -122.867899200845,38.2631953819719,0 -122.86811049346,38.2632947603275,0 -122.868110495268,38.2632947611776,0 -122.868248807128,38.263452635221,0 -122.868248808159,38.2634526363978,0 -122.868344936337,38.2636284872832,0 -122.868405326923,38.2638133113117,0 -122.868485032589,38.2639846385338,0 -122.868747691744,38.2643229022383,0 -122.868747692485,38.2643229031935,0 -122.868932186533,38.264625029632,0 -122.869028235857,38.2648459435987,0 -122.869084925642,38.2651028628403,0 -122.8692540788,38.2653959586063,0 -122.869435630048,38.2657476491705,0 -122.869512100661,38.2659324906906,0 -122.869553554418,38.2661217997478,0 -122.869673558402,38.2665320007942,0 -122.869766179409,38.2666763042375,0 -122.869932026004,38.2668251964639,0 -122.869986737874,38.2668645044025,0 -122.870107917513,38.2669515677584,0 -122.87030705323,38.2670644471403,0 -122.870523744103,38.2671503078062,0 -122.87094636878,38.2673445471919,0 -122.871172016737,38.2674168973405,0 -122.871406271233,38.2674712318328,0 -122.871648455978,38.2674850202544,0 -122.872145013611,38.26749007493441,0 -122.872377633682,38.2674587878549,0 -122.872602123787,38.2673779231729,0 -122.872800234993,38.2672654848778,0 -122.872947688185,38.2671124349446,0 -122.873056148946,38.2669627097486,0 -122.873068371655,38.266945836803,0 -122.873151211143,38.26676567840741,0 -122.87321691077,38.2665809949586,0 -122.873264398946,38.2663917853128,0 -122.873264556887,38.2660988805938,0 -122.87327839316,38.2659501906547,0 -122.873319007245,38.2658105419538,0 -122.873339867681,38.2657294520176,0 -122.873396834754,38.2656348836182,0 -122.873405336054,38.2654726696816,0 -122.873405335675,38.2654726687511,0 -122.873368699635,38.2653825040007,0 -122.873218289003,38.2651885715894,0 -122.873177358214,38.2651029084148,0 -122.873165233043,38.2650216485756,0 -122.873163235947,38.2650082627829,0 -122.873171991,38.2649046283898,0 -122.873171991631,38.264904625184,0 -122.873231465403,38.2646027760907,0 -122.873244468501,38.2645216781959,0 -122.873244468763,38.2645216772438,0 -122.873269275425,38.2644315807053,0 -122.873334441147,38.2643460335999,0 -122.873391001631,38.2642785019743,0 -122.873456907675,38.2642366588135,0 -122.873504369093,38.264206525127,0 -122.873727042721,38.2641346703799,0 -122.873727046492,38.2641346691633,0 -122.873969300305,38.2641033896223,0 -122.874211895354,38.2640811221739,0 -122.874455522672,38.26408138674231,0 -122.874455523841,38.2640813867435,0 -122.874691917442,38.2641312105921,0 -122.874691919322,38.2641312109883,0 -122.874906455615,38.2642215680263,0 -122.875236397837,38.26450581656,0 -122.875598538842,38.2647630607239,0 -122.87595102247,38.2650293064348,0 -122.875951457327,38.2650295204743,0 -122.876106070667,38.2651056219091,0 contacts #khStyle84754 1 -122.823658352325,38.2584005768454,0 -122.823802467066,38.258333201908,0 -122.823987120123,38.2581937885283,0 -122.824121094702,38.25803627329811,0 -122.824211903047,38.25785616152,0 -122.824530493909,38.2571311399545,0 -122.82463236225,38.2569555508287,0 -122.825195030811,38.2563255257908,0 -122.825363949605,38.2561905930392,0 -122.825556052571,38.2560692134221,0 -122.825762743304,38.2559703860926,0 -122.825927637233,38.2559107728392,0 -122.825986176953,38.2558896091958,0 -122.825986178739,38.2558896087479,0 -122.826450441898,38.2557731409083,0 -122.826450443355,38.2557731407195,0 -122.826931719521,38.2557107702506,0 -122.827154687067,38.2556750525473,0 -122.827376691265,38.25559427024431,0 -122.827582650032,38.2555506199369,0 -122.827630062543,38.2555405714075,0 -122.828104959815,38.2554556564168,0 -122.828104961268,38.2554556562841,0 -122.828347540326,38.2554334829483,0 -122.828822091856,38.2553440585266,0 -122.829080029997,38.2553219068886,0 -122.829305213711,38.2552546442897,0 -122.830178925904,38.2549314751879,0 -122.830394159145,38.2548416649204,0 -122.830501418442,38.2547967590551,0 -122.830620422652,38.2547698958693,0 -122.830752599489,38.2547610759584,0 -122.830752600965,38.2547610759606,0 -122.830862609108,38.2547612353049,0 -122.830862610242,38.2547612356054,0 -122.831136040972,38.2548337320265,0 -122.831973248921,38.2551503813641,0 -122.83206164043,38.255206819273,0 -122.832355224919,38.25539426996411,0 -122.832461099259,38.2554845471064,0 -122.832495914868,38.2555657095724,0 -122.832562668105,38.25573704221131,0 -122.832686826454,38.2561067326225,0 -122.832849175666,38.2564899955572,0 -122.832876567467,38.2566928157937,0 -122.833113940979,38.257224891324,0 -122.833143191537,38.2573961697731,0 -122.83315505972,38.2576710670708,0 -122.833224399672,38.2578063538027,0 -122.833282782261,38.2578845215525,0 -122.833443399384,38.2580995724228,0 contacts #khStyle84754 1 -122.816605433405,38.256168099063,0 -122.816373791866,38.2561001402246,0 -122.816052831748,38.2560410521822,0 -122.815668545965,38.255882725932,0 -122.815417064901,38.2557516465822,0 -122.815164973988,38.2555800096746,0 -122.814947012423,38.2553318206434,0 -122.814791409243,38.2550026183849,0 -122.814704869704,38.254623957411,0 -122.814716404336,38.254304033556,0 -122.814756005653,38.2540427353496,0 -122.814809812883,38.253813003334,0 -122.814864506808,38.2536553723621,0 -122.814890707437,38.2534661524231,0 -122.814896491548,38.253299431138,0 -122.814826071532,38.2531821571109,0 -122.814721190358,38.2531324216095,0 -122.814589497708,38.2532313488643,0 -122.814360607911,38.2533481458407,0 -122.814103881138,38.253455885434,0 -122.813839780516,38.2535140441434,0 -122.813484440828,38.2534954501375,0 -122.813205916531,38.2534679659445,0 -122.812948026864,38.2534720578684,0 -122.812746799218,38.2535258089455,0 -122.812420936566,38.2537100394506,0 -122.812178604164,38.253912428818,0 -122.811902221668,38.2541598249181,0 -122.811680397822,38.2543036654191,0 -122.811479623039,38.2544565520556,0 -122.811285119204,38.2545328426395,0 -122.811076732107,38.2545910854477,0 -122.810853877073,38.2545817109514,0 -122.81064471274,38.25452729603421,0 -122.810532402581,38.2544505073476,0 -122.81039862368,38.2542520154216,0 -122.810279539688,38.254170709226,0 -122.810091140409,38.2540983022642,0 -122.809882228669,38.2540844424532,0 -122.809340764699,38.2542142371858,0 contacts #khStyle84754 1 -122.810848421178,38.2524322310006,0 -122.810797181774,38.2524952353934,0 -122.810647489855,38.2527833901472,0 -122.810527390141,38.2529544313633,0 -122.810500639684,38.2529784380125,0 -122.810367000495,38.2530983694275,0 -122.809983131286,38.2533365729208,0 -122.809983130309,38.2533365735271,0 -122.809802784724,38.25346245361261,0 -122.8097777897,38.2534915213003,0 -122.809667358638,38.2536199497136,0 -122.809514231159,38.2539892091076,0 -122.809379434779,38.2541782513947,0 -122.809379364308,38.25417831611751,0 -122.809340764699,38.2542142371858,0 contacts #khStyle84754 1 -122.856099866393,38.2522492183762,0 -122.855773656546,38.2521271451719,0 -122.855490411838,38.251955556625,0 contacts #khStyle84754 1 -122.833443399384,38.2580995724228,0 -122.833443399737,38.25809956935661,0 -122.833493162488,38.2576676684049,0 -122.833494791547,38.257653529382,0 -122.833542377193,38.2574643359696,0 -122.833613883295,38.2572796829,0 -122.833613883233,38.257279679636,0 -122.8336103795,38.257094922467,0 -122.83349611644,38.2569235213624,0 -122.833361472951,38.2567611053853,0 -122.833208224915,38.2566121794702,0 -122.833161156021,38.2564228501197,0 -122.833161155973,38.25642284879851,0 -122.83315410188,38.2562290721651,0 -122.833100236238,38.2560442393789,0 -122.83295154577,38.2556836559812,0 -122.832949633397,38.255679018337,0 -122.832907566413,38.2554896961988,0 -122.832957384722,38.2551067413676,0 -122.832957385141,38.2551067381461,0 -122.832905815093,38.2549531857737,0 -122.832895305452,38.2549218935313,0 -122.832777476225,38.2547504866919,0 -122.832584849562,38.254642060326,0 -122.832374354921,38.2545381136275,0 -122.832297195738,38.2544368940591,0 -122.832253995369,38.2543802224652,0 -122.83228194745,38.2541864947336,0 -122.832390579206,38.2540109080972,0 -122.83254022271,38.25386241804451,0 -122.832717336258,38.2537274860106,0 -122.832910648916,38.2536239256482,0 -122.832918674851,38.2536196260264,0 -122.83334948345,38.2534399947983,0 -122.833349484993,38.2534399943453,0 -122.833578586606,38.2533727299815,0 -122.834057005559,38.2533013129097,0 -122.834241604488,38.253170896416,0 -122.834145572513,38.2529950174085,0 -122.834220614163,38.2528238866001,0 -122.834644226697,38.2523513360227,0 -122.834714628478,38.2522591373868,0 -122.834771401732,38.2521847861262,0 -122.834771403882,38.25218478331,0 -122.835216920565,38.2515004711721,0 -122.835270253295,38.2512932593204,0 -122.835099641845,38.2512434484859,0 -122.834900446699,38.2513558225475,0 -122.834561141935,38.2518239884322,0 -122.834535147637,38.2518640114578,0 -122.834450028914,38.2519950671101,0 -122.834314291866,38.2521570988447,0 -122.834148603123,38.2522965557923,0 -122.833958668366,38.2524179520148,0 -122.833958667228,38.2524179527419,0 -122.833745580125,38.2525122787653,0 -122.833517204036,38.2525750388459,0 -122.833041259967,38.2526599749854,0 -122.832880557473,38.2528039425012,0 -122.832673527398,38.2529027825377,0 -122.832223842047,38.2530598526388,0 -122.83204533107,38.2531812628371,0 -122.831906372259,38.2533432855658,0 -122.831906371616,38.2533432863165,0 -122.831741033296,38.25348274033371,0 -122.831551092591,38.2536041326184,0 -122.831551091315,38.2536041334343,0 -122.831348679294,38.253711989584,0 -122.831290059242,38.2537320369821,0 -122.831125624209,38.2537882716962,0 -122.830644006304,38.253850658283,0 -122.830404321418,38.2538593213155,0 -122.82992155994,38.2538000350114,0 -122.829447088647,38.2537092152638,0 -122.829218646758,38.253645792663,0 -122.82878509775,38.2534694119466,0 -122.828586777126,38.2533564639224,0 -122.828418880804,38.2532165230752,0 -122.828264936167,38.2530675901312,0 -122.828042612072,38.25298614935111,0 -122.827812108853,38.2530398829965,0 -122.827354251386,38.2531743909911,0 -122.827117317994,38.253228113719,0 -122.826880546068,38.2532142427337,0 -122.82665027892,38.2531688373476,0 -122.826429699184,38.2532541266865,0 -122.826268625827,38.2533980855408,0 -122.826095429645,38.2535330135759,0 -122.825915457383,38.2536634249749,0 -122.825718383582,38.2537757855384,0 -122.825508840699,38.2538746083639,0 -122.825291114894,38.2539598998255,0 -122.825063420387,38.2540316571918,0 -122.824828982764,38.2540853790342,0 -122.82458888464,38.25411656071581,0 -122.824106126279,38.2540572505062,0 -122.823863593565,38.2540613896384,0 -122.823622533481,38.2540475055814,0 -122.82290561333,38.2539292540579,0 -122.822664229843,38.2539018488505,0 -122.822423214778,38.2538699374791,0 -122.822305968471,38.2538191559111,0 -122.822290196382,38.25381232471,0 -122.822224925689,38.2537840546569,0 -122.822224836508,38.253784016031,0 -122.822044505831,38.25362151594661,0 -122.821957923656,38.2535147781765,0 -122.821912751582,38.2534590892244,0 -122.821683934908,38.2531162654953,0 -122.821683934128,38.2531162646942,0 -122.821543207572,38.25297185061931,0 -122.821419571297,38.2529941920052,0 -122.821325089296,38.2530706528213,0 -122.82101225482,38.2537731437682,0 -122.820878873639,38.2539802252621,0 -122.82087887173,38.2539802282257,0 -122.82081238272,38.2541468530998,0 -122.820804044842,38.2543406081337,0 -122.820821790939,38.25452989612811,0 -122.820821791049,38.2545298972977,0 -122.820878114501,38.2547192455133,0 -122.820918587357,38.2548184448848,0 -122.820988036433,38.2548996639268,0 -122.821022000015,38.2549302453394,0 -122.821063233976,38.2549673730835,0 -122.821183111352,38.2550216316717,0 -122.821183112532,38.2550216322061,0 -122.821629263029,38.2551529974402,0 -122.821629264714,38.2551529979364,0 -122.821864156091,38.2552074327469,0 -122.822087205477,38.2552843795892,0 -122.822145844601,38.2553109204142,0 -122.822296995287,38.2553793316455,0 -122.822437602003,38.2554649259162,0 -122.822682890995,38.2556142445871,0 -122.822866107547,38.2557677355905,0 -122.822998291673,38.2559031237262,0 -122.823224818051,38.25602063056731,0 -122.823542811891,38.2561247552835,0 -122.823542814937,38.2561247571281,0 -122.823803890952,38.2562828701198,0 -122.823962844568,38.25642731043131,0 -122.824062428994,38.2566032031995,0 -122.824062429465,38.2566032040321,0 -122.824099495473,38.25678350927631,0 -122.824089764515,38.2571124489856,0 -122.824017702558,38.2573691951728,0 -122.824007137253,38.2577477016747,0 -122.823954883289,38.2579368847361,0 -122.823954883009,38.257936885752,0 -122.823861530125,38.2581350173962,0 -122.823742188841,38.2582970607349,0 -122.823658354071,38.2584005746898,0 -122.823658352325,38.2584005768454,0 contacts #khStyle84754 1 -122.848744446359,38.2574941376428,0 -122.848915165353,38.257503372389,0 -122.848915167151,38.2575033719274,0 -122.849054902857,38.2574675042911,0 -122.849182138514,38.2574316185703,0 -122.849354220408,38.2573011624673,0 -122.849454365617,38.2572007967656,0 -122.849502407489,38.2571526489894,0 -122.849549367403,38.2570715979054,0 -122.849585068095,38.2569094195506,0 -122.849585068633,38.2569094186822,0 -122.849663198104,38.2567833462433,0 -122.849783202226,38.2566167708805,0 -122.849944951709,38.2564727806842,0 -122.850070313487,38.2563062127199,0 -122.850307461752,38.25597305703481,0 -122.850534698072,38.2554235893141,0 -122.850580808582,38.2552343873871,0 -122.850642983242,38.2550497109846,0 -122.850760645085,38.2547703084071,0 -122.850796610538,38.2546849035427,0 -122.85084129159,38.254495699105,0 -122.850872618481,38.2543040068569,0 -122.850903874126,38.2541127495351,0 -122.850904631361,38.2539189824012,0 -122.850884306035,38.2537296944197,0 -122.850902912651,38.2535404564327,0 -122.85100364032,38.2533648428812,0 -122.851132859149,38.2532298205464,0 -122.85120295266,38.2530136117973,0 -122.851245131436,38.25282440393871,0 -122.851273381062,38.2526351782738,0 -122.851273381095,38.2526351771686,0 -122.851279136993,38.2524414174303,0 -122.851265240183,38.2522521389476,0 -122.851265239889,38.2522521377299,0 -122.851219555073,38.2520628170726,0 -122.851103176339,38.2516886503869,0 -122.85103998227,38.2515038133962,0 -122.850959927504,38.2513550050528,0 -122.850843479833,38.2511881247408,0 -122.850779817962,38.2510573620598,0 -122.850794657048,38.2509627501455,0 -122.850959252107,38.2509899989685,0 -122.851089420514,38.2510847969726,0 -122.851250249441,38.2512066715411,0 -122.851579906617,38.2517298169359,0 -122.851869651703,38.2520366113941,0 -122.851909632634,38.2520925335312,0 -122.851988961082,38.25220349402,0 -122.852205060093,38.2525462433068,0 -122.852247175831,38.2527355588421,0 -122.85225775891,38.2529744033077,0 -122.85248817461,38.2534793942641,0 -122.852496869051,38.2535356458886,0 -122.852517433368,38.253668693337,0 -122.85249989349,38.2538624390743,0 -122.852447725391,38.2540471285281,0 -122.852376408376,38.2541641991759,0 -122.852357310473,38.2544210310372,0 -122.852267598,38.2547994406592,0 -122.85226759778,38.2547994415868,0 -122.852097856581,38.2553625036078,0 -122.852008556851,38.2555381336676,0 -122.851868933139,38.2556956738196,0 -122.851698439741,38.2558075447478,0 -122.851491951497,38.2559430344361,0 -122.850911872381,38.2562937771149,0 -122.850733366277,38.2564242284947,0 -122.85056734245,38.2565637081322,0 -122.850279866589,38.2568787742825,0 -122.850156648979,38.2570453457024,0 -122.850139109811,38.2572345847981,0 -122.85017889954,38.2573382784649,0 -122.85017889998,38.2573382796117,0 -122.850230947287,38.2573879152124,0 -122.85048011718,38.2574603351066,0 -122.850752279457,38.2574696988036,0 -122.850991681837,38.25742945025651,0 -122.851234252258,38.2574117364424,0 -122.851470815192,38.2573624708124,0 -122.851711269733,38.2573312338413,0 -122.851711271193,38.2573312338432,0 -122.851954160048,38.25733154464161,0 -122.852062964562,38.2573397353097,0 -122.852197727691,38.25734987996751,0 -122.852438877943,38.2573276556791,0 -122.852876786424,38.2571569746588,0 -122.853103749144,38.2570851626995,0 -122.853343853373,38.2570494161915,0 -122.853588997115,38.256995650479,0 -122.85365591759,38.2569326471326,0 -122.85369402508,38.256635283755,0 -122.853602273799,38.2564368946711,0 -122.853466148463,38.2562790047159,0 -122.853318584625,38.2561256063792,0 -122.853211777117,38.2559542344682,0 -122.853167156729,38.255764915895,0 -122.853187919412,38.2555666681662,0 -122.853286080808,38.2554225936361,0 -122.853563729144,38.2553643621391,0 -122.854297142299,38.2553067043044,0 -122.854639204254,38.2553657142704,0 -122.854868297564,38.2554741506067,0 -122.855396901641,38.25584432166881,0 -122.855484111859,38.2558829943493,0 -122.855672047383,38.2559663325104,0 -122.855822734265,38.2559890513145,0 -122.855893236637,38.2559488160597,0 -122.856059103279,38.2558541566791,0 -122.856276978277,38.2556786842832,0 -122.856459544303,38.2556563789606,0 -122.856701284744,38.2556927278864,0 -122.856907915859,38.2557831074101,0 -122.857117742954,38.2558825026306,0 -122.857135091685,38.2558881740252,0 -122.857352976864,38.2559593985407,0 -122.857582161084,38.2560227663342,0 -122.857582164992,38.2560227674147,0 -122.85782177505,38.25605460491531,0 -122.858308554514,38.25608674396161,0 -122.858548870761,38.2561230870768,0 -122.858767665285,38.2562044653042,0 -122.858767666775,38.2562044658586,0 -122.85890809015,38.25636235557181,0 -122.858956894505,38.2564396167442,0 -122.859016339985,38.2565337234156,0 -122.859081701733,38.2567185584329,0 -122.859120971676,38.2569123741594,0 -122.859120971919,38.2569123753598,0 -122.859200996129,38.2570882144727,0 -122.859259235238,38.2571769011451,0 -122.859313534437,38.2572595878907,0 -122.859503581417,38.257615810674,0 -122.859629712999,38.2577781871815,0 -122.859789453944,38.2579225807483,0 -122.859950975383,38.2580714816483,0 -122.860728050359,38.2585365588569,0 -122.860910692219,38.2586629525375,0 -122.861071867927,38.2588073438681,0 -122.861071868854,38.2588073446985,0 -122.861218024079,38.2589607318678,0 -122.861330570799,38.2591321035033,0 -122.861501334928,38.25949280615121,0 -122.861695666107,38.2598580422302,0 -122.861695666558,38.2598580430777,0 -122.861752134556,38.2600293476304,0 -122.861752801582,38.2600619646084,0 -122.861755727321,38.2602050943506,0 -122.86168640626,38.2604032864788,0 -122.861613190582,38.2605834478332,0 -122.861505691632,38.2607590624221,0 -122.861216409468,38.261285946546,0 -122.861134976762,38.2614660975863,0 -122.861031403811,38.2616417168208,0 -122.860907128736,38.261808298073,0 -122.860906381857,38.26180932279801,0 -122.860785711628,38.2619748829259,0 -122.860648951123,38.2621324367524,0 -122.860545384341,38.26230354912731,0 -122.860470369515,38.2624882142327,0 -122.860418206898,38.2626774131244,0 -122.860396407341,38.2628666476881,0 -122.860420976971,38.2630919895885,0 -122.860529990117,38.2632453324692,0 -122.860732682659,38.2633537254016,0 -122.860732683654,38.2633537259335,0 -122.860963682559,38.2634170907678,0 -122.860963684279,38.2634170910287,0 -122.861203310113,38.26345342689261,0 -122.861446916856,38.2634627306123,0 -122.861690192431,38.2634585147996,0 -122.862171849018,38.2633960010539,0 -122.862415843806,38.2633872784781,0 -122.862415847902,38.2633872780237,0 -122.862657023755,38.2633605267409,0 -122.862657024997,38.2633605265061,0 -122.863130869994,38.263270962537,0 -122.863608261692,38.2631949191626,0 -122.86408211417,38.2631008447733,0 -122.864307655555,38.2630290092698,0 -122.864515752018,38.2629256093344,0 -122.864673197781,38.26278159492701,0 -122.864673198762,38.26278159374,0 -122.864807102285,38.26261952509161,0 -122.864932109216,38.2624394222382,0 -122.865003486924,38.2620925261511,0 -122.865077549136,38.2620295245717,0 -122.865150550025,38.2619794886566,0 -122.865208814724,38.2619395520271,0 -122.865419756727,38.2618406606062,0 -122.865605386588,38.2617147012393,0 -122.865822738507,38.2616248278189,0 -122.866063151511,38.2616206003714,0 -122.86629057063,38.2616884563708,0 -122.86650222167,38.2617833303596,0 -122.866502222897,38.2617833309096,0 -122.866937341613,38.2619595744691,0 -122.8673478142,38.2621357877773,0 -122.868074428775,38.2625061281896,0 -122.868074430022,38.2625061288252,0 -122.868285719021,38.262605504841,0 -122.868285720259,38.2626055054234,0 -122.868695785294,38.2628132577692,0 -122.86869578653,38.262813258395,0 -122.868875561334,38.2629576604796,0 -122.86901140804,38.2630975072599,0 -122.869134736186,38.2632463522069,0 -122.869249767239,38.2634402502608,0 -122.869359115554,38.2636161162823,0 -122.869965985025,38.2648334809938,0 -122.870197915884,38.2651807207142,0 -122.870229165843,38.265284399684,0 -122.870293287748,38.2653836081997,0 -122.870293288601,38.265383609201,0 -122.870558510209,38.2656948342499,0 -122.870694292423,38.2658752349664,0 -122.870754715421,38.2660465390739,0 -122.870754715765,38.2660465400477,0 -122.870866611125,38.2661998760044,0 -122.870934907886,38.2662339526755,0 -122.871092897767,38.2663127834041,0 -122.871316025389,38.26639414332431,0 -122.871316026655,38.2663941437857,0 -122.871553522998,38.2664304569588,0 -122.871786133008,38.2664264375445,0 -122.871798595985,38.2664262221223,0 -122.872041198533,38.2664039592696,0 -122.872263962877,38.2663332188384,0 -122.872267455947,38.2663321095647,0 -122.872402547534,38.2663007138473,0 -122.872402548556,38.2663007132812,0 -122.872491944431,38.2662512444991,0 -122.872569552172,38.2662017613786,0 -122.87263082258,38.2660981854947,0 -122.872696200929,38.2659522233729,0 -122.872711519577,38.2659180252497,0 -122.872711519839,38.2659180241977,0 -122.872758650594,38.2657288151747,0 -122.87282327127,38.2653458566232,0 -122.872843529947,38.2652016794484,0 -122.872843530395,38.2652016786019,0 -122.87288403329,38.2651251175091,0 contacts #khStyle84754 1 -122.966989969693,38.2506189028116,0 -122.966989099538,38.2506217753665,0 -122.966866165526,38.2505651782517,0 -122.966599786638,38.2504923781207,0 -122.966487079805,38.2504761839491,0 -122.966222335303,38.2503738766665,0 contacts #khStyle84754 1 -122.961955497376,38.2501246684145,0 -122.961668397691,38.2499370936999,0 contacts #khStyle84754 1 -122.955109326767,38.2499193725497,0 -122.955353536856,38.2499780518518,0 -122.955615961773,38.2501133415318,0 -122.955872471487,38.2505730810265,0 -122.956075448706,38.2509652038138,0 -122.956196811744,38.2516592127389,0 -122.956289210235,38.2518304873542,0 -122.956427009205,38.2519386892746,0 -122.956678080197,38.2519658234037,0 -122.956843808021,38.2519613815109,0 -122.95696747734,38.2518172274561,0 -122.957106478691,38.2517091314749,0 -122.957245430349,38.2516866516096,0 -122.957386096653,38.2517813356821,0 -122.957690888676,38.2521599761375,0 -122.958158855704,38.2532281328339,0 -122.958423229496,38.25372391766,0 -122.95876472011,38.2542783107007,0 -122.959111321106,38.2546569626031,0 -122.959626890522,38.2549996237821,0 -122.960267208228,38.2551891130493,0 -122.961075137848,38.2552209421525,0 -122.961476987754,38.2551850279504,0 -122.961878163229,38.2550770136855,0 -122.962078182399,38.2550770812632,0 -122.962328866139,38.2551853163113,0 -122.962724750062,38.2556225525745,0 -122.9630316711,38.2561093305251,0 -122.96344724465,38.2564744723322,0 -122.964292267464,38.2573444496391,0 -122.96480858971,38.2577051133577,0 -122.965229885714,38.2580837704823,0 -122.965360102964,38.2584082589678,0 -122.965344255562,38.2586696163543,0 -122.965339865785,38.2588814092163,0 -122.965414089064,38.2590301384144,0 -122.965675479405,38.2591924449677,0 -122.96636847397,38.2591475924812,0 -122.967779934626,38.258805532856,0 -122.967997106945,38.2588146078802,0 -122.96831533304,38.2589003169971,0 -122.968519921793,38.2590941440154,0 -122.968463768202,38.2592563522219,0 -122.968364317366,38.2595807742837,0 -122.968267986742,38.2601169892222,0 -122.96830382458,38.2606442311903,0 -122.96829085176,38.2608920719172,0 -122.968439674041,38.26118952656671,0 -122.96886992132,38.261617741046,0 -122.969091893376,38.2621044769217,0 -122.969258470317,38.2626497776534,0 -122.969556541099,38.2631230157683,0 -122.969761840623,38.2633573961701,0 -122.970108299681,38.26347014784601,0 -122.970772306188,38.2636325484188,0 -122.971051607168,38.2637452775191,0 -122.971332320406,38.2639075764383,0 -122.971667530192,38.2644529170788,0 -122.971835329039,38.2646917915587,0 -122.972115677458,38.2648811240679,0 -122.972375914933,38.2653408254809,0 -122.972943533531,38.2663098081339,0 -122.972935470725,38.2668280248913,0 -122.972645911827,38.2673236398933,0 -122.972178823832,38.2677516165596,0 -122.971591086407,38.2679272111113,0 -122.971246360731,38.2678910720426,0 -122.970912763571,38.2677287612493,0 -122.970647363461,38.2676520836514,0 -122.970461348393,38.2673996849669,0 -122.97031284837,38.2671337782282,0 -122.970315137494,38.2667913039188,0 -122.970333236693,38.2662370398387,0 -122.970315488303,38.2659711678894,0 -122.970110878154,38.265777344177,0 -122.969942333334,38.2656150748493,0 -122.969661918867,38.2655834558274,0 -122.969343961042,38.2656284293731,0 -122.96898817648,38.2655832701783,0 -122.96868888946,38.2654209604792,0 -122.968520691013,38.26529023209961,0 -122.968446919959,38.2649026734524,0 -122.968542108267,38.2645376949753,0 -122.968729780312,38.2642583606243,0 -122.968861720402,38.2639745051661,0 -122.968731062907,38.2637852048724,0 -122.968581796125,38.2636680017468,0 -122.96818924314,38.2635912847654,0 -122.967516014435,38.2632936785355,0 -122.96658476424,38.2624957977553,0 -122.966303040601,38.2622433636729,0 -122.966084102607,38.2621666918167,0 -122.96585368387,38.2621981646663,0 -122.96576004912,38.2622882616605,0 -122.965606322875,38.2625360588693,0 -122.965309385035,38.2627162142645,0 -122.965083235722,38.2627747266897,0 -122.964934597903,38.2628467807437,0 -122.964729219894,38.2628016535135,0 -122.964467816068,38.2626393470256,0 -122.964337204526,38.2623869581251,0 -122.964151212834,38.2621525702099,0 -122.963694728647,38.2620803208866,0 -122.963376461133,38.2620576892685,0 -122.963073260606,38.2619133911448,0 -122.962668291347,38.2617014632324,0 -122.962187678328,38.2613362970918,0 -122.961734602978,38.2609215682075,0 -122.961488601455,38.2607096922617,0 -122.961290402169,38.2606149913369,0 -122.96117144307,38.2606329754911,0 -122.961065303719,38.2607185571133,0 -122.961076996202,38.2608897998032,0 -122.961103144851,38.2614035205549,0 -122.961428705931,38.2630979809372,0 -122.961361324987,38.2635035186708,0 -122.961254413669,38.2636882382644,0 -122.961082930177,38.2637197240976,0 -122.960897171708,38.2637196597283,0 -122.960804686991,38.26365653968,0 -122.960658967118,38.2636069208565,0 -122.960487478492,38.2636474162755,0 -122.960328131547,38.2636879157197,0 -122.960195537156,38.2638005248458,0 -122.960022893289,38.2639897273861,0 -122.959890687955,38.2640437536411,0 -122.959718856643,38.2640527049158,0 -122.959374524919,38.2639985081281,0 -122.959057320323,38.2639758609755,0 -122.958844720114,38.2640614039293,0 -122.958708548321,38.2641785152848,0 -122.958593568213,38.2647102096421,0 -122.958457916566,38.2651517706976,0 -122.958258870237,38.2652688604384,0 -122.958100266666,38.2652552838936,0 -122.957968516477,38.265142576957,0 -122.957638228215,38.2648901041389,0 -122.957295220854,38.2644123138357,0 -122.956401970225,38.2629744818349,0 -122.955794202804,38.262050464128,0 -122.955478438542,38.2614645303798,0 -122.955280678769,38.261248153116,0 -122.955160986918,38.2612886612271,0 -122.955048303105,38.2615454712881,0 -122.954774659962,38.2626854433875,0 -122.954711802864,38.2632216600617,0 -122.954713960594,38.26375790477301,0 -122.954785419905,38.2642896698091,0 -122.954872596354,38.2648304535746,0 -122.955043116287,38.2652000339782,0 -122.955491436106,38.2657725029956,0 -122.9557494687,38.266119424655,0 contacts #khStyle84754 1 -122.847399192346,38.2499187747787,0 -122.847526801929,38.2505439323699,0 -122.847508073202,38.251125211527,0 -122.847437324067,38.2516478418264,0 -122.847234426834,38.2519990621042,0 -122.847051439046,38.2522241326656,0 -122.846701216337,38.2524850324599,0 -122.846387027493,38.25259727300801,0 -122.846142011118,38.2525969486762,0 -122.845478090135,38.2524023008168,0 -122.845128986012,38.252307203134,0 -122.84479727302,38.25226169766911,0 -122.844289796045,38.25240071388511,0 -122.843940457229,38.2524137628242,0 -122.843590849496,38.2523862549857,0 -122.843276131262,38.252246137497,0 -122.842892144331,38.2520969129646,0 -122.842630524047,38.2518487150726,0 -122.842264448395,38.2515147588336,0 -122.841932409418,38.25129350136001,0 -122.84156647632,38.2510586789668,0 -122.841269554061,38.2509501231998,0 -122.84093745609,38.2509226313928,0 -122.840552745223,38.2507824107534,0 -122.840295404517,38.25052137032991,0 contacts #khStyle84754 1 -122.816605433405,38.256168099063,0 -122.816565240548,38.25610496277061,0 -122.816565230861,38.2561049480175,0 -122.816466137081,38.25588398703101,0 -122.816117629084,38.2551967075262,0 -122.816029347293,38.2550226072186,0 -122.815960881345,38.2548377438752,0 -122.815910275863,38.2546529082742,0 -122.815890063164,38.2544546023889,0 -122.815930571387,38.2542563924214,0 -122.816005713886,38.2540627431642,0 -122.816122530775,38.2539142225803,0 -122.816261872003,38.2537567247136,0 -122.816484168084,38.2535633077295,0 -122.816643321433,38.2534503007956,0 -122.816693132789,38.2534149310065,0 -122.816748354757,38.2533294002417,0 -122.81675247131,38.2532895991242,0 -122.816753480699,38.2532798397885,0 -122.816740771526,38.25322123942761,0 -122.816654877234,38.2531490039606,0 -122.816654876209,38.2531490030989,0 -122.816462324826,38.2530225264836,0 -122.816462323494,38.2530225258877,0 -122.816058108538,38.2528416379531,0 -122.815947950603,38.252760351078,0 -122.815864232378,38.2526746013559,0 -122.815864231895,38.2526746004163,0 -122.81578071172,38.252512244374,0 -122.815724949251,38.2523584667353,0 -122.815713676937,38.2523273829137,0 -122.815672371889,38.2521380564577,0 -122.815703003493,38.251750568295,0 -122.815690110087,38.251624373418,0 -122.815690109786,38.2516243724856,0 -122.815548715698,38.2511870449879,0 -122.815469527868,38.2510066703515,0 -122.815370317964,38.250835275957,0 -122.815242165738,38.250668342067,0 -122.814947223178,38.2503614493513,0 -122.814601107403,38.2499183041801,0 contacts #khStyle84754 1 -122.813591761636,38.2499182836849,0 -122.813750039014,38.2500801529306,0 -122.813862287911,38.2501794696471,0 -122.814173319801,38.2504773769319,0 -122.814173321041,38.2504773781197,0 -122.814290040576,38.2506442950939,0 -122.814290041216,38.2506442960091,0 -122.814367784033,38.2508291735568,0 -122.814367784168,38.2508291745684,0 -122.814393014451,38.2510184765063,0 -122.814367159652,38.2512122021964,0 -122.814367159507,38.2512122032801,0 -122.814313110837,38.25139687241911,0 -122.814243704301,38.2515815168235,0 -122.81416671818,38.2516580003849,0 -122.814166716793,38.251658000886,0 -122.814079846055,38.2516894049129,0 -122.814075007673,38.2516936526654,0 -122.813997870385,38.2517613735833,0 -122.813867320341,38.2518332640533,0 -122.81365278902,38.2519230459599,0 -122.812751252241,38.2522190095799,0 -122.812516108918,38.2522681992041,0 -122.812463429699,38.2522730076046,0 -122.812273534743,38.252290339519,0 -122.812039421323,38.252298622693,0 -122.811786313463,38.2523075773823,0 -122.811298412879,38.2523112934319,0 -122.811056887524,38.2523424446534,0 -122.811056886113,38.2523424448353,0 -122.81094642773,38.2523783155571,0 -122.810848421178,38.2524322310006,0 contacts #khStyle84754 1 -122.862950119774,38.2499181654135,0 -122.86260108055,38.2503464539603,0 -122.861893026952,38.2508052510077,0 -122.861515888209,38.2509805408427,0 -122.861213328411,38.25100271379881,0 -122.860964853627,38.2509438357841,0 -122.860854810308,38.25096623417391,0 -122.860744593732,38.2510742524936,0 -122.860385046071,38.2517542623479,0 -122.860164213903,38.2519928256932,0 -122.859878775308,38.25220878238831,0 -122.859575408869,38.2524607647577,0 -122.859235230175,38.2527217121165,0 -122.859002547901,38.2528070498055,0 -122.858757448658,38.2528473071026,0 -122.858555361958,38.2528110107606,0 -122.858298332079,38.2527431041365,0 -122.85819343065,38.25268890072681,0 contacts #khStyle84754 1 -122.868852127293,38.2499179876522,0 -122.86952595589,38.2503814894244,0 -122.870108138289,38.2507696807536,0 -122.870783603014,38.2511264282359,0 -122.870977795432,38.2511852250746,0 -122.871130944199,38.2512259529665,0 -122.871284136019,38.2512441482835,0 -122.871455824525,38.2513029193393,0 -122.871611523356,38.2513166096857,0 -122.871660138559,38.251294133202,0 -122.87169128399,38.2512536101622,0 -122.871702412802,38.2512220796067,0 -122.871669086796,38.2510823492393,0 -122.871598537702,38.2509876403801,0 -122.871491255981,38.2508613478807,0 -122.871389685185,38.2507395647458,0 -122.871333858242,38.2505998093052,0 -122.871315471804,38.2504961456106,0 -122.871319260034,38.2503744814291,0 -122.871394301098,38.2501537603575,0 -122.871460792537,38.24991921609751,0 contacts #khStyle84754 1 -122.865835747203,38.2563434562821,0 -122.865529244823,38.2563792317398,0 -122.865290431574,38.25630234900551,0 -122.865100958303,38.2561984855759,0 -122.864944158692,38.2560045365964,0 -122.864917955136,38.2558828357324,0 -122.864933310878,38.2556935923675,0 -122.865044006145,38.2553287164875,0 -122.865081336806,38.2550403606983,0 -122.86497217233,38.2543958421189,0 -122.864982642977,38.2539542418011,0 -122.864936987206,38.2535396158246,0 -122.864965004686,38.2532647669027,0 -122.864937771806,38.2531205365755,0 -122.86488308694,38.2529492345249,0 -122.864718185751,38.252890461792,0 -122.864203588134,38.25284479766601,0 -122.863983351298,38.25277244132941,0 -122.863867831301,38.2526641552576,0 -122.863744940287,38.2524882673721,0 -122.863727150554,38.2522629349351,0 -122.863805726855,38.2516952410247,0 -122.863847064777,38.2513663326497,0 -122.863874363349,38.2512852538658,0 -122.863927299216,38.2512447584691,0 -122.863962741714,38.2511997394059,0 -122.863953915815,38.2511456537698,0 -122.863880068623,38.2511005043911,0 -122.863840577256,38.2510193451111,0 -122.863822054742,38.2508030243192,0 -122.86390473672,38.2505192292445,0 -122.864129098958,38.2499176953307,0 contacts #khStyle84754 1 -122.839964260811,38.2504075844727,0 -122.839435596616,38.2504383979288,0 -122.839051039711,38.250392805307,0 -122.83864924327,38.250230022366,0 -122.838077417661,38.2499173238359,0 contacts #khStyle84754 1 -122.855135646398,38.2516486899948,0 -122.855043099468,38.2514908559827,0 -122.855026282585,38.2513286112837,0 -122.855052270514,38.2511934555751,0 -122.855055645244,38.2511123489871,0 -122.855023949403,38.2510672466794,0 -122.854883970476,38.251053553991,0 -122.85463592342,38.2509631181701,0 -122.854426076782,38.2508817422837,0 -122.85421495896,38.2507237588437,0 -122.854095821875,38.25064700357561,0 -122.853939832401,38.25060174468111,0 -122.853646070328,38.2505157565605,0 -122.853389121004,38.2504117891127,0 -122.853242147971,38.2503259852742,0 -122.853141291431,38.25021770718691,0 -122.853028689559,38.2499171583937,0 contacts #khStyle84754 1 -122.833885123317,38.2499170479785,0 -122.833668065713,38.2501869500822,0 -122.833580743621,38.2502634327251,0 -122.8334273558,38.2503353112305,0 -122.833196225663,38.250357512187,0 -122.832823794581,38.2503209270121,0 -122.832567164638,38.2502484573522,0 -122.83230592574,38.2501624627245,0 -122.832161833373,38.2500766367082,0 -122.83209222846,38.2500585090179,0 -122.831990809002,38.2500538572664,0 -122.831899963953,38.2501078011694,0 -122.831833335192,38.2501933228694,0 -122.831723037626,38.2503193387967,0 -122.83155316619,38.2504137233787,0 -122.831418423598,38.2504540855312,0 -122.83121517972,38.2504628010646,0 -122.830894726019,38.2504983855228,0 -122.830590027635,38.2505159669899,0 -122.830167772979,38.2505559062932,0 -122.829767053257,38.2505508150229,0 -122.829516402423,38.2505189049215,0 -122.829263399398,38.2504239009738,0 -122.829019370046,38.2503108867018,0 -122.828811666805,38.2502429880979,0 -122.82861743904,38.2502156643582,0 -122.828110805716,38.25014281619851,0 -122.827845089848,38.2501379178708,0 -122.827726461223,38.2501602745652,0 -122.827551619848,38.25024112612721,0 -122.827389990067,38.2503219991375,0 -122.827245677151,38.2503307973603,0 -122.827113941105,38.2503080691788,0 -122.82697403368,38.2502673057163,0 -122.826791795042,38.2503030845512,0 -122.826642492834,38.2503073672831,0 -122.826450062081,38.2502755374187,0 -122.826364410132,38.250248371947,0 -122.82629274014,38.25019869700811,0 -122.826136253503,38.2500722876357,0 -122.82595911593,38.2499179408097,0 contacts #khStyle84754 1 -122.961668397691,38.2499370936999,0 -122.961493142936,38.2498225939239,0 -122.961190075297,38.2495295885733,0 -122.961668072336,38.2492954311528,0 -122.96329710538,38.2491833199855,0 -122.964038499375,38.2491774168284,0 -122.965472530782,38.2491659854349,0 -122.966508684857,38.24904913946131,0 contacts #khStyle84754 1 -122.966866375769,38.2490082831214,0 -122.966508684857,38.24904913946131,0 contacts #khStyle84754 1 -122.832192650653,38.2499172841163,0 -122.832430450747,38.2494416460979,0 -122.832581363199,38.2492030357581,0 -122.832986871903,38.2486763916624,0 contacts #khStyle84754 1 -122.829273224373,38.2499176353244,0 -122.829173899373,38.2497568489035,0 -122.829000149853,38.2495267760695,0 -122.828788501077,38.249314676339,0 -122.828522814446,38.249147552687,0 -122.828225617676,38.2490164339374,0 -122.827602187731,38.248799213567,0 -122.827002085701,38.2485369600137,0 -122.826769676407,38.24834735376551,0 -122.826640462226,38.24816691343851,0 contacts #khStyle84754 1 -122.834651900523,38.2477369744529,0 -122.834606460223,38.2477729597551,0 -122.834561101971,38.247772895199,0 -122.834514948474,38.2478088794505,0 -122.83446959286,38.2478088148629,0 -122.834241323205,38.2479887372233,0 -122.834240881727,38.2480247865504,0 -122.834195453987,38.2480562665158,0 -122.8341930103,38.2483446584782,0 -122.834283203824,38.2484168870176,0 -122.83437443941,38.2483449171553,0 -122.834419715854,38.2483810316198,0 -122.834465074485,38.2483810962296,0 -122.834510512574,38.248345110981,0 -122.834556227751,38.2483451760633,0 -122.834647465634,38.2482732080909,0 -122.834738536669,38.2482733376205,0 -122.834783966967,38.2482418595485,0 -122.834874681396,38.2482419884657,0 -122.834966275408,38.24817001865361,0 -122.83496731611,38.2480258203123,0 -122.83492239884,38.2479897065673,0 -122.834922837315,38.2479536593328,0 -122.834651900523,38.2477369744529,0 contacts #khStyle84754 1 -122.871433334115,38.2476753893166,0 -122.871717280535,38.2478694710176,0 -122.871628365875,38.248063139627,0 -122.871314852906,38.2482295216055,0 -122.870977126659,38.2483553207323,0 -122.870704408493,38.2482739046111,0 -122.870654872098,38.2480124898012,0 -122.87091263615,38.2478685776292,0 -122.871433334115,38.2476753893166,0 contacts #khStyle84754 1 -122.868437471761,38.24755036256461,0 -122.868673160941,38.2477624197428,0 -122.868622713511,38.2480102045117,0 -122.868388406116,38.2482172235051,0 -122.868071047597,38.248334022841,0 -122.867754112178,38.248216501738,0 -122.867734174527,38.2479866620089,0 -122.867947468443,38.2477480777723,0 -122.868437471761,38.24755036256461,0 contacts #khStyle84754 1 -122.865447568919,38.2499171717779,0 -122.865459186033,38.2498946761172,0 -122.865631751951,38.2496695644165,0 -122.866083585615,38.24926453005901,0 -122.866604236548,38.2489181531549,0 -122.866904831059,38.2487923239659,0 -122.867229272226,38.2487115836735,0 -122.867911833777,38.248685325844,0 -122.86825110969,38.2486947264386,0 -122.868904058655,38.2488486764957,0 -122.869843868749,38.2491651697791,0 -122.870183439281,38.2492106128852,0 -122.870492187035,38.2491163262585,0 -122.870766778223,38.2489499072883,0 -122.871254243771,38.248571926047,0 -122.871531667786,38.2484190218926,0 -122.871835460862,38.2482931857532,0 -122.87215952987,38.2482169387301,0 -122.874533092152,38.2480347783906,0 -122.875876976485,38.2478604838608,0 -122.876207450161,38.2477932450114,0 -122.877136591431,38.2474607750125,0 -122.877318036485,38.2473781834151,0 contacts #khStyle84754 1 -122.83742352543,38.2468894804606,0 -122.837428560673,38.246927648726,0 contacts #khStyle84754 1 -122.837428560673,38.246927648726,0 -122.837428804356,38.246893724585,0 -122.83742352543,38.2468894804606,0 contacts #khStyle84754 1 -122.818657872457,38.2499183002986,0 -122.818705887958,38.2492453170147,0 -122.818617955622,38.2489883269784,0 -122.818477489294,38.2487447725933,0 -122.818135785554,38.24828009847791,0 -122.817554943152,38.247616775652,0 -122.817393034674,38.2473821987544,0 -122.817301535608,38.2471251999248,0 -122.817245777062,38.2468592467635,0 -122.817217200113,38.24643561647741,0 contacts #khStyle84754 1 -122.865944182896,38.2470022550945,0 -122.865801464168,38.2467362230502,0 -122.865889370273,38.24651552225791,0 -122.866214194834,38.2464167602702,0 -122.866484151199,38.2466333708463,0 -122.866417373804,38.2468225538044,0 -122.865944182896,38.2470022550945,0 contacts #khStyle84754 1 -122.864358643615,38.2465317667983,0 -122.864113027767,38.2462881444932,0 -122.86425828831,38.2461486222713,0 -122.864585042703,38.2461625219524,0 -122.864358643615,38.2465317667983,0 contacts #khStyle84754 1 -122.837428560673,38.246927648726,0 -122.837474029409,38.2472723100682,0 -122.837201487093,38.2476098943081,0 -122.8366622333,38.247753336316,0 -122.836260320819,38.2474914105387,0 -122.835957950979,38.2471169686529,0 -122.835713114234,38.2467290886665,0 -122.835383536456,38.2463861502391,0 -122.835135103186,38.246011782516,0 -122.835105767773,38.245929407804,0 contacts #khStyle84754 1 -122.965665530149,38.2458810430582,0 -122.965891769052,38.2462731495204,0 -122.966065861538,38.2466787582421,0 -122.966174592563,38.2470978654644,0 -122.966508684857,38.24904913946131,0 contacts #khStyle84754 1 -122.835105767773,38.245929407804,0 -122.834897480372,38.2453445250129,0 contacts #khStyle84754 1 -122.835105767773,38.245929407804,0 -122.835075593494,38.24595311801761,0 -122.835075073273,38.2460252172146,0 -122.834800668606,38.2462366178798,0 -122.834755313971,38.2462365534,0 -122.834709518104,38.2462725382418,0 -122.834484217133,38.2460919698487,0 -122.834487693558,38.2456638845592,0 -122.83453348649,38.2456278997971,0 -122.834533996983,38.2455603057788,0 -122.834579795144,38.2455243231041,0 -122.83457987722,38.2454882732492,0 -122.834671465387,38.2454163036375,0 -122.834716822172,38.2454163681548,0 -122.83480805356,38.245344397929,0 -122.834897480372,38.2453445250129,0 contacts #khStyle84754 1 -122.817217200113,38.24643561647741,0 -122.8172096259,38.2463229493736,0 -122.817231722604,38.246057118479,0 -122.817404278762,38.2453228758765,0 contacts #khStyle84754 1 -122.957694017317,38.2499191385752,0 -122.957514862902,38.2496904874514,0 -122.957294613738,38.2494921333342,0 -122.95701863099,38.249329805212,0 -122.956707611634,38.2492260448173,0 -122.956058414224,38.24905456068611,0 -122.955740631232,38.2489192526571,0 -122.955563246827,38.2487254171425,0 -122.955718052469,38.2484641175257,0 -122.956027026694,38.2483966458455,0 -122.956374554609,38.2483607306558,0 -122.956684994573,38.2482301708518,0 -122.956859773262,38.2480094364291,0 -122.956898148597,38.2477390783584,0 -122.956786516175,38.2474821848263,0 -122.956598076624,38.2472613093258,0 -122.956114737015,38.2468780979473,0 -122.955841978418,38.2467202754391,0 -122.955532406337,38.2466074999624,0 -122.955242140937,38.24646318885251,0 -122.954974388407,38.246300859017,0 -122.954736655631,38.2461070002134,0 -122.95431228386,38.2456877550945,0 -122.954079911159,38.2454938949859,0 -122.953052890105,38.2447950161919,0 contacts #khStyle84754 1 -122.840717409218,38.2445910989483,0 -122.840438868367,38.244743929043,0 -122.8401902578,38.2449283423241,0 -122.839983369529,38.2451398500257,0 -122.839439025795,38.2458195367772,0 -122.839218928903,38.24602651756901,0 -122.838963545609,38.246201906379,0 -122.838643687765,38.2463005979019,0 -122.838360525519,38.2464398989604,0 -122.838143628007,38.24665138737981,0 -122.837818298937,38.2471195789903,0 -122.837632785619,38.2473491373302,0 -122.837528999533,38.2476058471338,0 -122.837519841486,38.2478671943819,0 -122.837634629652,38.2481242075725,0 -122.83781626571,38.2483497712983,0 -122.838052257433,38.2485483751343,0 -122.838335869073,38.248692967729,0 -122.838944624392,38.2489371480815,0 -122.839276271871,38.2490052019742,0 -122.839614113691,38.2490146812759,0 -122.840282232386,38.248902944485,0 -122.840942599727,38.2487416277675,0 -122.841159802679,38.2485526648403,0 -122.841285008646,38.2482959811786,0 -122.841356660641,38.248030213871,0 -122.841383313078,38.2477643829813,0 -122.841389449581,38.2464260464782,0 -122.841426816626,38.24616023223491,0 -122.841503109188,38.2458944689868,0 -122.841530107003,38.2456331457361,0 -122.84137269968,38.2451011982005,0 -122.841221066005,38.24487117568061,0 -122.840717409218,38.2445910989483,0 contacts #khStyle84754 1 -122.826640462226,38.24816691343851,0 -122.826603090569,38.2481127827582,0 -122.826502633285,38.2478557779073,0 -122.826466842735,38.2475898590884,0 -122.826499916043,38.2470491629936,0 -122.826474825236,38.246787763204,0 -122.826333634456,38.2465397119362,0 -122.826162043572,38.2463096379306,0 -122.825960422748,38.2460930385089,0 -122.825689408843,38.2459213972024,0 -122.825482758286,38.2457183070918,0 -122.82538767268,38.2454568040142,0 -122.825367166209,38.2449250400337,0 -122.825235127673,38.24443817090631,0 contacts #khStyle84754 1 -122.866053468319,38.2446816865584,0 -122.86576919802,38.2448706177394,0 -122.865471419466,38.2448342227066,0 -122.865281826897,38.2446177051923,0 -122.86555112917,38.2444107328687,0 -122.866053468319,38.2446816865584,0 contacts #khStyle84754 1 -122.873591125704,38.2446450904246,0 -122.873764414128,38.2443929321838,0 -122.874090938822,38.244330200197,0 -122.874341835895,38.2444251046446,0 -122.873966986893,38.24475815479521,0 -122.873591125704,38.2446450904246,0 contacts #khStyle84754 1 -122.870006012972,38.2443797642931,0 -122.870224296562,38.2441366741551,0 -122.870507067682,38.2441775455572,0 -122.870626019756,38.24436243313031,0 -122.870006012972,38.2443797642931,0 contacts #khStyle84754 1 -122.877318036485,38.2473781834151,0 -122.876726867203,38.2472981162664,0 -122.875099919263,38.2471837185605,0 -122.874576178724,38.2470750039415,0 -122.872529715063,38.2464869645123,0 -122.872004570737,38.24636922441961,0 -122.871466126285,38.2463010354407,0 -122.870922221648,38.2462914185352,0 -122.870403432646,38.2464170132645,0 -122.86938253757,38.24672228908621,0 -122.868476331414,38.2471944157048,0 -122.867562437161,38.24756739011,0 -122.86768284401,38.2471484507758,0 -122.867895699465,38.2467566538902,0 -122.868189216717,38.24639198556,0 -122.868766781316,38.2451669535605,0 -122.869248584934,38.2451494732347,0 -122.870335268259,38.24538952281031,0 -122.870872617473,38.2454667282062,0 -122.871414357181,38.2454853553723,0 -122.87194771669,38.2453958219134,0 -122.873030694403,38.2453113958073,0 -122.874581351522,38.2449075266067,0 -122.875923368503,38.2441203864391,0 -122.876233266375,38.2443820777483,0 -122.87654866601,38.2447699477388,0 -122.876993579873,38.2450227684178,0 -122.877485395278,38.2452080439909,0 -122.878010198174,38.245316746821,0 -122.879639266831,38.2454220941842,0 -122.879839910528,38.2453932527186,0 contacts #khStyle84754 1 -122.833228074013,38.2442651577226,0 -122.833456076672,38.2445088199564,0 -122.833421011985,38.24469352479831,0 -122.833058024372,38.2447560914208,0 -122.832754388003,38.2446339893435,0 -122.832481934597,38.2444623574519,0 -122.832255983672,38.2442592514544,0 -122.832127715627,38.2439751757722,0 -122.832205617056,38.2437995456313,0 -122.832576453725,38.2438947105985,0 -122.832859679806,38.2440393161035,0 -122.833228074013,38.2442651577226,0 contacts #khStyle84754 1 -122.815621796344,38.2499183167954,0 -122.815689320405,38.2492676166579,0 -122.815859922795,38.2487496713823,0 -122.815874549467,38.248474814413,0 -122.815782674989,38.2482268284342,0 -122.815587172299,38.2480012083526,0 -122.814179781612,38.2468363649657,0 -122.813975337271,38.2466197403306,0 -122.813648685772,38.24615057169361,0 -122.81351718028,38.2459025182177,0 -122.813422128542,38.2456455105426,0 -122.813364597198,38.2453795525665,0 -122.81324163279,38.2443113808147,0 -122.813238335091,38.2435092687916,0 -122.813261781898,38.2434191813639,0 contacts #khStyle84754 1 -122.834897480372,38.2453445250129,0 -122.834838075699,38.2451777115411,0 -122.834608240599,38.2447943566025,0 -122.834284043956,38.2444469163624,0 -122.833561846652,38.2433914303069,0 -122.834098732982,38.2434913347128,0 -122.834554297186,38.2437037762421,0 -122.835310338218,38.2443312138262,0 -122.835639202321,38.2446696453977,0 -122.836177494894,38.245418436749,0 -122.836483113622,38.2457748579289,0 -122.836866702348,38.2460818194442,0 -122.837192347141,38.2464292544024,0 -122.837413976697,38.2468170988265,0 -122.83742352543,38.2468894804606,0 contacts #khStyle84754 1 -122.903583761587,38.2432885239683,0 -122.903658335439,38.2435294717316,0 -122.905106944864,38.24535568116101,0 -122.905366092926,38.2457299081052,0 -122.905531620905,38.2461446135547,0 -122.905581396555,38.2465907674057,0 -122.905468369053,38.2469962321864,0 -122.904940342669,38.2471264779438,0 -122.904466610926,38.2469773823472,0 -122.90388654498,38.2462198602209,0 -122.9036863661,38.2458186420833,0 -122.903549777199,38.2454039581495,0 -122.903328876761,38.2450117343957,0 -122.902832418304,38.2442452643034,0 -122.902498618899,38.2438934995224,0 -122.902073258949,38.2436452986138,0 -122.901527282074,38.2435952659348,0 -122.900985099032,38.2436443702866,0 -122.899955818045,38.2439363856772,0 -122.899481624115,38.2441432588637,0 -122.898618781843,38.2446697295357,0 -122.898229086668,38.2449713019364,0 -122.897897186735,38.2453134799075,0 -122.897597406737,38.2456692039989,0 -122.89710383136,38.2464348186437,0 -122.896554563499,38.2471778503356,0 -122.896173059172,38.2479796107903,0 -122.895693732634,38.2487497383279,0 -122.895268955905,38.2495784938023,0 -122.89481472129,38.2495330194088,0 -122.894419824139,38.2492082134584,0 -122.894043449036,38.24794162847841,0 -122.893796864615,38.247558375611,0 -122.893479158561,38.2472111062372,0 -122.893104623698,38.2468953268051,0 -122.892683597332,38.2466245649601,0 -122.891763213327,38.2461685810954,0 -122.891282096058,38.2459653508348,0 -122.890779492326,38.2458026540663,0 -122.890251095376,38.2456940050259,0 -122.889710798162,38.2456619476119,0 -122.888620094769,38.2456699147511,0 -122.886992120075,38.2457674721218,0 -122.886452775353,38.2458120060129,0 -122.885409905681,38.2460588187994,0 -122.884904657212,38.2462205405139,0 -122.883449095814,38.2468048896267,0 -122.882630326472,38.2473718433136,0 -122.882187423953,38.2476192343236,0 -122.881852914623,38.2479748830852,0 -122.881461063132,38.2482313358371,0 -122.880898905944,38.2482352651398,0 -122.880381242889,38.2481130641697,0 -122.879877949446,38.2479413076287,0 -122.878336503741,38.2475161157981,0 -122.877318036485,38.2473781834151,0 contacts #khStyle84754 1 -122.868992056236,38.243427813544,0 -122.868948325887,38.2431213419228,0 -122.86917483045,38.2430720302341,0 -122.8694202634,38.243221011874,0 -122.868992056236,38.243427813544,0 contacts #khStyle84754 1 -122.814601107403,38.2499183041801,0 -122.814598352621,38.2499147771499,0 -122.814380464797,38.2496440569349,0 -122.814043785443,38.2493190719373,0 -122.813790935387,38.2490347760602,0 -122.813656625999,38.2487641881637,0 -122.813473699289,38.24851154703,0 -122.813196444804,38.2479973937039,0 -122.81295312034,38.2476229869033,0 -122.812610062993,38.2472844687163,0 -122.812394647339,38.2468920807689,0 -122.812250362593,38.246477276105,0 -122.812162887315,38.24605355051851,0 -122.812103673613,38.2451972735725,0 -122.811909384096,38.244786893801,0 -122.811978644971,38.244381446091,0 -122.812185755406,38.2439762209251,0 -122.81243261642,38.242876394453,0 contacts #khStyle84754 1 -122.903509106798,38.2426866883719,0 -122.903531387278,38.2431193018387,0 -122.903583761587,38.2432885239683,0 contacts #khStyle84754 1 -122.879839910528,38.2453932527186,0 -122.882315896339,38.2450373128388,0 -122.883372617476,38.2448356034779,0 -122.885519427575,38.2445493504852,0 -122.886576496997,38.244343106476,0 -122.887099164899,38.24422195038391,0 -122.888111751004,38.2439075003618,0 -122.889550816913,38.2433050529906,0 -122.891129801754,38.2429730918469,0 -122.891668078178,38.2429105107469,0 -122.892721191517,38.2426951954121,0 -122.893265826425,38.2426776748903,0 -122.893807518399,38.242718729725,0 -122.894341288731,38.2428048368012,0 -122.895425760775,38.2428779226138,0 -122.89705816177,38.2428793888499,0 -122.898688176282,38.24279971873301,0 -122.901371230249,38.2423905958097,0 contacts #khStyle84754 1 -122.843972174983,38.2499196251492,0 -122.84395135368,38.2498497257815,0 -122.843840461102,38.2495972314738,0 -122.843373056254,38.248884622383,0 -122.843290403461,38.2486231509902,0 -122.843173682267,38.2480957704936,0 -122.843185782593,38.2472891725515,0 -122.843288107006,38.24703696313481,0 -122.843580947277,38.2465506877804,0 -122.843685423643,38.2462939736002,0 -122.843829402004,38.2457714472004,0 -122.843852473698,38.24550561087171,0 -122.843853430182,38.2438968964192,0 -122.843902212308,38.2436310945623,0 -122.844010606263,38.2433788925455,0 -122.844345887561,38.2429061897434,0 -122.844556317899,38.2426991863848,0 -122.844827727084,38.242532819313,0 -122.845133700972,38.24240254768661,0 -122.845459848918,38.2423579197442,0 -122.845793221289,38.2424394753815,0 -122.846046054351,38.2426110461284,0 -122.846236268886,38.242841115657,0 -122.846391112026,38.2430801484678,0 -122.84659502461,38.2435896206012,0 -122.846765235424,38.24382417217911,0 -122.846990521972,38.2440227398344,0 -122.847260872927,38.2441898236729,0 -122.847470428281,38.2443973863749,0 -122.84798645326,38.2450920204433,0 -122.848125932336,38.2453400432002,0 -122.848321649256,38.2458495013395,0 -122.848773455218,38.2468639899227,0 -122.848962029461,38.2473779406159,0 -122.849306886671,38.2481354308808,0 -122.84989632928,38.2491005213759,0 -122.850236451682,38.2495651000871,0 -122.850435375107,38.249917936392,0 contacts #khStyle84754 1 -122.868593271968,38.242174637907,0 -122.868934157906,38.2420668741435,0 -122.869210367412,38.2421798411441,0 -122.869299926208,38.2424187718577,0 -122.868961126804,38.2425580816715,0 -122.868593271968,38.242174637907,0 contacts #khStyle84754 1 -122.901371230249,38.2423905958097,0 -122.901891143235,38.2423113097601,0 -122.903145044208,38.2420014414346,0 contacts #khStyle84754 1 -122.906777112058,38.2419979493457,0 -122.906312416301,38.2422023310705,0 -122.905331832521,38.24242683972361,0 -122.904695545033,38.2426245877826,0 -122.904398252623,38.2427505162354,0 -122.903629380653,38.2432816075238,0 -122.903583761587,38.2432885239683,0 contacts #khStyle84754 1 -122.906777112058,38.2419979493457,0 -122.906986440882,38.2423696050925,0 -122.907293822343,38.2427258420955,0 -122.908401129581,38.2436730280882,0 -122.908799664497,38.243970752882,0 -122.909103144462,38.2443179695054,0 -122.909340859052,38.2447101955368,0 -122.91022878044,38.2457878705465,0 -122.910571576558,38.2461215952399,0 -122.911385073076,38.2467575966088,0 -122.911732070313,38.2465821214715,0 -122.911625065579,38.2461764822398,0 -122.910495132079,38.24468856673,0 -122.910115530876,38.2443773439664,0 -122.909810974451,38.2440301291442,0 -122.909444866247,38.2432142209612,0 -122.909214287103,38.2428310130302,0 -122.909072294284,38.242655143657,0 contacts #khStyle84754 1 -122.810756270072,38.2419867794472,0 -122.810741637352,38.2424282474286,0 -122.81080481595,38.242851934882,0 -122.811013771259,38.2432488218272,0 -122.811317326623,38.2440739526337,0 -122.811523407815,38.2444798463396,0 -122.811510201983,38.244889890825,0 -122.811354822482,38.2453132235146,0 -122.811339414238,38.2457457954437,0 -122.811156971529,38.2461375404151,0 -122.810815003588,38.2464839636594,0 -122.810919327431,38.2468806803253,0 -122.811325789121,38.2476924590545,0 -122.811867793714,38.2484368622139,0 -122.811982996378,38.248635321887,0 -122.812510102253,38.2490687690197,0 -122.812741358577,38.2492764272784,0 -122.812979506493,38.2494435402159,0 -122.813259372908,38.2496377569051,0 -122.813511728395,38.2498364350407,0 -122.813591761636,38.2499182836849,0 contacts #khStyle84754 1 -122.81243261642,38.242876394453,0 -122.812471888971,38.2427014224294,0 -122.812238942218,38.24232703045,0 -122.811897007716,38.2419794991301,0 -122.811536091027,38.2416544671357,0 -122.811040095419,38.2413652644532,0 -122.810772254567,38.2415045219781,0 -122.810756270072,38.2419867794472,0 contacts #khStyle84754 1 -122.817404278762,38.2453228758765,0 -122.817417639672,38.2452643166372,0 -122.817688504338,38.2444896704917,0 -122.817813763305,38.2442420260694,0 -122.817970425463,38.2440034410618,0 -122.818660196705,38.2430807442322,0 -122.818918559471,38.2425854632139,0 -122.819077356319,38.2423468800126,0 -122.81919512015,38.2420947150955,0 -122.819275048942,38.2418334787565,0 -122.819428559305,38.24113525319281,0 contacts #khStyle84754 1 -122.90665184355,38.2409381966712,0 -122.90665357853,38.2415582208054,0 -122.90676553109,38.2419773876343,0 -122.906777112058,38.2419979493457,0 contacts #khStyle84754 1 -122.825235127673,38.24443817090631,0 -122.825351452938,38.2441814905132,0 -122.825381719618,38.2439201755792,0 -122.825320223924,38.2436542154988,0 -122.82539869283,38.2433974802466,0 -122.825570316248,38.2431634149329,0 -122.82605121619,38.2427765999935,0 -122.826268472151,38.2425741446229,0 -122.826355865955,38.2423174220378,0 -122.826466414586,38.2417858515691,0 -122.826589864476,38.2415336878012,0 -122.826768956012,38.2413086443358,0 -122.826995504774,38.2411016962388,0 -122.82727761702,38.2409534105006,0 -122.82760099452,38.2408727759238,0 -122.828620003044,38.2409508922406,0 -122.828962454212,38.2409604091672,0 -122.829294674453,38.2409158350529,0 -122.829923338194,38.2407004587208,0 -122.830246711663,38.2406198189601,0 -122.830590671661,38.240593283336,0 -122.830900076082,38.24068385686221,0 -122.831175374363,38.240850989442,0 -122.831415628317,38.2410405986414,0 -122.831840336394,38.2414602921055,0 -122.832029800323,38.2416858765112,0 -122.83216171527,38.2419339097972,0 -122.832216098466,38.2421998539113,0 -122.832126234762,38.2424520720137,0 -122.831942849615,38.24268613194221,0 -122.83123012762,38.2432618948671,0 -122.831125249914,38.24351859557331,0 -122.831120348165,38.24378445607881,0 -122.831209026403,38.24404594101281,0 -122.831390275836,38.2442715185984,0 -122.831627673448,38.244465630358,0 -122.831900502254,38.2446282480911,0 -122.832764471719,38.2450620900143,0 -122.833014417625,38.2452381919842,0 -122.83341874947,38.2456803823027,0 -122.833501751023,38.2459283416484,0 -122.833398378804,38.2464644336667,0 -122.833245753477,38.2469869351115,0 -122.832967136981,38.2474732053705,0 -122.832917953103,38.2477390021008,0 -122.832918403671,38.2480093753518,0 -122.832986871903,38.2486763916624,0 contacts #khStyle84754 1 -122.903509106798,38.2426866883719,0 -122.904057358033,38.2426330712422,0 -122.904543272585,38.2424577326894,0 -122.904944707165,38.242160655239,0 -122.905436028426,38.2413950056964,0 -122.905735038312,38.2410392609375,0 -122.905909542272,38.24058427753891,0 -122.906016747741,38.2405192770533,0 contacts #khStyle84754 1 -122.906016747741,38.2405192770533,0 -122.906228692005,38.2403907710394,0 -122.906651132297,38.2406840166571,0 -122.90665184355,38.2409381966712,0 contacts #khStyle84754 1 -122.903145044208,38.2420014414346,0 -122.90422338802,38.2410335093206,0 -122.904650855516,38.240758985432,0 -122.904967692561,38.2404257883087,0 -122.905133300438,38.2400216178889,0 contacts #khStyle84754 1 -122.93782706601,38.2434223487596,0 -122.938160556324,38.2434991385611,0 -122.938487332429,38.24349029826641,0 -122.938806690353,38.2433868277087,0 -122.939139220247,38.2433284255055,0 -122.93947779779,38.2433015680589,0 -122.939819552924,38.2433152683417,0 -122.940163842848,38.2432884119274,0 -122.940473907703,38.243189437146,0 -122.940674074136,38.2429732448661,0 -122.940830335018,38.2427299921707,0 -122.941374667709,38.2417479232762,0 -122.941742748438,38.2409955802254,0 -122.941946112905,38.2407838925447,0 -122.942198021692,38.2406037716246,0 -122.942485609483,38.2404597200366,0 -122.942747504817,38.24028861541861,0 -122.943254182772,38.2399103503349,0 contacts #khStyle84754 1 -122.879839910528,38.2453932527186,0 -122.879802724303,38.2452735597079,0 -122.879523030562,38.2450930196105,0 -122.879224678292,38.2449665362979,0 -122.878281300316,38.2446546213768,0 -122.877293527353,38.2444147494753,0 -122.877014115723,38.2442837732821,0 -122.876923841463,38.244026822941,0 -122.876899309289,38.2437519195658,0 -122.876931481431,38.2426794776538,0 -122.876918377556,38.2424045842634,0 -122.876848104001,38.2421476571243,0 -122.876543378442,38.2419986278414,0 -122.876264339931,38.2420749350355,0 -122.875855376701,38.2425296242915,0 -122.875489978345,38.2429843568506,0 -122.875278554913,38.2431959236107,0 -122.87502968887,38.24337590278471,0 -122.874735176648,38.2435152769875,0 -122.874410785167,38.2435870234475,0 -122.873062348945,38.243752283536,0 -122.872721642852,38.2437564170369,0 -122.872381699998,38.2437335108624,0 -122.872045367836,38.24368807964571,0 -122.871426146529,38.2434665895603,0 -122.871102385867,38.2433806123823,0 -122.870823024102,38.2432315964634,0 -122.870583381209,38.243037561844,0 -122.870386636611,38.2428210445647,0 -122.870217780763,38.2425865332213,0 -122.869598464481,38.2416305213666,0 -122.869143148901,38.2412334610342,0 -122.868634902477,38.2408768961224,0 -122.868353770051,38.2407278721932,0 -122.86805331062,38.2406013578377,0 -122.866821769007,38.24014031675411,0 -122.86617572038,38.2399683354329,0 -122.865840487429,38.2399183802946,0 -122.865488764008,38.2399044529076,0 -122.86521352371,38.240048332974,0 -122.865064873241,38.2402914950559,0 -122.865129023411,38.24055292968271,0 -122.865358416544,38.2410623985689,0 -122.865930139743,38.2420364009779,0 -122.866100061077,38.2422664146141,0 -122.866388465972,38.2425416249201,0 -122.866966847727,38.243209209483,0 -122.866967430341,38.2434750751579,0 -122.866818786956,38.2437137341397,0 -122.866526742292,38.243862103124,0 -122.866205163067,38.2439518572367,0 -122.865864049228,38.2439830057065,0 -122.865522288761,38.243978102518,0 -122.864862555316,38.2438511628382,0 -122.864509595221,38.24391383829511,0 -122.864336393782,38.2441028957655,0 -122.86431698807,38.2449320148636,0 -122.864211129545,38.2452022632103,0 -122.863927990371,38.2451658814077,0 -122.863317133672,38.2448722606266,0 -122.86298402477,38.2448222999621,0 -122.862654647708,38.2448759831385,0 -122.861879018322,38.2454067941386,0 -122.861557785794,38.2454965359599,0 -122.861218456813,38.2455231678986,0 -122.860875999597,38.24550473270761,0 -122.86051701926,38.2455358442395,0 -122.860246793628,38.2456571864303,0 -122.86020304085,38.2459365184776,0 -122.860371193672,38.2461530204899,0 -122.860940222118,38.2464691386522,0 -122.861538653062,38.2467267069663,0 -122.861757908172,38.2469297481602,0 -122.861934256451,38.2471597732011,0 -122.862069500276,38.247407776144,0 -122.862147219292,38.2476692282316,0 -122.862180998164,38.2479351353429,0 -122.86216462404,38.248471352887,0 -122.86211697497,38.2487371610987,0 -122.861996137013,38.2489893666732,0 -122.861818561496,38.24921446503,0 -122.861075387113,38.24991888795821,0 contacts #khStyle84754 1 -122.808705253521,38.2499180597162,0 -122.808719391178,38.248760682849,0 -122.80869651758,38.2484947796279,0 -122.808612920155,38.24823328174621,0 -122.808450323388,38.2479986891994,0 -122.808206523682,38.2478135345304,0 -122.80791009419,38.2476778581064,0 -122.807572082827,38.2476006945001,0 -122.807386190749,38.2473976067266,0 -122.807309054579,38.247127106033,0 -122.807293694313,38.2468567075797,0 -122.807233676568,38.2465952476563,0 -122.807141869768,38.2463337350142,0 -122.807094030409,38.2460587753654,0 -122.807216767113,38.2458336682023,0 -122.807487952214,38.2456538690964,0 -122.808144563652,38.2450376020201,0 -122.808309820431,38.2448035512809,0 -122.808432254091,38.2445559100044,0 -122.808518652696,38.24429469159,0 -122.808570065148,38.2440289103475,0 -122.808583978825,38.2437630652943,0 -122.808559336368,38.2434926515956,0 -122.808473947858,38.2432356556236,0 -122.808322811671,38.2429920711046,0 -122.807888564244,38.2425812889169,0 -122.807742433538,38.242337711874,0 -122.807640250838,38.2420851947833,0 -122.807582389505,38.2418192331706,0 -122.807568463377,38.2415488368767,0 -122.807436974934,38.2413052815136,0 -122.807212532599,38.2411021314756,0 -122.806332276032,38.2406906035152,0 -122.805426205658,38.2403195809952,0 -122.805135218682,38.2401658834164,0 -122.804921854564,38.2399627453721,0 -122.804835815667,38.2396877204076,0 -122.805014781656,38.23953480973961,0 contacts #khStyle84754 1 -122.901371230249,38.2423905958097,0 -122.901098733566,38.2422835967641,0 -122.90086936505,38.2420941382663,0 -122.900731143844,38.2418461798634,0 -122.900699015789,38.2415757803934,0 -122.900735454292,38.2413054398895,0 -122.900842932347,38.2410531853467,0 -122.90106961177,38.2408551056334,0 -122.901356931297,38.24070664694,0 -122.902307961258,38.2404100488304,0 -122.902647281893,38.2403607660257,0 -122.902938861842,38.2402258268123,0 -122.903156261992,38.2400187228042,0 -122.903233029928,38.239757427811,0 -122.903246603227,38.2394870694035,0 -122.903215495118,38.2389823472585,0 contacts #khStyle84754 1 -122.836361376402,38.2387765354288,0 -122.836036938105,38.2388616957002,0 -122.835725658047,38.2389694059887,0 -122.835435721372,38.23911319359921,0 -122.835182828524,38.239297590361,0 -122.835045163243,38.2395362252438,0 -122.835017153697,38.24007693137,0 -122.835030475997,38.2403428180149,0 -122.835208660574,38.241136162484,0 -122.835286276467,38.2413976350161,0 -122.835427141546,38.241641169991,0 -122.835643084082,38.2418487610156,0 -122.835924489805,38.2420068764044,0 -122.836247170844,38.2420749243161,0 -122.836591176129,38.242030346165,0 -122.83688360035,38.2418955717249,0 -122.837120444796,38.2417021363664,0 -122.837562041201,38.2409727486079,0 -122.837688298829,38.2407250824178,0 -122.837889783055,38.2402116555055,0 -122.837946441312,38.2399458668675,0 -122.837949178676,38.2396800050812,0 -122.837880491475,38.2394140436224,0 -122.837694568362,38.2391974839715,0 -122.837426409801,38.2390258735586,0 -122.837129248258,38.2388902697721,0 -122.836804805335,38.2388177165171,0 -122.836361376402,38.2387765354288,0 contacts #khStyle84754 1 -122.813261781898,38.2434191813639,0 -122.81330721803,38.243248018757,0 -122.813447488405,38.243000400882,0 -122.813619853407,38.2427708613703,0 -122.814209723332,38.2421093908704,0 -122.814343905178,38.2418662673767,0 -122.81438744908,38.2415959637021,0 -122.81427199679,38.2413569510769,0 -122.813869234156,38.2409146964249,0 -122.813695554062,38.2406846025181,0 -122.813552262584,38.2404410330402,0 -122.813447216368,38.2401840132924,0 -122.813400762752,38.2399180749307,0 -122.813414312999,38.2396477192015,0 -122.813509234598,38.2393955231688,0 -122.813764416702,38.23889574278721,0 -122.813983504548,38.2381255286728,0 contacts #khStyle84754 1 -122.832015921775,38.2371841455095,0 -122.832061713238,38.2371481616734,0 -122.83206311596,38.2370039656827,0 -122.8320178504,38.2369678502209,0 -122.832019765938,38.2367560601099,0 -122.832111348275,38.2366840924129,0 -122.832156699616,38.2366841579337,0 -122.832202131513,38.2366481777186,0 -122.83233854198,38.23664837463771,0 -122.832518896645,38.2367928306753,0 -122.832518454402,38.2368288800677,0 -122.832608634702,38.2369011100824,0 -122.832608192503,38.2369371594744,0 -122.832653461003,38.2369732726135,0 -122.832652938482,38.2370453719177,0 -122.832698207066,38.237081487137,0 -122.832693841728,38.2375816676215,0 -122.832648050299,38.2376176537997,0 -122.83264796729,38.2376537037046,0 -122.832556394638,38.2377211666212,0 -122.832420341337,38.2377209704785,0 -122.832239628072,38.2375765096066,0 -122.832240507518,38.237504412923,0 -122.832195244215,38.2374682996359,0 -122.832195754137,38.2374007034248,0 -122.832150842119,38.2373645885285,0 -122.832151804903,38.2372564419353,0 -122.832106539143,38.2372203265097,0 -122.832061187468,38.2372202609704,0 -122.832015921775,38.2371841455095,0 contacts #khStyle84754 1 -122.813396835045,38.237691992421,0 -122.813483934866,38.2374262639616,0 -122.813443162992,38.2371738502216,0 -122.813292031567,38.2369257645621,0 -122.813103736055,38.2364117528655,0 -122.812975466418,38.2361637034893,0 -122.812704279676,38.2359469687694,0 -122.812464330423,38.235942076922,0 -122.812356806022,38.2362348093071,0 -122.812573328608,38.2367398531123,0 -122.812764635184,38.2373304779276,0 contacts #khStyle84754 1 -122.850369858397,38.2357762682625,0 -122.850711741309,38.235875846097,0 -122.850899894601,38.23606534839931,0 -122.850861817407,38.2363491921426,0 -122.850591563569,38.2364930423847,0 -122.850239023332,38.2365376504545,0 -122.849888810571,38.2364921354859,0 -122.849670720103,38.2362755552962,0 -122.849695853135,38.236036757653,0 -122.849981792045,38.2359064474401,0 -122.850369858397,38.2357762682625,0 contacts #khStyle84754 1 -122.842604551436,38.2359868038769,0 -122.842409857452,38.23651827329631,0 -122.842265780823,38.2367614131454,0 -122.842019670468,38.2366303983244,0 -122.841856684205,38.236373321171,0 -122.84182191974,38.2361029008066,0 -122.84192254136,38.23581013459841,0 -122.842146582238,38.2357428466597,0 -122.842604551436,38.2359868038769,0 contacts #khStyle84754 1 -122.844923220284,38.2356068958795,0 -122.844995260542,38.2353140867833,0 -122.845204730603,38.2352107235489,0 -122.845478222999,38.2353958431916,0 -122.845514340523,38.2357068194658,0 -122.845328165962,38.235769659076,0 -122.844923220284,38.2356068958795,0 contacts #khStyle84754 1 -122.805014781656,38.23953480973961,0 -122.805039122965,38.2395123181831,0 -122.805379349878,38.2394137521284,0 -122.80571833771,38.2393782685386,0 -122.807417385776,38.2392639303331,0 -122.807736789843,38.2393410659994,0 -122.808355374387,38.2395809150508,0 -122.808690945937,38.2396220246775,0 -122.809030967228,38.23960005094661,0 -122.809363332374,38.2395014583618,0 -122.809538500368,38.239294459518,0 -122.809586370369,38.2390151520077,0 -122.809577436557,38.23874476401911,0 -122.809473811931,38.2384967512219,0 -122.809280142735,38.2382711230801,0 -122.809003969128,38.2377794930734,0 -122.808836035944,38.2375448896922,0 -122.808747103926,38.2372788794875,0 -122.808784906199,38.2370265932052,0 -122.809068494555,38.236869340951,0 -122.809335390983,38.2366760105799,0 -122.809464532639,38.2364509112878,0 -122.809310920716,38.2362028184482,0 -122.809070027391,38.2360131604071,0 -122.808771502512,38.2358774843608,0 -122.808455029235,38.2357778259819,0 -122.807798729623,38.2356325431979,0 -122.807509529546,38.2354833615898,0 -122.807299757407,38.2352757263092,0 -122.807192967438,38.2350141883227,0 -122.807252947347,38.2347484214369,0 -122.807440629822,38.23453243168721,0 -122.807736317826,38.2343887224717,0 -122.808388221777,38.2341644870907,0 contacts #khStyle84754 1 -122.838715235998,38.2341789783657,0 -122.838874358772,38.2339178385983,0 -122.839132743339,38.2338190613165,0 -122.839414148281,38.2339681561436,0 -122.839391393483,38.2342475103316,0 -122.83919411499,38.2344860656335,0 -122.83889387849,38.2346163298222,0 -122.838715235998,38.2341789783657,0 contacts #khStyle84754 1 -122.909072294284,38.242655143657,0 -122.90891940629,38.2424657785953,0 -122.908224851709,38.2413026291904,0 -122.908031804603,38.2409014238471,0 -122.907741461739,38.2400675453947,0 -122.907723436678,38.2396394422096,0 -122.907862877227,38.2392249835702,0 -122.908487617975,38.2385270206517,0 -122.908891796879,38.2377207314069,0 -122.909201465053,38.2373830109565,0 -122.909660997074,38.2371355312875,0 -122.909918557402,38.2367707308653,0 -122.910062276185,38.23634726043401,0 -122.910252230049,38.2354957368448,0 -122.910454461492,38.2351083610485,0 -122.912569325867,38.2337446078039,0 -122.91305303441,38.2335557138282,0 -122.913961293121,38.2334885132208,0 contacts #khStyle84754 1 -122.909623191206,38.24283133483,0 -122.909803416312,38.2426422144098,0 -122.909849823575,38.2423673738946,0 -122.909764089955,38.2421014403114,0 -122.909502940171,38.2416055544558,0 -122.909473639905,38.2413351597397,0 -122.909789197008,38.2408667634623,0 -122.909950546167,38.2403441711253,0 -122.910005156329,38.2400783472231,0 -122.909997959161,38.23954661052031,0 -122.90990150443,38.2390012863499,0 -122.909930022716,38.2387534669438,0 -122.910191297526,38.2385644112823,0 -122.910519160309,38.2385286165789,0 -122.910858422366,38.2385153598944,0 -122.911151436085,38.2383578713358,0 -122.911204227528,38.2381145755191,0 -122.910967022714,38.2373167965749,0 -122.910910213741,38.23705088804541,0 -122.910901263172,38.2367805071306,0 -122.910989772322,38.2365282286063,0 -122.911166463012,38.2362940430028,0 -122.911218559274,38.2360327237268,0 -122.911183178059,38.2357668296914,0 -122.911076008637,38.2355098947805,0 -122.911036709711,38.2352349851791,0 -122.911087374136,38.2349781720922,0 -122.911304738302,38.2347665477625,0 -122.911579884283,38.2346090422388,0 -122.911892821959,38.2344966273503,0 -122.912227487924,38.2344292905479,0 -122.912562055507,38.2344430628442,0 -122.912883667744,38.2345424438855,0 -122.913421030596,38.2348763086364,0 -122.913714013441,38.2350297385476,0 -122.914035787395,38.2349939316107,0 -122.914298094261,38.2348183831175,0 -122.914408032534,38.2345526003003,0 -122.914333696743,38.2343047031449,0 -122.914131146844,38.234074737345,0 -122.913879294963,38.23386726231501,0 -122.913827077635,38.2336374083902,0 -122.913961293121,38.2334885132208,0 contacts #khStyle84754 1 -122.813881978338,38.2341238377826,0 -122.81379146625,38.2340515948258,0 -122.813791915077,38.2340155454605,0 -122.813747016952,38.23397942347921,0 -122.813747109304,38.2339433735427,0 -122.813702208585,38.2339072515394,0 -122.813703201353,38.2337991049724,0 -122.813657944249,38.23376298238,0 -122.813661090652,38.2333709458718,0 -122.813706888748,38.2333349691566,0 -122.813707337611,38.2332989197871,0 -122.8137531383,38.2332629430578,0 -122.813889180477,38.2332631608528,0 -122.813979335186,38.2333354052743,0 -122.814024684398,38.2333354778055,0 -122.814340407031,38.2335883307909,0 -122.814339958479,38.2336243801603,0 -122.814385213182,38.2336605003875,0 -122.81438431612,38.2337325991254,0 -122.814429573561,38.2337687235356,0 -122.814426428613,38.2341607579252,0 -122.81438063301,38.2341967349206,0 -122.814335283261,38.2341966625282,0 -122.814289484931,38.2342326394838,0 -122.814107743536,38.2342278418117,0 -122.813972672421,38.2341239828919,0 -122.813881978338,38.2341238377826,0 contacts #khStyle84754 1 -122.913961293121,38.2334885132208,0 -122.914138283388,38.2334754171626,0 -122.91465833875,38.233345124318,0 -122.914888228392,38.2332419672587,0 contacts #khStyle84754 1 -122.816506384114,38.2324742245429,0 -122.816575078293,38.2324202577968,0 -122.816620424281,38.2324203293223,0 -122.816666222981,38.2323843514556,0 -122.816756912253,38.2323844944147,0 -122.81693723071,38.232528978804,0 -122.816934716786,38.2328173734379,0 -122.816889279757,38.2328533519767,0 -122.816888396539,38.2329209434461,0 -122.816797160448,38.2329928998993,0 -122.816615772409,38.2329926139644,0 -122.816570511695,38.23295649248791,0 -122.816525162713,38.2329564209397,0 -122.816389748042,38.2328480569305,0 -122.816391802553,38.232600218974,0 -122.81648339504,38.2325282633939,0 -122.816483486032,38.2324922134493,0 -122.816506384114,38.2324742245429,0 contacts #khStyle84754 1 -122.919439265672,38.2319043815796,0 -122.919531402851,38.2320012854796,0 -122.919655383601,38.2322537192904,0 -122.919874167983,38.2333128276293,0 -122.92046124831,38.2345704651483,0 -122.920558448773,38.2348273865959,0 -122.920678566817,38.2353546934865,0 -122.920917315122,38.2361389381477,0 -122.921085933515,38.236400413395,0 -122.92131145386,38.2365492726604,0 -122.921487026837,38.2363240812676,0 -122.92162015415,38.2360583077204,0 -122.922285254853,38.2345356640251,0 -122.922438998345,38.2340175565453,0 -122.92261303089,38.2332200760785,0 -122.922712208578,38.2329677959519,0 -122.922921698685,38.2327381199802,0 -122.923216015391,38.2326526998752,0 -122.923904345462,38.2327522954928,0 -122.924208810703,38.2328651517751,0 -122.924473576517,38.2330410683884,0 -122.924678673079,38.2332529950916,0 -122.925032772001,38.2337128584959,0 -122.925181783481,38.2339517850054,0 -122.92542943711,38.2344521326896,0 -122.925715026769,38.2352228781963,0 -122.925864400078,38.2354618018889,0 -122.926063070534,38.2356827343424,0 -122.926306057676,38.23586764509,0 -122.926859941468,38.2361834336202,0 -122.927350210489,38.2365532539577,0 -122.927636806113,38.2367021375874,0 -122.927950589718,38.23680147223101,0 -122.92929125654,38.2370186039502,0 -122.929619880023,38.23691967133541,0 -122.929795409058,38.2367169998042,0 -122.929750328385,38.2364375881224,0 -122.929631304652,38.2361851683901,0 -122.929451554976,38.235955243342,0 -122.929233579636,38.2357478224009,0 -122.929050970512,38.2355224001255,0 -122.928782131501,38.2351121696339,0 -122.928697668304,38.2345803861866,0 -122.928709717433,38.2343100219715,0 -122.928801382814,38.2340532248826,0 -122.929002276124,38.2338325473921,0 -122.929278448133,38.2336795063623,0 -122.929605607749,38.2335985957187,0 -122.929945899882,38.2335988043477,0 -122.930285447004,38.2336350613797,0 -122.930951999615,38.2337481199509,0 -122.931271141696,38.23383843657751,0 -122.931570960771,38.2339692958008,0 -122.932630145624,38.2346413470741,0 -122.933636097548,38.2353629252151,0 -122.934191795962,38.2356741749242,0 -122.934449089413,38.2358545696756,0 -122.934605283719,38.23608898081461,0 -122.934628965729,38.2363593658822,0 -122.934500183652,38.2366116388145,0 -122.934265050934,38.2367962581815,0 -122.933642430866,38.2370257152663,0 -122.933003046427,38.2372281218846,0 -122.932862129548,38.2374668661817,0 -122.932879381753,38.2377327426166,0 -122.933027703158,38.2379806729928,0 -122.933233197699,38.23819258042911,0 -122.93347656381,38.238381983629,0 -122.933749950124,38.2385488694202,0 -122.933927938603,38.2387742835978,0 -122.933983760728,38.2390401799559,0 -122.933866401737,38.239292458697,0 -122.933659085552,38.2395041302314,0 -122.933399661781,38.2396842264686,0 -122.932970392641,38.2400985464966,0 -122.932714890672,38.2402831486905,0 -122.932602526221,38.2405309239025,0 -122.932607274089,38.2408012980524,0 -122.932976550449,38.2415495437396,0 -122.933191333995,38.2417659658809,0 -122.933491220767,38.2418652752854,0 -122.934859253029,38.24195618648211,0 -122.935187378812,38.2420284723715,0 -122.935489750413,38.2421503102163,0 -122.936006545929,38.2425020795062,0 -122.936456879666,38.2429033853498,0 -122.936872547531,38.2433362085848,0 -122.937179613461,38.2434084772229,0 -122.93782706601,38.2434223487596,0 contacts #khStyle84754 1 -122.919024726783,38.2316474694431,0 -122.919248524575,38.2317532451972,0 -122.919439265672,38.2319043815796,0 contacts #khStyle84754 1 -122.914888228392,38.2332419672587,0 -122.915029114651,38.233232743476,0 -122.915370461327,38.2332465148989,0 -122.915699259817,38.2333053363795,0 -122.916016577523,38.2334092108973,0 -122.916352145746,38.233481555238,0 -122.916682449725,38.2334727825849,0 -122.916994320654,38.2333468336058,0 -122.917201300875,38.2331442033666,0 -122.917339418802,38.2328919557331,0 -122.917605245583,38.2321170804982,0 -122.917798675637,38.2318919093446,0 -122.918053462727,38.2317163491755,0 -122.918362456407,38.2315994069863,0 -122.918703474948,38.2315816259222,0 -122.919024726783,38.2316474694431,0 contacts #khStyle84754 1 -122.914888228392,38.2332419672587,0 -122.915139571352,38.2331291827264,0 -122.915479883466,38.2328049868682,0 -122.91566318111,38.2323950571526,0 -122.915649371618,38.232148538856,0 -122.91563869456,38.2319579376717,0 -122.915720929064,38.2315569460346,0 -122.916144101231,38.2311941502149,0 -122.916183073476,38.2311607381001,0 contacts #khStyle84754 1 -122.839783117559,38.2313280191634,0 -122.840014673728,38.2310850027151,0 -122.840231944964,38.2311664145068,0 -122.840385602306,38.231436999112,0 -122.840385654961,38.2317389151774,0 -122.840191142202,38.2318603154717,0 -122.839907651833,38.231688689321,0 -122.839783117559,38.2313280191634,0 contacts #khStyle84754 1 -122.916183073476,38.2311607381001,0 -122.916720573728,38.2310574860847,0 -122.917246869843,38.2310713847911,0 -122.918780657156,38.2315321115699,0 -122.919024726783,38.2316474694431,0 contacts #khStyle84754 1 -122.81876637643,38.2310042334629,0 -122.8189477622,38.2310045160907,0 -122.819173334502,38.2311851155373,0 -122.819173244845,38.2312211654889,0 -122.819218143974,38.23125728540951,0 -122.819216101789,38.2315051255525,0 -122.819124513289,38.2315770811697,0 -122.819079167819,38.2315770106103,0 -122.819033729962,38.2316129899784,0 -122.81889732636,38.2316127775705,0 -122.818581601715,38.2313599367809,0 -122.8185821381,38.2312878374349,0 -122.818537236608,38.2312517172663,0 -122.818538312118,38.2311075206737,0 -122.818606992258,38.2310580600256,0 -122.818629442956,38.2310761200995,0 -122.818675144596,38.23107619138941,0 -122.81876637643,38.2310042334629,0 contacts #khStyle84754 1 -122.834024093268,38.2305133183524,0 -122.833649915851,38.2305037705483,0 -122.83341933211,38.2306251080145,0 -122.833412949234,38.2309180024964,0 -122.833829405241,38.2313331726444,0 -122.833962023338,38.231581205407,0 -122.834163220117,38.2318203213239,0 -122.834418235814,38.2319468603364,0 -122.834714624549,38.2317805520151,0 -122.834790539122,38.2315283117153,0 -122.834752956194,38.2312533776,0 -122.834645363106,38.2309918636311,0 -122.834435872542,38.23078878464671,0 -122.834024093268,38.2305133183524,0 contacts #khStyle84754 1 -122.824039795355,38.2301381276285,0 -122.8239943635,38.2301741089215,0 -122.823857965216,38.2301739022754,0 -122.82381217411,38.2302098829537,0 -122.823812086751,38.2302459329093,0 -122.823629291864,38.230385346595,0 -122.823538243246,38.23038520839,0 -122.823492808329,38.2304211894843,0 -122.823447460908,38.23042112060651,0 -122.823401669439,38.2304571032224,0 -122.823356324656,38.2304570343135,0 -122.82331053313,38.230493012697,0 -122.823219838199,38.2304928747832,0 -122.823174057535,38.23052435001681,0 -122.823083370547,38.2305242120098,0 -122.823037576184,38.2305601902828,0 -122.822901536324,38.230559983074,0 -122.822856276646,38.2305238661122,0 -122.822856720959,38.2304878167012,0 -122.822811464013,38.2304516976273,0 -122.822814026103,38.2301317601355,0 -122.822859817656,38.23009577774671,0 -122.822860264619,38.2300597304354,0 -122.822951488395,38.2299877692528,0 -122.822952456386,38.2298841277633,0 -122.823044038988,38.2298121670544,0 -122.823044126726,38.2297761170957,0 -122.823318511508,38.2295602360847,0 -122.823409194332,38.2295648812192,0 -122.823454985229,38.2295289006947,0 -122.823545676301,38.2295290384256,0 -122.823591467109,38.2294930578478,0 -122.823682158136,38.2294931954735,0 -122.823727058446,38.2295293136774,0 -122.823772761789,38.2295293829892,0 -122.82390782485,38.2296377379915,0 -122.823907737546,38.2296737858523,0 -122.823952997215,38.22970990451231,0 -122.823952550791,38.2297459539269,0 -122.823997454051,38.2297820720292,0 -122.823997366785,38.2298181219874,0 -122.824042267451,38.2298542400678,0 -122.824042191115,38.2298857827317,0 -122.824087094505,38.2299219007984,0 -122.824086117228,38.230030047488,0 -122.824040326325,38.2300660282557,0 -122.824039795355,38.2301381276285,0 contacts #khStyle84754 1 -122.834710392329,38.2298744125655,0 -122.834543176421,38.2296083062546,0 -122.834606858262,38.2293966059383,0 -122.834941632871,38.2293024518166,0 -122.835191160776,38.22948305444261,0 -122.835616516097,38.2299117486997,0 -122.835854950442,38.2301058540013,0 -122.836654339369,38.2306116778059,0 -122.836871337711,38.2308147612626,0 -122.83697853897,38.2310942976463,0 -122.836734421566,38.2312021048763,0 -122.836364159381,38.2311970785514,0 -122.836043392771,38.2310929811853,0 -122.835787409563,38.2309213838398,0 -122.835182589243,38.230271630165,0 -122.834710392329,38.2298744125655,0 contacts #khStyle84754 1 -122.78407690049,38.2363025437286,0 -122.784136190296,38.2361994071191,0 -122.784231374255,38.2357714915108,0 -122.784141073749,38.23491514004,0 -122.78416987956,38.2344735826288,0 -122.784471540886,38.2341361738944,0 -122.784958848936,38.23392978813551,0 -122.78551988082,38.2339082917364,0 -122.785966808475,38.2337108398795,0 -122.786301361976,38.2333554619672,0 -122.787166182781,38.2322620313232,0 -122.787568381939,38.2319698606777,0 -122.788037482717,38.23175441645701,0 -122.788564149942,38.2316337058462,0 -122.789105576899,38.2315941318278,0 -122.789649664289,38.2316221536289,0 -122.790178761453,38.2317718141961,0 -122.790729115213,38.2317322487792,0 -122.790978818216,38.2314442984702,0 -122.790608854356,38.2310876410931,0 -122.790171876916,38.2308164801912,0 -122.789678953953,38.2306308350286,0 -122.789148651223,38.2305307385429,0 -122.788634535445,38.2303901129304,0 -122.788146988293,38.2301999648207,0 -122.787686341296,38.2299693076126,0 -122.78727762833,38.2296846686545,0 -122.786908300029,38.2293640504546,0 -122.786302090578,38.2292187397076,0 -122.786116078852,38.229335560267,0 -122.786540217977,38.2297148625538,0 -122.786867665195,38.2300714551118,0 -122.787076109675,38.2304638790173,0 -122.78709764234,38.2309145419104,0 -122.786774357867,38.231206855537,0 -122.786277736567,38.2314312566849,0 -122.784981778753,38.2322129554109,0 -122.784664033019,38.2325593482532,0 -122.784154021221,38.2333199575027,0 -122.783832285317,38.2336843655982,0 -122.783399581397,38.2338998607422,0 -122.782289697321,38.2339293346659,0 -122.781754939226,38.2340004334445,0 -122.781247308983,38.2341932490632,0 -122.781034766407,38.2345758794945,0 -122.781064028013,38.234771571928,0 contacts #khStyle84754 1 -122.919439265672,38.2319043815796,0 -122.919629894499,38.2320554280597,0 -122.920383965284,38.2327589203586,0 -122.92071611106,38.2326960633233,0 -122.921003672731,38.2322591601277,0 -122.92144177664,38.2319485329032,0 -122.921243594379,38.2316284569426,0 -122.920751108813,38.2313847832971,0 -122.920209173244,38.231303296442,0 -122.919700877774,38.2311542375865,0 -122.919223000005,38.2309466172935,0 -122.918154925922,38.2304006110101,0 -122.918010433171,38.2299814312033,0 -122.917735193095,38.2296207382851,0 -122.917230814064,38.22918327442621,0 contacts #khStyle84754 1 -122.935909080429,38.2287491264615,0 -122.936068944391,38.228451808901,0 -122.936233558399,38.228438381189,0 -122.93649641947,38.2288549084748,0 contacts #khStyle84754 1 -122.827315668415,38.229295871081,0 -122.827318130366,38.229011983446,0 -122.827363559858,38.2289760008652,0 -122.82731865808,38.2289398840524,0 -122.827321117342,38.228655996396,0 -122.827276213121,38.2286198795605,0 -122.827278241137,38.2283675319313,0 -122.827323672905,38.2283315493669,0 -122.82732411499,38.2282954999309,0 -122.827369903155,38.2282595199765,0 -122.827551271492,38.2282642945237,0 -122.827957195389,38.22858483772241,0 -122.827956665646,38.2286569392161,0 -122.828001926699,38.22869305631791,0 -122.828001040537,38.2287651530858,0 -122.82804630168,38.2288012701697,0 -122.82804533296,38.2289094169022,0 -122.828090235076,38.2289455355348,0 -122.828090149842,38.2289815833978,0 -122.82813505469,38.2290176999181,0 -122.828134969474,38.22905374987901,0 -122.828179871727,38.2290898663777,0 -122.828179797185,38.2291214090439,0 -122.828224702163,38.22915752552871,0 -122.82822461699,38.2291935754887,0 -122.828269519375,38.2292296919518,0 -122.82826907775,38.2292657413844,0 -122.828314336675,38.2293018583567,0 -122.828313895077,38.2293379056906,0 -122.828359156729,38.2293740226489,0 -122.828358715148,38.2294100720809,0 -122.828403974207,38.2294461890174,0 -122.828403447562,38.2295182884068,0 -122.828448350235,38.2295544047988,0 -122.828446421923,38.2297661951366,0 -122.828400992475,38.2298021760331,0 -122.828400465823,38.2298742754181,0 -122.828263099647,38.2299822227022,0 -122.828172407988,38.2299820886172,0 -122.828126619132,38.2300180688757,0 -122.827990580248,38.230017867562,0 -122.827855153912,38.2299095188515,0 -122.827855595746,38.2298734694239,0 -122.827765431506,38.22980123564,0 -122.82776596144,38.2297291383577,0 -122.827675797467,38.2296569045025,0 -122.827676239388,38.2296208550738,0 -122.827585716502,38.2295486206149,0 -122.827586161127,38.2295125711897,0 -122.827315668415,38.229295871081,0 contacts #khStyle84754 1 -122.789518783898,38.2362543244296,0 -122.789576006858,38.2362228829632,0 -122.789892289848,38.2361333309733,0 -122.790573447562,38.23606696322731,0 -122.790904304577,38.2359999650038,0 -122.791211390439,38.235878848047,0 -122.791405602719,38.2356448725345,0 -122.791414157132,38.2354015516673,0 -122.790678084093,38.2348234327804,0 -122.79044691142,38.2346247433155,0 -122.790254011547,38.2344035899659,0 -122.79011580978,38.23416000463,0 -122.790008357193,38.2339029547382,0 -122.789957350688,38.23363699615381,0 -122.789985280688,38.2333621653295,0 -122.790192954137,38.2331642661502,0 -122.790500768144,38.2330341398128,0 -122.790834442769,38.2329761594075,0 -122.791510927747,38.2329097779046,0 -122.792504125781,38.2327222914462,0 -122.793148064244,38.2325476942006,0 -122.793478890132,38.2324851939115,0 -122.794405366241,38.2321488672445,0 -122.79498994552,38.2318750192787,0 -122.795259998381,38.2317087638316,0 -122.795774444283,38.2313581809813,0 -122.796857445662,38.23071117818191,0 -122.797602742542,38.2301582111821,0 -122.79787918793,38.2300009733605,0 -122.798208958346,38.2299249380882,0 -122.798545282576,38.2299345354654,0 -122.798865633603,38.2300387327337,0 -122.799406751968,38.2303641159395,0 -122.799717734825,38.2304998375299,0 -122.800027045499,38.230464319386,0 -122.800309592081,38.2302935685994,0 -122.800509078301,38.2300731047707,0 -122.801444409498,38.2286957974504,0 -122.801490205337,38.2286598254567,0 -122.802130329832,38.2281607212502,0 contacts #khStyle84754 1 -122.802130329832,38.2281607212502,0 -122.803143195828,38.2280587985602,0 -122.803824083955,38.2280599487727,0 -122.804163364001,38.2280289776152,0 -122.804502558974,38.2280295481577,0 -122.805175708988,38.2281208028704,0 -122.80549216863,38.2282114578121,0 -122.805781350445,38.2283561394576,0 -122.80631854621,38.22868598949321,0 -122.807485346028,38.2292421940963,0 -122.807735509125,38.2294273616244,0 -122.80792129702,38.2296529818527,0 -122.807923817636,38.2299143452009,0 -122.807823507575,38.2301755428823,0 -122.807468781344,38.2306436036146,0 -122.80736423329,38.2308867667099,0 -122.807668910499,38.2316578368003,0 -122.808016538073,38.2321225530639,0 -122.808323781892,38.2326007194454,0 -122.808569572456,38.2330968089008,0 -122.808657067476,38.2333628212875,0 -122.808647454,38.2336241665803,0 -122.808388221777,38.2341644870907,0 contacts #khStyle84754 1 -122.84003114476,38.2287913583305,0 -122.840137754739,38.22853464951371,0 -122.840292886695,38.2282960344855,0 -122.840511852066,38.2280890497217,0 -122.840835989219,38.2279543068334,0 -122.841122976273,38.2279907500354,0 -122.841263053307,38.2282658223744,0 -122.841126515347,38.2284954516057,0 -122.840886828025,38.2287069164065,0 -122.84062828615,38.2288868099796,0 -122.84003114476,38.2287913583305,0 contacts #khStyle84754 1 -122.935392852987,38.227870127546,0 -122.935774190804,38.2278568249586,0 -122.935942923114,38.2280281544865,0 -122.935863063362,38.2282984815505,0 -122.935666809189,38.2281586790021,0 -122.935392852987,38.227870127546,0 contacts #khStyle84754 1 -122.903215495118,38.2389823472585,0 -122.903030508373,38.2387208324404,0 -122.903082200109,38.2385226036857,0 -122.903425172591,38.2384012240791,0 -122.903759121358,38.23835644087281,0 -122.904102649493,38.2383567270228,0 -122.904445066533,38.2383885538342,0 -122.904768695068,38.2383167239027,0 -122.905047795605,38.2381592369312,0 -122.905246276525,38.2379385957979,0 -122.905361228802,38.2376863432037,0 -122.905415497181,38.2374205209692,0 -122.905442967168,38.2366184400415,0 -122.905351902149,38.2358027440815,0 -122.905484312974,38.2355820482238,0 -122.905806911672,38.2354651522532,0 -122.906157569608,38.2354654382753,0 -122.906441289216,38.2355918414259,0 -122.906687071953,38.2357858077516,0 -122.907009716938,38.2359122431191,0 -122.907312913117,38.2358899551504,0 -122.908065299973,38.235322776483,0 -122.908354727777,38.2351743023596,0 -122.908530343128,38.2349446249772,0 -122.908546028807,38.2346832778727,0 -122.908344556927,38.234462315354,0 -122.908066590355,38.2343043766643,0 -122.90775643222,38.2341914738991,0 -122.907521722079,38.2339975186358,0 -122.90716058343,38.2335421014601,0 -122.90695089466,38.233330140228,0 -122.906711184742,38.23314068654221,0 -122.906163859245,38.2328112899571,0 -122.905925216715,38.2326263406907,0 -122.905811672219,38.2323468632878,0 -122.90597649319,38.2321847733098,0 -122.906338999541,38.2321219811927,0 -122.906769442333,38.231707760566,0 -122.907266950953,38.231338654744,0 -122.907482527155,38.231131541108,0 -122.907635653915,38.23089283439281,0 -122.90770348221,38.2306225186288,0 -122.907641317928,38.230370121511,0 -122.907394837928,38.23017615637201,0 -122.907116176795,38.2300182146752,0 -122.906814265378,38.22989179613111,0 -122.906176804731,38.2297020187621,0 -122.905868097682,38.2295891120002,0 -122.905577279848,38.2294491816389,0 -122.905308269456,38.2292867404162,0 -122.904825672407,38.2289078185947,0 -122.90462457831,38.2286913548551,0 -122.904374586547,38.2281909580193,0 -122.904221722674,38.2279565085929,0 -122.903925230211,38.2277940370803,0 -122.90363628956,38.2278613905288,0 -122.903347566847,38.2280323838732,0 -122.90303464116,38.2281447760525,0 -122.902704338993,38.22816702998931,0 -122.902362686359,38.2281351963789,0 -122.90202275821,38.2281484277607,0 -122.90134925517,38.2282289637229,0 -122.901015683266,38.2282917652485,0 -122.900702058428,38.2283906329467,0 -122.900418706529,38.2285435987656,0 -122.900186358375,38.2287371652857,0 -122.8999936015,38.2289578031346,0 -122.89969480084,38.2294397084401,0 -122.899478430351,38.2299487201738,0 -122.899411300287,38.2302100215721,0 -122.899370583007,38.2304758511573,0 -122.899370208207,38.2307462253033,0 -122.899322706638,38.2310120489313,0 -122.899168111295,38.2312597561163,0 -122.89888224695,38.2314127160177,0 -122.898561928951,38.2314349671063,0 -122.898094384409,38.2310289955443,0 -122.897821451941,38.2308710367914,0 -122.897188663938,38.2306722022344,0 -122.896580581793,38.2304238166729,0 -122.896330528815,38.2302523572347,0 -122.896175198756,38.230008882619,0 -122.895979521247,38.2297653714276,0 -122.895735860343,38.2296209518073,0 -122.895405075973,38.2297242971778,0 -122.895166639977,38.2299178461825,0 -122.895037376292,38.230170076221,0 -122.895031892626,38.2312470558022,0 -122.894977597538,38.23150836635,0 -122.894618298256,38.2320623014284,0 contacts #khStyle84754 1 -122.839091020102,38.2271813362623,0 -122.838807117655,38.2273656980242,0 -122.838820870703,38.2276045478179,0 -122.839060744588,38.2277941413715,0 -122.839419803006,38.2276909956478,0 -122.839354208303,38.2274836190761,0 -122.839091020102,38.2271813362623,0 contacts #khStyle84754 1 -122.819428559305,38.24113525319281,0 -122.819299482122,38.2403374509976,0 -122.818895209595,38.2399177435882,0 -122.818891608204,38.2396428595854,0 -122.819011487629,38.2393997105545,0 -122.819405062604,38.238949701133,0 -122.819507810781,38.2387020176655,0 -122.819534862669,38.2381613131681,0 -122.819513740645,38.23789541442891,0 -122.81898839542,38.2363399486552,0 -122.818815395533,38.2355465841354,0 -122.818799637711,38.2352806934932,0 -122.818832795296,38.2350148769654,0 -122.818937342097,38.2347581862269,0 -122.819072221415,38.2345105530114,0 -122.819243835523,38.2342810059835,0 -122.819699033335,38.2338806546884,0 -122.820567690707,38.2330573605092,0 -122.820758208882,38.2328323435307,0 -122.82107253565,38.232355170511,0 -122.821170278384,38.23210297035161,0 -122.821212365042,38.2318326594724,0 -122.8212014828,38.2310305346235,0 -122.821251051711,38.2307647446011,0 -122.82145441158,38.2302513454498,0 -122.821587834317,38.2300082142915,0 -122.821772983546,38.2297831873504,0 -122.82240082277,38.22914426339071,0 -122.822504616222,38.2288965806716,0 -122.822517784988,38.2286217219194,0 -122.822453032488,38.2280898861066,0 -122.822456903528,38.2278195183323,0 -122.822615611389,38.22730605085,0 -122.822405194653,38.2270623933513,0 -122.822129738153,38.2271340723116,0 -122.821891050321,38.2273545126364,0 -122.821771893978,38.2276066786331,0 -122.821582467358,38.2281200978219,0 -122.821202901953,38.2285656314384,0 -122.82105198421,38.2288087352807,0 -122.820819371668,38.2293130741443,0 -122.820637435833,38.22982650324801,0 -122.820573223131,38.2300922704575,0 -122.820549002154,38.2303581014653,0 -122.820218623338,38.2311191439138,0 -122.820028834783,38.2313396559896,0 -122.819786991282,38.2315285421945,0 -122.819266243095,38.2318747127189,0 -122.819028311308,38.2320681107491,0 -122.818526673679,38.2327657939538,0 -122.818331865574,38.2329908006366,0 -122.818102140303,38.233184209599,0 -122.817802587322,38.2333144210693,0 -122.817522613185,38.233467192756,0 -122.817270424436,38.2336470471026,0 -122.817064203596,38.2338630212164,0 -122.816834828707,38.2340564282448,0 -122.816002726943,38.23452376136981,0 -122.815744471058,38.2346990955257,0 -122.815532898639,38.2349105532499,0 -122.815369118939,38.2351446167246,0 -122.815008692658,38.2358965839551,0 -122.814440552146,38.237441316001,0 -122.81429852222,38.2376844188339,0 -122.813983504548,38.2381255286728,0 contacts #khStyle84754 1 -122.779863863199,38.2305766410756,0 -122.779823263495,38.2303061901383,0 -122.779820141711,38.2300403173621,0 -122.77986807578,38.2297745390008,0 -122.779884337955,38.2292383286131,0 -122.779857648941,38.2289724091402,0 -122.779689024366,38.2281789925127,0 -122.779654124396,38.2279130595039,0 -122.779644946398,38.2276426657291,0 -122.779747138804,38.2273814972995,0 -122.779958751922,38.2271836234334,0 -122.780287132057,38.2270986253722,0 -122.781297334707,38.2269383034647,0 -122.781626816045,38.2269614522004,0 -122.781937445977,38.2270791953996,0 -122.782187549974,38.2272599144821,0 -122.782391132529,38.2274765941681,0 -122.782552157722,38.227715722232,0 -122.782863715067,38.2284823679059,0 -122.783172935849,38.22895609537551,0 -122.783562950635,38.2293984356392,0 -122.784428858502,38.2302246822989,0 -122.784585243529,38.2304683061406,0 -122.78464159943,38.2307297740596,0 -122.784575469626,38.2309955205988,0 -122.784387358852,38.2312159785735,0 -122.784114066796,38.2313822031026,0 -122.783807001604,38.2314987963768,0 -122.783478316266,38.2315612713144,0 -122.782799625205,38.2316501327051,0 -122.782510739875,38.2317757669455,0 -122.782026114897,38.2321623978748,0 -122.781755314657,38.2323286215831,0 -122.781443585851,38.2324497051647,0 -122.781155016492,38.2323500252905,0 -122.780648407007,38.2319705496711,0 -122.780439078211,38.23176286676631,0 -122.780066607665,38.23130703375141,0 -122.779949512863,38.2310634760265,0 -122.779863863199,38.2305766410756,0 contacts #khStyle84754 1 -122.834389293127,38.2275667691399,0 -122.834034850631,38.2275212005535,0 -122.83378382137,38.2273766412089,0 -122.833680181816,38.2271061192797,0 -122.833769021092,38.2268223530736,0 -122.834005629159,38.2267145433356,0 -122.834331964413,38.2268727274161,0 -122.834420323345,38.2271116842102,0 -122.834389293127,38.2275667691399,0 contacts #khStyle84754 1 -122.9383757218,38.2265063975582,0 -122.93865477095,38.2266913025119,0 -122.93875169799,38.2269166662716,0 -122.938550141517,38.2271328549483,0 -122.938193840087,38.2270966125862,0 -122.937919424848,38.22692072153991,0 -122.937815383684,38.2266683179007,0 -122.9383757218,38.2265063975582,0 contacts #khStyle84754 1 -122.893155897793,38.22984103835201,0 -122.893140793588,38.22984839606101,0 -122.892656330801,38.2300462199417,0 -122.892122644774,38.2302079461876,0 -122.891676179044,38.23006332961461,0 -122.891284971823,38.2297385149681,0 -122.890768871159,38.2296028417696,0 -122.890227587815,38.229593316249,0 -122.889698603084,38.2297144800716,0 -122.888664811566,38.2300199108229,0 -122.888163557558,38.229983377098,0 -122.888477916612,38.2296547275517,0 -122.889267986708,38.2290156055162,0 -122.889617327653,38.228686986427,0 -122.8899317087,38.2283358019314,0 -122.890191856283,38.2279575277732,0 -122.890318170114,38.2275385701097,0 -122.890361896933,38.2262453287197,0 -122.890515678307,38.22583991544811,0 -122.890555326822,38.2258159910362,0 contacts #khStyle84754 1 -122.850588471762,38.2256645937793,0 -122.850841945903,38.2258496755334,0 -122.851019299356,38.2260707069416,0 -122.851118375711,38.22633219498351,0 -122.851826887449,38.2278381814412,0 -122.851855982919,38.2281040866456,0 -122.851838085462,38.2291765441354,0 -122.851725599833,38.2297081342534,0 -122.851708989317,38.2299739788778,0 -122.851638474354,38.2302352493553,0 -122.851397497216,38.23073963715341,0 -122.851183486199,38.2309781932135,0 -122.850974571481,38.2309959500524,0 -122.850919833556,38.2306984690775,0 -122.850902017433,38.23015769988991,0 -122.850835070239,38.2298962531724,0 -122.850825975064,38.2296303735047,0 -122.850986500374,38.228832980026,0 -122.850993481808,38.2285626157686,0 -122.850789214423,38.228057656757,0 -122.850750484944,38.2277917388748,0 -122.850442928601,38.2264710231683,0 -122.850471681153,38.2262051900028,0 -122.850588471762,38.2256645937793,0 contacts #khStyle84754 1 -122.821967362957,38.225642261696,0 -122.822341137927,38.2256608566686,0 -122.822502784221,38.2258458594851,0 -122.822459230733,38.2261341938907,0 -122.822120136147,38.2262418236044,0 -122.821952693032,38.2260928615099,0 -122.821967362957,38.225642261696,0 contacts #khStyle84754 1 -122.829703734646,38.2260594180071,0 -122.829694801443,38.22575748844291,0 -122.829841208769,38.2255954796308,0 -122.830211664292,38.2256591073039,0 -122.830469728425,38.225844239966,0 -122.830585880449,38.2261012653555,0 -122.830523421449,38.2263985833661,0 -122.830291764114,38.2263712096672,0 -122.829703734646,38.2260594180071,0 contacts #khStyle84754 1 -122.846474844411,38.2252965675972,0 -122.846331583409,38.2254652652143,0 -122.846345220189,38.2258589176858,0 contacts #khStyle84754 1 -122.846474844411,38.2252965675972,0 -122.846438531843,38.2252040456966,0 -122.846232642433,38.2249784621456,0 -122.845948677515,38.2250366657925,0 -122.845622437855,38.2251624074581,0 -122.845282831895,38.2251934978982,0 -122.844637307062,38.2253638753693,0 -122.844301211727,38.2254220031338,0 -122.843952050788,38.2254125216211,0 -122.843646652873,38.2253084655331,0 -122.843507200743,38.2250739541445,0 -122.843378757334,38.2246997644124,0 contacts #khStyle84754 1 -122.846345220189,38.2258589176858,0 -122.84573021424,38.2261944746884,0 -122.84541048484,38.2262796691387,0 -122.844738305642,38.2263869198399,0 -122.844407037861,38.2263549333947,0 -122.843767293248,38.2261558006047,0 -122.84322313346,38.2258396307204,0 -122.842908450951,38.2257355622783,0 -122.842578696164,38.2256675205253,0 -122.842242456464,38.2256265086866,0 -122.841223255878,38.2255620312805,0 -122.840862758249,38.2255119697777,0 -122.840589862235,38.2254034450672,0 -122.840654733094,38.2251286553846,0 -122.840885086089,38.2249352032202,0 -122.841205232994,38.2248229861824,0 -122.841532442683,38.2247468280036,0 -122.84186885168,38.224706729437,0 -122.842209492349,38.2246936753237,0 -122.843378757334,38.2246997644124,0 contacts #khStyle84754 1 -122.843378757334,38.2246997644124,0 -122.843469956829,38.2246277893922,0 contacts #khStyle84754 1 -122.835819289854,38.2275552798184,0 -122.835326732432,38.2268516099413,0 -122.835090792758,38.2263510853932,0 -122.834918516132,38.2261165171207,0 -122.834420922008,38.2257508025351,0 -122.834208274756,38.2255296954466,0 -122.834181747859,38.2252637891512,0 -122.834390665818,38.2250838388904,0 -122.834760950643,38.2250663413411,0 -122.834930562798,38.2245844156422,0 -122.835271385167,38.2244902691901,0 -122.835549583787,38.2246168388874,0 -122.835775462851,38.2248289497664,0 -122.835928794902,38.2250725025904,0 -122.836636623761,38.2265785814222,0 -122.836737803355,38.2268355795338,0 -122.836890156897,38.2273585135416,0 -122.836928825441,38.2276289434471,0 -122.836925700832,38.2279083250598,0 -122.836690326728,38.2281017602763,0 -122.836375749435,38.2281103299529,0 -122.836151939018,38.2279252587762,0 -122.835819289854,38.2275552798184,0 contacts #khStyle84754 1 -122.847169870606,38.2242438323369,0 -122.847173265546,38.2243758704874,0 -122.846991745401,38.2247856977311,0 -122.846629735216,38.2251141741754,0 -122.846474844411,38.2252965675972,0 contacts #khStyle84754 1 -122.823246900294,38.2246483376742,0 -122.823330055002,38.2243690777652,0 -122.823574270249,38.2242207431018,0 -122.82390011261,38.2242708052632,0 -122.823936880965,38.2245682724063,0 -122.823722010422,38.2246896147461,0 -122.823246900294,38.2246483376742,0 contacts #khStyle84754 1 -122.843469956829,38.2246277893922,0 -122.843790621263,38.2242722279468,0 -122.844586855511,38.2240795289254,0 contacts #khStyle84754 1 -122.843469956829,38.2246277893922,0 -122.843753823397,38.2247813826923,0 -122.844066024504,38.2248764330428,0 -122.844410162619,38.22489492001311,0 -122.844767988198,38.2248593491661,0 -122.845022849266,38.2247199968254,0 -122.845058095644,38.2244316453469,0 -122.844586855511,38.2240795289254,0 contacts #khStyle84754 1 -122.952566713142,38.2308092306914,0 -122.952231928528,38.2306182097128,0 -122.951842569444,38.2303251422625,0 -122.95152216509,38.2299735225214,0 -122.951349476742,38.2298408092017,0 -122.951134957692,38.2296759473901,0 -122.950288390309,38.2291348359068,0 -122.948916044835,38.2283861976435,0 -122.948804596846,38.22820182968971,0 -122.948711694431,38.22804814080601,0 -122.948860538951,38.2276066008688,0 -122.9491318494,38.2271276081898,0 -122.949304540509,38.2268227221803,0 -122.949457287485,38.2264082203437,0 -122.949505426619,38.2259846593381,0 -122.949476094506,38.2255520513815,0 -122.949393201245,38.2251284318751,0 -122.949249607087,38.2247137975063,0 -122.949042093392,38.2243171589991,0 -122.948756373517,38.2239475219538,0 -122.948604335693,38.2238104369651,0 contacts #khStyle84754 1 -122.831357109284,38.2237816799297,0 -122.831692220511,38.2238407464397,0 -122.831985048736,38.22396734373551,0 -122.832232399315,38.2241524570829,0 -122.832519463998,38.2243015770705,0 -122.832786792177,38.2244957305641,0 -122.83291412244,38.22470770714961,0 -122.832580479884,38.2247838320691,0 -122.832243198768,38.2247337775168,0 -122.8319375239,38.2246026549938,0 -122.831615345979,38.224507555752,0 -122.831313984617,38.2243629201039,0 -122.831120950937,38.2241598587585,0 -122.831357109284,38.2237816799297,0 contacts #khStyle84754 1 -122.948604335693,38.2238104369651,0 -122.948576534395,38.2238077516671,0 -122.948570260171,38.2237797126527,0 contacts #khStyle84754 1 -122.948604335693,38.2238104369651,0 -122.948570260171,38.2237797126527,0 contacts #khStyle84754 1 -122.825865197247,38.22367894419931,0 -122.826085679677,38.2238955731075,0 -122.826168283371,38.2241390350573,0 -122.826089805847,38.224409291415,0 -122.825931741012,38.2246659107511,0 -122.825668305376,38.2247916890831,0 -122.825336483882,38.2247010654266,0 -122.825148902108,38.2244619522846,0 -122.825173066244,38.224214147206,0 -122.82538069128,38.2239846409555,0 -122.825865197247,38.22367894419931,0 contacts #khStyle84754 1 -122.926209869853,38.2265262338212,0 -122.926146406102,38.2267875483871,0 -122.926035823257,38.2270398263316,0 -122.92570507395,38.22751276410861,0 -122.925504192746,38.2277289330828,0 -122.925243359626,38.2279090106462,0 -122.924921608426,38.2279583679568,0 -122.924216461543,38.2279353739827,0 -122.923982402793,38.2277775018516,0 -122.923710868089,38.2272681199364,0 -122.923507471608,38.226479400252,0 -122.923487040646,38.2262180248247,0 -122.923632552934,38.2256908971862,0 -122.923744926983,38.225438624708,0 -122.924389317086,38.2248126895162,0 -122.924559861243,38.2245829847342,0 -122.924891287783,38.2237946199519,0 -122.925117778329,38.2236640861591,0 -122.925466117884,38.2237814733684,0 -122.925555853341,38.2240113488518,0 -122.92555341788,38.2242952371826,0 -122.925737829507,38.22481357114,0 -122.92586111128,38.22506149302641,0 -122.92621445779,38.2255258583643,0 -122.926357740559,38.2257692852763,0 -122.926339983902,38.2260261283501,0 -122.926209869853,38.2265262338212,0 contacts #khStyle84754 1 -122.822140832051,38.2239121338941,0 -122.822266517837,38.2236149147132,0 -122.822477142401,38.2236242492111,0 -122.822649693865,38.2238723562939,0 -122.822442671788,38.2241424140185,0 -122.822140832051,38.2239121338941,0 contacts #khStyle84754 1 -122.809894077569,38.2228067489691,0 -122.809802847304,38.2228786980004,0 -122.809711808137,38.2228785490497,0 -122.809574784038,38.2229864752126,0 -122.809573254609,38.22316221619,0 -122.809618500465,38.2231983383402,0 -122.809617955304,38.223270437766,0 -122.809978508939,38.2235594267011,0 -122.809978058311,38.223595476121,0 -122.810023307291,38.2236316002141,0 -122.810022856685,38.2236676496338,0 -122.810067746625,38.2237037731224,0 -122.810067201902,38.22377587254301,0 -122.810157697564,38.2238481185371,0 -122.810157258782,38.2238796627548,0 -122.810202148919,38.2239157861903,0 -122.810202054853,38.2239518340921,0 -122.810246947716,38.2239879575142,0 -122.810246853666,38.2240240075139,0 -122.81033699336,38.2240962548822,0 -122.810336537585,38.2241323042912,0 -122.810562069932,38.2243129206015,0 -122.810607413519,38.2243129944658,0 -122.810652309466,38.224349117734,0 -122.810834032377,38.2243494135134,0 -122.810879826175,38.2243134378549,0 -122.810925169764,38.2243135115964,0 -122.81101638636,38.2242460669055,0 -122.81101892061,38.2239576719141,0 -122.810974030041,38.2239215487922,0 -122.810974123731,38.2238854987921,0 -122.810883983664,38.2238132519112,0 -122.81088443384,38.2237772045885,0 -122.810749044586,38.22366883384241,0 -122.810749497493,38.2236327844251,0 -122.810659343567,38.2235650446625,0 -122.810659437411,38.2235289946601,0 -122.810524408058,38.2234206242332,0 -122.810524858414,38.2233845748107,0 -122.81043436296,38.2233123290934,0 -122.81043481336,38.2232762796705,0 -122.810389569715,38.2232401557424,0 -122.810390017476,38.2232041063148,0 -122.810345125023,38.2231679829416,0 -122.810345674783,38.2230958835215,0 -122.810300423309,38.2230597616429,0 -122.810300873773,38.2230237122188,0 -122.810075348712,38.2228430953603,0 -122.810030003381,38.222843021284,0 -122.809985116648,38.2228068977787,0 -122.809894077569,38.2228067489691,0 contacts #khStyle84754 1 -122.905133300438,38.2400216178889,0 -122.905137504415,38.2400113579108,0 -122.906054153201,38.2389441393922,0 -122.906936831023,38.2384491734824,0 -122.907732485493,38.2378595011281,0 -122.908481744675,38.2372382431413,0 -122.908803208057,38.2368915206833,0 -122.909057932036,38.2365132012747,0 -122.909185223619,38.23609422510921,0 -122.909339478677,38.2352426747671,0 -122.909565287294,38.234850812822,0 -122.909900649905,38.2345131105999,0 -122.910328766317,38.2342430726966,0 -122.910732302186,38.2339234459654,0 -122.910909492673,38.2335675933034,0 -122.910050688371,38.2324448812784,0 -122.909543526888,38.2316829356828,0 -122.909231527784,38.2313357125022,0 -122.908058992139,38.2304380477433,0 -122.906967260899,38.2294773494149,0 -122.906630635196,38.2291391116129,0 -122.90636618369,38.2287648818464,0 -122.90624389912,38.2283457051722,0 -122.906229099047,38.2279176034641,0 -122.906421569014,38.2270705929894,0 -122.906593120723,38.22666066732481,0 -122.906824273005,38.2262688144576,0 -122.907206334643,38.2259672069918,0 -122.907214479797,38.2259635028291,0 -122.907681113823,38.2257512906183,0 -122.90820720084,38.2256165250006,0 -122.908485086791,38.2253613066847,0 -122.908584668635,38.2252698473069,0 -122.908407608917,38.2249632843737,0 -122.907403462747,38.2245343912503,0 -122.906482908095,38.2240785201077,0 -122.904941810895,38.2236536746711,0 -122.904479400284,38.2234279816049,0 -122.903652918691,38.2228640169309,0 -122.903187285863,38.2226518346462,0 -122.902070824546,38.2224255806003,0 -122.90175280146,38.2226280894839,0 -122.901728948534,38.2231057276495,0 -122.902009282689,38.224376717993,0 -122.902024992851,38.2251698244353,0 -122.901460768324,38.2252504552747,0 -122.901098040335,38.22549798622941,0 -122.900961056291,38.2259349710299,0 -122.900644159272,38.226344763493,0 -122.900265874185,38.2264751170038,0 -122.899866473222,38.2261232864883,0 -122.899341247141,38.2253657858445,0 -122.89803428547,38.2239902431586,0 -122.897646996993,38.2236744652445,0 -122.897182116106,38.223444234932,0 -122.896668558906,38.2235519251583,0 -122.896272548763,38.2238489798367,0 -122.896104146061,38.22426790610461,0 -122.896019994522,38.2246914142778,0 -122.89599545379,38.2251239885348,0 -122.89601288805,38.226412780757,0 -122.895952291827,38.2268408161725,0 -122.895829588507,38.2272552768519,0 -122.895635487413,38.2276606604169,0 -122.895121317991,38.2284172376218,0 -122.89483157858,38.2287819769854,0 -122.894467284054,38.2290970791895,0 -122.893602441761,38.2296235119091,0 -122.893155897793,38.22984103835201,0 contacts #khStyle84754 1 -122.829367894795,38.2228054276467,0 -122.829505945602,38.2225532816037,0 -122.829766654715,38.222364402955,0 -122.830050506153,38.2223558061207,0 -122.830105192152,38.2226352724892,0 -122.830095604524,38.2229191500271,0 -122.83000361619,38.2231713641698,0 -122.829685096545,38.2233466408266,0 -122.829488249329,38.2232472162857,0 -122.829367894795,38.2228054276467,0 contacts #khStyle84754 1 -122.861233173599,38.2228614328318,0 -122.861175505214,38.2225864851968,0 -122.861244179103,38.2223342191286,0 -122.861500887828,38.2221407582391,0 -122.861800239224,38.2222402533667,0 -122.861973674501,38.2224657708947,0 -122.86202155439,38.2230110819002,0 -122.862006753473,38.2232859427955,0 -122.861958353674,38.2235787907759,0 -122.861719895688,38.2235604772102,0 -122.861463248573,38.223343874508,0 -122.861233173599,38.2228614328318,0 contacts #khStyle84754 1 -122.811216985113,38.222065372986,0 -122.811353009025,38.2220655937729,0 -122.811488396206,38.2221739659555,0 -122.811486325459,38.22242180431011,0 -122.811440533151,38.22245778021351,0 -122.811438993898,38.2226380264184,0 -122.811393204091,38.2226740023067,0 -122.811392658032,38.222746101739,0 -122.811346868134,38.2227820776087,0 -122.811346774632,38.2228181276156,0 -122.811209408322,38.2229215457051,0 -122.811073382814,38.2229213247556,0 -122.810937994858,38.2228129563067,0 -122.810893105032,38.222776833145,0 -122.8108935552,38.2227407837175,0 -122.810848306338,38.222704659954,0 -122.810848759193,38.2226686084321,0 -122.810803510393,38.2226324867491,0 -122.810805039494,38.2224567478491,0 -122.810850829454,38.2224207721885,0 -122.810805583472,38.2223846484103,0 -122.810851376046,38.2223486727535,0 -122.810851826231,38.2223126233235,0 -122.810943054752,38.222240673474,0 -122.810943504891,38.222204624043,0 -122.811035075267,38.2221371778002,0 -122.811080417501,38.222137251485,0 -122.81112585334,38.2221012772394,0 -122.811171195552,38.2221013508891,0 -122.811216985113,38.222065372986,0 contacts #khStyle84754 1 -122.844586855511,38.2240795289254,0 -122.844399529921,38.2238584742515,0 -122.843974138683,38.2234388239117,0 -122.843368594198,38.2227891106445,0 -122.843214179756,38.2225410608479,0 -122.843169750326,38.2222841449094,0 -122.843408000837,38.2220636629603,0 -122.843691704301,38.2221226258402,0 -122.843963336969,38.2223167596659,0 -122.84417030315,38.2225333362822,0 -122.844525992273,38.2229889427098,0 -122.845144096303,38.2239495934405,0 -122.845354659603,38.2241571622529,0 -122.845643179729,38.2243062519793,0 -122.845970179349,38.2243247115863,0 -122.846644170165,38.2241949239239,0 -122.846985142458,38.2241908668249,0 -122.847169870606,38.2242438323369,0 contacts #khStyle84754 1 -122.808225344028,38.2224029517577,0 -122.80806410287,38.2224883059253,0 -122.807853070247,38.2225014751768,0 -122.807687232694,38.2224336080214,0 -122.807621851127,38.2223163368296,0 -122.807624564468,38.2221000424003,0 -122.807667431113,38.2219559147245,0 -122.8077860323,38.221793885057,0 -122.807959044039,38.2217130580262,0 -122.808167933079,38.221699885055,0 -122.808329258589,38.2218533622132,0 -122.808392829633,38.2219796425766,0 -122.808387953542,38.2222049459975,0 -122.80829477408,38.2223399805467,0 -122.808225344028,38.2224029517577,0 contacts #khStyle84754 1 -122.935369266082,38.2214893345338,0 -122.93532389186,38.221525356643,0 -122.935142169788,38.2215252535424,0 -122.93509679809,38.22156127766401,0 -122.93491507593,38.2215611742122,0 -122.934869344999,38.2215971980415,0 -122.934687981848,38.2215970944434,0 -122.934642250782,38.22163311818461,0 -122.933961425879,38.2216282192327,0 -122.933915691775,38.2216642426906,0 -122.933597945547,38.2216640584234,0 -122.933552218036,38.221695572358,0 -122.933416194162,38.2216954931595,0 -122.933370462405,38.2217315185058,0 -122.933325120205,38.2217314920532,0 -122.9331882837,38.221839561847,0 -122.933187081463,38.2219837607813,0 -122.933819260478,38.22248431594571,0 -122.933864603147,38.2224843422056,0 -122.934180695351,38.2227368720024,0 -122.934180306168,38.2227729216799,0 -122.934406136404,38.222953301099,0 -122.934405747333,38.2229893486772,0 -122.934496009028,38.2230615002795,0 -122.934495976444,38.2230975501599,0 -122.934586242428,38.2231651965048,0 -122.934585853445,38.2232012440819,0 -122.934630807597,38.2232373197192,0 -122.93463077508,38.2232733695983,0 -122.934721037351,38.2233455189234,0 -122.934720648427,38.2233815727946,0 -122.934810910923,38.22345371995,0 -122.934810878495,38.22348976982741,0 -122.93490113855,38.2235619211064,0 -122.934900752378,38.2235979707813,0 -122.934991012657,38.2236701219889,0 -122.934990980319,38.2237061697663,0 -122.935035934983,38.2237422452433,0 -122.935035546217,38.2237782949158,0 -122.935080854736,38.2238143705762,0 -122.935080822441,38.2238504204509,0 -122.935125777239,38.2238864958921,0 -122.935125387231,38.2239180382773,0 -122.93544149268,38.2241705645761,0 -122.935486836399,38.2241705902053,0 -122.935532148046,38.2242066656886,0 -122.935668176613,38.2242067424167,0 -122.935805366351,38.224103177257,0 -122.935806177723,38.2239950280429,0 -122.935851550586,38.223959005756,0 -122.935854818378,38.2234948641833,0 -122.935900550011,38.2234588441758,0 -122.935902201678,38.2232064979411,0 -122.935947929128,38.223174978903,0 -122.935949157789,38.2229947322118,0 -122.935994889064,38.22295870796911,0 -122.935996536412,38.22271086689851,0 -122.936042267484,38.2226748447348,0 -122.936042719382,38.22256669529271,0 -122.936088450342,38.2225306710121,0 -122.936093755743,38.2217781375401,0 -122.936048445324,38.2217420643518,0 -122.936048832261,38.2217105198534,0 -122.935823355577,38.2215301458538,0 -122.935732317645,38.2215300946256,0 -122.935687363999,38.2214940193974,0 -122.935369266082,38.2214893345338,0 contacts #khStyle84754 1 -122.845939251078,38.2213194769203,0 -122.845635467199,38.2220531279124,0 -122.845325203674,38.222395187979,0 -122.844835219462,38.2226333637833,0 -122.84475686065,38.2230478318698,0 -122.845054379662,38.2233276156287,0 -122.84616925429,38.2230452068804,0 -122.846624530806,38.2231809964601,0 -122.846964372821,38.2235419433556,0 -122.847162374076,38.22395227093541,0 -122.847169870606,38.2242438323369,0 contacts #khStyle84754 1 -122.917230814064,38.22918327442621,0 -122.917368962172,38.2288786615022,0 -122.917782413727,38.2279669954768,0 -122.917716478098,38.2275478712925,0 -122.917482500172,38.2267050432142,0 -122.917500125024,38.2262769663824,0 -122.917604504766,38.2258534579798,0 -122.917757603669,38.2254843966112,0 -122.917774562572,38.2254435151092,0 -122.91803134207,38.2250651773369,0 -122.918365549262,38.224727449911,0 -122.919616443657,38.2238946842697,0 -122.921059495481,38.2232918542116,0 -122.922614759586,38.2229008739408,0 -122.92308910665,38.2226939075517,0 -122.923518885103,38.2224283288422,0 -122.923930851963,38.2221221808823,0 -122.924056576381,38.2217302242453,0 -122.924003754525,38.2211689230671,0 contacts #khStyle84754 1 -122.825978709266,38.2210024129036,0 -122.826229226204,38.2211965563739,0 -122.826316479764,38.2214355179822,0 -122.826190926721,38.2219850905784,0 -122.826007279898,38.2221921018408,0 -122.825669140453,38.2222096199795,0 -122.825547981391,38.22196610179,0 -122.82550224841,38.2216821393263,0 -122.825539303936,38.2214163283553,0 -122.82573259796,38.2212048249554,0 -122.825978709266,38.2210024129036,0 contacts #khStyle84754 1 -122.924003754525,38.2211689230671,0 -122.923978544478,38.2209010303611,0 -122.923962816805,38.2207759141962,0 -122.923961549537,38.22076583285511,0 contacts #khStyle84754 1 -122.948570260171,38.2237797126527,0 -122.948401357948,38.2236274208493,0 -122.94679273033,38.2224685845224,0 -122.944660545862,38.221133729984,0 -122.944206956157,38.2207596216353,0 contacts #khStyle84754 1 -122.84607623377,38.2206442191174,0 -122.846055107599,38.2208054603585,0 -122.845976738631,38.2212289417965,0 -122.845939251078,38.2213194769203,0 contacts #khStyle84754 1 -122.943853230155,38.2204678742188,0 -122.943823773357,38.2205835635555,0 -122.944095283961,38.2208090071597,0 -122.944206956157,38.2207596216353,0 contacts #khStyle84754 1 -122.944206956157,38.2207596216353,0 -122.943853230155,38.2204678742188,0 contacts #khStyle84754 1 -122.855667570192,38.2206871423713,0 -122.855890050286,38.220475625991,0 -122.856187305772,38.2203633397215,0 -122.856535401619,38.22035926379541,0 -122.856837807446,38.2205308756113,0 -122.856831661705,38.2207516737191,0 -122.856524674357,38.2209090121695,0 -122.856209889712,38.2208590521823,0 -122.855667570192,38.2206871423713,0 contacts #khStyle84754 1 -122.938964841732,38.2201484647726,0 -122.939310724259,38.2202207493482,0 -122.939537286116,38.2203875995807,0 -122.939610601713,38.2206625158372,0 -122.939580391678,38.2209283667954,0 -122.939452013179,38.2211806458437,0 -122.93922048985,38.2213923146863,0 -122.938898470951,38.2213786227195,0 -122.938599410972,38.2212387696839,0 -122.938407173265,38.2210088509882,0 -122.93830315683,38.22073842255361,0 -122.938341218592,38.2204815886187,0 -122.938591622358,38.2203195013247,0 -122.938964841732,38.2201484647726,0 contacts #khStyle84754 1 -122.845939251078,38.2213194769203,0 -122.845905616449,38.2212648964835,0 -122.845674692091,38.221066316068,0 -122.845377229151,38.2209307342027,0 -122.845116617903,38.220759148577,0 -122.844842538338,38.2205424838169,0 -122.844730675371,38.2202629479261,0 -122.844836389515,38.2200783336026,0 -122.8451836608,38.2201238601842,0 -122.845442459053,38.2203089610139,0 -122.846023800655,38.2205846129838,0 -122.84607623377,38.2206442191174,0 contacts #khStyle84754 1 -122.833496880776,38.2203059561474,0 -122.833161877348,38.2202063394993,0 -122.832953470407,38.2200122714404,0 -122.832923778263,38.2197283349596,0 -122.833190414278,38.2195935324236,0 -122.833535627464,38.2195985330963,0 -122.833817996853,38.219765668422,0 -122.834078446874,38.2199958594658,0 -122.834151525841,38.22019874271711,0 -122.833496880776,38.2203059561474,0 contacts #khStyle84754 1 -122.827979251359,38.2206178579555,0 -122.828032733033,38.2203475589997,0 -122.828000852086,38.2200906597771,0 -122.827838989412,38.2198470835959,0 -122.827596391586,38.2196259176591,0 -122.827329532451,38.2195489157338,0 -122.827087650647,38.2197783724418,0 -122.827102757522,38.2200307438518,0 -122.827390705965,38.2205493897701,0 -122.827979251359,38.2206178579555,0 contacts #khStyle84754 1 -122.82144768243,38.22004922968471,0 -122.821190778011,38.2198460535371,0 -122.821254923919,38.2196028157621,0 -122.821505639478,38.2194184451667,0 -122.821827458319,38.2195000519703,0 -122.821710176821,38.2197206782325,0 -122.82144768243,38.22004922968471,0 contacts #khStyle84754 1 -122.818863354042,38.219677357251,0 -122.81886558491,38.21941435975501,0 -122.819007447206,38.2193234631198,0 contacts #khStyle84754 1 -122.819007447206,38.2193234631198,0 -122.818863354042,38.219677357251,0 contacts #khStyle84754 1 -122.823311404659,38.2197005919515,0 -122.823250312287,38.219425617638,0 -122.823342653728,38.2191824216261,0 -122.823606212443,38.2189980702833,0 -122.823981510339,38.21896258726391,0 -122.824045304266,38.2191564524498,0 -122.823873308252,38.2194175512512,0 -122.823311404659,38.2197005919515,0 contacts #khStyle84754 1 -122.838930157545,38.21920959634521,0 -122.839014140177,38.2194936044583,0 -122.83889909181,38.2196962257199,0 -122.838549026104,38.21978586459881,0 -122.838218200311,38.2197313287576,0 -122.837923623532,38.2195912246041,0 -122.837680566382,38.2194016238857,0 -122.837395732175,38.2192164693524,0 -122.83729624736,38.2190045364763,0 -122.837539133597,38.2187885779998,0 -122.837849932827,38.21885660555661,0 -122.838930157545,38.21920959634521,0 contacts #khStyle84754 1 -122.867344029363,38.2193176889693,0 -122.867494582329,38.2195702118401,0 -122.867507690522,38.2198225751994,0 -122.867342299478,38.2200702268598,0 -122.867047919053,38.2201825446047,0 -122.866384668816,38.2203349939283,0 -122.865718288519,38.2204423733028,0 -122.865404285095,38.2205456516643,0 -122.865109142438,38.220680493914,0 -122.864835733813,38.220837893129,0 -122.86460294848,38.2210358944763,0 -122.864337369734,38.2212068215067,0 -122.864027626758,38.2213191137,0 -122.863693850311,38.2213006963708,0 -122.863358741474,38.2212327087314,0 -122.862715052404,38.2210381796071,0 -122.862452580893,38.2208846575674,0 -122.862327032893,38.2206321579456,0 -122.862263275073,38.2203662139314,0 -122.86226057419,38.2200958393712,0 -122.862362807984,38.2198391051567,0 -122.862391505835,38.2195777783006,0 -122.862317037288,38.2193118215399,0 -122.862167583284,38.2190547901359,0 -122.862154111656,38.2188159433679,0 -122.862394420282,38.2186044380083,0 -122.862702700332,38.2185056661069,0 -122.863386134395,38.2184343740679,0 -122.863723467177,38.2184527965209,0 -122.864378279535,38.2186067780248,0 -122.864682941159,38.21872429506541,0 -122.865244293024,38.2190313731886,0 -122.865538588861,38.2191578863439,0 -122.865867247275,38.2192348770596,0 -122.86654696103,38.2192491801712,0 -122.867344029363,38.2193176889693,0 contacts #khStyle84754 1 -122.894618298256,38.2320623014284,0 -122.894457625594,38.2323054896071,0 -122.894228827649,38.2324900350935,0 -122.893921204388,38.2326159276664,0 -122.893644608493,38.2327688833616,0 -122.893390824536,38.2329488990103,0 -122.892739675468,38.2335701510883,0 -122.892535419348,38.2338178034248,0 -122.892279012387,38.2338355895648,0 -122.892051172987,38.2336100669413,0 -122.891947290683,38.2333531151344,0 -122.891844888062,38.2328212870279,0 -122.891759664908,38.2320236076432,0 -122.891595532763,38.2312258561484,0 -122.891490226852,38.2309689024736,0 -122.891308818705,38.23074342185721,0 -122.891036281481,38.2305719299427,0 -122.890704637878,38.2305265542016,0 -122.890386717335,38.2306163736567,0 -122.890177860162,38.2308369822878,0 -122.890036068366,38.23109820743791,0 -122.889877946291,38.2312963315393,0 -122.889545689967,38.2311833593553,0 -122.889361069438,38.230962377837,0 -122.889029722823,38.2304889076297,0 -122.888763619214,38.2303174165826,0 -122.888447029684,38.230235998986,0 -122.887761751837,38.2302894103748,0 -122.887424358009,38.2302710572331,0 -122.887107451391,38.2301671055318,0 -122.886776178272,38.230117211738,0 -122.886434450437,38.230130396265,0 -122.886090446659,38.2302291930643,0 -122.885814532916,38.2301703407042,0 -122.885722823469,38.2299088899479,0 -122.885906017913,38.2296657357535,0 -122.885835703566,38.2294223311608,0 -122.885520126716,38.2289308413822,0 -122.885300495698,38.2287323509166,0 -122.884744353792,38.2284163625885,0 -122.884423838859,38.2283439426401,0 -122.884079297809,38.2283345851841,0 -122.883057443567,38.2283200384411,0 -122.882384631193,38.2284004663905,0 -122.881707226603,38.228449345206,0 -122.880702598537,38.2285970184125,0 -122.87971182349,38.2287897599199,0 -122.878712509056,38.2289554466409,0 -122.877705036315,38.2290895714606,0 -122.87742520857,38.2292379805054,0 -122.877181381661,38.2294269822841,0 -122.87673936617,38.2298365777235,0 -122.876502665371,38.2300300929758,0 -122.875988972724,38.2303810289,0 -122.875771526966,38.230588080999,0 -122.875624721225,38.23082675340271,0 -122.875391758945,38.2313357035296,0 -122.875238166567,38.2315743681247,0 -122.87502641913,38.2317859322625,0 -122.874739424952,38.2319433396594,0 -122.874411985523,38.2319474900968,0 -122.874097611783,38.231829988311,0 -122.873859080175,38.2316314558861,0 -122.873727379812,38.2313924822571,0 -122.873693935767,38.231117565724,0 -122.873709394236,38.2308517171185,0 -122.873683793383,38.23058582160751,0 -122.873555689127,38.2303333339604,0 -122.873164028994,38.2299048150614,0 -122.873154157656,38.2296254189161,0 -122.873281690107,38.2293867284335,0 -122.874654848368,38.2281895716768,0 -122.875270793123,38.2275458486475,0 -122.876146611176,38.2267176455885,0 -122.876403957827,38.2265556957448,0 -122.876741076839,38.2265109949579,0 -122.877426582396,38.2265207336334,0 -122.877758366211,38.2264670117752,0 -122.878401697557,38.2262874397812,0 -122.878691491097,38.226148051342,0 -122.879499228671,38.2256487071248,0 -122.879776178768,38.2255002901295,0 -122.880119282122,38.22550515148961,0 -122.881073174226,38.2257900291077,0 -122.881403322275,38.2258579608803,0 -122.881740308311,38.2258943539185,0 -122.882079870355,38.225881183018,0 -122.882754090944,38.2258007583065,0 -122.883749098265,38.2256125006875,0 -122.884091845981,38.2256173521741,0 -122.884417000357,38.225685270457,0 -122.884678434881,38.2258567669528,0 -122.885357995601,38.2264612760984,0 -122.885608711103,38.22664177234131,0 -122.886175584027,38.22693974229261,0 -122.886469218557,38.2270752185546,0 -122.887415988261,38.22737806025291,0 -122.887718568428,38.227504529584,0 -122.88805119634,38.2275949772722,0 -122.888397157643,38.2276043223582,0 -122.888465344123,38.227379077973,0 -122.888392592081,38.2270906121193,0 -122.887910961819,38.2263826681878,0 -122.887708862578,38.2261616689537,0 -122.887554987249,38.2259271944088,0 -122.887350139841,38.2254042742632,0 -122.887142289077,38.2252103058817,0 -122.886365959522,38.2248400346866,0 -122.885644572203,38.2245013574796,0 -122.885432079612,38.2243118845178,0 -122.88536824848,38.2240369431172,0 -122.885528871979,38.222703262667,0 -122.88552757299,38.22216702062481,0 -122.885498718698,38.2219011263378,0 -122.88542594118,38.2216396936866,0 -122.885311743932,38.2213827250732,0 -122.885162532476,38.2211437465485,0 -122.884963659505,38.2209272507001,0 -122.884260199511,38.2203452468385,0 -122.884075626933,38.220119751251,0 -122.883265170459,38.2192582461268,0 -122.882803844549,38.2188612329964,0 -122.882288533174,38.2185137286911,0 -122.882000671575,38.2183692370725,0 -122.881688822319,38.2182652754379,0 -122.88134723748,38.2182243700274,0 -122.881018716972,38.2182736000863,0 -122.879783092471,38.2187319555909,0 -122.879465195079,38.2188307622205,0 -122.879136997024,38.2188980123848,0 -122.878127535385,38.2190231258769,0 -122.877785868316,38.2190317798946,0 -122.877456959906,38.2190945194127,0 -122.87714333527,38.219197827405,0 -122.876847150432,38.21933270007261,0 -122.876305377967,38.2196565702639,0 -122.875692722409,38.2203003028111,0 -122.874992113127,38.2212188176446,0 -122.874398515871,38.2221825048844,0 -122.874275623401,38.2224347195636,0 -122.874082656462,38.2229482185082,0 -122.873949770328,38.2231959167435,0 -122.873322248081,38.2241460436719,0 -122.87314690445,38.2243756694755,0 -122.872564496122,38.22503744361731,0 -122.871745377272,38.2258927206227,0 -122.870796431544,38.2266622272268,0 -122.870518748528,38.226810622284,0 -122.870201149121,38.2269139136247,0 -122.869202192709,38.2270840229281,0 -122.868862271843,38.2270926510007,0 -122.868180375696,38.2270603320321,0 -122.867852740741,38.2269878586223,0 -122.867553054364,38.2268613433264,0 -122.867302391175,38.2266763010995,0 -122.867113920532,38.2264552817717,0 -122.866970478072,38.2262117794407,0 -122.866766638779,38.2259997543823,0 -122.866331100986,38.2255846793291,0 -122.866063623731,38.2254221472989,0 -122.86576073349,38.2252956215499,0 -122.865439928209,38.2252051263362,0 -122.864439122546,38.2250327218004,0 -122.864098528865,38.2250233102374,0 -122.863768512365,38.2250860102033,0 -122.863523232901,38.2252749821313,0 -122.863359626256,38.22550911454171,0 -122.86325274603,38.2257658418094,0 -122.86312115309,38.2260630971179,0 -122.863056394204,38.2263243812447,0 -122.86305288582,38.22686061607101,0 -122.862955121981,38.2273922342059,0 -122.862850033701,38.2276444600547,0 -122.862414842055,38.2283739508569,0 -122.86232829654,38.2286352086293,0 -122.862282098355,38.228896514282,0 -122.862255375928,38.2294327233812,0 -122.862343475472,38.2302349345478,0 -122.862364239596,38.2307711978404,0 -122.862283452634,38.2315732081826,0 -122.862206535385,38.2318389844776,0 -122.862028272402,38.2320730953235,0 -122.861705100458,38.2320862299993,0 -122.861384658591,38.2319776972478,0 -122.860617636372,38.2314405368565,0 -122.859437860977,38.2309028737352,0 -122.859119177833,38.2308123618804,0 -122.857783110887,38.2305989400186,0 -122.857438191333,38.2305985164437,0 -122.857107614345,38.23056656471511,0 -122.856814753957,38.2304220054681,0 -122.856617718944,38.2302099691703,0 -122.85614304298,38.229199988919,0 -122.855932505813,38.2289563940226,0 -122.855675543799,38.2288974900343,0 -122.85544194109,38.2291225096573,0 -122.855386070799,38.2293883079235,0 -122.855322875504,38.229924468024,0 -122.855223816296,38.2301811997858,0 -122.855164024103,38.2304424857062,0 -122.855183306836,38.2309787507175,0 -122.855225624323,38.2312446692977,0 -122.855448657816,38.2320290290511,0 -122.855610301251,38.2322635533897,0 -122.855997560578,38.2327056453996,0 -122.856477070911,38.23308476067411,0 -122.856736318122,38.233260826037,0 -122.85731494234,38.233540922717,0 -122.858422448116,38.2341641383893,0 -122.859190554886,38.2347013120387,0 -122.859379744429,38.2349178415554,0 -122.859433123564,38.2351972915728,0 -122.859278810143,38.235408897018,0 -122.858466525016,38.2359171092416,0 -122.857874285481,38.2361957702244,0 -122.857657510434,38.2363892719776,0 -122.857579858154,38.2366550442092,0 -122.857574337835,38.2369209028805,0 -122.857624515204,38.2371913372205,0 -122.857797030837,38.2377187765974,0 -122.857816150827,38.2379846654355,0 -122.857552276889,38.2381555769305,0 -122.857246682104,38.2381146460613,0 -122.856962420304,38.2379385533043,0 -122.856378397943,38.2376629537528,0 -122.856083339334,38.23753190794101,0 -122.855770738586,38.2374233697587,0 -122.855444141712,38.2373508632785,0 -122.855106412028,38.2373098867644,0 -122.854090286406,38.23722750077191,0 -122.853410041999,38.23721763079361,0 -122.852053254018,38.2373105409878,0 -122.851388820823,38.2374268523177,0 -122.85074462113,38.2376017681981,0 -122.850456861186,38.23774559770111,0 -122.850200461772,38.2379210075742,0 -122.849978993267,38.2381280089306,0 -122.849851719017,38.2383711796509,0 -122.84979652486,38.2386414810192,0 -122.849790975958,38.2389073393143,0 -122.849831483673,38.239177764492,0 -122.84993130775,38.2394302434595,0 -122.850117599209,38.2396602996376,0 -122.850384389172,38.2398183614505,0 -122.850701641546,38.2399224126114,0 -122.850972351618,38.2400849854099,0 -122.851260242435,38.2402295525108,0 -122.851571419677,38.2403381008102,0 -122.851851418978,38.2405006813368,0 -122.852045978633,38.2407082147502,0 -122.852098639071,38.2409786566135,0 -122.852118083773,38.24124905192261,0 -122.852101831109,38.2415148986322,0 -122.852046283682,38.241785200437,0 -122.85188083864,38.2420102995566,0 -122.851613356294,38.2421857003883,0 -122.851511071451,38.2424334119833,0 -122.851485155317,38.2427082565908,0 -122.851491889662,38.2437807428745,0 -122.851477416852,38.2440465916704,0 -122.851431160584,38.2443123976788,0 -122.851434187638,38.24457826884281,0 -122.851538794101,38.2451191476045,0 -122.851730507412,38.2453266776879,0 -122.852061441279,38.2453901873122,0 -122.85235492283,38.2452553758145,0 -122.852915900422,38.2449406552728,0 -122.853240769193,38.2448239021065,0 -122.853552123465,38.2448558380339,0 -122.853821386677,38.2450409323563,0 -122.853995204094,38.2452709684343,0 -122.854098978324,38.2455234463687,0 -122.854244313513,38.24660061115051,0 -122.854439977613,38.2468036364774,0 -122.854735750498,38.2469527119222,0 -122.855337393033,38.2472013055455,0 -122.855609928639,38.2473638674663,0 -122.855854917411,38.2475489267807,0 -122.856297323321,38.2479595400491,0 -122.85643970921,38.24819854588411,0 -122.856592961609,38.2487214548386,0 -122.857077881552,38.24991826560521,0 contacts #khStyle84754 1 -122.948899383075,38.2179755537757,0 -122.949200247702,38.2182293533829,0 -122.949520595565,38.2185719680359,0 -122.950093438124,38.219302226735,0 -122.950705504428,38.2198811719346,0 -122.951142009556,38.2202940485762,0 -122.951522023907,38.2205961275145,0 -122.951996001867,38.220799108731,0 -122.952681219771,38.2210431363081,0 contacts #khStyle84754 1 -122.818863354042,38.219677357251,0 -122.818418443447,38.2207700387358,0 -122.818334558799,38.2211934937504,0 -122.818066141336,38.2220267273054,0 -122.817728786325,38.2237250489074,0 -122.817552469127,38.2241303332609,0 -122.817285543575,38.2245039313077,0 -122.816354234831,38.2255614283389,0 -122.815470316767,38.22664603051451,0 -122.815190886266,38.2270150976345,0 -122.814746859219,38.2278029814074,0 -122.814691520312,38.2282219726695,0 -122.814830374122,38.2290783776122,0 -122.814947848982,38.2294976439911,0 -122.815340510417,38.230521182238,0 -122.815824493809,38.2303146633641,0 -122.816224748214,38.23003591052481,0 -122.816775429703,38.2292887456714,0 -122.817266517876,38.2285234596082,0 -122.817464973033,38.2281227169358,0 -122.81783653796,38.2273166845818,0 -122.818135693919,38.2260509021302,0 -122.81838628518,38.2252131348557,0 -122.818807775403,38.2244206958179,0 -122.81932092246,38.2236644475842,0 -122.819534682655,38.2232727374325,0 -122.819668177636,38.2228538649542,0 -122.819855213313,38.222006983088,0 -122.820015814994,38.2215971646249,0 -122.820120384824,38.2207456481905,0 -122.821124445489,38.2177797550232,0 contacts #khStyle84754 1 -122.828858714945,38.2185868481211,0 -122.828514357894,38.2185232502948,0 -122.82825519149,38.2183651489616,0 -122.8281258591,38.2181035961155,0 -122.828287742716,38.2178830294246,0 -122.828589381253,38.2177437817174,0 -122.828928653349,38.2176902067521,0 -122.829283717995,38.2177538170296,0 -122.829477490062,38.2179388577166,0 -122.829431833146,38.2182271897865,0 -122.829215413969,38.2184116276926,0 -122.828858714945,38.2185868481211,0 contacts #khStyle84754 1 -122.830107790191,38.2184670118618,0 -122.830208350071,38.2182103026734,0 -122.830358489226,38.21797169090671,0 -122.830567479608,38.2177556972229,0 -122.830879211048,38.2175713956844,0 -122.831002081255,38.2176977501112,0 -122.830923217216,38.2179905396332,0 -122.830718499082,38.2182110474861,0 -122.830442195403,38.2183593501769,0 -122.830107790191,38.2184670118618,0 contacts #khStyle84754 1 -122.835536391473,38.2179791411023,0 -122.835578118546,38.2176817907399,0 -122.835774423824,38.2175423732802,0 -122.836128707234,38.2176375045557,0 -122.836192685774,38.2179214886717,0 -122.836031681028,38.2180789796636,0 -122.835536391473,38.2179791411023,0 contacts #khStyle84754 1 -122.817929417355,38.2174571896102,0 -122.817843797513,38.2177184171247,0 -122.81785956491,38.2179798035219,0 -122.818005324558,38.2182233684716,0 -122.818105623916,38.2185164321148,0 -122.818298157734,38.2186158691913,0 -122.818550392945,38.21839545916231,0 -122.818599640041,38.2181161472106,0 -122.818479560804,38.217881635663,0 -122.817929417355,38.2174571896102,0 contacts #khStyle84754 1 -122.843596608106,38.2175351564494,0 -122.843573721404,38.2175531485577,0 -122.843573209895,38.2176252481226,0 -122.843527436403,38.2176612365219,0 -122.8435264882,38.2177693856229,0 -122.843480717258,38.2178053719087,0 -122.843480202995,38.2178774714667,0 -122.843434798081,38.2179089530116,0 -122.843253085594,38.21790870764701,0 -122.84311765894,38.2178003763175,0 -122.84311809313,38.2177643267776,0 -122.842982657218,38.217660500492,0 -122.842983094133,38.2176244509552,0 -122.842937832489,38.2175883395618,0 -122.842940677035,38.2172638943446,0 -122.843032221387,38.2171919200751,0 -122.843077550901,38.2171964866137,0 -122.843122967907,38.2171604979051,0 -122.843259336651,38.2171606822257,0 -122.843304241774,38.2171967930167,0 -122.843349581013,38.2171968542462,0 -122.84348500689,38.2173051874199,0 -122.843484492631,38.2173772890826,0 -122.843529398009,38.2174133955887,0 -122.843528896151,38.2174809899515,0 -122.843596608106,38.2175351564494,0 contacts #khStyle84754 1 -122.935672312683,38.2171320020824,0 -122.935933479617,38.2173078914315,0 -122.936107850911,38.2175333013047,0 -122.936215082294,38.2177902139179,0 -122.936543454433,38.2182725617032,0 -122.936678898953,38.2185204791595,0 -122.936399593439,38.2186690286317,0 -122.936140129839,38.2185787588614,0 -122.93598150095,38.2183128028073,0 -122.935635622519,38.2178484706253,0 -122.935505537053,38.2176005549442,0 -122.935672312683,38.2171320020824,0 contacts #khStyle84754 1 -122.937015094053,38.2165829964095,0 -122.936736121596,38.2167675989109,0 -122.936679520823,38.2169928753756,0 -122.936942893206,38.2175067286392,0 -122.937100117735,38.2177501503955,0 -122.937289847611,38.2179710596567,0 -122.937595333415,38.2180928947364,0 -122.937933406954,38.2181020918073,0 -122.938255875127,38.2179896120128,0 -122.93847703831,38.2177779393912,0 -122.938516872342,38.217530118716,0 -122.938318221173,38.2173001962203,0 -122.938107063874,38.2170837821572,0 -122.93786053984,38.2168988931595,0 -122.937563270648,38.2167725580331,0 -122.937015094053,38.2165829964095,0 contacts #khStyle84754 1 -122.824967844991,38.2170624441363,0 -122.824748512664,38.2168232842061,0 -122.824785781047,38.2166160540488,0 -122.82511932924,38.2165669866793,0 -122.825385548269,38.2167566505865,0 -122.825573759088,38.2170228002155,0 -122.825601064418,38.2172481526558,0 -122.824967844991,38.2170624441363,0 contacts #khStyle84754 1 -122.814708384343,38.2172583300146,0 -122.814385672483,38.2173930032893,0 -122.814109911911,38.2173159548826,0 -122.813899526659,38.2170812961884,0 -122.813781709208,38.2168062258349,0 -122.813897917656,38.2165946181362,0 -122.814250383185,38.21655011923,0 -122.814522330315,38.2167217898445,0 -122.814672729132,38.2169608612176,0 -122.814708384343,38.2172583300146,0 contacts #khStyle84754 1 -122.828468216858,38.2164413002109,0 -122.828237078594,38.2166617647805,0 -122.828219380168,38.2169005677848,0 -122.828434816848,38.2171307049841,0 -122.82879058056,38.2171988230253,0 -122.829005444416,38.2170684588235,0 -122.828962589376,38.2167709818873,0 -122.828468216858,38.2164413002109,0 contacts #khStyle84754 1 -122.821124445489,38.2177797550232,0 -122.821385892946,38.2170074243511,0 -122.821754155288,38.2161851689371,0 contacts #khStyle84754 1 -122.821124445489,38.2177797550232,0 -122.821128000756,38.2177911143365,0 -122.821345793872,38.2179266354728,0 -122.82162434922,38.2177423073997,0 -122.821780941595,38.2175037184813,0 -122.821842649439,38.2172334368349,0 -122.821959575547,38.2164270007585,0 -122.821792666189,38.2162149510976,0 -122.821754155288,38.2161851689371,0 contacts #khStyle84754 1 -122.820140363062,38.21610431854181,0 -122.819980554815,38.216225676191,0 -122.819599420616,38.21703620793791,0 -122.819297854729,38.21786038084511,0 -122.819084054578,38.2191353132268,0 -122.819007447206,38.2193234631198,0 contacts #khStyle84754 1 -122.841449521031,38.2164372266843,0 -122.841283039107,38.2161666251161,0 -122.841387330357,38.21598201181,0 -122.841657140798,38.2160139252708,0 -122.841757287196,38.2164196217771,0 -122.841449521031,38.2164372266843,0 contacts #khStyle84754 1 -122.822955391236,38.2162122236883,0 -122.822587171604,38.2162792549576,0 -122.822467414279,38.2160537604896,0 -122.822561006446,38.2158826651305,0 -122.82290992685,38.21582461707201,0 -122.822955391236,38.2162122236883,0 contacts #khStyle84754 1 -122.820511076806,38.2158227978284,0 -122.820140363062,38.21610431854181,0 contacts #khStyle84754 1 -122.820140363062,38.21610431854181,0 -122.820072452629,38.2160185310736,0 -122.820048628379,38.2156940467099,0 -122.82048534538,38.2157893529889,0 -122.820511076806,38.2158227978284,0 contacts #khStyle84754 1 -122.82987843637,38.2160918898611,0 -122.830096338415,38.2158804152394,0 -122.830391945516,38.2157186216715,0 -122.830699784626,38.2156695030125,0 -122.830843756027,38.2159310744413,0 -122.830665819436,38.2161516212725,0 -122.830353569902,38.2162548086463,0 -122.82987843637,38.2160918898611,0 contacts #khStyle84754 1 -122.804096859972,38.2161323974666,0 -122.80409776958,38.2160602985707,0 -122.804188994234,38.2159883538901,0 -122.804189903748,38.2159162549918,0 -122.804258232289,38.2158622947086,0 -122.804235792494,38.215844231825,0 -122.804239344801,38.2154521948463,0 -122.804330565898,38.2153802479473,0 -122.804511917954,38.2153805529765,0 -122.804602397698,38.2154528054911,0 -122.804601944479,38.2154888549466,0 -122.804646829363,38.21552498058071,0 -122.804646732572,38.2155610306346,0 -122.804691614864,38.2155971562465,0 -122.804691518095,38.2156332063,0 -122.804781641923,38.2157054580736,0 -122.805054022316,38.2157059150531,0 -122.805099457101,38.2156699410039,0 -122.805190487241,38.2156700935515,0 -122.805235921937,38.2156341194494,0 -122.805281248054,38.2156387005905,0 -122.805327039093,38.21560272705,0 -122.805418069149,38.2156028794213,0 -122.80546295451,38.2156390047416,0 -122.805508290028,38.215639080583,0 -122.805643656599,38.2157474575738,0 -122.805642115264,38.2159231966374,0 -122.805596324173,38.2159591723973,0 -122.805595871447,38.2159952197541,0 -122.805550436702,38.2160311939933,0 -122.80554989026,38.21610329350261,0 -122.805184286592,38.2163865737924,0 -122.805138947951,38.2163864978224,0 -122.805001572939,38.2164944181592,0 -122.804910898182,38.2164942660653,0 -122.80486511846,38.2165257342329,0 -122.804819782392,38.2165256581443,0 -122.804728198613,38.2165976027055,0 -122.804365140012,38.2165969924623,0 -122.804184893832,38.2164524861365,0 -122.804185441616,38.2163803908317,0 -122.804140556436,38.2163442650272,0 -122.80414210141,38.2161685238897,0 -122.804096859972,38.2161323974666,0 contacts #khStyle84754 1 -122.817484894188,38.2163434481263,0 -122.81714915287,38.2164105175646,0 -122.816809355633,38.2163874520834,0 -122.816510146935,38.2162653095941,0 -122.816336539671,38.216026203887,0 -122.816309365833,38.2157602939195,0 -122.816423894282,38.215503620418,0 -122.81664686256,38.2152786608193,0 -122.816931248336,38.2151889837034,0 -122.817256513515,38.2153111640388,0 -122.817526299438,38.2154918368711,0 -122.817669575437,38.215726388017,0 -122.817621454811,38.2159831669539,0 -122.817484894188,38.2163434481263,0 contacts #khStyle84754 1 -122.790125993753,38.2151617190034,0 -122.790743660588,38.2155053046194,0 -122.791584445546,38.2163494828269,0 -122.791817350968,38.2165481739871,0 -122.792082116355,38.21671537870721,0 -122.792311441987,38.216918569796,0 -122.792471417571,38.2171531796497,0 -122.792489834832,38.217455132115,0 -122.792335191482,38.2176035602488,0 -122.791984976728,38.2174767609611,0 -122.791595322968,38.2170389577939,0 -122.791374568824,38.2168357806735,0 -122.791119466921,38.21665957914621,0 -122.790557018792,38.21635214316751,0 -122.790299063966,38.2161759346935,0 -122.790085111443,38.2159682621214,0 -122.789966248831,38.21571569802671,0 -122.789961662131,38.2154498223439,0 -122.790080195518,38.2151976866323,0 -122.790125993753,38.2151617190034,0 contacts #khStyle84754 1 -122.83769287658,38.2151657810052,0 -122.838063516824,38.2151257434162,0 -122.838204501122,38.2152971761923,0 -122.83819599794,38.2155900686699,0 -122.838101394894,38.216392046233,0 -122.837974714287,38.2166892810399,0 -122.837795384498,38.2167431057584,0 -122.837599285407,38.2164724575307,0 -122.837536680605,38.21621100844211,0 -122.837549780154,38.21594065276091,0 -122.83762604475,38.2156793979964,0 -122.83769287658,38.2151657810052,0 contacts #khStyle84754 1 -122.821754155288,38.2161851689371,0 -122.82193043003,38.2157915760156,0 -122.822265741857,38.2154586278623,0 -122.822711161018,38.21520695913711,0 -122.823002184764,38.2150983588865,0 contacts #khStyle84754 1 -122.823002184764,38.2150983588865,0 -122.82320424859,38.2150229548646,0 -122.823715820341,38.2148705202499,0 -122.823898321216,38.2148331783192,0 contacts #khStyle84754 1 -122.823898321216,38.2148331783192,0 -122.823746441409,38.2150508167485,0 -122.823452226091,38.2152216062126,0 -122.823156029409,38.21518060025011,0 -122.823002184764,38.2150983588865,0 contacts #khStyle84754 1 -122.793081837831,38.2145316310156,0 -122.793426364793,38.21451872549551,0 -122.793746012062,38.214591393136,0 -122.794629098151,38.2150030238139,0 -122.794894210786,38.2151747280768,0 -122.795061997017,38.2154273733426,0 -122.795036346024,38.2156616525788,0 -122.794696228994,38.2157556857492,0 -122.794424637845,38.2156019926341,0 -122.793940947682,38.2152135989452,0 -122.793418938459,38.2148702000813,0 -122.793081837831,38.2145316310156,0 contacts #khStyle84754 1 -122.786546306722,38.2144972946012,0 -122.786191904301,38.21459127487121,0 -122.786073174282,38.2147848257519,0 -122.786213387733,38.215055458238,0 -122.786784073559,38.2153449051705,0 -122.78704882565,38.2155121213127,0 -122.787314146899,38.2157289059309,0 -122.787553460785,38.2158059488013,0 -122.787721662776,38.2155403883253,0 -122.787613493519,38.2152968538654,0 -122.787433554959,38.2150576934469,0 -122.787244657345,38.214832036253,0 -122.786975585553,38.2146783304142,0 -122.786546306722,38.2144972946012,0 contacts #khStyle84754 1 -122.833937507034,38.2141299475327,0 -122.833901466462,38.2141690450533,0 -122.833749506266,38.2145879075101,0 -122.833585609894,38.2147730778567,0 contacts #khStyle84754 1 -122.819724051083,38.2145714887242,0 -122.819361903636,38.2146385192975,0 -122.819130904676,38.2145074790186,0 -122.819068771699,38.2142279953577,0 -122.819362979378,38.2140617220384,0 -122.819543174275,38.2142377457203,0 -122.819724051083,38.2145714887242,0 contacts #khStyle84754 1 -122.830070652894,38.2148033862191,0 -122.830013095192,38.2145329277719,0 -122.830049069208,38.2142626062252,0 -122.830227763211,38.2140240383858,0 -122.830509836218,38.2141506240172,0 -122.830549637939,38.214380500924,0 -122.830070652894,38.2148033862191,0 contacts #khStyle84754 1 -122.890555326822,38.2258159910362,0 -122.890955590796,38.225574465099,0 -122.89124958747,38.2252322701471,0 -122.891355559825,38.2247997734164,0 -122.891391909987,38.2243672110951,0 -122.891281130332,38.2239570413579,0 -122.891024287561,38.2235737710043,0 -122.890264116204,38.22195982595571,0 -122.890119072932,38.2215496223389,0 -122.889972142305,38.220265210585,0 -122.889497047875,38.2190345593384,0 -122.889231656851,38.2186557826586,0 -122.888895513561,38.2183219994743,0 -122.888499342169,38.2180242071012,0 -122.88815824186,38.2176678858557,0 -122.887999618364,38.2172801971754,0 -122.88822692066,38.2168838700307,0 -122.888524856453,38.21651915419441,0 -122.888873076627,38.2161860295517,0 -122.889719243626,38.2156506007111,0 -122.891336735783,38.214471504975,0 -122.891429099652,38.2140570195159,0 -122.891142573916,38.2137323015738,0 -122.890571847044,38.2136776871005,0 -122.889482700228,38.2136811554844,0 -122.888949512781,38.2135905192728,0 -122.888409818034,38.2135539490198,0 -122.886234818314,38.2135112703398,0 -122.885150050188,38.2134561219217,0 -122.884607373777,38.2135006432463,0 -122.883568880115,38.2137519496915,0 -122.88249415684,38.2138860482954,0 -122.881950798278,38.2139080255412,0 -122.881407148594,38.21388944395271,0 -122.881242664549,38.2138736151061,0 contacts #khStyle84754 1 -122.834726371185,38.2134212126007,0 -122.834216746024,38.213827021781,0 -122.833937507034,38.2141299475327,0 contacts #khStyle84754 1 -122.795635075681,38.2132248283687,0 -122.795389978603,38.2134271769925,0 -122.795293994756,38.21366583995321,0 -122.795377838952,38.2139363622125,0 -122.795772511892,38.2143696524209,0 -122.795889251392,38.2146222110986,0 -122.796039572063,38.214865811776,0 -122.796247112463,38.2150734622523,0 -122.796567981781,38.21522273002141,0 -122.79678508593,38.2150744033426,0 -122.796849409596,38.214795128476,0 -122.79671374794,38.2145425419029,0 -122.796283316893,38.2141272132008,0 -122.796188723347,38.2138701926668,0 -122.796036237912,38.213635600898,0 -122.795635075681,38.2132248283687,0 contacts #khStyle84754 1 -122.83199062855,38.2132064676724,0 -122.832354977109,38.2132610675805,0 -122.832529868296,38.2134280510337,0 -122.832447912948,38.2139822010458,0 -122.832375906012,38.2142479639608,0 -122.83229641119,38.2145092107829,0 -122.832121221959,38.2147793317428,0 -122.831931759566,38.214738502226,0 -122.831797844329,38.2144499090262,0 -122.831744911256,38.2141839633586,0 -122.831770875774,38.2139181341082,0 -122.83199062855,38.2132064676724,0 contacts #khStyle84754 1 -122.838610953988,38.2139188342021,0 -122.838529072964,38.2136573587215,0 -122.838534680709,38.2133824871814,0 -122.838659825046,38.2131303122034,0 -122.838989609241,38.2131578058154,0 -122.83916548762,38.2133698433995,0 -122.839271279213,38.213635856786,0 -122.839467476382,38.2138614418949,0 -122.839742040068,38.2140015126564,0 -122.840445754328,38.2141151402954,0 -122.840637456119,38.2142776273612,0 -122.840547619465,38.2145478779823,0 -122.840249905731,38.2147051868254,0 -122.83993080493,38.21468672196971,0 -122.839620883353,38.2145511080322,0 -122.838610953988,38.2139188342021,0 contacts #khStyle84754 1 -122.933748561124,38.213120376047,0 -122.934020765131,38.2133052887564,0 -122.934133721975,38.213530664165,0 -122.934071713976,38.2138055082421,0 -122.933952611391,38.2140577869753,0 -122.933589855335,38.2145172092188,0 -122.933553564663,38.2147740429709,0 -122.933656590636,38.2153193531582,0 -122.933567482721,38.2155581311989,0 -122.933324901175,38.2157607696947,0 -122.93273989362,38.2160398116086,0 -122.932430993162,38.2161522822181,0 -122.93205686753,38.2161520603054,0 -122.931869228964,38.2160032456682,0 -122.93194982238,38.2157148962026,0 -122.932058941884,38.2154626135924,0 -122.932332502401,38.2149625860294,0 -122.932237672135,38.2144443148323,0 -122.932349646814,38.214187528408,0 -122.932528707903,38.213957816899,0 -122.932968172706,38.213548010585,0 -122.933221433517,38.2133724164976,0 -122.933748561124,38.213120376047,0 contacts #khStyle84754 1 -122.833585609894,38.2147730778567,0 -122.833391929603,38.2146910369706,0 -122.833264300249,38.2144610370572,0 -122.833242439864,38.2141861241719,0 -122.8333282738,38.2136500064018,0 -122.833399553556,38.2133887470705,0 -122.833570052338,38.21313664253311,0 -122.833861557916,38.2130424273767,0 -122.834147228613,38.2131599989845,0 -122.834115911487,38.2134303284305,0 -122.833930150075,38.2139572934053,0 -122.833937507034,38.2141299475327,0 contacts #khStyle84754 1 -122.835196476978,38.2128907990378,0 -122.834990646715,38.2132107701068,0 -122.834726371185,38.2134212126007,0 contacts #khStyle84754 1 -122.835196476978,38.2128907990378,0 -122.835170717193,38.212827994978,0 -122.834907573945,38.2130078718378,0 -122.834753205925,38.2132329636412,0 -122.834726371185,38.2134212126007,0 contacts #khStyle84754 1 -122.861243310536,38.2139976988379,0 -122.861847037438,38.2147104048319,0 -122.862687415902,38.2152566579588,0 -122.863610805732,38.2157083719782,0 -122.864588246782,38.2160880422355,0 -122.865647101512,38.2162695248039,0 -122.866620974276,38.2166581863369,0 -122.867117968033,38.2168209820095,0 -122.86765869776,38.2168846886018,0 -122.868716841516,38.2170751550164,0 -122.869277071068,38.2170172081674,0 -122.869674143974,38.2167653073416,0 -122.869911556071,38.2163600141373,0 -122.86999269303,38.2159049764918,0 -122.870276680839,38.2156033780295,0 -122.870840888768,38.2155093784063,0 -122.871379874978,38.21554602859881,0 -122.871902987538,38.2156772894836,0 -122.872386357623,38.2158760975797,0 -122.873740225999,38.2166030853298,0 -122.874232221869,38.21677485781511,0 -122.874779453317,38.2167979826372,0 -122.875318621152,38.2167354779575,0 -122.875840046217,38.216609864622,0 -122.876345132212,38.2164346630413,0 -122.876743651392,38.2161557025978,0 -122.877380993588,38.2154534092188,0 -122.877670410073,38.2150887115957,0 -122.877908455956,38.2147014278847,0 -122.877983070095,38.214273415269,0 -122.877913099409,38.2138497562016,0 -122.877375695724,38.2130921414539,0 -122.877032120711,38.2127673282097,0 -122.876489903983,38.2125414388896,0 -122.876205765665,38.2127439152277,0 -122.876197098704,38.213221565987,0 -122.876488045161,38.2140555289948,0 -122.876560149648,38.2144791912089,0 -122.876480172185,38.2149071972124,0 -122.876289217158,38.2153080471116,0 -122.87599051122,38.215672731388,0 -122.875563098848,38.2159381395409,0 -122.875057680676,38.2160998187327,0 -122.874513535023,38.2161533043521,0 -122.873988574683,38.2160535967064,0 -122.873495544659,38.2158637971236,0 -122.871653687131,38.2149379921144,0 -122.871149889373,38.2147887266818,0 -122.87060201639,38.2147340405594,0 -122.870077796301,38.2148280839263,0 -122.869594425915,38.2150348266696,0 -122.86879477823,38.2156287448099,0 -122.868359867712,38.2158805996703,0 -122.867825057935,38.2159025213356,0 -122.866740417332,38.2157660909905,0 -122.865341003451,38.2153904548641,0 -122.863394369884,38.2146221158148,0 -122.862888814916,38.2144683065418,0 -122.861844757923,38.2142192231118,0 -122.861347445345,38.2140518983082,0 -122.861243310536,38.2139976988379,0 contacts #khStyle84754 1 -122.823898321216,38.2148331783192,0 -122.824240489424,38.2147631656162,0 -122.824783859934,38.2147459616261,0 -122.825327100356,38.2147828297866,0 -122.827450269507,38.215155515174,0 -122.827999183508,38.2152104043291,0 -122.828540036396,38.2152021916912,0 -122.829003553823,38.2149865757939,0 -122.829357025209,38.21465814046231,0 -122.830035193539,38.21347850086561,0 -122.830597724023,38.2127402999213,0 -122.830934042711,38.2124118347568,0 -122.831405409544,38.2121872083256,0 -122.831694381554,38.2121146123329,0 contacts #khStyle84754 1 -122.831694381554,38.2121146123329,0 -122.831922603807,38.2120572773834,0 -122.832466728671,38.2120130015748,0 -122.832953384983,38.2120622781908,0 contacts #khStyle84754 1 -122.803020418905,38.2140789165482,0 -122.803042917311,38.2140622518822,0 -122.803366563481,38.2137158188081,0 -122.803516391464,38.2134642581118,0 -122.803597145542,38.2133286714729,0 -122.803768885366,38.2129188931525,0 -122.804054379782,38.2119111646207,0 contacts #khStyle84754 1 -122.842344960924,38.2124369117889,0 -122.842390731713,38.2124009217271,0 -122.842391747193,38.2122612297768,0 -122.842437517839,38.21222524389271,0 -122.842438464897,38.2121170946892,0 -122.842484235435,38.212081106688,0 -122.842484313504,38.21204505663011,0 -122.842530083974,38.2120090686108,0 -122.842530518405,38.2119730211347,0 -122.842621693026,38.2119055497661,0 -122.842667028972,38.2119056112682,0 -122.8427127966,38.211869625272,0 -122.842849160763,38.2118698101033,0 -122.842984216981,38.2119781413985,0 -122.84298378277,38.212014190974,0 -122.843029040985,38.2120503023938,0 -122.843026641039,38.212334191024,0 -122.842980870609,38.2123701792348,0 -122.842979412312,38.2125504259645,0 -122.842933651451,38.2125819089483,0 -122.842933061508,38.2126900607261,0 -122.842887290817,38.2127260447022,0 -122.842886856552,38.2127620942729,0 -122.842841442178,38.2127980829103,0 -122.842841007889,38.2128341324804,0 -122.842795237053,38.2128701206168,0 -122.842794802741,38.2129061701863,0 -122.842703617283,38.2129781468879,0 -122.842522285907,38.2129733935398,0 -122.842431768881,38.212901170305,0 -122.842432630759,38.2128335784768,0 -122.842387372355,38.2127974668325,0 -122.842390216429,38.2124730213505,0 -122.842344960924,38.2124369117889,0 contacts #khStyle84754 1 -122.832953384983,38.2120622781908,0 -122.833008483498,38.2120678570856,0 -122.833547181088,38.2120551121327,0 -122.834080708963,38.2119612450291,0 -122.834637255586,38.21179080225261,0 -122.835051868434,38.2118725045461,0 -122.835345857302,38.2124136705591,0 -122.835231024086,38.2128370939158,0 -122.835196476978,38.2128907990378,0 contacts #khStyle84754 1 -122.789838793362,38.2117634890158,0 -122.78988366862,38.2117996203368,0 -122.790201369915,38.2118001936726,0 -122.790247165948,38.2117642259797,0 -122.790248848163,38.211552434737,0 -122.790158741239,38.21148017380941,0 -122.790159206886,38.2114441243798,0 -122.789888889996,38.2112273348837,0 -122.789843557265,38.21122725300511,0 -122.78975309476,38.21115499111671,0 -122.789707762075,38.2111549091856,0 -122.7896628873,38.2111187777924,0 -122.789617551978,38.2111186958216,0 -122.789572323545,38.21108256375381,0 -122.789526988246,38.211082481748,0 -122.789482116265,38.2110463502898,0 -122.789391089329,38.21104618554571,0 -122.789346217437,38.2110100540352,0 -122.789164522701,38.2110097249162,0 -122.789119650945,38.2109735933186,0 -122.788983291531,38.2109733460823,0 -122.788891699174,38.2110452804744,0 -122.7888463639,38.21104519820571,0 -122.788618110625,38.211220527773,0 -122.788616054214,38.2114368235775,0 -122.788796259733,38.21158135192481,0 -122.78884159534,38.2115814342121,0 -122.788886826377,38.2116175665632,0 -122.788977494978,38.2116177310456,0 -122.789022726105,38.211653863344,0 -122.789249399052,38.2116542741585,0 -122.789294630343,38.2116904042532,0 -122.78933996336,38.2116904863432,0 -122.789385194713,38.211726618501,0 -122.789702895679,38.2117271931864,0 -122.789838793362,38.2117634890158,0 contacts #khStyle84754 1 -122.833585609894,38.2147730778567,0 -122.833442778493,38.21493444801131,0 -122.833068650025,38.2152493471497,0 -122.832740129685,38.2156003606972,0 -122.832573575137,38.2159966693621,0 -122.832444504519,38.2168571740928,0 -122.832306106487,38.2172715478802,0 -122.832085649632,38.2176632716642,0 -122.831778880125,38.2180188201262,0 -122.831401883053,38.2183292034878,0 -122.830955403649,38.2185809034635,0 -122.830041494637,38.2196430406315,0 -122.829659494205,38.2199489048184,0 -122.829220842483,38.2202051159048,0 -122.82821467479,38.2205551182528,0 -122.827796321358,38.220829378976,0 -122.827828206365,38.2212349871995,0 -122.828102175843,38.2220825646476,0 -122.828139343833,38.2225197241293,0 -122.828038765499,38.2229296423401,0 -122.82767881082,38.2232625700317,0 -122.827417642008,38.22364070572461,0 -122.827277060222,38.2240550700201,0 -122.827240686741,38.2244876140593,0 -122.826997687708,38.2248792944733,0 -122.826580083372,38.2251265145107,0 -122.826002836301,38.2250941078302,0 -122.825582792981,38.2253142832961,0 -122.82540006725,38.2257285820066,0 -122.825547945885,38.2261478834841,0 -122.825571554617,38.226576010708,0 -122.825431302838,38.2269948793719,0 -122.82508664733,38.2273368344502,0 -122.824876886701,38.2277060292516,0 -122.824937632834,38.2285758227939,0 -122.824915178991,38.2290038805808,0 -122.82463681002,38.2298371128591,0 -122.824476930076,38.2302469381205,0 -122.824188258568,38.2306115061194,0 -122.823440850212,38.2312322323088,0 -122.823556603692,38.2316469808666,0 -122.823599137868,38.2320706306236,0 -122.823452793881,38.2324894873674,0 -122.823229331782,38.232903720424,0 -122.823182651247,38.2333047034124,0 -122.823520259577,38.2336747268768,0 -122.82401566436,38.2336168970859,0 -122.824443422136,38.2333291456248,0 -122.82472748299,38.23295555773,0 -122.825127058056,38.2326542425935,0 -122.826117676618,38.23246196130601,0 -122.825995533992,38.2320246747053,0 -122.825543237217,38.2312354072101,0 -122.825609985283,38.2307984035063,0 -122.825885071396,38.2304383179198,0 -122.826280007627,38.230127979399,0 -122.826303455012,38.2292808438717,0 -122.826396586204,38.2288573977155,0 -122.826568234911,38.2284475873631,0 -122.826809798567,38.2280649183384,0 -122.827104159575,38.2277003522916,0 -122.82748305152,38.227371960868,0 -122.827933103292,38.2271473168762,0 -122.828448008097,38.22727875895631,0 -122.829250694834,38.2278657510691,0 -122.8297026139,38.22760505324851,0 -122.82967107285,38.2271994465372,0 -122.829506765592,38.22677111386651,0 -122.829315261815,38.2263697783392,0 -122.828846865485,38.2255940178361,0 -122.828699672415,38.2251792277858,0 -122.828671521103,38.2247015259321,0 -122.828845055986,38.2243908518893,0 -122.829353326101,38.2246033924914,0 -122.82995352493,38.2247439658195,0 -122.830302953948,38.2246363273488,0 -122.830101916853,38.2241899167251,0 -122.829559569121,38.223436581706,0 -122.829325209842,38.2230441954969,0 -122.829196941251,38.2226294336848,0 -122.829179035292,38.2221968091339,0 -122.829295346661,38.2217733943529,0 -122.829539026411,38.221386216295,0 -122.829909631555,38.2210713233907,0 -122.830437139862,38.2209864763559,0 -122.830950838683,38.2208520382987,0 -122.831385571576,38.2205913088632,0 -122.831708755444,38.2202447977905,0 -122.832536366926,38.2191329548229,0 -122.832853500874,38.2187729131336,0 -122.833269019157,38.2184760991761,0 -122.833636173227,38.2187199624618,0 -122.833919063574,38.2191259284527,0 -122.834383926862,38.2203613001501,0 -122.834763023684,38.2211684557191,0 -122.835637376379,38.2227378649498,0 -122.83592762377,38.2240090320666,0 -122.836257257342,38.2244420953305,0 -122.83646850528,38.2243342435873,0 -122.836535690355,38.2238296406272,0 -122.836544864316,38.2234015618195,0 -122.83647395672,38.2225452784213,0 -122.836132330731,38.2217336753405,0 -122.836152941372,38.2213011063121,0 -122.83611105427,38.220877461497,0 -122.836013474023,38.2204537379757,0 -122.835862521546,38.2191602361168,0 -122.835173515725,38.2185238810623,0 -122.835103720202,38.2176585851432,0 -122.834994716004,38.2172393505042,0 -122.834456285711,38.2164905490021,0 -122.834259783604,38.2160892137014,0 -122.834231506704,38.2156520685037,0 -122.834399112149,38.2152602652375,0 -122.835245371412,38.214698190022,0 -122.835596661273,38.2143742391459,0 -122.836150569913,38.2131628448396,0 -122.836796503595,38.2122940512541,0 -122.836904544458,38.2118706168204,0 -122.837133861804,38.2114879086832,0 -122.837496907616,38.2111639685378,0 -122.837966471461,38.2109348070669,0 -122.838505726941,38.2108274091764,0 -122.839029232576,38.2109002364828,0 -122.839227888879,38.2113015670955,0 -122.839542968506,38.2116805272222,0 -122.839995504309,38.2118884391162,0 -122.840307830346,38.2115734328567,0 -122.840619270383,38.2111728060344,0 -122.840979066799,38.2108578631834,0 -122.84151693226,38.2108946491715,0 -122.841921112131,38.2111790936223,0 -122.842224474218,38.211535499354,0 -122.842769987743,38.2115046964292,0 -122.843568691849,38.2109289781076,0 -122.844102989926,38.2107990166716,0 -122.844615782499,38.21087631088161,0 -122.845988942017,38.211590127958,0 -122.846514731264,38.21177107450741,0 -122.846935712384,38.2125647283278,0 -122.847084055014,38.2129794976156,0 -122.847162394145,38.2134121993701,0 -122.847068718068,38.2138221431419,0 -122.846375823666,38.2144971623465,0 -122.845957225754,38.2147669810995,0 -122.845442449741,38.2149375331055,0 -122.845121496562,38.2152840849216,0 -122.845182767818,38.2156807152097,0 -122.845545810402,38.2160236728862,0 -122.845666663789,38.2164384071125,0 -122.845717653308,38.2173081776483,0 -122.845523319544,38.2177044673461,0 -122.845223050858,38.2180555530974,0 -122.845471807804,38.2184253956541,0 -122.845853815157,38.2187548587257,0 -122.846160836082,38.2190932335557,0 -122.846222753899,38.219525913697,0 -122.84607623377,38.2206442191174,0 contacts #khStyle84754 1 -122.881242664549,38.2138736151061,0 -122.880318533471,38.2137846784812,0 -122.87986555074,38.2135543910174,0 -122.879540555051,38.2132115796047,0 -122.879311355517,38.21236416999,0 -122.879284936662,38.2119360508705,0 -122.879431981779,38.2115216314906,0 -122.879665009099,38.2111343388331,0 -122.880262329112,38.210413962916,0 -122.880497780798,38.2101922376081,0 contacts #khStyle84754 1 -122.832474083864,38.2100650379282,0 -122.83241897732,38.2099625936654,0 -122.832401518441,38.2098231555581,0 contacts #khStyle84754 1 -122.804054379782,38.2119111646207,0 -122.804366059103,38.2108109764826,0 -122.804569842459,38.2104282882484,0 -122.804999192216,38.210190178111,0 -122.805970108593,38.2097952529267,0 -122.806508863006,38.2098907820954,0 -122.806973453507,38.2100898293263,0 -122.808111478177,38.2110245063995,0 -122.808424323916,38.2113765095473,0 -122.808808351212,38.2116745539925,0 -122.809275387284,38.2119006334737,0 -122.809777574152,38.2120636811884,0 -122.810303095524,38.212177196143,0 -122.811389441692,38.2122826076865,0 -122.811918979506,38.2122248846519,0 -122.813877869814,38.2114529644714,0 -122.814401976226,38.211422259023,0 -122.815465888184,38.2116447593718,0 -122.816000476431,38.2117041882921,0 -122.816546670304,38.2116915332131,0 -122.818155359139,38.211473256247,0 -122.819185855844,38.2112135025912,0 -122.819730851842,38.2112503995169,0 -122.820257465063,38.21135936534401,0 -122.820762171722,38.2115223699051,0 -122.821157350281,38.2116868580097,0 -122.821729281907,38.211924913666,0 -122.822177775412,38.2121599256707,0 -122.822468127905,38.2125434002899,0 -122.822367586694,38.2129307832742,0 -122.821178478706,38.2143934868893,0 -122.820994360924,38.2147942586529,0 -122.820756319345,38.2156365583419,0 -122.820511076806,38.2158227978284,0 contacts #khStyle84754 1 -122.826460619179,38.2096564292281,0 -122.826483502296,38.2096384362222,0 -122.826574171296,38.2096385716796,0 -122.826619948076,38.2096025919301,0 -122.826665269161,38.2096071648221,0 -122.826711045881,38.2095711829387,0 -122.826801714798,38.2095713182206,0 -122.826846604426,38.2096074353823,0 -122.826937270729,38.20960757055551,0 -122.827027765624,38.2096798058227,0 -122.827073100151,38.2096798733499,0 -122.827298267824,38.2098604574287,0 -122.827297223476,38.21000014938,0 -122.827206029068,38.2100721141148,0 -122.826933669383,38.2100717084772,0 -122.826887892457,38.2101076904448,0 -122.826660864776,38.2101073517514,0 -122.826615974933,38.2100712345222,0 -122.826524959757,38.2100665933553,0 -122.826435166895,38.2099988639815,0 -122.826437728082,38.2096744180208,0 -122.826460619179,38.2096564292281,0 contacts #khStyle84754 1 -122.880497780798,38.2101922376081,0 -122.880611264262,38.2100853693587,0 -122.880999417461,38.2097838525292,0 -122.881302357655,38.2094191596983,0 -122.881646635595,38.209095064491,0 -122.882196194586,38.208969451861,0 -122.88243624284,38.2093031573156,0 -122.88250617725,38.2097628637105,0 -122.882429802252,38.210195383836,0 -122.882141878807,38.2105465761571,0 -122.881784373861,38.2108796716753,0 -122.881472170916,38.21123083749101,0 -122.881192047855,38.2116090728185,0 -122.881030398924,38.2120099606403,0 -122.881156423202,38.2124381818065,0 -122.881475004888,38.2127764759694,0 -122.881947621498,38.2130067773158,0 -122.882479025589,38.2130884311272,0 -122.883568754937,38.2131616341597,0 -122.884590890933,38.2128652491355,0 -122.885123624343,38.2127846682161,0 -122.88620045141,38.2128893775683,0 -122.886744522119,38.2128628751632,0 -122.887287248416,38.2127822942381,0 -122.887814470621,38.2128008326679,0 -122.88901942716,38.2131579890988,0 -122.889552521689,38.2130728822228,0 -122.89059241307,38.2128215242756,0 -122.891125503319,38.2127364102667,0 -122.892234012799,38.2126653514514,0 -122.892609148873,38.2129360746418,0 -122.892755954071,38.2133597961101,0 -122.892517304747,38.2142112499289,0 -122.892295045245,38.21459857769141,0 -122.891073952225,38.2154536134637,0 -122.890340813433,38.2160882963289,0 -122.889733907428,38.216808713433,0 -122.889514124162,38.2171960382206,0 -122.889489183599,38.2176331176707,0 -122.88968637171,38.2180208411336,0 -122.890403654973,38.218683938503,0 -122.89065049475,38.2190581887152,0 -122.89082878802,38.2199100326439,0 -122.890834284497,38.22076621910651,0 -122.890889335451,38.2211943617331,0 -122.891010805722,38.2216135545885,0 -122.891672774603,38.2232499338131,0 -122.891926056088,38.2236286932115,0 -122.892251513472,38.2239714697016,0 -122.892482644572,38.2243637257937,0 -122.892648057565,38.2247739451529,0 -122.892752399565,38.2251976261619,0 -122.892410983854,38.2264635542017,0 -122.892541774708,38.2268692350654,0 -122.89290726498,38.2271940218758,0 -122.893440894086,38.2272981584886,0 -122.893984044745,38.2272400778191,0 -122.894469556394,38.2270422494186,0 -122.894804245298,38.2267000828938,0 -122.894996913767,38.2262992055351,0 -122.895271974978,38.2237264082101,0 -122.895405029212,38.2233119572567,0 -122.895727529537,38.2224921182378,0 -122.896019394407,38.222118365882,0 -122.896436421665,38.2218483681636,0 -122.896969966574,38.2217361906136,0 -122.897443117338,38.2219168608829,0 -122.898376071122,38.2223818268039,0 -122.900128251047,38.2234783675261,0 -122.900518547479,38.223690496944,0 -122.900516253111,38.2232804296602,0 -122.90027752044,38.2224150305611,0 -122.900432321962,38.2220005927617,0 -122.900506085061,38.2215815786014,0 -122.900478473628,38.2211489582412,0 -122.900586927511,38.2206849117792,0 -122.900899990226,38.2204508582431,0 -122.901973823665,38.2207581992433,0 -122.90245910084,38.2209523782564,0 -122.90289359411,38.2212141056527,0 -122.903390706275,38.221372241046,0 -122.904481920023,38.22151284366,0 -122.904986151265,38.2214186302727,0 -122.905446667823,38.2211711676122,0 -122.906027284889,38.2210860248845,0 -122.906346873407,38.2213161021135,0 -122.906439819141,38.2217758113082,0 -122.906658155431,38.2221770413619,0 -122.907002983755,38.2224972614143,0 -122.907462522888,38.2227364608924,0 -122.90771479647,38.2231287037302,0 -122.908020032592,38.2234263579062,0 -122.908585896074,38.2234448335317,0 -122.909030439944,38.2236930272929,0 -122.909369556522,38.2240267543456,0 -122.909950245336,38.2247617222521,0 -122.910046992282,38.225132247561,0 -122.910059692017,38.2251808852245,0 -122.910003463771,38.2256089310312,0 -122.909898934951,38.2257459104336,0 -122.909439851806,38.22634750699861,0 -122.908961317002,38.2270681214905,0 -122.908934398291,38.2271086572711,0 -122.908797480827,38.2275276261268,0 -122.908785148928,38.2279647183942,0 -122.909032845566,38.2283254108657,0 -122.909835106354,38.2289253673494,0 -122.910182825813,38.22925459216,0 -122.910456230683,38.2296243139629,0 -122.910658544908,38.23002552336661,0 -122.910792646219,38.2304401981505,0 -122.910960490648,38.2312920005796,0 -122.911112454844,38.2317021825021,0 -122.911371217279,38.23208540925631,0 -122.911767179642,38.2324011476249,0 -122.912246187709,38.23255021850801,0 -122.912751318758,38.2323568358988,0 -122.91289506289,38.2322634788157,0 -122.913174061302,38.2320822773442,0 -122.913519029865,38.2317490782045,0 -122.914308764109,38.2306231185912,0 -122.914708606029,38.2302930805349,0 -122.915437808118,38.2296911703441,0 -122.915736731526,38.2293263873471,0 -122.9158200089,38.2291530188383,0 -122.915927144329,38.2289299808445,0 -122.916136999681,38.2280829677906,0 -122.916201400709,38.2276594315439,0 -122.916196901763,38.2272268326058,0 -122.916087202977,38.2263750797652,0 -122.916111048744,38.2255144118353,0 -122.916205795533,38.2250908975569,0 -122.916436885973,38.2247035320685,0 -122.916776811375,38.2243658132776,0 -122.918451455134,38.2232629937246,0 -122.919437592262,38.2229122057658,0 -122.920312507283,38.2223991088964,0 -122.921692066927,38.2217106090113,0 -122.922099728997,38.2214269955231,0 -122.922332578598,38.2211906103369,0 contacts #khStyle84754 1 -122.832401518441,38.2098231555581,0 -122.832306113887,38.209061182521,0 -122.832137799287,38.2089493473801,0 contacts #khStyle84754 1 -122.832137799287,38.2089493473801,0 -122.831918697693,38.20880376639171,0 -122.831515931328,38.2090104695516,0 -122.831061419402,38.2098254385673,0 -122.830736168534,38.21015842657231,0 -122.83071235401,38.2101738311011,0 contacts #khStyle84754 1 -122.827087975943,38.2079269674462,0 -122.827089462684,38.2077512258829,0 -122.827180656955,38.2076792612208,0 -122.827362341139,38.207679531523,0 -122.827407232543,38.20771564848841,0 -122.82745256585,38.2077157158722,0 -122.827723332853,38.2079324171977,0 -122.827768666295,38.2079324844591,0 -122.827858803573,38.20800471858121,0 -122.827904137061,38.2080047857901,0 -122.827994271903,38.2080770198028,0 -122.828039605436,38.2080770869593,0 -122.828084853797,38.2081132020912,0 -122.828130187352,38.2081132692127,0 -122.828175076745,38.2081493858762,0 -122.828220410323,38.20814945296281,0 -122.828265658813,38.2081855701226,0 -122.828310989755,38.2081856371702,0 -122.828356238312,38.2082217542947,0 -122.828401569276,38.2082218213073,0 -122.828446817901,38.2082579383965,0 -122.828537482535,38.2082580723381,0 -122.828582372219,38.2082941888442,0 -122.828628064919,38.2082942563033,0 -122.82867295467,38.2083303727745,0 -122.828718288362,38.2083304396686,0 -122.828853676018,38.2084387878851,0 -122.82885314739,38.2085108875325,0 -122.828761607956,38.2085783456461,0 -122.82871627677,38.208578278773,0 -122.828670501662,38.20861426144041,0 -122.828262148459,38.2086136580859,0 -122.82817200737,38.20854142428011,0 -122.828081345046,38.208541290061,0 -122.828036096432,38.2085051707345,0 -122.827990762633,38.2085051035772,0 -122.827945514072,38.2084689905104,0 -122.827854849179,38.2084688561123,0 -122.827809600718,38.208432738796,0 -122.827764269624,38.2084326715551,0 -122.827719377602,38.2083965547323,0 -122.82767368484,38.2083964869197,0 -122.827583906294,38.2083242531943,0 -122.827538575268,38.2083241858662,0 -122.827267802047,38.2081074841236,0 -122.827268249317,38.2080714345701,0 -122.827087975943,38.2079269674462,0 contacts #khStyle84754 1 -122.836008396995,38.2074568096661,0 -122.836043028966,38.207818293502,0 -122.836449136941,38.2086570274086,0 -122.836276152788,38.2090713575533,0 -122.835854417586,38.2093050862168,0 -122.835304144671,38.2093944313321,0 -122.834839233112,38.20961908259091,0 -122.834459090227,38.2099249652755,0 -122.834147357254,38.2102850193832,0 -122.833663915664,38.2104916145506,0 -122.833130196101,38.2105178858721,0 -122.83261304748,38.2103233729118,0 -122.832474083864,38.2100650379282,0 contacts #khStyle84754 1 -122.842094771027,38.2095402813288,0 -122.842083185153,38.2095300314211,0 -122.841777313778,38.20918263421851,0 -122.84124067919,38.2090782574648,0 -122.840190132157,38.2092525582017,0 -122.839675402718,38.2090896233539,0 -122.838878172287,38.2085117201795,0 -122.838337897207,38.208443374973,0 -122.83783886339,38.2082894663618,0 -122.837404334482,38.20802299002011,0 -122.837020249498,38.2077070142657,0 -122.836556029618,38.2074720367084,0 -122.836006759534,38.2074397179822,0 -122.836008396995,38.2074568096661,0 contacts #khStyle84754 1 -122.798069548355,38.2071245302259,0 -122.798035451264,38.20715459757991,0 -122.797572456632,38.2071673112897,0 -122.797544964944,38.2071539513185,0 contacts #khStyle84754 1 -122.797544964944,38.2071539513185,0 -122.797699553094,38.2071585194202,0 -122.798047673286,38.2071230742345,0 -122.798069548355,38.2071245302259,0 contacts #khStyle84754 1 -122.80884912655,38.2072945498506,0 -122.80914017852,38.20710576641461,0 -122.809396322195,38.2071602621695,0 -122.809573407496,38.2074174074062,0 -122.80949372328,38.2077237019002,0 -122.809293164296,38.207705347849,0 -122.80884912655,38.2072945498506,0 contacts #khStyle84754 1 -122.797544964944,38.2071539513185,0 -122.797073963964,38.2069250600208,0 contacts #khStyle84754 1 -122.846345220189,38.2258589176858,0 -122.846346726118,38.2259023890547,0 -122.84686456889,38.2260067168296,0 -122.847272556236,38.2262280595777,0 -122.847408365685,38.2266743544223,0 -122.848401992171,38.2268559059383,0 -122.848561412166,38.2272842053253,0 -122.848879567574,38.2289879721226,0 -122.848843500624,38.2298486133623,0 -122.848762281481,38.2302720922593,0 -122.848391400216,38.2310782216686,0 -122.847949849235,38.2318662323753,0 -122.847118766015,38.232973670406,0 -122.846884067427,38.2333608958096,0 -122.846482450386,38.2341624721383,0 -122.846357310863,38.2345768785985,0 -122.846363528385,38.2350139899266,0 -122.846573264869,38.2354603828413,0 -122.846900688357,38.2356410638419,0 -122.84752398073,38.2348758274401,0 -122.847857835688,38.2345428054868,0 -122.848336764432,38.2343316401253,0 -122.848863990549,38.2342467098094,0 -122.849960192793,38.2342616509761,0 -122.850497860023,38.2343074071202,0 -122.851545370039,38.2345611002048,0 -122.852085137117,38.2346293828306,0 -122.852622780362,38.2345129054128,0 -122.852520746251,38.2341162287177,0 -122.852121067458,38.2338183096638,0 -122.851630492553,38.2336194097926,0 -122.851365227314,38.2332495604499,0 -122.851009524489,38.2324064414826,0 -122.850057557605,38.2327612063783,0 -122.849520578885,38.2327334739233,0 -122.8493639326,38.2323367234455,0 -122.849398055125,38.2318951582936,0 -122.849940461417,38.2306746756066,0 -122.850074152498,38.2302557699895,0 -122.85035383717,38.2289898831165,0 -122.850393632607,38.2276966488722,0 -122.85033308358,38.2272774921041,0 -122.849763464537,38.2256139594464,0 -122.849552553614,38.2252216446036,0 -122.848491005662,38.2237196900611,0 -122.84747415996,38.2227134690862,0 -122.847245052241,38.2223256321157,0 -122.847068118956,38.2219153323206,0 -122.846942964426,38.2215005943238,0 -122.846920669205,38.2210679670286,0 -122.847046711049,38.2202119499058,0 -122.847281356722,38.2198292296345,0 -122.847634064932,38.2194962325524,0 -122.848030981942,38.2191903297151,0 -122.84853288294,38.2190422807175,0 -122.849088803192,38.2190114618439,0 -122.849256327293,38.2186241440109,0 -122.849067216188,38.2182318560643,0 -122.848627974118,38.2179518973047,0 -122.848262718432,38.2176314776285,0 -122.847643035781,38.2169186807276,0 -122.847486095336,38.2165129136303,0 -122.847449518748,38.2160802672876,0 -122.847486829457,38.2156522243261,0 -122.847583032799,38.2152287649746,0 -122.847883554182,38.21440451899781,0 -122.847977611676,38.21398105643301,0 -122.847944603158,38.2135484147402,0 -122.848084671264,38.2131430372966,0 -122.848408466101,38.2127919748293,0 -122.849270944238,38.2122613636761,0 -122.849635349354,38.2119464004791,0 -122.849899573672,38.21156821918991,0 -122.850099578643,38.2111719293268,0 -122.85022823518,38.2107530157645,0 -122.850310323278,38.2098924308097,0 -122.850396864679,38.209468956352,0 -122.850600907984,38.2090140896644,0 -122.850947037125,38.2088973731597,0 -122.851424729651,38.2092044105829,0 -122.851757295331,38.2089119310946,0 -122.8517842437,38.2084748606281,0 -122.851369367942,38.2074739446622,0 -122.851025276907,38.2071220163126,0 -122.850586330699,38.2069006455751,0 -122.850020958828,38.2068863966089,0 -122.849638441705,38.2071697940052,0 -122.849424862619,38.2075750781643,0 -122.848999606093,38.2097014689042,0 -122.848898430298,38.2101204170396,0 -122.848736588524,38.2105302734512,0 -122.848539753064,38.2109445901423,0 -122.84827341038,38.2113092469534,0 -122.847765822391,38.2114708060623,0 -122.847215041844,38.2114610691315,0 -122.846704555117,38.2113026771167,0 -122.846058121456,38.210612366601,0 -122.845615309792,38.2103594286476,0 -122.845090392709,38.210277616353,0 -122.843994243665,38.2102400970555,0 -122.842435185201,38.209841440565,0 -122.842094771027,38.2095402813288,0 contacts #khStyle84754 1 -122.764714235778,38.2066308141143,0 -122.764629559276,38.2067178060835,0 -122.764025815058,38.2070951098979,0 contacts #khStyle84754 1 -122.798769128906,38.2065076213529,0 -122.798069548355,38.2071245302259,0 contacts #khStyle84754 1 -122.809626539453,38.2066198876947,0 -122.809914336175,38.2064446148029,0 -122.81020096048,38.20644508327391,0 -122.810749390675,38.2067929604078,0 -122.810989824083,38.2069871187054,0 -122.81119732639,38.2072172753549,0 -122.811091393902,38.20746044032341,0 -122.810804686243,38.2074915189284,0 -122.810504940444,38.2073197918369,0 -122.809626539453,38.2066198876947,0 contacts #khStyle84754 1 -122.798769128906,38.2065076213529,0 -122.7985964958,38.2064075319691,0 -122.797875037311,38.2063071439508,0 -122.797531646698,38.2063110517992,0 -122.797189192339,38.2063645304714,0 -122.796879384682,38.206485658415,0 -122.796918325793,38.2067290658628,0 -122.797073963964,38.2069250600208,0 contacts #khStyle84754 1 -122.763759484448,38.2083202721566,0 -122.763828057788,38.2087485057323,0 -122.76382961569,38.2088414207113,0 -122.763835235902,38.2091766147401,0 -122.763757458631,38.2096045514024,0 -122.76373215323,38.2100325944533,0 -122.763765388938,38.2104607562352,0 -122.763920392903,38.2108756461172,0 -122.763995781049,38.2112948806976,0 -122.763929049431,38.2121689589537,0 -122.763707585914,38.2125425289728,0 -122.763253041561,38.212798462374,0 -122.762720738585,38.2128154041338,0 -122.761638903102,38.2126599824494,0 -122.76106291923,38.212825533705,0 -122.761003429024,38.2131138119634,0 -122.761480054559,38.2134212143036,0 -122.762058562646,38.2134674601162,0 -122.762382659274,38.2136979407304,0 -122.762433649257,38.2141531763831,0 -122.762933858209,38.2143479644856,0 -122.763384966188,38.2141641254232,0 -122.76419233783,38.2135393936535,0 -122.76469556322,38.2134638051617,0 -122.765224119964,38.2136135782619,0 -122.76567587981,38.2138893695624,0 -122.766179834542,38.2138092699241,0 -122.766485405173,38.2134764203173,0 -122.766310048166,38.2130569869869,0 -122.76604467864,38.2126553975719,0 -122.765860285948,38.2122719953753,0 -122.766092191031,38.211866898513,0 -122.766565079548,38.2116740784762,0 -122.767068805227,38.211548912046,0 -122.767211903884,38.2111165977469,0 -122.766993525451,38.2107556605653,0 -122.766547877174,38.2104708738747,0 -122.766237022831,38.210118762302,0 -122.766003047503,38.2097262480814,0 -122.765851975074,38.2093068625502,0 -122.76600003789,38.2089780871017,0 -122.766026343433,38.2089196749621,0 -122.766387592936,38.2085824310109,0 -122.767276214585,38.2080840159439,0 -122.768228116596,38.207662326516,0 -122.768732968432,38.2075101176692,0 -122.769796565091,38.2073184564839,0 -122.769850193025,38.207316347397,0 -122.770342047615,38.2072970025227,0 -122.770893056587,38.2073341382461,0 -122.771315344418,38.207100643174,0 -122.7719722091,38.2063899430322,0 -122.772433638622,38.2061925706596,0 -122.772669914787,38.2061324113591,0 contacts #khStyle84754 1 -122.756538273143,38.2061018391711,0 -122.756073114396,38.2059973802883,0 -122.754998879683,38.205756135386,0 -122.754631447561,38.2056922742743,0 -122.754255715312,38.2056554320713,0 -122.753442145154,38.2055816126103,0 -122.752736253714,38.2056477102629,0 -122.752176704916,38.2057141151069,0 -122.751509363483,38.2058839314371,0 -122.751100336731,38.2059100881432,0 contacts #khStyle84754 1 -122.803574585128,38.2058167181848,0 -122.80371917046,38.2055420821658,0 -122.803971289928,38.205497444743,0 -122.804279222341,38.20566920034371,0 -122.804424495214,38.2059353124994,0 -122.804323282288,38.2061424312589,0 -122.803954158438,38.2061598344705,0 -122.803574585128,38.2058167181848,0 contacts #khStyle84754 1 -122.819090285201,38.2064367346383,0 -122.818206072205,38.2060342982744,0 -122.817871155347,38.2059346354421,0 -122.81764922178,38.20575854333011,0 -122.817668470381,38.2054836935129,0 -122.817989113569,38.2054391335625,0 -122.818341676587,38.205475735732,0 -122.819606736353,38.2058787632636,0 -122.819946799968,38.2059198464165,0 -122.820272482808,38.2060014639054,0 -122.820564373504,38.2061821643572,0 -122.820456811559,38.2063757671382,0 -122.820129890631,38.2065059423872,0 -122.819090285201,38.2064367346383,0 contacts #khStyle84754 1 -122.779687048484,38.20512953112381,0 -122.780033181482,38.2051617288959,0 -122.780331978528,38.2052659390516,0 -122.780563732609,38.20546915623411,0 -122.780731857559,38.2057037981523,0 -122.780846360564,38.2059653765844,0 -122.780914724477,38.2062584131127,0 -122.780686640326,38.20625798348321,0 -122.780385569973,38.2060771619938,0 -122.78021066382,38.2058425109833,0 -122.779940622769,38.2056707616097,0 -122.779717367481,38.2054900896926,0 -122.779687048484,38.20512953112381,0 contacts #khStyle84754 1 -122.82416371375,38.2048763540762,0 -122.82382974209,38.2049749839166,0 -122.823613693678,38.2051639197103,0 -122.823617344455,38.2054252874231,0 -122.82423926579,38.205665062274,0 -122.824509433311,38.2058276948916,0 -122.825022470175,38.2065224299013,0 -122.825253292201,38.2067210537945,0 -122.825528830152,38.2068791847666,0 -122.825849124327,38.2069788037481,0 -122.826514937923,38.2069347398363,0 -122.827160208526,38.2071204565142,0 -122.827494245456,38.2071479910007,0 -122.827817094899,38.2070763698281,0 -122.828207889833,38.20695077509851,0 contacts #khStyle84754 1 -122.809453540672,38.2056192176906,0 -122.808773182746,38.2056316179845,0 -122.808091529868,38.2055944441242,0 -122.807757186957,38.2055533360621,0 -122.807438014209,38.2054446589669,0 -122.80719041913,38.2052639971128,0 -122.807037263132,38.2050068878643,0 -122.807195956743,38.2047908495601,0 -122.807498909958,38.2048228967823,0 -122.807786503722,38.2049946094942,0 -122.808105363528,38.2050852621003,0 -122.808763185284,38.2052260401756,0 -122.809406636978,38.20540284125591,0 -122.810090859137,38.2054129739837,0 -122.810456209433,38.2054721511129,0 -122.810545226676,38.2056931010141,0 -122.810344836485,38.205886543273,0 -122.810041959892,38.2058229627117,0 -122.809453540672,38.2056192176906,0 contacts #khStyle84754 1 -122.83071235401,38.2101738311011,0 -122.830312172987,38.210432688249,0 -122.829936626357,38.2107475755398,0 -122.829514440879,38.2110083182644,0 -122.828494522519,38.211340277899,0 -122.828074502211,38.2115874999311,0 -122.827616041045,38.2123889308983,0 -122.827275466677,38.2126993553307,0 -122.826742888352,38.2128382553653,0 -122.82619174368,38.2128284192967,0 -122.825697378747,38.21266094748,0 -122.825093330572,38.2119390408646,0 -122.824755013716,38.2116050690261,0 -122.824316553835,38.2113520570773,0 -122.823344071473,38.2109540326863,0 -122.822677081996,38.2102951049175,0 -122.822172055588,38.2101185893195,0 -122.821754015445,38.2098430677118,0 -122.821427882252,38.2095000922759,0 -122.82108012585,38.20866139576251,0 -122.820863316757,38.2082825370577,0 -122.819818388627,38.20847919557221,0 -122.819278354652,38.2084648378972,0 -122.818256086094,38.2081613245834,0 -122.817726966472,38.2080658644198,0 -122.817148125055,38.208155079682,0 -122.816803810678,38.2079562624326,0 -122.816821732917,38.2075011598581,0 -122.817001951302,38.2070913754809,0 -122.816934171891,38.20664965653131,0 -122.816638738489,38.2063202345735,0 -122.816076070583,38.2062292201683,0 -122.815566005722,38.20636810519541,0 -122.815192581147,38.20667393658991,0 -122.815017327962,38.2070927386544,0 -122.814651946452,38.2074616685733,0 -122.814237693118,38.2075376131959,0 -122.813511749407,38.2068064382923,0 -122.813092470341,38.2066165022007,0 -122.812550547978,38.2067868666353,0 -122.81229229712,38.2071334308073,0 -122.812167677729,38.2075658291765,0 -122.811924309307,38.2079529727875,0 -122.811598587697,38.2082994261747,0 -122.811188797664,38.2085781483961,0 -122.81069606886,38.2087666091877,0 -122.810168936355,38.2088693930417,0 -122.809065535024,38.2088901168345,0 -122.808749170442,38.20881564379121,0 -122.808564323909,38.20877212997151,0 -122.808449975682,38.2086809167325,0 -122.807409516113,38.2078509477476,0 -122.806727398524,38.2071738782755,0 -122.806314074075,38.2068983090981,0 -122.805230217763,38.2068289043209,0 -122.804691094437,38.20674688726901,0 -122.804237288197,38.2065298239469,0 -122.803574592949,38.2060780810705,0 -122.803501505271,38.2056498637505,0 -122.803387971326,38.2053109693267,0 -122.803359517777,38.2052260360734,0 -122.803120644826,38.2048686643617,0 -122.803103203621,38.2048425708636,0 -122.802600208731,38.2047380740459,0 -122.802044662005,38.2047957106575,0 -122.80152069717,38.2049209923421,0 -122.800996681941,38.2048029340049,0 -122.800482636567,38.2048245842458,0 -122.799971050105,38.2049904365357,0 -122.799425111824,38.2050570897999,0 -122.798895276067,38.2049795683075,0 -122.798411822813,38.2047804560229,0 -122.798010456297,38.2050997034117,0 -122.798286650743,38.2053840767643,0 -122.798719862354,38.2056822401103,0 -122.798941815502,38.20609269301001,0 -122.798800467125,38.2064799861294,0 -122.798769128906,38.2065076213529,0 contacts #khStyle84754 1 -122.765321806268,38.2043843772847,0 -122.765429100541,38.2047276528093,0 -122.765428092819,38.2051512392318,0 -122.765210843641,38.2059979781748,0 -122.764962263607,38.2063760024431,0 -122.764856341032,38.2064848224032,0 -122.764714235778,38.2066308141143,0 contacts #khStyle84754 1 -122.723564938526,38.2068672291713,0 -122.723540363926,38.206870929336,0 -122.72293139368,38.2068784968912,0 -122.72256723129,38.2069001625909,0 -122.722448082631,38.2068818541031,0 -122.722333268779,38.2068500370383,0 -122.722227073039,38.2068047216096,0 -122.722135223626,38.20674141522731,0 -122.722061986632,38.2066646343483,0 -122.721906645319,38.2064029011044,0 -122.721862359139,38.2062225451646,0 -122.721801989774,38.2061412885412,0 -122.721633336322,38.2060011921586,0 -122.721481136856,38.2058521223021,0 -122.721411866803,38.2056717065213,0 -122.721415083867,38.2055770827616,0 -122.721458259986,38.2054870606844,0 -122.721512840568,38.205401572077,0 -122.721645524311,38.2052396634348,0 -122.721801713205,38.2050913294772,0 -122.721959044969,38.2048303415349,0 -122.722022173558,38.2047493793136,0 -122.722105238399,38.2046819833342,0 -122.722208239484,38.2046281535546,0 -122.722442589447,38.2045746363005,0 -122.722470931407,38.2045742837812,0 -122.723050826823,38.2045670694983,0 -122.723072110825,38.2045630267715,0 -122.723167984337,38.2045448163066,0 -122.723484768249,38.2044013673743,0 -122.7237570873,38.2043118874105,0 -122.723783086868,38.204309045343,0 -122.723856430309,38.2043010279847,0 -122.723878136242,38.2042986552449,0 -122.723882072087,38.204298664562,0 -122.723999490885,38.2042989424594,0 -122.724241027125,38.2043265513023,0 -122.724356925702,38.2043538628116,0 -122.724573256122,38.2044399927898,0 -122.724673705057,38.2044943050666,0 -122.72475516897,38.2045665975,0 -122.724828049783,38.2046433758879,0 -122.724890919772,38.2047246368787,0 -122.724968101018,38.204796919061,0 -122.725005935315,38.2048916397328,0 -122.72501128919,38.2049862838191,0 -122.725047338987,38.2051756317284,0 -122.725089830665,38.2052658570865,0 -122.725167369602,38.2053381399758,0 -122.725197012005,38.2054283350156,0 -122.725220467742,38.2055500592902,0 -122.725199137161,38.205716740644,0 -122.725085343805,38.2058877103487,0 -122.725043242673,38.2059777362963,0 -122.72498795188,38.2060632248695,0 -122.724851721629,38.2062206226529,0 -122.724775405284,38.2062970490018,0 -122.724597514797,38.20642731061651,0 -122.724316264557,38.2066114028091,0 -122.724213279268,38.2066607281958,0 -122.723992742097,38.2067413191926,0 -122.723889739342,38.2067951505108,0 -122.723658221756,38.2068531835897,0 -122.723564938526,38.2068672291713,0 contacts #khStyle84754 1 -122.736462134344,38.2053506917762,0 -122.736262344332,38.2053576215727,0 -122.73620243469,38.2053596994961,0 -122.73609623123,38.2053633830122,0 -122.736075564813,38.2053617545309,0 -122.735978476491,38.2053541040733,0 -122.735570267986,38.2053140324355,0 -122.735468388365,38.205304031232,0 -122.734944695084,38.2052526204644,0 -122.734897710151,38.205248007854,0 -122.734714965721,38.2052248886507,0 -122.733961851112,38.2051296081218,0 -122.733794566379,38.20510844335311,0 -122.733700752357,38.2050965739471,0 -122.733649639718,38.2050867320722,0 -122.733582334112,38.2050737721603,0 -122.733467161269,38.2050419651496,0 -122.733444362914,38.2050382949722,0 -122.732757285111,38.2049276839824,0 -122.732706051409,38.2049177888664,0 -122.73260838385,38.2048989255926,0 -122.732521163691,38.2048820800273,0 -122.732422027789,38.2048568742697,0 -122.732288661509,38.20482296512261,0 -122.732266723823,38.2048187238279,0 -122.731934837364,38.2047545584218,0 -122.731930378352,38.20475331673731,0 -122.731592178212,38.2046591387854,0 -122.73151943218,38.2046289116108,0 -122.731483124459,38.2046138251288,0 -122.731477570596,38.2046111707892,0 -122.731274687609,38.2045142072729,0 -122.730737241311,38.2042966670837,0 -122.730731590127,38.2042946050024,0 -122.730604047439,38.2042480653782,0 -122.730550819113,38.2042286425971,0 contacts #khStyle84754 1 -122.81900043546,38.2036697586471,0 -122.819182112233,38.2036700416362,0 -122.819227350803,38.20370616232051,0 -122.819318012391,38.2037063033994,0 -122.819362894702,38.2037424234766,0 -122.819453912685,38.20374256500471,0 -122.819544036539,38.2038148055948,0 -122.819634695605,38.2038149464247,0 -122.819814944035,38.2039594251554,0 -122.819860720568,38.2039234459082,0 -122.819906051498,38.2039235162115,0 -122.819996176025,38.2039957564507,0 -122.820132522644,38.2039959676988,0 -122.820177408196,38.2040320874656,0 -122.820268067535,38.2040322278058,0 -122.820313306869,38.2040683480676,0 -122.82035863789,38.204068418196,0 -122.820403879956,38.2041045363283,0 -122.820449211,38.2041046064216,0 -122.82053933363,38.2041768462357,0 -122.820537374842,38.20439314684221,0 -122.820446189283,38.2044605969789,0 -122.820219181922,38.2044602457905,0 -122.820173405227,38.2044962251745,0 -122.819946395099,38.2044958734549,0 -122.819901512036,38.2044597536072,0 -122.819765520904,38.2044595426459,0 -122.819720278941,38.2044234221713,0 -122.819584287878,38.20442321100001,0 -122.819539048688,38.20438709045921,0 -122.819357370124,38.20438680802671,0 -122.819267602103,38.2043145678562,0 -122.819222270931,38.204314497307,0 -122.819131790429,38.2042422559219,0 -122.819086459302,38.2042421853201,0 -122.818996335371,38.2041699464827,0 -122.818996425028,38.2041338963627,0 -122.81895154266,38.204097776148,0 -122.818952078369,38.2040256764624,0 -122.81890719343,38.2039895562257,0 -122.818909249386,38.2037372096982,0 -122.81900043546,38.2036697586471,0 contacts #khStyle84754 1 -122.811562162584,38.2033424932,0 -122.811234544861,38.2034636300578,0 -122.811065192112,38.2036661365773,0 -122.81113300949,38.2039411291432,0 -122.811423224907,38.2040677743712,0 -122.811767162928,38.2041224074692,0 -122.812109806681,38.20412746938801,0 -122.813123945176,38.2042282411068,0 -122.813449282162,38.2043008644825,0 -122.8140937717,38.20449115935871,0 -122.814422875012,38.2044871802851,0 -122.814744377571,38.2043840520353,0 -122.81555513168,38.2038986634967,0 -122.81616396196,38.203651786151,0 -122.816441058995,38.2034629604447,0 -122.816372016553,38.2032420465665,0 -122.816077548469,38.2031018848407,0 -122.815392357358,38.2031999361941,0 -122.815079440661,38.2032985767464,0 -122.814489097473,38.2035725157131,0 -122.814171905302,38.20366664178921,0 -122.813834113226,38.2037201763966,0 -122.81350226116,38.2036835917881,0 -122.813184148099,38.203579437216,0 -122.812588108284,38.2032900771758,0 -122.812505013478,38.2032629054011,0 -122.812004028528,38.203208022538,0 -122.811562162584,38.2033424932,0 contacts #khStyle84754 1 -122.807071595728,38.2029611059424,0 -122.807378895692,38.2028309344254,0 -122.807699557187,38.2027773900338,0 -122.80837349985,38.2028866541541,0 -122.80869952692,38.2029637971242,0 -122.809051874898,38.2030770327243,0 -122.809190612448,38.2032530047038,0 -122.808961197772,38.2034914598632,0 -122.808635596434,38.2035224670916,0 -122.808283763204,38.2034858369121,0 -122.807946235858,38.2034357115114,0 -122.807649953905,38.2033135528379,0 -122.807071595728,38.2029611059424,0 contacts #khStyle84754 1 -122.772669914787,38.2061324113591,0 -122.773487450558,38.2059242505957,0 -122.773862060373,38.2056365784869,0 -122.77447111385,38.2049077463956,0 -122.774882079779,38.2046336602298,0 -122.775338247625,38.2044002162092,0 -122.775644506323,38.20404931881861,0 -122.775898747804,38.2036667766588,0 -122.776345571923,38.2028700283494,0 -122.776675622482,38.2025552240144,0 -122.777194368947,38.2023939929903,0 -122.777728226829,38.2023093949522,0 -122.778273656004,38.2022924104275,0 -122.779353341728,38.2024116253999,0 -122.779870852458,38.2025387807929,0 -122.780341322708,38.2027604765318,0 -122.780716596252,38.2030676099082,0 -122.78099959638,38.2034376560341,0 -122.781435372779,38.203686319563,0 -122.782409696534,38.2040756837699,0 -122.782860499522,38.2043153575357,0 -122.783279431263,38.2045910202405,0 -122.783544296278,38.2047824163127,0 -122.783685819962,38.2048846831308,0 -122.783959932198,38.2052501991426,0 -122.783972412554,38.2053002103581,0 -122.784066813687,38.2056784918176,0 -122.783646928888,38.2069214381719,0 -122.7831467564,38.2081507144575,0 -122.7825417425,38.2088615734595,0 -122.781977699237,38.2095950373281,0 -122.781718127904,38.2099730759694,0 -122.781569817146,38.2103873729157,0 -122.78149104464,38.2108243314915,0 -122.781531551338,38.2112434889456,0 -122.781993037101,38.2115057168993,0 -122.782427329361,38.2113127608178,0 -122.782807804602,38.21097099640951,0 -122.783395739697,38.2102465856952,0 -122.783655303329,38.2098685433774,0 -122.783854605667,38.2094678572915,0 -122.784060213239,38.2086255697727,0 -122.784227054241,38.2082158102377,0 -122.784459504963,38.2078287032652,0 -122.785044899593,38.207104279351,0 -122.785097819018,38.207046007388,0 -122.786205156765,38.2058266409523,0 -122.786556489819,38.2061562426239,0 -122.786840628774,38.2065172638983,0 -122.787042911962,38.2069186909308,0 -122.787357013327,38.2072887782344,0 -122.787430596299,38.20732433630301,0 -122.787787598511,38.20749685208771,0 -122.788073747705,38.2074765768604,0 -122.788345622991,38.2074573123612,0 -122.788885538212,38.207507862178,0 -122.789404146653,38.20764398973711,0 -122.789898010607,38.2078206265775,0 -122.791346583686,38.2084180590978,0 -122.791860932709,38.20854966185,0 -122.793441318718,38.2088724228311,0 -122.793894170381,38.2090062319453,0 -122.795197599613,38.2093913581303,0 -122.795988222382,38.2096249555552,0 -122.797022298041,38.2098926335775,0 -122.797394963009,38.2099598004397,0 -122.797469718422,38.2099732737419,0 -122.798612830915,38.2101792923936,0 -122.799695942115,38.2102757942568,0 -122.800218114294,38.2101685425832,0 -122.80072011104,38.2099981665448,0 -122.801687564266,38.20957172701161,0 -122.802186181664,38.2094599201776,0 -122.802722566958,38.2096365751857,0 -122.802768155857,38.2098389216581,0 -122.802806866199,38.210010736744,0 -122.802535728794,38.2108754760459,0 -122.802302650168,38.2112626172073,0 -122.801997178403,38.2116225971611,0 -122.801267194731,38.2122702513356,0 -122.800978491276,38.2126302572678,0 -122.801163955718,38.2134732424459,0 -122.80120562327,38.2139014069593,0 -122.801087044362,38.2143157787097,0 -122.800512196734,38.21552697376201,0 -122.799593674813,38.2170800486251,0 -122.79773436661,38.2186495089729,0 -122.797338695301,38.2189462322991,0 -122.796741927915,38.2196616835784,0 -122.795532077722,38.2205337743722,0 -122.794481819225,38.22076174223191,0 -122.793975908438,38.22102220951051,0 -122.794145412794,38.2213018964555,0 -122.794701577549,38.2214515850384,0 -122.795777844045,38.2212461920611,0 -122.796315288119,38.221197565556,0 -122.796863509493,38.2212525989357,0 -122.797314084098,38.2215012279898,0 -122.797714629423,38.2217677932721,0 -122.798251022935,38.2215839688869,0 -122.798197744136,38.2212278835397,0 -122.797927552939,38.2208173466863,0 -122.797777000507,38.2203934984776,0 -122.797857038949,38.2199835696722,0 -122.798411414495,38.2192319894094,0 -122.798767875083,38.21891266346,0 -122.799167454981,38.2186204483285,0 -122.799485797291,38.2182695106767,0 -122.800334200675,38.2171669408268,0 -122.800583348681,38.2167888438935,0 -122.800769380915,38.2163836008568,0 -122.801254849864,38.2156138638851,0 -122.801445516135,38.21520862764,0 -122.801771637038,38.2148757219394,0 -122.802648375677,38.2143544888285,0 -122.803020418905,38.2140789165482,0 contacts #khStyle84754 1 -122.751100336731,38.2059100881432,0 -122.751100221094,38.2059100955381,0 -122.751046485704,38.2059083780827,0 -122.750916032275,38.2059042085127,0 -122.750836404893,38.2059016633803,0 -122.75064696121,38.2058956079682,0 -122.750527465539,38.205872820958,0 -122.750418708843,38.2058410442964,0 -122.750310340078,38.2058002558398,0 -122.750099003299,38.2057051714177,0 -122.749876183315,38.2056280870247,0 -122.749773572537,38.2055737916399,0 -122.749593755577,38.2054472301279,0 -122.749511909287,38.205374954068,0 -122.749439715799,38.20529819243721,0 -122.749387914029,38.2052079558165,0 -122.749314308625,38.20512668480831,0 -122.749080504205,38.2049233999124,0 -122.748858929872,38.2046931033169,0 -122.748759905972,38.204634308506,0 -122.748651539906,38.2045935185208,0 -122.748427654026,38.2045164290749,0 -122.748308145716,38.2044981460423,0 -122.748200509536,38.2044528509533,0 -122.748128318318,38.2043760885132,0 -122.748069721618,38.2042903428824,0 -122.748016835864,38.2042046095665,0 -122.747987165967,38.2041144201549,0 -122.747981425696,38.20401977620801,0 -122.748064826184,38.2037450743935,0 -122.748073348756,38.2035513234606,0 -122.748036183685,38.2034611178532,0 -122.747940715718,38.2034068362935,0 -122.747821907571,38.2033930605442,0 -122.747796407551,38.203401198719,0 -122.747709709276,38.2034288678859,0 -122.74762725451,38.20346866139201,0 -122.747625051337,38.20346972466431,0 -122.747607457844,38.20347821544871,0 -122.747596589833,38.2034798197056,0 -122.747487112596,38.2034959798811,0 -122.747365045201,38.2034957154017,0 -122.74725918004,38.203454929548,0 -122.747173396472,38.2033871495694,0 -122.747099065838,38.2033103818464,0 -122.747010054644,38.2032471010093,0 -122.746814837882,38.203138526846,0 -122.746696775567,38.2031157390501,0 -122.746576183527,38.2031019581648,0 -122.746333446357,38.20311044275691,0 -122.74626115111,38.20312980618311,0 -122.746216623512,38.2031417323458,0 -122.746104424829,38.2031775381534,0 -122.745890671884,38.2032671977042,0 -122.745670152646,38.2033523358383,0 -122.745617073168,38.203364933709,0 -122.745557271018,38.2033791271028,0 -122.745069002297,38.2033780604013,0 -122.744949123985,38.2033642794059,0 -122.744832505368,38.2033369866313,0 -122.744711556404,38.20332320305,0 -122.744590203165,38.20332293725,0 -122.744347123955,38.2033269107202,0 -122.744319792573,38.2033309935481,0 -122.744228205872,38.2033446749412,0 -122.744215717408,38.2033460547659,0 -122.744108232798,38.2033579304622,0 -122.743986165664,38.2033576624708,0 -122.743881262448,38.203348419533,0 -122.743753968323,38.2033120897073,0 -122.74364849408,38.2032622889327,0 -122.743548032735,38.2032079928264,0 -122.743454741686,38.2031446998846,0 -122.743371103514,38.2030769218526,0 -122.743306786797,38.2029956675112,0 -122.743257492595,38.2029054336885,0 -122.743232127954,38.2028107462842,0 -122.743218875242,38.2026214540021,0 -122.743217711978,38.2020401433271,0 -122.743166959087,38.2019589187698,0 -122.743137311912,38.2018642218963,0 -122.743118697359,38.2017785618524,0 -122.743112590706,38.2016884230995,0 contacts #khStyle84754 1 -122.803132566673,38.20190454315831,0 -122.803087139526,38.2019405165153,0 -122.802996136071,38.2019358570765,0 -122.802904927885,38.202007800969,0 -122.80285959819,38.2020077240992,0 -122.802813814504,38.2020436967458,0 -122.802677828012,38.2020434659829,0 -122.802587366761,38.2019712117777,0 -122.802588375379,38.2018630646733,0 -122.802543499897,38.20182693814661,0 -122.802544496357,38.2017232962582,0 -122.802681488071,38.2016153779644,0 -122.802726817522,38.2016154549035,0 -122.802772600975,38.201579484387,0 -122.803044925912,38.2015799461388,0 -122.803134677121,38.2016521966956,0 -122.803132566673,38.20190454315831,0 contacts #khStyle84754 1 -122.720088729567,38.2014822229102,0 -122.720177628923,38.2015680551683,0 -122.720237975486,38.2016538188868,0 -122.720285473324,38.2017395517656,0 -122.720320801651,38.2018342679726,0 -122.720323293996,38.2019289054491,0 -122.720297233204,38.2020234744658,0 -122.720261909849,38.2021135150021,0 -122.720213737461,38.2022035247098,0 -122.720145612272,38.2022844740079,0 -122.720063262196,38.2023518703459,0 -122.720005826888,38.2024373514737,0 -122.719920240382,38.2026038776914,0 -122.719820043871,38.2026712310047,0 -122.719609166165,38.2027285423737,0 -122.719589946453,38.2027337657948,0 -122.719347886876,38.2027512087431,0 -122.719160641785,38.2027827800055,0 -122.719110737244,38.2027911943199,0 -122.71891754991,38.2029078917879,0 -122.718812424717,38.2029572073157,0 -122.718573863853,38.2029926821423,0 -122.718521795026,38.2029983888392,0 -122.718453173059,38.20300590970891,0 -122.718331872823,38.2029920981148,0 -122.71811444842,38.2029149665174,0 -122.717954615311,38.2028762729442,0 -122.717927257428,38.2028696499212,0 -122.717907627426,38.2028648977229,0 -122.71779858482,38.2028195713911,0 -122.717700284774,38.2027652584317,0 -122.717534502187,38.202625163059,0 -122.717467002199,38.2025438869073,0 -122.717417365637,38.2024581477255,0 -122.717342415511,38.2022732094458,0 -122.717337071668,38.2021785650108,0 -122.717373843747,38.2020840226113,0 -122.717444792178,38.2020120942855,0 -122.717542865919,38.2019402315931,0 -122.71774959813,38.2018280753996,0 -122.717821172589,38.2017786796651,0 -122.717853486545,38.2017291889416,0 -122.717936795775,38.2015987088023,0 -122.717945203486,38.2015777038486,0 -122.717956168869,38.2015503090521,0 -122.717976439512,38.2014996668834,0 -122.718025240864,38.2014321909179,0 -122.71803817679,38.2014096908735,0 -122.718061071375,38.2013962274194,0 contacts #khStyle84754 1 -122.814166567348,38.2011431325409,0 -122.814098271465,38.2011925913624,0 -122.814075382647,38.2012105798747,0 -122.814029697081,38.2012105067458,0 -122.813938497989,38.2012824612854,0 -122.813893171374,38.20128238867851,0 -122.813664652447,38.2014577622614,0 -122.813662578435,38.20171011093681,0 -122.813707813051,38.2017462337692,0 -122.813798472174,38.2017463791158,0 -122.813843350535,38.2017825034227,0 -122.814297351089,38.2017832300585,0 -122.814342772631,38.2017472502779,0 -122.814433773949,38.2017519030155,0 -122.814479551738,38.2017159258496,0 -122.814524881282,38.20171599823381,0 -122.814570302665,38.2016800204635,0 -122.814661315391,38.2016801657086,0 -122.814706736684,38.2016441878855,0 -122.814888408368,38.2016444775304,0 -122.814934183201,38.2016085022814,0 -122.815024842159,38.2016086466815,0 -122.815253358312,38.2014332662656,0 -122.815254436982,38.2012890668439,0 -122.81516432049,38.2012168271092,0 -122.815073664677,38.2012166828199,0 -122.815028427056,38.2011805584086,0 -122.814892442076,38.2011803417887,0 -122.814847207221,38.2011442194098,0 -122.814166567348,38.2011431325409,0 contacts #khStyle84754 1 -122.718061071375,38.2013962274194,0 -122.718103983763,38.20137380193491,0 -122.718129737664,38.20136034324981,0 -122.718222586762,38.2013470487625,0 -122.718328319431,38.2013247727847,0 -122.718355724673,38.20131063280381,0 -122.718441329439,38.201266464178,0 -122.71854598213,38.2011540601518,0 -122.718670659098,38.2010567621026,0 -122.718689894542,38.2010417507051,0 -122.718789881329,38.2010284729786,0 -122.7189062338,38.2010287533887,0 -122.719011861626,38.2010335141149,0 -122.719135230804,38.2010653550355,0 -122.719147885163,38.2010740978506,0 -122.719338131628,38.2012055374909,0 -122.719450724576,38.2012553772029,0 -122.719537830019,38.2012781189832,0 -122.719572666675,38.2012872142319,0 -122.719693964346,38.2013010245365,0 -122.719810961819,38.20131933065,0 -122.719917844685,38.2013691561995,0 -122.720013985751,38.2014279683953,0 -122.720088729567,38.2014822229102,0 contacts #khStyle84754 1 -122.81789336443,38.2004821092418,0 -122.818120362039,38.2004824649608,0 -122.81825536038,38.2005908271541,0 -122.818300596586,38.2006269482204,0 -122.818390718121,38.20069918765221,0 -122.818390179235,38.2007712873738,0 -122.818344403963,38.20080726606421,0 -122.818343867689,38.2008793657884,0 -122.81816113623,38.2010187715155,0 -122.818115807109,38.2010187005341,0 -122.818070031542,38.2010546812152,0 -122.817979375916,38.2010545391689,0 -122.817934139611,38.2010184158834,0 -122.817843481371,38.201018273728,0 -122.817798245145,38.2009821545865,0 -122.817752916048,38.200982083465,0 -122.817617915075,38.2008737206971,0 -122.81761997536,38.2006213740461,0 -122.817756934138,38.2005179455209,0 -122.817847589096,38.2005180877405,0 -122.81789336443,38.2004821092418,0 contacts #khStyle84754 1 -122.764749935014,38.2000642388807,0 -122.764240624106,38.2007236916653,0 -122.764026990948,38.2011153038006,0 -122.763898541542,38.2015431384047,0 -122.763955731971,38.2019578305552,0 -122.764187158517,38.2023548506136,0 -122.764718337253,38.20310396472691,0 -122.765298029692,38.2043083064487,0 -122.765321806268,38.2043843772847,0 contacts #khStyle84754 1 -122.811853345332,38.2010222457661,0 -122.812053133424,38.2007792317591,0 -122.812013371354,38.2005583604201,0 -122.811521512711,38.2001565070969,0 -122.811261043805,38.1999893526571,0 -122.810942950061,38.1998851919023,0 -122.81060826361,38.1998485986006,0 -122.80991895312,38.19989253370811,0 -122.809603163754,38.2000001675717,0 -122.809389189504,38.2002071038922,0 -122.809570289073,38.2004237005537,0 -122.809877273815,38.2005458740873,0 -122.810224835868,38.2005734779133,0 -122.810546535417,38.2006641286607,0 -122.810837782372,38.2007997918167,0 -122.811092853408,38.2009849614371,0 -122.811411080576,38.2010395538586,0 -122.811853345332,38.2010222457661,0 contacts #khStyle84754 1 -122.825478669824,38.19966460822131,0 -122.825749044815,38.199881313954,0 -122.825748958508,38.1999173640974,0 -122.825839083905,38.1999895998995,0 -122.825838641311,38.2000256495075,0 -122.825883883594,38.2000617676513,0 -122.825881414813,38.2003456566825,0 -122.825835648812,38.2003816382943,0 -122.825835117289,38.2004537380358,0 -122.825789348543,38.2004897175267,0 -122.825788903262,38.2005257671275,0 -122.825651958477,38.2006292070958,0 -122.825561303342,38.2006290709022,0 -122.825516417203,38.2005929531738,0 -122.825334748032,38.2005926799669,0 -122.825109257428,38.2004120912137,0 -122.825109700385,38.20037604161,0 -122.825064458293,38.2003399231695,0 -122.825064903931,38.2003038735694,0 -122.825019661905,38.200267755111,0 -122.825020537069,38.20020016321891,0 -122.824975297789,38.2001640447465,0 -122.824977243248,38.1999477460391,0 -122.825022658381,38.1999117663281,0 -122.825023633696,38.1998036169745,0 -122.825160934139,38.199700180361,0 -122.825206262457,38.1997002486245,0 -122.825251677328,38.1996642667257,0 -122.825478669824,38.19966460822131,0 contacts #khStyle84754 1 -122.743112590706,38.2016884230995,0 -122.743215652686,38.2014092617039,0 -122.74337395566,38.20115275313461,0 -122.743383925578,38.2010581435055,0 -122.743410670232,38.200963570793,0 -122.743546177001,38.20069349299941,0 -122.743623546647,38.200513412526,0 -122.743666684572,38.2003242442062,0 -122.743696981801,38.2002341854921,0 -122.743805377231,38.1999595414914,0 -122.743918761099,38.1997885524634,0 -122.744047419342,38.1995364840531,0 contacts #khStyle84754 1 -122.824849292973,38.19898321653021,0 -122.824848320074,38.1990913659022,0 -122.824802549047,38.1991273429137,0 -122.824801054377,38.19930309101391,0 -122.824755639521,38.199339068544,0 -122.824754753273,38.1994111677623,0 -122.824663569645,38.1994831306273,0 -122.824481903246,38.199482856094,0 -122.824346895011,38.1993745010525,0 -122.824346982009,38.19933845090511,0 -122.824301740927,38.1993023363584,0 -122.824304134354,38.1990499880193,0 -122.824349905593,38.199014004906,0 -122.824349992583,38.1989779568548,0 -122.824395752881,38.1989464810413,0 -122.824441080729,38.1989465496014,0 -122.824486849172,38.19891056852881,0 -122.824622832652,38.1989107740513,0 -122.824668070982,38.1989468926697,0 -122.824804051871,38.1989470979781,0 -122.824849292973,38.19898321653021,0 contacts #khStyle84754 1 -122.727790689924,38.198795349818,0 -122.727801322099,38.1988012232978,0 -122.728019067915,38.1988873502873,0 -122.728131897149,38.1989181401063,0 -122.728135656365,38.1989191659513,0 -122.728219637978,38.1989469373094,0 -122.728245447025,38.1989554719269,0 -122.728330800026,38.1989986346187,0 -122.728418074054,38.1990427686509,0 -122.728451348977,38.1990595955792,0 -122.728548224475,38.1991138962628,0 -122.728617942113,38.1991771462102,0 -122.728802704221,38.1993037513811,0 -122.728898866497,38.1993580501159,0 -122.729021863558,38.1993943860604,0 -122.729144213907,38.199412695597,0 -122.729144217691,38.1994126956058,0 -122.729227904195,38.1994191439075,0 -122.72926481328,38.1994219878464,0 -122.729312434322,38.1994301922626,0 -122.7295034302,38.1994630978763,0 -122.729690569923,38.1995054349361,0 -122.729966305282,38.1995678145634,0 -122.729991816145,38.1995783815212,0 -122.730055090055,38.1996045904271,0 -122.730075707545,38.1996131304579,0 -122.730112870712,38.1996308633128,0 -122.730284485837,38.1997127512846,0 -122.730402566834,38.1997816868795,0 -122.730471818922,38.1998221160799,0 -122.730478224747,38.1998258557803,0 -122.730565984666,38.1998589082189,0 -122.730586573652,38.1998666624991,0 -122.730636993071,38.1998963992979,0 -122.730686290379,38.1999254742444,0 -122.730699683953,38.1999305770219,0 -122.730888047552,38.200002340864,0 -122.730900490502,38.2000070814347,0 -122.73100894766,38.2000377937333,0 -122.731012799122,38.2000388843668,0 -122.731203651534,38.200160993535,0 -122.731306971434,38.2002108005271,0 -122.731325805912,38.2002236808424,0 -122.731387430082,38.200265823649,0 -122.731399534475,38.2002741014484,0 -122.731433580473,38.2003051252366,0 -122.731478858937,38.2003463843457,0 -122.731572198827,38.20046434253121,0 -122.73160746175,38.2005089058937,0 -122.731616597474,38.2005186256789,0 -122.731675367245,38.2005811526173,0 -122.731744788092,38.2006550113824,0 -122.73174753594,38.2006579348906,0 -122.731836157352,38.2007257326627,0 -122.73184377729,38.2007299113923,0 -122.731925830234,38.2007749086877,0 -122.731935178997,38.2007800354805,0 -122.731954220381,38.20078619218461,0 -122.732047472681,38.2008163436518,0 -122.732136423729,38.2008300662664,0 -122.732284684615,38.2008529385394,0 -122.732307808249,38.2008538555082,0 -122.732370503091,38.2008563416522,0 -122.732525075138,38.2008624710138,0 -122.732525922009,38.2008625045948,0 -122.732774588473,38.2008901122351,0 -122.732881496072,38.200935419796,0 -122.732972633742,38.200998716209,0 -122.733051960529,38.2010709980445,0 -122.733179140435,38.2012335146031,0 -122.733221996758,38.2013237379293,0 -122.73327412699,38.2015131202558,0 -122.733340232373,38.20158987791551,0 -122.733540048447,38.2017029912376,0 -122.733625460547,38.2017707803198,0 -122.733694762286,38.2018520513424,0 -122.733752983373,38.2019378032892,0 -122.733792985486,38.2020280198818,0 -122.733801205789,38.2021226701798,0 -122.733819776666,38.2022173441016,0 -122.733896195834,38.2024022753015,0 -122.733982346879,38.2024880913947,0 -122.734100714211,38.2026059980907,0 -122.734108965834,38.2026142175825,0 -122.734113839599,38.2026190723691,0 -122.734166454667,38.2026556600972,0 -122.734386905578,38.2028089576986,0 -122.734405273578,38.2028284952388,0 -122.734531045594,38.2029622751401,0 -122.734531256373,38.20296249933921,0 -122.734656301273,38.2031250093976,0 -122.734816796673,38.2032560561023,0 -122.734839496789,38.2032714597937,0 -122.7349100804,38.2033193558755,0 -122.735011249329,38.2033736609676,0 -122.735391246851,38.2035071884108,0 -122.735566272603,38.203568690186,0 -122.73557931,38.203574720451,0 -122.735665146408,38.2036144228173,0 -122.735771873592,38.2036637877571,0 -122.735882372629,38.2037045944512,0 -122.736095112875,38.2037997076257,0 -122.736126209666,38.2038187935447,0 -122.736142996933,38.2038290968643,0 -122.736190913173,38.2038585058119,0 -122.736364245876,38.20399408569781,0 -122.736369215205,38.2040003646485,0 -122.736386895931,38.2040227049616,0 -122.736417328836,38.204061158131,0 -122.736428555778,38.2040753437996,0 -122.736515400986,38.2041431340019,0 -122.736550710147,38.2041677498209,0 -122.736596301593,38.2041995339056,0 -122.736606188822,38.2042064267832,0 -122.736709161136,38.2042562282202,0 -122.73671432283,38.2042578061544,0 -122.73705072183,38.2043606429856,0 -122.737170616493,38.20436992594391,0 -122.737284228027,38.2043616462646,0 -122.737290576177,38.2043611836266,0 -122.737293431756,38.2043598525431,0 -122.737382605912,38.2043182853561,0 -122.737396404957,38.204311853129,0 -122.737411476158,38.2043013008768,0 -122.737479251886,38.2042538469595,0 -122.737486220649,38.2042489676985,0 -122.737559666317,38.20417252656821,0 -122.737562406054,38.2041679000847,0 -122.737607092927,38.2040924390599,0 -122.737610301098,38.2040870215371,0 -122.737642051221,38.2039924614684,0 -122.737665948935,38.2038978837233,0 -122.737666785293,38.2038877854626,0 -122.737667587487,38.2038780996995,0 -122.737673785034,38.2038032698383,0 -122.737669858878,38.2037041232268,0 -122.737660582546,38.2036518241981,0 -122.737656395305,38.2036282169279,0 -122.737653067298,38.2036094539309,0 -122.73761091807,38.2035192338352,0 -122.737600437814,38.2035032797614,0 -122.73756333178,38.203446793254,0 -122.73750187733,38.2033532409419,0 -122.737501229817,38.2033522552292,0 -122.737500210042,38.2033487885696,0 -122.737476849218,38.2032693748475,0 -122.737473373987,38.2032575609941,0 -122.737476847439,38.2032300042162,0 -122.737483623509,38.2031762459143,0 -122.737485866459,38.2031584513319,0 -122.737554735997,38.2030639748331,0 -122.737726252319,38.203208561166,0 -122.737854731653,38.2032764431578,0 -122.737889157199,38.2032946318328,0 -122.737923256596,38.2033126481685,0 -122.738011173055,38.203380439682,0 -122.73804364284,38.2034153998225,0 -122.738077001341,38.2034513167973,0 -122.738215541977,38.20360048251371,0 -122.738216680296,38.20360170813071,0 -122.738218321045,38.2036025950078,0 -122.738317138221,38.2036560087808,0 -122.738405039274,38.2037283062251,0 -122.738514809861,38.2037736150727,0 -122.738630241337,38.2038069272067,0 -122.738766942043,38.2038463771988,0 -122.738857655637,38.2038725558153,0 -122.738861027073,38.20387352876071,0 -122.738865882774,38.2038739008782,0 -122.739095115036,38.2038914678978,0 -122.739103313789,38.2038920961938,0 -122.739346395085,38.2038881335896,0 -122.739373507718,38.2038826771753,0 -122.739721658792,38.2038126111801,0 -122.740003769744,38.2037558350149,0 -122.740055046589,38.2037455152245,0 -122.740072970994,38.20374354144321,0 -122.740105074243,38.2037400063234,0 -122.740175377923,38.20373226464721,0 -122.740296747858,38.2037280287858,0 -122.74030142926,38.2037284503579,0 -122.740313014336,38.2037294936224,0 -122.740553295356,38.2037511312535,0 -122.740658587716,38.203751365504,0 -122.740772137414,38.2037380992302,0 -122.740978615259,38.2036889892265,0 contacts #khStyle84754 1 -122.823629536307,38.198332468815,0 -122.823583765147,38.1983684495532,0 -122.823582697693,38.1985126490758,0 -122.823536931715,38.198548629803,0 -122.823536485336,38.19858467941,0 -122.823491083885,38.1986161533384,0 -122.823490640142,38.1986522029489,0 -122.823307910485,38.1987961240158,0 -122.823171929888,38.198795916974,0 -122.823036571202,38.1986875619648,0 -122.823040108864,38.1982594733459,0 -122.823131651536,38.1981875122732,0 -122.823267630998,38.1981877193644,0 -122.823357751799,38.1982599571041,0 -122.823494087721,38.1982601644749,0 -122.823538968766,38.198296282993,0 -122.823584296208,38.1982963518848,0 -122.823629536307,38.198332468815,0 contacts #khStyle84754 1 -122.727492434725,38.1977956048057,0 -122.727493848653,38.197894745961,0 -122.727492219652,38.19790127759771,0 -122.727471384309,38.1979848187942,0 -122.727443323846,38.1980315346735,0 -122.727421445952,38.1980679575851,0 -122.727420028232,38.1980703178418,0 -122.72741176011,38.1981939781287,0 -122.727401760096,38.198343540469,0 -122.727400748252,38.1983586737893,0 -122.727415384108,38.1984533395703,0 -122.727415625494,38.1984542167934,0 -122.727418564191,38.1984648963347,0 -122.727441440726,38.1985480320359,0 -122.727451256398,38.1985576695474,0 -122.727486390995,38.1985921664028,0 -122.727515049071,38.19862030426371,0 -122.727585548407,38.1986677916543,0 contacts #khStyle84754 1 -122.813967963956,38.1978532501127,0 -122.814279927744,38.197700535529,0 -122.814577547851,38.1977145288488,0 -122.81479219523,38.1979356784018,0 -122.814638158951,38.1981607470912,0 -122.814219810946,38.1986016907515,0 -122.814043581891,38.1988492535399,0 -122.813811904815,38.1990065993434,0 -122.813456496371,38.19897898930711,0 -122.813147751009,38.1988478159833,0 -122.812951640905,38.1986357058767,0 -122.812991273342,38.1983518745721,0 -122.813234336336,38.1982080664947,0 -122.813578229108,38.1981320109601,0 -122.813967963956,38.1978532501127,0 contacts #khStyle84754 1 -122.727492434725,38.1977956048057,0 -122.727545406596,38.1977551721569,0 -122.727545667032,38.1977548222141,0 -122.727575537218,38.1977146861385,0 -122.727590728792,38.1976606464251,0 -122.72759088077,38.1976199706843,0 -122.72759089716,38.1976155841566,0 contacts #khStyle84754 1 -122.727492434725,38.1977956048057,0 -122.727492255249,38.1977954698324,0 -122.727465235619,38.1977751498841,0 -122.72743833845,38.1977549220141,0 -122.727193809981,38.1975786059795,0 -122.726995968057,38.1974204237772,0 -122.72688889798,38.1973255415378,0 -122.726782184331,38.1972306605541,0 -122.726782183116,38.1972306594779,0 -122.726675115544,38.1971357776013,0 -122.726652409683,38.1970996742623,0 contacts #khStyle84754 1 -122.726652409683,38.1970996742623,0 -122.726766612416,38.1970053102356,0 contacts #khStyle84754 1 -122.726652409683,38.1970996742623,0 -122.726553569874,38.1971895679254,0 -122.726402182229,38.1973018695922,0 -122.726401901715,38.197302037216,0 -122.726239326191,38.1973991855163,0 -122.726206879468,38.1974185742563,0 -122.726197131635,38.197419659732,0 -122.726114023634,38.1974289142382,0 -122.726087983596,38.1974318139186,0 -122.726049396418,38.1974302901079,0 -122.72596665718,38.1974270226859,0 -122.725847896798,38.1974042122943,0 -122.725738483481,38.1973633986954,0 -122.72564707935,38.1973072807181,0 -122.725642699993,38.19730459198831,0 -122.725611296978,38.1972800712264,0 -122.725555872862,38.1972367937431,0 -122.725501920514,38.1971600979574,0 -122.725498718731,38.1971555464661,0 -122.725473101419,38.1970045458146,0 contacts #khStyle84754 1 -122.725461627919,38.1968790360737,0 -122.725455549569,38.196772412224,0 -122.725448066956,38.1967409022939,0 -122.725441111825,38.1967116136152,0 -122.725433065005,38.1966777277031,0 -122.725375944838,38.1965749908602,0 -122.72535400588,38.1965355311699,0 -122.725335225758,38.1965017529669,0 -122.725268793367,38.1964204837223,0 -122.725095498917,38.196284887447,0 -122.725031881738,38.1962105992184,0 -122.725029763764,38.1962081259752,0 -122.72496522721,38.1961134298554,0 -122.724965167392,38.1961133420826,0 contacts #khStyle84754 1 -122.885999407686,38.1956348218549,0 -122.885815298507,38.1958329136304,0 -122.885971745821,38.1959772669806,0 -122.886082228165,38.1960765141154,0 -122.886271743146,38.1960721937944,0 -122.886409022949,38.1959236231471,0 -122.886395007025,38.1957568783386,0 -122.886244934224,38.1956440746894,0 -122.885999407686,38.1956348218549,0 contacts #khStyle84754 1 -122.88527800769,38.1950347756174,0 -122.885470585712,38.1951250924194,0 -122.885553483164,38.195287398401,0 -122.885451842607,38.1954675463167,0 -122.885290088336,38.1955214608607,0 -122.885049850858,38.195552766699,0 -122.884851523141,38.1954894811124,0 -122.884909580916,38.1953363257787,0 -122.884955191807,38.1951561224646,0 -122.885094510718,38.1950706431778,0 -122.88527800769,38.1950347756174,0 contacts #khStyle84754 1 -122.886839394008,38.1952616315582,0 -122.886669950655,38.1952118951464,0 -122.886551978368,38.1951126411808,0 -122.886558448662,38.1948512879442,0 -122.886685641765,38.19476128752701,0 -122.886871878129,38.1947975163344,0 -122.887051916483,38.194919365294,0 -122.887204050987,38.195086245209,0 -122.887066080103,38.1952212962515,0 -122.886839394008,38.1952616315582,0 contacts #khStyle84754 1 -122.795660430808,38.19503763271201,0 -122.795662008184,38.1948573836758,0 -122.795844769666,38.1947180106622,0 -122.796026421236,38.1947183295233,0 -122.796116510697,38.1947905882812,0 -122.796113931647,38.1950744793016,0 -122.796022725307,38.1951464179296,0 -122.795841070011,38.1951460990604,0 -122.795795845694,38.1951099692717,0 -122.795750522964,38.195109889653,0 -122.795660430808,38.19503763271201,0 contacts #khStyle84754 1 -122.797342796258,38.1946530384412,0 -122.797205809794,38.1947609506251,0 -122.797205353093,38.1947970001883,0 -122.797159940031,38.1948284639708,0 -122.797158464125,38.1949726607339,0 -122.797203691694,38.195008790002,0 -122.79720323499,38.1950448395637,0 -122.79738341724,38.1951893530903,0 -122.797474421774,38.1951895116749,0 -122.797519847453,38.1951535425489,0 -122.797565172874,38.1951536214893,0 -122.797656736679,38.1950816801929,0 -122.797657737288,38.1949780382061,0 -122.797703162751,38.19494206691,0 -122.797704632262,38.1947978701323,0 -122.797524450343,38.19465335498981,0 -122.797342796258,38.1946530384412,0 contacts #khStyle84754 1 -122.919518578744,38.1949556832888,0 -122.919310508617,38.19496004417591,0 -122.919064458277,38.1947796220994,0 -122.918991941183,38.1945227148382,0 -122.919031705645,38.19438755504,0 contacts #khStyle84754 1 -122.884964848961,38.194462172359,0 -122.884919586144,38.1944260770308,0 -122.884830822575,38.1943629006266,0 -122.884683814397,38.1943447286838,0 -122.884463460772,38.1944436462377,0 -122.884341941176,38.19455618026701,0 -122.884252881227,38.1946777592844,0 -122.884357654892,38.1947724950332,0 -122.884484600035,38.1948402152483,0 -122.884644119958,38.1948448821757,0 -122.88490833903,38.1947685383701,0 -122.885050919187,38.1946515195238,0 -122.884964848961,38.194462172359,0 contacts #khStyle84754 1 -122.794485207071,38.194530860261,0 -122.794440340111,38.194494730574,0 -122.794440441873,38.194458680387,0 -122.794305134037,38.1943502899693,0 -122.794307630988,38.1940979439038,0 -122.794444607752,38.1939945424054,0 -122.794535613437,38.1939947032755,0 -122.79458047748,38.194030832925,0 -122.794716805268,38.1940310737263,0 -122.794761672081,38.1940672033108,0 -122.79480699416,38.1940672833126,0 -122.794851861047,38.1941034107639,0 -122.794850281695,38.1942836598168,0 -122.794804870595,38.1943151247958,0 -122.794804412717,38.1943511722564,0 -122.794758986199,38.19438714243701,0 -122.794758525633,38.1944231919907,0 -122.794666962469,38.1944951310442,0 -122.794530990117,38.1944948908165,0 -122.794485207071,38.194530860261,0 contacts #khStyle84754 1 -122.706637047289,38.19640216171471,0 -122.706701486132,38.1963527547791,0 -122.706707358993,38.1963439063427,0 -122.706746217903,38.1962853589079,0 -122.706758218274,38.1962672783258,0 -122.706783285573,38.19622527625931,0 -122.706809240114,38.196181787497,0 -122.70684745018,38.1960872519318,0 -122.706867815914,38.1959926715305,0 -122.706876047533,38.195898060646,0 -122.706872543343,38.195704282452,0 -122.706882898116,38.1956141831603,0 -122.706917538964,38.1955196385971,0 -122.70692719799,38.1954250312859,0 -122.707030369878,38.1951504081574,0 -122.707052441822,38.1951191237813,0 -122.707090669506,38.195064940479,0 -122.70724613404,38.1949211300882,0 -122.707351255408,38.1948718248306,0 -122.707471221029,38.1948586068155,0 -122.7075756284,38.1948092995661,0 -122.707650879905,38.19473288159071,0 -122.707652097804,38.194728427931,0 -122.707675508707,38.1946428179699,0 -122.707672002453,38.1944490397483,0 -122.707633820822,38.1943588187746,0 -122.707610610034,38.1942731415643,0 -122.707608531463,38.1940793669059,0 -122.7076210444,38.1939847666624,0 -122.707732776621,38.1937101642855,0 -122.707748431383,38.19369277915371,0 -122.707801603115,38.1936337301049,0 -122.707891092015,38.1935663601383,0 -122.708121170535,38.1935038480892,0 contacts #khStyle84754 1 -122.782516208163,38.1933915366767,0 -122.782746130521,38.1935992561085,0 -122.782823548566,38.1938472439863,0 -122.782748155665,38.1941174790403,0 -122.782538760037,38.1943243775155,0 -122.782259194495,38.1944860792039,0 -122.78194978257,38.1946026633963,0 -122.781577327042,38.1946785706818,0 -122.781433535699,38.1945476189907,0 -122.781560149641,38.1939800673288,0 -122.781705039657,38.1937415065003,0 -122.781961120722,38.193557231651,0 -122.782516208163,38.1933915366767,0 contacts #khStyle84754 1 -122.69671238195,38.1926861622394,0 -122.696793766641,38.1926818674062,0 -122.696851841294,38.1926189305219,0 contacts #khStyle84754 1 -122.69671238195,38.1926861622394,0 -122.696676976377,38.1926697818869,0 -122.696634020738,38.1926499084801,0 -122.696621348736,38.1926426669639,0 -122.696570648058,38.1926136936321,0 contacts #khStyle84754 1 -122.69671238195,38.1926861622394,0 -122.696602751526,38.1929607595545,0 -122.696554857993,38.1931498982169,0 -122.696536208937,38.1933436191523,0 -122.696557548223,38.1935329377746,0 -122.696593574609,38.1936231567301,0 -122.696645303507,38.1937134164835,0 -122.696675620108,38.1938036205722,0 -122.696739693566,38.1941868195814,0 -122.696767155465,38.194277016223,0 -122.696881358453,38.1944485509111,0 -122.696913798193,38.1945432667063,0 -122.696918722378,38.1947325426016,0 -122.696931177081,38.194827206493,0 -122.696953624432,38.194921896326,0 -122.696986064469,38.195016612095,0 -122.697048538623,38.1950978870186,0 -122.697127466809,38.1951701920764,0 -122.697233684026,38.1952577447663,0 -122.69729747629,38.1953103272855,0 -122.69729783315,38.1953105506705,0 -122.697391450014,38.1953691523902,0 -122.697495732828,38.1954132936338,0 -122.697712797091,38.1955051729902,0 -122.697966578921,38.1955680199238,0 -122.698062187263,38.1955916963549,0 -122.698133046548,38.1956053975753,0 -122.698652719442,38.1957058791048,0 -122.698814175992,38.1957404066341,0 -122.698887343954,38.1957560535399,0 -122.699006468623,38.1957743858598,0 -122.699006639363,38.1957743958136,0 -122.699168208446,38.19578381481271,0 -122.69924909359,38.1957885300927,0 -122.699370433952,38.1957888426972,0 -122.699491848532,38.1957711303115,0 -122.699600507995,38.19573085365181,0 -122.699695698496,38.1956680109161,0 -122.69978234219,38.1956006398541,0 -122.699922156317,38.1954477864215,0 -122.700031547354,38.1954030049757,0 -122.700150838368,38.1953807801835,0 -122.700272159563,38.1953855980697,0 -122.700390551726,38.1954084333693,0 -122.700502446123,38.1954492769332,0 -122.700528612678,38.1954610858932,0 -122.70061058779,38.1954980811794,0 -122.700713332094,38.1955444494482,0 -122.701053391709,38.1956444587856,0 -122.701330733789,38.1957562193217,0 -122.70134406214,38.1957615902221,0 -122.701379761617,38.195775975962,0 -122.701391648015,38.1957792932228,0 -122.701493835292,38.1958078116286,0 -122.701609161237,38.1958081065365,0 -122.701614461943,38.1958081200886,0 -122.70173303938,38.1957858918665,0 -122.70174170643,38.1957835376313,0 -122.701801757409,38.1957672259306,0 -122.701848084733,38.1957546419726,0 -122.70186237921,38.1957494797161,0 -122.701959597963,38.19571437041701,0 -122.702025574645,38.1956783994883,0 -122.702058318478,38.1956605473046,0 -122.702059047069,38.1956599899634,0 -122.702091938197,38.1956348296407,0 -122.702146387544,38.195593178132,0 -122.702187215147,38.1955562652212,0 -122.702225909663,38.1955212808211,0 -122.702359331478,38.195359395634,0 -122.702411785299,38.1952739103644,0 -122.702453550952,38.1951838915564,0 -122.702504285754,38.19499475776631,0 -122.702504029014,38.1949206851197,0 -122.702503957753,38.1949001253649,0 -122.702494768263,38.1947920147505,0 -122.702479438181,38.194611661891,0 -122.702479258215,38.19455973451881,0 -122.702479134155,38.1945239383575,0 -122.70247911021,38.1945170294835,0 -122.70248756248,38.1944624941194,0 -122.702493771069,38.1944224352834,0 -122.702564471921,38.1942378586004,0 -122.702581494409,38.1942078462106,0 -122.702615515557,38.1941478633616,0 -122.702626363229,38.1941375933658,0 -122.702691466898,38.1940759566145,0 -122.702794448827,38.1940266499833,0 -122.702810884934,38.1940221851583,0 -122.702909490985,38.1939953990248,0 -122.702915102539,38.1939939027696,0 -122.703026674294,38.1939641534016,0 -122.70306421794,38.19396283823651,0 -122.703146602524,38.193959952238,0 -122.70315071116,38.1939607353006,0 -122.703266420808,38.1939827882677,0 -122.703374013842,38.1940281244334,0 -122.703469418322,38.1940869483301,0 -122.703469901075,38.1940871302969,0 -122.703577743688,38.1941277799038,0 -122.703689290674,38.1941238467362,0 -122.703696958406,38.1941235763666,0 -122.703799939735,38.1940742688511,0 -122.703810179846,38.19406656050481,0 -122.703824001596,38.19405615604101,0 -122.703889432812,38.1940069019591,0 -122.70394497641,38.1939573501075,0 -122.703968098175,38.1939367225671,0 -122.704050611308,38.1938631102792,0 -122.704073767754,38.1938400567734,0 -122.704242068302,38.1936725038187,0 -122.704276355098,38.1936383692008,0 -122.70428625455,38.1936204115198,0 -122.704324213864,38.1935515529424,0 -122.704325968737,38.1935483695801,0 -122.704358452384,38.1934583265445,0 -122.70437160573,38.19343091239471,0 -122.704408120813,38.1933548076895,0 -122.704444831723,38.1932782946685,0 -122.704461347181,38.1932491742614,0 -122.704495872395,38.1931882985834,0 -122.704508222583,38.19317140616591,0 -122.704565093599,38.193093618648,0 -122.704669553298,38.1929507393767,0 -122.70467673832,38.1929409117276,0 -122.704685381617,38.1929195280794,0 -122.704714949409,38.1928463768084,0 -122.704727701559,38.1927640795894,0 -122.704729607052,38.1927517822868,0 -122.704726239819,38.192723907796,0 -122.704702061739,38.1925237572462,0 -122.704701291948,38.1925173847566,0 contacts #khStyle84754 1 -122.696570648058,38.1926136936321,0 -122.696544314759,38.1925956001117,0 -122.696505885438,38.1925684626037,0 -122.696503398356,38.1925655634197,0 -122.696464613048,38.1925203514573,0 -122.69646326742,38.1925187828605,0 -122.696465577259,38.19247823247211,0 -122.696505752475,38.1924287680087,0 -122.69653172084,38.1924055008578,0 -122.69655088631,38.1923883289543,0 contacts #khStyle84754 1 -122.704701291948,38.1925173847566,0 -122.704716474236,38.1925168351924,0 -122.704817649061,38.192513172844,0 -122.705122505148,38.1924914121712,0 -122.70544299048,38.1924877152239,0 -122.705612309337,38.1924475860446,0 -122.705617578141,38.1923800053241,0 contacts #khStyle84754 1 -122.704590569377,38.1923638914628,0 -122.704627758954,38.192521704944,0 -122.704694246899,38.1925177986671,0 -122.704701291948,38.1925173847566,0 contacts #khStyle84754 1 -122.740978615259,38.2036889892265,0 -122.741105547102,38.2036261834639,0 -122.741276054719,38.2035102564148,0 -122.741290524183,38.2035004186895,0 -122.741295149089,38.2034946497548,0 -122.741315558105,38.2034691922974,0 -122.741351829828,38.2034239482294,0 -122.741376761365,38.20333838453021,0 -122.741449840085,38.2031628023327,0 -122.74146873576,38.2030682126974,0 -122.741471942918,38.2029690820075,0 -122.741386917071,38.2026895050856,0 -122.74140759729,38.2025949194106,0 -122.741459297271,38.20250941504771,0 -122.741536290268,38.2024374855254,0 -122.741588362887,38.2023474756648,0 -122.741615808172,38.2022574112047,0 -122.741638267199,38.20206369160601,0 -122.741679887627,38.2019015583034,0 -122.741688346865,38.2017303389882,0 -122.741673665668,38.2013155392111,0 -122.741670092154,38.2012145731747,0 -122.74166920632,38.2011895447891,0 -122.741636754032,38.2010813225177,0 -122.741530869115,38.2008467620426,0 -122.74152263901,38.20075211222381,0 -122.74152797144,38.2006574924695,0 -122.74160069551,38.200581047149,0 -122.741748610597,38.2005730762787,0 -122.741796786534,38.200570480126,0 -122.74184165626,38.2005680621236,0 -122.741872318927,38.2005622858899,0 -122.741916389553,38.2005539838486,0 -122.741959872562,38.2005457924849,0 -122.741983685509,38.2005343812652,0 -122.742002719867,38.2005252599502,0 -122.742062837484,38.2004964513935,0 -122.742139827778,38.2004245214392,0 -122.742326222657,38.20029875808001,0 -122.742597913368,38.199871262927,0 -122.742639275739,38.1997812289089,0 -122.74272554646,38.1995065370514,0 -122.742827520195,38.1992318797539,0 -122.742885997267,38.1991463896535,0 -122.742971916585,38.1989708346821,0 -122.743023612186,38.1988853295588,0 -122.743267122132,38.198552402236,0 -122.743317048482,38.1984623868128,0 -122.74333736811,38.198367799928,0 -122.743342309897,38.1980794096772,0 -122.74335977422,38.1979848164965,0 -122.74339756564,38.1978947743178,0 -122.743443549673,38.1978092564209,0 -122.743457801754,38.19771465615251,0 -122.74345600945,38.1976155143108,0 -122.74340276917,38.1974306401566,0 -122.743327758753,38.1972457180499,0 -122.743266302269,38.1971644699112,0 -122.74319126818,38.1970876981032,0 -122.743029027151,38.1968440021406,0 -122.742998295612,38.1967538090317,0 -122.742985797275,38.196654643569,0 -122.743027141452,38.1965691155886,0 -122.743139315646,38.1965378188792,0 -122.743381040173,38.1965068072658,0 -122.743398137471,38.1965010949133,0 -122.743435245121,38.1964886969203,0 -122.743488233554,38.1964709929906,0 -122.74356878711,38.1963990698776,0 -122.743638665596,38.1963181106987,0 -122.743684291468,38.1962325918944,0 -122.743842398069,38.1957237309132,0 -122.743867521577,38.1954804475404,0 -122.74383678957,38.1953902546279,0 -122.743737821477,38.1952187988922,0 -122.74368136256,38.1951375619287,0 -122.74364420706,38.1950473548399,0 -122.743618130808,38.1949526658305,0 -122.743626315127,38.1948580521511,0 -122.743677650177,38.1947725458793,0 -122.743762484236,38.1947006320184,0 -122.74383091753,38.1946241757923,0 -122.743889032875,38.1945386843203,0 -122.743936100692,38.1944486622858,0 -122.744000615154,38.1942685531229,0 -122.744036967709,38.1940793695562,0 -122.744043333874,38.1937909821837,0 -122.744037233879,38.1935971991291,0 -122.744026860066,38.1935025446568,0 -122.744000070111,38.1934078541402,0 -122.743959346352,38.1933176392909,0 -122.743895751187,38.1932363867353,0 -122.74381642211,38.1931641121191,0 -122.743621982166,38.1930465216831,0 -122.743450802907,38.1929109570184,0 -122.743385781171,38.1928297010439,0 -122.743355756845,38.1926403715423,0 -122.743313606819,38.1925501533201,0 -122.743205365148,38.1923786766464,0 -122.743136775471,38.1922974126701,0 -122.742963457639,38.1921618425715,0 -122.742809458944,38.1920127960116,0 -122.742695493472,38.1918458125033,0 -122.742630473504,38.191764556103,0 -122.742575972194,38.1917077084506,0 contacts #khStyle84754 1 -122.74332620581,38.1916405213934,0 -122.74350502338,38.1918025333379,0 -122.743591860729,38.1918703184164,0 -122.743688722187,38.1919291129205,0 -122.743792752812,38.1919789105524,0 -122.743879947501,38.1920466962019,0 -122.744042529083,38.1921912539304,0 -122.744104696044,38.1922725032852,0 -122.744318685688,38.1926154494164,0 -122.744439429951,38.19288609045,0 -122.744493746768,38.1929673223846,0 -122.744582727626,38.1930351114185,0 -122.74469863191,38.1930578965028,0 -122.74469863513,38.1930578965098,0 -122.744775091178,38.1930552413881,0 -122.744820697767,38.1930536575648,0 -122.745012327828,38.1929549388254,0 -122.745135201806,38.1929236635767,0 -122.74536063932,38.1928520557924,0 -122.745455787276,38.1927891757459,0 -122.745541315316,38.1927217683547,0 -122.745625415721,38.1926543577853,0 -122.745698127607,38.19257790977111,0 -122.745755168556,38.1924924149946,0 -122.745794024802,38.1924023742701,0 -122.745824969889,38.1919202705613,0 -122.745785277556,38.1916362888297,0 -122.745833392625,38.1915687996931,0 contacts #khStyle84754 1 -122.724965167392,38.1961133420826,0 -122.724936259719,38.1960186423132,0 -122.724938401103,38.1959240157529,0 -122.724926640988,38.1958248501435,0 -122.724894147636,38.1957346481713,0 -122.724837726162,38.1956488960159,0 -122.724545525376,38.1953417802101,0 -122.724299720608,38.1951294049503,0 -122.724262231998,38.1950391909887,0 -122.724247600847,38.1949445247798,0 -122.724250831701,38.1947507628966,0 -122.72423871677,38.19455696473171,0 -122.724177266578,38.1944802128939,0 -122.723903544042,38.19429030211,0 -122.72373812545,38.1941502161687,0 -122.723700298216,38.1940554949445,0 -122.723652463202,38.1938706246286,0 -122.723604969987,38.1935956297222,0 -122.723571782554,38.19350091944141,0 -122.723536436889,38.1934107103041,0 -122.723401136956,38.193140013442,0 -122.723294011489,38.1929685211687,0 -122.723226193485,38.1927836032485,0 -122.72320942288,38.1926889318013,0 -122.723274056942,38.1923961776132,0 -122.723371505093,38.192108007458,0 -122.723391476574,38.1919232977431,0 -122.723372889488,38.1917430028647,0 -122.723302738165,38.19153380670471,0 contacts #khStyle84754 1 -122.748789654863,38.1914777023443,0 -122.748883608904,38.1915303465119,0 -122.748826572328,38.1916158428403,0 -122.748731801159,38.1916742201781,0 -122.748619264314,38.191710027767,0 -122.748477502901,38.1917274730279,0 -122.74825938856,38.1917543139841,0 -122.748246073402,38.1917579143688,0 -122.748143655152,38.1917856079405,0 -122.747785873151,38.1918434160469,0 -122.747562566643,38.1919195393977,0 -122.747448973881,38.1919508373023,0 -122.747348150089,38.1920046941329,0 -122.747256945922,38.192063078003,0 -122.747202048249,38.1921485781667,0 -122.747164605691,38.1922431287032,0 -122.747075489566,38.1925223243148,0 -122.74702630125,38.192607836774,0 -122.746952163228,38.1926842825177,0 -122.746695923829,38.1928910146145,0 -122.746605431789,38.1929493995137,0 -122.746526312462,38.1930213278839,0 -122.74637732065,38.1931742171201,0 -122.746324562359,38.1932597215074,0 -122.746294255565,38.1933542872707,0 -122.746296847493,38.1937373259995,0 -122.746267995302,38.1939265266117,0 -122.746244825681,38.1940211078829,0 -122.746169971667,38.1940975515514,0 -122.746063139912,38.1941333690864,0 -122.745975469439,38.1942007721712,0 -122.745911305574,38.1942817452335,0 -122.745838214965,38.1944663430306,0 -122.745749132098,38.19452923659161,0 -122.745652927228,38.1945876082766,0 -122.745382995435,38.1947267134904,0 -122.745212212327,38.1948840598716,0 -122.745158737691,38.1949695621394,0 -122.745151279222,38.1951633154603,0 -122.745158085878,38.1952579620125,0 -122.745176312798,38.1953526335237,0 -122.745217039159,38.1954428479301,0 -122.745268829011,38.1955330864937,0 -122.745402466118,38.1956910978396,0 -122.745624323145,38.1960340586003,0 -122.745685435258,38.1962144427022,0 -122.74569475663,38.1963045884236,0 -122.745699471064,38.1966921378638,0 -122.74567172909,38.1969714660281,0 -122.745701756202,38.1972644389978,0 -122.745687879714,38.1973545341024,0 -122.745630121105,38.1974400272013,0 -122.745556333641,38.1975164727525,0 -122.745374202541,38.1976512631733,0 -122.745297218307,38.1977231953079,0 -122.745274418869,38.1978132708615,0 -122.745299768699,38.1979124641437,0 -122.745365510796,38.1979937205734,0 -122.745449858858,38.1980614987863,0 -122.745630348766,38.1981925744934,0 -122.745726506349,38.1982513657361,0 -122.745929576043,38.1983554526183,0 -122.746039002123,38.198396247448,0 -122.746249226316,38.1984958430934,0 -122.746349389121,38.1985321112034,0 -122.746568426852,38.1986632693258,0 -122.746577067151,38.1987444009261,0 -122.746495086345,38.1988163229711,0 -122.74646132906,38.1988187859498,0 -122.746375154569,38.1988250733162,0 -122.746375136734,38.1988250746174,0 -122.746375127877,38.19882507325811,0 -122.746255995069,38.1988067902945,0 -122.746141540264,38.1987749972538,0 -122.745927358106,38.1986844053287,0 -122.745808573681,38.1986661213305,0 -122.745687259563,38.1986568442293,0 -122.745646216201,38.1986567546921,0 -122.745565200204,38.1986565779115,0 -122.745494583247,38.1986643228079,0 -122.745358261911,38.19867927369,0 -122.745323485265,38.1986830877514,0 -122.745208128145,38.1987053670404,0 -122.745069247155,38.1987185822456,0 -122.744986631051,38.1987458654538,0 -122.744635466349,38.1988618334876,0 -122.744533203427,38.1989156846624,0 -122.744341850827,38.1990324281638,0 -122.744266275923,38.1991088689581,0 -122.744199964472,38.199189836294,0 -122.744166099277,38.199279887327,0 -122.744143995944,38.1993744704277,0 -122.744047419342,38.1995364840531,0 contacts #khStyle84754 1 -122.723126273618,38.1912793511059,0 -122.723028835639,38.1911879152791,0 contacts #khStyle84754 1 -122.697604082871,38.1919404355293,0 -122.697631711754,38.1919415185044,0 -122.69785028223,38.1919500856269,0 -122.697965980998,38.1919323599982,0 -122.698195348969,38.1918698655497,0 -122.698313207341,38.1918476388952,0 -122.698651942568,38.1917448697729,0 -122.698756351363,38.1916955703462,0 -122.698853659932,38.19163723997311,0 -122.698940299627,38.1915698694666,0 -122.699019857652,38.1914889618328,0 -122.699218506493,38.1912596542667,0 -122.699303717966,38.1911922798055,0 -122.699394620499,38.1911294262059,0 -122.699491909264,38.1910756015121,0 -122.699590261974,38.191049052489,0 -122.699607661907,38.1910443555949,0 contacts #khStyle84754 1 -122.753042891094,38.1912192911527,0 -122.753686555913,38.1910449095286,0 -122.754016526561,38.1909780134983,0 -122.754354247134,38.1909426759977,0 -122.754693637275,38.1909388862477,0 -122.755368223314,38.1910124043325,0 -122.757098159886,38.1912728846809,0 -122.757103076457,38.1914035746905,0 -122.756759589431,38.1915650846419,0 -122.756434566755,38.1916455186948,0 -122.756096523105,38.1916718488919,0 -122.755414594482,38.19165689844471,0 -122.754733987771,38.19167349202,0 -122.75440227343,38.1917268685172,0 -122.753740108885,38.1918831897082,0 contacts #khStyle84754 1 -122.742575972194,38.1917077084506,0 -122.742556873006,38.1916877869944,0 -122.74238068683,38.1915567159662,0 -122.742302090705,38.191479935659,0 -122.742239212673,38.1913986837721,0 -122.742169564172,38.1912137726036,0 -122.742110984804,38.1911280238767,0 -122.742071676105,38.1910423177468,0 -122.742016585846,38.1909791080541,0 -122.742041805382,38.1909115697502,0 -122.742123584925,38.1908756994914,0 -122.742144027084,38.1908667331081,0 -122.74230172773,38.1908760942759,0 -122.742522322176,38.1909622007693,0 -122.742618467863,38.1910209945809,0 -122.742885073642,38.1912153524975,0 -122.742960815192,38.191292126126,0 -122.743016556664,38.1913733619013,0 -122.743185931365,38.1915134295248,0 -122.74332620581,38.1916405213934,0 contacts #khStyle84754 1 -122.696570648058,38.1926136936321,0 -122.696568735838,38.1926191760224,0 -122.696534530405,38.1927172438564,0 -122.696473300666,38.19285227263141,0 -122.696345411756,38.1930547219661,0 -122.696311811087,38.1932393914403,0 -122.696307116195,38.1933385170657,0 -122.696327328729,38.1936269706326,0 -122.696335709027,38.1940145312294,0 -122.696312832896,38.1941947223074,0 -122.696318149213,38.1942893676982,0 -122.696334866846,38.1943885490137,0 -122.696334491919,38.1944786733299,0 -122.696294841726,38.1945732017254,0 -122.696238192559,38.1946361420182,0 -122.696153124355,38.1946674644577,0 -122.696003216879,38.1946715804005,0 -122.695768447569,38.1946574499422,0 -122.69539008187,38.1946744882219,0 -122.695165098258,38.1947099510004,0 -122.69506425158,38.1947592564991,0 -122.694950613634,38.1947950096907,0 -122.694830645956,38.1948082149033,0 -122.694596646768,38.1947805653231,0 -122.694474594363,38.1947802459252,0 -122.694231992574,38.1947615856299,0 -122.694111424365,38.1947477509502,0 -122.693993767897,38.194720404988,0 -122.693767077003,38.1946522165375,0 -122.693657328856,38.1946113721927,0 -122.693557630144,38.1945570353354,0 -122.693277187136,38.1943715419478,0 -122.69317390133,38.1943217016025,0 -122.69305911985,38.1942898559966,0 -122.692815073588,38.1942756952425,0 -122.692695125357,38.1942843920624,0 -122.692460786964,38.1943378500904,0 -122.69235798764,38.1943420854797,0 -122.692223107443,38.1943372236716,0 -122.692106974871,38.1942873485171,0 -122.692072738034,38.1942643481968,0 -122.692019430531,38.19422853614731,0 -122.691928374624,38.1941561956521,0 -122.691800565349,38.1939981390355,0 -122.691778781575,38.1939169687629,0 -122.691782055105,38.1938178395893,0 -122.691798851758,38.193727758647,0 -122.691835633243,38.1936377304595,0 -122.69214024824,38.193336614465,0 -122.692496792923,38.1930761908501,0 -122.692579890377,38.19300430947391,0 -122.692618098019,38.1929142847829,0 -122.692597760105,38.1928286121876,0 -122.692565854872,38.1927778318659,0 -122.692553849056,38.1927587234069,0 -122.692546712574,38.192747364975,0 -122.692473520353,38.1926705656691,0 -122.692423938507,38.19258030973171,0 -122.69238363533,38.1924900782232,0 -122.692359053376,38.1923953818662,0 -122.692363020789,38.1923007607428,0 -122.692498303326,38.1920397537605,0 -122.692601782458,38.19187329445371,0 -122.692643539145,38.1917877853472,0 -122.692718089237,38.1917113750827,0 -122.692804020873,38.1916440072537,0 -122.692990833998,38.1915183232547,0 -122.693035463874,38.191428315292,0 -122.693015125872,38.1913426427467,0 -122.692957674346,38.1912568725856,0 -122.692946652764,38.1911622119968,0 -122.692972744686,38.1910676490233,0 -122.693025206279,38.1909821679215,0 -122.693177158753,38.1908293543295,0 -122.693297510631,38.1907232100577,0 -122.693329030079,38.1906954114271,0 -122.693406400175,38.1906271746131,0 contacts #khStyle84754 1 -122.696961015551,38.1921100059189,0 -122.696914218365,38.1920738348869,0 -122.696908367841,38.1920693128272,0 -122.696720448423,38.1919471555287,0 -122.69664439771,38.1918703513772,0 -122.696577625618,38.1917935712951,0 -122.696541600131,38.1917033523107,0 -122.696528826086,38.1915140558955,0 -122.696492499231,38.1913246982351,0 -122.69648648789,38.1912255447295,0 -122.696451176509,38.19113532756611,0 -122.696397289735,38.1910495683464,0 -122.69632409516,38.1909727714069,0 -122.696262031972,38.1909417578032,0 -122.69622438062,38.1909229430126,0 -122.696101677142,38.1909091048239,0 -122.695980363618,38.1909042826616,0 -122.695736928997,38.1909171671924,0 -122.695621888659,38.1909484111486,0 -122.695504049729,38.1909661288901,0 -122.695261985839,38.1909925348123,0 -122.695025556244,38.1910369800236,0 -122.694904899814,38.19104567726781,0 -122.694792694973,38.1910814340876,0 -122.69458175142,38.1911755139719,0 -122.694378639417,38.1912741202456,0 -122.694264311677,38.1913053647329,0 -122.694147842671,38.1913366034983,0 -122.69402788049,38.1913498079252,0 -122.693784481884,38.1913536759642,0 -122.693664633057,38.1913398427174,0 -122.693570419609,38.1913047781703,0 -122.693561497746,38.1913014576081,0 -122.693554889888,38.1912989982778,0 -122.693551549293,38.1912963956514,0 -122.693466136204,38.1912298510073,0 -122.693444622327,38.1912130896919,0 -122.69344276242,38.1912062345021,0 -122.693411588306,38.1910913337357,0 -122.693401190638,38.1908479680163,0 -122.693406400175,38.1906271746131,0 contacts #khStyle84754 1 -122.81033994422,38.1928365969154,0 -122.810510348062,38.1927646027209,0 -122.811057214321,38.1928511124818,0 -122.812606307247,38.1933087542008,0 -122.813122133422,38.1932555102282,0 -122.81357957032,38.1930084011865,0 -122.813897742642,38.1926529170803,0 -122.814069720847,38.192247629287,0 -122.814080817826,38.1918150462126,0 -122.813719277127,38.1909898213832,0 -122.813651497565,38.1905616179545,0 -122.813866109598,38.1904537022434,0 contacts #khStyle84754 1 -122.722799178291,38.1910051546622,0 -122.722771338291,38.1909845641917,0 -122.722697930621,38.1909302717755,0 -122.722619695472,38.190857985457,0 -122.722530720393,38.1907946860847,0 -122.722447489517,38.1907223877688,0 -122.722394286432,38.1906366420358,0 -122.722376089934,38.1905419670449,0 -122.722338931899,38.190366134043,0 contacts #khStyle84754 1 -122.700492417013,38.1911097170019,0 -122.700614407959,38.1911235487768,0 -122.700736472851,38.1911193555436,0 -122.700857036416,38.1911331834067,0 -122.700953167324,38.19118750495871,0 -122.701214987101,38.1913909575286,0 -122.70131110017,38.1914497850083,0 -122.701520548332,38.1915449524368,0 -122.70163459711,38.19158129417951,0 -122.701874280287,38.1916134505187,0 -122.701996309132,38.1916182684208,0 -122.702239068101,38.1915963566584,0 -122.702351270162,38.1915605927127,0 -122.702563632443,38.1914665024727,0 -122.702669447341,38.19142170940851,0 -122.702765325022,38.1913633721382,0 -122.702846983118,38.19129147978271,0 -122.702918667276,38.1912150557141,0 -122.703133463344,38.19087312588,0 -122.703230071986,38.1908102838132,0 -122.70344594465,38.1907297196893,0 -122.703689340821,38.1907258316107,0 -122.703803462565,38.1907441463629,0 -122.70404832275,38.1907312487187,0 -122.704140611592,38.1906774074822,0 -122.704215166941,38.1905964836195,0 -122.704328609639,38.1904300391243,0 -122.704376793599,38.1903400358057,0 -122.704469209433,38.190254650745,0 contacts #khStyle84754 1 -122.704763228596,38.1906158963853,0 -122.704620336814,38.19047584050001,0 -122.70455879077,38.190340496654,0 -122.704526197063,38.1902818326464,0 -122.704469209433,38.190254650745,0 contacts #khStyle84754 1 -122.745833392625,38.1915687996931,0 -122.745843015681,38.1915553017882,0 -122.745931039978,38.1914878995367,0 -122.746028667942,38.1914295307321,0 -122.746068879119,38.1914136618166,0 -122.746130872339,38.1913891968076,0 -122.746267759078,38.1912272689416,0 -122.746305527748,38.1911417319323,0 -122.746427797998,38.1909752657929,0 -122.746472719252,38.1908852380073,0 -122.746483738633,38.1907951364929,0 -122.74652546364,38.1907005954603,0 -122.74657465125,38.1906150831799,0 -122.746645234642,38.190534123646,0 -122.746748166759,38.1904892845301,0 -122.746758747681,38.1904885286352,0 -122.746870600767,38.1904805378574,0 -122.746882779737,38.1904853108532,0 -122.74690238225,38.19049299316631,0 -122.746974662813,38.190521320203,0 -122.747079124047,38.1905516540007,0 -122.747084109149,38.1905531015881,0 -122.747206868818,38.1905533678196,0 -122.747226026858,38.1905472132445,0 -122.747279203668,38.1905301300191,0 -122.747318333995,38.1905175592526,0 -122.747405641985,38.1904501543262,0 -122.74745946757,38.19036465171721,0 -122.747490826578,38.1902745941524,0 -122.747566414046,38.1902127814797,0 -122.747567769635,38.1902116729275,0 -122.747659314855,38.1902016750273,0 -122.747689148119,38.1901984168401,0 -122.747804149909,38.1901716280105,0 -122.747908523839,38.1901222847165,0 -122.747995117108,38.1900548777998,0 -122.748069965104,38.18997843289,0 -122.748110958321,38.1898883959693,0 -122.748135551643,38.1897938173309,0 -122.748144800119,38.1896992055389,0 -122.748187934217,38.1896091732112,0 -122.748267048246,38.1895372436573,0 -122.748307299204,38.1895541729368,0 -122.748363972647,38.1895780093657,0 -122.748422558087,38.1896637550209,0 -122.748432223323,38.18975840764851,0 -122.748425116345,38.1898530240838,0 -122.748403378228,38.1899476089441,0 -122.748327100938,38.1902313396106,0 -122.748278629332,38.1903168541811,0 -122.748207706652,38.1903933076967,0 -122.748152811336,38.1904788083392,0 -122.748104323786,38.1905688290731,0 -122.748046930197,38.1906543242652,0 -122.747906152421,38.1909108775697,0 -122.747896546616,38.1910054885496,0 -122.747897274198,38.1911046281455,0 -122.747940515205,38.1911903408391,0 -122.748008395445,38.1912716004997,0 -122.748095950059,38.1913393838106,0 -122.748191743846,38.1913981723042,0 -122.748304760651,38.1914299602619,0 -122.748423161631,38.1914527471823,0 -122.748786728263,38.1914760625143,0 -122.748789654863,38.1914777023443,0 contacts #khStyle84754 1 -122.722338931899,38.190366134043,0 -122.722335723548,38.1902714947122,0 -122.722340367763,38.19022753641661,0 -122.72234585497,38.1901755989883,0 -122.72235571425,38.1900822788936,0 -122.722355960512,38.1900729627831,0 -122.722357696789,38.1900072792386,0 -122.722358215584,38.1899876531467,0 -122.722373870344,38.1899497534948,0 -122.72239227997,38.1899051843499,0 -122.722438174956,38.1897940737309,0 -122.722552254787,38.1896366255756,0 -122.722565810573,38.1896218722264,0 -122.722616123483,38.1895671144428,0 -122.722622489548,38.1895601859623,0 -122.72262684648,38.1895563483506,0 -122.722631660407,38.1895521082138,0 -122.72278576299,38.1894163733373,0 -122.722801887679,38.1894054757897,0 -122.722828067343,38.1893877827786,0 -122.722878784526,38.1893535065254,0 -122.722903101025,38.1893396118771,0 contacts #khStyle84754 1 -122.708121170535,38.1935038480892,0 -122.708229108237,38.1934635616058,0 -122.708234734307,38.1934595766913,0 -122.708276648216,38.1934298892762,0 -122.708317864784,38.1934006957466,0 -122.708638893762,38.1932618034314,0 -122.709322039868,38.1930607250499,0 -122.709432117492,38.1930204427851,0 -122.709655199062,38.1929218601552,0 -122.710289270283,38.1926755913322,0 -122.710385143611,38.1926172478322,0 -122.710561954986,38.1924870047471,0 -122.710771615378,38.1923523365457,0 -122.710821906618,38.192310078047,0 -122.710839080428,38.192295647299,0 -122.710851821476,38.19228494129041,0 -122.711102823651,38.191983642992,0 -122.711357731792,38.191776985441,0 -122.711509630236,38.1916286542013,0 -122.711594848768,38.1915567645499,0 -122.711684313878,38.1914938978655,0 -122.711980472388,38.1913233910025,0 -122.712089832249,38.1912831044538,0 -122.712203456559,38.1912473345895,0 -122.712839787949,38.1909650072921,0 -122.712951270246,38.1909292314291,0 -122.713522187696,38.19076390248771,0 -122.713625157795,38.1907145862746,0 -122.714421730138,38.1905182626401,0 -122.714774570463,38.1904515316024,0 -122.714888192201,38.1904157591233,0 -122.714996835423,38.1903754681035,0 -122.715198525332,38.1902678100724,0 -122.715534410332,38.1901559726548,0 -122.715746038162,38.1900618567152,0 -122.715805405195,38.1900394694075,0 -122.715810796315,38.1900374364142,0 -122.715959753956,38.1899812642862,0 -122.716275061567,38.1898378307507,0 -122.716389395348,38.18980205854301,0 -122.716710844782,38.18973073909301,0 -122.717098808286,38.1896235298802,0 -122.717210507079,38.1895826293673,0 -122.717292254827,38.189552695869,0 -122.717331095197,38.18953847369791,0 -122.717398543509,38.1894967124778,0 -122.717468138476,38.1894536220458,0 -122.717532676908,38.1894136623368,0 -122.717548585639,38.18940381225221,0 -122.717730050394,38.1893075677627,0 -122.717743114694,38.1893006387554,0 -122.717888240793,38.1892379019382,0 -122.718011119901,38.1892066550766,0 -122.718055813476,38.1892016807838,0 -122.718149504564,38.1891912531224,0 -122.718169631882,38.1891890129755,0 contacts #khStyle84754 1 -122.722338931899,38.190366134043,0 -122.722265865283,38.1902487970725,0 -122.722202670755,38.1901630274609,0 -122.72198300913,38.189932684373,0 -122.72189904887,38.1898648901941,0 -122.721805793347,38.189801580062,0 -122.721703208182,38.1897517664158,0 -122.721595627191,38.1897019407586,0 -122.721480823231,38.1896746291177,0 -122.721237482902,38.1896650354044,0 -122.720994073698,38.1896734661084,0 -122.720874101621,38.1896912042306,0 -122.720659730045,38.1897582852368,0 -122.720439700206,38.1898118334782,0 -122.720421131289,38.1898146468492,0 -122.720397746137,38.1898181899219,0 -122.720205464969,38.1898473221555,0 -122.72014052239,38.1898471669659,0 -122.720140518313,38.1898471669561,0 -122.72008698911,38.1898470390134,0 -122.719938623706,38.1898241505755,0 -122.719696779783,38.189796532176,0 -122.719584848552,38.1897647193132,0 -122.719226043324,38.1897142874235,0 -122.718862138438,38.1896908797777,0 -122.718618763668,38.1896902930975,0 -122.71837533672,38.1897032246005,0 -122.718255381383,38.1897164538148,0 -122.718155459924,38.1897573816025,0 -122.718146009778,38.1897612523714,0 -122.718118348727,38.18977321003,0 -122.718042347721,38.1898060646231,0 -122.717930852145,38.1898463515744,0 -122.717576590099,38.1899130886743,0 -122.717454545504,38.1899127931992,0 -122.717360562592,38.1898539840547,0 -122.717387301544,38.1897684296749,0 -122.71743078167,38.1897476032002,0 -122.717461302088,38.1897329842579,0 -122.717490267684,38.1897191100459,0 -122.717580456704,38.1896517343155,0 -122.717729483437,38.1895033879885,0 -122.71790272329,38.1893686188247,0 -122.718057942605,38.1892641701506,0 -122.718169631882,38.1891890129755,0 contacts #khStyle84754 1 -122.949282485342,38.18849288240591,0 -122.949083682831,38.188542360633,0 -122.94896944375,38.1886053966439,0 -122.948620246827,38.1888756116428,0 -122.948587384072,38.1889206592726,0 -122.948525492644,38.1891414367403,0 -122.948522916531,38.1892495837013,0 -122.948577088484,38.1893487461149,0 -122.948677619651,38.1894929900944,0 -122.94875927408,38.1895876576069,0 -122.948859859488,38.1896598033957,0 -122.949060379556,38.1897094640217,0 -122.949365760453,38.1898402819965,0 -122.949832105196,38.1899486385658,0 -122.950037994496,38.1899757675596,0 -122.950237088005,38.1900299307429,0 -122.95044333971,38.1900525560729,0 -122.950773731903,38.1901428218842,0 -122.950895747002,38.1901924429308,0 -122.951049479504,38.190305167352,0 -122.951165367181,38.1904404033061,0 -122.951226283859,38.1906026528936,0 -122.951268566516,38.1908730445671,0 -122.951322746064,38.1909722056667,0 -122.951447558487,38.1911074472751,0 -122.951650514444,38.1912607452601,0 -122.951775747281,38.1913013542386,0 -122.952053010202,38.1913375227385,0 -122.952331012373,38.1913376408393,0 -122.952537624719,38.1913602605199,0 -122.952998979071,38.1914821221309,0 -122.953548511726,38.1915544506203,0 -122.95375727699,38.19155904191511,0 -122.954032090964,38.1915231046219,0 -122.954224839219,38.1914600957354,0 -122.954424005155,38.1914106089561,0 -122.954585733098,38.1913070316282,0 -122.95476600031,38.1912214865746,0 -122.954896696365,38.1910953639805,0 -122.954973162529,38.1909421840571,0 -122.954999284172,38.1908295370689,0 -122.955003985809,38.1907213908918,0 -122.954965549223,38.19055915232931,0 -122.954909583598,38.1904599922075,0 -122.954869641188,38.1904149135846,0 -122.954123806151,38.1898333093689,0 -122.953906562266,38.1896980326978,0 -122.95375996843,38.1895808118477,0 -122.953644384762,38.1895176766065,0 -122.953398933679,38.1894139321961,0 -122.953271262061,38.1892831987444,0 -122.95310931471,38.1891794863084,0 -122.952985159461,38.1891298666572,0 -122.952591615821,38.1890215512065,0 -122.952338666829,38.1889268160113,0 -122.952133492187,38.1888996892424,0 -122.951887683737,38.1887959435887,0 -122.951621511837,38.1887327418499,0 -122.951139794918,38.188673951377,0 -122.950930675696,38.1886783677522,0 -122.950723353164,38.1886602521941,0 -122.95024342459,38.1885969536097,0 -122.949909465739,38.1885156950831,0 -122.94977316039,38.1884931020758,0 -122.949564760433,38.188488503817,0 -122.949282485342,38.18849288240591,0 contacts #khStyle84754 1 -122.708870789648,38.1884496868577,0 -122.708963004555,38.1884342967127,0 -122.708977202285,38.188431927185,0 -122.709097139172,38.1884232136702,0 -122.709341259145,38.1884148093905,0 -122.709461837901,38.1884241221857,0 -122.709698605776,38.1884697741113,0 -122.71005955724,38.1885157341595,0 -122.7101736235,38.1885475613986,0 -122.710284817179,38.1885838876666,0 -122.710403933177,38.1886022084055,0 -122.710478736716,38.1885996323832,0 contacts #khStyle84754 1 -122.718169631882,38.1891890129755,0 -122.718184339454,38.1891821822044,0 -122.718266155955,38.1891441833693,0 -122.718334438128,38.1891165771569,0 -122.718487751864,38.1890545927989,0 -122.718718503742,38.1889965677835,0 -122.719034336409,38.1889313232016,0 -122.719063499597,38.1889252986336,0 -122.719292144199,38.18885825487,0 -122.719402210139,38.1888179631763,0 -122.719687024825,38.1886203718221,0 -122.719757244262,38.1885484401488,0 -122.719846315618,38.1884051488771,0 contacts #khStyle84754 1 -122.888480070507,38.1887066501911,0 -122.888494979089,38.1889905568945,0 -122.888364029593,38.1892112366374,0 -122.888040173114,38.1893325909469,0 -122.887701920696,38.1893007190425,0 -122.887408433113,38.1891652444787,0 -122.887204668172,38.1889352262269,0 -122.88720898389,38.18868288103591,0 -122.887352482676,38.1884261666939,0 -122.887557327478,38.188187535036,0 -122.887848185198,38.1881743006072,0 -122.888153764273,38.1883323161789,0 -122.888480070507,38.1887066501911,0 contacts #khStyle84754 1 -122.891862938146,38.1883133243718,0 -122.892185042477,38.1881649202482,0 -122.892462962866,38.1882102428225,0 -122.892638161871,38.1884627556213,0 -122.892457560966,38.1887239490301,0 -122.892217004638,38.18875076183591,0 -122.891862938146,38.1883133243718,0 contacts #khStyle84754 1 -122.710478736716,38.1885996323832,0 -122.7105259934,38.1885980049719,0 -122.710641719668,38.1885712543511,0 -122.710748239231,38.188526455712,0 -122.710861146228,38.18849068534391,0 -122.710983188397,38.188490987661,0 -122.711347816224,38.1885099152288,0 -122.711591204751,38.1885060107337,0 -122.711711159269,38.1884927883209,0 -122.712051288002,38.1883899838532,0 -122.712259364447,38.188291359133,0 -122.712360748716,38.1882316149398,0 -122.712469204161,38.1881677036057,0 -122.712495434193,38.1881522465686,0 contacts #khStyle84754 1 -122.70567598042,38.1918799569197,0 -122.705687525252,38.1919050794134,0 -122.705739774895,38.1920187786619,0 -122.705765129099,38.1920739512258,0 -122.705848381375,38.1921372488371,0 -122.705958846412,38.1921780836174,0 -122.706080199052,38.1921738830385,0 -122.706201587961,38.19216066989,0 -122.706421011907,38.1920846155246,0 -122.70655698197,38.1919948329963,0 -122.706561305609,38.1919919780433,0 -122.706597774614,38.1919678970905,0 -122.706763921359,38.1918286203729,0 -122.706877838392,38.1916730385149,0 -122.706990040765,38.191519797691,0 -122.707004341286,38.191500266645,0 -122.707146291907,38.1913429035482,0 -122.70730603077,38.1911991036946,0 -122.707486412747,38.1910688741684,0 -122.707567352209,38.1909969767146,0 -122.707690762,38.1908350602115,0 -122.707759603877,38.19075411978141,0 -122.707814189289,38.1906686373477,0 -122.707904839183,38.1904886135065,0 -122.70792244209,38.1904181036266,0 -122.707924621263,38.1904093747611,0 -122.707927325077,38.1903985443999,0 -122.70796551263,38.1903085145801,0 -122.708018670043,38.1902230284701,0 -122.708083942422,38.19014207890871,0 -122.70816132974,38.1900656658757,0 -122.708326755521,38.1899263850825,0 -122.708425463637,38.1898725565053,0 -122.708543939518,38.1898728524521,0 -122.708764152252,38.1899545150704,0 -122.708885429184,38.1899683364724,0 -122.709007563621,38.1899461097294,0 -122.709099152129,38.1898877565622,0 -122.709182229849,38.1898158633045,0 -122.70924395,38.1897303979669,0 -122.709291395848,38.18964489703781,0 -122.709352402022,38.1895594298614,0 -122.709372421974,38.1895199483619,0 -122.709416207402,38.1894335986292,0 -122.709484764597,38.1892983957698,0 -122.709606044142,38.1891319656176,0 -122.709677719202,38.18905553735191,0 -122.709765059704,38.1889881605436,0 -122.709866620321,38.1889343378354,0 -122.709978118873,38.1888940585489,0 -122.710098788003,38.1888808395621,0 -122.710220117109,38.1888811409022,0 -122.710574558251,38.1889496145565,0 -122.710695138045,38.1889589260891,0 -122.710938545931,38.1889505167276,0 -122.711055700008,38.188923769238,0 -122.7111650568,38.1888834835198,0 -122.711266616257,38.1888296595944,0 -122.711358219419,38.1887667984125,0 -122.711586852632,38.1887042759075,0 -122.711943201901,38.1886510808297,0 -122.712056108516,38.1886153093117,0 -122.712156239561,38.1885614810875,0 -122.712330201025,38.1884267219203,0 -122.712399035558,38.1883457787028,0 -122.712495434193,38.1881522465686,0 contacts #khStyle84754 1 -122.722903101025,38.1893396118771,0 -122.723271463914,38.189129125013,0 -122.723279490407,38.1891258699182,0 -122.723392981539,38.1890798441951,0 -122.723607925782,38.1890488097173,0 -122.723728558671,38.1890445891784,0 -122.723847339048,38.1890583892199,0 -122.723847960962,38.1890583675969,0 -122.723853292316,38.1890581822339,0 -122.723968685644,38.1890541701237,0 -122.723984417888,38.1890491839396,0 -122.724081587112,38.189018387022,0 -122.724157805821,38.188958466448,0 -122.724186155802,38.1889361786129,0 -122.724227872423,38.1889033823218,0 -122.724253030007,38.18888360420131,0 -122.724266409569,38.1888709161637,0 -122.724333610949,38.1888071880036,0 -122.724401056379,38.18871271562831,0 -122.724432944066,38.1886603411048,0 -122.724534178005,38.188494066987,0 -122.72454899749,38.1884697262948,0 -122.724563517837,38.1884557743224,0 -122.72462235054,38.1883992444527,0 -122.724623851085,38.1883978026409,0 -122.72469707429,38.1883329934069,0 -122.724791417224,38.1882494910444,0 -122.724880816115,38.1882001329008,0 -122.724972122981,38.1881623543009,0 -122.724989110801,38.188155325507,0 -122.725227637551,38.18811533109561,0 -122.725436888834,38.18809631487821,0 -122.725469307823,38.1880933686897,0 -122.725586455352,38.1880666066692,0 -122.72560845457,38.1880582095176,0 -122.725677075158,38.1880320168445,0 -122.725727256349,38.1880128625042,0 contacts #khStyle84754 1 -122.719846315618,38.1884051488771,0 -122.719863529109,38.1883774570396,0 -122.720040533713,38.1880038612731,0 contacts #khStyle84754 1 -122.706637047289,38.19640216171471,0 -122.706516365235,38.1964153770665,0 -122.706402748346,38.1964466351268,0 -122.706225901969,38.1965813779998,0 -122.706098910378,38.1967432837547,0 -122.706049672551,38.1968819502274,0 -122.706031766657,38.1969323777249,0 -122.706006384542,38.1969862700555,0 -122.705993609574,38.1970133943496,0 -122.705714936701,38.1974407869872,0 -122.705672459943,38.1975308051327,0 -122.705612174819,38.1976117658118,0 -122.705538345819,38.1976881860213,0 -122.705444603413,38.1977465308689,0 -122.705326719499,38.1977732708418,0 -122.705207444339,38.1977909946554,0 -122.705086118828,38.1977861818504,0 -122.704974200101,38.1977498488594,0 -122.704555296638,38.1975505135123,0 -122.704436149429,38.1975366930245,0 -122.704070637151,38.19754928553,0 -122.703950044187,38.1975399671463,0 -122.703833093334,38.1975126328289,0 -122.703720461863,38.1974762968346,0 -122.703543992787,38.1973406607947,0 -122.703461468745,38.1972728571848,0 -122.703312911345,38.1971192666598,0 -122.703152183667,38.1969746575159,0 -122.703053188491,38.1969203305105,0 -122.703004603505,38.1968795240068,0 -122.702932568874,38.1968190220385,0 -122.702805637939,38.1967124122531,0 -122.702626298915,38.1965812737791,0 -122.702553806139,38.1965044825581,0 -122.702527050108,38.1964142890863,0 -122.702526740452,38.1963151504909,0 -122.702531507926,38.19628831226681,0 -122.702543542936,38.1962205617733,0 -122.702591019136,38.1961305574864,0 -122.702667686327,38.196058652608,0 -122.702845947103,38.1959284249591,0 -122.703137165776,38.1957534217721,0 -122.703276068688,38.1956515360733,0 -122.703314711219,38.1956231915818,0 -122.703392804706,38.1955512898468,0 -122.703455945617,38.1954703375365,0 -122.703632574707,38.19521392911061,0 -122.703709239926,38.1951420235315,0 -122.703980541301,38.1949489425898,0 -122.704072872041,38.194886089033,0 -122.704517468395,38.1947294962516,0 -122.704749658178,38.1946760087121,0 -122.704858331406,38.1946312209385,0 -122.704962740187,38.1945819160173,0 -122.705057192684,38.1945235733093,0 -122.705139565831,38.1944516812084,0 -122.705289359229,38.1942988465384,0 -122.705377405528,38.194235981125,0 -122.705424126846,38.1941549862777,0 -122.705497238649,38.19407856427641,0 -122.705607133305,38.1939076034313,0 -122.705681672168,38.1938311849107,0 -122.705766880751,38.1937638057754,0 -122.706039599158,38.1935707235801,0 -122.706137600086,38.1935168951928,0 -122.706246234485,38.1934811185557,0 -122.70665320675,38.1932703477088,0 -122.706760449268,38.1932255545605,0 -122.706849938616,38.1931581853848,0 -122.707051647981,38.1930505414897,0 -122.707270378052,38.1929699775436,0 -122.707483451923,38.1928758802086,0 -122.707677290422,38.1927727217681,0 -122.70776535091,38.1927053483073,0 -122.707798533041,38.1926573658079,0 -122.707812718565,38.1926368530332,0 -122.707821347206,38.1926243757027,0 -122.707820829308,38.1926056598912,0 -122.707816359031,38.19244411251021,0 -122.707795722878,38.19225029132871,0 -122.707798804008,38.1921960535528,0 -122.707801097927,38.1921556731623,0 -122.707857111802,38.1920701943081,0 -122.708016868901,38.1919218872835,0 -122.70813244628,38.191755444478,0 -122.708333940505,38.1915216222886,0 -122.708701821042,38.1912656838395,0 -122.70880124441,38.1912118567474,0 -122.709017148166,38.1911222699158,0 -122.709209606334,38.19100558665141,0 -122.709467353293,38.1908034465164,0 -122.709700904156,38.1905832205402,0 -122.710028914686,38.1903001410664,0 -122.710116970066,38.1902327657896,0 -122.710211412912,38.1901744188469,0 -122.710312261133,38.1901205939981,0 -122.710420924276,38.1900758009942,0 -122.710533833808,38.19004003096211,0 -122.710765308652,38.189982023399,0 -122.710851132569,38.189937173385,0 -122.711210378467,38.1896947243865,0 -122.711399278727,38.1895735224138,0 -122.711722408548,38.1894391329944,0 -122.712066770531,38.1893498577773,0 -122.712522789133,38.1891797437971,0 -122.71263853335,38.1891484849848,0 -122.712749299287,38.1891127075326,0 -122.712857959473,38.189067912252,0 -122.712961641338,38.1890185983538,0 -122.713072424644,38.1889783143669,0 -122.713426650789,38.1889206032986,0 -122.713667221151,38.18890767504,0 -122.713785783913,38.1888854345519,0 -122.714018680006,38.1888274240367,0 -122.714126607652,38.1887871320534,0 -122.714473104812,38.1886978549874,0 -122.714682606312,38.1885992294604,0 -122.714795511535,38.1885634553015,0 -122.7150099729,38.1884738538524,0 -122.715227931878,38.188402285632,0 -122.715470606199,38.1883983713516,0 -122.715831163232,38.1883631998105,0 -122.716196593103,38.1883595829169,0 -122.716317242761,38.1883508637588,0 -122.717024273594,38.1882309112193,0 -122.717140014437,38.1881996479494,0 -122.717239427535,38.1881458136372,0 -122.717355168154,38.1881145501537,0 -122.717474424793,38.1880968138861,0 -122.717710030823,38.1880748527706,0 -122.718076155489,38.1880757379776,0 -122.718195394491,38.188062507207,0 -122.71827471568,38.1880422490194,0 -122.718457580741,38.1879955460594,0 contacts #khStyle84754 1 -122.719612183353,38.1880607662637,0 -122.719772133318,38.1880167357617,0 -122.719890692841,38.1879944890913,0 -122.720040533713,38.1880038612731,0 contacts #khStyle84754 1 -122.718721763671,38.1879290615998,0 -122.718743335724,38.1879241348676,0 -122.718861895402,38.1879018892363,0 -122.718981743534,38.1879156967694,0 -122.71931027003,38.188042663199,0 -122.719422894894,38.1880789842678,0 -122.719544936472,38.1880792776835,0 -122.719612183353,38.1880607662637,0 contacts #khStyle84754 1 -122.668688228026,38.18812211208381,0 -122.668694959955,38.1881256733336,0 -122.668798902114,38.1881806595542,0 -122.66884172368,38.188203312449,0 -122.66903460332,38.1883210221068,0 -122.669115658159,38.1883888457601,0 -122.669170224865,38.188474619388,0 -122.669244815948,38.1885514371715,0 -122.669432680886,38.1886736382351,0 -122.669533781125,38.1887279995384,0 -122.669860063606,38.188859604037,0 -122.669976987904,38.1888869720985,0 -122.670097562168,38.1888963252934,0 -122.670220318237,38.1888966719952,0 -122.670339566815,38.1888834898721,0 -122.670456041859,38.1888522747403,0 -122.670784911329,38.1887270268473,0 -122.670991616041,38.1886284715205,0 -122.671089656049,38.1885701662268,0 -122.67111061091,38.1885489019304,0 -122.671139509436,38.1885195766399,0 -122.671164938806,38.1884937717115,0 -122.671220278545,38.188408308472,0 -122.671220584762,38.1884029645341,0 -122.671225700227,38.188313692154,0 -122.671112706203,38.1880475043092,0 -122.67101311992,38.1878972898994,0 contacts #khStyle84754 1 -122.906432404195,38.1876276308686,0 -122.906354619905,38.1878979417303,0 -122.906171274773,38.1881140910733,0 -122.905887734699,38.188267072362,0 -122.905531805192,38.1883794359589,0 -122.905303542579,38.1882846173498,0 -122.905291795468,38.187987195769,0 -122.905548222277,38.1878296883967,0 -122.905878796358,38.187730821746,0 -122.906432404195,38.1876276308686,0 contacts #khStyle84754 1 -122.797073963964,38.2069250600208,0 -122.796613929638,38.2067014949356,0 -122.796247608551,38.2065545770836,0 -122.796128673933,38.2065068764282,0 -122.795619022354,38.2063572755479,0 -122.7954261874,38.2063217192263,0 -122.794558028048,38.2061616372827,0 -122.794096862329,38.2060987786907,0 -122.794022108827,38.206088589331,0 -122.793480223975,38.2061056533907,0 -122.79239627362,38.2062028612287,0 -122.792262139915,38.2061981591381,0 -122.791854490655,38.2061838679468,0 -122.791322921897,38.2060882841838,0 -122.790812939207,38.205934155534,0 -122.789932017978,38.2054368800655,0 -122.789376646849,38.2053051944261,0 -122.789093361921,38.205016280866,0 -122.789018493117,38.2041239066122,0 -122.788834013881,38.2037360338907,0 -122.788447294062,38.2034243995643,0 -122.788104201031,38.2030858058756,0 -122.787878339386,38.20269334990751,0 -122.787871764841,38.20264165548,0 -122.787822161876,38.202251634276,0 -122.787943650882,38.2021267677258,0 -122.788132899738,38.2019322564106,0 -122.788641701463,38.2017439192473,0 -122.789185483046,38.2016773122338,0 -122.790260297958,38.2017558617492,0 -122.790786744614,38.2016351409815,0 -122.791357343905,38.2015505471291,0 -122.791764452297,38.2013484952119,0 -122.791766850543,38.2008843550326,0 -122.790785225404,38.200549130246,0 -122.790349831495,38.2002869832496,0 -122.789963811215,38.1999843674656,0 -122.789660026118,38.1996323302931,0 -122.789118552136,38.1984146597675,0 -122.788997719266,38.197990852176,0 -122.789002885626,38.1975627668236,0 -122.789132939164,38.1971439204671,0 -122.789341494684,38.1967297224275,0 -122.789723398452,38.1964735567085,0 -122.790828341874,38.1963493741174,0 -122.791367248021,38.1963503422408,0 -122.791895482387,38.1964639453086,0 -122.792397880819,38.1966270687317,0 -122.794266243424,38.1975046039496,0 -122.79475284923,38.1977037393469,0 -122.795276026127,38.1978443557471,0 -122.795813746406,38.1978903639178,0 -122.796233527866,38.1976117123615,0 -122.7961993932,38.1971835579378,0 -122.795910566453,38.19683606931741,0 -122.792875836474,38.1958483380124,0 -122.792354768484,38.1957257396074,0 -122.791281609678,38.1955976429509,0 -122.791041517263,38.19519164820781,0 -122.791384584045,38.1949083697025,0 -122.791832571783,38.1946252780773,0 -122.792174359623,38.1942879198225,0 -122.792411706975,38.1939053115194,0 -122.792558851625,38.1934909979796,0 -122.792839429001,38.1922117194943,0 -122.793331938138,38.1920774081274,0 -122.79388457773,38.192132464393,0 -122.794383305811,38.192322610612,0 -122.794956889348,38.1924182552272,0 -122.795341046324,38.1922341753917,0 -122.795503592246,38.1917928476524,0 -122.796156411519,38.1906088469114,0 -122.796133919635,38.18984724877281,0 -122.794358547193,38.1908535248145,0 -122.793883751184,38.1910374407921,0 -122.793325562306,38.1910544748474,0 -122.792837487509,38.1908868743582,0 -122.792426857176,38.1905932347048,0 -122.792119543304,38.1902366906559,0 -122.791603176574,38.1894832198258,0 -122.791255125213,38.1891491317151,0 -122.79099675099,38.1887791536553,0 -122.790830933616,38.1883642788822,0 -122.790300663307,38.187615283232,0 -122.79029426499,38.1875971262421,0 contacts #khStyle84754 1 -122.908473085586,38.1877464388285,0 -122.908427719119,38.1877824528235,0 -122.908061861275,38.1878497534292,0 -122.907880799187,38.1876783699416,0 -122.907889717081,38.1873989903057,0 -122.908202200847,38.1872099792609,0 -122.908378346294,38.1873182705304,0 -122.908473085586,38.1877464388285,0 contacts #khStyle84754 1 -122.67391994319,38.1878300633015,0 -122.673959887574,38.1878346808665,0 -122.674081948337,38.1878305153193,0 -122.674095439298,38.1878242350502,0 -122.674157794705,38.1877952075258,0 -122.674187795223,38.1877812417436,0 -122.674191018193,38.1877670015896,0 -122.674199642208,38.1877288977893,0 -122.674208180369,38.1876911732819,0 -122.674199344537,38.1875920107626,0 -122.674193688597,38.1875673325344,0 -122.674184482455,38.18752716388801,0 -122.674177642305,38.1874973186108,0 -122.674151490182,38.1874342643787,0 -122.674140218984,38.1874070888539,0 -122.674135941413,38.1873951130839,0 -122.674106384269,38.1873123628315,0 -122.674088964329,38.18721768260951,0 -122.674086505627,38.1872112655174,0 -122.674066081542,38.1871579595987,0 -122.674054395981,38.1871274607891,0 -122.674052965779,38.1871259593708,0 -122.673989162866,38.187058979325,0 -122.673981228653,38.1870506500084,0 -122.67389519513,38.1869783095213,0 -122.673805553142,38.1869149714261,0 -122.67380216859,38.1869149619724,0 -122.673686368725,38.1869146384601,0 -122.673590223564,38.1869462736486,0 -122.673577728436,38.1869503849837,0 -122.673550741853,38.1869743405458,0 -122.673502519335,38.1870171468565,0 -122.673496760453,38.1870222589138,0 -122.673492353475,38.18703700569411,0 -122.673468503998,38.1871168115194,0 -122.673477911503,38.1872475195666,0 -122.673486766465,38.1873421759303,0 -122.673514890922,38.1874368861649,0 -122.673540180845,38.1875270822008,0 -122.673588322221,38.1876111444894,0 -122.673591877209,38.1876173520401,0 -122.673602825512,38.187629948691,0 -122.673640911156,38.1876737683723,0 -122.673658621507,38.1876941451075,0 -122.67367309776,38.1877065219585,0 -122.673676674273,38.1877095797907,0 -122.673743228253,38.1877664817743,0 -122.673767559407,38.1877801390017,0 -122.673840048332,38.1878208274251,0 -122.67391994319,38.1878300633015,0 contacts #khStyle84754 1 -122.943944810653,38.1868951560778,0 -122.943826640129,38.1869581830664,0 -122.943727738163,38.1870302341418,0 -122.943660217231,38.1871293383345,0 -122.943646256752,38.187183406538,0 -122.943658261633,38.1873501431835,0 -122.943744728098,38.1876701276762,0 -122.943815974672,38.1878278811926,0 -122.943917209537,38.1879721296879,0 -122.944511015339,38.1884365642244,0 -122.944631592894,38.1884861932208,0 -122.945093983915,38.1886125918144,0 -122.945229929843,38.1886306827739,0 -122.945369819845,38.1886262452246,0 -122.945780964837,38.1885678606821,0 -122.946110407055,38.1884778950965,0 -122.946291394385,38.1883968685523,0 -122.946387802422,38.1883203089428,0 -122.94648283042,38.1881716484224,0 -122.946527874623,38.1880680246921,0 -122.946542232619,38.1879553781024,0 -122.946522010153,38.1877931431229,0 -122.946467888742,38.1876308941769,0 -122.946411936912,38.1875317298976,0 -122.946317074508,38.1874505742547,0 -122.946156928476,38.1873423477762,0 -122.945974992358,38.1872656555441,0 -122.945635316515,38.1872069102235,0 -122.945175076393,38.1870805147369,0 -122.944926071477,38.1869812559693,0 -122.944860784269,38.1869631991079,0 -122.944446517929,38.1869179337832,0 -122.944237760425,38.1869178310851,0 -122.943944810653,38.1868951560778,0 contacts #khStyle84754 1 -122.708555155908,38.1884939617553,0 -122.708519409118,38.1885005059328,0 -122.708501574361,38.1885037709435,0 -122.708433737444,38.188516189827,0 -122.708190348759,38.1885200877765,0 -122.708070519762,38.1885017630098,0 -122.707841693667,38.1884335963314,0 -122.7077218649,38.1884152712097,0 -122.707599840945,38.1884104592781,0 -122.707479885851,38.1884236774883,0 -122.70736840473,38.1884594481775,0 -122.707249145137,38.1884771741662,0 -122.707127084949,38.1884813741937,0 -122.707007969983,38.1884630501351,0 -122.706787763662,38.1883813842322,0 -122.706683763314,38.1883315539224,0 -122.706642377093,38.188303012072,0 -122.70659195026,38.188268235348,0 -122.70650871981,38.1882004320139,0 -122.706433376387,38.1881236359177,0 -122.706378052761,38.1880378775991,0 -122.706216625039,38.1878932706925,0 -122.706112607622,38.187847946103,0 -122.705776913582,38.1877344435393,0 -122.705670773767,38.1876846069368,0 -122.705578248702,38.1876212857707,0 -122.705492878854,38.1875534763157,0 -122.70533359499,38.1874088735989,0 -122.70523224759,38.1872328731014,0 -122.705122023288,38.1869577121114,0 -122.705075248022,38.1868764810356,0 -122.705026887823,38.1867320066567,0 contacts #khStyle84754 1 -122.705213630918,38.1902520271094,0 -122.705237502516,38.1901544711021,0 -122.705243384543,38.1901304329931,0 -122.705233061043,38.1900357752677,0 -122.705229320182,38.1900224969959,0 -122.70518732507,38.1898734340531,0 -122.705145580275,38.1897832032102,0 -122.70511104549,38.1896749654911,0 -122.705068274085,38.189485594094,0 -122.705050391497,38.1893188169255,0 -122.705047988421,38.1890304095832,0 -122.705066282625,38.188742054531,0 -122.705063114724,38.1886429085809,0 -122.705048509469,38.1885482399959,0 -122.705020344024,38.1884535371361,0 -122.704977154622,38.1883678088328,0 -122.704850791052,38.1882007573374,0 -122.704722432811,38.18799765049051,0 -122.704663798079,38.1878487951989,0 -122.704616710251,38.187668425202,0 -122.70461397814,38.1872853852446,0 -122.70463260433,38.1870916627163,0 -122.704665798387,38.1870016212863,0 -122.704757878747,38.1868216033874,0 -122.704784541781,38.1867879436425,0 -122.704849596353,38.1867058177896,0 -122.704888879631,38.1866562258917,0 contacts #khStyle84754 1 -122.704888879631,38.1866562258917,0 -122.704968061677,38.1865562648448,0 contacts #khStyle84754 1 -122.705026887823,38.1867320066567,0 -122.704972315646,38.1865689735144,0 -122.704968061677,38.1865562648448,0 contacts #khStyle84754 1 -122.872933742664,38.1865951739813,0 -122.873171073946,38.1863746280278,0 -122.873455629879,38.1864921013876,0 -122.873514453218,38.1867309998333,0 -122.873245751102,38.186933484819,0 -122.872933742664,38.1865951739813,0 contacts #khStyle84754 1 -122.595307806769,38.1873003498267,0 -122.595333308705,38.1872058067549,0 -122.595380195906,38.1871158439491,0 -122.595455555223,38.18703949841731,0 -122.595538026213,38.18696768369541,0 -122.595633982131,38.1869094343236,0 -122.595745539123,38.1868692638418,0 -122.59586413318,38.1868471426011,0 -122.5959847438,38.1868475594854,0 -122.596083795029,38.186874939289,0 -122.596202903762,38.1868888695256,0 -122.59646132784,38.1868762430923,0 -122.596773252446,38.1868683068924,0 -122.597030987505,38.1868511705729,0 -122.597251537093,38.18684742435,0 -122.597432884256,38.18683453021101,0 -122.597790067151,38.1867726720859,0 -122.598012464615,38.1866923244455,0 -122.598114816522,38.1866386012863,0 -122.598200114424,38.1865713006554,0 -122.59826050796,38.1864903956117,0 -122.598299565519,38.1863958984549,0 -122.598320781296,38.18630133998,0 -122.598327010025,38.1862067300055,0 -122.598325889658,38.1861830408378,0 contacts #khStyle84754 1 -122.667198378688,38.1860987212079,0 -122.667198463217,38.1861537129215,0 -122.667198558783,38.1862158846607,0 -122.66716391257,38.1863014050028,0 -122.667152755927,38.1864005110773,0 -122.667185888129,38.1864907308276,0 -122.667241878544,38.1865765094279,0 -122.667315752026,38.18665332640801,0 -122.667405367574,38.1867211756377,0 -122.667639162962,38.186942648239,0 -122.667700170497,38.1870239346271,0 -122.667748311427,38.1871096906468,0 -122.667796694963,38.1872990914574,0 -122.667841960966,38.187389345524,0 -122.66796038845,38.1875564141138,0 -122.668032122602,38.1876332245522,0 -122.668293124719,38.187836748094,0 -122.668541975113,38.188044742831,0 -122.668688228026,38.18812211208381,0 contacts #khStyle84754 1 -122.705472906901,38.1860833234181,0 -122.705472399994,38.1860843800586,0 -122.705405719217,38.1861608183993,0 -122.70531552342,38.1862281847875,0 -122.705216104272,38.186282008994,0 -122.705111030188,38.1863223000118,0 -122.705030807181,38.186394197647,0 -122.704995281508,38.1864859580396,0 -122.704968061677,38.1865562648448,0 contacts #khStyle84754 1 -122.712495434193,38.1881522465686,0 -122.712502060117,38.1881333528286,0 -122.712520697513,38.1880802084621,0 -122.712542175658,38.1878819854153,0 -122.712537279044,38.1874944339637,0 -122.712570536185,38.1873891046234,0 -122.712582166113,38.1873522711777,0 -122.712624004013,38.1872197649606,0 -122.712624713833,38.187039515812,0 -122.712609367735,38.1869493525691,0 -122.712577908725,38.1867825430028,0 -122.71251592143,38.1865751017649,0 -122.712454882439,38.1864893321937,0 -122.712316337042,38.1863312711775,0 -122.71224961927,38.1862211796637,0 -122.712235956705,38.1861986349147,0 -122.71222061271,38.1861733156006,0 -122.712198077231,38.1860966533821,0 -122.712194304876,38.1860586312582,0 -122.71219138809,38.1860292325173,0 contacts #khStyle84754 1 -122.704469209433,38.190254650745,0 -122.704467530901,38.1902202115697,0 -122.704457347918,38.1900112821826,0 -122.704374736144,38.1896145212659,0 -122.704341556968,38.1895243118316,0 -122.704268300127,38.1893762691033,0 -122.704262270942,38.1893640848601,0 -122.704254483163,38.1893483467104,0 -122.704192719572,38.1892670773345,0 -122.704022892435,38.1889061452063,0 -122.70398080141,38.1887257876605,0 -122.703955875869,38.1885364610953,0 -122.703913419636,38.188446227994,0 -122.703729596617,38.1881934103828,0 -122.703596062665,38.1880353518785,0 -122.703422471074,38.18789972279251,0 -122.703142028301,38.1877142527552,0 -122.70305594691,38.1876464397244,0 -122.702977020889,38.1875741385684,0 -122.702908104978,38.1874973565679,0 -122.702781747592,38.1873303028501,0 -122.702612459621,38.1871901772449,0 -122.702424524705,38.1870725352108,0 -122.702217265845,38.1869683623899,0 -122.702105346555,38.1869365329054,0 -122.702000637751,38.1868866966386,0 -122.701903102694,38.1868278660573,0 -122.701727357617,38.1866967352217,0 -122.701571669823,38.1865476303186,0 -122.701472436772,38.186380644521,0 -122.701469273787,38.186281498457,0 -122.701484541537,38.1862361887054,0 -122.701499383053,38.1861921438227,0 -122.701499616635,38.1861914506249,0 -122.701503789265,38.18618567351,0 -122.701561342605,38.18610598929971,0 -122.701562645088,38.1861008436667,0 -122.701585280636,38.1860114187945,0 -122.701590663148,38.1859168008462,0 -122.701586767929,38.1858221591772,0 -122.701539871375,38.1855705211863,0 contacts #khStyle84754 1 -122.701539871375,38.1855705211863,0 -122.70153581879,38.1855487757049,0 contacts #khStyle84754 1 -122.667198378688,38.1860987212079,0 -122.66723619338,38.1860673170741,0 -122.667533647713,38.1858202874972,0 -122.667566663481,38.1857836518661,0 -122.667602508303,38.1857438769505,0 -122.667731545986,38.185563888354,0 -122.667747591082,38.1855415077321,0 contacts #khStyle84754 1 -122.713951557544,38.185266851625,0 -122.714033157984,38.1854973240859,0 -122.714039507402,38.1858803729115,0 -122.714057692071,38.1859750492165,0 -122.714110882102,38.1860607987361,0 -122.714183359114,38.1861420891987,0 -122.71435052577,38.186282192997,0 -122.714440915712,38.1863455020531,0 -122.714767999969,38.1864724776648,0 -122.71486340386,38.1865312923774,0 -122.714951635911,38.1865991020395,0 -122.715029859013,38.1866713934653,0 -122.715078768593,38.1867571320862,0 -122.715133309779,38.1870456667139,0 -122.715177223937,38.1871313930939,0 -122.715258302561,38.1872036913325,0 -122.715347249464,38.1872715024363,0 -122.715454126543,38.1873168258337,0 -122.715568193314,38.1873486478413,0 -122.715685863733,38.1873714659734,0 -122.715806424075,38.187385278481,0 -122.715924077084,38.1874126026048,0 -122.716043192628,38.1874309176247,0 -122.716285044899,38.1874540372889,0 -122.716406354208,38.1874588384566,0 -122.716645299439,38.1874954691318,0 -122.716761508072,38.18752729518221,0 -122.716980295639,38.18760893897,0 -122.71708717422,38.1876542608852,0 -122.717178281892,38.1877175695679,0 -122.71728155738,38.1877718951175,0 -122.717391326056,38.1878082112131,0 -122.717508997784,38.1878310275224,0 -122.717631038931,38.1878313229253,0 -122.717748902531,38.1878045704607,0 -122.717867375184,38.1878048569858,0 -122.717985760748,38.1878276745436,0 -122.718203105787,38.1879138188395,0 -122.71831058471,38.1879483368781,0 contacts #khStyle84754 1 -122.908693398082,38.18565121279,0 -122.908766889376,38.1850970037735,0 contacts #khStyle84754 1 -122.656835390192,38.1858704595507,0 -122.656764137953,38.1858438587005,0 -122.656699567877,38.1858197524723,0 -122.65667723109,38.1858114133699,0 -122.656568230552,38.185770536573,0 -122.656460678648,38.1857251576696,0 -122.656354554208,38.1856797828668,0 -122.656249878422,38.1856299059653,0 -122.656146630108,38.1855800331723,0 -122.656056312705,38.1855121732986,0 -122.65597027745,38.1854443259663,0 -122.655882793815,38.1853809805697,0 -122.655793904223,38.1853131246991,0 -122.655706442119,38.185245272968,0 -122.655626851676,38.185172938111,0 -122.655544385514,38.185105100986,0 -122.655457637546,38.1850372511741,0 -122.655316107979,38.1849331895436,0 contacts #khStyle84754 1 -122.70153581879,38.1855487757049,0 -122.701535740694,38.1855483566542,0 -122.701532994358,38.1855336202757,0 -122.701514314889,38.1853893717985,0 -122.701520323829,38.1851415421826,0 -122.701537714463,38.1849027542042,0 -122.701566795107,38.1847721466495,0 -122.70161056781,38.1847136770092,0 -122.701709200142,38.1846778789228,0 -122.701816778664,38.1847232165192,0 -122.701991805558,38.1848543454219,0 -122.702141049303,38.1850079396342,0 -122.702260978308,38.1851749776989,0 -122.702331318717,38.1852517637366,0 -122.702506329418,38.1853873980963,0 -122.7026131958,38.1854327331458,0 -122.702730145402,38.18545556241671,0 -122.703327887037,38.18553368987271,0 -122.7036772733,38.1856111840337,0 -122.703787013694,38.1856520190395,0 -122.703980674826,38.1857651671692,0 -122.704097607121,38.1857925013073,0 -122.7045820434,38.1858297786267,0 -122.704946729149,38.1858307011051,0 -122.705063843981,38.1858129720189,0 -122.70530865119,38.1858090841106,0 -122.705421320216,38.1858318998948,0 -122.705505956163,38.1859042138381,0 -122.705513424781,38.185998864403,0 -122.705509107204,38.18600786434821,0 -122.705497590042,38.1860318717437,0 -122.705481468544,38.1860654767987,0 -122.705472906901,38.1860833234181,0 contacts #khStyle84754 1 -122.964975023276,38.1846807768494,0 -122.964988031788,38.1846649375123,0 -122.964996869109,38.1846541770671,0 -122.96511451525,38.18451092912571,0 -122.965259728909,38.1844541986636,0 -122.965308168937,38.1844352745912,0 contacts #khStyle84754 1 -122.598325889658,38.1861830408378,0 -122.598322533756,38.1861120832473,0 -122.59828650785,38.1860443656148,0 -122.598203677062,38.1859224120365,0 -122.598094342052,38.1858183923067,0 -122.598113293207,38.1857463573564,0 -122.598239710305,38.1857287668551,0 -122.598407445529,38.1857248369325,0 -122.598582440938,38.1856984004179,0 -122.598684027966,38.1856536866351,0 -122.598885601445,38.1855957971083,0 -122.599408027241,38.1854624007818,0 -122.599519580011,38.1854222266783,0 -122.599621904406,38.1853730083485,0 -122.599992958736,38.1851219281917,0 -122.600149200489,38.18500079376,0 -122.600260678457,38.1848434559984,0 -122.600325547098,38.1847265151005,0 -122.600456637037,38.1843754751092,0 contacts #khStyle84754 1 -122.964975023276,38.1846807768494,0 -122.964345624881,38.1843259285098,0 contacts #khStyle84754 1 -122.721783719151,38.1842336994485,0 -122.721519437439,38.1844204062458,0 -122.721416274923,38.1845238043122,0 -122.721326551176,38.1846587783123,0 -122.72129193398,38.1847533274098,0 -122.721199913758,38.18492885229831,0 -122.721120008171,38.1851089123407,0 -122.721101091141,38.1852034988993,0 -122.72109678208,38.1853972584209,0 -122.721105319043,38.185591048643,0 -122.721162058468,38.1858705732817,0 -122.721183106982,38.18596525534681,0 -122.72126736264,38.1861412013623,0 -122.721362641674,38.1864208179443,0 -122.721385831634,38.1865155050791,0 -122.721381875498,38.186803897162,0 -122.721347944595,38.1870922176448,0 -122.721352217484,38.1872814913366,0 -122.721370746935,38.187475305343,0 -122.721365389683,38.187569924287,0 -122.721287940385,38.1878536345019,0 -122.721275446074,38.1879482363857,0 -122.721277225595,38.188042872367,0 -122.72129827486,38.1881375543794,0 -122.721337183768,38.1882277727721,0 -122.721384657121,38.1883180116033,0 -122.721460016381,38.1883947981748,0 -122.721632215098,38.1885303973332,0 -122.721728340854,38.1885892081868,0 -122.72182660786,38.1886480240668,0 -122.721938521203,38.188684341027,0 -122.72205985011,38.1886846301323,0 -122.722181196182,38.1886804128808,0 -122.72241902957,38.1886359162614,0 -122.722444429193,38.18862896776481,0 -122.722533341396,38.188604644274,0 -122.722676940878,38.1885560617115,0 -122.723298693227,38.18834570774041,0 -122.723313708903,38.1883406275154,0 -122.723626871273,38.1881926627924,0 -122.723716322073,38.1881297868401,0 -122.723798669912,38.1880578814565,0 -122.723956228185,38.1879140536245,0 -122.724028261119,38.1878331111226,0 -122.724116994291,38.187767135431,0 -122.724130965547,38.1877567473797,0 -122.72416748915,38.1877343029841,0 -122.724249240254,38.1876840654049,0 -122.724320893202,38.1876400332269,0 -122.724530378615,38.1875413900398,0 -122.724716753654,38.18742016057761,0 -122.724886781281,38.187280867171,0 -122.724908074061,38.1872531582898,0 -122.724937848592,38.1872144118302,0 -122.725011217385,38.1871189346873,0 -122.725027982479,38.1870898862595,0 -122.725073384688,38.187011218946,0 -122.725186176595,38.1868157863147,0 -122.725213800514,38.1867679226415,0 -122.72525590729,38.1866733900507,0 -122.725282618495,38.1864977082494,0 -122.72528870128,38.1863985845324,0 -122.725310365571,38.186310245151,0 -122.725330829128,38.1862268017387,0 -122.725335089292,38.1862094302185,0 -122.725352511944,38.1861751693842,0 -122.725366692799,38.18614728336571,0 -122.725472418911,38.1859393769667,0 -122.72553338555,38.1857637756882,0 -122.72555516868,38.1856646888804,0 -122.725552686191,38.1854709132031,0 -122.725475590924,38.1851913427348,0 -122.725468677516,38.1851567347162,0 contacts #khStyle84754 1 -122.965308168937,38.1844352745912,0 -122.964624799352,38.184060151874,0 contacts #khStyle84754 1 -122.600456637037,38.1843754751092,0 -122.600465224832,38.1840489364719,0 contacts #khStyle84754 1 -122.725471673226,38.18468537105011,0 -122.725506567359,38.1845938812364,0 -122.725598743,38.1843522024225,0 -122.725634321628,38.1842589170185,0 -122.725650665179,38.1842239579323,0 -122.725676409466,38.18416889046381,0 -122.725690778955,38.1841445579014,0 -122.725729558855,38.1840788898977,0 -122.725769101877,38.1840257488522,0 contacts #khStyle84754 1 -122.693406400175,38.1906271746131,0 -122.693499504905,38.190550812563,0 -122.693562652327,38.19046986553471,0 -122.693645485869,38.1902898322532,0 -122.693664439456,38.1901952503754,0 -122.693631254246,38.19010954420381,0 -122.693625346221,38.1898166212989,0 -122.693600744627,38.1897264313731,0 -122.693547538078,38.1896496851556,0 -122.693445502144,38.1894736728005,0 -122.693310560618,38.1893155989815,0 -122.693249541796,38.1892298195642,0 -122.693151789357,38.1890538181996,0 -122.693091901336,38.1888689037645,0 -122.69307517033,38.1887742281389,0 -122.693076995504,38.1886796012977,0 -122.693055685426,38.1884857757157,0 -122.693056083225,38.1883911451171,0 -122.69310112778,38.1882020002503,0 -122.693097243364,38.1881073583892,0 -122.693109773854,38.18801275967961,0 -122.693144409769,38.1879227253432,0 -122.693263601679,38.18775180035,0 -122.693347879148,38.1875672647134,0 -122.693408864178,38.1874908183103,0 -122.69348337127,38.1874234199183,0 -122.693682248417,38.18731128518571,0 -122.693753224458,38.1872348648145,0 -122.694006023438,38.1870282393006,0 -122.694109020124,38.1869744339867,0 -122.694545776778,38.1868088456072,0 -122.694812094283,38.1866112662467,0 -122.694997463836,38.1864855751362,0 -122.695145834528,38.1863327494902,0 -122.695233166191,38.186269889729,0 -122.695331897684,38.1862115659251,0 -122.695441972611,38.1861712967154,0 -122.695557875354,38.1861715990387,0 -122.695564010769,38.1861716150393,0 -122.695598520319,38.1861826830879,0 -122.695662225215,38.1862031147557,0 -122.695663169066,38.1862034174708,0 -122.6956773346,38.1862079606863,0 -122.695798640374,38.1862127831281,0 -122.695913654466,38.1861860451592,0 -122.696001717737,38.1861186804578,0 -122.695999257032,38.1860240423582,0 -122.695946088153,38.1859382847349,0 -122.695882928013,38.1858525010582,0 -122.695834755079,38.1857667563976,0 -122.695819861544,38.1855729479243,0 -122.695847356319,38.1854828941351,0 -122.695898402002,38.1853929016906,0 -122.695970801224,38.1853164836519,0 -122.696032532846,38.1852310252474,0 -122.696084273035,38.1851455407975,0 -122.696136819444,38.1848662887299,0 -122.696143654927,38.1847671685378,0 -122.696176858271,38.1846771295161,0 -122.696235020824,38.1845916617051,0 -122.696303155702,38.1845107260797,0 -122.696387648324,38.184443351775,0 -122.696457154013,38.1843759384399,0 -122.696635397303,38.1842457198741,0 -122.696675773786,38.1841466867968,0 -122.696666175734,38.1840520301318,0 -122.696588668415,38.1839842346185,0 -122.696555672771,38.1839775080489,0 -122.696476718653,38.1839614122346,0 -122.69615223309,38.1840777311998,0 -122.695942719908,38.1841763236865,0 -122.695845418942,38.1842346517587,0 -122.69577944356,38.184311086477,0 -122.695692828348,38.1843739485395,0 -122.695597667893,38.1844322819831,0 -122.695481229116,38.1844590159401,0 -122.695359212594,38.1844541913207,0 -122.695351985471,38.1844496664624,0 -122.695265254362,38.1843953645539,0 -122.695181343889,38.18432304513081,0 -122.695148464686,38.184320152724,0 -122.695075760506,38.1843137568521,0 -122.694981407412,38.1843495605437,0 -122.694934662109,38.1844350575705,0 -122.694930717316,38.1845251727043,0 -122.694900628953,38.18472337004081,0 -122.69486601554,38.1848088987399,0 -122.69484920591,38.18490348651,0 -122.694792054475,38.185088094246,0 -122.694770962701,38.1851826708046,0 -122.694751597452,38.1853763898438,0 -122.694725509875,38.1854709533263,0 -122.694651248483,38.185651009959,0 -122.694599487431,38.1857409999822,0 -122.694535631562,38.1858219457918,0 -122.694446872499,38.1858848013029,0 -122.694371616456,38.1859612109106,0 -122.694309187489,38.1860421603287,0 -122.694264562472,38.1861321688825,0 -122.694209251109,38.1862176431555,0 -122.694079396517,38.1863795286817,0 -122.693987781689,38.1864423763538,0 -122.693874888648,38.18647362426511,0 -122.693633590452,38.1864910163495,0 -122.693520678275,38.1865267701397,0 -122.693427654354,38.1865851074021,0 -122.693316334123,38.1867515470105,0 -122.693089845669,38.1869807715694,0 -122.692989008227,38.1870300753962,0 -122.692879625418,38.1870748503853,0 -122.692765341499,38.1870970810246,0 -122.692661648951,38.1871463770544,0 -122.692575703488,38.1872182510762,0 -122.692517553586,38.1872992107856,0 -122.692438744652,38.1873711035009,0 -122.692349268252,38.1874339555116,0 -122.692235640327,38.1874697061695,0 -122.692132660589,38.1875190036062,0 -122.692063804656,38.1875999348514,0 -122.69202488545,38.1876899575719,0 -122.692013800011,38.1877800537111,0 -122.692012706198,38.18787017620781,0 -122.692025810172,38.1879783612347,0 -122.692059687257,38.1880685759791,0 -122.692117135276,38.1881543466095,0 -122.692271398831,38.1882989539489,0 -122.692367007088,38.188474950412,0 -122.692431611724,38.1885562334741,0 -122.692597850627,38.1889081602762,0 -122.692621718055,38.18900285475671,0 -122.692762625778,38.1892690955089,0 -122.69279154634,38.18935028444461,0 -122.692808239189,38.1894539725362,0 -122.692843583225,38.1895351783596,0 -122.692861537237,38.1896121610618,0 -122.692862512085,38.1896163409844,0 -122.692909114534,38.1897359862496,0 -122.692938063807,38.1898103092502,0 -122.692942414601,38.1898683427057,0 -122.692944821881,38.1899004523796,0 -122.692948186366,38.1899126266279,0 -122.69297223967,38.1899996623805,0 -122.692972650197,38.1900717637408,0 -122.6929147194,38.1902698871316,0 -122.692826888096,38.1904499067437,0 -122.692768022179,38.19053086464301,0 -122.692535115847,38.1907555647952,0 -122.692329291467,38.19098934838641,0 -122.692266123254,38.1910748009519,0 -122.692213660716,38.1911602817085,0 -122.692173312337,38.1912503006511,0 -122.692168926768,38.1914440585423,0 -122.692188113134,38.1916333723172,0 -122.69222841561,38.1917236039026,0 -122.692243718714,38.1918182758354,0 -122.692285467809,38.1919040049465,0 -122.692290778807,38.1919986505311,0 -122.692241170555,38.1920841388086,0 -122.692039585887,38.1923269455367,0 -122.691950816835,38.192389799042,0 -122.691753350784,38.19250193443341,0 -122.691660298867,38.192564776407,0 -122.691490553368,38.1927040221582,0 -122.691408187981,38.1927713984355,0 -122.691297567498,38.1929378377713,0 -122.691228705547,38.1930187684219,0 -122.691146320505,38.1930906507235,0 -122.691046187126,38.193139954671,0 -122.690935366573,38.1931847239737,0 -122.690833187111,38.1932114909973,0 -122.690666885388,38.1932110504499,0 -122.690544217385,38.1931881940173,0 -122.690433759479,38.1931473447767,0 -122.690356210192,38.1930885576655,0 -122.690337292168,38.1930708732333,0 -122.690304260089,38.1930399950547,0 -122.690283695436,38.19302077133,0 -122.690222619752,38.1929485090393,0 -122.69018913752,38.1928914415737,0 -122.690172307625,38.1928627564883,0 -122.690162371948,38.1928493703145,0 -122.69011198417,38.192781483605,0 -122.690035225783,38.1927046733188,0 -122.689946276642,38.1926413494001,0 -122.689851617774,38.19257801024471,0 -122.689737554198,38.1925461632987,0 -122.68962544037,38.192559384077,0 -122.68952173803,38.1926086772397,0 -122.689402467546,38.1926263850362,0 -122.689281113328,38.1926305683703,0 -122.689159816649,38.1926212329371,0 -122.688673743591,38.1926244439729,0 -122.688552427783,38.1926196141264,0 -122.688317106688,38.192569417191,0 -122.688200169617,38.1925420673463,0 -122.688093301912,38.1924967192281,0 -122.688012958011,38.1924244043071,0 -122.688001106293,38.1923983277226,0 -122.687973871441,38.1923384045254,0 -122.687971946596,38.1923341694016,0 -122.687971598221,38.1923304534857,0 -122.687963072467,38.1922395141161,0 -122.68797346909,38.192144910335,0 -122.688067004857,38.1919694159443,0 -122.688103076273,38.1918793870099,0 -122.688112064455,38.1917802731818,0 -122.688101230608,38.1917455758914,0 -122.688083900347,38.1916900726269,0 -122.688005004035,38.1916132552944,0 -122.687890884977,38.191594925203,0 -122.687767371938,38.1916036074712,0 -122.687191587989,38.1917237353289,0 -122.687070987497,38.1917189058711,0 -122.686955499016,38.1916870524043,0 -122.686845045367,38.1916461997981,0 -122.686748229948,38.1915873586198,0 -122.686572500701,38.1914562052867,0 -122.686492159427,38.1913838893251,0 -122.686428291981,38.1912980987582,0 -122.686383695167,38.1912123599222,0 -122.686383423907,38.191206136058,0 -122.686375248972,38.1910185678048,0 -122.68637031443,38.1910120721984,0 -122.686313503776,38.1909372891379,0 -122.686232449601,38.1908649710786,0 -122.686132780826,38.1908061217201,0 -122.686023042672,38.1907652702619,0 -122.685903832504,38.1907694558793,0 -122.6857831755,38.1907781437477,0 -122.685668825549,38.1908138860682,0 -122.685293788833,38.1910562141151,0 -122.685184434258,38.1910919694255,0 -122.685063737779,38.1911096689775,0 -122.684947998407,38.191136394313,0 -122.684721437645,38.1912078829832,0 -122.684413142128,38.1913647693559,0 -122.684322940329,38.19142761322,0 -122.684213565251,38.1914678738314,0 -122.684096397565,38.1914945944607,0 -122.683996242188,38.1915483986094,0 -122.683877685858,38.1915661027309,0 -122.683755619388,38.1915702784298,0 -122.683634286151,38.1915699497236,0 -122.683518799413,38.1915380928844,0 -122.683313696165,38.1914338926517,0 -122.683137973431,38.1913027342074,0 -122.683061223874,38.1912259193866,0 -122.683010207544,38.1911401618513,0 -122.682989900811,38.1910794993387,0 -122.68297850089,38.1910454441934,0 -122.682995063354,38.1908472134831,0 -122.683012544638,38.1907661481644,0 -122.683091161055,38.190577098416,0 -122.6831475542,38.1904105196312,0 -122.683225475719,38.1902169616278,0 -122.683432450581,38.1898885655513,0 contacts #khStyle84754 1 -122.71219138809,38.1860292325173,0 -122.712191185194,38.1860271874986,0 -122.712168562253,38.1857991665519,0 -122.711971548932,38.1854471911279,0 -122.711908352713,38.1853659222086,0 -122.711822997404,38.1852936110846,0 -122.711746099457,38.185248358431,0 -122.711629271969,38.18519399451881,0 -122.711434190999,38.1850763491855,0 -122.711343805203,38.1850130378202,0 -122.711279164896,38.1849362712605,0 -122.711107011515,38.1847961507318,0 -122.710926651576,38.184746135103,0 -122.710678315542,38.1847410134363,0 -122.710458347201,38.1847810243677,0 -122.710194970532,38.1847893831837,0 -122.70997168417,38.1847662971285,0 -122.709842529485,38.1847614698161,0 -122.70960068815,38.1847383369222,0 -122.709478634273,38.1847425394262,0 -122.709358667534,38.1847602658224,0 -122.709245765544,38.18479603479201,0 -122.709138536821,38.1848408303392,0 -122.709047650341,38.1849036916251,0 -122.708940421342,38.1849484869893,0 -122.708823290815,38.1849707261839,0 -122.708703431454,38.1849614145354,0 -122.708614493471,38.1848935984133,0 -122.7085071146,38.1846184475744,0 -122.708432486382,38.1845416545032,0 -122.708346403784,38.1844738453082,0 -122.708072402448,38.1842838967607,0 -122.708015634427,38.1842026418201,0 -122.707989625778,38.1841034387187,0 -122.708009052672,38.1840734275058,0 -122.708032609884,38.1840370356219,0 -122.708042046964,38.18402245692931,0 -122.708056585967,38.1840170656104,0 -122.708150684441,38.1839821721729,0 -122.708387101637,38.1839331941081,0 -122.708418409817,38.1839154759798,0 contacts #khStyle84754 1 -122.726210828946,38.1839020978652,0 -122.726239197372,38.18395023592171,0 -122.726241366249,38.1839539162606,0 -122.726237425931,38.1840530450993,0 -122.726230238527,38.1841184692058,0 -122.726202604143,38.1843700129788,0 -122.726196195566,38.1844283472144,0 -122.726184963486,38.1845305872728,0 -122.726192103335,38.1847198676263,0 -122.72620564763,38.1848190374858,0 -122.726264188282,38.1850039321712,0 -122.72630774047,38.1850941598697,0 -122.726427724534,38.1852611734957,0 -122.726470172776,38.185360411093,0 -122.72647379379,38.1854415325426,0 -122.726445234047,38.1856352354202,0 -122.726419661432,38.1857024921213,0 -122.726410996679,38.185725280639,0 -122.726372296225,38.1857839979469,0 -122.726330153333,38.1858479380874,0 -122.726241963155,38.1859817417885,0 -122.726224049655,38.1860252251298,0 -122.726204870678,38.186071780241,0 -122.726202449477,38.1860830402447,0 -122.726196555874,38.1861104489354,0 -122.726184532563,38.1861663642807,0 -122.726192726143,38.1863601533292,0 -122.726224503347,38.1864503534019,0 -122.726276637388,38.18653609495581,0 -122.726400548952,38.186703117788,0 -122.726446243343,38.1867933504352,0 -122.726456313317,38.1868696618431,0 -122.72645873472,38.1868880114882,0 -122.726456327737,38.1868972241118,0 -122.726438616835,38.1869650117795,0 -122.726435202025,38.1869780817932,0 -122.726347505331,38.1870499765,0 -122.726292190981,38.18710868979711,0 -122.726275492617,38.18712641421571,0 -122.726270701893,38.1871486936552,0 -122.726266344331,38.1871689586482,0 -122.726255154293,38.1872209982495,0 -122.726263720218,38.1873156501046,0 -122.726229702827,38.187521724867,0 -122.726228558766,38.1875286554781,0 -122.726222823493,38.1875633992,0 contacts #khStyle84754 1 -122.725769101877,38.1840257488522,0 -122.725777142003,38.1840149438831,0 -122.72585006257,38.183916947176,0 -122.725952708852,38.18385410046641,0 -122.726073060898,38.1838273454541,0 -122.726183854555,38.1838690597556,0 -122.726193499061,38.1838726909477,0 -122.726197223714,38.183879011279,0 -122.726210828946,38.1839020978652,0 contacts #khStyle84754 1 -122.720040533713,38.1880038612731,0 -122.720271281093,38.1879458331755,0 -122.720348463493,38.1879189805597,0 -122.720451425075,38.1878696582979,0 -122.720545874012,38.1878067967374,0 -122.720601156115,38.1877213099486,0 -122.720612937561,38.18762670642761,0 -122.720614013654,38.1875320772693,0 -122.720604401691,38.1874329162425,0 -122.720581926141,38.1873382306807,0 -122.720418826035,38.1868782000755,0 -122.720408500734,38.1867790373128,0 -122.720321771733,38.1865039467495,0 -122.720215774134,38.1862288099071,0 -122.720060464729,38.1859715797533,0 -122.71993304145,38.185700897501,0 -122.719883413234,38.1856151591507,0 -122.71971891122,38.1851506178133,0 -122.719676437576,38.18506039027991,0 -122.719553597205,38.1848978691919,0 -122.719457214813,38.1847218927641,0 -122.719383288699,38.1846451083176,0 -122.719120728698,38.1844416941835,0 -122.718938273219,38.1841934096838,0 -122.718800431809,38.1840353579309,0 -122.718651868824,38.1838817864375,0 -122.71859367949,38.1837960268781,0 -122.718556203554,38.1837058109757,0 -122.718549432046,38.1836111628492,0 -122.718551145945,38.183538707033,0 contacts #khStyle84754 1 -122.878742589352,38.18353266640861,0 -122.87902210542,38.1830327654688,0 -122.879181642148,38.18279860587041,0 -122.879505903584,38.1828575276882,0 -122.879669675822,38.1830785012514,0 -122.879662783169,38.1833623909624,0 -122.879580932854,38.1836597181565,0 -122.879353849778,38.1837405940408,0 -122.878742589352,38.18353266640861,0 contacts #khStyle84754 1 -122.707802382212,38.1831068424921,0 -122.707758233201,38.1830754289546,0 -122.707674293861,38.1830076246213,0 -122.707621095468,38.1829263784159,0 -122.70763005624,38.1828272628118,0 -122.707643675362,38.1828182319753,0 -122.707718068743,38.1827689016757,0 -122.70784011944,38.1827647009855,0 -122.70796211604,38.1827740188586,0 -122.708079758741,38.1828013508159,0 -122.708307871972,38.1828650090025,0 -122.708596909162,38.1830414757543,0 -122.708919650812,38.1831774693829,0 -122.709028676882,38.18321829772411,0 -122.709145607047,38.1832456268375,0 -122.709266159377,38.1832594460328,0 -122.709388192867,38.1832597499676,0 -122.709497542136,38.1832194657283,0 -122.709537651174,38.1831880064055,0 -122.709564108307,38.1831672548627,0 -122.709583448562,38.1831520854032,0 -122.709585927008,38.1831487159817,0 -122.709643003761,38.1830711206327,0 -122.709676921429,38.1829765732316,0 -122.709698689166,38.18288650187321,0 -122.709751143441,38.1827965068294,0 -122.709773553681,38.1827780042641,0 -122.709832767294,38.1827291156648,0 -122.709944665686,38.1827654440243,0 -122.710039329382,38.1828287671111,0 -122.710101807734,38.18291003527961,0 -122.7101674429,38.1830949555848,0 -122.71020919012,38.1831851847574,0 -122.710314843697,38.1833566855095,0 -122.710436215915,38.1835237188889,0 -122.71059191537,38.1836728121706,0 -122.710678712764,38.1837406215033,0 -122.71095773226,38.1839260701512,0 -122.711257538278,38.18408903819141,0 -122.711471260473,38.1841841985484,0 -122.711690032218,38.1842658521675,0 -122.711802647521,38.1843021805249,0 -122.711923933536,38.1843114925313,0 -122.712045968796,38.1843117937121,0 -122.712081705356,38.184298362909,0 -122.712122045849,38.1842832017991,0 -122.712153177225,38.1842715017249,0 -122.712158071916,38.1842664822076,0 -122.712227699516,38.1841950788457,0 -122.712263023944,38.1841050404537,0 -122.712273388172,38.1840104342375,0 -122.712275188541,38.1839158069049,0 -122.71223741528,38.1837219439467,0 -122.712255629633,38.1836273570824,0 -122.712277917957,38.1835951196449,0 -122.712287723439,38.1835809371594,0 -122.712311614047,38.1835463821552,0 -122.712329678756,38.18352886553691,0 -122.712378560908,38.1834814664317,0 -122.712390417327,38.18346996971461,0 -122.712396628239,38.1834669313647,0 -122.712491237012,38.1834206491141,0 -122.712608381734,38.18339390000691,0 -122.712714178963,38.183349097747,0 -122.712895959427,38.1832188631158,0 -122.712918217747,38.183199692395,0 -122.713224638429,38.1829357759043,0 -122.713234769825,38.1829282504996,0 -122.713399994194,38.1828055246913,0 -122.713500829987,38.1827516969786,0 -122.713614228256,38.1827700004236,0 -122.713705326917,38.182833311813,0 -122.713767095684,38.18291457629901,0 -122.713736705126,38.1832029034003,0 -122.713750235726,38.1833922001631,0 -122.71378911524,38.1834869273092,0 -122.713858038804,38.1835637030119,0 -122.71394269814,38.1836315046968,0 -122.714124880655,38.1837626331208,0 -122.714322852374,38.18387126853881,0 -122.714431151207,38.1839165963626,0 -122.714544480998,38.1839529238428,0 -122.714781969007,38.1839940610163,0 -122.715010805447,38.1840577079567,0 -122.715116964016,38.184103029921,0 -122.715145720501,38.1841395958026,0 -122.715148920173,38.1841436644071,0 -122.715136537654,38.184165473075,0 -122.715130876097,38.1841754444675,0 -122.715125924895,38.184184164748,0 -122.714886013427,38.1842151227486,0 -122.714787317598,38.1842689568655,0 -122.714694295645,38.18433181732051,0 -122.714527436471,38.1844616228725,0 -122.714521061853,38.1844665818951,0 -122.714444077158,38.1845138823274,0 -122.714145756756,38.184697173338,0 -122.714141191524,38.1846999782487,0 -122.714117183878,38.1847216928697,0 -122.714061692723,38.1847718838705,0 -122.714011434882,38.1848260234558,0 -122.713990740048,38.1848483166577,0 -122.713943998763,38.1849383275759,0 -122.713911530633,38.18502837346671,0 -122.713911141992,38.1851275105458,0 -122.713935749305,38.1852222026267,0 -122.713951557544,38.185266851625,0 contacts #khStyle84754 1 -122.67101311992,38.1878972898994,0 -122.671004955802,38.1878849752389,0 -122.670857892205,38.1877358540741,0 -122.670722596315,38.187667878695,0 -122.670686421727,38.1876182077672,0 -122.670732933143,38.1875913013123,0 -122.670781581906,38.18759777562481,0 -122.670871306933,38.18760971642511,0 -122.670978238031,38.1876370553283,0 -122.671112187866,38.1876870015578,0 -122.671160689611,38.18770085335831,0 -122.671287482963,38.18773706464161,0 -122.671335287938,38.1877507173591,0 -122.671569154482,38.18780094421661,0 -122.67168320275,38.1878328087597,0 -122.671790053507,38.1878781717631,0 -122.67190194069,38.1879145362865,0 -122.672021759477,38.187932897914,0 -122.672265107175,38.1879380873507,0 -122.67245113881,38.1879551264644,0 -122.672505269667,38.1879600843915,0 -122.672620382936,38.1879706277046,0 -122.67274244399,38.1879664635514,0 -122.672862424494,38.1879487746442,0 -122.672917575998,38.1879282086531,0 -122.672934487564,38.1879219023243,0 -122.672970373083,38.1879085205895,0 -122.673150093577,38.1877783420033,0 -122.673248130755,38.1877200348843,0 -122.673273787936,38.1876966392496,0 -122.673321887544,38.1876527793134,0 -122.673326958692,38.1876481551503,0 -122.673327862526,38.1876462414845,0 -122.673369469098,38.1875581487232,0 -122.673361037335,38.1873688619349,0 -122.673285499383,38.1871838936876,0 -122.673234477069,38.1871026381285,0 -122.67320883097,38.1870692513502,0 -122.673149086404,38.1869914741358,0 -122.673109595037,38.1869400630187,0 -122.673040017442,38.1868587554326,0 -122.672885814969,38.1867096167894,0 -122.672715892072,38.1865649401539,0 -122.672701742094,38.1865505402594,0 -122.672675265726,38.1865235962462,0 -122.672502758879,38.1863480418249,0 -122.672481340935,38.1863139316094,0 -122.672453740244,38.18626997469891,0 -122.672448903512,38.1862622717039,0 -122.672377982496,38.1860955785323,0 -122.672374042227,38.1860863172763,0 -122.672369831127,38.1860703378946,0 -122.672304238069,38.185821438489,0 -122.672300359796,38.1858067219433,0 -122.672264677852,38.1853289573968,0 -122.672292221485,38.1852344030537,0 -122.672347557444,38.1851489392155,0 -122.672439882448,38.1850906167123,0 -122.672502704848,38.1850862866294,0 -122.672541081003,38.1851224443868,0 -122.672563757196,38.185158559014,0 -122.672594935654,38.1852082144786,0 -122.672628767477,38.18530294095591,0 -122.672677182605,38.1854878336615,0 -122.672687019579,38.1856816307619,0 -122.672708005709,38.1857763212063,0 -122.672768553725,38.18596124786231,0 -122.6728093664,38.186048079581,0 -122.672810970338,38.1860514920626,0 -122.672853374314,38.1861088900503,0 -122.672904428484,38.1861779967938,0 -122.672934402701,38.1862185697176,0 -122.673082161025,38.1863721965357,0 -122.673170374382,38.1864355311879,0 -122.673379037823,38.1865352528522,0 -122.673862308762,38.1866471428014,0 -122.673970071535,38.1866720924041,0 -122.674018436543,38.18667665508561,0 -122.674068518731,38.18668137974161,0 -122.674189190414,38.1866681976657,0 -122.674306353936,38.186641486879,0 -122.67441219896,38.1865922130815,0 -122.674497427555,38.1865248566549,0 -122.674646554323,38.1863720591165,0 -122.674737471774,38.1863092246291,0 -122.674840461343,38.1862599424877,0 -122.674954095716,38.18622420868841,0 -122.675196784451,38.1862158714,0 -122.675440126752,38.1862210542305,0 -122.675558516351,38.1862394082779,0 -122.675673991306,38.1862712729155,0 -122.675779394945,38.18632113455031,0 -122.675816962835,38.1863448444696,0 -122.675836564513,38.18635721550741,0 -122.675872626283,38.186379974842,0 -122.675982352231,38.18642083575541,0 -122.676103656922,38.186425678538,0 -122.676337961785,38.1863767592263,0 -122.676678149298,38.1862695511666,0 -122.676797412448,38.1862518562386,0 -122.676890170001,38.18625661919501,0 -122.677062205033,38.1862480825375,0 -122.677171476641,38.1862303595979,0 -122.677245817751,38.1862133252642,0 -122.677257328894,38.1862106876252,0 -122.677268635669,38.1862080968133,0 -122.677325891021,38.1861816203642,0 -122.677445596845,38.1861262649479,0 -122.677481747748,38.1861095476897,0 -122.677593933397,38.1860783135986,0 -122.677718151965,38.186069643952,0 -122.677732173295,38.186065177776,0 -122.677735900451,38.1860639905745,0 -122.677830357327,38.1860339034203,0 -122.677924106478,38.1859755805355,0 -122.677989388138,38.1858991540036,0 -122.678021206666,38.1858046100973,0 -122.678020910062,38.1857099776353,0 -122.678001781399,38.1855161553292,0 -122.678029317753,38.1854215996062,0 -122.678134267255,38.1852506506977,0 -122.678201708887,38.1851697237205,0 -122.678407957806,38.185008066204,0 -122.678463762193,38.1849766759869,0 -122.678703631467,38.1849593111361,0 -122.67881135459,38.1849686200176,0 -122.678938247563,38.1850005128555,0 -122.67906028359,38.18500084832121,0 -122.679180951664,38.18498766109321,0 -122.679418778704,38.1849477578226,0 -122.679522476923,38.184898473497,0 -122.679635393295,38.1848627331784,0 -122.679766131289,38.1848315478954,0 -122.67998508655,38.1848636920362,0 -122.680106408704,38.1848640244578,0 -122.680227750585,38.1848598505383,0 -122.6803463364,38.1848331375999,0 -122.680422299706,38.1847612452019,0 -122.68042985025,38.1846666341975,0 -122.680402471011,38.1845629150553,0 -122.680318989101,38.1843959545471,0 -122.680243850207,38.1842796504085,0 -122.680242581383,38.184277686449,0 -122.680216913123,38.1842379555974,0 -122.680095811796,38.1839374382367,0 -122.68007147916,38.1838770556039,0 -122.68003202721,38.183814235115,0 -122.680017616745,38.1837912888821,0 -122.679945160112,38.1837144837141,0 -122.679884875133,38.1836286993264,0 -122.67975574638,38.1833409573941,0 -122.679735043592,38.1832948244553,0 -122.679674366338,38.183212065902,0 -122.679665521345,38.1832000020739,0 -122.679588764038,38.1831276911538,0 -122.679323285664,38.1828025109056,0 -122.679172470867,38.1826418389874,0 -122.679113841185,38.1825793770811,0 -122.679039156098,38.1824998101406,0 -122.678970122765,38.1823014359532,0 -122.678970090887,38.1823013443488,0 contacts #khStyle84754 1 -122.678970090887,38.1823013443488,0 -122.67897012251,38.1823013458423,0 -122.679071407242,38.1823061291026,0 -122.679224105327,38.18231105492131,0 -122.679281156562,38.1823202241653,0 contacts #khStyle84754 1 -122.679281156562,38.1823202241653,0 -122.679283688623,38.1823206635724,0 -122.67940348649,38.182341452914,0 -122.679518619142,38.1823614325427,0 -122.679750530919,38.18236657504471,0 -122.679787718966,38.1823486519378,0 -122.679795092311,38.1822945968958,0 -122.679795408299,38.1822224974145,0 contacts #khStyle84754 1 -122.581100746556,38.182122192211,0 -122.581419764578,38.1821927447756,0 -122.581452839499,38.1822000594165,0 -122.581565386379,38.1822365122759,0 -122.58173759484,38.1823227472762,0 -122.582022447333,38.1825535849398,0 -122.582278910605,38.1827572829554,0 -122.582379937821,38.1828117189034,0 -122.58248318318,38.1828526439171,0 -122.582602919283,38.1828801089411,0 -122.582880394041,38.1829036304077,0 -122.583093261956,38.1828683395483,0 -122.583214071103,38.1828327201911,0 -122.583452095251,38.1827659745543,0 -122.58357412627,38.1827664092277,0 -122.583694653154,38.1827803571875,0 -122.583810082192,38.182812311903,0 -122.583922631191,38.1828487625127,0 -122.584027253529,38.1828987035834,0 -122.584299500306,38.1830889345755,0 -122.584531580243,38.1833150722623,0 -122.584697065217,38.1834553541029,0 -122.584785198572,38.1835187546955,0 -122.584989425439,38.1836231236492,0 -122.585081841091,38.1836865392183,0 -122.585379834699,38.1839940217057,0 -122.585701508646,38.1842790560624,0 -122.585796780321,38.1843424811858,0 -122.585905025274,38.184383420903,0 -122.586162448249,38.1844203823742,0 -122.586356636881,38.1844075507764,0 -122.586754800143,38.1842917960948,0 -122.587041914932,38.1842522542337,0 -122.587245354974,38.1842439600954,0 -122.587476449417,38.1842673069707,0 -122.587762878562,38.184349429831,0 -122.588084889332,38.18444970237961,0 -122.588237943518,38.1845178353432,0 -122.588354116271,38.1845452819592,0 -122.588574507285,38.1845685889903,0 -122.588788015089,38.1845468088422,0 -122.588945195094,38.1845158177703,0 -122.589148357462,38.1845570881742,0 -122.589323283203,38.1846703591387,0 -122.589531372075,38.1848513401106,0 -122.589720521658,38.1849736729288,0 -122.58985718966,38.1850372400237,0 -122.590136591345,38.1851152203833,0 -122.590167863536,38.1851239483273,0 -122.590328007182,38.1852011159303,0 -122.590456523354,38.1853187288282,0 -122.590610245925,38.1854060715626,0 -122.590640067222,38.1854230155048,0 -122.590963312513,38.1855593345306,0 -122.591120065853,38.185604945404,0 -122.591221917879,38.1856413516109,0 -122.591300294694,38.1856641569018,0 -122.591392004702,38.1857275650381,0 -122.591559649183,38.1858678447484,0 -122.591745950101,38.1859901643473,0 -122.592059846951,38.1861399664738,0 -122.592262789648,38.1862217870237,0 -122.592317777882,38.1863436476724,0 -122.592353145877,38.1865285274497,0 -122.592417236534,38.1866819635678,0 -122.592561058021,38.1868717275804,0 -122.592715811046,38.1870209732062,0 -122.5928877681,38.187156759774,0 -122.593071908396,38.1872835759875,0 -122.593271136727,38.1873924193874,0 -122.593373605825,38.1874468508905,0 -122.594038017548,38.18771052271,0 -122.594453444046,38.1878291271709,0 -122.594684352475,38.1878885092717,0 -122.594794973229,38.1878888927469,0 -122.594943543854,38.1878668763433,0 -122.595064430401,38.1878177263368,0 -122.595147127006,38.187705356395,0 -122.595184081059,38.1876194284326,0 -122.59521291937,38.1875523715717,0 -122.595307806769,38.1873003498267,0 contacts #khStyle84754 1 -122.769356356406,38.1838753577542,0 -122.768907388776,38.1840418282619,0 -122.769764471227,38.1845031674347,0 -122.770700110844,38.1849511362956,0 -122.771217609956,38.1850377742348,0 -122.772319974013,38.1850083927764,0 -122.772823134705,38.1848877069685,0 -122.773282068038,38.1846452634273,0 -122.773776870528,38.18445696314,0 -122.774300294683,38.1843588417872,0 -122.774849418047,38.1843734246978,0 -122.775368961829,38.18449159222161,0 -122.776340842293,38.1848855107099,0 -122.776730980692,38.1851971930302,0 -122.77695427208,38.1855761483075,0 -122.776891900333,38.18601764338901,0 -122.776605693096,38.1863730896003,0 -122.776147102842,38.1866200529902,0 -122.77452566412,38.1868287164708,0 -122.774203827391,38.1871615564155,0 -122.774082487767,38.18762546685021,0 -122.774178734049,38.188004180505,0 -122.774674089571,38.1878744590706,0 -122.775208933113,38.1876682052444,0 -122.775712561413,38.187515964065,0 -122.776247747252,38.1876611953308,0 -122.776490808636,38.1879951266253,0 -122.776430174719,38.1884501434457,0 -122.776587235235,38.1889010721995,0 -122.776948849465,38.1890955357007,0 -122.777484024921,38.1888982847222,0 -122.777892157923,38.1885836257938,0 -122.777914750574,38.1881961296966,0 -122.77767439998,38.1877901062387,0 -122.777549368775,38.1873662777494,0 -122.777541754825,38.1869381674264,0 -122.777683287593,38.1865148484884,0 -122.778068129293,38.1862271819855,0 -122.778570053398,38.1860433814181,0 -122.77910524467,38.1859497673285,0 -122.779649905703,38.1859102440043,0 -122.780188625584,38.1859473135439,0 -122.783190944788,38.186957847571,0 -122.784106749465,38.1871533209217,0 -122.785157881972,38.1874436688572,0 -122.7854559914,38.1877596580695,0 -122.785503883176,38.1882193858243,0 -122.78597628849,38.1882427875793,0 -122.786472615994,38.1880183866036,0 -122.786825472957,38.1876765576141,0 -122.787329751544,38.1875377866989,0 -122.787874236448,38.1875613126477,0 -122.788386569469,38.1877199656066,0 -122.788871640457,38.187928135764,0 -122.789259772857,38.1882172410524,0 -122.789804742889,38.1894349196666,0 -122.79007747747,38.1902690716509,0 -122.790165829434,38.1906928201067,0 -122.79003080116,38.1919768618786,0 -122.789917891984,38.1923957405246,0 -122.789574008786,38.1932107525055,0 -122.78933663582,38.1935978613835,0 -122.788761716172,38.19433133936541,0 -122.788392458573,38.1946596252388,0 -122.787940027784,38.1948705954834,0 -122.787418274555,38.1947434675807,0 -122.786967211358,38.1944857852219,0 -122.786571229881,38.1941876458291,0 -122.786029484831,38.19418665041,0 -122.785542700843,38.1940640847203,0 -122.78515360124,38.1937344093337,0 -122.784604522127,38.1938009877456,0 -122.784482870284,38.1941477447457,0 -122.784707510169,38.1945762558414,0 -122.785736658367,38.1955830529371,0 -122.785962129744,38.1959755129148,0 -122.786051548457,38.1963947598148,0 -122.785992791111,38.1968362653833,0 -122.785700544709,38.1971827094578,0 -122.785232307315,38.1974206777118,0 -122.78470696605,38.1975368693672,0 -122.784159445769,38.1975493735101,0 -122.783617399282,38.1975213289271,0 -122.783173038297,38.1977683459223,0 -122.782772281698,38.1979197215454,0 -122.78269818266,38.1979477103556,0 -122.782142942028,38.1979151280688,0 -122.782064462775,38.1978746268058,0 -122.78166970982,38.1976709027734,0 -122.781202146723,38.1976790368969,0 -122.780728827117,38.197939508991,0 -122.780276068385,38.1982450806293,0 -122.779836091812,38.1982172113249,0 -122.779561380957,38.1978291526193,0 -122.77980454355,38.1974375682329,0 -122.780217972764,38.1971544554056,0 -122.780699705259,38.1969435700978,0 -122.78109581655,38.1966018401145,0 -122.781091176376,38.1962458365936,0 -122.780710361667,38.1958936308464,0 -122.780518534133,38.1954786928286,0 -122.780202268015,38.1951446321802,0 -122.779706952071,38.1951301765336,0 -122.779450578236,38.1955262420674,0 -122.779131512122,38.1958816316507,0 -122.778389034204,38.1965156030038,0 -122.777952115291,38.1967761332922,0 -122.777430582893,38.1969283498087,0 -122.776928105748,38.1968012121945,0 -122.776532166772,38.1964985327756,0 -122.77632999782,38.1960880742784,0 -122.776302291999,38.1952318306942,0 -122.776088433781,38.1947943116064,0 -122.775662806548,38.1948655920211,0 -122.775138316724,38.1950538427962,0 -122.774592037728,38.1950167357436,0 -122.774034121924,38.1949345408914,0 -122.77355712931,38.1947668818239,0 -122.773310276575,38.1939282356249,0 -122.772783226284,38.193107067054,0 -122.772454567458,38.1929847556231,0 -122.772069400013,38.1933580220554,0 -122.771573575096,38.1935102629512,0 -122.771015818658,38.1934956480106,0 -122.770472806135,38.1933323526572,0 -122.770004228807,38.1934440842627,0 -122.769925633603,38.1938089366122,0 -122.771364930236,38.1944922194871,0 -122.771860788415,38.1946734432784,0 -122.772313297091,38.1949086553514,0 -122.772727124477,38.1951888527835,0 -122.773892055502,38.1960923751734,0 -122.774231851562,38.196426498509,0 -122.774518019104,38.1967920607805,0 -122.774759151046,38.1971800664802,0 -122.774869220739,38.1975948557501,0 -122.774852179822,38.1980274240795,0 -122.774759132624,38.1984553390261,0 -122.774560895443,38.1988515063084,0 -122.774271957078,38.1992056146008,0 -122.774263534217,38.1992159371716,0 -122.773840720052,38.1996306748689,0 -122.773241084108,38.2002188460063,0 -122.772815489579,38.20049740427591,0 -122.772324929011,38.2006631773924,0 -122.771784747631,38.2006035380826,0 -122.771239771579,38.2005934557447,0 -122.770706247423,38.200687037469,0 -122.769758376949,38.2011087550813,0 -122.769454253065,38.20119910706751,0 -122.769246076399,38.2012609535685,0 -122.76870883347,38.2012869249285,0 -122.768671248712,38.2012846716761,0 -122.767620443776,38.2012216696995,0 -122.767032861182,38.2012520391578,0 -122.766553326485,38.2012015096601,0 -122.766495793837,38.2007778055602,0 -122.766673824508,38.1999084536719,0 -122.766607726392,38.199484732363,0 -122.766457013843,38.1990698537907,0 -122.76623770546,38.1986773685881,0 -122.765949802153,38.1983072763736,0 -122.765745117121,38.1979193258465,0 -122.765700825823,38.19748663520401,0 -122.7659554737,38.196653488224,0 -122.766017163811,38.1962255169129,0 -122.766018910447,38.19579291879761,0 -122.765948893995,38.1953691889132,0 -122.765733525099,38.1949767103887,0 -122.765219197092,38.1942186210913,0 -122.764390894514,38.1931084053038,0 -122.763774724506,38.1923996721244,0 -122.762365776479,38.191089985793,0 -122.761236828257,38.190163889899,0 -122.760917506246,38.18981625150411,0 -122.760685036768,38.18942823433531,0 -122.760373358208,38.1886029450879,0 -122.760046523559,38.1882643012744,0 -122.75927022632,38.1876588576991,0 -122.758539365842,38.1870219592071,0 -122.758147671803,38.1861243971623,0 -122.758024882991,38.1857050582701,0 -122.758034545187,38.1844072705072,0 -122.757785693949,38.184019213065,0 -122.757350367525,38.1838020050786,0 -122.756249182553,38.1840160058598,0 -122.75574468494,38.1839969233085,0 -122.755361422678,38.1836851852977,0 -122.755036819671,38.1833330129413,0 -122.754761180669,38.1829584114145,0 -122.754547009155,38.1825569011432,0 -122.754175269053,38.1822181457494,0 -122.753691314747,38.18203687160371,0 -122.753529883088,38.18239703238,0 -122.753575414141,38.1828612756185,0 -122.753809935521,38.1832583244125,0 -122.75474626779,38.1843147700026,0 -122.755133858132,38.1846130002536,0 -122.755583722254,38.18485728462341,0 -122.756107117762,38.18498906437971,0 -122.756575306555,38.1851973330843,0 -122.756929617954,38.1855270316672,0 -122.757180908274,38.1863612172913,0 -122.757415490461,38.1867492461081,0 -122.758356573583,38.1878011655485,0 -122.758577948211,38.1881936707662,0 -122.758704312844,38.1886130162852,0 -122.758717154288,38.1890456452211,0 -122.75886282128,38.18945601795661,0 -122.759171054388,38.18980814533621,0 -122.760064423536,38.1903056800691,0 -122.760468155851,38.1905949129344,0 -122.761259568541,38.1917186003622,0 -122.763222459268,38.1937729623817,0 -122.763510702439,38.1941385561105,0 -122.763738190889,38.1945310634198,0 -122.764038523666,38.1957934276332,0 -122.764043943778,38.1966541356583,0 -122.764157175902,38.1975060494825,0 -122.76427252463,38.1979253658435,0 -122.764686105791,38.1987193052701,0 -122.764828598738,38.1991341695765,0 -122.764888946605,38.1995668928679,0 -122.764810501348,38.1999858169994,0 -122.764749935014,38.2000642388807,0 contacts #khStyle84754 1 -122.678498160539,38.1820251634606,0 -122.678497678101,38.1820266644503,0 -122.678495266353,38.1820341680361,0 -122.678549958307,38.1820929001285,0 -122.678574494468,38.1821080907159,0 -122.678630380789,38.1821426904639,0 -122.678687737989,38.1821643692849,0 -122.678714450811,38.1821744656927,0 -122.678822764649,38.1822108138139,0 -122.678883939121,38.1822560447638,0 -122.678970090887,38.1823013443488,0 contacts #khStyle84754 1 -122.881421182351,38.1820844377688,0 -122.881287955475,38.1821654117382,0 -122.881148066776,38.1821742823497,0 -122.881043241661,38.1821246041228,0 -122.880998123137,38.182002888969,0 -122.881047288278,38.1818317029873,0 -122.881193301962,38.1817867906331,0 -122.881392043676,38.1817915004059,0 -122.881478292636,38.18185467704091,0 -122.881493341453,38.1820349417594,0 -122.881421182351,38.1820844377688,0 contacts #khStyle84754 1 -122.665265309176,38.1816725478457,0 -122.665274565701,38.1816770806424,0 -122.665390594694,38.181728737319,0 -122.665508874949,38.1817813960763,0 -122.665689567328,38.1817503694934,0 contacts #khStyle84754 1 -122.718551145945,38.183538707033,0 -122.718556253603,38.1833227776373,0 -122.718580168923,38.1832282035188,0 -122.718672958987,38.1830391636674,0 -122.718806235195,38.1828997903499,0 -122.719048993061,38.1826840738323,0 -122.719184495543,38.1825221740503,0 -122.719244753352,38.1824412060687,0 -122.719292200213,38.1823511946823,0 -122.719405298376,38.18207658380441,0 -122.71950483667,38.1818019402075,0 -122.719580062487,38.1817255142995,0 -122.719679465055,38.18167167781421,0 -122.719691658206,38.1816733578472,0 -122.71977932154,38.181685436498,0 -122.719815231867,38.1825552342383,0 -122.719800595685,38.1826498309062,0 -122.719695330868,38.1829289672337,0 -122.719669276143,38.1830235364476,0 -122.719661062486,38.1831181485199,0 -122.719667121734,38.183212794882,0 -122.719688881236,38.1833074789608,0 -122.719728499307,38.1833976996558,0 -122.719784548706,38.1834834535218,0 -122.719854174882,38.1835647336817,0 -122.719937412461,38.1836325276428,0 -122.720032816842,38.18369133818641,0 -122.720143990844,38.1837321613724,0 -122.720264546101,38.1837459692885,0 -122.720385101404,38.18375977708101,0 -122.720505012148,38.1837555581017,0 -122.720605673091,38.1837286973452,0 -122.720622171798,38.1837242947561,0 -122.720757913524,38.1836705977562,0 -122.720811016451,38.1836495911234,0 -122.720837308438,38.1836391904379,0 -122.720945276484,38.1835853733956,0 -122.721193687914,38.1833831848119,0 -122.721383965702,38.1832664761444,0 -122.72146488305,38.1831945689147,0 -122.721537967337,38.1831181366573,0 -122.721740839861,38.1828797879866,0 -122.721898408176,38.1827314565197,0 -122.721985730033,38.1826640704644,0 -122.722102259503,38.1826102727441,0 -122.722113962013,38.1826122063178,0 -122.722240620016,38.1826331335922,0 -122.722216366458,38.1828178332115,0 -122.722225997183,38.1829124879563,0 -122.722275609177,38.1830027315966,0 -122.722313089322,38.1830929463417,0 -122.722312015511,38.183187575598,0 -122.722261374118,38.183367706126,0 -122.722242390392,38.18348031784811,0 -122.722238479037,38.1835704340657,0 -122.722214602606,38.1836559964732,0 -122.722177914709,38.1837325158165,0 -122.7220601892,38.1839124864817,0 -122.722007800626,38.183988968365,0 -122.721928972368,38.1840743997651,0 -122.721875121875,38.1841598906542,0 -122.72179279373,38.1842272885135,0 -122.721783719151,38.1842336994485,0 contacts #khStyle84754 1 -122.692314115474,38.1815983593957,0 -122.692213094305,38.1816430374434,0 -122.691552673161,38.1818846333159,0 -122.691451822658,38.1819384421183,0 -122.691239473863,38.1820325124819,0 -122.691136501086,38.1820818091251,0 -122.691040626389,38.1821401370079,0 -122.690865213859,38.1822748608864,0 -122.690669914284,38.1823870004446,0 -122.690562677902,38.1824317790103,0 -122.690447629576,38.1824675242196,0 -122.690331192075,38.182494253085,0 -122.690211938164,38.1825119618158,0 -122.689976940982,38.1825609070545,0 -122.689856973242,38.1825786135287,0 -122.689741229852,38.1826098499244,0 -122.689631870818,38.18265011572301,0 -122.689281129046,38.1827302957353,0 -122.689043333554,38.1827657128357,0 -122.688802721673,38.1827921094021,0 -122.688444918813,38.1828542430007,0 -122.688201548052,38.1828580996097,0 -122.688080885016,38.1828712961372,0 -122.687964446034,38.1828980226467,0 -122.687873544015,38.1829608674891,0 -122.687775524678,38.1830191869556,0 -122.687673975508,38.1830684843527,0 -122.687565309045,38.1831132563441,0 -122.687445359125,38.1831264541251,0 -122.686957882751,38.1831386669925,0 -122.686838762245,38.183124828745,0 -122.686609972729,38.18305662080751,0 -122.686490871764,38.1830382759876,0 -122.686368125255,38.18303794634311,0 -122.68625027747,38.1830601610938,0 -122.685581299339,38.1832926877136,0 -122.685382440257,38.1834003025773,0 -122.685207728077,38.1835350198322,0 -122.685109011658,38.1835888289098,0 -122.685003891692,38.1836381143573,0 -122.684894509133,38.1836828819353,0 -122.684778067734,38.1837096052694,0 -122.684658116364,38.1837228001947,0 -122.684536062925,38.1837269767755,0 -122.684428146186,38.1837627353353,0 -122.684228551032,38.1838748525112,0 -122.684122061229,38.1839106146469,0 -122.68403684442,38.1839779781487,0 -122.683971551228,38.184058914326,0 -122.683927628485,38.1841489208571,0 -122.683912232293,38.184243510867,0 -122.683766923223,38.1845089873874,0 -122.683700915603,38.1845899214702,0 -122.683531193143,38.18472464970601,0 -122.683432454381,38.1847829635664,0 -122.68312297082,38.1848902745879,0 -122.682906262321,38.1849978367695,0 -122.682676208935,38.1850557933131,0 -122.682453213458,38.1851317936782,0 -122.682333259372,38.1851449862117,0 -122.682214175735,38.1851221308327,0 -122.681984844488,38.1850578116996,0 -122.681947844944,38.1850474346113,0 -122.681873457233,38.1850265713951,0 -122.681752193686,38.18501272214871,0 -122.681637176388,38.185039446236,0 -122.681540576702,38.18509776433,0 -122.681453928841,38.1851651220322,0 -122.681375111464,38.1852370073061,0 -122.681359391212,38.1852414706792,0 -122.681265232806,38.1853944268659,0 -122.681202076313,38.185475367306,0 -122.680861352694,38.1858709882738,0 -122.680641251443,38.1861002062312,0 -122.680561245674,38.1862802381433,0 -122.680562972885,38.1863748745108,0 -122.680575405231,38.1864695401614,0 -122.680600683779,38.18656424094841,0 -122.6806038384,38.1866588812152,0 -122.680557055269,38.1867488786082,0 -122.680494610508,38.1868298205916,0 -122.680342640158,38.1869826177866,0 -122.68030087199,38.1870681225317,0 -122.680245563494,38.187149083915,0 -122.680109967217,38.1873109381706,0 -122.680026627256,38.187436885328,0 -122.679952762359,38.1875177957165,0 -122.679824995562,38.1876841773565,0 -122.679767525259,38.1877696388436,0 -122.679762828274,38.1878642575781,0 -122.679775259829,38.1879589232852,0 -122.679798396773,38.1880536183463,0 -122.679842964272,38.188143865895,0 -122.679898970704,38.18822963851701,0 -122.679978588366,38.1883019570232,0 -122.679983799457,38.1883122289933,0 -122.680007189498,38.1883583348155,0 -122.680017505903,38.1883786702167,0 -122.680032753167,38.188482356139,0 -122.680035492603,38.1886716268541,0 -122.680045050108,38.1887707909119,0 -122.680080340257,38.1888610129395,0 -122.680187358983,38.1890325442337,0 -122.680263629852,38.18921751003381,0 -122.680322337285,38.1892779545037,0 -122.680338233295,38.1892943208231,0 -122.680440789615,38.1893441704701,0 -122.680556291278,38.1893715241123,0 -122.680676848055,38.1893853726665,0 -122.680920934674,38.1893860399302,0 -122.681405677011,38.1893558197089,0 -122.681527006576,38.1893561506998,0 -122.681764493084,38.1893973546061,0 -122.681869924965,38.18944270457741,0 -122.681988282141,38.1894700645922,0 -122.682109592288,38.189474901195,0 -122.68235300473,38.1894665511141,0 -122.682470150215,38.1894443384154,0 -122.68269601357,38.1893683458981,0 -122.682805386343,38.1893280866742,0 -122.682908374799,38.1892787974765,0 -122.683331668314,38.1890996955979,0 -122.683442467745,38.1890594396464,0 -122.683734321039,38.1889070174738,0 -122.683823112347,38.1888396639419,0 -122.683897668542,38.1887632592693,0 -122.683982891042,38.1886958959523,0 -122.684042459301,38.1886194506181,0 -122.684124152002,38.1885430651094,0 -122.684212942515,38.1884757112746,0 -122.684406840651,38.1883635788439,0 -122.684631271328,38.1882875787053,0 -122.684747681122,38.1882698680047,0 -122.684848545175,38.1882160650861,0 -122.684934479866,38.188148702991,0 -122.685017579069,38.1880768269145,0 -122.685119661473,38.1879058640774,0 -122.685140052735,38.1878112874373,0 -122.685141193802,38.1877121526137,0 -122.685167988737,38.18762209950221,0 -122.685216174762,38.1875366103247,0 -122.685249106248,38.18734743582851,0 -122.6852773477,38.18725288031661,0 -122.685325552769,38.1871628848706,0 -122.685450432148,38.18700099569,0 -122.685538505908,38.186933638897,0 -122.685649300884,38.1868933808259,0 -122.686002995461,38.1869619265916,0 -122.686120135886,38.1869397102167,0 -122.68621318536,38.1868768725607,0 -122.686298403562,38.1868095075199,0 -122.686404221538,38.1867647290928,0 -122.686522055868,38.1867470204481,0 -122.686642628853,38.1867563566506,0 -122.686756682127,38.1867882065838,0 -122.686845359875,38.18684132578061,0 -122.686854918635,38.1868470516009,0 -122.68688950255,38.1869372697348,0 -122.686857733523,38.1870228036454,0 -122.686744951137,38.1871937393237,0 -122.686683226452,38.1872746865386,0 -122.686610796366,38.18735560498511,0 -122.686365806832,38.1875667417639,0 -122.686174729782,38.187687897576,0 -122.686068910339,38.187732675782,0 -122.68597871441,38.1877955209865,0 -122.685817514175,38.1879392879023,0 -122.685707582731,38.1881102302203,0 -122.685556562837,38.1883756934029,0 -122.685490573088,38.1884521222148,0 -122.685411022985,38.188528514452,0 -122.685059451982,38.1887934364315,0 -122.684775374755,38.1889639079713,0 -122.684688011562,38.1890312660802,0 -122.684241435143,38.1893139540344,0 contacts #khStyle84754 1 -122.665265309176,38.1816725478457,0 -122.665262886284,38.1816866868757,0 -122.6652506445,38.1817581249506,0 -122.665173678732,38.1820463056244,0 -122.665165382859,38.1820683021926,0 -122.665139725157,38.182136333685,0 -122.665138941363,38.1821423981442,0 -122.665104211326,38.1824111143133,0 -122.665107345908,38.1825057549594,0 -122.665077576302,38.1825983196057,0 -122.665075491648,38.1826048015513,0 -122.665069175631,38.1826136410774,0 -122.665019781365,38.1826827703077,0 -122.665014440113,38.18269024559281,0 -122.664985479221,38.1827500437174,0 -122.664934130754,38.1828560671984,0 -122.664927263623,38.1828702463123,0 -122.664926845701,38.1828766831735,0 -122.664924416195,38.1829141025529,0 -122.66492112067,38.1829648603408,0 -122.664924545088,38.182969767332,0 -122.664977835985,38.1830461299976,0 -122.664977840092,38.1830461358823,0 -122.664977844124,38.1830461778078,0 -122.664987376655,38.18314530115231,0 -122.66498476658,38.183151407768,0 -122.664975032667,38.1831741815315,0 -122.664962849937,38.1832026846019,0 -122.664956517754,38.18321749955431,0 -122.664952750009,38.1832263146718,0 -122.664945912001,38.183232938351,0 -122.66489064749,38.1832864706129,0 -122.664873898045,38.1833026950306,0 -122.664861382422,38.1833099909378,0 -122.664843127513,38.1833206325219,0 -122.664781590017,38.1833565053741,0 -122.664693897026,38.1834175821462,0 -122.664691381441,38.1834193342086,0 -122.66469023769,38.183420552674,0 -122.664619665454,38.183495734878,0 -122.664618882261,38.1834968113477,0 -122.664571059142,38.1835625424428,0 -122.664560774267,38.183576678602,0 -122.664535808515,38.1835970632047,0 -122.664390285032,38.1837158831855,0 -122.664380215524,38.18372863877961,0 -122.664339748421,38.1837799006094,0 -122.664326397878,38.1837968124329,0 -122.664293197493,38.1838778298453,0 -122.664294181305,38.1839452033848,0 -122.664295344314,38.1840248485493,0 -122.664295369056,38.1840265429369,0 -122.664299621588,38.1840320759142,0 -122.664392559795,38.1841529977388,0 -122.664652980624,38.1844076260392,0 -122.664776216225,38.18452811970171,0 -122.664816477608,38.184557032147,0 -122.664864420203,38.1845914605647,0 -122.665056570377,38.1847091746993,0 -122.665161250878,38.1847590437829,0 -122.665178836638,38.18476536711561,0 -122.665489710798,38.1848771478942,0 -122.665512317734,38.1848834657398,0 -122.665603751879,38.1849090183204,0 -122.66572429844,38.184922882184,0 -122.665966922003,38.1849280825787,0 -122.666182820136,38.1849166742252,0 -122.66620962793,38.1849152576366,0 -122.666328177663,38.1848975712997,0 -122.666552472224,38.1848531491746,0 -122.666669151156,38.1848193640752,0 -122.666897703487,38.1847531849206,0 -122.666906919327,38.1847505163886,0 -122.666909340672,38.1847490658395,0 -122.667001814065,38.1846936679438,0 -122.667004243703,38.1846922124216,0 -122.667022174066,38.1846697494345,0 -122.667068842368,38.1846112837527,0 -122.667083906851,38.1845720557933,0 -122.667173507468,38.18433873460741,0 -122.667174288065,38.1843367019171,0 -122.667175010881,38.1843360488007,0 -122.667241699666,38.1842757906378,0 -122.667253831905,38.1842648282636,0 -122.667256414697,38.184264064155,0 -122.667389609924,38.184224658779,0 -122.667515295433,38.1842069913683,0 -122.667572705731,38.1841739506263,0 -122.66758541785,38.184166634547,0 -122.667669222523,38.1840992790039,0 -122.66767598297,38.1840888389301,0 -122.667729636785,38.1840059818947,0 -122.667767608593,38.1839473422912,0 -122.667779903279,38.1839283556701,0 -122.667790403895,38.1839187812627,0 -122.667858732439,38.1838564795666,0 -122.667859909395,38.1838521600384,0 -122.667907427704,38.1836777633297,0 -122.667910261556,38.1836673627985,0 -122.667910698892,38.1836623658256,0 -122.667915374995,38.1836089370227,0 -122.667918541677,38.1835727546925,0 -122.667915369277,38.1835551425498,0 -122.667903923691,38.1834916002866,0 -122.667861450723,38.1834049178646,0 -122.667829712294,38.1833401432524,0 -122.6677646261,38.1832073091751,0 -122.66775002884,38.1831216485351,0 -122.667752183382,38.1831140059653,0 -122.667775416002,38.1830315953623,0 -122.667885360773,38.1828651760694,0 -122.66796204777,38.1827932937891,0 -122.66817095973,38.1826515055338,0 -122.668267810749,38.1825857725691,0 -122.66832570109,38.1825464821932,0 -122.668328760488,38.1825419896099,0 -122.668348493869,38.1825130120426,0 -122.668383894137,38.1824610283027,0 -122.668400586244,38.1824183623149,0 -122.668438879077,38.1823204834314,0 -122.668456095843,38.18227647620651,0 -122.668457570535,38.1822596247205,0 -122.668464865873,38.1821762598392,0 -122.668472654325,38.182087259861,0 -122.668526280613,38.1819071612519,0 -122.668603679614,38.1818352805576,0 -122.668804047265,38.1817141795924,0 -122.668905586649,38.18166940477011,0 -122.669060137801,38.18157971772,0 contacts #khStyle84754 1 -122.875627273025,38.1815511061353,0 -122.875588593248,38.181843971969,0 -122.875903000098,38.1818172726828,0 -122.875627273025,38.1815511061353,0 contacts #khStyle84754 1 -122.662486669127,38.1836247790464,0 -122.662505601839,38.1836437972435,0 -122.662581147255,38.1837196836328,0 -122.662672895815,38.183787542651,0 -122.662715695129,38.1837944274817,0 -122.662758471206,38.1838013087727,0 -122.662879119324,38.1837926442917,0 -122.663068493893,38.18374948886351,0 -122.663113445156,38.183739245139,0 -122.66314237784,38.1837286698452,0 -122.663221626319,38.18369970338441,0 -122.663223533761,38.1836990061856,0 -122.663312742161,38.1836557255994,0 -122.6633251,38.1836497300277,0 -122.663343530289,38.1836443012044,0 -122.663552350828,38.18358279041,0 -122.663665819319,38.18358311757881,0 -122.663719343687,38.1835832716869,0 -122.663919164955,38.1835838467995,0 -122.663951501812,38.1835802292723,0 -122.664018006025,38.183572789411,0 -122.664036978717,38.1835706669187,0 -122.66408178273,38.1835469462284,0 -122.664119611726,38.1835269183112,0 -122.664138564946,38.1835168838434,0 -122.66422089071,38.1834613120406,0 -122.664231628691,38.1834540636437,0 -122.664367510678,38.183348031,0 -122.664404237854,38.1833193716431,0 -122.664478499259,38.1832467798022,0 -122.664482376676,38.1832429895527,0 -122.664530968865,38.1831593077233,0 -122.664532011015,38.1831575130083,0 -122.664533254376,38.1831512016424,0 -122.664563584338,38.1829972447499,0 -122.664569275348,38.1829683567328,0 -122.66456955697,38.1829538678987,0 -122.664574062295,38.1827220779757,0 -122.664574656031,38.18269153132561,0 -122.664574880717,38.1826799716068,0 -122.664587720884,38.1826451952012,0 -122.6646081216,38.1825899416739,0 -122.664674861933,38.1825090204441,0 -122.664765090071,38.1824416853966,0 -122.664766895173,38.1824381720069,0 -122.664798303294,38.1823770402359,0 -122.664809014461,38.1823561923333,0 -122.664810155293,38.1823436544041,0 -122.664810504039,38.1823398216261,0 -122.6648180327,38.1822570802823,0 -122.664810594101,38.1821704711153,0 -122.664810219565,38.1821661103114,0 -122.66480990307,38.1821624252914,0 -122.664734265347,38.1819898472617,0 -122.664730803032,38.1819819474865,0 -122.664733814362,38.181891743411,0 -122.664734112288,38.181882819049,0 -122.664749553224,38.1817837254302,0 -122.66478944346,38.1816441455445,0 -122.664881242307,38.1815452710117,0 contacts #khStyle84754 1 -122.664881242307,38.1815452710117,0 -122.665073653037,38.1816044043974,0 -122.665215281545,38.1816547605356,0 -122.665265309176,38.1816725478457,0 contacts #khStyle84754 1 -122.876804172232,38.181912868977,0 -122.876483686465,38.18173678238381,0 -122.876570677154,38.1815701439323,0 -122.876887268325,38.1815164066398,0 -122.876804172232,38.181912868977,0 contacts #khStyle84754 1 -122.679281156562,38.1823202241653,0 -122.679381537033,38.182385731631,0 -122.679607072663,38.1825329135809,0 -122.679791489939,38.1826280511147,0 -122.679845351249,38.1827138179518,0 -122.679869913965,38.1828085169896,0 -122.679883772133,38.18290318667691,0 -122.67988692571,38.1829978270173,0 -122.679975341365,38.1831783202014,0 -122.68003134422,38.1832640928154,0 -122.68016481888,38.1834221779519,0 -122.680333341698,38.1835623338001,0 -122.680404371293,38.1836391348256,0 -122.680526389627,38.1838062007301,0 -122.680568814537,38.1838964422035,0 -122.680644126605,38.1839732547955,0 -122.680824842747,38.1840999244653,0 -122.680923804251,38.1841542701637,0 -122.681000721504,38.1841791062981,0 -122.681036404015,38.184190627951,0 -122.681155505444,38.184208978302,0 -122.681276787214,38.1842183219425,0 -122.681520162728,38.1842144797103,0 -122.681762209065,38.1841881019987,0 -122.681877224988,38.1841613777781,0 -122.68197739144,38.1841030691084,0 -122.68215351854,38.1839728668117,0 -122.682356646155,38.18386977532371,0 -122.682445432614,38.18380242275091,0 -122.682519271449,38.1837260169279,0 -122.682584565933,38.18364508156,0 -122.682645578389,38.1835641345166,0 -122.68268950234,38.1834741284621,0 -122.682829348161,38.1833167889058,0 -122.682925191729,38.18326748021561,0 -122.683011122366,38.1832001194505,0 -122.683109859329,38.1831418059195,0 -122.68321563486,38.1831060427578,0 -122.683300137759,38.1830386779049,0 -122.683368285341,38.1829577498265,0 -122.683409353482,38.1828677357465,0 -122.683487656676,38.1825840528934,0 -122.683500912139,38.1824894571102,0 -122.68349561303,38.1823948110324,0 -122.683478182136,38.1823001320681,0 -122.683419301918,38.1822188595474,0 -122.683376874462,38.1821286190651,0 -122.683355875619,38.1820339304042,0 -122.683352023519,38.1819347819644,0 -122.683367116437,38.1817455594439,0 -122.68339107633,38.1816509926851,0 -122.683434978689,38.1815654925316,0 -122.683522353644,38.1814936290098,0 -122.683635956989,38.1814623929417,0 -122.683661674033,38.1814756264519,0 -122.68373279568,38.1815122242699,0 -122.683902748236,38.1816523789196,0 -122.684060550235,38.181797006719,0 -122.684150194897,38.1818603370545,0 -122.684239051876,38.1819139580849,0 -122.684247709137,38.1819191823292,0 -122.684368293394,38.1819240146139,0 -122.684472678234,38.1818792340025,0 -122.684570698642,38.181820917287,0 -122.684683796841,38.1817954348953,0 -122.684689278018,38.1817941999165,0 -122.684778209589,38.1818575278483,0 -122.684824939843,38.1819432731736,0 -122.684898827119,38.1820200792224,0 -122.685037644356,38.1820684405214,0 -122.685046874928,38.1820716562698,0 -122.68512043664,38.1820972836782,0 -122.68532623021,38.1822014827293,0 -122.685402457625,38.1822227718885,0 -122.685440275873,38.1822333339282,0 -122.685560841334,38.1822426712113,0 -122.685682892263,38.1822384935517,0 -122.685801452534,38.1822162812819,0 -122.685914361786,38.1821805348734,0 -122.686020173328,38.1821357567247,0 -122.686136611796,38.18210903213721,0 -122.6862216516,38.1821003643439,0 -122.686265837517,38.1820958606114,0 -122.6862708152,38.1821003817095,0 -122.686305646176,38.1821320177501,0 -122.686360499233,38.1821546964691,0 -122.686453985279,38.1821549475478,0 -122.68665355307,38.1820473327372,0 -122.686740192521,38.1819799711203,0 -122.68680690809,38.1818990371787,0 -122.686861511106,38.1818135644412,0 -122.686946491995,38.1816335413908,0 -122.686959144886,38.1815679527866,0 -122.686964738239,38.1815389585713,0 -122.686965454786,38.1815382802962,0 -122.687040691702,38.18146706180221,0 -122.687077759904,38.1814468549156,0 contacts #khStyle84754 1 -122.664916705803,38.1814372222674,0 -122.664909983744,38.1814454104104,0 -122.664865094743,38.1815000896598,0 -122.664839200331,38.1815316315742,0 -122.664870813561,38.1815418876753,0 -122.664881242307,38.1815452710117,0 contacts #khStyle84754 1 -122.656835390192,38.1858704595507,0 -122.656868162836,38.185871857537,0 -122.656948842225,38.18587529904771,0 -122.657173580733,38.185850327036,0 -122.65719442114,38.1858480113137,0 -122.657304423116,38.18583578816661,0 -122.657304438781,38.185835785678,0 -122.657448639025,38.1857931850852,0 -122.657530988261,38.1857688568253,0 -122.657603123082,38.1857424954457,0 -122.657641082915,38.1857286231521,0 -122.65774551032,38.1856793602388,0 -122.65805241088,38.1855225397242,0 -122.658238553602,38.1853969090221,0 -122.658393378797,38.18525316137481,0 -122.658453012804,38.1851677166924,0 -122.6584969672,38.1850777198732,0 -122.658530216596,38.1849876917433,0 -122.65854493184,38.1848931031601,0 -122.658548186577,38.1845973908796,0 -122.658548651562,38.1845551440273,0 -122.658547387827,38.1845529027843,0 -122.658429033516,38.1843429997705,0 -122.658293526246,38.1841713653119,0 -122.658204656942,38.1840990050424,0 -122.658148594641,38.18403124698471,0 -122.658049608078,38.1839858945925,0 -122.657830225856,38.183895126849,0 -122.657726978883,38.1838452554379,0 -122.657715174119,38.18383632818,0 -122.657713859825,38.1838353342559,0 -122.657625285979,38.1837683508867,0 -122.657592103376,38.1836916470821,0 -122.657620864254,38.1834934556122,0 -122.657679784071,38.183408009202,0 -122.657853832311,38.1832733310748,0 -122.657922552884,38.1832284696542,0 -122.657947720134,38.1831879869393,0 -122.657973393368,38.1830393552699,0 -122.658015290465,38.1829313275006,0 -122.658063504792,38.1828458495462,0 -122.658125991763,38.1827604133416,0 -122.658202688119,38.1826885374836,0 -122.658290781444,38.1826212011813,0 -122.658393797786,38.1825674272574,0 -122.65862033604,38.182500495479,0 -122.658653519418,38.1825005924485,0 -122.658738085866,38.18250083952891,0 -122.658857934542,38.1825102021272,0 -122.658944682702,38.1825780494576,0 -122.659035229416,38.1827495519839,0 -122.659119102453,38.18282189706,0 -122.659219473387,38.1828762651327,0 -122.659267437978,38.1828895902732,0 -122.659334088928,38.1829081066683,0 -122.659334222261,38.1829081437096,0 -122.659455540944,38.1829084974495,0 -122.659469601846,38.182904683048,0 -122.659570583777,38.1828772888964,0 -122.659682100278,38.18283705742001,0 -122.659781547727,38.1827832718814,0 -122.659858242501,38.1827113949339,0 -122.659961110173,38.1825359499481,0 -122.660023573729,38.1824550189238,0 -122.660049649121,38.1824282317022,0 -122.660135213634,38.182340331193,0 -122.660242279627,38.1822303418045,0 -122.66024885799,38.182225021238,0 -122.660331105121,38.182158499821,0 -122.660365449134,38.1821195860299,0 -122.660398542433,38.1820820893218,0 -122.660476451824,38.1819020650295,0 -122.660536561986,38.18171297641651,0 -122.660551273971,38.1816183875113,0 -122.660555281528,38.1815237674976,0 -122.660548017548,38.1813975708412,0 contacts #khStyle84754 1 -122.660548017548,38.1813975708412,0 -122.660482450421,38.1813820291142,0 -122.660346614799,38.1813498311324,0 -122.660317054398,38.1813428242179,0 contacts #khStyle84754 1 -122.6930124147,38.181190803262,0 -122.692915450962,38.1812708661929,0 -122.692738635622,38.1814010829384,0 -122.692638500271,38.18145489465,0 -122.692314115474,38.1815983593957,0 contacts #khStyle84754 1 -122.616559917784,38.1814683259991,0 -122.616594495514,38.1814148324864,0 -122.61662784152,38.1813158040817,0 -122.616770678043,38.181158553286,0 -122.616817902791,38.1811309041149,0 contacts #khStyle84754 1 -122.600465224832,38.1840489364719,0 -122.600465643154,38.1840330302846,0 -122.600419551113,38.1837174346736,0 -122.600331157871,38.1834377444855,0 -122.600192244763,38.1831308439015,0 -122.600104345111,38.1828917115372,0 -122.600064530229,38.18260317475811,0 -122.59998541681,38.1823235160097,0 -122.599980200936,38.1821026914508,0 -122.599999930849,38.1819493818217,0 -122.60000106905,38.18194053750941,0 -122.600094086915,38.1817651116087,0 -122.600140398886,38.1816481072655,0 -122.600175957158,38.1815400786435,0 -122.600149701153,38.1813822697427,0 -122.600115078791,38.181188382133,0 -122.600161291893,38.181089402472,0 -122.600267793084,38.1810582228516,0 -122.600632451198,38.181059469141,0 -122.600877221725,38.1810603050562,0 -122.601047406372,38.1809977983055,0 contacts #khStyle84754 1 -122.617279086563,38.1811314644944,0 -122.617354253468,38.1811920090539,0 -122.617440365813,38.1812373535629,0 -122.61761717869,38.1812694759822,0 -122.617769179785,38.1812699731566,0 -122.617855316014,38.1813108111767,0 -122.61796609968,38.1814148173798,0 -122.618144246392,38.1814649684179,0 -122.618272008258,38.1814608794868,0 -122.618338539648,38.181429552914,0 -122.618623618073,38.1812277016116,0 -122.618861769894,38.1811293406509,0 -122.619039075856,38.1810668310069,0 -122.619211175131,38.1810448605024,0 -122.619350039025,38.1809642000847,0 -122.619462931184,38.1809375301093,0 -122.619547711033,38.1809648436848,0 -122.619573669716,38.18105054718701,0 -122.619540444942,38.1811270455208,0 -122.619440572214,38.1812574020193,0 -122.619412248795,38.1813519413253,0 -122.619416038293,38.1814465851931,0 -122.61945196427,38.1815368274334,0 -122.61956339387,38.1816543530247,0 -122.619602724253,38.1817761501386,0 -122.619673618295,38.1818665061096,0 -122.619766155505,38.1819118698201,0 -122.619935261593,38.1819169261024,0 -122.620141452898,38.1819266089382,0 -122.620294309337,38.1819000680496,0 -122.620404581888,38.1818283260349,0 -122.620599295663,38.181711795421,0 -122.620914774645,38.1815641123932,0 -122.620923942314,38.1815591584722,0 contacts #khStyle84754 1 -122.687077759904,38.1814468549156,0 -122.68713940387,38.18141325106,0 -122.687260739721,38.1814090698405,0 -122.687359008068,38.1814589020134,0 -122.687431470257,38.1815357026641,0 -122.68751610284,38.1816035232948,0 -122.687620080652,38.1816533705285,0 -122.687742111241,38.1816536969446,0 -122.687858548334,38.1816269706405,0 -122.687974290963,38.1815957360914,0 -122.688075124269,38.1815464365046,0 -122.688193644251,38.181533234252,0 -122.688315674648,38.1815335600712,0 -122.688428274113,38.1815699107853,0 -122.688525077782,38.1816287506217,0 -122.688602536765,38.1817055638804,0 -122.688716720623,38.1818726004702,0 -122.688796340156,38.1819449130858,0 -122.688856897218,38.1819670639167,0 -122.688932847816,38.1819948454008,0 -122.688945258984,38.1819993851959,0 -122.689042274652,38.1820086561633,0 -122.68928633704,38.1820093059188,0 -122.68952388097,38.1820324691997,0 -122.689767962588,38.1820286117322,0 -122.689889318454,38.1820199215789,0 -122.690007163502,38.1819977031585,0 -122.690122905819,38.1819664664921,0 -122.690224470953,38.1819126607296,0 -122.690318205101,38.1818543278341,0 -122.690490068564,38.181715089081,0 -122.690671151298,38.1815893933189,0 -122.690766331016,38.1815265576167,0 -122.690868589633,38.1814772594013,0 -122.691090851834,38.1814012410224,0 -122.691320211754,38.1813342535345,0 -122.691436647068,38.1813075236724,0 -122.691610441132,38.1812764877372,0 -122.691613920579,38.1812758663788,0 -122.691710175083,38.1812586772397,0 -122.691894556621,38.1811960761243,0 -122.6921075968,38.1811065126529,0 -122.692220482343,38.1810752663753,0 -122.692437070919,38.1809902179314,0 -122.692540041304,38.1809409201267,0 -122.692559537737,38.1809328860621,0 contacts #khStyle84754 1 -122.660610765469,38.1807939130032,0 -122.660599546884,38.1808466275578,0 -122.660573445055,38.18096927608191,0 -122.660561885881,38.1810235907499,0 -122.660556592231,38.1811237570859,0 -122.660556409271,38.181127219043,0 -122.660550162681,38.1813284624324,0 -122.660548032888,38.1813970766459,0 -122.660548017548,38.1813975708412,0 contacts #khStyle84754 1 -122.660406921657,38.1807392453439,0 -122.660431835707,38.1807425747288,0 -122.660510333543,38.1807530647376,0 -122.660599399505,38.1807892901778,0 -122.660610765469,38.1807939130032,0 contacts #khStyle84754 1 -122.621795964851,38.1809948291464,0 -122.621819085658,38.1809857339647,0 -122.622024243154,38.1809188036564,0 -122.622267912306,38.1808565037238,0 -122.622407230327,38.1808254100524,0 -122.622664271627,38.1807992026094,0 -122.62291394434,38.1808180334723,0 -122.623085740135,38.1808546377404,0 -122.6233753061,38.1808871150619,0 -122.623493766512,38.180887496736,0 -122.623665864095,38.1808655196921,0 -122.623843763183,38.1808255360101,0 -122.623949586864,38.1807853201725,0 -122.624042634818,38.1807315443496,0 -122.624092452315,38.1806942874752,0 contacts #khStyle84754 1 -122.579859315639,38.1855515043039,0 -122.578856201472,38.1841329319351,0 -122.577395542159,38.1819962034326,0 -122.577026128309,38.181458623322,0 -122.576729570771,38.1810339621644,0 -122.576443007176,38.1806093364363,0 contacts #khStyle84754 1 -122.669060137801,38.18157971772,0 -122.669084216858,38.1814991558215,0 -122.669088398328,38.1814851657549,0 -122.669154644135,38.1813320445241,0 -122.669166285897,38.1813051355645,0 -122.669174452136,38.18128032165,0 -122.669227789396,38.1811182507401,0 -122.669228514171,38.1811160484278,0 -122.669265560796,38.1810315599124,0 -122.669266009999,38.18103053545791,0 -122.669286808466,38.1810064010698,0 -122.669401597959,38.1808731998258,0 -122.669408408753,38.180862686628,0 -122.669477771134,38.18075561809301,0 -122.669538936627,38.1806612020665,0 -122.669592079068,38.1805791703272,0 -122.66961431663,38.1805448439175,0 contacts #khStyle84754 1 -122.612802799099,38.18050108115831,0 -122.612378557817,38.180432081159,0 -122.611993706138,38.1804713606908,0 -122.611722294509,38.1805155220891,0 -122.611149781156,38.1806848569627,0 -122.610782120793,38.1808458587862,0 -122.610455302909,38.1809754517292,0 -122.610211575587,38.1810467394509,0 -122.609987163516,38.1811090785874,0 -122.609714657588,38.1810901440134,0 -122.609570771254,38.1810400946368,0 -122.609280577764,38.1808588745476,0 -122.608983008801,38.1807226916896,0 -122.608756224051,38.1806948952998,0 -122.608587762983,38.18070334387291,0 -122.608427841136,38.1807163270707,0 -122.608212088465,38.1807606667758,0 -122.607975399324,38.1808499984911,0 -122.607807482396,38.1808899916006,0 -122.607593397702,38.1808892731443,0 -122.607337548178,38.180825326352,0 -122.607265283704,38.1807967697682,0 -122.606497964842,38.1804935460582,0 -122.606133915533,38.1803796634965,0 contacts #khStyle84754 1 -122.655316107979,38.1849331895436,0 -122.655224449831,38.1848473000058,0 -122.655223947493,38.1848464428798,0 -122.65521024546,38.18482306344,0 -122.655174183999,38.1847615325845,0 -122.655156075322,38.1846668475389,0 -122.655167982718,38.1845632385627,0 -122.655216872568,38.1844867763387,0 -122.655300485146,38.1843112786909,0 -122.655370805489,38.1842303733652,0 -122.655449647012,38.1841585056622,0 -122.655701849714,38.18394745470371,0 -122.655800336714,38.1839010407866,0 -122.655891901239,38.1838578890934,0 -122.655901403248,38.1838534110663,0 -122.656000876013,38.1837951225565,0 -122.65608112255,38.183727764826,0 -122.656058752275,38.1836285610869,0 -122.655989889103,38.18355175177491,0 -122.655890233302,38.183497383058,0 -122.655771160723,38.1834745009145,0 -122.655657147406,38.1834381147613,0 -122.65555675713,38.1833882498637,0 -122.655472886968,38.1833159022656,0 -122.655436915958,38.1832256708261,0 -122.655441376193,38.18303642074581,0 -122.655525029033,38.1828519104722,0 -122.65562692568,38.1825818348232,0 -122.655683706159,38.1824963830985,0 -122.65574974253,38.1824154648888,0 -122.655839957441,38.1823526429467,0 -122.655950761522,38.1823124129144,0 -122.656065804881,38.1822812077946,0 -122.656113779965,38.182277743865,0 -122.656185737609,38.18227254829321,0 -122.656209587394,38.1822681134889,0 -122.656305020233,38.1822503679515,0 -122.656415110278,38.1822101353786,0 -122.656450311201,38.1821606699519,0 -122.656416692219,38.1820253830249,0 -122.65634856497,38.1819440698007,0 -122.656264935457,38.1816689413691,0 -122.656243455451,38.1813804769558,0 -122.656270975719,38.1812949388215,0 -122.656361025891,38.1811149529793,0 -122.656427773894,38.1810340364575,0 -122.656882361334,38.1807289461936,0 -122.657038585379,38.1805897105781,0 -122.657128104469,38.1805223793059,0 -122.657340491969,38.1804283708077,0 -122.65756773819,38.1803614430982,0 -122.657702948908,38.1802897390387,0 -122.65773399294,38.1802132234056,0 -122.65764009144,38.18014986046911,0 -122.657530385098,38.1801089824762,0 -122.657414214141,38.1800770979634,0 -122.657171734062,38.1800448427331,0 -122.657153148565,38.1800191092814,0 contacts #khStyle84754 1 -122.624092452315,38.1806942874752,0 -122.624234624388,38.1805879613119,0 -122.624400186406,38.180448799292,0 -122.624513056187,38.1802869364337,0 -122.624592544497,38.1802331166032,0 -122.624869610297,38.180197956111,0 -122.624994699992,38.1801578011602,0 -122.625087977311,38.1800589625832,0 -122.625200521798,38.1799601857189,0 -122.625206613131,38.1799578863756,0 contacts #khStyle84754 1 -122.692559537737,38.1809328860621,0 -122.692610410738,38.1809119223593,0 -122.692648701567,38.1808961434846,0 -122.692846848673,38.1807840080824,0 -122.693062008436,38.180698954719,0 -122.693271515521,38.1806003672836,0 -122.693371649249,38.1805465550164,0 -122.693644445301,38.1803309699618,0 -122.693852263043,38.1801242264397,0 -122.693983515365,38.1799668509059,0 -122.694070785271,38.1798131054946,0 contacts #khStyle84754 1 -122.612606523803,38.1797996040258,0 -122.612731898167,38.1798744757073,0 -122.612987415542,38.1800014973474,0 -122.613234632474,38.1800789220712,0 -122.613439200014,38.1801246613962,0 -122.613593721279,38.1801363069231,0 -122.613626807735,38.1801388004637,0 -122.613840914182,38.1801350017232,0 -122.614104854414,38.1801538984398,0 -122.614213759876,38.1801963703753,0 -122.61423304274,38.180203890465,0 -122.614360185164,38.1803169665858,0 -122.614479217105,38.1804795847131,0 -122.614609311399,38.1807098331364,0 -122.614696874228,38.1808858660626,0 -122.614809698748,38.1810079070162,0 -122.614962509993,38.1811255733246,0 -122.6150298059,38.18122042650251,0 -122.61512224717,38.1814190064804,0 -122.615202983887,38.1815364351246,0 -122.615325919416,38.1816359775473,0 -122.615437626749,38.1816994328003,0 -122.615599335354,38.1817540398725,0 -122.615696269976,38.1817768899341,0 -122.615840303918,38.1817998947246,0 -122.616032387318,38.1817779945681,0 -122.616124539501,38.1817602722041,0 -122.616230392315,38.1817155571773,0 -122.616368570713,38.1816303917934,0 -122.616521829335,38.1815272506709,0 -122.616559917784,38.1814683259991,0 contacts #khStyle84754 1 -122.694560073408,38.1797956300783,0 -122.694490875567,38.1799726859533,0 -122.694396656867,38.1801481841044,0 -122.694237611782,38.1802964747598,0 -122.694150267516,38.1803638401014,0 -122.694056538283,38.1804221760946,0 -122.693847032747,38.1805207649412,0 -122.693747613017,38.1805745794878,0 -122.693660267974,38.1806419444579,0 -122.693581467312,38.1807138380626,0 -122.693434532025,38.180866665667,0 -122.693340801587,38.1809250010781,0 -122.693252742134,38.1809923638627,0 -122.6930124147,38.181190803262,0 contacts #khStyle84754 1 -122.886662391376,38.180138502095,0 -122.886359022399,38.1799579540655,0 -122.88638184015,38.1797416770221,0 -122.886642167427,38.1796067448756,0 -122.886662391376,38.180138502095,0 contacts #khStyle84754 1 -122.79029426499,38.1875971262421,0 -122.790154479079,38.1872004428065,0 -122.790212106728,38.1867679450452,0 -122.79021187329,38.1863533679036,0 -122.789892163584,38.18597426394,0 -122.789407534828,38.1859869058925,0 -122.78846587243,38.1864628609451,0 -122.78789748704,38.1864392941071,0 -122.787507784384,38.1862042565369,0 -122.787473427997,38.1857490604941,0 -122.787551931675,38.18489301260901,0 -122.787425612364,38.184036590237,0 -122.787322997881,38.1836173193247,0 -122.787107587707,38.1832113606148,0 -122.786710265697,38.1829042058826,0 -122.786203613195,38.1827680871455,0 -122.785842966723,38.18309638131261,0 -122.785870320878,38.1835019961955,0 -122.786108562162,38.1839079991798,0 -122.786282192966,38.1843228954423,0 -122.78633618042,38.1847736217811,0 -122.786220803206,38.1851789740832,0 -122.785735704054,38.1851104871261,0 -122.784681114347,38.1847931000982,0 -122.783074668422,38.1845422694876,0 -122.782645780245,38.184293623688,0 -122.782317103907,38.18394602593191,0 -122.781472355915,38.1823221831985,0 -122.781022989607,38.1822447312455,0 -122.780710507289,38.1825685941658,0 -122.780582259066,38.1834470756383,0 -122.780456820073,38.1838659223177,0 -122.780240084948,38.1842665712736,0 -122.779792636511,38.184495544856,0 -122.779248947385,38.1845711208392,0 -122.778699628969,38.1845024828644,0 -122.778240329279,38.1842853069621,0 -122.777869142504,38.183960146987,0 -122.777635901313,38.1835676554999,0 -122.777283563838,38.1832650610157,0 -122.776804280093,38.1830523474128,0 -122.77645702705,38.1827227225069,0 -122.775886582963,38.1819871019398,0 -122.775411531675,38.18121561248151,0 -122.775133654903,38.1808410546702,0 -122.773734827134,38.1801849319042,0 -122.773415943724,38.1798057838649,0 -122.773067314195,38.1795842966306,0 -122.772780183838,38.179894669308,0 -122.773810989901,38.1809376283147,0 -122.774694332992,38.1820208489305,0 -122.774942553914,38.1824088691499,0 -122.775067932352,38.1828281952614,0 -122.775024834208,38.1832652205862,0 -122.774616186303,38.1835212872045,0 -122.774071456659,38.1835878246565,0 -122.773523934772,38.1835191659023,0 -122.773003727078,38.1836172900663,0 -122.771982167373,38.1839442504234,0 -122.771444480582,38.1839251702821,0 -122.770961598865,38.1837259445677,0 -122.770634207404,38.1833287473577,0 -122.770246165616,38.1833820570384,0 -122.769801946536,38.1837101371259,0 -122.769356356406,38.1838753577542,0 contacts #khStyle84754 1 -122.601047406372,38.1809977983055,0 -122.601191454203,38.1809329866716,0 -122.601236267488,38.1809128237104,0 -122.601358860193,38.1808095978131,0 -122.601482239772,38.1806928556849,0 -122.601535684976,38.180575875078,0 -122.601575642723,38.1803146481231,0 -122.601626230706,38.1800669761507,0 -122.601705781889,38.1798734779633,0 -122.601706740693,38.17987237690101,0 -122.601819242425,38.1797431828774,0 -122.60190782736,38.1797254595163,0 -122.602047693722,38.1797259357102,0 -122.60230021157,38.1797448200663,0 -122.602562055344,38.1797547230615,0 -122.603077766347,38.1796663499337,0 -122.603848963947,38.1794436527154,0 -122.604337108811,38.1793056117396,0 -122.604670011518,38.1792391440489,0 -122.604932835012,38.1791994761794,0 -122.605367416849,38.1792009440233,0 -122.605871397593,38.1793017820343,0 -122.606276043729,38.1794293209412,0 -122.607062069431,38.179765429096,0 -122.607750869364,38.1800020680174,0 -122.608194819348,38.1801207196685,0 -122.608544149958,38.1801849776766,0 -122.608867222131,38.1802221092145,0 -122.609425761784,38.1802645331135,0 -122.609687416233,38.1803104696947,0 -122.609976356328,38.1803249528985,0 -122.610359541119,38.1803307370482,0 -122.610586613119,38.1803044561472,0 -122.611021417328,38.1802653474602,0 -122.611285548733,38.1802482010463,0 -122.611623919334,38.1802267944588,0 -122.611984268282,38.1802324974313,0 -122.612176109875,38.1802556653961,0 -122.612315762562,38.1802966850205,0 -122.612802799099,38.18050108115831,0 contacts #khStyle84754 1 -122.660610765469,38.1807939130032,0 -122.660669679649,38.1807084650231,0 -122.660671267028,38.18070486306161,0 -122.660691074242,38.18065991797241,0 -122.660704406052,38.1806296663648,0 -122.660709346941,38.1806184548403,0 -122.660811341409,38.1805098029449,0 -122.660852781191,38.1804656581695,0 -122.660876870101,38.1804319472877,0 -122.660913835672,38.1803802162748,0 -122.660923963604,38.1803697407862,0 -122.660973076101,38.1803189428594,0 -122.66098769327,38.1803038240449,0 -122.661072213132,38.1802364752445,0 -122.661080003746,38.1802326136739,0 -122.661171635167,38.1801871946907,0 -122.661171638081,38.1801871936544,0 -122.661283831975,38.18014730481651,0 -122.661385360329,38.1801112078194,0 -122.661390884985,38.1801095266428,0 -122.66159481162,38.1800474706553,0 -122.661942769886,38.1799415839936,0 -122.662045779829,38.179887806807,0 -122.662076538559,38.1798689645557,0 -122.662130821813,38.1798357115563,0 -122.662140960742,38.1798295006145,0 -122.662157106294,38.1798115461033,0 -122.662212661513,38.1797497663555,0 -122.662325174868,38.1796246463536,0 -122.662346359356,38.1796010881731,0 -122.662351130703,38.1795957822003,0 -122.66237942794,38.1795387590576,0 -122.662386572422,38.1795243618483,0 -122.662395790583,38.1795057858551,0 -122.662402371754,38.1794853241712,0 -122.662422871216,38.1794215887017,0 -122.662424751027,38.1794157441229,0 -122.662420115796,38.1793303771034,0 -122.662414228147,38.1792219440377,0 -122.662416576209,38.1792132072666,0 -122.662423442184,38.1791876600414,0 contacts #khStyle84754 1 -122.660088730448,38.1805670816334,0 -122.660087349249,38.1805321494994,0 -122.660081068029,38.1803732897154,0 -122.660012664717,38.1801973461053,0 -122.659929108195,38.18005740850321,0 -122.659922559023,38.1799312138601,0 -122.659940839471,38.1798366353919,0 -122.659940566044,38.1797420029096,0 -122.659896720616,38.1796562561196,0 -122.659819293821,38.1795794240676,0 -122.659646537639,38.1794392264631,0 -122.659633623235,38.1794346821184,0 -122.659593805881,38.1794206711005,0 -122.659543232687,38.179402875267,0 -122.659156879439,38.1791584100011,0 -122.659124221786,38.1791222645422,0 -122.65914086064,38.1791055804987,0 contacts #khStyle84754 1 -122.885577399242,38.17963273030021,0 -122.885893425515,38.1794753247179,0 -122.885874154277,38.179249993499,0 -122.88560857437,38.1790920112716,0 -122.885251571219,38.1792178302597,0 -122.885301224896,38.17940714365,0 -122.885577399242,38.17963273030021,0 contacts #khStyle84754 1 -122.694070785271,38.1798131054946,0 -122.694080570384,38.1797958667902,0 -122.694145848707,38.17971492486,0 -122.6941954652,38.179624929318,0 -122.694227241343,38.1795348870297,0 -122.694228766149,38.1793411211582,0 -122.694247716076,38.1792465389904,0 -122.694287341649,38.1791565172359,0 -122.694361877179,38.1790801056912,0 -122.694444035417,38.1790577895178,0 -122.694460467733,38.1790533260928,0 -122.694540803507,38.1791256367289,0 -122.694586829827,38.1792113763898,0 -122.69457981833,38.1796935295761,0 -122.694563009545,38.1797881173926,0 -122.694560073408,38.1797956300783,0 contacts #khStyle84754 1 -122.625206613131,38.1799578863756,0 -122.625307057111,38.179919970929,0 -122.625405765699,38.179875224691,0 -122.625504566432,38.1798124536028,0 -122.625584951604,38.1797225858425,0 -122.625637598217,38.1796146041152,0 -122.625724083731,38.1794481492779,0 -122.625838377065,38.1791465954199,0 -122.625983998115,38.1789983547426,0 -122.626095984358,38.1788880832638,0 contacts #khStyle84754 1 -122.659848316618,38.1788899990316,0 -122.659893232221,38.1788721547784,0 -122.66000908803,38.1789716299979,0 -122.660028307457,38.1790451327735,0 -122.660035030272,38.1790708434687,0 -122.660037465588,38.1791609759823,0 -122.6600627504,38.1793114611516,0 -122.660070796617,38.1793593489105,0 -122.660129690645,38.1794316206105,0 -122.660155675102,38.1795218216284,0 -122.660163777542,38.1796209831613,0 -122.660131980773,38.179706509803,0 -122.660125139303,38.1797966153148,0 -122.660148248491,38.1798913142342,0 -122.660251618829,38.18006735947811,0 -122.660278296326,38.18016206874611,0 -122.660286693802,38.18035135652671,0 -122.660278745052,38.1805765267224,0 -122.660277068424,38.1806240216175,0 -122.660276832083,38.1806307166049,0 contacts #khStyle84754 1 -122.667977664053,38.1795127729329,0 -122.667977504283,38.1793911032514,0 -122.667924068926,38.1792152064345,0 -122.667824881,38.1790572047099,0 -122.667588824489,38.1788672703666,0 -122.667276005454,38.1787672409509,0 -122.666971236588,38.1787798923777,0 -122.66668153095,38.1789322783622,0 -122.666483060506,38.1791074567473,0 -122.666375972353,38.1792738832204,0 -122.666346055954,38.1794179995729,0 -122.666353062861,38.1796027749967,0 -122.666429289288,38.1797877502093,0 -122.666612788361,38.179923463281,0 -122.666879324786,38.180000829887,0 -122.667100421301,38.1800284980735,0 -122.667344558841,38.1800111684072,0 -122.667481880872,38.17994396378,0 -122.667611516308,38.1798406887662,0 -122.667741066785,38.17975543859,0 -122.667878469874,38.1796702105977,0 -122.667954562332,38.1795712881967,0 -122.667977664053,38.1795127729329,0 contacts #khStyle84754 1 -122.656257934775,38.1798231659987,0 -122.656224926877,38.1798573033137,0 -122.656198099526,38.1799473497688,0 -122.656205059278,38.1801366335917,0 -122.656146854014,38.1802220814154,0 -122.655989873058,38.1803703261618,0 -122.655937376282,38.18045579068691,0 -122.655906959067,38.1805503327617,0 -122.655887246031,38.1806449063574,0 -122.655884659776,38.1807395303984,0 -122.655859237707,38.1808340871694,0 -122.655753529441,38.1810050139556,0 -122.655628574108,38.1811713776363,0 -122.655584618584,38.1812613734361,0 -122.655521437571,38.1813422999909,0 -122.655501446355,38.1813557604842,0 -122.655437732689,38.1813986601371,0 -122.655434812995,38.1814006260223,0 -122.6553389324,38.1814544184126,0 -122.655179113932,38.1815981473932,0 -122.655083925261,38.1816564478832,0 -122.654966049229,38.1816831374111,0 -122.654858753478,38.1816908834345,0 -122.654846117326,38.1816917956722,0 -122.654362469837,38.1816498093292,0 -122.65427823321,38.1816480000546,0 -122.654119144438,38.1816445829049,0 -122.653999191179,38.1816577465061,0 -122.653883455642,38.1816844412857,0 -122.653773343682,38.1817291776907,0 -122.65367246606,38.1817829539039,0 -122.653582963645,38.1818457762968,0 -122.653245354295,38.1818519159183,0 -122.652730805548,38.1818612714158,0 -122.652610245125,38.1818519004511,0 -122.652491889872,38.1818290171178,0 -122.652254465962,38.1817832479701,0 -122.65213970051,38.1817558686992,0 -122.651829717628,38.1815116068251,0 -122.651818449837,38.181480029367,0 -122.65165698854,38.1812181844955,0 -122.651624591321,38.1811279625252,0 -122.651624350048,38.181028823898,0 -122.65165617872,38.1809387934314,0 -122.651666378886,38.1807450542888,0 -122.651716739956,38.1806595853233,0 -122.651875849474,38.18051585893091,0 -122.651972466412,38.1804575652872,0 -122.652079723088,38.1804128220561,0 -122.6521954787,38.1803816228356,0 -122.652314738001,38.1803639527353,0 -122.652357188634,38.180365656184,0 -122.652410502661,38.1803677955345,0 -122.652557323991,38.1803736869593,0 -122.652675869581,38.1803560143694,0 -122.65269630818,38.1803497665785,0 -122.652778066194,38.1803247742628,0 -122.652809743367,38.1802662869036,0 -122.652773024565,38.1802444759279,0 -122.652756372178,38.1802345843985,0 -122.652643339069,38.1802072100654,0 -122.652624503647,38.1802026484946,0 -122.652503189505,38.1802022877216,0 -122.652385550543,38.18017940641181,0 -122.652337536235,38.1801637903194,0 -122.652273684842,38.1801430233595,0 -122.652245750889,38.1801296200065,0 -122.652185665223,38.18010078948261,0 -122.652169733289,38.180093144955,0 -122.652086583804,38.1800207970603,0 -122.652011284194,38.1799484724879,0 -122.651972222853,38.1797590928139,0 -122.65195887299,38.1795652834488,0 -122.651927211168,38.1794705574582,0 -122.651880520823,38.1793847992185,0 -122.65181525543,38.1793034918729,0 -122.651773582001,38.1792132422702,0 -122.651751910993,38.1791185460054,0 -122.651724268346,38.1789292002602,0 -122.651721360361,38.1786407902905,0 -122.651642583781,38.1785802979698,0 -122.651638883607,38.1785774566123,0 -122.651517615101,38.1785680824228,0 -122.651506241817,38.1785787322996,0 -122.65146952587,38.1786131128686,0 -122.651455252963,38.1786264779124,0 -122.65146741523,38.1789194217645,0 -122.651455546567,38.1790140180308,0 -122.651356075073,38.1792088118804,0 -122.651338946557,38.179242354336,0 -122.651322284115,38.1792749840563,0 -122.65132823383,38.1793741397493,0 -122.651381345971,38.1794599173695,0 -122.651411601357,38.1795501330397,0 -122.651415935356,38.17983854722371,0 -122.65143194022,38.1799242140946,0 -122.651422968747,38.1800098064458,0 -122.651378273709,38.18010430474101,0 -122.651243469947,38.1802390904892,0 -122.651141835932,38.1803018748228,0 -122.651016846043,38.1803240328833,0 -122.650896894406,38.1803371933273,0 -122.650531502622,38.1803406072101,0 -122.650410837261,38.1803537650224,0 -122.650293696825,38.1803759457992,0 -122.650186439132,38.1804206873937,0 -122.650070682624,38.1804518846286,0 -122.649952136274,38.180469554584,0 -122.649587457429,38.1804729676636,0 -122.649465450867,38.1804680954059,0 -122.649419087934,38.1804607664556,0 -122.649378277588,38.1804543152299,0 -122.649349218069,38.1804497215442,0 -122.649227189947,38.180449355243,0 -122.649205045262,38.1804537952302,0 -122.649066647376,38.1804815437614,0 -122.649005753081,38.1804937529012,0 contacts #khStyle84754 1 -122.601047406372,38.1809977983055,0 -122.601091821239,38.1809346002817,0 -122.6012243308,38.1807460513479,0 -122.601303121081,38.1805615633871,0 -122.60134696861,38.1803724499549,0 -122.601344629577,38.1802778104954,0 -122.601310891785,38.1801830639583,0 -122.601277129532,38.1800928235881,0 -122.601216841166,38.1800250240328,0 -122.601089719527,38.1799119338025,0 -122.600809836844,38.1796766528576,0 -122.600400892566,38.17942290512601,0 -122.600228325263,38.1792871510513,0 -122.600222541702,38.1792826012661,0 -122.599993181826,38.1790745286894,0 -122.599823518907,38.1789117226353,0 -122.599640002694,38.1788029440381,0 -122.599457766269,38.1787212071104,0 -122.599316032399,38.1786711525541,0 -122.599005957598,38.1784768331221,0 contacts #khStyle84754 1 -122.57554474958,38.179344327462,0 -122.575400273002,38.1791545401496,0 -122.574970653978,38.1784814940986,0 -122.574950506189,38.1784499300029,0 -122.574767465887,38.1781428390043,0 contacts #khStyle84754 1 -122.599005957598,38.1784768331221,0 -122.59883884107,38.1783721028267,0 -122.59863246809,38.1782677504839,0 -122.598301316627,38.1781449440707,0 -122.598074766679,38.1780765715186,0 -122.598068054172,38.178074895817,0 contacts #khStyle84754 1 -122.575503325277,38.1795965275065,0 -122.575319226537,38.1793480149178,0 -122.575148713489,38.1790950451346,0 -122.574641249738,38.1782829896541,0 -122.574451576311,38.1779794646168,0 contacts #khStyle84754 1 -122.886407980302,38.1778535830188,0 -122.886072725013,38.1779929458421,0 -122.886018166433,38.1782001789294,0 -122.886252227526,38.1784302297215,0 -122.886573134244,38.1783404203545,0 -122.886598463782,38.1781151331153,0 -122.886407980302,38.1778535830188,0 contacts #khStyle84754 1 -122.58814436873,38.1777667488121,0 -122.588209473331,38.1779070543025,0 -122.588271939397,38.1779658556693,0 -122.588334658925,38.1779795952881,0 -122.588541472189,38.1780028545476,0 -122.588667473126,38.1780573730049,0 -122.588729889061,38.178125186473,0 -122.588792639071,38.1782605949915,0 -122.588845778633,38.1783283757723,0 -122.5889269254,38.178364711174,0 -122.588999200314,38.1783289151658,0 -122.589135414459,38.1782167373781,0 -122.589365846958,38.1781003840985,0 -122.589449412448,38.1780871587661,0 -122.58965844291,38.1780969050625,0 -122.5897757808,38.1781694169726,0 -122.589900968394,38.1782419562977,0 -122.5899916446,38.1782332617809,0 -122.590080944068,38.1782155498456,0 -122.590129284242,38.1781210878324,0 -122.590167370249,38.1779325082766,0 contacts #khStyle84754 1 -122.598068054172,38.178074895817,0 -122.59772700643,38.1779897564865,0 -122.597489629826,38.1779438768656,0 -122.597265246807,38.1778710039511,0 -122.596914609351,38.1777886828665,0 -122.596802775103,38.177752247146,0 -122.596679747056,38.1776752163433,0 -122.596577512497,38.1775802321124,0 -122.596654778043,38.1775444485953,0 -122.596799436706,38.1775809976616,0 -122.596999041408,38.1776177359592,0 -122.597226699198,38.17761401420211,0 -122.597323360656,38.1776061848663,0 contacts #khStyle84754 1 -122.663040917109,38.177737380547,0 -122.66303045098,38.1775082902849,0 -122.663026266455,38.1774166959876,0 -122.663027858401,38.1774039914366,0 -122.663036529116,38.1773347946039,0 -122.663038120007,38.1773220984455,0 -122.66304096882,38.1773151887857,0 -122.663057606397,38.1772748351194,0 -122.663077089742,38.1772275791136,0 -122.663097632619,38.1771941273941,0 -122.663119326627,38.17715880115131,0 -122.663129575938,38.1771421112931,0 -122.663196312911,38.1770611908102,0 -122.663201163743,38.17705884504981,0 -122.663345144192,38.1769892189752,0 contacts #khStyle84754 1 -122.597323360656,38.1776061848663,0 -122.597440159647,38.17759672433241,0 -122.597568455939,38.1776242035873,0 -122.597824236204,38.1776971839327,0 -122.59797760725,38.1777067239435,0 -122.598200294927,38.1776984769464,0 -122.598334486855,38.1777126137301,0 -122.598421382354,38.1777217678689,0 -122.598789147256,38.1778041432368,0 -122.598925293862,38.1778316479505,0 -122.599391880018,38.1778512727258,0 -122.599702240445,38.177861348318,0 -122.599821335347,38.1778752748202,0 -122.599975666877,38.1778397528825,0 -122.600097222578,38.1777951061079,0 -122.600446091579,38.1776791360863,0 -122.600565973683,38.1776795457345,0 -122.600802760693,38.1777028858134,0 -122.600959183022,38.1776763822451,0 -122.601498059424,38.1775250073694,0 -122.601797271135,38.1774854705226,0 -122.6019767723,38.1774139815674,0 -122.602113556242,38.1773243219061,0 -122.602215521365,38.1772075060346,0 -122.60233987637,38.17704119732991,0 -122.60241165024,38.1769648349578,0 -122.60253553951,38.1768841434689,0 -122.602620357258,38.1769024568559,0 -122.602731876615,38.1770628738785,0 -122.602764802032,38.1771102358838,0 -122.602840690418,38.1771961127281,0 -122.602943030337,38.1772730668362,0 -122.603053244296,38.1773455413267,0 -122.603326008575,38.1774456049525,0 -122.603411467508,38.1774774387353,0 -122.603564692454,38.1775140085364,0 -122.603692990943,38.1775414811137,0 -122.603940433538,38.1775738635165,0 -122.604138096096,38.1775745329998,0 -122.604193490968,38.177566348548,0 -122.604257361951,38.1775569117375,0 -122.60437101651,38.1775212463092,0 -122.604479132744,38.1774540181861,0 -122.604616335237,38.1774184321853,0 -122.604752580695,38.1774279054273,0 -122.604880141582,38.1774598804789,0 -122.604965430976,38.17752325640691,0 -122.605066962744,38.1776182309915,0 -122.605177528307,38.1777582986353,0 -122.605278914867,38.177880310126,0 -122.605305218794,38.1779007143003,0 -122.60538977275,38.1779663033897,0 -122.605545960542,38.17811553719831,0 -122.605639814337,38.1781789415306,0 -122.605746610001,38.1782243643807,0 -122.605859163048,38.1782607940182,0 -122.605978211295,38.1782837266498,0 -122.606099448891,38.1782976540108,0 -122.606218642736,38.1782935493086,0 -122.606473117023,38.1782132934772,0 -122.606576644879,38.1781714421715,0 -122.606738439862,38.1781060360048,0 -122.606884084551,38.1780930070771,0 -122.607033127776,38.17811153323941,0 -122.607271986564,38.1781483860369,0 -122.607623351153,38.1782306786669,0 -122.607715957819,38.1782570199,0 -122.607847793962,38.1782945194887,0 -122.608052280742,38.1783537867102,0 -122.608316333581,38.1783501654807,0 -122.608365602513,38.1783389963545,0 -122.608551394275,38.17829687767521,0 -122.608710958626,38.1782162991337,0 -122.608822856666,38.1781085232934,0 -122.608933872249,38.1780322882407,0 -122.609036011632,38.1780146048302,0 -122.609156135042,38.1779699438754,0 -122.609256205697,38.1779387345633,0 -122.609440294955,38.1778086680874,0 -122.609548286833,38.177763966196,0 -122.609703968635,38.1777419547624,0 -122.609806508713,38.17778285345581,0 -122.609899339958,38.1779048324205,0 -122.609997351944,38.1781259664091,0 -122.610063283579,38.1782072991135,0 -122.610162184545,38.1782617041487,0 -122.610239156319,38.1782799858723,0 -122.610529515761,38.1782944724314,0 -122.610640740029,38.178312868008,0 -122.61084434783,38.1784036712951,0 -122.610989513385,38.1784807609643,0 -122.611082826393,38.1785126153078,0 -122.611287555764,38.1785268150676,0 -122.611390337096,38.1785226505384,0 -122.61164737407,38.1784964671749,0 -122.611912117011,38.1784973464178,0 -122.612029764278,38.17851576200411,0 -122.612148101317,38.1785386860255,0 -122.612321337388,38.1785708045424,0 -122.612432371622,38.1786252479075,0 -122.612443455042,38.1786883723542,0 -122.612473304461,38.1788461905612,0 -122.61252439709,38.1789004351027,0 -122.612660407877,38.1789549610404,0 -122.612728650914,38.1790047560576,0 -122.61272829322,38.1790723488325,0 -122.612599272994,38.1791800716433,0 -122.612531745739,38.1792292399398,0 -122.612445252508,38.1792922176879,0 -122.612361711035,38.1794361411159,0 -122.612349078536,38.1795307307587,0 -122.612379999704,38.1796209585692,0 -122.612442462736,38.1796842533717,0 -122.612510658575,38.1797430608811,0 -122.61259531516,38.1797929103796,0 -122.612606523803,38.1797996040258,0 contacts #khStyle84754 1 -122.83905836035,38.17672486776161,0 -122.839124545283,38.1768286036546,0 -122.83910538302,38.1772656846771,0 -122.838928564187,38.1776800152861,0 -122.838824868047,38.1781034598711,0 -122.838792634621,38.1789641112941,0 -122.838358573509,38.179206844806,0 -122.837977920704,38.1794992202886,0 -122.837846731863,38.179927131731,0 -122.837854342205,38.1803552372835,0 -122.838055822334,38.1812117087142,0 -122.838400562563,38.1815096031716,0 -122.838874624488,38.1817400825577,0 -122.839241077036,38.1820650422448,0 -122.839480741056,38.1824439003199,0 -122.839595062256,38.1828676470368,0 -122.839736750348,38.1841521269048,0 -122.839742002552,38.1850083232308,0 -122.839922473774,38.18586025532,0 -122.839971847448,38.1862884179214,0 -122.839866023697,38.1867028473711,0 -122.839144100006,38.1883286061493,0 -122.839068571368,38.1887565955674,0 -122.83910545192,38.1891847409865,0 -122.839272269551,38.1895950415793,0 -122.839611265042,38.18992897393851,0 -122.840030686473,38.1902044350082,0 -122.840490535419,38.1904348876597,0 -122.841311521129,38.1909992962069,0 -122.84177960668,38.1912207425131,0 -122.84228599717,38.1913881640373,0 -122.842815800559,38.1914564775742,0 -122.843356380834,38.1913265281954,0 -122.843850835498,38.1914038017794,0 -122.844269876371,38.1917017782828,0 -122.844563524128,38.1920626726485,0 -122.844768950184,38.192459498105,0 -122.84492187937,38.1928742779252,0 -122.845183030464,38.1932486458938,0 -122.845794280446,38.1939614483903,0 -122.846196227171,38.1947595886718,0 -122.846466670583,38.1951339659425,0 -122.846823221735,38.195463393934,0 -122.847260603459,38.1957118149299,0 -122.847800464156,38.1957666002925,0 -122.848344458062,38.1957222511374,0 -122.849424760185,38.1955524228344,0 -122.849947152384,38.1955981631266,0 -122.850423145306,38.1958195848153,0 -122.85166086999,38.1966818695038,0 -122.852158938793,38.1967591124752,0 -122.852709773243,38.1966877143421,0 -122.853162556202,38.1969226140375,0 -122.853381275128,38.1973059219636,0 -122.853420367087,38.1977430771821,0 -122.853950654916,38.198487277397,0 -122.854283260004,38.199749444464,0 -122.854602758352,38.2006105382894,0 -122.854887713963,38.2008992951448,0 -122.855418456815,38.20071520302071,0 -122.855716811317,38.2003685944967,0 -122.856069296575,38.199539884575,0 -122.856741877497,38.1983690955154,0 -122.857022789931,38.1979909183121,0 -122.857381736651,38.197675923989,0 -122.857909749063,38.1975954608625,0 -122.858464308547,38.1976276839108,0 -122.858995521613,38.19773648203441,0 -122.859463356039,38.19795335064191,0 -122.859851082333,38.198255739005,0 -122.860129112478,38.1986255871829,0 -122.860334989918,38.1990268913192,0 -122.860442685374,38.1994461016857,0 -122.860392967449,38.1998741346494,0 -122.860264388661,38.2002930599093,0 -122.860068029372,38.20069387812741,0 -122.859814953008,38.2010766023692,0 -122.859484866783,38.2014141702054,0 -122.858614824447,38.202084540745,0 -122.858640292634,38.2016519728031,0 -122.858744604082,38.2012375260065,0 -122.859100985236,38.2004088119865,0 -122.859096077616,38.1999942318261,0 -122.858790565544,38.1996243477712,0 -122.858264961787,38.1995606180979,0 -122.857720839378,38.1996590880237,0 -122.857274538506,38.1999244070051,0 -122.857068553732,38.2003116897069,0 -122.857005243806,38.20074421072,0 -122.857042217767,38.2011813617603,0 -122.856910074822,38.20158676022,0 -122.85661488885,38.2019559068258,0 -122.856229157478,38.2022663591847,0 -122.855760465217,38.2024730634583,0 -122.855218138212,38.2025534991155,0 -122.854667075984,38.2025392902623,0 -122.8541626669,38.202398962829,0 -122.853752795071,38.2021055404165,0 -122.853478701134,38.2017401885034,0 -122.853089503571,38.2009330782838,0 -122.85279279106,38.2001080592225,0 -122.852086676948,38.1989490551834,0 -122.851817618184,38.1985746930512,0 -122.850887556228,38.1975145320638,0 -122.850528102998,38.197194125394,0 -122.850115401284,38.1969096986805,0 -122.849651235572,38.1966612536829,0 -122.849155057347,38.196534433809,0 -122.848674247604,38.1967410941544,0 -122.848153284601,38.1968620812364,0 -122.847605873553,38.1968298188446,0 -122.84710764161,38.1966624313891,0 -122.846636649808,38.1964410028924,0 -122.846197143551,38.1961835642979,0 -122.845865940468,38.1958496619181,0 -122.844640197949,38.1944285568549,0 -122.843797111204,38.1933233923677,0 -122.843345490249,38.1930704327649,0 -122.842829651194,38.1929751031186,0 -122.842279558797,38.1930419496322,0 -122.841767763175,38.1932215021335,0 -122.841265152329,38.1932793962086,0 -122.840757621304,38.1931390063218,0 -122.8400401497,38.1928811621936,0 -122.839224505823,38.192316752395,0 -122.837727729307,38.19105742246851,0 -122.837256374851,38.1908674991394,0 -122.83670692312,38.1908126515662,0 -122.836171136436,38.19087047708321,0 -122.835655496982,38.1910139475455,0 -122.834196027691,38.1915886705664,0 -122.833342514213,38.1921597414966,0 -122.833152566547,38.1925109562048,0 -122.833393883324,38.1929484096799,0 -122.833082507283,38.1931822871686,0 -122.831985107116,38.1934916342886,0 -122.831918557101,38.1938745693924,0 -122.83190293646,38.1943026407727,0 -122.831495738194,38.1946084751925,0 -122.830986560333,38.1947203908206,0 -122.829871706353,38.1946962301084,0 -122.829391316904,38.1948577498204,0 -122.829034719413,38.1951906876391,0 -122.828905905456,38.1956366167676,0 -122.828533129113,38.19586588538531,0 -122.827961402155,38.1958605329206,0 -122.826907696008,38.1956291471484,0 -122.826369993709,38.1955742688877,0 -122.825817844186,38.1955914665297,0 -122.825305395585,38.1957213776693,0 -122.824866842159,38.1959910919458,0 -122.824708390073,38.196432465539,0 -122.824462596342,38.1966844442339,0 -122.823942811875,38.1964493318736,0 -122.823656051511,38.1960793838298,0 -122.823274186537,38.1957813903541,0 -122.822783221562,38.1955868729415,0 -122.820691939175,38.19511501118921,0 -122.819646955137,38.1948340047599,0 -122.819155534825,38.1949729342733,0 -122.818784648347,38.1952923001225,0 -122.818610882162,38.1957066042501,0 -122.818484569257,38.1961254885432,0 -122.818417476654,38.1965534778066,0 -122.818444592338,38.1969861205916,0 -122.818379294418,38.1974096063261,0 -122.818115706071,38.1977742002931,0 -122.817630874798,38.1979807275642,0 -122.817154691667,38.1982954165296,0 -122.816808168293,38.198425551781,0 -122.816762214168,38.1979658414468,0 -122.816808663095,38.1975197956128,0 -122.816926065671,38.1971008991295,0 -122.817117309918,38.1966956375794,0 -122.817258241606,38.1962857902788,0 -122.817443853514,38.1954208812689,0 -122.817350998262,38.19501967851351,0 -122.816963522484,38.1946946179748,0 -122.816445174618,38.1946126871686,0 -122.815345410778,38.1946920562592,0 -122.814829631726,38.194583084859,0 -122.813823048827,38.1942299875643,0 -122.813267027293,38.1942290949276,0 -122.812801547153,38.19440859591281,0 -122.812601328101,38.1948273549554,0 -122.812227271512,38.1951196575548,0 -122.811722525592,38.195299090785,0 -122.811194386208,38.1954153962341,0 -122.810725242536,38.1956264268442,0 -122.810327250989,38.1959231906523,0 -122.810061106121,38.196296775107,0 -122.809740067584,38.1966432315226,0 -122.80931855863,38.1969219283568,0 -122.808787548536,38.1970382182968,0 -122.808334111626,38.1968346896355,0 -122.807900805946,38.1965771174111,0 -122.807312562866,38.1966076871682,0 -122.806912987623,38.1964177610583,0 -122.806821058287,38.1959579700152,0 -122.807251219,38.1957829403608,0 -122.807810464138,38.1956486790483,0 -122.808807795972,38.1953078490022,0 -122.810345057505,38.1948417180307,0 -122.810782136252,38.1946081054123,0 -122.811042332889,38.1941849407414,0 -122.810809670153,38.1939006677816,0 -122.810282396577,38.1936880136801,0 -122.809902893092,38.1933313988253,0 -122.810021603113,38.1929710923208,0 -122.81033994422,38.1928365969154,0 contacts #khStyle84754 1 -122.838785606462,38.1764971108806,0 -122.838877071892,38.1764407210138,0 -122.83905836035,38.17672486776161,0 contacts #khStyle84754 1 -122.883379248681,38.17640855674391,0 -122.883245362673,38.176687808945,0 -122.883371350828,38.176886213127,0 -122.883734820309,38.1769541735641,0 -122.883661963858,38.1767738485654,0 -122.883379248681,38.17640855674391,0 contacts #khStyle84754 1 -122.8367853591,38.1769965736587,0 -122.83673960518,38.177032555405,0 -122.836694293572,38.1770324915604,0 -122.836648542233,38.17706847747171,0 -122.836421619889,38.177068157384,0 -122.836286635212,38.1769598176873,0 -122.836286716243,38.176923767407,0 -122.836241841975,38.1768876536102,0 -122.836243834207,38.1766353057519,0 -122.836334970347,38.176567841053,0 -122.836335407574,38.176531789175,0 -122.836426909834,38.176459819671,0 -122.836472223744,38.1764598836236,0 -122.836517615912,38.1764238972716,0 -122.836563286016,38.1764239616916,0 -122.836609036991,38.1763879758104,0 -122.836790289799,38.1763882312313,0 -122.836970504756,38.1765326843996,0 -122.83696807547,38.17682108204391,0 -122.836922690704,38.176852563328,0 -122.836922253769,38.176888613107,0 -122.836876502634,38.1769245991076,0 -122.836831188434,38.17692453531181,0 -122.836785439889,38.1769605212805,0 -122.8367853591,38.1769965736587,0 contacts #khStyle84754 1 -122.587093665937,38.1759312668053,0 -122.587067808706,38.1759923732321,0 -122.58689439011,38.1762486176114,0 -122.586702774934,38.17656788506551,0 -122.586573695913,38.1766800852893,0 -122.586386893359,38.1767785624131,0 -122.58617832652,38.1769400498698,0 -122.585993306811,38.1771016203236,0 -122.585942388021,38.1771465026364,0 -122.585942031276,38.1772095890261,0 -122.585995906514,38.1772728674435,0 -122.586068136282,38.177301192803,0 -122.586077076175,38.1773046986341,0 -122.586222161907,38.1772646557926,0 -122.586740676389,38.1770592015123,0 -122.586916648443,38.1769832168761,0 -122.587079521662,38.1769522483307,0 -122.587313422119,38.1769801116619,0 -122.587475048447,38.1770437696546,0 -122.587636728801,38.17722459040741,0 -122.587815662707,38.1773829404514,0 -122.587859857301,38.1775182840669,0 -122.588056885497,38.1776316349066,0 -122.588138263077,38.1777535906244,0 -122.58814436873,38.1777667488121,0 contacts #khStyle84754 1 -122.72960397416,38.1772307070881,0 -122.729583951456,38.1772698870268,0 -122.729657540788,38.1773421580932,0 -122.729759367178,38.1774009756791,0 -122.729856265336,38.1774417566361,0 -122.729949762127,38.1774388741303,0 -122.729992221115,38.1774375650951,0 -122.730023820242,38.1774293071058,0 -122.73011186431,38.1774062979667,0 -122.730164137326,38.1773885074384,0 -122.730322283311,38.1773346840513,0 -122.730418801139,38.17728533802011,0 -122.730662525265,38.1772768884027,0 -122.730774815837,38.1773041852923,0 -122.731091474971,38.1774491166795,0 -122.731176738854,38.1775090567929,0 -122.73118151179,38.1775124121394,0 -122.731245793029,38.1775936733264,0 -122.731297196531,38.1776839173806,0 -122.731337539446,38.177774135939,0 -122.731382462798,38.1779770220783,0 -122.731427153921,38.1780492254868,0 -122.731427573036,38.1780501455816,0 -122.731471245954,38.1781460218625,0 -122.731501127717,38.1782116219142,0 -122.73156321937,38.178306396725,0 -122.731603562947,38.1783966151853,0 -122.731633542825,38.1784913160708,0 -122.73165103474,38.1785859882212,0 -122.73168566975,38.1786761935176,0 -122.731728511291,38.1787664176754,0 -122.731930239937,38.1791183713526,0 -122.732000586678,38.1791530981785,0 -122.732003609055,38.1791545901798,0 -122.732012438474,38.1791524259456,0 -122.732065533505,38.1791394114724,0 -122.7320946768,38.179132267955,0 -122.732112952953,38.17910219809881,0 -122.732135465189,38.17906515855271,0 -122.732152112889,38.1790377679441,0 -122.732136383575,38.1785600660025,0 -122.73218058445,38.1784745481389,0 -122.732200215639,38.1783754550108,0 -122.73223158808,38.1782854013926,0 -122.732315684052,38.1782180001693,0 -122.732358117051,38.1781279718944,0 -122.732343138457,38.1780287993249,0 -122.732305833761,38.17797705438251,0 -122.732291073297,38.1779565802782,0 -122.732284564397,38.1779475518392,0 -122.732206977649,38.1778911749932,0 -122.732104147705,38.177816455475,0 -122.732063610139,38.1777796706837,0 -122.732038641704,38.1777570136823,0 -122.73194483234,38.1776718884744,0 -122.731940090578,38.177664398769,0 -122.731922252262,38.1776362227826,0 -122.731884405569,38.1775764430734,0 -122.731839119826,38.177504913074,0 -122.731807704003,38.1773155769928,0 -122.731633589847,38.1771204531296,0 -122.731594148948,38.1770762528643,0 -122.731579939421,38.1770589061025,0 -122.731531278362,38.1769995013899,0 -122.731516405125,38.1769687298811,0 -122.731506549194,38.1769483387532,0 -122.731489848663,38.1769137866677,0 -122.731493781479,38.1768146574984,0 -122.731550826556,38.1767291694076,0 -122.731624250765,38.1766527315352,0 -122.731655606588,38.176567184289,0 -122.731653830505,38.1764680419759,0 -122.731630562899,38.1763954910986,0 -122.731628153205,38.176387977408,0 -122.731624905202,38.1763778497734,0 -122.731592322814,38.1763117345421,0 -122.731584886319,38.1762966446048,0 -122.731584528925,38.1762935883508,0 -122.731573817227,38.1762019871872,0 -122.731541697604,38.1761072813271,0 -122.731524562691,38.1758188397515,0 -122.731500649403,38.1757241527598,0 -122.731439354268,38.1756072298515,0 -122.731432227563,38.1755936353514,0 -122.731413136773,38.17555721881411,0 -122.731388866925,38.1754625309749,0 -122.731385161076,38.1754367194478,0 contacts #khStyle84754 1 -122.832348506114,38.1759357706652,0 -122.832601898266,38.1757513837663,0 -122.832903970875,38.1756526788847,0 -122.833583128851,38.1755725425481,0 -122.833907988087,38.1754964024568,0 -122.834543938868,38.1752719991126,0 -122.834864011388,38.1752589356647,0 -122.835084779385,38.17545301991601,0 -122.834940443499,38.1756961525792,0 -122.834759355487,38.1759392326652,0 -122.834552291689,38.1761507323359,0 -122.834248391824,38.176267461938,0 -122.833914657237,38.1763255650543,0 -122.833572470246,38.1763340868318,0 -122.833225499957,38.1764056868398,0 -122.832916914668,38.1763872193443,0 -122.832665776784,38.1762111124037,0 -122.832348506114,38.1759357706652,0 contacts #khStyle84754 1 -122.838785606462,38.1764971108806,0 -122.838785661738,38.1764721379961,0 -122.838740786508,38.1764360251539,0 -122.838740866325,38.1763999748719,0 -122.838650757162,38.1763277507331,0 -122.838651193239,38.1762917009464,0 -122.838470975545,38.1761472482601,0 -122.838471055495,38.1761111979761,0 -122.838335713328,38.1760028559268,0 -122.838336588437,38.1759307605511,0 -122.838291344886,38.1758991522681,0 -122.838292816367,38.1757189044311,0 -122.838247939184,38.17568279139031,0 -122.838250363359,38.1753943936764,0 -122.83829574664,38.1753629139736,0 -122.838296621788,38.1752908143934,0 -122.838342012325,38.1752548294317,0 -122.838432992211,38.1752549563385,0 -122.838478385322,38.1752189692294,0 -122.838569365164,38.1752190960307,0 -122.838704350029,38.1753274331356,0 -122.838750019452,38.1753274967071,0 -122.838839771267,38.1753997223881,0 -122.838839691501,38.1754357726763,0 -122.838884568831,38.1754718833937,0 -122.838884489082,38.1755079357798,0 -122.838929720032,38.1755440469711,0 -122.838929284098,38.17558009676311,0 -122.838974158898,38.1756162095398,0 -122.838973643285,38.175688309618,0 -122.839018884348,38.17571991553681,0 -122.839018451115,38.1757559653316,0 -122.839108557276,38.1758281912909,0 -122.839108477641,38.1758642415763,0 -122.839153355367,38.1759003521874,0 -122.839152916883,38.175936401974,0 -122.839243028716,38.1760086278344,0 -122.839242949147,38.1760446781185,0 -122.839287824387,38.1760807907713,0 -122.839287388626,38.17611684056081,0 -122.839332622806,38.1761529536936,0 -122.839328664346,38.1766531421476,0 -122.839282914541,38.1766891290835,0 -122.839237600482,38.1766890662159,0 -122.839191853268,38.1767250531199,0 -122.83905836035,38.17672486776161,0 contacts #khStyle84754 1 -122.654963165282,38.17564021868961,0 -122.65468008257,38.175747533702,0 -122.654298886033,38.1757779494805,0 -122.653864471784,38.1757451201632,0 -122.653452756492,38.1755906852232,0 -122.653223871514,38.1755539577318,0 -122.652903927509,38.1754583762643,0 -122.652667559949,38.1753450150859,0 -122.652446260583,38.17521367512421,0 -122.652364415091,38.1751683706521,0 contacts #khStyle84754 1 -122.590167370249,38.1779325082766,0 -122.590212953573,38.1777068050828,0 -122.590243277144,38.17764382369741,0 -122.590296359641,38.1775944408375,0 -122.590372965054,38.1775496466265,0 -122.590449444341,38.1775273832302,0 -122.590703655732,38.17749672955721,0 -122.590820960093,38.1774475712526,0 -122.590965657277,38.177348939784,0 -122.5910906596,38.1773268457075,0 -122.591218365211,38.1773317985191,0 -122.591506148609,38.1774229295406,0 -122.591677458238,38.1774145154005,0 -122.591623728806,38.1773242025158,0 -122.591517782543,38.1772562385007,0 -122.590761363767,38.1768750674321,0 -122.590483389186,38.1766893374372,0 -122.590273893672,38.1765083530275,0 -122.590235688642,38.1764496377352,0 -122.590220368371,38.1763819901105,0 -122.590220436606,38.1762422962173,0 -122.590229889537,38.1762107855091,0 -122.590281796022,38.1761163358947,0 -122.590396571896,38.1760085877234,0 -122.590602096279,38.1758786259019,0 -122.590835961063,38.1757848129956,0 -122.591053161606,38.1757360039675,0 -122.591319160877,38.1756377962171,0 -122.59140274838,38.1756200632942,0 -122.591578335208,38.17561166423111,0 -122.591922046626,38.1756534206943,0 -122.592197819271,38.175721976796,0 -122.592305191105,38.1757899451819,0 -122.592672951011,38.1759985150338,0 -122.592822449239,38.1760621234325,0 -122.592916464785,38.1760939946413,0 -122.593024464025,38.1760493079787,0 -122.593034015923,38.1759997723326,0 -122.592982426537,38.1759094674946,0 -122.592745936923,38.1757058621717,0 -122.592425448949,38.175465913489,0 -122.592380056946,38.17541618635471,0 -122.592341875881,38.1753529655536,0 -122.592303357689,38.17522214961151,0 -122.592258569781,38.17487532678761,0 contacts #khStyle84754 1 -122.678445561137,38.1746797910812,0 -122.678427702283,38.1746842481864,0 -122.678429599115,38.1746923900412,0 -122.678446611559,38.1747654132437,0 -122.678474995189,38.174801541293,0 -122.678489187386,38.174819605788,0 contacts #khStyle84754 1 -122.656309689886,38.1747294144466,0 -122.656578786187,38.1747121805309,0 -122.656837935083,38.1746859041629,0 -122.657142688552,38.1746732810424,0 -122.657295220821,38.1747097790494,0 -122.657417027211,38.1747551972816,0 -122.65760775574,38.1748639099182,0 -122.657714976829,38.1749768786732,0 -122.657966064144,38.1751488537719,0 -122.658073136029,38.1752933669673,0 -122.658103842492,38.1754421639581,0 -122.658202850838,38.1757849309839,0 -122.658370327665,38.1759836963021,0 -122.658553063624,38.17612392502521,0 -122.659011071861,38.1763010077232,0 -122.659460706223,38.1764375064073,0 -122.659841757422,38.1764386165612,0 -122.660070373411,38.1763807010659,0 -122.660322158604,38.176250751569,0 -122.660436456167,38.1760708336331,0 -122.66048243546,38.1758501592221,0 -122.660472444291,38.1756517980605,0 contacts #khStyle84754 1 -122.646433551547,38.1746503772449,0 -122.646667020606,38.175214368676,0 -122.646689478855,38.1754397498157,0 -122.646666445335,38.1756289429364,0 -122.646559812355,38.1758404157796,0 -122.6462852941,38.1760919361183,0 -122.646049225639,38.1762128904619,0 -122.645652932203,38.1762657608058,0 -122.645180181647,38.1761922295004,0 -122.644806079891,38.1760829415652,0 -122.64449355648,38.1760774858845,0 -122.64412792511,38.1761349538196,0 -122.643769151831,38.1761023154126,0 -122.643311586654,38.1759882650848,0 -122.642808409011,38.17600925852401,0 -122.642411960209,38.1760936647395,0 -122.642031273725,38.1761646000345,0 -122.641756503167,38.1761727705828,0 -122.641543322109,38.1761360663841,0 -122.641214917131,38.1760224019355,0 -122.640902704025,38.1759538493801,0 -122.640284840842,38.17593392382,0 -122.63988853972,38.1758425771182,0 -122.639629285493,38.1755984395161,0 -122.639530096585,38.175453931819,0 -122.639484492897,38.1752960735942,0 -122.639507098807,38.175052802832,0 -122.639527522118,38.174962741818,0 contacts #khStyle84754 1 -122.678696575773,38.1745543061619,0 -122.678651542248,38.174572207369,0 -122.678519196677,38.1746484498569,0 -122.678445561137,38.1746797910812,0 contacts #khStyle84754 1 -122.679051691111,38.1746093579356,0 -122.679013554681,38.1745191275733,0 -122.679009288514,38.1745154280257,0 -122.679004938975,38.1745116561798,0 -122.678982276823,38.1744920039374,0 -122.678976966579,38.1744926818223,0 -122.678809496465,38.1745140602724,0 -122.678696575773,38.1745543061619,0 contacts #khStyle84754 1 -122.573338527784,38.1762359930995,0 -122.573291626851,38.176129768317,0 -122.572543403487,38.1744350917458,0 contacts #khStyle84754 1 -122.667747591082,38.1855415077321,0 -122.667767581043,38.1855351828966,0 -122.667860514068,38.1855057787748,0 -122.667984814634,38.1854790945874,0 -122.668102753529,38.1854388733874,0 -122.668125982198,38.1854254173207,0 -122.668187904671,38.185389546388,0 -122.668318621486,38.1852862525026,0 -122.668358370219,38.1852548425234,0 -122.668408861578,38.1852092193368,0 -122.668419886659,38.1851992572384,0 -122.668437913908,38.1851829680784,0 -122.668443575436,38.1851691796302,0 -122.668513686498,38.1849984261764,0 -122.668516595822,38.1849955469092,0 -122.668647288615,38.1848662040296,0 -122.66866351573,38.18485014448,0 -122.668670572727,38.1848462426317,0 -122.668760818434,38.1847963452619,0 -122.668836409431,38.1847758329764,0 -122.66898268171,38.1847361405286,0 -122.668990902164,38.18473390981951,0 -122.668993974044,38.1847312070441,0 -122.669072580861,38.1846620452088,0 -122.669072585164,38.18466204071341,0 -122.669179308624,38.1845035880416,0 -122.669184670921,38.1844956266009,0 -122.669186505899,38.1844843671029,0 -122.669197674123,38.184415838362,0 -122.669216235197,38.1843019464534,0 -122.669216014544,38.1842847008378,0 -122.669213595293,38.1840956180516,0 -122.669212769731,38.1840310939875,0 -122.669212545067,38.1840135348022,0 -122.66922439181,38.1839189367073,0 -122.669225864578,38.1839140092726,0 -122.669238132235,38.183872965395,0 -122.669252652445,38.1838243850928,0 -122.669261701607,38.1838119785428,0 -122.669356366961,38.1836821904859,0 -122.669374013444,38.1836579967524,0 -122.669393477087,38.1836422178858,0 -122.66942143795,38.1836195504412,0 -122.669457102264,38.1835906378957,0 -122.669459998538,38.1835890934148,0 -122.669534234737,38.1835495058152,0 -122.669610887983,38.1835086291943,0 -122.669658839498,38.1834830582006,0 -122.66966667161,38.1834759165864,0 -122.66973698891,38.183411798541,0 -122.669737666356,38.1834111808183,0 -122.669740143717,38.1834077926618,0 -122.669800140326,38.18332573834161,0 -122.66982924681,38.1832414556934,0 -122.669831234204,38.1832357008555,0 -122.669824849347,38.1831011119632,0 -122.669815449159,38.1829029609172,0 -122.669803867344,38.1826588209573,0 -122.669801513958,38.1826499236434,0 -122.669791370985,38.1826115766389,0 -122.669776748813,38.1825562952917,0 -122.669760153968,38.1824935558526,0 -122.66975615451,38.18247843525431,0 -122.66972292357,38.1824052644158,0 -122.669715170939,38.1823881939612,0 -122.669714827426,38.1823860644772,0 -122.669705809002,38.1823301580961,0 -122.669699898664,38.1822935190971,0 -122.669702446295,38.1822718696184,0 -122.669709239886,38.1822141383822,0 -122.669711030855,38.1821989189022,0 -122.669715352157,38.1821924538621,0 -122.669779650755,38.182096257472,0 -122.669825272161,38.1820280036355,0 -122.669829766108,38.18202243474281,0 -122.669950570949,38.1818727331536,0 -122.669955885723,38.1818661470589,0 -122.66999689639,38.181793414158,0 -122.670004085534,38.1817806641103,0 -122.670005371324,38.1817737363464,0 -122.670021399433,38.1816873776866,0 -122.670021639907,38.1816860820216,0 -122.670014378554,38.181397660169,0 -122.670013905361,38.1813963766699,0 -122.670006001807,38.1813749388821,0 -122.669983358509,38.18131352059161,0 -122.669974074884,38.18128833940871,0 -122.669955274316,38.18123734412501,0 -122.669949518679,38.1812217323304,0 -122.669948202889,38.1811810077529,0 -122.669938970955,38.1808952721468,0 -122.669936996392,38.1808341576134,0 -122.669953123378,38.1807395714855,0 -122.669992065756,38.18064955609191,0 -122.67003546062,38.180560182016,0 -122.670120844262,38.1803843290838,0 -122.670123164628,38.1803795501329,0 -122.670139714968,38.1803539886581,0 -122.670178499409,38.1802940872395,0 -122.670294853826,38.180140198107,0 -122.670357258867,38.1800576615385,0 -122.670358693928,38.1800557635321,0 -122.670498437527,38.1799254759593,0 -122.670666765643,38.1797862562747,0 -122.670727787917,38.1797053154205,0 -122.670804976267,38.1795207758303,0 -122.670907079552,38.1793498252049,0 -122.671054058291,38.1791970259711,0 -122.671316862986,38.1789949835524,0 -122.671363530807,38.1789320270497,0 -122.671371435628,38.1789068885686,0 -122.67137996468,38.1788797649187,0 -122.67142723938,38.1787294239979,0 -122.671465465283,38.1786394060622,0 -122.671510113474,38.1785494061751,0 -122.67156615886,38.1784639445924,0 -122.671650687236,38.1783920818792,0 -122.671715255006,38.1783156567281,0 -122.671808118241,38.1781356667557,0 -122.67186556992,38.1780547152479,0 -122.672082126397,38.1778209972031,0 -122.672241903837,38.1776772449106,0 -122.672505413435,38.1774752017368,0 -122.672644152188,38.1774079965577,0 -122.672737692621,38.1773947398711,0 -122.672811804797,38.1774174788819,0 -122.672909184876,38.1774691185566,0 -122.6729484909,38.17748996210131,0 -122.67305302547,38.1775713677125,0 -122.673177560927,38.1776483229248,0 -122.673199797757,38.177651195219,0 -122.673248879575,38.1776575350196,0 -122.673319625643,38.1776352015489,0 -122.673376381823,38.1775497410704,0 -122.673421740605,38.1774597424198,0 -122.673429299314,38.1773651317886,0 -122.673424727044,38.1772704872361,0 -122.673419787526,38.177256892287,0 -122.67339162026,38.1771793679155,0 -122.673386660092,38.1771657160981,0 -122.67335916913,38.1770900529185,0 -122.673162574361,38.17685067037,0 -122.672890853363,38.1766561398574,0 -122.672808380694,38.1765883147235,0 -122.67275310486,38.1765025406346,0 -122.672709980148,38.176412294294,0 -122.672710431393,38.1763987320574,0 -122.672713278372,38.17631316547961,0 -122.672782838238,38.1762367536959,0 -122.672893603807,38.1762010137578,0 -122.673011464701,38.1761743061301,0 -122.67313142593,38.176156616813,0 -122.673496002352,38.1761711553774,0 -122.673738658127,38.17616282091881,0 -122.67382742297,38.1760999809846,0 -122.673844581821,38.1760410643309,0 -122.673852061619,38.17601538165641,0 -122.673854961065,38.17600542609651,0 -122.673867514064,38.1759108293579,0 -122.6739574946,38.1757353358183,0 -122.6739943088,38.17564080678521,0 -122.674051042553,38.1755598521593,0 -122.67413556517,38.175487987592,0 -122.674240660587,38.175443218002,0 -122.674351444342,38.1754029704539,0 -122.674578659837,38.17533600960851,0 -122.674770417163,38.1752193805486,0 -122.674947982747,38.1750846865693,0 -122.675021106958,38.1750082833553,0 -122.675187775237,38.1747563954861,0 -122.675273722947,38.1746845340482,0 -122.675368886729,38.1746262169935,0 -122.675474693733,38.1745814482658,0 -122.675591143999,38.1745502278367,0 -122.675928383692,38.1744520259725,0 -122.676028521591,38.1743982284581,0 -122.676200374447,38.1742635167096,0 -122.676519952622,38.1741247076725,0 -122.676629306051,38.1740844539974,0 -122.676747855855,38.174062250784,0 -122.676868506409,38.1740490658184,0 -122.676990524284,38.1740494033433,0 -122.677350710342,38.17408644916971,0 -122.677467614085,38.174113809737,0 -122.677581643813,38.1741456685317,0 -122.677683443824,38.1742000248535,0 -122.677969519128,38.1743765588379,0 -122.678148760279,38.17450773498051,0 -122.678242672373,38.1745710816333,0 -122.678408149729,38.1746597457956,0 -122.678445561137,38.1746797910812,0 contacts #khStyle84754 1 -122.634186216937,38.1739567876936,0 -122.634192747024,38.1739863281141,0 -122.634143106405,38.174067285607,0 -122.634039370919,38.174121036069,0 -122.633927853842,38.1741612432506,0 -122.633851018456,38.1741727568277,0 -122.633810027434,38.1741788992006,0 -122.633566728485,38.1741736303319,0 -122.633524603913,38.174175035696,0 -122.633443261279,38.1741777494139,0 -122.633329738634,38.1741909121092,0 -122.633123715692,38.1742939097724,0 -122.633040604426,38.1743612429022,0 -122.632990939687,38.1744467060939,0 -122.632969771869,38.1745412713037,0 -122.632970940507,38.174735044612,0 -122.632987816694,38.1748091652787,0 -122.632988395185,38.17481170602711,0 -122.633042173638,38.1749020003099,0 -122.633089892364,38.1749668093403,0 -122.633171873939,38.1750781520347,0 -122.633213522248,38.1751684081608,0 -122.633215719755,38.1751819256897,0 -122.6332235143,38.1752298722447,0 -122.633225982337,38.1752450538602,0 -122.633223583935,38.1752611465872,0 -122.633218615394,38.1752944843354,0 -122.633211214067,38.1753441454549,0 -122.633142327792,38.1754205358263,0 -122.633057765533,38.1754923706672,0 -122.632962567436,38.1755506532332,0 -122.632894508766,38.1755741977819,0 -122.632846390661,38.1755908439616,0 -122.632743118118,38.1756265704063,0 -122.632640115613,38.1756758156433,0 -122.63259424442,38.1756844946975,0 -122.632501348172,38.175702071061,0 -122.632405839153,38.1757201416863,0 -122.632304240783,38.1757738973132,0 -122.63225316974,38.1758548494733,0 -122.63217357845,38.1759312055801,0 -122.632107522174,38.176012110509,0 -122.632086375418,38.176102169327,0 -122.632097316699,38.1761968354271,0 -122.632138941654,38.1762915981109,0 -122.632202755472,38.1763729118046,0 -122.632288044618,38.1764407742274,0 -122.632395590608,38.1764816689841,0 -122.632512481103,38.176509074219,0 -122.632573126026,38.1765137721851,0 -122.63263374365,38.1765184680047,0 -122.632755760182,38.1765143462418,0 -122.632755787664,38.1765143453134,0 -122.632765906623,38.1765115677448,0 -122.63286940444,38.1764831584065,0 -122.63320099901,38.1764256184566,0 -122.633226508265,38.1764211919204,0 -122.633348506923,38.1764260810089,0 -122.633790847252,38.1765851873909,0 -122.633898371747,38.1766305869748,0 -122.634001592368,38.1766804792507,0 -122.634091901117,38.17674384981621,0 -122.634187963714,38.1767982257847,0 -122.634187967464,38.1767982268406,0 -122.634201687061,38.17680208942121,0 -122.634301264972,38.1768301242746,0 -122.634512725031,38.1769254174538,0 -122.634608029582,38.17698880324591,0 -122.634666851665,38.17707009999161,0 -122.634862759213,38.1774222012456,0 -122.634932482061,38.1776071760931,0 -122.63506530994,38.177873460809,0 -122.635145585862,38.1779458117632,0 -122.635322618161,38.1780770461307,0 -122.63561360134,38.1782536982841,0 -122.635767037891,38.1782902265475,0 -122.635824577929,38.1783039249025,0 -122.635824943792,38.1783039889165,0 -122.636060575418,38.1783452165321,0 -122.636077775039,38.1783507435951,0 -122.636144304688,38.1783721227304,0 -122.636173857461,38.1783816194233,0 -122.636189556472,38.1783891042339,0 -122.636278509268,38.1784315141488,0 -122.636395594491,38.17850802986361,0 -122.636465579883,38.178553765498,0 -122.636482241485,38.1785686498148,0 -122.636546571519,38.1786261177178,0 -122.636593323054,38.1786788354892,0 -122.636614696184,38.1787029361385,0 -122.636689892734,38.1787811906543,0 -122.636836197409,38.178933444388,0 -122.636988706205,38.1790772607109,0 -122.636989619193,38.1790781216591,0 -122.637085552914,38.1791595325284,0 -122.637147682658,38.17921225667131,0 -122.637218934987,38.1792727222307,0 -122.637224124008,38.1792771256884,0 -122.637306720691,38.1793417589487,0 -122.637391131257,38.17940781142551,0 -122.637397572852,38.1794128520582,0 -122.637681973015,38.1795876288802,0 -122.637684998263,38.1795894880245,0 -122.637884986,38.1796982583487,0 -122.63805647522,38.1797851881635,0 -122.638090705486,38.1798025398163,0 -122.638169457848,38.1798379058523,0 -122.638261990609,38.1798794602666,0 -122.638302892602,38.1798978284078,0 -122.638502298837,38.1799724102826,0 -122.638521569565,38.1799796178897,0 -122.63875248967,38.1800389134778,0 -122.638861141662,38.1800555974116,0 -122.638992084686,38.1800757040763,0 -122.639145909902,38.1800876449825,0 -122.639233458068,38.1800944409447,0 -122.639233909685,38.1800944760015,0 -122.639237817422,38.18009439168581,0 -122.639599322697,38.1800865910684,0 -122.639659597429,38.1800912829884,0 -122.639719878475,38.1800959753683,0 -122.639739145499,38.18009913817221,0 -122.639955332891,38.1801346264661,0 -122.640138769017,38.1801647381294,0 -122.640195479893,38.1801740473493,0 -122.640295161947,38.1801874376462,0 -122.640299967764,38.1801880832097,0 -122.640435811856,38.1802063310058,0 -122.640557817313,38.1802112126394,0 -122.640679844926,38.1802115879469,0 -122.640918346134,38.1801807772407,0 -122.640992136733,38.1801639062525,0 -122.641258483089,38.1801030101551,0 -122.641268413627,38.1801007396732,0 -122.641270219829,38.1801006094862,0 -122.641338739324,38.1800956707351,0 -122.641388344425,38.1800920952711,0 -122.641511085462,38.1800924719038,0 -122.641516726937,38.1800932984598,0 -122.641657049433,38.18011385759981,0 -122.642107958662,38.180179920678,0 -122.642340400024,38.1801937609581,0 -122.64258665992,38.1802084235295,0 -122.642647702468,38.1802041034694,0 -122.642687719502,38.1802012713946,0 -122.642708731585,38.1801997843276,0 -122.642719226821,38.1801973646055,0 -122.642824468747,38.1801731005641,0 -122.642838308199,38.180168696735,0 -122.642936681771,38.180137393381,0 -122.642948282079,38.1801325117003,0 -122.643255611825,38.1800031795104,0 -122.643284579909,38.1799883329951,0 -122.643310994668,38.1799747950803,0 -122.643448337915,38.1799044046642,0 -122.64345664151,38.179900148941,0 -122.643541176824,38.17983281283941,0 -122.643690136868,38.1796908855409,0 -122.643696754316,38.1796845805004,0 -122.643706200582,38.1796783032528,0 -122.643781162872,38.1796284891299,0 -122.643791257703,38.1796217808796,0 -122.643877628808,38.1795801881792,0 -122.643893544766,38.1795725237096,0 -122.643916161499,38.1795562794737,0 -122.644074723036,38.1794423939549,0 -122.644084453156,38.1794370167485,0 -122.644172036358,38.1793886151203,0 -122.644287458852,38.1793484104358,0 -122.644368398461,38.179320216951,0 -122.644390058099,38.1793126722923,0 -122.644399377386,38.179307669651,0 -122.644556579949,38.1792232822914,0 -122.644590392619,38.1792051313764,0 -122.644774019569,38.1791191178757,0 -122.644800673204,38.1791066328894,0 -122.644903259526,38.1790831256398,0 -122.645033569726,38.1790532654224,0 -122.645115559384,38.1790411960618,0 -122.645153542137,38.1790356047561,0 -122.64517347423,38.1790349206419,0 -122.645274135626,38.1790314656649,0 -122.64527416252,38.1790314647418,0 -122.645396188243,38.1790318351377,0 -122.64541275524,38.1790365266773,0 -122.645484500396,38.1790568438589,0 -122.645497303852,38.1790604696051,0 -122.645508784261,38.1790637206825,0 -122.645628581896,38.179082109154,0 -122.645639997036,38.1790821438055,0 -122.6456399989,38.1790821438112,0 -122.645750607706,38.1790824795152,0 -122.645870558179,38.1790693239858,0 -122.645871690272,38.1790690633467,0 -122.646127688383,38.1790101251882,0 -122.646334208338,38.1789625778534,0 -122.646429852816,38.1789323332836,0 -122.646447131441,38.1789268694488,0 -122.646451021428,38.1789244138733,0 -122.64647783664,38.1789074866203,0 -122.646673783466,38.1787837936609,0 -122.646887272933,38.1786490259217,0 -122.646923132972,38.1786263887629,0 -122.647060675491,38.17855281361371,0 -122.647124175554,38.1785188456375,0 -122.647152351402,38.1785112526341,0 -122.647203157015,38.1784975611988,0 -122.647239930245,38.1784876512868,0 -122.647356964987,38.1784880045744,0 -122.647361241498,38.1784880174815,0 -122.647599064272,38.1784481785891,0 -122.64766089037,38.17843532460351,0 -122.647817478153,38.1784027689767,0 -122.647834075812,38.1783993182007,0 -122.647836513443,38.1783984333151,0 -122.647943670249,38.1783595342032,0 -122.647944878245,38.1783590956865,0 -122.647959108084,38.1783504786661,0 -122.64813739886,38.1782425125973,0 -122.648157277147,38.1782290461419,0 -122.648301979487,38.1781310179415,0 -122.648322826286,38.1781168952983,0 -122.648347423266,38.1781131836532,0 -122.648410662059,38.17810364099461,0 -122.648439942042,38.1780992226676,0 -122.64846275614,38.1781037977431,0 -122.648486430289,38.1781085452854,0 -122.648508381892,38.1781129473889,0 -122.648510582474,38.1781227811394,0 -122.648514372232,38.17813971644321,0 -122.648517463667,38.1781535311428,0 -122.648509390159,38.1781659847342,0 -122.648464981514,38.1782344861161,0 -122.64842970074,38.1783242035043,0 -122.648429582175,38.1783245050088,0 -122.648376364542,38.1784099639967,0 -122.648366239485,38.1784300376942,0 -122.648330974667,38.1784999527897,0 -122.648323027954,38.1785265154909,0 -122.648307242796,38.1785792789296,0 -122.64830268933,38.17859449932121,0 -122.648293080519,38.1786759555289,0 -122.648291530263,38.178689097399,0 -122.648288246614,38.1786972822763,0 -122.648255416892,38.1787791140816,0 -122.648254379547,38.1787834590517,0 -122.648234376712,38.1788672417993,0 -122.648232840143,38.1788736777769,0 -122.648229530545,38.1789682994762,0 -122.648234219895,38.1790171800364,0 -122.648237012884,38.1790462933925,0 -122.648239044084,38.1790674660503,0 -122.648260579945,38.1791333184646,0 -122.648298366356,38.1792488615567,0 -122.648299525238,38.1792524051735,0 -122.648346903258,38.1793426731676,0 -122.648353323757,38.1793497629116,0 -122.64841073769,38.1794131613493,0 -122.648416468138,38.17941948909951,0 -122.64852861521,38.1795160900047,0 -122.648579212305,38.1795596730595,0 -122.648598890777,38.1795836670138,0 -122.648645901254,38.1796409867959,0 -122.648683289736,38.1797312242855,0 -122.64870422666,38.1798198136516,0 -122.64870567058,38.1798259232315,0 -122.64870972821,38.17983152901831,0 -122.648756326498,38.1798959064519,0 -122.648762593391,38.1799045644089,0 -122.648764510503,38.1799072129746,0 -122.648768163889,38.1799198526403,0 -122.648791270272,38.1799997939948,0 -122.648791886776,38.180001926919,0 -122.648791637567,38.1800030952292,0 -122.648775647782,38.1800780564449,0 -122.648775094763,38.18008064903381,0 -122.648773635284,38.180087491163,0 -122.648744809935,38.18017284871,0 -122.648744613056,38.1801734317051,0 -122.648743230698,38.1801775251351,0 -122.648736220652,38.1802248431523,0 -122.648729652504,38.180269178286,0 -122.648729217488,38.1802721146487,0 -122.64873814083,38.1803014583538,0 -122.648748843909,38.1803366545537,0 -122.648758021075,38.18036683288661,0 -122.648766888553,38.1803815497095,0 -122.648803208911,38.1804418283714,0 -122.648809703694,38.180452607352,0 -122.64881485645,38.1804536887831,0 -122.648962183614,38.1804846088618,0 -122.648990786438,38.1804906118142,0 -122.649005753081,38.1804937529012,0 contacts #khStyle84754 1 -122.637788734051,38.1739164159735,0 -122.637723197462,38.1740378820448,0 -122.637692492613,38.1741864939072,0 -122.637745963761,38.1743398719781,0 -122.637913694196,38.1744755809769,0 -122.638195793222,38.1745710860781,0 -122.638477982048,38.17464856765491,0 -122.638729557158,38.1747124318509,0 -122.638799375495,38.1747351802515,0 contacts #khStyle84754 1 -122.940771341214,38.175118751245,0 -122.940990627971,38.1752901041157,0 -122.94106548155,38.1753802664624,0 -122.941133501793,38.1755380203432,0 -122.941153706262,38.1757002566552,0 -122.941125697207,38.1759210462875,0 -122.94107276056,38.1760832445445,0 -122.941007389792,38.1761778411671,0 -122.940860650163,38.1762949255953,0 -122.940737868032,38.1763489366703,0 -122.940532688756,38.1763758667515,0 -122.940335337168,38.1764298382303,0 -122.94013157761,38.1764657809039,0 -122.939922493799,38.1764656702248,0 -122.939722728777,38.1764159940875,0 -122.939655298442,38.1764114529757,0 -122.939449043523,38.1764428858163,0 -122.93930810898,38.1764428104338,0 -122.939173214326,38.176474283079,0 -122.939110037432,38.1765012867939,0 -122.939062909317,38.1765373095494,0 -122.939041103819,38.1765868678702,0 -122.939002737932,38.1768121587448,0 -122.938949490119,38.1769112680687,0 -122.938858791937,38.1769968373123,0 -122.938800258632,38.1770238433648,0 -122.938662508756,38.1770508065638,0 -122.93859435899,38.1770507696795,0 -122.938318229537,38.177010062328,0 -122.938186598447,38.1769784478079,0 -122.938012199336,38.1768882271863,0 -122.937734041761,38.176721343816,0 -122.937686622379,38.1766807623758,0 -122.937592194243,38.1765365097459,0 -122.937434805349,38.17617142020361,0 -122.93741563492,38.1760587517538,0 -122.937456087003,38.1759010555479,0 -122.937455092141,38.175815436856,0 -122.937514559977,38.1755360827715,0 -122.93756780729,38.1754324688458,0 -122.937648880549,38.175342387965,0 -122.937806674193,38.1752343261249,0 -122.938187127655,38.1750993459164,0 -122.938346706348,38.1749912822269,0 -122.938574444908,38.1748652322745,0 -122.938721538876,38.1747481487635,0 -122.938804025668,38.1746625751718,0 -122.938872259367,38.1745634760633,0 -122.93892122689,38.1744598592104,0 -122.93894736358,38.1743517227163,0 -122.938944197892,38.1742976457222,0 -122.938864863884,38.1740272286028,0 -122.938832433977,38.1739821483621,0 -122.938733675171,38.1738964768574,0 contacts #khStyle84754 1 -122.572367860534,38.1740694428642,0 -122.572224297155,38.1737264419867,0 contacts #khStyle84754 1 -122.572468539335,38.17369128502601,0 -122.573545053412,38.1759393332694,0 contacts #khStyle84754 1 -122.575867484129,38.1736450799398,0 -122.576178093327,38.1737318250075,0 -122.57649195831,38.1738726561873,0 -122.576674463401,38.1739389177834,0 contacts #khStyle84754 1 -122.574109374167,38.1753465634484,0 -122.574376422037,38.1751943228232,0 -122.574646552367,38.1750261788001,0 -122.574664318948,38.1750151198508,0 -122.574723327671,38.1749297155008,0 -122.574755247359,38.1748397063589,0 -122.574772948227,38.1747406329845,0 -122.574754231718,38.174645933449,0 -122.574699785355,38.1745601164967,0 -122.574629317316,38.1745035042252,0 -122.574615265307,38.1744922151748,0 -122.574341648165,38.1743019566244,0 -122.574239211453,38.1742475086003,0 -122.574017056102,38.1741655869023,0 -122.573926062787,38.1741066740262,0 -122.573867362724,38.1740163349251,0 -122.573880017327,38.1739262558093,0 -122.573941880249,38.1738408622358,0 -122.574014419972,38.1737600137807,0 -122.574103266215,38.17369724971121,0 -122.574274989284,38.173612113492,0 -122.574310796057,38.1735943612875,0 -122.574424432524,38.1735632310378,0 -122.574545839327,38.1735456477317,0 -122.574667089069,38.1735551012992,0 -122.575029332968,38.17359697456641,0 -122.575393953024,38.17359829898781,0 -122.57551520297,38.1736077516809,0 -122.575867484129,38.1736450799398,0 contacts #khStyle84754 1 -122.658179669636,38.174027415388,0 -122.658210584842,38.17397793748381,0 -122.6582257533,38.1739374261244,0 -122.658218078536,38.1737481386749,0 -122.658134179406,38.1735315924346,0 -122.65807317097,38.1734548076788,0 -122.657997031038,38.173409521715,0 -122.657875078939,38.1733956446724,0 -122.65769946229,38.1734131575983,0 -122.657516497342,38.1734757076199,0 -122.65742493296,38.1735250096199,0 -122.657386861767,38.1735789715953,0 -122.65738656619,38.1736420590616,0 -122.657432376133,38.17376386270031,0 -122.657508637522,38.1739353260446,0 -122.657585236887,38.1740346872804,0 -122.657676234879,38.1741070548994,0 -122.657805995583,38.1741299697383,0 -122.657950888213,38.1741213772295,0 -122.658073075971,38.1740856844337,0 -122.658133854413,38.1740588244463,0 -122.658179669636,38.174027415388,0 contacts #khStyle84754 1 -122.732138004942,38.1741063781582,0 -122.732315901568,38.1739775879117,0 -122.73250197181,38.1738293073029,0 -122.732561428242,38.173766355626,0 -122.732601717682,38.1736763222741,0 -122.732590647657,38.1735816649056,0 -122.732549948693,38.1734914458978,0 -122.732248210122,38.1730761754758,0 -122.732230911084,38.1730355125784,0 contacts #khStyle84754 1 -122.592258569781,38.17487532678761,0 -122.592248631811,38.1747983699912,0 -122.592105300675,38.1743968125703,0 -122.59203591442,38.1741712572847,0 -122.591938926259,38.1739050492454,0 -122.591937829932,38.1735896068964,0 -122.59190578546,38.1734498008517,0 -122.591868696089,38.1733189897161,0 -122.591808863862,38.1730438986908,0 -122.591800022361,38.1730217255549,0 contacts #khStyle84754 1 -122.836859483741,38.1735313570759,0 -122.836861476367,38.17327900697221,0 -122.836907215127,38.1732475282979,0 -122.836907732755,38.173175428193,0 -122.837136117261,38.172995499459,0 -122.837363026954,38.1729958181998,0 -122.837543237356,38.1731402705966,0 -122.837540371233,38.1734647182135,0 -122.837585602907,38.1735008320423,0 -122.837584220171,38.1736405244057,0 -122.837629451976,38.1736766382163,0 -122.837629371617,38.1737126885159,0 -122.837764349648,38.1738210267368,0 -122.837763913147,38.1738570786352,0 -122.83780914518,38.1738931902762,0 -122.837806729364,38.1741770828223,0 -122.837760980367,38.1742130691786,0 -122.837489110574,38.1742126881699,0 -122.837398649144,38.1741404604347,0 -122.837353336671,38.1741403968358,0 -122.837128251277,38.1739598285997,0 -122.837128771347,38.1738877306055,0 -122.837038656801,38.1738200083259,0 -122.837038737452,38.1737839580265,0 -122.836993862072,38.173747846588,0 -122.836993942745,38.1737117962882,0 -122.836949070095,38.1736756827373,0 -122.836949587685,38.1736035826377,0 -122.836859483741,38.1735313570759,0 contacts #khStyle84754 1 -122.7039670793,38.1729217805021,0 -122.704672841824,38.1729105111286,0 -122.705158675482,38.1729342706562,0 -122.70551821179,38.1729577096291,0 -122.706248223952,38.1729460301307,0 -122.706369490557,38.1729553478014,0 -122.706489293877,38.1729736742328,0 -122.706601175827,38.1730100057624,0 -122.70670372748,38.1730598325898,0 -122.706791935945,38.1731276484301,0 -122.706865160052,38.1731954265751,0 -122.706906897697,38.1732856570306,0 -122.706911448597,38.1735740705245,0 -122.706891802855,38.1736686531199,0 -122.706852909192,38.173758681091,0 -122.706800475983,38.1738441687574,0 -122.706695233511,38.1739389318495,0 -122.706640773965,38.1739879685249,0 -122.70655202137,38.1740553396658,0 -122.706451210592,38.1741046552881,0 -122.706355322103,38.1741720083326,0 -122.706350998495,38.1741902116876,0 -122.706334998168,38.174257576554,0 -122.706372436278,38.1743523026476,0 -122.706416910656,38.1743729128021,0 -122.706423260356,38.1743758553544,0 -122.706479984557,38.1744021422314,0 -122.706601289797,38.1744024471999,0 -122.706721935773,38.1743892315421,0 -122.706831986854,38.1743489514614,0 -122.706929979648,38.1742906158759,0 -122.707272876425,38.1740165931112,0 -122.70733879453,38.173949164174,0 -122.707393367857,38.1738636816324,0 -122.707466890616,38.1736791083485,0 -122.707495793754,38.1735890551363,0 -122.707535663712,38.1735373317726,0 -122.707540535644,38.1735310114017,0 -122.707558197652,38.1735080984165,0 -122.707608489091,38.17342260503941,0 -122.707685145685,38.1733461902329,0 -122.707743249837,38.1732697289252,0 -122.707831286852,38.1732023550794,0 -122.707934949669,38.1731530453963,0 -122.708052775209,38.1731308087409,0 -122.708307637861,38.1730999019339,0 -122.70853317291,38.1730869464754,0 -122.708648179937,38.17305568961821,0 -122.708744502201,38.1730084776479,0 contacts #khStyle84754 1 -122.703525245214,38.1726372252529,0 -122.703430229699,38.1726369839051,0 -122.703373752557,38.172663102709,0 -122.703343012728,38.1726773188405,0 -122.70339901665,38.1727675867939,0 -122.703484367532,38.1728353978541,0 -122.703584757894,38.1728897281941,0 -122.703699529015,38.1729170572567,0 -122.703942116282,38.1729221790253,0 -122.7039670793,38.1729217805021,0 contacts #khStyle84754 1 -122.868289038107,38.1743690107034,0 -122.868606396162,38.174468510614,0 -122.869584990427,38.1747084501685,0 -122.869868005857,38.1748619833726,0 -122.870064890244,38.17509653016661,0 -122.869866209596,38.175267543454,0 -122.869526004419,38.1753708053713,0 -122.868846900726,38.1754421347778,0 -122.868518200235,38.1754958365812,0 -122.867606640589,38.1758643092811,0 -122.867267645987,38.1758864506993,0 -122.866931985977,38.1758410016439,0 -122.866614276297,38.1757369915983,0 -122.866325173275,38.1755969634462,0 -122.864985881037,38.1747707619263,0 -122.864479547221,38.1744141730417,0 -122.863882410716,38.1741566155914,0 -122.863301011847,38.173881046414,0 -122.861878162186,38.1731268108001,0 -122.861689119558,38.1729102846371,0 -122.861687874568,38.1726308927861,0 -122.861988311316,38.17261322673,0 -122.862340288398,38.172699267165,0 -122.863247241698,38.1730653507138,0 -122.863793577573,38.1733904470993,0 -122.864098416954,38.1735034623319,0 -122.864439474179,38.1735173807755,0 -122.86477941006,38.1735583325859,0 -122.865096064072,38.1736488307165,0 -122.865605598455,38.1740099259678,0 -122.865887183606,38.1741589598232,0 -122.866214198472,38.1742449574978,0 -122.86654601531,38.1742408360286,0 -122.866861982277,38.1741240369643,0 -122.867192340835,38.1741379350669,0 -122.868289038107,38.1743690107034,0 contacts #khStyle84754 1 -122.576674463401,38.1739389177834,0 -122.576905668926,38.1740228603282,0 -122.577265463706,38.1741187929854,0 -122.5776790354,38.1741698561427,0 -122.577918579761,38.1742067710702,0 -122.578111743701,38.1742435181939,0 -122.578381763607,38.1743165922137,0 -122.578642481976,38.1743941383606,0 -122.578918458575,38.1745483453221,0 -122.57906485454,38.1746525163938,0 -122.579195935842,38.1748244716077,0 -122.579216415646,38.1748513373613,0 -122.579432493332,38.1748746459782,0 -122.579638751778,38.1749925503939,0 -122.579729450981,38.17497935760951,0 -122.579634155534,38.1747987646231,0 -122.579573199456,38.1747196685836,0 -122.579550577021,38.1746903138714,0 -122.579479051516,38.1745954251878,0 -122.579432640882,38.1743519201427,0 -122.579320972431,38.1740405863995,0 -122.579317597079,38.173882855078,0 -122.579357929077,38.1736937371396,0 -122.579426063111,38.1735092254351,0 -122.579486569819,38.1734103052494,0 -122.579614356026,38.1732755768055,0 -122.579813857519,38.17307801823991,0 -122.5799949252,38.1729840371738,0 -122.580744388403,38.1726938194183,0 -122.580974301026,38.1726676058913,0 -122.581177683907,38.1726638282185,0 -122.581384737463,38.172642038279,0 -122.582147768256,38.1724735292187,0 contacts #khStyle84754 1 -122.582147768256,38.1724735292187,0 -122.582273426984,38.1724604593668,0 -122.582544009664,38.1724343880346,0 -122.582750831142,38.1724531512305,0 -122.58291109351,38.1725032918562,0 -122.583200834393,38.1726214877902,0 -122.583424879759,38.1727484615246,0 -122.583536977628,38.1728615174016,0 -122.583626914679,38.1730021708226,0 -122.583675601064,38.1730783116769,0 -122.583836703549,38.1732320980947,0 -122.58396343198,38.1732821179366,0 -122.584215769284,38.1733280780665,0 -122.584383909086,38.1733737384285,0 -122.584546875364,38.1734509240145,0 -122.584691008778,38.1735776113874,0 -122.585041050531,38.1737591046177,0 -122.585122241449,38.1737864302873,0 -122.585229859121,38.173809343377,0 -122.58529117966,38.1738095608669,0 -122.585446063305,38.1738101100612,0 -122.585589307385,38.1738421616457,0 -122.585909791331,38.1739514473178,0 -122.586062796305,38.1740240892613,0 -122.586245337771,38.1741734419976,0 -122.586325944118,38.174304408822,0 -122.586363852892,38.1743832619158,0 -122.586382366362,38.1744217712571,0 -122.586397657265,38.1744939255535,0 -122.586351990777,38.1746199393818,0 -122.586267792198,38.17474581686,0 -122.586250998538,38.1748133513815,0 -122.586291314755,38.1748765817076,0 -122.586367487026,38.1749083950223,0 -122.586786447627,38.1750180266074,0 -122.586996362387,38.1751224122644,0 -122.587021305434,38.1751454174983,0 -122.587104264211,38.1752219311073,0 -122.587184083445,38.1753664133349,0 -122.587219839973,38.1754791961287,0 -122.587209776188,38.1756188547362,0 -122.587161103677,38.1757718958181,0 -122.587142092533,38.1758168236266,0 -122.587093665937,38.1759312668053,0 contacts #khStyle84754 1 -122.869300322448,38.1726938309192,0 -122.869400847376,38.1731400646138,0 -122.869725662879,38.1732575951455,0 -122.870389828436,38.1733484663223,0 -122.870659232647,38.17352902015101,0 -122.870991277112,38.1735969849831,0 -122.871300389344,38.1735162166916,0 -122.871360818102,38.1732414033023,0 -122.871222072236,38.17301593605311,0 -122.870919082032,38.1728623837145,0 -122.870088990341,38.1723882949911,0 -122.869756264006,38.1723068089639,0 -122.869446858328,38.1723515246047,0 -122.86925592008,38.1725856295926,0 -122.869300322448,38.1726938309192,0 contacts #khStyle84754 1 -122.640461719162,38.1720320359896,0 -122.640224024187,38.1720493296758,0 -122.639804891035,38.1721066195058,0 -122.639545637093,38.1721553884719,0 -122.639209608688,38.1722895407593,0 -122.638981034628,38.1724826050341,0 -122.638797814735,38.172738895251,0 -122.638637827836,38.1730583474093,0 -122.63854667439,38.1733104165993,0 -122.638500542239,38.1734049052974,0 -122.638401714154,38.1734767004488,0 contacts #khStyle84754 1 -122.668071940455,38.1721092310027,0 -122.668142808197,38.172027307057,0 -122.668145823229,38.17202382164,0 -122.668147261956,38.1720213121719,0 -122.668210887979,38.1719103337048,0 -122.668220623856,38.1718933520551,0 contacts #khStyle84754 1 -122.633041807065,38.1716492298143,0 -122.633136662251,38.1717118565878,0 -122.633168319233,38.1718020814138,0 -122.63313433147,38.1718921001866,0 -122.633065425773,38.171972996778,0 -122.633010054435,38.1720584421004,0 -122.632963245366,38.1721439142852,0 -122.632939937595,38.1722384728081,0 -122.632937299672,38.1723376025174,0 -122.632983249991,38.1724233660021,0 -122.633089421698,38.1725949377186,0 -122.633170403504,38.172667292285,0 -122.633259970522,38.17273516746361,0 -122.633361758197,38.17278505582361,0 -122.633453488729,38.1728484313692,0 -122.633482368818,38.1728930075715,0 contacts #khStyle84754 1 -122.664792950605,38.1744972894823,0 -122.664712698076,38.17441586363131,0 -122.664680287778,38.1743256450882,0 -122.664678680651,38.1743108308166,0 -122.66467479431,38.1742750070461,0 -122.664670018456,38.1742309838189,0 -122.664670692673,38.1740839837393,0 -122.66467090717,38.1740372165081,0 -122.664669612718,38.1740336874416,0 -122.664632850673,38.1739334629105,0 -122.664576748754,38.1738747202459,0 -122.664526202987,38.1738397687076,0 -122.664516520979,38.1738330737573,0 -122.664325050012,38.1737006743013,0 -122.664314989099,38.1736937173014,0 -122.66420889773,38.1736438433519,0 -122.664051196326,38.1735475726717,0 -122.664016064076,38.1735261257127,0 -122.664012280725,38.17352281361881,0 -122.66398195034,38.1734962611999,0 -122.663938597934,38.1734583087402,0 -122.663906770345,38.1734082793383,0 -122.663883726488,38.1733720569304,0 -122.663832332291,38.17329127076371,0 -122.663774691791,38.1731018412668,0 -122.663767977206,38.1730704553221,0 -122.663760675153,38.1730363233575,0 -122.663754434177,38.1730071511522,0 -122.663760320052,38.1728133981966,0 -122.663772928693,38.1727764152136,0 -122.663796082202,38.1727085024935,0 -122.663821750979,38.1726332119585,0 -122.66382324766,38.1726288219537,0 -122.663826992702,38.1724350628209,0 -122.6638221456,38.1724212659514,0 -122.663800228758,38.1723588814307,0 -122.663795297879,38.1723448460664,0 -122.663732145356,38.1722680575864,0 -122.663510558787,38.1720421056762,0 -122.663499653091,38.1720322818709,0 -122.663457341982,38.1719941681678,0 -122.663430261267,38.17196977392311,0 -122.663255354548,38.171834081552,0 -122.663168490415,38.1717932746319,0 -122.663056818889,38.1717163458795,0 -122.662881033727,38.171616700635,0 -122.662349708943,38.1714537738338,0 contacts #khStyle84754 1 -122.66961431663,38.1805448439175,0 -122.669598729892,38.180493748637,0 -122.669582672419,38.1804411101537,0 -122.669523870168,38.1803463120842,0 -122.669481521954,38.1802425480032,0 -122.669444740101,38.1801703435623,0 -122.66944518847,38.1800712068491,0 -122.669450784232,38.1800464874505,0 -122.669465577203,38.17998113911,0 -122.669485986264,38.1798865651512,0 -122.669511390541,38.1797920053215,0 -122.669540342422,38.17970196179421,0 -122.669578571137,38.1796119445023,0 -122.669623222224,38.1795219453628,0 -122.669651480621,38.1794273935692,0 -122.669676170918,38.1793328316761,0 -122.669681839303,38.1793134648622,0 -122.669705163141,38.17923377566891,0 -122.669726998888,38.1791392056894,0 -122.669747341419,38.1790593497752,0 -122.669748793856,38.1790536481344,0 -122.66976204591,38.1789635601473,0 -122.669786022304,38.1788689962044,0 -122.669834933926,38.1787835152894,0 -122.669890267829,38.1786980525038,0 -122.669900767453,38.1786683298882,0 -122.66991391478,38.1786311120498,0 -122.669922073202,38.178608016928,0 -122.669945844515,38.1785585177498,0 -122.669945845937,38.1785585147874,0 -122.669963134918,38.1785225137708,0 -122.669978547747,38.1784279255825,0 -122.670001096492,38.1783333575521,0 -122.670015795636,38.1782387673392,0 -122.670044053026,38.1781442154251,0 -122.670082993899,38.1780541999533,0 -122.670136186184,38.1779687309899,0 -122.670175860776,38.1778742112825,0 -122.67020909262,38.1777841796426,0 -122.670258716614,38.1776987005436,0 -122.670328300655,38.1776177840354,0 -122.670332729444,38.1776129688734,0 -122.670365936721,38.17757686452531,0 -122.670398577812,38.1775413757144,0 -122.670446794564,38.1774513862862,0 -122.670492156851,38.1773613887838,0 -122.670540353059,38.1772759055302,0 -122.670552196951,38.177181307177,0 -122.670552643782,38.1770821704008,0 -122.670548075221,38.17698752575091,0 -122.670540672655,38.1768883668309,0 -122.670513942485,38.1768026722129,0 -122.670497669711,38.1766133627699,0 -122.670482397571,38.1765186879143,0 -122.670478563022,38.1764195390486,0 -122.670489693271,38.1763249386744,0 -122.670503677793,38.17623034634931,0 -122.670529793046,38.1761357882394,0 -122.670562330394,38.1760412482355,0 -122.6706090985,38.1759557609041,0 -122.670668495889,38.1758716269315,0 -122.670669424365,38.1758703117802,0 -122.670781262745,38.1756905158301,0 -122.670826119462,38.17561840205791,0 -122.67088501766,38.1755329487936,0 -122.67094960398,38.1754520177983,0 -122.671014190157,38.1753710867657,0 -122.671080203325,38.1752901597146,0 -122.671144768944,38.1752137348253,0 -122.67114816437,38.1752113880102,0 -122.671191403622,38.1751815023323,0 -122.67123567553,38.1751509028724,0 -122.671322320836,38.175083552581,0 -122.671406131985,38.1750116879752,0 -122.671463357322,38.1749546899693,0 -122.671465144464,38.1749529099255,0 -122.671482827592,38.1749352970192,0 -122.671539563545,38.1748543436082,0 -122.671556039449,38.1748140357062,0 -122.671564095412,38.1747943269721,0 -122.671576360144,38.1747643215518,0 -122.671631688984,38.1746788578604,0 -122.671699127971,38.1745979344571,0 -122.6717551701,38.1745124727094,0 -122.671819041008,38.1744315392069,0 -122.671889313565,38.1743551299281,0 -122.671975264002,38.1742832709134,0 -122.671990626845,38.1742695099494,0 -122.672017377679,38.1742455484007,0 -122.672055505822,38.17421139580651,0 -122.672115808362,38.17413045211801,0 -122.672183939659,38.1740540366467,0 -122.672244262133,38.1739685866684,0 -122.672297448938,38.1738831166376,0 -122.672342093193,38.1737931163403,0 -122.67238816444,38.1737031200269,0 -122.672438496683,38.1736176419209,0 -122.672493823656,38.1735321777968,0 -122.672538244801,38.1734875144496,0 -122.672569803042,38.1734557840968,0 -122.672587444296,38.1734473442224,0 -122.672766452582,38.1733617033698,0 -122.672879334307,38.1733304756237,0 -122.672995070126,38.1732992557592,0 -122.67311431313,38.17328156442891,0 -122.673235636287,38.1732773976302,0 -122.673351351738,38.1732506836346,0 -122.673460012159,38.1732059246896,0 -122.673565818266,38.1731611576662,0 -122.673669523842,38.1731073721222,0 -122.673756144411,38.1730445262095,0 -122.673863397301,38.1729952566788,0 -122.673974157473,38.1729595156738,0 -122.67408917871,38.172928292732,0 -122.674205566684,38.172910592324,0 -122.674312105538,38.1728613203895,0 -122.674406554169,38.1728030020985,0 -122.67449888209,38.1727401715422,0 -122.674590496313,38.1726773389238,0 -122.674694853844,38.1726370731184,0 -122.674797844323,38.1725832845778,0 -122.674888744557,38.1725204497361,0 -122.6749704087,38.17244857656361,0 -122.675047791452,38.1723766914215,0 -122.67512233993,38.1723002920649,0 -122.675204003601,38.1722284187248,0 -122.675271436421,38.1721474932043,0 -122.675333874345,38.1720665537593,0 -122.675396312131,38.1719856142793,0 -122.675462317449,38.1719046846775,0 -122.675534030888,38.1718237708944,0 -122.675614266564,38.171751893294,0 -122.675702310949,38.1716890498779,0 -122.67580529937,38.1716352604345,0 -122.675921011328,38.1716085438814,0 -122.676039557354,38.1715863413543,0 -122.676265292579,38.1715283856238,0 -122.676383144795,38.1715016745464,0 -122.676500976983,38.1714794695745,0 -122.676618809102,38.171457264484,0 -122.676738048281,38.1714395694491,0 -122.676854473128,38.171412853947,0 -122.676978786539,38.1713771475871,0 -122.676979263226,38.171377400366,0 -122.677021498722,38.1713997971069,0 -122.67700130087,38.1714493103286,0 -122.676948101362,38.171539288787,0 -122.676861465353,38.1716066433177,0 -122.676770567921,38.1716694797106,0 -122.676681791,38.1717368281817,0 -122.676596581581,38.1718041864627,0 -122.676512065598,38.1718760528808,0 -122.676365846312,38.1720243550243,0 -122.676296987729,38.1721052772265,0 -122.676221727125,38.1721816753605,0 -122.676138657384,38.17224903923351,0 -122.676056994597,38.1723209132278,0 -122.675977472266,38.1723927931023,0 -122.6758979298,38.1724691791445,0 -122.675819834234,38.17254106286881,0 -122.675740311435,38.1726129425775,0 -122.675659361397,38.1726848182678,0 -122.675597616844,38.1727702660812,0 -122.675573669936,38.1728603251355,0 -122.675579651821,38.1729594798758,0 -122.675597070442,38.173054160102,0 -122.675657432599,38.1731121129065,0 -122.675672386308,38.1731264697204,0 -122.675760566149,38.1731943087244,0 -122.675864524122,38.1732441663383,0 -122.675976391186,38.1732805269678,0 -122.676095453746,38.1733033886117,0 -122.676214536341,38.1733217439124,0 -122.676335086001,38.1733310906016,0 -122.67656052724,38.1733407276915,0 -122.676691026785,38.1733591141259,0 -122.676810109623,38.1733774688236,0 -122.676919816797,38.1734183288566,0 -122.67703527231,38.1734501921266,0 -122.677150747828,38.17347754906031,0 -122.677263329438,38.17351391044,0 -122.677382412672,38.173532264559,0 -122.677503696266,38.1735371057986,0 -122.677625733178,38.173532936436,0 -122.677747056527,38.1735287649776,0 -122.677868419585,38.1735155809469,0 -122.677989049198,38.1735069010468,0 -122.678111086036,38.1735027311794,0 -122.678232409311,38.1734985592192,0 -122.678352245981,38.1735079018744,0 -122.678469862737,38.1735352634092,0 -122.678565220796,38.1735941075149,0 -122.678672768811,38.1736394662475,0 -122.678785351429,38.1736758261722,0 -122.678897934158,38.1737121859893,0 -122.679011250343,38.1737440414362,0 -122.679124546841,38.1737804029978,0 -122.6792371299,38.1738167624908,0 -122.679350426623,38.1738531238353,0 -122.679462296351,38.1738894811539,0 -122.679569845354,38.1739348390676,0 -122.679629677155,38.173981238983,0 -122.679657316208,38.1740026732016,0 -122.679577835058,38.174065543054,0 -122.67945928608,38.1740877491284,0 -122.679337961895,38.174091922351,0 -122.679216677255,38.1740870830009,0 -122.679098325997,38.1740642264739,0 -122.679039311357,38.1740381329627,0 -122.679003196849,38.1740221647944,0 -122.678995771983,38.1740188818589,0 -122.678883902291,38.1739825240968,0 -122.678769892049,38.1739461603406,0 -122.678654415187,38.1739188049944,0 -122.678536024736,38.1739049603493,0 -122.678414007081,38.1739046244313,0 -122.67830961009,38.1739539059807,0 -122.678250781258,38.1740258443725,0 -122.678233239329,38.1741204278794,0 -122.678242138622,38.1742060716755,0 -122.678275972767,38.1743007967167,0 -122.678330005379,38.1743460088137,0 -122.678357020834,38.1743686141199,0 -122.678448792255,38.1744319547138,0 -122.67854557857,38.1744908027614,0 -122.678594540723,38.1745113943232,0 -122.678651708313,38.1745354367297,0 -122.678696575773,38.1745543061619,0 contacts #khStyle84754 1 -122.808868150205,38.1712219515758,0 -122.809190596845,38.1711143326773,0 -122.809519906051,38.1711103661497,0 -122.809829978661,38.1712325438744,0 -122.810019154963,38.1714716870324,0 -122.810009220109,38.1717240220304,0 -122.809752529644,38.17192638451201,0 -122.809424738485,38.1718943016206,0 -122.809157240494,38.1717271318457,0 -122.808868150205,38.1712219515758,0 contacts #khStyle84754 1 -122.656924922657,38.1710495957853,0 -122.657066893785,38.1710545199496,0 -122.657173293729,38.1710368069638,0 -122.657369115211,38.1709697877803,0 contacts #khStyle84754 1 -122.591800022361,38.1730217255549,0 -122.591666714238,38.1726874074085,0 -122.591641569914,38.1724620063239,0 -122.591706230081,38.1722549439044,0 -122.591715872798,38.1720612081452,0 -122.59175423239,38.1718360287818,0 -122.591800013492,38.17168748183101,0 -122.591929753792,38.1714536088361,0 -122.592044519952,38.1713458589068,0 -122.592235783063,38.1712113380539,0 -122.5925341486,38.1710636713561,0 -122.592741871122,38.1709201944893,0 -122.592967818659,38.1708353621644,0 -122.593132126651,38.1708007001641,0 contacts #khStyle84754 1 -122.657709199353,38.1707229385425,0 -122.65751669274,38.1708440437558,0 -122.657369115211,38.1709697877803,0 contacts #khStyle84754 1 -122.620810539628,38.1706048696929,0 -122.620970631488,38.170780795288,0 -122.621016590229,38.1708620571948,0 -122.621132744411,38.1710291657819,0 -122.621202366323,38.17108797295071,0 -122.62129558122,38.1711378439745,0 -122.621442954062,38.1712014091456,0 -122.621720281629,38.1712473696792,0 -122.621844388155,38.171256783792,0 -122.621947802526,38.1712661308514,0 -122.622033332288,38.1712844325333,0 -122.622102769026,38.1713792887412,0 -122.622210526989,38.1715148252117,0 -122.622221175835,38.1716635665819,0 -122.622217166254,38.17174917277611,0 -122.622210023419,38.1718888440952,0 -122.622223875335,38.1719700017435,0 -122.622304892247,38.1720333513523,0 -122.622408626071,38.1721193056461,0 -122.622544515595,38.1721963511485,0 -122.622728281838,38.1722600322206,0 -122.622890828135,38.1722875943787,0 -122.623108455907,38.172288296306,0 -122.623450516777,38.1722353235076,0 -122.623583396195,38.1722042076084,0 -122.623805814532,38.1721057857054,0 -122.623915471216,38.17201150688721,0 -122.624015300251,38.1718856524527,0 -122.6241034116,38.1718183417758,0 -122.624205010416,38.1717645932102,0 -122.624380079361,38.1717155869525,0 -122.624492816826,38.1717159491896,0 -122.624617499366,38.171752399854,0 -122.624787432029,38.1718701085406,0 -122.624984962028,38.1720329682422,0 -122.6251521572,38.1721281362587,0 -122.625303310692,38.1721511522709,0 -122.625427396163,38.1721650688048,0 -122.625637359189,38.1721296913101,0 -122.625839564639,38.1722159579353,0 -122.626015461918,38.17228411495211,0 -122.626095925473,38.1723193752111,0 contacts #khStyle84754 1 -122.641628911659,38.1722113662129,0 -122.641680505914,38.17216646134461,0 -122.641817556284,38.1718649598873,0 -122.641985089493,38.1716041094728,0 -122.64223694613,38.1713164791386,0 -122.642351015584,38.1711906537535,0 -122.642396583231,38.1710646165497,0 -122.642412286127,38.1707717576433,0 -122.642427526381,38.1705735287571,0 -122.642503291055,38.1705467227049,0 -122.642595202381,38.1705740417039,0 -122.642603015548,38.1707272780265,0 -122.642709569357,38.1709709424706,0 -122.642793442249,38.1711829943664,0 -122.642930671163,38.1712825525654,0 -122.643235575651,38.17138262054051,0 -122.643883864651,38.1714476863154,0 -122.644348777922,38.1715121905454,0 -122.644486006912,38.17161174483,0 -122.644531553402,38.1717831231345,0 -122.644485934831,38.1720668807635,0 -122.6444401292,38.1722424842868,0 -122.644369522795,38.1723819639411,0 contacts #khStyle84754 1 -122.856070583273,38.1707359132927,0 -122.856282929128,38.1705198771172,0 -122.856566889242,38.1703534955506,0 -122.856881306522,38.1702998116301,0 -122.857053163846,38.1705343496698,0 -122.857055485326,38.1708047283796,0 -122.856901946012,38.1710523817636,0 -122.856591209328,38.1712277414244,0 -122.856338367107,38.17117335411301,0 -122.856070583273,38.1707359132927,0 contacts #khStyle84754 1 -122.819628105988,38.1727622959229,0 -122.819543862277,38.17249178860241,0 -122.819313800547,38.1723246982055,0 -122.81897040486,38.1722520619621,0 -122.818602961727,38.17223797016,0 -122.818464279881,38.1720529956894,0 -122.818451767837,38.1714896928868,0 -122.818304649522,38.1712551345554,0 -122.818089690906,38.1710430064636,0 -122.818290408895,38.1705296018322,0 -122.818216504121,38.1702636169771,0 -122.817939118412,38.17033528295361,0 -122.817667123405,38.1705331313009,0 -122.817348751474,38.1710148024169,0 -122.817268903051,38.1712715331262,0 -122.817299264226,38.1715419573402,0 -122.817496353222,38.172051477176,0 -122.817516369924,38.1723218850212,0 -122.817603850857,38.1725788789522,0 -122.817777382037,38.1728089722348,0 -122.818002715809,38.1730121086745,0 -122.818541722926,38.1733328975424,0 -122.818585612924,38.1736168624316,0 -122.818780682364,38.1737974174273,0 -122.819090859478,38.1737438258172,0 -122.819628105988,38.1727622959229,0 contacts #khStyle84754 1 -122.609202464341,38.1702040342571,0 -122.609320641666,38.17027829559811,0 -122.609390277436,38.1703326035263,0 -122.60952436993,38.17034206401641,0 -122.609768391629,38.170342878803,0 -122.610007940215,38.1703797283229,0 -122.610237355895,38.1704435811938,0 -122.610573535611,38.17055735828011,0 -122.610808732343,38.1706077104822,0 -122.61082582162,38.1706103391598,0 contacts #khStyle84754 1 -122.899099692167,38.1730662531908,0 -122.898243040754,38.1735927293364,0 -122.897792796733,38.1738356674504,0 -122.897310145947,38.1740335123844,0 -122.896798669664,38.17417725445231,0 -122.895852288337,38.1743241326927,0 -122.895730573596,38.1743430222068,0 -122.895324002339,38.1744372280818,0 -122.894684482565,38.1745854066928,0 -122.894210731567,38.1747877533214,0 -122.89379109801,38.1750667542915,0 -122.892644448287,38.1759849654975,0 -122.892002266644,38.1766738211045,0 -122.891630014291,38.1769889087973,0 -122.89121677388,38.1772724128295,0 -122.89076327937,38.1775108147178,0 -122.890175801113,38.1776319246318,0 -122.889877424114,38.177455895892,0 -122.890101791678,38.1770235101579,0 -122.89053499531,38.1767535477597,0 -122.893770942285,38.1744538854316,0 -122.894542482279,38.1738462512585,0 -122.896862781798,38.1727443238347,0 -122.897376552223,38.1719787206576,0 -122.897579758195,38.1715823516256,0 -122.897599983208,38.1711542755674,0 -122.897524231034,38.1707306201941,0 -122.897398184281,38.17033828706321,0 -122.897354796504,38.1702032372581,0 contacts #khStyle84754 1 -122.656305938495,38.17112438488671,0 -122.656128560527,38.1712139870838,0 -122.655900245883,38.1713620220972,0 -122.655747500318,38.1715237972313,0 -122.655656000853,38.1715595780811,0 -122.655579546047,38.171581883229,0 -122.655526200225,38.17154567757001,0 -122.655488402081,38.1712391390753,0 -122.655442428518,38.17100017006351,0 -122.655320726838,38.1707835102505,0 -122.655206154806,38.1705668713453,0 -122.655175312753,38.1704496162234,0 -122.655160761519,38.1702062345427,0 -122.655160389088,38.1701341345524,0 contacts #khStyle84754 1 -122.609014768038,38.1701316681307,0 -122.609111566552,38.1701469148955,0 -122.609202464341,38.1702040342571,0 contacts #khStyle84754 1 -122.868549735336,38.1700838538666,0 -122.868595045355,38.1700839054367,0 -122.868640287679,38.1701200072837,0 -122.868685597721,38.1701200588188,0 -122.868865860498,38.170264465156,0 -122.868863014643,38.1706565044379,0 -122.868817283128,38.1706925028613,0 -122.868816384014,38.1707961476943,0 -122.868633813438,38.1709401395127,0 -122.868361599264,38.1709398295294,0 -122.868271467454,38.1708676260185,0 -122.86822622485,38.1708315240349,0 -122.868228041056,38.1706152259953,0 -122.868183154818,38.1705791243995,0 -122.868183641529,38.1705070263142,0 -122.868229365085,38.1704755333735,0 -122.868230341075,38.170331335104,0 -122.868367176824,38.1702233400494,0 -122.868367598182,38.17018729015831,0 -122.868458696644,38.1701198005688,0 -122.868504362871,38.1701198525796,0 -122.868549735336,38.1700838538666,0 contacts #khStyle84754 1 -122.59306870515,38.1701752049042,0 -122.593020657566,38.1701866435948,0 -122.592809358152,38.1702039330354,0 -122.592710305442,38.1701810567193,0 -122.592657293439,38.1700907467054,0 -122.592638115974,38.1700757413225,0 -122.592576304298,38.1700273767939,0 -122.592495014398,38.1700180809895,0 -122.592250054969,38.170057783452,0 -122.592098615268,38.1700887991394,0 -122.591937548285,38.1701828687779,0 -122.591721609399,38.1703463122966,0 -122.59143381342,38.1705641424811,0 -122.591289281149,38.1706357376556,0 -122.591157843451,38.170662315767,0 -122.590932372643,38.1706615272064,0 -122.590686083974,38.1706831966767,0 -122.590579694605,38.1706963430177,0 contacts #khStyle84754 1 -122.608544718092,38.1699784268137,0 -122.608553016604,38.1699873265745,0 -122.608645291172,38.1700777609062,0 -122.608722895298,38.1701095645528,0 -122.608857628581,38.1701325467586,0 -122.608994646884,38.1701284988307,0 -122.609014768038,38.1701316681307,0 contacts #khStyle84754 1 -122.823841136656,38.1707634799807,0 -122.823955153671,38.1706780322303,0 -122.824046127785,38.1706781702966,0 -122.82409188129,38.1706421934463,0 -122.824092498583,38.170534040909,0 -122.82418400534,38.1704620787596,0 -122.824184448515,38.17042602897231,0 -122.824229845611,38.1703900494289,0 -122.824230288767,38.1703539975427,0 -122.824276031117,38.1703225237628,0 -122.824276118059,38.1702864734347,0 -122.824321871215,38.1702504922965,0 -122.824321958134,38.170214441968,0 -122.824596117135,38.1699985563165,0 -122.82464141616,38.1700031321843,0 -122.824687168958,38.1699671509029,0 -122.824732476153,38.16996721939131,0 -122.824777699313,38.170003338196,0 -122.824868316406,38.1700034750893,0 -122.824913539656,38.1700395938413,0 -122.824958849555,38.1700396622462,0 -122.825093801959,38.1701480151622,0 -122.825092751597,38.17028770805631,0 -122.825047001455,38.1703236894977,0 -122.825046469487,38.1703957896111,0 -122.825000716597,38.17043177103,0 -122.82500027383,38.1704678187209,0 -122.824954877059,38.1705038006592,0 -122.824953904861,38.1706119505624,0 -122.824725508739,38.1707873504955,0 -122.824725065829,38.1708234002819,0 -122.824451271145,38.1710347815084,0 -122.82440596063,38.1710347129091,0 -122.824269058527,38.1711426548024,0 -122.824223747946,38.171142586133,0 -122.824177994181,38.1711785672289,0 -122.824041708839,38.1711783605268,0 -122.823906756108,38.1710700043236,0 -122.823907286545,38.1709979063154,0 -122.823862416734,38.1709617877191,0 -122.823863926354,38.1707815377264,0 -122.823841136656,38.1707634799807,0 contacts #khStyle84754 1 -122.658788827605,38.1699465098462,0 -122.659018618513,38.1700913827341,0 -122.659201678237,38.1703127230267,0 -122.659338968479,38.1705564663864,0 -122.659589980107,38.1710483786996,0 -122.659971466977,38.1715632049701,0 -122.660192790313,38.1718432381347,0 -122.660246243864,38.1720101260662,0 -122.660230698374,38.1724381772539,0 -122.660269126612,38.1726140340809,0 -122.660337481139,38.1727989905242,0 -122.660695975709,38.1730433709478,0 -122.66089415721,38.173237716675,0 -122.661260442726,38.1734956358626,0 -122.661732785423,38.1739656586655,0 -122.661862765962,38.1742499293333,0 -122.661915787439,38.17451144664911,0 -122.661839550103,38.1747951203316,0 -122.661756682979,38.1748867587722,0 -122.661754910197,38.1748895717874,0 contacts #khStyle84754 1 -122.709827317274,38.1727792373613,0 -122.709906560401,38.1727794343349,0 -122.710027916693,38.1727662170355,0 -122.710144313907,38.17274397472911,0 -122.710250828721,38.1726946700755,0 -122.710301830027,38.1726091772873,0 -122.710301520145,38.172579458743,0 -122.710300796262,38.1725100364862,0 -122.710304072012,38.1725027463286,0 -122.710343270637,38.1724155099458,0 -122.710416944096,38.1723706299167,0 -122.710522031108,38.17232132147011,0 -122.710969260331,38.172182734994,0 -122.711284501223,38.1720393141122,0 -122.711536307372,38.1718777104832,0 -122.711797840775,38.1717206361501,0 -122.711820257043,38.1717071731064,0 -122.711992038551,38.1715724085829,0 -122.712237632882,38.1713567126872,0 -122.712249149484,38.1713545320294,0 -122.712472562072,38.1713122288143,0 -122.712586155358,38.1712764583142,0 -122.712732433032,38.1712192978176,0 -122.712754339208,38.1712107375821,0 -122.712907026607,38.1711510720437,0 -122.713011378984,38.1711062658297,0 -122.713126381046,38.1710750045535,0 -122.713363449397,38.171030524151,0 -122.713606797812,38.1710221089596,0 -122.713848648477,38.1710317147321,0 -122.714199377122,38.1712984449172,0 -122.714298363923,38.1713482564038,0 -122.71442107366,38.1713530630074,0 -122.71454028623,38.1713398357896,0 -122.714645369035,38.1712905236252,0 -122.714670604634,38.1712737260665,0 -122.714736179605,38.1712300773701,0 -122.714739801565,38.1712276664806,0 -122.714857622016,38.1712054229672,0 -122.714978226148,38.1712012112738,0 -122.715099508629,38.1712060136827,0 -122.715215708532,38.1712333349899,0 -122.715325434038,38.1712741592455,0 -122.71543371504,38.1713194861616,0 -122.715534112214,38.1713738063321,0 -122.715644551638,38.17141463202951,0 -122.715765869605,38.1714104212673,0 -122.715887117414,38.171424235349,0 -122.716125296934,38.171460865209,0 -122.716237163884,38.1715016938218,0 -122.716325414327,38.1715604900665,0 -122.716444644405,38.1715427546736,0 -122.716565249009,38.1715385413528,0 -122.716687263179,38.1715388376151,0 -122.716805639765,38.1715571500639,0 -122.717033708446,38.1716252975427,0 -122.717107723906,38.1716750461146,0 -122.71719303383,38.1717563660044,0 -122.717250046842,38.17177452928871,0 -122.717334226581,38.1717792394934,0 -122.71735933665,38.1717691938953,0 -122.717434992067,38.1717389269471,0 -122.717444634288,38.1716443183071,0 -122.717412178018,38.1715496077348,0 -122.717353286239,38.1714638457012,0 -122.717280141414,38.1713735428244,0 -122.717236877791,38.1713058437303,0 -122.717166482638,38.171242585155,0 -122.717117633184,38.1711433284807,0 -122.717085177551,38.1710486178128,0 -122.717054515809,38.1708592794864,0 -122.717025593076,38.1707735899344,0 -122.717025630594,38.1705798197378,0 -122.717047385605,38.1704897467671,0 -122.717154381403,38.1703142609742,0 -122.717232434481,38.1702423495375,0 -122.717319745719,38.170174966759,0 -122.717374738863,38.1701484956039,0 -122.717419585643,38.1701269084055,0 -122.717597372731,38.1700413295004,0 -122.717617718725,38.1700315358012,0 -122.717627134484,38.1700270034521,0 -122.717633057705,38.1700255274811,0 -122.717859967939,38.16996898484611,0 -122.717977071937,38.1699467364601,0 -122.718070373718,38.1699434961778,0 contacts #khStyle84754 1 -122.668071940455,38.1721092310027,0 -122.66802666483,38.1721383429785,0 -122.667964600323,38.1721782500463,0 -122.667792842624,38.1722886887119,0 -122.667746407768,38.1723141788067,0 -122.667694842257,38.1723424852966,0 -122.667620765401,38.172376738921,0 -122.667588299777,38.1723917512133,0 -122.667568523134,38.1723980096707,0 -122.667475396794,38.1724274800939,0 -122.667239741163,38.1724718685252,0 -122.66723972401,38.1724718717562,0 -122.667239700793,38.1724718684102,0 -122.666761247523,38.1724029136058,0 -122.66653905043,38.1723554591394,0 -122.666526006014,38.1723526732384,0 -122.66651430188,38.1723494615736,0 -122.666409843296,38.1723207976256,0 -122.666304445435,38.1722754338169,0 -122.666288631624,38.1722701243035,0 -122.666074322888,38.1721981695028,0 -122.665968843062,38.1721708302689,0 -122.665734275177,38.172129602798,0 -122.66550245862,38.172110914125,0 -122.665427808284,38.1720855549214,0 -122.665382101398,38.1720700279637,0 -122.665382056768,38.1720700128025,0 -122.665382044436,38.1720700052743,0 -122.665264521251,38.1719982622448,0 -122.665189225324,38.1719522970695,0 -122.665162502017,38.171927110016,0 -122.665125451292,38.1718921892016,0 -122.665112493911,38.1718799766824,0 -122.664998461587,38.1716948923384,0 -122.664982629774,38.17160508725961,0 -122.664981770424,38.1716002126372,0 -122.664966371488,38.1715347757555,0 -122.66494956307,38.1714633492298,0 -122.664948874616,38.1714604236768,0 -122.664933519337,38.171446243091,0 -122.664816715973,38.1713383750486,0 -122.664775865786,38.1712272464811,0 -122.664760336201,38.1711849998121,0 -122.664808317189,38.1709913675301,0 -122.664853764926,38.1708833472442,0 -122.664858380232,38.170836336446,0 -122.664863495108,38.1707842370331,0 -122.664801707864,38.1707209718605,0 -122.664682001526,38.1706845780911,0 -122.664445526006,38.1705937735089,0 -122.664209113151,38.1704894497948,0 -122.664034839183,38.1703717854886,0 -122.663923313863,38.1702633140137,0 -122.663896599375,38.1702282482807,0 -122.663761605787,38.170051053593,0 -122.663705865811,38.1699302063247,0 contacts #khStyle84754 1 -122.836798711632,38.1699217488016,0 -122.836616080274,38.1700656931337,0 -122.8366140997,38.1703135339412,0 -122.836658970124,38.17034964764691,0 -122.836658889295,38.1703856979679,0 -122.836793859744,38.1704940394848,0 -122.837066430714,38.1704944231454,0 -122.837111821528,38.170458436541,0 -122.837157129057,38.1704585002355,0 -122.837294359667,38.1703550449073,0 -122.837294440172,38.1703189987834,0 -122.837340186951,38.1702830125905,0 -122.837341657962,38.1701027624827,0 -122.83720633123,38.1699944231861,0 -122.837161021331,38.1699943595062,0 -122.837116150876,38.1699582459902,0 -122.837070840999,38.1699581822754,0 -122.837025611768,38.1699220682197,0 -122.836798711632,38.1699217488016,0 contacts #khStyle84754 1 -122.718648927048,38.169843771954,0 -122.718683888734,38.1698357852265,0 -122.718804525146,38.1698225571021,0 -122.719047068797,38.1698366601208,0 -122.719166870288,38.1698549736208,0 -122.719283069597,38.1698822909072,0 -122.71949103572,38.1699819292769,0 -122.719884085136,38.1701946688454,0 -122.719999554445,38.1702264899573,0 -122.720119391365,38.1702357899982,0 -122.72036341547,38.1702363749917,0 -122.720416465641,38.1702235281485,0 -122.720515156742,38.1701996286382,0 -122.720547676341,38.1701917535145,0 -122.720712534028,38.170183135605,0 -122.720955113705,38.17018822219841,0 -122.721073471993,38.1702110365902,0 -122.721182502948,38.1702473474376,0 -122.721295122518,38.1703445050653,0 contacts #khStyle84754 1 -122.823102064533,38.1696718348061,0 -122.823147286702,38.1697079542429,0 -122.823146311842,38.1698161041525,0 -122.823100558382,38.1698520848362,0 -122.82310012562,38.1698836272836,0 -122.823008974709,38.1699555891402,0 -122.823008530958,38.1699916389273,0 -122.822963133505,38.1700276201004,0 -122.822917467434,38.1700275503817,0 -122.822826318822,38.1700995120996,0 -122.822554108372,38.1700990959351,0 -122.822417213622,38.1702025304434,0 -122.822326240107,38.1702023911139,0 -122.822280844851,38.1702383699288,0 -122.822235622779,38.1702022522598,0 -122.821872791972,38.1702016955891,0 -122.821782707178,38.1701294562723,0 -122.82178279535,38.1700934059418,0 -122.821737929805,38.1700572865284,0 -122.821739441979,38.1698770386165,0 -122.821922091092,38.1697376225845,0 -122.821967398137,38.1697376921399,0 -122.822058905976,38.1696657337321,0 -122.82228544896,38.1696660810832,0 -122.822331202703,38.1696301007152,0 -122.822421819322,38.1696302394973,0 -122.822467572975,38.1695942590762,0 -122.822875696779,38.1695993904629,0 -122.822920918791,38.1696355099876,0 -122.823056845062,38.169635717454,0 -122.823102064533,38.1696718348061,0 contacts #khStyle84754 1 -122.593132126651,38.1708007001641,0 -122.593219990563,38.1707821645064,0 -122.593295798506,38.1707508843386,0 -122.593364571314,38.1707015545873,0 -122.593392748719,38.1706385648336,0 -122.593483402083,38.170503692017,0 -122.593573604947,38.170449930375,0 -122.593761045414,38.1703604563915,0 -122.593928970738,38.1703159770115,0 -122.594350067714,38.1702949073148,0 -122.594782879875,38.1702198014939,0 -122.595007710693,38.1702070616379,0 -122.595080613417,38.1701847827844,0 -122.595053774106,38.1701351208892,0 -122.59492057199,38.1700941030911,0 -122.594738651864,38.1700889664429,0 -122.594071983778,38.170131716608,0 -122.593981567837,38.1700953525429,0 -122.593914184198,38.1700230182577,0 -122.59388313965,38.1699598226878,0 -122.593876040765,38.1698246099939,0 -122.593898220641,38.1696849927191,0 -122.593895527722,38.1695272639811,0 -122.593822950211,38.1694909617453,0 -122.5937462303,38.1695582892413,0 -122.593517284798,38.1699270075549,0 -122.593432565449,38.1700213446365,0 -122.59333377587,38.1700795825797,0 -122.593188557898,38.1701466714529,0 -122.59306870515,38.1701752049042,0 contacts #khStyle84754 1 -122.62166351547,38.17482151226051,0 -122.621658283886,38.1748206412122,0 -122.621557928531,38.1747707473764,0 -122.621363896702,38.174621412126,0 -122.621150366407,38.1745170760456,0 -122.620878688675,38.1744801450236,0 -122.620759595093,38.17446623987721,0 -122.620638314176,38.1744613400489,0 -122.620396138715,38.174514629034,0 -122.620304726169,38.174517788286,0 -122.620276951648,38.1745187481697,0 -122.620165800778,38.1744868431491,0 -122.62006765774,38.1744234364235,0 -122.620004549185,38.1743466247093,0 -122.619920029762,38.174087180821,0 -122.619909027146,38.1740534066553,0 -122.619854505074,38.1739721165084,0 -122.619738828634,38.1738500709828,0 -122.619545352493,38.1737322784125,0 -122.619405848714,38.1736642302314,0 -122.619204092398,38.1734923349053,0 -122.619042178171,38.1733431004331,0 -122.618878485533,38.1732614539795,0 -122.618794687667,38.1731657884828,0 -122.618755770298,38.1731213594496,0 -122.618736307567,38.1730221580387,0 -122.618737833363,38.1727292554817,0 -122.618629343038,38.1725982197458,0 -122.618591211278,38.1725214887422,0 -122.618592742756,38.1724958156324,0 -122.618599811588,38.172377316162,0 -122.618515535167,38.1722553718586,0 -122.618406740515,38.1721829164294,0 -122.618282726904,38.1721554739047,0 -122.618150056971,38.1721460280533,0 -122.617908883191,38.172145239976,0 -122.617784940428,38.1721042783472,0 -122.617653407894,38.1720137227903,0 -122.617443340313,38.1719319226341,0 -122.617171697592,38.1718904768941,0 -122.616930501093,38.1718941930056,0 -122.616759778826,38.1719296835821,0 -122.616588531702,38.1719291220273,0 -122.616440282824,38.171897091796,0 -122.616292700361,38.1718740761055,0 -122.616152754132,38.1718916417356,0 -122.616066870622,38.17194092866381,0 -122.615949307947,38.1720441866941,0 -122.615839877594,38.1720933960914,0 -122.615668606447,38.1720973393851,0 -122.615568116878,38.1720744776057,0 -122.615474881043,38.17202910825201,0 -122.615324062518,38.17194299292151,0 -122.615199573848,38.1718704828814,0 -122.615025828271,38.1718023167747,0 -122.614686734369,38.1716975553589,0 -122.614452268715,38.1716427070576,0 -122.614127732835,38.1716191049022,0 -122.613809666454,38.1715865106833,0 -122.613536504905,38.1715630766033,0 -122.613070834531,38.1715119672465,0 -122.612634989788,38.171487992497,0 -122.612386659206,38.1714916756396,0 -122.612253585508,38.1715588283778,0 -122.612167153399,38.1715765667437,0 -122.611925957763,38.1715802725817,0 -122.611682621529,38.1715839708138,0 -122.611464972157,38.1716244843237,0 -122.611444778217,38.1716282432246,0 -122.611330422602,38.1716639132382,0 -122.611115885836,38.17175332516,0 -122.611016394231,38.1718115756574,0 -122.610839458091,38.1719416685981,0 -122.610749241903,38.1719999497425,0 -122.610624943894,38.172026573421,0 -122.610508236642,38.1719676031457,0 -122.610392770729,38.1718094989695,0 -122.610315475928,38.1717191159598,0 -122.610226692917,38.171642213404,0 -122.610135007992,38.1715743136418,0 -122.610031073287,38.171528904293,0 -122.609919907417,38.1715014958016,0 -122.609717194255,38.1715143380405,0 -122.609601603193,38.17151395209081,0 -122.609500498967,38.1714730579944,0 -122.609443609317,38.1714368177989,0 -122.608982930377,38.1711198390209,0 -122.608879734624,38.17106992485521,0 -122.608652482848,38.171001570311,0 -122.608258219745,38.170941668358,0 -122.608080322358,38.1708509467278,0 -122.607847894889,38.1706834353454,0 -122.607709193721,38.1706018571615,0 -122.607601694316,38.1705564337013,0 -122.607475619489,38.1705154540473,0 -122.607253861297,38.1704876716703,0 -122.607168457113,38.1704468283075,0 -122.607060631718,38.1703293029406,0 -122.60695285505,38.1702027650973,0 -122.606863291277,38.1701393761781,0 -122.606696692686,38.1700712217928,0 -122.606490657588,38.1700389846001,0 -122.606152744487,38.1699837715094,0 -122.605864656271,38.169951256776,0 -122.605520079686,38.1699410821011,0 -122.605110768283,38.1698946376266,0 -122.604878010153,38.1697902070269,0 -122.6046686281,38.1697173989002,0 -122.604543910359,38.1696899394997,0 -122.604365606662,38.1696758174574,0 -122.604248810748,38.1696348657409,0 -122.604148101896,38.169521868058,0 -122.603989575138,38.169413180735,0 -122.603944719652,38.1693937122562,0 contacts #khStyle84754 1 -122.714352140488,38.169312702186,0 -122.714308315569,38.1693519962177,0 -122.714214696256,38.1694012810583,0 -122.714206071723,38.1694058213403,0 -122.714200116226,38.1694077088206,0 -122.714049429704,38.1694554658813,0 -122.713980319395,38.1694773689174,0 -122.713510421178,38.16957986104221,0 -122.713390480075,38.1695975917214,0 -122.713269147276,38.1696063062868,0 -122.713147136339,38.1696060064881,0 -122.713025856629,38.1696012020743,0 -122.712908215374,38.1695783813407,0 -122.712794908446,38.1695420522964,0 -122.712594836793,38.1694334089504,0 -122.712476553402,38.1693925610588,0 -122.712359590664,38.1693787540196,0 -122.712261644201,38.1694280817502,0 -122.712185695577,38.1695090040195,0 -122.712185692181,38.1695090076379,0 -122.712185689835,38.1695090142926,0 -122.712155774127,38.1695938598342,0 -122.712153942337,38.1695990550631,0 -122.712153488019,38.16960662983,0 -122.712147036537,38.1697141940727,0 -122.712136376838,38.169891920323,0 -122.712132319944,38.1699129916654,0 -122.712118165839,38.1699865074077,0 -122.712087111455,38.1700810628078,0 -122.712079313316,38.170097881667,0 -122.712045371965,38.170171085552,0 -122.712025034467,38.1701932204464,0 -122.711975144876,38.1702475191292,0 -122.711919041349,38.1702857309075,0 -122.711914447136,38.1702888599957,0 -122.711882851827,38.1703103793403,0 -122.711769973217,38.17034615093341,0 -122.711649281349,38.1703728905451,0 -122.711535206906,38.1703500772489,0 -122.711314353776,38.1702639118013,0 -122.711202473632,38.1702275847532,0 -122.711082566593,38.1702363005835,0 -122.710971114755,38.1702720749403,0 -122.710901900638,38.1703374194478,0 -122.71089018364,38.17034848135891,0 -122.71090207254,38.1703855898917,0 -122.710908136888,38.1704045183758,0 -122.710919081232,38.1704386786355,0 -122.711141772451,38.1707817076184,0 -122.711173887834,38.1708427868306,0 -122.711189222203,38.170871950734,0 -122.711197450601,38.1708996160522,0 -122.711217389013,38.1709666524069,0 -122.711214697016,38.1711063396394,0 -122.711214696995,38.1711063407147,0 -122.711177146885,38.1712189047771,0 -122.711132551512,38.1713089201087,0 -122.711071580465,38.1713898823178,0 -122.711019019911,38.171449234606,0 -122.710999906303,38.1714708179934,0 -122.710937490072,38.1715562828361,0 -122.710845854499,38.1716326626935,0 -122.710762870397,38.1716865324962,0 -122.710651416209,38.1717223065298,0 -122.710408653621,38.1717622610325,0 -122.7102950943,38.1717890169359,0 -122.709938879152,38.1718286888205,0 -122.70982457021,38.171864454973,0 -122.709724460231,38.171918281461,0 -122.709632163174,38.1719811398667,0 -122.709624315087,38.1719887896782,0 -122.709579065883,38.1720328956524,0 -122.709558382092,38.1720530568408,0 -122.709466780335,38.1721204231281,0 -122.709365260605,38.17216973951371,0 -122.709129505608,38.17224125279751,0 -122.709028093223,38.1722635314564,0 -122.708909573782,38.1722812610833,0 -122.708665525176,38.1722851584985,0 -122.708544972907,38.172275844983,0 -122.708305367543,38.1722391961937,0 -122.70818627849,38.1722208733999,0 -122.708071506761,38.172193548716,0 -122.707854219904,38.1721073857046,0 -122.707753827433,38.1720530589972,0 -122.707659161447,38.1719942402623,0 -122.707573807674,38.1719264322129,0 -122.707390220858,38.1717997962095,0 -122.70728982915,38.1717454691062,0 -122.707184424783,38.17169563562641,0 -122.70706389175,38.1716818143567,0 -122.706948922374,38.1717040572002,0 -122.706852360115,38.1717623964275,0 -122.706813135004,38.1717977168505,0 -122.706736223198,38.1718669722866,0 -122.706692662734,38.1719061963387,0 -122.706339106836,38.17217117814441,0 -122.706248947211,38.1722340392586,0 -122.706050129862,38.1723461958473,0 -122.705933713924,38.1723729403318,0 -122.705579543482,38.1724351355439,0 -122.705092176704,38.1724384115861,0 -122.704971533642,38.1724516255878,0 -122.704623015689,38.1725273510456,0 -122.704515820309,38.1725676363006,0 -122.704397994627,38.1725898694088,0 -122.704038863598,38.1726430348405,0 -122.703673492999,38.1726511205092,0 -122.703560094517,38.1726373137539,0 -122.703525245214,38.1726372252529,0 contacts #khStyle84754 1 -122.668220623856,38.1718933520551,0 -122.668238859494,38.1718078954257,0 -122.668241766176,38.1717942739839,0 -122.668256916039,38.1716005470443,0 -122.668275905444,38.1714866521792,0 -122.668276711656,38.1714818166622,0 -122.668288456532,38.1714113729201,0 -122.668288172342,38.1713167402638,0 -122.668315002172,38.1712221845983,0 -122.668466027965,38.1709612491636,0 -122.668587369344,38.1707948611662,0 -122.668623453957,38.170704837956,0 -122.668646002003,38.1706102700566,0 -122.668652872971,38.170511151404,0 -122.6686465955,38.1703218698659,0 -122.668654893472,38.1702227552561,0 -122.6686902642,38.1701327299907,0 -122.668699518801,38.1701236557657,0 -122.668830284963,38.1699954379624,0 -122.668841489678,38.1699844515754,0 -122.669251923747,38.1696341245814,0 -122.669263980681,38.16962031164681,0 -122.669272591084,38.1696104471999,0 -122.669318626789,38.16955770666641,0 -122.669397909205,38.1693934091659,0 -122.669452258184,38.1692807809378,0 -122.669464120864,38.1692561976744,0 contacts #khStyle84754 1 -122.83568692425,38.1699697456547,0 -122.83581810606,38.1704926608649,0 -122.83587255355,38.1710289829664,0 -122.835978742279,38.1715608729918,0 -122.83593170316,38.17185371507221,0 -122.835768253046,38.1720337335511,0 -122.835474964804,38.17188461052321,0 -122.835218536269,38.1716859708856,0 -122.834550971391,38.1710766717582,0 -122.833830165553,38.1705078501879,0 -122.833173345135,38.1698895479101,0 -122.833063684319,38.1696370389705,0 -122.833063947636,38.16936666309231,0 -122.833207982888,38.1690964942252,0 -122.833469906373,38.1690698330913,0 -122.833784556444,38.1692325118716,0 -122.834294258272,38.1695937421489,0 -122.834582214872,38.1697293427529,0 -122.834920180519,38.1696802543376,0 -122.835236943496,38.1696987304306,0 -122.83568692425,38.1699697456547,0 contacts #khStyle84754 1 -122.809177541369,38.1695596454214,0 -122.80890726861,38.1693654304427,0 -122.808900033773,38.1691310924049,0 -122.809141367964,38.1689332138308,0 -122.809488538207,38.1689157589076,0 -122.80983661753,38.1689613907186,0 -122.81012776039,38.1690880440822,0 -122.810274386294,38.16936316781501,0 -122.810057907737,38.1694709631422,0 -122.809177541369,38.1695596454214,0 contacts #khStyle84754 1 -122.604272248862,38.1691537536911,0 -122.604415230102,38.16920733328381,0 -122.604788148593,38.1692536571623,0 -122.605152830213,38.1693720523642,0 -122.605254099188,38.1693814068687,0 -122.605331497686,38.1693185803843,0 -122.60534863693,38.1691834501293,0 -122.605317995842,38.1690436523107,0 -122.605250597216,38.1688974022039,0 contacts #khStyle84754 1 -122.659967956756,38.16910102839681,0 -122.65976096408,38.16895796394341,0 -122.659631011589,38.1688912111315,0 contacts #khStyle84754 1 -122.655181212798,38.1696520237675,0 -122.655305373973,38.1694991755123,0 -122.655397092847,38.16926511991241,0 -122.655381680119,38.1690532788075,0 -122.655305449878,38.1688773087907,0 contacts #khStyle84754 1 -122.605250597216,38.1688974022039,0 -122.605195280278,38.1687773680181,0 -122.605150117916,38.1685519019646,0 -122.605166252215,38.1684708435763,0 -122.60523636911,38.1684350301776,0 -122.605337442501,38.1684804341155,0 -122.605484286247,38.1686386491938,0 -122.605539104125,38.1686613655111,0 -122.605624155912,38.1686346148118,0 -122.605709775538,38.16863490359091,0 -122.605788114627,38.1686622053849,0 -122.605871773653,38.1687616253943,0 -122.605918330951,38.1688609202907,0 -122.605979871875,38.1689602656654,0 -122.606115689795,38.1690463424583,0 -122.60631311148,38.1690875638438,0 -122.606480566316,38.169128684036,0 -122.60669757919,38.1692420710461,0 -122.607078601914,38.1693740340594,0 -122.60738150288,38.1694381394531,0 -122.607700053209,38.1695113091204,0 -122.607824179036,38.169516231834,0 -122.607967714306,38.1694941818793,0 -122.608096241762,38.1694765877119,0 -122.608208213856,38.1694859755483,0 -122.608282963148,38.1695177699194,0 -122.608336779768,38.1695945568241,0 -122.60839803533,38.1697479752196,0 -122.608481361739,38.1699104800357,0 -122.608544718092,38.1699784268137,0 contacts #khStyle84754 1 -122.714772186717,38.1683527351289,0 -122.714773689521,38.1683978016099,0 -122.714758680133,38.1685870289899,0 -122.714732236959,38.1687807347033,0 -122.714703344568,38.1688707898204,0 -122.714660164335,38.16896531628601,0 -122.714607737831,38.1690402086827,0 contacts #khStyle84754 1 -122.662486669127,38.1836247790464,0 -122.662484094258,38.1835853756292,0 -122.662481894868,38.1835517181555,0 -122.662474004633,38.1834309729169,0 -122.662476429143,38.1834242627821,0 -122.662526284777,38.1832862807631,0 -122.662539064845,38.1832509101597,0 -122.662544582876,38.18324414758141,0 -122.662589056555,38.1831896431672,0 -122.662603993199,38.1831713376433,0 -122.662605094402,38.1831699880689,0 -122.662695824093,38.1829945055382,0 -122.662795818336,38.1828215448626,0 -122.662797258376,38.1828190540102,0 -122.662880851025,38.1826435508086,0 -122.66288713406,38.1826339727656,0 -122.66292907013,38.1825700441171,0 -122.662936909533,38.1825580934737,0 -122.66298460428,38.18247014269421,0 -122.663080862268,38.1822926388951,0 -122.663143058847,38.1821254210865,0 -122.6631495089,38.1821080798335,0 -122.663151637103,38.1820966191111,0 -122.663184635336,38.1819189178052,0 -122.663185385259,38.1819168587395,0 -122.663251854097,38.18173435455321,0 -122.663397924196,38.1814734119158,0 -122.663468099087,38.1813952904733,0 -122.663539234445,38.181316099586,0 -122.663553474169,38.1813038357142,0 -122.663666367435,38.1812066068944,0 -122.663761255586,38.1811248846146,0 -122.663860900937,38.181039064923,0 -122.663951205016,38.18096129016731,0 -122.664037863805,38.1808939453888,0 -122.664075829501,38.1808735563756,0 -122.664138019091,38.1808401581647,0 -122.664147757606,38.1808335331865,0 -122.66423036582,38.1807773358673,0 -122.664305301773,38.1807165907132,0 -122.664313456047,38.1807099806242,0 -122.664324296155,38.1806968369861,0 -122.66436426865,38.1806483702604,0 -122.664380194984,38.1806290595284,0 -122.664384753525,38.18062001763721,0 -122.664423408698,38.180543344779,0 -122.664425566645,38.1805390644679,0 -122.66445026402,38.1804445037289,0 -122.664451705478,38.1804314965867,0 -122.664459942069,38.1803571727736,0 -122.664481165379,38.1801656611059,0 -122.664491672168,38.18007085116,0 -122.664492698198,38.1800615925777,0 -122.664493033256,38.1800339730049,0 -122.664493846152,38.1799669641782,0 -122.664495843807,38.1799578221071,0 -122.664513492395,38.1798770549648,0 -122.664513527289,38.1798768952792,0 -122.664544923796,38.1797970085235,0 -122.664548907784,38.1797868714619,0 -122.664549853701,38.17977381935361,0 -122.664551865731,38.1797460566021,0 -122.664555764528,38.1796922594514,0 -122.664551857398,38.1796398671802,0 -122.664549138147,38.1796034036021,0 -122.66454836978,38.1795931002409,0 -122.664513815391,38.1795028755351,0 -122.664467132275,38.1794126160484,0 -122.66443761982,38.1793786493387,0 -122.664406471882,38.179342800265,0 -122.664400405025,38.1793358177366,0 -122.664220514249,38.1792096505149,0 -122.664122989361,38.1791412506915,0 -122.664114515277,38.1791204124042,0 -122.664101750082,38.17908902199061,0 -122.664086296139,38.1790510197393,0 -122.6640896061,38.1789518912738,0 -122.664101950015,38.1789144332043,0 -122.664110295165,38.1788891095124,0 -122.664119277856,38.1788618511551,0 -122.664234240456,38.1786909433221,0 -122.664242946066,38.17868003682711,0 -122.664289211121,38.1786220753299,0 -122.664298836842,38.1786100160816,0 -122.664347313906,38.1785629395349,0 -122.664451515818,38.1784617477755,0 -122.664538884793,38.17839440463031,0 -122.664539595069,38.1783937165776,0 -122.664579380087,38.1783551762935,0 -122.664617731814,38.17831802440611,0 -122.664626465801,38.1783081267876,0 -122.66465483008,38.1782759835082,0 -122.664685161158,38.1782416113526,0 -122.664694892293,38.178222459592,0 -122.664720341881,38.1781723724319,0 -122.664776614235,38.1780616229309,0 -122.66477841456,38.1780540747636,0 -122.664796376643,38.177978765608,0 -122.664798971128,38.1779678877657,0 -122.664799169531,38.1779670559278,0 -122.664846723241,38.1779024739262,0 -122.664858769521,38.1778861140284,0 -122.66487430954,38.1778678578195,0 -122.664923055743,38.1778105913557,0 -122.664927646053,38.1778051987075,0 -122.664928736265,38.1778008999563,0 -122.664969356981,38.1776407303933,0 -122.664975610391,38.1776160728125,0 -122.664976471661,38.1776062356127,0 -122.664979991944,38.1775660278765,0 -122.664983893539,38.17752146483101,0 -122.664979930847,38.1775096992367,0 -122.664960206427,38.1774511355702,0 -122.664957102001,38.1774419182272,0 -122.664955028853,38.17743576285,0 -122.664954748976,38.1773411303063,0 -122.664957029155,38.1773358603466,0 -122.664991613629,38.1772559284554,0 -122.664993695619,38.17725111654,0 -122.665007292343,38.1772344508255,0 -122.665052507626,38.1771790296883,0 -122.665059717069,38.1771701929429,0 -122.665147083953,38.17710284931921,0 -122.665169707017,38.1770700318026,0 -122.665205989911,38.1770173989657,0 -122.665212687825,38.1770056460908,0 -122.665273324412,38.1768992464782,0 -122.665305982519,38.17684194083591,0 -122.665312485335,38.1768239397371,0 -122.66533117844,38.1767721934169,0 -122.665338506244,38.1767519085424,0 -122.665334451684,38.1767023279127,0 -122.665331043577,38.1766959734035,0 -122.665305356155,38.1766480784575,0 -122.665288461011,38.1766165769341,0 -122.665263774619,38.1765534183584,0 -122.665305409725,38.1764994623718,0 -122.665370202273,38.1764493130925,0 -122.665479427713,38.1763647726225,0 -122.66552517132,38.17631651667061,0 -122.665551849396,38.176288373336,0 -122.665555844795,38.1762831955462,0 -122.665607174121,38.1762166758424,0 -122.665614301491,38.1762074391905,0 -122.665619327268,38.17619374142651,0 -122.665644905587,38.17612402759711,0 -122.665648985886,38.17611290671031,0 -122.665672253022,38.1760183415412,0 -122.665691952236,38.1759237661547,0 -122.665692070902,38.1759225181556,0 -122.665697198446,38.1758685921726,0 -122.665700461695,38.1758342727851,0 -122.66570094783,38.1758291601314,0 -122.665711584849,38.1758045746351,0 -122.665731723258,38.1757580283919,0 -122.665739892751,38.1757391460852,0 -122.665797369784,38.1756536913219,0 -122.665807807823,38.1756454423905,0 -122.665840387985,38.175619695052,0 -122.665882593484,38.17558634099581,0 -122.665899619536,38.1755773254685,0 -122.665956811524,38.1755470414951,0 -122.665984167333,38.175532556185,0 -122.666020387703,38.175519139253,0 -122.666092814968,38.17549231033141,0 -122.666203902381,38.1754621646455,0 -122.666207843444,38.1754610951604,0 -122.66623582374,38.1754580584747,0 -122.666250984231,38.1754564131124,0 -122.666329211661,38.1754479230864,0 -122.666447053118,38.1754257282659,0 -122.66652142752,38.1753898909272,0 -122.66654931935,38.1753764512156,0 -122.666564345928,38.17536748121951,0 -122.666693195415,38.1752905653766,0 -122.666744657215,38.1752598455131,0 -122.666771967231,38.1752412643816,0 -122.666829536164,38.1752020957005,0 -122.666836994712,38.1751970210571,0 -122.6669415653,38.1751117000309,0 -122.666952186185,38.1750805334843,0 -122.666955492996,38.1750708297778,0 -122.666992192185,38.1749631372798,0 -122.667015802566,38.1749251451411,0 -122.667017351614,38.1749226525224,0 -122.667019051448,38.1749224291087,0 -122.667118025494,38.1749094206359,0 -122.667239495203,38.1748737165282,0 -122.667333821846,38.1748420816557,0 -122.667397176298,38.1748208340485,0 -122.667426021916,38.1748111598846,0 -122.667432113631,38.1748083240396,0 -122.667485070193,38.1747836714164,0 -122.66753185445,38.1747618921236,0 -122.667535038126,38.1747598761982,0 -122.667801669056,38.17459104295351,0 -122.667815243675,38.1745824473389,0 -122.667829448912,38.1745701426639,0 -122.668130182723,38.1743096435716,0 -122.668141915463,38.174299480484,0 -122.668282488212,38.1741421600999,0 -122.668289464007,38.1741294095891,0 -122.668329257734,38.174056673656,0 -122.668329981392,38.17405442294031,0 -122.668388607245,38.1738720848216,0 -122.66838876242,38.1738684933926,0 -122.668405349624,38.1734845925494,0 -122.668417983847,38.1734260452054,0 -122.668422996019,38.1734028186324,0 -122.668425758183,38.1733900186668,0 -122.668451793699,38.1733090420194,0 -122.668451813727,38.1733089797272,0 -122.668454708816,38.1732999753015,0 -122.668457357281,38.1732941724681,0 -122.668493892067,38.1732141240253,0 -122.668495789661,38.1732099663534,0 -122.668563230721,38.1731290447414,0 -122.668577996016,38.1731150881632,0 -122.668796133285,38.1729088977601,0 -122.668870276014,38.1728469134947,0 -122.668882085023,38.1728370409982,0 -122.668936427211,38.1728078506361,0 -122.668972600521,38.1727884198118,0 -122.668982225818,38.1727832494923,0 -122.669001041697,38.1727772948451,0 -122.6690655586,38.1727568771986,0 -122.669095128628,38.1727475191644,0 -122.669290253316,38.172726077912,0 -122.669335000925,38.172721160779,0 -122.669394444281,38.1726997065819,0 -122.669446496764,38.1726809198516,0 -122.669534673002,38.1726338913745,0 -122.669547350478,38.1726271298784,0 -122.66963968229,38.1725643031607,0 -122.669790676409,38.1724394095238,0 -122.66980799511,38.1724250844515,0 -122.669900380488,38.1723423337116,0 -122.669968478728,38.1722813370977,0 -122.669976458122,38.1722722445045,0 -122.670000752575,38.1722445607327,0 -122.670078589061,38.1721558651075,0 -122.670102601561,38.1721285025163,0 -122.670163618285,38.1720475619,0 -122.670387623678,38.171729699609,0 -122.670401321831,38.1717102619092,0 -122.67050983687,38.17153932946781,0 -122.670537607893,38.171484227911,0 -122.670555195391,38.1714493318301,0 -122.670555323919,38.1714484623911,0 -122.670560718995,38.1714119669421,0 -122.670569178858,38.1713547394126,0 -122.67056890032,38.171332018486,0 -122.670564483069,38.1709716924523,0 -122.670566139079,38.1709668962178,0 -122.670595570694,38.1708816545402,0 -122.670723620758,38.1706555397193,0 -122.670745894506,38.1706162078785,0 -122.670769575599,38.1705827477414,0 -122.670852437173,38.1704656684236,0 -122.670863662587,38.1704498074335,0 -122.670873228842,38.1704396130179,0 -122.670935359342,38.1703734026796,0 -122.671049699878,38.1702736506864,0 -122.671093562592,38.1702353842496,0 -122.671100117384,38.1702296657543,0 -122.671105508105,38.1702236822123,0 -122.671168959612,38.1701532528163,0 -122.671220694594,38.1700722900861,0 -122.671223571907,38.1700677872251,0 -122.671229035472,38.1700549196568,0 -122.671259630805,38.1699828626789,0 -122.67126179349,38.1699777691993,0 -122.671273690248,38.1698840153536,0 -122.671274368991,38.1698786664284,0 -122.671339415799,38.1696940919779,0 -122.671342088821,38.1696897378307,0 -122.671475128253,38.1694730260546,0 -122.671496829091,38.1694376767968,0 -122.671527151876,38.1693931374039,0 -122.671545475788,38.1693662224342,0 -122.671555008016,38.1693522210692,0 -122.671577027775,38.1693310300036,0 -122.671687126608,38.1692250743948,0 -122.671709080179,38.1692039469283,0 -122.671722085103,38.1691950969668,0 -122.671776527775,38.1691580482258,0 -122.671801405855,38.1691411184422,0 -122.671811647998,38.1691356552712,0 -122.67189631629,38.1690904930401,0 -122.671902253005,38.16908732638001,0 -122.67211813614,38.1689978069459,0 -122.672144815922,38.1689761723817,0 -122.672201205849,38.168930445879,0 -122.672220978584,38.1689097860229,0 -122.672258642711,38.1688704320218,0 -122.672274326744,38.1688540442775,0 -122.672276683091,38.1688441592386,0 -122.672296294013,38.1687618899621,0 -122.672296869531,38.1687594756199,0 -122.672296819425,38.1687591144222,0 -122.67229496102,38.16874571756691,0 -122.672283737138,38.168664806872,0 -122.672282321562,38.1686621186365,0 -122.672191056287,38.1684888018424,0 -122.672183895697,38.1684688738633,0 -122.672169887789,38.16842988971381,0 -122.672158639377,38.168398585237,0 -122.672138372234,38.1683038964427,0 -122.672138459509,38.1683025498948,0 -122.672144416405,38.16821064198741,0 -122.672144504567,38.1682092817432,0 -122.672146432041,38.1682057730968,0 -122.672194478491,38.1681183123567,0 -122.672198955821,38.1681101620942,0 contacts #khStyle84754 1 -122.669464120864,38.1692561976744,0 -122.669452237579,38.1692043203778,0 -122.669450967902,38.1691987775092,0 -122.669442429942,38.1691615044077,0 -122.669402881048,38.1690712668771,0 -122.669401376005,38.16906938214301,0 -122.669282755548,38.1689208358702,0 -122.669273043208,38.1689086732492,0 -122.669265575589,38.1689018868913,0 -122.669200994009,38.1688431969317,0 -122.6691934569,38.1688363474058,0 -122.66917472894,38.16882290439011,0 -122.669029878598,38.1687189298788,0 -122.669010677976,38.1687051475128,0 -122.668998633775,38.1687022031571,0 -122.668973380679,38.1686960297168,0 -122.668898780507,38.1686777927191,0 -122.668851623471,38.1686581565328,0 -122.668789818779,38.1686324210197,0 -122.668782261851,38.1686284802039,0 -122.668706805504,38.1685891308905,0 -122.668494410143,38.1684783695214,0 -122.668352612741,38.16841938479381,0 -122.66828716996,38.1683921618883,0 -122.668201356259,38.1683391916811,0 -122.668191826859,38.1683333094619,0 -122.668190589789,38.1683322145668,0 -122.668110101739,38.1682609768061,0 -122.668076468776,38.1682298547576,0 -122.668031944267,38.1681886542314,0 -122.668029450122,38.1681854784872,0 -122.667939721647,38.1680712288138,0 contacts #khStyle84754 1 -122.666752168251,38.170167774848,0 -122.666650851121,38.1701674857738,0 -122.666543883486,38.1701536604931,0 -122.666185601992,38.17001745202121,0 -122.665834600202,38.1698497138387,0 -122.665666893004,38.1697005266838,0 -122.665552654139,38.1695605050029,0 -122.665537379724,38.1693126150545,0 -122.665613470719,38.16905597822111,0 -122.665727738829,38.16887605057361,0 -122.665842623722,38.1687186592926,0 -122.665880591566,38.1685295047748,0 -122.665888336609,38.1680834049011,0 -122.665979443839,38.16797551387171,0 -122.666139617747,38.1678993654291,0 -122.666315198769,38.1678863491898,0 -122.666536258777,38.1679140183046,0 -122.666818270356,38.168031985066,0 -122.666909920863,38.1681178653663,0 -122.666962959331,38.1682216607831,0 -122.66691767563,38.1684513526922,0 -122.666803408442,38.168631277325,0 -122.666734394492,38.1689014593385,0 -122.666726740439,38.16917181427,0 -122.666765305768,38.1693206295108,0 -122.666840913097,38.1694830724733,0 -122.666986114731,38.1697178127231,0 -122.666993999033,38.1698665425078,0 -122.666955526224,38.1700106327706,0 -122.666871634219,38.1701005198383,0 -122.666752168251,38.170167774848,0 contacts #khStyle84754 1 -122.672198955821,38.1681101620942,0 -122.672199588687,38.1681090100627,0 -122.672235851082,38.1680430001058,0 -122.67224090113,38.16803380728181,0 -122.672260929928,38.1680178409667,0 -122.672325396626,38.1679664501138,0 -122.672367272955,38.1679388100918,0 -122.672420574204,38.1679036291228,0 -122.672497711807,38.1678651483268,0 -122.672767237657,38.1677306921847,0 contacts #khStyle84754 1 -122.657369115211,38.1709697877803,0 -122.657280279297,38.1710461313698,0 -122.65715836762,38.1711764556711,0 -122.657066636824,38.1712618074196,0 -122.65696002516,38.1713245827979,0 -122.656814860391,38.1713917501012,0 -122.656669867257,38.1714228672394,0 -122.656479729714,38.1714944093197,0 -122.656342392377,38.1715661064096,0 -122.655984167096,38.1718759844691,0 -122.655808672216,38.1720196674371,0 -122.655595210934,38.1721947876449,0 -122.655320470631,38.1723516951553,0 -122.655099412796,38.17247271002,0 -122.65500801812,38.17248596016401,0 -122.6548932451,38.172463088606,0 -122.654717970397,38.1724084971297,0 -122.654565675652,38.1723224260179,0 -122.654398207686,38.1719749480305,0 -122.654199845792,38.1713705217953,0 -122.654054916228,38.1710861962299,0 -122.654017005451,38.1709554020045,0 -122.653902375558,38.1701484380199,0 -122.653772488428,38.1697019314804,0 -122.653726921673,38.1695305586867,0 -122.653734887794,38.1693548371687,0 -122.653795558903,38.1690485898106,0 -122.654161245356,38.168216012238,0 -122.654271731545,38.1676350279243,0 contacts #khStyle84754 1 -122.654971013335,38.16838063144,0 -122.654847738473,38.16819550955181,0 -122.654420915956,38.1679238754219,0 -122.654271731545,38.1676350279243,0 contacts #khStyle84754 1 -122.61082582162,38.1706103391598,0 -122.611048282326,38.1706445578867,0 -122.611532568943,38.1706822183041,0 -122.611653866866,38.1706826213076,0 -122.612019996731,38.1706658119063,0 -122.612135040107,38.1706346497623,0 -122.612297960588,38.1705901274843,0 -122.612407462613,38.1705274028011,0 -122.612539916189,38.1704422227335,0 -122.612753212696,38.1701815657767,0 -122.612850488702,38.1701368252574,0 -122.612974615971,38.1701417425352,0 -122.613095770129,38.17016918119681,0 -122.613707416992,38.1704100362788,0 -122.613994416922,38.1705146285244,0 -122.614209475213,38.1705871483845,0 -122.614250831433,38.1706010940642,0 -122.614426856426,38.1706422312158,0 -122.61460397048,38.1706468685612,0 -122.61462376341,38.1706473867793,0 -122.614748866062,38.17060273642021,0 -122.61490448382,38.1705897303511,0 -122.615026471457,38.1705946384138,0 -122.615215411246,38.170622298102,0 -122.61540166284,38.1706184047458,0 -122.615853981196,38.1704937164101,0 -122.616149636642,38.17044511862,0 -122.616281707836,38.1704320334037,0 -122.616484275318,38.1704462169697,0 -122.616624619939,38.1703520456267,0 -122.616878571987,38.1700915144592,0 -122.617133117902,38.1698535160304,0 -122.617321925264,38.16963332694,0 -122.617534936415,38.1692870411029,0 -122.617953668643,38.16848629381531,0 -122.618033242962,38.1684144534833,0 -122.61812268852,38.1683651767091,0 -122.618188776655,38.1682797733931,0 -122.618197973165,38.168158134052,0 -122.618225532432,38.1680726048663,0 -122.618300064602,38.1680097604264,0 -122.618494557122,38.1679292824037,0 -122.618611851397,38.16787558985961,0 -122.618728525891,38.1678038700813,0 -122.618807408694,38.1677275206832,0 -122.618900701859,38.1676241805678,0 -122.618928787111,38.1675718032176,0 contacts #khStyle84754 1 -122.721639183759,38.1705814684035,0 -122.721735568846,38.1706001579074,0 -122.721979611354,38.1705962333026,0 -122.722090818216,38.17062353591751,0 -122.722198388937,38.17066885491681,0 -122.722380571471,38.1707954645031,0 -122.722449475098,38.1708767415639,0 -122.722492657608,38.1709669699906,0 -122.72251942906,38.1710571593775,0 -122.722527254807,38.1712509482881,0 -122.722512624438,38.171345545504,0 -122.722460564781,38.1715256731307,0 -122.722461968599,38.1717194467555,0 -122.722482637924,38.1719132661934,0 -122.722527978818,38.17199899344011,0 -122.722665823028,38.1721525348363,0 -122.72281324666,38.1724142496682,0 -122.72293094688,38.1724235417692,0 -122.722979764735,38.1724082609764,0 -122.723045250412,38.1723877628386,0 -122.723133272458,38.1723203774442,0 -122.7232559031,38.172158442075,0 -122.72331758413,38.1721132685726,0 -122.723341766982,38.1720955576876,0 -122.723452416744,38.1720823011218,0 -122.723557849814,38.1721276138044,0 -122.723737880604,38.1722587224534,0 -122.723906835089,38.17239431090271,0 -122.723972530945,38.17247557946401,0 -122.724055386064,38.172547875998,0 -122.724169841654,38.1725661717552,0 -122.724185434781,38.1725542028881,0 -122.724251780751,38.1725032774285,0 -122.724356265003,38.1723277791699,0 -122.724385164018,38.17223321544,0 -122.724395154164,38.1721386070407,0 -122.72439265736,38.1720439691457,0 -122.724311299006,38.17176438723511,0 -122.724263475829,38.17167414851781,0 -122.724235257928,38.1715884624007,0 -122.724233831643,38.1714938270238,0 -122.724242055072,38.1713947081643,0 -122.724271650368,38.1713046523783,0 -122.724313749396,38.1712101198393,0 -122.724373278738,38.1711291473163,0 -122.724444564161,38.1710527088109,0 -122.724507321117,38.17096723755271,0 -122.724612499086,38.1707962469385,0 -122.724720208045,38.1705216175982,0 -122.724817604095,38.1703325832779,0 -122.72483338474,38.1701953789642,0 -122.724839037074,38.1701462347924,0 -122.724839366507,38.1701433705405,0 -122.724904313647,38.1699497533241,0 -122.724928148213,38.1696839385547,0 -122.724922507903,38.1695712680688,0 -122.724937440628,38.1694901900925,0 -122.724937789484,38.1694583773795,0 -122.724938140594,38.1694263590916,0 -122.724938527743,38.1693910543251,0 -122.724951203313,38.1693210360666,0 -122.724952984248,38.16931119839411,0 -122.724955651891,38.169296462646,0 -122.724977538267,38.1692279403639,0 -122.725041254488,38.169028455643,0 -122.725044823082,38.1690172829449,0 -122.725049906396,38.1690104039507,0 -122.72506214692,38.1689938394577,0 -122.725167817722,38.1688508400366,0 -122.725181230449,38.1688377956335,0 -122.725236237778,38.1687842987826,0 -122.725408936122,38.1686163419849,0 -122.725461820293,38.1685649095782,0 -122.725472890615,38.1685541431437,0 -122.725597693824,38.1684518710208,0 -122.725637082642,38.1684195930939,0 -122.725642873096,38.1684148479908,0 -122.72564921173,38.168411953904,0 -122.725770519464,38.1683565672372,0 -122.725941571312,38.16827846805441,0 -122.726055274959,38.1682265527932,0 -122.726085387552,38.1682170054976,0 -122.726168143473,38.1681907674116,0 -122.726267932917,38.1681432756811,0 -122.726271787065,38.1681414414144,0 -122.726386388419,38.1681191787539,0 -122.726543087626,38.1681107768323,0 -122.726557916217,38.1681099817397,0 -122.726627959031,38.1681062260964,0 -122.726748608107,38.16808848353971,0 -122.72679232389,38.1680801998984,0 -122.726865975803,38.1680662436616,0 -122.726866063238,38.1680662270934,0 -122.726981054762,38.168034952187,0 -122.727037680228,38.168016969696,0 -122.727206433457,38.1679633786924,0 -122.727318146591,38.1679501209468,0 -122.727565034099,38.1679461912463,0 -122.727895466425,38.1679296288835,0 -122.727908651102,38.1679289679997,0 -122.728006349237,38.1679068448925,0 -122.728026835926,38.167902205803,0 -122.72812287651,38.1678682056437,0 -122.728153293036,38.167857437603,0 -122.7281914803,38.167851810027,0 -122.7282436009,38.1678441291034,0 -122.728256368998,38.1678435766985,0 -122.728638945767,38.1678270240731,0 -122.728716335332,38.1678236755718,0 -122.728737782103,38.1678227476011,0 -122.728821396388,38.1678104127137,0 -122.728858073471,38.1678050020429,0 -122.728862783498,38.1678051879974,0 -122.728869319505,38.1678054460422,0 -122.72897935136,38.1678097901003,0 -122.729035325146,38.1678194377941,0 -122.729217865911,38.1678509004874,0 -122.72924546305,38.1678530217031,0 -122.729278321006,38.16785554727551,0 -122.72933877044,38.1678601935968,0 -122.729460432908,38.1678559696821,0 -122.729460438611,38.1678559696953,0 -122.729580373116,38.1678382223583,0 -122.729691115542,38.1677979223667,0 -122.729904784921,38.1677082913972,0 -122.730002037228,38.1676499347223,0 -122.730014507339,38.167646270046,0 -122.730087221967,38.1676249008701,0 -122.730230249173,38.167582868258,0 -122.73029116576,38.1675713232643,0 -122.730304326041,38.1675688291057,0 -122.730347702468,38.1675606083198,0 -122.730468673242,38.1675518752594,0 -122.730702344678,38.1675524148361,0 -122.730711975183,38.1675524370642,0 -122.730791265766,38.1675694277266,0 -122.73094581894,38.1676025457434,0 -122.731027427172,38.1676371486746,0 -122.731052677259,38.1676478550154,0 -122.731150193847,38.1677111678235,0 -122.731183066365,38.1677431452347,0 -122.731217077059,38.1677762297906,0 -122.731224488736,38.16778343963661,0 -122.731250613955,38.1678777564263,0 -122.731276947384,38.1679728246423,0 -122.731280550316,38.1679797656544,0 -122.731284418093,38.1679872168877,0 -122.731317913482,38.1680517453414,0 -122.731319101967,38.1680540349407,0 -122.731319395669,38.1680582336426,0 -122.731321029309,38.1680815877495,0 -122.731332658588,38.1682478366091,0 -122.731328023208,38.1683247874959,0 -122.731327126693,38.1683396703179,0 -122.731326958915,38.1683424555616,0 -122.73127494414,38.168420072192,0 -122.731221038441,38.16850051026911,0 -122.731215395066,38.1685089312997,0 -122.7312101308,38.16851338265661,0 -122.731082201578,38.1686215567751,0 -122.730965601108,38.1687201511505,0 -122.730952442514,38.1687334522391,0 -122.730881091564,38.1688055757387,0 -122.730845918597,38.1688517172125,0 -122.730802223398,38.16890903843661,0 -122.730738778601,38.1689900052312,0 -122.730722018694,38.1690845986145,0 -122.730720599234,38.1691792274009,0 -122.73073629501,38.169373034035,0 -122.730780557079,38.16946326194831,0 -122.730802326915,38.1695579442371,0 -122.730856781042,38.1697005231163,0 -122.730871229836,38.1697383547314,0 -122.730872259393,38.1697423137676,0 -122.730895853938,38.1698330435828,0 -122.730905850975,38.1699276986918,0 -122.730911558101,38.1701214822399,0 -122.730900506319,38.1702160887954,0 -122.730845622761,38.1702970753738,0 -122.730825651831,38.1703916613425,0 -122.730823859083,38.1704907955355,0 -122.730843488696,38.1705854728627,0 -122.730903813725,38.1707703698059,0 -122.730917735294,38.1708650339507,0 -122.731014127186,38.1710410014335,0 -122.73106661252,38.1711086691571,0 -122.731102795257,38.1711553183588,0 -122.731140180882,38.1712035183307,0 -122.731216935001,38.1713839466687,0 -122.731234067983,38.1714786181657,0 -122.731244779027,38.171767045197,0 -122.731241211162,38.1719608073033,0 -122.731218742888,38.1720553875587,0 -122.731167409394,38.172140888725,0 -122.731101108033,38.172221849083,0 -122.730931483765,38.1723611528741,0 -122.730620577282,38.1725001302853,0 -122.730506633979,38.1725359174276,0 -122.730284538681,38.1725849733381,0 -122.73004917583,38.1726520232729,0 -122.729944101297,38.1727013492454,0 -122.729771636248,38.1728361384817,0 -122.729695359761,38.1729125686416,0 -122.729584454781,38.1731871950549,0 -122.729461793083,38.1737456900462,0 -122.729427905072,38.1738402434429,0 -122.729375854694,38.1739257421304,0 -122.729317025395,38.1740112250657,0 -122.729243618172,38.1740831552855,0 -122.729082515364,38.1742314886903,0 -122.728993086051,38.1742943689748,0 -122.728804610632,38.1744156006986,0 -122.728701690195,38.1744604242605,0 -122.728534910494,38.1745997311312,0 -122.728472171846,38.1746806982499,0 -122.728490838521,38.1747543497212,0 -122.728495027331,38.174770877121,0 -122.728591480744,38.1748341895167,0 -122.728707708191,38.1748569912596,0 -122.728820925637,38.174825710483,0 -122.729037470739,38.1747360879279,0 -122.729141121653,38.1746867594859,0 -122.729226966777,38.1746283770594,0 -122.729572699109,38.174530040701,0 -122.729692254282,38.1745213051931,0 -122.729814987085,38.1745215894913,0 -122.729936276085,38.1745263766034,0 -122.730055000943,38.1745491827949,0 -122.730150418401,38.1746034789491,0 -122.730265558971,38.1746307829216,0 -122.730355234868,38.1746940782028,0 -122.730393709913,38.1747346222591,0 -122.730428092188,38.1747708534072,0 -122.730438055895,38.1747870553352,0 -122.730456370462,38.1748168365281,0 -122.730539099439,38.1749513612239,0 -122.73056841293,38.1750325420405,0 -122.730614121924,38.1751182669926,0 -122.730625172991,38.1752174307578,0 -122.730617343982,38.17569507876,0 -122.730574900959,38.17588424465531,0 -122.730545294836,38.1759788082292,0 -122.730539950284,38.1760734278344,0 -122.730553393946,38.1761672424824,0 -122.730553515555,38.1761680911141,0 -122.730574980162,38.1762492537847,0 -122.730579972917,38.1762617664146,0 -122.730614574559,38.176348483448,0 -122.730617079462,38.1764431211759,0 -122.730589968731,38.1767314606762,0 -122.73054182571,38.1768214751425,0 -122.730484082455,38.1769024548438,0 -122.730320138246,38.17704627702,0 -122.730222160163,38.1771046321607,0 -122.729979863738,38.17711308417,0 -122.729859914228,38.1771308316099,0 -122.729744212805,38.1771576013328,0 -122.729607849836,38.1772244381065,0 contacts #khStyle84754 1 -122.672767237657,38.1677306921847,0 -122.672867851552,38.1676804994728,0 -122.672913784529,38.1676575850846,0 -122.6729325857,38.1676482058151,0 -122.672963647365,38.1676250163633,0 -122.672999488683,38.1675982585769,0 -122.67302278806,38.1675808641175,0 -122.673026465116,38.1675767525885,0 -122.673142195916,38.1674473470132,0 -122.673155448843,38.1674325280805,0 contacts #khStyle84754 1 -122.626095925473,38.1723193752111,0 -122.626222639965,38.1723749030997,0 -122.626428701085,38.1725016311252,0 -122.626450971572,38.1725153274739,0 -122.6265042548,38.1725439651896,0 -122.626730443575,38.17266553256581,0 -122.626737745174,38.17266945686811,0 -122.626856837034,38.1726833559459,0 -122.627098795248,38.1726706093409,0 -122.62733232862,38.1726307977471,0 -122.627568683796,38.1726403074744,0 -122.627575598994,38.1726405856995,0 -122.627593352973,38.1726455855142,0 -122.627668595645,38.1726667750603,0 -122.627688890966,38.1726724905384,0 -122.62772053969,38.1726935440519,0 -122.627760897349,38.1727203909343,0 -122.627784184138,38.1727358818492,0 -122.627871628545,38.172799248093,0 -122.627953902632,38.1728265469179,0 -122.627981330285,38.1728356474902,0 -122.628103345521,38.1728360357959,0 -122.628224002363,38.1728229008401,0 -122.628334806937,38.1727826968029,0 -122.628442180982,38.1727154441263,0 -122.62859137457,38.1725627050907,0 -122.628646751394,38.1724772618908,0 -122.628788666672,38.1722118426748,0 -122.628907958731,38.1720454894306,0 -122.628959053611,38.1719600324785,0 -122.629037765074,38.1717755251702,0 -122.629063218275,38.1716809742358,0 -122.629101760626,38.1713972013875,0 -122.629144817768,38.171208074565,0 -122.629153168918,38.1711089630624,0 -122.62914223212,38.1710142966311,0 -122.629094146581,38.1709285248606,0 -122.629040352992,38.170842734953,0 -122.628922662681,38.1706936543509,0 -122.628896673808,38.1706124589211,0 -122.628893746053,38.1704862739762,0 -122.628912754487,38.1703962088631,0 -122.628963871049,38.17030624567721,0 -122.629174118303,38.1700725866973,0 -122.629220239736,38.1699826075451,0 -122.629252804346,38.1698925853714,0 -122.629276829582,38.1697980298282,0 -122.629286584571,38.1697034290178,0 -122.629317744783,38.1696088960929,0 -122.629418525856,38.169433470985,0 -122.629470194926,38.1693750532315,0 -122.629540437867,38.1693121880528,0 -122.629855132376,38.1691644780203,0 -122.630068902867,38.1690795355949,0 -122.630159100317,38.1690212394707,0 -122.630333855063,38.1688911103492,0 -122.630521429445,38.1687655277638,0 -122.630694087929,38.16862637892061,0 -122.630846077063,38.168482658263,0 -122.631214576418,38.1679926375461,0 -122.631288452123,38.1679162639351,0 -122.631628744453,38.1676424541159,0 -122.631719675078,38.1675796528058,0 -122.631872714407,38.1675069851612,0 -122.63191458996,38.1674871013382,0 -122.631927085438,38.1674811680889,0 -122.632049499675,38.1674004405591,0 contacts #khStyle84754 1 -122.889459740197,38.1672713597643,0 -122.889345798146,38.1673613761328,0 -122.889342703566,38.167753417497,0 -122.889387601214,38.16778950889901,0 -122.889569189253,38.1677896832763,0 -122.889705988728,38.1676816655312,0 -122.88970779166,38.1674338242995,0 -122.889527494557,38.1672894499939,0 -122.889482186237,38.1672894064936,0 -122.889459740197,38.1672713597643,0 contacts #khStyle84754 1 -122.887484716919,38.167530809116,0 -122.887483432454,38.1676705019075,0 -122.887753873714,38.1678870658694,0 -122.887844847266,38.1678871545305,0 -122.887889741593,38.1679232486023,0 -122.88798071519,38.167923337158,0 -122.888026076704,38.1678873309433,0 -122.888071378462,38.1678918823395,0 -122.888117096087,38.167855876436,0 -122.888162760932,38.1678559208077,0 -122.888299209094,38.1677479022533,0 -122.888302251294,38.1673919111882,0 -122.888076704218,38.1672114424756,0 -122.887986090337,38.1672113543404,0 -122.887895943676,38.1671391658921,0 -122.887850223734,38.1671751717103,0 -122.887804912829,38.1671751275602,0 -122.887759198135,38.1672111333481,0 -122.887668581598,38.1672110449654,0 -122.88753178696,38.1673145551156,0 -122.887530963213,38.1673866508117,0 -122.887484716919,38.167530809116,0 contacts #khStyle84754 1 -122.654271731545,38.1676350279243,0 -122.654283448306,38.1675719762993,0 -122.654207368656,38.1673644607344,0 -122.653894416088,38.1671562458063,0 -122.653507247633,38.167101022563,0 contacts #khStyle84754 1 -122.653507247633,38.167101022563,0 -122.65339886233,38.1670871832135,0 -122.653077879112,38.1670682053762,0 -122.653033600256,38.1670770865289,0 contacts #khStyle84754 1 -122.714280322973,38.1670624817518,0 -122.714327815452,38.1671034065807,0 -122.714527883378,38.1672120470009,0 -122.714618946083,38.1672798640121,0 -122.714696434992,38.1673521540612,0 -122.7147467585,38.1674378965339,0 -122.71477635559,38.1675326009117,0 -122.714788115375,38.1676272616942,0 -122.714789155146,38.1677264025665,0 -122.714785931538,38.1678210267313,0 -122.714762163438,38.1680050743286,0 contacts #khStyle84754 1 -122.890210030197,38.1670062077657,0 -122.890300641173,38.1670062941834,0 -122.890345897663,38.1670423876641,0 -122.890391205831,38.1670424308317,0 -122.890526608833,38.1671507107655,0 -122.890524856136,38.1673670090575,0 -122.890479137344,38.1674030158937,0 -122.890433835734,38.1673984675237,0 -122.890411332488,38.1674164691671,0 -122.890342756812,38.1674704793511,0 -122.890161169562,38.1674703061671,0 -122.890071020424,38.1673981214982,0 -122.89007189612,38.1672899713045,0 -122.8900270011,38.1672538780652,0 -122.890027924519,38.1671141849119,0 -122.890073643352,38.1670781782494,0 -122.890118951542,38.1670782215219,0 -122.890210030197,38.1670062077657,0 contacts #khStyle84754 1 -122.604323455435,38.1678371160586,0 -122.604495805022,38.1678962801258,0 -122.604840589887,38.1678659028541,0 -122.60548859893,38.1677058663113,0 -122.605832403358,38.1677250511312,0 -122.606139357424,38.1678297295745,0 -122.606715020341,38.1681200689146,0 -122.607269164937,38.1684328636282,0 -122.607583997174,38.1685330595039,0 -122.607914721365,38.1685972594873,0 -122.608253466631,38.1686299360321,0 -122.608595254263,38.1686265755373,0 -122.608927317944,38.1685736111083,0 -122.609229823952,38.1684439407951,0 -122.609560437669,38.1683954749812,0 -122.60989772876,38.168432651381,0 -122.610207476974,38.168550848493,0 -122.610464137599,38.1687229414872,0 -122.610684219784,38.1689309625609,0 -122.610886297693,38.169170468483,0 -122.611175812738,38.1692029748364,0 -122.611502553088,38.1690778866335,0 -122.611758227855,38.1688984837611,0 -122.611954160134,38.168682833685,0 -122.612091038631,38.1684354421448,0 -122.6121702168,38.1681698359016,0 -122.612326310775,38.1679315204188,0 -122.612611736015,38.1677927762972,0 -122.612916510182,38.1679064403447,0 -122.613482093061,38.1682192436928,0 -122.614077219558,38.1684780661658,0 -122.614350370651,38.168636687259,0 -122.614653705251,38.1687548515034,0 -122.615593867898,38.169073386162,0 -122.615918821368,38.16915106042,0 -122.616272624289,38.1691702475469,0 -122.616541586659,38.1690404482723,0 -122.616731914001,38.1688022392248,0 -122.617125374161,38.1680599952142,0 -122.617163152103,38.1677942478377,0 -122.617141713368,38.1675283065123,0 -122.617013164043,38.1670051578874,0 contacts #khStyle84754 1 -122.663431231316,38.1693688939828,0 -122.663341636483,38.169211676167,0 -122.663188701975,38.1689543774149,0 -122.663159615278,38.1689184074918,0 -122.663134857489,38.1688877908597,0 -122.663090085377,38.1688324235068,0 -122.66296511106,38.1687013809173,0 -122.662908155522,38.1686741789117,0 -122.66283252433,38.16867396066,0 -122.662824851474,38.1686759276269,0 -122.662728228372,38.1687006972883,0 -122.662619651326,38.1687274214604,0 -122.662533802312,38.1687767425849,0 -122.66232857533,38.1690285012418,0 -122.662312441476,38.1691230871776,0 -122.662312425412,38.169123109951,0 -122.662285140725,38.1691635640746,0 -122.662259279746,38.1692040261432,0 -122.662259267188,38.1692040457923,0 -122.662259194351,38.1692041543533,0 -122.662229091765,38.1692490213456,0 -122.662190437475,38.16927594725701,0 -122.662160407704,38.1692893792585,0 -122.662121815828,38.1693027864898,0 -122.662091074276,38.169316215494,0 -122.66209107244,38.16931621629631,0 -122.662091071227,38.1693162168697,0 -122.662053194131,38.1693296256821,0 -122.662024509932,38.16934245577,0 -122.662023164314,38.1693430576482,0 -122.662020342436,38.1693434636692,0 -122.661931059259,38.1693563099922,0 -122.661847435688,38.169360542618,0 -122.661846844438,38.169360572544,0 -122.661794240403,38.1693469355441,0 -122.661794107338,38.1693469010486,0 -122.661618497258,38.1692112041646,0 -122.661580404976,38.169116462242,0 -122.661580316943,38.1689812733275,0 -122.661594052495,38.1689445946142,0 -122.661595488627,38.1689407600887,0 -122.661610680021,38.16889574190871,0 -122.661610680512,38.1688957410123,0 -122.661679759847,38.1687697671877,0 -122.661679760383,38.16876976621,0 -122.661694994256,38.1687157346803,0 -122.661734502827,38.1685040542229,0 -122.661734549114,38.1685026845872,0 -122.661735534797,38.1684735184959,0 -122.661746075836,38.1681616104564,0 -122.661766804011,38.1679994443842,0 -122.661777150946,38.16784222361581,0 -122.661779850381,38.1678012058224,0 -122.661806390499,38.1676165251556,0 -122.66182464884,38.167379706695,0 -122.66182688413,38.1673507139228,0 -122.661818364278,38.1673368202956,0 -122.661735531846,38.1672017421963,0 -122.661625316563,38.1671203099779,0 -122.661533735573,38.167020906518,0 -122.661459058639,38.1669170800972,0 contacts #khStyle84754 1 -122.659014032602,38.1686867632163,0 -122.658820609921,38.1686397821198,0 -122.658576865989,38.1685804884512,0 -122.658524340455,38.1685217533139,0 -122.658479202501,38.1684089643953,0 -122.658444264093,38.1682511424807,0 -122.658380743901,38.1681022495428,0 -122.65834514739,38.1680422927256,0 -122.658343223314,38.1680390519139,0 -122.658326543277,38.1680312781089,0 -122.65828541365,38.1680121094482,0 -122.658255652885,38.16799823928531,0 -122.65823684084,38.1679939963569,0 -122.658053231003,38.1679525842287,0 -122.65797636325,38.1679118027153,0 -122.657662538538,38.1675819251872,0 -122.657530462213,38.1674463497253,0 -122.657370100149,38.1672566158065,0 -122.657271579916,38.1671166321676,0 -122.657122633358,38.16685023257541,0 -122.657120161272,38.1668458110875,0 contacts #khStyle84754 1 -122.657120161272,38.1668458110875,0 -122.65703192759,38.1667818135301,0 contacts #khStyle84754 1 -122.661459058639,38.1669170800972,0 -122.661394075981,38.1668267317506,0 -122.661316681465,38.1667375440495,0 contacts #khStyle84754 1 -122.661316681465,38.1667375440495,0 -122.661311750076,38.1667318612185,0 -122.661229069549,38.1667135963787,0 -122.661162590396,38.1667404412803,0 -122.661162157152,38.1667417159104,0 contacts #khStyle84754 1 -122.661162157152,38.1667417159104,0 -122.661122805976,38.1668574891968,0 -122.661096222674,38.1670511821661,0 -122.661060927732,38.1671231802702,0 -122.660984943052,38.1671995665793,0 -122.660836495879,38.1672081482913,0 -122.66044262988,38.1672115105157,0 -122.660032227967,38.1672418609864,0 -122.659726120766,38.16724547614,0 -122.659490606872,38.1672583088197,0 -122.659156778557,38.1672393102916,0 -122.658898790244,38.167175469451,0 -122.658670013265,38.167120725948,0 -122.658432948364,38.1670073761247,0 -122.65828003323,38.1669032845319,0 -122.65814015078,38.1667586743475,0 -122.658042486059,38.166629525867,0 contacts #khStyle84754 1 -122.65703192759,38.1667818135301,0 -122.656984752269,38.1667475963054,0 -122.656982923824,38.1667462700959,0 -122.656975573755,38.1667379245511,0 -122.656881946148,38.1666316160414,0 -122.656875538285,38.1666243402847,0 contacts #khStyle84754 1 -122.62070256967,38.1664788238687,0 -122.620583414765,38.1666067300045,0 -122.620552384824,38.1666742234086,0 -122.620512255785,38.1668453315844,0 -122.620430618567,38.1674534135852,0 -122.620427203837,38.1675615530776,0 -122.620474752339,38.1678861591919,0 -122.620458471429,38.1679987631777,0 -122.620400000904,38.168129255257,0 -122.620119224845,38.1687502088745,0 -122.620102568999,38.1689349119426,0 -122.620134314328,38.1691423036633,0 -122.620186131501,38.1693317354969,0 -122.620415906512,38.1698777408384,0 -122.62059282527,38.170297398524,0 -122.62070741047,38.1704915400821,0 -122.620810539628,38.1706048696929,0 contacts #khStyle84754 1 -122.656875538285,38.1666243402847,0 -122.656740202687,38.1664706741517,0 contacts #khStyle84754 1 -122.671724468684,38.1671676909514,0 -122.671853622825,38.1670990422209,0 -122.671891192786,38.1670790727747,0 -122.67189414796,38.16707750201931,0 -122.671896106054,38.1670761590538,0 -122.671973095355,38.1670233556183,0 -122.672077366519,38.1669518406011,0 -122.672290389233,38.1668623127721,0 -122.672518273501,38.1667998639161,0 -122.67263821958,38.1667821749961,0 -122.67267793663,38.1667714604016,0 -122.672753945203,38.1667509552815,0 -122.672844469557,38.1667171888489,0 -122.672861862733,38.1667107010198,0 -122.672920546243,38.1666753585098,0 -122.673005072962,38.1666244516552,0 -122.673142686393,38.1665415726439,0 -122.673152322673,38.1665357690886,0 -122.673153065685,38.1665354721667,0 -122.673208314091,38.1665133938069,0 -122.673320292919,38.1664686447239,0 contacts #khStyle84754 1 -122.730951308276,38.1664038851628,0 -122.730912158023,38.1664145515065,0 -122.730721690289,38.1664664435149,0 -122.730673456699,38.1664774792985,0 -122.730370712784,38.166546746189,0 -122.72979753994,38.1667076466885,0 -122.72976782499,38.16671095799,0 -122.729678694248,38.1667208902754,0 -122.729449337212,38.1667118862347,0 -122.729312725392,38.1667065229485,0 -122.729192892988,38.16669723230261,0 -122.729136574474,38.166684195129,0 -122.729074911242,38.16666992067021,0 -122.728966223228,38.1666396985526,0 -122.728960513752,38.1666381109549,0 -122.728753306516,38.1665561186382,0 -122.728742861837,38.1665519856436,0 -122.728628838172,38.16651567018391,0 -122.728613704049,38.166516198832,0 -122.728507885654,38.1665198951058,0 -122.728468131346,38.166532540849,0 -122.728452364984,38.1665375560832,0 -122.728395377566,38.1665556835928,0 -122.728286759991,38.1666004936121,0 -122.72827945716,38.1666028018607,0 -122.728173538187,38.1666362802236,0 -122.728056425676,38.1666630450772,0 -122.728005032157,38.1666687191882,0 -122.727936509524,38.1666762844059,0 -122.727814843221,38.166680506949,0 -122.7277902067,38.1666795367347,0 -122.727740658245,38.1666775854441,0 -122.727693210529,38.1666757168641,0 -122.727572698541,38.1666574103992,0 -122.7274615872,38.16667042762181,0 -122.727459560437,38.16667066506561,0 -122.727457136052,38.1666740842007,0 -122.72742917056,38.16671352419,0 contacts #khStyle84754 1 -122.667939721647,38.1680712288138,0 -122.66791323196,38.1680510810729,0 -122.667856463522,38.1680079036157,0 -122.667678056093,38.1678722083569,0 -122.667644504605,38.1678518016275,0 -122.667591279044,38.1678194286646,0 -122.667581287163,38.1678133513761,0 -122.667470880049,38.1677724806195,0 -122.667409428932,38.1677629470843,0 -122.66735252214,38.1677541181334,0 -122.667231392341,38.1677177232909,0 -122.667203322295,38.1677058829044,0 -122.667120966444,38.1676711438523,0 -122.66691947771,38.1675861522101,0 -122.666908738993,38.1675800321336,0 -122.666824116215,38.1675318048992,0 -122.666607757965,38.1674566150067,0 -122.666601856274,38.1674545640139,0 -122.666481338073,38.1674407011583,0 -122.666465503197,38.1674406559495,0 -122.666367171761,38.1674403751637,0 -122.66636004475,38.1674403548093,0 -122.666118109876,38.167453182442,0 -122.665895145774,38.1674566742669,0 -122.66587478912,38.16745699304991,0 -122.665874500878,38.1674568987287,0 -122.665771220203,38.1674231022656,0 -122.66576364941,38.1674206248753,0 -122.665757853767,38.1674063062114,0 -122.665732606018,38.1673439292729,0 -122.665724581148,38.1672315578504,0 -122.665724559107,38.1672312492148,0 -122.665731870107,38.1671439609087,0 -122.665732105943,38.16714114518091,0 -122.665728053876,38.1671370070663,0 -122.665709461006,38.1671180193592,0 -122.665674581297,38.1670823989115,0 -122.665501670081,38.1669745328827,0 -122.665491066859,38.16696791832871,0 -122.665456872829,38.16694658722511,0 -122.665313999436,38.1668854985374,0 -122.665244666764,38.1668558537169,0 -122.665157420864,38.1668214394212,0 -122.665060634113,38.166783261607,0 -122.66502601923,38.1667696076371,0 -122.664923504716,38.16671974455251,0 -122.664853332265,38.1666776782386,0 -122.664830959437,38.1666642663697,0 -122.664825312541,38.166660881216,0 -122.664735702965,38.1665975361461,0 -122.664683153244,38.1665433099471,0 -122.664668748679,38.1664170927115,0 -122.664663082775,38.16638998765,0 contacts #khStyle84754 1 -122.673155448843,38.1674325280805,0 -122.673161389541,38.1674232907967,0 -122.67320149149,38.16736093558201,0 -122.673265378128,38.1672615968945,0 -122.673306832746,38.1672131315359,0 -122.673348580009,38.1671643239599,0 -122.673374382239,38.1671341580075,0 -122.673403806133,38.1670997578503,0 -122.673486159037,38.1670323938405,0 -122.673490306223,38.1670293220376,0 -122.67355755191,38.1669795133849,0 -122.673577073624,38.166965053698,0 -122.673679323362,38.1669157702819,0 -122.673684688918,38.1669138580275,0 -122.673792235031,38.1668755291175,0 -122.673858259642,38.1668656112173,0 -122.673910040482,38.1668578329203,0 -122.674150663405,38.1668555363278,0 -122.674275364906,38.1668543459375,0 -122.674435451607,38.16684297054201,0 -122.674474675721,38.1668401833322,0 -122.674519457033,38.1668370012195,0 -122.674546678333,38.1668099619664,0 -122.674590699228,38.1667662354143,0 -122.674591839905,38.1667651023635,0 -122.674613408625,38.1667285467806,0 -122.674684726894,38.1666076732559,0 -122.674695363571,38.1665896456807,0 -122.674851171243,38.1663692716188,0 contacts #khStyle84754 1 -122.673320292919,38.1664686447239,0 -122.673333175847,38.1664596681866,0 -122.673426210177,38.166396840364,0 -122.673432442025,38.166394273121,0 -122.673483343052,38.1663733041539,0 -122.673534860425,38.16635208124471,0 -122.673587108771,38.1663399421676,0 -122.673649851405,38.16632536487251,0 -122.673720627341,38.1663149894001,0 contacts #khStyle84754 1 -122.653033600256,38.1670770865289,0 -122.652995030648,38.1670859846202,0 -122.652164233009,38.1671466027956,0 -122.651683563464,38.1672488150964,0 -122.651332746771,38.1673514129689,0 -122.651195326279,38.1674411291028,0 -122.650821659836,38.1676968697793,0 -122.650463879884,38.1679121052025,0 -122.650082509373,38.1679875658421,0 -122.649868740522,38.1679283444786,0 -122.649678324528,38.1677610412331,0 -122.64944180921,38.1672376058953,0 -122.649342869529,38.1667416166525,0 -122.649281528655,38.16643951268901,0 -122.649267194075,38.1663042802478,0 contacts #khStyle84754 1 -122.72659273242,38.1672002837752,0 -122.726551299568,38.1672047891571,0 -122.726510737512,38.1672091998343,0 -122.726393283642,38.1672314559341,0 -122.726279346468,38.1672672390343,0 -122.726172867047,38.1673120521039,0 -122.726139641757,38.1673298606188,0 -122.725993955579,38.1674079471406,0 -122.725971969542,38.1674197314349,0 -122.725748358132,38.1674958130112,0 -122.725741758432,38.1674974581093,0 -122.725580866216,38.1675375633515,0 -122.725515538607,38.1675538473429,0 -122.725446194984,38.16756143245461,0 -122.725434887824,38.1675626692776,0 -122.725394550322,38.1675670815482,0 -122.725272542632,38.167566794361,0 -122.725249509089,38.1675622329385,0 -122.725157397986,38.1675439917661,0 -122.725117518746,38.1675293469514,0 -122.724823940986,38.1674215360775,0 -122.724777866502,38.1674077072784,0 -122.724753593484,38.1674004219636,0 -122.724596948228,38.1673534062292,0 -122.724360629442,38.1672987727814,0 -122.724266657619,38.1673059674207,0 -122.72424643658,38.1673075155671,0 -122.72418155901,38.167388475444,0 -122.724159796614,38.16748305607621,0 -122.724182270052,38.1676723733388,0 -122.724254330989,38.1679564398444,0 -122.724266816509,38.16805110141151,0 -122.724254312509,38.1681502102155,0 -122.724204400708,38.1682357117443,0 -122.724131673742,38.1683166530267,0 -122.724038340204,38.1683750140899,0 -122.723922990168,38.1684062852614,0 -122.723801011936,38.1684147985581,0 -122.72379809299,38.1684150022802,0 -122.723678972044,38.1684057076907,0 -122.723560649959,38.168373883431,0 -122.723442242613,38.168364590292,0 -122.72332369866,38.1683913470165,0 -122.723308158607,38.168397842856,0 -122.723216502329,38.16843615569021,0 -122.723120670655,38.1684945100958,0 -122.723038344126,38.1685664153408,0 -122.722970253342,38.1686473668996,0 -122.722795952946,38.1688932008061,0 -122.722791632153,38.168899294844,0 -122.722707181442,38.1689666885164,0 -122.722706190785,38.1689672742294,0 -122.722627327402,38.1690139011166,0 -122.722608494638,38.1690250357118,0 -122.722549815735,38.1690468082827,0 -122.722499887065,38.1690653340813,0 -122.722381341647,38.169092089845,0 -122.722338840056,38.169096808664,0 -122.72226213407,38.1691053250497,0 -122.72212076715,38.1690997665688,0 -122.722018147987,38.1690957315245,0 -122.721910683219,38.1690895031509,0 -122.721774892656,38.1690816329471,0 -122.721652882499,38.1690813419886,0 -122.72138781075,38.1690938629666,0 -122.721290121883,38.1690984772638,0 -122.721289637256,38.1690985001548,0 -122.721167644288,38.1690937024457,0 -122.721047826303,38.1690798972339,0 -122.720932358327,38.1690480771524,0 -122.72082263299,38.1690072581205,0 -122.720613240778,38.16890761868,0 -122.720395948779,38.1688214788015,0 -122.720282622012,38.1687896632114,0 -122.719929016542,38.1687122082375,0 -122.719921470168,38.1687100896202,0 -122.719905178863,38.1687055158931,0 -122.719815690147,38.1686803921978,0 -122.719603428906,38.1685852503556,0 -122.719383981213,38.1685036097128,0 -122.717982468381,38.168180284945,0 -122.717384172684,38.1680932181993,0 -122.717143114475,38.1680655964916,0 -122.716668969502,38.1679788269302,0 -122.716200603697,38.1678740443573,0 -122.716088011238,38.1678377202189,0 -122.715976149916,38.167796891464,0 -122.715873599242,38.167747072693,0 -122.715796108762,38.1676747834183,0 -122.715736508438,38.167589018802,0 -122.715647567254,38.1675257141146,0 -122.715452526391,38.1674080752823,0 -122.715365743712,38.1673402693547,0 -122.715300418656,38.16725899684091,0 -122.715249398705,38.1671687466143,0 -122.715160571111,38.1668936462793,0 -122.714973177647,38.1666453429375,0 -122.714834663843,38.1664872844973,0 -122.714756479819,38.1664104865427,0 -122.714661815426,38.1663516734027,0 -122.714552846309,38.16630183778101,0 -122.714471319285,38.1663251700847,0 -122.71444356016,38.1663331144812,0 -122.714379029469,38.1664140697845,0 -122.714373366908,38.1664973319431,0 -122.714366159961,38.1666033024141,0 -122.714363614515,38.1666122946455,0 -122.714339390824,38.1666978689608,0 -122.714289807663,38.1667878733681,0 -122.71427280746,38.1668042878034,0 -122.714215322844,38.1668597916305,0 -122.714197758969,38.1669054986589,0 contacts #khStyle84754 1 -122.674851171243,38.1663692716188,0 -122.67517024438,38.1661763891837,0 contacts #khStyle84754 1 -122.664663082775,38.16638998765,0 -122.664655630771,38.1663543380478,0 -122.664649897982,38.1663269129644,0 -122.664618665902,38.1662370909201,0 -122.664615392137,38.1662276757073,0 -122.664582605094,38.1660455644774,0 -122.664581299729,38.1660383139838,0 -122.664529935542,38.1659112636776,0 contacts #khStyle84754 1 -122.732182613543,38.1723820568591,0 -122.732201380662,38.1723235182076,0 -122.732240956201,38.1722334833177,0 -122.732292288519,38.1721479816785,0 -122.732443075771,38.1719462326638,0 -122.732443589076,38.1719455458742,0 -122.73244443738,38.171944820596,0 -122.73252769411,38.1718736381444,0 -122.732557296014,38.1717790739857,0 -122.732567275614,38.1716844648381,0 -122.732539794621,38.171589769812,0 -122.732481955472,38.1715040177423,0 -122.732441614539,38.1714137994882,0 -122.732388056834,38.1713280571893,0 -122.732312330187,38.1712557828617,0 -122.732226257495,38.1711834847382,0 -122.732047997972,38.17105239312,0 -122.731951173183,38.1709935889601,0 -122.731879728476,38.170921324189,0 -122.731783707996,38.1707408519755,0 -122.731771212389,38.1706461912075,0 -122.73177084673,38.1705515583255,0 -122.731781540687,38.1704569508687,0 -122.731816137626,38.1703623983581,0 -122.731881009477,38.1702814342802,0 -122.731982601799,38.1701104287678,0 -122.732077091555,38.1699303942742,0 -122.732118449738,38.16984036348,0 -122.732146607759,38.1697503023642,0 -122.732163382538,38.1696512025306,0 -122.732156594738,38.1695565548888,0 -122.732152889681,38.1695448733367,0 -122.73213372019,38.1694844344279,0 -122.732130849208,38.169475382585,0 -122.732127985788,38.1693807439492,0 -122.732147598012,38.169286156915,0 -122.73222244117,38.1692097218121,0 -122.732400601322,38.1690749419292,0 -122.732449060674,38.1689939398694,0 -122.732419322944,38.1689443509847,0 -122.732405117288,38.1689206624455,0 -122.732346229898,38.1688224650182,0 -122.732338728427,38.1687278157358,0 -122.732342659599,38.1686286863914,0 -122.732379735689,38.1685386456587,0 -122.732463106854,38.1684712425313,0 -122.732531543839,38.1683902862382,0 -122.732523328668,38.168295635324,0 -122.732477621631,38.1682099110227,0 -122.732457002534,38.1681927452979,0 -122.732445876373,38.16818348258761,0 -122.732227943107,38.16800204891121,0 -122.732159371545,38.1679252845828,0 -122.732132605947,38.1678305910464,0 -122.732019788562,38.1676590929506,0 -122.731876639112,38.1673928929462,0 -122.731858419424,38.1673027252693,0 -122.731860924171,38.1672035926394,0 -122.731878752413,38.1671090015142,0 -122.73191120716,38.1670144439947,0 -122.73195575804,38.1669289268364,0 -122.732024194138,38.1668479708137,0 -122.732184901553,38.1667041385231,0 -122.732253693934,38.1666231831804,0 -122.732280066824,38.1665331178832,0 -122.732318212149,38.166443079589,0 -122.73236741638,38.1663530666497,0 -122.732434408002,38.1662766133555,0 -122.732546705621,38.1662002638896,0 -122.732717184779,38.1661150350369,0 -122.732804120289,38.1660476397987,0 -122.733003911819,38.1658688791408,0 libkml-1.3.0/examples/kml/model.kml000066400000000000000000000132771263603257100172120ustar00rootroot00000000000000 SketchUp Model of Macky Auditorium University of Colorado, Boulder; model created by Noël Nemcik. -105.2727379358738 40.01000594412381 0 127.2393107680517 65.74454495876547 -27.70337734057933 relativeToGround -105.272774533734 40.009993372683 1010 0.1 1.1 123.456 1.1 2.1 -12.31 geometry/CU-Macky.dae ../textures/CU-Macky---Center-StairsnoCulling.jpg ../files/CU-Macky---Center-StairsnoCulling.jpg ../textures/CU-Macky-4sideturretnoCulling.jpg ../files/CU-Macky-4sideturretnoCulling.jpg ../textures/CU-Macky-Back-NorthnoCulling.jpg ../files/CU-Macky-Back-NorthnoCulling.jpg ../textures/CU-Macky-BrickwallnoCulling.jpg ../files/CU-Macky-BrickwallnoCulling.jpg ../textures/CU-Macky-East-WingnoCulling.jpg ../files/CU-Macky-East-WingnoCulling.jpg ../textures/CU-Macky-EastdetaildoornoCulling.jpg ../files/CU-Macky-EastdetaildoornoCulling.jpg ../textures/CU-Macky-EastnoCulling.jpg ../files/CU-Macky-EastnoCulling.jpg ../textures/CU-Macky-EntrancenoCulling.jpg ../files/CU-Macky-EntrancenoCulling.jpg ../textures/CU-Macky-Front--TurretnoCulling.jpg ../files/CU-Macky-Front--TurretnoCulling.jpg ../textures/CU-Macky-FrontbrickwallnoCulling.jpg ../files/CU-Macky-FrontbrickwallnoCulling.jpg ../textures/CU-Macky-FrontnoCulling.jpg ../files/CU-Macky-FrontnoCulling.jpg ../textures/CU-Macky-FrontofTowernoCulling.jpg ../files/CU-Macky-FrontofTowernoCulling.jpg ../textures/CU-Macky-NortheastUnivnoCulling.jpg ../files/CU-Macky-NortheastUnivnoCulling.jpg ../textures/CU-Macky-NorthnoCulling.jpg ../files/CU-Macky-NorthnoCulling.jpg ../textures/CU-Macky-RoofnoCulling.jpg ../files/CU-Macky-RoofnoCulling.jpg ../textures/CU-Macky-Tower-SidenoCulling.jpg ../files/CU-Macky-Tower-SidenoCulling.jpg ../textures/CU-Macky-TowerBasenoCulling.jpg ../files/CU-Macky-TowerBasenoCulling.jpg ../textures/CU-Macky-TowernoCulling.jpg ../files/CU-Macky-TowernoCulling.jpg ../textures/CU-Macky-_Side_BrickwallnoCulling.jpg ../files/CU-Macky-_Side_BrickwallnoCulling.jpg ../textures/roofnoCulling.jpg ../files/roofnoCulling.jpg none-such.dae 123.456 -23.456 more-none-such.dae libkml-1.3.0/examples/kml/networklink.kml000066400000000000000000000022061263603257100204470ustar00rootroot00000000000000 0 1
123 Main St, USA
123 456 7890 snippet txt 1 2 3 4 5 6 absolute http://example.com/foo.kml#myCoolStyle 1 1 http://example.com/bar.kml onChange 1 onStop 1 0.5 TERRAIN=[terrainEnabled] KMLVERSION=[kmlVersion]
libkml-1.3.0/examples/kml/networklinkcontrol.kml000066400000000000000000000034321263603257100220520ustar00rootroot00000000000000 1 2 cookie=sometext message link name link description link snippet 2008-01-16 some-old-targethref Created Folder Name changed Description changed Name changed Another Created Folder Name changed Description changed Name changed libkml-1.3.0/examples/kml/photooverlay.kml000066400000000000000000000025251263603257100206370ustar00rootroot00000000000000 Seattle Space Needle Fly into picture]]> -122.3599987260313 47.62949781133496 15.49615401024533 166.582375925239 83.34022070550883 -7.63333123551244e-014 http://mw1.google.com/mw-earth-vectordb/kml-samples/gp/seattle/gigapxl/$[level]/r$[y]_c$[x].jpg -48.8176 48.8176 -29.748 29.748 19.9512 65536 32768 -122.36,47.6295,0 libkml-1.3.0/examples/kml/polygons2d.kml000066400000000000000000022145151263603257100202120ustar00rootroot00000000000000 1 empty states.AREA: 6380.614 states.STATE_NAME: Hawaii states.STATE_FIPS: 15 states.SUB_REGION: Pacific states.STATE_ABBR: HI states.POP2000: 1211537 states.POP2001: 1211960 states.POP00_SQMI: 190 states.DEN_0_100: 83 USStates.ID: 50 USStates.State_Name: Hawaii USStates.Date_Entered: Aug. 21 1959 USStates.Year_Entered: 1959 USStates.Year_Settled: 1820 ]]> 1959 #Style_5 clampToGround -156.326917860547,20.2401578536914 clampToGround -159.335174733889,21.9483433404175 -159.327130348878,22.0446395507162 -159.295025589769,22.1248124949548 -159.343195828355,22.1970166285359 -159.391366885913,22.2291198667724 -159.576012589057,22.2131796383001 -159.712505933171,22.1490592515515 -159.800814224332,22.0366665967853 -159.736592652746,21.9644203111023 -159.640246973766,21.9483657695954 -159.576021285803,21.8841361312636 -159.439545188912,21.8680716835921 -159.335174733889,21.9483433404175 clampToGround -160.073803556017,22.0041773078075 -160.121962433575,21.9639787234984 -160.22633646805,21.8915919620539 -160.242406159206,21.8032804408925 -160.202259673133,21.7953086498352 -160.170137686564,21.8675963686431 -160.089858388217,21.9158698594272 -160.04970969565,21.9881641068501 -160.073803556017,22.0041773078075 clampToGround -157.673329876454,21.2980271804006 -157.713472767801,21.3863351682207 -157.761642948927,21.4585875674916 -157.809815119729,21.4345051589313 -157.849959026307,21.5067588029631 -157.914179741199,21.6352084806278 -157.986428112199,21.6994328594403 -158.042626247904,21.6753505680564 -158.114894071646,21.5790166217416 -158.267431808754,21.5870425200507 -158.243342775004,21.5388789757719 -158.235318726083,21.4746525812457 -158.130951115411,21.3542322862678 -158.098833012334,21.2900079773187 -157.946306402713,21.3060610107082 -157.898134535461,21.3301442923012 -157.825871692713,21.249863668784 -157.721501646872,21.2819711706226 -157.681371117927,21.2739428101649 -157.673329876454,21.2980271804006 clampToGround -156.717872676999,21.1374197607644 -156.942682512532,21.1615268671346 -156.958733487556,21.2096935134305 -157.006903742467,21.1856106379825 -157.167471487889,21.1936404563437 -157.23169415835,21.2337763231398 -157.247747506123,21.1615304515084 -157.303948796958,21.1374484326638 -157.287897522787,21.0812505718402 -157.071131928318,21.1053309568586 -156.886484099806,21.049134117125 -156.766048197649,21.0651768177371 -156.717872676999,21.1374197607644 clampToGround -156.196045412482,20.6316494073652 -156.131808903973,20.6236229186799 -156.043511542555,20.6557325999668 -155.98731705257,20.7520616316876 -156.011392452548,20.8002253216075 -156.260263363072,20.9286712687479 -156.356603503292,20.9447263610079 -156.477022052544,20.8965651391117 -156.525191645863,20.9848701637724 -156.597439619788,21.0410647054158 -156.653636007318,21.0169850495629 -156.693782634023,20.9126240100612 -156.637586604165,20.8082609120439 -156.525193571704,20.7761496574975 -156.493074740185,20.7922042815103 -156.460971893198,20.7279810872564 -156.436879230878,20.6236212173367 -156.396734942946,20.567426981473 -156.276317407393,20.5834838609152 -156.196045412482,20.6316494073652 clampToGround -157.039050670938,20.928706972385 -157.055098211979,20.880538425907 -156.982826322974,20.8323776268078 -156.990863465776,20.7922371514621 -156.96676559866,20.7280207316388 -156.886487178396,20.7360494091678 -156.814225697816,20.7922527172797 -156.806205341549,20.8404186121726 -156.910585845163,20.9287186176943 -157.039050670938,20.928706972385 clampToGround -155.666192321268,18.921786345087 -155.537729780537,19.0422106324423 -155.521678713445,19.1224845466533 -155.304899038619,19.234878398743 -155.152372136648,19.2669919638143 -155.015881706841,19.3312115354762 -154.927581824535,19.4195186485267 -154.815187460665,19.4596764207728 -154.791096018678,19.5399604106849 -154.975762475196,19.6523353631656 -154.975763078096,19.7406434419399 -155.072105964772,19.7245855257612 -155.096185006144,19.8771146284228 -155.200550212445,19.9975288183811 -155.561825953369,20.134006968001 -155.73844208468,20.2062567699811 -155.858857946276,20.2704795241864 -155.8909788308,20.1741490505645 -155.834786659291,20.0617574252623 -155.826761720261,20.0055628964617 -155.882958698574,19.9333119780873 -155.979300942813,19.8209225278706 -156.043524655521,19.7807832517673 -155.971258610598,19.6282527113542 -155.947178326912,19.4837502062815 -155.874927042962,19.3713586083673 -155.907031019716,19.1305132974745 -155.858861500485,19.0101009103203 -155.778585834471,19.01009268801 -155.666192321268,18.921786345087 empty states.AREA: 67290.061 states.STATE_NAME: Washington states.STATE_FIPS: 53 states.SUB_REGION: Pacific states.STATE_ABBR: WA states.POP2000: 5894121 states.POP2001: 5984144 states.POP00_SQMI: 88 states.DEN_0_100: 92 USStates.ID: 42 USStates.State_Name: Washington USStates.Date_Entered: Nov. 11 1889 USStates.Year_Entered: 1889 USStates.Year_Settled: 1811 ]]> 1889 #Style_5 clampToGround -120.428027450366,47.3767619529735 clampToGround -122.402015585862,48.2252165511906 -122.368333031748,48.1281417374007 -122.216991980112,48.0074395523983 -122.230120864997,47.9691133009971 -122.302922293019,47.9502148146411 -122.394492319816,47.7741760704507 -122.414815251142,47.6641799154458 -122.382220450337,47.5954090424224 -122.392633724016,47.510242430349 -122.319738644767,47.3901148739843 -122.325376306437,47.3443234291417 -122.420837154063,47.3188444009071 -122.44160451791,47.3011250287099 -122.392843589784,47.2777223727238 -122.424093930825,47.2594726643245 -122.546588119889,47.3162759041886 -122.530763579572,47.2874561757674 -122.591806795064,47.1800604327139 -122.700078972928,47.0983257639744 -122.728186706349,47.0824411560979 -122.790048807191,47.125859766127 -122.923149828379,47.0479638034112 -123.031348160183,47.1007740660548 -123.08119986877,47.0900584211916 -123.115436362362,47.2079808770198 -122.880373328755,47.2992330107181 -122.80218419102,47.360740810615 -122.773334917144,47.3373608176988 -122.825108465453,47.2348262970445 -122.761238576791,47.16249609705 -122.719801685966,47.2231309613462 -122.769708287471,47.2661563733799 -122.741549305237,47.3414503076915 -122.63743668533,47.3985801503896 -122.628754107704,47.3985535711269 -122.699744809759,47.2920852599988 -122.606914471404,47.2705715630047 -122.611546281747,47.2933985199593 -122.580530737959,47.2513878417299 -122.553156448554,47.2833322529578 -122.588254069729,47.3339297206403 -122.544125105865,47.3739271979736 -122.558446593662,47.3983638367051 -122.504461251459,47.5072166170591 -122.542701892959,47.5227341115826 -122.555262191616,47.5835056437302 -122.58646032245,47.5711913307815 -122.621509737099,47.6969685926778 -122.473587970933,47.754980421427 -122.531888262165,47.9094610402373 -122.613217685631,47.9361891106489 -122.611161831324,47.8500088568397 -122.723062245298,47.756899497954 -122.752942725853,47.6606888662813 -122.916969634781,47.6146067598098 -123.026336409535,47.5159360344848 -123.112685319492,47.3715690549333 -123.036205853039,47.3560517908336 -122.833247627681,47.4384644854025 -123.010471142541,47.3530270312954 -123.154060208246,47.3485470958166 -123.113915354148,47.4562737478478 -122.982744610097,47.605474180815 -122.899363646417,47.6725174181428 -122.858803869367,47.8273283820717 -122.809517476022,47.8570752456124 -122.789801306075,47.8025487056137 -122.745869964426,47.8089881012059 -122.65358555422,47.8644314081443 -122.661560699934,47.9171572408641 -122.802931474221,48.0853214885644 -122.768882581909,48.1439939668326 -122.841111108511,48.1331364028468 -122.924844380244,48.0667963906842 -122.921594579239,48.0941790601655 -123.123222071728,48.1487334613251 -123.396857191675,48.1110305596467 -123.99121575548,48.1591616473782 -124.563547200382,48.3572788215719 -124.717175724384,48.3775576295928 -124.705209619396,48.2319958728397 -124.732769782406,48.1499890674666 -124.606685175962,47.8737351045468 -124.4840349709,47.8082550847584 -124.373605760641,47.6387635571163 -124.34908012,47.5269100987395 -124.319426936677,47.349238221659 -124.231425333655,47.2750705461574 -124.192733694907,47.1669824551465 -124.16203636006,46.9296126446967 -124.11236154808,47.0426750048332 -124.034394754879,47.0310336101115 -123.995864776759,46.9763856970925 -123.812655744537,46.9639649518924 -124.046929052757,46.8872532153114 -124.028808615981,46.8237672452008 -124.104738049925,46.8741453654146 -124.105760621107,46.9081486902197 -124.138827038961,46.8999849517573 -124.102067189448,46.7894689338948 -124.091049313876,46.729022769244 -124.043158405537,46.71585552661 -123.895541984289,46.7449861230421 -123.840966602211,46.7182880521381 -123.926470343453,46.6730606753881 -123.957711888544,46.6172253735281 -123.893566870933,46.5110798696875 -123.940693474701,46.4811152076399 -123.84145135609,46.4043430463786 -124.013002080972,46.3836800183619 -124.023042910864,46.5835411596631 -124.065510643968,46.6397453463799 -124.079107527965,46.2672592577036 -123.99332948614,46.310274739492 -123.885770921618,46.2404384175236 -123.725458920321,46.2854238521739 -123.620076470538,46.2586654836991 -123.470772999092,46.2750238188183 -123.304717085176,46.1447375703216 -123.2487994158,46.1440203375679 -123.212437026773,46.1700060595961 -123.176196406189,46.1835864554168 -123.118554158558,46.1793104942643 -123.050596211575,46.1557362282158 -122.974169260528,46.1104834436909 -122.899757285914,46.0793296870295 -122.875417724143,46.0271833271028 -122.807741767287,45.9438901212784 -122.80622291556,45.904072429548 -122.784073650236,45.867886451725 -122.784515918404,45.850449518489 -122.788009565757,45.8003435918391 -122.764288518601,45.7605680280893 -122.772551033013,45.7276855424654 -122.760541289247,45.6493974102277 -122.696323093542,45.6310455505125 -122.651209200341,45.6068304566963 -122.565429806458,45.5948187685695 -122.437154197887,45.5647789119432 -122.356457483648,45.5661712430674 -122.303150328761,45.5430928345032 -122.244922293538,45.5481128647605 -122.082037518263,45.5905040124361 -122.000011553714,45.6178242910982 -121.972659451544,45.635776084156 -121.926820689078,45.6420283739518 -121.888283498804,45.6768563701943 -121.81104103467,45.7006830895236 -121.758694096887,45.6897160514309 -121.706416861345,45.6887931706508 -121.529054611543,45.7195676794317 -121.442552169491,45.6949670880414 -121.422029028765,45.6906031881202 -121.367814251197,45.6996865954037 -121.319977744287,45.6966428366174 -121.276390902266,45.6783399720311 -121.214271714275,45.6656449638228 -121.203308118047,45.6572869347703 -121.192054666449,45.6132419265196 -121.174316011579,45.6005161602332 -121.125204665552,45.6070590988379 -121.073529928592,45.6466107733405 -121.03348258367,45.652844415437 -120.968478511648,45.6451545411606 -120.948572830946,45.650315967172 -120.907937250867,45.6354771069445 -120.861419667766,45.6651862544925 -120.696993903513,45.7105098195153 -120.658403368137,45.73261248754 -120.623757205266,45.7436105722949 -120.570082462284,45.7409179414327 -120.499156501925,45.6956306780396 -120.443383762852,45.6892797229393 -120.283634874867,45.7165828733931 -120.207445390097,45.7197840646162 -120.155907860861,45.7612616683351 -120.06864786541,45.780202445303 -119.994320160406,45.8111403450749 -119.869735634541,45.8316985251524 -119.833555881044,45.8416093443199 -119.678445663881,45.8525390300795 -119.622116728299,45.8994103389685 -119.589294282545,45.9133149491969 -119.512220001301,45.8992005968695 -119.43886108987,45.9142685232279 -119.379441421397,45.9176100650698 -119.302763509833,45.932662726596 -119.178742642589,45.922351608477 -119.140250599579,45.9257086397924 -119.03222168131,45.9662745814382 -118.982132819163,45.9990583744824 -117.992527778446,46.0016389052483 -117.982677428834,45.9998805158959 -117.602826163512,46.0002681586202 -117.481663000967,45.9998347138602 -116.919132428078,45.995175487463 -116.957723390605,46.0656876846632 -116.987211805214,46.0785088973537 -116.961637658488,46.0972742225682 -116.929426274379,46.165483265634 -116.967490477604,46.1975539420731 -116.972724840347,46.2493093586882 -117.001642419838,46.3024487520609 -117.027973590879,46.3354269634861 -117.064184656311,46.3486979530599 -117.044470505763,46.3885739799344 -117.038558547134,46.4279805738524 -117.04192619733,46.536601774571 -117.040968412195,47.1193191102549 -117.042391922165,47.2585012691796 -117.04179475453,47.3614417250081 -117.037471831606,47.9710924196381 -117.038868452187,48.0461859667744 -117.029111695195,48.8380752730768 -117.032049523854,48.9999313267312 -117.438580412623,48.9999185056683 -118.200354738532,48.9999088414174 -118.843602807356,48.9998984346033 -120.857059496563,48.9998306577208 -122.765118968837,48.9997462344489 -122.743940024614,48.9558080674018 -122.822421272766,48.9507251599099 -122.754241982126,48.9099886147134 -122.697404043551,48.8030150496753 -122.516853490647,48.757921319943 -122.526558319548,48.7117247063083 -122.487798210295,48.6385700564281 -122.429545051156,48.5993973238636 -122.505299782151,48.5594447659792 -122.473833244864,48.4621954681636 -122.523227847995,48.4584031117488 -122.608178294452,48.5188240727562 -122.699413806973,48.4943282053316 -122.667031965175,48.4128950743055 -122.564366308901,48.4142464891235 -122.378320027898,48.2897210809664 -122.404404795763,48.2465946390423 -122.509130728878,48.2537928782615 -122.542074086652,48.2104605027962 -122.514511175848,48.1339737049542 -122.361333117765,48.0600974008547 -122.454419044314,48.1284921833768 -122.462855148154,48.2283635421487 -122.402015585862,48.2252165511906 clampToGround -122.967978342058,48.4437945085102 -123.018882894721,48.489605170453 -123.022271121816,48.513359682583 -122.967980000613,48.5269333223363 -123.008698759605,48.5337193215567 -123.01209491531,48.5574777421133 -123.103721392859,48.6083771191688 -123.141053808089,48.6236471212389 -123.169899337157,48.5625647146223 -123.159719925101,48.5218422236538 -123.09523286813,48.479422815339 -122.967978342058,48.4437945085102 clampToGround -122.733187500894,48.2766471779562 -122.768778263979,48.218818397347 -122.695554282422,48.1811852523447 -122.608628397127,48.0314307595447 -122.544961263666,47.9675310410809 -122.471616565863,47.9875090940392 -122.442787963967,47.9180562701758 -122.386960910805,47.9045490614351 -122.355399949048,47.9638860565509 -122.379993925152,48.0321462908929 -122.49621274531,48.0940709834622 -122.546202729793,48.0768581941955 -122.610925345361,48.2063213486201 -122.732034133066,48.2254145183462 -122.623509745109,48.2963505236561 -122.528648438563,48.2835101194884 -122.525750015179,48.3210438618742 -122.604384066189,48.4047892820013 -122.665612560098,48.3967777389214 -122.733187500894,48.2766471779562 empty states.AREA: 147244.653 states.STATE_NAME: Montana states.STATE_FIPS: 30 states.SUB_REGION: Mtn states.STATE_ABBR: MT states.POP2000: 902195 states.POP2001: 908325 states.POP00_SQMI: 6 states.DEN_0_100: 100 USStates.ID: 41 USStates.State_Name: Montana USStates.Date_Entered: Nov. 8 1889 USStates.Year_Entered: 1889 USStates.Year_Settled: 1809 ]]> 1889 #Style_5 clampToGround -109.652533686894,47.0322664572934 clampToGround -111.475425113078,44.7021622259545 -111.44363207933,44.7131796185895 -111.395084047622,44.7088695111883 -111.384959585063,44.7376939086963 -111.372309536392,44.7450870429474 -111.349977174405,44.7261775679182 -111.31922172667,44.7278640397875 -111.315475367488,44.7051930233212 -111.295668417103,44.6829380106443 -111.270207923466,44.6738019972086 -111.270665480153,44.6422120666433 -111.223971342305,44.6269081075219 -111.219797798385,44.6179816965382 -111.234233165171,44.6025621977815 -111.219507505818,44.5731699249139 -111.178764521847,44.5648509025126 -111.170241896337,44.5451861352417 -111.134358940584,44.5279024352059 -111.128918633835,44.5007569482957 -111.094630553034,44.4861244421476 -111.051560651262,44.4733232643312 -111.051615814026,44.6644904630696 -111.053428630452,44.9956954937749 -110.429649489646,44.9922851168859 -110.392759905743,44.9986252880153 -109.99552921526,45.0027929256921 -109.799385375449,44.9995227676354 -108.625256221974,44.9975931654829 -108.259238500746,45.000115150176 -107.894374357914,44.9997736986363 -106.259231717931,44.9961625110408 -106.021150701601,44.9972137020636 -105.08500310735,44.9998170469188 -105.041795987521,45.0010758746085 -104.059842395291,44.9973362616199 -104.043072277779,44.9978055394377 -104.043851417835,45.2128754685677 -104.049516843796,45.8830527625305 -104.048906344358,45.9429936671403 -104.04783642886,46.2808814764405 -104.046705569922,46.5425395197373 -104.047437491435,46.6429474765464 -104.045926505168,47.3338320293792 -104.047307659333,47.4000172886746 -104.048425167939,48.0000812793709 -104.052111483045,48.3910193593535 -104.052317635595,48.6458247340349 -104.062991101535,49.0000267486802 -105.063034487672,49.0000213453771 -106.125579640332,49.0000211878203 -107.188120870533,49.0000171396148 -108.250674874311,49.0000096254319 -109.500737045105,49.0000050041336 -110.750797309743,49.0000054061113 -111.282679441747,49.0000116022388 -112.188387420264,48.9999919367107 -114.063463510159,48.999977505695 -114.729325277653,48.9999701785569 -116.063531289275,48.9999504626971 -116.05669220337,48.4986651887118 -116.055497508913,48.2084837718549 -116.053492448537,47.9761917715222 -116.025316086924,47.9649391580749 -115.998932367501,47.9251408291302 -115.937842286573,47.8671241146629 -115.90392118837,47.841074097063 -115.869809516855,47.8274524788244 -115.849323962062,47.8051824706779 -115.836742105247,47.7562814790774 -115.790537518206,47.7448384001761 -115.775727256626,47.7097326241589 -115.733665317341,47.6955544944202 -115.734067407585,47.6398797756934 -115.698284137246,47.616080699199 -115.69208790895,47.5907209532857 -115.742829391272,47.5336915052907 -115.701522643005,47.5208936310403 -115.692770525831,47.4895405775821 -115.64014181996,47.4752351982892 -115.643185737842,47.4577938074827 -115.656087137581,47.449179888517 -115.732481530032,47.4453037682126 -115.75010555794,47.4339660678209 -115.750326632884,47.4224758337817 -115.666477789603,47.3991675172781 -115.638782326482,47.3800438733229 -115.599535907233,47.3700033411226 -115.555520671095,47.3346132613456 -115.523064072441,47.2919825693658 -115.501930155564,47.2816443931147 -115.42664105155,47.2743741901806 -115.40820774964,47.2635936928256 -115.343661098271,47.25502252875 -115.325227834205,47.2451499352386 -115.296234653795,47.179550129713 -115.193073569516,47.1240264397241 -115.172496072325,47.097570775052 -115.148683842445,47.0917419724592 -115.135507084528,47.0635505060209 -115.081336055121,47.0265244081573 -115.055638385326,46.9733580952066 -115.037334581308,46.9630013040754 -115.001574268432,46.9588093410594 -114.964730239693,46.9252129542069 -114.92412521448,46.9071654671376 -114.940566557467,46.8908879547799 -114.948408839876,46.8524468129944 -114.902324956243,46.7994334872257 -114.866603242816,46.7970455479343 -114.840791891296,46.7755381340251 -114.794030033961,46.7665316733836 -114.777832199076,46.7557169515489 -114.782919473288,46.7030400738234 -114.748105478154,46.695132417127 -114.698431226356,46.7337601578313 -114.673887229565,46.7347216647918 -114.625926712927,46.6871072963735 -114.645038012873,46.6709214874172 -114.644740120825,46.6608240472296 -114.610825986771,46.6290480359896 -114.54039089668,46.6378909331304 -114.48471804306,46.6235748090716 -114.441535907613,46.6457155873909 -114.384017731174,46.6615966222723 -114.334685197666,46.6542270306183 -114.324712393283,46.6228397420843 -114.343319528083,46.5878816927989 -114.350115003954,46.5173898155732 -114.360467827582,46.5061249643996 -114.410714938833,46.4873716679663 -114.384024894777,46.4281789078305 -114.397016905685,46.3995456489507 -114.409796078984,46.3929118282104 -114.431795791851,46.2847113519319 -114.473795189375,46.2529614473374 -114.472833625773,46.2437832404928 -114.439553093386,46.2202541051873 -114.440879403543,46.1689689930953 -114.467017880608,46.1552626443821 -114.509613705042,46.1574178541686 -114.518944233429,46.1360630037976 -114.506568594996,46.116142578097 -114.477370071638,46.1073573510943 -114.456029627256,46.0822298311072 -114.465756583121,46.0508155788048 -114.494321056653,46.0234105503775 -114.474529639485,46.0097653411895 -114.484455408522,45.9898066653888 -114.412447296507,45.971972990138 -114.405290578501,45.9539789286456 -114.429460795441,45.9214773546562 -114.413530117056,45.9106511998636 -114.392838283787,45.870886524333 -114.407525017428,45.8464531278581 -114.443231585826,45.8526214179583 -114.473803267544,45.8394681128492 -114.499164076216,45.8426838388298 -114.517375770656,45.8100678088233 -114.563542382615,45.7623987542618 -114.541958001694,45.7459993063995 -114.534976768211,45.7229965521011 -114.497560885022,45.6944015040476 -114.510706655448,45.6740575393162 -114.501741735013,45.6523937459176 -114.564678473634,45.624271464153 -114.540957804767,45.5963973386292 -114.56092431692,45.5487399822622 -114.527392140633,45.5581929137358 -114.49659127146,45.5466496233752 -114.462708066367,45.547847634842 -114.433555120266,45.5276335826489 -114.419051016147,45.4990079989286 -114.371457222895,45.485740801367 -114.350246661543,45.4633830586196 -114.326434503356,45.4574246659907 -114.26223890106,45.4858597041806 -114.247880062291,45.5029457876717 -114.241997909503,45.5352908283129 -114.194808749935,45.5279173495385 -114.172667788196,45.5439240709914 -114.132047849072,45.550382696738 -114.118139289111,45.5711272187937 -114.082966989764,45.5863787056049 -114.05651557884,45.6251440063411 -114.018032071357,45.6407731495898 -114.010990085379,45.6525110636154 -114.019878777802,45.6723780179129 -114.009472169193,45.6863322994531 -113.971148905291,45.6973761439766 -113.964144746081,45.6793783899522 -113.926698671543,45.6712113532369 -113.923532205814,45.6551247458339 -113.902199681462,45.6372529821309 -113.903305686338,45.6134911520045 -113.852027200864,45.6095623664961 -113.822485335827,45.6006361604291 -113.803754486689,45.5837295106944 -113.833715005823,45.5149081483478 -113.780933520736,45.5168654883577 -113.772304324589,45.5070541264418 -113.769167956071,45.4777077122394 -113.785662417081,45.4456336800122 -113.775025938091,45.4101724087205 -113.741309985249,45.3823864841092 -113.739080720354,45.3215307727051 -113.68870893801,45.2777882479016 -113.690120087671,45.262281529236 -113.64559265708,45.2067902002949 -113.600928342409,45.1809921888967 -113.594099232644,45.149742661863 -113.571583860449,45.1345453195545 -113.574375982832,45.1177112498262 -113.552272678027,45.1075492325193 -113.510225662875,45.1078357229334 -113.520609069994,45.0820638513345 -113.490158803375,45.0712189425282 -113.486305515199,45.0583215917022 -113.455435394093,45.0433489576732 -113.458853128792,45.0274494937816 -113.44102942911,44.9981947865069 -113.448764850883,44.9495226314899 -113.463413760979,44.9407755008957 -113.487348245354,44.9395739483575 -113.496190944735,44.9306703825127 -113.445573357454,44.8512398138089 -113.42137886332,44.8336996325871 -113.350024223891,44.8075686572204 -113.340631071319,44.7790001716196 -113.318680101131,44.7802285072048 -113.257154262582,44.810486836588 -113.24033835154,44.8118408943235 -113.138273905949,44.7614392171565 -113.127431313459,44.7373793502759 -113.101703254015,44.7151730541415 -113.098955981719,44.6959159515966 -113.073143949778,44.6755255639002 -113.054289194175,44.6242889653874 -113.083036889648,44.5826813811508 -113.039660671342,44.5562941508867 -113.037821112649,44.5329591224566 -113.007713096479,44.5106119571576 -113.020309135991,44.4817760622967 -113.006658758598,44.4526157258091 -113.012014532,44.4377151798982 -112.985249652408,44.4355404997863 -112.938281270743,44.407192303823 -112.887307562786,44.392852037925 -112.870781128928,44.3699785388203 -112.844275309657,44.353639685816 -112.817396542611,44.3642025255851 -112.818709940506,44.3948197608762 -112.826691426867,44.4210844413589 -112.796227919073,44.4580108762872 -112.779863145228,44.473921967913 -112.733712266678,44.4843203521209 -112.714325884719,44.4969354760903 -112.653189032213,44.4808022867295 -112.539324359313,44.4774975037791 -112.501839547759,44.4629973763857 -112.458519702915,44.4688346426366 -112.420753287455,44.4492848652432 -112.367583641487,44.4492705303202 -112.34057705949,44.4971802630882 -112.342507416987,44.5251001904491 -112.282341327877,44.5417028629559 -112.256675563109,44.5599718966745 -112.230398525049,44.5594913548598 -112.217763617989,44.538495263148 -112.19965792462,44.5314495370004 -112.124190576071,44.5282529189526 -112.099896990645,44.5182317486371 -112.059366916596,44.5286115853182 -112.027077158683,44.5228438141025 -112.023613199364,44.5350432018407 -111.977818321591,44.5296761932588 -111.940385892152,44.5497266545093 -111.872502337514,44.5562658469912 -111.80783730012,44.5039818716956 -111.792608215621,44.5184627416638 -111.766918095449,44.5188253853155 -111.716997718561,44.5337606582907 -111.684862667357,44.5507519238675 -111.605248563607,44.542989843785 -111.56723085062,44.5528666934207 -111.490240946754,44.5286973145766 -111.482573106114,44.536143833035 -111.459325300921,44.5379218382476 -111.462827429646,44.5499420909707 -111.492903869929,44.5511890986189 -111.514526468783,44.5931969532598 -111.501747128314,44.6159712293443 -111.50769070953,44.6376885788042 -111.470167827235,44.6407103470055 -111.458265515114,44.6525553200246 -111.460691885141,44.6700230655225 -111.480804007084,44.6914159868954 -111.475425113078,44.7021622259545 empty states.AREA: 32161.925 states.STATE_NAME: Maine states.STATE_FIPS: 23 states.SUB_REGION: N Eng states.STATE_ABBR: ME states.POP2000: 1274923 states.POP2001: 1284576 states.POP00_SQMI: 40 states.DEN_0_100: 97 USStates.ID: 23 USStates.State_Name: Maine USStates.Date_Entered: Mar. 15 1820 USStates.Year_Entered: 1820 USStates.Year_Settled: 1624 ]]> 1820 #Style_5 clampToGround -69.2342803140978,45.3894093487898 clampToGround -69.7772762645906,44.0741483198713 -69.7667552061447,44.0477322592984 -69.8000128595467,44.0268667288672 -69.7776729844266,43.7912707228193 -69.7503594273371,43.7617041140593 -69.724671298031,43.7844771657636 -69.7485283916032,43.8933754295128 -69.7206355796789,43.9379795478678 -69.6129323231589,44.0336128548498 -69.655244801551,43.980249889013 -69.6644528704785,43.8522244586918 -69.5893265387295,43.844862803005 -69.4832330714031,43.8871600746258 -69.3944884505371,44.0251280788842 -69.3464537674589,44.0159695598265 -69.2936504808219,43.942190755563 -69.2191407235428,43.946787577244 -69.0744584304863,44.0690660136479 -69.0214822718143,44.2440933416922 -68.9850277749459,44.2711126004819 -68.9591794578908,44.430331837978 -68.8116777653337,44.4945934426597 -68.8079028778155,44.5696542069791 -68.8606089070208,44.6109704067522 -68.8238128460999,44.6640894736035 -68.8235520702076,44.6089068403569 -68.7452790256047,44.5523206373911 -68.7413487051019,44.5072848958119 -68.8137677641977,44.4139901814304 -68.8128516842902,44.3274322783305 -68.7403098752916,44.3463301473607 -68.559426777983,44.2598872456427 -68.5300756616285,44.289836101881 -68.552186173906,44.3990492489601 -68.4285712497143,44.46530639124 -68.3637657361517,44.4313868490081 -68.2456142631336,44.4906479970509 -68.1362647391276,44.4752371654176 -68.0743791714088,44.3813743661084 -68.016392981954,44.3849566034442 -67.9865237153801,44.484812336461 -67.963436756976,44.5053274248743 -67.9683422249939,44.4712284165698 -67.9000417769437,44.4523993525841 -67.8585605178656,44.5360772002757 -67.8112189343998,44.5540098374308 -67.6188382504584,44.5402396193185 -67.5709936023128,44.5983332155118 -67.3885104425158,44.6914001984435 -67.3084681615044,44.6535210401791 -67.2003645872174,44.6537812351816 -67.0077187595682,44.7806250078979 -66.9692710360024,44.8286551272807 -67.1467066767694,44.9045811973885 -67.0653586269938,44.959295663853 -67.1506607784721,45.1219898963224 -67.1659056389324,45.1562643764959 -67.2740952306493,45.1827832977016 -67.3456056673913,45.1222522184808 -67.4394348544946,45.1895839538421 -67.4779500648077,45.2802804372187 -67.4185550809287,45.3758523506007 -67.5041066775521,45.4858160063971 -67.4160842487578,45.5035545265692 -67.4393007667661,45.5925614300058 -67.6151403322051,45.6051988982084 -67.7180345966414,45.6812994578214 -67.7529551798229,45.6592891942025 -67.8034328058582,45.6781136054575 -67.80305340237,45.7945081513461 -67.7593671369616,45.8277986058452 -67.794570844796,45.8784757169552 -67.7556150798964,45.9165801987941 -67.7802895888027,45.9470627421733 -67.7910107659324,47.0610036074639 -68.2308067781327,47.3521481908886 -68.3348137604252,47.3573741052975 -68.3912568256045,47.2850971351555 -68.5146730447092,47.2969643156636 -68.8948720119703,47.1822565092763 -69.036714506994,47.2573616071401 -69.0469764278811,47.4220306555512 -69.2302960300003,47.453334503029 -69.984977566148,46.6913656777797 -70.0141447113402,46.5705982633135 -70.0466075241071,46.4261155437789 -70.1910585034955,46.3348397522369 -70.2834966429549,46.1902492629794 -70.229325409987,46.1374343941084 -70.3048496296878,46.0666583336474 -70.2800225675015,46.0531540673207 -70.3102952668023,45.9687822575999 -70.2474646921772,45.9446197500614 -70.2539641026553,45.8990048630746 -70.4162139203836,45.7903089854213 -70.3963831228075,45.7220459930229 -70.5522701315346,45.660664152262 -70.7199105999252,45.5129543604765 -70.6349296434642,45.3919670337142 -70.7969669129234,45.4251721707247 -70.8291320677672,45.3907261617344 -70.8126658344856,45.3546780200798 -70.8428755371108,45.2781374154307 -70.8764440614847,45.2254453802794 -70.9593819235283,45.3388657690273 -71.0875092473499,45.3014692052699 -71.0287261250693,44.6685380945196 -71.008596512061,44.2821463668217 -70.9844425613652,43.7911635520181 -70.973874166771,43.5718298935058 -70.9565244088141,43.5641434705 -70.9496195233573,43.5489536133091 -70.9642682587516,43.5319898518146 -70.9592784003468,43.5163880057296 -70.9707912174759,43.4702114970827 -70.9614829099438,43.4381263706902 -70.9790994637899,43.3961839179203 -70.9696996092209,43.3663799823752 -70.9058011398795,43.3020692769929 -70.9010859006765,43.281020042684 -70.8132073721395,43.235222695474 -70.8305481365302,43.1591741298583 -70.8186681583247,43.1218710916248 -70.6656721051232,43.091050561352 -70.538941073876,43.3357181684913 -70.4569767880509,43.3494706682902 -70.365925612365,43.4303037212258 -70.3416106101908,43.5349087014933 -70.222239251928,43.5772404279461 -70.2357978254955,43.685796426524 -70.1566285119637,43.7898104908998 -70.0264027843525,43.8456010551567 -69.9873704560013,43.8457387629637 -69.9995001025524,43.7862077545854 -69.9729033991696,43.7688475582739 -69.9031322010756,43.7907323183889 -69.8867908767136,43.8767134346018 -69.8461556590995,43.8423439660335 -69.8517853541081,43.7443279848531 -69.8303921849006,43.7279862438606 -69.7915279935521,43.7560849940079 -69.859928458154,44.0000010562904 -69.7772762645906,44.0741483198713 clampToGround -68.3879209893914,44.3772530708835 -68.4028903244654,44.2708014569031 -68.3207117037137,44.2250794730622 -68.3047050923042,44.2900314435771 -68.1647687868107,44.3344957275365 -68.238709216076,44.4375633361586 -68.3554495053015,44.4288577749373 -68.3502537650533,44.3989509513447 -68.3879209893914,44.3772530708835 empty states.AREA: 70812.056 states.STATE_NAME: North Dakota states.STATE_FIPS: 38 states.SUB_REGION: W N Cen states.STATE_ABBR: ND states.POP2000: 642200 states.POP2001: 639099 states.POP00_SQMI: 9 states.DEN_0_100: 99 USStates.ID: 39 USStates.State_Name: North Dakota USStates.Date_Entered: Nov. 2 1889 USStates.Year_Entered: 1889 USStates.Year_Settled: 1812 ]]> 1889 #Style_5 clampToGround -100.470755004497,47.4460775747168 clampToGround -98.7304369014178,45.938271038568 -98.0147097100399,45.9314979679384 -97.9787218042793,45.9308221521123 -97.2333099148663,45.9365026737778 -96.5669215299379,45.9341104552974 -96.561802180143,45.947683082204 -96.5762152647689,46.0212796299197 -96.5519309951806,46.0955288981098 -96.5711660882375,46.1771746587376 -96.5878902984855,46.1919183501241 -96.586456172813,46.2154130412247 -96.598183069183,46.2386825873787 -96.6020742477367,46.3363242033822 -96.6148614718026,46.3508125122489 -96.652101616659,46.359433744956 -96.688228026703,46.4122182590646 -96.709682617507,46.4271682580565 -96.7148938591495,46.4687184679509 -96.7403159762507,46.4894326362161 -96.7512275405111,46.5886193856906 -96.7710417660143,46.599983727298 -96.7843175742934,46.6241120798968 -96.7902458463061,46.6297732310646 -96.7936950250642,46.6788040267861 -96.7815566712509,46.7070442482152 -96.7803820602875,46.7623119235704 -96.7971969856713,46.8120331273937 -96.7682498142506,46.8448617179934 -96.7780611563929,46.8673496223485 -96.7569111193893,46.9227804067606 -96.7630680116614,46.9362617243826 -96.7879252958789,46.9321845446505 -96.7897103913183,46.9482025284177 -96.8018871168051,46.9558437462552 -96.7934256963282,46.9696412657999 -96.8167722571011,46.9697793204954 -96.8245311005541,47.0034368148568 -96.8352964249003,47.010231336615 -96.8226082854226,47.0339323228784 -96.8269645555187,47.0788327499143 -96.8191517739067,47.092603946145 -96.839163919183,47.1518867244712 -96.8264910530645,47.1700638561564 -96.8370653320765,47.240458862523 -96.8496236414402,47.2568437171683 -96.8377139015022,47.2938841531782 -96.8467474249113,47.3146021392787 -96.8384617159414,47.3422432670699 -96.8506310274787,47.3609547965118 -96.8398275182521,47.3841173886799 -96.8500055242737,47.4089361913463 -96.8672485372544,47.4130870926383 -96.8558270224376,47.4367532150799 -96.8666840950429,47.4615376720173 -96.8516156149426,47.5006189556105 -96.8606869753116,47.521355890617 -96.8491887237169,47.5445680596933 -96.8586644874892,47.5629780191413 -96.8522168516036,47.6011515774988 -96.8733355306381,47.6152549421415 -96.8894255747151,47.6739252332857 -96.9236591919833,47.7140944463104 -96.9320126704945,47.7635063343999 -96.9578304353686,47.7944403501783 -96.9838928361532,47.8096615237026 -96.9772315863069,47.8280293802142 -97.0003404808151,47.8701978669666 -97.0205662446582,47.8755694579146 -97.0153310859442,47.9178900732528 -97.048053168361,47.9549243203709 -97.0670713478673,48.048164548667 -97.0927214340796,48.0703439518727 -97.0990303774014,48.1009725364666 -97.1218728658484,48.1163692500537 -97.1209185467255,48.1427747596289 -97.1365131689498,48.1483979760568 -97.1160657786151,48.1592237600938 -97.1374434976966,48.1677691625112 -97.1362912579062,48.1752269254696 -97.1372749809682,48.1950635087416 -97.1308278329499,48.203741885664 -97.1108994630634,48.2076058326789 -97.1397539172305,48.2217551769127 -97.1092357553089,48.2280489212221 -97.1275540577206,48.2335233812974 -97.1237846407281,48.2591734472995 -97.1366555811411,48.2644837251407 -97.1117146532382,48.2778766724222 -97.1126835485646,48.2861469425287 -97.1305136858433,48.2930404066961 -97.1137211077245,48.2948826063907 -97.1147510385913,48.3036182701977 -97.1326346023646,48.3109694998778 -97.1125917805087,48.3199260418033 -97.1371359526577,48.325991839938 -97.1311236997639,48.3614912628834 -97.1503959422882,48.3632158504957 -97.1337863598383,48.3724547376235 -97.1352054002438,48.3844100102639 -97.1588188890655,48.3882060567347 -97.1291245153039,48.4078855188887 -97.1498235476997,48.4099916056847 -97.1516469812462,48.4196122946538 -97.1226011810987,48.4161098774117 -97.1196331513721,48.4371020760904 -97.1436129528287,48.4381095940115 -97.1345943266034,48.5173139662426 -97.1483276589694,48.5179512756552 -97.13938559124,48.5346480897377 -97.1555375111,48.5383982428954 -97.1604356938229,48.5450778855401 -97.1466183723849,48.549537028086 -97.1679431505786,48.5622632793582 -97.1521268011092,48.5728564381998 -97.1581923011142,48.5836407260616 -97.1408119037381,48.586905806154 -97.1447180746877,48.614024636853 -97.1229581756859,48.6207686596526 -97.1274443455249,48.6297943394125 -97.1076300563642,48.6299465820435 -97.0971692767445,48.6745289135858 -97.1167392665872,48.6952431183753 -97.1101012816521,48.7085830451964 -97.1348061613563,48.7262379306493 -97.1325018005064,48.7472187900956 -97.1478983886693,48.7556533929197 -97.139245987437,48.7635421115078 -97.147516003008,48.7811701058176 -97.1739447012341,48.8015144641308 -97.1647124057145,48.8103683029549 -97.180421855856,48.8155374993874 -97.171204411799,48.8359804803914 -97.1757275173075,48.8737577873476 -97.2163690958323,48.9318299182446 -97.2294364438333,48.9999877567165 -97.9378677843873,48.9999918937478 -99.0004034005602,49.0000065174999 -99.5335659929558,49.000008633611 -100.18790828563,49.0000022147337 -101.50043742862,49.0000200955549 -102.022264422813,49.0000152771341 -102.937958808257,49.0000261991575 -104.062991101535,49.0000267486802 -104.052317635595,48.6458247340349 -104.052111483045,48.3910193593535 -104.048425167939,48.0000812793709 -104.047307659333,47.4000172886746 -104.045926505168,47.3338320293792 -104.047437491435,46.6429474765464 -104.046705569922,46.5425395197373 -104.04783642886,46.2808814764405 -104.048906344358,45.9429936671403 -102.994822935958,45.9411156292139 -102.94639700191,45.9416652376318 -102.002775042851,45.9425053768471 -100.514406747246,45.9403879984664 -99.8757832426344,45.9435473182577 -99.7173457378766,45.9427610350303 -99.0068328335466,45.939555550557 -98.7304369014178,45.938271038568 empty states.AREA: 77195.055 states.STATE_NAME: South Dakota states.STATE_FIPS: 46 states.SUB_REGION: W N Cen states.STATE_ABBR: SD states.POP2000: 754844 states.POP2001: 761023 states.POP00_SQMI: 10 states.DEN_0_100: 99 USStates.ID: 40 USStates.State_Name: South Dakota USStates.Date_Entered: Nov. 2 1889 USStates.Year_Entered: 1889 USStates.Year_Settled: 1859 ]]> 1889 #Style_5 clampToGround -100.235288914651,44.4333181443813 clampToGround -102.788384569614,42.9953035756879 -102.086700926634,42.9898870255377 -101.231737199277,42.986842959129 -100.198142131775,42.9910950186342 -99.5327903284941,42.9923349632849 -99.2539717111969,42.9923894733936 -98.4976513847196,42.9917787984063 -98.4574440540216,42.9371607787996 -98.3912046950979,42.9201358627386 -98.3103395747196,42.881794760613 -98.1678266235025,42.839571032558 -98.1448690461962,42.8357947189847 -98.1231169233177,42.8202235933653 -98.1218198603008,42.8083601338589 -98.0331403830295,42.7691923357945 -97.9951447789843,42.766812278154 -97.9635584005017,42.7736899920002 -97.9294772231674,42.7923243687957 -97.8899410388902,42.8312716359345 -97.8886594186896,42.8558072875283 -97.8186429929595,42.8665874779999 -97.7970283283528,42.8495971363047 -97.7721864466724,42.8461639819758 -97.7252498168805,42.8580083761152 -97.6857520013046,42.8368370186066 -97.6349705007855,42.8612849600302 -97.5706541404348,42.8479907365578 -97.5061318942665,42.8601364739438 -97.4831590291241,42.8571570898554 -97.4572637840893,42.8504431026505 -97.3893060334922,42.8674331659047 -97.3114143393748,42.8617716796293 -97.2714575353654,42.8500146366722 -97.2431895649236,42.851826425825 -97.2244435756681,42.8412025319938 -97.211831726419,42.81257352787 -97.1614227617155,42.7986194059191 -97.1304692456486,42.7739233575094 -97.0151396700717,42.7595420464778 -96.9795933660979,42.7583137573091 -96.9700029346946,42.752065431992 -96.9778689966012,42.727308194642 -96.9707734818061,42.7211474962424 -96.9082338249473,42.7316989698022 -96.8101401144962,42.704084462612 -96.8104375000235,42.6813412142201 -96.7993439788198,42.6700191686323 -96.7226587475866,42.6685919557678 -96.699060222031,42.6577158497403 -96.694596777315,42.641163786393 -96.7152728921436,42.6219074766425 -96.714059707901,42.6123020324651 -96.6366723762755,42.5507317592446 -96.6292944799537,42.5226936780003 -96.6054673040697,42.5072362916062 -96.584753048971,42.5182872197448 -96.5472155727104,42.5204993234568 -96.4947015105274,42.4884592175071 -96.4393947509647,42.4892408377156 -96.4802432442006,42.5171303049452 -96.4893375011233,42.5640279717967 -96.5009420346642,42.5738851852149 -96.4884981845359,42.5804806539459 -96.5128440201087,42.6297550903686 -96.5411650971666,42.6624053661285 -96.56303923913,42.6685130300247 -96.6265407804251,42.70835472382 -96.640709192144,42.7486038180978 -96.6329805597535,42.7768356021372 -96.6008750611506,42.7995586266164 -96.5876454371957,42.8353813945249 -96.5731261406702,42.8343473823113 -96.5562111991181,42.8466606609486 -96.5375110890159,42.8969064560324 -96.5442634617344,42.9138663406581 -96.5149350519869,42.9523820814978 -96.5171478195164,42.9864580906085 -96.4990199957611,43.0120501064927 -96.5200103858023,43.051508664474 -96.4795732478976,43.0618840567811 -96.4620939419638,43.075582202376 -96.460804816306,43.0878728592997 -96.4515050880692,43.1263087732519 -96.4731145701049,43.2090821295544 -96.4872451689755,43.2179092697119 -96.5586057702159,43.2254892270262 -96.5669911071477,43.2396337909954 -96.559567772089,43.2532633182258 -96.5707224965755,43.2636122914599 -96.5791308298904,43.2900740306766 -96.5405632734769,43.307659139748 -96.5228938744308,43.3569663195107 -96.5250535412843,43.3842252910413 -96.5577087170132,43.4007272259127 -96.5891129505575,43.4355391262275 -96.5837958978062,43.4819205535996 -96.598315428219,43.4998490975791 -96.4604547078315,43.4997184756898 -96.456602339442,43.8487418284865 -96.4573975061948,44.1990613946085 -96.4551061874746,44.5383431654349 -96.4567178119828,44.6288086832266 -96.45521726388,44.801347584114 -96.4560798249867,44.9719948297018 -96.454496608233,45.2751954302209 -96.4576022451657,45.2988502415708 -96.4775920650685,45.3285093657539 -96.5325489023943,45.375132161552 -96.605084508902,45.3965244024214 -96.6931692082715,45.4106381219312 -96.738032334178,45.4581952903635 -96.7692462014101,45.5174788689806 -96.8430871871886,45.5840902909474 -96.8549898493374,45.6091221067738 -96.8327958215581,45.6506868841235 -96.6573917688784,45.7389705623089 -96.6046107059596,45.8082642484528 -96.5879553105857,45.8178543918252 -96.5669215299379,45.9341104552974 -97.2333099148663,45.9365026737778 -97.9787218042793,45.9308221521123 -98.0147097100399,45.9314979679384 -98.7304369014178,45.938271038568 -99.0068328335466,45.939555550557 -99.7173457378766,45.9427610350303 -99.8757832426344,45.9435473182577 -100.514406747246,45.9403879984664 -102.002775042851,45.9425053768471 -102.94639700191,45.9416652376318 -102.994822935958,45.9411156292139 -104.048906344358,45.9429936671403 -104.049516843796,45.8830527625305 -104.043851417835,45.2128754685677 -104.043072277779,44.9978055394377 -104.059842395291,44.9973362616199 -104.059465130268,44.5743526100096 -104.061036140765,44.1818252843501 -104.059731381692,44.1458254687842 -104.059479420181,43.8529065675403 -104.057913943497,43.5037122621461 -104.059157507468,43.4791339417582 -104.056198856311,43.0030623563908 -103.501463853421,42.9986188303099 -103.005875236663,42.9993539301105 -102.788384569614,42.9953035756879 empty states.AREA: 97803.199 states.STATE_NAME: Wyoming states.STATE_FIPS: 56 states.SUB_REGION: Mtn states.STATE_ABBR: WY states.POP2000: 493782 states.POP2001: 495345 states.POP00_SQMI: 5 states.DEN_0_100: 100 USStates.ID: 44 USStates.State_Name: Wyoming USStates.Date_Entered: July 10 1890 USStates.Year_Entered: 1890 USStates.Year_Settled: 1834 ]]> 1890 #Style_5 clampToGround -107.553081008537,42.9982837598069 clampToGround -104.053615199998,41.698218257724 -104.053513414154,41.9998153422964 -104.056219380476,42.6146696865973 -104.056198856311,43.0030623563908 -104.059157507468,43.4791339417582 -104.057913943497,43.5037122621461 -104.059479420181,43.8529065675403 -104.059731381692,44.1458254687842 -104.061036140765,44.1818252843501 -104.059465130268,44.5743526100096 -104.059842395291,44.9973362616199 -105.041795987521,45.0010758746085 -105.08500310735,44.9998170469188 -106.021150701601,44.9972137020636 -106.259231717931,44.9961625110408 -107.894374357914,44.9997736986363 -108.259238500746,45.000115150176 -108.625256221974,44.9975931654829 -109.799385375449,44.9995227676354 -109.99552921526,45.0027929256921 -110.392759905743,44.9986252880153 -110.429649489646,44.9922851168859 -111.053428630452,44.9956954937749 -111.051615814026,44.6644904630696 -111.051560651262,44.4733232643312 -111.050405173289,43.9825533508377 -111.046771181184,43.5155282322774 -111.047498202203,43.2847346290475 -111.04921566545,43.0198830902658 -111.046780328328,42.503251870505 -111.04869741386,41.9962033494069 -111.051068773655,41.578592411864 -111.051651122482,41.2584254005779 -111.05102250907,40.9965835985974 -110.06318573561,40.9978919528284 -110.002165480573,40.9975995171866 -109.048314704754,40.9984333935171 -107.918671336725,41.0033751160193 -107.304051053295,41.0001333468858 -106.865438763821,40.9984573861084 -106.329125682765,41.001288969127 -106.203471481278,41.0000850018961 -105.278797604523,40.9963491628159 -104.934492922627,40.9942891435778 -104.05170553525,41.00321132686 -104.054012364451,41.3880858190034 -104.055500519791,41.5642223678205 -104.053615199998,41.698218257724 empty states.AREA: 56088.178 states.STATE_NAME: Wisconsin states.STATE_FIPS: 55 states.SUB_REGION: E N Cen states.STATE_ABBR: WI states.POP2000: 5363675 states.POP2001: 5408886 states.POP00_SQMI: 96 states.DEN_0_100: 92 USStates.ID: 30 USStates.State_Name: Wisconsin USStates.Date_Entered: May 29 1848 USStates.Year_Entered: 1848 USStates.Year_Settled: 1766 ]]> 1848 #Style_5 clampToGround -90.006191227598,44.6331178864174 clampToGround -87.7485548516699,44.9616167936432 -87.6203354938252,44.9919977731043 -87.6185214385406,45.0568068963915 -87.5812758616406,45.0946399102465 -87.6648864796573,45.1090540526029 -87.6728141404664,45.1406726367061 -87.729668811687,45.1766048406442 -87.7361999812867,45.1990723551736 -87.72162823196,45.2116719436728 -87.7196680292816,45.2367715966918 -87.7051420461443,45.2470862859939 -87.7044714190303,45.2722051755656 -87.645362038293,45.34816920676 -87.6436840378919,45.3618558882988 -87.6895980065264,45.3912693654604 -87.7600380690864,45.3528977344774 -87.8280078733776,45.3583213196226 -87.8412825138008,45.3461489152026 -87.8620960657316,45.3701651658513 -87.8685352765743,45.3720723766891 -87.8739746664525,45.3620858008275 -87.8836106233029,45.3658544827434 -87.8495317013046,45.4061175328758 -87.8602674034623,45.445098404767 -87.8136146858711,45.4664604760223 -87.7893849078335,45.4990676310374 -87.8051409550811,45.5445258364016 -87.8286019788526,45.5685917608724 -87.7863124896731,45.5685197968153 -87.7750754639144,45.6003869719677 -87.7760447968861,45.6132001492452 -87.8199378153198,45.6544505099681 -87.8170542702565,45.6653907719653 -87.7809448308433,45.6759156697945 -87.7774737292068,45.6841018123955 -87.8011558298595,45.7013243544489 -87.8015528795181,45.7113910361362 -87.8423627328109,45.7224184643369 -87.873628831766,45.7506993690495 -87.9691796312807,45.7664485705759 -87.9900698113483,45.7950463354111 -88.0516393398365,45.7861121476097 -88.0887340937991,45.7915325188816 -88.1299494937058,45.8194019526506 -88.121786443611,45.8348779040675 -88.0654210733109,45.8736421368008 -88.0957641221132,45.8918035055568 -88.093850061765,45.9206153043833 -88.1113904221148,45.9262876744074 -88.150438424194,45.9362935215681 -88.1801939444304,45.9535166684228 -88.2149918189356,45.9479016364541 -88.2571680396397,45.9670551908873 -88.2991520587513,45.9619441469833 -88.3213230502811,45.9667127656587 -88.3699382062343,45.9945870784701 -88.4035221124417,45.9834220708464 -88.4543189656679,46.0007603460834 -88.483813961278,45.9991509885852 -88.4940832789595,46.0129599627087 -88.5156131830942,46.0186095619689 -88.5483579419945,46.0193002259831 -88.575357692098,46.0089590630598 -88.5975360335339,46.0155164912387 -88.6155023459798,45.9941205068572 -88.6436694832571,45.9933882928391 -88.6773838648913,46.0201441283944 -88.7036055788856,46.0189236405892 -88.7264096386053,46.029581736083 -88.7730171354202,46.021147746959 -88.7774806211023,46.0326143605406 -88.7938153525548,46.0363602068919 -88.804397170335,46.0268046239007 -88.9251954422437,46.0736015080096 -88.9853010679315,46.1003912267907 -89.0998061353819,46.1456427917013 -89.925136091667,46.304025700414 -90.1116593658125,46.3404289934283 -90.1151771316786,46.3651557309551 -90.1417974652462,46.3938993152082 -90.1613911037779,46.4423800673451 -90.2115257849797,46.5062949924702 -90.2584017374293,46.5087897865362 -90.2697849871137,46.5224805256097 -90.300181077668,46.5250515829943 -90.3023935803059,46.544296405249 -90.3137081584288,46.5515632659266 -90.3855250538424,46.5396577407228 -90.4081998571279,46.5686106643971 -90.5408771952384,46.587526707927 -90.7307139060076,46.6456961932741 -90.9262438019449,46.5855029087847 -90.7774455953978,46.8831225522614 -90.7744862239653,46.920235051196 -90.861730423897,46.9524795233116 -91.5557728185125,46.7568600006141 -91.9214609310238,46.6801342525729 -92.0041571605491,46.6838004124073 -92.0959698317733,46.742627480002 -92.2091541745391,46.6468720259673 -92.2872715563534,46.6587860038615 -92.2886852608925,46.4159840674228 -92.2889439643788,46.1566006735494 -92.2893704026368,46.0732311286316 -92.3273726656403,46.0568782051512 -92.3462248301446,46.0225961162004 -92.3649627980664,46.0162488119767 -92.424999275654,46.0255041004608 -92.4623457577218,45.9811975360765 -92.523976865602,45.9825831928093 -92.5526720844383,45.951269177817 -92.6662078822659,45.9157031282064 -92.7062407667141,45.8909581511523 -92.7340976634746,45.8449807095829 -92.7487619268784,45.8373020678585 -92.7791069996475,45.7633404333685 -92.8336362361192,45.7308902363902 -92.8600197303491,45.7105625427853 -92.8853973666776,45.6449553564473 -92.8768312053709,45.5788365687146 -92.8350370161896,45.5634021889124 -92.7621749006385,45.5642634927727 -92.7281546763928,45.5472423195578 -92.6854210050266,45.470053305923 -92.6548177462347,45.4552217732121 -92.6449750709781,45.4394520895191 -92.6487510358123,45.3954659291152 -92.6848697682278,45.3630764817203 -92.7073843995039,45.3182016620431 -92.7465933709999,45.2976031328022 -92.7554192919425,45.2123764810656 -92.7625830453591,45.1866121435376 -92.7449348452892,45.1564226976764 -92.745422213769,45.1130040157029 -92.7967618135124,45.0656102708574 -92.7629915622041,45.0221192057595 -92.767126457669,45.0010049050117 -92.7497678430831,44.9356555439475 -92.7539257938533,44.9150027795129 -92.7718708151913,44.8994959546817 -92.7642634372038,44.8622340952332 -92.7610280602863,44.8353710549111 -92.8055846707726,44.7461605361291 -92.7371456955245,44.7135944805029 -92.6303675936169,44.6426524073846 -92.6089736337232,44.6102923158697 -92.5092148595268,44.5751591745776 -92.3408725165741,44.552835394321 -92.3204780087543,44.5404910618561 -92.2966874837295,44.4921818837451 -92.2491003601042,44.4562167874695 -92.2061374354761,44.438394406506 -92.0913333998139,44.4155898138742 -91.9723859734527,44.3644872200889 -91.9388683450487,44.339111391384 -91.9227541233788,44.3175199116197 -91.9223493716377,44.2883410303644 -91.8886943206616,44.2574949606432 -91.8487439445729,44.1911872320563 -91.7532193228097,44.137227713274 -91.6522336068049,44.0668957468858 -91.6017862700781,44.0408222716716 -91.5691620630017,44.0349552968239 -91.5284201557391,44.0342152895652 -91.425901818194,43.9856198570706 -91.3733573044066,43.9471911008781 -91.2919479787799,43.8471907610578 -91.2511048926494,43.7880757984421 -91.2589159418758,43.722395792303 -91.258389189352,43.6773222933277 -91.2329899044204,43.5988900700786 -91.2405580213774,43.5487125887566 -91.2235667796587,43.5008086595185 -91.2359034673886,43.4646842675378 -91.2109165788835,43.4240510516753 -91.1982436244129,43.3705129909022 -91.1770487337014,43.3539461618861 -91.0784980300101,43.3132978076873 -91.0664279003866,43.2806829026437 -91.0690522883689,43.2578982275476 -91.1613540649818,43.1475759290793 -91.1685715342186,43.0828878927565 -91.1597518205297,43.0811827642084 -91.1522138134926,43.0013164133112 -91.1391217377544,42.9258937074417 -91.0934286878286,42.8714402959622 -91.0820303255369,42.7833648801814 -91.0661686954058,42.7449138543659 -90.9991821130899,42.7070587627347 -90.9194089569959,42.6806774289755 -90.8925456651592,42.6782400547389 -90.7456100695886,42.6570014302673 -90.6947911131375,42.6379287671111 -90.6643806271641,42.5713918079808 -90.6392190290607,42.5557141169534 -90.6257074348461,42.5285622838299 -90.6384560963599,42.5093636839918 -90.4201029261637,42.5083649645861 -89.9236914155722,42.5041158651446 -89.8347389483978,42.5034685663175 -89.4006131996787,42.4975019535639 -89.3595588834203,42.4979178413637 -88.9391870492451,42.4908797705788 -88.7650578832203,42.4909223638021 -88.7066230964608,42.4896714789996 -88.2979892842343,42.4919886619727 -88.1947902657089,42.4896315487889 -87.7973819562241,42.4891528495242 -87.7915093421034,42.6666421877559 -87.7568035981953,42.7775461743457 -87.8198490647725,42.8415630287346 -87.8364385834523,42.9645925117624 -87.8919832366482,43.025774767081 -87.8600693594594,43.0758754737799 -87.8898341046723,43.1972168501054 -87.875332265271,43.3585925444523 -87.8029594309868,43.4587140200272 -87.7860451214411,43.5462973726183 -87.7027299070893,43.673176184158 -87.726121856908,43.8939039013687 -87.6443707723702,44.0978304833909 -87.517321870142,44.1757544438288 -87.5374888264266,44.327851040331 -87.4735284173891,44.533946428449 -87.3730698286243,44.6769179257202 -87.3144651480241,44.7947187667926 -87.3674596241917,44.8115671454801 -87.4337469078088,44.8910966193734 -87.5516726723665,44.823023674588 -87.552787538369,44.851335539726 -87.6144638544339,44.8330474436257 -87.723821711772,44.6892873054325 -87.7642267518627,44.6440484536295 -87.8687827484545,44.6169062804272 -87.9264086419018,44.5391395831433 -87.9662280659456,44.5354962244836 -88.0404176211491,44.5714491701447 -88.0130207863445,44.6222344891289 -87.9757579463198,44.5958140991105 -88.0132878703546,44.6391183587922 -87.9831820526739,44.6772654177868 -87.9857916005318,44.7204744571881 -87.8310199470414,44.8733464383329 -87.839992680567,44.9273231952437 -87.7485548516699,44.9616167936432 clampToGround -87.0345243941477,45.2904056968154 -87.0660643522929,45.2964627675837 -87.1779132156586,45.1549729181694 -87.2309150393896,45.1750634565753 -87.2834846048274,45.0526193202414 -87.3421608618244,45.0152129710161 -87.4054197495813,44.9111998705663 -87.3787368982934,44.8377427071621 -87.3111236315354,44.7987737179537 -87.2056505657533,44.8732394343083 -87.168787947216,44.9333234999383 -87.1786927530738,44.9828064333324 -87.1125569146153,45.0647632237614 -87.0839006493813,45.0532855496328 -87.087678597292,45.0921787982349 -87.0449009447467,45.0955132700304 -87.0798757822438,45.1473069819078 -87.025448092593,45.1499741010013 -87.0451125513507,45.2490190549771 -86.9957342551258,45.2184117241819 -86.9677122639217,45.2402774692093 -86.9862536657799,45.298656991295 -87.0345243941477,45.2904056968154 empty states.AREA: 83343.643 states.STATE_NAME: Idaho states.STATE_FIPS: 16 states.SUB_REGION: Mtn states.STATE_ABBR: ID states.POP2000: 1293953 states.POP2001: 1323472 states.POP00_SQMI: 16 states.DEN_0_100: 99 USStates.ID: 43 USStates.State_Name: Idaho USStates.Date_Entered: July 3 1890 USStates.Year_Entered: 1890 USStates.Year_Settled: 1842 ]]> 1890 #Style_5 clampToGround -114.661865415542,44.3858954726855 clampToGround -117.026295220045,43.6790312226004 -117.018864363596,41.9947941808341 -116.992313337997,41.9947945094663 -115.947544658193,41.9945994628996 -115.024862911148,41.9965064559528 -114.269471632825,41.9959242345073 -114.039072662345,41.9953908974688 -112.989575449033,42.0011467864027 -112.147116504391,41.9990540573659 -112.100514491537,42.0023005848578 -111.494586313343,42.0001709690538 -111.04869741386,41.9962033494069 -111.046780328328,42.503251870505 -111.04921566545,43.0198830902658 -111.047498202203,43.2847346290475 -111.046771181184,43.5155282322774 -111.050405173289,43.9825533508377 -111.051560651262,44.4733232643312 -111.094630553034,44.4861244421476 -111.128918633835,44.5007569482957 -111.134358940584,44.5279024352059 -111.170241896337,44.5451861352417 -111.178764521847,44.5648509025126 -111.219507505818,44.5731699249139 -111.234233165171,44.6025621977815 -111.219797798385,44.6179816965382 -111.223971342305,44.6269081075219 -111.270665480153,44.6422120666433 -111.270207923466,44.6738019972086 -111.295668417103,44.6829380106443 -111.315475367488,44.7051930233212 -111.31922172667,44.7278640397875 -111.349977174405,44.7261775679182 -111.372309536392,44.7450870429474 -111.384959585063,44.7376939086963 -111.395084047622,44.7088695111883 -111.44363207933,44.7131796185895 -111.475425113078,44.7021622259545 -111.480804007084,44.6914159868954 -111.460691885141,44.6700230655225 -111.458265515114,44.6525553200246 -111.470167827235,44.6407103470055 -111.50769070953,44.6376885788042 -111.501747128314,44.6159712293443 -111.514526468783,44.5931969532598 -111.492903869929,44.5511890986189 -111.462827429646,44.5499420909707 -111.459325300921,44.5379218382476 -111.482573106114,44.536143833035 -111.490240946754,44.5286973145766 -111.56723085062,44.5528666934207 -111.605248563607,44.542989843785 -111.684862667357,44.5507519238675 -111.716997718561,44.5337606582907 -111.766918095449,44.5188253853155 -111.792608215621,44.5184627416638 -111.80783730012,44.5039818716956 -111.872502337514,44.5562658469912 -111.940385892152,44.5497266545093 -111.977818321591,44.5296761932588 -112.023613199364,44.5350432018407 -112.027077158683,44.5228438141025 -112.059366916596,44.5286115853182 -112.099896990645,44.5182317486371 -112.124190576071,44.5282529189526 -112.19965792462,44.5314495370004 -112.217763617989,44.538495263148 -112.230398525049,44.5594913548598 -112.256675563109,44.5599718966745 -112.282341327877,44.5417028629559 -112.342507416987,44.5251001904491 -112.34057705949,44.4971802630882 -112.367583641487,44.4492705303202 -112.420753287455,44.4492848652432 -112.458519702915,44.4688346426366 -112.501839547759,44.4629973763857 -112.539324359313,44.4774975037791 -112.653189032213,44.4808022867295 -112.714325884719,44.4969354760903 -112.733712266678,44.4843203521209 -112.779863145228,44.473921967913 -112.796227919073,44.4580108762872 -112.826691426867,44.4210844413589 -112.818709940506,44.3948197608762 -112.817396542611,44.3642025255851 -112.844275309657,44.353639685816 -112.870781128928,44.3699785388203 -112.887307562786,44.392852037925 -112.938281270743,44.407192303823 -112.985249652408,44.4355404997863 -113.012014532,44.4377151798982 -113.006658758598,44.4526157258091 -113.020309135991,44.4817760622967 -113.007713096479,44.5106119571576 -113.037821112649,44.5329591224566 -113.039660671342,44.5562941508867 -113.083036889648,44.5826813811508 -113.054289194175,44.6242889653874 -113.073143949778,44.6755255639002 -113.098955981719,44.6959159515966 -113.101703254015,44.7151730541415 -113.127431313459,44.7373793502759 -113.138273905949,44.7614392171565 -113.24033835154,44.8118408943235 -113.257154262582,44.810486836588 -113.318680101131,44.7802285072048 -113.340631071319,44.7790001716196 -113.350024223891,44.8075686572204 -113.42137886332,44.8336996325871 -113.445573357454,44.8512398138089 -113.496190944735,44.9306703825127 -113.487348245354,44.9395739483575 -113.463413760979,44.9407755008957 -113.448764850883,44.9495226314899 -113.44102942911,44.9981947865069 -113.458853128792,45.0274494937816 -113.455435394093,45.0433489576732 -113.486305515199,45.0583215917022 -113.490158803375,45.0712189425282 -113.520609069994,45.0820638513345 -113.510225662875,45.1078357229334 -113.552272678027,45.1075492325193 -113.574375982832,45.1177112498262 -113.571583860449,45.1345453195545 -113.594099232644,45.149742661863 -113.600928342409,45.1809921888967 -113.64559265708,45.2067902002949 -113.690120087671,45.262281529236 -113.68870893801,45.2777882479016 -113.739080720354,45.3215307727051 -113.741309985249,45.3823864841092 -113.775025938091,45.4101724087205 -113.785662417081,45.4456336800122 -113.769167956071,45.4777077122394 -113.772304324589,45.5070541264418 -113.780933520736,45.5168654883577 -113.833715005823,45.5149081483478 -113.803754486689,45.5837295106944 -113.822485335827,45.6006361604291 -113.852027200864,45.6095623664961 -113.903305686338,45.6134911520045 -113.902199681462,45.6372529821309 -113.923532205814,45.6551247458339 -113.926698671543,45.6712113532369 -113.964144746081,45.6793783899522 -113.971148905291,45.6973761439766 -114.009472169193,45.6863322994531 -114.019878777802,45.6723780179129 -114.010990085379,45.6525110636154 -114.018032071357,45.6407731495898 -114.05651557884,45.6251440063411 -114.082966989764,45.5863787056049 -114.118139289111,45.5711272187937 -114.132047849072,45.550382696738 -114.172667788196,45.5439240709914 -114.194808749935,45.5279173495385 -114.241997909503,45.5352908283129 -114.247880062291,45.5029457876717 -114.26223890106,45.4858597041806 -114.326434503356,45.4574246659907 -114.350246661543,45.4633830586196 -114.371457222895,45.485740801367 -114.419051016147,45.4990079989286 -114.433555120266,45.5276335826489 -114.462708066367,45.547847634842 -114.49659127146,45.5466496233752 -114.527392140633,45.5581929137358 -114.56092431692,45.5487399822622 -114.540957804767,45.5963973386292 -114.564678473634,45.624271464153 -114.501741735013,45.6523937459176 -114.510706655448,45.6740575393162 -114.497560885022,45.6944015040476 -114.534976768211,45.7229965521011 -114.541958001694,45.7459993063995 -114.563542382615,45.7623987542618 -114.517375770656,45.8100678088233 -114.499164076216,45.8426838388298 -114.473803267544,45.8394681128492 -114.443231585826,45.8526214179583 -114.407525017428,45.8464531278581 -114.392838283787,45.870886524333 -114.413530117056,45.9106511998636 -114.429460795441,45.9214773546562 -114.405290578501,45.9539789286456 -114.412447296507,45.971972990138 -114.484455408522,45.9898066653888 -114.474529639485,46.0097653411895 -114.494321056653,46.0234105503775 -114.465756583121,46.0508155788048 -114.456029627256,46.0822298311072 -114.477370071638,46.1073573510943 -114.506568594996,46.116142578097 -114.518944233429,46.1360630037976 -114.509613705042,46.1574178541686 -114.467017880608,46.1552626443821 -114.440879403543,46.1689689930953 -114.439553093386,46.2202541051873 -114.472833625773,46.2437832404928 -114.473795189375,46.2529614473374 -114.431795791851,46.2847113519319 -114.409796078984,46.3929118282104 -114.397016905685,46.3995456489507 -114.384024894777,46.4281789078305 -114.410714938833,46.4873716679663 -114.360467827582,46.5061249643996 -114.350115003954,46.5173898155732 -114.343319528083,46.5878816927989 -114.324712393283,46.6228397420843 -114.334685197666,46.6542270306183 -114.384017731174,46.6615966222723 -114.441535907613,46.6457155873909 -114.48471804306,46.6235748090716 -114.54039089668,46.6378909331304 -114.610825986771,46.6290480359896 -114.644740120825,46.6608240472296 -114.645038012873,46.6709214874172 -114.625926712927,46.6871072963735 -114.673887229565,46.7347216647918 -114.698431226356,46.7337601578313 -114.748105478154,46.695132417127 -114.782919473288,46.7030400738234 -114.777832199076,46.7557169515489 -114.794030033961,46.7665316733836 -114.840791891296,46.7755381340251 -114.866603242816,46.7970455479343 -114.902324956243,46.7994334872257 -114.948408839876,46.8524468129944 -114.940566557467,46.8908879547799 -114.92412521448,46.9071654671376 -114.964730239693,46.9252129542069 -115.001574268432,46.9588093410594 -115.037334581308,46.9630013040754 -115.055638385326,46.9733580952066 -115.081336055121,47.0265244081573 -115.135507084528,47.0635505060209 -115.148683842445,47.0917419724592 -115.172496072325,47.097570775052 -115.193073569516,47.1240264397241 -115.296234653795,47.179550129713 -115.325227834205,47.2451499352386 -115.343661098271,47.25502252875 -115.40820774964,47.2635936928256 -115.42664105155,47.2743741901806 -115.501930155564,47.2816443931147 -115.523064072441,47.2919825693658 -115.555520671095,47.3346132613456 -115.599535907233,47.3700033411226 -115.638782326482,47.3800438733229 -115.666477789603,47.3991675172781 -115.750326632884,47.4224758337817 -115.75010555794,47.4339660678209 -115.732481530032,47.4453037682126 -115.656087137581,47.449179888517 -115.643185737842,47.4577938074827 -115.64014181996,47.4752351982892 -115.692770525831,47.4895405775821 -115.701522643005,47.5208936310403 -115.742829391272,47.5336915052907 -115.69208790895,47.5907209532857 -115.698284137246,47.616080699199 -115.734067407585,47.6398797756934 -115.733665317341,47.6955544944202 -115.775727256626,47.7097326241589 -115.790537518206,47.7448384001761 -115.836742105247,47.7562814790774 -115.849323962062,47.8051824706779 -115.869809516855,47.8274524788244 -115.90392118837,47.841074097063 -115.937842286573,47.8671241146629 -115.998932367501,47.9251408291302 -116.025316086924,47.9649391580749 -116.053492448537,47.9761917715222 -116.055497508913,48.2084837718549 -116.05669220337,48.4986651887118 -116.063531289275,48.9999504626971 -117.032049523854,48.9999313267312 -117.029111695195,48.8380752730768 -117.038868452187,48.0461859667744 -117.037471831606,47.9710924196381 -117.04179475453,47.3614417250081 -117.042391922165,47.2585012691796 -117.040968412195,47.1193191102549 -117.04192619733,46.536601774571 -117.038558547134,46.4279805738524 -117.044470505763,46.3885739799344 -117.064184656311,46.3486979530599 -117.027973590879,46.3354269634861 -117.001642419838,46.3024487520609 -116.972724840347,46.2493093586882 -116.967490477604,46.1975539420731 -116.929426274379,46.165483265634 -116.961637658488,46.0972742225682 -116.987211805214,46.0785088973537 -116.957723390605,46.0656876846632 -116.919132428078,45.995175487463 -116.89819704847,45.9805159416948 -116.856471818728,45.9035973451801 -116.791262487748,45.8458671060854 -116.773707129394,45.8197636132853 -116.703180308495,45.8191692439007 -116.654397936737,45.7806301604239 -116.560631908125,45.7474245686917 -116.52827492994,45.7107280103095 -116.514915090692,45.6644908956717 -116.470418797949,45.6062572703347 -116.478551260109,45.566058496306 -116.554503319145,45.4936471953906 -116.565771964133,45.4598636753961 -116.672265496083,45.335410289815 -116.688813374421,45.2623508428019 -116.736585294563,45.1373070907968 -116.761268252635,45.1063007182859 -116.77809192451,45.0994801033861 -116.787210028569,45.075752513234 -116.807307341613,45.0497552840876 -116.854513190899,45.0169452945603 -116.848097045025,45.0000421568822 -116.855887624852,44.9799657227584 -116.848158998462,44.9717412377244 -116.831396506105,44.9726336704264 -116.847556799088,44.9548499437335 -116.835396183444,44.9201440913313 -116.867076347262,44.8686084474449 -116.897366859846,44.8485551014903 -116.909620757374,44.8289402518746 -116.951494105467,44.7760351265198 -117.039572246368,44.749115712801 -117.066513051783,44.6975569657362 -117.079353923671,44.6893364257274 -117.130503910469,44.5725238664124 -117.143939864097,44.5592869485007 -117.1451606624,44.5346556241885 -117.187391126196,44.5118056022903 -117.203962567437,44.4857855049483 -117.224409907123,44.4729870546087 -117.217221802736,44.4278552410788 -117.236920894466,44.3899826429371 -117.201602017039,44.3394380033709 -117.217455714498,44.3006651372011 -117.213571878683,44.2847196851647 -117.170722952687,44.2533327374994 -117.143278940324,44.2506322436234 -117.112691921322,44.2698052758843 -117.100560675447,44.2670779004604 -117.081386867577,44.2438466037113 -117.052027613364,44.2315559603412 -117.030352023293,44.2493365546444 -116.99270711064,44.2470633967105 -116.976127235356,44.225182362645 -116.981871729265,44.1978422986385 -116.913051097385,44.1773044506484 -116.902254132599,44.1463138321419 -116.946886686949,44.0930258111951 -116.963443200146,44.090298169114 -116.976817765704,44.0738948202899 -116.933593484224,44.0142025695716 -116.967956848099,43.9631956105834 -116.959715844454,43.9285769433414 -116.978141228786,43.9044410423274 -116.978148119756,43.8734692305504 -116.985769945695,43.8593508862889 -117.016220426787,43.8529724419634 -117.010505344258,43.8397697264411 -117.027626548295,43.8315678483138 -117.037117330473,43.800141963624 -117.023794477971,43.7537015926794 -117.026295220045,43.6790312226004 empty states.AREA: 9603.272 states.STATE_NAME: Vermont states.STATE_FIPS: 50 states.SUB_REGION: N Eng states.STATE_ABBR: VT states.POP2000: 608827 states.POP2001: 615035 states.POP00_SQMI: 63 states.DEN_0_100: 94 USStates.ID: 14 USStates.State_Name: Vermont USStates.Date_Entered: Mar. 4 1791 USStates.Year_Entered: 1791 USStates.Year_Settled: 1724 ]]> 1791 #Style_5 clampToGround -72.660656242184,44.072240587832 clampToGround -73.2580598287651,42.7460586400616 -73.0196951738304,42.7403966786337 -72.9229974292253,42.7373644761782 -72.4557700038868,42.7258525290855 -72.4621713056893,42.7468405310802 -72.4793225257782,42.7615879021402 -72.507269529053,42.7687326904009 -72.5130680088012,42.7892594013534 -72.538916970841,42.8077338159119 -72.5534284639708,42.8606431711067 -72.5248100213574,42.9126141761107 -72.5202170578448,42.9516725271887 -72.5042636319545,42.9655846501003 -72.4733411974969,42.9761435837691 -72.4571590376321,42.9996036974292 -72.4617520870041,43.0465044640798 -72.4434642578885,43.0790393128299 -72.4376049020671,43.1162700005073 -72.4523985528513,43.1560221784817 -72.4355986440693,43.2322535514022 -72.4024188454007,43.3073827061473 -72.4102315830492,43.3234041461301 -72.3976280543775,43.3510068532964 -72.4121395531363,43.3771255999362 -72.3962478080997,43.4101565518931 -72.3825156946813,43.4846296935804 -72.3949977682121,43.5175538931662 -72.3734983899537,43.5723746289271 -72.333085194157,43.5973647921877 -72.3040399378543,43.6985301192071 -72.2600555952028,43.7353001230663 -72.2191229213361,43.750692528435 -72.2060918209679,43.7646350589211 -72.1848363730122,43.8016904606597 -72.1700895247441,43.8789176964689 -72.1216496397887,43.9092173247049 -72.1132040793555,43.9391659598857 -72.0917117306645,43.9579911279463 -72.1128078470404,43.9765149671875 -72.109908766997,43.9892291134731 -72.0852043813774,44.008923986175 -72.0769190441222,44.0320405986226 -72.0347283650036,44.0833740182688 -72.0324473746587,44.0960996192238 -72.0495148341974,44.1004520944909 -72.0349198523751,44.1207459288224 -72.0447245537617,44.1564355666157 -72.0592822460625,44.1821766291115 -72.0443903804218,44.2343798441303 -72.0595660047421,44.2614940911529 -72.0354953753776,44.2994343131496 -71.9944335108703,44.3275482023457 -71.9389056579792,44.3257860034123 -71.928361752714,44.3361121851128 -71.8348159803514,44.3441994129001 -71.8211973083551,44.3503600453545 -71.7977291908463,44.384172813001 -71.7665702593918,44.3982488046656 -71.6768843632128,44.4213427403398 -71.6563990024127,44.4401373612429 -71.6477091613881,44.4691741459763 -71.6365547217831,44.4767309013867 -71.6142227691162,44.474507042735 -71.5866189807601,44.4945375694188 -71.5752435447921,44.525805689154 -71.5914413886212,44.5388744007981 -71.5922884113103,44.5512031068487 -71.5367908177937,44.5789312630586 -71.5541026351831,44.5965889130359 -71.5680271516494,44.6374468081647 -71.588749347522,44.6505994869908 -71.6076787297884,44.6778622938609 -71.6311328527305,44.7417107606939 -71.5835012090591,44.7791969958657 -71.575100912366,44.816019797627 -71.5063649605901,44.8996711859758 -71.5169776077169,44.9436961331563 -71.5409270967342,44.976563206227 -71.5053723006288,45.0133517163225 -71.9018687560565,45.0073398737597 -72.547231170846,45.0053701041523 -73.1885457846919,45.0084861445144 -73.3447234868807,45.0061387945904 -73.3507583871195,44.9819729513451 -73.3364146788922,44.9326039308497 -73.3823067594393,44.8479336187606 -73.3690541280726,44.8191179021751 -73.3267863194035,44.799293570954 -73.373158575022,44.724236436747 -73.3581509561494,44.680368564481 -73.3730971364166,44.6612763562517 -73.3701366913554,44.6343490646182 -73.3818251037206,44.619807725515 -73.3712960298213,44.5791669569442 -73.3478119840266,44.5539715457199 -73.3344524939975,44.544328246301 -73.2933197444993,44.4328535783624 -73.2999951630005,44.4055331645407 -73.3297880930291,44.3673904680866 -73.3053256664729,44.2601422576285 -73.3773326255291,44.2012475171296 -73.3820623364064,44.1721076120788 -73.4078648304616,44.1362270392695 -73.408756830709,44.1066103535606 -73.4352152780239,44.0638978024282 -73.436000711279,44.0456791904389 -73.4082513023357,44.0182219013784 -73.4174061301202,43.9881969457528 -73.4053345287369,43.9148075869022 -73.3751207851314,43.8859769501205 -73.3847399017654,43.804507971731 -73.35899716813,43.7784275686932 -73.3566696765928,43.756558340599 -73.3709893845574,43.7142811167277 -73.4229598542953,43.6321147289764 -73.4183198417113,43.582479385998 -73.3881142192301,43.5691436583008 -73.3636855615673,43.6149988679744 -73.303534516911,43.62471481285 -73.2941043006647,43.6196528756937 -73.2817362682322,43.5931872495766 -73.2914024969013,43.5750335705375 -73.2599837938072,43.5593823395157 -73.2383913589494,43.5128328494142 -73.2500714436229,43.310853990742 -73.2760052890117,42.9402941192889 -73.2795831999319,42.83710332748 -73.2961697572315,42.8035493647588 -73.2692753169001,42.747481432998 -73.2580598287651,42.7460586400616 empty states.AREA: 84520.49 states.STATE_NAME: Minnesota states.STATE_FIPS: 27 states.SUB_REGION: W N Cen states.STATE_ABBR: MN states.POP2000: 4919479 states.POP2001: 4992492 states.POP00_SQMI: 58 states.DEN_0_100: 95 USStates.ID: 32 USStates.State_Name: Minnesota USStates.Date_Entered: May 11 1858 USStates.Year_Entered: 1858 USStates.Year_Settled: 1805 ]]> 1858 #Style_5 clampToGround -94.3059456842785,46.315646568988 clampToGround -91.7303661652997,43.4995717605756 -91.6110989749481,43.5006261853338 -91.2235667796587,43.5008086595185 -91.2405580213774,43.5487125887566 -91.2329899044204,43.5988900700786 -91.258389189352,43.6773222933277 -91.2589159418758,43.722395792303 -91.2511048926494,43.7880757984421 -91.2919479787799,43.8471907610578 -91.3733573044066,43.9471911008781 -91.425901818194,43.9856198570706 -91.5284201557391,44.0342152895652 -91.5691620630017,44.0349552968239 -91.6017862700781,44.0408222716716 -91.6522336068049,44.0668957468858 -91.7532193228097,44.137227713274 -91.8487439445729,44.1911872320563 -91.8886943206616,44.2574949606432 -91.9223493716377,44.2883410303644 -91.9227541233788,44.3175199116197 -91.9388683450487,44.339111391384 -91.9723859734527,44.3644872200889 -92.0913333998139,44.4155898138742 -92.2061374354761,44.438394406506 -92.2491003601042,44.4562167874695 -92.2966874837295,44.4921818837451 -92.3204780087543,44.5404910618561 -92.3408725165741,44.552835394321 -92.5092148595268,44.5751591745776 -92.6089736337232,44.6102923158697 -92.6303675936169,44.6426524073846 -92.7371456955245,44.7135944805029 -92.8055846707726,44.7461605361291 -92.7610280602863,44.8353710549111 -92.7642634372038,44.8622340952332 -92.7718708151913,44.8994959546817 -92.7539257938533,44.9150027795129 -92.7497678430831,44.9356555439475 -92.767126457669,45.0010049050117 -92.7629915622041,45.0221192057595 -92.7967618135124,45.0656102708574 -92.745422213769,45.1130040157029 -92.7449348452892,45.1564226976764 -92.7625830453591,45.1866121435376 -92.7554192919425,45.2123764810656 -92.7465933709999,45.2976031328022 -92.7073843995039,45.3182016620431 -92.6848697682278,45.3630764817203 -92.6487510358123,45.3954659291152 -92.6449750709781,45.4394520895191 -92.6548177462347,45.4552217732121 -92.6854210050266,45.470053305923 -92.7281546763928,45.5472423195578 -92.7621749006385,45.5642634927727 -92.8350370161896,45.5634021889124 -92.8768312053709,45.5788365687146 -92.8853973666776,45.6449553564473 -92.8600197303491,45.7105625427853 -92.8336362361192,45.7308902363902 -92.7791069996475,45.7633404333685 -92.7487619268784,45.8373020678585 -92.7340976634746,45.8449807095829 -92.7062407667141,45.8909581511523 -92.6662078822659,45.9157031282064 -92.5526720844383,45.951269177817 -92.523976865602,45.9825831928093 -92.4623457577218,45.9811975360765 -92.424999275654,46.0255041004608 -92.3649627980664,46.0162488119767 -92.3462248301446,46.0225961162004 -92.3273726656403,46.0568782051512 -92.2893704026368,46.0732311286316 -92.2889439643788,46.1566006735494 -92.2886852608925,46.4159840674228 -92.2872715563534,46.6587860038615 -92.3031480663,46.6665757766645 -92.2146242678823,46.6682038862087 -92.088492023079,46.7918972785432 -91.8009688624982,46.927086623484 -91.4686571836076,47.1249355556153 -91.0214756530082,47.4610588390706 -90.5096334545288,47.7099379965097 -89.9996777736217,47.8245648226691 -89.6363736107452,47.9593906700956 -89.6256450556299,47.9925618003996 -89.5306731359836,48.0016559923925 -89.7493099330168,48.0264846412458 -89.9003891418888,47.9925051206716 -89.9870207360302,48.0235567657025 -90.0267005742131,48.0860790014952 -90.1452700207968,48.1127708502089 -90.5568351655885,48.0927504182125 -90.5674552658806,48.1216998440229 -90.7433655871238,48.0884437151537 -90.8644947891665,48.2541980952133 -91.0271484393144,48.1953389259894 -91.2394466747146,48.0812981350086 -91.5715618830894,48.0435715472354 -91.5687753292567,48.1044577516695 -91.7037310650447,48.1148349055472 -91.7119378461929,48.196775109185 -91.7888148497142,48.2061452044721 -91.9795339629396,48.2503981435702 -92.0351836630443,48.3555087869416 -92.1259621061321,48.3667559539545 -92.276130881027,48.3523196851575 -92.3002722840632,48.2983114429892 -92.2769179571142,48.244340869065 -92.3701160227512,48.2207790471373 -92.4733222786803,48.357498964433 -92.456344912887,48.4021690787394 -92.497529244791,48.4400727712848 -92.7066429969655,48.4603699594979 -92.698821186614,48.4947209620297 -92.6263799413386,48.5028239458538 -92.6418199154193,48.5403493271395 -92.7290006435522,48.5402115541602 -92.9469262402041,48.6283554983948 -93.0914423831067,48.6265848629951 -93.3042367633035,48.6371629986434 -93.4577694856222,48.5927099128974 -93.4653394453286,48.5495199345034 -93.5141391057052,48.5342709597703 -93.7811059808909,48.511590153422 -93.8126854033933,48.5254079471682 -93.8439037871322,48.6247369771822 -94.2308273869122,48.6519875523433 -94.2923368906057,48.707711135665 -94.4306344734039,48.7107852810122 -94.5703127368143,48.7136762635817 -94.6944320224137,48.7776155300333 -94.6812499456836,48.8771613109608 -94.8320392613248,49.3308059165427 -95.1518673347569,49.3717301437862 -95.1577498893629,48.9999959148723 -95.2766571152867,48.9999912122438 -96.4069151843986,48.9999820713408 -97.2294364438333,48.9999877567165 -97.2163690958323,48.9318299182446 -97.1757275173075,48.8737577873476 -97.171204411799,48.8359804803914 -97.180421855856,48.8155374993874 -97.1647124057145,48.8103683029549 -97.1739447012341,48.8015144641308 -97.147516003008,48.7811701058176 -97.139245987437,48.7635421115078 -97.1478983886693,48.7556533929197 -97.1325018005064,48.7472187900956 -97.1348061613563,48.7262379306493 -97.1101012816521,48.7085830451964 -97.1167392665872,48.6952431183753 -97.0971692767445,48.6745289135858 -97.1076300563642,48.6299465820435 -97.1274443455249,48.6297943394125 -97.1229581756859,48.6207686596526 -97.1447180746877,48.614024636853 -97.1408119037381,48.586905806154 -97.1581923011142,48.5836407260616 -97.1521268011092,48.5728564381998 -97.1679431505786,48.5622632793582 -97.1466183723849,48.549537028086 -97.1604356938229,48.5450778855401 -97.1555375111,48.5383982428954 -97.13938559124,48.5346480897377 -97.1483276589694,48.5179512756552 -97.1345943266034,48.5173139662426 -97.1436129528287,48.4381095940115 -97.1196331513721,48.4371020760904 -97.1226011810987,48.4161098774117 -97.1516469812462,48.4196122946538 -97.1498235476997,48.4099916056847 -97.1291245153039,48.4078855188887 -97.1588188890655,48.3882060567347 -97.1352054002438,48.3844100102639 -97.1337863598383,48.3724547376235 -97.1503959422882,48.3632158504957 -97.1311236997639,48.3614912628834 -97.1371359526577,48.325991839938 -97.1125917805087,48.3199260418033 -97.1326346023646,48.3109694998778 -97.1147510385913,48.3036182701977 -97.1137211077245,48.2948826063907 -97.1305136858433,48.2930404066961 -97.1126835485646,48.2861469425287 -97.1117146532382,48.2778766724222 -97.1366555811411,48.2644837251407 -97.1237846407281,48.2591734472995 -97.1275540577206,48.2335233812974 -97.1092357553089,48.2280489212221 -97.1397539172305,48.2217551769127 -97.1108994630634,48.2076058326789 -97.1308278329499,48.203741885664 -97.1372749809682,48.1950635087416 -97.1362912579062,48.1752269254696 -97.1374434976966,48.1677691625112 -97.1160657786151,48.1592237600938 -97.1365131689498,48.1483979760568 -97.1209185467255,48.1427747596289 -97.1218728658484,48.1163692500537 -97.0990303774014,48.1009725364666 -97.0927214340796,48.0703439518727 -97.0670713478673,48.048164548667 -97.048053168361,47.9549243203709 -97.0153310859442,47.9178900732528 -97.0205662446582,47.8755694579146 -97.0003404808151,47.8701978669666 -96.9772315863069,47.8280293802142 -96.9838928361532,47.8096615237026 -96.9578304353686,47.7944403501783 -96.9320126704945,47.7635063343999 -96.9236591919833,47.7140944463104 -96.8894255747151,47.6739252332857 -96.8733355306381,47.6152549421415 -96.8522168516036,47.6011515774988 -96.8586644874892,47.5629780191413 -96.8491887237169,47.5445680596933 -96.8606869753116,47.521355890617 -96.8516156149426,47.5006189556105 -96.8666840950429,47.4615376720173 -96.8558270224376,47.4367532150799 -96.8672485372544,47.4130870926383 -96.8500055242737,47.4089361913463 -96.8398275182521,47.3841173886799 -96.8506310274787,47.3609547965118 -96.8384617159414,47.3422432670699 -96.8467474249113,47.3146021392787 -96.8377139015022,47.2938841531782 -96.8496236414402,47.2568437171683 -96.8370653320765,47.240458862523 -96.8264910530645,47.1700638561564 -96.839163919183,47.1518867244712 -96.8191517739067,47.092603946145 -96.8269645555187,47.0788327499143 -96.8226082854226,47.0339323228784 -96.8352964249003,47.010231336615 -96.8245311005541,47.0034368148568 -96.8167722571011,46.9697793204954 -96.7934256963282,46.9696412657999 -96.8018871168051,46.9558437462552 -96.7897103913183,46.9482025284177 -96.7879252958789,46.9321845446505 -96.7630680116614,46.9362617243826 -96.7569111193893,46.9227804067606 -96.7780611563929,46.8673496223485 -96.7682498142506,46.8448617179934 -96.7971969856713,46.8120331273937 -96.7803820602875,46.7623119235704 -96.7815566712509,46.7070442482152 -96.7936950250642,46.6788040267861 -96.7902458463061,46.6297732310646 -96.7843175742934,46.6241120798968 -96.7710417660143,46.599983727298 -96.7512275405111,46.5886193856906 -96.7403159762507,46.4894326362161 -96.7148938591495,46.4687184679509 -96.709682617507,46.4271682580565 -96.688228026703,46.4122182590646 -96.652101616659,46.359433744956 -96.6148614718026,46.3508125122489 -96.6020742477367,46.3363242033822 -96.598183069183,46.2386825873787 -96.586456172813,46.2154130412247 -96.5878902984855,46.1919183501241 -96.5711660882375,46.1771746587376 -96.5519309951806,46.0955288981098 -96.5762152647689,46.0212796299197 -96.561802180143,45.947683082204 -96.5669215299379,45.9341104552974 -96.5879553105857,45.8178543918252 -96.6046107059596,45.8082642484528 -96.6573917688784,45.7389705623089 -96.8327958215581,45.6506868841235 -96.8549898493374,45.6091221067738 -96.8430871871886,45.5840902909474 -96.7692462014101,45.5174788689806 -96.738032334178,45.4581952903635 -96.6931692082715,45.4106381219312 -96.605084508902,45.3965244024214 -96.5325489023943,45.375132161552 -96.4775920650685,45.3285093657539 -96.4576022451657,45.2988502415708 -96.454496608233,45.2751954302209 -96.4560798249867,44.9719948297018 -96.45521726388,44.801347584114 -96.4567178119828,44.6288086832266 -96.4551061874746,44.5383431654349 -96.4573975061948,44.1990613946085 -96.456602339442,43.8487418284865 -96.4604547078315,43.4997184756898 -96.0610395014389,43.498533697461 -95.8669120002192,43.4989439769817 -95.4647753585947,43.4995410217166 -95.3965585901372,43.5003340364673 -94.9204646838526,43.4993712448179 -94.859839276263,43.5000304051637 -94.4552382894281,43.4981020923778 -94.2467873911458,43.4989484742926 -93.9739498040804,43.5002988511065 -93.653699466766,43.5007626988541 -93.5008302025135,43.5004884829356 -93.0543803044398,43.5014574340012 -93.0272108293768,43.5012788635835 -92.5580084257835,43.5002595022348 -92.4531691122113,43.4994619143947 -92.0775325230263,43.499153513998 -91.7303661652997,43.4995717605756 empty states.AREA: 97073.594 states.STATE_NAME: Oregon states.STATE_FIPS: 41 states.SUB_REGION: Pacific states.STATE_ABBR: OR states.POP2000: 3421399 states.POP2001: 3470714 states.POP00_SQMI: 35 states.DEN_0_100: 97 USStates.ID: 33 USStates.State_Name: Oregon USStates.Date_Entered: Feb. 14 1859 USStates.Year_Entered: 1859 USStates.Year_Settled: 1811 ]]> 1859 #Style_5 clampToGround -120.55462738557,43.9315095486322 clampToGround -121.441508911406,41.9943345308753 -120.871908519109,41.9876721779537 -119.993459369715,41.9892049531992 -119.351692186077,41.9888529749781 -119.3109421304,41.989135387281 -118.185316829038,41.9966370981387 -117.018864363596,41.9947941808341 -117.026295220045,43.6790312226004 -117.023794477971,43.7537015926794 -117.037117330473,43.800141963624 -117.027626548295,43.8315678483138 -117.010505344258,43.8397697264411 -117.016220426787,43.8529724419634 -116.985769945695,43.8593508862889 -116.978148119756,43.8734692305504 -116.978141228786,43.9044410423274 -116.959715844454,43.9285769433414 -116.967956848099,43.9631956105834 -116.933593484224,44.0142025695716 -116.976817765704,44.0738948202899 -116.963443200146,44.090298169114 -116.946886686949,44.0930258111951 -116.902254132599,44.1463138321419 -116.913051097385,44.1773044506484 -116.981871729265,44.1978422986385 -116.976127235356,44.225182362645 -116.99270711064,44.2470633967105 -117.030352023293,44.2493365546444 -117.052027613364,44.2315559603412 -117.081386867577,44.2438466037113 -117.100560675447,44.2670779004604 -117.112691921322,44.2698052758843 -117.143278940324,44.2506322436234 -117.170722952687,44.2533327374994 -117.213571878683,44.2847196851647 -117.217455714498,44.3006651372011 -117.201602017039,44.3394380033709 -117.236920894466,44.3899826429371 -117.217221802736,44.4278552410788 -117.224409907123,44.4729870546087 -117.203962567437,44.4857855049483 -117.187391126196,44.5118056022903 -117.1451606624,44.5346556241885 -117.143939864097,44.5592869485007 -117.130503910469,44.5725238664124 -117.079353923671,44.6893364257274 -117.066513051783,44.6975569657362 -117.039572246368,44.749115712801 -116.951494105467,44.7760351265198 -116.909620757374,44.8289402518746 -116.897366859846,44.8485551014903 -116.867076347262,44.8686084474449 -116.835396183444,44.9201440913313 -116.847556799088,44.9548499437335 -116.831396506105,44.9726336704264 -116.848158998462,44.9717412377244 -116.855887624852,44.9799657227584 -116.848097045025,45.0000421568822 -116.854513190899,45.0169452945603 -116.807307341613,45.0497552840876 -116.787210028569,45.075752513234 -116.77809192451,45.0994801033861 -116.761268252635,45.1063007182859 -116.736585294563,45.1373070907968 -116.688813374421,45.2623508428019 -116.672265496083,45.335410289815 -116.565771964133,45.4598636753961 -116.554503319145,45.4936471953906 -116.478551260109,45.566058496306 -116.470418797949,45.6062572703347 -116.514915090692,45.6644908956717 -116.52827492994,45.7107280103095 -116.560631908125,45.7474245686917 -116.654397936737,45.7806301604239 -116.703180308495,45.8191692439007 -116.773707129394,45.8197636132853 -116.791262487748,45.8458671060854 -116.856471818728,45.9035973451801 -116.89819704847,45.9805159416948 -116.919132428078,45.995175487463 -117.481663000967,45.9998347138602 -117.602826163512,46.0002681586202 -117.982677428834,45.9998805158959 -117.992527778446,46.0016389052483 -118.982132819163,45.9990583744824 -119.03222168131,45.9662745814382 -119.140250599579,45.9257086397924 -119.178742642589,45.922351608477 -119.302763509833,45.932662726596 -119.379441421397,45.9176100650698 -119.43886108987,45.9142685232279 -119.512220001301,45.8992005968695 -119.589294282545,45.9133149491969 -119.622116728299,45.8994103389685 -119.678445663881,45.8525390300795 -119.833555881044,45.8416093443199 -119.869735634541,45.8316985251524 -119.994320160406,45.8111403450749 -120.06864786541,45.780202445303 -120.155907860861,45.7612616683351 -120.207445390097,45.7197840646162 -120.283634874867,45.7165828733931 -120.443383762852,45.6892797229393 -120.499156501925,45.6956306780396 -120.570082462284,45.7409179414327 -120.623757205266,45.7436105722949 -120.658403368137,45.73261248754 -120.696993903513,45.7105098195153 -120.861419667766,45.6651862544925 -120.907937250867,45.6354771069445 -120.948572830946,45.650315967172 -120.968478511648,45.6451545411606 -121.03348258367,45.652844415437 -121.073529928592,45.6466107733405 -121.125204665552,45.6070590988379 -121.174316011579,45.6005161602332 -121.192054666449,45.6132419265196 -121.203308118047,45.6572869347703 -121.214271714275,45.6656449638228 -121.276390902266,45.6783399720311 -121.319977744287,45.6966428366174 -121.367814251197,45.6996865954037 -121.422029028765,45.6906031881202 -121.442552169491,45.6949670880414 -121.529054611543,45.7195676794317 -121.706416861345,45.6887931706508 -121.758694096887,45.6897160514309 -121.81104103467,45.7006830895236 -121.888283498804,45.6768563701943 -121.926820689078,45.6420283739518 -121.972659451544,45.635776084156 -122.000011553714,45.6178242910982 -122.082037518263,45.5905040124361 -122.244922293538,45.5481128647605 -122.303150328761,45.5430928345032 -122.356457483648,45.5661712430674 -122.437154197887,45.5647789119432 -122.565429806458,45.5948187685695 -122.651209200341,45.6068304566963 -122.696323093542,45.6310455505125 -122.760541289247,45.6493974102277 -122.772551033013,45.7276855424654 -122.764288518601,45.7605680280893 -122.788009565757,45.8003435918391 -122.784515918404,45.850449518489 -122.784073650236,45.867886451725 -122.80622291556,45.904072429548 -122.807741767287,45.9438901212784 -122.875417724143,46.0271833271028 -122.899757285914,46.0793296870295 -122.974169260528,46.1104834436909 -123.050596211575,46.1557362282158 -123.118554158558,46.1793104942643 -123.176196406189,46.1835864554168 -123.212437026773,46.1700060595961 -123.2487994158,46.1440203375679 -123.304717085176,46.1447375703216 -123.363556869282,46.1441540217556 -123.517029327465,46.2360915816934 -123.670246414445,46.1744984869019 -123.717160979572,46.1698937903229 -123.761414136743,46.2099393736492 -123.820978312563,46.1936496044227 -123.777083420864,46.1444302589353 -123.79409646853,46.1114485870021 -123.977340685096,46.2027060092254 -123.921187205303,46.0123233522242 -123.99650569635,45.941921948877 -123.956273973105,45.8710413769648 -123.976629080128,45.7754823868778 -123.936075916583,45.7028352141538 -123.953415554061,45.5685287159887 -123.859507215328,45.4990826750735 -123.892107877309,45.4740501614952 -123.936674662283,45.5079659141045 -123.980559908989,45.4850845032037 -123.956606852952,45.2929657161069 -124.007572643304,45.0361029238999 -124.075568095063,44.8147385261456 -124.054404868681,44.6621389771171 -124.118319319116,44.269515003332 -124.158325577179,43.8571182351837 -124.226004804165,43.6050048583583 -124.273993988679,43.4591053966655 -124.406076259743,43.3001978559795 -124.386772400864,43.2615889154952 -124.48534658488,42.9554539412089 -124.55961690573,42.8324573979919 -124.401078665635,42.6226992449568 -124.391763163986,42.5530276648599 -124.43781879263,42.4296087430031 -124.41506199748,42.2458945392605 -124.352246780966,42.0986772615023 -124.206444444404,41.9976479131656 -123.819146438568,41.9929487728793 -123.513204633148,41.9978329178357 -123.222102653242,42.0021917751363 -122.284705082491,42.0007645525751 -121.441508911406,41.9943345308753 empty states.AREA: 9259.527 states.STATE_NAME: New Hampshire states.STATE_FIPS: 33 states.SUB_REGION: N Eng states.STATE_ABBR: NH states.POP2000: 1235786 states.POP2001: 1258315 states.POP00_SQMI: 133 states.DEN_0_100: 88 USStates.ID: 9 USStates.State_Name: New Hampshire USStates.Date_Entered: June 21 1788 USStates.Year_Entered: 1788 USStates.Year_Settled: 1623 ]]> 1788 #Style_5 clampToGround -71.577769589032,43.6851910338169 clampToGround -72.2799169173511,42.720467037784 -71.9302165845551,42.7072094199587 -71.9009419142026,42.7053786149513 -71.287194447592,42.6986034465098 -71.2524115796458,42.7260689220942 -71.2404792228753,42.7435552404171 -71.1863474665185,42.7387606265609 -71.1810608433104,42.807317168902 -71.1206044099575,42.8182808692669 -71.065564728038,42.8043197291356 -71.0254261573188,42.8511713651458 -70.9213361332524,42.885149233192 -70.8981116667382,42.8868774762984 -70.849739776244,42.8634293009967 -70.8138807202681,42.8670649720671 -70.7341388586025,43.0587629299348 -70.8104276107829,43.0897406234761 -70.8864941746843,43.0588832353252 -70.9054160761297,43.0840213409417 -70.8746309579401,43.1015270060657 -70.8847483193886,43.1277066080614 -70.8186681583247,43.1218710916248 -70.8305481365302,43.1591741298583 -70.8132073721395,43.235222695474 -70.9010859006765,43.281020042684 -70.9058011398795,43.3020692769929 -70.9696996092209,43.3663799823752 -70.9790994637899,43.3961839179203 -70.9614829099438,43.4381263706902 -70.9707912174759,43.4702114970827 -70.9592784003468,43.5163880057296 -70.9642682587516,43.5319898518146 -70.9496195233573,43.5489536133091 -70.9565244088141,43.5641434705 -70.973874166771,43.5718298935058 -70.9844425613652,43.7911635520181 -71.008596512061,44.2821463668217 -71.0287261250693,44.6685380945196 -71.0875092473499,45.3014692052699 -71.1530893757136,45.2379692350016 -71.2972357379874,45.2934939359499 -71.3863779741829,45.2349303642414 -71.4465600756494,45.2360819406036 -71.4025225843513,45.202803185745 -71.4304098815284,45.1169922971266 -71.5029987637625,45.0598904543936 -71.5053723006288,45.0133517163225 -71.5409270967342,44.976563206227 -71.5169776077169,44.9436961331563 -71.5063649605901,44.8996711859758 -71.575100912366,44.816019797627 -71.5835012090591,44.7791969958657 -71.6311328527305,44.7417107606939 -71.6076787297884,44.6778622938609 -71.588749347522,44.6505994869908 -71.5680271516494,44.6374468081647 -71.5541026351831,44.5965889130359 -71.5367908177937,44.5789312630586 -71.5922884113103,44.5512031068487 -71.5914413886212,44.5388744007981 -71.5752435447921,44.525805689154 -71.5866189807601,44.4945375694188 -71.6142227691162,44.474507042735 -71.6365547217831,44.4767309013867 -71.6477091613881,44.4691741459763 -71.6563990024127,44.4401373612429 -71.6768843632128,44.4213427403398 -71.7665702593918,44.3982488046656 -71.7977291908463,44.384172813001 -71.8211973083551,44.3503600453545 -71.8348159803514,44.3441994129001 -71.928361752714,44.3361121851128 -71.9389056579792,44.3257860034123 -71.9944335108703,44.3275482023457 -72.0354953753776,44.2994343131496 -72.0595660047421,44.2614940911529 -72.0443903804218,44.2343798441303 -72.0592822460625,44.1821766291115 -72.0447245537617,44.1564355666157 -72.0349198523751,44.1207459288224 -72.0495148341974,44.1004520944909 -72.0324473746587,44.0960996192238 -72.0347283650036,44.0833740182688 -72.0769190441222,44.0320405986226 -72.0852043813774,44.008923986175 -72.109908766997,43.9892291134731 -72.1128078470404,43.9765149671875 -72.0917117306645,43.9579911279463 -72.1132040793555,43.9391659598857 -72.1216496397887,43.9092173247049 -72.1700895247441,43.8789176964689 -72.1848363730122,43.8016904606597 -72.2060918209679,43.7646350589211 -72.2191229213361,43.750692528435 -72.2600555952028,43.7353001230663 -72.3040399378543,43.6985301192071 -72.333085194157,43.5973647921877 -72.3734983899537,43.5723746289271 -72.3949977682121,43.5175538931662 -72.3825156946813,43.4846296935804 -72.3962478080997,43.4101565518931 -72.4121395531363,43.3771255999362 -72.3976280543775,43.3510068532964 -72.4102315830492,43.3234041461301 -72.4024188454007,43.3073827061473 -72.4355986440693,43.2322535514022 -72.4523985528513,43.1560221784817 -72.4376049020671,43.1162700005073 -72.4434642578885,43.0790393128299 -72.4617520870041,43.0465044640798 -72.4571590376321,42.9996036974292 -72.4733411974969,42.9761435837691 -72.5042636319545,42.9655846501003 -72.5202170578448,42.9516725271887 -72.5248100213574,42.9126141761107 -72.5534284639708,42.8606431711067 -72.538916970841,42.8077338159119 -72.5130680088012,42.7892594013534 -72.507269529053,42.7687326904009 -72.4793225257782,42.7615879021402 -72.4621713056893,42.7468405310802 -72.4557700038868,42.7258525290855 -72.2799169173511,42.720467037784 empty states.AREA: 56257.965 states.STATE_NAME: Iowa states.STATE_FIPS: 19 states.SUB_REGION: W N Cen states.STATE_ABBR: IA states.POP2000: 2926324 states.POP2001: 2941287 states.POP00_SQMI: 52 states.DEN_0_100: 95 USStates.ID: 29 USStates.State_Name: Iowa USStates.Date_Entered: Dec. 28 1846 USStates.Year_Entered: 1846 USStates.Year_Settled: 1788 ]]> 1846 #Style_5 clampToGround -93.5010908992209,42.0759891389773 clampToGround -91.1201324458079,40.7054430853053 -91.0928951526236,40.7615871092817 -91.0890502695948,40.8337674861069 -91.0493536735639,40.8796233416421 -90.9834189693665,40.9239649616112 -90.9608509342302,40.9505415875963 -90.9547939103174,41.0703973298849 -90.9579298891755,41.1043932523764 -90.9904854657331,41.1444046114074 -91.0184022505193,41.1658577458188 -91.0564663602341,41.176290257977 -91.1016720192436,41.2315519929841 -91.102496456158,41.2678481882471 -91.0734289726202,41.3349253706845 -91.0559355416905,41.4014073054416 -91.0276377762307,41.4235364759013 -91.0008427707096,41.4311127421861 -90.949800649924,41.4212638456605 -90.8442837822745,41.4446525356188 -90.7800426831899,41.44985255988 -90.708354613045,41.4500936593358 -90.6589297375422,41.4623507046517 -90.6008378029169,41.5096188031289 -90.5409754772051,41.5260034668008 -90.4551261544257,41.5275795523085 -90.43509834614,41.5436125873014 -90.4231352637825,41.5673054184025 -90.3484942767923,41.5868824103659 -90.3394762639213,41.6028314888971 -90.3412624105656,41.6491222689255 -90.3261570233379,41.722767950897 -90.3050158621799,41.756497081381 -90.2554387407709,41.7817690413387 -90.1959656651667,41.8061669912383 -90.1546448451232,41.9308021367651 -90.1427967503368,41.9839895278463 -90.1506630602384,42.0334532086115 -90.1682262959709,42.0610667627835 -90.1667767223318,42.1037669165116 -90.1762144636605,42.1205242372018 -90.19170240605,42.1227099310285 -90.231063112785,42.1597414854526 -90.3237299895918,42.1973374145764 -90.3678582678001,42.2102266723886 -90.4073017721273,42.2426617515853 -90.4181124359413,42.2639391318113 -90.4278091232618,42.340644954386 -90.4417250802803,42.3600836299974 -90.4911711742602,42.3887914637005 -90.5637116510656,42.4218436822154 -90.6059553704284,42.4605645940667 -90.6484737738083,42.475647019796 -90.6518991107146,42.4947005718712 -90.6384560963599,42.5093636839918 -90.6257074348461,42.5285622838299 -90.6392190290607,42.5557141169534 -90.6643806271641,42.5713918079808 -90.6947911131375,42.6379287671111 -90.7456100695886,42.6570014302673 -90.8925456651592,42.6782400547389 -90.9194089569959,42.6806774289755 -90.9991821130899,42.7070587627347 -91.0661686954058,42.7449138543659 -91.0820303255369,42.7833648801814 -91.0934286878286,42.8714402959622 -91.1391217377544,42.9258937074417 -91.1522138134926,43.0013164133112 -91.1597518205297,43.0811827642084 -91.1685715342186,43.0828878927565 -91.1613540649818,43.1475759290793 -91.0690522883689,43.2578982275476 -91.0664279003866,43.2806829026437 -91.0784980300101,43.3132978076873 -91.1770487337014,43.3539461618861 -91.1982436244129,43.3705129909022 -91.2109165788835,43.4240510516753 -91.2359034673886,43.4646842675378 -91.2235667796587,43.5008086595185 -91.6110989749481,43.5006261853338 -91.7303661652997,43.4995717605756 -92.0775325230263,43.499153513998 -92.4531691122113,43.4994619143947 -92.5580084257835,43.5002595022348 -93.0272108293768,43.5012788635835 -93.0543803044398,43.5014574340012 -93.5008302025135,43.5004884829356 -93.653699466766,43.5007626988541 -93.9739498040804,43.5002988511065 -94.2467873911458,43.4989484742926 -94.4552382894281,43.4981020923778 -94.859839276263,43.5000304051637 -94.9204646838526,43.4993712448179 -95.3965585901372,43.5003340364673 -95.4647753585947,43.4995410217166 -95.8669120002192,43.4989439769817 -96.0610395014389,43.498533697461 -96.4604547078315,43.4997184756898 -96.598315428219,43.4998490975791 -96.5837958978062,43.4819205535996 -96.5891129505575,43.4355391262275 -96.5577087170132,43.4007272259127 -96.5250535412843,43.3842252910413 -96.5228938744308,43.3569663195107 -96.5405632734769,43.307659139748 -96.5791308298904,43.2900740306766 -96.5707224965755,43.2636122914599 -96.559567772089,43.2532633182258 -96.5669911071477,43.2396337909954 -96.5586057702159,43.2254892270262 -96.4872451689755,43.2179092697119 -96.4731145701049,43.2090821295544 -96.4515050880692,43.1263087732519 -96.460804816306,43.0878728592997 -96.4620939419638,43.075582202376 -96.4795732478976,43.0618840567811 -96.5200103858023,43.051508664474 -96.4990199957611,43.0120501064927 -96.5171478195164,42.9864580906085 -96.5149350519869,42.9523820814978 -96.5442634617344,42.9138663406581 -96.5375110890159,42.8969064560324 -96.5562111991181,42.8466606609486 -96.5731261406702,42.8343473823113 -96.5876454371957,42.8353813945249 -96.6008750611506,42.7995586266164 -96.6329805597535,42.7768356021372 -96.640709192144,42.7486038180978 -96.6265407804251,42.70835472382 -96.56303923913,42.6685130300247 -96.5411650971666,42.6624053661285 -96.5128440201087,42.6297550903686 -96.4884981845359,42.5804806539459 -96.5009420346642,42.5738851852149 -96.4893375011233,42.5640279717967 -96.4802432442006,42.5171303049452 -96.4393947509647,42.4892408377156 -96.3960742327441,42.4674012772387 -96.3978902829953,42.441793101272 -96.4176283075618,42.4147774592562 -96.4117614486778,42.3809179971184 -96.4241751762999,42.3492788847348 -96.3897808818021,42.3287896719748 -96.3687003210519,42.2980237265253 -96.3428815641743,42.2820816955037 -96.3326578610728,42.260307132502 -96.337708442908,42.2295223162304 -96.3635118431292,42.2140424887771 -96.3521657615404,42.168185405895 -96.2851229976765,42.123452670924 -96.2654831160455,42.0488969554024 -96.2387254806183,42.0284381681892 -96.2360928599206,42.0012580980752 -96.2028425096417,41.9966156076483 -96.1852176902909,41.9806854764309 -96.1473284418444,41.9662545016057 -96.1458707848194,41.9249070891742 -96.1599702220889,41.9041513852191 -96.1356235834612,41.8626208316748 -96.0764171181104,41.7914690785526 -96.099320983094,41.7529750937888 -96.0997711804427,41.7315636680423 -96.0855573396554,41.7049872846604 -96.1222023396997,41.6949130712865 -96.1202644618568,41.6840948569989 -96.0993060692054,41.654680377786 -96.1113076339499,41.5990063360194 -96.0808351254356,41.5760003085601 -96.0919362332193,41.5631451632737 -96.0858402888059,41.537522447069 -96.0501720028408,41.5243351452143 -96.0045927729456,41.536663666234 -95.993964871631,41.5281036385833 -95.9966886736327,41.5115177407886 -96.0134510034244,41.492994088652 -96.0068973653038,41.4819545344805 -95.9531857305245,41.4723872072953 -95.935065779099,41.4623813790665 -95.9400563205652,41.3948054356641 -95.9428952016611,41.3400771149559 -95.8891071176484,41.301389068661 -95.8975913590802,41.2868630350679 -95.9112023196568,41.308469075071 -95.9302305720019,41.3020567682491 -95.9109813011904,41.225245096276 -95.922249965015,41.2078539506329 -95.9161002851104,41.1940638351955 -95.8591984370234,41.1805368728058 -95.8598009612329,41.1668650456103 -95.8766852492484,41.1642024105376 -95.8582741314166,41.1091870222413 -95.8788047412041,41.0658712509288 -95.8595394801997,41.0350028595074 -95.8608970428888,41.0026505190073 -95.8376032315859,40.9742580400834 -95.8365411444113,40.9011080428442 -95.8343965593688,40.8703008088672 -95.8464356318246,40.8483322047714 -95.851790435283,40.7926000253044 -95.8766160838233,40.7304362884448 -95.7679992623006,40.6431173260368 -95.7575462791966,40.6209044050126 -95.7674795852398,40.5890479952096 -95.382555095884,40.5843340093787 -95.2174284146974,40.5818925987708 -94.9206158722331,40.5772183148122 -94.639876320884,40.575744856122 -94.4852311155788,40.5742048680883 -94.2383917978808,40.5709661436833 -94.0180588623528,40.5740221097314 -93.78630370096,40.5784484988924 -93.5629104610233,40.580813860252 -93.3702713482939,40.5804911252976 -93.1009385911703,40.5843472673901 -92.7178154575551,40.5896671790964 -92.6464324165599,40.5914619056485 -92.3615131092551,40.5995762450555 -92.1931744167433,40.6000887188336 -91.946370183648,40.6082666211982 -91.7417117785904,40.6097843674944 -91.7169764048207,40.5934354677793 -91.6899597560415,40.5812025311316 -91.6920809036743,40.5516776256622 -91.622536513102,40.5329033163068 -91.6168601613183,40.5048738271577 -91.5860286246556,40.4845194169649 -91.5793830849706,40.4637602088021 -91.533208268896,40.4554411066996 -91.5388465218747,40.441288675833 -91.5296069532136,40.4350861780817 -91.5276917691468,40.4101689010293 -91.5003774954314,40.4051606084008 -91.4903138516326,40.3908061091367 -91.4770381934818,40.3910121558996 -91.4487471564049,40.3719466182637 -91.4189685913151,40.3869192694689 -91.385909198391,40.3924048874231 -91.3729083225561,40.4030325886378 -91.3855511655391,40.4472940413254 -91.3749464781203,40.5036976293474 -91.3822556522285,40.5285383313692 -91.4130259733114,40.5480345602038 -91.4112710901028,40.5730126128812 -91.3757627300253,40.6034802448646 -91.2622111209491,40.6395869370641 -91.2150599786405,40.643859446667 -91.1626444034791,40.6563523669938 -91.1293030749525,40.6821889727746 -91.1201324458079,40.7054430853053 empty states.AREA: 8172.561 states.STATE_NAME: Massachusetts states.STATE_FIPS: 25 states.SUB_REGION: N Eng states.STATE_ABBR: MA states.POP2000: 6349097 states.POP2001: 6406858 states.POP00_SQMI: 777 states.DEN_0_100: 31 USStates.ID: 6 USStates.State_Name: Massachusetts USStates.Date_Entered: Feb. 6 1788 USStates.Year_Entered: 1788 USStates.Year_Settled: 1620 ]]> 1788 #Style_5 clampToGround -71.80258992883,42.2568345174596 clampToGround -71.3193277902705,41.7721958646078 -71.2666285816007,41.7497430522047 -71.2289761591778,41.7076939683673 -71.1988086806704,41.6785003452843 -71.1412126344661,41.6552730544524 -71.1171327154705,41.4930619563068 -71.0011847867691,41.5201241035125 -70.8921284437165,41.6339125917583 -70.8394306808208,41.6266919415081 -70.6197608834614,41.7356361919149 -70.6648878020878,41.5561271066309 -70.6371390963447,41.5398046803128 -70.4329189191646,41.569755900056 -70.3976166138351,41.6125715907981 -69.9544232643854,41.6714951143766 -69.9177797984556,41.7676537960301 -69.9641706778297,41.9040941730569 -70.0504709879468,42.0262987126367 -70.1350904970323,42.0724940905303 -70.2551481598432,42.0601192659912 -70.1004972494064,42.0021938707637 -70.0004479474346,41.8563504070949 -70.0192146776447,41.7815193451751 -70.2052596214815,41.7125732892697 -70.3411271976759,41.7118130863329 -70.2738341329655,41.721663017485 -70.4235117210308,41.7436223850015 -70.5377048060198,41.8057620061259 -70.5403385173567,41.9309515217422 -70.6187030078313,41.9681898123452 -70.686037251662,42.1531665960055 -70.7745954759097,42.2486399423215 -70.8246609058028,42.2605069326982 -70.8926710305429,42.2657668652407 -70.9232041375729,42.2345170134159 -71.0341619490031,42.2856288096679 -70.9606220141229,42.4323935235108 -70.8936039190112,42.4480681190628 -70.8131283794089,42.5464364349616 -70.6334520465019,42.5826421345195 -70.5931992500745,42.6463050999637 -70.7396954300213,42.6635235535106 -70.8138807202681,42.8670649720671 -70.849739776244,42.8634293009967 -70.8981116667382,42.8868774762984 -70.9213361332524,42.885149233192 -71.0254261573188,42.8511713651458 -71.065564728038,42.8043197291356 -71.1206044099575,42.8182808692669 -71.1810608433104,42.807317168902 -71.1863474665185,42.7387606265609 -71.2404792228753,42.7435552404171 -71.2524115796458,42.7260689220942 -71.287194447592,42.6986034465098 -71.9009419142026,42.7053786149513 -71.9302165845551,42.7072094199587 -72.2799169173511,42.720467037784 -72.4557700038868,42.7258525290855 -72.9229974292253,42.7373644761782 -73.0196951738304,42.7403966786337 -73.2580598287651,42.7460586400616 -73.3508242370311,42.5047557597646 -73.4988400027322,42.0774606830635 -73.4842302844536,42.0474280500728 -73.0456324711282,42.0363103821922 -73.0060955098662,42.0360092024926 -72.8164509949267,42.033507731778 -72.817679571843,41.9971850435429 -72.7675750314897,42.0021671817802 -72.7558938179071,42.0338475230699 -72.6095266969696,42.030536850941 -72.6078252730946,42.0228008077559 -72.5819073702202,42.0216068944432 -72.5712258924299,42.0301249737628 -72.5075717905207,42.0307660006011 -72.1363467150764,42.0264020644269 -72.0949717608141,42.0257995069483 -71.8023407165877,42.0179769339478 -71.7978316087619,42.0042748046851 -71.4974303691298,42.0092535031422 -71.3786442228911,42.0137133195162 -71.3824052822434,41.9792630768653 -71.3839531547034,41.8884397544727 -71.333085950288,41.8960311596525 -71.3424931202155,41.8757828914979 -71.3345427095385,41.8579036075383 -71.345483166247,41.8131613833437 -71.33979862314,41.7844255626959 -71.3193277902705,41.7721958646078 clampToGround -70.6043308335024,41.4296630739879 -70.6058421785498,41.4746632583726 -70.667487973469,41.4549372973785 -70.7517695470512,41.3821690323835 -70.7709266288065,41.3249804137282 -70.7825241501317,41.352517678155 -70.8439198398732,41.3485988852067 -70.7697130665689,41.298163904796 -70.7386765301454,41.3341551752324 -70.486141190082,41.3415610204116 -70.5151571489217,41.3986601230011 -70.575857359437,41.4102856936161 -70.5528317397027,41.4173887728697 -70.5676946736082,41.4645667099463 -70.6043308335024,41.4296630739879 clampToGround -70.0317164075691,41.3119311871487 -70.0978720377066,41.2776309471401 -70.2070964296735,41.2940877852649 -70.2132686935442,41.270204935144 -70.1031057052272,41.2382796862047 -69.9684443386787,41.2518167689829 -69.9659800645644,41.2948911801898 -70.0492644184422,41.3919612498596 -70.0344859690813,41.3497184956242 -70.0876332277476,41.2968486962802 -70.0266199082301,41.3372104301762 -70.006508449285,41.3247747653595 -70.0317164075691,41.3119311871487 empty states.AREA: 77330.258 states.STATE_NAME: Nebraska states.STATE_FIPS: 31 states.SUB_REGION: W N Cen states.STATE_ABBR: NE states.POP2000: 1711263 states.POP2001: 1722445 states.POP00_SQMI: 22 states.DEN_0_100: 98 USStates.ID: 37 USStates.State_Name: Nebraska USStates.Date_Entered: Mar. 1 1867 USStates.Year_Entered: 1867 USStates.Year_Settled: 1823 ]]> 1867 #Style_5 clampToGround -99.8078006001403,41.5231582790057 clampToGround -101.407393337781,40.0010037120327 -101.32214863482,40.0018210447365 -100.754855877507,40.000198282162 -100.735049472397,39.9991723116564 -100.191111650703,40.0005855247365 -100.180910663243,40.0004787238625 -99.6278593903364,40.0029878613976 -99.1782010360044,39.9995770488454 -99.0647469947207,39.9983379848291 -98.7206323512841,39.9984613082759 -98.5044791617254,39.9971296815045 -98.264165776521,39.9984347815801 -97.9295887050275,39.9984528583572 -97.8165893210891,39.9997291896237 -97.3619118628176,39.9973802328794 -96.9082875677693,39.996154802955 -96.8014203269346,39.9944759681187 -96.4540383019399,39.9941727522704 -96.2405985632704,39.9945031906408 -96.0012537321721,39.995158941643 -95.7807002239152,39.9934894834034 -95.3297013527267,39.9925950320474 -95.308697209739,39.9994075748966 -95.3450672839917,40.0249741114216 -95.37124432589,40.0287511817595 -95.390531843051,40.0437507559076 -95.4137638785237,40.0481113899446 -95.4037843304849,40.0803791707436 -95.3845425063415,40.0953626542358 -95.3928129218653,40.1154163675868 -95.4224766940803,40.1317436114368 -95.4609526134917,40.173995249929 -95.4666366059785,40.2132555431774 -95.4768220929381,40.2268548930392 -95.547136994341,40.2662157738894 -95.5955324563708,40.3097767867205 -95.6468268275221,40.309109703192 -95.6455528317303,40.3223467703869 -95.6179334555131,40.3314179459398 -95.616201682126,40.3464975474771 -95.6341850229855,40.3588001619374 -95.6368177161418,40.3963904531026 -95.6953617583717,40.4853382791873 -95.6849704910359,40.5122051824756 -95.658060770915,40.5303325450494 -95.6629443739739,40.5587289616856 -95.6756937823346,40.5658356928502 -95.687412945336,40.5611703423814 -95.692066374489,40.5241298458689 -95.7370361745627,40.5323733110738 -95.7634123430762,40.5497071705548 -95.7674795852398,40.5890479952096 -95.7575462791966,40.6209044050126 -95.7679992623006,40.6431173260368 -95.8766160838233,40.7304362884448 -95.851790435283,40.7926000253044 -95.8464356318246,40.8483322047714 -95.8343965593688,40.8703008088672 -95.8365411444113,40.9011080428442 -95.8376032315859,40.9742580400834 -95.8608970428888,41.0026505190073 -95.8595394801997,41.0350028595074 -95.8788047412041,41.0658712509288 -95.8582741314166,41.1091870222413 -95.8766852492484,41.1642024105376 -95.8598009612329,41.1668650456103 -95.8591984370234,41.1805368728058 -95.9161002851104,41.1940638351955 -95.922249965015,41.2078539506329 -95.9109813011904,41.225245096276 -95.9302305720019,41.3020567682491 -95.9112023196568,41.308469075071 -95.8975913590802,41.2868630350679 -95.8891071176484,41.301389068661 -95.9428952016611,41.3400771149559 -95.9400563205652,41.3948054356641 -95.935065779099,41.4623813790665 -95.9531857305245,41.4723872072953 -96.0068973653038,41.4819545344805 -96.0134510034244,41.492994088652 -95.9966886736327,41.5115177407886 -95.993964871631,41.5281036385833 -96.0045927729456,41.536663666234 -96.0501720028408,41.5243351452143 -96.0858402888059,41.537522447069 -96.0919362332193,41.5631451632737 -96.0808351254356,41.5760003085601 -96.1113076339499,41.5990063360194 -96.0993060692054,41.654680377786 -96.1202644618568,41.6840948569989 -96.1222023396997,41.6949130712865 -96.0855573396554,41.7049872846604 -96.0997711804427,41.7315636680423 -96.099320983094,41.7529750937888 -96.0764171181104,41.7914690785526 -96.1356235834612,41.8626208316748 -96.1599702220889,41.9041513852191 -96.1458707848194,41.9249070891742 -96.1473284418444,41.9662545016057 -96.1852176902909,41.9806854764309 -96.2028425096417,41.9966156076483 -96.2360928599206,42.0012580980752 -96.2387254806183,42.0284381681892 -96.2654831160455,42.0488969554024 -96.2851229976765,42.123452670924 -96.3521657615404,42.168185405895 -96.3635118431292,42.2140424887771 -96.337708442908,42.2295223162304 -96.3326578610728,42.260307132502 -96.3428815641743,42.2820816955037 -96.3687003210519,42.2980237265253 -96.3897808818021,42.3287896719748 -96.4241751762999,42.3492788847348 -96.4117614486778,42.3809179971184 -96.4176283075618,42.4147774592562 -96.3978902829953,42.441793101272 -96.3960742327441,42.4674012772387 -96.4393947509647,42.4892408377156 -96.4947015105274,42.4884592175071 -96.5472155727104,42.5204993234568 -96.584753048971,42.5182872197448 -96.6054673040697,42.5072362916062 -96.6292944799537,42.5226936780003 -96.6366723762755,42.5507317592446 -96.714059707901,42.6123020324651 -96.7152728921436,42.6219074766425 -96.694596777315,42.641163786393 -96.699060222031,42.6577158497403 -96.7226587475866,42.6685919557678 -96.7993439788198,42.6700191686323 -96.8104375000235,42.6813412142201 -96.8101401144962,42.704084462612 -96.9082338249473,42.7316989698022 -96.9707734818061,42.7211474962424 -96.9778689966012,42.727308194642 -96.9700029346946,42.752065431992 -96.9795933660979,42.7583137573091 -97.0151396700717,42.7595420464778 -97.1304692456486,42.7739233575094 -97.1614227617155,42.7986194059191 -97.211831726419,42.81257352787 -97.2244435756681,42.8412025319938 -97.2431895649236,42.851826425825 -97.2714575353654,42.8500146366722 -97.3114143393748,42.8617716796293 -97.3893060334922,42.8674331659047 -97.4572637840893,42.8504431026505 -97.4831590291241,42.8571570898554 -97.5061318942665,42.8601364739438 -97.5706541404348,42.8479907365578 -97.6349705007855,42.8612849600302 -97.6857520013046,42.8368370186066 -97.7252498168805,42.8580083761152 -97.7721864466724,42.8461639819758 -97.7970283283528,42.8495971363047 -97.8186429929595,42.8665874779999 -97.8886594186896,42.8558072875283 -97.8899410388902,42.8312716359345 -97.9294772231674,42.7923243687957 -97.9635584005017,42.7736899920002 -97.9951447789843,42.766812278154 -98.0331403830295,42.7691923357945 -98.1218198603008,42.8083601338589 -98.1231169233177,42.8202235933653 -98.1448690461962,42.8357947189847 -98.1678266235025,42.839571032558 -98.3103395747196,42.881794760613 -98.3912046950979,42.9201358627386 -98.4574440540216,42.9371607787996 -98.4976513847196,42.9917787984063 -99.2539717111969,42.9923894733936 -99.5327903284941,42.9923349632849 -100.198142131775,42.9910950186342 -101.231737199277,42.986842959129 -102.086700926634,42.9898870255377 -102.788384569614,42.9953035756879 -103.005875236663,42.9993539301105 -103.501463853421,42.9986188303099 -104.056198856311,43.0030623563908 -104.056219380476,42.6146696865973 -104.053513414154,41.9998153422964 -104.053615199998,41.698218257724 -104.055500519791,41.5642223678205 -104.054012364451,41.3880858190034 -104.05170553525,41.00321132686 -103.572316302435,40.9996484311393 -103.382956653967,41.0003163565243 -102.652271070342,40.9981241668543 -102.621257047371,41.00021481921 -102.047739314394,40.9980708667063 -102.046992332576,40.7431303349332 -102.046031374616,40.6973192828138 -102.047620488242,40.4310777832961 -102.047544994516,40.3426445008284 -102.051535596434,39.9989182728278 -101.407393337781,40.0010037120327 empty states.AREA: 48561.751 states.STATE_NAME: New York states.STATE_FIPS: 36 states.SUB_REGION: Mid Atl states.STATE_ABBR: NY states.POP2000: 18976457 states.POP2001: 19123358 states.POP00_SQMI: 391 states.DEN_0_100: 65 USStates.ID: 11 USStates.State_Name: New York USStates.Date_Entered: July 26 1788 USStates.Year_Entered: 1788 USStates.Year_Settled: 1614 ]]> 1788 #Style_5 clampToGround -75.5122574227018,42.9466608265549 clampToGround -79.7632349654056,42.2673270883975 -79.7616596470726,42.0031057341519 -79.6123674903386,42.0005849142235 -79.0594888967335,42.0011576593905 -78.9185382675857,41.999846787447 -78.3050882311977,41.999420608423 -78.2042620524614,41.9982004349665 -77.745007937534,41.9973331826449 -77.6128475772834,41.9988295851283 -76.968573703143,42.0029809748211 -76.9283953383539,42.0025345979743 -76.5639147893755,42.0030114109064 -76.1450203202792,42.0006545080767 -76.1048345309617,41.9994987458506 -75.4797322564904,41.9963677005791 -75.3828131959338,41.9983566083877 -75.3456570669365,41.9928449489974 -75.3240658004094,41.9612749921534 -75.2836900262962,41.9476038545852 -75.2545154627287,41.8688733616359 -75.1712837916533,41.8678398536526 -75.148280568261,41.8557893317759 -75.1247508265953,41.8491823474776 -75.11777744299,41.8369868194197 -75.0798430188191,41.8141483463494 -75.0968267550632,41.7972073179534 -75.0971549734922,41.7790417898653 -75.0613185051632,41.7702603750835 -75.0569699647963,41.7267080970937 -75.065400870215,41.7148368016377 -75.0513249551697,41.6373147729593 -75.0724517137798,41.6130800694112 -75.0698653499134,41.6044779552895 -75.0250873678455,41.565800906359 -75.0148868316079,41.5395558959306 -74.9717879994631,41.4836026231296 -74.9325644004893,41.484350685956 -74.8985597400598,41.4618942446762 -74.8952792585073,41.4446711797979 -74.8640666499364,41.4471548184687 -74.792799015071,41.4299171588691 -74.7548266211957,41.4301464096857 -74.7400406430903,41.4220594630718 -74.7404375695009,41.4016358612695 -74.7052732398395,41.3750593363948 -74.700062439729,41.3505731173044 -74.371980815951,41.1958499552554 -74.242359517866,41.1376265983194 -74.2130386781269,41.1236116400331 -73.8966975351822,40.9985298010922 -73.8961483545214,40.9608717551544 -73.9089662304774,40.9273144200758 -73.9223945115427,40.8860400786778 -73.9770610560785,40.7974870925618 -74.0062597851257,40.7377308394608 -74.0061834375163,40.7040019887126 -73.9198618248111,40.802804804545 -73.7963459186446,40.8323341007837 -73.7800412528382,40.8866887918692 -73.6531514608995,40.9983924455247 -73.6537237755256,41.0126172825253 -73.7252376566967,41.1003542249946 -73.4781207568954,41.2107548889389 -73.5502596731917,41.2936207043954 -73.5442932536742,41.3652984767995 -73.5303920707175,41.5227455563004 -73.5171474133328,41.6656861632365 -73.4842302844536,42.0474280500728 -73.4988400027322,42.0774606830635 -73.3508242370311,42.5047557597646 -73.2580598287651,42.7460586400616 -73.2692753169001,42.747481432998 -73.2961697572315,42.8035493647588 -73.2795831999319,42.83710332748 -73.2760052890117,42.9402941192889 -73.2500714436229,43.310853990742 -73.2383913589494,43.5128328494142 -73.2599837938072,43.5593823395157 -73.2914024969013,43.5750335705375 -73.2817362682322,43.5931872495766 -73.2941043006647,43.6196528756937 -73.303534516911,43.62471481285 -73.3636855615673,43.6149988679744 -73.3881142192301,43.5691436583008 -73.4183198417113,43.582479385998 -73.4229598542953,43.6321147289764 -73.3709893845574,43.7142811167277 -73.3566696765928,43.756558340599 -73.35899716813,43.7784275686932 -73.3847399017654,43.804507971731 -73.3751207851314,43.8859769501205 -73.4053345287369,43.9148075869022 -73.4174061301202,43.9881969457528 -73.4082513023357,44.0182219013784 -73.436000711279,44.0456791904389 -73.4352152780239,44.0638978024282 -73.408756830709,44.1066103535606 -73.4078648304616,44.1362270392695 -73.3820623364064,44.1721076120788 -73.3773326255291,44.2012475171296 -73.3053256664729,44.2601422576285 -73.3297880930291,44.3673904680866 -73.2999951630005,44.4055331645407 -73.2933197444993,44.4328535783624 -73.3344524939975,44.544328246301 -73.3478119840266,44.5539715457199 -73.3712960298213,44.5791669569442 -73.3818251037206,44.619807725515 -73.3701366913554,44.6343490646182 -73.3730971364166,44.6612763562517 -73.3581509561494,44.680368564481 -73.373158575022,44.724236436747 -73.3267863194035,44.799293570954 -73.3690541280726,44.8191179021751 -73.3823067594393,44.8479336187606 -73.3364146788922,44.9326039308497 -73.3507583871195,44.9819729513451 -73.3447234868807,45.0061387945904 -74.0215389337819,44.9908473700023 -74.7361076285261,44.9929162059365 -74.9684696172772,44.9486251336596 -75.328862374301,44.8106292000334 -75.7586575028137,44.5175335377769 -75.8480298249662,44.3902626942885 -76.3628809771691,44.098354795451 -76.2968829355811,44.0420171276421 -76.2015425385076,44.065598108465 -76.1345223232098,44.0132289276425 -76.1290659340576,43.9322080498527 -76.1937184572916,43.9124903482975 -76.2399917764507,43.8351272651759 -76.2056663591305,43.682700033073 -76.1845704121246,43.6331973667822 -76.2227647111352,43.5541537826913 -76.45465571373,43.5007209976012 -76.6196279680242,43.4141527458186 -76.7184716226022,43.3234424252336 -76.7368294931217,43.3427331717123 -76.9145275090108,43.27859600965 -77.3773158874043,43.2757129012853 -77.5757115164624,43.2415476718162 -77.7450074302451,43.3351700802958 -77.9920093179894,43.3655716261253 -78.464653717302,43.3719935588723 -79.0622389926126,43.2682161630262 -79.0393253199349,43.1447391584938 -79.0611147555518,43.0906050224616 -78.9255963639699,43.0666266953168 -78.8827932399727,43.0223576321954 -78.9365513759707,42.974231439434 -78.8591998233946,42.792745144536 -79.043751960537,42.6992467780984 -79.1422333021515,42.5746167483925 -79.3548838534991,42.4934618207762 -79.4440203700621,42.4193614595174 -79.7632349654056,42.2673270883975 clampToGround -73.7522089773056,40.5945872168727 -73.4225260722185,40.6613251474997 -72.5211641762305,40.8150415787904 -71.9187022869602,41.0305740631358 -71.869986721423,41.0745076818864 -71.9237002133869,41.084871803273 -72.0770111448791,41.0005742896832 -72.2033505249753,41.0353739275596 -72.2930824277747,41.0240174407749 -72.4761091088628,40.9201483179884 -72.6048154160739,40.9053005940406 -72.5509712260717,40.9661799196018 -72.4163456562061,41.0260401128234 -72.3542793156581,41.1102027831546 -72.2811492371991,41.1425353132104 -72.3170314447005,41.1493333683696 -72.6315724125195,40.9812851867213 -73.0212696494712,40.9684330814817 -73.1409796858424,40.9513960080037 -73.2145230963623,40.9010417299256 -73.4306478224206,40.9225566298747 -73.4780896515487,40.879744720266 -73.5982719298698,40.9031443913556 -73.7494771719183,40.8449987554869 -73.7539177904555,40.7888512181378 -73.8990177453018,40.7971172294422 -73.9556067773919,40.7393826803867 -74.0277216950731,40.6393365084359 -74.004039335902,40.5812590385622 -73.8798141265414,40.5902691191329 -73.9157343366199,40.63113138266 -73.8460607625491,40.6526001201263 -73.7649351380376,40.6369334656098 -73.7613950097786,40.6182379482267 -73.9275906880242,40.5576503077215 -73.7522089773056,40.5945872168727 clampToGround -73.2930589706138,40.6263822132856 -73.2490511730599,40.6254244342199 -73.0309339457172,40.6713410120228 -72.9563156920831,40.7000387409497 -72.7640253118572,40.7583922849051 -72.7573264947801,40.7679595170533 -72.7821991206641,40.7641333101321 -72.8769060551186,40.7373463357701 -73.051022823972,40.6751671223298 -73.240437212291,40.6330765843302 -73.2911438669417,40.6330768861726 -73.2930589706138,40.6263822132856 clampToGround -74.2369396492444,40.5060032905632 -74.1936418338484,40.510561942058 -74.1229997277863,40.5447412254891 -74.0591936862929,40.6017089956228 -74.0728660595317,40.6495633368533 -74.1662980145054,40.6244971306027 -74.2369398627783,40.5379049676837 -74.2369396492444,40.5060032905632 empty states.AREA: 45360.118 states.STATE_NAME: Pennsylvania states.STATE_FIPS: 42 states.SUB_REGION: Mid Atl states.STATE_ABBR: PA states.POP2000: 12281054 states.POP2001: 12295580 states.POP00_SQMI: 271 states.DEN_0_100: 76 USStates.ID: 2 USStates.State_Name: Pennsylvania USStates.Date_Entered: Dec. 12 1787 USStates.Year_Entered: 1787 USStates.Year_Settled: 1682 ]]> 1787 #Style_5 clampToGround -77.8028454187969,40.8748890585198 clampToGround -77.4757933985606,39.7196232012639 -77.4644330206582,39.7200734721353 -77.2210508745187,39.7206793349451 -76.9968122213509,39.7208916577077 -76.7904916037971,39.7212561436081 -76.5698344165776,39.7202653698966 -76.2331218646413,39.7218535861041 -76.1392231665553,39.7222292808326 -75.7910945763195,39.7238660373362 -75.7749271959808,39.7245527846646 -75.7455920038355,39.7749293983367 -75.6947708516454,39.8204574523468 -75.6439943147472,39.8383065472094 -75.5834432496435,39.8401190417149 -75.4699861133481,39.8265474993808 -75.420467947865,39.7989830990632 -75.3459322944925,39.8485165819253 -75.2537404363575,39.8455377977782 -75.2469955646773,39.8504053640948 -75.1856054779903,39.8774058180612 -75.1429012150463,39.8816020366923 -75.1358054767499,39.896887437334 -75.1471586589936,39.9347404217525 -75.1398645870707,39.9559194804779 -75.1109630715591,39.9766903310886 -75.0845869855288,39.9757328153928 -75.068045752986,39.9853915213067 -75.0456754051916,40.0076347106729 -74.9834853663626,40.0340738445933 -74.9562015034126,40.0580144791932 -74.8719241363401,40.0780565429363 -74.8290224597364,40.1161609854809 -74.7462941485611,40.1243586916003 -74.7254804661849,40.1493066691812 -74.7388247265733,40.1777256441007 -74.8427630831946,40.2484527598366 -74.8806595730097,40.2995916131031 -74.9211500156386,40.3140337315445 -74.9325029621047,40.3337744130392 -74.9501884639841,40.3454738484253 -74.972841026042,40.4044479567097 -75.0004755238564,40.4086211095812 -75.0212661253397,40.4013236035019 -75.0574533454579,40.4201714565405 -75.070118623953,40.4562539259114 -75.0636796381505,40.5210034591816 -75.0797859423332,40.5453559585684 -75.1245260580076,40.5647988294484 -75.1822820039866,40.5567991566105 -75.1975718310352,40.570684304811 -75.1935130035322,40.5837685125831 -75.200387538731,40.6147432578734 -75.1979386117749,40.6342055156311 -75.2089177365681,40.6507380422203 -75.1840607041906,40.6697922959704 -75.20535502856,40.6860615374668 -75.1877539048405,40.7238570177578 -75.1936441590094,40.7480035802995 -75.1703132780782,40.7748092438347 -75.1303189278511,40.7727077092163 -75.1005408698709,40.7916591517333 -75.0892112792862,40.8213906687984 -75.0995419880564,40.8392851002474 -75.0546190233306,40.8556733594649 -75.0564884580085,40.8720458535526 -75.0736857645488,40.884626384264 -75.0797362757265,40.9033486382513 -75.1355249350063,40.9629365183948 -75.1393018121957,40.9775274861343 -75.1166191635571,41.0002479024639 -75.0699790173252,41.0107160473555 -75.0352563466979,41.0282029114312 -75.0011515718978,41.0624855771134 -74.9662915599138,41.0826765927628 -74.9888829656717,41.0817609886453 -74.9845949956578,41.0993808071368 -74.9499944822667,41.1118548355739 -74.9147683062805,41.1411056945383 -74.8628866488672,41.2067713675358 -74.8664114931874,41.2268173199683 -74.8251959144138,41.2827060427999 -74.7941432935133,41.2952145361236 -74.7916634911863,41.3119646486324 -74.700062439729,41.3505731173044 -74.7052732398395,41.3750593363948 -74.7404375695009,41.4016358612695 -74.7400406430903,41.4220594630718 -74.7548266211957,41.4301464096857 -74.792799015071,41.4299171588691 -74.8640666499364,41.4471548184687 -74.8952792585073,41.4446711797979 -74.8985597400598,41.4618942446762 -74.9325644004893,41.484350685956 -74.9717879994631,41.4836026231296 -75.0148868316079,41.5395558959306 -75.0250873678455,41.565800906359 -75.0698653499134,41.6044779552895 -75.0724517137798,41.6130800694112 -75.0513249551697,41.6373147729593 -75.065400870215,41.7148368016377 -75.0569699647963,41.7267080970937 -75.0613185051632,41.7702603750835 -75.0971549734922,41.7790417898653 -75.0968267550632,41.7972073179534 -75.0798430188191,41.8141483463494 -75.11777744299,41.8369868194197 -75.1247508265953,41.8491823474776 -75.148280568261,41.8557893317759 -75.1712837916533,41.8678398536526 -75.2545154627287,41.8688733616359 -75.2836900262962,41.9476038545852 -75.3240658004094,41.9612749921534 -75.3456570669365,41.9928449489974 -75.3828131959338,41.9983566083877 -75.4797322564904,41.9963677005791 -76.1048345309617,41.9994987458506 -76.1450203202792,42.0006545080767 -76.5639147893755,42.0030114109064 -76.9283953383539,42.0025345979743 -76.968573703143,42.0029809748211 -77.6128475772834,41.9988295851283 -77.745007937534,41.9973331826449 -78.2042620524614,41.9982004349665 -78.3050882311977,41.999420608423 -78.9185382675857,41.999846787447 -79.0594888967335,42.0011576593905 -79.6123674903386,42.0005849142235 -79.7616596470726,42.0031057341519 -79.7632349654056,42.2673270883975 -80.5205925694563,41.9868721098151 -80.5226439573086,41.8507747576586 -80.5239255625846,41.4951021493305 -80.5199962349619,41.4892885705201 -80.5229326934644,41.1296278146841 -80.5209244301116,40.8972705158399 -80.520306111211,40.8541688223624 -80.5219995284775,40.6372031779131 -80.5243576830379,40.4787848369009 -80.5235645344163,40.403033850236 -80.5260451901894,40.1625211281631 -80.5249621853498,40.0228253262192 -80.5246506803543,39.9584195634812 -80.5242694740401,39.7212089909504 -80.4290823326108,39.7198426041628 -79.9182684921867,39.7216669674993 -79.7651323185042,39.7218070815944 -79.480971113096,39.720274058077 -79.3966100929568,39.7193136035322 -78.9301730523848,39.7223369261357 -78.817758346634,39.7231158128337 -78.384783030143,39.7237485696748 -78.3345500729087,39.7240962157241 -78.0959483136605,39.7254610687401 -77.4757933985606,39.7196232012639 empty states.AREA: 4976.566 states.STATE_NAME: Connecticut states.STATE_FIPS: 09 states.SUB_REGION: N Eng states.STATE_ABBR: CT states.POP2000: 3405565 states.POP2001: 3434012 states.POP00_SQMI: 684 states.DEN_0_100: 39 USStates.ID: 5 USStates.State_Name: Connecticut USStates.Date_Entered: Jan. 9 1788 USStates.Year_Entered: 1788 USStates.Year_Settled: 1634 ]]> 1788 #Style_5 clampToGround -72.7247699791,41.6180326565837 clampToGround -73.5303920707175,41.5227455563004 -73.5442932536742,41.3652984767995 -73.5502596731917,41.2936207043954 -73.4781207568954,41.2107548889389 -73.7252376566967,41.1003542249946 -73.6537237755256,41.0126172825253 -73.6531514608995,40.9983924455247 -73.1044185740856,41.1610394427248 -72.906734323612,41.2700631991856 -72.5272448622889,41.2637025875984 -72.378152966058,41.2781022275496 -72.3784123498461,41.3583482711136 -72.3263548978381,41.2896412329135 -72.2814159025209,41.2811454708603 -71.866678442895,41.3227696452715 -71.8477722040922,41.3253484832964 -71.8368696812943,41.3419614666217 -71.8459956537022,41.4038545416488 -71.8027434308056,41.4158290540058 -71.7901942031214,41.6013068793249 -71.792605218292,41.6417579304637 -71.7882488621949,41.7216033953237 -71.7978316087619,42.0042748046851 -71.8023407165877,42.0179769339478 -72.0949717608141,42.0257995069483 -72.1363467150764,42.0264020644269 -72.5075717905207,42.0307660006011 -72.5712258924299,42.0301249737628 -72.5819073702202,42.0216068944432 -72.6078252730946,42.0228008077559 -72.6095266969696,42.030536850941 -72.7558938179071,42.0338475230699 -72.7675750314897,42.0021671817802 -72.817679571843,41.9971850435429 -72.8164509949267,42.033507731778 -73.0060955098662,42.0360092024926 -73.0456324711282,42.0363103821922 -73.4842302844536,42.0474280500728 -73.5171474133328,41.6656861632365 -73.5303920707175,41.5227455563004 empty states.AREA: 1044.881 states.STATE_NAME: Rhode Island states.STATE_FIPS: 44 states.SUB_REGION: N Eng states.STATE_ABBR: RI states.POP2000: 1048319 states.POP2001: 1060126 states.POP00_SQMI: 1003 states.DEN_0_100: 11 USStates.ID: 13 USStates.State_Name: Rhode Island USStates.Date_Entered: May 29 1790 USStates.Year_Entered: 1790 USStates.Year_Settled: 1636 ]]> 1790 #Style_5 clampToGround -71.5610444257682,41.6817724921721 clampToGround -71.7901942031214,41.6013068793249 -71.8027434308056,41.4158290540058 -71.8459956537022,41.4038545416488 -71.8368696812943,41.3419614666217 -71.8477722040922,41.3253484832964 -71.866678442895,41.3227696452715 -71.7222643227053,41.3272643121839 -71.4898880400565,41.3920853196251 -71.427318519639,41.4866893796323 -71.4192468515383,41.652212232924 -71.3690125475302,41.703291101903 -71.3935805976545,41.7611558353253 -71.3673874451962,41.7413502009833 -71.2840016520154,41.6795489704362 -71.2289761591778,41.7076939683673 -71.2666285816007,41.7497430522047 -71.3193277902705,41.7721958646078 -71.33979862314,41.7844255626959 -71.345483166247,41.8131613833437 -71.3345427095385,41.8579036075383 -71.3424931202155,41.8757828914979 -71.333085950288,41.8960311596525 -71.3839531547034,41.8884397544727 -71.3824052822434,41.9792630768653 -71.3786442228911,42.0137133195162 -71.4974303691298,42.0092535031422 -71.7978316087619,42.0042748046851 -71.7882488621949,41.7216033953237 -71.792605218292,41.6417579304637 -71.7901942031214,41.6013068793249 clampToGround -71.1988086806704,41.6785003452843 -71.1999371652607,41.4633184834306 -71.1171327154705,41.4930619563068 -71.1412126344661,41.6552730544524 -71.1988086806704,41.6785003452843 clampToGround -71.2691694549115,41.6212683171833 -71.3495250332552,41.4458577414548 -71.2880071528611,41.4836193369166 -71.2386732340455,41.4748497781272 -71.219446800556,41.635642312712 -71.2691694549115,41.6212683171833 empty states.AREA: 7507.502 states.STATE_NAME: New Jersey states.STATE_FIPS: 34 states.SUB_REGION: Mid Atl states.STATE_ABBR: NJ states.POP2000: 8414350 states.POP2001: 8504437 states.POP00_SQMI: 1121 states.DEN_0_100: 0 USStates.ID: 3 USStates.State_Name: New Jersey USStates.Date_Entered: Dec. 18 1787 USStates.Year_Entered: 1787 USStates.Year_Settled: 1660 ]]> 1787 #Style_5 clampToGround -74.6766277762304,40.1983130309155 clampToGround -75.4892806606894,39.7148582186458 -75.5702341870436,39.6177349634268 -75.516688883565,39.5665684164947 -75.5527630401674,39.4905143065581 -75.4156722746602,39.3749718418896 -75.119958112203,39.1846917807584 -75.0144070769606,39.1983638371173 -74.9166543417335,39.1706385416843 -74.8902020440427,39.1138602238713 -74.9681254179213,38.9717387716416 -74.8763009571504,38.956682397615 -74.8792536134529,38.9898436138584 -74.8022918296707,39.026373568453 -74.624587018384,39.2508285381619 -74.6225269989005,39.281632454135 -74.6582341619692,39.2872514059591 -74.4475008431966,39.3810753138002 -74.4604179591324,39.4267565970433 -74.401119610676,39.5026276432354 -74.4123886264147,39.5426212120384 -74.3288507438233,39.5236277328274 -74.3233420491384,39.572086212049 -74.2376755899413,39.6240467628644 -74.1714269184866,39.7182746749744 -74.1592285187117,39.8786054163902 -74.0773330835351,40.042272933577 -74.122180536689,40.0515614321764 -74.0497900468498,40.0568562355852 -74.0342945636626,40.091367053998 -74.0837730430801,40.088181749894 -74.0914259126674,40.1160856009488 -74.0392310981979,40.1018419664211 -73.978440569473,40.3236160007761 -74.1218854792839,40.4514585866034 -74.2245034553239,40.4435848021689 -74.2689154355374,40.4637486117681 -74.2789103473592,40.5143036462751 -74.2082529604698,40.5911877065288 -74.1468580427043,40.6754795974611 -74.1155310062388,40.7056266447954 -74.1290580537768,40.6470721875068 -74.0061834375163,40.7040019887126 -74.0062597851257,40.7377308394608 -73.9770610560785,40.7974870925618 -73.9223945115427,40.8860400786778 -73.9089662304774,40.9273144200758 -73.8961483545214,40.9608717551544 -73.8966975351822,40.9985298010922 -74.2130386781269,41.1236116400331 -74.242359517866,41.1376265983194 -74.371980815951,41.1958499552554 -74.700062439729,41.3505731173044 -74.7916634911863,41.3119646486324 -74.7941432935133,41.2952145361236 -74.8251959144138,41.2827060427999 -74.8664114931874,41.2268173199683 -74.8628866488672,41.2067713675358 -74.9147683062805,41.1411056945383 -74.9499944822667,41.1118548355739 -74.9845949956578,41.0993808071368 -74.9888829656717,41.0817609886453 -74.9662915599138,41.0826765927628 -75.0011515718978,41.0624855771134 -75.0352563466979,41.0282029114312 -75.0699790173252,41.0107160473555 -75.1166191635571,41.0002479024639 -75.1393018121957,40.9775274861343 -75.1355249350063,40.9629365183948 -75.0797362757265,40.9033486382513 -75.0736857645488,40.884626384264 -75.0564884580085,40.8720458535526 -75.0546190233306,40.8556733594649 -75.0995419880564,40.8392851002474 -75.0892112792862,40.8213906687984 -75.1005408698709,40.7916591517333 -75.1303189278511,40.7727077092163 -75.1703132780782,40.7748092438347 -75.1936441590094,40.7480035802995 -75.1877539048405,40.7238570177578 -75.20535502856,40.6860615374668 -75.1840607041906,40.6697922959704 -75.2089177365681,40.6507380422203 -75.1979386117749,40.6342055156311 -75.200387538731,40.6147432578734 -75.1935130035322,40.5837685125831 -75.1975718310352,40.570684304811 -75.1822820039866,40.5567991566105 -75.1245260580076,40.5647988294484 -75.0797859423332,40.5453559585684 -75.0636796381505,40.5210034591816 -75.070118623953,40.4562539259114 -75.0574533454579,40.4201714565405 -75.0212661253397,40.4013236035019 -75.0004755238564,40.4086211095812 -74.972841026042,40.4044479567097 -74.9501884639841,40.3454738484253 -74.9325029621047,40.3337744130392 -74.9211500156386,40.3140337315445 -74.8806595730097,40.2995916131031 -74.8427630831946,40.2484527598366 -74.7388247265733,40.1777256441007 -74.7254804661849,40.1493066691812 -74.7462941485611,40.1243586916003 -74.8290224597364,40.1161609854809 -74.8719241363401,40.0780565429363 -74.9562015034126,40.0580144791932 -74.9834853663626,40.0340738445933 -75.0456754051916,40.0076347106729 -75.068045752986,39.9853915213067 -75.0845869855288,39.9757328153928 -75.1109630715591,39.9766903310886 -75.1398645870707,39.9559194804779 -75.1471586589936,39.9347404217525 -75.1358054767499,39.896887437334 -75.1429012150463,39.8816020366923 -75.1856054779903,39.8774058180612 -75.2469955646773,39.8504053640948 -75.2537404363575,39.8455377977782 -75.3459322944925,39.8485165819253 -75.420467947865,39.7989830990632 -75.4117545704202,39.7897707547806 -75.4276473042606,39.7782429030536 -75.4603941188554,39.7633620274566 -75.4747684572146,39.7418320932776 -75.4759742683691,39.7200843842213 -75.4892806606894,39.7148582186458 empty states.AREA: 36400.304 states.STATE_NAME: Indiana states.STATE_FIPS: 18 states.SUB_REGION: E N Cen states.STATE_ABBR: IN states.POP2000: 6080485 states.POP2001: 6138368 states.POP00_SQMI: 167 states.DEN_0_100: 85 USStates.ID: 19 USStates.State_Name: Indiana USStates.Date_Entered: Dec. 11 1816 USStates.Year_Entered: 1816 USStates.Year_Settled: 1733 ]]> 1816 #Style_5 clampToGround -86.2761573203861,39.9127401204667 clampToGround -86.3416058899801,38.1772881494571 -86.2976743325246,38.1503040958879 -86.2914400750094,38.0784895277861 -86.277698957837,38.058172975235 -86.2521549356747,38.0407215021446 -86.1906216841403,38.0177584307759 -86.104986573394,38.0113361451773 -86.0527156892641,37.9667844806183 -86.0316198158307,37.9929506600364 -86.0066633201115,38.0017670737263 -85.9585820940509,38.0118406095775 -85.9308719355951,38.034048876233 -85.9147511151841,38.0648748591422 -85.9120745452086,38.1800014838715 -85.8523357521911,38.238561041348 -85.8399076966583,38.2762914813239 -85.8065513133062,38.2861792248908 -85.7862108031498,38.2823915940124 -85.7469260083932,38.2703150949771 -85.681388997794,38.3009537036963 -85.654228238662,38.3377528692459 -85.6435929748204,38.3836879378367 -85.6126402894388,38.446670375764 -85.5072000237874,38.471419551854 -85.4663821281019,38.5181753628103 -85.432369780701,38.5370160928693 -85.4174617192488,38.5614756142213 -85.4244045991195,38.5848401599215 -85.4536792483365,38.6946745390103 -85.4466906213012,38.7248406803013 -85.4181866162644,38.7384171670398 -85.3350091958009,38.7370064025018 -85.2713939330139,38.7443767592676 -85.2051618437764,38.6958170413595 -85.1609332135021,38.6951765052421 -85.1196570780868,38.7141393628001 -85.0684546610616,38.750424603378 -85.0250730726016,38.764291113864 -84.9756111877111,38.7806410183922 -84.8187802303235,38.7934099982582 -84.8244261910504,38.8344629497042 -84.7874461259782,38.8666434823042 -84.7886668678083,38.8843852980114 -84.8032240050715,38.8971908595052 -84.8597435114244,38.9020425223312 -84.8752543860379,38.9094313024092 -84.8758801493223,38.9276041700824 -84.846315847352,38.9546310780086 -84.8344443965779,38.98277550246 -84.8442256667783,39.0058310025456 -84.8762931465368,39.0328954474865 -84.8899961256038,39.0506485732317 -84.8867079668198,39.0650450015205 -84.8278613547987,39.1036877674048 -84.81148058301,39.1025855115064 -84.8120705333745,39.3030292262759 -84.8120249021854,39.3123331649208 -84.8111048340875,39.5131632038426 -84.8110367793544,39.5640506850582 -84.808696532672,39.7332992702085 -84.8061497587903,39.9171665438967 -84.8035641264148,40.013990635484 -84.7953877882857,40.3195005333353 -84.7945562939653,40.3530507566997 -84.7932521538178,40.5887382366961 -84.7930613218788,40.7288603729197 -84.7910232725421,40.9377084936207 -84.7905270959946,40.9883412320642 -84.7915862671235,41.2531325315222 -84.7909755666301,41.2838180261002 -84.7918972237936,41.4278994604409 -84.7913699039565,41.5304919381552 -84.7903774729513,41.6974947329852 -84.7884777858482,41.7609594561938 -84.8260080463026,41.7618751066694 -85.1931406144237,41.7628675471372 -85.2972096358478,41.7635810035748 -85.6594588291887,41.7626275140628 -85.7992269722862,41.7635349679273 -86.0683022053847,41.7646284325784 -86.2345652919433,41.7648642479853 -86.5251809764443,41.7655403363901 -86.8348296412819,41.7655047552312 -86.9424598927725,41.7165034838214 -87.2338545044322,41.6261887207928 -87.3947466651328,41.6341912134461 -87.4419740387024,41.6581129712715 -87.4193069619186,41.6763663513711 -87.4637108917102,41.671624547774 -87.5299063108434,41.7236260875045 -87.5326861745456,41.4697503872218 -87.5324845107806,41.3013387221503 -87.5317652032273,41.1737899174832 -87.5320527069588,41.0099629234772 -87.5326961499881,40.7454479031807 -87.5371908503425,40.4946461888117 -87.5356953046261,40.4832822109023 -87.535356869744,40.1662317074521 -87.5357932746107,39.8873391886275 -87.5355977432246,39.6093761467476 -87.5385896158313,39.4774828667869 -87.540237703126,39.3505623907844 -87.5976886138014,39.3383057314831 -87.62526201039,39.307441385019 -87.6106436997924,39.2976988710138 -87.6158242074897,39.2814561230773 -87.606920476384,39.2582021441748 -87.5845886371286,39.2487915548446 -87.5886169182131,39.2085051229499 -87.5942322592859,39.1981674228522 -87.6079502553876,39.196107453445 -87.6442822297063,39.1685465310611 -87.6703524034648,39.1467190724917 -87.6594801644014,39.1306938293312 -87.6622877575411,39.1135088826113 -87.6316931128207,39.1039838431484 -87.630891938142,39.0890152076407 -87.6120316181093,39.0846475088299 -87.585343298774,39.062476908506 -87.581772429957,38.9957855730057 -87.5918815898562,38.9941261861117 -87.5479276301993,38.9771206273788 -87.533492428354,38.9637465338765 -87.5302039208332,38.9319629772649 -87.5392219544495,38.9049057469745 -87.559081635284,38.869856862415 -87.5505288034456,38.8579361229776 -87.5079094574812,38.7956049059644 -87.5190486024822,38.7767453485141 -87.5080237439807,38.7697683547433 -87.50833650081,38.7366800091112 -87.5439137139998,38.6860210401793 -87.588501337721,38.6722157708788 -87.6252152154989,38.642857998943 -87.6286714982266,38.6229644058157 -87.6198517254846,38.5992561043613 -87.6406195798681,38.5932251150025 -87.6528804379318,38.5739189952751 -87.6729692972829,38.547471787341 -87.6514157125873,38.5154169292116 -87.6535596755162,38.5004900554631 -87.6799352433336,38.504053007157 -87.6928444866203,38.4815804420218 -87.7561244372712,38.4661728281435 -87.7586879419001,38.4571433599795 -87.7389806672907,38.4455273875839 -87.7484565770349,38.4180116772378 -87.7840483339776,38.3781708227389 -87.834532977994,38.3525705303994 -87.8501122530327,38.2861445830363 -87.8630366972759,38.2854084473723 -87.8740691509129,38.3168343756391 -87.8834763762205,38.3155984794844 -87.8884965521701,38.3007057736598 -87.9141393613995,38.2810944074491 -87.9136816882386,38.3023921025994 -87.9259500085442,38.3048183818949 -87.9800507365755,38.241131787639 -87.9860398723023,38.2348604423061 -87.9779598594692,38.2007606004592 -87.9323194769958,38.1711770029956 -87.932021762155,38.1575737007801 -87.9505995597833,38.1369591387537 -87.9735340459384,38.1318056958815 -88.018579177984,38.1033482133547 -88.0123608797262,38.092392337746 -87.9648969967842,38.0967941055912 -87.9753264381124,38.0733527756694 -88.0347613787602,38.0541307602029 -88.0431234631707,38.0451661890239 -88.0415059105248,38.0383492879413 -88.0217296742097,38.0335770457263 -88.0292447284786,38.0082816708523 -88.0217369738459,37.9751012485706 -88.0425431233507,37.9563100133668 -88.0418029841928,37.9345432471494 -88.0646539089454,37.9298283441586 -88.0789748968891,37.9440458253834 -88.084033312787,37.9237058057134 -88.0304728445231,37.9176363841544 -88.0266198217967,37.9058031174197 -88.0449005350743,37.8960489721139 -88.1001166385822,37.9062154284197 -88.101489939404,37.895351144247 -88.0757701619268,37.8678545841173 -88.0342722464788,37.8437911301456 -88.0421689223191,37.8275671956745 -88.0892974561442,37.8312944778462 -88.0860624224551,37.8176568675887 -88.0356073439534,37.8057279050194 -88.0112228968478,37.8013522474257 -87.9587380494242,37.7762242517409 -87.9396104384072,37.7995510678409 -87.9201699786944,37.8097285459625 -87.9102286413016,37.8386134566058 -87.9368488484946,37.8752235361624 -87.9344837893137,37.904203896365 -87.9218949099373,37.9199089300241 -87.8990364465483,37.9245969463054 -87.8571874142473,37.8909469157228 -87.8236471993993,37.8782550216566 -87.7537824326935,37.8981288619025 -87.7282000153974,37.8945849893321 -87.7094081501652,37.8997539244585 -87.6797209569085,37.8970493378792 -87.6847174116432,37.8363728161595 -87.6516958656896,37.8281751349818 -87.6075887776609,37.8438192895582 -87.5936344509501,37.8649107154254 -87.5947183783029,37.8907666463449 -87.6271375737057,37.9234546658806 -87.6043257240091,37.9711573198373 -87.5048029485417,37.9156270031471 -87.4522884037149,37.9365207505541 -87.3875506289597,37.9349692155165 -87.3105589119421,37.8937184166169 -87.2727459388913,37.8708194103053 -87.226761825554,37.8491183470039 -87.1757806882666,37.8386401947759 -87.1580798741816,37.826967486048 -87.1318794192132,37.7897363615659 -87.1064270674831,37.7842511762003 -87.0713083041007,37.8071361431403 -87.0364800083727,37.9080054345509 -87.0131563777109,37.9247639268183 -86.989031549046,37.9306161664831 -86.9315729136838,37.938040724569 -86.900077899892,37.9536969879516 -86.8632727013398,37.9869202326586 -86.8263071552482,37.9915597077091 -86.8028154972801,37.9787998846179 -86.7538255847893,37.8983593638332 -86.7288765680828,37.8946214413437 -86.6891259363411,37.9118535383339 -86.6686555016737,37.9131967871253 -86.6603086454544,37.9025728769351 -86.6706697969234,37.8606408643363 -86.6659241578432,37.8473808714035 -86.645568203442,37.8460003365155 -86.6147824607846,37.8579754898858 -86.5983098217796,37.9210720274265 -86.5817839150946,37.9256653787747 -86.5410872028347,37.9215158308346 -86.5227377872978,37.9278716585056 -86.516901010803,37.9422420486058 -86.5308478759636,37.9874773037153 -86.5278343905969,38.0186932030166 -86.5190912283611,38.0470479141293 -86.5031147440645,38.0516487974382 -86.4583673572556,38.0591608698586 -86.4424675823122,38.0759953511702 -86.4425211885206,38.0886981996705 -86.4743369239623,38.1117076402344 -86.4648460010231,38.1291561416585 -86.4525242238683,38.1297552896484 -86.4071812537777,38.1082185848164 -86.393677106831,38.1232944153849 -86.3440391531709,38.1342701851064 -86.3354178455955,38.1440282528917 -86.3431238881817,38.1555598192453 -86.3871010468,38.1680214834694 -86.3883069100136,38.1948080328253 -86.3643499429474,38.1932902325194 -86.3416058899801,38.1772881494571 empty states.AREA: 110669.975 states.STATE_NAME: Nevada states.STATE_FIPS: 32 states.SUB_REGION: Mtn states.STATE_ABBR: NV states.POP2000: 1998257 states.POP2001: 2112980 states.POP00_SQMI: 18 states.DEN_0_100: 98 USStates.ID: 36 USStates.State_Name: Nevada USStates.Date_Entered: Oct. 31 1864 USStates.Year_Entered: 1864 USStates.Year_Settled: 1849 ]]> 1864 #Style_5 clampToGround -116.650735151808,39.3520158009473 clampToGround -119.152450421001,38.4118009590513 -118.417419755966,37.886676748621 -117.838686423167,37.4572982397149 -117.160423771838,36.9595941441766 -115.885769343921,36.0012259572722 -115.626197382816,35.7956983148418 -114.621068606189,34.9989144286133 -114.633779872695,35.0418633504303 -114.595631971944,35.0760579746697 -114.6359090842,35.1186557767895 -114.626440825485,35.1339067529871 -114.582616239058,35.1325604694084 -114.572255261053,35.1400677445931 -114.561039964055,35.1743461616312 -114.559583045727,35.2201828714608 -114.587889840369,35.30476812919 -114.589584275424,35.3583787306827 -114.645396168451,35.4507608261464 -114.672215155693,35.5157541647721 -114.649792053474,35.5466373866596 -114.653134321223,35.5848331056106 -114.6398667219,35.6113485698329 -114.654065925137,35.6465840800051 -114.668486064922,35.6563989882403 -114.665091345861,35.6930994107106 -114.688820027649,35.7325957399896 -114.682739704595,35.7647034175617 -114.689867343369,35.8474424944765 -114.662462095522,35.870959907009 -114.661600122152,35.8804735854241 -114.699275906446,35.9116119537411 -114.736212493583,35.9876483502758 -114.717673567756,36.0367580437019 -114.728966012834,36.0587530361082 -114.728150311069,36.0859627711603 -114.712761724737,36.1051810523675 -114.621610747198,36.1419666834504 -114.598935242024,36.1383354528833 -114.530573568745,36.1550902046726 -114.466613475422,36.1247112590538 -114.443945697733,36.1210532841896 -114.380803116644,36.1509912717764 -114.344233941709,36.1374802520567 -114.316095374696,36.1114380366653 -114.303857056018,36.0871084040611 -114.307587598189,36.0622330993642 -114.233472615347,36.0183310595898 -114.206768869568,36.0172554164833 -114.12902308363,36.041730493896 -114.107775185788,36.1210907070504 -114.045105557286,36.1939778840226 -114.037392074194,36.2160228969701 -114.043716435713,36.8418489458646 -114.043939384154,36.9965379371421 -114.047260595159,37.5984784866001 -114.047272999176,38.1376524399918 -114.045090206154,38.5710950539538 -114.044267501155,38.678995881588 -114.040105338584,39.5386849268843 -114.039844684228,39.9087788600022 -114.038108189376,40.1110466529553 -114.038151248682,40.9976868405942 -114.039072662345,41.9953908974688 -114.269471632825,41.9959242345073 -115.024862911148,41.9965064559528 -115.947544658193,41.9945994628996 -116.992313337997,41.9947945094663 -117.018864363596,41.9947941808341 -118.185316829038,41.9966370981387 -119.3109421304,41.989135387281 -119.351692186077,41.9888529749781 -119.993459369715,41.9892049531992 -119.996324660047,41.1775662656441 -119.996165311172,39.7206108077274 -119.996011479298,39.443500976451 -119.995304181493,39.3115454332125 -119.995527335641,39.1587132866354 -119.994541258334,39.1061318056706 -119.995150114198,39.063491359469 -119.995254694357,38.9941061536376 -119.8893416394,38.9222515603984 -119.575687062955,38.7029101298903 -119.318825070203,38.5271086243913 -119.152450421001,38.4118009590513 empty states.AREA: 84871.909 states.STATE_NAME: Utah states.STATE_FIPS: 49 states.SUB_REGION: Mtn states.STATE_ABBR: UT states.POP2000: 2233169 states.POP2001: 2282755 states.POP00_SQMI: 26 states.DEN_0_100: 98 USStates.ID: 45 USStates.State_Name: Utah USStates.Date_Entered: Jan. 4 1896 USStates.Year_Entered: 1896 USStates.Year_Settled: 1847 ]]> 1896 #Style_5 clampToGround -111.676053595522,39.3225122931614 clampToGround -114.047272999176,38.1376524399918 -114.047260595159,37.5984784866001 -114.043939384154,36.9965379371421 -112.899983474169,36.9962268765574 -112.542521578828,36.9979944864436 -112.2372578615,36.9954921751891 -111.356163994142,37.0017097524257 -110.740062961138,37.002488042411 -110.484088956249,37.0039260237973 -110.452235819472,36.9917463039985 -109.997076712711,36.9920675592929 -109.048480115363,36.9966409005893 -109.045602480021,37.6308206068713 -109.043206408646,37.8874200608917 -109.043464000061,38.1529336954503 -109.055861120835,38.2449201643366 -109.053948502328,38.4946509132439 -109.051416838185,39.3609660838809 -109.053528662287,39.5181701484933 -109.052551712149,39.6573824204021 -109.051263150153,40.2105113710392 -109.046155726194,40.6652909436328 -109.048314704754,40.9984333935171 -110.002165480573,40.9975995171866 -110.06318573561,40.9978919528284 -111.05102250907,40.9965835985974 -111.051651122482,41.2584254005779 -111.051068773655,41.578592411864 -111.04869741386,41.9962033494069 -111.494586313343,42.0001709690538 -112.100514491537,42.0023005848578 -112.147116504391,41.9990540573659 -112.989575449033,42.0011467864027 -114.039072662345,41.9953908974688 -114.038151248682,40.9976868405942 -114.038108189376,40.1110466529553 -114.039844684228,39.9087788600022 -114.040105338584,39.5386849268843 -114.044267501155,38.678995881588 -114.045090206154,38.5710950539538 -114.047272999176,38.1376524399918 empty states.AREA: 157776.31 states.STATE_NAME: California states.STATE_FIPS: 06 states.SUB_REGION: Pacific states.STATE_ABBR: CA states.POP2000: 33871648 states.POP2001: 34516624 states.POP00_SQMI: 215 states.DEN_0_100: 81 USStates.ID: 31 USStates.State_Name: California USStates.Date_Entered: Sep. 9 1850 USStates.Year_Entered: 1850 USStates.Year_Settled: 1769 ]]> 1850 #Style_5 clampToGround -119.601147078817,37.2417411000423 clampToGround -121.66521992838,38.1692852818694 -121.659581042989,38.0964650614978 -121.554149383557,38.1373615489176 -121.57283385306,38.1137988310232 -121.54747307428,38.0634732081726 -121.56954517723,38.0636676710543 -121.576884968613,38.0941384853348 -121.657749868484,38.0861008670846 -121.69895609777,38.023495913425 -122.00062325051,38.0571514373297 -122.29552219684,38.0147955029917 -122.379683867535,37.9734454214081 -122.371497008527,37.9093451727425 -122.307553740948,37.8917635584725 -122.312413626844,37.7784626912758 -122.199732511343,37.7352008896292 -122.093023678359,37.4973135318613 -121.975337115714,37.4607202053584 -122.0893078249,37.4525414662326 -122.359671258087,37.6097867642997 -122.366331359286,37.7024501185469 -122.346471626615,37.725222881851 -122.400931117592,37.8086250993121 -122.498214530806,37.7829421062426 -122.498207824387,37.7002541028674 -122.505682180351,37.5229048519338 -122.441463098499,37.4794824747711 -122.389253147094,37.352412767888 -122.414637835197,37.2391263954339 -122.27463370965,37.1067818898449 -122.173442725658,37.000869414925 -122.061331831373,36.9475067701217 -121.883536569103,36.9620979743937 -121.791711902502,36.8503269997121 -121.761391229107,36.8189902052639 -121.808564715975,36.6482211428704 -121.867381727768,36.6077136052856 -121.911420522825,36.6404278449564 -121.955283154531,36.5827736715462 -121.882277424869,36.3069435009766 -121.689811557385,36.1811341987533 -121.445541577549,35.8798505213909 -121.329080662264,35.8010340350228 -121.270261538467,35.6635357486702 -121.146559303764,35.6293227396273 -120.991948024433,35.4565810726726 -120.875212388976,35.4277651422731 -120.849996140741,35.364537182949 -120.883597597517,35.259405384431 -120.861341970335,35.2092537379629 -120.638410219944,35.1400283496436 -120.61676526156,35.0748165782334 -120.644339564707,34.972636905425 -120.665946557296,34.9038095267432 -120.608158850435,34.8556158401941 -120.631673131148,34.7599067933633 -120.601627028389,34.7040225521134 -120.64129302919,34.5723378041175 -120.509405994936,34.5213738679268 -120.456202683517,34.4424994539303 -120.140162829175,34.4719023559641 -120.011495395442,34.4616616229627 -119.869433245661,34.4047962846548 -119.606293589682,34.4164349217076 -119.483009812349,34.3748618900045 -119.266767436277,34.2380982663749 -119.216334529765,34.1463406491736 -118.939360079521,34.0400813176585 -118.788115084851,34.0182570853964 -118.541854436649,34.0372517785732 -118.412110377564,33.8829675753282 -118.388175257182,33.8123248533334 -118.42895447882,33.7754482405051 -118.40508897256,33.7384507232421 -118.286892271712,33.7039074388935 -118.246616191662,33.7739249856028 -118.106717457478,33.7475645995891 -117.597331325999,33.3945339357493 -117.410144185265,33.2340894690021 -117.328439405751,33.1114819922089 -117.254867897998,32.8881728454755 -117.285325399413,32.8512204969457 -117.248206872978,32.6800939783651 -117.198774659986,32.7389343989236 -117.124529296561,32.6789314826057 -117.120606603881,32.6028724058295 -117.199812068273,32.7184424173816 -117.128098104758,32.5357813439163 -116.10697354631,32.6194706970554 -114.722048985451,32.7208574919907 -114.712695098447,32.7350133484495 -114.694040667724,32.7414255804573 -114.603942285241,32.7262851953269 -114.603522692176,32.7358864782619 -114.571958909536,32.7374388920444 -114.572210733513,32.7488292120028 -114.560751027253,32.7489359768297 -114.561582708233,32.7607536245719 -114.543004547133,32.7607497409074 -114.543187695964,32.7712322843312 -114.530095237266,32.7714115230303 -114.535077445153,32.7880470474354 -114.52621949202,32.8099123509472 -114.461436322021,32.8454225112401 -114.476443984447,32.9359088466692 -114.46838719789,32.9777894659032 -114.520627661734,33.0277074359678 -114.559089057602,33.036782479158 -114.609925720105,33.0270019226895 -114.633966945552,33.0335669165654 -114.645159759737,33.0444118730784 -114.663951695926,33.0389226888334 -114.711355133911,33.0953827798915 -114.709463019649,33.122374935038 -114.678120399612,33.1672499413879 -114.680050859029,33.2245949425206 -114.687711074888,33.2392582971895 -114.677693392037,33.2680165177413 -114.735426988668,33.3057084351637 -114.703603782165,33.3524180309387 -114.724936284952,33.4110596377436 -114.645092242143,33.4191160810556 -114.630573116436,33.4394249456214 -114.621089578986,33.4685989080523 -114.598086338819,33.4861269505736 -114.58706170624,33.5094455578288 -114.52942054662,33.5600729749772 -114.54024720611,33.5805077718081 -114.527170510583,33.6221365140121 -114.525263594507,33.6655047006994 -114.53643355935,33.6827352282095 -114.49567644704,33.708369427689 -114.510287510185,33.7432004976418 -114.504557871757,33.7717148133963 -114.521122162519,33.8260312846707 -114.511722548733,33.84196501578 -114.520962184241,33.8629263802443 -114.49818809185,33.925036256846 -114.525632127364,33.9524137553973 -114.518208552815,33.9650630904256 -114.428980324296,34.0298439872115 -114.424029195647,34.0783320579769 -114.410166357368,34.1026543641334 -114.322799430739,34.1412972664816 -114.285368523229,34.1712309584447 -114.235775821971,34.1862227475521 -114.149912368725,34.2669789901846 -114.125230507624,34.2726209662778 -114.134127057818,34.3145478754142 -114.153414997679,34.3364477645527 -114.182079822361,34.3652063649643 -114.257842521563,34.4054888215522 -114.283394304634,34.4120690064366 -114.302865366738,34.4357541377741 -114.332636412337,34.4548730796034 -114.376506947621,34.4596793685379 -114.38386203177,34.4770856153635 -114.376827822772,34.5365634767276 -114.409742349408,34.5837235617841 -114.434302240724,34.5989628909914 -114.422270356442,34.6108950917792 -114.465637688895,34.7098730189755 -114.497804378448,34.744757644472 -114.525553173554,34.7489115709666 -114.542040692552,34.7599586200401 -114.570216833129,34.8318604389449 -114.627263440015,34.8755338147028 -114.630475658748,34.9195012881626 -114.621007388662,34.9436098418844 -114.632276529502,34.9976517256292 -114.621068606189,34.9989144286133 -115.626197382816,35.7956983148418 -115.885769343921,36.0012259572722 -117.160423771838,36.9595941441766 -117.838686423167,37.4572982397149 -118.417419755966,37.886676748621 -119.152450421001,38.4118009590513 -119.318825070203,38.5271086243913 -119.575687062955,38.7029101298903 -119.8893416394,38.9222515603984 -119.995254694357,38.9941061536376 -119.995150114198,39.063491359469 -119.994541258334,39.1061318056706 -119.995527335641,39.1587132866354 -119.995304181493,39.3115454332125 -119.996011479298,39.443500976451 -119.996165311172,39.7206108077274 -119.996324660047,41.1775662656441 -119.993459369715,41.9892049531992 -120.871908519109,41.9876721779537 -121.441508911406,41.9943345308753 -122.284705082491,42.0007645525751 -123.222102653242,42.0021917751363 -123.513204633148,41.9978329178357 -123.819146438568,41.9929487728793 -124.206444444404,41.9976479131656 -124.207500961935,41.8483274144433 -124.243098913848,41.7767571816414 -124.144210356407,41.7271932569777 -124.057954769171,41.4581641678281 -124.071602469809,41.3138325813281 -124.149703258267,41.1288322470152 -124.109446186314,40.9782109511907 -124.39263784515,40.4352369107749 -124.336106834157,40.3275549107377 -124.34530627267,40.2524300107045 -124.094560484712,40.1003777878568 -124.007638557042,39.9985808401758 -123.83810841709,39.8263968822168 -123.783531916535,39.6871084901522 -123.754651576417,39.5518792569807 -123.813718039793,39.3478064499639 -123.68344758336,39.0418059048776 -123.721901388934,38.9247712251134 -123.523886601491,38.7576593190168 -123.297941065635,38.5473335471062 -123.121544682433,38.4335999361908 -123.048796644867,38.294141377341 -122.994649084682,38.2972271999883 -122.939271912039,38.1532649535683 -123.010730200117,37.9944662024876 -122.956597666482,37.9907574780998 -122.921180931798,38.0306229406578 -122.822193338167,38.0076725285282 -122.691723723162,37.894392667181 -122.666392804265,37.9069197438526 -122.515725410422,37.8221063020498 -122.45825944905,37.8342211915867 -122.490022339876,37.9317675511749 -122.441781116525,37.9829552338725 -122.506450380808,38.0186521772629 -122.474544986516,38.0854571240266 -122.528648754527,38.150671563432 -122.488935224967,38.1134142797201 -122.429202750633,38.1138071956154 -122.398463944831,38.1613370670847 -122.272771919253,38.0974845590887 -122.285354126349,38.1593115761927 -122.338907365688,38.1935818915881 -122.315759126632,38.2059335777619 -122.273001701246,38.1594183914711 -122.232243019261,38.0710797919834 -121.984548898952,38.1395004704755 -121.902765892076,38.0729095504444 -121.782362662585,38.066775850854 -121.66521992838,38.1692852818694 clampToGround -119.867823257171,34.0752286498425 -119.927690399321,34.0591802403193 -119.873986855978,34.0318755748591 -119.889061793831,34.004669718361 -119.847275401387,33.9684159348396 -119.712539718279,33.9652843614565 -119.539377455034,34.0064960649629 -119.523095554405,34.0345906142262 -119.572589325174,34.0557811654196 -119.667922334498,34.0213434372469 -119.867823257171,34.0752286498425 clampToGround -120.167386086026,33.9241621971016 -120.109179246126,33.8948139803303 -119.963385936243,33.9477631591643 -120.046801069367,34.0411052236375 -120.238548700773,34.0108852422559 -120.167386086026,33.9241621971016 clampToGround -118.594780502018,33.4808183566674 -118.556433880183,33.4344825457272 -118.481342626159,33.4195524387193 -118.455386785543,33.3247859794245 -118.304036434067,33.3074940443331 -118.294590834254,33.3344480915225 -118.362395805209,33.4110113285126 -118.594780502018,33.4808183566674 clampToGround -118.350958200555,32.8191952333517 -118.541585051028,32.9873842722853 -118.571485987943,33.0359715054548 -118.599517215117,33.0210219708047 -118.511676946737,32.8920762202556 -118.420105888582,32.8061145350339 -118.350958200555,32.8191952333517 empty states.AREA: 41193.957 states.STATE_NAME: Ohio states.STATE_FIPS: 39 states.SUB_REGION: E N Cen states.STATE_ABBR: OH states.POP2000: 11353140 states.POP2001: 11381725 states.POP00_SQMI: 276 states.DEN_0_100: 75 USStates.ID: 17 USStates.State_Name: Ohio USStates.Date_Entered: Mar. 1 1803 USStates.Year_Entered: 1803 USStates.Year_Settled: 1788 ]]> 1803 #Style_5 clampToGround -82.7873906731324,40.2875354201742 clampToGround -83.2727548748104,38.6092569222626 -83.2450135606284,38.6241723630441 -83.1819390743195,38.6098410346599 -83.1431499750977,38.6193396966029 -83.1112431136575,38.6648333651597 -83.0608799170539,38.6857264630017 -83.0269434347116,38.7145119991138 -82.972483103327,38.7196429959584 -82.9213038087217,38.7464144846546 -82.8903122480228,38.7427754690297 -82.8731911677823,38.7190064779649 -82.880011744564,38.6833013226062 -82.8600294858941,38.6523951466567 -82.8538566639593,38.6004587371503 -82.8269924854152,38.5716621183892 -82.8023639107609,38.5572886775579 -82.7419448162975,38.5530662073486 -82.6955793642933,38.5391428294601 -82.6697603574158,38.5021407722218 -82.6137433379651,38.4726688337026 -82.5866043088359,38.4125194224537 -82.5754192239026,38.4039021444586 -82.5475481992093,38.4005109785092 -82.4949877236084,38.405832597411 -82.4148912969765,38.4303925893994 -82.3947641418576,38.4284703243087 -82.3291793887118,38.4419523430973 -82.3142406687043,38.4652295850629 -82.2899713540982,38.5800813546872 -82.2708972021513,38.5948900812008 -82.2136592450116,38.5848354166427 -82.1842468602663,38.5950322865397 -82.1736570619561,38.6321907721309 -82.1889777039029,38.6778937710105 -82.1839728099084,38.710302969121 -82.2167502305976,38.7789394330115 -82.1977219453354,38.8046196832205 -82.1460996683824,38.8387877142417 -82.1393170921316,38.8993984229593 -82.1012069170005,38.9520939616579 -82.0850167494239,38.9771981320238 -82.0585035436315,38.9890655972236 -82.0428855933127,39.0141392723836 -81.999678576611,39.0152610363642 -81.9751873204589,38.9930065533181 -81.9377333601398,38.9911756913507 -81.9278300684254,38.9842712717174 -81.8986084722904,38.9322247653254 -81.9318508422449,38.8947421272096 -81.9152487142291,38.884446578043 -81.8926954574516,38.8734530024849 -81.8668004270512,38.8857095354934 -81.8409130504285,38.9378897832025 -81.8237768593835,38.948467790736 -81.7832252461068,38.9235624308806 -81.7622971158526,38.9301808907728 -81.7817298618878,38.9685290255312 -81.7756796380037,39.0168297231883 -81.8134617903382,39.0441080346264 -81.824273103509,39.0664159845432 -81.8195656534392,39.077016873553 -81.7863614059708,39.0772573104027 -81.7535616017454,39.0947208175577 -81.7447036859703,39.1258749496768 -81.758910326595,39.1757512549241 -81.7230738622105,39.2132681698618 -81.6979035279936,39.220020030992 -81.6895262667326,39.2602262835757 -81.6675222725862,39.2704953128172 -81.5726851110575,39.2659175355733 -81.5573879482749,39.3326551943737 -81.5406485131192,39.3527089235402 -81.4650081513692,39.4068583282204 -81.4479558561434,39.4110278039673 -81.4339782748136,39.4060229813656 -81.3759162878324,39.3456902660112 -81.3388361554473,39.3536439576398 -81.2840170696265,39.387072038012 -81.2376212801085,39.388472233438 -81.2249486327778,39.4083582071948 -81.2003052461098,39.4158962250483 -81.180567643956,39.437800182641 -81.1170899131724,39.467783911079 -81.0982449432912,39.4964511389157 -81.0373831991512,39.5326641774228 -81.0325686091523,39.544142538686 -80.9836464085096,39.5818052379779 -80.9326107962525,39.6069409720762 -80.9125905700626,39.6073533140813 -80.8811098930273,39.6240811641343 -80.8727460845437,39.6624110188142 -80.8634141639951,39.6803515272318 -80.832787434305,39.7034002259532 -80.8322983936779,39.7188343443337 -80.8564533163278,39.7363355934909 -80.8707277613589,39.7599938351988 -80.8191038347973,39.8090013333355 -80.8259165835688,39.8396671142989 -80.7985253362877,39.8567227242363 -80.7908494426605,39.8723475673467 -80.8121358445091,39.9049014113291 -80.8078400413376,39.9159028725421 -80.7960214112815,39.9198397078312 -80.7681270403387,39.9133131812296 -80.7588871844105,39.9212667893345 -80.7630600994735,39.947015501453 -80.7388880114803,39.9834759440017 -80.7382388547155,40.0356640607266 -80.7020651116698,40.1540899859456 -80.7008900358822,40.1681812950244 -80.678557419433,40.194151495489 -80.6501132136987,40.2456798126148 -80.6146878118885,40.2765021361522 -80.6045170824084,40.3062448322667 -80.6092470800706,40.3732754647517 -80.6292446110196,40.3886635709611 -80.6278482893771,40.3982268491052 -80.6018302001708,40.4805390518844 -80.6252533727438,40.5044642482608 -80.6334398823952,40.5392040647419 -80.6686204246359,40.5682789021601 -80.6677276496391,40.5821374643692 -80.6373382193406,40.613982302321 -80.6115497018059,40.6200630858018 -80.5744158355721,40.6159741619192 -80.5219995284775,40.6372031779131 -80.520306111211,40.8541688223624 -80.5209244301116,40.8972705158399 -80.5229326934644,41.1296278146841 -80.5199962349619,41.4892885705201 -80.5239255625846,41.4951021493305 -80.5226439573086,41.8507747576586 -80.5205925694563,41.9868721098151 -80.9997726749621,41.8502571698917 -81.3622646287273,41.7242834716563 -81.4782631842651,41.6317160085966 -81.7385026273233,41.4911547362108 -81.9619077841044,41.5019186194452 -82.015605653266,41.5153101427099 -82.3413826182513,41.4315011278012 -82.5488376780322,41.3913376118913 -82.7169465507165,41.4505247784283 -82.9089321846262,41.4294685839921 -83.0703983919718,41.4561099314841 -82.7847067738454,41.5074172813269 -82.7958306404585,41.5376483368901 -83.0034334958447,41.5381937701371 -83.153746401703,41.6260898051711 -83.4826910020175,41.7251299269076 -83.7639541211988,41.7170422186577 -83.868639675225,41.7159933856432 -84.3592084922416,41.7080391705922 -84.3843932427042,41.7071503370832 -84.7903774729513,41.6974947329852 -84.7913699039565,41.5304919381552 -84.7918972237936,41.4278994604409 -84.7909755666301,41.2838180261002 -84.7915862671235,41.2531325315222 -84.7905270959946,40.9883412320642 -84.7910232725421,40.9377084936207 -84.7930613218788,40.7288603729197 -84.7932521538178,40.5887382366961 -84.7945562939653,40.3530507566997 -84.7953877882857,40.3195005333353 -84.8035641264148,40.013990635484 -84.8061497587903,39.9171665438967 -84.808696532672,39.7332992702085 -84.8110367793544,39.5640506850582 -84.8111048340875,39.5131632038426 -84.8120249021854,39.3123331649208 -84.8120705333745,39.3030292262759 -84.81148058301,39.1025855115064 -84.7899269988898,39.1070335912354 -84.7428755878621,39.1420637748434 -84.6674874871449,39.0896244882795 -84.6226484760206,39.0749345727981 -84.5930686595367,39.070265611257 -84.5153007968991,39.0941952341113 -84.4920536098813,39.1073635038858 -84.444918075979,39.1118269376755 -84.425683749535,39.0847240819073 -84.4197401104714,39.0473368904498 -84.3913122739829,39.0357444360707 -84.3457790116403,39.0378123176184 -84.3133151278336,39.014074138235 -84.2901361030169,38.9445378637403 -84.2615250982177,38.9174773125027 -84.2352944474892,38.8745556222277 -84.2287021102685,38.8126904458503 -84.1767522626135,38.7884985944901 -84.0888671071979,38.7655047394295 -84.0538016012981,38.7637349934305 -83.9621627892472,38.7776474056309 -83.9125395047095,38.7579603800755 -83.8575526890278,38.7449183938572 -83.8375322435588,38.7118799039528 -83.7904649815274,38.6938445378462 -83.7702232329137,38.650819405338 -83.712825428618,38.6355534097723 -83.6785301000227,38.6209281353376 -83.6557556666292,38.6238806809261 -83.6431897561886,38.6358624635654 -83.6332409466577,38.6649719664098 -83.6183785196076,38.6779722718334 -83.526555981969,38.696111041032 -83.5000734679638,38.690137357128 -83.4536162999543,38.6637746596862 -83.3714219489845,38.6549977034897 -83.3300232564578,38.6319880306114 -83.3203257653401,38.6065634765907 -83.3065312653877,38.5963174248036 -83.2900435785732,38.5966379602472 -83.2727548748104,38.6092569222626 empty states.AREA: 56299.387 states.STATE_NAME: Illinois states.STATE_FIPS: 17 states.SUB_REGION: E N Cen states.STATE_ABBR: IL states.POP2000: 12419293 states.POP2001: 12520522 states.POP00_SQMI: 221 states.DEN_0_100: 80 USStates.ID: 21 USStates.State_Name: Illinois USStates.Date_Entered: Dec. 3 1818 USStates.Year_Entered: 1818 USStates.Year_Settled: 1720 ]]> 1818 #Style_5 clampToGround -89.2037678267293,40.0640001695085 clampToGround -88.0715914713672,37.5110386032244 -88.134202057652,37.5836204217666 -88.1576641894898,37.628526559458 -88.159404386901,37.6607335395919 -88.1336703044624,37.7007907786447 -88.0725039638053,37.7354461998767 -88.0356073439534,37.8057279050194 -88.0860624224551,37.8176568675887 -88.0892974561442,37.8312944778462 -88.0421689223191,37.8275671956745 -88.0342722464788,37.8437911301456 -88.0757701619268,37.8678545841173 -88.101489939404,37.895351144247 -88.1001166385822,37.9062154284197 -88.0449005350743,37.8960489721139 -88.0266198217967,37.9058031174197 -88.0304728445231,37.9176363841544 -88.084033312787,37.9237058057134 -88.0789748968891,37.9440458253834 -88.0646539089454,37.9298283441586 -88.0418029841928,37.9345432471494 -88.0425431233507,37.9563100133668 -88.0217369738459,37.9751012485706 -88.0292447284786,38.0082816708523 -88.0217296742097,38.0335770457263 -88.0415059105248,38.0383492879413 -88.0431234631707,38.0451661890239 -88.0347613787602,38.0541307602029 -87.9753264381124,38.0733527756694 -87.9648969967842,38.0967941055912 -88.0123608797262,38.092392337746 -88.018579177984,38.1033482133547 -87.9735340459384,38.1318056958815 -87.9505995597833,38.1369591387537 -87.932021762155,38.1575737007801 -87.9323194769958,38.1711770029956 -87.9779598594692,38.2007606004592 -87.9860398723023,38.2348604423061 -87.9800507365755,38.241131787639 -87.9259500085442,38.3048183818949 -87.9136816882386,38.3023921025994 -87.9141393613995,38.2810944074491 -87.8884965521701,38.3007057736598 -87.8834763762205,38.3155984794844 -87.8740691509129,38.3168343756391 -87.8630366972759,38.2854084473723 -87.8501122530327,38.2861445830363 -87.834532977994,38.3525705303994 -87.7840483339776,38.3781708227389 -87.7484565770349,38.4180116772378 -87.7389806672907,38.4455273875839 -87.7586879419001,38.4571433599795 -87.7561244372712,38.4661728281435 -87.6928444866203,38.4815804420218 -87.6799352433336,38.504053007157 -87.6535596755162,38.5004900554631 -87.6514157125873,38.5154169292116 -87.6729692972829,38.547471787341 -87.6528804379318,38.5739189952751 -87.6406195798681,38.5932251150025 -87.6198517254846,38.5992561043613 -87.6286714982266,38.6229644058157 -87.6252152154989,38.642857998943 -87.588501337721,38.6722157708788 -87.5439137139998,38.6860210401793 -87.50833650081,38.7366800091112 -87.5080237439807,38.7697683547433 -87.5190486024822,38.7767453485141 -87.5079094574812,38.7956049059644 -87.5505288034456,38.8579361229776 -87.559081635284,38.869856862415 -87.5392219544495,38.9049057469745 -87.5302039208332,38.9319629772649 -87.533492428354,38.9637465338765 -87.5479276301993,38.9771206273788 -87.5918815898562,38.9941261861117 -87.581772429957,38.9957855730057 -87.585343298774,39.062476908506 -87.6120316181093,39.0846475088299 -87.630891938142,39.0890152076407 -87.6316931128207,39.1039838431484 -87.6622877575411,39.1135088826113 -87.6594801644014,39.1306938293312 -87.6703524034648,39.1467190724917 -87.6442822297063,39.1685465310611 -87.6079502553876,39.196107453445 -87.5942322592859,39.1981674228522 -87.5886169182131,39.2085051229499 -87.5845886371286,39.2487915548446 -87.606920476384,39.2582021441748 -87.6158242074897,39.2814561230773 -87.6106436997924,39.2976988710138 -87.62526201039,39.307441385019 -87.5976886138014,39.3383057314831 -87.540237703126,39.3505623907844 -87.5385896158313,39.4774828667869 -87.5355977432246,39.6093761467476 -87.5357932746107,39.8873391886275 -87.535356869744,40.1662317074521 -87.5356953046261,40.4832822109023 -87.5371908503425,40.4946461888117 -87.5326961499881,40.7454479031807 -87.5320527069588,41.0099629234772 -87.5317652032273,41.1737899174832 -87.5324845107806,41.3013387221503 -87.5326861745456,41.4697503872218 -87.5299063108434,41.7236260875045 -87.6126760323676,41.8473653861124 -87.6706059016442,42.0598519291133 -87.7603024221355,42.1564820299593 -87.837014916084,42.3142352747747 -87.7973819562241,42.4891528495242 -88.1947902657089,42.4896315487889 -88.2979892842343,42.4919886619727 -88.7066230964608,42.4896714789996 -88.7650578832203,42.4909223638021 -88.9391870492451,42.4908797705788 -89.3595588834203,42.4979178413637 -89.4006131996787,42.4975019535639 -89.8347389483978,42.5034685663175 -89.9236914155722,42.5041158651446 -90.4201029261637,42.5083649645861 -90.6384560963599,42.5093636839918 -90.6518991107146,42.4947005718712 -90.6484737738083,42.475647019796 -90.6059553704284,42.4605645940667 -90.5637116510656,42.4218436822154 -90.4911711742602,42.3887914637005 -90.4417250802803,42.3600836299974 -90.4278091232618,42.340644954386 -90.4181124359413,42.2639391318113 -90.4073017721273,42.2426617515853 -90.3678582678001,42.2102266723886 -90.3237299895918,42.1973374145764 -90.231063112785,42.1597414854526 -90.19170240605,42.1227099310285 -90.1762144636605,42.1205242372018 -90.1667767223318,42.1037669165116 -90.1682262959709,42.0610667627835 -90.1506630602384,42.0334532086115 -90.1427967503368,41.9839895278463 -90.1546448451232,41.9308021367651 -90.1959656651667,41.8061669912383 -90.2554387407709,41.7817690413387 -90.3050158621799,41.756497081381 -90.3261570233379,41.722767950897 -90.3412624105656,41.6491222689255 -90.3394762639213,41.6028314888971 -90.3484942767923,41.5868824103659 -90.4231352637825,41.5673054184025 -90.43509834614,41.5436125873014 -90.4551261544257,41.5275795523085 -90.5409754772051,41.5260034668008 -90.6008378029169,41.5096188031289 -90.6589297375422,41.4623507046517 -90.708354613045,41.4500936593358 -90.7800426831899,41.44985255988 -90.8442837822745,41.4446525356188 -90.949800649924,41.4212638456605 -91.0008427707096,41.4311127421861 -91.0276377762307,41.4235364759013 -91.0559355416905,41.4014073054416 -91.0734289726202,41.3349253706845 -91.102496456158,41.2678481882471 -91.1016720192436,41.2315519929841 -91.0564663602341,41.176290257977 -91.0184022505193,41.1658577458188 -90.9904854657331,41.1444046114074 -90.9579298891755,41.1043932523764 -90.9547939103174,41.0703973298849 -90.9608509342302,40.9505415875963 -90.9834189693665,40.9239649616112 -91.0493536735639,40.8796233416421 -91.0890502695948,40.8337674861069 -91.0928951526236,40.7615871092817 -91.1201324458079,40.7054430853053 -91.1293030749525,40.6821889727746 -91.1626444034791,40.6563523669938 -91.2150599786405,40.643859446667 -91.2622111209491,40.6395869370641 -91.3757627300253,40.6034802448646 -91.4112710901028,40.5730126128812 -91.4130259733114,40.5480345602038 -91.3822556522285,40.5285383313692 -91.3749464781203,40.5036976293474 -91.3855511655391,40.4472940413254 -91.3729083225561,40.4030325886378 -91.385909198391,40.3924048874231 -91.4189685913151,40.3869192694689 -91.4487471564049,40.3719466182637 -91.486849457272,40.309668416 -91.4990871746939,40.2514224267414 -91.5067014147696,40.2005039120117 -91.5162840506091,40.1345898206457 -91.5041602099787,40.0667571230242 -91.4874432777371,40.0057984567776 -91.4473948316692,39.9461098791871 -91.4305407730269,39.9218827311204 -91.4342030257459,39.9018745899127 -91.4511409854999,39.885288198019 -91.4493403590742,39.8630942448561 -91.381863132745,39.8038177672296 -91.3735696173857,39.7613181753518 -91.3672369870804,39.7246854919977 -91.3178117994405,39.6859625802781 -91.2033893787345,39.6000674783423 -91.156329497446,39.5526394130489 -91.0937507263244,39.5289731742514 -91.064521543479,39.4740300232192 -91.0364749082031,39.4444585084789 -90.9480242377645,39.4006319007784 -90.8506238710589,39.3504997276601 -90.7794691118574,39.2968502329079 -90.7382075249523,39.2478582113647 -90.7324624678238,39.2247947417977 -90.7183172395896,39.1959215056912 -90.7168599355041,39.1442594879132 -90.6905224771304,39.0937493584583 -90.7077119263589,39.0582272816598 -90.7061935987103,39.0378416951969 -90.6689997391856,38.9353034194491 -90.6273348623125,38.8808451829242 -90.5704483578896,38.8713768681923 -90.5305451069931,38.8916590934777 -90.4699576683671,38.9592275775329 -90.4131860400015,38.9623782480884 -90.319853715721,38.9249561810614 -90.2790431101957,38.9247652789138 -90.2440385800512,38.9145571194291 -90.1329204943928,38.8530794199913 -90.1132283291809,38.8305155786969 -90.1218345138212,38.8005591450278 -90.1352855717776,38.7855333244896 -90.1635076675385,38.7731473780178 -90.1966816483452,38.7240148841336 -90.2023506849595,38.7004136293542 -90.1836888738229,38.6588222213685 -90.1838189833793,38.610322629253 -90.2410570917018,38.5628573013572 -90.2613445745186,38.532820806846 -90.2658995864079,38.5187409219187 -90.3019580826576,38.4274101853512 -90.3397250925035,38.3909000937545 -90.3588070147191,38.365383796682 -90.3694659464645,38.3236130942444 -90.364888938819,38.2343531960061 -90.3368353674101,38.1887672607723 -90.2897533449443,38.1668707739162 -90.2541771290958,38.1222235068627 -90.2076442245226,38.0889589210515 -90.1348270564954,38.0540042508408 -90.1194535601973,38.0323252746278 -90.0420357223568,37.9932585919637 -90.0109221172551,37.9693709792311 -89.9583387204947,37.9636867798315 -89.9790231478271,37.9119372642027 -89.937983776196,37.8780970980944 -89.900659718619,37.8759567792384 -89.8669213710244,37.8919285019704 -89.8611532194338,37.9055391707122 -89.8518221998746,37.9051156711928 -89.728551127852,37.8410437278203 -89.6911585166015,37.8048461895875 -89.6759604497414,37.784021807452 -89.6665610141995,37.7455048947008 -89.5815353939712,37.7061554249312 -89.5216197606815,37.6948481923868 -89.5134712981473,37.6798905957089 -89.5192773900878,37.6504256791403 -89.5134636137585,37.6159786570251 -89.5250680585934,37.5720063661821 -89.4948777729593,37.4917750136486 -89.4537142750772,37.4532354416246 -89.4276653438195,37.4110680347262 -89.4358278942645,37.3557666795513 -89.4688336740249,37.3394589952529 -89.5006722080316,37.329491318765 -89.5139774032488,37.3050126842203 -89.5139766838468,37.276452254325 -89.4896835855159,37.2560512507203 -89.4653982268105,37.2537814318187 -89.4683040002904,37.2243166291394 -89.4406060044902,37.165367829282 -89.4238807787763,37.1372534192951 -89.3800701656133,37.0991331193152 -89.3830287336186,37.0492635096727 -89.3110577890705,37.0097321155337 -89.28284342367,36.9992571418446 -89.2620760272063,37.0087367322465 -89.2643196065903,37.0277834462293 -89.3097775142834,37.0609596218128 -89.3033693654427,37.0854347008365 -89.2843107935284,37.0912941061444 -89.2641303966978,37.0871742876795 -89.2377536103058,37.0417835282019 -89.2101262118458,37.0290237051986 -89.1935842098097,36.9868222806571 -89.1299298602513,36.9881656914537 -89.1503164771803,36.9984916525611 -89.1744039557536,37.0257625307982 -89.1696209893749,37.0642870560925 -89.1464197019938,37.0932369170363 -89.1168931380891,37.1121885561653 -89.0651040416988,37.1859115907085 -88.9932401183652,37.2200879803029 -88.9325677662407,37.2184595035745 -88.8633498471503,37.2022475575954 -88.7465598581524,37.1521615318569 -88.7391665593048,37.1412363376799 -88.6884212086995,37.1354651044129 -88.6142679530367,37.1091025287746 -88.5593190002438,37.0728714131831 -88.5173176378463,37.0648267364289 -88.4907432667963,37.0682371308779 -88.4768417264925,37.0722004387704 -88.4505110390145,37.0987273102449 -88.4225549910502,37.1569654245737 -88.450738961298,37.205724438504 -88.5014689152382,37.2578364471264 -88.511365178177,37.2969057632051 -88.4676859561995,37.4008084371049 -88.419893554403,37.4203432412273 -88.3592141681292,37.4093610567464 -88.3117424820464,37.4429033025395 -88.0879105655745,37.4763216973515 -88.0715914713672,37.5110386032244 empty states.AREA: 2054.586 states.STATE_NAME: Delaware states.STATE_FIPS: 10 states.SUB_REGION: S Atl states.STATE_ABBR: DE states.POP2000: 783600 states.POP2001: 797556 states.POP00_SQMI: 381 states.DEN_0_100: 66 USStates.ID: 1 USStates.State_Name: Delaware USStates.Date_Entered: Dec. 7 1787 USStates.Year_Entered: 1787 USStates.Year_Settled: 1638 ]]> 1787 #Style_5 clampToGround -75.5005536711258,38.9951144260073 clampToGround -75.7070735567254,38.5575913668919 -75.6988024422464,38.4631827108939 -75.3498423227975,38.4553227905156 -75.0927212334893,38.4505638472484 -75.0679246646819,38.4500753640855 -75.0456230125111,38.4496021608759 -75.0827624797042,38.7999244622257 -75.1905708548595,38.8087822508359 -75.3075352508581,38.946023931106 -75.3244886654144,39.0124989256203 -75.3973682707713,39.0731489592767 -75.4021224709428,39.2577500046037 -75.5152174265202,39.3670516712081 -75.5898358410183,39.4638799793316 -75.5626429594386,39.5668352599053 -75.6103745921791,39.6129053117614 -75.4892806606894,39.7148582186458 -75.4759742683691,39.7200843842213 -75.4747684572146,39.7418320932776 -75.4603941188554,39.7633620274566 -75.4276473042606,39.7782429030536 -75.4117545704202,39.7897707547806 -75.420467947865,39.7989830990632 -75.4699861133481,39.8265474993808 -75.5834432496435,39.8401190417149 -75.6439943147472,39.8383065472094 -75.6947708516454,39.8204574523468 -75.7455920038355,39.7749293983367 -75.7749271959808,39.7245527846646 -75.7910945763195,39.7238660373362 -75.7723537466778,39.3831185391944 -75.7643192412212,39.2959598236098 -75.7613129328181,39.2478639325384 -75.7525764003551,39.1416603330929 -75.7245906263035,38.8302832999716 -75.7107127327496,38.6496658557662 -75.7070735567254,38.5575913668919 empty states.AREA: 24228.552 states.STATE_NAME: West Virginia states.STATE_FIPS: 54 states.SUB_REGION: S Atl states.STATE_ABBR: WV states.POP2000: 1808344 states.POP2001: 1802611 states.POP00_SQMI: 75 states.DEN_0_100: 93 USStates.ID: 35 USStates.State_Name: West Virginia USStates.Date_Entered: June 20 1863 USStates.Year_Entered: 1863 USStates.Year_Settled: 1727 ]]> 1863 #Style_5 clampToGround -80.614059565661,38.6412110051568 clampToGround -79.2316628792895,38.4804961745132 -79.1274272802501,38.6582438834526 -79.1210641516119,38.6637673801701 -79.088546586161,38.6592052271367 -79.0872342316746,38.7072686901771 -79.0565552787527,38.7620536715536 -79.0548004393222,38.7906328948264 -79.0337425168672,38.7999596842489 -78.9874530865749,38.8467613817813 -78.8665606307436,38.7634041325478 -78.8158608410647,38.8337457622327 -78.7930553345461,38.8802192733 -78.7492528843455,38.9114914729758 -78.7377319367122,38.9292828544161 -78.724143464369,38.9303242424267 -78.7189859527938,38.9049913858346 -78.6802270507461,38.9216841449691 -78.6469691460415,38.9505530737122 -78.6308475438714,38.9797118741506 -78.598696138461,38.967306737806 -78.5532079497434,39.0139362816423 -78.5492023399753,39.0234880477595 -78.5641793194809,39.0351455339644 -78.536651424857,39.0571328491656 -78.5016006690667,39.0936843045982 -78.4852503468901,39.111944844534 -78.4479796847525,39.1190362574345 -78.4305689043273,39.1486261929033 -78.4023622826226,39.1705945616413 -78.4240684786694,39.1976286478836 -78.4230690017269,39.2121432300896 -78.3991273957871,39.2449527077307 -78.4135473819813,39.257540835225 -78.3408462579967,39.3414581302015 -78.3439287233565,39.3509564427898 -78.3654747496783,39.3616867684635 -78.350231122076,39.380828452912 -78.3475464813471,39.4569981748093 -78.2768810730911,39.4234646371798 -78.2295086253954,39.39111326311 -78.0333283435887,39.2656393181314 -77.8306802289491,39.1321813411354 -77.8200446831256,39.1417254469273 -77.8054492814302,39.1966059388555 -77.76823224564,39.2465502522476 -77.7594582704378,39.2846433153217 -77.7274674809187,39.3177965867944 -77.7500891970593,39.3268181439956 -77.7543007117046,39.3385939912988 -77.7454504163582,39.3603718912509 -77.7562233700037,39.3784762226869 -77.7372333565171,39.3961953951361 -77.7408345223893,39.4034394054792 -77.7569863395184,39.4251637984679 -77.8022754371077,39.4323161756799 -77.8046940179175,39.4400179505449 -77.7957979551353,39.4509164333512 -77.8041904928873,39.4631385518333 -77.7851089381059,39.459102708835 -77.7994983267184,39.4808271058573 -77.771551216988,39.4981152221263 -77.8251871127517,39.4939074430119 -77.8478774840217,39.5020058349846 -77.8252634740426,39.5120383875386 -77.828925751391,39.5292537667709 -77.8354642803022,39.5256107761519 -77.8438492144584,39.5319315749014 -77.8646320920924,39.5146512457229 -77.8695609560795,39.5459120760673 -77.8899167307584,39.5580921006877 -77.885171166646,39.5644510981679 -77.8529590935596,39.5654544565677 -77.8398667728917,39.572740433055 -77.8424075807765,39.6053745299037 -77.855522813824,39.6021663910764 -77.8884368988057,39.6165703160658 -77.8907409489792,39.6007014665387 -77.903253436057,39.5961238764369 -77.9386090344815,39.6182180888264 -77.9475432559036,39.6150137753716 -77.9354578694981,39.5919391289044 -77.9449795511185,39.5860111667727 -77.9642367578358,39.6113249804037 -77.995205151108,39.5989693016707 -78.0264181806753,39.6228676658044 -78.0943379340484,39.6756002259056 -78.1829721387067,39.6946416432551 -78.2043044442965,39.6759383682958 -78.2275978107419,39.6739888201001 -78.2292303104585,39.6585663745485 -78.2577267039254,39.6411676777696 -78.273015937033,39.6184096414251 -78.3479232590728,39.6405907650805 -78.3567810297593,39.6323702224905 -78.3776707259566,39.6313171842384 -78.3846362229595,39.6144947493043 -78.431893779582,39.6209523855928 -78.4039995740291,39.5876131045842 -78.4506314866027,39.592705125494 -78.4618162122069,39.5808339965825 -78.4208220953532,39.5494097703543 -78.4458699009632,39.5483185504429 -78.4558109647124,39.5337352582767 -78.4812781842694,39.5199376222576 -78.5087828376437,39.525159517656 -78.5641887564812,39.521073443727 -78.604366257192,39.5356829078104 -78.6370818045276,39.5299491862748 -78.6491442196502,39.5379978698818 -78.6664251857124,39.5369295856868 -78.7163150181332,39.5595725682967 -78.732718612281,39.5766427925479 -78.7614516806553,39.5817923449266 -78.7737430747891,39.6016168803692 -78.7362511683583,39.608792329934 -78.73049853216,39.6215446407261 -78.7323830398202,39.6269651904324 -78.7676164768578,39.6266140472135 -78.7727054582047,39.6442413593536 -78.7981503202116,39.6308329361782 -78.7984707782291,39.6154181040351 -78.8224126817224,39.5856984808976 -78.8065506380054,39.5668238139764 -78.8381145866481,39.5633182054468 -78.8708155126305,39.5257902221119 -78.9553908044919,39.4604587300207 -78.970436606663,39.438525300318 -79.0488545527569,39.4838153049718 -79.0644114910497,39.4858256028263 -79.0706297593098,39.4708498495391 -79.104597173003,39.4708728556173 -79.0967157288178,39.4646284760702 -79.1040784853939,39.4473068185213 -79.1314006491727,39.4170311916524 -79.1581275486525,39.4139606424208 -79.1630183469834,39.3934958538665 -79.2601680465127,39.3486416544713 -79.2798226045278,39.3252435708184 -79.2952732445382,39.3005409622397 -79.3461946154148,39.2920920071237 -79.3848476494521,39.2693006300669 -79.4492818447752,39.2120934820003 -79.4611919892215,39.2132646214775 -79.4898647956422,39.1973957510982 -79.480971113096,39.720274058077 -79.7651323185042,39.7218070815944 -79.9182684921867,39.7216669674993 -80.4290823326108,39.7198426041628 -80.5242694740401,39.7212089909504 -80.5246506803543,39.9584195634812 -80.5249621853498,40.0228253262192 -80.5260451901894,40.1625211281631 -80.5235645344163,40.403033850236 -80.5243576830379,40.4787848369009 -80.5219995284775,40.6372031779131 -80.5744158355721,40.6159741619192 -80.6115497018059,40.6200630858018 -80.6373382193406,40.613982302321 -80.6677276496391,40.5821374643692 -80.6686204246359,40.5682789021601 -80.6334398823952,40.5392040647419 -80.6252533727438,40.5044642482608 -80.6018302001708,40.4805390518844 -80.6278482893771,40.3982268491052 -80.6292446110196,40.3886635709611 -80.6092470800706,40.3732754647517 -80.6045170824084,40.3062448322667 -80.6146878118885,40.2765021361522 -80.6501132136987,40.2456798126148 -80.678557419433,40.194151495489 -80.7008900358822,40.1681812950244 -80.7020651116698,40.1540899859456 -80.7382388547155,40.0356640607266 -80.7388880114803,39.9834759440017 -80.7630600994735,39.947015501453 -80.7588871844105,39.9212667893345 -80.7681270403387,39.9133131812296 -80.7960214112815,39.9198397078312 -80.8078400413376,39.9159028725421 -80.8121358445091,39.9049014113291 -80.7908494426605,39.8723475673467 -80.7985253362877,39.8567227242363 -80.8259165835688,39.8396671142989 -80.8191038347973,39.8090013333355 -80.8707277613589,39.7599938351988 -80.8564533163278,39.7363355934909 -80.8322983936779,39.7188343443337 -80.832787434305,39.7034002259532 -80.8634141639951,39.6803515272318 -80.8727460845437,39.6624110188142 -80.8811098930273,39.6240811641343 -80.9125905700626,39.6073533140813 -80.9326107962525,39.6069409720762 -80.9836464085096,39.5818052379779 -81.0325686091523,39.544142538686 -81.0373831991512,39.5326641774228 -81.0982449432912,39.4964511389157 -81.1170899131724,39.467783911079 -81.180567643956,39.437800182641 -81.2003052461098,39.4158962250483 -81.2249486327778,39.4083582071948 -81.2376212801085,39.388472233438 -81.2840170696265,39.387072038012 -81.3388361554473,39.3536439576398 -81.3759162878324,39.3456902660112 -81.4339782748136,39.4060229813656 -81.4479558561434,39.4110278039673 -81.4650081513692,39.4068583282204 -81.5406485131192,39.3527089235402 -81.5573879482749,39.3326551943737 -81.5726851110575,39.2659175355733 -81.6675222725862,39.2704953128172 -81.6895262667326,39.2602262835757 -81.6979035279936,39.220020030992 -81.7230738622105,39.2132681698618 -81.758910326595,39.1757512549241 -81.7447036859703,39.1258749496768 -81.7535616017454,39.0947208175577 -81.7863614059708,39.0772573104027 -81.8195656534392,39.077016873553 -81.824273103509,39.0664159845432 -81.8134617903382,39.0441080346264 -81.7756796380037,39.0168297231883 -81.7817298618878,38.9685290255312 -81.7622971158526,38.9301808907728 -81.7832252461068,38.9235624308806 -81.8237768593835,38.948467790736 -81.8409130504285,38.9378897832025 -81.8668004270512,38.8857095354934 -81.8926954574516,38.8734530024849 -81.9152487142291,38.884446578043 -81.9318508422449,38.8947421272096 -81.8986084722904,38.9322247653254 -81.9278300684254,38.9842712717174 -81.9377333601398,38.9911756913507 -81.9751873204589,38.9930065533181 -81.999678576611,39.0152610363642 -82.0428855933127,39.0141392723836 -82.0585035436315,38.9890655972236 -82.0850167494239,38.9771981320238 -82.1012069170005,38.9520939616579 -82.1393170921316,38.8993984229593 -82.1460996683824,38.8387877142417 -82.1977219453354,38.8046196832205 -82.2167502305976,38.7789394330115 -82.1839728099084,38.710302969121 -82.1889777039029,38.6778937710105 -82.1736570619561,38.6321907721309 -82.1842468602663,38.5950322865397 -82.2136592450116,38.5848354166427 -82.2708972021513,38.5948900812008 -82.2899713540982,38.5800813546872 -82.3142406687043,38.4652295850629 -82.3291793887118,38.4419523430973 -82.3947641418576,38.4284703243087 -82.4148912969765,38.4303925893994 -82.4949877236084,38.405832597411 -82.5475481992093,38.4005109785092 -82.5754192239026,38.4039021444586 -82.5866043088359,38.4125194224537 -82.598239157166,38.3684639621207 -82.572298054739,38.3078110430161 -82.5800496260145,38.2925104464826 -82.574578950842,38.2559737163217 -82.5891132321387,38.2453880857478 -82.616228731902,38.2388116463152 -82.6066454186315,38.1938262489827 -82.6137636388564,38.1780948680894 -82.6471582603252,38.1694356505033 -82.646127983197,38.1463307005486 -82.5932086977126,38.1099625844435 -82.524678605298,38.0156623478137 -82.4757796712415,37.9759070493071 -82.480174161688,37.9543964226939 -82.4933963519265,37.9425137288734 -82.5002094692154,37.9222618980716 -82.4376072765301,37.8948548600619 -82.4215083258885,37.8723565285176 -82.4058057432277,37.8117197137467 -82.3398465759663,37.7844003083255 -82.3194978866149,37.7584268520686 -82.3294012031438,37.7441714871732 -82.2956247745408,37.6690580326702 -82.2383711562884,37.656775872237 -82.2054405975475,37.6240165335496 -82.1855494012877,37.6406677677666 -82.1593102199621,37.5935690802839 -82.1317814946938,37.5905369780361 -82.1374734191813,37.5698959116523 -82.1465225053321,37.5659208983498 -82.1425091726566,37.5574524979734 -82.0843920504403,37.5483099090524 -82.0556653408102,37.5253425321624 -82.0491341809237,37.5514538202535 -82.0263511693733,37.5305195250327 -81.9765742755516,37.5432534483332 -81.9595752559297,37.5311726196289 -81.9354500215799,37.5066446664438 -81.9479933430541,37.4930262563355 -81.9764218630945,37.4829057344135 -81.9882025293799,37.4665864944032 -81.9207334341144,37.4155161841344 -81.9268226400485,37.3717275503644 -81.8971581362481,37.3405886156486 -81.8638156687728,37.3254560597623 -81.8586808412616,37.307031242764 -81.8388888977451,37.2855052037829 -81.8153810652859,37.2795392280236 -81.7926591382367,37.2871534702189 -81.7518541120478,37.2722574759975 -81.7384563680184,37.2504910806821 -81.7017283392091,37.2354348394887 -81.6658857606432,37.2049100156006 -81.5566542800284,37.2063527636759 -81.5055358933554,37.2343721078399 -81.4955330784661,37.2528505720872 -81.4753603327483,37.2544223575295 -81.4033441778724,37.2826247386467 -81.3909459604383,37.3111547685878 -81.3587948024103,37.3389525257717 -81.3118727901012,37.2937070121271 -81.2229334626078,37.2402144799779 -81.1407375754125,37.2749250164035 -81.0249323590475,37.2860611989419 -80.9859367075368,37.3062413397341 -80.9785356077377,37.2964757957825 -80.9678919192932,37.2917914637641 -80.9341835390029,37.3013705325277 -80.8554293470925,37.3394115247051 -80.8484178042257,37.3509434223474 -80.8773584695865,37.3886971542785 -80.8505252286955,37.4234607507886 -80.7996113856773,37.4130624215657 -80.7992446500301,37.3917535437627 -80.7700223818732,37.3861958412097 -80.7629949670439,37.3714139772316 -80.7476897645342,37.3790816832203 -80.7463242442421,37.3877372428011 -80.7297371116507,37.3927194823309 -80.7052070760613,37.388378738728 -80.5974908951866,37.4460544156491 -80.5427553820369,37.469210153305 -80.5087647901173,37.4750470031664 -80.4878816034022,37.4605973242368 -80.486797216389,37.4338604042898 -80.474764729883,37.4228209443336 -80.4253779088728,37.4349064012949 -80.3883061551325,37.4657253807092 -80.3521568605721,37.4761016187768 -80.3475109001899,37.49117712186 -80.2879160750838,37.5111511482082 -80.280730446809,37.5362590748033 -80.3083037500729,37.5283701687601 -80.3259058073753,37.5334014957793 -80.3167216376968,37.5667185420532 -80.2463930602341,37.5968966073136 -80.2189280037138,37.624266818855 -80.2544222998619,37.6407036415196 -80.3009326903108,37.6405469490757 -80.3048626787101,37.6522463839109 -80.2957006530037,37.6715026681154 -80.3031097192157,37.6826718540633 -80.2500331441419,37.7260519868 -80.2546888560857,37.7572327793138 -80.2205461556516,37.7788585452909 -80.2237356887328,37.8023645289771 -80.1715945425769,37.842968579238 -80.1722203908299,37.860184199113 -80.1600053720503,37.8772283214768 -80.1185073346708,37.8912782976758 -80.1064907418994,37.9146585972358 -80.0548072329966,37.955647953318 -80.0004989600932,37.9898701188515 -79.9664936918756,38.0386218574803 -79.9575137202729,38.0673653777199 -79.9282922008952,38.1033111780769 -79.9353269126111,38.1213086373625 -79.9103399375918,38.1626063325108 -79.9161615169419,38.1792648616985 -79.8311519954685,38.2502792510352 -79.79362179587,38.2686659933911 -79.786511146829,38.2851184419634 -79.8027778583646,38.2988699252702 -79.800328942629,38.3143267172637 -79.7640044528342,38.3539913109909 -79.7328295907797,38.35184011756 -79.7200352271452,38.3946858203824 -79.6840924127456,38.4302381558023 -79.6926537316952,38.50035433771 -79.6656146350943,38.5207779063414 -79.6694300335236,38.5501770266588 -79.642406563286,38.5923552608138 -79.5365137543052,38.5538055741145 -79.4863475711582,38.4621448879803 -79.3169995976733,38.4126332297745 -79.2723588406108,38.4373067075038 -79.2316628792895,38.4804961745132 empty states.AREA: 9739.872 states.STATE_NAME: Maryland states.STATE_FIPS: 24 states.SUB_REGION: S Atl states.STATE_ABBR: MD states.POP2000: 5296486 states.POP2001: 5362491 states.POP00_SQMI: 544 states.DEN_0_100: 52 USStates.ID: 7 USStates.State_Name: Maryland USStates.Date_Entered: Apr. 28 1788 USStates.Year_Entered: 1788 USStates.Year_Settled: 1634 ]]> 1788 #Style_5 clampToGround -76.8193852682105,39.0640555384767 clampToGround -75.7107127327496,38.6496658557662 -75.7245906263035,38.8302832999716 -75.7525764003551,39.1416603330929 -75.7613129328181,39.2478639325384 -75.7643192412212,39.2959598236098 -75.7723537466778,39.3831185391944 -75.7910945763195,39.7238660373362 -76.1392231665553,39.7222292808326 -76.2331218646413,39.7218535861041 -76.5698344165776,39.7202653698966 -76.7904916037971,39.7212561436081 -76.9968122213509,39.7208916577077 -77.2210508745187,39.7206793349451 -77.4644330206582,39.7200734721353 -77.4757933985606,39.7196232012639 -78.0959483136605,39.7254610687401 -78.3345500729087,39.7240962157241 -78.384783030143,39.7237485696748 -78.817758346634,39.7231158128337 -78.9301730523848,39.7223369261357 -79.3966100929568,39.7193136035322 -79.480971113096,39.720274058077 -79.4898647956422,39.1973957510982 -79.4611919892215,39.2132646214775 -79.4492818447752,39.2120934820003 -79.3848476494521,39.2693006300669 -79.3461946154148,39.2920920071237 -79.2952732445382,39.3005409622397 -79.2798226045278,39.3252435708184 -79.2601680465127,39.3486416544713 -79.1630183469834,39.3934958538665 -79.1581275486525,39.4139606424208 -79.1314006491727,39.4170311916524 -79.1040784853939,39.4473068185213 -79.0967157288178,39.4646284760702 -79.104597173003,39.4708728556173 -79.0706297593098,39.4708498495391 -79.0644114910497,39.4858256028263 -79.0488545527569,39.4838153049718 -78.970436606663,39.438525300318 -78.9553908044919,39.4604587300207 -78.8708155126305,39.5257902221119 -78.8381145866481,39.5633182054468 -78.8065506380054,39.5668238139764 -78.8224126817224,39.5856984808976 -78.7984707782291,39.6154181040351 -78.7981503202116,39.6308329361782 -78.7727054582047,39.6442413593536 -78.7676164768578,39.6266140472135 -78.7323830398202,39.6269651904324 -78.73049853216,39.6215446407261 -78.7362511683583,39.608792329934 -78.7737430747891,39.6016168803692 -78.7614516806553,39.5817923449266 -78.732718612281,39.5766427925479 -78.7163150181332,39.5595725682967 -78.6664251857124,39.5369295856868 -78.6491442196502,39.5379978698818 -78.6370818045276,39.5299491862748 -78.604366257192,39.5356829078104 -78.5641887564812,39.521073443727 -78.5087828376437,39.525159517656 -78.4812781842694,39.5199376222576 -78.4558109647124,39.5337352582767 -78.4458699009632,39.5483185504429 -78.4208220953532,39.5494097703543 -78.4618162122069,39.5808339965825 -78.4506314866027,39.592705125494 -78.4039995740291,39.5876131045842 -78.431893779582,39.6209523855928 -78.3846362229595,39.6144947493043 -78.3776707259566,39.6313171842384 -78.3567810297593,39.6323702224905 -78.3479232590728,39.6405907650805 -78.273015937033,39.6184096414251 -78.2577267039254,39.6411676777696 -78.2292303104585,39.6585663745485 -78.2275978107419,39.6739888201001 -78.2043044442965,39.6759383682958 -78.1829721387067,39.6946416432551 -78.0943379340484,39.6756002259056 -78.0264181806753,39.6228676658044 -77.995205151108,39.5989693016707 -77.9642367578358,39.6113249804037 -77.9449795511185,39.5860111667727 -77.9354578694981,39.5919391289044 -77.9475432559036,39.6150137753716 -77.9386090344815,39.6182180888264 -77.903253436057,39.5961238764369 -77.8907409489792,39.6007014665387 -77.8884368988057,39.6165703160658 -77.855522813824,39.6021663910764 -77.8424075807765,39.6053745299037 -77.8398667728917,39.572740433055 -77.8529590935596,39.5654544565677 -77.885171166646,39.5644510981679 -77.8899167307584,39.5580921006877 -77.8695609560795,39.5459120760673 -77.8646320920924,39.5146512457229 -77.8438492144584,39.5319315749014 -77.8354642803022,39.5256107761519 -77.828925751391,39.5292537667709 -77.8252634740426,39.5120383875386 -77.8478774840217,39.5020058349846 -77.8251871127517,39.4939074430119 -77.771551216988,39.4981152221263 -77.7994983267184,39.4808271058573 -77.7851089381059,39.459102708835 -77.8041904928873,39.4631385518333 -77.7957979551353,39.4509164333512 -77.8046940179175,39.4400179505449 -77.8022754371077,39.4323161756799 -77.7569863395184,39.4251637984679 -77.7408345223893,39.4034394054792 -77.7372333565171,39.3961953951361 -77.7562233700037,39.3784762226869 -77.7454504163582,39.3603718912509 -77.7543007117046,39.3385939912988 -77.7500891970593,39.3268181439956 -77.7274674809187,39.3177965867944 -77.6793019175109,39.3187810010414 -77.616235785843,39.2998185774258 -77.5686729648781,39.298495090027 -77.5419007825367,39.2690420737433 -77.4937734776117,39.2500146595609 -77.4646672485749,39.2291606204918 -77.4617071219601,39.2187353607732 -77.4783476432128,39.1770378462932 -77.5163278483541,39.1575488653215 -77.5127578441981,39.1167594573458 -77.47895899133,39.1040646528751 -77.459404555923,39.0809444981026 -77.4327467353536,39.0668840135464 -77.3462265685837,39.0686200582469 -77.3243065775866,39.0626960558372 -77.2556927153402,39.0276818620407 -77.2434318664787,38.9759898010602 -77.151747718242,38.9648893335594 -77.1223283029125,38.9321712762375 -77.0420882700669,38.9935411597528 -77.0079307438671,38.9666671332517 -76.9109046912897,38.8901000805306 -77.0451474225901,38.7882339432299 -77.0461695666273,38.7188957809267 -77.0568205142596,38.7121363148863 -77.0815787383139,38.7153939181929 -77.0928476424555,38.7040989116303 -77.1248156205481,38.6779155452061 -77.1296906932316,38.6482418914715 -77.2774587919105,38.4872207930521 -77.2555770674964,38.41371718721 -77.2206258675067,38.3907877017763 -77.0020917831531,38.4269772011524 -76.9727248648513,38.3311549876724 -76.9082699582989,38.2999784778825 -76.8638733132888,38.3914714190274 -76.7599276109587,38.2344093308613 -76.5769505272031,38.222764311271 -76.3298385406414,38.045830240005 -76.3434505132736,38.2131869285095 -76.6469375997288,38.4505479866903 -76.5197569015984,38.4102610484431 -76.471598574103,38.3357833947148 -76.421135969123,38.3206235821057 -76.4051288342195,38.3461435452093 -76.3854823399682,38.3914043684505 -76.508571222804,38.522220870784 -76.5249309770579,38.7097512630869 -76.5488052362963,38.7590892616049 -76.4717185591821,38.9083512988567 -76.4236166543894,39.1184647232768 -76.5636056235403,39.1963744261278 -76.59482606965,39.1587962366193 -76.6070184386023,39.1810927544493 -76.5766676572233,39.1982282762434 -76.5648189147791,39.2315530428342 -76.6037153612334,39.2594608609242 -76.530981239764,39.2427262967213 -76.3987214377801,39.23125237193 -76.3637104804475,39.393387950291 -76.2263383547627,39.3749983931238 -76.1541997728595,39.4020462004049 -76.0781785659751,39.542475359461 -76.031080478884,39.5700410038864 -75.9744299206522,39.5241368727679 -75.9523031535122,39.4712951808406 -75.9784646617012,39.3946638351226 -75.8493991857383,39.3792510141722 -76.0370909767884,39.3584799261141 -76.1120448111742,39.3214068908311 -76.2181125034375,39.2049624205434 -76.2385676859932,39.1309353125061 -76.2214463552885,39.0930291937215 -76.1109520010634,39.1187058442236 -76.199341894342,38.9734670026609 -76.1135363312758,38.9208289937164 -76.0951642657932,38.9482447165723 -76.1025643698053,38.8981319074412 -76.0755320321039,38.8896633042527 -76.1140393138268,38.8855703797452 -76.1655228898125,38.7887251297383 -76.194843280357,38.7653724001326 -76.2720877707717,38.8341158634797 -76.3502045606863,38.6991431917132 -76.3372950814248,38.6794939962041 -76.2667911199833,38.7700039380465 -76.2229814834233,38.7629085069421 -76.1737084025659,38.7092130303982 -76.123703577538,38.7080947052705 -76.0756590311907,38.6109007702122 -76.0465823676188,38.5919759809806 -76.0277220313837,38.6221228840739 -76.0315976662875,38.5720404826446 -76.2507210293305,38.5952017233529 -76.1918807885951,38.5434629709824 -76.29165294584,38.4788511852767 -76.2939417782027,38.4370577153623 -76.0651198948853,38.259057093733 -76.0204640236521,38.3220175737297 -75.994942456991,38.2826466356901 -75.9495845351857,38.2821771251992 -75.8864815116298,38.3755815466837 -75.8720918837096,38.3573513417761 -75.8946130125701,38.2589952816564 -75.7938261188739,38.2637247654706 -75.8613249850499,38.2401659678014 -75.8377266864712,38.2317163388415 -75.897451255602,38.1750572625645 -75.769206402107,38.0973712697568 -75.8653849314123,37.9797804654786 -75.6478666128507,37.9702549087239 -75.6260840474607,37.9965412351653 -75.3724205835836,38.0168338616125 -75.3730687313232,38.0690409029093 -75.2624990292677,38.2015335967299 -75.1506169090142,38.2738812082701 -75.1548735291952,38.3697395682799 -75.0927212334893,38.4505638472484 -75.3498423227975,38.4553227905156 -75.6988024422464,38.4631827108939 -75.7070735567254,38.5575913668919 -75.7107127327496,38.6496658557662 clampToGround -76.2928041305598,38.9078367280903 -76.2731895016316,38.9493434073476 -76.246408808548,38.9236940972491 -76.2478217695177,38.9790095805696 -76.2994902315763,39.0407073059323 -76.3564746271561,38.958299911005 -76.3752406190334,38.8542185416326 -76.3293872596985,38.8760038237182 -76.3422215756121,38.9241707280608 -76.3223079602806,38.9122005623908 -76.3141298202577,38.9420383665643 -76.3387433583291,38.9567741081102 -76.2941866944134,38.9676801350473 -76.2928041305598,38.9078367280903 clampToGround -75.0679246646819,38.4500753640855 -75.0873204261931,38.3230592800575 -75.0456230125111,38.4496021608759 -75.0679246646819,38.4500753640855 clampToGround -75.2703576848931,38.0277091732938 -75.2422192799713,38.0286475070447 -75.172811877636,38.1243063358622 -75.0940269654088,38.3203165911443 -75.164373449629,38.2049624515 -75.2093886849695,38.0942969089551 -75.2440961931471,38.0380238346228 -75.2703576848931,38.0277091732938 empty states.AREA: 104101.231 states.STATE_NAME: Colorado states.STATE_FIPS: 08 states.SUB_REGION: Mtn states.STATE_ABBR: CO states.POP2000: 4301261 states.POP2001: 4432642 states.POP00_SQMI: 41 states.DEN_0_100: 96 USStates.ID: 38 USStates.State_Name: Colorado USStates.Date_Entered: Aug. 1 1876 USStates.Year_Entered: 1876 USStates.Year_Settled: 1858 ]]> 1876 #Style_5 clampToGround -105.547857280633,38.9972631547834 clampToGround -102.044455910114,37.6414742210535 -102.04397657417,37.7343986213713 -102.046060904132,38.2538220806459 -102.045549640322,38.2633436193344 -102.047584160548,38.6154993640496 -102.047568440936,38.6925505149901 -102.048972538957,39.0370029188915 -102.047874719263,39.1267534832 -102.048801584447,39.5628035180916 -102.049442507662,39.5686933622379 -102.051535596434,39.9989182728278 -102.047544994516,40.3426445008284 -102.047620488242,40.4310777832961 -102.046031374616,40.6973192828138 -102.046992332576,40.7431303349332 -102.047739314394,40.9980708667063 -102.621257047371,41.00021481921 -102.652271070342,40.9981241668543 -103.382956653967,41.0003163565243 -103.572316302435,40.9996484311393 -104.05170553525,41.00321132686 -104.934492922627,40.9942891435778 -105.278797604523,40.9963491628159 -106.203471481278,41.0000850018961 -106.329125682765,41.001288969127 -106.865438763821,40.9984573861084 -107.304051053295,41.0001333468858 -107.918671336725,41.0033751160193 -109.048314704754,40.9984333935171 -109.046155726194,40.6652909436328 -109.051263150153,40.2105113710392 -109.052551712149,39.6573824204021 -109.053528662287,39.5181701484933 -109.051416838185,39.3609660838809 -109.053948502328,38.4946509132439 -109.055861120835,38.2449201643366 -109.043464000061,38.1529336954503 -109.043206408646,37.8874200608917 -109.045602480021,37.6308206068713 -109.048480115363,36.9966409005893 -108.372472924296,36.999471575633 -107.472460293817,36.9987767566937 -107.410820543541,36.9975257849804 -106.89037023567,36.9990837907051 -106.86124887722,36.9895015941857 -106.472176939021,36.9915042439681 -105.992000086492,36.992289650437 -105.713459997846,36.9945603614965 -105.213091465415,36.992604521715 -105.146172547082,36.9932073726899 -103.993635035945,36.9944690622369 -103.07786588474,36.9997601837273 -102.997709442614,36.9985238353847 -102.037207602599,36.9889939197762 -102.042010650289,37.3862794433515 -102.044455910114,37.6414742210535 empty states.AREA: 40319.791 states.STATE_NAME: Kentucky states.STATE_FIPS: 21 states.SUB_REGION: E S Cen states.STATE_ABBR: KY states.POP2000: 4041769 states.POP2001: 4081550 states.POP00_SQMI: 100 states.DEN_0_100: 91 USStates.ID: 15 USStates.State_Name: Kentucky USStates.Date_Entered: June 1 1792 USStates.Year_Entered: 1792 USStates.Year_Settled: 1774 ]]> 1792 #Style_5 clampToGround -85.2903664199658,37.5265035728688 clampToGround -86.5106681729942,36.6550742141329 -86.4154436379233,36.6509321366908 -86.1989925271939,36.6432906639691 -85.9806106782448,36.633112657611 -85.785476384702,36.62668526607 -85.4373746175903,36.6181989810276 -85.3000946381889,36.6261009236939 -85.2724982773073,36.6256168039722 -84.9984611962111,36.6209826428203 -84.7910568723549,36.6054383594152 -84.781870784101,36.6050761598833 -84.2567774582751,36.5954983253834 -84.2544885948187,36.5954525757939 -84.0067465715187,36.5920881162625 -83.9355998465387,36.5912908042263 -83.695608633552,36.5842494058307 -83.6751767779422,36.59870387507 -83.6468026223996,36.6169769718214 -83.5308949469604,36.6614809602143 -83.4602213075515,36.6618325651555 -83.4041505851927,36.6723273909237 -83.3858547999664,36.6882196347474 -83.3213836986153,36.7095329501122 -83.203656562889,36.7342606278109 -83.1385135640831,36.7400592608854 -83.124390864088,36.7511676478044 -83.1282206506728,36.7791526938786 -83.0679519281288,36.8509961538949 -83.0466341524314,36.8587935503694 -82.9508056915213,36.8640784586876 -82.8780428727109,36.893694238085 -82.8606320841382,36.9321623718302 -82.8665598432633,36.9745857651711 -82.8122227085558,37.0056007595079 -82.7235981560209,37.0339923682353 -82.7200576547545,37.0659298172553 -82.7091701311092,37.075482281352 -82.7213772601893,37.0931177496069 -82.7190958255562,37.1100172914789 -82.56802270094,37.1939190518144 -82.5500399164933,37.1993783814184 -82.4058850037637,37.2507041975685 -82.3538423434752,37.260519600467 -82.288950934185,37.3048612192352 -81.9595752559297,37.5311726196289 -81.9765742755516,37.5432534483332 -82.0263511693733,37.5305195250327 -82.0491341809237,37.5514538202535 -82.0556653408102,37.5253425321624 -82.0843920504403,37.5483099090524 -82.1425091726566,37.5574524979734 -82.1465225053321,37.5659208983498 -82.1374734191813,37.5698959116523 -82.1317814946938,37.5905369780361 -82.1593102199621,37.5935690802839 -82.1855494012877,37.6406677677666 -82.2054405975475,37.6240165335496 -82.2383711562884,37.656775872237 -82.2956247745408,37.6690580326702 -82.3294012031438,37.7441714871732 -82.3194978866149,37.7584268520686 -82.3398465759663,37.7844003083255 -82.4058057432277,37.8117197137467 -82.4215083258885,37.8723565285176 -82.4376072765301,37.8948548600619 -82.5002094692154,37.9222618980716 -82.4933963519265,37.9425137288734 -82.480174161688,37.9543964226939 -82.4757796712415,37.9759070493071 -82.524678605298,38.0156623478137 -82.5932086977126,38.1099625844435 -82.646127983197,38.1463307005486 -82.6471582603252,38.1694356505033 -82.6137636388564,38.1780948680894 -82.6066454186315,38.1938262489827 -82.616228731902,38.2388116463152 -82.5891132321387,38.2453880857478 -82.574578950842,38.2559737163217 -82.5800496260145,38.2925104464826 -82.572298054739,38.3078110430161 -82.598239157166,38.3684639621207 -82.5866043088359,38.4125194224537 -82.6137433379651,38.4726688337026 -82.6697603574158,38.5021407722218 -82.6955793642933,38.5391428294601 -82.7419448162975,38.5530662073486 -82.8023639107609,38.5572886775579 -82.8269924854152,38.5716621183892 -82.8538566639593,38.6004587371503 -82.8600294858941,38.6523951466567 -82.880011744564,38.6833013226062 -82.8731911677823,38.7190064779649 -82.8903122480228,38.7427754690297 -82.9213038087217,38.7464144846546 -82.972483103327,38.7196429959584 -83.0269434347116,38.7145119991138 -83.0608799170539,38.6857264630017 -83.1112431136575,38.6648333651597 -83.1431499750977,38.6193396966029 -83.1819390743195,38.6098410346599 -83.2450135606284,38.6241723630441 -83.2727548748104,38.6092569222626 -83.2900435785732,38.5966379602472 -83.3065312653877,38.5963174248036 -83.3203257653401,38.6065634765907 -83.3300232564578,38.6319880306114 -83.3714219489845,38.6549977034897 -83.4536162999543,38.6637746596862 -83.5000734679638,38.690137357128 -83.526555981969,38.696111041032 -83.6183785196076,38.6779722718334 -83.6332409466577,38.6649719664098 -83.6431897561886,38.6358624635654 -83.6557556666292,38.6238806809261 -83.6785301000227,38.6209281353376 -83.712825428618,38.6355534097723 -83.7702232329137,38.650819405338 -83.7904649815274,38.6938445378462 -83.8375322435588,38.7118799039528 -83.8575526890278,38.7449183938572 -83.9125395047095,38.7579603800755 -83.9621627892472,38.7776474056309 -84.0538016012981,38.7637349934305 -84.0888671071979,38.7655047394295 -84.1767522626135,38.7884985944901 -84.2287021102685,38.8126904458503 -84.2352944474892,38.8745556222277 -84.2615250982177,38.9174773125027 -84.2901361030169,38.9445378637403 -84.3133151278336,39.014074138235 -84.3457790116403,39.0378123176184 -84.3913122739829,39.0357444360707 -84.4197401104714,39.0473368904498 -84.425683749535,39.0847240819073 -84.444918075979,39.1118269376755 -84.4920536098813,39.1073635038858 -84.5153007968991,39.0941952341113 -84.5930686595367,39.070265611257 -84.6226484760206,39.0749345727981 -84.6674874871449,39.0896244882795 -84.7428755878621,39.1420637748434 -84.7899269988898,39.1070335912354 -84.81148058301,39.1025855115064 -84.8278613547987,39.1036877674048 -84.8867079668198,39.0650450015205 -84.8899961256038,39.0506485732317 -84.8762931465368,39.0328954474865 -84.8442256667783,39.0058310025456 -84.8344443965779,38.98277550246 -84.846315847352,38.9546310780086 -84.8758801493223,38.9276041700824 -84.8752543860379,38.9094313024092 -84.8597435114244,38.9020425223312 -84.8032240050715,38.8971908595052 -84.7886668678083,38.8843852980114 -84.7874461259782,38.8666434823042 -84.8244261910504,38.8344629497042 -84.8187802303235,38.7934099982582 -84.9756111877111,38.7806410183922 -85.0250730726016,38.764291113864 -85.0684546610616,38.750424603378 -85.1196570780868,38.7141393628001 -85.1609332135021,38.6951765052421 -85.2051618437764,38.6958170413595 -85.2713939330139,38.7443767592676 -85.3350091958009,38.7370064025018 -85.4181866162644,38.7384171670398 -85.4466906213012,38.7248406803013 -85.4536792483365,38.6946745390103 -85.4244045991195,38.5848401599215 -85.4174617192488,38.5614756142213 -85.432369780701,38.5370160928693 -85.4663821281019,38.5181753628103 -85.5072000237874,38.471419551854 -85.6126402894388,38.446670375764 -85.6435929748204,38.3836879378367 -85.654228238662,38.3377528692459 -85.681388997794,38.3009537036963 -85.7469260083932,38.2703150949771 -85.7862108031498,38.2823915940124 -85.8065513133062,38.2861792248908 -85.8399076966583,38.2762914813239 -85.8523357521911,38.238561041348 -85.9120745452086,38.1800014838715 -85.9147511151841,38.0648748591422 -85.9308719355951,38.034048876233 -85.9585820940509,38.0118406095775 -86.0066633201115,38.0017670737263 -86.0316198158307,37.9929506600364 -86.0527156892641,37.9667844806183 -86.104986573394,38.0113361451773 -86.1906216841403,38.0177584307759 -86.2521549356747,38.0407215021446 -86.277698957837,38.058172975235 -86.2914400750094,38.0784895277861 -86.2976743325246,38.1503040958879 -86.3416058899801,38.1772881494571 -86.3643499429474,38.1932902325194 -86.3883069100136,38.1948080328253 -86.3871010468,38.1680214834694 -86.3431238881817,38.1555598192453 -86.3354178455955,38.1440282528917 -86.3440391531709,38.1342701851064 -86.393677106831,38.1232944153849 -86.4071812537777,38.1082185848164 -86.4525242238683,38.1297552896484 -86.4648460010231,38.1291561416585 -86.4743369239623,38.1117076402344 -86.4425211885206,38.0886981996705 -86.4424675823122,38.0759953511702 -86.4583673572556,38.0591608698586 -86.5031147440645,38.0516487974382 -86.5190912283611,38.0470479141293 -86.5278343905969,38.0186932030166 -86.5308478759636,37.9874773037153 -86.516901010803,37.9422420486058 -86.5227377872978,37.9278716585056 -86.5410872028347,37.9215158308346 -86.5817839150946,37.9256653787747 -86.5983098217796,37.9210720274265 -86.6147824607846,37.8579754898858 -86.645568203442,37.8460003365155 -86.6659241578432,37.8473808714035 -86.6706697969234,37.8606408643363 -86.6603086454544,37.9025728769351 -86.6686555016737,37.9131967871253 -86.6891259363411,37.9118535383339 -86.7288765680828,37.8946214413437 -86.7538255847893,37.8983593638332 -86.8028154972801,37.9787998846179 -86.8263071552482,37.9915597077091 -86.8632727013398,37.9869202326586 -86.900077899892,37.9536969879516 -86.9315729136838,37.938040724569 -86.989031549046,37.9306161664831 -87.0131563777109,37.9247639268183 -87.0364800083727,37.9080054345509 -87.0713083041007,37.8071361431403 -87.1064270674831,37.7842511762003 -87.1318794192132,37.7897363615659 -87.1580798741816,37.826967486048 -87.1757806882666,37.8386401947759 -87.226761825554,37.8491183470039 -87.2727459388913,37.8708194103053 -87.3105589119421,37.8937184166169 -87.3875506289597,37.9349692155165 -87.4522884037149,37.9365207505541 -87.5048029485417,37.9156270031471 -87.6043257240091,37.9711573198373 -87.6271375737057,37.9234546658806 -87.5947183783029,37.8907666463449 -87.5936344509501,37.8649107154254 -87.6075887776609,37.8438192895582 -87.6516958656896,37.8281751349818 -87.6847174116432,37.8363728161595 -87.6797209569085,37.8970493378792 -87.7094081501652,37.8997539244585 -87.7282000153974,37.8945849893321 -87.7537824326935,37.8981288619025 -87.8236471993993,37.8782550216566 -87.8571874142473,37.8909469157228 -87.8990364465483,37.9245969463054 -87.9218949099373,37.9199089300241 -87.9344837893137,37.904203896365 -87.9368488484946,37.8752235361624 -87.9102286413016,37.8386134566058 -87.9201699786944,37.8097285459625 -87.9396104384072,37.7995510678409 -87.9587380494242,37.7762242517409 -88.0112228968478,37.8013522474257 -88.0356073439534,37.8057279050194 -88.0725039638053,37.7354461998767 -88.1336703044624,37.7007907786447 -88.159404386901,37.6607335395919 -88.1576641894898,37.628526559458 -88.134202057652,37.5836204217666 -88.0715914713672,37.5110386032244 -88.0879105655745,37.4763216973515 -88.3117424820464,37.4429033025395 -88.3592141681292,37.4093610567464 -88.419893554403,37.4203432412273 -88.4676859561995,37.4008084371049 -88.511365178177,37.2969057632051 -88.5014689152382,37.2578364471264 -88.450738961298,37.205724438504 -88.4225549910502,37.1569654245737 -88.4505110390145,37.0987273102449 -88.4768417264925,37.0722004387704 -88.4907432667963,37.0682371308779 -88.5173176378463,37.0648267364289 -88.5593190002438,37.0728714131831 -88.6142679530367,37.1091025287746 -88.6884212086995,37.1354651044129 -88.7391665593048,37.1412363376799 -88.7465598581524,37.1521615318569 -88.8633498471503,37.2022475575954 -88.9325677662407,37.2184595035745 -88.9932401183652,37.2200879803029 -89.0651040416988,37.1859115907085 -89.1168931380891,37.1121885561653 -89.1464197019938,37.0932369170363 -89.1696209893749,37.0642870560925 -89.1744039557536,37.0257625307982 -89.1503164771803,36.9984916525611 -89.1299298602513,36.9881656914537 -89.1072162055416,36.9775040571059 -89.1050338653654,36.9539220770253 -89.1296537695887,36.8664945361285 -89.166565665821,36.8434768543693 -89.1735313341446,36.8294390146117 -89.1644441219421,36.804476214643 -89.1259067613141,36.7924680183802 -89.1255402582893,36.7680887738915 -89.1514350491696,36.7590975830134 -89.1772689322554,36.7609818762401 -89.1963655996232,36.7274780703555 -89.1975633899061,36.7134250574374 -89.1678993468083,36.6716284847978 -89.1771616076676,36.6530627654874 -89.2001876332973,36.6313576237861 -89.2101287779705,36.5819546744135 -89.2416846800885,36.569328370687 -89.2834948717057,36.5753095893361 -89.3223449681677,36.6220764759103 -89.3423955613942,36.6289083710958 -89.3636210686995,36.6257612726571 -89.3739514963766,36.616247637228 -89.4182103731204,36.5106251110882 -89.4147846548692,36.5026793108435 -89.3466676017908,36.5026108089583 -88.8303725210313,36.4998546765866 -88.8263593294413,36.4999080492987 -88.8107185759901,36.4990458143214 -88.5126811438787,36.4995467004194 -88.4960256220043,36.4982076026975 -88.0427634042834,36.4965703400273 -88.0350796382961,36.5381999052039 -88.0410910767903,36.5827211925188 -88.0713410698433,36.6796832563404 -87.8707114200773,36.6694231918372 -87.8535374192374,36.6415224035434 -87.6935284355087,36.6444886692232 -87.6406553976253,36.6452169761114 -87.3466109435594,36.6492773804525 -87.11270271488,36.6513077660911 -87.0681840098596,36.6508112445931 -86.7705352136402,36.6521007800576 -86.5106681729942,36.6550742141329 clampToGround -89.5332722884338,36.4981701441748 -89.4758977248385,36.4986089858186 -89.4817572743346,36.5047581085309 -89.4714497533838,36.5256163547986 -89.4817497774818,36.5478363630808 -89.493201833991,36.5591771346443 -89.5304419073772,36.5646166211264 -89.5562146621671,36.5578036567361 -89.5682312249958,36.5414695145559 -89.5670638263092,36.5187993771114 -89.5332722884338,36.4981701441748 empty states.AREA: 82196.955 states.STATE_NAME: Kansas states.STATE_FIPS: 20 states.SUB_REGION: W N Cen states.STATE_ABBR: KS states.POP2000: 2688418 states.POP2001: 2709422 states.POP00_SQMI: 33 states.DEN_0_100: 97 USStates.ID: 34 USStates.State_Name: Kansas USStates.Date_Entered: Jan. 29 1861 USStates.Year_Entered: 1861 USStates.Year_Settled: 1727 ]]> 1861 #Style_5 clampToGround -98.3832572332682,38.4826574728393 clampToGround -95.07193109811,37.0014780674299 -95.0327450815612,37.0007794392778 -94.6203796376912,36.9970468237132 -94.6206638676799,37.0601475533797 -94.6189775221893,37.3277322857884 -94.618764441424,37.360766482215 -94.6189960429386,37.650374321953 -94.6192936785187,37.6798689280977 -94.6167353371693,38.0303877411189 -94.6173303263876,38.055784837357 -94.6190534991515,38.3920320272517 -94.6187177065389,38.4714737258641 -94.6131481947747,38.7372224308096 -94.6124696654656,38.8371089096843 -94.6092813424634,39.0446676651878 -94.6081367864164,39.1128009586178 -94.6012243093762,39.1412276647328 -94.6126534522095,39.1516492526966 -94.6464068497116,39.158427841948 -94.6755137983894,39.1749223276416 -94.7305309461746,39.171256416042 -94.7900492914923,39.1968829757069 -94.8208192842533,39.2110046505539 -94.8334765331867,39.2617660205541 -94.8811077732328,39.2860458708519 -94.9076813995049,39.3230284700345 -94.9113435368246,39.3401217508395 -94.8982816593786,39.3806406678593 -94.9257480001496,39.3812661376612 -94.9584938855715,39.4114472233923 -94.9862042598468,39.4394616215765 -95.0405114608605,39.4629407284024 -95.0475992838867,39.4853288064319 -95.1020369987408,39.5328485478957 -95.1089880729704,39.5606920176429 -95.0536130925577,39.5867761785005 -95.0560171833566,39.625689733093 -95.0282920673642,39.6619134718391 -94.978570591812,39.6849880529496 -94.9617863830239,39.7320382320422 -94.9531421136041,39.7365014323348 -94.9308558369552,39.727025905148 -94.9056781107112,39.726755181953 -94.8778607324787,39.7393055627822 -94.8711850315568,39.7541179695705 -94.8770675596751,39.7606792157561 -94.9217999904165,39.7578408910459 -94.935113920798,39.7754266104547 -94.9332676532259,39.7827737328809 -94.8993236192415,39.7937754306095 -94.8885051406264,39.8173998679665 -94.898324613156,39.8283327692328 -94.9238762802993,39.833131624215 -94.9365111558861,39.8493860544701 -94.9382437203224,39.8960818279774 -94.9650237551983,39.900823541003 -95.0217725502981,39.8969786850066 -95.0335065106266,39.8778442881217 -95.0632462696611,39.8665379740374 -95.1007225558306,39.8698649954976 -95.1505514013284,39.9080546761413 -95.1939634022579,39.9101800936863 -95.2075976096638,39.9381762630214 -95.2409615197206,39.9421058384133 -95.308697209739,39.9994075748966 -95.3297013527267,39.9925950320474 -95.7807002239152,39.9934894834034 -96.0012537321721,39.995158941643 -96.2405985632704,39.9945031906408 -96.4540383019399,39.9941727522704 -96.8014203269346,39.9944759681187 -96.9082875677693,39.996154802955 -97.3619118628176,39.9973802328794 -97.8165893210891,39.9997291896237 -97.9295887050275,39.9984528583572 -98.264165776521,39.9984347815801 -98.5044791617254,39.9971296815045 -98.7206323512841,39.9984613082759 -99.0647469947207,39.9983379848291 -99.1782010360044,39.9995770488454 -99.6278593903364,40.0029878613976 -100.180910663243,40.0004787238625 -100.191111650703,40.0005855247365 -100.735049472397,39.9991723116564 -100.754855877507,40.000198282162 -101.32214863482,40.0018210447365 -101.407393337781,40.0010037120327 -102.051535596434,39.9989182728278 -102.049442507662,39.5686933622379 -102.048801584447,39.5628035180916 -102.047874719263,39.1267534832 -102.048972538957,39.0370029188915 -102.047568440936,38.6925505149901 -102.047584160548,38.6154993640496 -102.045549640322,38.2633436193344 -102.046060904132,38.2538220806459 -102.04397657417,37.7343986213713 -102.044455910114,37.6414742210535 -102.042010650289,37.3862794433515 -102.037207602599,36.9889939197762 -102.024519464501,36.9888757490654 -101.55367610944,36.9966930458734 -101.071604192395,36.9974667126978 -100.950586859868,36.996661689339 -100.634245618228,36.9978323335316 -100.088573981101,36.9976524956006 -99.9992617479432,36.9954175257409 -99.5446396923613,36.9954629108102 -99.4374736082493,36.9945583965996 -98.9995161398759,36.9980727934686 -98.540219618433,36.9983759139801 -98.3471435976306,36.9990615091091 -98.1045290729196,36.998671345032 -97.8042499377042,36.9985676282825 -97.4654049181247,36.9964671394098 -97.137692826494,36.9998082437565 -96.7486961959192,37.0001660629802 -96.5191876912757,37.0005778020035 -96.0060497122007,36.9983338098062 -95.9579609448337,37.0000828949687 -95.7857486121364,36.9981139405669 -95.5260187862325,37.0010188368678 -95.4066224459417,37.0006155845495 -95.07193109811,37.0014780674299 empty states.AREA: 39819.882 states.STATE_NAME: Virginia states.STATE_FIPS: 51 states.SUB_REGION: S Atl states.STATE_ABBR: VA states.POP2000: 7078515 states.POP2001: 7203904 states.POP00_SQMI: 178 states.DEN_0_100: 84 USStates.ID: 10 USStates.State_Name: Virginia USStates.Date_Entered: June 25 1788 USStates.Year_Entered: 1788 USStates.Year_Settled: 1607 ]]> 1788 #Style_5 clampToGround -78.8515944401178,37.5186355576459 clampToGround -79.1440627705841,36.5461983712091 -78.7964284068279,36.5436739120265 -78.7371160196983,36.5462146723402 -78.45852951752,36.5416234739225 -78.320969632811,36.5456755672774 -78.0513816756283,36.5526213891494 -77.8985687288232,36.553092111532 -77.7636386364742,36.5535891128352 -77.3197463656757,36.5540684074889 -77.1770420007847,36.5564375496145 -76.9238163662749,36.5542979883089 -76.9213138658721,36.554309439951 -76.5632556818254,36.5554041975692 -76.4972285279305,36.555964754875 -76.3299165778101,36.5562088358656 -76.1270505006232,36.5573157649444 -76.0456111690205,36.5571064340655 -76.0615119712046,36.6037440715536 -76.0268192353758,36.5568700359695 -75.9983147031585,36.5568053577451 -75.9504479930278,36.7217163055738 -75.8924987970746,36.5991754803558 -75.9016310370366,36.5563523255124 -75.877811084643,36.5560283058652 -75.9950139733037,36.9232809961133 -76.1180881453835,36.9317648123223 -76.1913251743424,36.9045892249893 -76.2019915810859,36.935217163218 -76.2838887925512,36.9628813743534 -76.3072813727656,36.9421487258181 -76.292364547027,36.8284904672678 -76.3171001179631,36.8459922903136 -76.4008510377479,36.8262860262004 -76.3937555260047,36.8360744516116 -76.3415839123642,36.8603355643402 -76.3478101840232,36.9134892559702 -76.4104728537632,36.9015610356255 -76.5068660992915,36.8696211637204 -76.561524292796,36.7957653750683 -76.5601896240839,36.841949682548 -76.4862891586355,36.8957172739011 -76.4818489715291,36.9192347267962 -76.5168462700177,36.9123341285658 -76.4891816776908,36.9618713816853 -76.5547209657637,37.0063431659281 -76.6130495959479,36.9949910493193 -76.5775030626028,37.0246421685746 -76.6653202221915,37.0542826183327 -76.6712176684662,37.1478600912415 -76.685645161367,37.1981336635524 -76.7288900906101,37.1508170290717 -76.7970759024728,37.2074500591909 -76.9005488474757,37.201202170108 -76.9411772790768,37.2367588456444 -76.8781107307919,37.2595740295398 -76.8751735425528,37.3230918648515 -76.8568543846098,37.2440482634497 -76.7956110737283,37.2405346631412 -76.7457819523891,37.1935376737801 -76.6968300960669,37.2326679371395 -76.6477715853183,37.2259840464616 -76.6097074589246,37.1787238415066 -76.6245929886695,37.1324217211094 -76.5681184950179,37.0803207193791 -76.5641662731184,37.1179178590847 -76.5149398718523,37.088514152489 -76.5307942986433,37.0677893193211 -76.4257863680259,36.9654073083815 -76.3842198846788,36.9905610883342 -76.2930065359867,37.0206351268799 -76.2785939416313,37.0744893907584 -76.3953592865513,37.1078530847975 -76.2853385910049,37.1222404792061 -76.3369841802955,37.1771522953961 -76.363451729894,37.1465709966311 -76.3965418363444,37.173174579979 -76.412663469669,37.1525377346611 -76.4243369011667,37.2074417607397 -76.5947150535785,37.2914425548303 -76.6696613320707,37.371791537835 -76.7043613440258,37.4186361406359 -76.6531660691169,37.4123446475274 -76.4608069287775,37.2555753805253 -76.392406354854,37.2935674534887 -76.4552214637676,37.3776312056936 -76.4034234546658,37.3731670284824 -76.4167524203358,37.4122746360477 -76.4636063203256,37.4190312999933 -76.4465385536332,37.4581039398615 -76.3386854412128,37.3936844160004 -76.3006361353978,37.334709868146 -76.2748553487943,37.3304598673598 -76.2542552347494,37.3903257815922 -76.3553334504997,37.5158897727623 -76.4338503734437,37.5153384215489 -76.5125278765424,37.5527130415872 -76.348306615496,37.5252852030122 -76.314309077826,37.5513349088903 -76.5691713435974,37.6420468415128 -76.6814118564158,37.7748929688243 -76.7320343979588,37.7986197228433 -76.8181881169917,37.9196415616303 -76.7715322052073,37.9168107039808 -76.6314529213585,37.7964870429673 -76.5801358444963,37.7702542208492 -76.5067605515534,37.656522918715 -76.3445385066165,37.6230595013925 -76.3227258669536,37.6779484318836 -76.3566703951832,37.700265457817 -76.309610919197,37.7192458083256 -76.3242069148735,37.7989453158794 -76.2515877836626,37.8503067866281 -76.2588665073746,37.8901582041921 -76.3674146087621,37.9570799400083 -76.5242205629273,38.0128744660371 -76.5733697756541,38.0033002605649 -76.5577218576977,38.0254593389845 -76.5487117333011,38.0742408555528 -76.5952833745998,38.1203528497159 -76.9361551677171,38.2026030889371 -76.9990543023546,38.2804019549924 -77.054232080337,38.3754764029036 -77.240401498791,38.3314974517303 -77.3215266297094,38.3441089374341 -77.2891850085122,38.3627964278078 -77.3381896271496,38.4369487883222 -77.3033228724405,38.5020331248717 -77.227296542712,38.650839442127 -77.1944511107853,38.6608832985541 -77.1969608195312,38.622817575713 -77.1296906932316,38.6482418914715 -77.1248156205481,38.6779155452061 -77.0928476424555,38.7040989116303 -77.0815787383139,38.7153939181929 -77.0568205142596,38.7121363148863 -77.0461695666273,38.7188957809267 -77.0451474225901,38.7882339432299 -77.0349466507026,38.8140284925431 -77.0448880739541,38.8294777256462 -77.0401043199647,38.8385260372666 -77.0387768115882,38.8625429508758 -77.067586179778,38.8862126841237 -77.0786490583631,38.9157112061101 -77.1223283029125,38.9321712762375 -77.151747718242,38.9648893335594 -77.2434318664787,38.9759898010602 -77.2556927153402,39.0276818620407 -77.3243065775866,39.0626960558372 -77.3462265685837,39.0686200582469 -77.4327467353536,39.0668840135464 -77.459404555923,39.0809444981026 -77.47895899133,39.1040646528751 -77.5127578441981,39.1167594573458 -77.5163278483541,39.1575488653215 -77.4783476432128,39.1770378462932 -77.4617071219601,39.2187353607732 -77.4646672485749,39.2291606204918 -77.4937734776117,39.2500146595609 -77.5419007825367,39.2690420737433 -77.5686729648781,39.298495090027 -77.616235785843,39.2998185774258 -77.6793019175109,39.3187810010414 -77.7274674809187,39.3177965867944 -77.7594582704378,39.2846433153217 -77.76823224564,39.2465502522476 -77.8054492814302,39.1966059388555 -77.8200446831256,39.1417254469273 -77.8306802289491,39.1321813411354 -78.0333283435887,39.2656393181314 -78.2295086253954,39.39111326311 -78.2768810730911,39.4234646371798 -78.3475464813471,39.4569981748093 -78.350231122076,39.380828452912 -78.3654747496783,39.3616867684635 -78.3439287233565,39.3509564427898 -78.3408462579967,39.3414581302015 -78.4135473819813,39.257540835225 -78.3991273957871,39.2449527077307 -78.4230690017269,39.2121432300896 -78.4240684786694,39.1976286478836 -78.4023622826226,39.1705945616413 -78.4305689043273,39.1486261929033 -78.4479796847525,39.1190362574345 -78.4852503468901,39.111944844534 -78.5016006690667,39.0936843045982 -78.536651424857,39.0571328491656 -78.5641793194809,39.0351455339644 -78.5492023399753,39.0234880477595 -78.5532079497434,39.0139362816423 -78.598696138461,38.967306737806 -78.6308475438714,38.9797118741506 -78.6469691460415,38.9505530737122 -78.6802270507461,38.9216841449691 -78.7189859527938,38.9049913858346 -78.724143464369,38.9303242424267 -78.7377319367122,38.9292828544161 -78.7492528843455,38.9114914729758 -78.7930553345461,38.8802192733 -78.8158608410647,38.8337457622327 -78.8665606307436,38.7634041325478 -78.9874530865749,38.8467613817813 -79.0337425168672,38.7999596842489 -79.0548004393222,38.7906328948264 -79.0565552787527,38.7620536715536 -79.0872342316746,38.7072686901771 -79.088546586161,38.6592052271367 -79.1210641516119,38.6637673801701 -79.1274272802501,38.6582438834526 -79.2316628792895,38.4804961745132 -79.2723588406108,38.4373067075038 -79.3169995976733,38.4126332297745 -79.4863475711582,38.4621448879803 -79.5365137543052,38.5538055741145 -79.642406563286,38.5923552608138 -79.6694300335236,38.5501770266588 -79.6656146350943,38.5207779063414 -79.6926537316952,38.50035433771 -79.6840924127456,38.4302381558023 -79.7200352271452,38.3946858203824 -79.7328295907797,38.35184011756 -79.7640044528342,38.3539913109909 -79.800328942629,38.3143267172637 -79.8027778583646,38.2988699252702 -79.786511146829,38.2851184419634 -79.79362179587,38.2686659933911 -79.8311519954685,38.2502792510352 -79.9161615169419,38.1792648616985 -79.9103399375918,38.1626063325108 -79.9353269126111,38.1213086373625 -79.9282922008952,38.1033111780769 -79.9575137202729,38.0673653777199 -79.9664936918756,38.0386218574803 -80.0004989600932,37.9898701188515 -80.0548072329966,37.955647953318 -80.1064907418994,37.9146585972358 -80.1185073346708,37.8912782976758 -80.1600053720503,37.8772283214768 -80.1722203908299,37.860184199113 -80.1715945425769,37.842968579238 -80.2237356887328,37.8023645289771 -80.2205461556516,37.7788585452909 -80.2546888560857,37.7572327793138 -80.2500331441419,37.7260519868 -80.3031097192157,37.6826718540633 -80.2957006530037,37.6715026681154 -80.3048626787101,37.6522463839109 -80.3009326903108,37.6405469490757 -80.2544222998619,37.6407036415196 -80.2189280037138,37.624266818855 -80.2463930602341,37.5968966073136 -80.3167216376968,37.5667185420532 -80.3259058073753,37.5334014957793 -80.3083037500729,37.5283701687601 -80.280730446809,37.5362590748033 -80.2879160750838,37.5111511482082 -80.3475109001899,37.49117712186 -80.3521568605721,37.4761016187768 -80.3883061551325,37.4657253807092 -80.4253779088728,37.4349064012949 -80.474764729883,37.4228209443336 -80.486797216389,37.4338604042898 -80.4878816034022,37.4605973242368 -80.5087647901173,37.4750470031664 -80.5427553820369,37.469210153305 -80.5974908951866,37.4460544156491 -80.7052070760613,37.388378738728 -80.7297371116507,37.3927194823309 -80.7463242442421,37.3877372428011 -80.7476897645342,37.3790816832203 -80.7629949670439,37.3714139772316 -80.7700223818732,37.3861958412097 -80.7992446500301,37.3917535437627 -80.7996113856773,37.4130624215657 -80.8505252286955,37.4234607507886 -80.8773584695865,37.3886971542785 -80.8484178042257,37.3509434223474 -80.8554293470925,37.3394115247051 -80.9341835390029,37.3013705325277 -80.9678919192932,37.2917914637641 -80.9785356077377,37.2964757957825 -80.9859367075368,37.3062413397341 -81.0249323590475,37.2860611989419 -81.1407375754125,37.2749250164035 -81.2229334626078,37.2402144799779 -81.3118727901012,37.2937070121271 -81.3587948024103,37.3389525257717 -81.3909459604383,37.3111547685878 -81.4033441778724,37.2826247386467 -81.4753603327483,37.2544223575295 -81.4955330784661,37.2528505720872 -81.5055358933554,37.2343721078399 -81.5566542800284,37.2063527636759 -81.6658857606432,37.2049100156006 -81.7017283392091,37.2354348394887 -81.7384563680184,37.2504910806821 -81.7518541120478,37.2722574759975 -81.7926591382367,37.2871534702189 -81.8153810652859,37.2795392280236 -81.8388888977451,37.2855052037829 -81.8586808412616,37.307031242764 -81.8638156687728,37.3254560597623 -81.8971581362481,37.3405886156486 -81.9268226400485,37.3717275503644 -81.9207334341144,37.4155161841344 -81.9882025293799,37.4665864944032 -81.9764218630945,37.4829057344135 -81.9479933430541,37.4930262563355 -81.9354500215799,37.5066446664438 -81.9595752559297,37.5311726196289 -82.288950934185,37.3048612192352 -82.3538423434752,37.260519600467 -82.4058850037637,37.2507041975685 -82.5500399164933,37.1993783814184 -82.56802270094,37.1939190518144 -82.7190958255562,37.1100172914789 -82.7213772601893,37.0931177496069 -82.7091701311092,37.075482281352 -82.7200576547545,37.0659298172553 -82.7235981560209,37.0339923682353 -82.8122227085558,37.0056007595079 -82.8665598432633,36.9745857651711 -82.8606320841382,36.9321623718302 -82.8780428727109,36.893694238085 -82.9508056915213,36.8640784586876 -83.0466341524314,36.8587935503694 -83.0679519281288,36.8509961538949 -83.1282206506728,36.7791526938786 -83.124390864088,36.7511676478044 -83.1385135640831,36.7400592608854 -83.203656562889,36.7342606278109 -83.3213836986153,36.7095329501122 -83.3858547999664,36.6882196347474 -83.4041505851927,36.6723273909237 -83.4602213075515,36.6618325651555 -83.5308949469604,36.6614809602143 -83.6468026223996,36.6169769718214 -83.6751767779422,36.59870387507 -83.4642098601591,36.5988401279562 -83.2750314351304,36.6004674572198 -83.2483883995918,36.5899354199083 -83.2109265056694,36.5880896531906 -82.9866971899939,36.5912897002248 -82.8498226210789,36.5910413307673 -82.610838912091,36.5915455448388 -82.2968580172995,36.591800946144 -82.2166613034295,36.5940723596186 -82.1541813077551,36.5951503366296 -81.9293033061132,36.5959506538262 -81.9182941426859,36.613608797075 -81.8288979167938,36.6115963662572 -81.6522721813828,36.6076738087692 -81.669835031007,36.5897678106349 -81.3451210093901,36.5729883010435 -80.9032404984006,36.5653420877066 -80.8379531599861,36.5635684825855 -80.6108410789519,36.557430438888 -80.4350919823622,36.5511811239687 -80.04786338902,36.5472724746821 -80.0238223180659,36.5451630012943 -79.7172016388076,36.5480278701673 -79.5100477812088,36.5477956232117 -79.2168032761496,36.5499213192211 -79.1440627705841,36.5461983712091 clampToGround -75.2703576848931,38.0277091732938 -75.346327896565,37.918920332121 -75.378212765399,37.9010985070504 -75.3444511672005,37.9020368659196 -75.385720705723,37.8757771334347 -75.3388205657156,37.8889069720989 -75.2984965865935,37.9629981027088 -75.2422192799713,38.0286475070447 -75.2703576848931,38.0277091732938 clampToGround -75.8670247481954,37.5523144055129 -75.9304116573134,37.5570210112286 -75.9543606031818,37.5219645287005 -75.9651025972256,37.4794849231046 -75.934103509734,37.4847761076545 -76.0181268821546,37.3089179962228 -75.9706381994593,37.126374539951 -75.9310399788387,37.1426441413889 -75.8967622034318,37.3675306353841 -75.8263260377899,37.4182847768698 -75.7904206187548,37.4082451150763 -75.8201385645026,37.4263412953845 -75.8126777425882,37.4691794212934 -75.7049180567879,37.493609154607 -75.7561507588602,37.5106752855114 -75.7271741932358,37.5583160220225 -75.6499176016541,37.5598879682547 -75.6991436405982,37.5896453879802 -75.5895543292298,37.6773235333573 -75.6175701346023,37.6972623777481 -75.3724205835836,38.0168338616125 -75.6260840474607,37.9965412351653 -75.6478666128507,37.9702549087239 -75.6580979764043,37.9413058795763 -75.7336306466578,37.9306942135493 -75.6863580737178,37.8582504730951 -75.6957348357321,37.8246437728104 -75.7822539886663,37.7899613984561 -75.7993745634839,37.7119219127267 -75.9056463246888,37.5923063660501 -75.8869307337319,37.5804774495128 -75.9292141475101,37.5860158544498 -75.9407574732188,37.5616861757273 -75.8670247481954,37.5523144055129 empty states.AREA: 69832.746 states.STATE_NAME: Missouri states.STATE_FIPS: 29 states.SUB_REGION: W N Cen states.STATE_ABBR: MO states.POP2000: 5595211 states.POP2001: 5646796 states.POP00_SQMI: 80 states.DEN_0_100: 93 USStates.ID: 24 USStates.State_Name: Missouri USStates.Date_Entered: Aug. 10 1821 USStates.Year_Entered: 1821 USStates.Year_Settled: 1735 ]]> 1821 #Style_5 clampToGround -92.4801886377418,38.3639901274756 clampToGround -89.1050338653654,36.9539220770253 -89.1072162055416,36.9775040571059 -89.1299298602513,36.9881656914537 -89.1935842098097,36.9868222806571 -89.2101262118458,37.0290237051986 -89.2377536103058,37.0417835282019 -89.2641303966978,37.0871742876795 -89.2843107935284,37.0912941061444 -89.3033693654427,37.0854347008365 -89.3097775142834,37.0609596218128 -89.2643196065903,37.0277834462293 -89.2620760272063,37.0087367322465 -89.28284342367,36.9992571418446 -89.3110577890705,37.0097321155337 -89.3830287336186,37.0492635096727 -89.3800701656133,37.0991331193152 -89.4238807787763,37.1372534192951 -89.4406060044902,37.165367829282 -89.4683040002904,37.2243166291394 -89.4653982268105,37.2537814318187 -89.4896835855159,37.2560512507203 -89.5139766838468,37.276452254325 -89.5139774032488,37.3050126842203 -89.5006722080316,37.329491318765 -89.4688336740249,37.3394589952529 -89.4358278942645,37.3557666795513 -89.4276653438195,37.4110680347262 -89.4537142750772,37.4532354416246 -89.4948777729593,37.4917750136486 -89.5250680585934,37.5720063661821 -89.5134636137585,37.6159786570251 -89.5192773900878,37.6504256791403 -89.5134712981473,37.6798905957089 -89.5216197606815,37.6948481923868 -89.5815353939712,37.7061554249312 -89.6665610141995,37.7455048947008 -89.6759604497414,37.784021807452 -89.6911585166015,37.8048461895875 -89.728551127852,37.8410437278203 -89.8518221998746,37.9051156711928 -89.8611532194338,37.9055391707122 -89.8669213710244,37.8919285019704 -89.900659718619,37.8759567792384 -89.937983776196,37.8780970980944 -89.9790231478271,37.9119372642027 -89.9583387204947,37.9636867798315 -90.0109221172551,37.9693709792311 -90.0420357223568,37.9932585919637 -90.1194535601973,38.0323252746278 -90.1348270564954,38.0540042508408 -90.2076442245226,38.0889589210515 -90.2541771290958,38.1222235068627 -90.2897533449443,38.1668707739162 -90.3368353674101,38.1887672607723 -90.364888938819,38.2343531960061 -90.3694659464645,38.3236130942444 -90.3588070147191,38.365383796682 -90.3397250925035,38.3909000937545 -90.3019580826576,38.4274101853512 -90.2658995864079,38.5187409219187 -90.2613445745186,38.532820806846 -90.2410570917018,38.5628573013572 -90.1838189833793,38.610322629253 -90.1836888738229,38.6588222213685 -90.2023506849595,38.7004136293542 -90.1966816483452,38.7240148841336 -90.1635076675385,38.7731473780178 -90.1352855717776,38.7855333244896 -90.1218345138212,38.8005591450278 -90.1132283291809,38.8305155786969 -90.1329204943928,38.8530794199913 -90.2440385800512,38.9145571194291 -90.2790431101957,38.9247652789138 -90.319853715721,38.9249561810614 -90.4131860400015,38.9623782480884 -90.4699576683671,38.9592275775329 -90.5305451069931,38.8916590934777 -90.5704483578896,38.8713768681923 -90.6273348623125,38.8808451829242 -90.6689997391856,38.9353034194491 -90.7061935987103,39.0378416951969 -90.7077119263589,39.0582272816598 -90.6905224771304,39.0937493584583 -90.7168599355041,39.1442594879132 -90.7183172395896,39.1959215056912 -90.7324624678238,39.2247947417977 -90.7382075249523,39.2478582113647 -90.7794691118574,39.2968502329079 -90.8506238710589,39.3504997276601 -90.9480242377645,39.4006319007784 -91.0364749082031,39.4444585084789 -91.064521543479,39.4740300232192 -91.0937507263244,39.5289731742514 -91.156329497446,39.5526394130489 -91.2033893787345,39.6000674783423 -91.3178117994405,39.6859625802781 -91.3672369870804,39.7246854919977 -91.3735696173857,39.7613181753518 -91.381863132745,39.8038177672296 -91.4493403590742,39.8630942448561 -91.4511409854999,39.885288198019 -91.4342030257459,39.9018745899127 -91.4305407730269,39.9218827311204 -91.4473948316692,39.9461098791871 -91.4874432777371,40.0057984567776 -91.5041602099787,40.0667571230242 -91.5162840506091,40.1345898206457 -91.5067014147696,40.2005039120117 -91.4990871746939,40.2514224267414 -91.486849457272,40.309668416 -91.4487471564049,40.3719466182637 -91.4770381934818,40.3910121558996 -91.4903138516326,40.3908061091367 -91.5003774954314,40.4051606084008 -91.5276917691468,40.4101689010293 -91.5296069532136,40.4350861780817 -91.5388465218747,40.441288675833 -91.533208268896,40.4554411066996 -91.5793830849706,40.4637602088021 -91.5860286246556,40.4845194169649 -91.6168601613183,40.5048738271577 -91.622536513102,40.5329033163068 -91.6920809036743,40.5516776256622 -91.6899597560415,40.5812025311316 -91.7169764048207,40.5934354677793 -91.7417117785904,40.6097843674944 -91.946370183648,40.6082666211982 -92.1931744167433,40.6000887188336 -92.3615131092551,40.5995762450555 -92.6464324165599,40.5914619056485 -92.7178154575551,40.5896671790964 -93.1009385911703,40.5843472673901 -93.3702713482939,40.5804911252976 -93.5629104610233,40.580813860252 -93.78630370096,40.5784484988924 -94.0180588623528,40.5740221097314 -94.2383917978808,40.5709661436833 -94.4852311155788,40.5742048680883 -94.639876320884,40.575744856122 -94.9206158722331,40.5772183148122 -95.2174284146974,40.5818925987708 -95.382555095884,40.5843340093787 -95.7674795852398,40.5890479952096 -95.7634123430762,40.5497071705548 -95.7370361745627,40.5323733110738 -95.692066374489,40.5241298458689 -95.687412945336,40.5611703423814 -95.6756937823346,40.5658356928502 -95.6629443739739,40.5587289616856 -95.658060770915,40.5303325450494 -95.6849704910359,40.5122051824756 -95.6953617583717,40.4853382791873 -95.6368177161418,40.3963904531026 -95.6341850229855,40.3588001619374 -95.616201682126,40.3464975474771 -95.6179334555131,40.3314179459398 -95.6455528317303,40.3223467703869 -95.6468268275221,40.309109703192 -95.5955324563708,40.3097767867205 -95.547136994341,40.2662157738894 -95.4768220929381,40.2268548930392 -95.4666366059785,40.2132555431774 -95.4609526134917,40.173995249929 -95.4224766940803,40.1317436114368 -95.3928129218653,40.1154163675868 -95.3845425063415,40.0953626542358 -95.4037843304849,40.0803791707436 -95.4137638785237,40.0481113899446 -95.390531843051,40.0437507559076 -95.37124432589,40.0287511817595 -95.3450672839917,40.0249741114216 -95.308697209739,39.9994075748966 -95.2409615197206,39.9421058384133 -95.2075976096638,39.9381762630214 -95.1939634022579,39.9101800936863 -95.1505514013284,39.9080546761413 -95.1007225558306,39.8698649954976 -95.0632462696611,39.8665379740374 -95.0335065106266,39.8778442881217 -95.0217725502981,39.8969786850066 -94.9650237551983,39.900823541003 -94.9382437203224,39.8960818279774 -94.9365111558861,39.8493860544701 -94.9238762802993,39.833131624215 -94.898324613156,39.8283327692328 -94.8885051406264,39.8173998679665 -94.8993236192415,39.7937754306095 -94.9332676532259,39.7827737328809 -94.935113920798,39.7754266104547 -94.9217999904165,39.7578408910459 -94.8770675596751,39.7606792157561 -94.8711850315568,39.7541179695705 -94.8778607324787,39.7393055627822 -94.9056781107112,39.726755181953 -94.9308558369552,39.727025905148 -94.9531421136041,39.7365014323348 -94.9617863830239,39.7320382320422 -94.978570591812,39.6849880529496 -95.0282920673642,39.6619134718391 -95.0560171833566,39.625689733093 -95.0536130925577,39.5867761785005 -95.1089880729704,39.5606920176429 -95.1020369987408,39.5328485478957 -95.0475992838867,39.4853288064319 -95.0405114608605,39.4629407284024 -94.9862042598468,39.4394616215765 -94.9584938855715,39.4114472233923 -94.9257480001496,39.3812661376612 -94.8982816593786,39.3806406678593 -94.9113435368246,39.3401217508395 -94.9076813995049,39.3230284700345 -94.8811077732328,39.2860458708519 -94.8334765331867,39.2617660205541 -94.8208192842533,39.2110046505539 -94.7900492914923,39.1968829757069 -94.7305309461746,39.171256416042 -94.6755137983894,39.1749223276416 -94.6464068497116,39.158427841948 -94.6126534522095,39.1516492526966 -94.6012243093762,39.1412276647328 -94.6081367864164,39.1128009586178 -94.6092813424634,39.0446676651878 -94.6124696654656,38.8371089096843 -94.6131481947747,38.7372224308096 -94.6187177065389,38.4714737258641 -94.6190534991515,38.3920320272517 -94.6173303263876,38.055784837357 -94.6167353371693,38.0303877411189 -94.6192936785187,37.6798689280977 -94.6189960429386,37.650374321953 -94.618764441424,37.360766482215 -94.6189775221893,37.3277322857884 -94.6206638676799,37.0601475533797 -94.6203796376912,36.9970468237132 -94.6216844155007,36.7636077108139 -94.6210734035526,36.670542870082 -94.6172570958511,36.4894141614003 -94.081052160308,36.4910242585195 -93.8575198413675,36.4897863700719 -93.5964496696149,36.489958821283 -93.3283462147977,36.4902614752819 -93.2973244136508,36.4906809019551 -92.8522757362601,36.4898845275616 -92.7776354712124,36.4899835156087 -92.5230507134162,36.4909213638459 -92.1463194477192,36.4916605516162 -92.1276422613294,36.4914354514783 -91.6885605521917,36.4910185604512 -91.4529890137038,36.4904380208107 -91.4117966736446,36.4911017707335 -91.1339563643651,36.4880156921504 -90.8044338516289,36.4892654684767 -90.5817321666723,36.4910222747631 -90.2244732820348,36.4928111285523 -90.1502594210991,36.4918729268599 -90.1373727719163,36.4574765175037 -90.1173219969686,36.4539556960145 -90.1239291860565,36.4226261953142 -90.1169251070973,36.4049759827803 -90.0802722392493,36.397449931407 -90.0521569616484,36.3826150505682 -90.0502953123909,36.3626684522717 -90.0677289950308,36.3253957469489 -90.0498451169238,36.3005360471466 -90.0661877402538,36.2723382893607 -90.1100122336982,36.2580597893355 -90.1313137741843,36.2121355814949 -90.1614048832434,36.1970066414864 -90.219321206522,36.1726309521804 -90.2323220265841,36.1612137930848 -90.2349388507527,36.1371551620637 -90.2638016451402,36.1188298079555 -90.284851770393,36.115972708427 -90.315339671655,36.0917234028765 -90.3790621785177,35.9896564265848 -90.2835541915351,35.9912280026278 -89.9632916378976,35.9969088479974 -89.7218363447502,35.9999509241088 -89.6889224254353,36.0258673598517 -89.6782489583147,36.0830408331631 -89.6674684181724,36.0993864640091 -89.5895015750109,36.1298614413181 -89.5895321928948,36.1520892518256 -89.6186393373327,36.1838116382208 -89.6768688235205,36.2209354567989 -89.695737012858,36.2408629894403 -89.6946231434343,36.252203841158 -89.6706661075896,36.2549618456545 -89.6181589550633,36.2409661142144 -89.5417253888929,36.2573462150993 -89.5354538500631,36.2646054281745 -89.5423129180961,36.2809319420685 -89.6068443100135,36.3081032648945 -89.6228741596169,36.3348474435652 -89.6057685745547,36.3548169544064 -89.5446324528964,36.3457879205654 -89.5194089670373,36.3559958746976 -89.5200804827686,36.4011227040991 -89.545258269457,36.4410234483941 -89.51609800414,36.4718722794559 -89.5332722884338,36.4981701441748 -89.5670638263092,36.5187993771114 -89.5682312249958,36.5414695145559 -89.5562146621671,36.5578036567361 -89.5304419073772,36.5646166211264 -89.493201833991,36.5591771346443 -89.4817497774818,36.5478363630808 -89.4714497533838,36.5256163547986 -89.4817572743346,36.5047581085309 -89.4758977248385,36.4986089858186 -89.4920647554293,36.4655248350446 -89.4709078461365,36.4460169670384 -89.4485913110412,36.4564423473599 -89.4147846548692,36.5026793108435 -89.4182103731204,36.5106251110882 -89.3739514963766,36.616247637228 -89.3636210686995,36.6257612726571 -89.3423955613942,36.6289083710958 -89.3223449681677,36.6220764759103 -89.2834948717057,36.5753095893361 -89.2416846800885,36.569328370687 -89.2101287779705,36.5819546744135 -89.2001876332973,36.6313576237861 -89.1771616076676,36.6530627654874 -89.1678993468083,36.6716284847978 -89.1975633899061,36.7134250574374 -89.1963655996232,36.7274780703555 -89.1772689322554,36.7609818762401 -89.1514350491696,36.7590975830134 -89.1255402582893,36.7680887738915 -89.1259067613141,36.7924680183802 -89.1644441219421,36.804476214643 -89.1735313341446,36.8294390146117 -89.166565665821,36.8434768543693 -89.1296537695887,36.8664945361285 -89.1050338653654,36.9539220770253 empty states.AREA: 113712.679 states.STATE_NAME: Arizona states.STATE_FIPS: 04 states.SUB_REGION: Mtn states.STATE_ABBR: AZ states.POP2000: 5130632 states.POP2001: 5312024 states.POP00_SQMI: 45 states.DEN_0_100: 96 USStates.ID: 48 USStates.State_Name: Arizona USStates.Date_Entered: Feb. 14 1912 USStates.Year_Entered: 1912 USStates.Year_Settled: 1776 ]]> 1912 #Style_5 clampToGround -111.664591949232,34.2916834221835 clampToGround -114.520627661734,33.0277074359678 -114.46838719789,32.9777894659032 -114.476443984447,32.9359088466692 -114.461436322021,32.8454225112401 -114.52621949202,32.8099123509472 -114.535077445153,32.7880470474354 -114.530095237266,32.7714115230303 -114.543187695964,32.7712322843312 -114.543004547133,32.7607497409074 -114.561582708233,32.7607536245719 -114.560751027253,32.7489359768297 -114.572210733513,32.7488292120028 -114.571958909536,32.7374388920444 -114.603522692176,32.7358864782619 -114.603942285241,32.7262851953269 -114.694040667724,32.7414255804573 -114.712695098447,32.7350133484495 -114.722048985451,32.7208574919907 -114.809393825306,32.6160446571158 -114.821761241294,32.4871692613767 -113.329111283827,32.0436210627154 -111.369520893713,31.4315316679729 -111.071964747137,31.335634013396 -110.45257840211,31.3376602308857 -109.045615049533,31.3434530504803 -109.049495308693,32.4420444958635 -109.051346155985,32.7795505537932 -109.050525833602,33.205164822801 -109.050349253456,33.7833019238717 -109.048652751175,34.5917805775226 -109.046640810431,34.9546462439613 -109.047846506598,35.9966639816639 -109.048480115363,36.9966409005893 -109.997076712711,36.9920675592929 -110.452235819472,36.9917463039985 -110.484088956249,37.0039260237973 -110.740062961138,37.002488042411 -111.356163994142,37.0017097524257 -112.2372578615,36.9954921751891 -112.542521578828,36.9979944864436 -112.899983474169,36.9962268765574 -114.043939384154,36.9965379371421 -114.043716435713,36.8418489458646 -114.037392074194,36.2160228969701 -114.045105557286,36.1939778840226 -114.107775185788,36.1210907070504 -114.12902308363,36.041730493896 -114.206768869568,36.0172554164833 -114.233472615347,36.0183310595898 -114.307587598189,36.0622330993642 -114.303857056018,36.0871084040611 -114.316095374696,36.1114380366653 -114.344233941709,36.1374802520567 -114.380803116644,36.1509912717764 -114.443945697733,36.1210532841896 -114.466613475422,36.1247112590538 -114.530573568745,36.1550902046726 -114.598935242024,36.1383354528833 -114.621610747198,36.1419666834504 -114.712761724737,36.1051810523675 -114.728150311069,36.0859627711603 -114.728966012834,36.0587530361082 -114.717673567756,36.0367580437019 -114.736212493583,35.9876483502758 -114.699275906446,35.9116119537411 -114.661600122152,35.8804735854241 -114.662462095522,35.870959907009 -114.689867343369,35.8474424944765 -114.682739704595,35.7647034175617 -114.688820027649,35.7325957399896 -114.665091345861,35.6930994107106 -114.668486064922,35.6563989882403 -114.654065925137,35.6465840800051 -114.6398667219,35.6113485698329 -114.653134321223,35.5848331056106 -114.649792053474,35.5466373866596 -114.672215155693,35.5157541647721 -114.645396168451,35.4507608261464 -114.589584275424,35.3583787306827 -114.587889840369,35.30476812919 -114.559583045727,35.2201828714608 -114.561039964055,35.1743461616312 -114.572255261053,35.1400677445931 -114.582616239058,35.1325604694084 -114.626440825485,35.1339067529871 -114.6359090842,35.1186557767895 -114.595631971944,35.0760579746697 -114.633779872695,35.0418633504303 -114.621068606189,34.9989144286133 -114.632276529502,34.9976517256292 -114.621007388662,34.9436098418844 -114.630475658748,34.9195012881626 -114.627263440015,34.8755338147028 -114.570216833129,34.8318604389449 -114.542040692552,34.7599586200401 -114.525553173554,34.7489115709666 -114.497804378448,34.744757644472 -114.465637688895,34.7098730189755 -114.422270356442,34.6108950917792 -114.434302240724,34.5989628909914 -114.409742349408,34.5837235617841 -114.376827822772,34.5365634767276 -114.38386203177,34.4770856153635 -114.376506947621,34.4596793685379 -114.332636412337,34.4548730796034 -114.302865366738,34.4357541377741 -114.283394304634,34.4120690064366 -114.257842521563,34.4054888215522 -114.182079822361,34.3652063649643 -114.153414997679,34.3364477645527 -114.134127057818,34.3145478754142 -114.125230507624,34.2726209662778 -114.149912368725,34.2669789901846 -114.235775821971,34.1862227475521 -114.285368523229,34.1712309584447 -114.322799430739,34.1412972664816 -114.410166357368,34.1026543641334 -114.424029195647,34.0783320579769 -114.428980324296,34.0298439872115 -114.518208552815,33.9650630904256 -114.525632127364,33.9524137553973 -114.49818809185,33.925036256846 -114.520962184241,33.8629263802443 -114.511722548733,33.84196501578 -114.521122162519,33.8260312846707 -114.504557871757,33.7717148133963 -114.510287510185,33.7432004976418 -114.49567644704,33.708369427689 -114.53643355935,33.6827352282095 -114.525263594507,33.6655047006994 -114.527170510583,33.6221365140121 -114.54024720611,33.5805077718081 -114.52942054662,33.5600729749772 -114.58706170624,33.5094455578288 -114.598086338819,33.4861269505736 -114.621089578986,33.4685989080523 -114.630573116436,33.4394249456214 -114.645092242143,33.4191160810556 -114.724936284952,33.4110596377436 -114.703603782165,33.3524180309387 -114.735426988668,33.3057084351637 -114.677693392037,33.2680165177413 -114.687711074888,33.2392582971895 -114.680050859029,33.2245949425206 -114.678120399612,33.1672499413879 -114.709463019649,33.122374935038 -114.711355133911,33.0953827798915 -114.663951695926,33.0389226888334 -114.645159759737,33.0444118730784 -114.633966945552,33.0335669165654 -114.609925720105,33.0270019226895 -114.559089057602,33.036782479158 -114.520627661734,33.0277074359678 empty states.AREA: 70003.325 states.STATE_NAME: Oklahoma states.STATE_FIPS: 40 states.SUB_REGION: W S Cen states.STATE_ABBR: OK states.POP2000: 3450654 states.POP2001: 3477711 states.POP00_SQMI: 49 states.DEN_0_100: 96 USStates.ID: 46 USStates.State_Name: Oklahoma USStates.Date_Entered: Nov. 16 1907 USStates.Year_Entered: 1907 USStates.Year_Settled: 1889 ]]> 1907 #Style_5 clampToGround -97.5094585942961,35.583978004302 clampToGround -94.4393221493475,34.9291508772006 -94.4285520120899,35.4005462695086 -94.4684852110367,35.6410882624306 -94.485934826059,35.7603104941298 -94.5424172738563,36.1068358038929 -94.5531136198804,36.1645252110653 -94.6074528321546,36.4787903547 -94.6172570958511,36.4894141614003 -94.6210734035526,36.670542870082 -94.6216844155007,36.7636077108139 -94.6203796376912,36.9970468237132 -95.0327450815612,37.0007794392778 -95.07193109811,37.0014780674299 -95.4066224459417,37.0006155845495 -95.5260187862325,37.0010188368678 -95.7857486121364,36.9981139405669 -95.9579609448337,37.0000828949687 -96.0060497122007,36.9983338098062 -96.5191876912757,37.0005778020035 -96.7486961959192,37.0001660629802 -97.137692826494,36.9998082437565 -97.4654049181247,36.9964671394098 -97.8042499377042,36.9985676282825 -98.1045290729196,36.998671345032 -98.3471435976306,36.9990615091091 -98.540219618433,36.9983759139801 -98.9995161398759,36.9980727934686 -99.4374736082493,36.9945583965996 -99.5446396923613,36.9954629108102 -99.9992617479432,36.9954175257409 -100.088573981101,36.9976524956006 -100.634245618228,36.9978323335316 -100.950586859868,36.996661689339 -101.071604192395,36.9974667126978 -101.55367610944,36.9966930458734 -102.024519464501,36.9888757490654 -102.037207602599,36.9889939197762 -102.997709442614,36.9985238353847 -102.997400999016,36.4923701848871 -102.165673606983,36.4902341370994 -102.034658387679,36.4929809605896 -101.62075555527,36.4920314454728 -101.090102366885,36.4880502722289 -100.957341408628,36.4896376715563 -100.549839323196,36.4894790903428 -100.007272948555,36.493912716666 -100.001550693503,36.4925547831533 -99.9975536187421,36.0575913818302 -99.9981231250644,35.8838375261918 -100.000392481852,35.6188562203977 -99.9947434205996,35.4246221647218 -99.9975702180927,35.1822350834532 -99.9964550579162,35.0310510336069 -99.9992599692516,34.7472433686446 -99.9964752628992,34.5623839445524 -99.9724799649576,34.5619266989846 -99.9451200138402,34.5796346298626 -99.9322869251129,34.5791733267958 -99.8809773252755,34.5482418940255 -99.8609492850859,34.5186945590413 -99.8303083799016,34.501846255188 -99.7780602586162,34.4440642714861 -99.6852769049209,34.3775206620374 -99.601817403152,34.3686339710267 -99.5855894788699,34.3849338835776 -99.5782194991147,34.4089886853491 -99.5542323165501,34.4152563856433 -99.5025040549412,34.4041453149585 -99.4798058594252,34.3836002544386 -99.4387432079319,34.3647833428937 -99.4103230107381,34.3691856116386 -99.3945224149831,34.3968223241289 -99.3931570632619,34.429070725134 -99.3645692443735,34.4502723758117 -99.3236589705133,34.4127869472387 -99.2675355299914,34.3983645544 -99.254465637826,34.3682943923503 -99.2058491943277,34.3320754835343 -99.1966628127821,34.3052057476053 -99.2049556166617,34.2557306955242 -99.1908403575301,34.2238215675651 -99.1765117843417,34.2128165213261 -99.128300139337,34.2015562705675 -99.0787841261402,34.2084460436583 -99.0355699010075,34.1990091275048 -98.9965446165054,34.2095837062186 -98.9528568855168,34.1946535863845 -98.8916893852997,34.1609098971274 -98.8114099222656,34.146025924858 -98.7788769243201,34.1320532580559 -98.7056322596678,34.1308063642615 -98.6825527604991,34.1500893803379 -98.662059500855,34.147129344828 -98.6263299881177,34.158527616426 -98.6075838723519,34.1514897431627 -98.5766684370536,34.1420220197199 -98.5579143286446,34.1054284628805 -98.4998521726901,34.066508171909 -98.4485195081449,34.0544693031052 -98.4216707502906,34.0659246412843 -98.4074643999688,34.0825487630451 -98.3912818493027,34.087324681805 -98.3845831608253,34.115873277508 -98.3507302631885,34.1422132177566 -98.3208141218597,34.1395124845584 -98.277324712945,34.1229647210219 -98.1731642842845,34.1154615363479 -98.137182702728,34.1385247073243 -98.1151863290391,34.1490797537232 -98.0944412742753,34.1346491348156 -98.1110054333052,34.0699152608686 -98.0865219710926,34.0054103575962 -98.0558736752466,33.9898964139123 -98.0238062114244,33.9870813155941 -97.982995159825,34.0013824361846 -97.9505389343141,33.9712584919282 -97.9480670006949,33.9598489691416 -97.9633110473011,33.9487483818417 -97.9509969270951,33.9326163854516 -97.9764418443808,33.9121508879515 -97.976693678767,33.9026028951239 -97.9550485337835,33.8835794315438 -97.9093776206948,33.8741230741104 -97.8700622202223,33.8552140577552 -97.8528573913232,33.857170989043 -97.7905155572151,33.8905567127498 -97.7566704070426,33.932197269678 -97.7293258131798,33.9393918135487 -97.7045675638129,33.9716446286772 -97.6713709731313,33.9887114388077 -97.6004841716436,33.9695357487998 -97.5926564722634,33.9179850917189 -97.5759705845528,33.9026313915672 -97.5548899378437,33.9040048081949 -97.518504189706,33.91687174991 -97.4778308298091,33.9078083743386 -97.4630599713817,33.9024831837152 -97.4573607393012,33.890532021605 -97.4530350911297,33.8363150195283 -97.4104161629105,33.8208124550832 -97.3636160759387,33.8311271478817 -97.3421004874611,33.8620178329205 -97.3152518941801,33.8704938884378 -97.3143820721958,33.8959411317283 -97.2725718980817,33.8726758421186 -97.264202229241,33.8588326323233 -97.2509801252754,33.8730725605007 -97.2463565890575,33.8943389990746 -97.211626649478,33.905790476719 -97.1880588051263,33.899305664185 -97.1644603868134,33.8632500271984 -97.1688855338722,33.8478962336794 -97.1953068554539,33.8362616577426 -97.2086128811281,33.8197520263932 -97.1894548414756,33.7528743688857 -97.1527639551762,33.7287737567957 -97.1158518152657,33.7260387447849 -97.0907885075272,33.7317759436109 -97.0837540270329,33.7425178691231 -97.087958150994,33.8076751203943 -97.0503136942646,33.8235515468502 -97.0785356759137,33.8379135029825 -97.0824649674126,33.8512035820318 -97.0711884256134,33.8568301349417 -97.0258837487447,33.8406638868468 -97.006138364555,33.8506162080499 -96.9879951562104,33.876524993445 -96.9881480778014,33.9443028760324 -96.9684711058252,33.9374213261378 -96.9364875549014,33.9479496295896 -96.9298498138604,33.9618729385895 -96.8987359278797,33.9501277640988 -96.8831330827039,33.9246919643211 -96.8792188051043,33.8841045463944 -96.861296536343,33.8617814536899 -96.8442899442748,33.8581346758361 -96.8143969338763,33.8718710579623 -96.7978710251696,33.8700514781673 -96.7491017928465,33.8318404880575 -96.7119531575884,33.8339726711759 -96.6936574485524,33.8480065285136 -96.6779791464851,33.9044245192975 -96.6665119406885,33.9136443690811 -96.5847604712561,33.8962455118061 -96.6144392538749,33.8630013562452 -96.6014686489895,33.8430585200471 -96.562404728742,33.8255225751035 -96.5108435468467,33.8157874455655 -96.5010161448864,33.7881925349614 -96.4876412927335,33.7782325064272 -96.4197303821717,33.7884284828286 -96.3710832530533,33.7404975591171 -96.3478505584012,33.705631801563 -96.3165386076739,33.701904716619 -96.3010507089615,33.7141533419418 -96.2899427899173,33.7620342928024 -96.2783383659012,33.7734894901909 -96.212807166385,33.7567925567755 -96.187286010662,33.758684486151 -96.1690742422207,33.769456890815 -96.16157487608,33.7983297326873 -96.1416772177066,33.8204201506892 -96.1547773844146,33.824044081131 -96.1809848937133,33.8085339108482 -96.1833883750355,33.8158923202814 -96.1694645416653,33.8290832377136 -96.1492232448427,33.83569011079 -96.1097015860178,33.8293577291253 -96.0917799018523,33.8446772338064 -96.0482298648812,33.8413774764797 -96.0270045674164,33.8561209977346 -96.0143238316783,33.8443070387318 -96.0020480603943,33.8570784239774 -96.0028724620981,33.8734890044101 -95.9944645860288,33.8754764816195 -95.9776482488988,33.8580513457492 -95.959016632946,33.8651391176183 -95.9433228800981,33.8900718041244 -95.9333279503365,33.8906288422977 -95.8468057390447,33.8411382296162 -95.8262207930479,33.8431258316945 -95.7957252595447,33.8647743475285 -95.7687615327479,33.8515033166903 -95.7644970987573,33.8791063735621 -95.7609419495455,33.8935411571276 -95.7471094802783,33.9034976338912 -95.699950264818,33.8949267760162 -95.6337327152473,33.9202077191712 -95.6132241254837,33.9203415546903 -95.6150707735962,33.9367942616433 -95.6063120146191,33.944656465691 -95.5630133970639,33.9361771034426 -95.5465557208432,33.9041378125257 -95.5198137250544,33.9067474752702 -95.5269702512685,33.8979201785035 -95.5477305426273,33.8932621235845 -95.5442741981764,33.8858464269672 -95.5131223838212,33.8978402854978 -95.4990912324293,33.881822624598 -95.4683594777338,33.8865378582277 -95.4518412564926,33.8658586121364 -95.3302721231422,33.8710248450986 -95.3364600240519,33.8972201452204 -95.3021879677536,33.8867301071625 -95.2866618452793,33.8870087194903 -95.2775830967312,33.9180449387556 -95.2638496479375,33.8979074295118 -95.2512228467789,33.9051287029656 -95.2515208198696,33.9365500995153 -95.2342706406141,33.9649694417437 -95.1485440072872,33.9436534386509 -95.1281957981282,33.9409756193022 -95.1269061751991,33.9172521426231 -95.1194520041495,33.9123884529818 -95.0955866692645,33.9218451265293 -95.0824942336751,33.918560731634 -95.0899405612146,33.8970230129184 -95.0838291836962,33.8885696946472 -95.063702501233,33.9177558985992 -95.0633666513125,33.8968018383347 -95.0430870883205,33.884552938792 -95.0375860361542,33.8665590741676 -95.0129958687657,33.8700533810898 -94.9895041088505,33.8562900729299 -94.9689268286841,33.8663228494762 -94.9601296578001,33.8481840346416 -94.9401092314068,33.8409324203509 -94.9406202496941,33.8159156370392 -94.9184559016621,33.816304855563 -94.9087660493324,33.8035866991384 -94.9140991208061,33.7897049819208 -94.8818557435802,33.7750719362582 -94.8580964984281,33.7494296047539 -94.8193755593854,33.7495136716343 -94.8034369944365,33.7396910082834 -94.7837218171255,33.7533704682922 -94.764388047197,33.7529509233106 -94.782241592951,33.742376603757 -94.7833707776319,33.7337745678945 -94.7499830723432,33.7368149801429 -94.762930719398,33.7169062835784 -94.7423230158561,33.719157166445 -94.7546906224197,33.7078808674656 -94.7418652471894,33.7013771094591 -94.6911973285714,33.6903997057713 -94.6686672548934,33.6966486225785 -94.6556893557214,33.6924032061402 -94.6445348646206,33.6777628005194 -94.6681636112439,33.671571088102 -94.6696360986615,33.6661733181553 -94.658748689806,33.663850430669 -94.6389728704755,33.6702175285534 -94.6319461140036,33.6840114940994 -94.6011530580164,33.6657208732496 -94.5853141750945,33.6790954380738 -94.578714527779,33.6705850642858 -94.5609300134862,33.672027401142 -94.5654161185401,33.6631276811661 -94.5853674451404,33.6622460583057 -94.588594701575,33.6555626943339 -94.5766696456491,33.6522708940353 -94.5456249915409,33.6617357579767 -94.542138136751,33.6483615972293 -94.5624022483444,33.6429443355883 -94.5623564026099,33.6356506902792 -94.5504008155195,33.632809011294 -94.5181964559493,33.6431245606389 -94.5252611988716,33.6211366353993 -94.5107650959474,33.6309253877013 -94.5008160172467,33.6231627285535 -94.4766912623089,33.6320818342933 -94.4685848873093,33.9393114556774 -94.4616914490383,34.1967651932869 -94.4526240459217,34.5084326818174 -94.4459610753436,34.7356081162875 -94.4393221493475,34.9291508772006 empty states.AREA: 49048.024 states.STATE_NAME: North Carolina states.STATE_FIPS: 37 states.SUB_REGION: S Atl states.STATE_ABBR: NC states.POP2000: 8049313 states.POP2001: 8225753 states.POP00_SQMI: 164 states.DEN_0_100: 85 USStates.ID: 12 USStates.State_Name: North Carolina USStates.Date_Entered: Nov. 21 1789 USStates.Year_Entered: 1789 USStates.Year_Settled: 1660 ]]> 1789 #Style_5 clampToGround -79.4013155346895,35.5472650672799 clampToGround -83.9884542500545,34.9891518047362 -83.9378991314943,34.9894775119032 -83.5492972918908,34.9896284845873 -83.5128876420542,34.9921157535224 -83.1061569738507,35.000366708131 -83.0071465788827,35.0242932065357 -82.8875562556649,35.055473206413 -82.7712011457841,35.0855376628965 -82.6972082635003,35.0913494747721 -82.6878846328013,35.0979182706584 -82.6859002249553,35.1215804311176 -82.654344125494,35.1195740504075 -82.5698759075391,35.1496073738685 -82.524479651378,35.1546774490548 -82.4665859914405,35.1736172290209 -82.4377613823112,35.1696762171977 -82.389450685395,35.2083565365976 -82.3712159851947,35.1828397610023 -82.3599623343986,35.1830646579415 -82.3507000333949,35.1927881586207 -82.3206088962679,35.1843038355905 -82.278165577144,35.1951216082193 -82.2100104423684,35.1932410593964 -81.9712727030758,35.1884000260399 -81.8704165711924,35.1832378034331 -81.7651810887702,35.1825960728566 -81.3619801868632,35.1629867122026 -81.3226257414279,35.1638918108331 -81.0490990166388,35.1516727757939 -81.0488397402735,35.1321534001715 -81.0282405888455,35.1055509640026 -81.0653500212191,35.0666253067042 -81.0396852000525,35.0373453689435 -80.9275918870396,35.1013947091143 -80.8945103715547,35.0598808081622 -80.8399590540857,35.0021664433249 -80.785444630059,34.940788108541 -80.7998557787081,34.8162600736923 -80.5613348947421,34.815379673307 -80.3250654065352,34.8149167168925 -79.9197366317695,34.8080740704278 -79.685738680014,34.8054127206548 -79.6672823384891,34.8008202005653 -79.4557408419562,34.6342519700477 -79.4469133528043,34.6192221953644 -79.0742575899197,34.3047384944277 -78.6554531485329,33.9488449988485 -78.5794534961072,33.8821646134616 -78.0345179035716,33.9144655035987 -77.9582366437943,33.9927535951154 -77.9604422302876,34.1894138394024 -77.9264668205974,34.0622068781286 -77.8941093131723,34.0693517444618 -77.864094387908,34.1929080636859 -77.7502285952169,34.3052152556069 -77.6023097576188,34.4127961619157 -77.6094206317085,34.4352111182146 -77.5864550656894,34.4211044558942 -77.5383263663552,34.4571757451115 -77.1562743412922,34.6607994551356 -77.1290670525932,34.6850758053643 -77.1486300958301,34.7644928793749 -77.0501990668688,34.6990792872107 -76.6249630133433,34.7199152319966 -76.4695458041867,34.7852234003552 -76.3143487428846,34.9489790362954 -76.3290439177373,34.9761204263875 -76.3636527631416,34.9432753199548 -76.4236996410833,34.9464101060141 -76.4446746901305,35.016821613356 -76.5294259321625,34.9747977981923 -76.6697122942527,34.9701586610467 -76.6467009989299,34.9064952538138 -76.9127729052447,34.9366300082455 -77.0008586302893,35.0530463230032 -77.1102605545238,35.0661954508922 -77.1043475272177,35.0881454936049 -77.0475521473705,35.0923150966989 -76.9429100387865,35.0701945880484 -76.9411555433733,35.0275875339288 -76.8491252863471,34.982379921273 -76.6776621128775,35.0242480871668 -76.6238729550724,35.0645133662679 -76.604874831574,35.1387263355658 -76.6397413585737,35.1726863005469 -76.5067751417852,35.2489330964746 -76.5406269919479,35.3038542452018 -76.5908594670962,35.3122475613847 -76.6141670362876,35.2730867333754 -76.6945524996528,35.3505941243399 -76.9828539904483,35.4366636706378 -77.1034438790242,35.5503488031328 -76.7050292785914,35.4121010752802 -76.6284211127021,35.4380631232604 -76.6378528390625,35.5205015679941 -76.4921880342737,35.541952401491 -76.5185953789444,35.5778101645251 -76.4461736845969,35.5510316355737 -76.458082231863,35.504591725145 -76.5334021337843,35.450365283595 -76.4984509695288,35.4163837561328 -76.1812522373613,35.3417018841534 -76.052608315449,35.4147748843318 -75.8911218547511,35.6314373307933 -75.7786728668737,35.5788596630665 -75.7289890066234,35.665346355358 -75.7485844806443,35.8695079102707 -75.8176810806274,35.9236843388724 -75.9874915558738,35.8928678030293 -76.0208445240034,35.6692594940877 -76.1043820216892,35.6638050456577 -76.1669465551588,35.6970078077113 -76.0427040337583,35.684014363844 -76.0755518909748,35.7569647798523 -76.0256869103623,35.9205848840211 -76.0892822391223,35.9630733048323 -76.2134199143401,35.9770370290936 -76.371139191748,35.932505477407 -76.4091283531839,35.9776289262675 -76.6968862093037,35.9417048325409 -76.7407945732609,35.9367873881772 -76.693430938163,35.993130374768 -76.7603450631722,36.1447501886056 -76.7447362584297,36.2340736323403 -76.7071685217467,36.2662883637951 -76.7410223774041,36.3153219069784 -76.9237608844299,36.3925988375605 -76.7763179923306,36.3584847061625 -76.6884078720477,36.294673224779 -76.7261797744452,36.1569800114938 -76.6898230006157,36.0497700530899 -76.6328753964642,36.037277484565 -76.6486843529633,36.0658679998712 -76.5936664733568,36.0102930907247 -76.5226729428308,36.0073295870634 -76.4200856773769,36.0587660161274 -76.4801920625066,36.0799523645649 -76.2751614487396,36.1105304965543 -76.2985852794586,36.2143873673267 -76.2346329999873,36.1635194405906 -76.1415877116506,36.1478486946883 -76.1123584511714,36.1745780626302 -76.2185584113341,36.2967645788658 -76.1828209798244,36.3153954875583 -75.9809812344828,36.1698863401472 -75.9568257994211,36.1939309437328 -76.0086191458258,36.3197530400297 -75.9415760202413,36.2944972863716 -75.9571554546035,36.2596123902831 -75.9134059470765,36.2449609601768 -75.8547970349572,36.1058289194759 -75.7984798262459,36.0729822151271 -75.799686786926,36.1129789671118 -75.9242345411069,36.3511064253818 -75.9277683790559,36.4234009903646 -75.9509007725851,36.3656283397926 -76.001257877674,36.4190705700709 -75.9694113211707,36.4152753792118 -75.9757214341436,36.436370152828 -76.0907173497589,36.503720365701 -76.0328614410073,36.5145275392771 -76.0456111690205,36.5571064340655 -76.1270505006232,36.5573157649444 -76.3299165778101,36.5562088358656 -76.4972285279305,36.555964754875 -76.5632556818254,36.5554041975692 -76.9213138658721,36.554309439951 -76.9238163662749,36.5542979883089 -77.1770420007847,36.5564375496145 -77.3197463656757,36.5540684074889 -77.7636386364742,36.5535891128352 -77.8985687288232,36.553092111532 -78.0513816756283,36.5526213891494 -78.320969632811,36.5456755672774 -78.45852951752,36.5416234739225 -78.7371160196983,36.5462146723402 -78.7964284068279,36.5436739120265 -79.1440627705841,36.5461983712091 -79.2168032761496,36.5499213192211 -79.5100477812088,36.5477956232117 -79.7172016388076,36.5480278701673 -80.0238223180659,36.5451630012943 -80.04786338902,36.5472724746821 -80.4350919823622,36.5511811239687 -80.6108410789519,36.557430438888 -80.8379531599861,36.5635684825855 -80.9032404984006,36.5653420877066 -81.3451210093901,36.5729883010435 -81.669835031007,36.5897678106349 -81.7026326964311,36.5194602645637 -81.6981148990988,36.4718999796584 -81.7409080103685,36.3919078496119 -81.7402131763359,36.36198253433 -81.7092898793205,36.3338502743492 -81.7303246226996,36.329467183951 -81.8304104053052,36.3347789811478 -81.9109940382706,36.2908752993263 -81.9329516991561,36.2634442248774 -82.0202949598283,36.1298343126582 -82.0776021235396,36.1002602555009 -82.1179256052358,36.0963748384003 -82.1539009606375,36.1397376377449 -82.2075845767752,36.1471275332235 -82.2621599370151,36.1204875660764 -82.3117836863643,36.1222605725301 -82.373713428402,36.0988071608409 -82.4082829106663,36.075426604695 -82.4750552128438,35.9932844245825 -82.5067939197477,35.9726503280575 -82.5540052334424,35.9562159294434 -82.5991649014314,35.9634057475641 -82.6056664709886,36.0036541966122 -82.5920942382027,36.0225560968714 -82.6042642564967,36.0430940692888 -82.627908811062,36.0544461489244 -82.6437553482122,36.0518290360149 -82.7630949285561,35.999650015691 -82.7734633268223,35.9876068957838 -82.776308441769,35.9566773412235 -82.808535161382,35.9209751642818 -82.8561371221602,35.9475285534576 -82.8958417812556,35.9484625785516 -82.9139387446782,35.9279697450405 -82.906689137747,35.8723171942072 -82.9626197710807,35.7919519408503 -82.9868738379453,35.7740910698457 -83.0598287433232,35.7826768094939 -83.1180576454199,35.7639076045034 -83.1435329978657,35.762781885683 -83.1852205412256,35.7289833858793 -83.2437245319139,35.7183129960111 -83.2531774390013,35.7008036610277 -83.2589987919444,35.6911067450186 -83.2982915815667,35.6564233114235 -83.3429028242336,35.6533554944088 -83.3869721437248,35.625313192169 -83.4581731409302,35.5973733030352 -83.5056836752714,35.5596454175324 -83.5609226274862,35.5552687853695 -83.6137506282731,35.5718308753539 -83.6727662732265,35.5650623686071 -83.77577472166,35.5526929432439 -83.8300980940741,35.519149329024 -83.8811254036276,35.5106719867731 -83.9099126259032,35.4765642431448 -83.9546078411811,35.4555443092538 -84.0125567453702,35.4077068120234 -84.0062173183803,35.3729437031099 -84.0291152582165,35.3253739821258 -84.0307716891057,35.2926057594707 -84.0426897213918,35.2726584543483 -84.1015606900614,35.2456337418504 -84.1796426644509,35.2410694819878 -84.2258631170914,35.2616828718238 -84.2909595168732,35.210622280084 -84.3237734916339,34.989090556154 -84.118152397807,34.9883069959845 -83.9884542500545,34.9891518047362 clampToGround -76.0268192353758,36.5568700359695 -75.975936273767,36.5180793801967 -75.9769275698946,36.4781707412753 -75.9244503389182,36.4741316082296 -75.9115647487463,36.5426843995728 -75.9983147031585,36.5568053577451 -76.0268192353758,36.5568700359695 clampToGround -75.9016310370366,36.5563523255124 -75.7828060806813,36.2253555177264 -75.7404920642807,36.0504887346377 -75.7023588136975,36.050028033628 -75.5445786711917,35.7885380495047 -75.7727883049482,36.2294182919327 -75.877811084643,36.5560283058652 -75.9016310370366,36.5563523255124 clampToGround -75.4908240267188,35.6706779442836 -75.4750201903482,35.5646750837636 -75.5210802546276,35.2815348139534 -75.6911717207235,35.2351648510944 -75.7488987595512,35.1900017864003 -75.5258935723245,35.2280944215419 -75.4565804266586,35.6175774238916 -75.5332327857941,35.7690344819007 -75.4908240267188,35.6706779442836 clampToGround -76.0166279556301,35.0696051226092 -76.0024976111832,35.0696053699945 -75.9035624791645,35.1326642006003 -75.811150308907,35.1641942791106 -75.7633115559187,35.1924582338 -75.8535493545865,35.1674551809437 -75.9753132102613,35.1163551414779 -76.0166279556301,35.0696051226092 clampToGround -76.5439188750827,34.5879943309158 -76.4689040756159,34.6934466158692 -76.2873389732944,34.8771752332838 -76.3743185624321,34.8130336904105 -76.4319383785899,34.7608479437727 -76.484125508936,34.697795135324 -76.5373956696427,34.6140864557391 -76.5547914497339,34.6108248279411 -76.5439188750827,34.5879943309158 empty states.AREA: 42091.813 states.STATE_NAME: Tennessee states.STATE_FIPS: 47 states.SUB_REGION: E S Cen states.STATE_ABBR: TN states.POP2000: 5689283 states.POP2001: 5773929 states.POP00_SQMI: 135 states.DEN_0_100: 88 USStates.ID: 16 USStates.State_Name: Tennessee USStates.Date_Entered: June 1 1796 USStates.Year_Entered: 1796 USStates.Year_Settled: 1769 ]]> 1796 #Style_5 clampToGround -86.3340670065268,35.8467078879312 clampToGround -83.9546078411811,35.4555443092538 -83.9099126259032,35.4765642431448 -83.8811254036276,35.5106719867731 -83.8300980940741,35.519149329024 -83.77577472166,35.5526929432439 -83.6727662732265,35.5650623686071 -83.6137506282731,35.5718308753539 -83.5609226274862,35.5552687853695 -83.5056836752714,35.5596454175324 -83.4581731409302,35.5973733030352 -83.3869721437248,35.625313192169 -83.3429028242336,35.6533554944088 -83.2982915815667,35.6564233114235 -83.2589987919444,35.6911067450186 -83.2531774390013,35.7008036610277 -83.2437245319139,35.7183129960111 -83.1852205412256,35.7289833858793 -83.1435329978657,35.762781885683 -83.1180576454199,35.7639076045034 -83.0598287433232,35.7826768094939 -82.9868738379453,35.7740910698457 -82.9626197710807,35.7919519408503 -82.906689137747,35.8723171942072 -82.9139387446782,35.9279697450405 -82.8958417812556,35.9484625785516 -82.8561371221602,35.9475285534576 -82.808535161382,35.9209751642818 -82.776308441769,35.9566773412235 -82.7734633268223,35.9876068957838 -82.7630949285561,35.999650015691 -82.6437553482122,36.0518290360149 -82.627908811062,36.0544461489244 -82.6042642564967,36.0430940692888 -82.5920942382027,36.0225560968714 -82.6056664709886,36.0036541966122 -82.5991649014314,35.9634057475641 -82.5540052334424,35.9562159294434 -82.5067939197477,35.9726503280575 -82.4750552128438,35.9932844245825 -82.4082829106663,36.075426604695 -82.373713428402,36.0988071608409 -82.3117836863643,36.1222605725301 -82.2621599370151,36.1204875660764 -82.2075845767752,36.1471275332235 -82.1539009606375,36.1397376377449 -82.1179256052358,36.0963748384003 -82.0776021235396,36.1002602555009 -82.0202949598283,36.1298343126582 -81.9329516991561,36.2634442248774 -81.9109940382706,36.2908752993263 -81.8304104053052,36.3347789811478 -81.7303246226996,36.329467183951 -81.7092898793205,36.3338502743492 -81.7402131763359,36.36198253433 -81.7409080103685,36.3919078496119 -81.6981148990988,36.4718999796584 -81.7026326964311,36.5194602645637 -81.669835031007,36.5897678106349 -81.6522721813828,36.6076738087692 -81.8288979167938,36.6115963662572 -81.9182941426859,36.613608797075 -81.9293033061132,36.5959506538262 -82.1541813077551,36.5951503366296 -82.2166613034295,36.5940723596186 -82.2968580172995,36.591800946144 -82.610838912091,36.5915455448388 -82.8498226210789,36.5910413307673 -82.9866971899939,36.5912897002248 -83.2109265056694,36.5880896531906 -83.2483883995918,36.5899354199083 -83.2750314351304,36.6004674572198 -83.4642098601591,36.5988401279562 -83.6751767779422,36.59870387507 -83.695608633552,36.5842494058307 -83.9355998465387,36.5912908042263 -84.0067465715187,36.5920881162625 -84.2544885948187,36.5954525757939 -84.2567774582751,36.5954983253834 -84.781870784101,36.6050761598833 -84.7910568723549,36.6054383594152 -84.9984611962111,36.6209826428203 -85.2724982773073,36.6256168039722 -85.3000946381889,36.6261009236939 -85.4373746175903,36.6181989810276 -85.785476384702,36.62668526607 -85.9806106782448,36.633112657611 -86.1989925271939,36.6432906639691 -86.4154436379233,36.6509321366908 -86.5106681729942,36.6550742141329 -86.7705352136402,36.6521007800576 -87.0681840098596,36.6508112445931 -87.11270271488,36.6513077660911 -87.3466109435594,36.6492773804525 -87.6406553976253,36.6452169761114 -87.6935284355087,36.6444886692232 -87.8535374192374,36.6415224035434 -87.8707114200773,36.6694231918372 -88.0713410698433,36.6796832563404 -88.0410910767903,36.5827211925188 -88.0350796382961,36.5381999052039 -88.0427634042834,36.4965703400273 -88.4960256220043,36.4982076026975 -88.5126811438787,36.4995467004194 -88.8107185759901,36.4990458143214 -88.8263593294413,36.4999080492987 -88.8303725210313,36.4998546765866 -89.3466676017908,36.5026108089583 -89.4147846548692,36.5026793108435 -89.4485913110412,36.4564423473599 -89.4709078461365,36.4460169670384 -89.4920647554293,36.4655248350446 -89.4758977248385,36.4986089858186 -89.5332722884338,36.4981701441748 -89.51609800414,36.4718722794559 -89.545258269457,36.4410234483941 -89.5200804827686,36.4011227040991 -89.5194089670373,36.3559958746976 -89.5446324528964,36.3457879205654 -89.6057685745547,36.3548169544064 -89.6228741596169,36.3348474435652 -89.6068443100135,36.3081032648945 -89.5423129180961,36.2809319420685 -89.5354538500631,36.2646054281745 -89.5417253888929,36.2573462150993 -89.6181589550633,36.2409661142144 -89.6706661075896,36.2549618456545 -89.6946231434343,36.252203841158 -89.695737012858,36.2408629894403 -89.6768688235205,36.2209354567989 -89.6186393373327,36.1838116382208 -89.5895321928948,36.1520892518256 -89.5895015750109,36.1298614413181 -89.6674684181724,36.0993864640091 -89.6782489583147,36.0830408331631 -89.6889224254353,36.0258673598517 -89.7218363447502,35.9999509241088 -89.7132148260638,35.9663974567816 -89.6642709267856,35.9378944702657 -89.6454792006079,35.9138737361357 -89.6494160365095,35.8943619363869 -89.6647286073305,35.8857218407663 -89.7147635107817,35.9115011809885 -89.7380566602412,35.9150869770193 -89.7629902111739,35.8968873309185 -89.7663548523295,35.8841769773396 -89.757794357037,35.8714934051126 -89.7015183934478,35.8421131136063 -89.7009079957004,35.8275908326828 -89.7360192984694,35.807113985821 -89.7598771117723,35.817497369678 -89.7904643245356,35.8056299093077 -89.7999860359764,35.7743003646228 -89.8271246329774,35.7583474945228 -89.8599549641379,35.7482691273072 -89.9098681003284,35.7549139790981 -89.9511215579288,35.7343453953471 -89.9521210323203,35.7125639320478 -89.9298272228072,35.6763442141411 -89.8934872756056,35.6560505384628 -89.8652652485346,35.6733842535304 -89.8573304296374,35.6711412777364 -89.8492811882225,35.6453010408611 -89.8639224643906,35.6298250835587 -89.8775260946092,35.6334146146124 -89.9571336550073,35.6031836149856 -89.9581178655256,35.5786747060615 -89.9217474375778,35.5461398658448 -89.9312615752134,35.5293135817598 -89.9476347417721,35.5269828473763 -89.9623599133103,35.5323728966608 -89.9896739843436,35.5617568588755 -90.033140016861,35.5524950078149 -90.0409909024943,35.5429279718505 -90.0419064116663,35.5125217072751 -89.9996536673638,35.4455370247156 -90.0468735226389,35.4171869306731 -90.0603855998617,35.4134944197412 -90.0740273380246,35.4265900144844 -90.0749351519039,35.472426386111 -90.0823206223606,35.4782894580097 -90.1020508626893,35.4736509299937 -90.1373684773254,35.4426077096675 -90.172769972754,35.423801771155 -90.167909940555,35.3843396369312 -90.1402601920922,35.3831303299536 -90.1325618654474,35.4076849496077 -90.1123357114254,35.4177745418272 -90.0852505380296,35.4183657399664 -90.0755685711721,35.4066128988494 -90.0872266938728,35.3815928956868 -90.1057132977704,35.3660674829239 -90.0987932747814,35.3456783695846 -90.1064382119311,35.3147724206286 -90.1570835988572,35.3063308609086 -90.1698403349041,35.2826536313127 -90.1522159586985,35.2641450857902 -90.1060339420871,35.2639351079375 -90.0901948968215,35.2544862571621 -90.0690534392868,35.2128267350657 -90.0733947719556,35.1919226486873 -90.0625227286411,35.1670054991279 -90.0646285866633,35.1474746627476 -90.0830159559144,35.1251401960811 -90.1438236047204,35.1366264117644 -90.1645684196584,35.1297030327121 -90.1784389874145,35.1087380390639 -90.1691767188155,35.077919742991 -90.1958038569539,35.0409907485114 -90.2919059359036,35.0485515081083 -90.3054483329108,35.0007887668604 -89.7172700655279,34.9992611903073 -89.6465587408455,35.0007332954087 -89.3423729736416,34.9998048697839 -89.1981347323638,35.0008837887335 -89.0061963915943,35.0002347214314 -88.8125482768171,35.0024385995065 -88.7850433913526,35.0031823096823 -88.3831462732763,35.0050415368605 -88.3517277419525,35.0038322749094 -88.1939935775637,35.0044536440488 -88.1949623814398,35.013543867744 -87.9860782705711,35.016033638512 -87.6078130632206,35.010546624408 -87.2227639290321,35.0073462053491 -87.2075884780608,35.0079603909194 -86.8334221243196,34.9982460560253 -86.7823722148413,34.9970753222994 -86.3130526455299,34.9952731531874 -86.3035004132153,34.9954638721614 -85.8695675580447,34.992384535053 -85.6089602162505,34.9901641616199 -85.4673839007084,34.9901237462044 -85.3599438878245,34.9899781417047 -85.2677172911793,34.9891498087636 -84.9727935378178,34.9926295267483 -84.9678571565779,34.9926829480827 -84.8004169251833,34.9928322796908 -84.7711343281899,34.9907572255424 -84.6186847093286,34.9887597674461 -84.3237734916339,34.989090556154 -84.2909595168732,35.210622280084 -84.2258631170914,35.2616828718238 -84.1796426644509,35.2410694819878 -84.1015606900614,35.2456337418504 -84.0426897213918,35.2726584543483 -84.0307716891057,35.2926057594707 -84.0291152582165,35.3253739821258 -84.0062173183803,35.3729437031099 -84.0125567453702,35.4077068120234 -83.9546078411811,35.4555443092538 empty states.AREA: 264435.873 states.STATE_NAME: Texas states.STATE_FIPS: 48 states.SUB_REGION: W S Cen states.STATE_ABBR: TX states.POP2000: 20851820 states.POP2001: 21355648 states.POP00_SQMI: 79 states.DEN_0_100: 93 USStates.ID: 28 USStates.State_Name: Texas USStates.Date_Entered: Dec. 29 1845 USStates.Year_Entered: 1845 USStates.Year_Settled: 1682 ]]> 1845 #Style_5 clampToGround -99.3520963926805,31.4911603586956 clampToGround -105.998886788462,31.3939400532755 -105.770249888887,31.1709088557221 -105.603733779011,31.0865586055778 -105.554896847903,30.9984186198314 -105.409575297759,30.9026451075813 -105.390821398517,30.8532172879141 -105.314288579451,30.8166446407658 -105.288103873955,30.8320861368967 -105.258691517007,30.7977908877393 -105.214844038146,30.8122235644227 -105.061059930982,30.6880108106866 -104.99803900743,30.6844748196833 -104.98742571177,30.6414670328309 -104.891169172066,30.57070041737 -104.8534855959,30.3924114324589 -104.806959955043,30.3765961237763 -104.814444569323,30.3506186956335 -104.703097368089,30.2386416361776 -104.675240765519,30.1491204273314 -104.696977256685,30.0574625424375 -104.674852032393,29.9094488587845 -104.578041188337,29.8081070626151 -104.535729710531,29.6796427818002 -104.378073901927,29.550794562609 -104.205212134968,29.484228655677 -104.164858917236,29.4009054696296 -104.046105172216,29.3283134853617 -103.787463066664,29.2674577249596 -103.768229005879,29.2814382191825 -103.782625402505,29.2299947219666 -103.740319535336,29.2305480722655 -103.720779184638,29.1908323650897 -103.526696559056,29.1468485175655 -103.474531520355,29.0723381982261 -103.375903493966,29.0323145912752 -103.335970609727,29.0505449586515 -103.280800498472,28.986582581697 -103.267037226116,29.0076621436612 -103.153911459774,28.9788916377662 -102.988539685125,29.1910675704443 -102.866609489705,29.2292413619301 -102.908763863716,29.2694066686299 -102.883448659687,29.3535723996355 -102.822639900114,29.4120451183749 -102.805160372829,29.5303438337622 -102.676790491312,29.7444187937638 -102.638039455764,29.7325326198343 -102.576926007302,29.7784417359023 -102.552373669738,29.7496948486705 -102.503521154951,29.7856497327394 -102.385215376362,29.7681417980141 -102.36798040149,29.84548330596 -102.32475091159,29.8803092257321 -102.06440276136,29.7847688600544 -101.973724344483,29.8189713656394 -101.924627338118,29.7887011469021 -101.819498685539,29.8143248505936 -101.805604731495,29.7801996565594 -101.759491213846,29.7873677525572 -101.640064539983,29.7571633637573 -101.581881251252,29.7653539748678 -101.54434416232,29.8103225598584 -101.538735789529,29.7632221477057 -101.470855805519,29.7888951834932 -101.44881372174,29.7607917300542 -101.401663348137,29.7701115332373 -101.416487229422,29.7456408609946 -101.368786706054,29.6573728602722 -101.306247295965,29.6526439704618 -101.309313731437,29.5811248028441 -101.254968894261,29.6289641670434 -101.261811592181,29.5266920080284 -101.067737701075,29.4737763187657 -101.009431431376,29.3734824994166 -100.797357397044,29.242736284625 -100.768974533432,29.166807434011 -100.669132304446,29.0803127270354 -100.647584957274,28.9225956252143 -100.590148889683,28.8944694499509 -100.498264037925,28.6612437055942 -100.403526636741,28.5899917633347 -100.419884477811,28.5444513151021 -100.346151756506,28.5010724482254 -100.377120196208,28.4789132908516 -100.351918855023,28.3944470556125 -100.293238864271,28.3206276118098 -100.298266448713,28.2806220934998 -100.223808569714,28.2417272280185 -100.214416160267,28.2022063344331 -100.097262502277,28.1545554784828 -99.9936434835125,28.0037396210839 -99.9421891234519,27.9871619266799 -99.8750630216341,27.7979720547546 -99.8160554333049,27.780394853251 -99.7148179247448,27.6618491136167 -99.5495069890073,27.6129196537058 -99.5270614349868,27.5045797789624 -99.4908131826056,27.4910514590438 -99.5439078647283,27.3189538622377 -99.4655901429547,27.2701865593849 -99.4374750068324,27.1995024660583 -99.455381382663,27.02895816072 -99.3930326227927,26.9958615454895 -99.3908350467963,26.946943736737 -99.2858369947538,26.8576787339843 -99.166128451557,26.5802207110304 -99.1689892572283,26.546061522653 -99.1017807615211,26.4886767225061 -99.1070364893583,26.4198691472919 -98.9395766557928,26.395650906325 -98.9092032001293,26.3606715040819 -98.82013643842,26.3754137550411 -98.6782190476933,26.2424046870249 -98.6002683396781,26.2608029000929 -98.4888153488358,26.2018948640221 -98.4536889149826,26.2212616175586 -98.3848156511224,26.1563832689147 -98.347484076481,26.1590326088229 -98.3282265328466,26.1120007731281 -98.2925660443962,26.1331622891806 -98.2716456287269,26.1212494310257 -98.2922376888539,26.0984591491757 -98.2009795725821,26.0557321449947 -98.0834982466193,26.0661133226933 -98.076631552846,26.0349824709946 -98.0403525736578,26.05975051536 -97.8677078769173,26.060496076676 -97.6482403117683,26.0238010583669 -97.613189147238,25.9623589352769 -97.5752010185558,25.9545294009988 -97.5903531109647,25.93358905995 -97.4346069653403,25.8455574212196 -97.3858988875135,25.8457216612063 -97.381246025134,25.9173794523292 -97.3046898126925,25.9390222061254 -97.3073988110583,25.9654823876793 -97.1724747739236,25.9549273692482 -97.213347882329,26.0094252639667 -97.2765753188215,26.0026333041195 -97.253373235331,26.0686720122691 -97.3536197117772,26.1828026418389 -97.3689548979388,26.3594093860221 -97.421446845874,26.3854076588257 -97.4749682448196,26.4771508314201 -97.4261157816407,26.5185697635011 -97.45195800721,26.6013268690884 -97.4958376530227,26.7941173175194 -97.5583173258959,26.8463868636367 -97.5688317865217,26.9781886133612 -97.4792602513974,26.9968380423725 -97.5037673315085,27.0818686103316 -97.4274812696915,27.2654551025798 -97.5484245684469,27.2305300181157 -97.785017752344,27.2880402911338 -97.680279172266,27.2946930806235 -97.7503494379711,27.41998295344 -97.6003827011428,27.3004551454618 -97.528650555173,27.3444204003037 -97.5078084916159,27.4395317363744 -97.500703162369,27.31998796117 -97.4125283681046,27.3213449992806 -97.3317271301908,27.5626365036553 -97.2500614178358,27.6891429260905 -97.3094801183865,27.7081729278505 -97.3477723155609,27.631751940673 -97.3994852497549,27.6334982918403 -97.3536318222789,27.6411127473255 -97.3202834100132,27.6909444328169 -97.349779166119,27.7156375087417 -97.3180633276148,27.7125347515202 -97.3968304284502,27.771146058486 -97.3888121386094,27.8317301437746 -97.4800836143042,27.8205851258607 -97.4998059418148,27.843544507544 -97.5219697027193,27.8639272343414 -97.4969526668336,27.875769577501 -97.4796260008364,27.8532640938896 -97.3458888664717,27.8734803945651 -97.3613155174477,27.8402577581927 -97.2837543356676,27.871447851614 -97.213608637759,27.831414891185 -97.247292773262,27.8226243834861 -97.1957326383504,27.8125254347352 -97.1148913132981,27.9156868650475 -97.0240708445034,28.0205324937316 -97.0266730261927,28.1080412994183 -97.1233456677049,28.0545599929136 -97.2364829550522,28.0408144571822 -97.2705637411735,28.026227534241 -97.2415031844307,28.0489470441677 -97.2605540470233,28.0650176013673 -97.1573276455308,28.1166719542078 -97.1682608968738,28.1597494288829 -97.1356831071198,28.1620990694031 -97.1321047160091,28.1307169703604 -97.023835427779,28.200083644241 -97.0338830492678,28.1376877357 -96.9753722886565,28.1153365454804 -96.9413372204451,28.1870591366451 -96.9755711909789,28.2110370456823 -96.9129859808147,28.2570826042713 -96.9511713661577,28.1146461634749 -96.8039517552454,28.2117340429668 -96.7781943495554,28.2296358081918 -96.7935982858175,28.2716569135883 -96.7865329456052,28.3131424085737 -96.7884934126376,28.3527529951086 -96.8537565207402,28.4052778154343 -96.7756219578977,28.3919115743004 -96.7593631219947,28.4111923622987 -96.7885994327517,28.4465344336046 -96.8241380852668,28.4499199129354 -96.7873555425402,28.4777853740781 -96.7410292653767,28.4037386946306 -96.7040715497837,28.3961667887133 -96.7026224627333,28.340479673374 -96.6615679452458,28.3065470479745 -96.3909755860929,28.4343391365105 -96.4767541355929,28.4997330365345 -96.5187554337536,28.461106535662 -96.5634495663738,28.4699067019672 -96.4868327423116,28.5065001250736 -96.5669583702508,28.5743745840578 -96.610599818599,28.559217321823 -96.6069600649358,28.623908697185 -96.6602677290907,28.679347884998 -96.6467707221561,28.7144133763303 -96.5917536445104,28.7176308540699 -96.5767387632856,28.6909612420408 -96.5724654190595,28.8084420119664 -96.5708105548188,28.6921132334215 -96.5706506949336,28.6365406498669 -96.511986586175,28.6498153227204 -96.5121470666044,28.6084558879438 -96.4835209174838,28.5983299965887 -96.454634945939,28.6562061770284 -96.4374077744685,28.5972653712369 -96.4914559361844,28.5572205009388 -96.3756462595652,28.6103621446828 -96.4190354461777,28.6389373387445 -96.4036459583351,28.7197637757365 -96.4325088576923,28.6975195233914 -96.449926794445,28.7553045499191 -96.427335889089,28.7122837074932 -96.3929797404207,28.7262979792536 -96.392026483435,28.6705234915587 -96.3644078276204,28.6182543536492 -96.3264047586895,28.6343609440377 -96.2706241672889,28.7092493537704 -96.286219499452,28.6619950140313 -96.2124184568546,28.686989060082 -96.1513048052607,28.762937961925 -96.2407017376168,28.6351307032347 -96.1577155429507,28.6115026697808 -96.2392754088593,28.597389673791 -96.2378336984528,28.5715957691863 -95.9839904637619,28.6534017453567 -95.9918879041054,28.5966948669979 -96.2068281795015,28.4886634867042 -95.702384532802,28.7192477688994 -95.956387443742,28.6229421712341 -95.9375493391858,28.6907206174074 -95.7865926316234,28.7391325634167 -95.6715524880469,28.7529411275506 -95.6832643287992,28.7272140994852 -95.526807295461,28.8034966858832 -95.2486180989702,28.9786376443803 -95.1975516120674,29.1054653592137 -95.1649880473308,29.1177902182052 -95.1607301284392,29.200271435455 -95.0665723369123,29.1961168125456 -94.9513347743744,29.3261575810117 -94.8989876287382,29.3090112320655 -94.8916718211508,29.3940648612642 -94.8155505841499,29.3711662202519 -94.8913361818901,29.399557852187 -94.917193668702,29.448054371758 -94.9136455345915,29.4203453053088 -94.9527094131465,29.4244668140235 -94.9439587287955,29.4649127898122 -94.9830149042721,29.4607585716531 -94.9113576255404,29.500563943061 -95.014327744272,29.5594945471536 -94.9895394805847,29.6799286340995 -95.0406046189096,29.7118061561835 -95.0884725306271,29.8042054500491 -94.93279015255,29.6824361137282 -94.8873631489216,29.6687658980771 -94.8296147935471,29.7600810982356 -94.7359230458939,29.7932076306622 -94.700475733541,29.7547908848552 -94.7066170212868,29.6587417934681 -94.7882837036966,29.5387865888792 -94.5646302308789,29.579227539862 -94.5338906335704,29.5542136466136 -94.5110019150285,29.5453773038686 -94.4699853511928,29.5570096005195 -94.5014725492762,29.5177541844844 -94.5728852981717,29.5332829576669 -94.6821097599082,29.4753428732052 -94.7854441234656,29.3834950378891 -94.7667436843112,29.3642276698397 -94.6827121202049,29.4331383341323 -94.3771944609298,29.5521986283419 -94.3571821125663,29.5601289522835 -94.0655815212201,29.6742968900915 -93.8351251032903,29.6747919644726 -93.9519366253128,29.8185790610628 -93.8565002359247,29.9648149949583 -93.8574469455296,29.9908668928178 -93.760367515826,30.0061764030649 -93.7126439001031,30.0607310199356 -93.7160237497478,30.0958787991307 -93.708546644865,30.1149499108334 -93.6970869015193,30.1181389021031 -93.6988035173149,30.1414346905316 -93.6861230387578,30.1414613621588 -93.6833076816481,30.1484401694217 -93.6998258674993,30.1510169781729 -93.6963314287414,30.1758843689492 -93.7045256592734,30.1810684459083 -93.7150086998788,30.2205134179473 -93.7075239693582,30.2395787754494 -93.6993768807844,30.2975935292891 -93.729941409288,30.3051219729382 -93.7593470787815,30.3410771727413 -93.7595076666452,30.3543502302936 -93.7480024889439,30.3676155313151 -93.7551137307405,30.3819930042287 -93.7427315855636,30.4090272375555 -93.7217050902489,30.4331831686188 -93.6967413311132,30.4428357517593 -93.7035932923006,30.4627158297037 -93.6981459876763,30.4702496513421 -93.7150231758618,30.4888310205347 -93.7074472222602,30.4964430039086 -93.714809983633,30.5053160515853 -93.7056319678504,30.5230599502648 -93.7354793539973,30.5457197108965 -93.7180538649871,30.5683558276656 -93.7179855982276,30.5875818830799 -93.6935940747548,30.5990370562763 -93.6717582009901,30.598033475394 -93.6928696184464,30.6159971853325 -93.6847595364861,30.623626465968 -93.6930532338358,30.6402433971316 -93.6781450325558,30.6398941531481 -93.6601628136184,30.6730608176726 -93.6177808097251,30.6870030300823 -93.6125855643895,30.7105301555471 -93.6179648833938,30.7327489593371 -93.6078251665993,30.7322109750573 -93.6186289353873,30.7459898029865 -93.5853487574266,30.772384673359 -93.5820450640059,30.8022395755774 -93.5508552163389,30.8285427515982 -93.5558144005398,30.8425404652408 -93.5666178980145,30.8453462320886 -93.5529761247527,30.8604804672822 -93.5610176820037,30.8720769365654 -93.5686701258707,30.886431356764 -93.5646492713287,30.9021283630613 -93.5466891601929,30.9055307409998 -93.5497943369345,30.9250805769799 -93.5301557030665,30.9271668885028 -93.5257915242765,30.9360147750055 -93.5323605164321,30.9609260649172 -93.537510526732,30.9570791221949 -93.5488480918319,30.9703845889675 -93.5726296090181,30.9763719448991 -93.5611240812853,30.9918838250984 -93.571019691156,30.9974647272144 -93.5680671206996,31.0131177730676 -93.5651144950651,31.0182559489662 -93.5472916450207,31.0143343101026 -93.5073888583872,31.0390998146532 -93.5259137461508,31.0571716007113 -93.5171703181443,31.0748615453994 -93.5442784766347,31.0825635248279 -93.5432943505457,31.0949417830783 -93.560155897223,31.1007267939647 -93.5568523341309,31.1095326773987 -93.5352605069041,31.1162612988914 -93.5282642026793,31.1261142412602 -93.5376792301074,31.1326296405497 -93.5443630058743,31.1593545819132 -93.5285010056731,31.16313081887 -93.5371912743335,31.1765276828254 -93.5271048967346,31.1782631971006 -93.5290962932971,31.1859610191746 -93.5507645287232,31.1911166478718 -93.5771171728735,31.1723283005144 -93.594116089313,31.1803867599593 -93.6030963428191,31.1992536873053 -93.590721311811,31.229873054352 -93.6111765104974,31.2423735819701 -93.6120541890025,31.2702180322556 -93.6166320369568,31.2759895241098 -93.6310062786126,31.274088104753 -93.6457698113848,31.290447047048 -93.656306321906,31.2868557345123 -93.6817667081866,31.3128637606543 -93.6772195877398,31.3285702210106 -93.6350357193475,31.3740089507347 -93.6612511619287,31.3725768736666 -93.6641964541721,31.3985102835404 -93.687672937394,31.4063113595588 -93.6946236330265,31.4161034539133 -93.6963098944214,31.4279172119793 -93.6871849424459,31.4383118184741 -93.7021085938203,31.4464313212695 -93.6985991018577,31.4616380816002 -93.7269660796645,31.4596548516254 -93.7514269339373,31.4856800971189 -93.7506182371136,31.4907363154173 -93.7191765485681,31.4955823387378 -93.7059774315125,31.5207469124279 -93.7318419000288,31.5220556426776 -93.7477268791835,31.5378958623322 -93.7634896740234,31.5309019449363 -93.7803130389967,31.5339136421144 -93.8107019949642,31.5592406874184 -93.8165082249906,31.5772874839387 -93.8328051765847,31.5903601395257 -93.8357655763902,31.6153647157252 -93.8197738830306,31.6182675045639 -93.814913937485,31.6481413307007 -93.8066129278975,31.6539413361717 -93.8120300538237,31.6747403534088 -93.7924526022363,31.7115680299756 -93.8089554592767,31.7077383245665 -93.8151354745431,31.7125237592659 -93.8101762985126,31.7305247069651 -93.8313485614818,31.7534524078687 -93.8222539497482,31.7748083120293 -93.8345145984519,31.8021876362787 -93.8650100628645,31.8174424499476 -93.8775910841835,31.8502823749578 -93.8814515298817,31.8715888085537 -93.8927128271358,31.8702347315503 -93.8994496012559,31.8946233843507 -93.9236506911527,31.8927620881712 -93.9181114839259,31.9098704820605 -93.9359189554272,31.9096246079882 -93.9701757150612,31.923332670499 -93.977400745224,31.9463271084149 -94.0045847001297,31.9781086259495 -94.0100779255717,31.9893006514689 -94.0352556158215,31.9946792606335 -94.034954991874,32.1996091989861 -94.0354184994672,32.3893811626287 -94.0403826377049,32.6949577639329 -94.0417854266628,32.88248532849 -94.0389317412767,33.0234224077489 -94.0366915600887,33.2704528989066 -94.036116490021,33.5560347014808 -94.0616226885844,33.5773354007315 -94.0868464522719,33.5840756635432 -94.0988935992895,33.5731199456262 -94.1553607481046,33.5672068241928 -94.1597099275335,33.5938939861439 -94.2055412868951,33.5852000838157 -94.2110801540886,33.5581084763103 -94.2355638087854,33.5616558979989 -94.2232345052552,33.5858408096426 -94.237433395665,33.5925430254688 -94.2747420062796,33.5618574981634 -94.2722778801038,33.5847263352945 -94.2791827367037,33.5894525566594 -94.2990196486897,33.5799728047754 -94.3025824334982,33.5570543333588 -94.3289505742182,33.5732546607845 -94.3709589684324,33.5478024921997 -94.3954654484121,33.5604209193152 -94.3725080674424,33.572780843886 -94.3708297502542,33.5901604561683 -94.3793139265706,33.5934447272787 -94.3936192517599,33.5750768821217 -94.4067726989127,33.573604181729 -94.4286699913841,33.5972585244972 -94.4435324861232,33.5966212153736 -94.4517573138016,33.6044640316868 -94.4365363690331,33.6169611431123 -94.4361169764478,33.6365609097961 -94.4766912623089,33.6320818342933 -94.5008160172467,33.6231627285535 -94.5107650959474,33.6309253877013 -94.5252611988716,33.6211366353993 -94.5181964559493,33.6431245606389 -94.5504008155195,33.632809011294 -94.5623564026099,33.6356506902792 -94.5624022483444,33.6429443355883 -94.542138136751,33.6483615972293 -94.5456249915409,33.6617357579767 -94.5766696456491,33.6522708940353 -94.588594701575,33.6555626943339 -94.5853674451404,33.6622460583057 -94.5654161185401,33.6631276811661 -94.5609300134862,33.672027401142 -94.578714527779,33.6705850642858 -94.5853141750945,33.6790954380738 -94.6011530580164,33.6657208732496 -94.6319461140036,33.6840114940994 -94.6389728704755,33.6702175285534 -94.658748689806,33.663850430669 -94.6696360986615,33.6661733181553 -94.6681636112439,33.671571088102 -94.6445348646206,33.6777628005194 -94.6556893557214,33.6924032061402 -94.6686672548934,33.6966486225785 -94.6911973285714,33.6903997057713 -94.7418652471894,33.7013771094591 -94.7546906224197,33.7078808674656 -94.7423230158561,33.719157166445 -94.762930719398,33.7169062835784 -94.7499830723432,33.7368149801429 -94.7833707776319,33.7337745678945 -94.782241592951,33.742376603757 -94.764388047197,33.7529509233106 -94.7837218171255,33.7533704682922 -94.8034369944365,33.7396910082834 -94.8193755593854,33.7495136716343 -94.8580964984281,33.7494296047539 -94.8818557435802,33.7750719362582 -94.9140991208061,33.7897049819208 -94.9087660493324,33.8035866991384 -94.9184559016621,33.816304855563 -94.9406202496941,33.8159156370392 -94.9401092314068,33.8409324203509 -94.9601296578001,33.8481840346416 -94.9689268286841,33.8663228494762 -94.9895041088505,33.8562900729299 -95.0129958687657,33.8700533810898 -95.0375860361542,33.8665590741676 -95.0430870883205,33.884552938792 -95.0633666513125,33.8968018383347 -95.063702501233,33.9177558985992 -95.0838291836962,33.8885696946472 -95.0899405612146,33.8970230129184 -95.0824942336751,33.918560731634 -95.0955866692645,33.9218451265293 -95.1194520041495,33.9123884529818 -95.1269061751991,33.9172521426231 -95.1281957981282,33.9409756193022 -95.1485440072872,33.9436534386509 -95.2342706406141,33.9649694417437 -95.2515208198696,33.9365500995153 -95.2512228467789,33.9051287029656 -95.2638496479375,33.8979074295118 -95.2775830967312,33.9180449387556 -95.2866618452793,33.8870087194903 -95.3021879677536,33.8867301071625 -95.3364600240519,33.8972201452204 -95.3302721231422,33.8710248450986 -95.4518412564926,33.8658586121364 -95.4683594777338,33.8865378582277 -95.4990912324293,33.881822624598 -95.5131223838212,33.8978402854978 -95.5442741981764,33.8858464269672 -95.5477305426273,33.8932621235845 -95.5269702512685,33.8979201785035 -95.5198137250544,33.9067474752702 -95.5465557208432,33.9041378125257 -95.5630133970639,33.9361771034426 -95.6063120146191,33.944656465691 -95.6150707735962,33.9367942616433 -95.6132241254837,33.9203415546903 -95.6337327152473,33.9202077191712 -95.699950264818,33.8949267760162 -95.7471094802783,33.9034976338912 -95.7609419495455,33.8935411571276 -95.7644970987573,33.8791063735621 -95.7687615327479,33.8515033166903 -95.7957252595447,33.8647743475285 -95.8262207930479,33.8431258316945 -95.8468057390447,33.8411382296162 -95.9333279503365,33.8906288422977 -95.9433228800981,33.8900718041244 -95.959016632946,33.8651391176183 -95.9776482488988,33.8580513457492 -95.9944645860288,33.8754764816195 -96.0028724620981,33.8734890044101 -96.0020480603943,33.8570784239774 -96.0143238316783,33.8443070387318 -96.0270045674164,33.8561209977346 -96.0482298648812,33.8413774764797 -96.0917799018523,33.8446772338064 -96.1097015860178,33.8293577291253 -96.1492232448427,33.83569011079 -96.1694645416653,33.8290832377136 -96.1833883750355,33.8158923202814 -96.1809848937133,33.8085339108482 -96.1547773844146,33.824044081131 -96.1416772177066,33.8204201506892 -96.16157487608,33.7983297326873 -96.1690742422207,33.769456890815 -96.187286010662,33.758684486151 -96.212807166385,33.7567925567755 -96.2783383659012,33.7734894901909 -96.2899427899173,33.7620342928024 -96.3010507089615,33.7141533419418 -96.3165386076739,33.701904716619 -96.3478505584012,33.705631801563 -96.3710832530533,33.7404975591171 -96.4197303821717,33.7884284828286 -96.4876412927335,33.7782325064272 -96.5010161448864,33.7881925349614 -96.5108435468467,33.8157874455655 -96.562404728742,33.8255225751035 -96.6014686489895,33.8430585200471 -96.6144392538749,33.8630013562452 -96.5847604712561,33.8962455118061 -96.6665119406885,33.9136443690811 -96.6779791464851,33.9044245192975 -96.6936574485524,33.8480065285136 -96.7119531575884,33.8339726711759 -96.7491017928465,33.8318404880575 -96.7978710251696,33.8700514781673 -96.8143969338763,33.8718710579623 -96.8442899442748,33.8581346758361 -96.861296536343,33.8617814536899 -96.8792188051043,33.8841045463944 -96.8831330827039,33.9246919643211 -96.8987359278797,33.9501277640988 -96.9298498138604,33.9618729385895 -96.9364875549014,33.9479496295896 -96.9684711058252,33.9374213261378 -96.9881480778014,33.9443028760324 -96.9879951562104,33.876524993445 -97.006138364555,33.8506162080499 -97.0258837487447,33.8406638868468 -97.0711884256134,33.8568301349417 -97.0824649674126,33.8512035820318 -97.0785356759137,33.8379135029825 -97.0503136942646,33.8235515468502 -97.087958150994,33.8076751203943 -97.0837540270329,33.7425178691231 -97.0907885075272,33.7317759436109 -97.1158518152657,33.7260387447849 -97.1527639551762,33.7287737567957 -97.1894548414756,33.7528743688857 -97.2086128811281,33.8197520263932 -97.1953068554539,33.8362616577426 -97.1688855338722,33.8478962336794 -97.1644603868134,33.8632500271984 -97.1880588051263,33.899305664185 -97.211626649478,33.905790476719 -97.2463565890575,33.8943389990746 -97.2509801252754,33.8730725605007 -97.264202229241,33.8588326323233 -97.2725718980817,33.8726758421186 -97.3143820721958,33.8959411317283 -97.3152518941801,33.8704938884378 -97.3421004874611,33.8620178329205 -97.3636160759387,33.8311271478817 -97.4104161629105,33.8208124550832 -97.4530350911297,33.8363150195283 -97.4573607393012,33.890532021605 -97.4630599713817,33.9024831837152 -97.4778308298091,33.9078083743386 -97.518504189706,33.91687174991 -97.5548899378437,33.9040048081949 -97.5759705845528,33.9026313915672 -97.5926564722634,33.9179850917189 -97.6004841716436,33.9695357487998 -97.6713709731313,33.9887114388077 -97.7045675638129,33.9716446286772 -97.7293258131798,33.9393918135487 -97.7566704070426,33.932197269678 -97.7905155572151,33.8905567127498 -97.8528573913232,33.857170989043 -97.8700622202223,33.8552140577552 -97.9093776206948,33.8741230741104 -97.9550485337835,33.8835794315438 -97.976693678767,33.9026028951239 -97.9764418443808,33.9121508879515 -97.9509969270951,33.9326163854516 -97.9633110473011,33.9487483818417 -97.9480670006949,33.9598489691416 -97.9505389343141,33.9712584919282 -97.982995159825,34.0013824361846 -98.0238062114244,33.9870813155941 -98.0558736752466,33.9898964139123 -98.0865219710926,34.0054103575962 -98.1110054333052,34.0699152608686 -98.0944412742753,34.1346491348156 -98.1151863290391,34.1490797537232 -98.137182702728,34.1385247073243 -98.1731642842845,34.1154615363479 -98.277324712945,34.1229647210219 -98.3208141218597,34.1395124845584 -98.3507302631885,34.1422132177566 -98.3845831608253,34.115873277508 -98.3912818493027,34.087324681805 -98.4074643999688,34.0825487630451 -98.4216707502906,34.0659246412843 -98.4485195081449,34.0544693031052 -98.4998521726901,34.066508171909 -98.5579143286446,34.1054284628805 -98.5766684370536,34.1420220197199 -98.6075838723519,34.1514897431627 -98.6263299881177,34.158527616426 -98.662059500855,34.147129344828 -98.6825527604991,34.1500893803379 -98.7056322596678,34.1308063642615 -98.7788769243201,34.1320532580559 -98.8114099222656,34.146025924858 -98.8916893852997,34.1609098971274 -98.9528568855168,34.1946535863845 -98.9965446165054,34.2095837062186 -99.0355699010075,34.1990091275048 -99.0787841261402,34.2084460436583 -99.128300139337,34.2015562705675 -99.1765117843417,34.2128165213261 -99.1908403575301,34.2238215675651 -99.2049556166617,34.2557306955242 -99.1966628127821,34.3052057476053 -99.2058491943277,34.3320754835343 -99.254465637826,34.3682943923503 -99.2675355299914,34.3983645544 -99.3236589705133,34.4127869472387 -99.3645692443735,34.4502723758117 -99.3931570632619,34.429070725134 -99.3945224149831,34.3968223241289 -99.4103230107381,34.3691856116386 -99.4387432079319,34.3647833428937 -99.4798058594252,34.3836002544386 -99.5025040549412,34.4041453149585 -99.5542323165501,34.4152563856433 -99.5782194991147,34.4089886853491 -99.5855894788699,34.3849338835776 -99.601817403152,34.3686339710267 -99.6852769049209,34.3775206620374 -99.7780602586162,34.4440642714861 -99.8303083799016,34.501846255188 -99.8609492850859,34.5186945590413 -99.8809773252755,34.5482418940255 -99.9322869251129,34.5791733267958 -99.9451200138402,34.5796346298626 -99.9724799649576,34.5619266989846 -99.9964752628992,34.5623839445524 -99.9992599692516,34.7472433686446 -99.9964550579162,35.0310510336069 -99.9975702180927,35.1822350834532 -99.9947434205996,35.4246221647218 -100.000392481852,35.6188562203977 -99.9981231250644,35.8838375261918 -99.9975536187421,36.0575913818302 -100.001550693503,36.4925547831533 -100.007272948555,36.493912716666 -100.549839323196,36.4894790903428 -100.957341408628,36.4896376715563 -101.090102366885,36.4880502722289 -101.62075555527,36.4920314454728 -102.034658387679,36.4929809605896 -102.165673606983,36.4902341370994 -102.997400999016,36.4923701848871 -103.027286789536,36.4915918464103 -103.024047954518,36.0560618512093 -103.022612263713,35.742327299615 -103.02229404801,35.6236480179456 -103.026151164684,35.1772655150643 -103.025251273923,34.9647798759331 -103.022657024631,34.7453327558501 -103.029645833697,34.3078204763021 -103.033258497866,33.8261815911813 -103.038736452727,33.5658431867775 -103.043100992793,33.3778314740626 -103.049330863501,32.9536389141087 -103.060018185604,32.5155455179839 -103.055640531826,32.0851168230641 -103.058413767661,32.0020227787787 -103.332549418381,32.0042814747499 -103.729444279739,32.0062289025373 -103.981377077849,32.0060152222294 -104.019296949948,32.0074034895819 -104.85106805229,32.0032650272727 -104.922304814538,32.004382108736 -106.00324037618,32.0016580242852 -106.378387283311,32.0007470652221 -106.623625658904,32.0010887853062 -106.650061890884,31.9803297275266 -106.632605287073,31.9722199884253 -106.633748923526,31.9141010099202 -106.64407909206,31.8952054369513 -106.61612370633,31.8447405331725 -106.614986549809,31.8178343839605 -106.539514775671,31.7863052774039 -106.383581210566,31.73387271848 -106.21328556164,31.4782464382134 -105.998886788462,31.3939400532755 clampToGround -94.9136282621775,29.2578100398598 -95.1056216301692,29.097200689859 -94.7486000214909,29.3197268614603 -94.7675751194867,29.3426867459739 -94.9136282621775,29.2578100398598 clampToGround -96.3981329846783,28.3461287087049 -96.4228065972943,28.3917207565152 -96.4633051193508,28.3261156347832 -96.5323911551759,28.3185285307139 -96.7391690868345,28.1838232573772 -96.8041043055158,28.1724500303063 -96.8348893723486,28.0666156829267 -96.3981329846783,28.3461287087049 clampToGround -96.9402302798725,28.0462270302125 -96.9732659036783,28.0011489857445 -96.9496523808798,27.984822817519 -97.0246956229941,27.9146817066477 -97.0498723116442,27.8412581171011 -96.8540699855756,28.0496963225627 -96.8376894806861,28.102132800665 -96.8726862792973,28.1316953484598 -96.9402302798725,28.0462270302125 clampToGround -97.3593801857708,27.2840405219699 -97.2239827766418,27.5743234820277 -97.0538319312447,27.8307777532106 -97.1133036970626,27.8195211793271 -97.0755605616043,27.8115793410343 -97.1704476930157,27.7077710590242 -97.2038487898529,27.6123791179091 -97.258949516966,27.6520617389151 -97.2489390308614,27.5814491265614 -97.3357694916682,27.4411382648402 -97.3763559674414,27.2849654048289 -97.379643189594,27.2107771788891 -97.3593801857708,27.2840405219699 clampToGround -97.3013873602593,26.6013653134077 -97.278803221449,26.5403073259287 -97.2675034347564,26.4792510973309 -97.2515039997564,26.419651853089 -97.2265626157341,26.3489005354442 -97.2091667971749,26.2508939353731 -97.1795864974542,26.0722765736308 -97.1720483718953,26.0780766616552 -97.1952427262928,26.2595930779644 -97.2323612890346,26.4184902532441 -97.2960923979491,26.6010124755532 -97.3582832101291,26.8029999986179 -97.38159323348,26.9493542503129 -97.3871874456735,27.0975717971982 -97.378796233725,27.2047730330479 -97.3890503329053,27.2019749640613 -97.4011726372135,27.1115540764165 -97.3955703997656,26.9223202268071 -97.381591899696,26.8207110644821 -97.3582823032418,26.7069850574477 -97.3013873602593,26.6013653134077 empty states.AREA: 121757.343 states.STATE_NAME: New Mexico states.STATE_FIPS: 35 states.SUB_REGION: Mtn states.STATE_ABBR: NM states.POP2000: 1819046 states.POP2001: 1839139 states.POP00_SQMI: 15 states.DEN_0_100: 99 USStates.ID: 47 USStates.State_Name: New Mexico USStates.Date_Entered: Jan. 6 1912 USStates.Year_Entered: 1912 USStates.Year_Settled: 1610 ]]> 1912 #Style_5 clampToGround -106.102403151381,34.4234110071301 clampToGround -109.049495308693,32.4420444958635 -109.045615049533,31.3434530504803 -108.210647795015,31.3438536159949 -108.203254915468,31.7869032382901 -107.283567177026,31.7850830856735 -106.539514775671,31.7863052774039 -106.614986549809,31.8178343839605 -106.61612370633,31.8447405331725 -106.64407909206,31.8952054369513 -106.633748923526,31.9141010099202 -106.632605287073,31.9722199884253 -106.650061890884,31.9803297275266 -106.623625658904,32.0010887853062 -106.378387283311,32.0007470652221 -106.00324037618,32.0016580242852 -104.922304814538,32.004382108736 -104.85106805229,32.0032650272727 -104.019296949948,32.0074034895819 -103.981377077849,32.0060152222294 -103.729444279739,32.0062289025373 -103.332549418381,32.0042814747499 -103.058413767661,32.0020227787787 -103.055640531826,32.0851168230641 -103.060018185604,32.5155455179839 -103.049330863501,32.9536389141087 -103.043100992793,33.3778314740626 -103.038736452727,33.5658431867775 -103.033258497866,33.8261815911813 -103.029645833697,34.3078204763021 -103.022657024631,34.7453327558501 -103.025251273923,34.9647798759331 -103.026151164684,35.1772655150643 -103.02229404801,35.6236480179456 -103.022612263713,35.742327299615 -103.024047954518,36.0560618512093 -103.027286789536,36.4915918464103 -102.997400999016,36.4923701848871 -102.997709442614,36.9985238353847 -103.07786588474,36.9997601837273 -103.993635035945,36.9944690622369 -105.146172547082,36.9932073726899 -105.213091465415,36.992604521715 -105.713459997846,36.9945603614965 -105.992000086492,36.992289650437 -106.472176939021,36.9915042439681 -106.86124887722,36.9895015941857 -106.89037023567,36.9990837907051 -107.410820543541,36.9975257849804 -107.472460293817,36.9987767566937 -108.372472924296,36.999471575633 -109.048480115363,36.9966409005893 -109.047846506598,35.9966639816639 -109.046640810431,34.9546462439613 -109.048652751175,34.5917805775226 -109.050349253456,33.7833019238717 -109.050525833602,33.205164822801 -109.051346155985,32.7795505537932 -109.049495308693,32.4420444958635 empty states.AREA: 51715.786 states.STATE_NAME: Alabama states.STATE_FIPS: 01 states.SUB_REGION: E S Cen states.STATE_ABBR: AL states.POP2000: 4447100 states.POP2001: 4478538 states.POP00_SQMI: 86 states.DEN_0_100: 92 USStates.ID: 22 USStates.State_Name: Alabama USStates.Date_Entered: Dec. 14 1819 USStates.Year_Entered: 1819 USStates.Year_Settled: 1702 ]]> 1819 #Style_5 clampToGround -86.8263454497332,32.7948233460272 clampToGround -85.0700671081992,31.9807030736301 -85.0567002477577,32.0173765203509 -85.0620107617352,32.0500102920991 -85.0566549357244,32.0696439454843 -85.046187259254,32.0908949913561 -85.0533136579289,32.1266376448382 -85.0243823514691,32.1662750781008 -85.0078260926386,32.1788785384061 -84.9603852752889,32.1919284376309 -84.9757438025875,32.2122487204353 -84.9283716437355,32.2179784387895 -84.9160041260552,32.2285563686775 -84.9236796279908,32.2473889995768 -84.9053609608961,32.2495557759674 -84.8940158788823,32.2591761298648 -84.8946035025639,32.2687353881118 -84.9210709055564,32.2931369847317 -85.0053324510846,32.3295925258289 -85.0020899980221,32.3470785227396 -84.9716635313846,32.3715031963467 -84.9844889642181,32.3870933241337 -84.970961884914,32.3968128124947 -84.9653850518902,32.4294501858587 -84.9898150430422,32.4548361836926 -84.9956522169706,32.518928479096 -85.0707744216369,32.5812538387594 -85.0841493949267,32.603004344931 -85.0863240406897,32.6284512647951 -85.1038037187814,32.6459103823229 -85.0904749305908,32.6761523261383 -85.1077333041684,32.6899723746491 -85.1138678519411,32.7343891188468 -85.1248851250497,32.7443832224212 -85.1333007048373,32.7563151798039 -85.1280898176054,32.7770703815279 -85.1623013377526,32.8074457725548 -85.1807197284529,32.8718130182966 -85.2335028922441,33.1201394011529 -85.2338462673976,33.129237260647 -85.2938249844532,33.425875708363 -85.3049800767665,33.4905940310641 -85.3352868510977,33.6549230949434 -85.3840109358491,33.9054097874599 -85.3957377905852,33.9598292697156 -85.4165672299404,34.0869203579979 -85.4602859241732,34.2901615301398 -85.5118559301513,34.5230148510197 -85.5258341311767,34.5846856151065 -85.5346925955902,34.6224884025546 -85.5830580356282,34.8623226551191 -85.6089602162505,34.9901641616199 -85.8695675580447,34.992384535053 -86.3035004132153,34.9954638721614 -86.3130526455299,34.9952731531874 -86.7823722148413,34.9970753222994 -86.8334221243196,34.9982460560253 -87.2075884780608,35.0079603909194 -87.2227639290321,35.0073462053491 -87.6078130632206,35.010546624408 -87.9860782705711,35.016033638512 -88.1949623814398,35.013543867744 -88.1939935775637,35.0044536440488 -88.1431049406294,34.9303124572945 -88.10888651427,34.8999364686021 -88.0904686757086,34.8956296636558 -88.1364016236301,34.5804972978314 -88.1512564133616,34.4652732358205 -88.1676133199948,34.3241474912554 -88.1993492426569,34.0904480664289 -88.2026446708256,34.0591222846376 -88.2481956052491,33.7427263969428 -88.2745866910838,33.5388014650338 -88.3048295831961,33.2888943469818 -88.3394663317574,32.9874972113755 -88.3480414662251,32.9247582205318 -88.3938325168417,32.5804702260594 -88.4257919971009,32.3092243032455 -88.4377242279507,32.2277556143888 -88.4729519210596,31.8888768167036 -88.465096841429,31.7022450293789 -88.4508031165511,31.4356176907354 -88.4345631161403,31.1208794693781 -88.4291990018716,31.0006950876596 -88.4172426281035,30.7364571156747 -88.4014151536825,30.3935517804008 -88.3203266415596,30.4042935926262 -88.1356811752465,30.3371585569903 -88.0197888619334,30.7441900319034 -87.9133851540991,30.6211844071927 -87.9034657641113,30.421296093483 -87.7575029474381,30.2994222307247 -87.7799417060749,30.2726382606338 -88.0025605039991,30.2336042721855 -87.7953306244775,30.23393165256 -87.5934048070551,30.2784153722344 -87.5875683536562,30.3192543333282 -87.4664403603879,30.3597214406638 -87.4052508219088,30.4403600660175 -87.4188166507341,30.4817007831404 -87.4453529644246,30.5313897036451 -87.4220673638826,30.5564936086287 -87.3932809670146,30.6200982640176 -87.3986449174521,30.6680153313996 -87.4188942719987,30.6928101858547 -87.4601404897836,30.7058026368688 -87.5266028694286,30.7484916966577 -87.5419001370639,30.7856953414756 -87.6159151545761,30.8482964233535 -87.625711591394,30.8769019951762 -87.5898672289917,30.954361030582 -87.59858025629,31.0026307736 -87.1631175932068,31.0031572312178 -86.7793617052065,30.9981918115755 -86.7018524886848,30.9980924099155 -86.3839197436372,30.9915383065212 -86.1814761680363,30.9952251256207 -86.0318217926755,30.993327601114 -85.4865971253016,31.0009980072958 -85.4850102049851,31.0010018399978 -85.0016071976334,31.0012534003007 -85.0169956507657,31.0801028338282 -85.038068227176,31.1267131739262 -85.0686625031451,31.1623640897378 -85.0933668734253,31.1722112527352 -85.1029571297253,31.1969220462589 -85.0936032611314,31.2270745000222 -85.1033613685017,31.2714361848353 -85.0812280506442,31.3030803697052 -85.0825631900095,31.33233449639 -85.0879419916334,31.3672341961667 -85.0614062661802,31.4406634414676 -85.0663120282063,31.4760895555663 -85.0426984349451,31.5196599288858 -85.0427213578705,31.5543898029988 -85.0592853056629,31.6212651525335 -85.1112049587349,31.6842421102739 -85.1186744235414,31.7085715963854 -85.1152869311181,31.731565957183 -85.1301648712312,31.778853672117 -85.1315611123421,31.7838145657199 -85.1355669344631,31.8548844137198 -85.1151502558155,31.9074247500776 -85.0700671081992,31.9807030736301 empty states.AREA: 47618.965 states.STATE_NAME: Mississippi states.STATE_FIPS: 28 states.SUB_REGION: E S Cen states.STATE_ABBR: MS states.POP2000: 2844658 states.POP2001: 2871527 states.POP00_SQMI: 60 states.DEN_0_100: 95 USStates.ID: 20 USStates.State_Name: Mississippi USStates.Date_Entered: Dec. 10 1817 USStates.Year_Entered: 1817 USStates.Year_Settled: 1699 ]]> 1817 #Style_5 clampToGround -89.6640053796168,32.7591641085257 clampToGround -88.4508031165511,31.4356176907354 -88.465096841429,31.7022450293789 -88.4729519210596,31.8888768167036 -88.4377242279507,32.2277556143888 -88.4257919971009,32.3092243032455 -88.3938325168417,32.5804702260594 -88.3480414662251,32.9247582205318 -88.3394663317574,32.9874972113755 -88.3048295831961,33.2888943469818 -88.2745866910838,33.5388014650338 -88.2481956052491,33.7427263969428 -88.2026446708256,34.0591222846376 -88.1993492426569,34.0904480664289 -88.1676133199948,34.3241474912554 -88.1512564133616,34.4652732358205 -88.1364016236301,34.5804972978314 -88.0904686757086,34.8956296636558 -88.10888651427,34.8999364686021 -88.1431049406294,34.9303124572945 -88.1939935775637,35.0044536440488 -88.3517277419525,35.0038322749094 -88.3831462732763,35.0050415368605 -88.7850433913526,35.0031823096823 -88.8125482768171,35.0024385995065 -89.0061963915943,35.0002347214314 -89.1981347323638,35.0008837887335 -89.3423729736416,34.9998048697839 -89.6465587408455,35.0007332954087 -89.7172700655279,34.9992611903073 -90.3054483329108,35.0007887668604 -90.2996040912406,34.9785763166455 -90.2482645856439,34.9498563938362 -90.2419931217762,34.9389999550718 -90.2429392103602,34.9208271417899 -90.2668045737091,34.8966081006537 -90.2963692858759,34.8827875862869 -90.2995432252211,34.8650572468814 -90.3016490140377,34.851873932935 -90.3229203349016,34.8503632334111 -90.3415212787642,34.8606740294564 -90.4040306027044,34.8411352642473 -90.4224103169264,34.8323653841601 -90.433648709805,34.83545134437 -90.4279417146019,34.8727391673229 -90.4381882440559,34.8862771531433 -90.4706293016958,34.8810204416072 -90.4748179857494,34.8578237977629 -90.4520055372854,34.8253158387959 -90.4668069953846,34.7997617150697 -90.4489690543041,34.7608489921917 -90.4515325806393,34.7412990973377 -90.4860259517696,34.7269330960027 -90.5045201438459,34.7299541802284 -90.5170709695817,34.7484702598375 -90.4988360977595,34.7658840525447 -90.5013843558158,34.7899313101001 -90.5161477021542,34.8057007952067 -90.5273632829947,34.8074211116658 -90.5478489155079,34.7904345448067 -90.5333830813361,34.7133527478315 -90.5136680230595,34.702168426854 -90.4700800044602,34.7043544473312 -90.4663261216033,34.6721400223716 -90.5089145701068,34.6381667803775 -90.5390670140484,34.6369954120314 -90.5476504188209,34.6519066940829 -90.5391663025844,34.6860476391663 -90.5611626343263,34.7003866360947 -90.5794050783226,34.6457114581828 -90.588095250095,34.6279161438152 -90.5777188709607,34.6048453840045 -90.5307199720464,34.5557516818131 -90.5372509529854,34.5434303779675 -90.5657859528414,34.5326117672652 -90.5804501933474,34.5203246797393 -90.5901550620873,34.4966090201687 -90.5745057077137,34.4540494001334 -90.5792280444766,34.4331032095237 -90.6038941204851,34.4047029797656 -90.6573464859749,34.3660143325751 -90.6579178140279,34.3301110369 -90.6794406527353,34.3180794258637 -90.6894812814297,34.3202498232312 -90.6812424323426,34.3635040042302 -90.6875906711157,34.3779766258423 -90.7554179493631,34.3722691135712 -90.7619638892818,34.364018026031 -90.7478630150123,34.3178229839966 -90.7583602009326,34.2790815153021 -90.7926330280344,34.3000616903072 -90.8065265292917,34.2994512329978 -90.8239443372371,34.277444457808 -90.8314661258313,34.2296393889001 -90.863518050537,34.2192670758548 -90.9285457793972,34.2502985218322 -90.9338176505974,34.2347805101336 -90.9215946009177,34.2049348828191 -90.8230272013098,34.1906501116551 -90.80761499232,34.1662785963789 -90.8289700905792,34.1487653755381 -90.8467166087328,34.1476512964452 -90.9290256144771,34.1857547898992 -90.9534553235284,34.1559087583442 -90.9423538254879,34.1260478667544 -90.9064179233242,34.1028552934255 -90.8664385809251,34.1010591014266 -90.8864503209315,34.040818090639 -90.9505773863401,34.0313950359426 -90.9734737113361,34.0111046201452 -90.9753809466784,33.9947130844006 -90.9612354430936,33.9789817484763 -90.9648975846708,33.9675683195034 -90.9869243510316,33.9609229307681 -91.0003678622968,33.9684795241317 -91.0096532951119,33.9906347187545 -91.0311688375349,33.9858050201095 -91.0698054890087,34.0062011888095 -91.0889634034043,33.9945738225001 -91.075817398803,33.9747494464877 -91.0185719444065,33.9364134475297 -91.0614805441139,33.8671886882777 -91.0549265134198,33.8436334807269 -91.0289626430975,33.8166950131436 -90.990478540789,33.7990071442826 -90.9841458001964,33.7854500107548 -90.9954834069188,33.7716600260669 -91.0185401645943,33.7640838422967 -91.0435120353132,33.7696642449716 -91.066500277623,33.7866351498749 -91.1055258418152,33.7765486562049 -91.1370973386382,33.7801949325541 -91.1430026284613,33.7719285490089 -91.1381116937944,33.7233341453239 -91.129055226842,33.7125503367781 -91.1046784705554,33.7083431494327 -91.0563218415079,33.7194673047115 -91.0389337685444,33.7056013490966 -91.0379417447915,33.6833276928149 -91.0838797162424,33.6626975706472 -91.1211582957132,33.6776390014341 -91.1634115725545,33.7184243604201 -91.2117911105934,33.7090740491267 -91.215254854952,33.690832533146 -91.2054201032027,33.670054473021 -91.1545148512779,33.6371425699443 -91.1507609201204,33.6162728236941 -91.1681333805491,33.5773559141775 -91.18791706052,33.5747923198036 -91.2268436629257,33.5905920919159 -91.2277437480702,33.5564627810534 -91.2135982558382,33.539388695493 -91.2042137720816,33.5386182116453 -91.1829574461633,33.5234628974492 -91.1805158805851,33.5121258753279 -91.2077535832103,33.4735103338542 -91.2272625589118,33.4595677906787 -91.2329618446089,33.4435578002255 -91.1818813238998,33.4475023901927 -91.1718407642763,33.4667586515282 -91.1742900279968,33.5044814214406 -91.1650887084894,33.511893278083 -91.1289087637518,33.4933048406628 -91.119066439103,33.4697877493532 -91.1198217287377,33.4529461878788 -91.1306252922663,33.4432379167019 -91.1989411364413,33.4222266229444 -91.2042742333541,33.414414252442 -91.1850932093454,33.3919462343914 -91.137743597831,33.3889939554845 -91.0992368247907,33.4150136902789 -91.0859079351743,33.4629711994008 -91.0738683451831,33.4663205040007 -91.0610886583117,33.4601256250454 -91.0616226774054,33.4319126666717 -91.0787969781513,33.4102951070005 -91.107049532132,33.3935220665091 -91.1305334944524,33.3595184071126 -91.1418557768241,33.3225012621225 -91.1226136683412,33.2686236274109 -91.1030130817749,33.249329353099 -91.0764315269204,33.2924766671242 -91.0539393519749,33.2936936328911 -91.0405340548071,33.2820400168761 -91.054648817909,33.2459002185311 -91.0921102874347,33.2258161142148 -91.0864260899183,33.1617229779066 -91.0959630937654,33.1452056628518 -91.1214383904209,33.1311906845818 -91.1777374599034,33.1504085143774 -91.1956136504654,33.1405858277008 -91.1906466851528,33.1133457020205 -91.1468983565878,33.0907747749873 -91.1178981011678,33.0656937749518 -91.1240933135817,33.0473950555076 -91.1567938514993,33.040555368368 -91.1607840947755,33.0218332391698 -91.1622413295772,33.0131626211682 -91.1619742599701,33.0004180010727 -91.2092701257606,32.935978073614 -91.1984207869413,32.9142883501159 -91.1698097693143,32.9051486450656 -91.1372847877828,32.9179123119183 -91.1300442984655,32.9375917893587 -91.1324628926305,32.9753485871396 -91.1119239712728,32.9874752104853 -91.0927812664224,32.9877460881529 -91.075698595519,32.9538382302101 -91.0796355518755,32.8772908363965 -91.1422592525615,32.8413420630697 -91.1564502239537,32.7628111152121 -91.1365751786759,32.751256737741 -91.0978169539142,32.7495287526143 -91.0591351228787,32.7236507270734 -91.1396654000576,32.663308001886 -91.1463718367631,32.6449866188679 -91.1111005222843,32.5976630747531 -91.0639193056015,32.6065243385273 -91.0477369807394,32.6144891676735 -91.027571941098,32.6416374743549 -91.0079868510271,32.6428085554835 -90.9962373961764,32.6261121948604 -90.9987628339888,32.6156030444933 -91.0324322175751,32.5828091644492 -91.0589754670571,32.5765265579993 -91.0733724921787,32.5617489074888 -91.0631947408495,32.5422984158072 -90.9951774336628,32.511781889744 -90.9921562021718,32.4954212340256 -91.0197904195744,32.4909543534273 -91.0373078509381,32.4970957768502 -91.0888910499039,32.5487755489391 -91.1188523792708,32.524205893418 -91.1177919517207,32.4987093128914 -91.0586173128584,32.4471403993983 -91.027015703315,32.4425591367523 -90.987555664684,32.4531064313693 -90.9655902707379,32.4401789961165 -90.9700917310243,32.41916079336 -91.0093152122207,32.3972270178482 -90.9989695795512,32.3663787517009 -90.9846718656927,32.3565410587047 -90.9150295865817,32.3460435683761 -90.8852590969197,32.3814999498488 -90.8754551600106,32.3797948696303 -90.9164792854551,32.3054643188479 -90.9293503055389,32.2975529103154 -90.9717628039961,32.3038468581634 -90.9808724634335,32.2978007782368 -90.9839242898836,32.2872802390738 -90.9711219862771,32.2692145344565 -90.9773247619376,32.2235541462358 -91.0417564572334,32.249588584805 -91.06256993823,32.2328921503996 -91.0880222320098,32.2325373651522 -91.1006796950342,32.2150360650047 -91.1160609494648,32.225755012482 -91.1573751424246,32.2060145228895 -91.1669578883395,32.1721410581455 -91.1566502997803,32.1449354980044 -91.1088203873902,32.1351435271569 -91.0831163105895,32.148731083052 -91.0541543655413,32.1345446969889 -91.045418520229,32.1588244987585 -91.0545816942883,32.1846835164502 -91.0245210933432,32.1700508264511 -91.0039364614505,32.1694138145198 -91.0113905060031,32.1342128745109 -91.0411916486593,32.1078235881288 -91.0739225856783,32.0941482900527 -91.0651179868997,32.0587070505858 -91.0894106198667,32.0569980949997 -91.125727524233,32.0883996668359 -91.1456941711085,32.085828620503 -91.1431229851656,32.0662598368965 -91.086992022729,32.0438110998955 -91.0732434735012,32.0321499472516 -91.0724881293938,32.0212135515791 -91.1081106350256,31.9919842773777 -91.1631429199385,31.9884481049272 -91.2015421481539,31.914448862447 -91.2444813396436,31.8786718608009 -91.2646921176812,31.8655859136312 -91.2413834145028,31.8353877405104 -91.2507295828595,31.8188210015347 -91.2768000889638,31.8275334941804 -91.2926470392426,31.8614928392569 -91.3034734879704,31.863144546493 -91.3348464016758,31.8434784170896 -91.3472366701502,31.7958323053943 -91.3671346354039,31.7708677200763 -91.3362574528706,31.7636219421964 -91.2626849165052,31.7739271210982 -91.2639894905689,31.7597635597382 -91.2826210069941,31.7498875713679 -91.3399120227254,31.7585428158009 -91.3704992222101,31.7534751058186 -91.3650745397498,31.7517413813867 -91.3879480650132,31.716682847539 -91.3891838304294,31.6546051479529 -91.4084028346628,31.6255298775261 -91.4573776301659,31.6269660621133 -91.4977690885564,31.6508953247071 -91.5078096575379,31.6438707722357 -91.5088777626843,31.621946112804 -91.4971510160937,31.6043585245596 -91.4153838994301,31.6025923876789 -91.404252162172,31.5863534317346 -91.4235780361348,31.5627464662349 -91.4644730285793,31.5428664076677 -91.5029570558284,31.5348804964065 -91.506481902402,31.5256872825259 -91.5079007172192,31.4530834240658 -91.4732924895748,31.4203746865528 -91.4659221569407,31.4040690532825 -91.4808380383191,31.3777805832693 -91.4947087573411,31.3752496098054 -91.5230145322414,31.3920917852495 -91.5341690214585,31.4092388142744 -91.5348024158407,31.434335247521 -91.5524724466605,31.4330997709492 -91.5677314723038,31.4214064364688 -91.5593769120174,31.3882304242528 -91.534573237599,31.3827500700431 -91.5444076356665,31.3688746277826 -91.5427900456635,31.3469862680809 -91.5057561590215,31.3234567034819 -91.5024753378186,31.2988580123244 -91.5170781714622,31.2830696578166 -91.5569194773614,31.2704690710127 -91.634214237565,31.2776940549104 -91.6436824254271,31.2711178839201 -91.636998739959,31.241104186479 -91.6009643646854,31.2139296737496 -91.5914883087676,31.1784818992551 -91.6201139178138,31.1276943834946 -91.5649752722808,31.0821350184803 -91.552081308545,31.0581597906819 -91.5727876169466,31.032647877549 -91.6277732104017,31.0119601110946 -91.6322974277285,31.0013650074093 -91.1792074543421,31.0004616671834 -91.0570121642698,31.0004181174657 -90.8297139029015,31.0015458122993 -90.5602548970702,31.0017063331187 -90.5426536021385,31.0023300433606 -90.3436602569889,31.0053899463824 -90.2593768226071,31.0073700245843 -89.8335587379484,31.0071848554001 -89.7327174808554,31.0074450145967 -89.7236228724726,31.0015247201013 -89.726781296615,30.9846164008972 -89.7198229059406,30.9754936822636 -89.7395225295214,30.965400256862 -89.7485405475115,30.9498480428011 -89.7404756300233,30.9261095623025 -89.758054281525,30.9210436978628 -89.7457551089107,30.910107202755 -89.7468002599141,30.9027945578147 -89.7633107888117,30.9004713517936 -89.7658508573246,30.8620847088871 -89.7850241384817,30.8615791361643 -89.7747999238727,30.8305319403895 -89.7960942151255,30.8291051373468 -89.7965669822497,30.8126526475249 -89.8109335655279,30.8116989081619 -89.8246894189972,30.7897246849283 -89.813351089932,30.7481682046961 -89.8255660189393,30.7426483690047 -89.8233990376437,30.7330545562641 -89.8356140001819,30.7293619382654 -89.8440520689247,30.7124249093943 -89.8307229637224,30.7037809798175 -89.8413433452435,30.7005499465483 -89.8417854969649,30.6795198391887 -89.8353918067202,30.675882597152 -89.8454474865972,30.6662525153547 -89.8295245363783,30.6708739896173 -89.8193538991109,30.6512457789506 -89.8055366119584,30.6494567398327 -89.8203071285261,30.6242705431171 -89.7908478814126,30.5539438185454 -89.7727961225489,30.5512468627469 -89.7551786590929,30.5156218767139 -89.7323197493778,30.4978380271641 -89.719059260721,30.4960375437604 -89.7131840947211,30.4814159991074 -89.695681461547,30.4782460714929 -89.6945978512597,30.4681868413409 -89.6834507334724,30.4627185730285 -89.6754620986314,30.4453524057824 -89.6753697006504,30.4000744263161 -89.6546699231165,30.3790653329062 -89.6466888230347,30.3552905752797 -89.633451292423,30.3553078019512 -89.620198293058,30.343429054806 -89.6185880809724,30.323760747644 -89.6370822520275,30.3118436964481 -89.6391725011899,30.2958297965272 -89.6259425171347,30.2903558515233 -89.6216616714494,30.2569643699525 -89.6063106026528,30.247828412852 -89.6100033159566,30.2414198536792 -89.5738839850623,30.1949353118833 -89.4381213198934,30.2009670531795 -89.4156141811479,30.2564852330285 -89.3185425339085,30.3188533708312 -89.3575310460273,30.3652847342137 -89.335046582448,30.3804232519676 -89.2735282183121,30.3723862703524 -89.2761213477847,30.3148407273573 -88.8857264645103,30.3982888782491 -88.9302229107087,30.4168011352414 -88.873786281284,30.4302766265056 -88.6832644281806,30.3423228324023 -88.5777607682516,30.3807498514342 -88.4642372948552,30.3260764687888 -88.3992249519191,30.3528859313249 -88.4014151536825,30.3935517804008 -88.4172426281035,30.7364571156747 -88.4291990018716,31.0006950876596 -88.4345631161403,31.1208794693781 -88.4508031165511,31.4356176907354 empty states.AREA: 58629.222 states.STATE_NAME: Georgia states.STATE_FIPS: 13 states.SUB_REGION: S Atl states.STATE_ABBR: GA states.POP2000: 8186453 states.POP2001: 8423422 states.POP00_SQMI: 140 states.DEN_0_100: 88 USStates.ID: 4 USStates.State_Name: Georgia USStates.Date_Entered: Jan. 2 1788 USStates.Year_Entered: 1788 USStates.Year_Settled: 1733 ]]> 1788 #Style_5 clampToGround -83.4542258116492,32.6550957052741 clampToGround -85.1301648712312,31.778853672117 -85.1152869311181,31.731565957183 -85.1186744235414,31.7085715963854 -85.1112049587349,31.6842421102739 -85.0592853056629,31.6212651525335 -85.0427213578705,31.5543898029988 -85.0426984349451,31.5196599288858 -85.0663120282063,31.4760895555663 -85.0614062661802,31.4406634414676 -85.0879419916334,31.3672341961667 -85.0825631900095,31.33233449639 -85.0812280506442,31.3030803697052 -85.1033613685017,31.2714361848353 -85.0936032611314,31.2270745000222 -85.1029571297253,31.1969220462589 -85.0933668734253,31.1722112527352 -85.0686625031451,31.1623640897378 -85.038068227176,31.1267131739262 -85.0169956507657,31.0801028338282 -85.0016071976334,31.0012534003007 -85.0001419997276,30.9793194525836 -84.9735677000237,30.9636643794248 -84.9690122705718,30.9270937759378 -84.9377761495732,30.8949576392884 -84.9269262387193,30.8469221763844 -84.9325639506934,30.802625045985 -84.9268948431928,30.7760887042882 -84.915343413445,30.7540898084089 -84.8882887897453,30.7438893824889 -84.8645830695962,30.7145032030319 -84.8630037111776,30.7126645389724 -84.3744481609224,30.6940918759687 -84.2816633081929,30.6904191353307 -84.0755622170769,30.6785776000623 -84.0007301518962,30.6755376606981 -83.7378439398488,30.6604911909877 -83.6090560569222,30.6507845923385 -83.3106007386698,30.6343032375269 -83.301315482328,30.6332849379512 -83.1324403803389,30.6213413987424 -82.6963559598951,30.5957200992445 -82.5829575782702,30.5890537915584 -82.4631348832503,30.5826898377285 -82.4120926709198,30.5773075208331 -82.2210395703097,30.5670760290347 -82.2383961480861,30.531444743061 -82.2193674835883,30.5029705380916 -82.1991871719511,30.4900145014502 -82.2055648250395,30.4238531552503 -82.1802341078135,30.3686309203557 -82.1646391875519,30.3612918341259 -82.0527668135565,30.3637944548298 -82.0383547553639,30.3789045785554 -82.0460994945739,30.4340681576703 -82.0351206760364,30.442878325233 -82.0225094921996,30.4777178378262 -82.0058016281534,30.5709905104499 -82.0136526868731,30.5986905381626 -82.044911618847,30.6509107642683 -82.0318811960902,30.75753276526 -82.0129673359901,30.7642564144355 -82.015538717102,30.7913192479577 -81.9814798819521,30.7783517328393 -81.9615513721702,30.7960077712109 -81.9530292094585,30.8204309615747 -81.9438049950591,30.8242494271993 -81.9075183587545,30.8134750654558 -81.899141093328,30.8283082947867 -81.8730017876477,30.7990844044587 -81.803198160572,30.7880849801985 -81.7767079395988,30.7615846557533 -81.7577101754202,30.7696316702207 -81.7366750235978,30.7638888413088 -81.7167688183456,30.7453688965497 -81.6424775174441,30.7290809870991 -81.6279809976449,30.7317742622409 -81.6047710156425,30.7163212810582 -81.6011698908184,30.7248871300769 -81.5365912711366,30.706577299159 -81.5285954877916,30.7214526527694 -81.4983821597286,30.7575148369311 -81.529269052571,30.8647786931871 -81.4848273848571,30.9449000982573 -81.5285609645024,30.9621190260309 -81.4908554850397,30.9858121631104 -81.5354294328489,31.0767563036925 -81.4753376980902,31.0438233173066 -81.5252592487601,31.0865485378616 -81.5283881057047,31.1311281139373 -81.3810060604754,31.1489458440312 -81.3102496316888,31.2426949085912 -81.3008349328935,31.2758189009071 -81.3888131895834,31.2971490597463 -81.3947715908228,31.2640900090948 -81.4103443748257,31.3114801993601 -81.3655812868468,31.3445548526356 -81.3130659410716,31.3375975453654 -81.2085717415423,31.466897315876 -81.1947704996618,31.5051521393949 -81.2391450953454,31.5568831089359 -81.2407192840183,31.6401735904022 -81.1871897446126,31.5998982648136 -81.1349370156985,31.6460701090404 -81.2897291147454,31.799665157239 -81.1751775864286,31.7358025222833 -81.1963663829165,31.7848438785274 -81.1740127367476,31.7998108690079 -81.1368240727791,31.7270738398996 -81.061042730066,31.7775429698153 -81.0390109744209,31.8233600040029 -81.1414678053095,31.8535166905114 -81.1802499193908,31.89767267427 -81.2201057693034,31.8931398643438 -81.2064883559565,31.9206507082445 -81.244947183707,31.8946916725745 -81.2842943640751,31.9494280109591 -81.239683224867,31.9034156747495 -81.2039099248023,31.9284324409696 -81.1973025263735,31.9198956907679 -81.2072581189501,31.900120837565 -81.1799984795161,31.9058911046943 -81.1398508187201,31.8643404881217 -80.970875584245,31.8903139501193 -80.9735561398863,31.9479287150516 -80.8947535795152,32.0059939238177 -81.1048757596731,32.1054460026813 -81.1191123074235,32.1176140300944 -81.1147177986615,32.1905932444351 -81.1476925517913,32.2244467846609 -81.1481731109993,32.2577131389355 -81.1240481751459,32.2766445515914 -81.131890044888,32.3326183284591 -81.1418842567213,32.348467456337 -81.1574790787137,32.3387404019195 -81.1791229158612,32.3717812943982 -81.1782527491877,32.3868294350367 -81.1999269050201,32.4203165559094 -81.1951572478443,32.4645607584348 -81.2362397883712,32.520613973536 -81.2679854788639,32.5339298482675 -81.2743023822226,32.5548140176008 -81.298983534041,32.567287009571 -81.3404038613665,32.5713602924434 -81.3514893657912,32.5835283490035 -81.3667025463888,32.5819794584472 -81.3662676134818,32.5883649179497 -81.3849063649096,32.5958830263814 -81.4121052828609,32.6256090136088 -81.3994783141749,32.6508153349079 -81.4071915250438,32.6867019963945 -81.4205354721022,32.7015669413645 -81.4076260787666,32.7418061601564 -81.4230377099309,32.7498126483616 -81.4160719983172,32.7567284399427 -81.4302403174263,32.7861535714108 -81.4208333313248,32.8094947304519 -81.4303092863297,32.8203050210012 -81.4239616394502,32.831771535068 -81.4323312938326,32.8416816085137 -81.4553190013329,32.8445766582975 -81.4585388413489,32.8714003875851 -81.4832049987009,32.876092075685 -81.4650317117614,32.8977282069894 -81.4770481330604,32.8975717263241 -81.5102366685686,32.9472214740899 -81.509839970123,32.9554188973732 -81.4978997781492,32.9596759183359 -81.4927348468244,33.0048133137248 -81.5087491547636,33.0127933490709 -81.5296007135576,33.0439278437875 -81.5476598503141,33.0436837254085 -81.5600349819807,33.0608149350319 -81.5958251922606,33.07079003117 -81.610962223749,33.087875452303 -81.7042792512713,33.1229388681766 -81.740374666284,33.1446970762157 -81.7634082640351,33.1698348857377 -81.7595935205582,33.1953809754874 -81.7698781322982,33.2138814847346 -81.7798346609471,33.2173679140961 -81.8015635396811,33.2079267401357 -81.8107647427681,33.2264425091539 -81.8539630744851,33.2435008646337 -81.8367965483259,33.2606131041944 -81.8398406003094,33.2733079499958 -81.826572899138,33.2694248257545 -81.8607147570281,33.2970915898305 -81.8401072844714,33.3083447178855 -81.8655440806912,33.3156684726899 -81.8768740167338,33.3068376679828 -81.893483278419,33.3352369460829 -81.9120917492517,33.3321965848843 -81.9114125905005,33.3494956248163 -81.9367121514194,33.3504376050416 -81.9450663328463,33.3771470802287 -81.9258093500634,33.3765598081382 -81.9403358095376,33.408163308089 -81.9135636320837,33.4154417359506 -81.9272738095671,33.4361432282633 -81.9166380824955,33.451332910189 -81.9363832806115,33.4710196640405 -81.9809170141647,33.4907366765445 -81.9965347107135,33.5204905181363 -82.0201406100581,33.5387321304637 -82.0385431417392,33.5475058176817 -82.0656815446151,33.5738649217255 -82.1164029880357,33.5947766297079 -82.1389789104035,33.5939068648655 -82.1671320836866,33.6152152043502 -82.1921876394497,33.6238399454958 -82.21420671543,33.6807345454544 -82.2348981721706,33.6903395482787 -82.2662179171499,33.7615957491367 -82.3055105866775,33.7826480434626 -82.3111185523946,33.8039143524229 -82.3513115818956,33.8353919365428 -82.3657086388162,33.8360097346945 -82.390596547794,33.8541402272832 -82.424525414299,33.8602546364245 -82.4566308989782,33.8782248379062 -82.5175384743497,33.931029734258 -82.576614784124,33.9592878315125 -82.5736087006275,33.9689044112754 -82.5961385808407,34.0134202383713 -82.6029437979289,34.0346366848087 -82.6603553035688,34.1083560439036 -82.7357807829899,34.1697961502507 -82.7425935601244,34.2055536194311 -82.7580279876581,34.2333729594522 -82.7641699677175,34.2809601537556 -82.7828704380478,34.2905157146731 -82.8085830535015,34.3398998890232 -82.8364394858077,34.3710462423795 -82.844092601526,34.4126753526629 -82.8680428963264,34.4575429723072 -82.9050550411483,34.4779853553029 -82.9819628115439,34.4764970914664 -83.0079495911058,34.4708283883787 -83.0549948395099,34.4900615932447 -83.0790212167266,34.5189724434825 -83.1081211059023,34.5350165151609 -83.1373660262876,34.5678676740658 -83.1589505272632,34.5768318282397 -83.1648789222652,34.5989373632901 -83.236987273421,34.6133215989917 -83.298894804541,34.6629454181783 -83.3397900149061,34.6776926363039 -83.3506851506329,34.7096474786312 -83.3503341394554,34.72738151575 -83.3234241306547,34.752233551772 -83.3226905715455,34.787244331982 -83.3027537558249,34.8055316318054 -83.2701139291264,34.8150795057964 -83.2677710107399,34.8392299311095 -83.2504212724513,34.8397104674801 -83.2503065783279,34.8501663657462 -83.2356879138925,34.8623846921569 -83.243073026274,34.8780818464701 -83.2328036461865,34.8738209511595 -83.2194285542058,34.8891824860544 -83.203513267742,34.8841701297206 -83.1821802554349,34.9106474165588 -83.1583528037159,34.9176510672928 -83.1550259840766,34.9322800740411 -83.1375618314676,34.9304757693624 -83.1256365359246,34.940790436291 -83.1131011728063,34.9361251832685 -83.1273147785663,34.9543742120639 -83.12140170134,34.9608933437966 -83.1155422841629,34.9546869901268 -83.1004503495987,34.9841622888642 -83.1061569738507,35.000366708131 -83.5128876420542,34.9921157535224 -83.5492972918908,34.9896284845873 -83.9378991314943,34.9894775119032 -83.9884542500545,34.9891518047362 -84.118152397807,34.9883069959845 -84.3237734916339,34.989090556154 -84.6186847093286,34.9887597674461 -84.7711343281899,34.9907572255424 -84.8004169251833,34.9928322796908 -84.9678571565779,34.9926829480827 -84.9727935378178,34.9926295267483 -85.2677172911793,34.9891498087636 -85.3599438878245,34.9899781417047 -85.4673839007084,34.9901237462044 -85.6089602162505,34.9901641616199 -85.5830580356282,34.8623226551191 -85.5346925955902,34.6224884025546 -85.5258341311767,34.5846856151065 -85.5118559301513,34.5230148510197 -85.4602859241732,34.2901615301398 -85.4165672299404,34.0869203579979 -85.3957377905852,33.9598292697156 -85.3840109358491,33.9054097874599 -85.3352868510977,33.6549230949434 -85.3049800767665,33.4905940310641 -85.2938249844532,33.425875708363 -85.2338462673976,33.129237260647 -85.2335028922441,33.1201394011529 -85.1807197284529,32.8718130182966 -85.1623013377526,32.8074457725548 -85.1280898176054,32.7770703815279 -85.1333007048373,32.7563151798039 -85.1248851250497,32.7443832224212 -85.1138678519411,32.7343891188468 -85.1077333041684,32.6899723746491 -85.0904749305908,32.6761523261383 -85.1038037187814,32.6459103823229 -85.0863240406897,32.6284512647951 -85.0841493949267,32.603004344931 -85.0707744216369,32.5812538387594 -84.9956522169706,32.518928479096 -84.9898150430422,32.4548361836926 -84.9653850518902,32.4294501858587 -84.970961884914,32.3968128124947 -84.9844889642181,32.3870933241337 -84.9716635313846,32.3715031963467 -85.0020899980221,32.3470785227396 -85.0053324510846,32.3295925258289 -84.9210709055564,32.2931369847317 -84.8946035025639,32.2687353881118 -84.8940158788823,32.2591761298648 -84.9053609608961,32.2495557759674 -84.9236796279908,32.2473889995768 -84.9160041260552,32.2285563686775 -84.9283716437355,32.2179784387895 -84.9757438025875,32.2122487204353 -84.9603852752889,32.1919284376309 -85.0078260926386,32.1788785384061 -85.0243823514691,32.1662750781008 -85.0533136579289,32.1266376448382 -85.046187259254,32.0908949913561 -85.0566549357244,32.0696439454843 -85.0620107617352,32.0500102920991 -85.0567002477577,32.0173765203509 -85.0700671081992,31.9807030736301 -85.1151502558155,31.9074247500776 -85.1355669344631,31.8548844137198 -85.1315611123421,31.7838145657199 -85.1301648712312,31.778853672117 clampToGround -81.4850555967462,30.9038830704629 -81.5033053772433,30.8817350483411 -81.4698871419111,30.8602588644255 -81.4794603415988,30.7368833934474 -81.4557166048237,30.7164274298842 -81.4030527080982,30.9388031406114 -81.416405104746,30.970600047506 -81.4850555967462,30.9038830704629 empty states.AREA: 30867.398 states.STATE_NAME: South Carolina states.STATE_FIPS: 45 states.SUB_REGION: S Atl states.STATE_ABBR: SC states.POP2000: 4012012 states.POP2001: 4077608 states.POP00_SQMI: 130 states.DEN_0_100: 88 USStates.ID: 8 USStates.State_Name: South Carolina USStates.Date_Entered: May 23 1788 USStates.Year_Entered: 1788 USStates.Year_Settled: 1670 ]]> 1788 #Style_5 clampToGround -80.9010200865815,33.9187422703577 clampToGround -81.7595935205582,33.1953809754874 -81.7634082640351,33.1698348857377 -81.740374666284,33.1446970762157 -81.7042792512713,33.1229388681766 -81.610962223749,33.087875452303 -81.5958251922606,33.07079003117 -81.5600349819807,33.0608149350319 -81.5476598503141,33.0436837254085 -81.5296007135576,33.0439278437875 -81.5087491547636,33.0127933490709 -81.4927348468244,33.0048133137248 -81.4978997781492,32.9596759183359 -81.509839970123,32.9554188973732 -81.5102366685686,32.9472214740899 -81.4770481330604,32.8975717263241 -81.4650317117614,32.8977282069894 -81.4832049987009,32.876092075685 -81.4585388413489,32.8714003875851 -81.4553190013329,32.8445766582975 -81.4323312938326,32.8416816085137 -81.4239616394502,32.831771535068 -81.4303092863297,32.8203050210012 -81.4208333313248,32.8094947304519 -81.4302403174263,32.7861535714108 -81.4160719983172,32.7567284399427 -81.4230377099309,32.7498126483616 -81.4076260787666,32.7418061601564 -81.4205354721022,32.7015669413645 -81.4071915250438,32.6867019963945 -81.3994783141749,32.6508153349079 -81.4121052828609,32.6256090136088 -81.3849063649096,32.5958830263814 -81.3662676134818,32.5883649179497 -81.3667025463888,32.5819794584472 -81.3514893657912,32.5835283490035 -81.3404038613665,32.5713602924434 -81.298983534041,32.567287009571 -81.2743023822226,32.5548140176008 -81.2679854788639,32.5339298482675 -81.2362397883712,32.520613973536 -81.1951572478443,32.4645607584348 -81.1999269050201,32.4203165559094 -81.1782527491877,32.3868294350367 -81.1791229158612,32.3717812943982 -81.1574790787137,32.3387404019195 -81.1418842567213,32.348467456337 -81.131890044888,32.3326183284591 -81.1240481751459,32.2766445515914 -81.1481731109993,32.2577131389355 -81.1476925517913,32.2244467846609 -81.1147177986615,32.1905932444351 -81.1191123074235,32.1176140300944 -81.1048757596731,32.1054460026813 -80.8929144216763,32.0681738057597 -80.7805615106251,32.2481238083211 -80.8218663898145,32.4007102648342 -80.8671770674896,32.5326950263867 -80.8305175056732,32.5162815805464 -80.7847865192432,32.505052086999 -80.7993818560661,32.4733077955364 -80.7419633539854,32.3602127098571 -80.6780144859406,32.2856655575355 -80.6260281028646,32.2728215099914 -80.4603924051366,32.3186854171277 -80.4427976569234,32.3735076541569 -80.4860719548133,32.4310310010487 -80.643557949165,32.4984607119708 -80.646411318821,32.5188798556612 -80.5388820475867,32.509865961027 -80.5503947202668,32.5578414282125 -80.4807072022539,32.5104341662154 -80.3998030228987,32.5049598760522 -80.4159926698028,32.6691608173312 -80.3908685404661,32.6554016082511 -80.3471740900825,32.5119554753402 -80.2906540711458,32.5040705242083 -80.210802923219,32.5616008756391 -79.996617577777,32.6057873204983 -79.8963932808549,32.6774213766553 -79.8916550930006,32.7340299637097 -79.9479839110447,32.8107992428057 -79.9621193329391,32.9044100579085 -79.9302501550122,32.9142211471988 -79.9071411647255,32.8593897322583 -79.7998597618185,32.9299559811019 -79.9074859188057,32.7907075188098 -79.752320557813,32.7942355699465 -79.6068120677706,32.8992437057638 -79.5876458186165,32.9251067078811 -79.617233758083,32.9809680557659 -79.5823576143392,33.0160128900269 -79.4106186951388,33.013868133398 -79.2878774603469,33.1046981970444 -79.2978339955968,33.1389615091697 -79.3487551122036,33.1549947700894 -79.2295625305206,33.1415057897189 -79.2019116731801,33.1836884836365 -79.2708459617929,33.2970378799416 -79.1581153144963,33.3424334672148 -79.1501499541409,33.3172563456719 -79.1208659857076,33.4307786153619 -79.0006955038877,33.5726293077796 -78.8548808347264,33.7163622029531 -78.5859310888034,33.8535316857414 -78.6225918977295,33.865708046154 -78.5794534961072,33.8821646134616 -78.6554531485329,33.9488449988485 -79.0742575899197,34.3047384944277 -79.4469133528043,34.6192221953644 -79.4557408419562,34.6342519700477 -79.6672823384891,34.8008202005653 -79.685738680014,34.8054127206548 -79.9197366317695,34.8080740704278 -80.3250654065352,34.8149167168925 -80.5613348947421,34.815379673307 -80.7998557787081,34.8162600736923 -80.785444630059,34.940788108541 -80.8399590540857,35.0021664433249 -80.8945103715547,35.0598808081622 -80.9275918870396,35.1013947091143 -81.0396852000525,35.0373453689435 -81.0653500212191,35.0666253067042 -81.0282405888455,35.1055509640026 -81.0488397402735,35.1321534001715 -81.0490990166388,35.1516727757939 -81.3226257414279,35.1638918108331 -81.3619801868632,35.1629867122026 -81.7651810887702,35.1825960728566 -81.8704165711924,35.1832378034331 -81.9712727030758,35.1884000260399 -82.2100104423684,35.1932410593964 -82.278165577144,35.1951216082193 -82.3206088962679,35.1843038355905 -82.3507000333949,35.1927881586207 -82.3599623343986,35.1830646579415 -82.3712159851947,35.1828397610023 -82.389450685395,35.2083565365976 -82.4377613823112,35.1696762171977 -82.4665859914405,35.1736172290209 -82.524479651378,35.1546774490548 -82.5698759075391,35.1496073738685 -82.654344125494,35.1195740504075 -82.6859002249553,35.1215804311176 -82.6878846328013,35.0979182706584 -82.6972082635003,35.0913494747721 -82.7712011457841,35.0855376628965 -82.8875562556649,35.055473206413 -83.0071465788827,35.0242932065357 -83.1061569738507,35.000366708131 -83.1004503495987,34.9841622888642 -83.1155422841629,34.9546869901268 -83.12140170134,34.9608933437966 -83.1273147785663,34.9543742120639 -83.1131011728063,34.9361251832685 -83.1256365359246,34.940790436291 -83.1375618314676,34.9304757693624 -83.1550259840766,34.9322800740411 -83.1583528037159,34.9176510672928 -83.1821802554349,34.9106474165588 -83.203513267742,34.8841701297206 -83.2194285542058,34.8891824860544 -83.2328036461865,34.8738209511595 -83.243073026274,34.8780818464701 -83.2356879138925,34.8623846921569 -83.2503065783279,34.8501663657462 -83.2504212724513,34.8397104674801 -83.2677710107399,34.8392299311095 -83.2701139291264,34.8150795057964 -83.3027537558249,34.8055316318054 -83.3226905715455,34.787244331982 -83.3234241306547,34.752233551772 -83.3503341394554,34.72738151575 -83.3506851506329,34.7096474786312 -83.3397900149061,34.6776926363039 -83.298894804541,34.6629454181783 -83.236987273421,34.6133215989917 -83.1648789222652,34.5989373632901 -83.1589505272632,34.5768318282397 -83.1373660262876,34.5678676740658 -83.1081211059023,34.5350165151609 -83.0790212167266,34.5189724434825 -83.0549948395099,34.4900615932447 -83.0079495911058,34.4708283883787 -82.9819628115439,34.4764970914664 -82.9050550411483,34.4779853553029 -82.8680428963264,34.4575429723072 -82.844092601526,34.4126753526629 -82.8364394858077,34.3710462423795 -82.8085830535015,34.3398998890232 -82.7828704380478,34.2905157146731 -82.7641699677175,34.2809601537556 -82.7580279876581,34.2333729594522 -82.7425935601244,34.2055536194311 -82.7357807829899,34.1697961502507 -82.6603553035688,34.1083560439036 -82.6029437979289,34.0346366848087 -82.5961385808407,34.0134202383713 -82.5736087006275,33.9689044112754 -82.576614784124,33.9592878315125 -82.5175384743497,33.931029734258 -82.4566308989782,33.8782248379062 -82.424525414299,33.8602546364245 -82.390596547794,33.8541402272832 -82.3657086388162,33.8360097346945 -82.3513115818956,33.8353919365428 -82.3111185523946,33.8039143524229 -82.3055105866775,33.7826480434626 -82.2662179171499,33.7615957491367 -82.2348981721706,33.6903395482787 -82.21420671543,33.6807345454544 -82.1921876394497,33.6238399454958 -82.1671320836866,33.6152152043502 -82.1389789104035,33.5939068648655 -82.1164029880357,33.5947766297079 -82.0656815446151,33.5738649217255 -82.0385431417392,33.5475058176817 -82.0201406100581,33.5387321304637 -81.9965347107135,33.5204905181363 -81.9809170141647,33.4907366765445 -81.9363832806115,33.4710196640405 -81.9166380824955,33.451332910189 -81.9272738095671,33.4361432282633 -81.9135636320837,33.4154417359506 -81.9403358095376,33.408163308089 -81.9258093500634,33.3765598081382 -81.9450663328463,33.3771470802287 -81.9367121514194,33.3504376050416 -81.9114125905005,33.3494956248163 -81.9120917492517,33.3321965848843 -81.893483278419,33.3352369460829 -81.8768740167338,33.3068376679828 -81.8655440806912,33.3156684726899 -81.8401072844714,33.3083447178855 -81.8607147570281,33.2970915898305 -81.826572899138,33.2694248257545 -81.8398406003094,33.2733079499958 -81.8367965483259,33.2606131041944 -81.8539630744851,33.2435008646337 -81.8107647427681,33.2264425091539 -81.8015635396811,33.2079267401357 -81.7798346609471,33.2173679140961 -81.7698781322982,33.2138814847346 -81.7595935205582,33.1953809754874 clampToGround -80.7678049632079,32.2586481788875 -80.8192668211749,32.1046981906837 -80.6666165553831,32.2201132440769 -80.7190834927722,32.2722047351394 -80.7678049632079,32.2586481788875 empty states.AREA: 52913.232 states.STATE_NAME: Arkansas states.STATE_FIPS: 05 states.SUB_REGION: W S Cen states.STATE_ABBR: AR states.POP2000: 2673400 states.POP2001: 2706444 states.POP00_SQMI: 51 states.DEN_0_100: 96 USStates.ID: 25 USStates.State_Name: Arkansas USStates.Date_Entered: June 15 1836 USStates.Year_Entered: 1836 USStates.Year_Settled: 1686 ]]> 1836 #Style_5 clampToGround -92.4338014912365,34.8979530772317 clampToGround -94.4616914490383,34.1967651932869 -94.4685848873093,33.9393114556774 -94.4766912623089,33.6320818342933 -94.4361169764478,33.6365609097961 -94.4365363690331,33.6169611431123 -94.4517573138016,33.6044640316868 -94.4435324861232,33.5966212153736 -94.4286699913841,33.5972585244972 -94.4067726989127,33.573604181729 -94.3936192517599,33.5750768821217 -94.3793139265706,33.5934447272787 -94.3708297502542,33.5901604561683 -94.3725080674424,33.572780843886 -94.3954654484121,33.5604209193152 -94.3709589684324,33.5478024921997 -94.3289505742182,33.5732546607845 -94.3025824334982,33.5570543333588 -94.2990196486897,33.5799728047754 -94.2791827367037,33.5894525566594 -94.2722778801038,33.5847263352945 -94.2747420062796,33.5618574981634 -94.237433395665,33.5925430254688 -94.2232345052552,33.5858408096426 -94.2355638087854,33.5616558979989 -94.2110801540886,33.5581084763103 -94.2055412868951,33.5852000838157 -94.1597099275335,33.5938939861439 -94.1553607481046,33.5672068241928 -94.0988935992895,33.5731199456262 -94.0868464522719,33.5840756635432 -94.0616226885844,33.5773354007315 -94.036116490021,33.5560347014808 -94.0366915600887,33.2704528989066 -94.0389317412767,33.0234224077489 -93.8099311079015,33.0227288720053 -93.5119155636282,33.0212876651865 -93.4790703550755,33.0215281738969 -93.2325431611912,33.0193748877236 -92.9789895151482,33.018274750609 -92.7172364845049,33.0168395771589 -92.0634416757442,33.0101515495777 -91.4544703253061,33.0139992001305 -91.4276446691024,33.0135450807442 -91.2547275514467,33.0136011241739 -91.1622413295772,33.0131626211682 -91.1607840947755,33.0218332391698 -91.1567938514993,33.040555368368 -91.1240933135817,33.0473950555076 -91.1178981011678,33.0656937749518 -91.1468983565878,33.0907747749873 -91.1906466851528,33.1133457020205 -91.1956136504654,33.1405858277008 -91.1777374599034,33.1504085143774 -91.1214383904209,33.1311906845818 -91.0959630937654,33.1452056628518 -91.0864260899183,33.1617229779066 -91.0921102874347,33.2258161142148 -91.054648817909,33.2459002185311 -91.0405340548071,33.2820400168761 -91.0539393519749,33.2936936328911 -91.0764315269204,33.2924766671242 -91.1030130817749,33.249329353099 -91.1226136683412,33.2686236274109 -91.1418557768241,33.3225012621225 -91.1305334944524,33.3595184071126 -91.107049532132,33.3935220665091 -91.0787969781513,33.4102951070005 -91.0616226774054,33.4319126666717 -91.0610886583117,33.4601256250454 -91.0738683451831,33.4663205040007 -91.0859079351743,33.4629711994008 -91.0992368247907,33.4150136902789 -91.137743597831,33.3889939554845 -91.1850932093454,33.3919462343914 -91.2042742333541,33.414414252442 -91.1989411364413,33.4222266229444 -91.1306252922663,33.4432379167019 -91.1198217287377,33.4529461878788 -91.119066439103,33.4697877493532 -91.1289087637518,33.4933048406628 -91.1650887084894,33.511893278083 -91.1742900279968,33.5044814214406 -91.1718407642763,33.4667586515282 -91.1818813238998,33.4475023901927 -91.2329618446089,33.4435578002255 -91.2272625589118,33.4595677906787 -91.2077535832103,33.4735103338542 -91.1805158805851,33.5121258753279 -91.1829574461633,33.5234628974492 -91.2042137720816,33.5386182116453 -91.2135982558382,33.539388695493 -91.2277437480702,33.5564627810534 -91.2268436629257,33.5905920919159 -91.18791706052,33.5747923198036 -91.1681333805491,33.5773559141775 -91.1507609201204,33.6162728236941 -91.1545148512779,33.6371425699443 -91.2054201032027,33.670054473021 -91.215254854952,33.690832533146 -91.2117911105934,33.7090740491267 -91.1634115725545,33.7184243604201 -91.1211582957132,33.6776390014341 -91.0838797162424,33.6626975706472 -91.0379417447915,33.6833276928149 -91.0389337685444,33.7056013490966 -91.0563218415079,33.7194673047115 -91.1046784705554,33.7083431494327 -91.129055226842,33.7125503367781 -91.1381116937944,33.7233341453239 -91.1430026284613,33.7719285490089 -91.1370973386382,33.7801949325541 -91.1055258418152,33.7765486562049 -91.066500277623,33.7866351498749 -91.0435120353132,33.7696642449716 -91.0185401645943,33.7640838422967 -90.9954834069188,33.7716600260669 -90.9841458001964,33.7854500107548 -90.990478540789,33.7990071442826 -91.0289626430975,33.8166950131436 -91.0549265134198,33.8436334807269 -91.0614805441139,33.8671886882777 -91.0185719444065,33.9364134475297 -91.075817398803,33.9747494464877 -91.0889634034043,33.9945738225001 -91.0698054890087,34.0062011888095 -91.0311688375349,33.9858050201095 -91.0096532951119,33.9906347187545 -91.0003678622968,33.9684795241317 -90.9869243510316,33.9609229307681 -90.9648975846708,33.9675683195034 -90.9612354430936,33.9789817484763 -90.9753809466784,33.9947130844006 -90.9734737113361,34.0111046201452 -90.9505773863401,34.0313950359426 -90.8864503209315,34.040818090639 -90.8664385809251,34.1010591014266 -90.9064179233242,34.1028552934255 -90.9423538254879,34.1260478667544 -90.9534553235284,34.1559087583442 -90.9290256144771,34.1857547898992 -90.8467166087328,34.1476512964452 -90.8289700905792,34.1487653755381 -90.80761499232,34.1662785963789 -90.8230272013098,34.1906501116551 -90.9215946009177,34.2049348828191 -90.9338176505974,34.2347805101336 -90.9285457793972,34.2502985218322 -90.863518050537,34.2192670758548 -90.8314661258313,34.2296393889001 -90.8239443372371,34.277444457808 -90.8065265292917,34.2994512329978 -90.7926330280344,34.3000616903072 -90.7583602009326,34.2790815153021 -90.7478630150123,34.3178229839966 -90.7619638892818,34.364018026031 -90.7554179493631,34.3722691135712 -90.6875906711157,34.3779766258423 -90.6812424323426,34.3635040042302 -90.6894812814297,34.3202498232312 -90.6794406527353,34.3180794258637 -90.6579178140279,34.3301110369 -90.6573464859749,34.3660143325751 -90.6038941204851,34.4047029797656 -90.5792280444766,34.4331032095237 -90.5745057077137,34.4540494001334 -90.5901550620873,34.4966090201687 -90.5804501933474,34.5203246797393 -90.5657859528414,34.5326117672652 -90.5372509529854,34.5434303779675 -90.5307199720464,34.5557516818131 -90.5777188709607,34.6048453840045 -90.588095250095,34.6279161438152 -90.5794050783226,34.6457114581828 -90.5611626343263,34.7003866360947 -90.5391663025844,34.6860476391663 -90.5476504188209,34.6519066940829 -90.5390670140484,34.6369954120314 -90.5089145701068,34.6381667803775 -90.4663261216033,34.6721400223716 -90.4700800044602,34.7043544473312 -90.5136680230595,34.702168426854 -90.5333830813361,34.7133527478315 -90.5478489155079,34.7904345448067 -90.5273632829947,34.8074211116658 -90.5161477021542,34.8057007952067 -90.5013843558158,34.7899313101001 -90.4988360977595,34.7658840525447 -90.5170709695817,34.7484702598375 -90.5045201438459,34.7299541802284 -90.4860259517696,34.7269330960027 -90.4515325806393,34.7412990973377 -90.4489690543041,34.7608489921917 -90.4668069953846,34.7997617150697 -90.4520055372854,34.8253158387959 -90.4748179857494,34.8578237977629 -90.4706293016958,34.8810204416072 -90.4381882440559,34.8862771531433 -90.4279417146019,34.8727391673229 -90.433648709805,34.83545134437 -90.4224103169264,34.8323653841601 -90.4040306027044,34.8411352642473 -90.3415212787642,34.8606740294564 -90.3229203349016,34.8503632334111 -90.3016490140377,34.851873932935 -90.2995432252211,34.8650572468814 -90.2963692858759,34.8827875862869 -90.2668045737091,34.8966081006537 -90.2429392103602,34.9208271417899 -90.2419931217762,34.9389999550718 -90.2482645856439,34.9498563938362 -90.2996040912406,34.9785763166455 -90.3054483329108,35.0007887668604 -90.2919059359036,35.0485515081083 -90.1958038569539,35.0409907485114 -90.1691767188155,35.077919742991 -90.1784389874145,35.1087380390639 -90.1645684196584,35.1297030327121 -90.1438236047204,35.1366264117644 -90.0830159559144,35.1251401960811 -90.0646285866633,35.1474746627476 -90.0625227286411,35.1670054991279 -90.0733947719556,35.1919226486873 -90.0690534392868,35.2128267350657 -90.0901948968215,35.2544862571621 -90.1060339420871,35.2639351079375 -90.1522159586985,35.2641450857902 -90.1698403349041,35.2826536313127 -90.1570835988572,35.3063308609086 -90.1064382119311,35.3147724206286 -90.0987932747814,35.3456783695846 -90.1057132977704,35.3660674829239 -90.0872266938728,35.3815928956868 -90.0755685711721,35.4066128988494 -90.0852505380296,35.4183657399664 -90.1123357114254,35.4177745418272 -90.1325618654474,35.4076849496077 -90.1402601920922,35.3831303299536 -90.167909940555,35.3843396369312 -90.172769972754,35.423801771155 -90.1373684773254,35.4426077096675 -90.1020508626893,35.4736509299937 -90.0823206223606,35.4782894580097 -90.0749351519039,35.472426386111 -90.0740273380246,35.4265900144844 -90.0603855998617,35.4134944197412 -90.0468735226389,35.4171869306731 -89.9996536673638,35.4455370247156 -90.0419064116663,35.5125217072751 -90.0409909024943,35.5429279718505 -90.033140016861,35.5524950078149 -89.9896739843436,35.5617568588755 -89.9623599133103,35.5323728966608 -89.9476347417721,35.5269828473763 -89.9312615752134,35.5293135817598 -89.9217474375778,35.5461398658448 -89.9581178655256,35.5786747060615 -89.9571336550073,35.6031836149856 -89.8775260946092,35.6334146146124 -89.8639224643906,35.6298250835587 -89.8492811882225,35.6453010408611 -89.8573304296374,35.6711412777364 -89.8652652485346,35.6733842535304 -89.8934872756056,35.6560505384628 -89.9298272228072,35.6763442141411 -89.9521210323203,35.7125639320478 -89.9511215579288,35.7343453953471 -89.9098681003284,35.7549139790981 -89.8599549641379,35.7482691273072 -89.8271246329774,35.7583474945228 -89.7999860359764,35.7743003646228 -89.7904643245356,35.8056299093077 -89.7598771117723,35.817497369678 -89.7360192984694,35.807113985821 -89.7009079957004,35.8275908326828 -89.7015183934478,35.8421131136063 -89.757794357037,35.8714934051126 -89.7663548523295,35.8841769773396 -89.7629902111739,35.8968873309185 -89.7380566602412,35.9150869770193 -89.7147635107817,35.9115011809885 -89.6647286073305,35.8857218407663 -89.6494160365095,35.8943619363869 -89.6454792006079,35.9138737361357 -89.6642709267856,35.9378944702657 -89.7132148260638,35.9663974567816 -89.7218363447502,35.9999509241088 -89.9632916378976,35.9969088479974 -90.2835541915351,35.9912280026278 -90.3790621785177,35.9896564265848 -90.315339671655,36.0917234028765 -90.284851770393,36.115972708427 -90.2638016451402,36.1188298079555 -90.2349388507527,36.1371551620637 -90.2323220265841,36.1612137930848 -90.219321206522,36.1726309521804 -90.1614048832434,36.1970066414864 -90.1313137741843,36.2121355814949 -90.1100122336982,36.2580597893355 -90.0661877402538,36.2723382893607 -90.0498451169238,36.3005360471466 -90.0677289950308,36.3253957469489 -90.0502953123909,36.3626684522717 -90.0521569616484,36.3826150505682 -90.0802722392493,36.397449931407 -90.1169251070973,36.4049759827803 -90.1239291860565,36.4226261953142 -90.1173219969686,36.4539556960145 -90.1373727719163,36.4574765175037 -90.1502594210991,36.4918729268599 -90.2244732820348,36.4928111285523 -90.5817321666723,36.4910222747631 -90.8044338516289,36.4892654684767 -91.1339563643651,36.4880156921504 -91.4117966736446,36.4911017707335 -91.4529890137038,36.4904380208107 -91.6885605521917,36.4910185604512 -92.1276422613294,36.4914354514783 -92.1463194477192,36.4916605516162 -92.5230507134162,36.4909213638459 -92.7776354712124,36.4899835156087 -92.8522757362601,36.4898845275616 -93.2973244136508,36.4906809019551 -93.3283462147977,36.4902614752819 -93.5964496696149,36.489958821283 -93.8575198413675,36.4897863700719 -94.081052160308,36.4910242585195 -94.6172570958511,36.4894141614003 -94.6074528321546,36.4787903547 -94.5531136198804,36.1645252110653 -94.5424172738563,36.1068358038929 -94.485934826059,35.7603104941298 -94.4684852110367,35.6410882624306 -94.4285520120899,35.4005462695086 -94.4393221493475,34.9291508772006 -94.4459610753436,34.7356081162875 -94.4526240459217,34.5084326818174 -94.4616914490383,34.1967651932869 empty states.AREA: 45835.844 states.STATE_NAME: Louisiana states.STATE_FIPS: 22 states.SUB_REGION: W S Cen states.STATE_ABBR: LA states.POP2000: 4468976 states.POP2001: 4484853 states.POP00_SQMI: 97 states.DEN_0_100: 91 USStates.ID: 18 USStates.State_Name: Louisiana USStates.Date_Entered: Apr. 30 1812 USStates.Year_Entered: 1812 USStates.Year_Settled: 1699 ]]> 1812 #Style_5 clampToGround -92.0291541159725,31.0957346447301 clampToGround -93.7075239693582,30.2395787754494 -93.7150086998788,30.2205134179473 -93.7045256592734,30.1810684459083 -93.6963314287414,30.1758843689492 -93.6998258674993,30.1510169781729 -93.6833076816481,30.1484401694217 -93.6861230387578,30.1414613621588 -93.6988035173149,30.1414346905316 -93.6970869015193,30.1181389021031 -93.708546644865,30.1149499108334 -93.7160237497478,30.0958787991307 -93.7126439001031,30.0607310199356 -93.760367515826,30.0061764030649 -93.7914543306868,29.8505201111635 -93.8999018634907,29.8099813696096 -93.8018207571775,29.7258651715405 -93.7219916871518,29.7587936044957 -93.2336572894734,29.7889934364029 -92.6074254936111,29.5886265164795 -92.2973740302806,29.5415715040527 -92.0597572216179,29.6070148319983 -92.1996986400924,29.7631205249394 -92.1301011969117,29.77352598548 -92.1371512453363,29.7307416030464 -91.9733277804057,29.8060573844959 -91.9670865640437,29.8418880532248 -91.827503480176,29.83904163461 -91.8239331429008,29.7868920393355 -91.8466310090991,29.8083970322938 -91.8811779880636,29.7659557971969 -91.8632562723494,29.7258395444023 -91.6157678043288,29.7691380608199 -91.6435472720068,29.6439645252622 -91.548490473012,29.6421294214872 -91.5478653162604,29.5316859482091 -91.4330248606296,29.5525818802979 -91.2627251555334,29.4895876171466 -91.2137357284937,29.4059235875496 -91.1021904671519,29.3141341810657 -91.0783856859222,29.3600181552563 -90.9365276148146,29.34351696991 -90.8973493384076,29.267664524716 -90.8185501345175,29.2568023186879 -90.8142929990499,29.2210068232971 -90.9204134488967,29.1819095184181 -90.8826392886342,29.1374120250384 -90.8393794625971,29.1823403523227 -90.7726894302836,29.1606256340265 -90.7828982382631,29.126943134736 -90.6767942756105,29.1402773960277 -90.6838585663341,29.1819208280557 -90.6381199854437,29.1625715477047 -90.6500512905196,29.2542925609165 -90.6212655974503,29.2229656385145 -90.5831330588569,29.2609283902067 -90.6110951867158,29.3050359294473 -90.4764721853395,29.3039418023868 -90.4505160207755,29.352441970778 -90.4068289556262,29.3259917752097 -90.396429975029,29.272347594428 -90.3476460657704,29.3129516272311 -90.2840991281077,29.245534761538 -90.2788193596263,29.2751587278655 -90.2429144207612,29.254741245923 -90.2639572212598,29.1846496769349 -90.2277626502323,29.0986741752039 -90.0778023855037,29.1764419417217 -90.0431106708545,29.2236763677282 -90.0778787303765,29.2145745251002 -90.1116396834295,29.3217254399766 -90.0330015414231,29.3088725943322 -90.0559437087012,29.3514313577963 -90.0299420908353,29.3742080212967 -90.0553257146504,29.4282829342296 -90.0360839170338,29.4471572638847 -90.1741334797972,29.4959418083355 -90.2081459533198,29.5447303428833 -90.1517936118825,29.5953076758409 -90.1372900800924,29.533810903071 -90.1130813087367,29.5538488149916 -90.0066947961478,29.4939367839004 -89.9719267620273,29.5035417528626 -89.9667386971404,29.472678264347 -89.8175270453019,29.4776253094833 -89.8217465705316,29.420912297011 -89.7537065743465,29.3742883056524 -89.7949446658458,29.3225401726376 -89.6107185110048,29.3317581333263 -89.619592103845,29.2795749078674 -89.4931976224217,29.2349951688689 -89.4591168380449,29.2557362316092 -89.4670734961145,29.2163212037448 -89.3931341574949,29.1462653489502 -89.3886623200303,29.1003787711429 -89.3397347549283,29.1044955958688 -89.3190905090885,29.1801886436367 -89.2632880326299,29.1482125721001 -89.3948923970965,28.9396556719073 -89.2574966003837,29.0594633924233 -89.2411621878536,29.1211691198757 -89.1443950464412,29.0166783927302 -89.15402386274,29.0572176399904 -89.1114049392751,29.0830170799367 -89.126542405823,29.1353090259359 -89.057753441514,29.0852787510888 -89.021802953984,29.1471183731581 -89.0982747928448,29.1634431581992 -89.0332630268504,29.2234135733299 -89.120225502644,29.2118843139178 -89.1299376964562,29.2908873400227 -89.1934003782821,29.3490477860047 -89.2625559519063,29.2978092984492 -89.2647756568613,29.3506636449461 -89.3370584974406,29.3408933300114 -89.3845219191646,29.3979385143756 -89.537076380962,29.4014533166444 -89.5446296667905,29.4716853008017 -89.7717782666117,29.6102468453431 -89.7232081312626,29.6060275376081 -89.748545673424,29.6373780616568 -89.7283193961219,29.6461761343614 -89.6352610582353,29.626531674004 -89.6953282438435,29.6940792569962 -89.6767042461412,29.7029612576638 -89.5979517797373,29.6651576360899 -89.4791891047166,29.6361710061209 -89.5119430643629,29.6646147842026 -89.6118373558959,29.6977477154707 -89.5928776464669,29.710863889814 -89.6505872684645,29.7669009624638 -89.5405000002626,29.7547308719091 -89.4822384004438,29.8309485334183 -89.4174250907105,29.7829370017962 -89.3640397237488,29.7967741977645 -89.4211550530889,29.8280985416313 -89.4022024925418,29.8459451898735 -89.4310483583865,29.9402776070809 -89.3777929103821,29.9512862860095 -89.4536236043748,29.9857329961405 -89.4358541014334,30.0444055970455 -89.5743783317747,30.0089600024186 -89.5858628663158,29.8981569870418 -89.6274143107268,29.8756795494176 -89.7122022087511,29.8975277712431 -89.7150166093631,29.9694037201455 -89.820848222068,29.9512905424199 -89.8489633570991,30.0106855130634 -89.7168401832138,30.0552263064586 -89.6493943583523,30.1224267965133 -89.6692013754246,30.1633821794677 -89.7249282260786,30.1210949796266 -89.7400887426727,30.1589281537228 -89.7982648352995,30.1053714259199 -89.8912258795383,30.1560914176022 -89.9905483943748,30.05366400615 -90.1115465053155,30.0416103319555 -90.2759803704625,30.0620534035407 -90.3955674639119,30.0920800540751 -90.4245305606917,30.1858772168737 -90.3090271771062,30.3038460732768 -90.2397510159792,30.3809509083452 -90.0755611294021,30.3689787565007 -89.9435365430685,30.2698534912004 -89.7592170564731,30.2310929413416 -89.728560482135,30.1810129000889 -89.5738839850623,30.1949353118833 -89.6100033159566,30.2414198536792 -89.6063106026528,30.247828412852 -89.6216616714494,30.2569643699525 -89.6259425171347,30.2903558515233 -89.6391725011899,30.2958297965272 -89.6370822520275,30.3118436964481 -89.6185880809724,30.323760747644 -89.620198293058,30.343429054806 -89.633451292423,30.3553078019512 -89.6466888230347,30.3552905752797 -89.6546699231165,30.3790653329062 -89.6753697006504,30.4000744263161 -89.6754620986314,30.4453524057824 -89.6834507334724,30.4627185730285 -89.6945978512597,30.4681868413409 -89.695681461547,30.4782460714929 -89.7131840947211,30.4814159991074 -89.719059260721,30.4960375437604 -89.7323197493778,30.4978380271641 -89.7551786590929,30.5156218767139 -89.7727961225489,30.5512468627469 -89.7908478814126,30.5539438185454 -89.8203071285261,30.6242705431171 -89.8055366119584,30.6494567398327 -89.8193538991109,30.6512457789506 -89.8295245363783,30.6708739896173 -89.8454474865972,30.6662525153547 -89.8353918067202,30.675882597152 -89.8417854969649,30.6795198391887 -89.8413433452435,30.7005499465483 -89.8307229637224,30.7037809798175 -89.8440520689247,30.7124249093943 -89.8356140001819,30.7293619382654 -89.8233990376437,30.7330545562641 -89.8255660189393,30.7426483690047 -89.813351089932,30.7481682046961 -89.8246894189972,30.7897246849283 -89.8109335655279,30.8116989081619 -89.7965669822497,30.8126526475249 -89.7960942151255,30.8291051373468 -89.7747999238727,30.8305319403895 -89.7850241384817,30.8615791361643 -89.7658508573246,30.8620847088871 -89.7633107888117,30.9004713517936 -89.7468002599141,30.9027945578147 -89.7457551089107,30.910107202755 -89.758054281525,30.9210436978628 -89.7404756300233,30.9261095623025 -89.7485405475115,30.9498480428011 -89.7395225295214,30.965400256862 -89.7198229059406,30.9754936822636 -89.726781296615,30.9846164008972 -89.7236228724726,31.0015247201013 -89.7327174808554,31.0074450145967 -89.8335587379484,31.0071848554001 -90.2593768226071,31.0073700245843 -90.3436602569889,31.0053899463824 -90.5426536021385,31.0023300433606 -90.5602548970702,31.0017063331187 -90.8297139029015,31.0015458122993 -91.0570121642698,31.0004181174657 -91.1792074543421,31.0004616671834 -91.6322974277285,31.0013650074093 -91.6277732104017,31.0119601110946 -91.5727876169466,31.032647877549 -91.552081308545,31.0581597906819 -91.5649752722808,31.0821350184803 -91.6201139178138,31.1276943834946 -91.5914883087676,31.1784818992551 -91.6009643646854,31.2139296737496 -91.636998739959,31.241104186479 -91.6436824254271,31.2711178839201 -91.634214237565,31.2776940549104 -91.5569194773614,31.2704690710127 -91.5170781714622,31.2830696578166 -91.5024753378186,31.2988580123244 -91.5057561590215,31.3234567034819 -91.5427900456635,31.3469862680809 -91.5444076356665,31.3688746277826 -91.534573237599,31.3827500700431 -91.5593769120174,31.3882304242528 -91.5677314723038,31.4214064364688 -91.5524724466605,31.4330997709492 -91.5348024158407,31.434335247521 -91.5341690214585,31.4092388142744 -91.5230145322414,31.3920917852495 -91.4947087573411,31.3752496098054 -91.4808380383191,31.3777805832693 -91.4659221569407,31.4040690532825 -91.4732924895748,31.4203746865528 -91.5079007172192,31.4530834240658 -91.506481902402,31.5256872825259 -91.5029570558284,31.5348804964065 -91.4644730285793,31.5428664076677 -91.4235780361348,31.5627464662349 -91.404252162172,31.5863534317346 -91.4153838994301,31.6025923876789 -91.4971510160937,31.6043585245596 -91.5088777626843,31.621946112804 -91.5078096575379,31.6438707722357 -91.4977690885564,31.6508953247071 -91.4573776301659,31.6269660621133 -91.4084028346628,31.6255298775261 -91.3891838304294,31.6546051479529 -91.3879480650132,31.716682847539 -91.3650745397498,31.7517413813867 -91.3704992222101,31.7534751058186 -91.3399120227254,31.7585428158009 -91.2826210069941,31.7498875713679 -91.2639894905689,31.7597635597382 -91.2626849165052,31.7739271210982 -91.3362574528706,31.7636219421964 -91.3671346354039,31.7708677200763 -91.3472366701502,31.7958323053943 -91.3348464016758,31.8434784170896 -91.3034734879704,31.863144546493 -91.2926470392426,31.8614928392569 -91.2768000889638,31.8275334941804 -91.2507295828595,31.8188210015347 -91.2413834145028,31.8353877405104 -91.2646921176812,31.8655859136312 -91.2444813396436,31.8786718608009 -91.2015421481539,31.914448862447 -91.1631429199385,31.9884481049272 -91.1081106350256,31.9919842773777 -91.0724881293938,32.0212135515791 -91.0732434735012,32.0321499472516 -91.086992022729,32.0438110998955 -91.1431229851656,32.0662598368965 -91.1456941711085,32.085828620503 -91.125727524233,32.0883996668359 -91.0894106198667,32.0569980949997 -91.0651179868997,32.0587070505858 -91.0739225856783,32.0941482900527 -91.0411916486593,32.1078235881288 -91.0113905060031,32.1342128745109 -91.0039364614505,32.1694138145198 -91.0245210933432,32.1700508264511 -91.0545816942883,32.1846835164502 -91.045418520229,32.1588244987585 -91.0541543655413,32.1345446969889 -91.0831163105895,32.148731083052 -91.1088203873902,32.1351435271569 -91.1566502997803,32.1449354980044 -91.1669578883395,32.1721410581455 -91.1573751424246,32.2060145228895 -91.1160609494648,32.225755012482 -91.1006796950342,32.2150360650047 -91.0880222320098,32.2325373651522 -91.06256993823,32.2328921503996 -91.0417564572334,32.249588584805 -90.9773247619376,32.2235541462358 -90.9711219862771,32.2692145344565 -90.9839242898836,32.2872802390738 -90.9808724634335,32.2978007782368 -90.9717628039961,32.3038468581634 -90.9293503055389,32.2975529103154 -90.9164792854551,32.3054643188479 -90.8754551600106,32.3797948696303 -90.8852590969197,32.3814999498488 -90.9150295865817,32.3460435683761 -90.9846718656927,32.3565410587047 -90.9989695795512,32.3663787517009 -91.0093152122207,32.3972270178482 -90.9700917310243,32.41916079336 -90.9655902707379,32.4401789961165 -90.987555664684,32.4531064313693 -91.027015703315,32.4425591367523 -91.0586173128584,32.4471403993983 -91.1177919517207,32.4987093128914 -91.1188523792708,32.524205893418 -91.0888910499039,32.5487755489391 -91.0373078509381,32.4970957768502 -91.0197904195744,32.4909543534273 -90.9921562021718,32.4954212340256 -90.9951774336628,32.511781889744 -91.0631947408495,32.5422984158072 -91.0733724921787,32.5617489074888 -91.0589754670571,32.5765265579993 -91.0324322175751,32.5828091644492 -90.9987628339888,32.6156030444933 -90.9962373961764,32.6261121948604 -91.0079868510271,32.6428085554835 -91.027571941098,32.6416374743549 -91.0477369807394,32.6144891676735 -91.0639193056015,32.6065243385273 -91.1111005222843,32.5976630747531 -91.1463718367631,32.6449866188679 -91.1396654000576,32.663308001886 -91.0591351228787,32.7236507270734 -91.0978169539142,32.7495287526143 -91.1365751786759,32.751256737741 -91.1564502239537,32.7628111152121 -91.1422592525615,32.8413420630697 -91.0796355518755,32.8772908363965 -91.075698595519,32.9538382302101 -91.0927812664224,32.9877460881529 -91.1119239712728,32.9874752104853 -91.1324628926305,32.9753485871396 -91.1300442984655,32.9375917893587 -91.1372847877828,32.9179123119183 -91.1698097693143,32.9051486450656 -91.1984207869413,32.9142883501159 -91.2092701257606,32.935978073614 -91.1619742599701,33.0004180010727 -91.1622413295772,33.0131626211682 -91.2547275514467,33.0136011241739 -91.4276446691024,33.0135450807442 -91.4544703253061,33.0139992001305 -92.0634416757442,33.0101515495777 -92.7172364845049,33.0168395771589 -92.9789895151482,33.018274750609 -93.2325431611912,33.0193748877236 -93.4790703550755,33.0215281738969 -93.5119155636282,33.0212876651865 -93.8099311079015,33.0227288720053 -94.0389317412767,33.0234224077489 -94.0417854266628,32.88248532849 -94.0403826377049,32.6949577639329 -94.0354184994672,32.3893811626287 -94.034954991874,32.1996091989861 -94.0352556158215,31.9946792606335 -94.0100779255717,31.9893006514689 -94.0045847001297,31.9781086259495 -93.977400745224,31.9463271084149 -93.9701757150612,31.923332670499 -93.9359189554272,31.9096246079882 -93.9181114839259,31.9098704820605 -93.9236506911527,31.8927620881712 -93.8994496012559,31.8946233843507 -93.8927128271358,31.8702347315503 -93.8814515298817,31.8715888085537 -93.8775910841835,31.8502823749578 -93.8650100628645,31.8174424499476 -93.8345145984519,31.8021876362787 -93.8222539497482,31.7748083120293 -93.8313485614818,31.7534524078687 -93.8101762985126,31.7305247069651 -93.8151354745431,31.7125237592659 -93.8089554592767,31.7077383245665 -93.7924526022363,31.7115680299756 -93.8120300538237,31.6747403534088 -93.8066129278975,31.6539413361717 -93.814913937485,31.6481413307007 -93.8197738830306,31.6182675045639 -93.8357655763902,31.6153647157252 -93.8328051765847,31.5903601395257 -93.8165082249906,31.5772874839387 -93.8107019949642,31.5592406874184 -93.7803130389967,31.5339136421144 -93.7634896740234,31.5309019449363 -93.7477268791835,31.5378958623322 -93.7318419000288,31.5220556426776 -93.7059774315125,31.5207469124279 -93.7191765485681,31.4955823387378 -93.7506182371136,31.4907363154173 -93.7514269339373,31.4856800971189 -93.7269660796645,31.4596548516254 -93.6985991018577,31.4616380816002 -93.7021085938203,31.4464313212695 -93.6871849424459,31.4383118184741 -93.6963098944214,31.4279172119793 -93.6946236330265,31.4161034539133 -93.687672937394,31.4063113595588 -93.6641964541721,31.3985102835404 -93.6612511619287,31.3725768736666 -93.6350357193475,31.3740089507347 -93.6772195877398,31.3285702210106 -93.6817667081866,31.3128637606543 -93.656306321906,31.2868557345123 -93.6457698113848,31.290447047048 -93.6310062786126,31.274088104753 -93.6166320369568,31.2759895241098 -93.6120541890025,31.2702180322556 -93.6111765104974,31.2423735819701 -93.590721311811,31.229873054352 -93.6030963428191,31.1992536873053 -93.594116089313,31.1803867599593 -93.5771171728735,31.1723283005144 -93.5507645287232,31.1911166478718 -93.5290962932971,31.1859610191746 -93.5271048967346,31.1782631971006 -93.5371912743335,31.1765276828254 -93.5285010056731,31.16313081887 -93.5443630058743,31.1593545819132 -93.5376792301074,31.1326296405497 -93.5282642026793,31.1261142412602 -93.5352605069041,31.1162612988914 -93.5568523341309,31.1095326773987 -93.560155897223,31.1007267939647 -93.5432943505457,31.0949417830783 -93.5442784766347,31.0825635248279 -93.5171703181443,31.0748615453994 -93.5259137461508,31.0571716007113 -93.5073888583872,31.0390998146532 -93.5472916450207,31.0143343101026 -93.5651144950651,31.0182559489662 -93.5680671206996,31.0131177730676 -93.571019691156,30.9974647272144 -93.5611240812853,30.9918838250984 -93.5726296090181,30.9763719448991 -93.5488480918319,30.9703845889675 -93.537510526732,30.9570791221949 -93.5323605164321,30.9609260649172 -93.5257915242765,30.9360147750055 -93.5301557030665,30.9271668885028 -93.5497943369345,30.9250805769799 -93.5466891601929,30.9055307409998 -93.5646492713287,30.9021283630613 -93.5686701258707,30.886431356764 -93.5610176820037,30.8720769365654 -93.5529761247527,30.8604804672822 -93.5666178980145,30.8453462320886 -93.5558144005398,30.8425404652408 -93.5508552163389,30.8285427515982 -93.5820450640059,30.8022395755774 -93.5853487574266,30.772384673359 -93.6186289353873,30.7459898029865 -93.6078251665993,30.7322109750573 -93.6179648833938,30.7327489593371 -93.6125855643895,30.7105301555471 -93.6177808097251,30.6870030300823 -93.6601628136184,30.6730608176726 -93.6781450325558,30.6398941531481 -93.6930532338358,30.6402433971316 -93.6847595364861,30.623626465968 -93.6928696184464,30.6159971853325 -93.6717582009901,30.598033475394 -93.6935940747548,30.5990370562763 -93.7179855982276,30.5875818830799 -93.7180538649871,30.5683558276656 -93.7354793539973,30.5457197108965 -93.7056319678504,30.5230599502648 -93.714809983633,30.5053160515853 -93.7074472222602,30.4964430039086 -93.7150231758618,30.4888310205347 -93.6981459876763,30.4702496513421 -93.7035932923006,30.4627158297037 -93.6967413311132,30.4428357517593 -93.7217050902489,30.4331831686188 -93.7427315855636,30.4090272375555 -93.7551137307405,30.3819930042287 -93.7480024889439,30.3676155313151 -93.7595076666452,30.3543502302936 -93.7593470787815,30.3410771727413 -93.729941409288,30.3051219729382 -93.6993768807844,30.2975935292891 -93.7075239693582,30.2395787754494 clampToGround -92.0163677477977,29.5964783637641 -91.8490888327989,29.4870829559889 -91.7581129254523,29.4945134800923 -91.7649642707533,29.5342538256937 -91.7016159510209,29.5772668066965 -91.7698472437407,29.578615482821 -91.9025489396354,29.6509308946661 -92.0163677477977,29.5964783637641 clampToGround -91.3413189262615,29.3419108937759 -91.2761625423135,29.2540279304898 -91.1283068078309,29.2269993791403 -91.1346931448543,29.2599248605 -91.1636630060186,29.2452673853848 -91.1525923312922,29.2665337371954 -91.1950590671176,29.2736729306416 -91.2004606788529,29.3079853608587 -91.1880244437628,29.2847581611053 -91.1712239064232,29.2836766605259 -91.1615645237376,29.3237204954792 -91.1892756376026,29.2976114923275 -91.2265537135592,29.3813995046563 -91.3004929954541,29.3164578525778 -91.3413189262615,29.3419108937759 clampToGround -90.9345744612151,29.2590942309103 -90.9989533443921,29.3238000878402 -91.0073689638633,29.29754411189 -91.1275134516063,29.2935143884148 -91.1225616613936,29.2270851971627 -91.0555572747286,29.1909157285932 -91.0676893547948,29.2531193516372 -91.033103939191,29.2756292528086 -91.0444487729884,29.2112586059428 -90.9945661692945,29.2248021337252 -91.0032404591734,29.1843167033403 -90.9620253296627,29.18579944909 -90.9449811331143,29.226391967718 -90.980382600158,29.219952293402 -90.9813824092254,29.2763485829958 -90.9536257160918,29.2730571631618 -90.9708458122037,29.2420957472829 -90.9345744612151,29.2590942309103 empty states.AREA: 55814.731 states.STATE_NAME: Florida states.STATE_FIPS: 12 states.SUB_REGION: S Atl states.STATE_ABBR: FL states.POP2000: 15982378 states.POP2001: 16349220 states.POP00_SQMI: 286 states.DEN_0_100: 75 USStates.ID: 27 USStates.State_Name: Florida USStates.Date_Entered: Mar. 3 1845 USStates.Year_Entered: 1845 USStates.Year_Settled: 1565 ]]> 1845 #Style_5 clampToGround -82.4955741421186,28.6586764601475 clampToGround -80.7856624086309,28.7851940403771 -81.0970545706768,29.3517993174429 -81.1098802954354,29.4302392603555 -81.2337658332761,29.6690238932245 -81.2437844731636,29.7379431267216 -81.3164898837488,29.829240288196 -81.30275787447,29.9130520156593 -81.4327676635006,30.2467817590837 -81.4432599879591,30.3571873716918 -81.4807983040684,30.3805404131581 -81.4575287462075,30.4547642552716 -81.5181174597792,30.556212852111 -81.4987842593679,30.5986053568678 -81.5285954877916,30.7214526527694 -81.5365912711366,30.706577299159 -81.6011698908184,30.7248871300769 -81.6047710156425,30.7163212810582 -81.6279809976449,30.7317742622409 -81.6424775174441,30.7290809870991 -81.7167688183456,30.7453688965497 -81.7366750235978,30.7638888413088 -81.7577101754202,30.7696316702207 -81.7767079395988,30.7615846557533 -81.803198160572,30.7880849801985 -81.8730017876477,30.7990844044587 -81.899141093328,30.8283082947867 -81.9075183587545,30.8134750654558 -81.9438049950591,30.8242494271993 -81.9530292094585,30.8204309615747 -81.9615513721702,30.7960077712109 -81.9814798819521,30.7783517328393 -82.015538717102,30.7913192479577 -82.0129673359901,30.7642564144355 -82.0318811960902,30.75753276526 -82.044911618847,30.6509107642683 -82.0136526868731,30.5986905381626 -82.0058016281534,30.5709905104499 -82.0225094921996,30.4777178378262 -82.0351206760364,30.442878325233 -82.0460994945739,30.4340681576703 -82.0383547553639,30.3789045785554 -82.0527668135565,30.3637944548298 -82.1646391875519,30.3612918341259 -82.1802341078135,30.3686309203557 -82.2055648250395,30.4238531552503 -82.1991871719511,30.4900145014502 -82.2193674835883,30.5029705380916 -82.2383961480861,30.531444743061 -82.2210395703097,30.5670760290347 -82.4120926709198,30.5773075208331 -82.4631348832503,30.5826898377285 -82.5829575782702,30.5890537915584 -82.6963559598951,30.5957200992445 -83.1324403803389,30.6213413987424 -83.301315482328,30.6332849379512 -83.3106007386698,30.6343032375269 -83.6090560569222,30.6507845923385 -83.7378439398488,30.6604911909877 -84.0007301518962,30.6755376606981 -84.0755622170769,30.6785776000623 -84.2816633081929,30.6904191353307 -84.3744481609224,30.6940918759687 -84.8630037111776,30.7126645389724 -84.8645830695962,30.7145032030319 -84.8882887897453,30.7438893824889 -84.915343413445,30.7540898084089 -84.9268948431928,30.7760887042882 -84.9325639506934,30.802625045985 -84.9269262387193,30.8469221763844 -84.9377761495732,30.8949576392884 -84.9690122705718,30.9270937759378 -84.9735677000237,30.9636643794248 -85.0001419997276,30.9793194525836 -85.0016071976334,31.0012534003007 -85.4850102049851,31.0010018399978 -85.4865971253016,31.0009980072958 -86.0318217926755,30.993327601114 -86.1814761680363,30.9952251256207 -86.3839197436372,30.9915383065212 -86.7018524886848,30.9980924099155 -86.7793617052065,30.9981918115755 -87.1631175932068,31.0031572312178 -87.59858025629,31.0026307736 -87.5898672289917,30.954361030582 -87.625711591394,30.8769019951762 -87.6159151545761,30.8482964233535 -87.5419001370639,30.7856953414756 -87.5266028694286,30.7484916966577 -87.4601404897836,30.7058026368688 -87.4188942719987,30.6928101858547 -87.3986449174521,30.6680153313996 -87.3932809670146,30.6200982640176 -87.4220673638826,30.5564936086287 -87.4453529644246,30.5313897036451 -87.4188166507341,30.4817007831404 -87.3473951226136,30.45716912626 -87.3468074422634,30.4314987377927 -87.4092561498961,30.4022388615449 -87.42408011873,30.3236714953673 -87.27389760268,30.3573846203564 -87.160102583227,30.4650331854788 -87.17155505856,30.5577356138947 -87.1245336540295,30.5646667812171 -87.0692718433498,30.4505645464724 -87.0195804520243,30.5874666647957 -86.9861931532679,30.5904306090507 -87.0143998950114,30.5144345448102 -86.9325107849378,30.4635649387036 -87.1933820815507,30.3552218088262 -86.7903476114848,30.417963340528 -86.6102358163719,30.423651606622 -86.4526391026542,30.501237135688 -86.3878791046355,30.4621676047067 -86.2196082958941,30.4878542196163 -86.1229339842843,30.4264616798505 -86.114640755008,30.3858018718917 -86.2415664782634,30.4285277915735 -86.2400330396019,30.3998877870994 -86.388108078653,30.4060128314707 -86.5053138173483,30.4099729095893 -86.3874595919579,30.3876588649199 -85.9870132562786,30.274430447424 -85.7263932601573,30.1288421882721 -85.7579191757177,30.228945499057 -85.8299426331719,30.2328139986745 -85.8504205348322,30.2803593792308 -85.752708285065,30.296929416945 -85.7171312674037,30.2650619320408 -85.5694755083714,30.3110040681735 -85.6001764366836,30.2511510570462 -85.6660583999623,30.2516894275641 -85.7098294679232,30.1787734448826 -85.5297167444586,30.1316864955678 -85.4643158058391,30.0511635487587 -85.3956723079449,30.0585673680019 -85.3826562367938,30.0362861989575 -85.3826943968843,30.0242701944309 -85.4323859451426,30.0457542840855 -85.4150133657461,30.0315524246978 -85.4713579556514,30.021863583452 -85.5685286533251,30.0982936773355 -85.6284974801284,30.092591247597 -85.3847925794656,29.9238014777072 -85.3005241314803,29.809796482644 -85.3065894420777,29.7017103324635 -85.358043047591,29.6912547238295 -85.4025465872846,29.7943649380265 -85.3929943816024,29.875413459683 -85.4140519942968,29.8630676261595 -85.4096039187485,29.7767663594786 -85.3648790697375,29.6830190693874 -85.2147599731812,29.7015576599036 -84.9882831153426,29.7199215009452 -84.9285133165353,29.7779718956361 -84.858030735784,29.746860644003 -84.4645378551553,29.9296272731811 -84.346911138444,29.9101687274893 -84.3389387021707,29.9471415138821 -84.4331041474675,29.9595452292823 -84.4376900914885,29.9917915151398 -84.3604166513926,29.9773907329364 -84.353924908203,30.0696244196511 -84.2330713099055,30.1081116975018 -84.1478548013806,30.0817249598013 -84.0746250590684,30.0999482141697 -83.9717383295973,30.0774831103292 -83.6541827225009,29.9109618275118 -83.5504482416698,29.7373231552771 -83.4049738612733,29.6696026010291 -83.3800312998626,29.5198747697928 -83.2343277851478,29.4339375053078 -83.1746328139161,29.3436792113098 -83.1089950735291,29.3281828439052 -83.1422065121976,29.2996514317714 -83.0739287228003,29.2656522892705 -83.0367477674175,29.1793877526811 -82.8021569486962,29.1551323838437 -82.7553222386037,29.008660342598 -82.6366191769258,28.8847079412874 -82.6365190150036,28.8142779635276 -82.6813806732741,28.8083822083402 -82.6360757732282,28.6927489136677 -82.6734759424042,28.4285106282973 -82.7791440868071,28.1730274345577 -82.8442855871409,27.8506413239551 -82.7410033447869,27.6858682776039 -82.7281628863367,27.7177732213872 -82.7938385725946,27.829653943852 -82.6783265396172,27.7055878183437 -82.6446191370261,27.7157250804914 -82.623653104071,27.8485270486841 -82.5642645135043,27.8784619377409 -82.7254849978141,27.9405627845552 -82.6447412328194,27.9665839458658 -82.700665998164,27.9753535590083 -82.6727188789207,28.0105143110528 -82.6983389996622,28.0461689270521 -82.6506846720202,28.0071632485504 -82.6455652432514,28.0288470743089 -82.5389953635787,27.9357280906989 -82.5105981113627,27.8312320397799 -82.483131719607,27.821947512228 -82.4609984469958,27.9401552300599 -82.3988177254479,27.9062193926186 -82.4043795621193,27.7916278689045 -82.5524998292994,27.6440140810863 -82.5400408116316,27.6081060565737 -82.6263767381809,27.5551940586101 -82.5542623118999,27.5822396263396 -82.5696053404662,27.552713123606 -82.6387670919584,27.5366381336648 -82.5755716572461,27.5123247874474 -82.4271770498958,27.5228592370009 -82.5141997040709,27.5119896299127 -82.4882670113381,27.4780670468665 -82.6817060967643,27.5244293448953 -82.6658290426217,27.4935869887545 -82.638889133273,27.5034592572515 -82.6859253554227,27.4738446601839 -82.5655623022342,27.3866814664875 -82.5327402803326,27.3318018750555 -82.5699574997893,27.2742801857922 -82.514483358897,27.2104536946126 -82.5311307836814,27.260277268799 -82.5069299595387,27.2369915434566 -82.3800366684968,26.9472958619466 -82.3436286898397,26.9036327303149 -82.3686686110515,26.9479386066161 -82.3981717711872,26.9985156064124 -82.3554313078568,26.9488960497624 -82.2898406078895,26.8498858964476 -82.1538287055014,26.790128827623 -82.1764953546999,26.9136932765042 -82.2575818018979,26.997907071209 -82.2821793222444,27.0245573864093 -82.2574596818821,27.0044089537616 -82.1532097767663,26.937064868502 -82.0126882415853,26.9765506094598 -81.992851089122,27.0316764188246 -81.9791941742815,27.0316801758383 -81.9914399870855,26.9630565804492 -82.0978726473244,26.9217855253756 -82.0517675266414,26.8667090832592 -82.0682708848857,26.7669703280974 -82.0836600916898,26.7157906803202 -82.0214729222177,26.5246799114177 -81.9444519668186,26.5507196658666 -81.8971019671985,26.6637671605295 -81.7739143902569,26.7102658283511 -81.8842767455881,26.6429874247486 -81.9287732333451,26.5349808410994 -81.9681192314758,26.5173825540891 -81.9420187660068,26.4675625679953 -81.8642123218608,26.4395539803577 -81.8493509562169,26.3321969602063 -81.8138585809537,26.2844671116379 -81.7947171167256,26.1111624155724 -81.7056956434448,26.0001719707702 -81.7182927746014,25.9235815788374 -81.5307421662118,25.9146583461055 -81.2562071495919,25.803102822616 -81.1999471683642,25.7104222944241 -81.2583748028608,25.6811000537785 -81.1433228063246,25.3968273443257 -80.9742816356419,25.3224599988499 -80.9152746101809,25.246725347404 -80.9510271592913,25.2025375364347 -81.0115606647601,25.2144297033838 -81.1405692249725,25.3207650388025 -81.1837838752698,25.2688795915602 -81.1482299644455,25.164690234975 -81.119016169228,25.1341887870379 -80.9758769814422,25.1305013595143 -80.8568011499702,25.1856310402452 -80.6938249084644,25.1522990222937 -80.5518761310218,25.2123186665598 -80.4208071164753,25.1922194488631 -80.4168167134392,25.2499027837277 -80.3019756474503,25.4012007632131 -80.3299912181647,25.4900151159125 -80.3014558505665,25.6137517419595 -80.1930988333682,25.7600323804277 -80.1277808584683,25.9775364329027 -80.0846956378327,26.3263775730799 -80.0509107788816,26.79719774157 -80.1146101161258,26.973837535418 -80.0903632019365,26.9740436760055 -80.1479671747375,27.1090693324142 -80.2212733035668,27.2028422831826 -80.290420512647,27.2128533886563 -80.3267908949388,27.2482620290407 -80.289634846945,27.2413386496822 -80.2239895370652,27.215066036106 -80.1900908019334,27.1856845506766 -80.2396382000622,27.2646476309897 -80.3573778811568,27.5556622412549 -80.4013770985618,27.7035855422849 -80.4818532136496,27.8457216392462 -80.5093579467615,27.8257087100619 -80.4922445876853,27.8701785816315 -80.7471898616394,28.3989923702075 -80.8507049706525,28.7856998655849 -80.8321039389462,28.7861861164729 -80.76241522498,28.73633464414 -80.7856624086309,28.7851940403771 clampToGround -86.8338822668909,30.3997351946409 -86.9291228959677,30.381394411765 -87.0476413823616,30.3694010448852 -87.1393491673198,30.3517658849312 -87.2021407001293,30.3348345829613 -87.2860896885903,30.3397725845478 -87.2903241050636,30.3327193793144 -87.2670458244246,30.3214318797522 -87.2423486031622,30.3214318477782 -86.8345841638274,30.3870382775534 -86.7929645335572,30.3905649446145 -86.738641643952,30.4025581695707 -86.5326429683196,30.3933887813638 -86.522770294314,30.4011477363605 -86.5347563674129,30.4067913935205 -86.6208256693825,30.4145518175759 -86.7915530723426,30.4039694647944 -86.8338822668909,30.3997351946409 clampToGround -80.7358334213803,28.7888443728242 -80.8624380297225,28.9916256739697 -80.8990978307606,29.0615113380843 -80.9162872259714,29.0718222697753 -80.891079384763,29.0133938389067 -80.8171798101218,28.895390595308 -80.7633303416414,28.8220678253514 -80.7358334213803,28.7888443728242 clampToGround -80.7258997483759,28.7843659964936 -80.6411976731118,28.6573460126368 -80.7540684017207,28.7368838886358 -80.7349947909981,28.7066171587924 -80.7859302565314,28.6877162616962 -80.7804452685255,28.6189606122974 -80.6918815595558,28.5883502247698 -80.6600431301066,28.6186511090254 -80.5991290711823,28.6039228263252 -80.5774466899765,28.5486534377114 -80.6216302365325,28.4126591437007 -80.5876558561293,28.4092601916422 -80.5259480649338,28.4634626289081 -80.579689196541,28.5901540601732 -80.7258997483759,28.7843659964936 clampToGround -80.6886238246559,28.5817643631259 -80.7210434793205,28.3854010160234 -80.605571665409,28.14494461734 -80.6671105695874,28.301841271446 -80.6627305489283,28.4274102077487 -80.6091928366698,28.5735665270911 -80.6537947563473,28.6008904599418 -80.6886238246559,28.5817643631259 clampToGround -82.1019415480461,26.586077179011 -82.1286518307944,26.6936913317227 -82.1833101452127,26.6834323648282 -82.13570958489,26.6426298555739 -82.0974560861241,26.4939425477023 -82.0669530179541,26.4975643713843 -82.1019415480461,26.586077179011 clampToGround -80.2494536778732,25.354937643044 -80.3616011380102,25.2964992519179 -80.3302969914516,25.2679815350763 -80.3530636815586,25.2115321598761 -80.5878197219821,24.9563763998019 -80.355665273095,25.1582335995928 -80.2494536778732,25.354937643044 empty states.AREA: 57899.398 states.STATE_NAME: Michigan states.STATE_FIPS: 26 states.SUB_REGION: E N Cen states.STATE_ABBR: MI states.POP2000: 9938444 states.POP2001: 9997284 states.POP00_SQMI: 172 states.DEN_0_100: 85 USStates.ID: 26 USStates.State_Name: Michigan USStates.Date_Entered: Jan. 26 1837 USStates.Year_Entered: 1837 USStates.Year_Settled: 1668 ]]> 1837 #Style_5 clampToGround -85.4386025294334,44.3365484429102 clampToGround -88.4975275282269,48.1737953051637 -89.1560989935608,47.9392280960012 -89.2017873015379,47.883856943529 -89.1929162635656,47.8446133573585 -89.1398848301356,47.8240760135492 -89.0286226647864,47.8506552310947 -88.9015476276433,47.9602485109714 -88.625327068005,48.0331676704744 -88.4975275282269,48.1737953051637 clampToGround -88.5006811327171,47.2901802187495 -88.5956323026243,47.243592963422 -88.5942620433566,47.1347650286244 -88.4706641927559,47.1114725925833 -88.4128433970392,46.9880945574411 -88.2222796851962,47.2007522844459 -87.9170421798346,47.3580070347498 -87.7375104753852,47.3930248530549 -87.7043835306061,47.4159502393094 -87.7881204125595,47.4707930407946 -88.2113917997532,47.4478349809783 -88.4379010918717,47.3558961567267 -88.5006811327171,47.2901802187495 clampToGround -85.8598446689146,45.9694694332197 -85.6553812556068,45.9728707038144 -85.5095462997763,46.1019114405108 -85.378242862305,46.1000474968113 -85.0616297207559,46.0247516443713 -84.8510998289,45.8906367080231 -84.7317322269644,45.8556796718052 -84.6890226397369,46.0359181647936 -84.6168451285152,46.0382300997572 -84.5016348911713,45.9783426043905 -84.3544850834245,45.9991900261403 -84.1132725571978,45.9785386893944 -83.9064607016374,45.9602396119094 -83.9019522904123,46.0059021950587 -83.9895017437976,46.0259857516108 -84.0619810068951,46.0944707342467 -84.0295784705683,46.1289437813081 -84.1197351080435,46.1761086144177 -84.2470314923821,46.171447449818 -84.2731342070364,46.2073090320522 -84.181646508334,46.2487208573892 -84.3116140465187,46.4886691648575 -84.4159670399249,46.4806585984594 -84.5726668980299,46.4079263482109 -84.6298147995395,46.4829429912477 -84.8036530049067,46.4440542272806 -84.931320645464,46.4878435249077 -85.0166397498537,46.4764442097209 -85.051655182818,46.5055768367989 -85.0189754555566,46.5490241006878 -85.0269715018596,46.6943397781429 -84.9547594637199,46.7709512828567 -85.2300947338335,46.7567853203433 -85.5038505878416,46.674174579044 -85.8575364791034,46.6948151482157 -86.0967391005232,46.6552685367715 -86.1481090958201,46.6730530979662 -86.4623920290447,46.5610855335273 -86.6382203191924,46.4222637088956 -86.7594957088175,46.4866315025199 -86.8713826815009,46.4443597313603 -87.0064019764986,46.536293634887 -87.1106791249956,46.5014733756769 -87.3715388665667,46.5079912016724 -87.6637661990473,46.8368515825634 -87.9006541308096,46.9097618467136 -88.0366849184073,46.9118654572711 -88.1891883816124,46.9009581842231 -88.1778268169682,46.945890272928 -88.4466168624265,46.7993967669245 -88.4765228993159,46.8551516596417 -88.445964775854,46.9283044709878 -88.4411640771673,46.9907346098996 -88.5129949819838,47.032589654359 -88.5112154949687,47.1065061773656 -88.6181043741835,47.1311143906528 -88.6295000712095,47.2258127771419 -88.8848320236261,47.1045548203599 -88.9296883362077,47.0309261610721 -88.9948757098838,46.9971033190838 -89.1251876986471,46.9966066327594 -89.2145920401578,46.9233784671178 -89.3867180852705,46.8502083927234 -89.7912444026547,46.8247129534584 -89.8862519694252,46.7689352365095 -90.0188646004349,46.6786337680856 -90.4081998571279,46.5686106643971 -90.3855250538424,46.5396577407228 -90.3137081584288,46.5515632659266 -90.3023935803059,46.544296405249 -90.300181077668,46.5250515829943 -90.2697849871137,46.5224805256097 -90.2584017374293,46.5087897865362 -90.2115257849797,46.5062949924702 -90.1613911037779,46.4423800673451 -90.1417974652462,46.3938993152082 -90.1151771316786,46.3651557309551 -90.1116593658125,46.3404289934283 -89.925136091667,46.304025700414 -89.0998061353819,46.1456427917013 -88.9853010679315,46.1003912267907 -88.9251954422437,46.0736015080096 -88.804397170335,46.0268046239007 -88.7938153525548,46.0363602068919 -88.7774806211023,46.0326143605406 -88.7730171354202,46.021147746959 -88.7264096386053,46.029581736083 -88.7036055788856,46.0189236405892 -88.6773838648913,46.0201441283944 -88.6436694832571,45.9933882928391 -88.6155023459798,45.9941205068572 -88.5975360335339,46.0155164912387 -88.575357692098,46.0089590630598 -88.5483579419945,46.0193002259831 -88.5156131830942,46.0186095619689 -88.4940832789595,46.0129599627087 -88.483813961278,45.9991509885852 -88.4543189656679,46.0007603460834 -88.4035221124417,45.9834220708464 -88.3699382062343,45.9945870784701 -88.3213230502811,45.9667127656587 -88.2991520587513,45.9619441469833 -88.2571680396397,45.9670551908873 -88.2149918189356,45.9479016364541 -88.1801939444304,45.9535166684228 -88.150438424194,45.9362935215681 -88.1113904221148,45.9262876744074 -88.093850061765,45.9206153043833 -88.0957641221132,45.8918035055568 -88.0654210733109,45.8736421368008 -88.121786443611,45.8348779040675 -88.1299494937058,45.8194019526506 -88.0887340937991,45.7915325188816 -88.0516393398365,45.7861121476097 -87.9900698113483,45.7950463354111 -87.9691796312807,45.7664485705759 -87.873628831766,45.7506993690495 -87.8423627328109,45.7224184643369 -87.8015528795181,45.7113910361362 -87.8011558298595,45.7013243544489 -87.7774737292068,45.6841018123955 -87.7809448308433,45.6759156697945 -87.8170542702565,45.6653907719653 -87.8199378153198,45.6544505099681 -87.7760447968861,45.6132001492452 -87.7750754639144,45.6003869719677 -87.7863124896731,45.5685197968153 -87.8286019788526,45.5685917608724 -87.8051409550811,45.5445258364016 -87.7893849078335,45.4990676310374 -87.8136146858711,45.4664604760223 -87.8602674034623,45.445098404767 -87.8495317013046,45.4061175328758 -87.8836106233029,45.3658544827434 -87.8739746664525,45.3620858008275 -87.8685352765743,45.3720723766891 -87.8620960657316,45.3701651658513 -87.8412825138008,45.3461489152026 -87.8280078733776,45.3583213196226 -87.7600380690864,45.3528977344774 -87.6895980065264,45.3912693654604 -87.6436840378919,45.3618558882988 -87.645362038293,45.34816920676 -87.7044714190303,45.2722051755656 -87.7051420461443,45.2470862859939 -87.7196680292816,45.2367715966918 -87.72162823196,45.2116719436728 -87.7361999812867,45.1990723551736 -87.729668811687,45.1766048406442 -87.6728141404664,45.1406726367061 -87.5925143132007,45.1085018074312 -87.5838641609867,45.1627331960046 -87.3322268052516,45.4239427018796 -87.2607070334237,45.5548024600535 -87.1237594181029,45.6962467505129 -86.9016241205329,45.714778151079 -86.7614692096392,45.826067773125 -86.584735685807,45.8138796968306 -86.696919405518,45.6925111117282 -86.6850533703663,45.6500480409941 -86.629784386179,45.6212335587078 -86.5761247422873,45.7101740346977 -86.5220106173743,45.7240941649958 -86.5293898263731,45.748961209591 -86.4582753564091,45.7627474587696 -86.3437955830456,45.8343961651483 -86.3156386150169,45.9056825648406 -86.2593192707417,45.9469296652713 -86.067891449499,45.9642103933668 -85.9171044674119,45.9181924006148 -85.9149553497885,45.9579781797015 -85.8598446689146,45.9694694332197 clampToGround -83.8546801700959,46.0140316422695 -83.8858916672003,45.9708524498185 -83.8528104836337,45.9974492109717 -83.804881070028,45.936764510125 -83.629704837753,45.9535961546271 -83.5798137377086,45.9175013541361 -83.5161593405338,45.9257147658035 -83.4731894201386,45.987547805609 -83.5339910274221,46.0117900707978 -83.5894980595994,46.0885184421793 -83.6498875534141,46.1039714892754 -83.732448534534,46.0841081465585 -83.6803144428738,46.0717945524654 -83.6735921422512,46.0361921724046 -83.7564199993262,46.0273380165628 -83.8011052680607,45.9884124748838 -83.8546801700959,46.0140316422695 clampToGround -86.8348296412819,41.7655047552312 -86.5251809764443,41.7655403363901 -86.2345652919433,41.7648642479853 -86.0683022053847,41.7646284325784 -85.7992269722862,41.7635349679273 -85.6594588291887,41.7626275140628 -85.2972096358478,41.7635810035748 -85.1931406144237,41.7628675471372 -84.8260080463026,41.7618751066694 -84.7884777858482,41.7609594561938 -84.7903774729513,41.6974947329852 -84.3843932427042,41.7071503370832 -84.3592084922416,41.7080391705922 -83.868639675225,41.7159933856432 -83.7639541211988,41.7170422186577 -83.4826910020175,41.7251299269076 -83.1900662445753,42.0339796563901 -83.1938731067471,42.1157494340736 -83.107588485427,42.2927057543585 -82.9293890592867,42.3630404584644 -82.8749070916899,42.4580671820726 -82.8881381486948,42.4957559768438 -82.802361560496,42.6129258784123 -82.8204067747469,42.6357945388927 -82.7298058507281,42.68122680411 -82.6340147986866,42.6693828613479 -82.6458773357857,42.6317284970443 -82.5181795398622,42.6340520555246 -82.4732382545008,42.7628960899223 -82.4719527162131,42.8986819969275 -82.4198358589283,42.9724650786066 -82.5038206240279,43.1722534988665 -82.6057380465658,43.6945684044879 -82.6184877653886,43.7878661020809 -82.7279021988736,43.972506277548 -82.8059778732508,44.0335645723623 -82.9401540705878,44.0699595149276 -83.3260258531079,43.9404594218171 -83.3671631879487,43.844452153086 -83.4664083716859,43.7457407367818 -83.4942480190406,43.7028415322697 -83.5309097292081,43.7259433589107 -83.6546148101736,43.6074199226765 -83.6991646571783,43.5996422574816 -83.9381217654628,43.698283731803 -83.918376196547,43.9169976606375 -83.8736148499472,43.9628422046614 -83.7048019672777,43.9971652266508 -83.5984044651608,44.070493356617 -83.5682369426092,44.1701180526948 -83.5291504874037,44.2612741330213 -83.356962952145,44.335133682907 -83.3200362180823,44.5154601725864 -83.280812186475,44.7031838105345 -83.3197243749479,44.860646589634 -83.4293557295696,44.9262969077196 -83.4649030258911,44.9978831954067 -83.4339724672792,45.0111281816831 -83.4444410041901,45.052773592147 -83.3127074580252,45.0986201471471 -83.3986957035617,45.2136414467938 -83.4207614501791,45.2571826985239 -83.3940196634256,45.2729072818439 -83.4895980251029,45.3289374401826 -83.4958321318043,45.3608019248622 -83.592363108339,45.3495018817337 -83.7123186365609,45.4123944193601 -83.782809495878,45.4094489102236 -83.9228921594947,45.491773583756 -84.1059075983171,45.4987495121323 -84.1352288191404,45.5713432584365 -84.2055603253076,45.6309054506234 -84.3214583512467,45.665607571299 -84.4652750367404,45.6536374615858 -84.7241858039318,45.7803045686693 -84.9720378240667,45.7377451887155 -84.9834125040067,45.6837137292165 -85.0780197003353,45.6301851677823 -85.1204469355824,45.5697793498832 -85.0818156898282,45.464650463889 -84.9216740332456,45.4098990503169 -84.9858934396436,45.3731781114838 -85.0928627445342,45.3702250037919 -85.3054749530935,45.3203837985815 -85.373252794881,45.2735409266072 -85.3902447740037,45.211593083379 -85.3848695133689,45.0106032425427 -85.4513511003899,44.8605403796015 -85.5260810367145,44.76316233761 -85.6380395377647,44.7784356967099 -85.6530062666143,44.9583622397271 -85.5655146563546,45.1805602655728 -85.6102150946457,45.1965277092277 -85.7957565629422,44.9859748602387 -86.0674543490246,44.8982569078434 -86.0979646872562,44.8506123089817 -86.0829183364796,44.7779289033047 -86.1084845600375,44.7344420211888 -86.2586269405085,44.7007309766977 -86.2380383088826,44.5222735987814 -86.271954369493,44.3512284893904 -86.3864232316096,44.1832041325685 -86.5186023282979,44.053619224709 -86.4381471318946,43.9455921234144 -86.4595481972781,43.9501848083598 -86.428814180897,43.8201238403686 -86.4341008938508,43.78145827444 -86.4043451853738,43.7666424042588 -86.4478111642203,43.7726653117644 -86.5413012212606,43.6631870809765 -86.4632010649154,43.4751666759798 -86.2738368374562,43.1210450506522 -86.2178547734773,42.7748252127058 -86.2849807719956,42.4223247647982 -86.3742778338012,42.2494214217998 -86.4988334182755,42.1264467479204 -86.6175922510584,41.9074480787407 -86.8348296412819,41.7655047552312 empty states.AREA: 576594.104 states.STATE_NAME: Alaska states.STATE_FIPS: 02 states.SUB_REGION: Pacific states.STATE_ABBR: AK states.POP2000: 626932 states.POP2001: 632783 states.POP00_SQMI: 1 states.DEN_0_100: 100 USStates.ID: 49 USStates.State_Name: Alaska USStates.Date_Entered: Jan. 3 1959 USStates.Year_Entered: 1959 USStates.Year_Settled: 1784 ]]> 1959 #Style_5 clampToGround -152.571308132839,64.3171717929199 clampToGround -161.333785152503,58.7332480932238 -161.265686026239,58.7746349508974 -161.29973001177,58.8092078992406 -160.898880078262,58.8847743885185 -160.835706338137,58.8360566348485 -160.328871281117,59.0589472427445 -160.255289421572,58.9814391788959 -160.322214368411,58.9497759566814 -160.251928933333,58.8947750733089 -160.018038770945,58.8847826021977 -159.921353250021,58.7703335410918 -159.764983266222,58.8533973288144 -159.770814017585,58.9336678800203 -159.629389451621,58.951728817063 -159.652767383695,58.8356144431094 -159.431907396554,58.7820037872707 -159.058839790045,58.4242303462786 -158.840482035485,58.4017256976851 -158.706325553629,58.4914573031936 -158.914412274631,58.768124706742 -158.847732874479,58.8147881781941 -158.804120274768,58.7900764394484 -158.886637897011,58.7328457311724 -158.781626705695,58.7703465789124 -158.764699341806,58.9173004051305 -158.825525121968,58.9703482280997 -158.746636639026,58.992299469629 -158.790794838837,58.9609108289104 -158.72911244469,58.8728508919192 -158.448018866607,59.0539656031184 -158.539151744527,59.1745261359031 -158.425528178316,59.0761984218428 -158.131606098439,59.0275871389339 -157.994937811845,58.904249899836 -158.025789747621,58.8700843445155 -158.181898629942,59.0086957979644 -158.494678300986,58.9986887872383 -158.422196166983,58.9711854751204 -158.496903135941,58.9484099616525 -158.566903585087,58.8117404728629 -158.368259112377,58.7472974611246 -158.335782570428,58.6586798973382 -158.201041727574,58.6061901604486 -157.15562321674,58.863481676262 -157.114088794183,58.8737057915319 -156.885486385519,59.0087124811514 -156.86715047004,59.1028830583024 -156.781337077422,59.1506598829204 -156.857424505391,58.9970702811005 -156.948271114567,58.898965473525 -157.073799361921,58.7634294950003 -156.940465365975,58.735095498384 -157.227146003726,58.6403703663092 -157.26552143945,58.6109998952088 -157.551293782504,58.3923093556673 -157.567122696749,58.3028631268522 -157.467383404756,58.211472846221 -157.337107162871,58.2384214399498 -157.140723498892,58.1617563507581 -157.395729459446,58.2059194349044 -157.612095158083,58.0889724688187 -157.708762826285,57.642579814095 -157.602372111932,57.621188560169 -157.594584559286,57.4884098545335 -157.422370568788,57.4925794413781 -157.451242831187,57.5445286801005 -157.399057835422,57.5592475782682 -157.394324661818,57.4942511106634 -157.659313790987,57.4739582789334 -157.680712071643,57.5667494970969 -157.940146338779,57.4911808741641 -158.057084658874,57.3628493580549 -158.287372349061,57.3234001444386 -158.650976582544,57.052545680881 -158.702058683987,56.9764328167148 -158.642626518403,56.7603290977313 -158.798407929269,56.8009719610301 -158.948176855863,56.8400433956931 -159.027642308589,56.7942118101975 -158.864012311658,56.8925432463471 -159.2376011964,56.727251651604 -159.266255938373,56.6969773995724 -159.211232058542,56.6933620466209 -159.839280009922,56.5400291680371 -160.369545562978,56.2691753616262 -160.571495574202,55.928897380043 -160.240612175007,55.8452847206279 -160.316754865376,55.821402903935 -160.251747074441,55.7697298042654 -160.466201133531,55.7927898869082 -160.503162720311,55.8663904588052 -160.789543128523,55.8791647494381 -160.760665773692,55.775831902145 -160.661480434371,55.7308353579732 -160.798136884243,55.7099971367895 -160.948139923201,55.8230554861109 -160.930382830279,55.8752714620679 -161.027888121243,55.8958312292401 -160.863155388513,55.9319441282278 -160.87646436338,55.9897218164889 -161.246184916394,55.9416568129955 -161.370088134206,55.9505502490315 -161.198703521823,56.005828944452 -161.783999074871,55.891092733739 -162.612011328844,55.4266227275852 -162.503704052287,55.4438448432383 -162.490058524205,55.3735694775513 -162.892307267167,55.2652303796606 -162.834778744668,55.226336390692 -162.880614120962,55.1855020887533 -163.075072766862,55.1727266321509 -163.018985653155,55.2432779859019 -163.325067791767,55.120781676687 -163.240312596218,54.9566141906158 -163.337815758332,54.9579995076703 -163.354198710481,54.9182724565595 -163.276713380764,54.9118844503472 -163.387823291606,54.8557707708523 -163.362248453471,54.8110483786857 -163.046468053829,54.9366094396024 -163.210901063576,55.0146638683032 -163.241178591562,55.0968868621753 -163.186461496505,55.1388346767614 -162.91951622862,55.0185578001535 -162.97670554716,54.9941114885713 -162.879777735911,54.9310544248213 -162.737537176281,54.9471652996602 -162.654501254855,55.0496709305591 -162.564497469772,54.9543944105828 -162.650351300767,55.0663416235381 -162.60698925691,55.1616203136746 -162.723662744298,55.2185644807848 -162.64813559177,55.2944031175309 -162.564241723022,55.2924592672939 -162.600342732401,55.2688454079785 -162.363397597136,55.1019064144312 -162.526723907637,55.1069029544622 -162.43792192466,55.0336527695807 -162.226160106285,55.023841561213 -162.225086063802,55.1102298628945 -162.102015333028,55.1652243665891 -162.14096098133,55.1124473313382 -162.089794404917,55.0780070068784 -161.969778363407,55.1010735983281 -162.04425843462,55.2318999694405 -161.908136327499,55.2096901239275 -161.701174942482,55.4046990846558 -161.713417473843,55.5133125057309 -161.564524528208,55.6219224278555 -161.140619787914,55.5322194472926 -161.375889759647,55.5719308099382 -161.487550344253,55.4802589363229 -161.505093667031,55.3585905544742 -161.245606142834,55.348036733725 -160.901450202665,55.5180571296746 -160.812282930602,55.4508344758896 -160.673678646028,55.4611128174626 -160.65869461044,55.5025023768326 -160.762026681564,55.5436149376 -160.594244378424,55.6075070391802 -160.509799239654,55.4772206213918 -160.367289822086,55.6016730144438 -160.435921567478,55.6452826356233 -160.150100463074,55.6580644081999 -160.156196639475,55.7302866928034 -160.067023580057,55.6958411813249 -160.041480059015,55.7872369135226 -159.865655546791,55.7828003051536 -159.843160184257,55.8502987828938 -159.623997571039,55.8130754392236 -159.68182740582,55.7372354944145 -159.633763521754,55.6941818105079 -159.709595206964,55.6608466266932 -159.617099863445,55.6341826757826 -159.757958323373,55.6016786017979 -159.625702753951,55.5725134117704 -159.56444722997,55.6675696119233 -159.505743092783,55.7586358496787 -159.545629195873,55.8803024719076 -159.468402315572,55.8961424500525 -159.426523393594,55.7855851946283 -159.361718537439,55.8744682212367 -158.929489375146,55.913649286065 -158.856707899204,56.0100395520857 -158.672026415509,55.9542091455648 -158.649812533647,56.017816276671 -158.738127459087,56.036155798871 -158.66229565743,56.0597624975191 -158.698401408561,56.1444864288357 -158.6578731072,56.108934056627 -158.565933519365,56.1603198605422 -158.63062848199,56.1992133735959 -158.475910642966,56.1839349326357 -158.604501408417,56.0933709877704 -158.597299257073,56.0353265622513 -158.510949590254,56.056713105801 -158.568435275547,56.0230969994927 -158.442033154921,55.9928266933291 -158.503440813723,56.0939296821997 -158.418133643957,56.0619881930034 -158.412582158765,56.1719890239793 -158.359506001416,56.1242151806531 -158.122575442007,56.2328328191039 -158.339520178038,56.1722731135264 -158.401781776975,56.2333830676346 -158.209248110013,56.2825589305505 -158.459802906216,56.3403232775806 -158.56230826884,56.2936594813065 -158.539815059838,56.2464337523585 -158.652025808424,56.263658716432 -158.425109648428,56.4430999017546 -158.142882552712,56.4586613057075 -158.137331109151,56.5119982949112 -157.878969772984,56.4667230394565 -157.850930570702,56.5564451637043 -158.125368944743,56.5250524796508 -158.112310036865,56.567281723149 -157.789291610641,56.6775641184919 -157.687049228321,56.6083990265527 -157.483154811739,56.6150734109705 -157.481753538524,56.6686855455315 -157.602332905389,56.7181215981928 -157.398444314694,56.7645206663749 -157.45234430765,56.8486816726827 -157.218693133921,56.7706297462374 -157.149023983421,56.8181418198582 -157.190102649761,56.8473004074459 -157.089544356612,56.8228663550548 -156.946204230785,56.9073055025247 -156.957316996187,56.9781375977643 -156.815676111883,56.8970385623057 -156.781778579615,57.0442657888193 -156.550662398262,56.9767574935604 -156.647895951436,57.0523176397596 -156.509283408839,57.0481548031044 -156.475383840147,57.1206504256663 -156.370374663586,57.1412137444124 -156.345108649058,57.1789954363592 -156.382157694384,57.19522642686 -156.448444338671,57.2242667488622 -156.337058323783,57.2837178619531 -156.560112290231,57.2706517564981 -156.547908383125,57.3151012445201 -156.204013805649,57.4767689054821 -156.031252083175,57.4387154200719 -156.105139656814,57.5256676083383 -156.017096225347,57.5278889954359 -156.036264823039,57.5728945849602 -155.738761208247,57.5484491430015 -155.772116905032,57.6428964424694 -155.589863307336,57.6684495062979 -155.637654619084,57.7190036463949 -155.605424772626,57.7901269537674 -155.313209888872,57.7337300300885 -155.329864010455,57.8351196866473 -155.082392625678,57.8817919802853 -155.122076480031,57.9498466148949 -155.036263615044,58.0190165188606 -154.784915463434,58.0015242707294 -154.6693745043,58.068748603896 -154.577475297862,58.0215209743589 -154.542736181707,58.063186084274 -154.602683197036,58.1237428043424 -154.464687576786,58.0912394264893 -154.493467970366,58.195408792331 -154.335544467235,58.076521074806 -154.338858209779,58.1551303092309 -154.226332467918,58.139025874853 -154.303822766377,58.1884658187318 -154.208806500557,58.1895815991094 -154.155733688479,58.2226352017764 -154.245420814585,58.2551439894471 -154.114293382021,58.2806980425376 -154.356521446324,58.2870875115718 -154.002646725717,58.3773658722835 -154.105387027067,58.4812556025976 -153.932061858385,58.5045959892085 -153.972890504162,58.5284831785518 -153.898185310175,58.6134835866678 -153.61068326709,58.6340492543883 -153.44985398374,58.7137727795236 -153.364832539309,58.8429417107663 -153.273557746057,58.8554624066591 -153.261534242756,58.8571104801079 -153.362056111899,58.8676613660462 -153.292631360869,58.8782135819054 -153.429022087772,58.9818267000574 -153.704883939862,59.0684898098592 -154.042661381181,59.0787554970255 -154.157370965954,59.0231941221256 -154.173498514142,59.1218045137184 -154.262948809218,59.1415330158652 -154.128492709467,59.2018092726682 -154.114066158873,59.3032000988927 -153.949637554903,59.3582157497182 -154.144651043452,59.3768103802015 -153.749350608612,59.4351585043175 -153.76715342528,59.5198853480745 -153.876835256794,59.5446071060938 -153.591094337494,59.5554610435647 -153.56529052404,59.607421705646 -153.7077677386,59.6321221390643 -153.593590561736,59.6932442855167 -153.558099389461,59.6279782410784 -153.490537875191,59.6429817146384 -153.451034011489,59.788514869163 -153.325474023388,59.7201833609921 -153.427468957573,59.6507468501349 -153.228261155999,59.6432497473811 -153.046678397772,59.7063277032092 -153.01027369159,59.8293809376473 -153.274125155891,59.8332414104575 -153.220254584942,59.8674197160735 -152.709383935819,59.9216072262671 -152.582127278814,60.0810565939181 -152.92390161202,60.23334805462 -152.94003873109,60.283835571813 -153.105318627738,60.2888209744272 -152.914498420316,60.3074426802667 -152.888672743247,60.2499487121571 -152.623566405179,60.2193853178703 -152.424485688679,60.2913482476289 -152.244741438209,60.3932989208154 -152.33336982315,60.4299649111308 -152.324187650344,60.4982963133817 -152.060879059337,60.6702568219423 -151.869752276787,60.7527600317616 -151.712241218462,60.7227533678662 -151.8069672633,60.8333167797258 -151.745283678886,60.9158263142677 -151.170299447225,61.0494362619038 -150.971803022971,61.1944351467804 -150.952789955596,61.2083290292342 -150.589996572722,61.2838898032493 -150.572785589509,61.3644498997296 -150.501098165034,61.2522262842029 -149.998044706153,61.2397243397973 -149.88219241844,61.3819417818167 -149.69833315027,61.4716711128427 -149.244431173874,61.4922294375812 -149.244690583337,61.4921722234404 -149.688899347697,61.3938950506461 -150.066392163155,61.1538821236082 -149.35355602292,60.9274961555537 -149.164131930274,60.9441439128491 -149.030233992719,60.8471941251026 -149.031256391296,60.8473581579819 -149.817460656137,60.9738753404146 -150.055802984252,60.9049820972072 -150.441125056703,61.029716422926 -151.054174381277,60.7872102685368 -151.411145577038,60.7269253434777 -151.277527954686,60.538589425392 -151.30610807234,60.3849681995543 -151.393906354096,60.3596867116381 -151.434168395526,60.2060742580971 -151.721073010356,60.0213321317056 -151.87130095749,59.7432697182973 -151.411020611746,59.6024407095216 -151.473222538545,59.6335528029021 -151.429615432973,59.6593798124915 -150.994891148765,59.7766160796313 -151.194325829894,59.644665262138 -151.172373755852,59.5971640167154 -151.440432999921,59.5332703268026 -151.373191005141,59.4404885512437 -151.68518619413,59.4763225888683 -151.901267887832,59.4074275234718 -151.814594874271,59.3526970431042 -151.939328637694,59.3435208087696 -151.974035802241,59.2704359809586 -151.76075037891,59.2209870235803 -151.725442401128,59.1601449713956 -151.416827511337,59.2579726347623 -151.113463885909,59.2132702949236 -151.257942518028,59.3135412971278 -151.046535944978,59.2968882192378 -150.959468408548,59.2017798893775 -150.882900422449,59.2566178352259 -150.92345880736,59.3168976512654 -150.601818750295,59.4332904901038 -150.637372846165,59.4591302876502 -150.573198696892,59.488018188716 -150.656820527631,59.5455181462851 -150.492372464406,59.5966342854004 -150.554892203734,59.5207951642239 -150.483751946228,59.4610816727633 -150.234610434769,59.7174743922216 -150.375967886488,59.4649685822027 -150.177957168347,59.5299760545595 -150.186568178919,59.5913620600161 -150.089068344022,59.5874737531167 -150.131279158927,59.6944203512125 -150.026572805093,59.6283085711905 -149.958795645119,59.6663736669455 -149.917964701058,59.7141495203082 -150.036312057431,59.7958151910466 -149.745725653872,59.6580445615074 -149.76687375455,59.7794301535473 -149.865749098572,59.8455311572584 -149.761044038397,59.835258968484 -149.725733852783,59.9624799470071 -149.649654701483,59.8997048950508 -149.632413768566,59.7430521316596 -149.527979014918,59.7161061893766 -149.630184937389,59.8241558519239 -149.392427191978,59.996925006206 -149.419106339128,60.1177625682853 -149.297425849991,60.0149872235935 -149.27742488256,59.8669353961894 -149.109889568055,60.0505445840998 -149.039909034559,60.0480501444573 -149.118525530796,59.9844388664724 -149.072686356652,59.961110755894 -148.645732735282,59.9205553455863 -148.584838780207,59.9443183635439 -148.545431978257,59.9596933140987 -148.543775431703,60.0285627745468 -148.432069759509,59.9521654982814 -148.443751827642,60.0265934350966 -148.327872827252,60.1737736367389 -148.20473061572,60.1285935563073 -148.112311189492,60.2274263163939 -148.207873142985,60.1496125623405 -148.181753673558,60.1962918011757 -148.261756888472,60.2240371956002 -148.213149526906,60.2548997880003 -148.437875688356,60.1765645984425 -148.360649912604,60.2312630697471 -148.391233023641,60.2834972169101 -148.315658112001,60.251265128508 -148.215358388159,60.3379605640224 -148.252033968825,60.3771146586788 -148.13848080643,60.3532904104903 -148.182048393761,60.4138246643947 -148.086522057206,60.3894257803973 -147.939038435394,60.4616800092346 -148.096202802999,60.6007917073021 -148.16901726638,60.4982727807826 -148.182625054263,60.5568821805977 -148.236481371513,60.5146441164853 -148.248407357397,60.4440664370318 -148.453728463385,60.5404772618764 -148.662370737089,60.4572230831064 -148.686252636282,60.4477006410219 -148.655870348742,60.4675031161686 -148.489839167264,60.5757594787753 -148.334269745155,60.5338072453025 -148.199562326405,60.6254816107083 -148.232351327792,60.7668906454302 -148.423189909456,60.6246459066996 -148.373729433633,60.7741100557936 -148.656393799296,60.6732030138355 -148.670173154824,60.668285013405 -148.643795450459,60.7263816501015 -148.633222448721,60.7496781446092 -148.44960635712,60.8035643503037 -148.70186875851,60.7891472536526 -148.342354826261,60.8132842858392 -148.39515893567,60.8541225570585 -148.314306930357,60.8407840229732 -148.276250313012,60.9180191103731 -148.333206253881,60.9638636687654 -148.24621788915,60.950524631916 -148.150694574815,61.0658189481316 -148.419891159865,60.982475096544 -148.35876601599,61.045265507278 -148.406292409212,61.0538727742567 -148.152073881692,61.1174925099543 -148.058728074477,61.0180288282359 -147.727589369721,61.2769501718819 -147.762033891342,61.2119502260391 -147.701464454691,61.2036233612969 -148.05427032011,60.9491353609803 -147.86733694704,60.8319667058086 -147.751499090674,60.8369802363913 -147.810973218779,60.873353881162 -147.716791759145,60.9489101739289 -147.731235092843,60.8869808213403 -147.600404620288,60.864474159109 -147.610959532568,61.0050354080108 -147.669575457536,61.0183582983929 -147.597071375163,61.0230848553715 -147.548721557266,61.1539043790631 -147.481227993569,61.0736399741854 -147.546232330737,60.9102973905737 -147.433746261722,61.0114144911069 -147.456509137478,60.9550268901559 -147.380674906894,60.983631907419 -147.452354453026,60.9019624271688 -147.364825833686,60.8839103330415 -147.253739447425,60.9308410661136 -147.274590726064,61.0013889229548 -147.202899879317,61.0136078504404 -147.159279204397,60.945279594455 -147.099832210281,61.0108324265117 -146.987303498882,61.0027809241622 -147.032896212862,60.9527767239131 -146.96480793758,60.9397266125377 -146.587025468714,61.1308545406382 -146.302870653031,61.1303006103218 -146.245607696804,61.0850266206628 -146.645096824727,61.0680740681633 -146.563700432409,61.0333532654964 -146.66258226107,61.0355783966212 -146.704238180203,60.9747326576475 -146.585322998139,60.9369525778928 -146.7562168937,60.949184341708 -146.618399066796,60.8758349002658 -146.62588869526,60.8191742022643 -146.365278513723,60.8199981043257 -146.233084037149,60.8922348019444 -146.091857444634,60.833693045447 -146.688635158716,60.7445853086664 -146.655375405815,60.6991705496384 -146.487809366452,60.6780530191874 -146.304472221854,60.7733383190817 -146.268413160245,60.7219498423303 -146.04283298469,60.7980858911706 -146.018662897232,60.7428002103088 -146.25562426106,60.6377755739876 -145.92504969477,60.705840050816 -145.990873322739,60.6286083262344 -145.849200623326,60.6961056188291 -145.873343048254,60.6497147445425 -145.806403418073,60.6572171447883 -145.874197219193,60.6205455692455 -145.627771366174,60.6713869504888 -145.942281314296,60.4674984661902 -145.65561811283,60.466944019527 -145.351399838659,60.3516582766124 -145.225314668621,60.3683449430158 -144.826036159745,60.5929111703319 -144.760308369237,60.6790815080476 -144.613385843632,60.7150275209425 -144.763678839838,60.6627982972541 -144.884181006322,60.4780630494153 -144.788382984825,60.493062458805 -144.796437648474,60.4516699301247 -144.938378311657,60.3011193475292 -144.700846219873,60.276921132217 -144.576127090857,60.1852684080637 -144.189751593955,60.202513503567 -144.252554271713,60.1450107532353 -144.003095619119,60.0425179326562 -144.148602290858,60.0316537314516 -143.888930954422,59.9900121498977 -142.719050852584,60.1094910039893 -141.717587599628,59.9520616401243 -141.386792900144,60.023759031075 -141.479017872918,60.1162520487878 -141.392656822796,60.1382003643225 -141.281518868868,60.0712681733343 -141.260950985684,59.9765422987742 -141.450329121867,59.8809698429882 -141.001709257282,59.8023163528928 -140.405055993657,59.6977111403893 -139.836132734893,59.8230198715483 -139.589471632915,59.9485724375873 -139.515348897886,60.0505251414152 -139.233071735342,59.8691286469081 -138.894496190512,59.8063403069422 -139.280313455814,59.8299667944861 -139.226120251616,59.6157996927196 -139.287244089715,59.5710816495799 -139.342230474863,59.6046948540387 -139.263927331067,59.6224601202984 -139.341134941066,59.7238499763628 -139.294474503019,59.8546885566627 -139.487815713058,59.9846913591901 -139.619467019731,59.8849653387388 -139.471418166652,59.7074669601951 -139.572510583172,59.6099758949173 -139.837482979524,59.5330346061365 -139.30031473563,59.3435971805834 -139.226984728521,59.3774866299124 -139.115023715578,59.306932608997 -139.198087518419,59.3144316200442 -138.627559421752,59.1391476018072 -138.445338735773,59.1913655645444 -138.500061358955,59.1194199279759 -138.605070145945,59.1169216985396 -138.29814747493,59.0763641655449 -137.966817544318,58.9043972139786 -137.928513867343,58.7966276745584 -137.66945254236,58.6221403538231 -137.442485485931,58.6593486025529 -137.628327290225,58.5985226331721 -137.094416411605,58.3818483705342 -136.951883908997,58.3957406555413 -136.89468891615,58.3404646811455 -136.866886134745,58.3812984446125 -136.844937966734,58.3171315305511 -136.679360288633,58.2982379511224 -136.716046479212,58.2518487488786 -136.656043454623,58.2148969317336 -136.561587965299,58.2557320307773 -136.655491495902,58.3387900196198 -136.603238898985,58.3568494581747 -136.363780310359,58.2982440101744 -136.410746371687,58.3743478325558 -136.483236094748,58.3335105766018 -136.557975974697,58.3735129010878 -136.494888770296,58.3843545511061 -136.507118846123,58.441291446932 -136.318242970392,58.3990776989748 -136.278233993266,58.3090737928317 -136.08514299961,58.3379763670886 -136.031004489378,58.3829837409208 -136.082680065021,58.5113093137749 -136.2107255606,58.5129687825506 -136.120431815536,58.5538006196995 -136.29407268799,58.6621169742219 -136.333493995151,58.5943420072906 -136.525718697156,58.6110055800168 -136.339329003016,58.6834993232732 -136.497113187255,58.749883803814 -136.438229911546,58.6648894748485 -136.524357189501,58.699329244748 -136.63741457713,58.8218274483055 -136.482958192163,58.7923807131601 -136.575464362967,58.8382088268226 -136.990189990781,58.8945897861871 -137.12743032072,58.8215323761207 -137.031879326265,58.9126397725486 -136.905778407043,58.926812355003 -137.056011817366,59.0639419933536 -136.661318388864,58.8909863857034 -136.610202059726,58.9073763881054 -136.70854399634,59.0184893501142 -136.582706428563,58.9154339412163 -136.490763094364,58.9651575455877 -136.484612282788,58.8390423598058 -136.26714738786,58.8221080732546 -136.385180003962,58.804050032587 -136.223774352415,58.7490551480308 -136.097421550472,58.8559972664872 -136.111863342191,58.9290405250809 -136.226576550769,58.9243174424854 -136.137164285104,58.9501477784295 -136.164118346043,59.0332071986449 -136.036058980683,58.9159917107924 -136.044109918623,58.8540536632563 -135.965502899901,58.9159955148241 -135.771340291466,58.8998984467766 -136.070198300687,58.8173893403661 -135.822138819143,58.5993615155143 -135.890772635366,58.5765863516842 -135.845710273191,58.4688072573549 -135.948217732642,58.4574219642019 -135.874610269222,58.4602008134349 -135.917383717431,58.3827046058588 -135.636006152498,58.4218810052194 -135.474039904979,58.3718793195977 -135.482922268447,58.4763209989525 -135.482266105207,58.4752986349788 -135.345954522573,58.2646617894368 -135.087344560568,58.2327100623319 -135.093479471139,58.4363199785056 -135.223182566531,58.5921605062521 -135.164589259234,58.6363278760343 -135.391034925742,58.9588383273772 -135.378475725941,59.0907811532229 -135.552399810315,59.2285461698137 -135.414058965412,59.1968867345814 -135.306546396798,59.0832766696795 -135.357082067385,59.2049429105833 -135.554624990701,59.3180010587432 -135.400998972006,59.3049402002886 -135.383161843017,59.3585289384977 -135.346557009105,59.4685532642299 -135.360411007386,59.3436974793189 -135.368222902154,59.2732785064851 -135.163500430068,58.9927202255354 -135.161777868188,58.9745121701904 -135.149071419803,58.8407709473337 -135.031254630839,58.736614051915 -134.949036811615,58.8143887158517 -134.912621058313,58.6560578826969 -134.990691092216,58.6696692775995 -134.777641849428,58.490775534021 -134.763203482944,58.3818793937694 -134.511786337846,58.353556200747 -134.176469810883,58.1963268059925 -133.980913251872,58.4938387505342 -133.77091007828,58.5180117548619 -133.922590710653,58.4974560491895 -134.011765799984,58.3971702870635 -133.977853715933,58.3177321691036 -134.068158032297,58.2766153296601 -134.066201117339,58.085492514722 -133.900088363535,57.9760430283545 -133.672571190215,58.1471659171099 -133.768155453362,58.05576798228 -133.670892347204,58.0135539809575 -133.682854190577,57.9377083749998 -133.774534185107,57.9913264362858 -133.857575173935,57.9535439821041 -133.693105012499,57.7871626700514 -133.568958353096,57.9224356117366 -133.525942304262,57.9161378413028 -133.123080113048,57.8571686423433 -133.547015241979,57.9104879379811 -133.547011345063,57.7654962451246 -133.004774352576,57.5093840351634 -133.643418684621,57.7046569663644 -133.663955741524,57.6327098175619 -133.585339067243,57.5679869556373 -133.312833293853,57.5893738493547 -133.49698377267,57.5376995498935 -133.470866589226,57.4371423353252 -133.3367048496,57.4349184880208 -133.433945230402,57.3465912995632 -133.225868279786,57.3129816576288 -133.0453128552,57.3668719324843 -133.244213062915,57.2749262353772 -133.473650022802,57.2790896729504 -133.554796111527,57.1788192133472 -133.528137746568,57.170251028798 -133.298114295831,57.0963158766088 -133.244768478878,57.1727087270886 -133.158950021709,57.164096415612 -133.116163961892,57.1441004284371 -133.160081643089,57.0796546192494 -132.886179757038,57.0168734472833 -132.793097026481,57.0877059207201 -132.769781207377,56.9621561828107 -132.925060074322,56.9765975021592 -132.77060165749,56.8435404168285 -132.504506657573,56.7502120617999 -132.363909724204,56.8199394689082 -132.526143458526,56.7143759920697 -132.456682008304,56.6715981308588 -132.549488281624,56.627429941292 -132.312511499064,56.6374344564457 -132.347785944665,56.5271493911447 -132.190860649546,56.460486259835 -132.15918463566,56.3768754871059 -131.971963857806,56.3568773710179 -131.908639483814,56.2285236212952 -131.49196109642,56.2204678107347 -131.961956594766,56.1651919004793 -131.945847095563,55.9682473279259 -132.06281616002,55.9368652538066 -132.049477778082,55.8054682220347 -132.175848740147,55.7996382519413 -132.175024615534,55.7187928571858 -132.225653768625,55.7389522101563 -132.267798804903,55.7557397535346 -132.177525196271,55.5899085257854 -131.964175227892,55.4982422809801 -131.929477941262,55.5915718596293 -132.00559059502,55.6618461814407 -131.881107426912,55.5982402209747 -131.81696127044,55.6690785001947 -131.864722435898,55.7249016673099 -131.754190046919,55.8074038123661 -131.917246144437,55.8579672442893 -131.411424423709,56.0051871828046 -131.324207044163,55.9646304343716 -131.011992434462,56.1060238799091 -131.202812661678,55.9735113533014 -131.00057503828,55.7985298211549 -130.917813018449,55.8113108695306 -130.95864420197,55.7765900083688 -130.887538437933,55.7049239048227 -130.865859720611,55.3082667153901 -130.65586893889,55.3454930004214 -130.61558486786,55.2957733803602 -130.945569927982,55.279656185401 -131.067513808675,55.191041008103 -131.057806417561,55.1224321384514 -130.930300099946,55.0871625863252 -130.818097932271,55.1424400006887 -130.755593228493,55.0924322006668 -130.463362816131,55.3274491921237 -130.720280373612,55.0766054154367 -130.84113305224,55.1027194775792 -131.010309645102,55.0038344595815 -130.93806720518,54.9629911841008 -130.927769495423,54.8090995257054 -130.849153266784,54.7671595142445 -130.741094710924,54.8185451983181 -130.743025470057,54.9660362133392 -130.687783687023,54.7616034528696 -130.577500820198,54.8574294814757 -130.588607500443,54.7935448207198 -130.361386873815,54.9077118520726 -130.103073100881,55.2274770859674 -129.992235346908,55.2813822850679 -130.145588531923,55.5410827804645 -130.176414642352,55.7540945766287 -130.176414642935,55.7541365380658 -130.016778867682,55.9088876333029 -130.090297948784,56.1177520762836 -130.415891262238,56.1285540043625 -130.4636519955,56.2349444356491 -130.628905377559,56.2582721135475 -130.776152935708,56.365766108773 -131.05670022424,56.3977027398631 -131.074613949113,56.404973833375 -131.559476014298,56.6018977381094 -131.825838856788,56.596609968128 -131.863077410462,56.7993988358277 -132.104748626929,56.8663312886794 -132.029189648689,57.0360613881056 -132.338641933596,57.0879948891874 -132.228348190178,57.2043854032423 -132.363616524798,57.3427512006483 -133.138683114325,58.1355052355878 -133.171048403061,58.1564024746048 -133.36284284141,58.2802295161744 -133.431726284404,58.4588465909242 -133.828692257681,58.72578943349 -134.247322305508,58.8566295232279 -134.334593994792,58.9656607746833 -134.463191460983,59.1263423768783 -134.568204634564,59.1302303298755 -134.689857898817,59.2430057559041 -134.953748774754,59.2796634610668 -134.977219328446,59.3489913196536 -134.990984023358,59.3896633545353 -135.093498782177,59.4266123149411 -135.022939901321,59.4707717996103 -135.016295777664,59.5671728987803 -135.475441013568,59.8016131035917 -135.724887415548,59.7445303048924 -136.345727332791,59.6024571115741 -136.235738083604,59.5255080235504 -136.465487356768,59.4693774502392 -136.464644290639,59.2890793693772 -136.48764146439,59.2651414114248 -136.585774848831,59.1629442147388 -136.810786536833,59.1648781936228 -137.467432086905,58.9057221041175 -137.59264851127,59.2382530122083 -138.617535247197,59.7738592247734 -138.691994847808,59.9066259646792 -139.190602985604,60.088577403015 -139.069786821278,60.3519106988025 -139.678416008967,60.340234263451 -139.981175300005,60.187447543304 -140.452638339038,60.3093672718473 -140.523190558165,60.2218651470663 -140.997156001225,60.3067910803334 -140.997384898733,60.3068292096332 -140.9989122007,61.8945413646725 -141.002434696908,65.8400896453574 -141.004723298928,68.4279151682059 -141.005660000708,69.6421178479071 -141.005660054685,69.6421941494167 -141.308508849567,69.690915242124 -141.223482726229,69.6723129541163 -141.262940481944,69.6342572443014 -141.390999396873,69.6409265677094 -141.733781846539,69.775376516245 -142.271869100894,69.848437819028 -142.59550303389,70.0040058794748 -143.28334909463,70.1181529041699 -143.297226611948,70.0417650546672 -143.351374419714,70.1087065079648 -143.777962651497,70.0997576111421 -144.067797268631,70.078983836275 -144.026684208822,70.0461921309344 -144.071935092264,69.9842381704767 -144.116960880923,70.0642423510304 -144.970585790948,69.9686710645029 -145.610610756659,70.0647780224321 -145.842334173811,70.1703248895754 -147.692718680802,70.2088996362636 -147.861627347452,70.3097296297568 -148.225819398389,70.3588869535158 -148.5080501403,70.3111025083206 -148.610273870989,70.3983395352289 -149.497860633081,70.5224866335161 -149.891211839655,70.5147096692296 -150.406769425655,70.4091151139595 -150.372026620749,70.4857944334787 -150.783174336724,70.501895326016 -151.200682373447,70.4343755922789 -151.175949595517,70.3752007889311 -151.223434155667,70.370759102962 -151.969284739825,70.4432335360395 -151.769616151248,70.4987983506634 -151.869017761123,70.5126967595781 -151.744024642706,70.5596379842346 -152.626007780726,70.552398020968 -152.075734774532,70.5801986512998 -152.497116638279,70.6435141514856 -152.510768227234,70.6935034074429 -152.218820221629,70.8107476401635 -152.43856610095,70.8696291630003 -152.743570744621,70.8815709360742 -152.665255121422,70.856852202534 -152.704675599734,70.8101726258035 -152.813581486565,70.8862998754055 -153.225833323108,70.928224115358 -153.918350223885,70.8887805712559 -154.197785594756,70.7759936984677 -154.808937289101,70.8776399320848 -154.657816158098,70.9170891747174 -154.605861549042,71.0143220996766 -155.003416303882,71.1166302754546 -155.020061871138,71.0187557924905 -155.095626178,71.0162676012733 -155.043154972335,71.1309733291761 -155.104806867176,71.1484896874106 -155.098416547665,71.0840345419312 -155.290653808329,71.0851439877854 -155.196179617947,70.9890279604275 -155.390649819624,71.0031985705146 -155.538682998327,70.9353992810117 -155.586701416711,70.839296087562 -155.897862446572,70.827357706288 -155.904779715577,70.7667935280225 -155.97698363289,70.7554086466204 -155.986163211433,70.8981897390427 -156.185905347499,70.9179013999896 -155.739227458931,70.9995911222166 -155.550403076765,71.1173508216909 -155.647916214362,71.1854052383941 -155.949285999619,71.2193058684179 -156.112887679407,71.1715111749348 -156.046516394757,71.2093093686372 -156.104842049165,71.2412459026805 -156.450429420198,71.2631977200623 -156.604859516191,71.3495767225857 -156.379581349744,71.3723459699897 -156.485694400001,71.4062353532712 -156.819884507406,71.2998439493377 -157.278741542101,71.0484374781428 -157.883886562967,70.855896491142 -158.511804547629,70.8484055225624 -158.342330031307,70.817020707034 -158.684558004233,70.7850606362618 -159.080935755644,70.8131144628078 -159.002863057983,70.7717333860629 -159.28124324675,70.7561613759444 -159.22065153977,70.6872671403236 -159.448456253376,70.7792138080213 -159.151250301507,70.8195062260266 -159.372601948199,70.8433812641851 -159.165422422068,70.8803293300863 -159.671512028802,70.7975342513034 -160.121176350152,70.604459835988 -159.941735264203,70.6322387987858 -159.733354947947,70.4928046445493 -159.288948712844,70.5300483049591 -159.677474486079,70.4663385653533 -159.817552164174,70.4950150496284 -159.890038016111,70.3911425060827 -159.773067099661,70.1916740678326 -159.944720780534,70.3636286740524 -160.132216169229,70.3178005323508 -159.923659721887,70.483079431548 -160.202017902804,70.4711095559558 -159.923124669538,70.5380740989334 -159.940900953165,70.5928087898511 -160.153715245688,70.6041812181133 -160.979187665469,70.3238837430333 -160.952509305412,70.289429020032 -161.616647732875,70.2549933462936 -161.703611199213,70.192475572727 -162.124125734446,70.1549781213213 -162.008672104119,70.1924326557067 -161.786011341545,70.2214812719788 -161.898898001357,70.2558119049773 -161.713053075455,70.2702654509241 -161.955819123057,70.3030222649161 -162.965996220551,69.7777171308877 -163.029340432513,69.7279840400027 -162.944311598629,69.6921422055064 -163.14848731547,69.6018606098417 -163.068463274222,69.5674362017848 -163.123421742913,69.3840902946859 -163.273711383295,69.2932346877846 -163.187333330638,69.4182399221777 -163.563939763235,69.1443452503092 -164.32779116985,68.9298763286564 -166.235010188035,68.8742810818968 -166.201384380437,68.6959334731385 -166.228862705966,68.5717843322166 -166.369652054535,68.4384315371569 -166.314958875026,68.3987130638853 -166.830795430101,68.3500887639276 -166.290774089908,68.2914877128256 -165.922125938821,68.1300995949213 -165.364345329511,68.0384502500519 -165.287453127133,68.013679439299 -164.709865423311,67.8276306400944 -164.022903697848,67.5462514378527 -163.825364804985,67.3540229613532 -163.724744086595,67.1101264345733 -162.570866422574,67.0082179740804 -162.379205716413,67.162948038495 -162.33171920958,67.1490632816262 -162.455020849002,66.9882156480547 -162.299201905027,67.0026685070435 -162.300338359452,67.0682214691147 -162.237252423427,67.0065605968933 -161.87059056378,67.0512766368782 -161.519779273364,66.9865525982117 -161.803101442714,66.899070147154 -161.900587916144,66.7276658508876 -161.509423316888,66.533223963712 -161.252175794063,66.5482244018648 -161.143058547956,66.646845617712 -160.841360014732,66.6621247760609 -160.544990511938,66.5862921501679 -160.243021527644,66.6435210713741 -160.324133827121,66.6024107500147 -160.212460528904,66.5237978147196 -160.233292042291,66.3990837318227 -160.825243848046,66.3776636662334 -161.188882504675,66.5379406869041 -161.575248550639,66.4465497698448 -162.078064891665,66.6573740140031 -162.017532983974,66.7762752096829 -162.326967822522,66.9565549707677 -162.483368243038,66.9554385956664 -162.634175502752,66.8620956907683 -162.50391768729,66.7373704214385 -162.226660792759,66.7098777879464 -161.908889249811,66.5346041595837 -161.875246406787,66.4368235672248 -161.964680770585,66.3320976733448 -161.912733198035,66.2737622600538 -161.859115274984,66.2812705543953 -161.912469642065,66.3657146679245 -161.724119114883,66.4037737102799 -161.12938575545,66.3390538984389 -161.004972397821,66.2510107806911 -161.067169548589,66.1320953929197 -161.178554771955,66.1168195592756 -161.110472747436,66.1340632209611 -161.089951455798,66.2409994675292 -161.533306771184,66.2671017911169 -161.784662174653,66.0779302745026 -161.725763139689,66.0798847355501 -161.841022369825,66.0123762583709 -161.819106958783,65.9743202145317 -162.154654855389,66.0768103047635 -162.667167184634,65.9967980821213 -162.760224888464,66.1065266000829 -163.659125509688,66.0698442485925 -163.833571407683,66.1115000863937 -163.924675827194,66.2073435104058 -164.190246195612,66.1903871851598 -163.857173915847,66.2762405458659 -163.896916647977,66.3918002644392 -163.75748704699,66.5173713450736 -163.940815454602,66.5801455403949 -163.627760207836,66.5665362934503 -163.936621240652,66.6077265867305 -164.356385629336,66.5940265602447 -164.399507625099,66.5886547571376 -164.720280120565,66.5487323991711 -165.036099581348,66.3934497068404 -165.163914831425,66.4426128043321 -165.769199906905,66.3170488599045 -165.879146743545,66.2217682512115 -165.503613034373,66.1442726939437 -165.809430693031,66.1023196542532 -166.269744905172,66.1784253346552 -166.717496665643,66.0614562164868 -166.796378730793,65.9803519034601 -166.967770183703,65.972567007919 -166.87553964833,65.9336722397271 -167.048880086976,65.8753330638621 -167.35638581219,65.8867416084715 -167.574432868243,65.795882697104 -167.520558325044,65.729503911859 -167.820009598595,65.7172766919645 -168.044468397191,65.6339393442803 -168.034737884617,65.6883706248357 -167.84915959275,65.7606133668335 -168.124431940435,65.6736433077164 -168.067504530249,65.579493044352 -167.459919804786,65.418078455472 -166.629617280485,65.3633803841433 -166.054064725808,65.2511748374589 -166.376548389171,65.2683811362611 -166.487111618295,65.2339383119977 -166.467666552838,65.1853230526257 -166.545727571163,65.1311506313997 -166.687118303051,65.1158723375492 -166.926288874932,65.1450432298493 -166.858525678542,65.2830956002842 -166.961299804006,65.2097568742482 -166.921831709077,65.1308445994655 -166.7004420196,64.9922584742082 -166.389879198323,64.8905961323627 -166.492626707689,64.7342045775168 -166.239555912154,64.5953201813304 -165.031230833568,64.4431039957143 -164.76985730063,64.4745127817353 -164.922898307521,64.4567325418489 -164.930956929916,64.5331191600661 -164.892627858084,64.4850539776753 -164.667902409601,64.5222905226501 -164.72621893355,64.4842336399143 -164.360088149756,64.5789666182623 -163.566205696598,64.5656390411616 -163.178409373869,64.4067532494104 -163.039813776722,64.5153662552039 -163.390642041058,64.5923137088889 -163.157027775966,64.6559144969642 -163.053148111811,64.551193856603 -162.829792557313,64.4950871737036 -162.872303089195,64.4573044554495 -162.780647472204,64.3361938504371 -162.634219114342,64.3867663256485 -162.578957927831,64.5201049115281 -162.116745192736,64.7151129311906 -161.890367664551,64.7106765685019 -161.717861085005,64.7876176880861 -161.803708732124,64.821231576543 -161.550378624726,64.7448356215443 -161.377588763895,64.7873520304165 -161.197322318621,64.9343001245528 -160.992851544901,64.9379048745032 -161.158167193538,64.9226277975203 -160.784237176078,64.7157025586849 -160.82005359384,64.6148531413727 -161.085041870117,64.5495736539961 -161.004773522896,64.5215267284232 -161.402863614838,64.5340184744693 -161.540884660164,64.3856755455374 -161.196146256275,64.4148451063664 -161.253122387503,64.3920614493081 -160.963908335204,64.23705723654 -160.943322605701,64.067053304256 -160.774996013091,63.8542813723546 -160.788870091555,63.7401106020972 -161.154124810184,63.5117640424884 -162.157183462979,63.425080499019 -162.016926528706,63.4809181406135 -162.314404291311,63.5403637706865 -162.275536472848,63.4886843315758 -162.618589626534,63.270582943221 -162.682750159309,63.2297873577239 -163.063844348813,63.0592267591378 -163.344118130336,63.0211689103926 -163.541358158858,63.1053354252946 -163.80551615622,62.9828317837653 -163.542732163212,63.1219983002693 -163.664405424513,63.1111696615313 -163.634103094497,63.1425580550469 -163.727736186373,63.2139459812552 -164.14721335406,63.2595048353859 -164.383022810676,63.2197671295211 -164.590232105296,63.1328248381903 -164.316630993268,63.0106029483316 -164.711072054192,63.0142131598764 -164.880213279511,62.8347568861368 -164.766624119603,62.7886461303061 -164.889943380609,62.7805875451643 -164.794929376261,62.6108725134766 -164.48158838506,62.7450408757708 -164.857394583844,62.5644772097645 -164.793520287693,62.5403158955948 -164.835721145313,62.4808670435066 -164.636049158562,62.5105943668111 -164.680204128676,62.4642069664149 -164.576015154411,62.4244823987194 -164.754354205867,62.371142501804 -164.610744322152,62.4308753293946 -164.853511922844,62.4705823642496 -164.869904389072,62.5344782474273 -165.08324973359,62.5289209698671 -165.705716462815,62.1128041493008 -165.758778373867,61.9919605151816 -165.591807823504,61.850299198507 -166.100962949819,61.8152870680091 -166.00207820638,61.7263975023978 -165.764863681812,61.6877873499975 -166.139583558096,61.6339025833318 -166.164858999094,61.713066050201 -166.200126830561,61.5880649141168 -166.130110379656,61.4966733252918 -165.893180807874,61.5538942669146 -165.795402010725,61.5188993667325 -165.77983361165,61.4566828273615 -165.923994530034,61.4127872061197 -165.870920146754,61.3264012743009 -165.611214257849,61.280018185188 -165.64984598049,61.236965497711 -165.601745182151,61.1122511931789 -165.375369666424,61.0694763303264 -165.343697931293,61.1564124226045 -165.40983068472,61.2075277911469 -165.224257314548,61.2739118601202 -165.289840371332,61.3330759916334 -165.162901144922,61.4310980300113 -164.718443656801,61.6247573719369 -164.847615655754,61.4936433189985 -165.15290599402,61.4161368572946 -165.157055466112,61.358359866418 -165.259291727062,61.3275297756185 -165.202894312212,61.3230822474369 -165.210097154275,61.2628114631884 -165.37232516251,61.2000286586147 -165.153453777898,61.1553005565385 -165.085096336351,61.2130854087809 -165.140944081154,61.2558618009692 -165.06483272744,61.2105833219074 -165.187326936505,61.1228071785489 -165.048439437497,61.0568916208342 -164.995647599745,61.1119760267926 -164.767896969102,61.1103155125245 -165.192871886297,60.9597531730246 -165.110565059716,60.9225569496261 -165.07424859671,60.9061427127989 -164.990022768122,60.9348339588457 -164.938343200375,60.9524393274619 -164.870976580056,60.9469544438694 -164.639288416719,60.9280888466627 -164.559818808553,60.8500411267745 -163.960091115681,60.8547780661213 -163.679543441808,60.9911680892823 -163.758186260635,60.9331065650752 -163.560091826547,60.8878389749158 -163.931220897812,60.8514449018976 -163.410944450434,60.7497858290327 -163.471461733857,60.7506246110248 -163.453697030097,60.6778394031996 -163.801752052696,60.5806142387469 -163.806764049117,60.7439433073368 -163.947331988722,60.7800494837044 -164.431486477628,60.5525429587347 -164.220647905353,60.6881022253774 -164.271799002803,60.7830992846855 -164.658173653634,60.8192025899417 -164.69983094827,60.8466982886337 -164.645391085253,60.9097553901638 -164.841492573628,60.8661441668259 -164.939272561548,60.9266977060696 -164.872313502606,60.8425310236634 -165.033714451763,60.784759655869 -165.006763232977,60.7003109599568 -165.427583525104,60.5544745099766 -165.250887228003,60.4964246208568 -164.985912947372,60.5433696750612 -165.027871168689,60.4653134153673 -165.146457812405,60.4447516184619 -165.078405077892,60.3908727048524 -164.77731726895,60.2905990696946 -164.650650277534,60.3269909906036 -164.663977793575,60.2592109393254 -164.427008523946,60.0905999358277 -164.113954784651,60.0017211890513 -164.22088721234,59.9450478607126 -164.110318707835,59.8347714876634 -163.366445849479,59.8189419280352 -162.816730979116,59.9347749053035 -162.753957281201,60.0020064793683 -162.511461550551,59.999505071439 -162.451713306386,60.1867259781643 -162.702266889887,60.260341661936 -162.558680320138,60.2564512687932 -162.60754168599,60.3275656771574 -162.423123890546,60.3761744812543 -162.442290876367,60.4256212540744 -162.270359992283,60.6120116986623 -162.12671403156,60.6492369503414 -162.162027301326,60.734794119445 -162.085912055504,60.6578433423369 -161.881718318846,60.7014627008903 -162.224215651641,60.5809064919512 -162.226714982077,60.5056260984554 -162.474513570136,60.2970102569875 -162.335044056392,60.2086692928946 -162.352559135282,60.1400645901276 -162.271443303682,60.1661733845831 -162.287284487017,60.2381196130613 -162.153676990213,60.2447813425049 -162.253682896918,60.1970044098747 -162.199786446445,60.1436744619258 -162.238388964912,60.0597798671927 -161.707506703828,59.4958853579321 -161.960588954752,59.3792111463057 -161.988049768588,59.2430992003208 -162.001388499591,59.3064322123546 -162.051834723767,59.2715496909202 -161.994462599361,59.1433746207894 -161.867522698748,59.060323156935 -161.855021766726,59.1133762929031 -161.568055385322,59.102827255699 -161.857245772622,59.0280973607437 -161.790573224394,58.9683720926518 -161.772791932609,58.782264125094 -161.657795664346,58.7997592139068 -161.893609429912,58.6519811349219 -162.17360984368,58.6489244576845 -161.766586616578,58.5982743359903 -161.75108494486,58.6430943044085 -161.712753303332,58.6125383333076 -161.765272176137,58.5516995163179 -161.349468993896,58.6650323643257 -161.382490679071,58.7036527879563 -161.333785152503,58.7332480932238 clampToGround -172.282642546092,60.3017596593185 -172.211808221282,60.316204875602 -172.390441016854,60.3928679156909 -172.847101990595,60.4839652430026 -172.919346731,60.6028543719093 -173.04685088018,60.5370151919399 -173.051029558487,60.4933969080509 -172.601782006627,60.3239737143493 -172.282642546092,60.3017596593185 clampToGround -166.111439828761,60.4094701923102 -166.398665903988,60.3400243984304 -166.498123499017,60.3780709776481 -166.810311289524,60.2794576915016 -166.84143544507,60.2039038791359 -167.453133884145,60.2066788672344 -167.318112198797,60.0708487760817 -167.128929292756,59.9963962534805 -166.104757036993,59.7572425019707 -166.118919817195,59.8105716573949 -166.267815168744,59.8430790842252 -165.61446894417,59.9014123587901 -165.542848138141,59.9786315042928 -165.727850407447,60.065580817836 -165.675056652553,60.0966866662253 -165.732830243117,60.1650296963098 -165.683703756673,60.2939210660045 -166.066483978932,60.3275313579641 -166.111439828761,60.4094701923102 clampToGround -164.178091402927,54.603270997621 -163.601959088346,54.6099352379761 -163.43838539692,54.6574383835051 -163.370852896965,54.7535535436431 -163.050602984856,54.6674425084057 -163.147018537937,54.7652157933741 -163.36197296569,54.7754956428998 -163.531996342121,55.045514546807 -163.770614294094,55.0552237012459 -164.137822791485,54.9649533186511 -164.221436864885,54.8866229773527 -164.490015256965,54.9155065870599 -164.706139301228,54.6674315593203 -164.953642102217,54.5863095660578 -164.855307710372,54.4243657690961 -164.647263067171,54.3899305443965 -164.388378042911,54.4418686709101 -164.178091402927,54.603270997621 clampToGround -166.645219344046,53.5227419042544 -166.665820621025,53.5924680707072 -166.592700000167,53.5344165169026 -166.540213650459,53.6269111248818 -166.279117480897,53.6777499336702 -166.333594474453,53.7780194934209 -166.373841186087,53.7144229393544 -166.417176046642,53.7555359837067 -166.485803072549,53.6888628054882 -166.572714324989,53.709421882911 -166.490200645502,53.7716311101511 -166.539118186291,53.7819062132675 -166.216945166038,53.9274617985556 -166.266407760674,53.908014834948 -166.266410352278,53.9732868625415 -166.370790122255,53.9441198424631 -166.375514279585,54.0013433143627 -166.45804324334,53.8843995619921 -166.601616839153,53.8274713387543 -166.639401183119,53.918010330724 -166.592988957257,53.9652332845629 -166.752505025875,54.0082995250664 -167.16275140807,53.8527514813355 -167.031908976724,53.7508013086076 -166.708269394922,53.7166312270129 -166.827438556642,53.6996858085774 -166.803267702595,53.6246880539486 -166.902450167445,53.7071921802858 -167.031906139022,53.7010778641257 -167.06553686635,53.6649653853783 -166.99796392085,53.6146788991605 -167.161883196575,53.5924583162256 -166.964120558706,53.5252292023674 -167.184096530186,53.5188386147913 -167.162732206163,53.4652310485495 -167.304952222225,53.469386166693 -167.326071744867,53.4046583379918 -167.478546905675,53.4346668217079 -167.485228139008,53.3716032751956 -167.693324181004,53.3838297493527 -167.844705227807,53.3032517050091 -167.666947527379,53.2365820132873 -167.50075883473,53.2557524931209 -167.14356568794,53.4157821216489 -166.887459704763,53.4766226296513 -166.754708870895,53.4455208405156 -166.79105953231,53.5627419533506 -166.667708117587,53.4810764724158 -166.711318988549,53.5463545080555 -166.645219344046,53.5227419042544 clampToGround -166.221353590988,53.7038670268488 -166.091950914115,53.838582093354 -166.295237063513,53.7922020429164 -166.221353590988,53.7038670268488 clampToGround -167.797253013127,53.4946538567842 -168.007523477049,53.5627120027018 -168.353939273597,53.4746486015871 -168.430644994273,53.3321403605258 -168.360903481553,53.2587999987857 -168.623432287093,53.2712942239251 -168.795959122905,53.1465255981845 -168.770404081785,53.0668018455063 -168.882379232022,52.9373238815457 -169.109577418591,52.8181231444897 -168.472312004377,53.0459813460606 -168.287531521535,53.2351869694025 -167.850843433793,53.3799196417051 -167.797253013127,53.4946538567842 clampToGround -174.161329564352,52.4173465495761 -174.448532942333,52.3117757493222 -174.234619962323,52.2417876137923 -174.551313477007,52.1756651591731 -174.499368319093,52.1392730972652 -174.579630620407,52.0995416658609 -174.906888865781,52.1103733142569 -175.024350680111,52.0206351056977 -175.338269544757,52.0128409429971 -174.722148470263,52.0009213587217 -174.704053619483,52.0495316507539 -174.487641711105,52.0337075891309 -174.523535983743,52.0892664372186 -174.416045351001,52.0362134075994 -174.377077745685,52.0967649619891 -174.434361749071,52.1059411985406 -174.100971365385,52.1026192836313 -174.196532097681,52.2217757888947 -174.06545658121,52.2223361325722 -173.991825554761,52.3201261245271 -174.161329564352,52.4173465495761 clampToGround -176.941084144749,51.58303266917 -176.828880061621,51.7127571182365 -176.80054534901,51.6027616434207 -176.50913716743,51.7519446337105 -176.432198194148,51.7288916531697 -176.428853207589,51.8350038304907 -176.644714643839,51.8558373729491 -176.548588214125,51.9086069184368 -176.558365467237,51.9822217718073 -176.774177292602,51.9438835749084 -176.703036371825,51.8513940493333 -176.781649967396,51.8233284222627 -176.704950850264,51.7819488934334 -176.90775033863,51.8049815558199 -176.81802202772,51.7685915080144 -176.974723222411,51.6563599262222 -176.941084144749,51.58303266917 clampToGround -177.910314852892,51.5904752954479 -177.799758165034,51.7874482254509 -177.621987815149,51.8507980324001 -177.836720859072,51.830775770348 -177.948676873884,51.9177288521087 -178.217598362366,51.8752203024868 -177.957791024222,51.7632712434191 -178.103365061432,51.6632589976864 -177.910314852892,51.5904752954479 clampToGround -171.086945737084,63.431856060433 -170.859425829076,63.4610308912222 -170.239896450231,63.2816032134783 -169.980209408864,63.1419868776933 -169.807940259649,63.1243792330727 -169.656273367952,62.9432742913594 -169.32793382688,63.1821787502079 -168.85259065308,63.1544119515347 -168.692896091647,63.3021915417681 -169.179314089792,63.2980215630981 -170.086003347132,63.484942545381 -170.034399159545,63.5357720440057 -170.068799574734,63.5946634399018 -170.302739504128,63.6932683461877 -170.654413587459,63.6768770732034 -170.91723822281,63.5704749460102 -171.328094629021,63.6329635223434 -171.491400520964,63.5957339193976 -171.547252137932,63.6137913618281 -171.511699513821,63.644074144151 -171.405583835479,63.6421242323055 -171.637259441321,63.6935021952506 -171.681458732656,63.7921281104651 -171.739231322516,63.7887922470365 -171.743067518046,63.6665666609663 -171.853626683584,63.50767023031 -171.733920088359,63.3696018328806 -171.451643060199,63.3135104295428 -171.086945737084,63.431856060433 clampToGround -146.098975435796,60.3922217464441 -146.582871711614,60.4819437005604 -146.72619700343,60.3741503248771 -146.488146622944,60.3669390883601 -146.679533099071,60.2872162096262 -146.604255056572,60.2374977564608 -146.098975435796,60.3922217464441 clampToGround -146.939832810504,60.2858229675231 -147.100356897737,60.2702597192698 -147.01098950104,60.3419328800713 -147.195544669344,60.3527127132998 -147.194998285425,60.2449363025279 -147.698932462331,59.998238098762 -147.669518563288,59.9696421838658 -147.802841413459,59.9207286473767 -147.74309966167,59.8932473711633 -147.912320410482,59.7901783714493 -147.471865010115,59.8679943519137 -147.482391033304,59.9457652379755 -147.354015157706,59.974650830779 -147.367591626069,60.0260343344061 -147.240862729524,60.1285426220118 -146.939832810504,60.2858229675231 clampToGround -152.09321930733,58.3595622923936 -152.349651908204,58.42067094369 -152.401326751095,58.3151113676927 -152.528560208508,58.4128994516293 -152.499106717963,58.4620674751432 -152.660222888777,58.4765153273738 -152.694131998042,58.4217940259965 -152.886646268354,58.40679710194 -152.765246889149,58.3609633745851 -152.762196842929,58.2573461953387 -153.01497633051,58.3029033891128 -153.108024530252,58.2637421959406 -152.906919833977,58.1645579744275 -153.183316807584,58.2159594395233 -153.233588133808,58.168458272326 -152.789154474044,57.9917682947861 -152.774714666422,58.0715024038826 -152.628558681113,58.0778847599668 -152.561621560459,58.2070538088212 -152.544962572967,58.0845418422226 -152.276595530102,58.1270458940323 -152.369647245639,58.1962174010661 -152.301313966041,58.1867725190098 -152.321883041595,58.2401125435039 -152.249365374023,58.2667794628279 -152.193822971476,58.1737168446606 -152.082424400617,58.1556536633958 -151.964615099064,58.2803878924463 -151.997120091597,58.3467767998767 -152.148252357122,58.2317715057387 -152.09321930733,58.3595622923936 clampToGround -133.957575208106,57.2999306224556 -133.865044260443,57.3535430899502 -133.883659310324,57.4152037032697 -133.997003573255,57.4077030325642 -133.972832785889,57.4438132059959 -134.100063600429,57.463542418998 -134.043695992172,57.4749257045984 -134.081447329487,57.5010488811349 -133.842001299067,57.4602092692886 -133.938402776506,57.6207637999747 -134.076167554834,57.6449334200249 -134.045344599571,57.6832638054914 -134.238687661874,57.8585502171943 -134.287579179307,57.8268805599159 -134.320085300446,57.9879908251895 -134.225353387768,57.974655325656 -134.321765037636,58.0282670179866 -134.263442785345,58.0279929756026 -134.311482378999,58.0916001544724 -134.157877156027,57.9941038157857 -134.233686754406,58.0263224677297 -133.961997380694,57.6840954506611 -133.792284314077,57.5977071056083 -133.877550939366,57.6724301802958 -133.89370299145,57.7968814357716 -134.179548731905,58.0832706323707 -134.170914309207,58.1593839914105 -134.687603911476,58.1624308447263 -134.805685382384,58.3232754526311 -134.958465128962,58.4074349335664 -134.947080132696,58.2816006838805 -134.881769380662,58.2541042282356 -134.914301082702,58.2049317077546 -134.790697082353,58.1043764412874 -134.730117514791,58.1810463868189 -134.805405439918,58.0438214095012 -134.662594352631,57.6071637849037 -134.575094292963,57.505495352616 -134.357859751532,57.5460510439591 -134.574269688607,57.489382091108 -134.470349504382,57.393274254956 -134.306461608469,57.3885481901683 -134.342838724527,57.3279942587899 -134.55760262103,57.3913290945105 -134.45423266739,57.3121574803351 -134.583416871363,57.2704935569177 -134.513710948128,57.2185443306901 -134.635937658008,57.2154927423764 -134.580636527385,57.1488262554466 -134.614235652727,57.0091002773006 -134.361998589183,57.0799386200839 -134.083949258277,57.2541004899156 -134.176451166759,57.3840975295037 -133.957575208106,57.2999306224556 clampToGround -134.517615393878,58.3377167502683 -134.684859712071,58.3027160402146 -134.609812412179,58.237437904568 -134.261496532951,58.194662482636 -134.517615393878,58.3377167502683 clampToGround -135.887790019534,57.9876824539146 -135.889331207095,57.9882430923176 -135.236212858121,57.7796493127647 -135.012335588828,57.776600267358 -134.932075089584,57.8066000013056 -135.206500034818,57.9418740205317 -134.919014995813,57.8393759635417 -134.971782736525,57.884930765569 -134.907636351669,57.9288225682191 -134.943165148215,58.0354884497242 -135.4009750495,58.1390954919813 -135.649597129609,57.94464407268 -135.794325162033,57.98158060065 -135.624033073476,58.0093735808823 -135.782393411932,58.0457546612297 -135.605691580464,58.0435393225676 -135.484289639407,58.1552080978682 -135.796830557982,58.2771475053625 -135.967636201305,58.1596378528532 -136.110984291937,58.2188002395108 -136.182119004846,58.1774107225691 -136.10347341886,58.0568425538623 -136.195972322399,58.0804538025948 -136.277403970115,58.2185155932428 -136.356820128045,58.2123990302342 -136.272389453395,58.1043396175859 -136.434066033051,58.1073845387818 -136.03307863316,57.8429310463068 -136.03268191772,57.8426716988325 -136.033109150469,57.8428890842789 -136.033200700432,57.8429272205319 -136.328220829736,57.9907208806461 -136.409571703536,57.8334729109361 -136.416300816942,57.8204538078362 -136.229612994502,57.7837895264157 -136.090418506153,57.6823979921437 -136.12041269733,57.6168392873428 -135.953475811742,57.6160229049503 -136.067643439514,57.5954556677553 -135.781246849774,57.435464274054 -136.012363357593,57.5115707907486 -135.841787219458,57.387967670077 -135.689838145018,57.36241620095 -135.548754104396,57.4590843195056 -135.557639337521,57.5385363918569 -135.658474437208,57.5510317464404 -135.57235134096,57.5882496156094 -135.805428946777,57.6393615053637 -135.704866827443,57.6738115431952 -135.805980468833,57.7629735233055 -134.990080642635,57.4502057541453 -134.813441652987,57.4810400866218 -134.917057769523,57.7529884536511 -135.358714614183,57.7201980945745 -135.317878474532,57.7546539201374 -135.361765050058,57.7968742744678 -135.887790019534,57.9876824539146 clampToGround -153.392819106123,57.1578150625529 -153.391170767535,57.2064314591353 -152.958362818028,57.2530915629434 -153.175313931231,57.2994862801629 -153.164205488345,57.3478215097467 -152.882211445405,57.3464260512358 -152.840561469611,57.2680901886602 -152.636131502789,57.3169779722067 -152.605271069444,57.3791982816532 -152.806662878321,57.4678164159662 -153.045573136149,57.4306041756503 -152.912502640705,57.4831028238115 -152.958891001931,57.5200573093257 -152.347467689563,57.4233725014462 -152.153561812383,57.6036635935361 -152.437464170093,57.6039444927587 -152.400805617759,57.6850608771707 -152.490505713086,57.6478409937506 -152.448292455169,57.7217309629085 -152.553037029926,57.6978411493456 -152.328554767562,57.8134062911078 -152.621331654067,57.927871962996 -152.622462543378,57.8556448591787 -152.853869887682,57.8348096724795 -152.878595074408,57.7261858090174 -152.913904236528,57.8287000634449 -152.81916240733,57.9162077894716 -153.278079373008,58.0045596220204 -153.050572070951,57.8306516807021 -153.241955697199,57.8956661240209 -153.178085376612,57.703420074273 -153.21528625835,57.7875988573807 -153.474187509253,57.8417682749792 -153.317541094234,57.7250855112453 -153.500326749315,57.7670427602638 -153.437007068276,57.6992621357783 -153.528411518411,57.7156570294804 -153.507884215038,57.6253633459748 -153.643955782997,57.8892778626483 -153.930628240722,57.8103910352917 -153.908972766982,57.7070514419504 -153.583414253509,57.6117656896339 -153.882578113507,57.6423280764322 -153.683969758275,57.5439876013445 -153.853680824701,57.5667719048222 -153.810354333225,57.3998115924684 -153.630341204806,57.2686845023703 -153.888450770344,57.4042583245669 -153.950638769381,57.5412125247074 -154.110069105169,57.5378795347469 -153.978684337287,57.5634302022874 -153.998396328922,57.6345471718585 -154.218708248182,57.6676118739352 -154.350634759544,57.6445602786002 -154.448969719914,57.5790065670673 -154.400933151543,57.5637231142094 -154.519284391994,57.5778941429306 -154.514835023176,57.514284345739 -154.550658594089,57.5437295848112 -154.730113883423,57.4215049203949 -154.707047934222,57.3348240788941 -154.809272715575,57.3389920635722 -154.755970360023,57.3000986106446 -154.803445837976,57.2853800893029 -154.609528562857,57.2598123939076 -154.529534664763,57.1470105342916 -154.532311757881,56.9897688397956 -154.32950219126,56.9264276977374 -154.30008016783,56.8480867643653 -154.238681036045,56.8817013332706 -154.294251443901,56.8619803181055 -154.297029874472,56.9069791491293 -154.163438203307,56.9561385530694 -154.103417429726,57.1155956345009 -154.268951525716,57.1161626593883 -154.386759559577,57.0447689816948 -154.465931144176,57.0644946605757 -154.468707260557,57.1261689271771 -153.967058894421,57.1158684043447 -154.111749493078,57.0433557293103 -154.098691977589,56.96251930086 -153.806771410885,57.1506098413568 -153.740073526689,57.1300487421621 -153.965662315076,56.9880731527465 -153.775662001517,56.9894807020229 -154.151738603834,56.745306297826 -153.982008831554,56.7378049963996 -153.696434400411,56.8658703808307 -153.776740001015,56.8894815558602 -153.683134178599,56.9683662463033 -153.611709562203,56.9333697807066 -153.555612176043,56.9775359323464 -153.673398711418,57.0089331435034 -153.600323689505,57.0472645321852 -153.758996313479,57.0453212757416 -153.502258936786,57.0630938927511 -153.547005002935,57.1706020458441 -153.463926171818,57.1105958833284 -153.392819106123,57.1578150625529 clampToGround -134.655390098823,56.1626619351619 -134.618144450901,56.7207529678331 -134.836198024378,57.2477098984344 -134.985066734427,57.2943739834285 -134.94786612865,57.3204912317811 -135.00090756226,57.3424242205839 -134.9076129914,57.3293810392095 -135.003993227617,57.3993782463481 -135.202063988419,57.4243667978265 -135.167614227587,57.4782546176544 -135.399577332086,57.4385318202647 -135.282362988664,57.5035357212537 -135.314560394456,57.5324206439867 -135.515980155977,57.5068669289605 -135.526763730078,57.4355063346253 -135.608993614038,57.3915869239882 -135.471227782637,57.3504807491584 -135.674301743083,57.3460283249175 -135.533996348433,57.2293590299236 -135.339528178816,57.2479751403745 -135.407892185235,57.149359849847 -135.265949930375,57.1635212027263 -135.368705279018,57.1376856869653 -135.366754331069,57.0799148721586 -135.166222094001,57.0343593277128 -135.353146706062,56.9657378769552 -135.290095163457,56.8915651144635 -135.37063531312,56.8326799981141 -135.267052599399,56.7829503719904 -135.121759003476,56.8271083988409 -135.190087704398,56.6746065599045 -134.993985703814,56.7559900047218 -135.124259832988,56.6643189364556 -135.117028453893,56.5982112952072 -134.982325180215,56.7165374337488 -134.938986731009,56.7095946249906 -134.967306048374,56.6243134079946 -134.849536248518,56.6851559009392 -135.04843148949,56.5279410141079 -134.655390098823,56.1626619351619 clampToGround -135.702071692228,57.3165835014888 -135.848737784871,57.3162950258433 -135.819830984012,57.1724005616461 -135.710673710214,57.1610181132825 -135.825941290601,57.082967442042 -135.839567402382,56.9876851370985 -135.630940067482,57.0040823307003 -135.547885999691,57.1290749917056 -135.626468170496,57.2313048151095 -135.557617899884,57.2288021287352 -135.702071692228,57.3165835014888 clampToGround -133.053390351289,56.9771470252489 -133.295335943079,57.0035431619298 -133.263967207313,56.921597824843 -133.327012360802,56.9966000463423 -133.874777973322,57.0857684838486 -134.019794733821,57.0143800263991 -133.737848765029,56.8927133973155 -133.892286836687,56.8966050732056 -133.758142051845,56.8032670452989 -133.674524574542,56.8588218466323 -133.708694348619,56.6774253399436 -133.636774891098,56.5935236773375 -133.691770840668,56.5688039494711 -133.64678569721,56.5632491498276 -133.649284380709,56.4432426531333 -133.577317500634,56.4332418446354 -133.420628593758,56.4543573216183 -133.430916371492,56.5015848315803 -133.165638033928,56.4532574359425 -133.083664796878,56.5235347698413 -133.16869155086,56.6018765654634 -133.099228250559,56.6154861711796 -133.240900578007,56.6313190633306 -133.213402182837,56.7085454496965 -133.307307907679,56.7310369094801 -133.353662566436,56.8382616228604 -133.023660190709,56.6015876868868 -132.933113453353,56.6296367201649 -132.991442138356,56.8068656402117 -132.929514313144,56.8599327856703 -133.053390351289,56.9771470252489 clampToGround -133.965053500888,56.0812846387448 -133.949532594346,56.1993380950511 -133.889538107293,56.2229461297938 -133.985913933344,56.2685074429714 -133.975081289917,56.3557286565983 -133.855639708513,56.2787890098363 -133.911217854205,56.4249043104871 -133.827331752229,56.4354582647604 -133.919269867011,56.5007461483316 -133.84536471409,56.5715815218498 -133.922319509601,56.6138061315077 -133.740357493661,56.5601902175525 -133.693143667676,56.5993612801202 -133.777599003147,56.6840875181719 -133.71950858496,56.7663242930003 -133.870588709108,56.8079873300928 -133.863944657176,56.7232586211923 -134.026461131389,56.6468690221748 -133.924249122697,56.7146518323975 -133.927565910471,56.8015933528073 -133.995314810369,56.8740975598163 -134.265369544411,56.9365981258875 -134.108653970181,56.8427125267546 -134.323113030551,56.8935440263588 -134.275073004361,56.7952062642112 -134.401488715667,56.8524345106823 -134.39507837938,56.721027401109 -134.319237656557,56.6571429239125 -134.21922545052,56.6893657463709 -134.25313312881,56.6124166787286 -134.087853561236,56.6415889087553 -134.308129021304,56.5599142169461 -134.136176047703,56.4865748914152 -134.070057576607,56.5549111134315 -134.030355630414,56.4779613707181 -134.051178620872,56.3590608770302 -134.109756002829,56.404893993373 -134.162003776525,56.3668357027912 -134.181166136765,56.4362848660458 -134.282583452658,56.3557286752141 -134.282858184556,56.2910033805683 -134.161737695775,56.3071164027922 -134.266469746057,56.2557221446709 -134.19396891759,56.1554373413353 -134.222558799251,56.0662779394883 -134.10838665314,55.9987746709272 -134.098392346662,56.1340528688434 -134.187285962481,56.1762738974224 -134.100896606441,56.1743295187135 -134.054234375292,56.3121155888509 -134.037872866435,56.1051697427204 -133.965053500888,56.0812846387448 clampToGround -132.803653271279,56.7860406631428 -132.965623026439,56.7960384089399 -132.883371065593,56.6365860382543 -132.958107536577,56.5938039676218 -132.941722525003,56.5093749050577 -132.77478501171,56.4943701849766 -132.720307664077,56.5110406000369 -132.751711841031,56.5524291958232 -132.532549684115,56.5774334872854 -132.803653271279,56.7860406631428 clampToGround -132.337804742749,56.4796479168462 -132.351410271693,56.2779733052681 -132.303891788458,56.2318522430039 -132.057810279652,56.1110312765749 -131.923350207348,56.1968613620864 -132.005320495176,56.3363150729862 -132.162510728277,56.3527105670894 -132.337804742749,56.4796479168462 clampToGround -132.704770567567,56.4557558769931 -132.94199544313,56.4474232469974 -133.058116273752,56.3418659700593 -132.846704640205,56.2313025143395 -132.678911140644,56.265194266468 -132.615862536329,56.3960369708995 -132.704770567567,56.4557558769931 clampToGround -132.473629816734,55.4956310263753 -132.679719350735,55.4524186259704 -132.511407662042,55.5443485685237 -132.564164976718,55.5674055165835 -132.54167897639,55.6226744305411 -132.170838611909,55.4462957108967 -132.145846340898,55.4801851665153 -132.292514962732,55.5362972126054 -132.381658844606,55.6690745363953 -132.43750143704,55.6229514120484 -132.494455201912,55.8137888383967 -132.727249633493,55.9896261855393 -133.07977593669,56.0521307665152 -133.139777228451,56.1165798525176 -133.02560945371,56.1763023638105 -133.062263586948,56.2415816619357 -133.19004887376,56.3299235454034 -133.315357554346,56.268800793561 -133.325614659178,56.3260292056157 -133.61228727968,56.347965527419 -133.567024527926,56.2965818491482 -133.634501861361,56.2762929803267 -133.618961621055,56.2071307850696 -133.260081564169,56.1521335393027 -133.243074688433,55.9040773845479 -133.138127044496,55.8860245400076 -133.23754189305,55.7465804895886 -133.37615160236,55.7226835545753 -133.354775293627,55.6096422847126 -133.255343820772,55.5732672002313 -132.910012881953,55.6276793420299 -133.070291462572,55.5738187129026 -133.129162418082,55.4890981409283 -132.978863011846,55.4471413353351 -133.066673173097,55.4268767626809 -132.996925024154,55.3754823729884 -132.849146903782,55.3513096666384 -133.195557926044,55.3843846854707 -133.262237187007,55.338542897477 -133.224168561559,55.2827062569501 -132.902215409303,55.2793661314588 -133.00445539989,55.2027070068706 -132.805813469614,55.2676990584202 -132.780003734642,55.1821456013337 -132.668314485378,55.1376954523282 -132.6108193845,55.1677005195065 -132.643042098791,55.2499234651439 -132.561385789951,55.1651892675163 -132.616375834907,55.0610278341928 -132.558333985001,55.121579846662 -132.460284625051,55.0432598989252 -132.574447864736,55.0368658603701 -132.533892510768,55.0157557734575 -132.599167402473,54.9682495266191 -132.532244803687,54.9324231053301 -132.454455006163,54.9849207048602 -132.468890169137,54.9021439129136 -132.380539086856,55.0160426535456 -132.38972563036,54.9238205404531 -132.267215000166,54.8390908310718 -132.354993457072,54.7990961593044 -132.216372992666,54.7935437432705 -132.290567059779,54.7143740502258 -132.005588168986,54.6902065830742 -132.00808092862,54.7793740618098 -131.951107308284,54.7879884436014 -132.053591791598,54.8896469689668 -131.973584427767,54.8946508448921 -132.012494945198,54.9677027506031 -131.964713272955,55.0254793599214 -132.220242594699,54.9921503362437 -132.074439530657,55.0388147632961 -132.09666166884,55.1032539199795 -131.998898502072,55.1004760308858 -131.970272255287,55.2260267816124 -132.012233665231,55.2724119598816 -132.089163684845,55.2007477996744 -132.240833958891,55.1926907080504 -132.24111473813,55.254356826834 -132.086939465791,55.262141472882 -132.155026728468,55.3629687977598 -132.254761054598,55.4099105863851 -132.470277519184,55.3843598204116 -132.261689745631,55.4421292901901 -132.473629816734,55.4956310263753 clampToGround -132.391971869653,56.335755916154 -132.517527648792,56.3382491407653 -132.605023777277,56.2310204946758 -132.696154225093,56.2218573999292 -132.697527893107,56.1074122964528 -132.636704224386,56.0488018182385 -132.381659614072,56.0260228574646 -132.427256528788,55.9557383376468 -132.340003253304,55.9135191057283 -132.181674158052,55.9657578776832 -132.129461406089,55.9279855386802 -132.20165657928,56.0851990051386 -132.108892738952,56.1154780279142 -132.351103317239,56.2163019256758 -132.480018741747,56.1896282759591 -132.396698920251,56.2215729603744 -132.391971869653,56.335755916154 clampToGround -133.287273107465,56.1285193821479 -133.619502154891,56.1304525817666 -133.48671406159,56.0857359491733 -133.681447788994,56.0660107829683 -133.791729083627,55.9207261405941 -133.620043513236,55.919061854864 -133.478932635933,56.0223882122985 -133.319218200846,55.9935160016486 -133.287273107465,56.1285193821479 clampToGround -131.606390952927,55.3196460287417 -131.523626715678,55.2927065288402 -131.468332286741,55.3554813742488 -131.52170762436,55.4760277540251 -131.445019503467,55.528250482074 -131.463631605047,55.3277029912542 -131.334456177303,55.4196456731968 -131.350571344767,55.6446424118107 -131.271713839534,55.4371488045966 -131.460852754343,55.2810343109492 -131.294748784321,55.2735377996958 -131.2275245322,55.40575586235 -131.217511188806,55.3052092167966 -131.30835800415,55.2346510159284 -131.144480086509,55.1966008747307 -131.049755471481,55.2671577795751 -131.028368522801,55.4054840755865 -130.968096037624,55.3910425559494 -130.936975175112,55.6418758266987 -131.233359128882,55.9535154492386 -131.573925118381,55.9060133913691 -131.436689960392,55.8399076996699 -131.685586778521,55.8329621887154 -131.482526533927,55.7868537297797 -131.711127678552,55.731844891488 -131.514751885925,55.7260181183599 -131.693639807928,55.6762961121643 -131.705845849057,55.6193511063245 -131.616399342546,55.5971281281129 -131.645025074528,55.544914787606 -131.825290358462,55.4549105391298 -131.606390952927,55.3196460287417 clampToGround -131.821140484584,55.4124099903551 -131.866945741921,55.3679685469814 -131.824461228231,55.2113141461293 -131.726683471567,55.1343743438445 -131.761688966383,55.247423370327 -131.61832179154,55.2832614283638 -131.821140484584,55.4124099903551 clampToGround -131.468907428577,55.2354796515061 -131.585300708148,55.2515918113963 -131.518646304163,55.1282585208495 -131.594176648462,55.1063159605734 -131.59972753219,54.9949305405507 -131.521695860182,55.0327112599271 -131.537505218119,55.0907610434156 -131.476956765629,55.0004939338339 -131.356659978778,55.0352158428158 -131.375005668955,55.1965953318301 -131.468907428577,55.2354796515061 clampToGround -133.103853177495,55.2452029919145 -133.215824492689,55.1696372711329 -133.118282231733,55.1015854493073 -133.215270801953,55.0946363447211 -133.150270403124,54.94379737397 -132.90693534583,54.836308829345 -132.955276675812,54.7918753410748 -132.841932044642,54.6890880966602 -132.670272461523,54.6638099069197 -132.758897152011,54.7393706689813 -132.716661409724,54.7646540373054 -132.756667768137,54.8218741407807 -133.081358213392,55.0854740462953 -132.957493060247,55.061865465254 -133.103853177495,55.2452029919145 libkml-1.3.0/examples/kml/region.kml000066400000000000000000000006241263603257100173650ustar00rootroot00000000000000 has a Region -1 256 45.0 11.25 50.625 5.625 libkml-1.3.0/examples/kml/sky.kml000066400000000000000000000003441263603257100167070ustar00rootroot00000000000000 M101 30.817158,54.363992 libkml-1.3.0/examples/kml/snippets.kml000066400000000000000000000011231263603257100177420ustar00rootroot00000000000000 link snippet with maxlines 1 no maxlines maxlines 1 default maxlines bold inlined bold in cdata]]> libkml-1.3.0/examples/kml/styles.kml000066400000000000000000000036311263603257100174260ustar00rootroot00000000000000 normal http://example.com/style.kml highlight libkml-1.3.0/examples/kml/time.kml000066400000000000000000002652611263603257100170520ustar00rootroot00000000000000 TimeStamp'ed Points #check-hide-children 2007-01-14T21:05:02Z #paddle-a -122.536226,37.86047,0 2007-01-14T21:05:20Z #hiker-icon -122.536422,37.860303,0 2007-01-14T21:05:43Z #hiker-icon -122.536688,37.860072,0 2007-01-14T21:06:04Z #hiker-icon -122.536923,37.859855,0 2007-01-14T21:06:24Z #hiker-icon -122.537116,37.85961000000001,0 2007-01-14T21:06:46Z #hiker-icon -122.537298,37.859336,0 2007-01-14T21:07:07Z #hiker-icon -122.537469,37.85907,0 2007-01-14T21:07:27Z #hiker-icon -122.537635,37.858822,0 2007-01-14T21:07:51Z #hiker-icon -122.537848,37.858526,0 2007-01-14T21:08:11Z #hiker-icon -122.538044,37.858288,0 2007-01-14T21:08:33Z #hiker-icon -122.538307,37.858064,0 2007-01-14T21:08:56Z #hiker-icon -122.538601,37.857837,0 2007-01-14T21:09:19Z #hiker-icon -122.53887,37.857604,0 2007-01-14T21:09:45Z #hiker-icon -122.539052,37.857262,0 2007-01-14T21:10:10Z #hiker-icon -122.539133,37.856913,0 2007-01-14T21:10:36Z #hiker-icon -122.539231,37.856547,0 2007-01-14T21:11:03Z #hiker-icon -122.539359,37.856184,0 2007-01-14T21:11:20Z #hiker-icon -122.539416,37.855954,0 2007-01-14T21:11:40Z #hiker-icon -122.539435,37.855658,0 2007-01-14T21:11:59Z #hiker-icon -122.539483,37.855391,0 2007-01-14T21:12:18Z #hiker-icon -122.539592,37.855156,0 2007-01-14T21:12:37Z #hiker-icon -122.539703,37.854897,0 2007-01-14T21:12:57Z #hiker-icon -122.539746,37.854626,0 2007-01-14T21:13:24Z #hiker-icon -122.539664,37.854252,0 2007-01-14T21:13:49Z #hiker-icon -122.539495,37.853932,0 2007-01-14T21:14:14Z #hiker-icon -122.539286,37.85362400000001,0 2007-01-14T21:14:37Z #hiker-icon -122.539098,37.853329,0 2007-01-14T21:14:57Z #hiker-icon -122.538985,37.853048,0 2007-01-14T21:15:20Z #hiker-icon -122.538914,37.852771,0 2007-01-14T21:15:41Z #hiker-icon -122.538819,37.852484,0 2007-01-14T21:16:03Z #hiker-icon -122.538684,37.852216,0 2007-01-14T21:16:20Z #hiker-icon -122.538614,37.852067,0 2007-01-14T21:16:38Z #hiker-icon -122.538589,37.851856,0 2007-01-14T21:17:02Z #hiker-icon -122.538577,37.851537,0 2007-01-14T21:17:22Z #hiker-icon -122.538563,37.851251,0 2007-01-14T21:17:38Z #hiker-icon -122.538614,37.851032,0 2007-01-14T21:17:57Z #hiker-icon -122.53872,37.850791,0 2007-01-14T21:18:09Z #hiker-icon -122.538852,37.850631,0 2007-01-14T21:18:12Z #hiker-icon -122.538882,37.850669,0 2007-01-14T21:18:16Z #hiker-icon -122.538923,37.850617,0 2007-01-14T21:18:38Z #hiker-icon -122.53916,37.850351,0 2007-01-14T21:18:53Z #hiker-icon -122.539314,37.85019,0 2007-01-14T21:19:14Z #hiker-icon -122.539546,37.84999,0 2007-01-14T21:19:34Z #hiker-icon -122.539812,37.849796,0 2007-01-14T21:19:39Z #hiker-icon -122.539881,37.849748,0 2007-01-14T21:19:57Z #hiker-icon -122.540122,37.849583,0 2007-01-14T21:20:18Z #hiker-icon -122.540437,37.849407,0 2007-01-14T21:20:38Z #hiker-icon -122.540743,37.84926,0 2007-01-14T21:20:59Z #hiker-icon -122.541108,37.849177,0 2007-01-14T21:21:21Z #hiker-icon -122.541501,37.849144,0 2007-01-14T21:21:40Z #hiker-icon -122.541836,37.849157,0 2007-01-14T21:22:02Z #hiker-icon -122.542233,37.84917,0 2007-01-14T21:22:21Z #hiker-icon -122.542547,37.849217,0 2007-01-14T21:22:42Z #hiker-icon -122.542872,37.849313,0 2007-01-14T21:22:59Z #hiker-icon -122.543172,37.849358,0 2007-01-14T21:23:18Z #hiker-icon -122.543491,37.849341,0 2007-01-14T21:23:36Z #hiker-icon -122.543791,37.84930800000001,0 2007-01-14T21:23:53Z #hiker-icon -122.544073,37.849332,0 2007-01-14T21:24:12Z #hiker-icon -122.544374,37.849453,0 2007-01-14T21:24:30Z #hiker-icon -122.544676,37.849545,0 2007-01-14T21:24:52Z #hiker-icon -122.545054,37.849568,0 2007-01-14T21:24:58Z #hiker-icon -122.545153,37.849569,0 2007-01-14T21:25:02Z #hiker-icon -122.545232,37.849542,0 2007-01-14T21:25:19Z #hiker-icon -122.54547,37.849385,0 2007-01-14T21:25:33Z #hiker-icon -122.5456,37.84923,0 2007-01-14T21:25:49Z #hiker-icon -122.545782,37.84905,0 2007-01-14T21:25:52Z #hiker-icon -122.545823,37.849013,0 2007-01-14T21:26:01Z #hiker-icon -122.545975,37.84898500000001,0 2007-01-14T21:26:21Z #hiker-icon -122.545996,37.849,0 2007-01-14T21:26:42Z #hiker-icon -122.546052,37.84898500000001,0 2007-01-14T21:26:48Z #hiker-icon -122.546132,37.848965,0 2007-01-14T21:26:57Z #hiker-icon -122.546257,37.848953,0 2007-01-14T21:26:58Z #hiker-icon -122.54627,37.84895,0 2007-01-14T21:27:14Z #hiker-icon -122.546491,37.848907,0 2007-01-14T21:27:30Z #hiker-icon -122.546732,37.848859,0 2007-01-14T21:27:31Z #hiker-icon -122.546749,37.848855,0 2007-01-14T21:27:36Z #hiker-icon -122.546824,37.848835,0 2007-01-14T21:27:45Z #hiker-icon -122.546964,37.848786,0 2007-01-14T21:27:58Z #hiker-icon -122.547167,37.848765,0 2007-01-14T21:28:16Z #hiker-icon -122.547391,37.848648,0 2007-01-14T21:28:29Z #hiker-icon -122.547531,37.848596,0 2007-01-14T21:28:42Z #hiker-icon -122.547665,37.84852900000001,0 2007-01-14T21:28:57Z #hiker-icon -122.54786,37.848475,0 2007-01-14T21:29:08Z #hiker-icon -122.547943,37.848462,0 2007-01-14T21:29:26Z #hiker-icon -122.548193,37.848387,0 2007-01-14T21:29:45Z #hiker-icon -122.548498,37.84833800000001,0 2007-01-14T21:29:53Z #hiker-icon -122.548631,37.84831100000001,0 2007-01-14T21:30:02Z #hiker-icon -122.548775,37.848284,0 2007-01-14T21:30:10Z #hiker-icon -122.548902,37.848247,0 2007-01-14T21:30:23Z #hiker-icon -122.549108,37.848208,0 2007-01-14T21:30:43Z #hiker-icon -122.549407,37.84816800000001,0 2007-01-14T21:31:01Z #hiker-icon -122.549669,37.848124,0 2007-01-14T21:31:10Z #hiker-icon -122.549801,37.848113,0 2007-01-14T21:31:23Z #hiker-icon -122.549947,37.848072,0 2007-01-14T21:31:24Z #hiker-icon -122.549959,37.848071,0 2007-01-14T21:31:32Z #hiker-icon -122.55005,37.848054,0 2007-01-14T21:31:34Z #hiker-icon -122.55007,37.848042,0 2007-01-14T21:31:44Z #hiker-icon -122.550211,37.848038,0 2007-01-14T21:31:45Z #hiker-icon -122.550222,37.84804,0 2007-01-14T21:31:52Z #hiker-icon -122.550298,37.848048,0 2007-01-14T21:31:54Z #hiker-icon -122.55032,37.848064,0 2007-01-14T21:31:59Z #hiker-icon -122.550377,37.848071,0 2007-01-14T21:32:15Z #hiker-icon -122.550508,37.848079,0 2007-01-14T21:32:25Z #hiker-icon -122.550612,37.848093,0 2007-01-14T21:32:42Z #hiker-icon -122.550798,37.848142,0 2007-01-14T21:32:58Z #hiker-icon -122.550954,37.848198,0 2007-01-14T21:33:12Z #hiker-icon -122.551029,37.848263,0 2007-01-14T21:33:17Z #hiker-icon -122.551052,37.848294,0 2007-01-14T21:33:35Z #hiker-icon -122.551051,37.848377,0 2007-01-14T21:34:05Z #hiker-icon -122.551036,37.848391,0 2007-01-14T21:34:08Z #hiker-icon -122.551035,37.848404,0 2007-01-14T21:34:22Z #hiker-icon -122.551027,37.848572,0 2007-01-14T21:34:40Z #hiker-icon -122.55111,37.848737,0 2007-01-14T21:34:45Z #hiker-icon -122.551174,37.848753,0 2007-01-14T21:34:58Z #hiker-icon -122.551349,37.848748,0 2007-01-14T21:35:02Z #hiker-icon -122.551393,37.848749,0 2007-01-14T21:35:14Z #hiker-icon -122.551523,37.848725,0 2007-01-14T21:35:27Z #hiker-icon -122.551605,37.84869,0 2007-01-14T21:35:28Z #hiker-icon -122.551618,37.84869,0 2007-01-14T21:35:35Z #hiker-icon -122.551706,37.848706,0 2007-01-14T21:35:39Z #hiker-icon -122.551749,37.848723,0 2007-01-14T21:35:57Z #hiker-icon -122.551912,37.84882,0 2007-01-14T21:36:21Z #hiker-icon -122.552057,37.84893700000001,0 2007-01-14T21:36:39Z #hiker-icon -122.552246,37.849049,0 2007-01-14T21:36:56Z #hiker-icon -122.552456,37.849139,0 2007-01-14T21:37:11Z #hiker-icon -122.552625,37.849204,0 2007-01-14T21:37:24Z #hiker-icon -122.55277,37.84926100000001,0 2007-01-14T21:37:36Z #hiker-icon -122.552912,37.849336,0 2007-01-14T21:37:53Z #hiker-icon -122.553067,37.849473,0 2007-01-14T21:38:10Z #hiker-icon -122.553201,37.849628,0 2007-01-14T21:38:27Z #hiker-icon -122.553378,37.849791,0 2007-01-14T21:38:44Z #hiker-icon -122.553569,37.849901,0 2007-01-14T21:39:02Z #hiker-icon -122.553731,37.850078,0 2007-01-14T21:39:13Z #hiker-icon -122.553813,37.850175,0 2007-01-14T21:39:32Z #hiker-icon -122.553869,37.850179,0 2007-01-14T21:39:44Z #hiker-icon -122.554075,37.850236,0 2007-01-14T21:39:49Z #hiker-icon -122.554163,37.850251,0 2007-01-14T21:40:03Z #hiker-icon -122.55437,37.850251,0 2007-01-14T21:40:11Z #hiker-icon -122.554482,37.850234,0 2007-01-14T21:40:12Z #hiker-icon -122.554496,37.850233,0 2007-01-14T21:40:15Z #hiker-icon -122.554546,37.850239,0 2007-01-14T21:40:33Z #hiker-icon -122.55478,37.850192,0 2007-01-14T21:40:45Z #hiker-icon -122.554946,37.850139,0 2007-01-14T21:41:02Z #hiker-icon -122.555195,37.850053,0 2007-01-14T21:41:19Z #hiker-icon -122.55542,37.849988,0 2007-01-14T21:41:40Z #hiker-icon -122.555722,37.84995500000001,0 2007-01-14T21:41:43Z #hiker-icon -122.555764,37.84995,0 2007-01-14T21:42:03Z #hiker-icon -122.556042,37.849935,0 2007-01-14T21:42:10Z #hiker-icon -122.556136,37.849933,0 2007-01-14T21:42:27Z #hiker-icon -122.556379,37.849946,0 2007-01-14T21:42:45Z #hiker-icon -122.556523,37.849952,0 2007-01-14T21:43:03Z #hiker-icon -122.5566,37.84995,0 2007-01-14T21:43:30Z #hiker-icon -122.556643,37.84995,0 2007-01-14T21:43:47Z #hiker-icon -122.556611,37.849908,0 2007-01-14T21:43:48Z #hiker-icon -122.556611,37.849909,0 2007-01-14T21:43:50Z #hiker-icon -122.55661,37.849909,0 2007-01-14T21:44:26Z #hiker-icon -122.55664,37.84993,0 2007-01-14T21:44:51Z #hiker-icon -122.556644,37.849926,0 2007-01-14T21:44:57Z #hiker-icon -122.556642,37.849932,0 2007-01-14T21:45:27Z #hiker-icon -122.556634,37.849933,0 2007-01-14T21:45:41Z #hiker-icon -122.556659,37.849917,0 2007-01-14T21:45:44Z #hiker-icon -122.556675,37.849894,0 2007-01-14T21:46:11Z #hiker-icon -122.556675,37.849894,0 2007-01-14T21:46:12Z #hiker-icon -122.556677,37.849896,0 2007-01-14T21:46:31Z #hiker-icon -122.556678,37.849898,0 2007-01-14T21:46:47Z #hiker-icon -122.556706,37.849886,0 2007-01-14T21:47:04Z #hiker-icon -122.556681,37.849887,0 2007-01-14T21:47:05Z #hiker-icon -122.556675,37.849887,0 2007-01-14T21:47:19Z #hiker-icon -122.556671,37.84993,0 2007-01-14T21:47:45Z #hiker-icon -122.556667,37.849926,0 2007-01-14T21:47:50Z #hiker-icon -122.556635,37.849954,0 2007-01-14T21:47:53Z #hiker-icon -122.556615,37.84995500000001,0 2007-01-14T21:48:07Z #hiker-icon -122.556443,37.849953,0 2007-01-14T21:48:21Z #hiker-icon -122.556403,37.850071,0 2007-01-14T21:48:41Z #hiker-icon -122.556335,37.850306,0 2007-01-14T21:49:02Z #hiker-icon -122.556174,37.85055,0 2007-01-14T21:49:23Z #hiker-icon -122.555988,37.850788,0 2007-01-14T21:49:46Z #hiker-icon -122.555773,37.851024,0 2007-01-14T21:50:05Z #hiker-icon -122.555595,37.851226,0 2007-01-14T21:50:29Z #hiker-icon -122.555328,37.85144,0 2007-01-14T21:50:43Z #hiker-icon -122.55515,37.851534,0 2007-01-14T21:51:05Z #hiker-icon -122.554864,37.851674,0 2007-01-14T21:51:25Z #hiker-icon -122.554738,37.851895,0 2007-01-14T21:51:48Z #hiker-icon -122.554689,37.85218700000001,0 2007-01-14T21:52:00Z #hiker-icon -122.554663,37.852335,0 2007-01-14T21:52:18Z #hiker-icon -122.554635,37.852549,0 2007-01-14T21:52:36Z #hiker-icon -122.554578,37.852755,0 2007-01-14T21:52:58Z #hiker-icon -122.554504,37.853015,0 2007-01-14T21:53:16Z #hiker-icon -122.554472,37.853225,0 2007-01-14T21:53:17Z #hiker-icon -122.554471,37.853236,0 2007-01-14T21:53:35Z #hiker-icon -122.55445,37.853432,0 2007-01-14T21:53:51Z #hiker-icon -122.554382,37.853578,0 2007-01-14T21:53:57Z #hiker-icon -122.554324,37.853611,0 2007-01-14T21:53:58Z #hiker-icon -122.554314,37.853617,0 2007-01-14T21:54:14Z #hiker-icon -122.554121,37.853707,0 2007-01-14T21:54:33Z #hiker-icon -122.553918,37.853836,0 2007-01-14T21:54:47Z #hiker-icon -122.553819,37.853924,0 2007-01-14T21:55:06Z #hiker-icon -122.553632,37.85411,0 2007-01-14T21:55:29Z #hiker-icon -122.55343,37.854376,0 2007-01-14T21:55:52Z #hiker-icon -122.553314,37.854678,0 2007-01-14T21:56:13Z #hiker-icon -122.553247,37.854957,0 2007-01-14T21:56:37Z #hiker-icon -122.553165,37.855282,0 2007-01-14T21:57:00Z #hiker-icon -122.553062,37.855567,0 2007-01-14T21:57:16Z #hiker-icon -122.55298,37.855748,0 2007-01-14T21:57:20Z #hiker-icon -122.552959,37.855792,0 2007-01-14T21:57:36Z #hiker-icon -122.552895,37.855962,0 2007-01-14T21:57:42Z #hiker-icon -122.552879,37.85602,0 2007-01-14T21:58:02Z #hiker-icon -122.552839,37.856229,0 2007-01-14T21:58:16Z #hiker-icon -122.552831,37.856301,0 2007-01-14T21:58:29Z #hiker-icon -122.552816,37.856365,0 2007-01-14T21:59:03Z #hiker-icon -122.552829,37.85638,0 2007-01-14T21:59:26Z #hiker-icon -122.552854,37.856395,0 2007-01-14T21:59:27Z #hiker-icon -122.552854,37.856395,0 2007-01-14T21:59:45Z #hiker-icon -122.552859,37.856395,0 2007-01-14T22:00:00Z #hiker-icon -122.552875,37.85639700000001,0 2007-01-14T22:00:45Z #hiker-icon -122.552872,37.856428,0 2007-01-14T22:00:56Z #hiker-icon -122.552874,37.856505,0 2007-01-14T22:01:04Z #hiker-icon -122.552885,37.856595,0 2007-01-14T22:01:21Z #hiker-icon -122.552969,37.856779,0 2007-01-14T22:01:39Z #hiker-icon -122.553072,37.856989,0 2007-01-14T22:01:57Z #hiker-icon -122.553274,37.857177,0 2007-01-14T22:02:00Z #hiker-icon -122.553306,37.857201,0 2007-01-14T22:02:03Z #hiker-icon -122.553333,37.857225,0 2007-01-14T22:02:30Z #hiker-icon -122.553648,37.857481,0 2007-01-14T22:02:43Z #hiker-icon -122.553785,37.857599,0 2007-01-14T22:03:03Z #hiker-icon -122.553873,37.857817,0 2007-01-14T22:03:21Z #hiker-icon -122.553916,37.858027,0 2007-01-14T22:03:37Z #hiker-icon -122.55393,37.858198,0 2007-01-14T22:03:38Z #hiker-icon -122.55393,37.85821,0 2007-01-14T22:03:54Z #hiker-icon -122.55395,37.858388,0 2007-01-14T22:04:05Z #hiker-icon -122.553966,37.858512,0 2007-01-14T22:04:26Z #hiker-icon -122.553999,37.858743,0 2007-01-14T22:04:38Z #hiker-icon -122.554053,37.858876,0 2007-01-14T22:04:49Z #hiker-icon -122.554103,37.85900000000001,0 2007-01-14T22:05:11Z #hiker-icon -122.554156,37.859226,0 2007-01-14T22:05:24Z #hiker-icon -122.554124,37.859199,0 2007-01-14T22:05:47Z #hiker-icon -122.554149,37.859204,0 2007-01-14T22:05:57Z #hiker-icon -122.554159,37.859216,0 2007-01-14T22:06:26Z #hiker-icon -122.554168,37.859233,0 2007-01-14T22:06:40Z #hiker-icon -122.554143,37.859201,0 2007-01-14T22:06:53Z #hiker-icon -122.55409,37.859159,0 2007-01-14T22:06:57Z #hiker-icon -122.554045,37.859144,0 2007-01-14T22:07:17Z #hiker-icon -122.553865,37.859067,0 2007-01-14T22:07:28Z #hiker-icon -122.553739,37.859031,0 2007-01-14T22:07:29Z #hiker-icon -122.55373,37.859033,0 2007-01-14T22:07:33Z #hiker-icon -122.553671,37.859024,0 2007-01-14T22:07:50Z #hiker-icon -122.55342,37.858973,0 2007-01-14T22:08:07Z #hiker-icon -122.553163,37.858913,0 2007-01-14T22:08:20Z #hiker-icon -122.552953,37.858878,0 2007-01-14T22:08:33Z #hiker-icon -122.552763,37.858842,0 2007-01-14T22:08:49Z #hiker-icon -122.552562,37.858801,0 2007-01-14T22:09:03Z #hiker-icon -122.552393,37.858758,0 2007-01-14T22:09:24Z #hiker-icon -122.552332,37.858755,0 2007-01-14T22:09:33Z #hiker-icon -122.552329,37.858754,0 2007-01-14T22:09:47Z #hiker-icon -122.552151,37.858694,0 2007-01-14T22:10:00Z #hiker-icon -122.552005,37.858648,0 2007-01-14T22:10:13Z #hiker-icon -122.551841,37.858596,0 2007-01-14T22:10:25Z #hiker-icon -122.551712,37.85856,0 2007-01-14T22:10:26Z #hiker-icon -122.5517,37.858559,0 2007-01-14T22:10:43Z #hiker-icon -122.551566,37.858543,0 2007-01-14T22:10:54Z #hiker-icon -122.551447,37.858517,0 2007-01-14T22:11:08Z #hiker-icon -122.551297,37.858501,0 2007-01-14T22:11:23Z #hiker-icon -122.551116,37.85849,0 2007-01-14T22:11:29Z #hiker-icon -122.551026,37.85848,0 2007-01-14T22:11:43Z #hiker-icon -122.550852,37.858447,0 2007-01-14T22:11:56Z #hiker-icon -122.550686,37.858419,0 2007-01-14T22:12:11Z #hiker-icon -122.550492,37.858377,0 2007-01-14T22:12:28Z #hiker-icon -122.550278,37.858329,0 2007-01-14T22:12:38Z #hiker-icon -122.550155,37.858294,0 2007-01-14T22:12:52Z #hiker-icon -122.549964,37.85824,0 2007-01-14T22:13:01Z #hiker-icon -122.549842,37.858204,0 2007-01-14T22:13:07Z #hiker-icon -122.549751,37.858177,0 2007-01-14T22:13:31Z #hiker-icon -122.549378,37.858076,0 2007-01-14T22:13:46Z #hiker-icon -122.549129,37.858037,0 2007-01-14T22:14:02Z #hiker-icon -122.548878,37.858007,0 2007-01-14T22:14:24Z #hiker-icon -122.548516,37.857961,0 2007-01-14T22:14:40Z #hiker-icon -122.548255,37.857918,0 2007-01-14T22:15:05Z #hiker-icon -122.547869,37.857801,0 2007-01-14T22:15:11Z #hiker-icon -122.547771,37.85777,0 2007-01-14T22:15:31Z #hiker-icon -122.547492,37.857641,0 2007-01-14T22:15:50Z #hiker-icon -122.547241,37.857503,0 2007-01-14T22:16:07Z #hiker-icon -122.547007,37.857382,0 2007-01-14T22:16:27Z #hiker-icon -122.546804,37.857246,0 2007-01-14T22:16:35Z #hiker-icon -122.546788,37.857248,0 2007-01-14T22:16:49Z #hiker-icon -122.546641,37.857136,0 2007-01-14T22:17:11Z #hiker-icon -122.546387,37.856931,0 2007-01-14T22:17:26Z #hiker-icon -122.546223,37.856791,0 2007-01-14T22:17:41Z #hiker-icon -122.546094,37.856643,0 2007-01-14T22:18:02Z #hiker-icon -122.5459,37.856408,0 2007-01-14T22:18:23Z #hiker-icon -122.545686,37.856179,0 2007-01-14T22:18:46Z #hiker-icon -122.545384,37.85598900000001,0 2007-01-14T22:19:06Z #hiker-icon -122.545123,37.855809,0 2007-01-14T22:19:25Z #hiker-icon -122.544885,37.855619,0 2007-01-14T22:19:48Z #hiker-icon -122.544598,37.855384,0 2007-01-14T22:20:11Z #hiker-icon -122.544283,37.855176,0 2007-01-14T22:20:14Z #hiker-icon -122.544247,37.855155,0 2007-01-14T22:20:32Z #hiker-icon -122.544053,37.855089,0 2007-01-14T22:20:48Z #hiker-icon -122.54376,37.855111,0 2007-01-14T22:20:54Z #hiker-icon -122.543669,37.855075,0 2007-01-14T22:21:07Z #hiker-icon -122.543496,37.854991,0 2007-01-14T22:21:22Z #hiker-icon -122.54326,37.854948,0 2007-01-14T22:21:36Z #hiker-icon -122.543053,37.85498,0 2007-01-14T22:21:49Z #hiker-icon -122.542877,37.855009,0 2007-01-14T22:22:02Z #hiker-icon -122.542706,37.855053,0 2007-01-14T22:22:16Z #hiker-icon -122.542502,37.855106,0 2007-01-14T22:22:29Z #hiker-icon -122.542326,37.855157,0 2007-01-14T22:22:33Z #hiker-icon -122.542271,37.855174,0 2007-01-14T22:22:51Z #hiker-icon -122.542032,37.855274,0 2007-01-14T22:23:03Z #hiker-icon -122.541884,37.855366,0 2007-01-14T22:23:14Z #hiker-icon -122.541792,37.855462,0 2007-01-14T22:23:19Z #hiker-icon -122.541749,37.855511,0 2007-01-14T22:23:35Z #hiker-icon -122.541591,37.855648,0 2007-01-14T22:23:49Z #hiker-icon -122.541406,37.855657,0 2007-01-14T22:24:00Z #hiker-icon -122.541259,37.855652,0 2007-01-14T22:24:16Z #hiker-icon -122.54105,37.855661,0 2007-01-14T22:24:32Z #hiker-icon -122.54082,37.855726,0 2007-01-14T22:24:49Z #hiker-icon -122.540684,37.85588,0 2007-01-14T22:24:57Z #hiker-icon -122.540675,37.855979,0 2007-01-14T22:25:13Z #hiker-icon -122.540681,37.856168,0 2007-01-14T22:25:31Z #hiker-icon -122.540751,37.856381,0 2007-01-14T22:25:48Z #hiker-icon -122.540897,37.856542,0 2007-01-14T22:26:02Z #hiker-icon -122.541028,37.85665,0 2007-01-14T22:26:17Z #hiker-icon -122.541184,37.85674700000001,0 2007-01-14T22:26:29Z #hiker-icon -122.541284,37.856854,0 2007-01-14T22:26:33Z #hiker-icon -122.541262,37.856892,0 2007-01-14T22:26:54Z #hiker-icon -122.54111,37.85694800000001,0 2007-01-14T22:27:14Z #hiker-icon -122.540917,37.85694,0 2007-01-14T22:27:33Z #hiker-icon -122.540655,37.856934,0 2007-01-14T22:27:53Z #hiker-icon -122.540629,37.856914,0 2007-01-14T22:28:05Z #hiker-icon -122.540558,37.85690000000001,0 2007-01-14T22:28:09Z #hiker-icon -122.540558,37.85690000000001,0 2007-01-14T22:28:19Z #hiker-icon -122.540401,37.856811,0 2007-01-14T22:28:38Z #hiker-icon -122.540101,37.85667,0 2007-01-14T22:28:57Z #hiker-icon -122.539866,37.856554,0 2007-01-14T22:29:15Z #hiker-icon -122.539748,37.856432,0 2007-01-14T22:29:36Z #hiker-icon -122.539409,37.85629100000001,0 2007-01-14T22:29:49Z #hiker-icon -122.539304,37.85630200000001,0 2007-01-14T22:29:56Z #hiker-icon -122.539255,37.856381,0 2007-01-14T22:30:14Z #hiker-icon -122.539186,37.856594,0 2007-01-14T22:30:30Z #hiker-icon -122.539135,37.85677,0 2007-01-14T22:30:53Z #hiker-icon -122.539079,37.857076,0 2007-01-14T22:31:14Z #hiker-icon -122.538995,37.857336,0 2007-01-14T22:31:34Z #hiker-icon -122.538852,37.857571,0 2007-01-14T22:31:49Z #hiker-icon -122.538694,37.857713,0 2007-01-14T22:31:55Z #hiker-icon -122.538667,37.857763,0 2007-01-14T22:32:10Z #hiker-icon -122.538574,37.857842,0 2007-01-14T22:32:19Z #hiker-icon -122.538469,37.857902,0 2007-01-14T22:32:23Z #hiker-icon -122.538441,37.857931,0 2007-01-14T22:32:43Z #hiker-icon -122.538206,37.858103,0 2007-01-14T22:33:03Z #hiker-icon -122.537985,37.858287,0 2007-01-14T22:33:23Z #hiker-icon -122.53781,37.858496,0 2007-01-14T22:33:43Z #hiker-icon -122.537671,37.858732,0 2007-01-14T22:34:02Z #hiker-icon -122.537542,37.858959,0 2007-01-14T22:34:24Z #hiker-icon -122.537381,37.859224,0 2007-01-14T22:34:48Z #hiker-icon -122.537179,37.859489,0 2007-01-14T22:35:09Z #hiker-icon -122.536991,37.859723,0 2007-01-14T22:35:31Z #hiker-icon -122.536767,37.859953,0 2007-01-14T22:35:52Z #hiker-icon -122.536537,37.860164,0 2007-01-14T22:36:12Z #hiker-icon -122.53632,37.860365,0 2007-01-14T22:36:15Z #hiker-icon -122.536283,37.860388,0 2007-01-14T22:36:20Z #paddle-b -122.536248,37.860445,0 BMNG-12months Blue Marble - Jan 2004-01 2004-02 http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Jan.jpg 90 -90 180 -180 Blue Marble - Feb 2004-02 2004-03 http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Feb.jpg 90 -90 180 -180 Blue Marble - Mar 2004-03 2004-04 http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Mar.jpg 90 -90 180 -180 Blue Marble - Apr 2004-04 2004-05 http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Apr.jpg 90 -90 180 -180 Blue Marble - May 2004-05 2004-06 http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-May.jpg 90 -90 180 -180 Blue Marble - Jun 2004-06 2004-07 http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Jun.jpg 90 -90 180 -180 Blue Marble - Jul 2004-07 2004-08 http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Jul.jpg 90 -90 180 -180 Blue Marble - Aug 2004-08 2004-09 http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Aug.jpg 90 -90 180 -180 Blue Marble - Sep 2004-09 2004-10 http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Sep.jpg 90 -90 180 -180 Blue Marble - Oct 2004-10 2004-11 http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Oct.jpg 90 -90 180 -180 Blue Marble - Nov 2004-11 2004-12 http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Nov.jpg 90 -90 180 -180 Blue Marble - Dec 2004-12 2005-01 http://mw1.google.com/mw-earth-vectordb/kml-samples/bmng12/files/BMNG-Dec.jpg 90 -90 180 -180 libkml-1.3.0/examples/kml/unknown-elements.kml000066400000000000000000000050011263603257100214050ustar00rootroot00000000000000 preserve me foo 1,2,3 goo 60 some string hi yep nope we know name This complex element has character data followed by: a nested child element All of this should be preserved for serialization. foo bar text hi we know about this element we have no idea about this element another example of a known element does not belong here interposing inside the wrong parent. huh? libkml-1.3.0/examples/perl/000077500000000000000000000000001263603257100155525ustar00rootroot00000000000000libkml-1.3.0/examples/perl/helloplacemark.pl000077500000000000000000000064531263603257100211050ustar00rootroot00000000000000#!/usr/bin/env perl # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This program demonstrates use of the KML DOM Perl SWIG bindings for # creating and accessing simple elements and attributes such as # Feature's and and Object's id= as in . use lib "../../build/perl"; use kmldom; my $factory = kmldom::KmlFactory::GetFactory; print "Creating a Placemark...\n"; my $placemark = $factory->CreatePlacemark(); print "Get the Type()...\n"; printf("placemark->Type(): %s\n", $placemark->Type()); print "has_xxx() all return false...\n"; printf("placemark->has_id(): %d\n", $placemark->has_id()); printf("placemark->has_name(): %d\n", $placemark->has_name()); printf("placemark->has_visibility(): %d\n", $placemark->has_visibility()); printf("placemark->has_geometry(): %d\n", $placemark->has_geometry()); print "Set some fields...\n"; # Object std::string $placemark->set_id("pm123"); # Feature std::string $placemark->set_name("hi"); # Feature bool $placemark->set_visibility(false); # True by default. print "has_xxx() now return true...\n"; printf("placemark->has_id(): %d\n", $placemark->has_id()); printf("placemark->has_name(): %d\n", $placemark->has_name()); printf("placemark->has_id(): %d\n", $placemark->has_id()); print "Get some fields...\n"; printf("placemark->id(): %s\n", $placemark->id()); printf("placemark->name(): %s\n", $placemark->name()); printf("placemark->visibility(): %d\n", $placemark->visibility()); print "Clear fields...\n"; $placemark->clear_name(); $placemark->clear_id(); $placemark->clear_visibility(); printf("Placemark->has_id(): %d\n", $placemark->has_id()); printf("Placemark->has_name(): %d\n", $placemark->has_name()); printf("placemark->has_visibility(): %d\n", $placemark->has_visibility()); print "visibility is true by default...\n"; printf("placemark->visibility(): %d\n", $placemark->visibility()); # Perl automatically cleans up placemark. libkml-1.3.0/examples/perl/hellowalk.pl000077500000000000000000000072541263603257100201040ustar00rootroot00000000000000#!/usr/bin/env perl # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This program demonstrates use of the KML DOM Perl SWIG bindings for # walking the feature hierarchy of a KML file. use strict; use warnings; use lib "../../build/perl"; use kmldom; sub ReadKmlFile { my $filename = $_[0]; local $/; open(FILE, $filename) or die("error: can't open $filename"); my $data = ; close(FILE); return $data; } sub Indent { my $depth = $_[0]; while ($depth > 0) { print ' '; $depth -= 1; } } sub PrFeatureType { my $type = $_[0]; if ($type == $kmldom::Type_Placemark) { print("Placemark "); } else { print("some other Feature "); } } # This visits a feature. The type of feature is printed. If the feature # is a container such is visited recursively. sub VisitFeature { my $feature = $_[0]; my $depth = $_[1]; Indent($depth); PrFeatureType($feature->Type()); printf("id = %s\n", $feature->id()); my $container = kmldom::AsContainer($feature); if (defined $container) { WalkContainer($container, $depth+1); } } # This visits each feature in the given container ( or ). sub WalkContainer { my $container = $_[0]; my $depth = $_[1]; for (my $i = 0; $i < $container->feature_array_size(); $i++) { VisitFeature($container->feature_array_at($i), $depth); } } # The root feature of a KML file is the child feature of the # element or the root xml element if that is a Feature. # If element is neither nor a feature None is returned. sub GetRootFeature { my $kml = kmldom::AsKml($_[0]); if (defined $kml) { if ($kml->has_feature()) { return $kml->feature(); } else { return undef; } } my $feature = kmldom::AsFeature($_[0]); if (defined $feature) { return $feature; } return undef; } sub main { my $inputkml = $_[0]; my $kml = ReadKmlFile($inputkml); my $feature = GetRootFeature(kmldom::ParseKml(ReadKmlFile($inputkml))); if (defined $feature) { VisitFeature($feature, 0); # Perl deletes the returned feature from ParseKml which in turn deletes all # child elements. } else { # The file is a KML fragment. print "No root feature in $inputkml\n"; } } if ($#ARGV != 0) { printf("usage: input.kml\n"); exit; } main($ARGV[0]); libkml-1.3.0/examples/php/000077500000000000000000000000001263603257100153775ustar00rootroot00000000000000libkml-1.3.0/examples/php/README000066400000000000000000000024541263603257100162640ustar00rootroot00000000000000Support for PHP in SWIG is still under development. If you would like to use the SWIG-generated PHP5 wrapper file, you will first have to run our tweak_generated_kmldom.php script. This will copy the generated kmldom.php script from the build directory and apply two necessary fixes: - namespace issues - "empty" is a reserved keyword in PHP. SWIG will attempt to use this in its wrapping of the std::vector class. We rename it to _empty(). If you want to call it in your application, you must use $foo->_empty(); See the tweak script for more details. TODO: we may remove raw vectors from the API. PHP 5 (since 5.2.5 ) does not permit module extensions to be loaded from paths that contain directory names (see PHP bug 44037: http://bugs.php.net/bug.php?id=44037 ). This means that you can't use any path-munging hacks to execute extensions in local directories. To run these examples, you should copy the kmldom extension module to your PHP extension directory. You can discover what your extension directory is by executing this command in a terminal: php-config --extension-dir The extension module is built under the main project build directory: ../../build/php/kmldom Be sure the the extension is world-readable before you copy. (An alternative is to supply a custom extension directory via your php.ini.) libkml-1.3.0/examples/php/helloplacemark_module.php000077500000000000000000000111021263603257100224360ustar00rootroot00000000000000#!/usr/bin/env php and and Object's id= as in . // This example uses the SWIG'd kmldom extension module directly. Because // SWIG flattens the C++ object structure, you are required to know the // inheritance hierarchy. For example, to query a Placemark's visibility, // you have to know that a Placemark is a Feature and the correct function // call is Feature_has_visibility($placemark). // SWIG generates a wrapper that does a reasonable job of reflecting the // source C++ classes into a PHP5 class hierarchy. We recommend you use this // instead. To see an example of this alternate usage, see // helloplacemark_wrapper.php require 'load_kmldom.php'; // Loads the extension module. function main() { $factory = KmlFactory_GetFactory(); echo "Creating a Placemark...\n"; $placemark = KmlFactory_CreatePlacemark($factory); echo "Get the Type()...\n"; printf("Element_Type(placemark): %s\n", Element_Type($placemark)); echo "has_xxx() all return false...\n"; // A Placemark's id comes from Object: printf("Object_has_id(placemark): %d\n", Object_has_id($placemark)); // name and visibility are from Feature: printf("Feature_has_name(placemark): %d\n", Feature_has_name($placemark)); printf("Feature_has_visibility(placemark): %d\n", Feature_has_visibility($placemark)); // geometry is from Placemark: printf("Feature_has_geometry(): %d\n", Placemark_has_geometry($placemark)); echo "Set some fields...\n"; // Object std::string Object_set_id($placemark, "pm123"); // Feature std::string Feature_set_name($placemark, "hi"); // Feature bool Feature_set_visibility($placemark, false); // True by default. echo "has_xxx() now return true...\n"; printf("Object_has_id(placemark): %d\n", Object_has_id($placemark)); printf("Feature_has_name(placemark): %d\n", Feature_has_name($placemark)); printf("Feature_has_visibility(placemark): %d\n", Feature_has_visibility($placemark)); echo "Get some fields...\n"; printf("Object_id(placemark): %s\n", Object_id($placemark)); printf("Feature_name(placemark): %s\n", Feature_name($placemark)); printf("Feature_visibility(placemark): %d\n", Feature_visibility($placemark)); echo "Clear fields...\n"; Feature_clear_name($placemark); Object_clear_id($placemark); Feature_clear_visibility($placemark); printf("Object_has_id(placemark): %d\n", Object_has_id($placemark)); printf("Feature_has_name(placemark): %d\n", Feature_has_name($placemark)); printf("Feature_has_visibility(placemark): %d\n", Feature_has_visibility($placemark)); echo "visibility is true by default...\n"; printf("Feature_visibility(placemark): %d\n", Feature_visibility($placemark)); // PHP automatically cleans up placemark. } main(); ?> libkml-1.3.0/examples/php/helloplacemark_wrapper.php000077500000000000000000000105341263603257100226410ustar00rootroot00000000000000#!/usr/bin/env php and and Object's id= as in . // This example uses the SWIG-generated PHP5 wrapper. This has the benefit // of allowing access to the class hierarchy reflected from the source C++ // classes. For example, using the wrapper you can query a placemark's // visibility by calling $placemark->has_visibility(). If you're accessing // the raw extension module, SWIG's flattening of the object structure will // require you to know that Placemark inherits from Feature and thus you have // to call Feature_has_visibility($placemark). To see an example of this // alternate use, see helloplacemark_module.php if (!file_exists("kmldom.php")) { echo "Before you run the examples you first have to run the\n"; echo "tweak_generated_kmldom.php script. See README for more details\n"; exit(1); } require 'load_kmldom.php'; // Loads the extension module. require 'kmldom.php'; // Loads our tweaked SWIG PHP wrapper. function main() { $factory = KmlFactory::GetFactory(); // Returns an object. echo "Creating a Placemark...\n"; $placemark = $factory->CreatePlacemark(); echo "Get the Type()...\n"; printf("placemark->Type(): %s\n", $placemark->Type()); echo "has_xxx() all return false...\n"; printf("placemark->has_id(): %d\n", $placemark->has_id()); printf("placemark->has_name(): %d\n", $placemark->has_name()); printf("placemark->has_visibility(): %d\n", $placemark->has_visibility()); printf("placemark->has_geometry(): %d\n", $placemark->has_geometry()); echo "Set some fields...\n"; // Object std::string $placemark->set_id("pm123"); // Feature std::string $placemark->set_name("hi"); // Feature bool $placemark->set_visibility(false); // True by default. echo "has_xxx() now return true...\n"; printf("placemark->has_id(): %d\n", $placemark->has_id()); printf("placemark->has_name(): %d\n", $placemark->has_name()); printf("placemark->has_id(): %d\n", $placemark->has_id()); echo "Get some fields...\n"; printf("placemark->id(): %s\n", $placemark->id()); printf("placemark->name(): %s\n", $placemark->name()); printf("placemark->visibility(): %d\n", $placemark->visibility()); echo "Clear fields...\n"; $placemark->clear_name(); $placemark->clear_id(); $placemark->clear_visibility(); printf("Placemark->has_id(): %d\n", $placemark->has_id()); printf("Placemark->has_name(): %d\n", $placemark->has_name()); printf("placemark->has_visibility(): %d\n", $placemark->has_visibility()); echo "visibility is true by default...\n"; printf("placemark->visibility(): %d\n", $placemark->visibility()); // PHP automatically cleans up placemark. } main(); ?> libkml-1.3.0/examples/php/hellowalk.php000077500000000000000000000110701263603257100200740ustar00rootroot00000000000000#!/usr/bin/env php has_visibility(). If you're accessing // the raw extension module, SWIG's flattening of the object structure will // require you to know that Placemark inherits from Feature and thus you have // to call Feature_has_visibility($placemark). To see an example of this // alternate use, see helloplacemark_module.php if (!file_exists("kmldom.php")) { echo "Before you run the examples you first have to run the\n"; echo "tweak_generated_kmldom.php script. See README for more details\n"; exit(1); } require 'load_kmldom.php'; // Loads the extension module. require 'kmldom.php'; // Loads our tweaked SWIG PHP wrapper. function ReadKmlFile($filename) { $f = fopen($filename, "r"); $data = fread($f, filesize($filename)); fclose($f); return $data; } function Indent($depth) { while ($depth > 0) { print ' '; $depth -= 1; } } function PrFeatureType($type) { if ($type == kmldom::Type_Placemark) { print("Placemark "); } else { print("some other Feature "); } } // This visits a feature. The type of feature is printed. If the feature // is a container such is visited recursively. function VisitFeature($feature, $depth) { Indent($depth); PrFeatureType($feature->Type()); printf("id = %d\n", $feature->id()); $container = kmldom::AsContainer($feature); if ($container) { WalkContainer($container, $depth+1); } } // This visits each feature in the given container ( or ). function WalkContainer($container, $depth) { for ($i = 0; $i < $container->feature_array_size(); $i++) { VisitFeature($container->feature_array_at($i), $depth); } } // The root feature of a KML file is the child feature of the // element or the root xml element if that is a Feature. // If element is neither nor a feature None is returned. function GetRootFeature($element) { $kml = kmldom::AsKml($element); if ($kml) { if ($kml->has_feature()) { return $kml->feature(); } else { return NULL; } } $feature = kmldom::AsFeature($element); if ($feature) { return $feature; } return NULL; } function main($inputkml) { $feature = GetRootFeature(kmldom::ParseKml(ReadKmlFile($inputkml))); if ($feature) { VisitFeature($feature, 0); KmlFactory::GetFactory()->DeleteElement($feature); # PHP deletes the feature returned from ParseKml which in turn deletes # all child elements. } else { // The file is a KML fragment. echo "No root feature in $inputkml\n"; } } if ($argc != 2) { echo "usage: $argv[0] input.kml\n"; exit(1); } main($argv[1]); ?> libkml-1.3.0/examples/php/load_kmldom.php000066400000000000000000000040001263603257100203640ustar00rootroot00000000000000 libkml-1.3.0/examples/php/tweak_generated_kmldom.php000077500000000000000000000106541263603257100226150ustar00rootroot00000000000000#!/usr/bin/env php _cPtr=\$h;\n"; $lines[$i] .= " }\n"; } if (strstr($lines[$i], "function __construct")) { // We need to get the class name from the broken code and reconstruct // the correct calls. The broken code is of the form: // function __construct() { // $this->_cPtr=KmlFactory_CreateFoo($this->_cPtr); // } // We'll correct it to: // function CreateXXX() { // $r=KmlFactory_CreateFoo($this->_cPtr); // return is_resource($r) ? new Foo($r) : $r; // } if (strstr($lines[$i+1], "KmlFactory_Create")) { preg_match('/Create.*\(/', $lines[$i+1], $matches); if ($matches) { // Get the class name by stripping back the match from the search: $class_name = substr(substr($matches[0], 6), 0, -1); // Build up the correct function definition: $f = sprintf("\tfunction Create%s() {\n", $class_name); $f .= sprintf("\t\t\$r=KmlFactory_Create%s(\$this->_cPtr);\n", $class_name); $f .= sprintf("\t\treturn is_resource(\$r) ? new "); $f .= sprintf("%s(\$r) : \$r;\n\t}\n", $class_name); $lines[$i] = $f; // Clear the next two lines: $lines[$i+1] = ''; $lines[$i+2] = ''; } } } } fwrite($output_handle, $lines[$i]); } fclose($output_handle); echo "tweak successful"; ?> libkml-1.3.0/examples/python/000077500000000000000000000000001263603257100161315ustar00rootroot00000000000000libkml-1.3.0/examples/python/CMakeLists.txt000066400000000000000000000002511263603257100206670ustar00rootroot00000000000000if(INSTALL_EXAMPLES) file(GLOB eg_files "${CMAKE_CURRENT_SOURCE_DIR}/*.py") install( FILES ${eg_files} DESTINATION examples/python) ##compile python endif() libkml-1.3.0/examples/python/helloenum.py000077500000000000000000000043601263603257100205010ustar00rootroot00000000000000#!/usr/bin/env python # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This program demonstrates use of the KML DOM Python SWIG bindings # for creating and accessing enum values such as . import sys import kmldom def main(): print '== This is %s' % sys.argv[0] factory = kmldom.KmlFactory_GetFactory() print 'Create a LookAt with altitudeMode...' lookat = factory.CreateLookAt() lookat.set_altitudemode(kmldom.ALTITUDEMODE_RELATIVETOGROUND) print 'lookat.has_altitudemode()',lookat.has_altitudemode() print 'lookat.altitudemode()',lookat.get_altitudemode() if lookat.get_altitudemode() == kmldom.ALTITUDEMODE_RELATIVETOGROUND: print 'Yes, it is relativeToGround' print 'Serialize it to pretty xml...' lookat_kml = kmldom.SerializePretty(lookat) print lookat_kml if __name__ == '__main__': main() libkml-1.3.0/examples/python/hellogeometry.py000077500000000000000000000135711263603257100213740ustar00rootroot00000000000000#!/usr/bin/env python # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This program demonstrates use of the KML DOM Python SWIG bindings for # generating geometry. import sys import kmldom def CreatePointPlacemark(name, lat, lng): factory = kmldom.KmlFactory_GetFactory() placemark = factory.CreatePlacemark() placemark.set_name(name) coordinates = factory.CreateCoordinates() coordinates.add_latlng(lat, lng) point = factory.CreatePoint() point.set_coordinates(coordinates) placemark.set_geometry(point) return placemark def CreateSimple2dLineStringPlacemark(name, latlng): factory = kmldom.KmlFactory_GetFactory() placemark = factory.CreatePlacemark() placemark.set_name(name) coordinates = factory.CreateCoordinates() for (lat, lng) in latlng: coordinates.add_latlng(lat, lng) linestring = factory.CreateLineString() linestring.set_tessellate(True) linestring.set_coordinates(coordinates) placemark.set_geometry(linestring) return placemark def CreateSimple2dPolygonPlacemark(name): factory = kmldom.KmlFactory_GetFactory() # ... linearing = factory.CreateLinearRing() outerboundaryis = factory.CreateOuterBoundaryIs() outerboundaryis.set_linearring(linearing) # ... ... polygon = factory.CreatePolygon() polygon.set_tessellate(True) polygon.set_outerboundaryis(outerboundaryis) # ... placemark = factory.CreatePlacemark() placemark.set_name(name) placemark.set_geometry(polygon) return placemark def Create2HolePolygonPlacemark(name): factory = kmldom.KmlFactory_GetFactory() # polygon = factory.CreatePolygon() # outerboundaryis = factory.CreateOuterBoundaryIs() linearring = factory.CreateLinearRing() coordinates = factory.CreateCoordinates() coordinates.add_latlngalt(37.823360,-122.374208,0) coordinates.add_latlngalt(37.823360,-122.369120,0) coordinates.add_latlngalt(37.827271,-122.369073,0) coordinates.add_latlngalt(37.827259,-122.374655,0) coordinates.add_latlngalt(37.823360,-122.374208,0) linearring.set_coordinates(coordinates) outerboundaryis.set_linearring(linearring) polygon.set_outerboundaryis(outerboundaryis) # innerboundaryis = factory.CreateInnerBoundaryIs() linearring = factory.CreateLinearRing() coordinates = factory.CreateCoordinates() coordinates.add_latlngalt(37.825728,-122.373670,0) coordinates.add_latlngalt(37.825715,-122.372255,0) coordinates.add_latlngalt(37.826578,-122.372886,0) coordinates.add_latlngalt(37.825728,-122.373670,0) linearring.set_coordinates(coordinates) innerboundaryis.set_linearring(linearring) polygon.add_innerboundaryis(innerboundaryis) # innerboundaryis = factory.CreateInnerBoundaryIs() linearring = factory.CreateLinearRing() coordinates = factory.CreateCoordinates() coordinates.add_latlngalt(37.824914,-122.371487,0) coordinates.add_latlngalt(37.824089,-122.372024,0) coordinates.add_latlngalt(37.824065,-122.370626,0) coordinates.add_latlngalt(37.824914,-122.371487,0) linearring.set_coordinates(coordinates) innerboundaryis.set_linearring(linearring) polygon.add_innerboundaryis(innerboundaryis) # ... ... placemark = factory.CreatePlacemark() placemark.set_name(name) placemark.set_geometry(polygon) return placemark def main(): print '== This is %s' % sys.argv[0] factory = kmldom.KmlFactory_GetFactory() # document = factory.CreateDocument() # Each Create*Placemark() creates and returns a Placemark. document.add_feature(CreatePointPlacemark('pt0',1,2)) document.add_feature(CreatePointPlacemark('pt1',3,4)) lnglat = [(1,2),(3,4),(5,6),(7,8)] document.add_feature(CreateSimple2dLineStringPlacemark('line',lnglat)) document.add_feature(CreateSimple2dPolygonPlacemark('box')) document.add_feature(Create2HolePolygonPlacemark('2 holes')) # ... ... placemark = factory.CreatePlacemark() multigeometry = factory.CreateMultiGeometry() multigeometry.add_geometry(factory.CreatePoint()) multigeometry.add_geometry(factory.CreateLineString()) placemark.set_geometry(multigeometry) document.add_feature(placemark) # kml = factory.CreateKml() kml.set_feature(document) print 'Serialize to xml...' print kmldom.SerializePretty(kml) if __name__ == '__main__': main() libkml-1.3.0/examples/python/hellolocation.py000077500000000000000000000047671263603257100213600ustar00rootroot00000000000000#!/usr/bin/env python # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This program demonstrates use of the KML DOM Python SWIG bindings # for determining the location and bounding box of a feature and/or feature # hierarchy using kmlengine.GetFeatureLatLon(), kmlengine.GetFeatureBounds(), # and kmlengine.Bbox() methods. import sys import kmldom import kmlengine def ReadFile(filename): f = open(filename, 'r') data = f.read() return data # Program main: read the file to memory, parse it, get and visit # the root feature if such exists. def main(inputkml): feature = kmlengine.GetRootFeature(kmldom.ParseKml(ReadFile(inputkml))) (status, lat, lon) = kmlengine.GetFeatureLatLon(feature) if status: print 'center',lat,lon bbox = kmlengine.Bbox() status = kmlengine.GetFeatureBounds(feature, bbox) if status: print 'north',bbox.get_north() print 'south',bbox.get_south() print 'east',bbox.get_east() print 'west',bbox.get_west() if __name__ == '__main__': if len(sys.argv) != 2: print 'usage: %s input.kml' % sys.argv[0] sys.exit(1) main(sys.argv[1]) libkml-1.3.0/examples/python/helloplacemark.py000077500000000000000000000063351263603257100215000ustar00rootroot00000000000000#!/usr/bin/env python # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This program demonstrates use of the KML DOM Python SWIG bindings for # creating and accessing simple elements and attributes such as # Feature's and and Object's id= as in . import sys import kmldom def main(): print '== This is %s' % sys.argv[0] factory = kmldom.KmlFactory_GetFactory() print 'Creating a Placemark...' placemark = factory.CreatePlacemark() print 'Get the Type()...' print 'Placemark.Type()',placemark.Type() print 'has_xxx() all return false...' print 'Placemark.has_id()',placemark.has_id() print 'Placemark.has_name()',placemark.has_name() print 'Placemark.has_visibility()',placemark.has_visibility() print 'Placemark.has_geometry()',placemark.has_geometry() print 'Set some fields...' # Object std::string placemark.set_id("pm123") # Feature std::string placemark.set_name("hi") # Feature bool placemark.set_visibility(False) # True by default print 'has_xxx() now return true...' print 'Placemark.has_id()',placemark.has_id() print 'Placemark.has_name()',placemark.has_name() print 'Placemark.has_id()',placemark.has_id() print 'Get some fields...' print 'Placemark.id()',placemark.get_id() print 'Placemark.name()',placemark.get_name() print 'Placemark.visibility()',placemark.get_visibility() print 'Clear fields...' placemark.clear_name() placemark.clear_id() placemark.clear_visibility() print 'Placemark.has_id()',placemark.has_id() print 'Placemark.has_name()',placemark.has_name() print 'placemark.has_visibility()',placemark.has_visibility() print 'visibility is true by default...' print 'placemark.visibility()',placemark.get_visibility() # Python deletes the placemark. if __name__ == '__main__': main() libkml-1.3.0/examples/python/hellopoint.py000077500000000000000000000046661263603257100206770ustar00rootroot00000000000000#!/usr/bin/env python # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This program demonstrates use of the KML DOM Python SWIG bindings # for creating a and serializing out to XML. import sys import kmldom def main(): print '== This is %s' % sys.argv[0] factory = kmldom.KmlFactory_GetFactory() print 'Create a Point Placemark...' print 'Create coordinates...' coordinates = factory.CreateCoordinates() coordinates.add_latlng(37.38,-122.123) print 'Create Point and set coordinates...' point = factory.CreatePoint() point.set_coordinates(coordinates) print 'Create Placemark and set geometry...' placemark = factory.CreatePlacemark() placemark.set_geometry(point) print placemark.has_geometry() print 'Create kml and set feature...' kml = factory.CreateKml() kml.set_feature(placemark) print 'Serialize to xml...' print kmldom.SerializePretty(kml) # Python deletes placemark which in turn deletes point # which in turn deletes coordinates. if __name__ == '__main__': main() libkml-1.3.0/examples/python/hellovector.py000077500000000000000000000053001263603257100210320ustar00rootroot00000000000000#!/usr/bin/env python # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This program demonstrates use of the KML DOM Python SWIG bindings # for creating and accessing array values such as # and . import sys import kmldom def main(): print '== This is %s' % sys.argv[0] factory = kmldom.KmlFactory_GetFactory() print 'Coordinates is a vector of Vec3...' coordinates = factory.CreateCoordinates() coordinates.add_latlng(1,1) coordinates.add_latlng(2,2) coordinates.add_latlng(3,3) for i in range(coordinates.get_coordinates_array_size()): print 'longitude',coordinates.get_coordinates_array_at(i).get_longitude() print 'latitude',coordinates.get_coordinates_array_at(i).get_latitude() print 'altitude',coordinates.get_coordinates_array_at(i).get_altitude() print kmldom.SerializePretty(coordinates) # Python deletes coordinates. print 'Create a Folder with some Features...' folder = factory.CreateFolder() folder.add_feature(factory.CreatePlacemark()) folder.add_feature(factory.CreateFolder()) for i in range(folder.get_feature_array_size()): print 'feature Type',folder.get_feature_array_at(i).Type() print kmldom.SerializePretty(folder) # Python deletes folder and the child features. if __name__ == '__main__': main() libkml-1.3.0/examples/python/hellowalk.py000077500000000000000000000057611263603257100205010ustar00rootroot00000000000000#!/usr/bin/env python # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This program demonstrates use of the KML DOM Python SWIG bindings # for walking the feature hierarchy of a KML file. import sys import kmldom import kmlengine argc = len(sys.argv) if argc != 2: print 'usage: %s input.kml' % sys.argv[0] sys.exit(1) inputkml = sys.argv[1] def ReadFile(filename): f = open(filename, 'r') data = f.read() return data def Indent(depth): while depth: print ' ', depth -= 1 def PrFeatureType(type): if type == kmldom.Type_Placemark: print 'Placemark', else: print 'some other Feature', # This visits a feature. The type of feature is printed. If the feature # is a container such is visited recursively. def VisitFeature(feature, depth): Indent(depth) PrFeatureType(feature.Type()) print 'id=',feature.get_id() container = kmldom.AsContainer(feature) if container: WalkContainer(container, depth+1) # This visits each feature in the given container ( or ). def WalkContainer(container, depth): for i in range(container.get_feature_array_size()): VisitFeature(container.get_feature_array_at(i), depth) # Program main: read the file to memory, parse it, get and visit # the root feature if such exists. def main(): feature = kmlengine.GetRootFeature(kmldom.ParseKml(ReadFile(inputkml))) if feature: VisitFeature(feature, 0) # Python deletes the feature and all of its descendant elements in turn. else: # The file is a KML fragment. print 'No root feature in %s' % inputkml if __name__ == '__main__': main() libkml-1.3.0/examples/python/parse_point_placemark.py000077500000000000000000000051611263603257100230530ustar00rootroot00000000000000#!/usr/bin/env python # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This program demonstrates use of the KML DOM Python SWIG bindings for # creating and accessing simple elements and attributes such as # Feature's and and Object's id= as in . import sys import kmlbase import kmldom import kmlengine # Program main: Parse a simple Point Placemark and print the coordinates. def main(): print '== This is %s' % sys.argv[0] kml = ('\n\nfoo\n' '\n-122, 37\n\n' '\n') print 'kml is:\n%s' % kml print 'parsing kml' # Use the convenience function to return the root feature of the parsed KML. root_feature = kmlengine.GetRootFeature(kmldom.ParseKml(kml)) # We know the root feature is a Placemark. placemark = kmldom.AsPlacemark(root_feature) # Extract the coordinates and print them. point = kmldom.AsPoint(placemark.get_geometry()) coordinates = point.get_coordinates().get_coordinates_array_at(0) print 'lat: %0.3f, lng %0.3f' %(coordinates.get_latitude(), coordinates.get_longitude()) if __name__ == '__main__': main() libkml-1.3.0/examples/python/setpath000066400000000000000000000002401263603257100175200ustar00rootroot00000000000000# TODO: "make install" in src/swig to normal python lib dir to avoid # this script and/or any special PYTHONPATH handling. export PYTHONPATH=../../build/python libkml-1.3.0/examples/regionator/000077500000000000000000000000001263603257100167615ustar00rootroot00000000000000libkml-1.3.0/examples/regionator/CMakeLists.txt000066400000000000000000000005501263603257100215210ustar00rootroot00000000000000build_example( NAME csvregionator DEPENDS kmlbase kmldom kmlengine kmlconvenience kmlregionator) build_example( NAME kmlregionator DEPENDS kmlbase kmldom kmlengine kmlconvenience kmlregionator) if(INSTALL_EXAMPLES) file(GLOB eg_files "${CMAKE_CURRENT_SOURCE_DIR}/*.cc") install( FILES ${eg_files} DESTINATION examples/regionator) endif() libkml-1.3.0/examples/regionator/README000066400000000000000000000002671263603257100176460ustar00rootroot00000000000000 NOTE: This makes use of boost string routines which are not in the libkml copy of boost. Note the include path in Makefile.am. This example is not built by default for this reason. libkml-1.3.0/examples/regionator/csvregionator.cc000066400000000000000000000115401263603257100221560ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Build a Region-based NetworkLink hierarchy from a CSV file. // This creates a KML file from a CSV file whose first row is a schema such as: // Score,Name,Latitude,Longitude,Description,a,b,c // And each of whose lines look like: // 123,hello,37.1,-111.123,how are you,1,2,3 // 456,hi,37.2,-111.124,very fine thank you,2,3,4 // A Point Placemark is created for each line in the CSV file. This example // prints an error for and drops each line not exactly matching the schema. #include #include #include "kml/base/csv_splitter.h" #include "kml/base/file.h" #include "kml/dom.h" #include "kml/convenience/convenience.h" #include "kml/convenience/csv_parser.h" #include "kml/engine.h" #include "kml/regionator/feature_list_regionator.h" #include "kml/regionator/regionator.h" using kmlbase::File; using kmldom::PlacemarkPtr; using kmlconvenience::CsvParser; using kmlconvenience::CsvParserHandler; using kmlconvenience::CsvParserStatus; using kmlconvenience::FeatureList; using kmlregionator::FeatureListRegionator; using kmlregionator::Regionator; // This CsvParserHandler saves each "OK" Placemark to the given FeatureList. class FeatureListSaver : public kmlconvenience::CsvParserHandler { public: FeatureListSaver(FeatureList* feature_list) : feature_list_(feature_list) { } // This is the method called from within the CsvParser for each line in the // input CSV. In this implementation we save all Placemarks from good lines // and noisily skip over imperfect lines. virtual bool HandleLine(int line, CsvParserStatus status, PlacemarkPtr p) { if (status == kmlconvenience::CSV_PARSER_STATUS_OK) { feature_list_->PushBack(p); } else { std::cerr << "Error on line " << line << std::endl; } return true; } private: FeatureList* feature_list_; }; class CsvRegionator { public: // This is the signature of the PM::RegionatorProgress in // FeatureListRegionator. bool RegionatorProgress(unsigned int completed, unsigned int total) { std::cout << completed << "/" << total << std::endl; return true; // Always continue regionating. } }; int main(int argc, char** argv) { if (argc != 3) { std::cout << "usage: " << argv[0] << " input.csv output_directory" << std::endl; return 1; } const char* csv_filename = argv[1]; const char* output_dir = argv[2]; string csv_data; if (!File::ReadFileToString(csv_filename, &csv_data)) { std::cerr << "Read failed: " << csv_filename << std::endl; return 1; } kmlbase::CsvSplitter csv_splitter(csv_data); // Parse the CSV data into a FeatureList of Point Placemarks sorted by the // ExtendedData/Data element named "Score". FeatureList feature_list; FeatureListSaver feature_saver(&feature_list); if (!CsvParser::ParseCsv(&csv_splitter, &feature_saver)) { std::cerr << "Parse failed: " << csv_filename << std::endl; return 1; } std::cout << "Feature count: " << feature_list.Size() << std::endl; CsvRegionator progress; // Give the FeatureList to the FeatureListRegionator which walks the // hierarchy starting at root. The output is aligned to a quadtree rooted // at n=180, s=-180, e=180, w=-180. if (!FeatureListRegionator::Regionate(&feature_list, 10, &progress, output_dir)) { std::cerr << "Regionation failed" << std::endl; return 1; } return 0; } libkml-1.3.0/examples/regionator/csvregionator.vcproj000066400000000000000000000120011263603257100230650ustar00rootroot00000000000000 libkml-1.3.0/examples/regionator/kmlregionator.cc000066400000000000000000000114331263603257100221470ustar00rootroot00000000000000// Copyright 2010, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Build a Region-based NetworkLink hierarchy from a KML file. Shared styles // are preserved in the case of relative references within the input file. #include #include #include #include "kml/base/file.h" #include "kml/dom.h" #include "kml/convenience/convenience.h" #include "kml/convenience/kml_feature_list_saver.h" #include "kml/engine.h" #include "kml/regionator/feature_list_regionator.h" #include "kml/regionator/regionator.h" using kmldom::ElementPtr; using kmldom::FeaturePtr; using kmldom::StyleSelectorPtr; using kmlconvenience::FeatureList; using kmlconvenience::KmlFeatureListSaver; using kmlengine::SharedStyleMap; using kmlregionator::FeatureListRegionator; using kmlregionator::Regionator; int main(int argc, char** argv) { if (argc != 3) { std::cout << "usage: " << argv[0] << " input.kml output_directory" << std::endl; return 1; } const char* kml_filename = argv[1]; const char* output_dir = argv[2]; std::ifstream input_file(kml_filename, std::ios_base::in | std::ios_base::binary); if (!input_file.is_open() || !input_file.good()) { std::cerr << "Open failed: " << kml_filename << std::endl; return 1; } // Parse the Features and shared styles from the input KML file. FeatureList feature_list; SharedStyleMap shared_style_map; // When created with a style base all internal relative references are // rewritten as style.kml#style-id. const string kStyleKml("style.kml"); KmlFeatureListSaver kml_saver(&feature_list, &shared_style_map, kStyleKml.c_str()); string errors; if (!kmlengine::KmlStream::ParseFromIstream(&input_file, &errors, &kml_saver)) { std::cerr << "Parse failed: " << kml_filename << std::endl; std::cerr << errors << std::endl; return 1; } std::cout << "Feature count: " << feature_list.Size() << std::endl; std::cout << "Style count: " << shared_style_map.size() << std::endl; // Give the FeatureList to the FeatureListRegionator which walks the // hierarchy starting at root. The output is aligned to a quadtree rooted // at n=180, s=-180, e=180, w=-180. if (!FeatureListRegionator<>::Regionate(&feature_list, 10, NULL, output_dir)) { std::cerr << "Regionation failed" << std::endl; return 1; } // Gather up the shared styles and write them to $output_dir/style.kml. // TODO: move this into a KmlFile::CreateFromSharedStyleMap. kmldom::KmlFactory* kml_factory = kmldom::KmlFactory::GetFactory(); kmldom::DocumentPtr document = kml_factory->CreateDocument(); SharedStyleMap::const_iterator iter = shared_style_map.begin(); for (; iter != shared_style_map.end(); ++iter) { document->add_styleselector(iter->second); } kmldom::KmlPtr kml = kml_factory->CreateKml(); kml->set_feature(document); // Use KmlFile mostly for its nice XML header, etc. kmlengine::KmlFilePtr style_file(kmlengine::KmlFile::CreateFromImport(kml)); string style_kml; style_file->SerializeToString(&style_kml); const string style_path(kmlbase::File::JoinPaths(output_dir, kStyleKml)); if (!kmlbase::File::WriteStringToFile(style_kml, style_path)) { std::cerr << "Style output failed: " << style_path << std::endl; return 1; } return 0; } libkml-1.3.0/examples/ruby/000077500000000000000000000000001263603257100155715ustar00rootroot00000000000000libkml-1.3.0/examples/ruby/helloplacemark.rb000077500000000000000000000046461263603257100211160ustar00rootroot00000000000000#!/usr/bin/env ruby # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. require 'setpath' # sets path to uninstalled kmldom module. factory = Kmldom::KmlFactory.GetFactory() placemark = factory.CreatePlacemark() puts "has_xxx() all return false..." puts "placemark.has_id(): #{placemark.has_id()}" puts "placemark.has_name(): #{placemark.has_name()}" puts "placemark.has_geometry(): #{placemark.has_geometry()}" puts "set some fields" placemark.set_id("id123") placemark.set_name("we love Ruby") puts "has_xxx() now return true" puts "placemark.has_id(): #{placemark.has_id()}" puts "placemark.has_name(): #{placemark.has_name()}" puts "get the fields we set" puts "placemark.id(): #{placemark.id()}" puts "placemark.name(): #{placemark.name()}" puts "print the KML for the placemark" puts Kmldom::SerializePretty(placemark) puts "clear the fields" placemark.clear_id() placemark.clear_name() puts "placemark.id(): #{placemark.id()}" puts "placemark.name(): #{placemark.name()}" # Ruby automatically cleans up placemark. libkml-1.3.0/examples/ruby/hellovector.rb000077500000000000000000000050551263603257100204540ustar00rootroot00000000000000#!/usr/bin/env ruby # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This program demonstrates use of the KML DOM Ruby SWIG bindings # for creating and accessing array values such as # and . require 'setpath' factory = Kmldom::KmlFactory.GetFactory() puts "Coordinates is a vector of Vec3..." coordinates = factory.CreateCoordinates() coordinates.add_point2(1,1) coordinates.add_point2(2,2) coordinates.add_point2(3,3) for i in 0..coordinates.coordinates_array_size()-1 puts "longitude: #{coordinates.coordinates_array_at(i).longitude()}" puts "latitude: #{coordinates.coordinates_array_at(i).latitude()}" puts "altitude: #{coordinates.coordinates_array_at(i).altitude()}" end puts Kmldom::SerializePretty(coordinates) # Ruby deletes coordinates puts "Create a Folder with some Features..." folder = factory.CreateFolder() folder.add_feature(factory.CreatePlacemark()) folder.add_feature(factory.CreateFolder()) for i in 0..folder.feature_array_size()-1 puts "feature Type: #{folder.feature_array_at(i).Type()}" end puts Kmldom::SerializePretty(folder) # Ruby deletes folder which internally deletes its feature list. libkml-1.3.0/examples/ruby/hellowalk.rb000077500000000000000000000065351263603257100201140ustar00rootroot00000000000000#!/usr/bin/env ruby # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # This program demonstrates use of the KML DOM Ruby SWIG bindings # for walking the feature hierarchy of a KML file. require 'setpath' def ReadFile(filename) data = '' file = File.new(filename, "r") file.each { |line| data += line } return data end def Indent(depth) while depth > 0 print " " depth -= 1 end end def PrFeatureType(type) if type == Kmldom::Type_Placemark print "Placemark " else print "some other Feature " end end # This visits a feature. The type of feature is printed. If the feature # is a container such is visited recursively. def VisitFeature(feature, depth) Indent(depth) PrFeatureType(feature.Type()) puts "id = #{feature.id()}" container = Kmldom::AsContainer(feature) if container: WalkContainer(container, depth+1) end end # This visits each feature in the given container ( or ). def WalkContainer(container, depth) for i in 0..container.feature_array_size()-1 VisitFeature(container.feature_array_at(i), depth) end end # The root feature of a KML file is the child feature of the # element or the root xml element if that is a Feature. # If element is neither nor a feature nil is returned. def GetRootFeature(element) kml = Kmldom::AsKml(element) if kml if kml.has_feature(): return kml.feature() else return nil end end feature = Kmldom::AsFeature(element) if feature return feature end return nil end def main(inputkml) feature = GetRootFeature(Kmldom::ParseKml(ReadFile(inputkml))) if feature VisitFeature(feature, 0) # Ruby deletes the feature returned from ParseKml which in turn # deletes all child elements. else # The file is a KML fragment. puts "No root feature in #{inputkml}" end end if __FILE__ == $0 if ARGV.length != 1 puts "usage: #{$0} input.kml" exit 0 end main(ARGV[0]) end libkml-1.3.0/examples/ruby/setpath.rb000077500000000000000000000032331263603257100175720ustar00rootroot00000000000000#!/usr/bin/env ruby # Copyright 2008, Google Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # 3. Neither the name of Google Inc. nor the names of its contributors may be # used to endorse or promote products derived from this software without # specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # All files in this directory require this file to get the correct path to the # kmldom module. # TODO: proper install of kmldom to negate this. require '../../build/ruby/kmldom' libkml-1.3.0/examples/wxregionator/000077500000000000000000000000001263603257100173405ustar00rootroot00000000000000libkml-1.3.0/examples/wxregionator/README000066400000000000000000000025041263603257100202210ustar00rootroot00000000000000This is a wxWidgets-based application that uses the "regionator" library in libkml. This current version builds with Mac OS X and Windows only. It depends upon wxWidgets 2.8.8, available from http://www.wxwidgets.org/downloads/ Mac OS X build recipe: ---------------------- cd wxMac-2.8.8 mkdir build-static-release cd build-static-release ../configure --enable-monolithic --disable-shared make && make install A single, static library is built for convenience. See the wxWidgets documentation if you'd like to build the individual shared libraries. You will of course need to change the build configuration(s) for this wxregionator app. You can see some of the necessary config options by running the wx-config application with the --cppflags and --libs options. The libkml libraries are assumed to be installed at /usr/local/lib/libkml*. This project will link them statically to the binary such that the resultant application may be run on systems that have neither libkml nor wxwidgets installed. Windows XP build recipe: ------------------------ Download wxMSW-2.8.8 Install to default location. c:\wxWidgets-2.8.8 Open build\msw\wx.dsw Select "Release" and build the solution The wxregionator project assumes a successfully build wxWidgets and also a release-mode build of the libkml libraries in "..\..\release". libkml-1.3.0/examples/wxregionator/Regionator-Info.plist000066400000000000000000000011631263603257100234200ustar00rootroot00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier com.yourcompany.Regionator CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleSignature ???? CFBundleVersion 1.0 libkml-1.3.0/examples/wxregionator/main.cc000066400000000000000000000035151263603257100205770ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the main application class. #include "main.h" #include "wxregionator.h" // Create a new application object. IMPLEMENT_APP(RegionatorApp) bool RegionatorApp::OnInit() { if (!wxApp::OnInit()) { return false; } MainFrame* frame = new MainFrame(_T("Regionator Demo")); frame->Show(true); return true; } libkml-1.3.0/examples/wxregionator/main.h000066400000000000000000000033661263603257100204450ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the definition of the main application class. #ifndef MAIN_H__ #define MAIN_H__ #include // The main application class. class RegionatorApp : public wxApp { public: // Called on startup. virtual bool OnInit(); }; #endif // MAIN_H__ libkml-1.3.0/examples/wxregionator/wxregionator.cc000066400000000000000000000226271263603257100224100ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the main frame used in the // application. #include "wxregionator.h" #include #include #include #include #include #include #include #include #include #include #include // This CsvParserHandler saves each "OK" Placemark to the given FeatureList. // Non-OK lines are quietly ignored. class FeatureListSaver : public kmlconvenience::CsvParserHandler { public: FeatureListSaver(kmlconvenience::FeatureList* feature_list) : feature_list_(feature_list) { } // This is the method called from within the CsvParser for each line in the // input CSV. In this implementation we save all Placemarks from good lines // and quietly skip over imperfect lines. virtual bool HandleLine(int line, kmlconvenience::CsvParserStatus status, kmldom::PlacemarkPtr p) { if (status == kmlconvenience::CSV_PARSER_STATUS_OK && kmlengine::GetFeatureLatLon(p, NULL, NULL)) { feature_list_->PushBack(p); } // TODO: how to indicate an error on a given line? return true; // Always advance to the next line of CSV data. } private: kmlconvenience::FeatureList* feature_list_; }; // IDs for the controls and menu commands. enum { Regionator_Quit = wxID_EXIT, Regionator_About = wxID_ABOUT, Regionator_InputFile, Regionator_OutputDir, Regionator_GenerateKML }; // Event tables. BEGIN_EVENT_TABLE(MainFrame, wxFrame) EVT_MENU(Regionator_Quit, MainFrame::OnQuit) EVT_MENU(Regionator_About, MainFrame::OnAbout) END_EVENT_TABLE() MainFrame::MainFrame(const wxString& title) : wxFrame(NULL, -1, title, wxPoint(-1, -1), wxSize(450, 400)), panel_(NULL), input_file_ctrl_(NULL), output_dir_ctrl_(NULL) { // Menu bar setup. wxMenu* filemenu = new wxMenu; filemenu->Append(Regionator_Quit, _T("Exit"), _T("Quit this application")); wxMenu* helpmenu = new wxMenu; helpmenu->Append(Regionator_About, _T("About..."), _T("Show about dialog")); wxMenuBar* menubar = new wxMenuBar(); menubar->Append(filemenu, _T("&File")); menubar->Append(helpmenu, _T("&Help")); SetMenuBar(menubar); // Status bar. CreateStatusBar(2); SetStatusText(_T("Regionator demo")); // Layout. panel_ = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(450, 400)); wxBoxSizer* vbox = new wxBoxSizer(wxVERTICAL); // Input file picker. wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL); wxStaticText *st1 = new wxStaticText(panel_, wxID_ANY, wxT("Input CSV file")); hbox1->Add(st1, 0, wxRIGHT, 10); input_file_ctrl_ = new wxFilePickerCtrl(panel_, Regionator_InputFile, wxEmptyString, wxT("Select input CSV file"), wxT("*"), wxDefaultPosition, wxDefaultSize, wxFLP_USE_TEXTCTRL); hbox1->Add(input_file_ctrl_, 1); vbox->Add(hbox1, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 10); vbox->Add(-1, 10); // Spacer. // Output directory picker. wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL); wxStaticText *st2 = new wxStaticText(panel_, wxID_ANY, wxT("Output directory")); hbox2->Add(st2, 0, wxRIGHT, 10); output_dir_ctrl_ = new wxDirPickerCtrl(panel_, Regionator_OutputDir, wxEmptyString, wxT("Select output directory"), wxDefaultPosition, wxDefaultSize, wxDIRP_USE_TEXTCTRL); hbox2->Add(output_dir_ctrl_, 1); vbox->Add(hbox2, 0, wxLEFT | wxRIGHT | wxEXPAND, 10); vbox->Add(-1, 30); // OK and Cancel buttons. wxBoxSizer *hbox5 = new wxBoxSizer(wxHORIZONTAL); wxButton *btn1 = new wxButton(panel_, Regionator_GenerateKML, wxT("Generate KML files")); hbox5->Add(btn1, 0); vbox->Add(hbox5, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, 15); // Events. Connect(Regionator_GenerateKML, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MainFrame::GenerateRbnl)); // Final sizing before display. vbox->SetMinSize(450,100); panel_->SetSizer(vbox); vbox->SetSizeHints(this); Centre(); } void MainFrame::GenerateRbnl(wxCommandEvent& event) { // Ensure the values for the input and output are sane. if (!ValidateFormFields(input_file_ctrl_->GetPath().c_str(), output_dir_ctrl_->GetPath())) { return; } // Check if the output dir is empty. Bail if the dir wasn't empty and the // user elected not to continue. const char* output_dir = output_dir_ctrl_->GetPath(); if (!AskIfOutputDirNotEmpty(output_dir)) { return; } string csv_data; if (!kmlbase::File::ReadFileToString(input_file_ctrl_->GetPath().c_str(), &csv_data)) { // TODO: how to indicate file read error? return; } kmlbase::CsvSplitter csv_splitter(csv_data); // Parse the CSV file into a FeatureList of Point Placemarks sorted by score. kmlconvenience::FeatureList feature_list; FeatureListSaver feature_saver(&feature_list); if (!kmlconvenience::CsvParser::ParseCsv(&csv_splitter, &feature_saver)) { // TODO: how to indicate CSV parse error? return; } wxString info("Regionation in progress"); // TODO: use a smart pointer progress_dialog_ = new wxProgressDialog(info, info, feature_list.Size(), this, wxPD_CAN_ABORT | wxPD_APP_MODAL); // Give the FeatureList to the FeatureListRegionator which walks the // hierarchy starting at root. The output is aligned to a quadtree rooted // at n=180, s=-180, e=180, w=-180. if (!kmlregionator::FeatureListRegionator::Regionate( &feature_list, 10, this, output_dir)) { // TODO: tell user about failure } delete progress_dialog_; // This takes down the dialog. // TODO: tell user OK! } bool MainFrame::RegionatorProgress(unsigned int completed, unsigned int total) { if (progress_dialog_) { if (!progress_dialog_->Update(completed)) { return false; // User pressed cancel so that we will do. } } return true; // Continue regionating. } void MainFrame::OnQuit(wxCommandEvent& event) { delete output_dir_ctrl_; delete input_file_ctrl_; delete panel_; Close(true); } void MainFrame::OnAbout(wxCommandEvent& event) { wxMessageBox(wxString::Format( _T("Welcome to the Regionator!\n") _T("\n") _T("http://libkml.googlecode.com/") ), _T("About Regionator"), wxOK | wxICON_INFORMATION, this); } // Private. bool MainFrame::ValidateFormFields(const wxChar* input_file, const wxString& output_dir) { wxString errors; // Ensure the CSV file is readable. if (!wxFile::Access(input_file, wxFile::read)) { errors.Printf(_T("Error: input file is not readable\n")); // Ensure the output dir exists. } else if (!wxDir::Exists(output_dir)) { errors.Printf(_T("Error: the output directory must exist\n")); } if (errors.empty()) { return true; } wxMessageDialog err_dialog(this, errors, _T("Cannot continue"), wxOK | wxICON_ERROR); err_dialog.ShowModal(); return false; } // Private. bool MainFrame::AskIfOutputDirNotEmpty(const wxString& output_dir) { wxDir dir(output_dir); if (dir.HasFiles()) { wxString warning; warning.Printf(_T("Output directory is not empty\n") _T("Would you like to continue anyway?\n")); wxMessageDialog dialog(this, warning, _T("Warning"), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION); return dialog.ShowModal() == wxID_YES; } return true; } libkml-1.3.0/examples/wxregionator/wxregionator.h000066400000000000000000000046041263603257100222450ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the definition of the main frame used in the application. #ifndef WXREGIONATOR_H__ #define WXREGIONATOR_H__ #include #include class wxProgressDialog; // The main frame class. class MainFrame : public wxFrame { public: MainFrame(const wxString& title); // Event handlers. void GenerateRbnl(wxCommandEvent& event); void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); // kmlconvenience::FeatureListReginator progress callback method. bool RegionatorProgress(unsigned int completed, unsigned int total); private: bool ValidateFormFields(const wxChar* input_file, const wxString& output_dir); bool AskIfOutputDirNotEmpty(const wxString& output_dir); wxPanel* panel_; wxFilePickerCtrl* input_file_ctrl_; wxDirPickerCtrl* output_dir_ctrl_; wxProgressDialog* progress_dialog_; DECLARE_EVENT_TABLE() }; #endif // WXREGIONATOR_H__ libkml-1.3.0/examples/wxregionator/wxregionator.sln000066400000000000000000000015441263603257100226120ustar00rootroot00000000000000 Microsoft Visual Studio Solution File, Format Version 9.00 # Visual Studio 2005 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wxregionator", "wxregionator.vcproj", "{83E1B868-DA78-4747-902C-CF2461CE2358}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 Release|Win32 = Release|Win32 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {83E1B868-DA78-4747-902C-CF2461CE2358}.Debug|Win32.ActiveCfg = Debug|Win32 {83E1B868-DA78-4747-902C-CF2461CE2358}.Debug|Win32.Build.0 = Debug|Win32 {83E1B868-DA78-4747-902C-CF2461CE2358}.Release|Win32.ActiveCfg = Release|Win32 {83E1B868-DA78-4747-902C-CF2461CE2358}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal libkml-1.3.0/examples/wxregionator/wxregionator.vcproj000066400000000000000000000113611263603257100233170ustar00rootroot00000000000000 libkml-1.3.0/examples/wxregionator/wxregionator.xcodeproj/000077500000000000000000000000001263603257100240645ustar00rootroot00000000000000libkml-1.3.0/examples/wxregionator/wxregionator.xcodeproj/project.pbxproj000066400000000000000000000214451263603257100271460ustar00rootroot00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ 69E74AAE0E23F122000BFD27 /* main.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69E74AAA0E23F122000BFD27 /* main.cc */; }; 69E74AAF0E23F122000BFD27 /* wxregionator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69E74AAC0E23F122000BFD27 /* wxregionator.cc */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 695EA66E0E23E63B00A596C5 /* Regionator.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Regionator.app; sourceTree = BUILT_PRODUCTS_DIR; }; 695EA6710E23E63B00A596C5 /* Regionator-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = "Regionator-Info.plist"; sourceTree = ""; }; 69E74AAA0E23F122000BFD27 /* main.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = main.cc; sourceTree = ""; }; 69E74AAB0E23F122000BFD27 /* main.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = main.h; sourceTree = ""; }; 69E74AAC0E23F122000BFD27 /* wxregionator.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = wxregionator.cc; sourceTree = ""; }; 69E74AAD0E23F122000BFD27 /* wxregionator.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = wxregionator.h; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 695EA66C0E23E63B00A596C5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 695EA6560E23E3BF00A596C5 = { isa = PBXGroup; children = ( 69E74AB00E23F138000BFD27 /* Resources */, 69E74AA40E23F0E6000BFD27 /* Sources */, 695EA66F0E23E63B00A596C5 /* Products */, 695EA6710E23E63B00A596C5 /* Regionator-Info.plist */, ); sourceTree = ""; }; 695EA66F0E23E63B00A596C5 /* Products */ = { isa = PBXGroup; children = ( 695EA66E0E23E63B00A596C5 /* Regionator.app */, ); name = Products; sourceTree = ""; }; 69E74AA40E23F0E6000BFD27 /* Sources */ = { isa = PBXGroup; children = ( 69E74AAA0E23F122000BFD27 /* main.cc */, 69E74AAB0E23F122000BFD27 /* main.h */, 69E74AAC0E23F122000BFD27 /* wxregionator.cc */, 69E74AAD0E23F122000BFD27 /* wxregionator.h */, ); name = Sources; sourceTree = ""; }; 69E74AB00E23F138000BFD27 /* Resources */ = { isa = PBXGroup; children = ( ); name = Resources; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 695EA66D0E23E63B00A596C5 /* Regionator */ = { isa = PBXNativeTarget; buildConfigurationList = 695EA6720E23E63C00A596C5 /* Build configuration list for PBXNativeTarget "Regionator" */; buildPhases = ( 695EA66A0E23E63B00A596C5 /* Resources */, 695EA66B0E23E63B00A596C5 /* Sources */, 695EA66C0E23E63B00A596C5 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = Regionator; productName = Regionator; productReference = 695EA66E0E23E63B00A596C5 /* Regionator.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 695EA6580E23E3BF00A596C5 /* Project object */ = { isa = PBXProject; buildConfigurationList = 695EA6590E23E3BF00A596C5 /* Build configuration list for PBXProject "wxregionator" */; hasScannedForEncodings = 0; mainGroup = 695EA6560E23E3BF00A596C5; productRefGroup = 695EA66F0E23E63B00A596C5 /* Products */; projectDirPath = ""; targets = ( 695EA66D0E23E63B00A596C5 /* Regionator */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 695EA66A0E23E63B00A596C5 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 695EA66B0E23E63B00A596C5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 69E74AAE0E23F122000BFD27 /* main.cc in Sources */, 69E74AAF0E23F122000BFD27 /* wxregionator.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 695EA65A0E23E3BF00A596C5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; }; name = Debug; }; 695EA65B0E23E3BF00A596C5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; }; name = Release; }; 695EA6730E23E63C00A596C5 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; HEADER_SEARCH_PATHS = ( "/usr/local/lib/wx/include/mac-ansi-release-static-2.8", "/usr/local/include/wx-2.8", "/usr/local/include\ncal/include", /usr/local/include/kml/third_party/boost_1_34_1, ); INFOPLIST_FILE = "Regionator-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = /usr/local/lib; OTHER_CFLAGS = ( "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXMAC__", ); OTHER_LDFLAGS = ( "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-framework", OpenGL, "-framework", AGL, "/usr/local/lib/libwx_mac-2.8.a", /usr/local/lib/libkmlbase.a, /usr/local/lib/libkmldom.a, /usr/local/lib/libkmlengine.a, /usr/local/lib/libkmlconvenience.a, /usr/local/lib/libkmlregionator.a, "-framework", WebKit, "-lwxtiff-2.8", "-lwxjpeg-2.8", "-lwxpng-2.8", "-lz", "-lpthread", "-liconv", ); PREBINDING = NO; PRODUCT_NAME = Regionator; WRAPPER_EXTENSION = app; ZERO_LINK = YES; }; name = Debug; }; 695EA6740E23E63C00A596C5 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; HEADER_SEARCH_PATHS = ( "/usr/local/lib/wx/include/mac-ansi-release-static-2.8", "/usr/local/include/wx-2.8", "/usr/local/include\ncal/include", /usr/local/include/kml/third_party/boost_1_34_1, ); INFOPLIST_FILE = "Regionator-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = /usr/local/lib; OTHER_CFLAGS = ( "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXMAC__", ); OTHER_LDFLAGS = ( "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-framework", OpenGL, "-framework", AGL, "/usr/local/lib/libwx_mac-2.8.a", /usr/local/lib/libkmlbase.a, /usr/local/lib/libkmldom.a, /usr/local/lib/libkmlengine.a, /usr/local/lib/libkmlconvenience.a, /usr/local/lib/libkmlregionator.a, "-framework", WebKit, "-lwxtiff-2.8", "-lwxjpeg-2.8", "-lwxpng-2.8", "-lz", "-lpthread", "-liconv", ); PREBINDING = NO; PRODUCT_NAME = Regionator; WRAPPER_EXTENSION = app; ZERO_LINK = NO; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 695EA6590E23E3BF00A596C5 /* Build configuration list for PBXProject "wxregionator" */ = { isa = XCConfigurationList; buildConfigurations = ( 695EA65A0E23E3BF00A596C5 /* Debug */, 695EA65B0E23E3BF00A596C5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 695EA6720E23E63C00A596C5 /* Build configuration list for PBXNativeTarget "Regionator" */ = { isa = XCConfigurationList; buildConfigurations = ( 695EA6730E23E63C00A596C5 /* Debug */, 695EA6740E23E63C00A596C5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 695EA6580E23E3BF00A596C5 /* Project object */; } libkml-1.3.0/examples/wxviewer/000077500000000000000000000000001263603257100164705ustar00rootroot00000000000000libkml-1.3.0/examples/wxviewer/README000066400000000000000000000003041263603257100173450ustar00rootroot00000000000000 On Mac OSX this presumes http://www.wxwidgets.org/ configured with --enable-monolithic and with default (/usr/local) install path. This is known to work with wxWidgets 2.8.10 on Mac OSX 10.5.8. libkml-1.3.0/examples/wxviewer/icon_file.xpm000066400000000000000000000035261263603257100211530ustar00rootroot00000000000000/* XPM */ static char *icon_file_xpm[] = { /* columns rows colors chars-per-pixel */ "32 32 41 1", "> c #97C4E7", "# c #4381AA", "d c #FFFFFF", "< c #71B2DE", "+ c #538BB1", "& c #D1E5F5", "q c #63B3DE", "6 c #F1F4F7", "* c #CAE1F3", "y c #7AC4E5", "= c #C3DDF1", "X c #74A1BD", "- c #BCD9EF", "5 c #619BC4", "3 c #E6EAF1", "2 c #4B8EBF", "o c #6B97B6", ". c #4B82A8", " c None", "w c #54A6D8", "1 c #71A8D1", ", c #85BBE2", "t c #EFF6FC", "7 c #DEEDF8", "@ c #4388B4", "a c #F7FBFD", "$ c #D7E0E9", "r c #FAFCFE", "4 c #DAEAF7", "e c #E9F3FA", "0 c #76BAE2", "% c #7FA6C0", "s c #FDFDFE", "O c #5896BE", "p c #B6D5EE", "8 c #87ABC3", ": c #A5CCEA", "9 c #E5F0F9", "; c #AFD1EC", "i c #F4F9FD", "u c #8FB0C3", /* pixels */ " ", " ", " ", " ", " ", " .XXXooOO++@#$ ", " %&*=-;:>>,<123 ", " %4&*=-;:>>,1>56 ", " %74&*=-;:>>1*>56 ", " 89700qqqqwq1e*>X ", " 8e974&*=-;:1re*>8 ", " 8te974&*=-;11111# ", " 8tty000qqqqqww>,+ ", " uitte974&*=-p:>>+ ", " uaitte974&*=-p:>O ", " uaayyyy000qqqqp:O ", " uraaitte974&*=-po ", " urraaitte974&*=-o ", " usryyyyyyy000q*=X ", " ussrraaitte974&*X ", " udssrraaitte974&X ", " uddyyyyyyyyyy074% ", " udddssrraaitte97% ", " uddddssrraaitte9% ", " udddddssrraaitte8 ", " uddddddssrraaitt8 ", " uuuuuuuuuuuuuu88u ", " ", " ", " ", " ", " " }; libkml-1.3.0/examples/wxviewer/icon_folder_closed.xpm000066400000000000000000000035371263603257100230420ustar00rootroot00000000000000/* XPM */ static char *icon_folder_closed_xpm[] = { /* columns rows colors chars-per-pixel */ "32 32 41 1", "6 c #EDF2FB", "- c #AAC1E8", ": c #B9CDED", "X c #295193", ", c #C6D6F0", "a c #4A7CCE", "u c #779DDB", "y c #7FA2DD", "$ c #3263B4", "5 c #EAF0FA", ". c #2D59A3", "o c #6E96D8", "* c #356AC1", "r c #F7F9FD", "> c #BED0EE", "3 c #E1E9F7", "7 c #F0F5FC", "< c #CBD9F1", "2 c #DAE5F6", "# c #3161B1", " c None", "0 c #FDFEFF", "= c #9FB9E5", "e c #AEC5EA", "t c #89A9DF", "q c #98B5E4", "p c #5584D1", "d c #3A70CA", "@ c #305FAC", "i c #5D89D3", "1 c #D2DFF4", "% c #3366B9", "9 c #FAFCFE", "8 c #F5F8FD", "s c #4075CC", "O c #638ED5", "w c #90AFE2", "& c #3467BC", "+ c #2F5DA9", "; c #B3C8EB", "4 c #E5EDF9", /* pixels */ " ", " ", " ", " ", " ", " ", " ......X ", " .oooooO+ ", " .ooooooo. ", " .+@@@##$%%&&&&&****. ", " .=-;:>,<12345678900. ", " .q=-;:>,<1234567890. ", " .wq=-e:>,<12345678r. ", " .twq=-e:>,<12345678. ", " .ytwq=-e:>,<1234567. ", " .uytwq=-e:>,<123456. ", " .ouytwq=-e:>,<12345. ", " .Oouytwq=-e;>,<1234. ", " .iOouytwq=-e;>,<123. ", " .piOouytwq=-e;>,<12. ", " .apiOouytwq=-e;>,<1. ", " .sapiOouytwq=-e;>,<. ", " .dsapiOouytwq=-e;>,. ", " ...................# ", " ", " ", " ", " ", " ", " ", " ", " " }; libkml-1.3.0/examples/wxviewer/icon_folder_opened.xpm000066400000000000000000000035371263603257100230430ustar00rootroot00000000000000/* XPM */ static char *icon_folder_opened_xpm[] = { /* columns rows colors chars-per-pixel */ "32 32 41 1", "0 c #AAC1E8", "q c #B9CDED", "X c #295193", "e c #C6D6F0", "a c #4A7CCE", "& c #779DDB", "* c #7FA2DD", "2 c #EAF0FA", "@ c #2D59A3", "o c #6E96D8", "y c #356AC1", "d c #214279", "w c #BED0EE", "= c #85A7DF", "< c #E1E9F7", "3 c #F0F5FC", "s c #CBD9F1", ", c #DAE5F6", "7 c #3161B1", " c None", ". c #274D8B", "6 c #FDFEFF", "i c #E7EEF9", "9 c #9FB9E5", "- c #89A9DF", "8 c #98B5E4", "$ c #5584D1", "+ c #3569BF", "% c #305FAC", "O c #5D89D3", "> c #D2DFF4", "p c #3366B9", "5 c #FAFCFE", "4 c #F5F8FD", "t c #4075CC", "u c #638ED5", "r c #CEDCF2", "; c #90AFE2", "# c #2F5DA9", ": c #B3C8EB", "1 c #E5EDF9", /* pixels */ " ", " ", " ", " ", " ", " ", " ", " ......X ", " XoooooO. ", " Xoooooo+. ", " Xooooooo@XXXXXXXXXX# ", " Xoooooooooooooooooo# ", " Xoooooooooooooooooo# ", " Xoo$################### ", " Xoo%O&*=-;:>,<123445667 ", " XooX890:qwer>,<123445q# ", " Xoty;890:qwer>,<12344# ", " Xo%u-;890:qwer>,,,,<# ", " XX$Ouo&*-;890:qwer>s# ", " d%a$Ouo&*-;890:qwer# ", " d+ta$Ouo&*-;890:qwe# ", " d..................# ", " ", " ", " ", " ", " ", " ", " " }; libkml-1.3.0/examples/wxviewer/wxviewer-Info.plist000066400000000000000000000011611263603257100223150ustar00rootroot00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier com.yourcompany.wxviewer CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleSignature ???? CFBundleVersion 1.0 libkml-1.3.0/examples/wxviewer/wxviewer.cc000066400000000000000000000201371263603257100206620ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "wxviewer.h" #include "wx/filedlg.h" #include "wx/ffile.h" #include "wx/image.h" #include "wx/imaglist.h" #include "wx/log.h" #include "icon_file.xpm" #include "icon_folder_opened.xpm" #include "icon_folder_closed.xpm" using kmldom::ContainerPtr; using kmldom::ElementPtr; using kmldom::FeaturePtr; using kmldom::KmlPtr; // Event table for MainFrame menus. BEGIN_EVENT_TABLE(MainFrame, wxFrame) EVT_MENU(wxID_ABOUT, MainFrame::OnAbout) EVT_MENU(wxID_EXIT, MainFrame::OnQuit) EVT_MENU(DIALOGS_FILE_OPEN, MainFrame::OnFileOpen) END_EVENT_TABLE() // Event table for ListView mouse actions. BEGIN_EVENT_TABLE(ListView, wxTreeCtrl) // TODO. END_EVENT_TABLE() // Implements WXViewer& GetApp(). DECLARE_APP(WXViewer) // Give wxWidgets the means to create a WXViewer object. IMPLEMENT_APP(WXViewer) // Helper to find the root element of the parsed KML. static const FeaturePtr GetRootFeature(const ElementPtr& root) { const KmlPtr kml = kmldom::AsKml(root); if (kml && kml->has_feature()) { return kml->get_feature(); } return kmldom::AsFeature(root); } // Helper to convert wxString to std::string. static std::string wx2std(const wxString& wxstr, wxMBConv* conv) { if (wxstr.empty()) { return ""; } if (!conv) { conv = wxConvCurrent; // TODO: more research on this. } return std::string(wxstr.mb_str(*conv)); } // Helper to convert std::string to wxString. static wxString std2wx(const std::string& stdstr, wxMBConv* conv) { if (stdstr.empty()) { return wxEmptyString; } if (!conv) { conv = wxConvCurrent; // TODO: more research on this. } return wxString(stdstr.c_str(), *conv); } bool WXViewer::OnInit() { // Create the main application window. MainFrame* frame = new MainFrame(wxT("WXViewer"), wxID_ANY, wxDefaultPosition, wxSize(400, 400), wxDEFAULT_FRAME_STYLE); frame->Show(true); return true; } ListView::ListView(wxWindow* parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, long style) : wxTreeCtrl(parent, id, pos, size, style), kml_root_(NULL) { CreateImageList(); } void ListView::CreateImageList() { const int size = 32; // The icon list should match the ICON_XXX enum defined in the ListView // class. wxImageList* images = new wxImageList(size, size, true); wxBusyCursor wait; wxIcon icons[3]; icons[0] = wxIcon(icon_file_xpm); icons[1] = wxIcon(icon_folder_opened_xpm); icons[2] = wxIcon(icon_folder_closed_xpm); for (size_t i = 0; i < WXSIZEOF(icons); ++i) { images->Add(icons[i]); } AssignImageList(images); } void ListView::SetKmlData(const wxString& str) { std::string errors; kml_root_ = kmldom::Parse(wx2std(str, NULL), &errors); if (!kml_root_) { wxLogMessage(wxT("SetKmlData Parse failed: %s"), std2wx(errors, NULL).c_str()); return; } DeleteAllItems(); Populate(); } void ListView::Populate() { if (!kml_root_) { return; } const FeaturePtr root_feature = GetRootFeature(kml_root_); wxString name = std2wx(root_feature->get_name(), NULL); int icon = ICON_FILE; const ContainerPtr container = kmldom::AsContainer(root_feature); if (container) { icon = container->get_open() ? ICON_FOLDER_OPENED : ICON_FOLDER_CLOSED; } wxTreeItemId root_id = AddRoot(name, icon, wxTreeItemIcon_Expanded, NULL); SetItemImage(root_id, icon, wxTreeItemIcon_Expanded); if (container) { AppendContainer(container, root_id); if (container->get_open()) { Expand(root_id); } } } void ListView::AppendContainer(const ContainerPtr& container, wxTreeItemId parent_id) { for (size_t i = 0; i < container->get_feature_array_size(); ++i) { AppendFeature(container->get_feature_array_at(i), parent_id); } } void ListView::AppendFeature(const FeaturePtr& feature, wxTreeItemId parent_id) { wxString name = std2wx(feature->get_name(), NULL); wxTreeItemId appended_id; const ContainerPtr container = kmldom::AsContainer(feature); if (container) { int icon = container->get_open() ? ICON_FOLDER_OPENED : ICON_FOLDER_CLOSED; appended_id = AppendItem(parent_id, name, icon, icon, NULL); AppendContainer(container, appended_id); if (container->get_open()) { Expand(appended_id); } } else { AppendItem(parent_id, name, ICON_FILE, ICON_FILE, NULL); } } MainFrame::MainFrame(const wxString& title, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) : wxFrame(NULL, id, title, pos, size, style), listview_(NULL) { // Create a menu bar. wxMenu* FileMenu = new wxMenu; // The "About" item is in the help menu. wxMenu* HelpMenu = new wxMenu; HelpMenu->Append(wxID_ABOUT, wxT("About"), wxT("Show about dialog")); FileMenu->Append(wxID_EXIT, wxT("Quit WXViewer"), wxT("Quit this program")); FileMenu->Append(DIALOGS_FILE_OPEN, wxT("Open File..."), wxT("Open a file")); // Now append the created menus to the menu bar. wxMenuBar* MenuBar = new wxMenuBar(); MenuBar->Append(FileMenu, wxT("File")); MenuBar->Append(HelpMenu, wxT("Help")); // And attach the menu bar to the frame. SetMenuBar(MenuBar); // Create a status bar. CreateStatusBar(2); SetStatusText(wxT("42")); // Create a panel to hold our controls. panel_ = new wxPanel(this); // Bring up the listview and parent it to the panel. listview_ = new ListView(panel_, WINDOW_LISTVIEW, wxDefaultPosition, wxDefaultSize, wxTR_HAS_BUTTONS); // Size the listview to the main frame. Resize(); } void MainFrame::Resize() { wxSize size = GetClientSize(); listview_->SetSize(0, 0, size.x, size.y); } MainFrame::~MainFrame() { delete listview_; delete panel_; } void MainFrame::OnAbout(wxCommandEvent& event) { wxString msg; msg.Printf(wxT("A libkml demo application.\nCreated with %s"), wxVERSION_STRING); wxMessageBox(msg, wxT("About WXViewer"), wxOK | wxICON_INFORMATION, this); } void MainFrame::OnQuit(wxCommandEvent& event) { Close(); } void MainFrame::OnFileOpen(wxCommandEvent& WXUNUSED(event)) { wxFileDialog dialog(this, _T("Select a file to open"), wxEmptyString, wxEmptyString, _T("KML files (*.kml;*.kmz)|*.kml;*.kmz")); dialog.CenterOnParent(); dialog.SetDirectory(wxGetHomeDir()); wxString file_data; if (dialog.ShowModal() == wxID_OK) { wxFFile file(dialog.GetPath(), _T("r")); // TODO KMZ if (!file.IsOpened()) { wxLogMessage(wxT("Could not open %s"), dialog.GetPath().c_str()); return; } file.ReadAll(&file_data); file.Close(); } listview_->SetKmlData(file_data); } libkml-1.3.0/examples/wxviewer/wxviewer.h000066400000000000000000000075731263603257100205350ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This is a simple demo application using the wxWidgets framework to // exercise some aspects of libkml. // // The current implementation simply parses a given KML file into a tree // control to visualize the parsed DOM. #ifndef WXVIEWER_H__ #define WXVIEWER_H__ #include #include "kml/dom.h" #include "wx/treectrl.h" #include "wx/wx.h" // The main application class. class WXViewer : public wxApp { public: // Called on application startup. virtual bool OnInit(); }; // The ListView class is a tree control that displays the structure of the // parsed KML DOM. class ListView : public wxTreeCtrl { public: ListView(wxWindow* parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, long style); virtual ~ListView() {} // Set the contents of the listview from a wxString of KML. The existing // contents, if any, are destroyed. void SetKmlData(const wxString& str); // The icon for files and folders. enum { ICON_FILE, ICON_FOLDER_OPENED, ICON_FOLDER_CLOSED }; private: // A helper to construct the wxImageList used to hole the listview icons. void CreateImageList(); // Populate the tree control from a stored KML DOM object. void Populate(); // Helper for Populate. Walks a KML DOM container calling AppendFeature // for all children. void AppendContainer(const kmldom::ContainerPtr& container, wxTreeItemId parent_id); // Helper for Populate. Takes a KML DOM Feature and appends it to the // listview control. Checks if the Feature is a container, and calls // AppendContainer if so. void AppendFeature(const kmldom::FeaturePtr&, wxTreeItemId parent_id); // A smart pointer to a parsed KML DOM object. kmldom::ElementPtr kml_root_; DECLARE_EVENT_TABLE() }; // The main window frame. class MainFrame : public wxFrame { public: MainFrame(const wxString& title, wxWindowID id, const wxPoint& pos, const wxSize& size, long style); virtual ~MainFrame(); // Menu callbacks. void OnAbout(wxCommandEvent& event); void OnFileOpen(wxCommandEvent& event); void OnQuit(wxCommandEvent& event); // Fits the listview control to the size of the main window frame. void Resize(); private: wxPanel* panel_; ListView* listview_; DECLARE_EVENT_TABLE() }; // Menu and control IDs. enum { DIALOGS_FILE_OPEN = 1, // 0 is reserved. WINDOW_LISTVIEW, WINDOW_MAINWINDOW }; #endif // WXVIEWER_H__ libkml-1.3.0/examples/wxviewer/wxviewer.xcodeproj/000077500000000000000000000000001263603257100223445ustar00rootroot00000000000000libkml-1.3.0/examples/wxviewer/wxviewer.xcodeproj/project.pbxproj000066400000000000000000000211621263603257100254220ustar00rootroot00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 42; objects = { /* Begin PBXBuildFile section */ 69C962070DC7D26000A98182 /* wxviewer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 69C962050DC7D26000A98182 /* wxviewer.cc */; }; 69C9626A0DC8F4A800A98182 /* icon_file.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 69C962670DC8F4A800A98182 /* icon_file.xpm */; }; 69C9626B0DC8F4A800A98182 /* icon_folder_closed.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 69C962680DC8F4A800A98182 /* icon_folder_closed.xpm */; }; 69C9626C0DC8F4A800A98182 /* icon_folder_opened.xpm in Resources */ = {isa = PBXBuildFile; fileRef = 69C962690DC8F4A800A98182 /* icon_folder_opened.xpm */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 69C961FE0DC7D19B00A98182 /* wxviewer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = wxviewer.app; sourceTree = BUILT_PRODUCTS_DIR; }; 69C962010DC7D19B00A98182 /* wxviewer-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "wxviewer-Info.plist"; sourceTree = ""; }; 69C962050DC7D26000A98182 /* wxviewer.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = wxviewer.cc; sourceTree = ""; }; 69C962060DC7D26000A98182 /* wxviewer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = wxviewer.h; sourceTree = ""; }; 69C962670DC8F4A800A98182 /* icon_file.xpm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = icon_file.xpm; sourceTree = ""; }; 69C962680DC8F4A800A98182 /* icon_folder_closed.xpm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = icon_folder_closed.xpm; sourceTree = ""; }; 69C962690DC8F4A800A98182 /* icon_folder_opened.xpm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = icon_folder_opened.xpm; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 69C961FC0DC7D19B00A98182 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 69C961E20DC7D09700A98182 = { isa = PBXGroup; children = ( 69C962670DC8F4A800A98182 /* icon_file.xpm */, 69C962680DC8F4A800A98182 /* icon_folder_closed.xpm */, 69C962690DC8F4A800A98182 /* icon_folder_opened.xpm */, 69C962050DC7D26000A98182 /* wxviewer.cc */, 69C962060DC7D26000A98182 /* wxviewer.h */, 69C961FF0DC7D19B00A98182 /* Products */, 69C962010DC7D19B00A98182 /* wxviewer-Info.plist */, ); sourceTree = ""; }; 69C961FF0DC7D19B00A98182 /* Products */ = { isa = PBXGroup; children = ( 69C961FE0DC7D19B00A98182 /* wxviewer.app */, ); name = Products; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 69C961FD0DC7D19B00A98182 /* wxviewer */ = { isa = PBXNativeTarget; buildConfigurationList = 69C962020DC7D19C00A98182 /* Build configuration list for PBXNativeTarget "wxviewer" */; buildPhases = ( 69C961FA0DC7D19B00A98182 /* Resources */, 69C961FB0DC7D19B00A98182 /* Sources */, 69C961FC0DC7D19B00A98182 /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = wxviewer; productName = wxviewer; productReference = 69C961FE0DC7D19B00A98182 /* wxviewer.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 69C961E40DC7D09700A98182 /* Project object */ = { isa = PBXProject; buildConfigurationList = 69C961E50DC7D09700A98182 /* Build configuration list for PBXProject "wxviewer" */; compatibilityVersion = "Xcode 2.4"; hasScannedForEncodings = 0; mainGroup = 69C961E20DC7D09700A98182; productRefGroup = 69C961FF0DC7D19B00A98182 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 69C961FD0DC7D19B00A98182 /* wxviewer */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 69C961FA0DC7D19B00A98182 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 69C9626A0DC8F4A800A98182 /* icon_file.xpm in Resources */, 69C9626B0DC8F4A800A98182 /* icon_folder_closed.xpm in Resources */, 69C9626C0DC8F4A800A98182 /* icon_folder_opened.xpm in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 69C961FB0DC7D19B00A98182 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 69C962070DC7D26000A98182 /* wxviewer.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 69C961E60DC7D09700A98182 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; HEADER_SEARCH_PATHS = ( "$(inherited)", ., "/usr/local/include/wx-2.8", "/usr/local/lib/wx/include/mac-ansi-release-2.8", /usr/local/include/kml/third_party/boost_1_34_1, ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", /usr/local/lib, ); OTHER_CPLUSPLUSFLAGS = ( "$(inherited)", "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXMAC__", ); OTHER_LDFLAGS = "$(inherited)"; }; name = Debug; }; 69C961E70DC7D09700A98182 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", ., "/usr/local/include/wx-2.8", "/usr/local/lib/wx/include/mac-ansi-release-2.8", /usr/local/include/kml/third_party/boost_1_34_1, ); LIBRARY_SEARCH_PATHS = ( "$(inherited)", /usr/local/lib, ); OTHER_CPLUSPLUSFLAGS = ( "$(inherited)", "-D_FILE_OFFSET_BITS=64", "-D_LARGE_FILES", "-D__WXMAC__", ); OTHER_LDFLAGS = "$(inherited)"; }; name = Release; }; 69C962030DC7D19C00A98182 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = NO; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; INFOPLIST_FILE = "wxviewer-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; OTHER_LDFLAGS = ( "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-lwx_mac-2.8", "-lkmldom", "-lkmlbase", ); PREBINDING = NO; PRODUCT_NAME = wxviewer; WRAPPER_EXTENSION = app; ZERO_LINK = YES; }; name = Debug; }; 69C962040DC7D19C00A98182 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { COPY_PHASE_STRIP = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_GENERATE_DEBUGGING_SYMBOLS = NO; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; INFOPLIST_FILE = "wxviewer-Info.plist"; INSTALL_PATH = "$(HOME)/Applications"; OTHER_LDFLAGS = ( "-framework", IOKit, "-framework", Carbon, "-framework", Cocoa, "-framework", System, "-framework", QuickTime, "-lwx_mac-2.8", "-lkmldom", "-lkmlbase", ); PREBINDING = NO; PRODUCT_NAME = wxviewer; WRAPPER_EXTENSION = app; ZERO_LINK = NO; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 69C961E50DC7D09700A98182 /* Build configuration list for PBXProject "wxviewer" */ = { isa = XCConfigurationList; buildConfigurations = ( 69C961E60DC7D09700A98182 /* Debug */, 69C961E70DC7D09700A98182 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 69C962020DC7D19C00A98182 /* Build configuration list for PBXNativeTarget "wxviewer" */ = { isa = XCConfigurationList; buildConfigurations = ( 69C962030DC7D19C00A98182 /* Debug */, 69C962040DC7D19C00A98182 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 69C961E40DC7D09700A98182 /* Project object */; } libkml-1.3.0/examples/xsd/000077500000000000000000000000001263603257100154065ustar00rootroot00000000000000libkml-1.3.0/examples/xsd/CMakeLists.txt000066400000000000000000000001501263603257100201420ustar00rootroot00000000000000if(INSTALL_EXAMPLES) install(FILES domviewer.py DESTINATION examples/xsd) #compile py endif() libkml-1.3.0/examples/xsd/kml-aliases.txt000066400000000000000000000005371263603257100203560ustar00rootroot00000000000000alias AbstractColorStyleGroup ColorStyle alias AbstractContainerGroup Container alias AbstractFeatureGroup Feature alias AbstractGeometryGroup Geometry alias AbstractObjectGroup Object alias AbstractOverlayGroup Overlay alias AbstractStyleSelectorGroup StyleSelector alias AbstractTimePrimitiveGroup TimePrimitive alias AbstractViewGroup AbstractView libkml-1.3.0/examples/xsd/xsdchildren.cc000066400000000000000000000130751263603257100202320ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program prints the children of all complex elements and the enumeration // values of all enumerated simple elements in the XSD. #include #include #include "boost/scoped_ptr.hpp" #include "kml/base/file.h" #include "kml/xsd/xsd_complex_type.h" #include "kml/xsd/xsd_file.h" #include "kml/xsd/xsd_simple_type.h" #include "kml/xsd/xsd_util.h" #include "kml/xsd/xst_parser.h" using kmlbase::File; using kmlxsd::XsdComplexType; using kmlxsd::XsdComplexTypePtr; using kmlxsd::XsdElementPtr; using kmlxsd::XsdElementVector; using kmlxsd::XsdFile; using kmlxsd::XsdSimpleType; using kmlxsd::XsdSimpleTypePtr; using kmlxsd::XsdTypePtr; using kmlxsd::XstParser; using std::cerr; using std::cout; using std::endl; using std::vector; void PrintAlias(const XsdFile& xsd_file, const std::string& real_name) { const std::string alias = xsd_file.get_alias(real_name); cout << (alias.empty() ? real_name : alias); } // This prints each child of each complex element in this format: // parent_element_name element_type element_base child_element_name // For example: // "BalloonStyle string xsd:primitive text" // If the type is not known or if there is no base type "None": appears: // "Point coordinatesType None coordinates" static void PrintComplex(const std::string& parent_element_name, const XsdFile& xsd_file) { XsdElementVector children; xsd_file.GetChildElements(parent_element_name, &children); for (size_t i = 0; i < children.size(); ++i) { const XsdElementPtr& child_element = children[i]; // NOTE: child_element can be NULL for import'ed elements (atom:author). if (child_element && !child_element->get_name().empty()) { if (const XsdTypePtr child_type = xsd_file.FindElementType(child_element)) { const std::string child_type_base = child_type->get_base().empty() ? "None" : child_type->get_base(); PrintAlias(xsd_file, parent_element_name); cout << " " << child_type->get_name() << " " << child_type_base << " "; PrintAlias(xsd_file, child_element->get_name()); cout << endl; } } } } // This prints each possible enumeration value of each enumerated element: // "altitudeMode clampToGround" static void PrintEnum(const std::string& element_name, const XsdSimpleTypePtr& simple_type) { if (!simple_type->IsEnumeration()) { return; } size_t size = simple_type->get_enumeration_size(); for (size_t i = 0; i < size; ++i) { cout << element_name << " " << simple_type->get_enumeration_at(i) << endl; } } static void PrintChildren(const XsdFile& xsd_file, const XsdElementPtr parent_element) { const XsdTypePtr& xsd_type = xsd_file.FindElementType(parent_element); if (XsdComplexTypePtr complex_type = XsdComplexType::AsComplexType(xsd_type)) { PrintComplex(parent_element->get_name(), xsd_file); } else if (XsdSimpleTypePtr simple_type = XsdSimpleType::AsSimpleType(xsd_type)) { PrintEnum(parent_element->get_name(), simple_type); } } int main(int argc, char** argv) { if (argc != 2 && argc != 3) { cerr << "usage: " << argv[0] << " file.xsd [file.xst]" << endl; return 1; } const char* xsd_pathname = argv[1]; const char* xst_pathname = argc == 3 ? argv[2] : NULL; std::string xsd_data; if (!File::ReadFileToString(xsd_pathname, &xsd_data)) { cerr << "read failed " << xsd_pathname << endl; return 1; } std::string errors; boost::scoped_ptr xsd_file( XsdFile::CreateFromParse(xsd_data, &errors)); if (!xsd_file.get()) { cerr << "parse failed " << errors; return 1; } std::string xst_data; if (xst_pathname) { if (!File::ReadFileToString(xst_pathname, &xst_data)) { cerr << "read failed " << xst_pathname << endl; return 1; } XstParser xst_parser(xsd_file.get()); xst_parser.ParseXst(xst_data); } kmlxsd::XsdElementVector elements; xsd_file->GetAllElements(&elements); for (size_t i = 0; i < elements.size(); ++i) { PrintChildren(*xsd_file, elements[i]); } return 0; } libkml-1.3.0/examples/xsd/xsdcoverage.cc000066400000000000000000000077561263603257100202460ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program prints the elements not present in the given set of KML files. #include #include #include "boost/scoped_ptr.hpp" #include "kml/base/file.h" #include "kml/convenience/element_counter.h" #include "kml/dom/xsd.h" #include "kml/xsd/xsd_file.h" using kmlconvenience::ElementCountMap; using kmlconvenience::ElementCounter; using kmldom::KmlDomType; using kmldom::Parser; using kmldom::Xsd; using kmlxsd::XsdElementVector; using kmlxsd::XsdFile; using std::cerr; using std::cout; using std::endl; using std::vector; static bool GetConcreteElements(const char* xsd_pathname, XsdElementVector* elements) { std::string xsd_data; if (!kmlbase::File::ReadFileToString(xsd_pathname, &xsd_data)) { cerr << "read failed " << xsd_pathname << endl; return false; } std::string errors; boost::scoped_ptr xsd_file( XsdFile::CreateFromParse(xsd_data, &errors)); if (!xsd_file.get()) { cerr << "parse failed " << xsd_pathname << endl; cerr << errors << endl; return false; } xsd_file->GetComplexElements(elements); xsd_file->GetSimpleElements(elements); return true; } static bool ParseAndCountElements(const char* kml_pathname, ElementCountMap* element_count_map) { std::string kml_data; if (!kmlbase::File::ReadFileToString(kml_pathname, &kml_data)) { cerr << "read failed " << kml_pathname << endl; return false; } ElementCounter element_counter(element_count_map); Parser parser; parser.AddObserver(&element_counter); std::string errors; if (!parser.Parse(kml_data, &errors)) { cerr << "parse failed: " << kml_pathname << endl; cerr << errors << endl; return false; } return true; } int main(int argc, char** argv) { if (argc < 3) { cerr << "usage: " << argv[0] << " file.xsd file.kml..." << endl; return 1; } const char* xsd_pathname = argv[1]; XsdElementVector elements; if (!GetConcreteElements(xsd_pathname, &elements)) { return 1; } ElementCountMap element_count_map; for (argc -= 2, argv +=2; argc; --argc, ++argv) { ParseAndCountElements(*argv, &element_count_map); } for (size_t i = 0; i < elements.size(); ++i) { const std::string& element_name = elements[i]->get_name(); const KmlDomType kml_element_id = static_cast( Xsd::GetSchema()->ElementId(element_name)); if (element_count_map.find(kml_element_id) == element_count_map.end()) { cout << element_name << endl; } } return 0; } libkml-1.3.0/examples/xsd/xsdelements.cc000066400000000000000000000066671263603257100202670ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program prints the abstract, complex or simple elements of the XSD. #include #include #include "boost/scoped_ptr.hpp" #include "kml/base/file.h" #include "kml/xsd/xsd_file.h" #include "kml/xsd/xst_parser.h" using kmlxsd::XsdElementVector; using kmlxsd::XsdFile; using kmlxsd::XstParser; using std::cerr; using std::cout; using std::endl; using std::vector; static int usage(const char* app) { cerr << "usage: " << app << "abstract|complex|simple" << " file.xsd" << " [file.xst]" << endl; return 1; } int main(int argc, char** argv) { if (argc != 3 && argc != 4) { return usage(argv[0]); } const char which = argv[1][0]; const char* xsd_pathname = argv[2]; const char* xst_pathname = argc == 4 ? argv[3] : NULL; std::string xsd_data; if (!kmlbase::File::ReadFileToString(xsd_pathname, &xsd_data)) { cerr << "read failed " << xsd_pathname << endl; return 1; } std::string errors; boost::scoped_ptr xsd_file( XsdFile::CreateFromParse(xsd_data, &errors)); if (!xsd_file.get()) { cerr << "parse failed " << errors; return 1; } kmlxsd::XsdElementVector elements; switch (which) { case 'a': xsd_file->GetAbstractElements(&elements); break; case 'c': xsd_file->GetComplexElements(&elements); break; case 's': xsd_file->GetSimpleElements(&elements); break; default: return usage(argv[0]); } if (xst_pathname) { std::string xst_data; if (!kmlbase::File::ReadFileToString(xst_pathname, &xst_data)) { cerr << "read failed " << xst_pathname << endl; return 1; } XstParser xst_parser(xsd_file.get()); xst_parser.ParseXst(xst_data); } for (size_t i = 0; i < elements.size(); ++i) { const std::string& element_name = elements[i]->get_name(); std::string alias = xsd_file->get_alias(element_name); cout << (alias.empty() ? element_name : alias) << " " << elements[i]->get_type() << endl; } return 0; } libkml-1.3.0/examples/xsd/xsdenums.cc000066400000000000000000000060411263603257100175640ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program prints the enum values for each enum type in the XSD. #include #include #include "boost/scoped_ptr.hpp" #include "kml/base/file.h" #include "kml/xsd/xsd_file.h" using kmlxsd::XsdElementVector; using kmlxsd::XsdFile; using kmlxsd::XsdTypePtr; using kmlxsd::XsdSimpleType; using kmlxsd::XsdSimpleTypePtr; using std::cerr; using std::cout; using std::endl; using std::vector; static XsdSimpleTypePtr AsEnum(const XsdTypePtr& xsd_type) { const std::string type_base = xsd_type->get_base(); if (type_base.empty()) { return NULL; } return XsdSimpleType::AsSimpleType(xsd_type); } static void PrintEnum(const XsdTypePtr& xsd_type) { if (XsdSimpleTypePtr enum_type = AsEnum(xsd_type)) { for (size_t i = 0; i < enum_type->get_enumeration_size(); ++i) { cout << xsd_type->get_name() << " " << enum_type->get_enumeration_at(i) << endl; } } } int main(int argc, char** argv) { if (argc != 2) { cerr << "usage: " << argv[0] << " file.xsd" << endl; return 1; } const char* xsd_pathname = argv[1]; std::string xsd_data; if (!kmlbase::File::ReadFileToString(xsd_pathname, &xsd_data)) { cerr << "read failed " << xsd_pathname << endl; return 1; } std::string errors; boost::scoped_ptr xsd_file( XsdFile::CreateFromParse(xsd_data, &errors)); if (!xsd_file.get()) { cerr << "parse failed " << errors; return 1; } kmlxsd::XsdTypeVector types; xsd_file->GetAllTypes(&types); for (size_t i = 0; i < types.size(); ++i) { PrintEnum(types[i]); } return 0; } libkml-1.3.0/examples/xsd/xsdfind.cc000066400000000000000000000053701263603257100173610ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program prints all concrete elements of or derived from a given type. // For example, this prints all 7 concrete feature element names in KML: // xsdfind ogckml22.xsd AbstractFeatureType // (Get ogckml22.xsd from http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd). #include #include #include "boost/scoped_ptr.hpp" #include "kml/base/file.h" #include "kml/xsd/xsd_file.h" using std::cerr; using std::cout; using std::endl; int main(int argc, char** argv) { if (argc != 3) { cerr << "usage: " << argv[0] << " file.xsd type" << endl; return 1; } const char* xsd_pathname = argv[1]; const char* type_name = argv[2]; std::string xsd_data; if (!kmlbase::File::ReadFileToString(xsd_pathname, &xsd_data)) { cerr << "read failed " << xsd_pathname << endl; return 1; } std::string errors; boost::scoped_ptr xsd_file( kmlxsd::XsdFile::CreateFromParse(xsd_data, &errors)); if (!xsd_file.get()) { cerr << "parse failed " << errors; return 1; } kmlxsd::XsdElementVector elements; xsd_file->GetElementsOfTypeByName(type_name, &elements); for (size_t i = 0; i < elements.size(); ++i) { if (!elements[i]->is_abstract()) { cout << elements[i]->get_name() << endl; } } return 0; } libkml-1.3.0/examples/xsd/xsdtypes.cc000066400000000000000000000047331263603257100176070ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This program prints all the types defined in the XSD. #include #include #include "boost/scoped_ptr.hpp" #include "kml/base/file.h" #include "kml/xsd/xsd_file.h" using kmlxsd::XsdElementVector; using kmlxsd::XsdFile; using std::cerr; using std::cout; using std::endl; using std::vector; int main(int argc, char** argv) { if (argc != 2) { cerr << "usage: " << argv[0] << " file.xsd" << endl; return 1; } const char* xsd_pathname = argv[1]; std::string xsd_data; if (!kmlbase::File::ReadFileToString(xsd_pathname, &xsd_data)) { cerr << "read failed " << xsd_pathname << endl; return 1; } std::string errors; boost::scoped_ptr xsd_file( XsdFile::CreateFromParse(xsd_data, &errors)); if (!xsd_file.get()) { cerr << "parse failed " << errors; return 1; } kmlxsd::XsdTypeVector types; xsd_file->GetAllTypes(&types); for (size_t i = 0; i < types.size(); ++i) { cout << types[i]->get_name() << endl; } return 0; } libkml-1.3.0/iphone/000077500000000000000000000000001263603257100142545ustar00rootroot00000000000000libkml-1.3.0/iphone/LibKML/000077500000000000000000000000001263603257100153265ustar00rootroot00000000000000libkml-1.3.0/iphone/LibKML/LibKML.xcodeproj/000077500000000000000000000000001263603257100203745ustar00rootroot00000000000000libkml-1.3.0/iphone/LibKML/LibKML.xcodeproj/project.pbxproj000066400000000000000000005233471263603257100234660ustar00rootroot00000000000000// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 45; objects = { /* Begin PBXBuildFile section */ 3C87AF2210881A4000015660 /* mimetypes.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3C87AF2010881A4000015660 /* mimetypes.cc */; }; 3C87AF2310881A4000015660 /* mimetypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C87AF2110881A4000015660 /* mimetypes.h */; }; 8FEEE9371082BFEF0017FEB8 /* attributes.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7B81082BFEF0017FEB8 /* attributes.cc */; }; 8FEEE9381082BFEF0017FEB8 /* attributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7B91082BFEF0017FEB8 /* attributes.h */; }; 8FEEE9391082BFEF0017FEB8 /* attributes_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7BA1082BFEF0017FEB8 /* attributes_test.cc */; }; 8FEEE93A1082BFEF0017FEB8 /* color32.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7BB1082BFEF0017FEB8 /* color32.h */; }; 8FEEE93B1082BFEF0017FEB8 /* color32_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7BC1082BFEF0017FEB8 /* color32_test.cc */; }; 8FEEE93C1082BFEF0017FEB8 /* date_time.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7BD1082BFEF0017FEB8 /* date_time.cc */; }; 8FEEE93D1082BFEF0017FEB8 /* date_time.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7BE1082BFEF0017FEB8 /* date_time.h */; }; 8FEEE93E1082BFEF0017FEB8 /* date_time_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7BF1082BFEF0017FEB8 /* date_time_test.cc */; }; 8FEEE93F1082BFEF0017FEB8 /* expat_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7C01082BFEF0017FEB8 /* expat_handler.h */; }; 8FEEE9401082BFEF0017FEB8 /* expat_handler_ns.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7C11082BFEF0017FEB8 /* expat_handler_ns.cc */; }; 8FEEE9411082BFEF0017FEB8 /* expat_handler_ns.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7C21082BFEF0017FEB8 /* expat_handler_ns.h */; }; 8FEEE9421082BFEF0017FEB8 /* expat_handler_ns_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7C31082BFEF0017FEB8 /* expat_handler_ns_test.cc */; }; 8FEEE9431082BFEF0017FEB8 /* expat_parser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7C41082BFEF0017FEB8 /* expat_parser.cc */; }; 8FEEE9441082BFEF0017FEB8 /* expat_parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7C51082BFEF0017FEB8 /* expat_parser.h */; }; 8FEEE9451082BFEF0017FEB8 /* expat_parser_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7C61082BFEF0017FEB8 /* expat_parser_test.cc */; }; 8FEEE9461082BFEF0017FEB8 /* file.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7C71082BFEF0017FEB8 /* file.cc */; }; 8FEEE9471082BFEF0017FEB8 /* file.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7C81082BFEF0017FEB8 /* file.h */; }; 8FEEE9481082BFEF0017FEB8 /* file_posix.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7C91082BFEF0017FEB8 /* file_posix.cc */; }; 8FEEE9491082BFEF0017FEB8 /* file_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7CA1082BFEF0017FEB8 /* file_test.cc */; }; 8FEEE94B1082BFEF0017FEB8 /* google_internal_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7CC1082BFEF0017FEB8 /* google_internal_test.h */; }; 8FEEE94C1082BFEF0017FEB8 /* math_util.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7CE1082BFEF0017FEB8 /* math_util.cc */; }; 8FEEE94D1082BFEF0017FEB8 /* math_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7CF1082BFEF0017FEB8 /* math_util.h */; }; 8FEEE94E1082BFEF0017FEB8 /* math_util_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7D01082BFEF0017FEB8 /* math_util_test.cc */; }; 8FEEE94F1082BFEF0017FEB8 /* memory_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7D11082BFEF0017FEB8 /* memory_file.h */; }; 8FEEE9501082BFEF0017FEB8 /* net_cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7D21082BFEF0017FEB8 /* net_cache.h */; }; 8FEEE9511082BFEF0017FEB8 /* net_cache_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7D31082BFEF0017FEB8 /* net_cache_test.cc */; }; 8FEEE9521082BFEF0017FEB8 /* net_cache_test_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7D41082BFEF0017FEB8 /* net_cache_test_util.h */; }; 8FEEE9531082BFEF0017FEB8 /* referent.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7D51082BFEF0017FEB8 /* referent.cc */; }; 8FEEE9541082BFEF0017FEB8 /* referent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7D61082BFEF0017FEB8 /* referent.h */; }; 8FEEE9551082BFEF0017FEB8 /* referent_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7D71082BFEF0017FEB8 /* referent_test.cc */; }; 8FEEE9561082BFEF0017FEB8 /* string_util.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7D81082BFEF0017FEB8 /* string_util.cc */; }; 8FEEE9571082BFEF0017FEB8 /* string_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7D91082BFEF0017FEB8 /* string_util.h */; }; 8FEEE9581082BFEF0017FEB8 /* string_util_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7DA1082BFEF0017FEB8 /* string_util_test.cc */; }; 8FEEE9591082BFEF0017FEB8 /* tempfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7DB1082BFEF0017FEB8 /* tempfile.h */; }; 8FEEE95A1082BFEF0017FEB8 /* tempfile_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7DC1082BFEF0017FEB8 /* tempfile_test.cc */; }; 8FEEE95B1082BFEF0017FEB8 /* time_util.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7DD1082BFEF0017FEB8 /* time_util.cc */; }; 8FEEE95C1082BFEF0017FEB8 /* time_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7DE1082BFEF0017FEB8 /* time_util.h */; }; 8FEEE95D1082BFEF0017FEB8 /* time_util_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7DF1082BFEF0017FEB8 /* time_util_test.cc */; }; 8FEEE95E1082BFEF0017FEB8 /* unit_test.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7E01082BFEF0017FEB8 /* unit_test.h */; }; 8FEEE95F1082BFEF0017FEB8 /* uri_parser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7E11082BFEF0017FEB8 /* uri_parser.cc */; }; 8FEEE9601082BFEF0017FEB8 /* uri_parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7E21082BFEF0017FEB8 /* uri_parser.h */; }; 8FEEE9611082BFEF0017FEB8 /* uri_parser_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7E31082BFEF0017FEB8 /* uri_parser_test.cc */; }; 8FEEE9621082BFEF0017FEB8 /* util.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7E41082BFEF0017FEB8 /* util.h */; }; 8FEEE9631082BFEF0017FEB8 /* util_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7E51082BFEF0017FEB8 /* util_test.cc */; }; 8FEEE9641082BFEF0017FEB8 /* vec3.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7E61082BFEF0017FEB8 /* vec3.h */; }; 8FEEE9651082BFEF0017FEB8 /* vec3_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7E71082BFEF0017FEB8 /* vec3_test.cc */; }; 8FEEE9661082BFEF0017FEB8 /* version.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7E81082BFEF0017FEB8 /* version.cc */; }; 8FEEE9671082BFEF0017FEB8 /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7E91082BFEF0017FEB8 /* version.h */; }; 8FEEE9681082BFEF0017FEB8 /* version_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7EA1082BFEF0017FEB8 /* version_test.cc */; }; 8FEEE9691082BFEF0017FEB8 /* xml_element.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7EB1082BFEF0017FEB8 /* xml_element.h */; }; 8FEEE96A1082BFEF0017FEB8 /* xml_element_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7EC1082BFEF0017FEB8 /* xml_element_test.cc */; }; 8FEEE96B1082BFEF0017FEB8 /* xml_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7ED1082BFEF0017FEB8 /* xml_file.h */; }; 8FEEE96C1082BFEF0017FEB8 /* xml_file_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7EE1082BFEF0017FEB8 /* xml_file_test.cc */; }; 8FEEE96D1082BFEF0017FEB8 /* xml_namespaces.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7EF1082BFEF0017FEB8 /* xml_namespaces.cc */; }; 8FEEE96E1082BFEF0017FEB8 /* xml_namespaces.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7F01082BFEF0017FEB8 /* xml_namespaces.h */; }; 8FEEE96F1082BFEF0017FEB8 /* xml_namespaces_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7F11082BFEF0017FEB8 /* xml_namespaces_test.cc */; }; 8FEEE9701082BFEF0017FEB8 /* xmlns.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7F21082BFEF0017FEB8 /* xmlns.h */; }; 8FEEE9711082BFEF0017FEB8 /* xmlns_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7F31082BFEF0017FEB8 /* xmlns_test.cc */; }; 8FEEE9721082BFEF0017FEB8 /* zip_file.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7F41082BFEF0017FEB8 /* zip_file.cc */; }; 8FEEE9731082BFEF0017FEB8 /* zip_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7F51082BFEF0017FEB8 /* zip_file.h */; }; 8FEEE9741082BFEF0017FEB8 /* zip_file_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7F61082BFEF0017FEB8 /* zip_file_test.cc */; }; 8FEEE9751082BFEF0017FEB8 /* atom_util.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7F81082BFEF0017FEB8 /* atom_util.cc */; }; 8FEEE9761082BFEF0017FEB8 /* atom_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7F91082BFEF0017FEB8 /* atom_util.h */; }; 8FEEE9771082BFEF0017FEB8 /* atom_util_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7FA1082BFEF0017FEB8 /* atom_util_test.cc */; }; 8FEEE9781082BFEF0017FEB8 /* convenience.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7FB1082BFEF0017FEB8 /* convenience.cc */; }; 8FEEE9791082BFEF0017FEB8 /* convenience.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7FC1082BFEF0017FEB8 /* convenience.h */; }; 8FEEE97A1082BFEF0017FEB8 /* convenience_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7FD1082BFEF0017FEB8 /* convenience_test.cc */; }; 8FEEE97B1082BFEF0017FEB8 /* csv_file.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE7FE1082BFEF0017FEB8 /* csv_file.cc */; }; 8FEEE97C1082BFEF0017FEB8 /* csv_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE7FF1082BFEF0017FEB8 /* csv_file.h */; }; 8FEEE97D1082BFEF0017FEB8 /* csv_file_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8001082BFEF0017FEB8 /* csv_file_test.cc */; }; 8FEEE97E1082BFEF0017FEB8 /* element_counter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8011082BFEF0017FEB8 /* element_counter.h */; }; 8FEEE97F1082BFEF0017FEB8 /* element_counter_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8021082BFEF0017FEB8 /* element_counter_test.cc */; }; 8FEEE9801082BFEF0017FEB8 /* feature_list.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8031082BFEF0017FEB8 /* feature_list.cc */; }; 8FEEE9811082BFEF0017FEB8 /* feature_list.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8041082BFEF0017FEB8 /* feature_list.h */; }; 8FEEE9821082BFEF0017FEB8 /* feature_list_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8051082BFEF0017FEB8 /* feature_list_test.cc */; }; 8FEEE9831082BFEF0017FEB8 /* google_maps_data.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8061082BFEF0017FEB8 /* google_maps_data.cc */; }; 8FEEE9841082BFEF0017FEB8 /* google_maps_data.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8071082BFEF0017FEB8 /* google_maps_data.h */; }; 8FEEE9851082BFEF0017FEB8 /* google_maps_data_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8081082BFEF0017FEB8 /* google_maps_data_test.cc */; }; 8FEEE9861082BFEF0017FEB8 /* gpx_trk_pt_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8091082BFEF0017FEB8 /* gpx_trk_pt_handler.h */; }; 8FEEE9871082BFEF0017FEB8 /* gpx_trk_pt_handler_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE80A1082BFEF0017FEB8 /* gpx_trk_pt_handler_test.cc */; }; 8FEEE9881082BFEF0017FEB8 /* http_client.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE80B1082BFEF0017FEB8 /* http_client.cc */; }; 8FEEE9891082BFEF0017FEB8 /* http_client.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE80C1082BFEF0017FEB8 /* http_client.h */; }; 8FEEE98A1082BFEF0017FEB8 /* http_client_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE80D1082BFEF0017FEB8 /* http_client_test.cc */; }; 8FEEE98B1082BFEF0017FEB8 /* kmz_check_links.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE80E1082BFEF0017FEB8 /* kmz_check_links.cc */; }; 8FEEE98C1082BFEF0017FEB8 /* kmz_check_links.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE80F1082BFEF0017FEB8 /* kmz_check_links.h */; }; 8FEEE98D1082BFEF0017FEB8 /* kmz_check_links_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8101082BFEF0017FEB8 /* kmz_check_links_test.cc */; }; 8FEEE98E1082BFEF0017FEB8 /* abstractlatlonbox.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8131082BFEF0017FEB8 /* abstractlatlonbox.cc */; }; 8FEEE98F1082BFEF0017FEB8 /* abstractlatlonbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8141082BFEF0017FEB8 /* abstractlatlonbox.h */; }; 8FEEE9901082BFEF0017FEB8 /* abstractlatlonbox_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8151082BFEF0017FEB8 /* abstractlatlonbox_test.cc */; }; 8FEEE9911082BFEF0017FEB8 /* abstractview.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8161082BFEF0017FEB8 /* abstractview.cc */; }; 8FEEE9921082BFEF0017FEB8 /* abstractview.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8171082BFEF0017FEB8 /* abstractview.h */; }; 8FEEE9931082BFEF0017FEB8 /* abstractview_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8181082BFEF0017FEB8 /* abstractview_test.cc */; }; 8FEEE9941082BFEF0017FEB8 /* atom.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8191082BFEF0017FEB8 /* atom.cc */; }; 8FEEE9951082BFEF0017FEB8 /* atom.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE81A1082BFEF0017FEB8 /* atom.h */; }; 8FEEE9961082BFEF0017FEB8 /* atom_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE81B1082BFEF0017FEB8 /* atom_test.cc */; }; 8FEEE9971082BFEF0017FEB8 /* balloonstyle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE81C1082BFEF0017FEB8 /* balloonstyle.cc */; }; 8FEEE9981082BFEF0017FEB8 /* balloonstyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE81D1082BFEF0017FEB8 /* balloonstyle.h */; }; 8FEEE9991082BFEF0017FEB8 /* balloonstyle_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE81E1082BFEF0017FEB8 /* balloonstyle_test.cc */; }; 8FEEE99A1082BFEF0017FEB8 /* colorstyle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE81F1082BFEF0017FEB8 /* colorstyle.cc */; }; 8FEEE99B1082BFEF0017FEB8 /* colorstyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8201082BFEF0017FEB8 /* colorstyle.h */; }; 8FEEE99C1082BFEF0017FEB8 /* colorstyle_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8211082BFEF0017FEB8 /* colorstyle_test.cc */; }; 8FEEE99D1082BFEF0017FEB8 /* container.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8221082BFEF0017FEB8 /* container.cc */; }; 8FEEE99E1082BFEF0017FEB8 /* container.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8231082BFEF0017FEB8 /* container.h */; }; 8FEEE99F1082BFEF0017FEB8 /* container_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8241082BFEF0017FEB8 /* container_test.cc */; }; 8FEEE9A01082BFEF0017FEB8 /* document.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8251082BFEF0017FEB8 /* document.cc */; }; 8FEEE9A11082BFEF0017FEB8 /* document.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8261082BFEF0017FEB8 /* document.h */; }; 8FEEE9A21082BFEF0017FEB8 /* document_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8271082BFEF0017FEB8 /* document_test.cc */; }; 8FEEE9A31082BFEF0017FEB8 /* element.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8281082BFEF0017FEB8 /* element.cc */; }; 8FEEE9A41082BFEF0017FEB8 /* element.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8291082BFEF0017FEB8 /* element.h */; }; 8FEEE9A51082BFEF0017FEB8 /* element_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE82A1082BFEF0017FEB8 /* element_test.cc */; }; 8FEEE9A61082BFEF0017FEB8 /* extendeddata.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE82B1082BFEF0017FEB8 /* extendeddata.cc */; }; 8FEEE9A71082BFEF0017FEB8 /* extendeddata.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE82C1082BFEF0017FEB8 /* extendeddata.h */; }; 8FEEE9A81082BFEF0017FEB8 /* extendeddata_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE82D1082BFEF0017FEB8 /* extendeddata_test.cc */; }; 8FEEE9A91082BFEF0017FEB8 /* feature.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE82E1082BFEF0017FEB8 /* feature.cc */; }; 8FEEE9AA1082BFEF0017FEB8 /* feature.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE82F1082BFEF0017FEB8 /* feature.h */; }; 8FEEE9AB1082BFEF0017FEB8 /* feature_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8301082BFEF0017FEB8 /* feature_test.cc */; }; 8FEEE9AC1082BFEF0017FEB8 /* folder.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8311082BFEF0017FEB8 /* folder.cc */; }; 8FEEE9AD1082BFEF0017FEB8 /* folder.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8321082BFEF0017FEB8 /* folder.h */; }; 8FEEE9AE1082BFEF0017FEB8 /* folder_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8331082BFEF0017FEB8 /* folder_test.cc */; }; 8FEEE9AF1082BFEF0017FEB8 /* geometry.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8341082BFEF0017FEB8 /* geometry.cc */; }; 8FEEE9B01082BFEF0017FEB8 /* geometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8351082BFEF0017FEB8 /* geometry.h */; }; 8FEEE9B11082BFEF0017FEB8 /* geometry_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8361082BFEF0017FEB8 /* geometry_test.cc */; }; 8FEEE9B21082BFEF0017FEB8 /* gx_timeprimitive.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8371082BFEF0017FEB8 /* gx_timeprimitive.h */; }; 8FEEE9B31082BFEF0017FEB8 /* gx_timeprimitive_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8381082BFEF0017FEB8 /* gx_timeprimitive_test.cc */; }; 8FEEE9B41082BFEF0017FEB8 /* gx_tour.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8391082BFEF0017FEB8 /* gx_tour.cc */; }; 8FEEE9B51082BFEF0017FEB8 /* gx_tour.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE83A1082BFEF0017FEB8 /* gx_tour.h */; }; 8FEEE9B61082BFEF0017FEB8 /* gx_tour_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE83B1082BFEF0017FEB8 /* gx_tour_test.cc */; }; 8FEEE9B71082BFEF0017FEB8 /* hotspot.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE83C1082BFEF0017FEB8 /* hotspot.cc */; }; 8FEEE9B81082BFEF0017FEB8 /* hotspot.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE83D1082BFEF0017FEB8 /* hotspot.h */; }; 8FEEE9B91082BFEF0017FEB8 /* hotspot_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE83E1082BFEF0017FEB8 /* hotspot_test.cc */; }; 8FEEE9BA1082BFEF0017FEB8 /* iconstyle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE83F1082BFEF0017FEB8 /* iconstyle.cc */; }; 8FEEE9BB1082BFEF0017FEB8 /* iconstyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8401082BFEF0017FEB8 /* iconstyle.h */; }; 8FEEE9BC1082BFEF0017FEB8 /* iconstyle_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8411082BFEF0017FEB8 /* iconstyle_test.cc */; }; 8FEEE9BD1082BFEF0017FEB8 /* kml.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8421082BFEF0017FEB8 /* kml.cc */; }; 8FEEE9BE1082BFEF0017FEB8 /* kml.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8431082BFEF0017FEB8 /* kml.h */; }; 8FEEE9C01082BFEF0017FEB8 /* kml22.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8451082BFEF0017FEB8 /* kml22.h */; }; 8FEEE9C11082BFEF0017FEB8 /* kml22_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8461082BFEF0017FEB8 /* kml22_test.cc */; }; 8FEEE9C21082BFEF0017FEB8 /* kml_cast.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8471082BFEF0017FEB8 /* kml_cast.cc */; }; 8FEEE9C31082BFEF0017FEB8 /* kml_cast.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8481082BFEF0017FEB8 /* kml_cast.h */; }; 8FEEE9C41082BFEF0017FEB8 /* kml_cast_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8491082BFEF0017FEB8 /* kml_cast_test.cc */; }; 8FEEE9C51082BFEF0017FEB8 /* kml_factory.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE84A1082BFEF0017FEB8 /* kml_factory.cc */; }; 8FEEE9C61082BFEF0017FEB8 /* kml_factory.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE84B1082BFEF0017FEB8 /* kml_factory.h */; }; 8FEEE9C71082BFEF0017FEB8 /* kml_factory_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE84C1082BFEF0017FEB8 /* kml_factory_test.cc */; }; 8FEEE9C81082BFEF0017FEB8 /* kml_funcs.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE84D1082BFEF0017FEB8 /* kml_funcs.h */; }; 8FEEE9C91082BFEF0017FEB8 /* kml_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE84E1082BFEF0017FEB8 /* kml_handler.cc */; }; 8FEEE9CA1082BFEF0017FEB8 /* kml_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE84F1082BFEF0017FEB8 /* kml_handler.h */; }; 8FEEE9CB1082BFEF0017FEB8 /* kml_handler_ns.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8501082BFEF0017FEB8 /* kml_handler_ns.cc */; }; 8FEEE9CC1082BFEF0017FEB8 /* kml_handler_ns.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8511082BFEF0017FEB8 /* kml_handler_ns.h */; }; 8FEEE9CD1082BFEF0017FEB8 /* kml_handler_ns_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8521082BFEF0017FEB8 /* kml_handler_ns_test.cc */; }; 8FEEE9CE1082BFEF0017FEB8 /* kml_handler_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8531082BFEF0017FEB8 /* kml_handler_test.cc */; }; 8FEEE9CF1082BFEF0017FEB8 /* kml_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8541082BFEF0017FEB8 /* kml_ptr.h */; }; 8FEEE9D01082BFEF0017FEB8 /* kml_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8551082BFEF0017FEB8 /* kml_test.cc */; }; 8FEEE9D11082BFEF0017FEB8 /* kmldom.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8561082BFEF0017FEB8 /* kmldom.h */; }; 8FEEE9D21082BFEF0017FEB8 /* labelstyle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8571082BFEF0017FEB8 /* labelstyle.cc */; }; 8FEEE9D31082BFEF0017FEB8 /* labelstyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8581082BFEF0017FEB8 /* labelstyle.h */; }; 8FEEE9D41082BFEF0017FEB8 /* labelstyle_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8591082BFEF0017FEB8 /* labelstyle_test.cc */; }; 8FEEE9D51082BFEF0017FEB8 /* linestyle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE85A1082BFEF0017FEB8 /* linestyle.cc */; }; 8FEEE9D61082BFEF0017FEB8 /* linestyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE85B1082BFEF0017FEB8 /* linestyle.h */; }; 8FEEE9D71082BFEF0017FEB8 /* linestyle_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE85C1082BFEF0017FEB8 /* linestyle_test.cc */; }; 8FEEE9D81082BFEF0017FEB8 /* link.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE85D1082BFEF0017FEB8 /* link.cc */; }; 8FEEE9D91082BFEF0017FEB8 /* link.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE85E1082BFEF0017FEB8 /* link.h */; }; 8FEEE9DA1082BFEF0017FEB8 /* link_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE85F1082BFEF0017FEB8 /* link_test.cc */; }; 8FEEE9DB1082BFEF0017FEB8 /* liststyle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8601082BFEF0017FEB8 /* liststyle.cc */; }; 8FEEE9DC1082BFEF0017FEB8 /* liststyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8611082BFEF0017FEB8 /* liststyle.h */; }; 8FEEE9DD1082BFEF0017FEB8 /* liststyle_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8621082BFEF0017FEB8 /* liststyle_test.cc */; }; 8FEEE9DE1082BFEF0017FEB8 /* model.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8641082BFEF0017FEB8 /* model.cc */; }; 8FEEE9DF1082BFEF0017FEB8 /* model.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8651082BFEF0017FEB8 /* model.h */; }; 8FEEE9E01082BFEF0017FEB8 /* model_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8661082BFEF0017FEB8 /* model_test.cc */; }; 8FEEE9E11082BFEF0017FEB8 /* networklink.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8671082BFEF0017FEB8 /* networklink.cc */; }; 8FEEE9E21082BFEF0017FEB8 /* networklink.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8681082BFEF0017FEB8 /* networklink.h */; }; 8FEEE9E31082BFEF0017FEB8 /* networklink_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8691082BFEF0017FEB8 /* networklink_test.cc */; }; 8FEEE9E41082BFEF0017FEB8 /* networklinkcontrol.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE86A1082BFEF0017FEB8 /* networklinkcontrol.cc */; }; 8FEEE9E51082BFEF0017FEB8 /* networklinkcontrol.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE86B1082BFEF0017FEB8 /* networklinkcontrol.h */; }; 8FEEE9E61082BFEF0017FEB8 /* networklinkcontrol_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE86C1082BFEF0017FEB8 /* networklinkcontrol_test.cc */; }; 8FEEE9E71082BFEF0017FEB8 /* object.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE86D1082BFEF0017FEB8 /* object.cc */; }; 8FEEE9E81082BFEF0017FEB8 /* object.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE86E1082BFEF0017FEB8 /* object.h */; }; 8FEEE9E91082BFEF0017FEB8 /* object_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE86F1082BFEF0017FEB8 /* object_test.cc */; }; 8FEEE9EA1082BFEF0017FEB8 /* overlay.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8701082BFEF0017FEB8 /* overlay.cc */; }; 8FEEE9EB1082BFEF0017FEB8 /* overlay.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8711082BFEF0017FEB8 /* overlay.h */; }; 8FEEE9EC1082BFEF0017FEB8 /* overlay_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8721082BFEF0017FEB8 /* overlay_test.cc */; }; 8FEEE9ED1082BFEF0017FEB8 /* parser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8731082BFEF0017FEB8 /* parser.cc */; }; 8FEEE9EE1082BFEF0017FEB8 /* parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8741082BFEF0017FEB8 /* parser.h */; }; 8FEEE9EF1082BFEF0017FEB8 /* parser_observer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8751082BFEF0017FEB8 /* parser_observer.h */; }; 8FEEE9F01082BFEF0017FEB8 /* parser_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8761082BFEF0017FEB8 /* parser_test.cc */; }; 8FEEE9F11082BFEF0017FEB8 /* placemark.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8771082BFEF0017FEB8 /* placemark.cc */; }; 8FEEE9F21082BFEF0017FEB8 /* placemark.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8781082BFEF0017FEB8 /* placemark.h */; }; 8FEEE9F31082BFEF0017FEB8 /* placemark_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8791082BFEF0017FEB8 /* placemark_test.cc */; }; 8FEEE9F41082BFEF0017FEB8 /* polystyle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE87A1082BFEF0017FEB8 /* polystyle.cc */; }; 8FEEE9F51082BFEF0017FEB8 /* polystyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE87B1082BFEF0017FEB8 /* polystyle.h */; }; 8FEEE9F61082BFEF0017FEB8 /* polystyle_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE87C1082BFEF0017FEB8 /* polystyle_test.cc */; }; 8FEEE9F71082BFEF0017FEB8 /* region.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE87D1082BFEF0017FEB8 /* region.cc */; }; 8FEEE9F81082BFEF0017FEB8 /* region.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE87E1082BFEF0017FEB8 /* region.h */; }; 8FEEE9F91082BFEF0017FEB8 /* region_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE87F1082BFEF0017FEB8 /* region_test.cc */; }; 8FEEE9FA1082BFEF0017FEB8 /* round_trip_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8801082BFEF0017FEB8 /* round_trip_test.cc */; }; 8FEEE9FB1082BFEF0017FEB8 /* schema.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8811082BFEF0017FEB8 /* schema.cc */; }; 8FEEE9FC1082BFEF0017FEB8 /* schema.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8821082BFEF0017FEB8 /* schema.h */; }; 8FEEE9FD1082BFEF0017FEB8 /* schema_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8831082BFEF0017FEB8 /* schema_test.cc */; }; 8FEEE9FE1082BFEF0017FEB8 /* serializer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8841082BFEF0017FEB8 /* serializer.cc */; }; 8FEEE9FF1082BFEF0017FEB8 /* serializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8851082BFEF0017FEB8 /* serializer.h */; }; 8FEEEA001082BFEF0017FEB8 /* serializer_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8861082BFEF0017FEB8 /* serializer_test.cc */; }; 8FEEEA011082BFEF0017FEB8 /* snippet.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8871082BFEF0017FEB8 /* snippet.cc */; }; 8FEEEA021082BFEF0017FEB8 /* snippet.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8881082BFEF0017FEB8 /* snippet.h */; }; 8FEEEA031082BFEF0017FEB8 /* snippet_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8891082BFEF0017FEB8 /* snippet_test.cc */; }; 8FEEEA041082BFEF0017FEB8 /* stats_serializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE88A1082BFEF0017FEB8 /* stats_serializer.h */; }; 8FEEEA051082BFEF0017FEB8 /* style.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE88B1082BFEF0017FEB8 /* style.cc */; }; 8FEEEA061082BFEF0017FEB8 /* style.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE88C1082BFEF0017FEB8 /* style.h */; }; 8FEEEA071082BFEF0017FEB8 /* style_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE88D1082BFEF0017FEB8 /* style_test.cc */; }; 8FEEEA081082BFEF0017FEB8 /* stylemap.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE88E1082BFEF0017FEB8 /* stylemap.cc */; }; 8FEEEA091082BFEF0017FEB8 /* stylemap.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE88F1082BFEF0017FEB8 /* stylemap.h */; }; 8FEEEA0A1082BFEF0017FEB8 /* stylemap_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8901082BFEF0017FEB8 /* stylemap_test.cc */; }; 8FEEEA0B1082BFEF0017FEB8 /* styleselector.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8911082BFEF0017FEB8 /* styleselector.cc */; }; 8FEEEA0C1082BFEF0017FEB8 /* styleselector.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8921082BFEF0017FEB8 /* styleselector.h */; }; 8FEEEA0D1082BFEF0017FEB8 /* styleselector_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8931082BFEF0017FEB8 /* styleselector_test.cc */; }; 8FEEEA0E1082BFEF0017FEB8 /* substyle.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8941082BFEF0017FEB8 /* substyle.cc */; }; 8FEEEA0F1082BFEF0017FEB8 /* substyle.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8951082BFEF0017FEB8 /* substyle.h */; }; 8FEEEA101082BFEF0017FEB8 /* substyle_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8961082BFEF0017FEB8 /* substyle_test.cc */; }; 8FEEEA111082BFEF0017FEB8 /* timeprimitive.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8971082BFEF0017FEB8 /* timeprimitive.cc */; }; 8FEEEA121082BFEF0017FEB8 /* timeprimitive.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8981082BFEF0017FEB8 /* timeprimitive.h */; }; 8FEEEA131082BFEF0017FEB8 /* timeprimitive_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8991082BFEF0017FEB8 /* timeprimitive_test.cc */; }; 8FEEEA141082BFEF0017FEB8 /* unknown_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE89A1082BFEF0017FEB8 /* unknown_test.cc */; }; 8FEEEA151082BFEF0017FEB8 /* vec2.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE89B1082BFEF0017FEB8 /* vec2.cc */; }; 8FEEEA161082BFEF0017FEB8 /* vec2.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE89C1082BFEF0017FEB8 /* vec2.h */; }; 8FEEEA171082BFEF0017FEB8 /* vec2_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE89D1082BFEF0017FEB8 /* vec2_test.cc */; }; 8FEEEA181082BFEF0017FEB8 /* xal.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE89E1082BFEF0017FEB8 /* xal.cc */; }; 8FEEEA191082BFEF0017FEB8 /* xal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE89F1082BFEF0017FEB8 /* xal.h */; }; 8FEEEA1A1082BFEF0017FEB8 /* xal_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8A01082BFEF0017FEB8 /* xal_test.cc */; }; 8FEEEA1B1082BFEF0017FEB8 /* xml_serializer.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8A11082BFEF0017FEB8 /* xml_serializer.cc */; }; 8FEEEA1C1082BFEF0017FEB8 /* xml_serializer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8A21082BFEF0017FEB8 /* xml_serializer.h */; }; 8FEEEA1D1082BFEF0017FEB8 /* xml_serializer_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8A31082BFEF0017FEB8 /* xml_serializer_test.cc */; }; 8FEEEA1E1082BFEF0017FEB8 /* xsd.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8A41082BFEF0017FEB8 /* xsd.cc */; }; 8FEEEA1F1082BFEF0017FEB8 /* xsd.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8A51082BFEF0017FEB8 /* xsd.h */; }; 8FEEEA201082BFEF0017FEB8 /* xsd_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8A61082BFEF0017FEB8 /* xsd_test.cc */; }; 8FEEEA211082BFEF0017FEB8 /* dom.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8A71082BFEF0017FEB8 /* dom.h */; }; 8FEEEA221082BFEF0017FEB8 /* bbox.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8A91082BFEF0017FEB8 /* bbox.h */; }; 8FEEEA231082BFEF0017FEB8 /* bbox_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8AA1082BFEF0017FEB8 /* bbox_test.cc */; }; 8FEEEA241082BFEF0017FEB8 /* clone.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8AB1082BFEF0017FEB8 /* clone.cc */; }; 8FEEEA251082BFEF0017FEB8 /* clone.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8AC1082BFEF0017FEB8 /* clone.h */; }; 8FEEEA261082BFEF0017FEB8 /* clone_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8AD1082BFEF0017FEB8 /* clone_test.cc */; }; 8FEEEA271082BFEF0017FEB8 /* engine_constants.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8AE1082BFEF0017FEB8 /* engine_constants.h */; }; 8FEEEA281082BFEF0017FEB8 /* engine_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8AF1082BFEF0017FEB8 /* engine_types.h */; }; 8FEEEA291082BFEF0017FEB8 /* entity_mapper.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8B01082BFEF0017FEB8 /* entity_mapper.cc */; }; 8FEEEA2A1082BFEF0017FEB8 /* entity_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8B11082BFEF0017FEB8 /* entity_mapper.h */; }; 8FEEEA2B1082BFEF0017FEB8 /* entity_mapper_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8B21082BFEF0017FEB8 /* entity_mapper_test.cc */; }; 8FEEEA2C1082BFEF0017FEB8 /* feature_balloon.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8B31082BFEF0017FEB8 /* feature_balloon.cc */; }; 8FEEEA2D1082BFEF0017FEB8 /* feature_balloon.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8B41082BFEF0017FEB8 /* feature_balloon.h */; }; 8FEEEA2E1082BFEF0017FEB8 /* feature_balloon_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8B51082BFEF0017FEB8 /* feature_balloon_test.cc */; }; 8FEEEA2F1082BFEF0017FEB8 /* feature_view.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8B61082BFEF0017FEB8 /* feature_view.cc */; }; 8FEEEA301082BFEF0017FEB8 /* feature_view.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8B71082BFEF0017FEB8 /* feature_view.h */; }; 8FEEEA311082BFEF0017FEB8 /* feature_view_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8B81082BFEF0017FEB8 /* feature_view_test.cc */; }; 8FEEEA321082BFEF0017FEB8 /* feature_visitor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8B91082BFEF0017FEB8 /* feature_visitor.cc */; }; 8FEEEA331082BFEF0017FEB8 /* feature_visitor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8BA1082BFEF0017FEB8 /* feature_visitor.h */; }; 8FEEEA341082BFEF0017FEB8 /* feature_visitor_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8BB1082BFEF0017FEB8 /* feature_visitor_test.cc */; }; 8FEEEA351082BFEF0017FEB8 /* find.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8BC1082BFEF0017FEB8 /* find.cc */; }; 8FEEEA361082BFEF0017FEB8 /* find.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8BD1082BFEF0017FEB8 /* find.h */; }; 8FEEEA371082BFEF0017FEB8 /* find_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8BE1082BFEF0017FEB8 /* find_test.cc */; }; 8FEEEA381082BFEF0017FEB8 /* find_xml_namespaces.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8BF1082BFEF0017FEB8 /* find_xml_namespaces.cc */; }; 8FEEEA391082BFEF0017FEB8 /* find_xml_namespaces.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8C01082BFEF0017FEB8 /* find_xml_namespaces.h */; }; 8FEEEA3A1082BFEF0017FEB8 /* find_xml_namespaces_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8C11082BFEF0017FEB8 /* find_xml_namespaces_test.cc */; }; 8FEEEA3B1082BFEF0017FEB8 /* get_link_parents.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8C21082BFEF0017FEB8 /* get_link_parents.cc */; }; 8FEEEA3C1082BFEF0017FEB8 /* get_link_parents.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8C31082BFEF0017FEB8 /* get_link_parents.h */; }; 8FEEEA3D1082BFEF0017FEB8 /* get_link_parents_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8C41082BFEF0017FEB8 /* get_link_parents_test.cc */; }; 8FEEEA3E1082BFEF0017FEB8 /* get_links.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8C51082BFEF0017FEB8 /* get_links.cc */; }; 8FEEEA3F1082BFEF0017FEB8 /* get_links.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8C61082BFEF0017FEB8 /* get_links.h */; }; 8FEEEA401082BFEF0017FEB8 /* get_links_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8C71082BFEF0017FEB8 /* get_links_test.cc */; }; 8FEEEA411082BFEF0017FEB8 /* href.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8C81082BFEF0017FEB8 /* href.cc */; }; 8FEEEA421082BFEF0017FEB8 /* href.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8C91082BFEF0017FEB8 /* href.h */; }; 8FEEEA431082BFEF0017FEB8 /* href_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8CA1082BFEF0017FEB8 /* href_test.cc */; }; 8FEEEA441082BFEF0017FEB8 /* id_mapper.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8CB1082BFEF0017FEB8 /* id_mapper.cc */; }; 8FEEEA451082BFEF0017FEB8 /* id_mapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8CC1082BFEF0017FEB8 /* id_mapper.h */; }; 8FEEEA461082BFEF0017FEB8 /* id_mapper_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8CD1082BFEF0017FEB8 /* id_mapper_internal.h */; }; 8FEEEA471082BFEF0017FEB8 /* id_mapper_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8CE1082BFEF0017FEB8 /* id_mapper_test.cc */; }; 8FEEEA481082BFEF0017FEB8 /* kml_cache.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8CF1082BFEF0017FEB8 /* kml_cache.cc */; }; 8FEEEA491082BFEF0017FEB8 /* kml_cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8D01082BFEF0017FEB8 /* kml_cache.h */; }; 8FEEEA4A1082BFEF0017FEB8 /* kml_cache_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8D11082BFEF0017FEB8 /* kml_cache_test.cc */; }; 8FEEEA4B1082BFEF0017FEB8 /* kml_file.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8D21082BFEF0017FEB8 /* kml_file.cc */; }; 8FEEEA4C1082BFEF0017FEB8 /* kml_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8D31082BFEF0017FEB8 /* kml_file.h */; }; 8FEEEA4D1082BFEF0017FEB8 /* kml_file_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8D41082BFEF0017FEB8 /* kml_file_test.cc */; }; 8FEEEA4E1082BFEF0017FEB8 /* kml_stream.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8D51082BFEF0017FEB8 /* kml_stream.cc */; }; 8FEEEA4F1082BFEF0017FEB8 /* kml_stream.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8D61082BFEF0017FEB8 /* kml_stream.h */; }; 8FEEEA501082BFEF0017FEB8 /* kml_stream_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8D71082BFEF0017FEB8 /* kml_stream_test.cc */; }; 8FEEEA511082BFEF0017FEB8 /* kml_uri.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8D81082BFEF0017FEB8 /* kml_uri.cc */; }; 8FEEEA521082BFEF0017FEB8 /* kml_uri.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8D91082BFEF0017FEB8 /* kml_uri.h */; }; 8FEEEA531082BFEF0017FEB8 /* kml_uri_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8DA1082BFEF0017FEB8 /* kml_uri_internal.h */; }; 8FEEEA541082BFEF0017FEB8 /* kml_uri_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8DB1082BFEF0017FEB8 /* kml_uri_test.cc */; }; 8FEEEA551082BFEF0017FEB8 /* kmz_cache.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8DC1082BFEF0017FEB8 /* kmz_cache.cc */; }; 8FEEEA561082BFEF0017FEB8 /* kmz_cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8DD1082BFEF0017FEB8 /* kmz_cache.h */; }; 8FEEEA571082BFEF0017FEB8 /* kmz_cache_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8DE1082BFEF0017FEB8 /* kmz_cache_test.cc */; }; 8FEEEA581082BFEF0017FEB8 /* kmz_file.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8DF1082BFEF0017FEB8 /* kmz_file.cc */; }; 8FEEEA591082BFEF0017FEB8 /* kmz_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8E01082BFEF0017FEB8 /* kmz_file.h */; }; 8FEEEA5A1082BFEF0017FEB8 /* kmz_file_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8E11082BFEF0017FEB8 /* kmz_file_test.cc */; }; 8FEEEA5B1082BFEF0017FEB8 /* link_util.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8E21082BFEF0017FEB8 /* link_util.cc */; }; 8FEEEA5C1082BFEF0017FEB8 /* link_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8E31082BFEF0017FEB8 /* link_util.h */; }; 8FEEEA5D1082BFEF0017FEB8 /* link_util_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8E41082BFEF0017FEB8 /* link_util_test.cc */; }; 8FEEEA5E1082BFEF0017FEB8 /* location_util.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8E51082BFEF0017FEB8 /* location_util.cc */; }; 8FEEEA5F1082BFEF0017FEB8 /* location_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8E61082BFEF0017FEB8 /* location_util.h */; }; 8FEEEA601082BFEF0017FEB8 /* location_util_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8E71082BFEF0017FEB8 /* location_util_test.cc */; }; 8FEEEA611082BFEF0017FEB8 /* merge.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8E91082BFEF0017FEB8 /* merge.cc */; }; 8FEEEA621082BFEF0017FEB8 /* merge.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8EA1082BFEF0017FEB8 /* merge.h */; }; 8FEEEA631082BFEF0017FEB8 /* merge_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8EB1082BFEF0017FEB8 /* merge_test.cc */; }; 8FEEEA641082BFEF0017FEB8 /* object_id_parser_observer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8EC1082BFEF0017FEB8 /* object_id_parser_observer.h */; }; 8FEEEA651082BFEF0017FEB8 /* object_id_parser_observer_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8ED1082BFEF0017FEB8 /* object_id_parser_observer_test.cc */; }; 8FEEEA661082BFEF0017FEB8 /* old_schema_parser_observer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8EE1082BFEF0017FEB8 /* old_schema_parser_observer.h */; }; 8FEEEA671082BFEF0017FEB8 /* old_schema_parser_observer_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8EF1082BFEF0017FEB8 /* old_schema_parser_observer_test.cc */; }; 8FEEEA681082BFEF0017FEB8 /* parse_old_schema.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8F01082BFEF0017FEB8 /* parse_old_schema.cc */; }; 8FEEEA691082BFEF0017FEB8 /* parse_old_schema.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8F11082BFEF0017FEB8 /* parse_old_schema.h */; }; 8FEEEA6A1082BFEF0017FEB8 /* parse_old_schema_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8F21082BFEF0017FEB8 /* parse_old_schema_test.cc */; }; 8FEEEA6B1082BFEF0017FEB8 /* schema_parser_observer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8F31082BFEF0017FEB8 /* schema_parser_observer.h */; }; 8FEEEA6C1082BFEF0017FEB8 /* schema_parser_observer_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8F41082BFEF0017FEB8 /* schema_parser_observer_test.cc */; }; 8FEEEA6D1082BFEF0017FEB8 /* shared_style_parser_observer.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8F51082BFEF0017FEB8 /* shared_style_parser_observer.h */; }; 8FEEEA6E1082BFEF0017FEB8 /* shared_style_parser_observer_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8F61082BFEF0017FEB8 /* shared_style_parser_observer_test.cc */; }; 8FEEEA6F1082BFEF0017FEB8 /* style_inliner.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8F71082BFEF0017FEB8 /* style_inliner.cc */; }; 8FEEEA701082BFEF0017FEB8 /* style_inliner.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8F81082BFEF0017FEB8 /* style_inliner.h */; }; 8FEEEA711082BFEF0017FEB8 /* style_inliner_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8F91082BFEF0017FEB8 /* style_inliner_internal.h */; }; 8FEEEA721082BFEF0017FEB8 /* style_inliner_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8FA1082BFEF0017FEB8 /* style_inliner_test.cc */; }; 8FEEEA731082BFEF0017FEB8 /* style_merger.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8FB1082BFEF0017FEB8 /* style_merger.cc */; }; 8FEEEA741082BFEF0017FEB8 /* style_merger.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8FC1082BFEF0017FEB8 /* style_merger.h */; }; 8FEEEA751082BFEF0017FEB8 /* style_merger_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8FD1082BFEF0017FEB8 /* style_merger_test.cc */; }; 8FEEEA761082BFEF0017FEB8 /* style_resolver.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE8FE1082BFEF0017FEB8 /* style_resolver.cc */; }; 8FEEEA771082BFEF0017FEB8 /* style_resolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE8FF1082BFEF0017FEB8 /* style_resolver.h */; }; 8FEEEA781082BFEF0017FEB8 /* style_resolver_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9001082BFEF0017FEB8 /* style_resolver_test.cc */; }; 8FEEEA791082BFEF0017FEB8 /* style_splitter.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9011082BFEF0017FEB8 /* style_splitter.cc */; }; 8FEEEA7A1082BFEF0017FEB8 /* style_splitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9021082BFEF0017FEB8 /* style_splitter.h */; }; 8FEEEA7B1082BFEF0017FEB8 /* style_splitter_internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9031082BFEF0017FEB8 /* style_splitter_internal.h */; }; 8FEEEA7C1082BFEF0017FEB8 /* style_splitter_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9041082BFEF0017FEB8 /* style_splitter_test.cc */; }; 8FEEEA7D1082BFEF0017FEB8 /* update.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9051082BFEF0017FEB8 /* update.cc */; }; 8FEEEA7E1082BFEF0017FEB8 /* update.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9061082BFEF0017FEB8 /* update.h */; }; 8FEEEA7F1082BFEF0017FEB8 /* update_processor.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9071082BFEF0017FEB8 /* update_processor.cc */; }; 8FEEEA801082BFEF0017FEB8 /* update_processor.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9081082BFEF0017FEB8 /* update_processor.h */; }; 8FEEEA811082BFEF0017FEB8 /* update_processor_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9091082BFEF0017FEB8 /* update_processor_test.cc */; }; 8FEEEA821082BFEF0017FEB8 /* update_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE90A1082BFEF0017FEB8 /* update_test.cc */; }; 8FEEEA831082BFEF0017FEB8 /* engine.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE90B1082BFEF0017FEB8 /* engine.h */; }; 8FEEEA841082BFEF0017FEB8 /* feature_list_region_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE90E1082BFEF0017FEB8 /* feature_list_region_handler.cc */; }; 8FEEEA851082BFEF0017FEB8 /* feature_list_region_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE90F1082BFEF0017FEB8 /* feature_list_region_handler.h */; }; 8FEEEA861082BFEF0017FEB8 /* feature_list_region_handler_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9101082BFEF0017FEB8 /* feature_list_region_handler_test.cc */; }; 8FEEEA871082BFEF0017FEB8 /* region_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9121082BFEF0017FEB8 /* region_handler.h */; }; 8FEEEA881082BFEF0017FEB8 /* regionator.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9131082BFEF0017FEB8 /* regionator.cc */; }; 8FEEEA891082BFEF0017FEB8 /* regionator.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9141082BFEF0017FEB8 /* regionator.h */; }; 8FEEEA8A1082BFEF0017FEB8 /* regionator_qid.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9151082BFEF0017FEB8 /* regionator_qid.h */; }; 8FEEEA8B1082BFEF0017FEB8 /* regionator_qid_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9161082BFEF0017FEB8 /* regionator_qid_test.cc */; }; 8FEEEA8C1082BFEF0017FEB8 /* regionator_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9171082BFEF0017FEB8 /* regionator_test.cc */; }; 8FEEEA8D1082BFEF0017FEB8 /* regionator_util.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9181082BFEF0017FEB8 /* regionator_util.cc */; }; 8FEEEA8E1082BFEF0017FEB8 /* regionator_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9191082BFEF0017FEB8 /* regionator_util.h */; }; 8FEEEA8F1082BFEF0017FEB8 /* regionator_util_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE91A1082BFEF0017FEB8 /* regionator_util_test.cc */; }; 8FEEEA901082BFEF0017FEB8 /* xsd_complex_type.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE91D1082BFEF0017FEB8 /* xsd_complex_type.cc */; }; 8FEEEA911082BFEF0017FEB8 /* xsd_complex_type.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE91E1082BFEF0017FEB8 /* xsd_complex_type.h */; }; 8FEEEA921082BFEF0017FEB8 /* xsd_complex_type_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE91F1082BFEF0017FEB8 /* xsd_complex_type_test.cc */; }; 8FEEEA931082BFEF0017FEB8 /* xsd_element.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9201082BFEF0017FEB8 /* xsd_element.cc */; }; 8FEEEA941082BFEF0017FEB8 /* xsd_element.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9211082BFEF0017FEB8 /* xsd_element.h */; }; 8FEEEA951082BFEF0017FEB8 /* xsd_element_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9221082BFEF0017FEB8 /* xsd_element_test.cc */; }; 8FEEEA961082BFEF0017FEB8 /* xsd_file.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9231082BFEF0017FEB8 /* xsd_file.cc */; }; 8FEEEA971082BFEF0017FEB8 /* xsd_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9241082BFEF0017FEB8 /* xsd_file.h */; }; 8FEEEA981082BFEF0017FEB8 /* xsd_file_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9251082BFEF0017FEB8 /* xsd_file_test.cc */; }; 8FEEEA991082BFEF0017FEB8 /* xsd_handler.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9261082BFEF0017FEB8 /* xsd_handler.cc */; }; 8FEEEA9A1082BFEF0017FEB8 /* xsd_handler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9271082BFEF0017FEB8 /* xsd_handler.h */; }; 8FEEEA9B1082BFEF0017FEB8 /* xsd_handler_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9281082BFEF0017FEB8 /* xsd_handler_test.cc */; }; 8FEEEA9C1082BFEF0017FEB8 /* xsd_primitive_type.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9291082BFEF0017FEB8 /* xsd_primitive_type.cc */; }; 8FEEEA9D1082BFEF0017FEB8 /* xsd_primitive_type.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE92A1082BFEF0017FEB8 /* xsd_primitive_type.h */; }; 8FEEEA9E1082BFEF0017FEB8 /* xsd_primitive_type_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE92B1082BFEF0017FEB8 /* xsd_primitive_type_test.cc */; }; 8FEEEA9F1082BFEF0017FEB8 /* xsd_schema.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE92C1082BFEF0017FEB8 /* xsd_schema.h */; }; 8FEEEAA01082BFEF0017FEB8 /* xsd_schema_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE92D1082BFEF0017FEB8 /* xsd_schema_test.cc */; }; 8FEEEAA11082BFEF0017FEB8 /* xsd_simple_type.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE92E1082BFEF0017FEB8 /* xsd_simple_type.h */; }; 8FEEEAA21082BFEF0017FEB8 /* xsd_simple_type_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE92F1082BFEF0017FEB8 /* xsd_simple_type_test.cc */; }; 8FEEEAA31082BFEF0017FEB8 /* xsd_type.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9301082BFEF0017FEB8 /* xsd_type.h */; }; 8FEEEAA41082BFEF0017FEB8 /* xsd_util.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9311082BFEF0017FEB8 /* xsd_util.cc */; }; 8FEEEAA51082BFEF0017FEB8 /* xsd_util.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9321082BFEF0017FEB8 /* xsd_util.h */; }; 8FEEEAA61082BFEF0017FEB8 /* xsd_util_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9331082BFEF0017FEB8 /* xsd_util_test.cc */; }; 8FEEEAA71082BFEF0017FEB8 /* xst_parser.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9341082BFEF0017FEB8 /* xst_parser.cc */; }; 8FEEEAA81082BFEF0017FEB8 /* xst_parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FEEE9351082BFEF0017FEB8 /* xst_parser.h */; }; 8FEEEAA91082BFEF0017FEB8 /* xst_parser_test.cc in Sources */ = {isa = PBXBuildFile; fileRef = 8FEEE9361082BFEF0017FEB8 /* xst_parser_test.cc */; }; AA747D9F0F9514B9006C5449 /* LibKML_Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = AA747D9E0F9514B9006C5449 /* LibKML_Prefix.pch */; }; AACBBE4A0F95108600F1A2B1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AACBBE490F95108600F1A2B1 /* Foundation.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 3C87AF2010881A4000015660 /* mimetypes.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mimetypes.cc; sourceTree = ""; }; 3C87AF2110881A4000015660 /* mimetypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mimetypes.h; sourceTree = ""; }; 8FEEE7B81082BFEF0017FEB8 /* attributes.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = attributes.cc; sourceTree = ""; }; 8FEEE7B91082BFEF0017FEB8 /* attributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = attributes.h; sourceTree = ""; }; 8FEEE7BA1082BFEF0017FEB8 /* attributes_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = attributes_test.cc; sourceTree = ""; }; 8FEEE7BB1082BFEF0017FEB8 /* color32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = color32.h; sourceTree = ""; }; 8FEEE7BC1082BFEF0017FEB8 /* color32_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = color32_test.cc; sourceTree = ""; }; 8FEEE7BD1082BFEF0017FEB8 /* date_time.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = date_time.cc; sourceTree = ""; }; 8FEEE7BE1082BFEF0017FEB8 /* date_time.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = date_time.h; sourceTree = ""; }; 8FEEE7BF1082BFEF0017FEB8 /* date_time_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = date_time_test.cc; sourceTree = ""; }; 8FEEE7C01082BFEF0017FEB8 /* expat_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = expat_handler.h; sourceTree = ""; }; 8FEEE7C11082BFEF0017FEB8 /* expat_handler_ns.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = expat_handler_ns.cc; sourceTree = ""; }; 8FEEE7C21082BFEF0017FEB8 /* expat_handler_ns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = expat_handler_ns.h; sourceTree = ""; }; 8FEEE7C31082BFEF0017FEB8 /* expat_handler_ns_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = expat_handler_ns_test.cc; sourceTree = ""; }; 8FEEE7C41082BFEF0017FEB8 /* expat_parser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = expat_parser.cc; sourceTree = ""; }; 8FEEE7C51082BFEF0017FEB8 /* expat_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = expat_parser.h; sourceTree = ""; }; 8FEEE7C61082BFEF0017FEB8 /* expat_parser_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = expat_parser_test.cc; sourceTree = ""; }; 8FEEE7C71082BFEF0017FEB8 /* file.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = file.cc; sourceTree = ""; }; 8FEEE7C81082BFEF0017FEB8 /* file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file.h; sourceTree = ""; }; 8FEEE7C91082BFEF0017FEB8 /* file_posix.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = file_posix.cc; sourceTree = ""; }; 8FEEE7CA1082BFEF0017FEB8 /* file_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = file_test.cc; sourceTree = ""; }; 8FEEE7CC1082BFEF0017FEB8 /* google_internal_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = google_internal_test.h; sourceTree = ""; }; 8FEEE7CD1082BFEF0017FEB8 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; 8FEEE7CE1082BFEF0017FEB8 /* math_util.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = math_util.cc; sourceTree = ""; }; 8FEEE7CF1082BFEF0017FEB8 /* math_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = math_util.h; sourceTree = ""; }; 8FEEE7D01082BFEF0017FEB8 /* math_util_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = math_util_test.cc; sourceTree = ""; }; 8FEEE7D11082BFEF0017FEB8 /* memory_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memory_file.h; sourceTree = ""; }; 8FEEE7D21082BFEF0017FEB8 /* net_cache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = net_cache.h; sourceTree = ""; }; 8FEEE7D31082BFEF0017FEB8 /* net_cache_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = net_cache_test.cc; sourceTree = ""; }; 8FEEE7D41082BFEF0017FEB8 /* net_cache_test_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = net_cache_test_util.h; sourceTree = ""; }; 8FEEE7D51082BFEF0017FEB8 /* referent.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = referent.cc; sourceTree = ""; }; 8FEEE7D61082BFEF0017FEB8 /* referent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = referent.h; sourceTree = ""; }; 8FEEE7D71082BFEF0017FEB8 /* referent_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = referent_test.cc; sourceTree = ""; }; 8FEEE7D81082BFEF0017FEB8 /* string_util.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = string_util.cc; sourceTree = ""; }; 8FEEE7D91082BFEF0017FEB8 /* string_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = string_util.h; sourceTree = ""; }; 8FEEE7DA1082BFEF0017FEB8 /* string_util_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = string_util_test.cc; sourceTree = ""; }; 8FEEE7DB1082BFEF0017FEB8 /* tempfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tempfile.h; sourceTree = ""; }; 8FEEE7DC1082BFEF0017FEB8 /* tempfile_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tempfile_test.cc; sourceTree = ""; }; 8FEEE7DD1082BFEF0017FEB8 /* time_util.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = time_util.cc; sourceTree = ""; }; 8FEEE7DE1082BFEF0017FEB8 /* time_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = time_util.h; sourceTree = ""; }; 8FEEE7DF1082BFEF0017FEB8 /* time_util_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = time_util_test.cc; sourceTree = ""; }; 8FEEE7E01082BFEF0017FEB8 /* unit_test.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unit_test.h; sourceTree = ""; }; 8FEEE7E11082BFEF0017FEB8 /* uri_parser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = uri_parser.cc; sourceTree = ""; }; 8FEEE7E21082BFEF0017FEB8 /* uri_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = uri_parser.h; sourceTree = ""; }; 8FEEE7E31082BFEF0017FEB8 /* uri_parser_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = uri_parser_test.cc; sourceTree = ""; }; 8FEEE7E41082BFEF0017FEB8 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; 8FEEE7E51082BFEF0017FEB8 /* util_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = util_test.cc; sourceTree = ""; }; 8FEEE7E61082BFEF0017FEB8 /* vec3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vec3.h; sourceTree = ""; }; 8FEEE7E71082BFEF0017FEB8 /* vec3_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vec3_test.cc; sourceTree = ""; }; 8FEEE7E81082BFEF0017FEB8 /* version.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = version.cc; sourceTree = ""; }; 8FEEE7E91082BFEF0017FEB8 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = ""; }; 8FEEE7EA1082BFEF0017FEB8 /* version_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = version_test.cc; sourceTree = ""; }; 8FEEE7EB1082BFEF0017FEB8 /* xml_element.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xml_element.h; sourceTree = ""; }; 8FEEE7EC1082BFEF0017FEB8 /* xml_element_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xml_element_test.cc; sourceTree = ""; }; 8FEEE7ED1082BFEF0017FEB8 /* xml_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xml_file.h; sourceTree = ""; }; 8FEEE7EE1082BFEF0017FEB8 /* xml_file_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xml_file_test.cc; sourceTree = ""; }; 8FEEE7EF1082BFEF0017FEB8 /* xml_namespaces.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xml_namespaces.cc; sourceTree = ""; }; 8FEEE7F01082BFEF0017FEB8 /* xml_namespaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xml_namespaces.h; sourceTree = ""; }; 8FEEE7F11082BFEF0017FEB8 /* xml_namespaces_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xml_namespaces_test.cc; sourceTree = ""; }; 8FEEE7F21082BFEF0017FEB8 /* xmlns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xmlns.h; sourceTree = ""; }; 8FEEE7F31082BFEF0017FEB8 /* xmlns_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmlns_test.cc; sourceTree = ""; }; 8FEEE7F41082BFEF0017FEB8 /* zip_file.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = zip_file.cc; sourceTree = ""; }; 8FEEE7F51082BFEF0017FEB8 /* zip_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip_file.h; sourceTree = ""; }; 8FEEE7F61082BFEF0017FEB8 /* zip_file_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = zip_file_test.cc; sourceTree = ""; }; 8FEEE7F81082BFEF0017FEB8 /* atom_util.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = atom_util.cc; sourceTree = ""; }; 8FEEE7F91082BFEF0017FEB8 /* atom_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = atom_util.h; sourceTree = ""; }; 8FEEE7FA1082BFEF0017FEB8 /* atom_util_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = atom_util_test.cc; sourceTree = ""; }; 8FEEE7FB1082BFEF0017FEB8 /* convenience.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = convenience.cc; sourceTree = ""; }; 8FEEE7FC1082BFEF0017FEB8 /* convenience.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = convenience.h; sourceTree = ""; }; 8FEEE7FD1082BFEF0017FEB8 /* convenience_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = convenience_test.cc; sourceTree = ""; }; 8FEEE7FE1082BFEF0017FEB8 /* csv_file.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = csv_file.cc; sourceTree = ""; }; 8FEEE7FF1082BFEF0017FEB8 /* csv_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = csv_file.h; sourceTree = ""; }; 8FEEE8001082BFEF0017FEB8 /* csv_file_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = csv_file_test.cc; sourceTree = ""; }; 8FEEE8011082BFEF0017FEB8 /* element_counter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = element_counter.h; sourceTree = ""; }; 8FEEE8021082BFEF0017FEB8 /* element_counter_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = element_counter_test.cc; sourceTree = ""; }; 8FEEE8031082BFEF0017FEB8 /* feature_list.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_list.cc; sourceTree = ""; }; 8FEEE8041082BFEF0017FEB8 /* feature_list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = feature_list.h; sourceTree = ""; }; 8FEEE8051082BFEF0017FEB8 /* feature_list_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_list_test.cc; sourceTree = ""; }; 8FEEE8061082BFEF0017FEB8 /* google_maps_data.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = google_maps_data.cc; sourceTree = ""; }; 8FEEE8071082BFEF0017FEB8 /* google_maps_data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = google_maps_data.h; sourceTree = ""; }; 8FEEE8081082BFEF0017FEB8 /* google_maps_data_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = google_maps_data_test.cc; sourceTree = ""; }; 8FEEE8091082BFEF0017FEB8 /* gpx_trk_pt_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gpx_trk_pt_handler.h; sourceTree = ""; }; 8FEEE80A1082BFEF0017FEB8 /* gpx_trk_pt_handler_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gpx_trk_pt_handler_test.cc; sourceTree = ""; }; 8FEEE80B1082BFEF0017FEB8 /* http_client.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = http_client.cc; sourceTree = ""; }; 8FEEE80C1082BFEF0017FEB8 /* http_client.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = http_client.h; sourceTree = ""; }; 8FEEE80D1082BFEF0017FEB8 /* http_client_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = http_client_test.cc; sourceTree = ""; }; 8FEEE80E1082BFEF0017FEB8 /* kmz_check_links.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kmz_check_links.cc; sourceTree = ""; }; 8FEEE80F1082BFEF0017FEB8 /* kmz_check_links.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kmz_check_links.h; sourceTree = ""; }; 8FEEE8101082BFEF0017FEB8 /* kmz_check_links_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kmz_check_links_test.cc; sourceTree = ""; }; 8FEEE8111082BFEF0017FEB8 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; 8FEEE8131082BFEF0017FEB8 /* abstractlatlonbox.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = abstractlatlonbox.cc; sourceTree = ""; }; 8FEEE8141082BFEF0017FEB8 /* abstractlatlonbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abstractlatlonbox.h; sourceTree = ""; }; 8FEEE8151082BFEF0017FEB8 /* abstractlatlonbox_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = abstractlatlonbox_test.cc; sourceTree = ""; }; 8FEEE8161082BFEF0017FEB8 /* abstractview.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = abstractview.cc; sourceTree = ""; }; 8FEEE8171082BFEF0017FEB8 /* abstractview.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = abstractview.h; sourceTree = ""; }; 8FEEE8181082BFEF0017FEB8 /* abstractview_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = abstractview_test.cc; sourceTree = ""; }; 8FEEE8191082BFEF0017FEB8 /* atom.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = atom.cc; sourceTree = ""; }; 8FEEE81A1082BFEF0017FEB8 /* atom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = atom.h; sourceTree = ""; }; 8FEEE81B1082BFEF0017FEB8 /* atom_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = atom_test.cc; sourceTree = ""; }; 8FEEE81C1082BFEF0017FEB8 /* balloonstyle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = balloonstyle.cc; sourceTree = ""; }; 8FEEE81D1082BFEF0017FEB8 /* balloonstyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = balloonstyle.h; sourceTree = ""; }; 8FEEE81E1082BFEF0017FEB8 /* balloonstyle_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = balloonstyle_test.cc; sourceTree = ""; }; 8FEEE81F1082BFEF0017FEB8 /* colorstyle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = colorstyle.cc; sourceTree = ""; }; 8FEEE8201082BFEF0017FEB8 /* colorstyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = colorstyle.h; sourceTree = ""; }; 8FEEE8211082BFEF0017FEB8 /* colorstyle_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = colorstyle_test.cc; sourceTree = ""; }; 8FEEE8221082BFEF0017FEB8 /* container.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = container.cc; sourceTree = ""; }; 8FEEE8231082BFEF0017FEB8 /* container.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = container.h; sourceTree = ""; }; 8FEEE8241082BFEF0017FEB8 /* container_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = container_test.cc; sourceTree = ""; }; 8FEEE8251082BFEF0017FEB8 /* document.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = document.cc; sourceTree = ""; }; 8FEEE8261082BFEF0017FEB8 /* document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = document.h; sourceTree = ""; }; 8FEEE8271082BFEF0017FEB8 /* document_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = document_test.cc; sourceTree = ""; }; 8FEEE8281082BFEF0017FEB8 /* element.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = element.cc; sourceTree = ""; }; 8FEEE8291082BFEF0017FEB8 /* element.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = element.h; sourceTree = ""; }; 8FEEE82A1082BFEF0017FEB8 /* element_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = element_test.cc; sourceTree = ""; }; 8FEEE82B1082BFEF0017FEB8 /* extendeddata.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extendeddata.cc; sourceTree = ""; }; 8FEEE82C1082BFEF0017FEB8 /* extendeddata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = extendeddata.h; sourceTree = ""; }; 8FEEE82D1082BFEF0017FEB8 /* extendeddata_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = extendeddata_test.cc; sourceTree = ""; }; 8FEEE82E1082BFEF0017FEB8 /* feature.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature.cc; sourceTree = ""; }; 8FEEE82F1082BFEF0017FEB8 /* feature.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = feature.h; sourceTree = ""; }; 8FEEE8301082BFEF0017FEB8 /* feature_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_test.cc; sourceTree = ""; }; 8FEEE8311082BFEF0017FEB8 /* folder.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = folder.cc; sourceTree = ""; }; 8FEEE8321082BFEF0017FEB8 /* folder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = folder.h; sourceTree = ""; }; 8FEEE8331082BFEF0017FEB8 /* folder_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = folder_test.cc; sourceTree = ""; }; 8FEEE8341082BFEF0017FEB8 /* geometry.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = geometry.cc; sourceTree = ""; }; 8FEEE8351082BFEF0017FEB8 /* geometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = geometry.h; sourceTree = ""; }; 8FEEE8361082BFEF0017FEB8 /* geometry_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = geometry_test.cc; sourceTree = ""; }; 8FEEE8371082BFEF0017FEB8 /* gx_timeprimitive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gx_timeprimitive.h; sourceTree = ""; }; 8FEEE8381082BFEF0017FEB8 /* gx_timeprimitive_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gx_timeprimitive_test.cc; sourceTree = ""; }; 8FEEE8391082BFEF0017FEB8 /* gx_tour.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gx_tour.cc; sourceTree = ""; }; 8FEEE83A1082BFEF0017FEB8 /* gx_tour.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gx_tour.h; sourceTree = ""; }; 8FEEE83B1082BFEF0017FEB8 /* gx_tour_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gx_tour_test.cc; sourceTree = ""; }; 8FEEE83C1082BFEF0017FEB8 /* hotspot.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hotspot.cc; sourceTree = ""; }; 8FEEE83D1082BFEF0017FEB8 /* hotspot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hotspot.h; sourceTree = ""; }; 8FEEE83E1082BFEF0017FEB8 /* hotspot_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hotspot_test.cc; sourceTree = ""; }; 8FEEE83F1082BFEF0017FEB8 /* iconstyle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = iconstyle.cc; sourceTree = ""; }; 8FEEE8401082BFEF0017FEB8 /* iconstyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iconstyle.h; sourceTree = ""; }; 8FEEE8411082BFEF0017FEB8 /* iconstyle_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = iconstyle_test.cc; sourceTree = ""; }; 8FEEE8421082BFEF0017FEB8 /* kml.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml.cc; sourceTree = ""; }; 8FEEE8431082BFEF0017FEB8 /* kml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml.h; sourceTree = ""; }; 8FEEE8451082BFEF0017FEB8 /* kml22.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml22.h; sourceTree = ""; }; 8FEEE8461082BFEF0017FEB8 /* kml22_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml22_test.cc; sourceTree = ""; }; 8FEEE8471082BFEF0017FEB8 /* kml_cast.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_cast.cc; sourceTree = ""; }; 8FEEE8481082BFEF0017FEB8 /* kml_cast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml_cast.h; sourceTree = ""; }; 8FEEE8491082BFEF0017FEB8 /* kml_cast_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_cast_test.cc; sourceTree = ""; }; 8FEEE84A1082BFEF0017FEB8 /* kml_factory.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_factory.cc; sourceTree = ""; }; 8FEEE84B1082BFEF0017FEB8 /* kml_factory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml_factory.h; sourceTree = ""; }; 8FEEE84C1082BFEF0017FEB8 /* kml_factory_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_factory_test.cc; sourceTree = ""; }; 8FEEE84D1082BFEF0017FEB8 /* kml_funcs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml_funcs.h; sourceTree = ""; }; 8FEEE84E1082BFEF0017FEB8 /* kml_handler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_handler.cc; sourceTree = ""; }; 8FEEE84F1082BFEF0017FEB8 /* kml_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml_handler.h; sourceTree = ""; }; 8FEEE8501082BFEF0017FEB8 /* kml_handler_ns.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_handler_ns.cc; sourceTree = ""; }; 8FEEE8511082BFEF0017FEB8 /* kml_handler_ns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml_handler_ns.h; sourceTree = ""; }; 8FEEE8521082BFEF0017FEB8 /* kml_handler_ns_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_handler_ns_test.cc; sourceTree = ""; }; 8FEEE8531082BFEF0017FEB8 /* kml_handler_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_handler_test.cc; sourceTree = ""; }; 8FEEE8541082BFEF0017FEB8 /* kml_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml_ptr.h; sourceTree = ""; }; 8FEEE8551082BFEF0017FEB8 /* kml_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_test.cc; sourceTree = ""; }; 8FEEE8561082BFEF0017FEB8 /* kmldom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kmldom.h; sourceTree = ""; }; 8FEEE8571082BFEF0017FEB8 /* labelstyle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = labelstyle.cc; sourceTree = ""; }; 8FEEE8581082BFEF0017FEB8 /* labelstyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = labelstyle.h; sourceTree = ""; }; 8FEEE8591082BFEF0017FEB8 /* labelstyle_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = labelstyle_test.cc; sourceTree = ""; }; 8FEEE85A1082BFEF0017FEB8 /* linestyle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linestyle.cc; sourceTree = ""; }; 8FEEE85B1082BFEF0017FEB8 /* linestyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = linestyle.h; sourceTree = ""; }; 8FEEE85C1082BFEF0017FEB8 /* linestyle_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = linestyle_test.cc; sourceTree = ""; }; 8FEEE85D1082BFEF0017FEB8 /* link.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = link.cc; sourceTree = ""; }; 8FEEE85E1082BFEF0017FEB8 /* link.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = link.h; sourceTree = ""; }; 8FEEE85F1082BFEF0017FEB8 /* link_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = link_test.cc; sourceTree = ""; }; 8FEEE8601082BFEF0017FEB8 /* liststyle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = liststyle.cc; sourceTree = ""; }; 8FEEE8611082BFEF0017FEB8 /* liststyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = liststyle.h; sourceTree = ""; }; 8FEEE8621082BFEF0017FEB8 /* liststyle_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = liststyle_test.cc; sourceTree = ""; }; 8FEEE8631082BFEF0017FEB8 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; 8FEEE8641082BFEF0017FEB8 /* model.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = model.cc; sourceTree = ""; }; 8FEEE8651082BFEF0017FEB8 /* model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = model.h; sourceTree = ""; }; 8FEEE8661082BFEF0017FEB8 /* model_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = model_test.cc; sourceTree = ""; }; 8FEEE8671082BFEF0017FEB8 /* networklink.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = networklink.cc; sourceTree = ""; }; 8FEEE8681082BFEF0017FEB8 /* networklink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = networklink.h; sourceTree = ""; }; 8FEEE8691082BFEF0017FEB8 /* networklink_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = networklink_test.cc; sourceTree = ""; }; 8FEEE86A1082BFEF0017FEB8 /* networklinkcontrol.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = networklinkcontrol.cc; sourceTree = ""; }; 8FEEE86B1082BFEF0017FEB8 /* networklinkcontrol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = networklinkcontrol.h; sourceTree = ""; }; 8FEEE86C1082BFEF0017FEB8 /* networklinkcontrol_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = networklinkcontrol_test.cc; sourceTree = ""; }; 8FEEE86D1082BFEF0017FEB8 /* object.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = object.cc; sourceTree = ""; }; 8FEEE86E1082BFEF0017FEB8 /* object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = object.h; sourceTree = ""; }; 8FEEE86F1082BFEF0017FEB8 /* object_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = object_test.cc; sourceTree = ""; }; 8FEEE8701082BFEF0017FEB8 /* overlay.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = overlay.cc; sourceTree = ""; }; 8FEEE8711082BFEF0017FEB8 /* overlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = overlay.h; sourceTree = ""; }; 8FEEE8721082BFEF0017FEB8 /* overlay_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = overlay_test.cc; sourceTree = ""; }; 8FEEE8731082BFEF0017FEB8 /* parser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parser.cc; sourceTree = ""; }; 8FEEE8741082BFEF0017FEB8 /* parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parser.h; sourceTree = ""; }; 8FEEE8751082BFEF0017FEB8 /* parser_observer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parser_observer.h; sourceTree = ""; }; 8FEEE8761082BFEF0017FEB8 /* parser_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parser_test.cc; sourceTree = ""; }; 8FEEE8771082BFEF0017FEB8 /* placemark.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = placemark.cc; sourceTree = ""; }; 8FEEE8781082BFEF0017FEB8 /* placemark.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = placemark.h; sourceTree = ""; }; 8FEEE8791082BFEF0017FEB8 /* placemark_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = placemark_test.cc; sourceTree = ""; }; 8FEEE87A1082BFEF0017FEB8 /* polystyle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = polystyle.cc; sourceTree = ""; }; 8FEEE87B1082BFEF0017FEB8 /* polystyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = polystyle.h; sourceTree = ""; }; 8FEEE87C1082BFEF0017FEB8 /* polystyle_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = polystyle_test.cc; sourceTree = ""; }; 8FEEE87D1082BFEF0017FEB8 /* region.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = region.cc; sourceTree = ""; }; 8FEEE87E1082BFEF0017FEB8 /* region.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = region.h; sourceTree = ""; }; 8FEEE87F1082BFEF0017FEB8 /* region_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = region_test.cc; sourceTree = ""; }; 8FEEE8801082BFEF0017FEB8 /* round_trip_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = round_trip_test.cc; sourceTree = ""; }; 8FEEE8811082BFEF0017FEB8 /* schema.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = schema.cc; sourceTree = ""; }; 8FEEE8821082BFEF0017FEB8 /* schema.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = schema.h; sourceTree = ""; }; 8FEEE8831082BFEF0017FEB8 /* schema_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = schema_test.cc; sourceTree = ""; }; 8FEEE8841082BFEF0017FEB8 /* serializer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = serializer.cc; sourceTree = ""; }; 8FEEE8851082BFEF0017FEB8 /* serializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = serializer.h; sourceTree = ""; }; 8FEEE8861082BFEF0017FEB8 /* serializer_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = serializer_test.cc; sourceTree = ""; }; 8FEEE8871082BFEF0017FEB8 /* snippet.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = snippet.cc; sourceTree = ""; }; 8FEEE8881082BFEF0017FEB8 /* snippet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = snippet.h; sourceTree = ""; }; 8FEEE8891082BFEF0017FEB8 /* snippet_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = snippet_test.cc; sourceTree = ""; }; 8FEEE88A1082BFEF0017FEB8 /* stats_serializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stats_serializer.h; sourceTree = ""; }; 8FEEE88B1082BFEF0017FEB8 /* style.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = style.cc; sourceTree = ""; }; 8FEEE88C1082BFEF0017FEB8 /* style.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = style.h; sourceTree = ""; }; 8FEEE88D1082BFEF0017FEB8 /* style_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = style_test.cc; sourceTree = ""; }; 8FEEE88E1082BFEF0017FEB8 /* stylemap.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stylemap.cc; sourceTree = ""; }; 8FEEE88F1082BFEF0017FEB8 /* stylemap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stylemap.h; sourceTree = ""; }; 8FEEE8901082BFEF0017FEB8 /* stylemap_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stylemap_test.cc; sourceTree = ""; }; 8FEEE8911082BFEF0017FEB8 /* styleselector.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = styleselector.cc; sourceTree = ""; }; 8FEEE8921082BFEF0017FEB8 /* styleselector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = styleselector.h; sourceTree = ""; }; 8FEEE8931082BFEF0017FEB8 /* styleselector_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = styleselector_test.cc; sourceTree = ""; }; 8FEEE8941082BFEF0017FEB8 /* substyle.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = substyle.cc; sourceTree = ""; }; 8FEEE8951082BFEF0017FEB8 /* substyle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = substyle.h; sourceTree = ""; }; 8FEEE8961082BFEF0017FEB8 /* substyle_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = substyle_test.cc; sourceTree = ""; }; 8FEEE8971082BFEF0017FEB8 /* timeprimitive.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = timeprimitive.cc; sourceTree = ""; }; 8FEEE8981082BFEF0017FEB8 /* timeprimitive.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = timeprimitive.h; sourceTree = ""; }; 8FEEE8991082BFEF0017FEB8 /* timeprimitive_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = timeprimitive_test.cc; sourceTree = ""; }; 8FEEE89A1082BFEF0017FEB8 /* unknown_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = unknown_test.cc; sourceTree = ""; }; 8FEEE89B1082BFEF0017FEB8 /* vec2.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vec2.cc; sourceTree = ""; }; 8FEEE89C1082BFEF0017FEB8 /* vec2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vec2.h; sourceTree = ""; }; 8FEEE89D1082BFEF0017FEB8 /* vec2_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vec2_test.cc; sourceTree = ""; }; 8FEEE89E1082BFEF0017FEB8 /* xal.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xal.cc; sourceTree = ""; }; 8FEEE89F1082BFEF0017FEB8 /* xal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xal.h; sourceTree = ""; }; 8FEEE8A01082BFEF0017FEB8 /* xal_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xal_test.cc; sourceTree = ""; }; 8FEEE8A11082BFEF0017FEB8 /* xml_serializer.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xml_serializer.cc; sourceTree = ""; }; 8FEEE8A21082BFEF0017FEB8 /* xml_serializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xml_serializer.h; sourceTree = ""; }; 8FEEE8A31082BFEF0017FEB8 /* xml_serializer_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xml_serializer_test.cc; sourceTree = ""; }; 8FEEE8A41082BFEF0017FEB8 /* xsd.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd.cc; sourceTree = ""; }; 8FEEE8A51082BFEF0017FEB8 /* xsd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xsd.h; sourceTree = ""; }; 8FEEE8A61082BFEF0017FEB8 /* xsd_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_test.cc; sourceTree = ""; }; 8FEEE8A71082BFEF0017FEB8 /* dom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dom.h; sourceTree = ""; }; 8FEEE8A91082BFEF0017FEB8 /* bbox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bbox.h; sourceTree = ""; }; 8FEEE8AA1082BFEF0017FEB8 /* bbox_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bbox_test.cc; sourceTree = ""; }; 8FEEE8AB1082BFEF0017FEB8 /* clone.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = clone.cc; sourceTree = ""; }; 8FEEE8AC1082BFEF0017FEB8 /* clone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = clone.h; sourceTree = ""; }; 8FEEE8AD1082BFEF0017FEB8 /* clone_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = clone_test.cc; sourceTree = ""; }; 8FEEE8AE1082BFEF0017FEB8 /* engine_constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine_constants.h; sourceTree = ""; }; 8FEEE8AF1082BFEF0017FEB8 /* engine_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine_types.h; sourceTree = ""; }; 8FEEE8B01082BFEF0017FEB8 /* entity_mapper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = entity_mapper.cc; sourceTree = ""; }; 8FEEE8B11082BFEF0017FEB8 /* entity_mapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = entity_mapper.h; sourceTree = ""; }; 8FEEE8B21082BFEF0017FEB8 /* entity_mapper_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = entity_mapper_test.cc; sourceTree = ""; }; 8FEEE8B31082BFEF0017FEB8 /* feature_balloon.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_balloon.cc; sourceTree = ""; }; 8FEEE8B41082BFEF0017FEB8 /* feature_balloon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = feature_balloon.h; sourceTree = ""; }; 8FEEE8B51082BFEF0017FEB8 /* feature_balloon_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_balloon_test.cc; sourceTree = ""; }; 8FEEE8B61082BFEF0017FEB8 /* feature_view.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_view.cc; sourceTree = ""; }; 8FEEE8B71082BFEF0017FEB8 /* feature_view.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = feature_view.h; sourceTree = ""; }; 8FEEE8B81082BFEF0017FEB8 /* feature_view_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_view_test.cc; sourceTree = ""; }; 8FEEE8B91082BFEF0017FEB8 /* feature_visitor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_visitor.cc; sourceTree = ""; }; 8FEEE8BA1082BFEF0017FEB8 /* feature_visitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = feature_visitor.h; sourceTree = ""; }; 8FEEE8BB1082BFEF0017FEB8 /* feature_visitor_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_visitor_test.cc; sourceTree = ""; }; 8FEEE8BC1082BFEF0017FEB8 /* find.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = find.cc; sourceTree = ""; }; 8FEEE8BD1082BFEF0017FEB8 /* find.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = find.h; sourceTree = ""; }; 8FEEE8BE1082BFEF0017FEB8 /* find_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = find_test.cc; sourceTree = ""; }; 8FEEE8BF1082BFEF0017FEB8 /* find_xml_namespaces.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = find_xml_namespaces.cc; sourceTree = ""; }; 8FEEE8C01082BFEF0017FEB8 /* find_xml_namespaces.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = find_xml_namespaces.h; sourceTree = ""; }; 8FEEE8C11082BFEF0017FEB8 /* find_xml_namespaces_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = find_xml_namespaces_test.cc; sourceTree = ""; }; 8FEEE8C21082BFEF0017FEB8 /* get_link_parents.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = get_link_parents.cc; sourceTree = ""; }; 8FEEE8C31082BFEF0017FEB8 /* get_link_parents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = get_link_parents.h; sourceTree = ""; }; 8FEEE8C41082BFEF0017FEB8 /* get_link_parents_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = get_link_parents_test.cc; sourceTree = ""; }; 8FEEE8C51082BFEF0017FEB8 /* get_links.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = get_links.cc; sourceTree = ""; }; 8FEEE8C61082BFEF0017FEB8 /* get_links.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = get_links.h; sourceTree = ""; }; 8FEEE8C71082BFEF0017FEB8 /* get_links_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = get_links_test.cc; sourceTree = ""; }; 8FEEE8C81082BFEF0017FEB8 /* href.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = href.cc; sourceTree = ""; }; 8FEEE8C91082BFEF0017FEB8 /* href.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = href.h; sourceTree = ""; }; 8FEEE8CA1082BFEF0017FEB8 /* href_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = href_test.cc; sourceTree = ""; }; 8FEEE8CB1082BFEF0017FEB8 /* id_mapper.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = id_mapper.cc; sourceTree = ""; }; 8FEEE8CC1082BFEF0017FEB8 /* id_mapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = id_mapper.h; sourceTree = ""; }; 8FEEE8CD1082BFEF0017FEB8 /* id_mapper_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = id_mapper_internal.h; sourceTree = ""; }; 8FEEE8CE1082BFEF0017FEB8 /* id_mapper_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = id_mapper_test.cc; sourceTree = ""; }; 8FEEE8CF1082BFEF0017FEB8 /* kml_cache.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_cache.cc; sourceTree = ""; }; 8FEEE8D01082BFEF0017FEB8 /* kml_cache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml_cache.h; sourceTree = ""; }; 8FEEE8D11082BFEF0017FEB8 /* kml_cache_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_cache_test.cc; sourceTree = ""; }; 8FEEE8D21082BFEF0017FEB8 /* kml_file.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_file.cc; sourceTree = ""; }; 8FEEE8D31082BFEF0017FEB8 /* kml_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml_file.h; sourceTree = ""; }; 8FEEE8D41082BFEF0017FEB8 /* kml_file_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_file_test.cc; sourceTree = ""; }; 8FEEE8D51082BFEF0017FEB8 /* kml_stream.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_stream.cc; sourceTree = ""; }; 8FEEE8D61082BFEF0017FEB8 /* kml_stream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml_stream.h; sourceTree = ""; }; 8FEEE8D71082BFEF0017FEB8 /* kml_stream_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_stream_test.cc; sourceTree = ""; }; 8FEEE8D81082BFEF0017FEB8 /* kml_uri.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_uri.cc; sourceTree = ""; }; 8FEEE8D91082BFEF0017FEB8 /* kml_uri.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml_uri.h; sourceTree = ""; }; 8FEEE8DA1082BFEF0017FEB8 /* kml_uri_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kml_uri_internal.h; sourceTree = ""; }; 8FEEE8DB1082BFEF0017FEB8 /* kml_uri_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kml_uri_test.cc; sourceTree = ""; }; 8FEEE8DC1082BFEF0017FEB8 /* kmz_cache.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kmz_cache.cc; sourceTree = ""; }; 8FEEE8DD1082BFEF0017FEB8 /* kmz_cache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kmz_cache.h; sourceTree = ""; }; 8FEEE8DE1082BFEF0017FEB8 /* kmz_cache_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kmz_cache_test.cc; sourceTree = ""; }; 8FEEE8DF1082BFEF0017FEB8 /* kmz_file.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kmz_file.cc; sourceTree = ""; }; 8FEEE8E01082BFEF0017FEB8 /* kmz_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kmz_file.h; sourceTree = ""; }; 8FEEE8E11082BFEF0017FEB8 /* kmz_file_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kmz_file_test.cc; sourceTree = ""; }; 8FEEE8E21082BFEF0017FEB8 /* link_util.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = link_util.cc; sourceTree = ""; }; 8FEEE8E31082BFEF0017FEB8 /* link_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = link_util.h; sourceTree = ""; }; 8FEEE8E41082BFEF0017FEB8 /* link_util_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = link_util_test.cc; sourceTree = ""; }; 8FEEE8E51082BFEF0017FEB8 /* location_util.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = location_util.cc; sourceTree = ""; }; 8FEEE8E61082BFEF0017FEB8 /* location_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = location_util.h; sourceTree = ""; }; 8FEEE8E71082BFEF0017FEB8 /* location_util_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = location_util_test.cc; sourceTree = ""; }; 8FEEE8E81082BFEF0017FEB8 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; 8FEEE8E91082BFEF0017FEB8 /* merge.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge.cc; sourceTree = ""; }; 8FEEE8EA1082BFEF0017FEB8 /* merge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = merge.h; sourceTree = ""; }; 8FEEE8EB1082BFEF0017FEB8 /* merge_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = merge_test.cc; sourceTree = ""; }; 8FEEE8EC1082BFEF0017FEB8 /* object_id_parser_observer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = object_id_parser_observer.h; sourceTree = ""; }; 8FEEE8ED1082BFEF0017FEB8 /* object_id_parser_observer_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = object_id_parser_observer_test.cc; sourceTree = ""; }; 8FEEE8EE1082BFEF0017FEB8 /* old_schema_parser_observer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = old_schema_parser_observer.h; sourceTree = ""; }; 8FEEE8EF1082BFEF0017FEB8 /* old_schema_parser_observer_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = old_schema_parser_observer_test.cc; sourceTree = ""; }; 8FEEE8F01082BFEF0017FEB8 /* parse_old_schema.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parse_old_schema.cc; sourceTree = ""; }; 8FEEE8F11082BFEF0017FEB8 /* parse_old_schema.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parse_old_schema.h; sourceTree = ""; }; 8FEEE8F21082BFEF0017FEB8 /* parse_old_schema_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = parse_old_schema_test.cc; sourceTree = ""; }; 8FEEE8F31082BFEF0017FEB8 /* schema_parser_observer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = schema_parser_observer.h; sourceTree = ""; }; 8FEEE8F41082BFEF0017FEB8 /* schema_parser_observer_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = schema_parser_observer_test.cc; sourceTree = ""; }; 8FEEE8F51082BFEF0017FEB8 /* shared_style_parser_observer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = shared_style_parser_observer.h; sourceTree = ""; }; 8FEEE8F61082BFEF0017FEB8 /* shared_style_parser_observer_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shared_style_parser_observer_test.cc; sourceTree = ""; }; 8FEEE8F71082BFEF0017FEB8 /* style_inliner.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = style_inliner.cc; sourceTree = ""; }; 8FEEE8F81082BFEF0017FEB8 /* style_inliner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = style_inliner.h; sourceTree = ""; }; 8FEEE8F91082BFEF0017FEB8 /* style_inliner_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = style_inliner_internal.h; sourceTree = ""; }; 8FEEE8FA1082BFEF0017FEB8 /* style_inliner_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = style_inliner_test.cc; sourceTree = ""; }; 8FEEE8FB1082BFEF0017FEB8 /* style_merger.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = style_merger.cc; sourceTree = ""; }; 8FEEE8FC1082BFEF0017FEB8 /* style_merger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = style_merger.h; sourceTree = ""; }; 8FEEE8FD1082BFEF0017FEB8 /* style_merger_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = style_merger_test.cc; sourceTree = ""; }; 8FEEE8FE1082BFEF0017FEB8 /* style_resolver.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = style_resolver.cc; sourceTree = ""; }; 8FEEE8FF1082BFEF0017FEB8 /* style_resolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = style_resolver.h; sourceTree = ""; }; 8FEEE9001082BFEF0017FEB8 /* style_resolver_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = style_resolver_test.cc; sourceTree = ""; }; 8FEEE9011082BFEF0017FEB8 /* style_splitter.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = style_splitter.cc; sourceTree = ""; }; 8FEEE9021082BFEF0017FEB8 /* style_splitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = style_splitter.h; sourceTree = ""; }; 8FEEE9031082BFEF0017FEB8 /* style_splitter_internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = style_splitter_internal.h; sourceTree = ""; }; 8FEEE9041082BFEF0017FEB8 /* style_splitter_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = style_splitter_test.cc; sourceTree = ""; }; 8FEEE9051082BFEF0017FEB8 /* update.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = update.cc; sourceTree = ""; }; 8FEEE9061082BFEF0017FEB8 /* update.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = update.h; sourceTree = ""; }; 8FEEE9071082BFEF0017FEB8 /* update_processor.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = update_processor.cc; sourceTree = ""; }; 8FEEE9081082BFEF0017FEB8 /* update_processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = update_processor.h; sourceTree = ""; }; 8FEEE9091082BFEF0017FEB8 /* update_processor_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = update_processor_test.cc; sourceTree = ""; }; 8FEEE90A1082BFEF0017FEB8 /* update_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = update_test.cc; sourceTree = ""; }; 8FEEE90B1082BFEF0017FEB8 /* engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine.h; sourceTree = ""; }; 8FEEE90C1082BFEF0017FEB8 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; 8FEEE90E1082BFEF0017FEB8 /* feature_list_region_handler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_list_region_handler.cc; sourceTree = ""; }; 8FEEE90F1082BFEF0017FEB8 /* feature_list_region_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = feature_list_region_handler.h; sourceTree = ""; }; 8FEEE9101082BFEF0017FEB8 /* feature_list_region_handler_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = feature_list_region_handler_test.cc; sourceTree = ""; }; 8FEEE9111082BFEF0017FEB8 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; 8FEEE9121082BFEF0017FEB8 /* region_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = region_handler.h; sourceTree = ""; }; 8FEEE9131082BFEF0017FEB8 /* regionator.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = regionator.cc; sourceTree = ""; }; 8FEEE9141082BFEF0017FEB8 /* regionator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regionator.h; sourceTree = ""; }; 8FEEE9151082BFEF0017FEB8 /* regionator_qid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regionator_qid.h; sourceTree = ""; }; 8FEEE9161082BFEF0017FEB8 /* regionator_qid_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = regionator_qid_test.cc; sourceTree = ""; }; 8FEEE9171082BFEF0017FEB8 /* regionator_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = regionator_test.cc; sourceTree = ""; }; 8FEEE9181082BFEF0017FEB8 /* regionator_util.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = regionator_util.cc; sourceTree = ""; }; 8FEEE9191082BFEF0017FEB8 /* regionator_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regionator_util.h; sourceTree = ""; }; 8FEEE91A1082BFEF0017FEB8 /* regionator_util_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = regionator_util_test.cc; sourceTree = ""; }; 8FEEE91C1082BFEF0017FEB8 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; 8FEEE91D1082BFEF0017FEB8 /* xsd_complex_type.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_complex_type.cc; sourceTree = ""; }; 8FEEE91E1082BFEF0017FEB8 /* xsd_complex_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xsd_complex_type.h; sourceTree = ""; }; 8FEEE91F1082BFEF0017FEB8 /* xsd_complex_type_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_complex_type_test.cc; sourceTree = ""; }; 8FEEE9201082BFEF0017FEB8 /* xsd_element.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_element.cc; sourceTree = ""; }; 8FEEE9211082BFEF0017FEB8 /* xsd_element.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xsd_element.h; sourceTree = ""; }; 8FEEE9221082BFEF0017FEB8 /* xsd_element_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_element_test.cc; sourceTree = ""; }; 8FEEE9231082BFEF0017FEB8 /* xsd_file.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_file.cc; sourceTree = ""; }; 8FEEE9241082BFEF0017FEB8 /* xsd_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xsd_file.h; sourceTree = ""; }; 8FEEE9251082BFEF0017FEB8 /* xsd_file_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_file_test.cc; sourceTree = ""; }; 8FEEE9261082BFEF0017FEB8 /* xsd_handler.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_handler.cc; sourceTree = ""; }; 8FEEE9271082BFEF0017FEB8 /* xsd_handler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xsd_handler.h; sourceTree = ""; }; 8FEEE9281082BFEF0017FEB8 /* xsd_handler_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_handler_test.cc; sourceTree = ""; }; 8FEEE9291082BFEF0017FEB8 /* xsd_primitive_type.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_primitive_type.cc; sourceTree = ""; }; 8FEEE92A1082BFEF0017FEB8 /* xsd_primitive_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xsd_primitive_type.h; sourceTree = ""; }; 8FEEE92B1082BFEF0017FEB8 /* xsd_primitive_type_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_primitive_type_test.cc; sourceTree = ""; }; 8FEEE92C1082BFEF0017FEB8 /* xsd_schema.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xsd_schema.h; sourceTree = ""; }; 8FEEE92D1082BFEF0017FEB8 /* xsd_schema_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_schema_test.cc; sourceTree = ""; }; 8FEEE92E1082BFEF0017FEB8 /* xsd_simple_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xsd_simple_type.h; sourceTree = ""; }; 8FEEE92F1082BFEF0017FEB8 /* xsd_simple_type_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_simple_type_test.cc; sourceTree = ""; }; 8FEEE9301082BFEF0017FEB8 /* xsd_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xsd_type.h; sourceTree = ""; }; 8FEEE9311082BFEF0017FEB8 /* xsd_util.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_util.cc; sourceTree = ""; }; 8FEEE9321082BFEF0017FEB8 /* xsd_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xsd_util.h; sourceTree = ""; }; 8FEEE9331082BFEF0017FEB8 /* xsd_util_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xsd_util_test.cc; sourceTree = ""; }; 8FEEE9341082BFEF0017FEB8 /* xst_parser.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xst_parser.cc; sourceTree = ""; }; 8FEEE9351082BFEF0017FEB8 /* xst_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xst_parser.h; sourceTree = ""; }; 8FEEE9361082BFEF0017FEB8 /* xst_parser_test.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xst_parser_test.cc; sourceTree = ""; }; AA747D9E0F9514B9006C5449 /* LibKML_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LibKML_Prefix.pch; sourceTree = SOURCE_ROOT; }; AACBBE490F95108600F1A2B1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; D2AAC07E0554694100DB518D /* libLibKML.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libLibKML.a; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ D2AAC07C0554694100DB518D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( AACBBE4A0F95108600F1A2B1 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 034768DFFF38A50411DB9C8B /* Products */ = { isa = PBXGroup; children = ( D2AAC07E0554694100DB518D /* libLibKML.a */, ); name = Products; sourceTree = ""; }; 0867D691FE84028FC02AAC07 /* LibKML */ = { isa = PBXGroup; children = ( 8FEEE7B61082BFEF0017FEB8 /* kml */, 08FB77AEFE84172EC02AAC07 /* Classes */, 32C88DFF0371C24200C91783 /* Other Sources */, 0867D69AFE84028FC02AAC07 /* Frameworks */, 034768DFFF38A50411DB9C8B /* Products */, ); name = LibKML; sourceTree = ""; }; 0867D69AFE84028FC02AAC07 /* Frameworks */ = { isa = PBXGroup; children = ( AACBBE490F95108600F1A2B1 /* Foundation.framework */, ); name = Frameworks; sourceTree = ""; }; 08FB77AEFE84172EC02AAC07 /* Classes */ = { isa = PBXGroup; children = ( ); name = Classes; sourceTree = ""; }; 32C88DFF0371C24200C91783 /* Other Sources */ = { isa = PBXGroup; children = ( AA747D9E0F9514B9006C5449 /* LibKML_Prefix.pch */, ); name = "Other Sources"; sourceTree = ""; }; 8FEEE7B61082BFEF0017FEB8 /* kml */ = { isa = PBXGroup; children = ( 8FEEE7B71082BFEF0017FEB8 /* base */, 8FEEE7F71082BFEF0017FEB8 /* convenience */, 8FEEE8121082BFEF0017FEB8 /* dom */, 8FEEE8A71082BFEF0017FEB8 /* dom.h */, 8FEEE8A81082BFEF0017FEB8 /* engine */, 8FEEE90B1082BFEF0017FEB8 /* engine.h */, 8FEEE90C1082BFEF0017FEB8 /* Makefile.am */, 8FEEE90D1082BFEF0017FEB8 /* regionator */, 8FEEE91B1082BFEF0017FEB8 /* xsd */, ); name = kml; path = ../../src/kml; sourceTree = ""; }; 8FEEE7B71082BFEF0017FEB8 /* base */ = { isa = PBXGroup; children = ( 3C87AF2010881A4000015660 /* mimetypes.cc */, 3C87AF2110881A4000015660 /* mimetypes.h */, 8FEEE7B81082BFEF0017FEB8 /* attributes.cc */, 8FEEE7B91082BFEF0017FEB8 /* attributes.h */, 8FEEE7BA1082BFEF0017FEB8 /* attributes_test.cc */, 8FEEE7BB1082BFEF0017FEB8 /* color32.h */, 8FEEE7BC1082BFEF0017FEB8 /* color32_test.cc */, 8FEEE7BD1082BFEF0017FEB8 /* date_time.cc */, 8FEEE7BE1082BFEF0017FEB8 /* date_time.h */, 8FEEE7BF1082BFEF0017FEB8 /* date_time_test.cc */, 8FEEE7C01082BFEF0017FEB8 /* expat_handler.h */, 8FEEE7C11082BFEF0017FEB8 /* expat_handler_ns.cc */, 8FEEE7C21082BFEF0017FEB8 /* expat_handler_ns.h */, 8FEEE7C31082BFEF0017FEB8 /* expat_handler_ns_test.cc */, 8FEEE7C41082BFEF0017FEB8 /* expat_parser.cc */, 8FEEE7C51082BFEF0017FEB8 /* expat_parser.h */, 8FEEE7C61082BFEF0017FEB8 /* expat_parser_test.cc */, 8FEEE7C71082BFEF0017FEB8 /* file.cc */, 8FEEE7C81082BFEF0017FEB8 /* file.h */, 8FEEE7C91082BFEF0017FEB8 /* file_posix.cc */, 8FEEE7CA1082BFEF0017FEB8 /* file_test.cc */, 8FEEE7CC1082BFEF0017FEB8 /* google_internal_test.h */, 8FEEE7CD1082BFEF0017FEB8 /* Makefile.am */, 8FEEE7CE1082BFEF0017FEB8 /* math_util.cc */, 8FEEE7CF1082BFEF0017FEB8 /* math_util.h */, 8FEEE7D01082BFEF0017FEB8 /* math_util_test.cc */, 8FEEE7D11082BFEF0017FEB8 /* memory_file.h */, 8FEEE7D21082BFEF0017FEB8 /* net_cache.h */, 8FEEE7D31082BFEF0017FEB8 /* net_cache_test.cc */, 8FEEE7D41082BFEF0017FEB8 /* net_cache_test_util.h */, 8FEEE7D51082BFEF0017FEB8 /* referent.cc */, 8FEEE7D61082BFEF0017FEB8 /* referent.h */, 8FEEE7D71082BFEF0017FEB8 /* referent_test.cc */, 8FEEE7D81082BFEF0017FEB8 /* string_util.cc */, 8FEEE7D91082BFEF0017FEB8 /* string_util.h */, 8FEEE7DA1082BFEF0017FEB8 /* string_util_test.cc */, 8FEEE7DB1082BFEF0017FEB8 /* tempfile.h */, 8FEEE7DC1082BFEF0017FEB8 /* tempfile_test.cc */, 8FEEE7DD1082BFEF0017FEB8 /* time_util.cc */, 8FEEE7DE1082BFEF0017FEB8 /* time_util.h */, 8FEEE7DF1082BFEF0017FEB8 /* time_util_test.cc */, 8FEEE7E01082BFEF0017FEB8 /* unit_test.h */, 8FEEE7E11082BFEF0017FEB8 /* uri_parser.cc */, 8FEEE7E21082BFEF0017FEB8 /* uri_parser.h */, 8FEEE7E31082BFEF0017FEB8 /* uri_parser_test.cc */, 8FEEE7E41082BFEF0017FEB8 /* util.h */, 8FEEE7E51082BFEF0017FEB8 /* util_test.cc */, 8FEEE7E61082BFEF0017FEB8 /* vec3.h */, 8FEEE7E71082BFEF0017FEB8 /* vec3_test.cc */, 8FEEE7E81082BFEF0017FEB8 /* version.cc */, 8FEEE7E91082BFEF0017FEB8 /* version.h */, 8FEEE7EA1082BFEF0017FEB8 /* version_test.cc */, 8FEEE7EB1082BFEF0017FEB8 /* xml_element.h */, 8FEEE7EC1082BFEF0017FEB8 /* xml_element_test.cc */, 8FEEE7ED1082BFEF0017FEB8 /* xml_file.h */, 8FEEE7EE1082BFEF0017FEB8 /* xml_file_test.cc */, 8FEEE7EF1082BFEF0017FEB8 /* xml_namespaces.cc */, 8FEEE7F01082BFEF0017FEB8 /* xml_namespaces.h */, 8FEEE7F11082BFEF0017FEB8 /* xml_namespaces_test.cc */, 8FEEE7F21082BFEF0017FEB8 /* xmlns.h */, 8FEEE7F31082BFEF0017FEB8 /* xmlns_test.cc */, 8FEEE7F41082BFEF0017FEB8 /* zip_file.cc */, 8FEEE7F51082BFEF0017FEB8 /* zip_file.h */, 8FEEE7F61082BFEF0017FEB8 /* zip_file_test.cc */, ); path = base; sourceTree = ""; }; 8FEEE7F71082BFEF0017FEB8 /* convenience */ = { isa = PBXGroup; children = ( 8FEEE7F81082BFEF0017FEB8 /* atom_util.cc */, 8FEEE7F91082BFEF0017FEB8 /* atom_util.h */, 8FEEE7FA1082BFEF0017FEB8 /* atom_util_test.cc */, 8FEEE7FB1082BFEF0017FEB8 /* convenience.cc */, 8FEEE7FC1082BFEF0017FEB8 /* convenience.h */, 8FEEE7FD1082BFEF0017FEB8 /* convenience_test.cc */, 8FEEE7FE1082BFEF0017FEB8 /* csv_file.cc */, 8FEEE7FF1082BFEF0017FEB8 /* csv_file.h */, 8FEEE8001082BFEF0017FEB8 /* csv_file_test.cc */, 8FEEE8011082BFEF0017FEB8 /* element_counter.h */, 8FEEE8021082BFEF0017FEB8 /* element_counter_test.cc */, 8FEEE8031082BFEF0017FEB8 /* feature_list.cc */, 8FEEE8041082BFEF0017FEB8 /* feature_list.h */, 8FEEE8051082BFEF0017FEB8 /* feature_list_test.cc */, 8FEEE8061082BFEF0017FEB8 /* google_maps_data.cc */, 8FEEE8071082BFEF0017FEB8 /* google_maps_data.h */, 8FEEE8081082BFEF0017FEB8 /* google_maps_data_test.cc */, 8FEEE8091082BFEF0017FEB8 /* gpx_trk_pt_handler.h */, 8FEEE80A1082BFEF0017FEB8 /* gpx_trk_pt_handler_test.cc */, 8FEEE80B1082BFEF0017FEB8 /* http_client.cc */, 8FEEE80C1082BFEF0017FEB8 /* http_client.h */, 8FEEE80D1082BFEF0017FEB8 /* http_client_test.cc */, 8FEEE80E1082BFEF0017FEB8 /* kmz_check_links.cc */, 8FEEE80F1082BFEF0017FEB8 /* kmz_check_links.h */, 8FEEE8101082BFEF0017FEB8 /* kmz_check_links_test.cc */, 8FEEE8111082BFEF0017FEB8 /* Makefile.am */, ); path = convenience; sourceTree = ""; }; 8FEEE8121082BFEF0017FEB8 /* dom */ = { isa = PBXGroup; children = ( 8FEEE8131082BFEF0017FEB8 /* abstractlatlonbox.cc */, 8FEEE8141082BFEF0017FEB8 /* abstractlatlonbox.h */, 8FEEE8151082BFEF0017FEB8 /* abstractlatlonbox_test.cc */, 8FEEE8161082BFEF0017FEB8 /* abstractview.cc */, 8FEEE8171082BFEF0017FEB8 /* abstractview.h */, 8FEEE8181082BFEF0017FEB8 /* abstractview_test.cc */, 8FEEE8191082BFEF0017FEB8 /* atom.cc */, 8FEEE81A1082BFEF0017FEB8 /* atom.h */, 8FEEE81B1082BFEF0017FEB8 /* atom_test.cc */, 8FEEE81C1082BFEF0017FEB8 /* balloonstyle.cc */, 8FEEE81D1082BFEF0017FEB8 /* balloonstyle.h */, 8FEEE81E1082BFEF0017FEB8 /* balloonstyle_test.cc */, 8FEEE81F1082BFEF0017FEB8 /* colorstyle.cc */, 8FEEE8201082BFEF0017FEB8 /* colorstyle.h */, 8FEEE8211082BFEF0017FEB8 /* colorstyle_test.cc */, 8FEEE8221082BFEF0017FEB8 /* container.cc */, 8FEEE8231082BFEF0017FEB8 /* container.h */, 8FEEE8241082BFEF0017FEB8 /* container_test.cc */, 8FEEE8251082BFEF0017FEB8 /* document.cc */, 8FEEE8261082BFEF0017FEB8 /* document.h */, 8FEEE8271082BFEF0017FEB8 /* document_test.cc */, 8FEEE8281082BFEF0017FEB8 /* element.cc */, 8FEEE8291082BFEF0017FEB8 /* element.h */, 8FEEE82A1082BFEF0017FEB8 /* element_test.cc */, 8FEEE82B1082BFEF0017FEB8 /* extendeddata.cc */, 8FEEE82C1082BFEF0017FEB8 /* extendeddata.h */, 8FEEE82D1082BFEF0017FEB8 /* extendeddata_test.cc */, 8FEEE82E1082BFEF0017FEB8 /* feature.cc */, 8FEEE82F1082BFEF0017FEB8 /* feature.h */, 8FEEE8301082BFEF0017FEB8 /* feature_test.cc */, 8FEEE8311082BFEF0017FEB8 /* folder.cc */, 8FEEE8321082BFEF0017FEB8 /* folder.h */, 8FEEE8331082BFEF0017FEB8 /* folder_test.cc */, 8FEEE8341082BFEF0017FEB8 /* geometry.cc */, 8FEEE8351082BFEF0017FEB8 /* geometry.h */, 8FEEE8361082BFEF0017FEB8 /* geometry_test.cc */, 8FEEE8371082BFEF0017FEB8 /* gx_timeprimitive.h */, 8FEEE8381082BFEF0017FEB8 /* gx_timeprimitive_test.cc */, 8FEEE8391082BFEF0017FEB8 /* gx_tour.cc */, 8FEEE83A1082BFEF0017FEB8 /* gx_tour.h */, 8FEEE83B1082BFEF0017FEB8 /* gx_tour_test.cc */, 8FEEE83C1082BFEF0017FEB8 /* hotspot.cc */, 8FEEE83D1082BFEF0017FEB8 /* hotspot.h */, 8FEEE83E1082BFEF0017FEB8 /* hotspot_test.cc */, 8FEEE83F1082BFEF0017FEB8 /* iconstyle.cc */, 8FEEE8401082BFEF0017FEB8 /* iconstyle.h */, 8FEEE8411082BFEF0017FEB8 /* iconstyle_test.cc */, 8FEEE8421082BFEF0017FEB8 /* kml.cc */, 8FEEE8431082BFEF0017FEB8 /* kml.h */, 8FEEE8451082BFEF0017FEB8 /* kml22.h */, 8FEEE8461082BFEF0017FEB8 /* kml22_test.cc */, 8FEEE8471082BFEF0017FEB8 /* kml_cast.cc */, 8FEEE8481082BFEF0017FEB8 /* kml_cast.h */, 8FEEE8491082BFEF0017FEB8 /* kml_cast_test.cc */, 8FEEE84A1082BFEF0017FEB8 /* kml_factory.cc */, 8FEEE84B1082BFEF0017FEB8 /* kml_factory.h */, 8FEEE84C1082BFEF0017FEB8 /* kml_factory_test.cc */, 8FEEE84D1082BFEF0017FEB8 /* kml_funcs.h */, 8FEEE84E1082BFEF0017FEB8 /* kml_handler.cc */, 8FEEE84F1082BFEF0017FEB8 /* kml_handler.h */, 8FEEE8501082BFEF0017FEB8 /* kml_handler_ns.cc */, 8FEEE8511082BFEF0017FEB8 /* kml_handler_ns.h */, 8FEEE8521082BFEF0017FEB8 /* kml_handler_ns_test.cc */, 8FEEE8531082BFEF0017FEB8 /* kml_handler_test.cc */, 8FEEE8541082BFEF0017FEB8 /* kml_ptr.h */, 8FEEE8551082BFEF0017FEB8 /* kml_test.cc */, 8FEEE8561082BFEF0017FEB8 /* kmldom.h */, 8FEEE8571082BFEF0017FEB8 /* labelstyle.cc */, 8FEEE8581082BFEF0017FEB8 /* labelstyle.h */, 8FEEE8591082BFEF0017FEB8 /* labelstyle_test.cc */, 8FEEE85A1082BFEF0017FEB8 /* linestyle.cc */, 8FEEE85B1082BFEF0017FEB8 /* linestyle.h */, 8FEEE85C1082BFEF0017FEB8 /* linestyle_test.cc */, 8FEEE85D1082BFEF0017FEB8 /* link.cc */, 8FEEE85E1082BFEF0017FEB8 /* link.h */, 8FEEE85F1082BFEF0017FEB8 /* link_test.cc */, 8FEEE8601082BFEF0017FEB8 /* liststyle.cc */, 8FEEE8611082BFEF0017FEB8 /* liststyle.h */, 8FEEE8621082BFEF0017FEB8 /* liststyle_test.cc */, 8FEEE8631082BFEF0017FEB8 /* Makefile.am */, 8FEEE8641082BFEF0017FEB8 /* model.cc */, 8FEEE8651082BFEF0017FEB8 /* model.h */, 8FEEE8661082BFEF0017FEB8 /* model_test.cc */, 8FEEE8671082BFEF0017FEB8 /* networklink.cc */, 8FEEE8681082BFEF0017FEB8 /* networklink.h */, 8FEEE8691082BFEF0017FEB8 /* networklink_test.cc */, 8FEEE86A1082BFEF0017FEB8 /* networklinkcontrol.cc */, 8FEEE86B1082BFEF0017FEB8 /* networklinkcontrol.h */, 8FEEE86C1082BFEF0017FEB8 /* networklinkcontrol_test.cc */, 8FEEE86D1082BFEF0017FEB8 /* object.cc */, 8FEEE86E1082BFEF0017FEB8 /* object.h */, 8FEEE86F1082BFEF0017FEB8 /* object_test.cc */, 8FEEE8701082BFEF0017FEB8 /* overlay.cc */, 8FEEE8711082BFEF0017FEB8 /* overlay.h */, 8FEEE8721082BFEF0017FEB8 /* overlay_test.cc */, 8FEEE8731082BFEF0017FEB8 /* parser.cc */, 8FEEE8741082BFEF0017FEB8 /* parser.h */, 8FEEE8751082BFEF0017FEB8 /* parser_observer.h */, 8FEEE8761082BFEF0017FEB8 /* parser_test.cc */, 8FEEE8771082BFEF0017FEB8 /* placemark.cc */, 8FEEE8781082BFEF0017FEB8 /* placemark.h */, 8FEEE8791082BFEF0017FEB8 /* placemark_test.cc */, 8FEEE87A1082BFEF0017FEB8 /* polystyle.cc */, 8FEEE87B1082BFEF0017FEB8 /* polystyle.h */, 8FEEE87C1082BFEF0017FEB8 /* polystyle_test.cc */, 8FEEE87D1082BFEF0017FEB8 /* region.cc */, 8FEEE87E1082BFEF0017FEB8 /* region.h */, 8FEEE87F1082BFEF0017FEB8 /* region_test.cc */, 8FEEE8801082BFEF0017FEB8 /* round_trip_test.cc */, 8FEEE8811082BFEF0017FEB8 /* schema.cc */, 8FEEE8821082BFEF0017FEB8 /* schema.h */, 8FEEE8831082BFEF0017FEB8 /* schema_test.cc */, 8FEEE8841082BFEF0017FEB8 /* serializer.cc */, 8FEEE8851082BFEF0017FEB8 /* serializer.h */, 8FEEE8861082BFEF0017FEB8 /* serializer_test.cc */, 8FEEE8871082BFEF0017FEB8 /* snippet.cc */, 8FEEE8881082BFEF0017FEB8 /* snippet.h */, 8FEEE8891082BFEF0017FEB8 /* snippet_test.cc */, 8FEEE88A1082BFEF0017FEB8 /* stats_serializer.h */, 8FEEE88B1082BFEF0017FEB8 /* style.cc */, 8FEEE88C1082BFEF0017FEB8 /* style.h */, 8FEEE88D1082BFEF0017FEB8 /* style_test.cc */, 8FEEE88E1082BFEF0017FEB8 /* stylemap.cc */, 8FEEE88F1082BFEF0017FEB8 /* stylemap.h */, 8FEEE8901082BFEF0017FEB8 /* stylemap_test.cc */, 8FEEE8911082BFEF0017FEB8 /* styleselector.cc */, 8FEEE8921082BFEF0017FEB8 /* styleselector.h */, 8FEEE8931082BFEF0017FEB8 /* styleselector_test.cc */, 8FEEE8941082BFEF0017FEB8 /* substyle.cc */, 8FEEE8951082BFEF0017FEB8 /* substyle.h */, 8FEEE8961082BFEF0017FEB8 /* substyle_test.cc */, 8FEEE8971082BFEF0017FEB8 /* timeprimitive.cc */, 8FEEE8981082BFEF0017FEB8 /* timeprimitive.h */, 8FEEE8991082BFEF0017FEB8 /* timeprimitive_test.cc */, 8FEEE89A1082BFEF0017FEB8 /* unknown_test.cc */, 8FEEE89B1082BFEF0017FEB8 /* vec2.cc */, 8FEEE89C1082BFEF0017FEB8 /* vec2.h */, 8FEEE89D1082BFEF0017FEB8 /* vec2_test.cc */, 8FEEE89E1082BFEF0017FEB8 /* xal.cc */, 8FEEE89F1082BFEF0017FEB8 /* xal.h */, 8FEEE8A01082BFEF0017FEB8 /* xal_test.cc */, 8FEEE8A11082BFEF0017FEB8 /* xml_serializer.cc */, 8FEEE8A21082BFEF0017FEB8 /* xml_serializer.h */, 8FEEE8A31082BFEF0017FEB8 /* xml_serializer_test.cc */, 8FEEE8A41082BFEF0017FEB8 /* xsd.cc */, 8FEEE8A51082BFEF0017FEB8 /* xsd.h */, 8FEEE8A61082BFEF0017FEB8 /* xsd_test.cc */, ); path = dom; sourceTree = ""; }; 8FEEE8A81082BFEF0017FEB8 /* engine */ = { isa = PBXGroup; children = ( 8FEEE8A91082BFEF0017FEB8 /* bbox.h */, 8FEEE8AA1082BFEF0017FEB8 /* bbox_test.cc */, 8FEEE8AB1082BFEF0017FEB8 /* clone.cc */, 8FEEE8AC1082BFEF0017FEB8 /* clone.h */, 8FEEE8AD1082BFEF0017FEB8 /* clone_test.cc */, 8FEEE8AE1082BFEF0017FEB8 /* engine_constants.h */, 8FEEE8AF1082BFEF0017FEB8 /* engine_types.h */, 8FEEE8B01082BFEF0017FEB8 /* entity_mapper.cc */, 8FEEE8B11082BFEF0017FEB8 /* entity_mapper.h */, 8FEEE8B21082BFEF0017FEB8 /* entity_mapper_test.cc */, 8FEEE8B31082BFEF0017FEB8 /* feature_balloon.cc */, 8FEEE8B41082BFEF0017FEB8 /* feature_balloon.h */, 8FEEE8B51082BFEF0017FEB8 /* feature_balloon_test.cc */, 8FEEE8B61082BFEF0017FEB8 /* feature_view.cc */, 8FEEE8B71082BFEF0017FEB8 /* feature_view.h */, 8FEEE8B81082BFEF0017FEB8 /* feature_view_test.cc */, 8FEEE8B91082BFEF0017FEB8 /* feature_visitor.cc */, 8FEEE8BA1082BFEF0017FEB8 /* feature_visitor.h */, 8FEEE8BB1082BFEF0017FEB8 /* feature_visitor_test.cc */, 8FEEE8BC1082BFEF0017FEB8 /* find.cc */, 8FEEE8BD1082BFEF0017FEB8 /* find.h */, 8FEEE8BE1082BFEF0017FEB8 /* find_test.cc */, 8FEEE8BF1082BFEF0017FEB8 /* find_xml_namespaces.cc */, 8FEEE8C01082BFEF0017FEB8 /* find_xml_namespaces.h */, 8FEEE8C11082BFEF0017FEB8 /* find_xml_namespaces_test.cc */, 8FEEE8C21082BFEF0017FEB8 /* get_link_parents.cc */, 8FEEE8C31082BFEF0017FEB8 /* get_link_parents.h */, 8FEEE8C41082BFEF0017FEB8 /* get_link_parents_test.cc */, 8FEEE8C51082BFEF0017FEB8 /* get_links.cc */, 8FEEE8C61082BFEF0017FEB8 /* get_links.h */, 8FEEE8C71082BFEF0017FEB8 /* get_links_test.cc */, 8FEEE8C81082BFEF0017FEB8 /* href.cc */, 8FEEE8C91082BFEF0017FEB8 /* href.h */, 8FEEE8CA1082BFEF0017FEB8 /* href_test.cc */, 8FEEE8CB1082BFEF0017FEB8 /* id_mapper.cc */, 8FEEE8CC1082BFEF0017FEB8 /* id_mapper.h */, 8FEEE8CD1082BFEF0017FEB8 /* id_mapper_internal.h */, 8FEEE8CE1082BFEF0017FEB8 /* id_mapper_test.cc */, 8FEEE8CF1082BFEF0017FEB8 /* kml_cache.cc */, 8FEEE8D01082BFEF0017FEB8 /* kml_cache.h */, 8FEEE8D11082BFEF0017FEB8 /* kml_cache_test.cc */, 8FEEE8D21082BFEF0017FEB8 /* kml_file.cc */, 8FEEE8D31082BFEF0017FEB8 /* kml_file.h */, 8FEEE8D41082BFEF0017FEB8 /* kml_file_test.cc */, 8FEEE8D51082BFEF0017FEB8 /* kml_stream.cc */, 8FEEE8D61082BFEF0017FEB8 /* kml_stream.h */, 8FEEE8D71082BFEF0017FEB8 /* kml_stream_test.cc */, 8FEEE8D81082BFEF0017FEB8 /* kml_uri.cc */, 8FEEE8D91082BFEF0017FEB8 /* kml_uri.h */, 8FEEE8DA1082BFEF0017FEB8 /* kml_uri_internal.h */, 8FEEE8DB1082BFEF0017FEB8 /* kml_uri_test.cc */, 8FEEE8DC1082BFEF0017FEB8 /* kmz_cache.cc */, 8FEEE8DD1082BFEF0017FEB8 /* kmz_cache.h */, 8FEEE8DE1082BFEF0017FEB8 /* kmz_cache_test.cc */, 8FEEE8DF1082BFEF0017FEB8 /* kmz_file.cc */, 8FEEE8E01082BFEF0017FEB8 /* kmz_file.h */, 8FEEE8E11082BFEF0017FEB8 /* kmz_file_test.cc */, 8FEEE8E21082BFEF0017FEB8 /* link_util.cc */, 8FEEE8E31082BFEF0017FEB8 /* link_util.h */, 8FEEE8E41082BFEF0017FEB8 /* link_util_test.cc */, 8FEEE8E51082BFEF0017FEB8 /* location_util.cc */, 8FEEE8E61082BFEF0017FEB8 /* location_util.h */, 8FEEE8E71082BFEF0017FEB8 /* location_util_test.cc */, 8FEEE8E81082BFEF0017FEB8 /* Makefile.am */, 8FEEE8E91082BFEF0017FEB8 /* merge.cc */, 8FEEE8EA1082BFEF0017FEB8 /* merge.h */, 8FEEE8EB1082BFEF0017FEB8 /* merge_test.cc */, 8FEEE8EC1082BFEF0017FEB8 /* object_id_parser_observer.h */, 8FEEE8ED1082BFEF0017FEB8 /* object_id_parser_observer_test.cc */, 8FEEE8EE1082BFEF0017FEB8 /* old_schema_parser_observer.h */, 8FEEE8EF1082BFEF0017FEB8 /* old_schema_parser_observer_test.cc */, 8FEEE8F01082BFEF0017FEB8 /* parse_old_schema.cc */, 8FEEE8F11082BFEF0017FEB8 /* parse_old_schema.h */, 8FEEE8F21082BFEF0017FEB8 /* parse_old_schema_test.cc */, 8FEEE8F31082BFEF0017FEB8 /* schema_parser_observer.h */, 8FEEE8F41082BFEF0017FEB8 /* schema_parser_observer_test.cc */, 8FEEE8F51082BFEF0017FEB8 /* shared_style_parser_observer.h */, 8FEEE8F61082BFEF0017FEB8 /* shared_style_parser_observer_test.cc */, 8FEEE8F71082BFEF0017FEB8 /* style_inliner.cc */, 8FEEE8F81082BFEF0017FEB8 /* style_inliner.h */, 8FEEE8F91082BFEF0017FEB8 /* style_inliner_internal.h */, 8FEEE8FA1082BFEF0017FEB8 /* style_inliner_test.cc */, 8FEEE8FB1082BFEF0017FEB8 /* style_merger.cc */, 8FEEE8FC1082BFEF0017FEB8 /* style_merger.h */, 8FEEE8FD1082BFEF0017FEB8 /* style_merger_test.cc */, 8FEEE8FE1082BFEF0017FEB8 /* style_resolver.cc */, 8FEEE8FF1082BFEF0017FEB8 /* style_resolver.h */, 8FEEE9001082BFEF0017FEB8 /* style_resolver_test.cc */, 8FEEE9011082BFEF0017FEB8 /* style_splitter.cc */, 8FEEE9021082BFEF0017FEB8 /* style_splitter.h */, 8FEEE9031082BFEF0017FEB8 /* style_splitter_internal.h */, 8FEEE9041082BFEF0017FEB8 /* style_splitter_test.cc */, 8FEEE9051082BFEF0017FEB8 /* update.cc */, 8FEEE9061082BFEF0017FEB8 /* update.h */, 8FEEE9071082BFEF0017FEB8 /* update_processor.cc */, 8FEEE9081082BFEF0017FEB8 /* update_processor.h */, 8FEEE9091082BFEF0017FEB8 /* update_processor_test.cc */, 8FEEE90A1082BFEF0017FEB8 /* update_test.cc */, ); path = engine; sourceTree = ""; }; 8FEEE90D1082BFEF0017FEB8 /* regionator */ = { isa = PBXGroup; children = ( 8FEEE90E1082BFEF0017FEB8 /* feature_list_region_handler.cc */, 8FEEE90F1082BFEF0017FEB8 /* feature_list_region_handler.h */, 8FEEE9101082BFEF0017FEB8 /* feature_list_region_handler_test.cc */, 8FEEE9111082BFEF0017FEB8 /* Makefile.am */, 8FEEE9121082BFEF0017FEB8 /* region_handler.h */, 8FEEE9131082BFEF0017FEB8 /* regionator.cc */, 8FEEE9141082BFEF0017FEB8 /* regionator.h */, 8FEEE9151082BFEF0017FEB8 /* regionator_qid.h */, 8FEEE9161082BFEF0017FEB8 /* regionator_qid_test.cc */, 8FEEE9171082BFEF0017FEB8 /* regionator_test.cc */, 8FEEE9181082BFEF0017FEB8 /* regionator_util.cc */, 8FEEE9191082BFEF0017FEB8 /* regionator_util.h */, 8FEEE91A1082BFEF0017FEB8 /* regionator_util_test.cc */, ); path = regionator; sourceTree = ""; }; 8FEEE91B1082BFEF0017FEB8 /* xsd */ = { isa = PBXGroup; children = ( 8FEEE91C1082BFEF0017FEB8 /* Makefile.am */, 8FEEE91D1082BFEF0017FEB8 /* xsd_complex_type.cc */, 8FEEE91E1082BFEF0017FEB8 /* xsd_complex_type.h */, 8FEEE91F1082BFEF0017FEB8 /* xsd_complex_type_test.cc */, 8FEEE9201082BFEF0017FEB8 /* xsd_element.cc */, 8FEEE9211082BFEF0017FEB8 /* xsd_element.h */, 8FEEE9221082BFEF0017FEB8 /* xsd_element_test.cc */, 8FEEE9231082BFEF0017FEB8 /* xsd_file.cc */, 8FEEE9241082BFEF0017FEB8 /* xsd_file.h */, 8FEEE9251082BFEF0017FEB8 /* xsd_file_test.cc */, 8FEEE9261082BFEF0017FEB8 /* xsd_handler.cc */, 8FEEE9271082BFEF0017FEB8 /* xsd_handler.h */, 8FEEE9281082BFEF0017FEB8 /* xsd_handler_test.cc */, 8FEEE9291082BFEF0017FEB8 /* xsd_primitive_type.cc */, 8FEEE92A1082BFEF0017FEB8 /* xsd_primitive_type.h */, 8FEEE92B1082BFEF0017FEB8 /* xsd_primitive_type_test.cc */, 8FEEE92C1082BFEF0017FEB8 /* xsd_schema.h */, 8FEEE92D1082BFEF0017FEB8 /* xsd_schema_test.cc */, 8FEEE92E1082BFEF0017FEB8 /* xsd_simple_type.h */, 8FEEE92F1082BFEF0017FEB8 /* xsd_simple_type_test.cc */, 8FEEE9301082BFEF0017FEB8 /* xsd_type.h */, 8FEEE9311082BFEF0017FEB8 /* xsd_util.cc */, 8FEEE9321082BFEF0017FEB8 /* xsd_util.h */, 8FEEE9331082BFEF0017FEB8 /* xsd_util_test.cc */, 8FEEE9341082BFEF0017FEB8 /* xst_parser.cc */, 8FEEE9351082BFEF0017FEB8 /* xst_parser.h */, 8FEEE9361082BFEF0017FEB8 /* xst_parser_test.cc */, ); path = xsd; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ D2AAC07A0554694100DB518D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( AA747D9F0F9514B9006C5449 /* LibKML_Prefix.pch in Headers */, 8FEEE9381082BFEF0017FEB8 /* attributes.h in Headers */, 8FEEE93A1082BFEF0017FEB8 /* color32.h in Headers */, 8FEEE93D1082BFEF0017FEB8 /* date_time.h in Headers */, 8FEEE93F1082BFEF0017FEB8 /* expat_handler.h in Headers */, 8FEEE9411082BFEF0017FEB8 /* expat_handler_ns.h in Headers */, 8FEEE9441082BFEF0017FEB8 /* expat_parser.h in Headers */, 8FEEE9471082BFEF0017FEB8 /* file.h in Headers */, 8FEEE94B1082BFEF0017FEB8 /* google_internal_test.h in Headers */, 8FEEE94D1082BFEF0017FEB8 /* math_util.h in Headers */, 8FEEE94F1082BFEF0017FEB8 /* memory_file.h in Headers */, 8FEEE9501082BFEF0017FEB8 /* net_cache.h in Headers */, 8FEEE9521082BFEF0017FEB8 /* net_cache_test_util.h in Headers */, 8FEEE9541082BFEF0017FEB8 /* referent.h in Headers */, 8FEEE9571082BFEF0017FEB8 /* string_util.h in Headers */, 8FEEE9591082BFEF0017FEB8 /* tempfile.h in Headers */, 8FEEE95C1082BFEF0017FEB8 /* time_util.h in Headers */, 8FEEE95E1082BFEF0017FEB8 /* unit_test.h in Headers */, 8FEEE9601082BFEF0017FEB8 /* uri_parser.h in Headers */, 8FEEE9621082BFEF0017FEB8 /* util.h in Headers */, 8FEEE9641082BFEF0017FEB8 /* vec3.h in Headers */, 8FEEE9671082BFEF0017FEB8 /* version.h in Headers */, 8FEEE9691082BFEF0017FEB8 /* xml_element.h in Headers */, 8FEEE96B1082BFEF0017FEB8 /* xml_file.h in Headers */, 8FEEE96E1082BFEF0017FEB8 /* xml_namespaces.h in Headers */, 8FEEE9701082BFEF0017FEB8 /* xmlns.h in Headers */, 8FEEE9731082BFEF0017FEB8 /* zip_file.h in Headers */, 8FEEE9761082BFEF0017FEB8 /* atom_util.h in Headers */, 8FEEE9791082BFEF0017FEB8 /* convenience.h in Headers */, 8FEEE97C1082BFEF0017FEB8 /* csv_file.h in Headers */, 8FEEE97E1082BFEF0017FEB8 /* element_counter.h in Headers */, 8FEEE9811082BFEF0017FEB8 /* feature_list.h in Headers */, 8FEEE9841082BFEF0017FEB8 /* google_maps_data.h in Headers */, 8FEEE9861082BFEF0017FEB8 /* gpx_trk_pt_handler.h in Headers */, 8FEEE9891082BFEF0017FEB8 /* http_client.h in Headers */, 8FEEE98C1082BFEF0017FEB8 /* kmz_check_links.h in Headers */, 8FEEE98F1082BFEF0017FEB8 /* abstractlatlonbox.h in Headers */, 8FEEE9921082BFEF0017FEB8 /* abstractview.h in Headers */, 8FEEE9951082BFEF0017FEB8 /* atom.h in Headers */, 8FEEE9981082BFEF0017FEB8 /* balloonstyle.h in Headers */, 8FEEE99B1082BFEF0017FEB8 /* colorstyle.h in Headers */, 8FEEE99E1082BFEF0017FEB8 /* container.h in Headers */, 8FEEE9A11082BFEF0017FEB8 /* document.h in Headers */, 8FEEE9A41082BFEF0017FEB8 /* element.h in Headers */, 8FEEE9A71082BFEF0017FEB8 /* extendeddata.h in Headers */, 8FEEE9AA1082BFEF0017FEB8 /* feature.h in Headers */, 8FEEE9AD1082BFEF0017FEB8 /* folder.h in Headers */, 8FEEE9B01082BFEF0017FEB8 /* geometry.h in Headers */, 8FEEE9B21082BFEF0017FEB8 /* gx_timeprimitive.h in Headers */, 8FEEE9B51082BFEF0017FEB8 /* gx_tour.h in Headers */, 8FEEE9B81082BFEF0017FEB8 /* hotspot.h in Headers */, 8FEEE9BB1082BFEF0017FEB8 /* iconstyle.h in Headers */, 8FEEE9BE1082BFEF0017FEB8 /* kml.h in Headers */, 8FEEE9C01082BFEF0017FEB8 /* kml22.h in Headers */, 8FEEE9C31082BFEF0017FEB8 /* kml_cast.h in Headers */, 8FEEE9C61082BFEF0017FEB8 /* kml_factory.h in Headers */, 8FEEE9C81082BFEF0017FEB8 /* kml_funcs.h in Headers */, 8FEEE9CA1082BFEF0017FEB8 /* kml_handler.h in Headers */, 8FEEE9CC1082BFEF0017FEB8 /* kml_handler_ns.h in Headers */, 8FEEE9CF1082BFEF0017FEB8 /* kml_ptr.h in Headers */, 8FEEE9D11082BFEF0017FEB8 /* kmldom.h in Headers */, 8FEEE9D31082BFEF0017FEB8 /* labelstyle.h in Headers */, 8FEEE9D61082BFEF0017FEB8 /* linestyle.h in Headers */, 8FEEE9D91082BFEF0017FEB8 /* link.h in Headers */, 8FEEE9DC1082BFEF0017FEB8 /* liststyle.h in Headers */, 8FEEE9DF1082BFEF0017FEB8 /* model.h in Headers */, 8FEEE9E21082BFEF0017FEB8 /* networklink.h in Headers */, 8FEEE9E51082BFEF0017FEB8 /* networklinkcontrol.h in Headers */, 8FEEE9E81082BFEF0017FEB8 /* object.h in Headers */, 8FEEE9EB1082BFEF0017FEB8 /* overlay.h in Headers */, 8FEEE9EE1082BFEF0017FEB8 /* parser.h in Headers */, 8FEEE9EF1082BFEF0017FEB8 /* parser_observer.h in Headers */, 8FEEE9F21082BFEF0017FEB8 /* placemark.h in Headers */, 8FEEE9F51082BFEF0017FEB8 /* polystyle.h in Headers */, 8FEEE9F81082BFEF0017FEB8 /* region.h in Headers */, 8FEEE9FC1082BFEF0017FEB8 /* schema.h in Headers */, 8FEEE9FF1082BFEF0017FEB8 /* serializer.h in Headers */, 8FEEEA021082BFEF0017FEB8 /* snippet.h in Headers */, 8FEEEA041082BFEF0017FEB8 /* stats_serializer.h in Headers */, 8FEEEA061082BFEF0017FEB8 /* style.h in Headers */, 8FEEEA091082BFEF0017FEB8 /* stylemap.h in Headers */, 8FEEEA0C1082BFEF0017FEB8 /* styleselector.h in Headers */, 8FEEEA0F1082BFEF0017FEB8 /* substyle.h in Headers */, 8FEEEA121082BFEF0017FEB8 /* timeprimitive.h in Headers */, 8FEEEA161082BFEF0017FEB8 /* vec2.h in Headers */, 8FEEEA191082BFEF0017FEB8 /* xal.h in Headers */, 8FEEEA1C1082BFEF0017FEB8 /* xml_serializer.h in Headers */, 8FEEEA1F1082BFEF0017FEB8 /* xsd.h in Headers */, 8FEEEA211082BFEF0017FEB8 /* dom.h in Headers */, 8FEEEA221082BFEF0017FEB8 /* bbox.h in Headers */, 8FEEEA251082BFEF0017FEB8 /* clone.h in Headers */, 8FEEEA271082BFEF0017FEB8 /* engine_constants.h in Headers */, 8FEEEA281082BFEF0017FEB8 /* engine_types.h in Headers */, 8FEEEA2A1082BFEF0017FEB8 /* entity_mapper.h in Headers */, 8FEEEA2D1082BFEF0017FEB8 /* feature_balloon.h in Headers */, 8FEEEA301082BFEF0017FEB8 /* feature_view.h in Headers */, 8FEEEA331082BFEF0017FEB8 /* feature_visitor.h in Headers */, 8FEEEA361082BFEF0017FEB8 /* find.h in Headers */, 8FEEEA391082BFEF0017FEB8 /* find_xml_namespaces.h in Headers */, 8FEEEA3C1082BFEF0017FEB8 /* get_link_parents.h in Headers */, 8FEEEA3F1082BFEF0017FEB8 /* get_links.h in Headers */, 8FEEEA421082BFEF0017FEB8 /* href.h in Headers */, 8FEEEA451082BFEF0017FEB8 /* id_mapper.h in Headers */, 8FEEEA461082BFEF0017FEB8 /* id_mapper_internal.h in Headers */, 8FEEEA491082BFEF0017FEB8 /* kml_cache.h in Headers */, 8FEEEA4C1082BFEF0017FEB8 /* kml_file.h in Headers */, 8FEEEA4F1082BFEF0017FEB8 /* kml_stream.h in Headers */, 8FEEEA521082BFEF0017FEB8 /* kml_uri.h in Headers */, 8FEEEA531082BFEF0017FEB8 /* kml_uri_internal.h in Headers */, 8FEEEA561082BFEF0017FEB8 /* kmz_cache.h in Headers */, 8FEEEA591082BFEF0017FEB8 /* kmz_file.h in Headers */, 8FEEEA5C1082BFEF0017FEB8 /* link_util.h in Headers */, 8FEEEA5F1082BFEF0017FEB8 /* location_util.h in Headers */, 8FEEEA621082BFEF0017FEB8 /* merge.h in Headers */, 8FEEEA641082BFEF0017FEB8 /* object_id_parser_observer.h in Headers */, 8FEEEA661082BFEF0017FEB8 /* old_schema_parser_observer.h in Headers */, 8FEEEA691082BFEF0017FEB8 /* parse_old_schema.h in Headers */, 8FEEEA6B1082BFEF0017FEB8 /* schema_parser_observer.h in Headers */, 8FEEEA6D1082BFEF0017FEB8 /* shared_style_parser_observer.h in Headers */, 8FEEEA701082BFEF0017FEB8 /* style_inliner.h in Headers */, 8FEEEA711082BFEF0017FEB8 /* style_inliner_internal.h in Headers */, 8FEEEA741082BFEF0017FEB8 /* style_merger.h in Headers */, 8FEEEA771082BFEF0017FEB8 /* style_resolver.h in Headers */, 8FEEEA7A1082BFEF0017FEB8 /* style_splitter.h in Headers */, 8FEEEA7B1082BFEF0017FEB8 /* style_splitter_internal.h in Headers */, 8FEEEA7E1082BFEF0017FEB8 /* update.h in Headers */, 8FEEEA801082BFEF0017FEB8 /* update_processor.h in Headers */, 8FEEEA831082BFEF0017FEB8 /* engine.h in Headers */, 8FEEEA851082BFEF0017FEB8 /* feature_list_region_handler.h in Headers */, 8FEEEA871082BFEF0017FEB8 /* region_handler.h in Headers */, 8FEEEA891082BFEF0017FEB8 /* regionator.h in Headers */, 8FEEEA8A1082BFEF0017FEB8 /* regionator_qid.h in Headers */, 8FEEEA8E1082BFEF0017FEB8 /* regionator_util.h in Headers */, 8FEEEA911082BFEF0017FEB8 /* xsd_complex_type.h in Headers */, 8FEEEA941082BFEF0017FEB8 /* xsd_element.h in Headers */, 8FEEEA971082BFEF0017FEB8 /* xsd_file.h in Headers */, 8FEEEA9A1082BFEF0017FEB8 /* xsd_handler.h in Headers */, 8FEEEA9D1082BFEF0017FEB8 /* xsd_primitive_type.h in Headers */, 8FEEEA9F1082BFEF0017FEB8 /* xsd_schema.h in Headers */, 8FEEEAA11082BFEF0017FEB8 /* xsd_simple_type.h in Headers */, 8FEEEAA31082BFEF0017FEB8 /* xsd_type.h in Headers */, 8FEEEAA51082BFEF0017FEB8 /* xsd_util.h in Headers */, 8FEEEAA81082BFEF0017FEB8 /* xst_parser.h in Headers */, 3C87AF2310881A4000015660 /* mimetypes.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ D2AAC07D0554694100DB518D /* LibKML */ = { isa = PBXNativeTarget; buildConfigurationList = 1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "LibKML" */; buildPhases = ( D2AAC07A0554694100DB518D /* Headers */, D2AAC07B0554694100DB518D /* Sources */, D2AAC07C0554694100DB518D /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = LibKML; productName = LibKML; productReference = D2AAC07E0554694100DB518D /* libLibKML.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 0867D690FE84028FC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "LibKML" */; compatibilityVersion = "Xcode 3.1"; hasScannedForEncodings = 1; mainGroup = 0867D691FE84028FC02AAC07 /* LibKML */; productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( D2AAC07D0554694100DB518D /* LibKML */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ D2AAC07B0554694100DB518D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 8FEEE9371082BFEF0017FEB8 /* attributes.cc in Sources */, 8FEEE9391082BFEF0017FEB8 /* attributes_test.cc in Sources */, 8FEEE93B1082BFEF0017FEB8 /* color32_test.cc in Sources */, 8FEEE93C1082BFEF0017FEB8 /* date_time.cc in Sources */, 8FEEE93E1082BFEF0017FEB8 /* date_time_test.cc in Sources */, 8FEEE9401082BFEF0017FEB8 /* expat_handler_ns.cc in Sources */, 8FEEE9421082BFEF0017FEB8 /* expat_handler_ns_test.cc in Sources */, 8FEEE9431082BFEF0017FEB8 /* expat_parser.cc in Sources */, 8FEEE9451082BFEF0017FEB8 /* expat_parser_test.cc in Sources */, 8FEEE9461082BFEF0017FEB8 /* file.cc in Sources */, 8FEEE9481082BFEF0017FEB8 /* file_posix.cc in Sources */, 8FEEE9491082BFEF0017FEB8 /* file_test.cc in Sources */, 8FEEE94C1082BFEF0017FEB8 /* math_util.cc in Sources */, 8FEEE94E1082BFEF0017FEB8 /* math_util_test.cc in Sources */, 8FEEE9511082BFEF0017FEB8 /* net_cache_test.cc in Sources */, 8FEEE9531082BFEF0017FEB8 /* referent.cc in Sources */, 8FEEE9551082BFEF0017FEB8 /* referent_test.cc in Sources */, 8FEEE9561082BFEF0017FEB8 /* string_util.cc in Sources */, 8FEEE9581082BFEF0017FEB8 /* string_util_test.cc in Sources */, 8FEEE95A1082BFEF0017FEB8 /* tempfile_test.cc in Sources */, 8FEEE95B1082BFEF0017FEB8 /* time_util.cc in Sources */, 8FEEE95D1082BFEF0017FEB8 /* time_util_test.cc in Sources */, 8FEEE95F1082BFEF0017FEB8 /* uri_parser.cc in Sources */, 8FEEE9611082BFEF0017FEB8 /* uri_parser_test.cc in Sources */, 8FEEE9631082BFEF0017FEB8 /* util_test.cc in Sources */, 8FEEE9651082BFEF0017FEB8 /* vec3_test.cc in Sources */, 8FEEE9661082BFEF0017FEB8 /* version.cc in Sources */, 8FEEE9681082BFEF0017FEB8 /* version_test.cc in Sources */, 8FEEE96A1082BFEF0017FEB8 /* xml_element_test.cc in Sources */, 8FEEE96C1082BFEF0017FEB8 /* xml_file_test.cc in Sources */, 8FEEE96D1082BFEF0017FEB8 /* xml_namespaces.cc in Sources */, 8FEEE96F1082BFEF0017FEB8 /* xml_namespaces_test.cc in Sources */, 8FEEE9711082BFEF0017FEB8 /* xmlns_test.cc in Sources */, 8FEEE9721082BFEF0017FEB8 /* zip_file.cc in Sources */, 8FEEE9741082BFEF0017FEB8 /* zip_file_test.cc in Sources */, 8FEEE9751082BFEF0017FEB8 /* atom_util.cc in Sources */, 8FEEE9771082BFEF0017FEB8 /* atom_util_test.cc in Sources */, 8FEEE9781082BFEF0017FEB8 /* convenience.cc in Sources */, 8FEEE97A1082BFEF0017FEB8 /* convenience_test.cc in Sources */, 8FEEE97B1082BFEF0017FEB8 /* csv_file.cc in Sources */, 8FEEE97D1082BFEF0017FEB8 /* csv_file_test.cc in Sources */, 8FEEE97F1082BFEF0017FEB8 /* element_counter_test.cc in Sources */, 8FEEE9801082BFEF0017FEB8 /* feature_list.cc in Sources */, 8FEEE9821082BFEF0017FEB8 /* feature_list_test.cc in Sources */, 8FEEE9831082BFEF0017FEB8 /* google_maps_data.cc in Sources */, 8FEEE9851082BFEF0017FEB8 /* google_maps_data_test.cc in Sources */, 8FEEE9871082BFEF0017FEB8 /* gpx_trk_pt_handler_test.cc in Sources */, 8FEEE9881082BFEF0017FEB8 /* http_client.cc in Sources */, 8FEEE98A1082BFEF0017FEB8 /* http_client_test.cc in Sources */, 8FEEE98B1082BFEF0017FEB8 /* kmz_check_links.cc in Sources */, 8FEEE98D1082BFEF0017FEB8 /* kmz_check_links_test.cc in Sources */, 8FEEE98E1082BFEF0017FEB8 /* abstractlatlonbox.cc in Sources */, 8FEEE9901082BFEF0017FEB8 /* abstractlatlonbox_test.cc in Sources */, 8FEEE9911082BFEF0017FEB8 /* abstractview.cc in Sources */, 8FEEE9931082BFEF0017FEB8 /* abstractview_test.cc in Sources */, 8FEEE9941082BFEF0017FEB8 /* atom.cc in Sources */, 8FEEE9961082BFEF0017FEB8 /* atom_test.cc in Sources */, 8FEEE9971082BFEF0017FEB8 /* balloonstyle.cc in Sources */, 8FEEE9991082BFEF0017FEB8 /* balloonstyle_test.cc in Sources */, 8FEEE99A1082BFEF0017FEB8 /* colorstyle.cc in Sources */, 8FEEE99C1082BFEF0017FEB8 /* colorstyle_test.cc in Sources */, 8FEEE99D1082BFEF0017FEB8 /* container.cc in Sources */, 8FEEE99F1082BFEF0017FEB8 /* container_test.cc in Sources */, 8FEEE9A01082BFEF0017FEB8 /* document.cc in Sources */, 8FEEE9A21082BFEF0017FEB8 /* document_test.cc in Sources */, 8FEEE9A31082BFEF0017FEB8 /* element.cc in Sources */, 8FEEE9A51082BFEF0017FEB8 /* element_test.cc in Sources */, 8FEEE9A61082BFEF0017FEB8 /* extendeddata.cc in Sources */, 8FEEE9A81082BFEF0017FEB8 /* extendeddata_test.cc in Sources */, 8FEEE9A91082BFEF0017FEB8 /* feature.cc in Sources */, 8FEEE9AB1082BFEF0017FEB8 /* feature_test.cc in Sources */, 8FEEE9AC1082BFEF0017FEB8 /* folder.cc in Sources */, 8FEEE9AE1082BFEF0017FEB8 /* folder_test.cc in Sources */, 8FEEE9AF1082BFEF0017FEB8 /* geometry.cc in Sources */, 8FEEE9B11082BFEF0017FEB8 /* geometry_test.cc in Sources */, 8FEEE9B31082BFEF0017FEB8 /* gx_timeprimitive_test.cc in Sources */, 8FEEE9B41082BFEF0017FEB8 /* gx_tour.cc in Sources */, 8FEEE9B61082BFEF0017FEB8 /* gx_tour_test.cc in Sources */, 8FEEE9B71082BFEF0017FEB8 /* hotspot.cc in Sources */, 8FEEE9B91082BFEF0017FEB8 /* hotspot_test.cc in Sources */, 8FEEE9BA1082BFEF0017FEB8 /* iconstyle.cc in Sources */, 8FEEE9BC1082BFEF0017FEB8 /* iconstyle_test.cc in Sources */, 8FEEE9BD1082BFEF0017FEB8 /* kml.cc in Sources */, 8FEEE9C11082BFEF0017FEB8 /* kml22_test.cc in Sources */, 8FEEE9C21082BFEF0017FEB8 /* kml_cast.cc in Sources */, 8FEEE9C41082BFEF0017FEB8 /* kml_cast_test.cc in Sources */, 8FEEE9C51082BFEF0017FEB8 /* kml_factory.cc in Sources */, 8FEEE9C71082BFEF0017FEB8 /* kml_factory_test.cc in Sources */, 8FEEE9C91082BFEF0017FEB8 /* kml_handler.cc in Sources */, 8FEEE9CB1082BFEF0017FEB8 /* kml_handler_ns.cc in Sources */, 8FEEE9CD1082BFEF0017FEB8 /* kml_handler_ns_test.cc in Sources */, 8FEEE9CE1082BFEF0017FEB8 /* kml_handler_test.cc in Sources */, 8FEEE9D01082BFEF0017FEB8 /* kml_test.cc in Sources */, 8FEEE9D21082BFEF0017FEB8 /* labelstyle.cc in Sources */, 8FEEE9D41082BFEF0017FEB8 /* labelstyle_test.cc in Sources */, 8FEEE9D51082BFEF0017FEB8 /* linestyle.cc in Sources */, 8FEEE9D71082BFEF0017FEB8 /* linestyle_test.cc in Sources */, 8FEEE9D81082BFEF0017FEB8 /* link.cc in Sources */, 8FEEE9DA1082BFEF0017FEB8 /* link_test.cc in Sources */, 8FEEE9DB1082BFEF0017FEB8 /* liststyle.cc in Sources */, 8FEEE9DD1082BFEF0017FEB8 /* liststyle_test.cc in Sources */, 8FEEE9DE1082BFEF0017FEB8 /* model.cc in Sources */, 8FEEE9E01082BFEF0017FEB8 /* model_test.cc in Sources */, 8FEEE9E11082BFEF0017FEB8 /* networklink.cc in Sources */, 8FEEE9E31082BFEF0017FEB8 /* networklink_test.cc in Sources */, 8FEEE9E41082BFEF0017FEB8 /* networklinkcontrol.cc in Sources */, 8FEEE9E61082BFEF0017FEB8 /* networklinkcontrol_test.cc in Sources */, 8FEEE9E71082BFEF0017FEB8 /* object.cc in Sources */, 8FEEE9E91082BFEF0017FEB8 /* object_test.cc in Sources */, 8FEEE9EA1082BFEF0017FEB8 /* overlay.cc in Sources */, 8FEEE9EC1082BFEF0017FEB8 /* overlay_test.cc in Sources */, 8FEEE9ED1082BFEF0017FEB8 /* parser.cc in Sources */, 8FEEE9F01082BFEF0017FEB8 /* parser_test.cc in Sources */, 8FEEE9F11082BFEF0017FEB8 /* placemark.cc in Sources */, 8FEEE9F31082BFEF0017FEB8 /* placemark_test.cc in Sources */, 8FEEE9F41082BFEF0017FEB8 /* polystyle.cc in Sources */, 8FEEE9F61082BFEF0017FEB8 /* polystyle_test.cc in Sources */, 8FEEE9F71082BFEF0017FEB8 /* region.cc in Sources */, 8FEEE9F91082BFEF0017FEB8 /* region_test.cc in Sources */, 8FEEE9FA1082BFEF0017FEB8 /* round_trip_test.cc in Sources */, 8FEEE9FB1082BFEF0017FEB8 /* schema.cc in Sources */, 8FEEE9FD1082BFEF0017FEB8 /* schema_test.cc in Sources */, 8FEEE9FE1082BFEF0017FEB8 /* serializer.cc in Sources */, 8FEEEA001082BFEF0017FEB8 /* serializer_test.cc in Sources */, 8FEEEA011082BFEF0017FEB8 /* snippet.cc in Sources */, 8FEEEA031082BFEF0017FEB8 /* snippet_test.cc in Sources */, 8FEEEA051082BFEF0017FEB8 /* style.cc in Sources */, 8FEEEA071082BFEF0017FEB8 /* style_test.cc in Sources */, 8FEEEA081082BFEF0017FEB8 /* stylemap.cc in Sources */, 8FEEEA0A1082BFEF0017FEB8 /* stylemap_test.cc in Sources */, 8FEEEA0B1082BFEF0017FEB8 /* styleselector.cc in Sources */, 8FEEEA0D1082BFEF0017FEB8 /* styleselector_test.cc in Sources */, 8FEEEA0E1082BFEF0017FEB8 /* substyle.cc in Sources */, 8FEEEA101082BFEF0017FEB8 /* substyle_test.cc in Sources */, 8FEEEA111082BFEF0017FEB8 /* timeprimitive.cc in Sources */, 8FEEEA131082BFEF0017FEB8 /* timeprimitive_test.cc in Sources */, 8FEEEA141082BFEF0017FEB8 /* unknown_test.cc in Sources */, 8FEEEA151082BFEF0017FEB8 /* vec2.cc in Sources */, 8FEEEA171082BFEF0017FEB8 /* vec2_test.cc in Sources */, 8FEEEA181082BFEF0017FEB8 /* xal.cc in Sources */, 8FEEEA1A1082BFEF0017FEB8 /* xal_test.cc in Sources */, 8FEEEA1B1082BFEF0017FEB8 /* xml_serializer.cc in Sources */, 8FEEEA1D1082BFEF0017FEB8 /* xml_serializer_test.cc in Sources */, 8FEEEA1E1082BFEF0017FEB8 /* xsd.cc in Sources */, 8FEEEA201082BFEF0017FEB8 /* xsd_test.cc in Sources */, 8FEEEA231082BFEF0017FEB8 /* bbox_test.cc in Sources */, 8FEEEA241082BFEF0017FEB8 /* clone.cc in Sources */, 8FEEEA261082BFEF0017FEB8 /* clone_test.cc in Sources */, 8FEEEA291082BFEF0017FEB8 /* entity_mapper.cc in Sources */, 8FEEEA2B1082BFEF0017FEB8 /* entity_mapper_test.cc in Sources */, 8FEEEA2C1082BFEF0017FEB8 /* feature_balloon.cc in Sources */, 8FEEEA2E1082BFEF0017FEB8 /* feature_balloon_test.cc in Sources */, 8FEEEA2F1082BFEF0017FEB8 /* feature_view.cc in Sources */, 8FEEEA311082BFEF0017FEB8 /* feature_view_test.cc in Sources */, 8FEEEA321082BFEF0017FEB8 /* feature_visitor.cc in Sources */, 8FEEEA341082BFEF0017FEB8 /* feature_visitor_test.cc in Sources */, 8FEEEA351082BFEF0017FEB8 /* find.cc in Sources */, 8FEEEA371082BFEF0017FEB8 /* find_test.cc in Sources */, 8FEEEA381082BFEF0017FEB8 /* find_xml_namespaces.cc in Sources */, 8FEEEA3A1082BFEF0017FEB8 /* find_xml_namespaces_test.cc in Sources */, 8FEEEA3B1082BFEF0017FEB8 /* get_link_parents.cc in Sources */, 8FEEEA3D1082BFEF0017FEB8 /* get_link_parents_test.cc in Sources */, 8FEEEA3E1082BFEF0017FEB8 /* get_links.cc in Sources */, 8FEEEA401082BFEF0017FEB8 /* get_links_test.cc in Sources */, 8FEEEA411082BFEF0017FEB8 /* href.cc in Sources */, 8FEEEA431082BFEF0017FEB8 /* href_test.cc in Sources */, 8FEEEA441082BFEF0017FEB8 /* id_mapper.cc in Sources */, 8FEEEA471082BFEF0017FEB8 /* id_mapper_test.cc in Sources */, 8FEEEA481082BFEF0017FEB8 /* kml_cache.cc in Sources */, 8FEEEA4A1082BFEF0017FEB8 /* kml_cache_test.cc in Sources */, 8FEEEA4B1082BFEF0017FEB8 /* kml_file.cc in Sources */, 8FEEEA4D1082BFEF0017FEB8 /* kml_file_test.cc in Sources */, 8FEEEA4E1082BFEF0017FEB8 /* kml_stream.cc in Sources */, 8FEEEA501082BFEF0017FEB8 /* kml_stream_test.cc in Sources */, 8FEEEA511082BFEF0017FEB8 /* kml_uri.cc in Sources */, 8FEEEA541082BFEF0017FEB8 /* kml_uri_test.cc in Sources */, 8FEEEA551082BFEF0017FEB8 /* kmz_cache.cc in Sources */, 8FEEEA571082BFEF0017FEB8 /* kmz_cache_test.cc in Sources */, 8FEEEA581082BFEF0017FEB8 /* kmz_file.cc in Sources */, 8FEEEA5A1082BFEF0017FEB8 /* kmz_file_test.cc in Sources */, 8FEEEA5B1082BFEF0017FEB8 /* link_util.cc in Sources */, 8FEEEA5D1082BFEF0017FEB8 /* link_util_test.cc in Sources */, 8FEEEA5E1082BFEF0017FEB8 /* location_util.cc in Sources */, 8FEEEA601082BFEF0017FEB8 /* location_util_test.cc in Sources */, 8FEEEA611082BFEF0017FEB8 /* merge.cc in Sources */, 8FEEEA631082BFEF0017FEB8 /* merge_test.cc in Sources */, 8FEEEA651082BFEF0017FEB8 /* object_id_parser_observer_test.cc in Sources */, 8FEEEA671082BFEF0017FEB8 /* old_schema_parser_observer_test.cc in Sources */, 8FEEEA681082BFEF0017FEB8 /* parse_old_schema.cc in Sources */, 8FEEEA6A1082BFEF0017FEB8 /* parse_old_schema_test.cc in Sources */, 8FEEEA6C1082BFEF0017FEB8 /* schema_parser_observer_test.cc in Sources */, 8FEEEA6E1082BFEF0017FEB8 /* shared_style_parser_observer_test.cc in Sources */, 8FEEEA6F1082BFEF0017FEB8 /* style_inliner.cc in Sources */, 8FEEEA721082BFEF0017FEB8 /* style_inliner_test.cc in Sources */, 8FEEEA731082BFEF0017FEB8 /* style_merger.cc in Sources */, 8FEEEA751082BFEF0017FEB8 /* style_merger_test.cc in Sources */, 8FEEEA761082BFEF0017FEB8 /* style_resolver.cc in Sources */, 8FEEEA781082BFEF0017FEB8 /* style_resolver_test.cc in Sources */, 8FEEEA791082BFEF0017FEB8 /* style_splitter.cc in Sources */, 8FEEEA7C1082BFEF0017FEB8 /* style_splitter_test.cc in Sources */, 8FEEEA7D1082BFEF0017FEB8 /* update.cc in Sources */, 8FEEEA7F1082BFEF0017FEB8 /* update_processor.cc in Sources */, 8FEEEA811082BFEF0017FEB8 /* update_processor_test.cc in Sources */, 8FEEEA821082BFEF0017FEB8 /* update_test.cc in Sources */, 8FEEEA841082BFEF0017FEB8 /* feature_list_region_handler.cc in Sources */, 8FEEEA861082BFEF0017FEB8 /* feature_list_region_handler_test.cc in Sources */, 8FEEEA881082BFEF0017FEB8 /* regionator.cc in Sources */, 8FEEEA8B1082BFEF0017FEB8 /* regionator_qid_test.cc in Sources */, 8FEEEA8C1082BFEF0017FEB8 /* regionator_test.cc in Sources */, 8FEEEA8D1082BFEF0017FEB8 /* regionator_util.cc in Sources */, 8FEEEA8F1082BFEF0017FEB8 /* regionator_util_test.cc in Sources */, 8FEEEA901082BFEF0017FEB8 /* xsd_complex_type.cc in Sources */, 8FEEEA921082BFEF0017FEB8 /* xsd_complex_type_test.cc in Sources */, 8FEEEA931082BFEF0017FEB8 /* xsd_element.cc in Sources */, 8FEEEA951082BFEF0017FEB8 /* xsd_element_test.cc in Sources */, 8FEEEA961082BFEF0017FEB8 /* xsd_file.cc in Sources */, 8FEEEA981082BFEF0017FEB8 /* xsd_file_test.cc in Sources */, 8FEEEA991082BFEF0017FEB8 /* xsd_handler.cc in Sources */, 8FEEEA9B1082BFEF0017FEB8 /* xsd_handler_test.cc in Sources */, 8FEEEA9C1082BFEF0017FEB8 /* xsd_primitive_type.cc in Sources */, 8FEEEA9E1082BFEF0017FEB8 /* xsd_primitive_type_test.cc in Sources */, 8FEEEAA01082BFEF0017FEB8 /* xsd_schema_test.cc in Sources */, 8FEEEAA21082BFEF0017FEB8 /* xsd_simple_type_test.cc in Sources */, 8FEEEAA41082BFEF0017FEB8 /* xsd_util.cc in Sources */, 8FEEEAA61082BFEF0017FEB8 /* xsd_util_test.cc in Sources */, 8FEEEAA71082BFEF0017FEB8 /* xst_parser.cc in Sources */, 8FEEEAA91082BFEF0017FEB8 /* xst_parser_test.cc in Sources */, 3C87AF2210881A4000015660 /* mimetypes.cc in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 1DEB921F08733DC00010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_32_BIT)"; COPY_PHASE_STRIP = NO; DSTROOT = /tmp/LibKML.dst; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_MODEL_TUNING = G5; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = LibKML_Prefix.pch; INSTALL_PATH = /usr/local/lib; PRODUCT_NAME = LibKML; }; name = Debug; }; 1DEB922008733DC00010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; ARCHS = "$(ARCHS_STANDARD_32_BIT)"; DSTROOT = /tmp/LibKML.dst; GCC_MODEL_TUNING = G5; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = LibKML_Prefix.pch; INSTALL_PATH = /usr/local/lib; PRODUCT_NAME = LibKML; }; name = Release; }; 1DEB922308733DC00010E9CD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_BIT)"; GCC_C_LANGUAGE_STANDARD = c99; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = "DATADIR=\\\"../testdata\\\""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( ../../src, ../../third_party/boost_1_34_1, ../../third_party/expat.win32, "../../third_party/googletest-r108/include", "../../third_party/uriparser-0.7.1/include", "../../third_party/zlib-1.2.3/contrib", ); OTHER_LDFLAGS = "-ObjC"; PREBINDING = NO; SDKROOT = iphoneos3.1; }; name = Debug; }; 1DEB922408733DC00010E9CD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ARCHS = "$(ARCHS_STANDARD_32_BIT)"; GCC_C_LANGUAGE_STANDARD = c99; GCC_PREPROCESSOR_DEFINITIONS = "DATADIR=\\\"../testdata\\\""; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( ../../src, ../../third_party/boost_1_34_1, ../../third_party/expat.win32, "../../third_party/googletest-r108/include", "../../third_party/uriparser-0.7.1/include", "../../third_party/zlib-1.2.3/contrib", ); OTHER_LDFLAGS = "-ObjC"; PREBINDING = NO; SDKROOT = iphoneos3.1; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 1DEB921E08733DC00010E9CD /* Build configuration list for PBXNativeTarget "LibKML" */ = { isa = XCConfigurationList; buildConfigurations = ( 1DEB921F08733DC00010E9CD /* Debug */, 1DEB922008733DC00010E9CD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 1DEB922208733DC00010E9CD /* Build configuration list for PBXProject "LibKML" */ = { isa = XCConfigurationList; buildConfigurations = ( 1DEB922308733DC00010E9CD /* Debug */, 1DEB922408733DC00010E9CD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 0867D690FE84028FC02AAC07 /* Project object */; } libkml-1.3.0/iphone/LibKML/LibKML_Prefix.pch000066400000000000000000000002741263603257100204140ustar00rootroot00000000000000// // Prefix header for all source files of the 'CocoaTouchStaticLibrary' target in the 'CocoaTouchStaticLibrary' project. // #ifdef __OBJC__ #import #endif libkml-1.3.0/iphone/LibKML/README000066400000000000000000000001531263603257100162050ustar00rootroot00000000000000 This is experimental and not yet ready for use. This was created on xcode 3.1.2 running mac osx 10.5.8. libkml-1.3.0/minizip_README000066400000000000000000000017511263603257100154150ustar00rootroot00000000000000For KMZ reading we use the minizip contrib package that comes with zlib (see DEPENDENCIES). To avoid compiling third-party sources into our code, we build minizip as a separate library. There are some local modifications to the minizip code to avoid symbol clashes with other projects that might statically link both libkml and its dependencies with other libraries dependent on minizip. These can be seen by diffing r655 with r656. There are several modifications to the uriparser code to avoid compiler warnings on some recent flavors of GCC. Diff these revisions for details: r706 : r705 (strict initialization) r714 : r713 (free called on const pointer) * make code buildable by crosstool v16, fixed URI_INLINE declaration * removed URI_INLINE directive from functions that should not be inlined (e.g. used before they are defined). There are several changes to zlib-1.2.3/minizip to silence unitialized warnings. These are true positives and should be backported upstream. See cl/17289029. libkml-1.3.0/src/000077500000000000000000000000001263603257100135615ustar00rootroot00000000000000libkml-1.3.0/src/CMakeLists.txt000066400000000000000000000001701263603257100163170ustar00rootroot00000000000000add_subdirectory(kml) if(WITH_SWIG) add_subdirectory(swig) endif() set(LIBKML_TARGETS "${LIBKML_TARGETS}" PARENT_SCOPE)libkml-1.3.0/src/kml/000077500000000000000000000000001263603257100143445ustar00rootroot00000000000000libkml-1.3.0/src/kml/CMakeLists.txt000066400000000000000000000005041263603257100171030ustar00rootroot00000000000000add_subdirectory(base) add_subdirectory(dom) add_subdirectory(xsd) add_subdirectory(engine) add_subdirectory(convenience) add_subdirectory(regionator) set(LIBKML_TARGETS "${LIBKML_TARGETS}" PARENT_SCOPE) install( FILES dom.h engine.h DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Development) libkml-1.3.0/src/kml/base/000077500000000000000000000000001263603257100152565ustar00rootroot00000000000000libkml-1.3.0/src/kml/base/CMakeLists.txt000066400000000000000000000017251263603257100200230ustar00rootroot00000000000000 if(HAVE_SYSTEM_EXPAT) include_directories(${EXPAT_INCLUDE_DIR}) endif() list(APPEND KMLBASE_LINK_LIBS ${EXPAT_LIBRARY}) file(GLOB SRCS "*.cc" contrib/minizip/unzip.c contrib/minizip/iomem_simple.c) if(WIN32) list(REMOVE_ITEM SRCS "${CMAKE_CURRENT_SOURCE_DIR}/file_posix.cc") else() list(REMOVE_ITEM SRCS "${CMAKE_CURRENT_SOURCE_DIR}/file_win32.cc") #supress long-long warning for linux set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/zip_file.cc COMPILE_FLAGS "-Wno-long-long") endif() set(INCS attributes.h csv_splitter.h date_time.h color32.h expat_handler.h expat_handler_ns.h expat_parser.h file.h math_util.h memory_file.h mimetypes.h net_cache.h referent.h string_util.h tempfile.h time_util.h util.h vec3.h version.h xml_element.h xml_file.h xml_namespaces.h xmlns.h zip_file.h) build_target( NAME kmlbase SRCS ${SRCS} INCS ${INCS} DEPENDS ${KMLBASE_DEPENDS} LINKS ${KMLBASE_LINK_LIBS} ) libkml-1.3.0/src/kml/base/attributes.cc000066400000000000000000000116711263603257100177610ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the Attributes class. #include "kml/base/attributes.h" #include #include namespace kmlbase { // static Attributes* Attributes::Create(const char** attrs) { Attributes* attributes = new Attributes; if (attributes->Parse(attrs)) { return attributes; } delete attributes; return NULL; } Attributes* Attributes::Create(const kmlbase::StringVector& attrs) { Attributes* attributes = new Attributes; if (attributes->Parse(attrs)) { return attributes; } delete attributes; return NULL; } // private bool Attributes::Parse(const char** attrs) { while (*attrs && *(attrs+1)) { // Quietly ignore unpaired last item. const char* attr_name = *attrs++; const char* attr_val = *attrs++; attributes_map_[attr_name] = attr_val; } return true; } bool Attributes::Parse(const kmlbase::StringVector& attrs) { for (unsigned int i = 0; i < attrs.size() ; i += 2) { if (attrs.size() - i < 1) break; string attr_name = attrs.at(i); string attr_val = attrs.at(i+1); attributes_map_[attr_name] = attr_val; } return true; } void Attributes::Serialize(string* output) const { if (output) { StringMapIterator iter = CreateIterator(); for (; !iter.AtEnd(); iter.Advance()) { *output += " "; *output += iter.Data().first; *output += "=\""; *output += iter.Data().second; *output += "\""; } } } Attributes* Attributes::Clone() const { Attributes* clone = new Attributes(); clone->attributes_map_ = attributes_map_; return clone; } void Attributes::MergeAttributes(const Attributes& input) { StringMapIterator iter = input.CreateIterator(); for (; !iter.AtEnd(); iter.Advance()) { attributes_map_[iter.Data().first] = iter.Data().second; } } bool Attributes::FindValue(const string& key, string* value) const { StringMap::const_iterator entry = attributes_map_.find(key); if (entry != attributes_map_.end()) { if (value) { *value = entry->second; } return true; } return false; } bool Attributes::FindKey(const string& value, string* key) const { StringMapIterator iter = CreateIterator(); for (; !iter.AtEnd(); iter.Advance()) { if (value == iter.Data().second) { if (key) { *key = iter.Data().first; } return true; } } return false; } void Attributes::GetAttrNames(std::vector* string_vector) const { if (string_vector) { StringMapIterator iter = CreateIterator(); for (; !iter.AtEnd(); iter.Advance()) { string_vector->push_back(iter.Data().first); } } } Attributes* Attributes::SplitByPrefix(const string& prefix) { size_t prefix_size = prefix.size() + 1; // +1 for the ":" Attributes* split = new Attributes(); std::vector keys_to_erase; for (StringMapIterator iter = CreateIterator(); !iter.AtEnd(); iter.Advance()) { const string& key = iter.Data().first; if (key.compare(0, prefix_size, prefix + ":") == 0) { split->SetValue(key.substr(prefix_size), iter.Data().second); // Can't erase() while iterating so save the key. keys_to_erase.push_back(key); } } // Nothing was split out so just return now. if (split->attributes_map_.empty()) { delete split; return NULL; } // Go back and remove all entries added to the split map. for (size_t i = 0; i < keys_to_erase.size(); ++i) { attributes_map_.erase(keys_to_erase[i]); } return split; } } // end namespace kmlbase libkml-1.3.0/src/kml/base/attributes.h000066400000000000000000000121121263603257100176120ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the internal Attributes class. #ifndef KML_BASE_ATTRIBUTES_H__ #define KML_BASE_ATTRIBUTES_H__ #include #include #include #include "boost/scoped_ptr.hpp" #include "kml/base/string_util.h" #include "kml/base/util.h" namespace kmlbase { class Attributes { public: // Construct the Attributes instance from a list of name-value pairs // as is used in expat's startElement. static Attributes* Create(const char** attrs); static Attributes* Create(const kmlbase::StringVector& attrs); // Construct the Attributes instance with no initial name-value pairs. Attributes() {} // Creates an exact copy of the Attributes object. Attributes* Clone() const; bool FindValue(const string& key, string* value) const; bool FindKey(const string& value, string* key) const; size_t GetSize() const { return attributes_map_.size(); } // Split prefixed attributes out to a new Attributes. Attributes* SplitByPrefix(const string& prefix); StringMapIterator CreateIterator() const { return StringMapIterator(attributes_map_); } // Get the value of the given attribute as the templated type. Returns true // if an attribute with this name exits. If no attribute by this name exists // false is returned and the attr_val is untouched. T can be one of // string, int, double or bool. template bool GetValue(const string& attr_name, T* attr_val) const { string string_val; if (FindValue(attr_name, &string_val)) { if (attr_val) { FromString(string_val, attr_val); } return true; } return false; } // This is the same as GetValue() + erase(). template bool CutValue(const string& attr_name, T* attr_val) { if (GetValue(attr_name, attr_val)) { attributes_map_.erase(attr_name); return true; } return false; } // Set the value of the given attribute. Any previous value for this // attribute is overwritten. T can be one of string, int, double or // bool. template void SetValue(const string& attr_name, const T& attr_val) { attributes_map_[attr_name] = ToString(attr_val); } // These are deprecated. Use Get() and Set(). // TODO: remove usage elsewhere. bool GetString(const string& attr_name, string* attr_val) const { return GetValue(attr_name, attr_val); } bool GetBool(const string& attr_name, bool* attr_val) const { return GetValue(attr_name, attr_val); } bool GetDouble(const string& attr_name, double* attr_val) const { return GetValue(attr_name, attr_val); } void SetString(const string& attr_name, const string& attr_val) { SetValue(attr_name, attr_val); } // Serialize the current state of the Attributes instance into the // passed string. This appends to any content previously in the string. // If no string pointer is supplied this method does nothing. void Serialize(string* output) const; // This sets each attribute from the passed Attributes instance. // Any conflicting attributes are overridden from the input. void MergeAttributes(const Attributes& attrs); // Returns all attribute names. // NOTE: This is deprecated. Use CreateIterator(). void GetAttrNames(std::vector* attr_names) const; private: bool Parse(const char** attrs); bool Parse(const kmlbase::StringVector& attrs); // XML attributes have no order and are unique. The attribute name is // preserved to properly save unknown attributes. StringMap attributes_map_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Attributes); }; } // end namespace kmlbase #endif // KML_BASE_ATTRIBUTES_H__ libkml-1.3.0/src/kml/base/color32.h000066400000000000000000000143621263603257100167200ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the Color32 class. #ifndef KML_BASE_COLOR_H__ #define KML_BASE_COLOR_H__ #include "kml/base/string_util.h" #include "kml/base/util.h" namespace kmlbase { class Color32 { public: explicit Color32() : color_abgr_(0xffffffff) { } explicit Color32(uint32_t abgr) : color_abgr_(abgr) { } explicit Color32(int32_t abgr) : color_abgr_(static_cast(abgr)) { } Color32(unsigned char a, unsigned char b, unsigned char g, unsigned char r) { set_color_abgr((a << 24) | (b << 16) | (g << 8) | r); } Color32(const string& value) { set_color_abgr(value); } // Red. uint32_t get_red() const { return color_abgr_ & 0x000000ff; } void set_red(unsigned char value) { color_abgr_ = (color_abgr_ & 0xffffff00) | value; } // Green. uint32_t get_green() const { return (color_abgr_ & 0x0000ff00) >> 8; } void set_green(unsigned char value) { color_abgr_ = (color_abgr_ & 0xffff00ff) | value << 8; } // Blue. uint32_t get_blue() const { return (color_abgr_ & 0x00ff0000) >> 16; } void set_blue(unsigned char value) { color_abgr_ = (color_abgr_ & 0xff00ffff) | value << 16; } // Alpha. uint32_t get_alpha() const { return (color_abgr_ & 0xff000000) >> 24; } void set_alpha(unsigned char value) { color_abgr_ = (color_abgr_ & 0x00ffffff) | value << 24; } // Returns the color as AABBGGRR. uint32_t get_color_abgr() const { return color_abgr_; } // Returns the color as AARRGGBB. uint32_t get_color_argb() const { return (color_abgr_ & 0xff000000) | ((color_abgr_ & 0x00ff0000) >> 16) | (color_abgr_ & 0x0000ff00) | ((color_abgr_ & 0x000000ff) << 16); } // Returns a new string in the AABBGGRR format. string to_string_abgr() const { char out[9]; b2a_hex(get_red(), out + 6); b2a_hex(get_green(), out + 4); b2a_hex(get_blue(), out + 2); b2a_hex(get_alpha(), out); out[8] = 0; return out; } // Returns a new string in the AARRGGBB format. string to_string_argb() const { char out[9]; b2a_hex(get_blue(), out + 6); b2a_hex(get_green(), out + 4); b2a_hex(get_red(), out + 2); b2a_hex(get_alpha(), out); out[8] = 0; return out; } // Sets the color from an uint32_t of AABBGGRR color. void set_color_abgr(uint32_t color_abgr) { color_abgr_ = color_abgr; } // Sets the color from a string of AABBGGRR color. void set_color_abgr(const string& color_abgr) { uint32_t out = 0; // Don't loop over the entire string. We consider only the first // 8 non-whitespace characters significant. If the string starts with a "#" // character, skip it. (Google Earth supports this usage, despite its not // being common practice.) size_t offset = 0; while (isspace(color_abgr[offset])) { offset ++; } if (color_abgr.size() > 0 && color_abgr[offset] == '#') { offset ++; } size_t length = color_abgr.size() >= 8 + offset ? 8 : color_abgr.size(); for(size_t i = offset; i < length + offset; ++i) { out = out * 16; if (color_abgr[i] >= '0' && color_abgr[i] <= '9') { out += color_abgr[i] - '0'; } if (tolower(color_abgr[i]) >= 'a' && tolower(color_abgr[i]) <= 'f') { out += tolower(color_abgr[i]) - 'a' + 10; } } set_red(out & 0xff); set_green((out >> 8) & 0xff); set_blue((out >> 16) & 0xff); set_alpha((out >> 24) & 0xff); } // Sets the color from four unsigned r, g, b, a chars. void set_color_abgr(unsigned char a, unsigned char b, unsigned char g, unsigned char r) { set_alpha(a); set_blue(b); set_green(g); set_red(r); } // Sets the color from a uint of AARRGGBB color. void set_color_argb(uint32_t color_argb) { set_alpha((color_argb >> 24) & 0xff); set_red((color_argb >> 16) & 0xff); set_green((color_argb >> 8) & 0xff); set_blue(color_argb & 0xff); } // Operator overrides. Color32& operator=(uint32_t color_abgr) { color_abgr_ = color_abgr; return *this; } Color32& operator=(int32_t color_abgr) { color_abgr_ = static_cast(color_abgr); return *this; } Color32& operator=(const Color32& color) { color_abgr_ = color.color_abgr_; return *this; } bool operator!=(const Color32& color) const { return !operator == (color); } bool operator==(const Color32& color) const { return color_abgr_ == color.color_abgr_; } bool operator>(const Color32& color) const { return color_abgr_ > color.color_abgr_; } bool operator<(const Color32& color) const { return color_abgr_ < color.color_abgr_; } private: uint32_t color_abgr_; // Stored in the standard aabbggrr KML format. }; } // end namespace kmlbase #endif // KML_BASE_COLOR_H_ libkml-1.3.0/src/kml/base/contrib/000077500000000000000000000000001263603257100167165ustar00rootroot00000000000000libkml-1.3.0/src/kml/base/contrib/minizip/000077500000000000000000000000001263603257100203755ustar00rootroot00000000000000libkml-1.3.0/src/kml/base/contrib/minizip/ioapi.h000066400000000000000000000053201263603257100216470ustar00rootroot00000000000000/* ioapi.h -- IO base function header for compress/uncompress .zip files using zlib + zip or unzip API Version 1.01e, February 12th, 2005 Copyright (C) 1998-2005 Gilles Vollant */ #ifndef _ZLIBIOAPI_H #define _ZLIBIOAPI_H #define ZLIB_FILEFUNC_SEEK_CUR (1) #define ZLIB_FILEFUNC_SEEK_END (2) #define ZLIB_FILEFUNC_SEEK_SET (0) #define ZLIB_FILEFUNC_MODE_READ (1) #define ZLIB_FILEFUNC_MODE_WRITE (2) #define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) #define ZLIB_FILEFUNC_MODE_EXISTING (4) #define ZLIB_FILEFUNC_MODE_CREATE (8) #ifndef ZCALLBACK #if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) #define ZCALLBACK CALLBACK #else #define ZCALLBACK #endif #endif #ifdef __cplusplus extern "C" { #endif typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode)); typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size)); typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream)); typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin)); typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream)); typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream)); typedef struct zlib_filefunc_def_s { open_file_func zopen_file; read_file_func zread_file; write_file_func zwrite_file; tell_file_func ztell_file; seek_file_func zseek_file; close_file_func zclose_file; testerror_file_func zerror_file; voidpf opaque; } zlib_filefunc_def; void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); #define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size)) #define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size)) #define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream)) #define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode)) #define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream)) #define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream)) /* * This declaration is from the proposed iomem_simple package found at * http://code.trak.dk. See iomem_simple.c */ extern void* ZEXPORT mem_simple_create_file(zlib_filefunc_def* pzlib_filefunc_def, void* buffer, size_t buflen); #ifdef __cplusplus } #endif #endif libkml-1.3.0/src/kml/base/contrib/minizip/iomem_simple.c000066400000000000000000000137251263603257100232300ustar00rootroot00000000000000/* This file is from the proposed iomem_simple package found at http://code.trak.dk/ ioapi_mem2.c -- IO base function header for compress/uncompress .zip files using zlib + zip or unzip API This version of ioapi is designed to access memory rather than files. We do use a region of memory to put data in to and take it out of. We do not have auto-extending buffers and do not inform anyone else that the data has been written. It is really intended for accessing a zip archive embedded in an application such that I can write an installer with no external files. Creation of archives has not been attempted, although parts of the framework are present. Based on Unzip ioapi.c version 0.22, May 19th, 2003 Copyright (C) 1998-2003 Gilles Vollant (C) 2003 Justin Fletcher Dynamically allocated memory version. Troels K 2004 mem_close deletes the data: file is single-session. No filenames. This file is under the same license as the Unzip tool it is distributed with. */ #include #include #include #include "unzip.h" #include "iomem_simple.h" #include #ifndef ZOFF_T #define ZOFF_T uLong /* bw compability is default */ #endif #ifndef ZPOS_T #define ZPOS_T long /* bw compability is default */ #endif #if defined(_INC_WINDOWS) || defined(_WINDOWS_H) #define _BOOL_DEFINED #endif #ifndef _BOOL_DEFINED #define _BOOL_DEFINED typedef signed int BOOL; #endif #ifndef FALSE #define FALSE 0 #endif #ifndef TRUE #define TRUE 1 #endif static int fseek_calc(ZPOS_T offset, int origin, ZPOS_T* position, ZPOS_T size) { BOOL bOK = TRUE; switch (origin) { case SEEK_SET : //bOK = (offset >= 0) && (offset <= size); if (bOK) *position = offset; break; case SEEK_CUR : bOK = ((offset + *position) >= 0) && (((offset + *position) <= size)); if (bOK) *position = offset + *position; break; case SEEK_END: bOK = ((size - offset) >= 0) && (((size - offset) <= size)); if (bOK) *position = offset + size - 0; break; default: bOK = FALSE; break; } return bOK ? 0 : -1; } static voidpf ZCALLBACK mem_open OF(( voidpf opaque, const char* filename, int mode)); static uLong ZCALLBACK mem_read OF(( voidpf opaque, voidpf stream, void* buf, uLong size)); static uLong ZCALLBACK mem_write OF(( voidpf opaque, voidpf stream, const void* buf, uLong size)); static ZPOS_T ZCALLBACK mem_tell OF(( voidpf opaque, voidpf stream)); static long ZCALLBACK mem_seek OF(( voidpf opaque, voidpf stream, ZOFF_T offset, int origin)); static int ZCALLBACK mem_close OF(( voidpf opaque, voidpf stream)); static int ZCALLBACK mem_error OF(( voidpf opaque, voidpf stream)); typedef struct _MEMFILE { void* buffer; /* Base of the region of memory we're using */ ZPOS_T length; /* Size of the region of memory we're using */ ZPOS_T position; /* Current offset in the area */ } MEMFILE; static uLong ZCALLBACK mem_read (opaque, stream, buf, size) voidpf opaque; voidpf stream; void* buf; uLong size; { MEMFILE* handle = (MEMFILE*) stream; /* It's possible for this function to be called with an invalid position. */ if (handle->position < 0 || handle->position >= ZIP_MAX_UNCOMPRESSED_SIZE) { return 0; } if ( (handle->position + size) > (uLong)handle->length) { /* There is a bug in this original code. It's possible for the position * to exceed the size, which results in memcpy being handed a negative * size. See libkml's src/kml/base/zip_file_test.cc for some overflow * tests that exercise this. * size = handle->length - handle->position; */ int size_ = handle->length - handle->position; size = (size_ < 0) ? 0 : (uLong)size_; } memcpy(buf, ((char*)handle->buffer) + handle->position, size); handle->position+=size; return size; } static uLong ZCALLBACK mem_write (opaque, stream, buf, size) voidpf opaque; voidpf stream; const void* buf; uLong size; { MEMFILE* handle = (MEMFILE*) stream; if ((handle->position + size) > (uLong)handle->length) { handle->length = handle->position + size; handle->buffer = realloc(handle->buffer, handle->length); } memcpy(((char*)handle->buffer) + handle->position, buf, size); handle->position+=size; return size; } static ZPOS_T ZCALLBACK mem_tell (opaque, stream) voidpf opaque; voidpf stream; { MEMFILE *handle = (MEMFILE *)stream; return handle->position; } static long ZCALLBACK mem_seek (opaque, stream, offset, origin) voidpf opaque; voidpf stream; ZOFF_T offset; int origin; { MEMFILE* handle = (MEMFILE*)stream; return fseek_calc(offset, origin, &handle->position, handle->length); } int ZCALLBACK mem_close (opaque, stream) voidpf opaque; voidpf stream; { MEMFILE *handle = (MEMFILE *)stream; /* Note that once we've written to the buffer we don't tell anyone about it here. Probably the opaque handle could be used to inform some other component of how much data was written. This, and other aspects of writing through this interface, has not been tested. */ free (handle); return 0; } int ZCALLBACK mem_error (opaque, stream) voidpf opaque; voidpf stream; { MEMFILE *handle = (MEMFILE *)stream; /* We never return errors */ return 0; } ZEXTERN void* ZEXPORT mem_simple_create_file(zlib_filefunc_def* api, void* buffer, size_t buf_len) { MEMFILE* handle = malloc(sizeof(*handle)); api->zopen_file = NULL; api->zread_file = mem_read; api->zwrite_file = mem_write; api->ztell_file = mem_tell; api->zseek_file = mem_seek; api->zclose_file = mem_close; api->zerror_file = mem_error; api->opaque = handle; handle->position = 0; handle->buffer = buffer; handle->length = buf_len; return handle; } libkml-1.3.0/src/kml/base/contrib/minizip/iomem_simple.h000066400000000000000000000054021263603257100232260ustar00rootroot00000000000000/* ioapi.h -- IO base function header for compress/uncompress .zip files using zlib + zip or unzip API Version 1.01e, February 12th, 2005 Copyright (C) 1998-2005 Gilles Vollant */ #ifndef _IOMEM_SIMPLE_H #define _IOMEM_SIMPLE_H #define ZLIB_FILEFUNC_SEEK_CUR (1) #define ZLIB_FILEFUNC_SEEK_END (2) #define ZLIB_FILEFUNC_SEEK_SET (0) #define ZLIB_FILEFUNC_MODE_READ (1) #define ZLIB_FILEFUNC_MODE_WRITE (2) #define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) #define ZLIB_FILEFUNC_MODE_EXISTING (4) #define ZLIB_FILEFUNC_MODE_CREATE (8) #ifndef ZCALLBACK #if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) #define ZCALLBACK CALLBACK #else #define ZCALLBACK #endif #endif #ifdef __cplusplus extern "C" { #endif typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode)); typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size)); typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream)); typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin)); typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream)); typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream)); /** KMR already defined in minizip/ioapi.h typedef struct zlib_filefunc_def_s { open_file_func zopen_file; read_file_func zread_file; write_file_func zwrite_file; tell_file_func ztell_file; seek_file_func zseek_file; close_file_func zclose_file; testerror_file_func zerror_file; voidpf opaque; } zlib_filefunc_def; */ void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); #define ZREAD(filefunc,filestream,buf,size) ((*((filefunc).zread_file))((filefunc).opaque,filestream,buf,size)) #define ZWRITE(filefunc,filestream,buf,size) ((*((filefunc).zwrite_file))((filefunc).opaque,filestream,buf,size)) #define ZTELL(filefunc,filestream) ((*((filefunc).ztell_file))((filefunc).opaque,filestream)) #define ZSEEK(filefunc,filestream,pos,mode) ((*((filefunc).zseek_file))((filefunc).opaque,filestream,pos,mode)) #define ZCLOSE(filefunc,filestream) ((*((filefunc).zclose_file))((filefunc).opaque,filestream)) #define ZERROR(filefunc,filestream) ((*((filefunc).zerror_file))((filefunc).opaque,filestream)) /* * This declaration is from the proposed iomem_simple package found at * http://code.trak.dk. See iomem_simple.c */ extern void* ZEXPORT mem_simple_create_file(zlib_filefunc_def* pzlib_filefunc_def, void* buffer, size_t buflen); #ifdef __cplusplus } #endif #endif libkml-1.3.0/src/kml/base/contrib/minizip/unzip.c000066400000000000000000001507411263603257100217160ustar00rootroot00000000000000/* unzip.c -- IO for uncompress .zip files using zlib Version 1.01e, February 12th, 2005 Copyright (C) 1998-2005 Gilles Vollant Read unzip.h for more info */ /* Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of compatibility with older software. The following is from the original crypt.c. Code woven in by Terry Thorsen 1/2003. */ /* Copyright (c) 1990-2000 Info-ZIP. All rights reserved. See the accompanying file LICENSE, version 2000-Apr-09 or later (the contents of which are also included in zip.h) for terms of use. If, for some reason, all these files are missing, the Info-ZIP license also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html */ /* crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h] The encryption/decryption parts of this source code (as opposed to the non-echoing password parts) were originally written in Europe. The whole source package can be freely distributed, including from the USA. (Prior to January 2000, re-export from the US was a violation of US law.) */ /* This encryption code is a direct transcription of the algorithm from Roger Schlafly, described by Phil Katz in the file appnote.txt. This file (appnote.txt) is distributed with the PKZIP program (even in the version without encryption capabilities). */ #include #include #include #include //RR #include "unzip.h" #include "iomem_simple.h" #undef NOUNCRYPT #ifdef STDC # include # include # include #endif #ifdef NO_ERRNO_H extern int errno; #else # include #endif #ifndef local # define local static #endif /* compile with -Dlocal if your debugger can't find static symbols */ #ifndef CASESENSITIVITYDEFAULT_NO # if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) # define CASESENSITIVITYDEFAULT_NO # endif #endif #ifndef UNZ_BUFSIZE #define UNZ_BUFSIZE (16384) #endif #ifndef UNZ_MAXFILENAMEINZIP #define UNZ_MAXFILENAMEINZIP (256) #endif #ifndef ALLOC # define ALLOC(size) (malloc(size)) #endif #ifndef TRYFREE # define TRYFREE(p) {if (p) free(p);} #endif #define SIZECENTRALDIRITEM (0x2e) #define SIZEZIPLOCALHEADER (0x1e) const char libkml_unz_copyright[] = " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; /* unz_file_info_interntal contain internal info about a file in zipfile*/ typedef struct unz_file_info_internal_s { uLong offset_curfile;/* relative offset of local header 4 bytes */ } unz_file_info_internal; /* file_in_zip_read_info_s contain internal information about a file in zipfile, when reading and decompress it */ typedef struct { char *read_buffer; /* internal buffer for compressed data */ z_stream stream; /* zLib stream structure for inflate */ uLong pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ uLong stream_initialised; /* flag set if stream structure is initialised*/ uLong offset_local_extrafield;/* offset of the local extra field */ uInt size_local_extrafield;/* size of the local extra field */ uLong pos_local_extrafield; /* position in the local extra field in read*/ uLong crc32; /* crc32 of all data uncompressed */ uLong crc32_wait; /* crc32 we must obtain after decompress all */ uLong rest_read_compressed; /* number of byte to be decompressed */ uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/ zlib_filefunc_def z_filefunc; voidpf filestream; /* io structore of the zipfile */ uLong compression_method; /* compression method (0==store) */ uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ int raw; } file_in_zip_read_info_s; /* unz_s contain internal information about the zipfile */ typedef struct { zlib_filefunc_def z_filefunc; voidpf filestream; /* io structore of the zipfile */ unz_global_info gi; /* public global information */ uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ uLong num_file; /* number of the current file in the zipfile*/ uLong pos_in_central_dir; /* pos of the current file in the central dir*/ uLong current_file_ok; /* flag about the usability of the current file*/ uLong central_pos; /* position of the beginning of the central dir*/ uLong size_central_dir; /* size of the central directory */ uLong offset_central_dir; /* offset of start of central directory with respect to the starting disk number */ unz_file_info cur_file_info; /* public info about the current file in zip*/ unz_file_info_internal cur_file_info_internal; /* private info about it*/ file_in_zip_read_info_s* pfile_in_zip_read; /* structure about the current file if we are decompressing it */ int encrypted; # ifndef NOUNCRYPT unsigned long keys[3]; /* keys defining the pseudo-random sequence */ const z_crc_t* pcrc_32_tab; # endif } unz_s; void init_unz_s(unz_s* un) { un->filestream = NULL; un->byte_before_the_zipfile = 0UL; un->num_file = 0UL; un->pos_in_central_dir = 0UL; un->current_file_ok = 0UL; un->central_pos = 0UL; un->size_central_dir = 0UL; un->offset_central_dir = 0UL; un->pfile_in_zip_read = NULL; un->encrypted = 0; #ifndef NOUNCRYPT un->keys [0] = 0UL; un->keys [1] = 0UL; un->keys [2] = 0UL; un->pcrc_32_tab = NULL; #endif } #ifndef NOUNCRYPT #include #endif /* =========================================================================== Read a byte from a gz_stream; update next_in and avail_in. Return EOF for end of file. IN assertion: the stream s has been sucessfully opened for reading. */ local int unzlocal_getByte OF(( const zlib_filefunc_def* pzlib_filefunc_def, voidpf filestream, int *pi)); local int unzlocal_getByte(pzlib_filefunc_def,filestream,pi) const zlib_filefunc_def* pzlib_filefunc_def; voidpf filestream; int *pi; { unsigned char c; int err = (int)ZREAD(*pzlib_filefunc_def,filestream,&c,1); if (err==1) { *pi = (int)c; return UNZ_OK; } else { if (ZERROR(*pzlib_filefunc_def,filestream)) return UNZ_ERRNO; else return UNZ_EOF; } } /* =========================================================================== Reads a long in LSB order from the given gz_stream. Sets */ local int unzlocal_getShort OF(( const zlib_filefunc_def* pzlib_filefunc_def, voidpf filestream, uLong *pX)); local int unzlocal_getShort (pzlib_filefunc_def,filestream,pX) const zlib_filefunc_def* pzlib_filefunc_def; voidpf filestream; uLong *pX; { uLong x ; int i = 0; int err; err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); x = (uLong)i; if (err==UNZ_OK) err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<8; if (err==UNZ_OK) *pX = x; else *pX = 0; return err; } local int unzlocal_getLong OF(( const zlib_filefunc_def* pzlib_filefunc_def, voidpf filestream, uLong *pX)); local int unzlocal_getLong (pzlib_filefunc_def,filestream,pX) const zlib_filefunc_def* pzlib_filefunc_def; voidpf filestream; uLong *pX; { uLong x ; int i = 0; int err; err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); x = (uLong)i; if (err==UNZ_OK) err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<8; if (err==UNZ_OK) err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<16; if (err==UNZ_OK) err = unzlocal_getByte(pzlib_filefunc_def,filestream,&i); x += ((uLong)i)<<24; if (err==UNZ_OK) *pX = x; else *pX = 0; return err; } /* My own strcmpi / strcasecmp */ local int strcmpcasenosensitive_internal (fileName1,fileName2) const char* fileName1; const char* fileName2; { for (;;) { char c1=*(fileName1++); char c2=*(fileName2++); if ((c1>='a') && (c1<='z')) c1 -= 0x20; if ((c2>='a') && (c2<='z')) c2 -= 0x20; if (c1=='\0') return ((c2=='\0') ? 0 : -1); if (c2=='\0') return 1; if (c1c2) return 1; } } #ifdef CASESENSITIVITYDEFAULT_NO #define CASESENSITIVITYDEFAULTVALUE 2 #else #define CASESENSITIVITYDEFAULTVALUE 1 #endif #ifndef STRCMPCASENOSENTIVEFUNCTION #define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal #endif /* Compare two filename (fileName1,fileName2). If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi or strcasecmp) If iCaseSenisivity = 0, case sensitivity is defaut of your operating system (like 1 on Unix, 2 on Windows) */ extern int ZEXPORT libkml_unzStringFileNameCompare (fileName1,fileName2,iCaseSensitivity) const char* fileName1; const char* fileName2; int iCaseSensitivity; { if (iCaseSensitivity==0) iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; if (iCaseSensitivity==1) return strcmp(fileName1,fileName2); return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2); } #ifndef BUFREADCOMMENT #define BUFREADCOMMENT (0x400) #endif /* Locate the Central directory of a zipfile (at the end, just before the global comment) */ local uLong unzlocal_SearchCentralDir OF(( const zlib_filefunc_def* pzlib_filefunc_def, voidpf filestream)); local uLong unzlocal_SearchCentralDir(pzlib_filefunc_def,filestream) const zlib_filefunc_def* pzlib_filefunc_def; voidpf filestream; { unsigned char* buf; uLong uSizeFile; uLong uBackRead; uLong uMaxBack=0xffff; /* maximum size of global comment */ uLong uPosFound=0; if (ZSEEK(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) return 0; uSizeFile = ZTELL(*pzlib_filefunc_def,filestream); if (uMaxBack>uSizeFile) uMaxBack = uSizeFile; buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); if (buf==NULL) return 0; uBackRead = 4; while (uBackReaduMaxBack) uBackRead = uMaxBack; else uBackRead+=BUFREADCOMMENT; uReadPos = uSizeFile-uBackRead ; uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? (BUFREADCOMMENT+4) : (uSizeFile-uReadPos); if (ZSEEK(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) break; if (ZREAD(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) break; for (i=(int)uReadSize-3; (i--)>0;) if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) { uPosFound = uReadPos+i; break; } if (uPosFound!=0) break; } TRYFREE(buf); return uPosFound; } /* Open a Zip file. path contain the full pathname (by example, on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer "zlib/zlib114.zip". If the zipfile cannot be opened (file doesn't exist or in not valid), the return value is NULL. Else, the return value is a unzFile Handle, usable with other function of this unzip package. */ extern unzFile ZEXPORT libkml_unzOpen2 (path, pzlib_filefunc_def) const char *path; zlib_filefunc_def* pzlib_filefunc_def; { unz_s us; unz_s *s; uLong central_pos,uL; uLong number_disk; /* number of the current dist, used for spaning ZIP, unsupported, always 0*/ uLong number_disk_with_CD; /* number the the disk with central dir, used for spaning ZIP, unsupported, always 0*/ uLong number_entry_CD; /* total number of entries in the central dir (same than number_entry on nospan) */ int err=UNZ_OK; init_unz_s(&us); if (libkml_unz_copyright[0]!=' ') return NULL; if (pzlib_filefunc_def==NULL) fill_fopen_filefunc(&us.z_filefunc); else us.z_filefunc = *pzlib_filefunc_def; us.filestream= (*(us.z_filefunc.zopen_file))(us.z_filefunc.opaque, path, ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_EXISTING); if (us.filestream==NULL) return NULL; central_pos = unzlocal_SearchCentralDir(&us.z_filefunc,us.filestream); if (central_pos==0) err=UNZ_ERRNO; if (ZSEEK(us.z_filefunc, us.filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) err=UNZ_ERRNO; /* the signature, already checked */ if (unzlocal_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) err=UNZ_ERRNO; /* number of this disk */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) err=UNZ_ERRNO; /* number of the disk with the start of the central directory */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) err=UNZ_ERRNO; /* total number of entries in the central dir on this disk */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK) err=UNZ_ERRNO; /* total number of entries in the central dir */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK) err=UNZ_ERRNO; if ((number_entry_CD!=us.gi.number_entry) || (number_disk_with_CD!=0) || (number_disk!=0)) err=UNZ_BADZIPFILE; /* size of the central directory */ if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK) err=UNZ_ERRNO; /* offset of start of central directory with respect to the starting disk number */ if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK) err=UNZ_ERRNO; /* zipfile comment length */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK) err=UNZ_ERRNO; if ((central_pospfile_in_zip_read!=NULL) libkml_unzCloseCurrentFile(file); ZCLOSE(s->z_filefunc, s->filestream); TRYFREE(s); return UNZ_OK; } /* Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed return UNZ_OK if there is no problem. */ extern int ZEXPORT libkml_unzGetGlobalInfo (file,pglobal_info) unzFile file; unz_global_info *pglobal_info; { unz_s* s; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; *pglobal_info=s->gi; return UNZ_OK; } /* Translate date/time from Dos format to tm_unz (readable more easilty) */ local void unzlocal_DosDateToTmuDate (ulDosDate, ptm) uLong ulDosDate; tm_unz* ptm; { uLong uDate; uDate = (uLong)(ulDosDate>>16); ptm->tm_mday = (uInt)(uDate&0x1f) ; ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ; ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ; ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800); ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ; ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ; } /* Get Info about the current file in the zipfile, with internal only info */ local int unzlocal_GetCurrentFileInfoInternal OF((unzFile file, unz_file_info *pfile_info, unz_file_info_internal *pfile_info_internal, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)); local int unzlocal_GetCurrentFileInfoInternal (file, pfile_info, pfile_info_internal, szFileName, fileNameBufferSize, extraField, extraFieldBufferSize, szComment, commentBufferSize) unzFile file; unz_file_info *pfile_info; unz_file_info_internal *pfile_info_internal; char *szFileName; uLong fileNameBufferSize; void *extraField; uLong extraFieldBufferSize; char *szComment; uLong commentBufferSize; { unz_s* s; unz_file_info file_info; unz_file_info_internal file_info_internal; int err=UNZ_OK; uLong uMagic; long lSeek=0; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (ZSEEK(s->z_filefunc, s->filestream, s->pos_in_central_dir+s->byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET)!=0) err=UNZ_ERRNO; /* we check the magic */ if (err==UNZ_OK) if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) err=UNZ_ERRNO; else if (uMagic!=0x02014b50) err=UNZ_BADZIPFILE; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK) err=UNZ_ERRNO; unzlocal_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK) err=UNZ_ERRNO; lSeek+=file_info.size_filename; if ((err==UNZ_OK) && (szFileName!=NULL)) { uLong uSizeRead ; if (file_info.size_filename0) && (fileNameBufferSize>0)) if (ZREAD(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead) err=UNZ_ERRNO; lSeek -= uSizeRead; } if ((err==UNZ_OK) && (extraField!=NULL)) { uLong uSizeRead ; if (file_info.size_file_extraz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) if (ZREAD(s->z_filefunc, s->filestream,extraField,uSizeRead)!=uSizeRead) err=UNZ_ERRNO; lSeek += file_info.size_file_extra - uSizeRead; } else lSeek+=file_info.size_file_extra; if ((err==UNZ_OK) && (szComment!=NULL)) { uLong uSizeRead ; if (file_info.size_file_commentz_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) lSeek=0; else err=UNZ_ERRNO; if ((file_info.size_file_comment>0) && (commentBufferSize>0)) if (ZREAD(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead) err=UNZ_ERRNO; lSeek+=file_info.size_file_comment - uSizeRead; } else lSeek+=file_info.size_file_comment; if ((err==UNZ_OK) && (pfile_info!=NULL)) *pfile_info=file_info; if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) *pfile_info_internal=file_info_internal; return err; } /* Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed return UNZ_OK if there is no problem. */ extern int ZEXPORT libkml_unzGetCurrentFileInfo (file, pfile_info, szFileName, fileNameBufferSize, extraField, extraFieldBufferSize, szComment, commentBufferSize) unzFile file; unz_file_info *pfile_info; char *szFileName; uLong fileNameBufferSize; void *extraField; uLong extraFieldBufferSize; char *szComment; uLong commentBufferSize; { return unzlocal_GetCurrentFileInfoInternal(file,pfile_info,NULL, szFileName,fileNameBufferSize, extraField,extraFieldBufferSize, szComment,commentBufferSize); } /* Set the current file of the zipfile to the first file. return UNZ_OK if there is no problem */ extern int ZEXPORT libkml_unzGoToFirstFile (file) unzFile file; { int err=UNZ_OK; unz_s* s; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; s->pos_in_central_dir=s->offset_central_dir; s->num_file=0; err=unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); s->current_file_ok = (err == UNZ_OK); return err; } /* Set the current file of the zipfile to the next file. return UNZ_OK if there is no problem return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. */ extern int ZEXPORT libkml_unzGoToNextFile (file) unzFile file; { unz_s* s; int err; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */ if (s->num_file+1==s->gi.number_entry) return UNZ_END_OF_LIST_OF_FILE; s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; s->num_file++; err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); s->current_file_ok = (err == UNZ_OK); return err; } /* Try locate the file szFileName in the zipfile. For the iCaseSensitivity signification, see unzipStringFileNameCompare return value : UNZ_OK if the file is found. It becomes the current file. UNZ_END_OF_LIST_OF_FILE if the file is not found */ extern int ZEXPORT libkml_unzLocateFile (file, szFileName, iCaseSensitivity) unzFile file; const char *szFileName; int iCaseSensitivity; { unz_s* s; int err; /* We remember the 'current' position in the file so that we can jump * back there if we fail. */ unz_file_info cur_file_infoSaved; unz_file_info_internal cur_file_info_internalSaved; uLong num_fileSaved; uLong pos_in_central_dirSaved; if (file==NULL) return UNZ_PARAMERROR; if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; /* Save the current state */ num_fileSaved = s->num_file; pos_in_central_dirSaved = s->pos_in_central_dir; cur_file_infoSaved = s->cur_file_info; cur_file_info_internalSaved = s->cur_file_info_internal; err = libkml_unzGoToFirstFile(file); while (err == UNZ_OK) { char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; err = libkml_unzGetCurrentFileInfo(file,NULL, szCurrentFileName,sizeof(szCurrentFileName)-1, NULL,0,NULL,0); if (err == UNZ_OK) { if (libkml_unzStringFileNameCompare(szCurrentFileName, szFileName,iCaseSensitivity)==0) return UNZ_OK; err = libkml_unzGoToNextFile(file); } } /* We failed, so restore the state of the 'current file' to where we * were. */ s->num_file = num_fileSaved ; s->pos_in_central_dir = pos_in_central_dirSaved ; s->cur_file_info = cur_file_infoSaved; s->cur_file_info_internal = cur_file_info_internalSaved; return err; } /* /////////////////////////////////////////// // Contributed by Ryan Haksi (mailto://cryogen@infoserve.net) // I need random access // // Further optimization could be realized by adding an ability // to cache the directory in memory. The goal being a single // comprehensive file read to put the file I need in a memory. */ /* typedef struct unz_file_pos_s { uLong pos_in_zip_directory; // offset in file uLong num_of_file; // # of file } unz_file_pos; */ extern int ZEXPORT libkml_unzGetFilePos(file, file_pos) unzFile file; unz_file_pos* file_pos; { unz_s* s; if (file==NULL || file_pos==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return UNZ_END_OF_LIST_OF_FILE; file_pos->pos_in_zip_directory = s->pos_in_central_dir; file_pos->num_of_file = s->num_file; return UNZ_OK; } extern int ZEXPORT libkml_unzGoToFilePos(file, file_pos) unzFile file; unz_file_pos* file_pos; { unz_s* s; int err; if (file==NULL || file_pos==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; /* jump to the right spot */ s->pos_in_central_dir = file_pos->pos_in_zip_directory; s->num_file = file_pos->num_of_file; /* set the current file */ err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); /* return results */ s->current_file_ok = (err == UNZ_OK); return err; } /* // Unzip Helper Functions - should be here? /////////////////////////////////////////// */ /* Read the local header of the current zipfile Check the coherency of the local header and info in the end of central directory about this file store in *piSizeVar the size of extra info in local header (filename and size of extra field data) */ local int unzlocal_CheckCurrentFileCoherencyHeader (s,piSizeVar, poffset_local_extrafield, psize_local_extrafield) unz_s* s; uInt* piSizeVar; uLong *poffset_local_extrafield; uInt *psize_local_extrafield; { uLong uMagic,uData,uFlags; uLong size_filename; uLong size_extra_field; int err=UNZ_OK; *piSizeVar = 0; *poffset_local_extrafield = 0; *psize_local_extrafield = 0; if (ZSEEK(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile + s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0) return UNZ_ERRNO; if (err==UNZ_OK) if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) err=UNZ_ERRNO; else if (uMagic!=0x04034b50) err=UNZ_BADZIPFILE; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) err=UNZ_ERRNO; /* else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) err=UNZ_BADZIPFILE; */ if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK) err=UNZ_ERRNO; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) err=UNZ_ERRNO; else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) err=UNZ_BADZIPFILE; if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && (s->cur_file_info.compression_method!=Z_DEFLATED)) err=UNZ_BADZIPFILE; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */ err=UNZ_ERRNO; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */ err=UNZ_ERRNO; else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0)) err=UNZ_BADZIPFILE; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */ err=UNZ_ERRNO; else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0)) err=UNZ_BADZIPFILE; if (unzlocal_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */ err=UNZ_ERRNO; else if ((err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0)) err=UNZ_BADZIPFILE; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK) err=UNZ_ERRNO; else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) err=UNZ_BADZIPFILE; *piSizeVar += (uInt)size_filename; if (unzlocal_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK) err=UNZ_ERRNO; *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + size_filename; *psize_local_extrafield = (uInt)size_extra_field; *piSizeVar += (uInt)size_extra_field; return err; } /* Open for reading data the current file in the zipfile. If there is no error and the file is opened, the return value is UNZ_OK. */ extern int ZEXPORT libkml_unzOpenCurrentFile3 (file, method, level, raw, password) unzFile file; int* method; int* level; int raw; const char* password; { int err=UNZ_OK; uInt iSizeVar; unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; uLong offset_local_extrafield; /* offset of the local extra field */ uInt size_local_extrafield; /* size of the local extra field */ # ifndef NOUNCRYPT char source[12]; # else if (password != NULL) return UNZ_PARAMERROR; # endif if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return UNZ_PARAMERROR; if (s->pfile_in_zip_read != NULL) libkml_unzCloseCurrentFile(file); if (unzlocal_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) return UNZ_BADZIPFILE; pfile_in_zip_read_info = (file_in_zip_read_info_s*) ALLOC(sizeof(file_in_zip_read_info_s)); if (pfile_in_zip_read_info==NULL) return UNZ_INTERNALERROR; pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE); pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; pfile_in_zip_read_info->pos_local_extrafield=0; pfile_in_zip_read_info->raw=raw; if (pfile_in_zip_read_info->read_buffer==NULL) { TRYFREE(pfile_in_zip_read_info); return UNZ_INTERNALERROR; } pfile_in_zip_read_info->stream_initialised=0; if (method!=NULL) *method = (int)s->cur_file_info.compression_method; if (level!=NULL) { *level = 6; switch (s->cur_file_info.flag & 0x06) { case 6 : *level = 1; break; case 4 : *level = 2; break; case 2 : *level = 9; break; } } if ((s->cur_file_info.compression_method!=0) && (s->cur_file_info.compression_method!=Z_DEFLATED)) err=UNZ_BADZIPFILE; pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; pfile_in_zip_read_info->crc32=0; pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method; pfile_in_zip_read_info->filestream=s->filestream; pfile_in_zip_read_info->z_filefunc=s->z_filefunc; pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; pfile_in_zip_read_info->stream.total_out = 0; if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw)) { pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; pfile_in_zip_read_info->stream.zfree = (free_func)0; pfile_in_zip_read_info->stream.opaque = (voidpf)0; pfile_in_zip_read_info->stream.next_in = (voidpf)0; pfile_in_zip_read_info->stream.avail_in = 0; err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); if (err == Z_OK) pfile_in_zip_read_info->stream_initialised=1; else { TRYFREE(pfile_in_zip_read_info); return err; } /* windowBits is passed < 0 to tell that there is no zlib header. * Note that in this case inflate *requires* an extra "dummy" byte * after the compressed stream in order to complete decompression and * return Z_STREAM_END. * In unzip, i don't wait absolutely Z_STREAM_END because I known the * size of both compressed and uncompressed data */ } pfile_in_zip_read_info->rest_read_compressed = s->cur_file_info.compressed_size ; pfile_in_zip_read_info->rest_read_uncompressed = s->cur_file_info.uncompressed_size ; pfile_in_zip_read_info->pos_in_zipfile = s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + iSizeVar; pfile_in_zip_read_info->stream.avail_in = (uInt)0; s->pfile_in_zip_read = pfile_in_zip_read_info; # ifndef NOUNCRYPT if (password != NULL) { int i; s->pcrc_32_tab = get_crc_table(); init_keys(password,s->keys,s->pcrc_32_tab); if (ZSEEK(s->z_filefunc, s->filestream, s->pfile_in_zip_read->pos_in_zipfile + s->pfile_in_zip_read->byte_before_the_zipfile, SEEK_SET)!=0) return UNZ_INTERNALERROR; if(ZREAD(s->z_filefunc, s->filestream,source, 12)<12) return UNZ_INTERNALERROR; for (i = 0; i<12; i++) zdecode(s->keys,s->pcrc_32_tab,source[i]); s->pfile_in_zip_read->pos_in_zipfile+=12; s->encrypted=1; } # endif return UNZ_OK; } extern int ZEXPORT libkml_unzOpenCurrentFile (file) unzFile file; { return libkml_unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); } extern int ZEXPORT libkml_unzOpenCurrentFilePassword (file, password) unzFile file; const char* password; { return libkml_unzOpenCurrentFile3(file, NULL, NULL, 0, password); } extern int ZEXPORT libkml_unzOpenCurrentFile2 (file,method,level,raw) unzFile file; int* method; int* level; int raw; { return libkml_unzOpenCurrentFile3(file, method, level, raw, NULL); } /* Read bytes from the current file. buf contain buffer where data must be copied len the size of buf. return the number of byte copied if somes bytes are copied return 0 if the end of file was reached return <0 with error code if there is an error (UNZ_ERRNO for IO error, or zLib error for uncompress error) */ extern int ZEXPORT libkml_unzReadCurrentFile (file, buf, len) unzFile file; voidp buf; unsigned len; { int err=UNZ_OK; uInt iRead = 0; unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; if ((pfile_in_zip_read_info->read_buffer == NULL)) return UNZ_END_OF_LIST_OF_FILE; if (len==0) return 0; pfile_in_zip_read_info->stream.next_out = (Bytef*)buf; pfile_in_zip_read_info->stream.avail_out = (uInt)len; if ((len>pfile_in_zip_read_info->rest_read_uncompressed) && (!(pfile_in_zip_read_info->raw))) pfile_in_zip_read_info->stream.avail_out = (uInt)pfile_in_zip_read_info->rest_read_uncompressed; if ((len>pfile_in_zip_read_info->rest_read_compressed+ pfile_in_zip_read_info->stream.avail_in) && (pfile_in_zip_read_info->raw)) pfile_in_zip_read_info->stream.avail_out = (uInt)pfile_in_zip_read_info->rest_read_compressed+ pfile_in_zip_read_info->stream.avail_in; while (pfile_in_zip_read_info->stream.avail_out>0) { if ((pfile_in_zip_read_info->stream.avail_in==0) && (pfile_in_zip_read_info->rest_read_compressed>0)) { uInt uReadThis = UNZ_BUFSIZE; if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed; if (uReadThis == 0) return UNZ_EOF; if (ZSEEK(pfile_in_zip_read_info->z_filefunc, pfile_in_zip_read_info->filestream, pfile_in_zip_read_info->pos_in_zipfile + pfile_in_zip_read_info->byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET)!=0) return UNZ_ERRNO; if (ZREAD(pfile_in_zip_read_info->z_filefunc, pfile_in_zip_read_info->filestream, pfile_in_zip_read_info->read_buffer, uReadThis)!=uReadThis) return UNZ_ERRNO; # ifndef NOUNCRYPT if(s->encrypted) { uInt i; for(i=0;iread_buffer[i] = zdecode(s->keys,s->pcrc_32_tab, pfile_in_zip_read_info->read_buffer[i]); } # endif pfile_in_zip_read_info->pos_in_zipfile += uReadThis; pfile_in_zip_read_info->rest_read_compressed-=uReadThis; pfile_in_zip_read_info->stream.next_in = (Bytef*)pfile_in_zip_read_info->read_buffer; pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; } if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw)) { uInt uDoCopy,i ; if ((pfile_in_zip_read_info->stream.avail_in == 0) && (pfile_in_zip_read_info->rest_read_compressed == 0)) return (iRead==0) ? UNZ_EOF : iRead; if (pfile_in_zip_read_info->stream.avail_out < pfile_in_zip_read_info->stream.avail_in) uDoCopy = pfile_in_zip_read_info->stream.avail_out ; else uDoCopy = pfile_in_zip_read_info->stream.avail_in ; for (i=0;istream.next_out+i) = *(pfile_in_zip_read_info->stream.next_in+i); pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, pfile_in_zip_read_info->stream.next_out, uDoCopy); pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy; pfile_in_zip_read_info->stream.avail_in -= uDoCopy; pfile_in_zip_read_info->stream.avail_out -= uDoCopy; pfile_in_zip_read_info->stream.next_out += uDoCopy; pfile_in_zip_read_info->stream.next_in += uDoCopy; pfile_in_zip_read_info->stream.total_out += uDoCopy; iRead += uDoCopy; } else { uLong uTotalOutBefore,uTotalOutAfter; const Bytef *bufBefore; uLong uOutThis; int flush=Z_SYNC_FLUSH; uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; bufBefore = pfile_in_zip_read_info->stream.next_out; /* if ((pfile_in_zip_read_info->rest_read_uncompressed == pfile_in_zip_read_info->stream.avail_out) && (pfile_in_zip_read_info->rest_read_compressed == 0)) flush = Z_FINISH; */ err=inflate(&pfile_in_zip_read_info->stream,flush); if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL)) err = Z_DATA_ERROR; uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; uOutThis = uTotalOutAfter-uTotalOutBefore; pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis)); pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis; iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); if (err==Z_STREAM_END) return (iRead==0) ? UNZ_EOF : iRead; if (err!=Z_OK) break; } } if (err==Z_OK) return iRead; return err; } /* Give the current position in uncompressed data */ extern z_off_t ZEXPORT libkml_unztell (file) unzFile file; { unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; return (z_off_t)pfile_in_zip_read_info->stream.total_out; } /* return 1 if the end of file was reached, 0 elsewhere */ extern int ZEXPORT libkml_unzeof (file) unzFile file; { unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; if (pfile_in_zip_read_info->rest_read_uncompressed == 0) return 1; else return 0; } /* Read extra field from the current file (opened by libkml_unzOpenCurrentFile) This is the local-header version of the extra field (sometimes, there is more info in the local-header version than in the central-header) if buf==NULL, it return the size of the local extra field that can be read if buf!=NULL, len is the size of the buffer, the extra header is copied in buf. the return value is the number of bytes copied in buf, or (if <0) the error code */ extern int ZEXPORT libkml_unzGetLocalExtrafield (file,buf,len) unzFile file; voidp buf; unsigned len; { unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; uInt read_now; uLong size_to_read; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; size_to_read = (pfile_in_zip_read_info->size_local_extrafield - pfile_in_zip_read_info->pos_local_extrafield); if (buf==NULL) return (int)size_to_read; if (len>size_to_read) read_now = (uInt)size_to_read; else read_now = (uInt)len ; if (read_now==0) return 0; if (ZSEEK(pfile_in_zip_read_info->z_filefunc, pfile_in_zip_read_info->filestream, pfile_in_zip_read_info->offset_local_extrafield + pfile_in_zip_read_info->pos_local_extrafield, ZLIB_FILEFUNC_SEEK_SET)!=0) return UNZ_ERRNO; if (ZREAD(pfile_in_zip_read_info->z_filefunc, pfile_in_zip_read_info->filestream, buf,read_now)!=read_now) return UNZ_ERRNO; return (int)read_now; } /* Close the file in zip opened with unzipOpenCurrentFile Return UNZ_CRCERROR if all the file was read but the CRC is not good */ extern int ZEXPORT libkml_unzCloseCurrentFile (file) unzFile file; { int err=UNZ_OK; unz_s* s; file_in_zip_read_info_s* pfile_in_zip_read_info; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; pfile_in_zip_read_info=s->pfile_in_zip_read; if (pfile_in_zip_read_info==NULL) return UNZ_PARAMERROR; if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) && (!pfile_in_zip_read_info->raw)) { if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) err=UNZ_CRCERROR; } TRYFREE(pfile_in_zip_read_info->read_buffer); pfile_in_zip_read_info->read_buffer = NULL; if (pfile_in_zip_read_info->stream_initialised) inflateEnd(&pfile_in_zip_read_info->stream); pfile_in_zip_read_info->stream_initialised = 0; TRYFREE(pfile_in_zip_read_info); s->pfile_in_zip_read=NULL; return err; } /* Get the global comment string of the ZipFile, in the szComment buffer. uSizeBuf is the size of the szComment buffer. return the number of byte copied or an error code <0 */ extern int ZEXPORT libkml_unzGetGlobalComment (file, szComment, uSizeBuf) unzFile file; char *szComment; uLong uSizeBuf; { int err=UNZ_OK; unz_s* s; uLong uReadThis ; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; uReadThis = uSizeBuf; if (uReadThis>s->gi.size_comment) uReadThis = s->gi.size_comment; if (ZSEEK(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0) return UNZ_ERRNO; if (uReadThis>0) { *szComment='\0'; if (ZREAD(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis) return UNZ_ERRNO; } if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) *(szComment+s->gi.size_comment)='\0'; return (int)uReadThis; } /* Additions by RX '2004 */ extern uLong ZEXPORT libkml_unzGetOffset (file) unzFile file; { unz_s* s; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; if (!s->current_file_ok) return 0; if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff) if (s->num_file==s->gi.number_entry) return 0; return s->pos_in_central_dir; } extern int ZEXPORT libkml_unzSetOffset (file, pos) unzFile file; uLong pos; { unz_s* s; int err; if (file==NULL) return UNZ_PARAMERROR; s=(unz_s*)file; s->pos_in_central_dir = pos; s->num_file = s->gi.number_entry; /* hack */ err = unzlocal_GetCurrentFileInfoInternal(file,&s->cur_file_info, &s->cur_file_info_internal, NULL,0,NULL,0,NULL,0); s->current_file_ok = (err == UNZ_OK); return err; } /* The following methods (unzAttach, unzDetach) come from the proposed * iomem_simple package at http://code.trak.dk/ * See iomem_simple.c in this directory. */ ZEXTERN voidpf ZEXPORT libkml_unzDetach(file) unzFile* file; { voidpf stream; unz_s* s; if (*file==NULL) return NULL; s=(unz_s*)*file; if (s->pfile_in_zip_read!=NULL) libkml_unzCloseCurrentFile(*file); stream = s->filestream; TRYFREE(s); *file = NULL; return stream; } extern unzFile ZEXPORT libkml_unzAttach (stream, pzlib_filefunc_def) voidpf stream; zlib_filefunc_def* pzlib_filefunc_def; { unz_s us; unz_s *s; uLong central_pos; uLong uL; uLong number_disk; /* number of the current dist, used for spaning ZIP, unsupported, always 0*/ uLong number_disk_with_CD; /* number the the disk with central dir, used for spaning ZIP, unsupported, always 0*/ uLong number_entry_CD; /* total number of entries in the central dir (same than number_entry on nospan) */ int err=UNZ_OK; init_unz_s(&us); if (libkml_unz_copyright[0]!=' ') return NULL; us.num_file = 0UL; us.z_filefunc = *pzlib_filefunc_def; us.filestream= stream; if (us.filestream==NULL) return NULL; central_pos = unzlocal_SearchCentralDir(&us.z_filefunc,us.filestream); if (central_pos==0) err=UNZ_ERRNO; if (ZSEEK(us.z_filefunc, us.filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) err=UNZ_ERRNO; /* the signature, already checked */ if (unzlocal_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) err=UNZ_ERRNO; /* number of this disk */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) err=UNZ_ERRNO; /* number of the disk with the start of the central directory */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) err=UNZ_ERRNO; /* total number of entries in the central dir on this disk */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK) err=UNZ_ERRNO; /* total number of entries in the central dir */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK) err=UNZ_ERRNO; if ((number_entry_CD!=us.gi.number_entry) || (number_disk_with_CD!=0) || (number_disk!=0)) err=UNZ_BADZIPFILE; /* size of the central directory */ if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK) err=UNZ_ERRNO; /* offset of start of central directory with respect to the starting disk number */ if (unzlocal_getLong(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK) err=UNZ_ERRNO; /* zipfile comment length */ if (unzlocal_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK) err=UNZ_ERRNO; if ((central_pos //KMR. were using local version #endif #ifndef _ZLIBIOAPI_H #include //KMR. were using local version #endif #if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) /* like the STRICT of WIN32, we define a pointer that cannot be converted from (void*) without cast */ typedef struct TagunzFile__ { int unused; } unzFile__; typedef unzFile__ *unzFile; #else typedef voidp unzFile; #endif #define UNZ_OK (0) #define UNZ_END_OF_LIST_OF_FILE (-100) #define UNZ_ERRNO (Z_ERRNO) #define UNZ_EOF (0) #define UNZ_PARAMERROR (-102) #define UNZ_BADZIPFILE (-103) #define UNZ_INTERNALERROR (-104) #define UNZ_CRCERROR (-105) /* tm_unz contain date/time info */ typedef struct tm_unz_s { uInt tm_sec; /* seconds after the minute - [0,59] */ uInt tm_min; /* minutes after the hour - [0,59] */ uInt tm_hour; /* hours since midnight - [0,23] */ uInt tm_mday; /* day of the month - [1,31] */ uInt tm_mon; /* months since January - [0,11] */ uInt tm_year; /* years - [1980..2044] */ } tm_unz; /* unz_global_info structure contain global data about the ZIPfile These data comes from the end of central dir */ typedef struct unz_global_info_s { uLong number_entry; /* total number of entries in the central dir on this disk */ uLong size_comment; /* size of the global comment of the zipfile */ } unz_global_info; /* unz_file_info contain information about a file in the zipfile */ typedef struct unz_file_info_s { uLong version; /* version made by 2 bytes */ uLong version_needed; /* version needed to extract 2 bytes */ uLong flag; /* general purpose bit flag 2 bytes */ uLong compression_method; /* compression method 2 bytes */ uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ uLong crc; /* crc-32 4 bytes */ uLong compressed_size; /* compressed size 4 bytes */ uLong uncompressed_size; /* uncompressed size 4 bytes */ uLong size_filename; /* filename length 2 bytes */ uLong size_file_extra; /* extra field length 2 bytes */ uLong size_file_comment; /* file comment length 2 bytes */ uLong disk_num_start; /* disk number start 2 bytes */ uLong internal_fa; /* internal file attributes 2 bytes */ uLong external_fa; /* external file attributes 4 bytes */ tm_unz tmu_date; } unz_file_info; extern int ZEXPORT libkml_unzStringFileNameCompare OF ((const char* fileName1, const char* fileName2, int iCaseSensitivity)); /* Compare two filename (fileName1,fileName2). If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi or strcasecmp) If iCaseSenisivity = 0, case sensitivity is defaut of your operating system (like 1 on Unix, 2 on Windows) */ extern unzFile ZEXPORT libkml_unzOpen OF((const char *path)); /* Open a Zip file. path contain the full pathname (by example, on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer "zlib/zlib113.zip". If the zipfile cannot be opened (file don't exist or in not valid), the return value is NULL. Else, the return value is a unzFile Handle, usable with other function of this unzip package. */ extern unzFile ZEXPORT libkml_unzOpen2 OF((const char *path, zlib_filefunc_def* pzlib_filefunc_def)); /* Open a Zip file, like libkml_unzOpen, but provide a set of file low level API for read/write the zip file (see ioapi.h) */ extern int ZEXPORT libkml_unzClose OF((unzFile file)); /* Close a ZipFile opened with unzipOpen. If there is files inside the .Zip opened with libkml_unzOpenCurrentFile (see later), these files MUST be closed with unzipCloseCurrentFile before call unzipClose. return UNZ_OK if there is no problem. */ extern int ZEXPORT libkml_unzGetGlobalInfo OF((unzFile file, unz_global_info *pglobal_info)); /* Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed return UNZ_OK if there is no problem. */ extern int ZEXPORT libkml_unzGetGlobalComment OF((unzFile file, char *szComment, uLong uSizeBuf)); /* Get the global comment string of the ZipFile, in the szComment buffer. uSizeBuf is the size of the szComment buffer. return the number of byte copied or an error code <0 */ /***************************************************************************/ /* Unzip package allow you browse the directory of the zipfile */ extern int ZEXPORT libkml_unzGoToFirstFile OF((unzFile file)); /* Set the current file of the zipfile to the first file. return UNZ_OK if there is no problem */ extern int ZEXPORT libkml_unzGoToNextFile OF((unzFile file)); /* Set the current file of the zipfile to the next file. return UNZ_OK if there is no problem return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. */ extern int ZEXPORT libkml_unzLocateFile OF((unzFile file, const char *szFileName, int iCaseSensitivity)); /* Try locate the file szFileName in the zipfile. For the iCaseSensitivity signification, see libkml_unzStringFileNameCompare return value : UNZ_OK if the file is found. It becomes the current file. UNZ_END_OF_LIST_OF_FILE if the file is not found */ /* ****************************************** */ /* Ryan supplied functions */ /* unz_file_info contain information about a file in the zipfile */ typedef struct unz_file_pos_s { uLong pos_in_zip_directory; /* offset in zip file directory */ uLong num_of_file; /* # of file */ } unz_file_pos; extern int ZEXPORT libkml_unzGetFilePos( unzFile file, unz_file_pos* file_pos); extern int ZEXPORT libkml_unzGoToFilePos( unzFile file, unz_file_pos* file_pos); /* ****************************************** */ extern int ZEXPORT libkml_unzGetCurrentFileInfo OF((unzFile file, unz_file_info *pfile_info, char *szFileName, uLong fileNameBufferSize, void *extraField, uLong extraFieldBufferSize, char *szComment, uLong commentBufferSize)); /* Get Info about the current file if pfile_info!=NULL, the *pfile_info structure will contain somes info about the current file if szFileName!=NULL, the filemane string will be copied in szFileName (fileNameBufferSize is the size of the buffer) if extraField!=NULL, the extra field information will be copied in extraField (extraFieldBufferSize is the size of the buffer). This is the Central-header version of the extra field if szComment!=NULL, the comment string of the file will be copied in szComment (commentBufferSize is the size of the buffer) */ /***************************************************************************/ /* for reading the content of the current zipfile, you can open it, read data from it, and close it (you can close it before reading all the file) */ extern int ZEXPORT libkml_unzOpenCurrentFile OF((unzFile file)); /* Open for reading data the current file in the zipfile. If there is no error, the return value is UNZ_OK. */ extern int ZEXPORT libkml_unzOpenCurrentFilePassword OF((unzFile file, const char* password)); /* Open for reading data the current file in the zipfile. password is a crypting password If there is no error, the return value is UNZ_OK. */ extern int ZEXPORT libkml_unzOpenCurrentFile2 OF((unzFile file, int* method, int* level, int raw)); /* Same than libkml_unzOpenCurrentFile, but open for read raw the file (not uncompress) if raw==1 *method will receive method of compression, *level will receive level of compression note : you can set level parameter as NULL (if you did not want known level, but you CANNOT set method parameter as NULL */ extern int ZEXPORT libkml_unzOpenCurrentFile3 OF((unzFile file, int* method, int* level, int raw, const char* password)); /* Same than libkml_unzOpenCurrentFile, but open for read raw the file (not uncompress) if raw==1 *method will receive method of compression, *level will receive level of compression note : you can set level parameter as NULL (if you did not want known level, but you CANNOT set method parameter as NULL */ extern int ZEXPORT libkml_unzCloseCurrentFile OF((unzFile file)); /* Close the file in zip opened with libkml_unzOpenCurrentFile Return UNZ_CRCERROR if all the file was read but the CRC is not good */ extern int ZEXPORT libkml_unzReadCurrentFile OF((unzFile file, voidp buf, unsigned len)); /* Read bytes from the current file (opened by libkml_unzOpenCurrentFile) buf contain buffer where data must be copied len the size of buf. return the number of byte copied if somes bytes are copied return 0 if the end of file was reached return <0 with error code if there is an error (UNZ_ERRNO for IO error, or zLib error for uncompress error) */ extern z_off_t ZEXPORT libkml_unztell OF((unzFile file)); /* Give the current position in uncompressed data */ extern int ZEXPORT libkml_unzeof OF((unzFile file)); /* return 1 if the end of file was reached, 0 elsewhere */ extern int ZEXPORT libkml_unzGetLocalExtrafield OF((unzFile file, voidp buf, unsigned len)); /* Read extra field from the current file (opened by libkml_unzOpenCurrentFile) This is the local-header version of the extra field (sometimes, there is more info in the local-header version than in the central-header) if buf==NULL, it return the size of the local extra field if buf!=NULL, len is the size of the buffer, the extra header is copied in buf. the return value is the number of bytes copied in buf, or (if <0) the error code */ /***************************************************************************/ /* Get the current file offset */ extern uLong ZEXPORT libkml_unzGetOffset (unzFile file); /* Set the current file offset */ extern int ZEXPORT libkml_unzSetOffset (unzFile file, uLong pos); /* These declarations are from the proposed iomem_simple package at * http://code.trak.dk. See iomem_simple.c in this directory. */ extern unzFile ZEXPORT libkml_unzAttach OF((voidpf stream, zlib_filefunc_def*)); extern voidpf ZEXPORT libkml_unzDetach OF((unzFile*)); #ifdef __cplusplus } #endif #endif /* _unz_H */ libkml-1.3.0/src/kml/base/csv_splitter.cc000066400000000000000000000047461263603257100203210ustar00rootroot00000000000000// Copyright 2010, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the CsvSplitter class. #include "kml/base/csv_splitter.h" #include "kml/base/string_util.h" namespace kmlbase { CsvSplitter::CsvSplitter(const string& csv_data) : csv_data_(csv_data), current_line_(0) { } CsvSplitter::~CsvSplitter() {} size_t CsvSplitter::FindNextLine(size_t* this_end) const { size_t nl = csv_data_.find_first_of("\r\n", current_line_); if (nl == string::npos) { if (this_end) { *this_end = csv_data_.size(); } } else { if (this_end) { *this_end = nl; } return csv_data_.find_first_not_of("\r\n", nl); } return nl; } bool CsvSplitter::SplitCurrentLine(StringVector* cols) { if (current_line_ > csv_data_.size()) { return false; } size_t this_begin = current_line_; size_t this_end; current_line_ = FindNextLine(&this_end); if (cols) { SplitQuotedUsing(csv_data_.data() + this_begin, this_end - this_begin, ',', cols); } return true; } } // end namespace kmlbase libkml-1.3.0/src/kml/base/csv_splitter.h000066400000000000000000000054401263603257100201530ustar00rootroot00000000000000// Copyright 2010, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the CsvSplitter class. #ifndef KML_BASE_CSV_SPLITTER_H__ #define KML_BASE_CSV_SPLITTER_H__ #include "kml/base/string_util.h" #include "kml/base/util.h" namespace kmlbase { // This class iterates over a string buffer CSV data. Basic usage: // const string csv_data = get-csv-data // CsvSplitter csv_splitter(csv_data); // StringVector csv_line; // while (csv_splitter.SplitCurrentLine(&csv_line)) { // ...process the csv_line.. // csv_line.clear(); // } // Note that the methods are virtual to permit overriding in a subclass. class CsvSplitter { public: CsvSplitter(const string& csv_data); virtual ~CsvSplitter(); // Find the start of the next line and the end of this line if requested. // string::npos is returned if there is no next line. A line ending is // \n or \r or both. virtual size_t FindNextLine(size_t* this_end) const; // This splits the current line of CSV data into the given StringVector and // uses FindNextLine() to advance to the next line if there is one. True // is returned if there is a next line. virtual bool SplitCurrentLine(StringVector* cols); protected: const string csv_data_; size_t current_line_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(CsvSplitter); }; } // end namespace kmlbase #endif // KML_BASE_CSV_SPLITTER_H__ libkml-1.3.0/src/kml/base/date_time.cc000066400000000000000000000076751263603257100175370ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the DateTime class. #include "kml/base/date_time.h" #include "boost/scoped_ptr.hpp" #include // TODO: fix this for real. #ifdef _WIN32 char* strptime(const char* buf, const char* format, struct tm* tm) { // Not yet implemented on this platform. return NULL; } #endif namespace kmlbase { // static DateTime* DateTime::Create(const string& str) { DateTime* date_time = new DateTime; if (date_time->ParseXsdDateTime(str)) { return date_time; } delete date_time; return NULL; } // static time_t DateTime::ToTimeT(const string& str) { boost::scoped_ptr date_time(DateTime::Create(str)); return date_time.get() ? date_time->GetTimeT() : 0; } // Overkill since all time_t's on a 32-bit that are divisible by four are // leap years, but this should handle the 2100 case (not a LY) on 64-bit // systems. static bool is_leap(int year) { year += 1900; return (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0); } time_t DateTime::GetTimeT() const { // Always return time as GMT; disregard local time, unlike mktime(3). // Faster (and less "obviously correct") implementations are possible. static const unsigned ndays[2][12] ={ {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}; time_t res = 0; // This and is_leap() base from 1970, the epoch of a time_t. for (int year = 70; year < tm_.tm_year; ++year) res += is_leap(year) ? 366 : 365; for (int month = 0; month < tm_.tm_mon; ++month) res += ndays[is_leap(tm_.tm_year)][month]; res += tm_.tm_mday - 1; res *= 24; res += tm_.tm_hour; res *= 60; res += tm_.tm_min; res *= 60; res += tm_.tm_sec; return res; } template string DateTime::DoStrftime(const char* format) const { char buf[N]; strftime(buf, N, format, &tm_); return buf; } string DateTime::GetXsdTime() const { return DoStrftime<9>("%H:%M:%S"); } string DateTime::GetXsdDate() const { return DoStrftime<11>("%Y-%m-%d"); } string DateTime::GetXsdDateTime() const { return GetXsdDate() + "T" + GetXsdTime() + "Z"; } // private DateTime::DateTime() { //just some date to initialize tm_ strptime("14 Nov 1991 12:33:45", "%d %b %Y %H:%M:%S", &tm_); tm_.tm_isdst = -1; } // private bool DateTime::ParseXsdDateTime(const string& xsd_date_time) { // TODO: strptime on win32? return strptime(xsd_date_time.c_str(), "%Y-%m-%dT%H:%M:%SZ", &tm_) != NULL; } } // end namespace kmlbase libkml-1.3.0/src/kml/base/date_time.h000066400000000000000000000050451263603257100173660ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the DateTime class. #ifndef KML_BASE_DATE_TIME_H__ #define KML_BASE_DATE_TIME_H__ #include #include "kml/base/util.h" // TODO: fix this for real. #ifdef _WIN32 time_t timegm(struct tm* tm); char* strptime(const char* buf, const char* format, struct tm* tm); #endif namespace kmlbase { class DateTime { public: // xsd:datetime: 2008-10-03T09:25:42Z // TODO: date, gYearMonth, gYear static DateTime* Create(const string& str); // A convenience utility: Create() + GetTimeT(). static time_t ToTimeT(const string& str); // POSIX time time_t GetTimeT() const; // XML Schema 3.2.8 time string GetXsdTime() const; // XML Schema 3.2.9 date string GetXsdDate() const; // XML Schema 3.2.7 dateTime. string GetXsdDateTime() const; private: DateTime(); template string DoStrftime(const char* format) const; bool ParseXsdDateTime(const string& xsd_date_time); struct tm tm_; }; time_t DateTimeToTimeT(const string& date_time_str); } // end namespace kmlbase #endif // KML_BASE_DATE_TIME_H__ libkml-1.3.0/src/kml/base/expat_handler.h000066400000000000000000000106531263603257100202520ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file declares the C++ ExpatHandler interface to the otherwise C expat. #ifndef KML_BASE_EXPAT_HANDLER_H__ #define KML_BASE_EXPAT_HANDLER_H__ #include "expat.h" // XML_Char #include "string_util.h" // StringVector namespace kmlbase { class Attributes; // This declares the pure virtual ExpatHandler interface. class ExpatHandler { public: virtual ~ExpatHandler() {} virtual void StartElement(const string& name, const StringVector& atts) = 0; virtual void EndElement(const string& name) = 0; virtual void CharData(const string&) = 0; // Namespace handlers with an empty default implementation. virtual void StartNamespace(const string& prefix, const string& uri) {} virtual void EndNamespace(const string& prefix) {} void set_parser(XML_Parser parser) { parser_ = parser; } XML_Parser get_parser() { return parser_; } private: XML_Parser parser_; }; const int kBitMask = 0x3f; const int kByteMask = 0x80; const int kMask2Bytes = 0xc0; const int kMask3Bytes = 0xe0; // Convert an XML_Char buffer to a UTF-8 encoded string. Even // if Expat is compiled with Unicode, XML_Char will point to a UTF-16 // encoded character. It's not known in practice if Expat will actually // allow surrogate pairs, but our interface is a pointer in case we find // an exception to the Unicode's book assertion that no interesting languages // are represented outside the first 64K Unicode characters. inline void xmlchar_to_utf8(const XML_Char *input, string* buffer) { if (!input || !buffer) return; const int c = *input; // Rely on constant folding and inlining to make this fast when not // built with XML_UNICODE; this function should optimize down to an // inlined buffer.push_back(). if (sizeof(XML_Char) == 1 || c < 0x80) { buffer->push_back(static_cast(c)); } else if (c < 0x800) { buffer->push_back(kMask2Bytes | c >> 6); buffer->push_back(kByteMask | (c & kBitMask)); } else if (c < 0xd800 || c > 0xdbff) { buffer->push_back(kMask3Bytes | c >> 12); buffer->push_back(kByteMask | ((c >> 6) & kBitMask)); buffer->push_back(kByteMask | (c & kBitMask)); } else { // Handle UTF-16 surrogate pairs here. We 'handle' them by dropping them. } } inline string xml_char_to_string(const XML_Char *input) { string output; for (const XML_Char *p = input; input && *p; p++) { xmlchar_to_utf8(p, &output); } return output; } inline void xml_char_to_string_vec(const XML_Char **input, kmlbase::StringVector *ovec) { if (!ovec) return; while (input && *input) { ovec->push_back(xml_char_to_string(*input++)); ovec->push_back(xml_char_to_string(*input++)); } } inline string xml_char_to_string_n(const XML_Char *input, size_t length) { string output; while (length--) { xmlchar_to_utf8(input++, &output); } return output; } } // end namespace kmlbase #endif // KML_BASE_EXPAT_HANDLER_H__ libkml-1.3.0/src/kml/base/expat_handler_ns.cc000066400000000000000000000064561263603257100211160ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/base/expat_handler_ns.h" #include "boost/scoped_ptr.hpp" #include "kml/base/xmlns.h" #include "kml/base/expat_parser.h" namespace kmlbase { ExpatHandlerNs::ExpatHandlerNs(ExpatHandler* expat_handler, const Xmlns* xmlns) : expat_handler_(expat_handler), xmlns_(xmlns) { } const string ExpatHandlerNs::TranslatePrefixedName( const string prefixed_name) const { string::size_type sep = prefixed_name.find(kExpatNsSeparator); // Name has no separator? Just return it. if (sep == string::npos) { // Not expected to happen return prefixed_name; } // Name is in the default namespace? Return without the prefix. if (xmlns_->get_default() == prefixed_name.substr(0, sep)) { return prefixed_name.substr(sep+1); } // Name is in some other namespace? Map to the prefix known to the // expat_handler as indicated in the Xmlns we were constructed with. string prefix = xmlns_->GetKey(prefixed_name.substr(0, sep)); if (!prefix.empty()) { return prefix + ":" + prefixed_name.substr(sep+1); } // This namepace is unknown. Return the whole name. // TODO: grab prefixes down in StartNamespace and use that assuming no // collision with Xmlns. return prefixed_name; } void ExpatHandlerNs::StartElement(const string& prefixed_name, const kmlbase::StringVector& atts) { expat_handler_->StartElement(TranslatePrefixedName(prefixed_name), atts); } void ExpatHandlerNs::EndElement(const string& prefixed_name) { expat_handler_->EndElement(TranslatePrefixedName(prefixed_name)); } void ExpatHandlerNs::CharData(const string& s) { expat_handler_->CharData(s); } void ExpatHandlerNs::StartNamespace(const string& prefix, const string& uri) { } void ExpatHandlerNs::EndNamespace(const string& prefix) { } } // end namespace kmlbase libkml-1.3.0/src/kml/base/expat_handler_ns.h000066400000000000000000000075011263603257100207500ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the ExpatHandlerNs class. #ifndef KML_BASE_EXPAT_HANDLER_NS_H__ #define KML_BASE_EXPAT_HANDLER_NS_H__ #include "kml/base/expat_handler.h" #include "kml/base/util.h" namespace kmlbase { class Xmlns; // Interface to namespace-enabled expat parser. Overall usages is as follows: // Xmlns* xmlns = Xmlns::Create(xmlns-default-and-prefix-namespace-pairs); // class YourExpatHandler : public ExpatHandler { // public: // StartElement(const char* your_prefixed_name, const char** atts) { // // your_prefixed_name is either: // // 1) "foo" if "foo" is in the default namespace of the Xmlns. // // 2) "yourprefix:goo" if "goo" is in a namespace for which there // // is a mapping to "yourprefix" in the xmlns. // // 3) "whoknows:bar" if "bar" is in a namespace unknown to the Xmlns. // } // EndElement(const char* your_prefixed_name) { // } // CharData(const XML_Char* s, int len) { // } // }; // YourExpatHandler your_expat_handler; // ExpatHandlerNs expat_handler_ns(&your_expat_handler, xmlns); // bool status = ExpatParser(xml_data, &expat_handler_ns, errors, true); class ExpatHandlerNs : public ExpatHandler { public: // The given ExpatHandler is a prefix-aware but namespace-unaware handler. // The Xmlns describes the prefixes implemented by the handler. For example, // if the ExpatHandler implements "atom:name" then Xmlns should have a // mapping from the "atom" prefix to the atom namespace. ExpatHandler's // unprefixed elements "Placemark", for example, are in the Xmlns's default // namespace. ExpatHandlerNs(ExpatHandler* expat_handler, const Xmlns* xmlns); virtual ~ExpatHandlerNs() {} // This translates an expat-generated namespace qualified name into a // name with a prefix known to the Xmlns passed to the constructor. const string TranslatePrefixedName( const string prefixed_name) const; virtual void StartElement(const string& namespaced_named, const StringVector& atts); virtual void EndElement(const string& namespaced_name); virtual void CharData(const string& s); virtual void StartNamespace(const string& prefix, const string& uri); virtual void EndNamespace(const string& prefix); private: ExpatHandler* expat_handler_; const Xmlns* xmlns_; }; } // end namespace kmlbase #endif // KML_BASE_EXPAT_HANDLER_NS_H__ libkml-1.3.0/src/kml/base/expat_parser.cc000066400000000000000000000144641263603257100202730ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the internal ExpatParser class. #include "kml/base/expat_parser.h" #include // For memcpy. #include #include "kml/base/expat_handler.h" namespace kmlbase { static void XMLCALL startElement(void *userData, const XML_Char *name, const XML_Char **atts) { string flatname = xml_char_to_string(name); // TODO: kmlbase::Attributes would be a more appropriate type here. StringVector flatatts; xml_char_to_string_vec(atts, &flatatts); static_cast(userData)->StartElement(flatname, flatatts); } static void XMLCALL endElement(void *userData, const XML_Char *name) { string flatname = xml_char_to_string(name); static_cast(userData)->EndElement(flatname); } static void XMLCALL charData(void *userData, const XML_Char *s, int length) { string flatdata = xml_char_to_string_n(s, length);; static_cast(userData)->CharData(flatdata); } static void XMLCALL startNamespace(void *userData, const XML_Char *prefix, const XML_Char *uri) { string flatprefix = xml_char_to_string(prefix); string flaturi = xml_char_to_string(uri); static_cast(userData)->StartNamespace(flatprefix, flaturi); } static void XMLCALL endNamespace(void *userData, const XML_Char *prefix) { string flatprefix = xml_char_to_string(prefix); static_cast(userData)->EndNamespace(flatprefix); } static void XMLCALL entityDeclHandler(void *userData, const XML_Char *entityName, int is_parameter_entity, const XML_Char *value, int value_length, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId, const XML_Char *notationName) { XML_Parser parser = static_cast(userData)->get_parser(); XML_StopParser(parser, XML_FALSE); } ExpatParser::ExpatParser(ExpatHandler* handler, bool namespace_aware) : expat_handler_(handler) { XML_Parser parser = namespace_aware ? XML_ParserCreateNS(NULL, kExpatNsSeparator) : XML_ParserCreate(NULL); expat_handler_->set_parser(parser); XML_SetUserData(parser, expat_handler_); XML_SetElementHandler(parser, startElement, endElement); XML_SetCharacterDataHandler(parser, charData); XML_SetEntityDeclHandler(parser, entityDeclHandler); if (namespace_aware) { XML_SetNamespaceDeclHandler(parser, startNamespace, endNamespace); } parser_ = parser; } ExpatParser::~ExpatParser() { XML_ParserFree(parser_); } // Static. bool ExpatParser::ParseString(const string& xml, ExpatHandler* handler, string* errors, bool namespace_aware) { ExpatParser parser(handler, namespace_aware); return parser._ParseString(xml, errors); } void* ExpatParser::GetInternalBuffer(size_t len) { return static_cast(XML_GetBuffer(parser_, static_cast(len))); } bool ExpatParser::ParseBuffer(const string& input, string* errors, bool is_final) { void* buf = GetInternalBuffer(input.size()); if (!buf) { if (errors) { *errors = "could not allocate memory"; } return false; } memcpy(buf, input.data(), input.size()); return ParseInternalBuffer(input.size(), errors, is_final); } bool ExpatParser::ParseInternalBuffer(size_t len, string* errors, bool is_final) { XML_Status status = XML_ParseBuffer(parser_, static_cast(len), is_final); // If we have just parsed the final buffer, we need to check if Expat // has stopped parsing. Failure here indicates invalid (badly formed) // XML content. if (is_final) { XML_ParsingStatus parsing_status; XML_GetParsingStatus(parser_, &parsing_status); if (parsing_status.parsing != XML_FINISHED) { ReportError(parser_, errors); return false; } } if (status != XML_STATUS_OK) { ReportError(parser_, errors); } return status == XML_STATUS_OK; } // Private. bool ExpatParser::_ParseString(const string& xml, string* errors) { int xml_size = static_cast(xml.size()); XML_Status status = XML_Parse(parser_, xml.c_str(), xml_size, xml_size); if (status != XML_STATUS_OK && errors) { // This is the other half of XML_StopParser() which is our way of // stopping expat if the root element is not KML. if (status == XML_STATUS_SUSPENDED) { *errors = "Invalid root element"; } else { ReportError(parser_, errors); } } return status == XML_STATUS_OK; } // Private. void ExpatParser::ReportError(XML_Parser parser, string* errors) { if (!errors) { return; } std::stringstream strstream; strstream << XML_ErrorString(XML_GetErrorCode(parser)); strstream << " on line "; strstream << XML_GetCurrentLineNumber(parser); strstream << " at offset "; strstream << XML_GetCurrentColumnNumber(parser); *errors = strstream.str(); } } // end namespace kmlbase libkml-1.3.0/src/kml/base/expat_parser.h000066400000000000000000000120321263603257100201220ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the internal ExpatParser class. // Direct use of this class in application code is not recommended. Typical // applications should use kmlengine::KmlFile for parsing KML (and KMZ) files. // Note that we explicitly do not support parsing files with XML ENTITY // declarations. See the unit tests in expat_parser_test.cc for some concrete // examples. #ifndef KML_BASE_EXPAT_PARSER_H__ #define KML_BASE_EXPAT_PARSER_H__ #include #include "expat.h" #include "kml/base/util.h" namespace kmlbase { const char kExpatNsSeparator = '|'; class ExpatHandler; class ExpatHandlerNs; typedef std::map ExpatHandlerMap; class ExpatHandlerSet { public: ExpatHandlerSet() : default_(NULL) { } void set_handler(const string& xml_namespace, ExpatHandler* expat_handler) { if (!default_) { // TODO: hack default_ = expat_handler; } expat_handler_map_[xml_namespace] = expat_handler; } // TODO: this is a hack. only the instance document has a concept of a // default namespace (which may have no default namespace at all). ExpatHandler* get_default_handler() const { return default_; } // TODO: this is how the parser core really looks up the handler for // a given namespace. This returns NULL if no handler is available for // the given namespace. ExpatHandler* get_handler(const string& xmlns) const { ExpatHandlerMap::const_iterator iter = expat_handler_map_.find(xmlns); return iter == expat_handler_map_.end() ? NULL : iter->second; } private: ExpatHandler* default_; ExpatHandlerMap expat_handler_map_; }; // This internal class front-ends expat. Usage is as follows: // class SomeXmlLanguageHandler : public kmlbase::ExpatHandler { // // See expat_handler.h for methods to implement. // }; // SomeXmlLanguageHandler some_handler; // bool status = ExpatParser::ParseString(xml_file_contents, &some_handler, // &errors, namespace_aware_bool); // State of parse (if any) is held in the class derived from ExpatHandler. class ExpatParser { public: ExpatParser(ExpatHandler* handler, bool namespace_aware); ~ExpatParser(); // Parses a string of XML data in one operation. The xml string must be a // complete, well-formed XML document. static bool ParseString(const string& xml, ExpatHandler* handler, string* errors, bool namespace_aware); // This allocates a buffer for use with ParseInternalBuffer. The caller is // expected to put the next buffer's worth of XML to parse into this buffer. void* GetInternalBuffer(size_t size); // This sends the data the caller put in the buffer in GetInternalBuffer to // the parser. The size indicates the number of bytes of data in the buffer. // If an error string is supplied any error messages are stored there. // If this buffer is the final chunk of XML to parse set is_final to true. bool ParseInternalBuffer(size_t size, string* errors, bool is_final); // Parse a chunk of XML data. The input does not have to be split on element // boundaries. The is_final flag indicates to expat if it should consider // this buffer the end of the content. bool ParseBuffer(const string& input, string* errors, bool is_final); private: ExpatHandler* expat_handler_; XML_Parser parser_; // Used by the static ParseString public method. bool _ParseString(const string& xml, string* errors); void ReportError(XML_Parser parser, string* errors); }; } // end namespace kmldom #endif // KML_BASE_EXPAT_PARSER_H__ libkml-1.3.0/src/kml/base/file.cc000066400000000000000000000072111263603257100165050ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // The file contains the implementation of the File methods common across // platforms. #include "kml/base/file.h" #include namespace kmlbase { #ifdef WIN32 const char kSeparator = '\\'; #else const char kSeparator = '/'; #endif bool File::ReadFileToString(const string& filename, string* output) { if (filename.empty() || !output) { return false; } std::ifstream input_file(filename.c_str(), std::ios_base::in | std::ios_base::binary); if (!input_file.is_open() || !input_file.good()) { return false; } output->clear(); const unsigned int kBufferSize = 1024; char buffer[kBufferSize]; while (!input_file.eof() && input_file.good()) { input_file.read(buffer, kBufferSize); // Guard zero read sizess for MSVC 2010. if (input_file.gcount() > 0) { output->append(buffer, static_cast(input_file.gcount())); } } return true; } bool File::WriteStringToFile(const string& data, const string& filename) { if (filename.empty()) { return false; } std::ofstream output_file(filename.c_str(), std::ios_base::out | std::ios_base::binary); if (!output_file.is_open() || !output_file.good()) { return false; } output_file.write(data.c_str(), static_cast(data.length())); output_file.close(); return true; } string File::JoinPaths(const string& p1, const string& p2) { if (p1.empty()) return p2; if (p2.empty()) return p1; string temp_str(p1); if (p1[p1.length()-1] != kSeparator) { temp_str += kSeparator; return (temp_str + p2); } else { return (p1 + p2); } } void File::SplitFilePath(const string& filepath, string* base_directory, string* filename) { size_t found = filepath.find_last_of("/\\"); if (base_directory) { if (found == string::npos) { *base_directory = "."; } else if (found == 0) { *base_directory = filepath.substr(0, found + 1); } else { *base_directory = filepath.substr(0, found); } } if (filename) { *filename = filepath.substr(found+1); } } } // end namespace kmlbase libkml-1.3.0/src/kml/base/file.h000066400000000000000000000065271263603257100163600ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_BASE_FILE_H__ #define KML_BASE_FILE_H__ #include "kml/base/util.h" namespace kmlbase { class File { public: // Reads a file into a string. Returns false if given a bad file descriptor // or if the file could not be opened. output is unmodified on failure. static bool ReadFileToString(const string& filename, string* output); // Writes a string into a file. Returns false if the target file could // not be created and opened for writing. static bool WriteStringToFile(const string& data, const string& filename); // Returns true if the file exists. static bool Exists(const string& full_path); // Deletes a file. If the file does not exist, returns false. Returns true // if the file was deleted. static bool Delete(const string& filepath); // Creates a unique file in the system temporary directory. Returns the // full path of the new file in 'path'. // Returns true if the function succeeds. 'path' is unmodified on failure. static bool CreateNewTempFile(string* full_filepath); // Join two file paths. If the first does not end in the platform-specific // path separator, it is appended before the second string is joined. Returns // the joined string. If either of the strings is empty, the other string is // returned unmodified. This should NOT be used with URL paths, which are // not platform-specific. static string JoinPaths(const string& p1, const string& p2); // Splits a path to a filename into its base directory and filename // components. E.g. /tom/dick/harry.txt is "/tom/dick" and "harry.txt". // Either of the string pointers may be NULL. static void SplitFilePath(const string& filepath, string* base_directory, string* filename); }; } // end namespace kmlbase #endif // KML_BASE_FILE_H__ libkml-1.3.0/src/kml/base/file_posix.cc000066400000000000000000000051231263603257100177270ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // The file contains the implementation of the File methods specific to // POSIX platforms. #include "kml/base/file.h" #include #include #include #include #include // For unlink, close. namespace kmlbase { // Internal to the POSIX File class. static bool StatFile(const char* path, struct stat* stat_data) { struct stat tmp; if (stat(path, &tmp) !=0) { return false; } *stat_data = tmp; return true; } bool File::Exists(const string& full_path) { struct stat stat_data; if (!StatFile(full_path.c_str(), &stat_data)) { return false; } return S_ISREG(stat_data.st_mode); } bool File::Delete(const string& filepath) { return unlink(filepath.c_str()) == 0; } bool File::CreateNewTempFile(string* path) { if (!path) { return false; } mode_t temp_umask = umask(S_IXUSR | S_IRWXG | S_IRWXO); char temp_path[] = "/tmp/libkmlXXXXXX"; int fd = mkstemp(temp_path); umask(temp_umask); if (fd == -1) { return false; } close(fd); path->assign(temp_path, strlen(temp_path)); return true; } } // end namespace kmlbase libkml-1.3.0/src/kml/base/file_win32.cc000066400000000000000000000070731263603257100175350ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // The file contains the implementation of the File methods specific to // the win32 platform. // TODO: likely there are better ways to accomplish Delete and // CreateNewTempFile. #ifdef _WIN32 #include "kml/base/file.h" #include #include #include #include namespace kmlbase { // Internal to the win32 file class. We need a conversion from string to // LPCWSTR. static std::wstring Str2Wstr(const string& str) { std::wstring wstr(str.length(), L''); std::copy(str.begin(), str.end(), wstr.begin()); return wstr; } // Internal to the win32 file class. We need a conversion from std::wstring to // string. string Wstr2Str(const std::wstring& wstr) { size_t s = wstr.size(); string str(static_cast(s+1), 0); WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), static_cast(s), &str[0], static_cast(s), NULL, NULL); return str; } bool File::Exists(const string& full_path) { if (full_path.empty()) { return false; } std::wstring wstr = Str2Wstr(full_path); DWORD attrs = ::GetFileAttributes(wstr.c_str()); return (attrs != INVALID_FILE_ATTRIBUTES) && ((attrs & FILE_ATTRIBUTE_DIRECTORY) == 0); } bool File::Delete(const string& filepath) { if (filepath.empty()) { return false; } std::wstring wstr = Str2Wstr(filepath); return ::DeleteFile(wstr.c_str()) ? true : false; } static const unsigned int BUFSIZE = 1024; DWORD dwBufSize = BUFSIZE; DWORD dwRetVal; TCHAR lpPathBuffer[BUFSIZE]; UINT uRetVal; TCHAR szTempName[BUFSIZE]; // http://msdn.microsoft.com/en-us/library/aa363875(VS.85).aspx bool File::CreateNewTempFile(string* path) { if (!path) { return false; } // Get the temp path. dwRetVal = ::GetTempPath(dwBufSize, lpPathBuffer); if (dwRetVal > dwBufSize || (dwRetVal == 0)) { return false; } // Create a temporary file. uRetVal = ::GetTempFileName(lpPathBuffer, TEXT("libkml"), 0, szTempName); if (uRetVal == 0) { return false; } string str = Wstr2Str(szTempName); path->assign(str.c_str(), strlen(str.c_str())); return true; } } // end namespace kmlbase #endif libkml-1.3.0/src/kml/base/math_util.cc000066400000000000000000000107661263603257100175650ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/base/math_util.h" // The mean radius of the Earth in meters. // Equatorial = 6378137, polar = 6356752. static const unsigned int kEarthRadius = 6366710; namespace kmlbase { double AzimuthBetweenPoints(double lat1, double lng1, double lat2, double lng2) { const double lat1_r = DegToRad(lat1); const double lng1_r = DegToRad(lng1); const double lat2_r = DegToRad(lat2); const double lng2_r = DegToRad(lng2); return RadToDeg(fmod(atan2(sin(lng2_r - lng1_r) * cos(lat2_r), cos(lat1_r) * sin(lat2_r) - sin(lat1_r) * cos(lat2_r) * cos(lng2_r - lng1_r)), 2 * M_PI)); } double DistanceBetweenPoints(double lat1, double lng1, double lat2, double lng2) { const double lat1_r = DegToRad(lat1); const double lng1_r = DegToRad(lng1); const double lat2_r = DegToRad(lat2); const double lng2_r = DegToRad(lng2); return RadiansToMeters(2 * asin(sqrt(pow(sin((lat1_r - lat2_r)/2), 2) + cos(lat1_r) * cos(lat2_r) * pow(sin((lng1_r - lng2_r) / 2), 2)))); } double DistanceBetweenPoints3d(double lat1, double lng1, double alt1, double lat2, double lng2, double alt2) { double surface_distance = DistanceBetweenPoints(lat1, lng1, lat2, lng2); return sqrt(pow(surface_distance, 2) + pow(alt2 - alt1, 2)); } double ElevationBetweenPoints(double lat1, double lng1, double alt1, double lat2, double lng2, double alt2) { // Naive implementation, accurate only over short distances. // TODO: see header comment about curvature. double distance = DistanceBetweenPoints(lat1, lng1, lat2, lng2); return RadToDeg(atan((alt2 - alt1) / distance)); } double GroundDistanceFromRangeAndElevation(double range, double elevation) { return fabs(cos(DegToRad(elevation)) * range); } double HeightFromRangeAndElevation(double range, double elevation) { return fabs(sin(DegToRad(elevation)) * range); } Vec3 LatLngOnRadialFromPoint(double lat, double lng, double distance, double radial) { const double lat_r = DegToRad(lat); const double lng_r = DegToRad(lng); const double distance_r = MetersToRadians(distance); const double radial_r = DegToRad(radial); const double radial_lat = asin(sin(lat_r) * cos(distance_r) + cos(lat_r) * sin(distance_r) * cos(radial_r)); const double delta_lng = atan2(sin(radial_r) * sin(distance_r) * cos(lat_r), cos(distance_r) - sin(lat_r) * sin(radial_lat)); const double radial_lng = fmod(lng_r + delta_lng + M_PI, 2 * M_PI) - M_PI; return Vec3(RadToDeg(radial_lng), RadToDeg(radial_lat)); } double DegToRad(double degrees) { return degrees * M_PI / 180.0; } double RadToDeg(double radians) { return radians * 180.0 / M_PI; } double MetersToRadians(double meters) { return meters / kEarthRadius; } double RadiansToMeters(double radians) { return radians * kEarthRadius; } } // end namespace kmlbase libkml-1.3.0/src/kml/base/math_util.h000066400000000000000000000122201263603257100174120ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations of some mathematical functions useful // when working with KML or, more generally, geometry on a Great Circle. // // Many of the formulae here were cribbed from the excellent Aviation // Formulary: http://williams.best.vwh.net/avform.htm // // NOTE: with the exception of the functions explicitly for converting between // units, all functions here accept and return coordinates and angles in // decimal degrees, and distances in meters. #ifndef KML_BASE_MATH_UTIL_H__ #define KML_BASE_MATH_UTIL_H__ #include // At least one variant of MSVC does not define M_PI. #ifndef M_PI #define M_PI 3.14159265358979323846 #endif #include #include "kml/base/vec3.h" namespace kmlbase { // Returns the initial azimuth (the angle measured clockwise from true north) // at a point from that point to a second point. For example, the azimuth // from 0,0 to 1,0 is 0 degrees. From 0,0 to 0,1 is 90 degrees (due east). // The range of the result is (-180, 180]. // // This is directly useful as the value of in KML's AbstractView. // // Note that this is the _initial_ azimuth; it changes as one follows the // great circle path from point 1 to point2. double AzimuthBetweenPoints(double lat_from, double lng_from, double lat_to, double lng_to); // Returns the angle from the horizontal plane between alt1 and alt2. // For example, the returned angle from (37.00, -121.98, 600) to a point // about 1778 meters west, 400 meters below at (37.00, -122.00, 200) is // -12.7 degrees. // // To use this as the value of KML's , add 90 degrees (since in KML a // tilt of 0 is vertical. // // TODO: this is a naive implementation accurate only over short distances. // It does not yet account for surface curvature. double ElevationBetweenPoints(double lat_from, double lng_from, double alt_from, double lat_to, double lng_to, double alt_to); // Returns the great circle distance in meters between two points on the // Earth's surface. The antemeridian is not considered here. double DistanceBetweenPoints(double lat_from, double lng_from, double lat_to, double lng_to); // Returns the great circle distance in meters between two 3d points. The // antemeridian is not considered here. double DistanceBetweenPoints3d( double lat_from, double lng_from, double alt_from, double lat_to, double lng_to, double alt_to); // Given a vector describing a line at an angle from the horizontal plane, // where the vector starts at a point on the surface of the Earth, // returns the absolute distance between the ground point and the point // directly under the end point. double GroundDistanceFromRangeAndElevation(double range, double elevation); // Given a vector describing a line at an angle from the horizontal plane, // where the vector starts at a point on the surface of the Earth, // returns the absolute height between the end point and the surface // point directly under it. double HeightFromRangeAndElevation(double range, double elevation); // Returns a Vec3 containing the latitude and longitude of a point at a // distance (meters) out on the radial (degrees) from a center point lat, lng. // The radial is measured clockwise from north. The antemeridian is not // considered here. Vec3 LatLngOnRadialFromPoint(double lat, double lng, double distance, double radial); // These functions are mostly internal, used in converting between degrees and // radians. double DegToRad(double degrees); double RadToDeg(double radians); double MetersToRadians(double meters); double RadiansToMeters(double radians); } // end namespace kmlbase #endif // KML_BASE_MATH_UTIL_H__ libkml-1.3.0/src/kml/base/memory_file.h000066400000000000000000000046121263603257100177410ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_BASE_MEMORY_FILE_H__ #define KML_BASE_MEMORY_FILE_H__ #include "boost/intrusive_ptr.hpp" #include "kml/base/referent.h" #include "kml/base/util.h" namespace kmlbase { // This NetCache CacheItem is a utility class used to represent file contents // cached in memory. The intended usage is as follows: // NetCache memory_file_net_cache; // MemoryFile memory_file = memory_file_net_cache.Fetch(url); // const string& file_content = memory_file.get_content(); class MemoryFile : public Referent { public: static MemoryFile* CreateFromString(const string& data) { return new MemoryFile(data); } const string& get_content() const { return content_; } private: MemoryFile(const string& content) : content_(content) {} string content_; }; typedef boost::intrusive_ptr MemoryFilePtr; } // end namespace kmlbase #endif // KML_BASE_MEMORY_FILE_H__ libkml-1.3.0/src/kml/base/mimetypes.cc000066400000000000000000000034661263603257100176120ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This defines some common KML-related mimetype strings. #include "kml/base/mimetypes.h" namespace kmlbase { const char* kAtomMimeType = "application/atom+xml"; const char* kCsvMimeType = "text/csv"; const char* kKmlMimeType = "application/vnd.google-earth.kml+xml"; const char* kKmzMimeType = "application/vnd.google-earth.kmz"; } libkml-1.3.0/src/kml/base/mimetypes.h000066400000000000000000000034621263603257100174500ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This declares some KML-related mimetype strings. #ifndef KML_BASE_MIMETYPES_H__ #define KML_BASE_MIMETYPES_H__ namespace kmlbase { extern const char* kAtomMimeType; extern const char* kCsvMimeType; extern const char* kKmlMimeType; extern const char* kKmzMimeType; } // end namespace kmlbase #endif // KML_BASE_MIMETYPES_H__ libkml-1.3.0/src/kml/base/net_cache.h000066400000000000000000000214761263603257100173520ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the NetCache class template and NetFetcher base class. #ifndef KML_BASE_NET_CACHE_H__ #define KML_BASE_NET_CACHE_H__ #include #include "kml/base/util.h" #include "boost/intrusive_ptr.hpp" namespace kmlbase { // A CacheItem is derived from Referent and has a CreateFromString: // class SomeCacheItem : public Referent { // public: // static SomeCacheItem* CreateFromString(const string& data); // }; // This is the default NetFetcher. It represents the empty network which // simply returns false for all URLs. This is provided for non-networked // libkml usage and effectively stubs out network access. This is useful in // the several places in KML where failed network fetch is quietly ignored. // Application code should derive from NetFetcher and implement FetchUrl // to perform (synchronous) network fetching as desired. All external I/O // from within NetCache is called out to the application code in this manner. class NetFetcher { public: virtual ~NetFetcher() {} virtual bool FetchUrl(const string& url, string* data) const { return false; } }; // This class template provides a generic memory cache facility parameterized // by the CacheItem. Typical usages is as follows: // Create a "CacheItem" class as described above (one that implements a // CreateFromString with the signature given above): // class MyCacheItem : public kmlbase::Referent { // public: // static MyCacheItem* CreateFromString(const string& data) { // MyCacheItem* my_cache_item = new MyCacheItem; // // whatever else your CacheItem does with an input data buffer // return my_cache_item; // } // // other methods if you have them // }; // typedef boost::intrusive_ptr MyCacheItemPtr; // // Create a NetCache for that CacheItem: // NetCache net_cache_of_my_cache_items; // // Create a NetFetcher class by inheriting from NetFetcher as described above: // class MyNetFetcher : kmlbase::NetFetcher { // public: // virtual bool FetchUrl(const string& url, string* data) const { // // do however it is you want to fetch the url, save the content to data // // Note that true means that this IS the data for this URL (not // // a 404 page... _your_ code must detect higher level protocol issues). // return true; // or false is a fetch on that url failed // } // // other methods if you have them // }; // // Your application code now fetches and creates CacheItems for a given URL // by calling Fetch: // MyCacheItemPtr a = net_cache_of_my_cache_items.Fetch(some-url); // MyCacheItemPtr b = net_cache_of_my_cache_items.Fetch(some-other-url); // When the NetCache goes out of scope all cached CacheItems are deleted, // however use of boost::intrusive_ptr does permit any code to hold a pointer // to an item originally from cache beyond the cache's lifetime. // NOTE: This class is NOT thread safe! template class NetCache { public: typedef boost::intrusive_ptr CacheItemPtr; typedef std::pair CacheEntry; typedef std::map CacheMap; // Construct the NetCache with the given NetFetcher-derived class and // with the given limit on number of items to cache. This size is entirely // application specific, but it should noted that CacheItems _may_ hold // file descriptors open so platform limits may limit max_size. Typical // sizes are expected to be in the 10s to 100s of items. NetCache(NetFetcher* net_fetcher, size_t max_size) : max_size_(max_size), cache_count_(0), net_fetcher_(net_fetcher) {} // This is the main public method in NetCache. If the NetFetcher FetchUrl // returns true for this url the data fetched is passed to CreateFromString // on the CacheItem to create a CacheItem from this data. This CacheItem // is saved to the cache. If the cache has reached its limit as set in // the constructor the oldest entry is discarded from the cache. If the // CacheItem for this URL is in the cache it is simply returned. CacheItemPtr Fetch(const string& url) { // If an item is cached for this URL return it and we're done. if (CacheItemPtr item = LookUp(url)) { return item; } // Not found in cache: go fetch. string data; // NetFetcher knows only about "get me the data at this URL". if (!net_fetcher_->FetchUrl(url, &data)) { return NULL; // Fetch failed, no such URL. } // Fetch succeeded: create a CacheItem from the data. CacheItemPtr item = CacheItem::CreateFromString(data); if (!Save(url, item)) { // This is basically an internal error. return NULL; } return item; } // This returns the CacheItem in the cache for the given url if it exists. // If nothing is cached for this url then NULL is returned. // In typical usage this method is not used by application code, but it is // well behaved as described. const CacheItemPtr LookUp(const string& url) const { typename CacheMap::const_iterator iter = cache_map_.find(url); if (iter == cache_map_.end()) { return NULL; } // iter->first is key, second is val and val is KmzCacheEntry pair whose // first is KmlFilePtr (second is creation time of cache entry). return iter->second.first; } // This stores the given CacheItem to the cache for the given url. // This failes of a CacheItem for this url exists (use Delete first). // If the cache is at capacity this also first forces the removall // of the oldest item in the cache. Application code should not typically // use this directly: use Fetch(). bool Save(const string& url, const CacheItemPtr& cache_item) { const CacheItemPtr exists = LookUp(url); if (exists) { return false; } if (cache_map_.size() == max_size_) { RemoveOldest(); } // It is not expected cache_count_ ever roll over. See net_cache_test.cc // for some timing tests and results. CacheEntry cache_entry = std::make_pair(cache_item, cache_count_++); cache_map_[url] = cache_entry; return true; } // If a CacheItem exists for this url it is deleted and true is returned. // If no CacheItem exists for this url false is returned. Application code // should generally have no need to use this directly. bool Delete(const string& url) { const CacheItemPtr cache_item = LookUp(url); if (cache_item) { cache_map_.erase(url); return true; } return false; } // This removes the oldest entry in the cache. Application code should // generally not need to use this directly. bool RemoveOldest() { if (cache_map_.empty()) { return false; } // Find the entry with the smallest time. typename CacheMap::iterator iter = cache_map_.begin(); typename CacheMap::iterator oldest = iter; for (;iter != cache_map_.end(); ++iter) { // STL map iter is a pair with val CacheItem which is a pair // whose second is the timestamp. if (iter->second.second < oldest->second.second) { oldest = iter; } } cache_map_.erase(oldest); return true; } // This returns the number of items presently in the cache. size_t Size() const { return cache_map_.size(); } private: const size_t max_size_; CacheMap cache_map_; uint64_t cache_count_; const NetFetcher* net_fetcher_; }; } // end namespace kmlbase #endif // KML_BASE_NET_CACHE_H__ libkml-1.3.0/src/kml/base/referent.cc000066400000000000000000000054451263603257100174070ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the free functions used by // boost::intrusive_ptr. See boost/intrusive_ptr.hpp for more information. #include "kml/base/referent.h" namespace kmlbase { // This function is used from within boost::intrusive_ptr to increment the // reference count when a new intrusive_ptr to a Referent-derived object is // created. This function is to be used only from within boost::intrusive_ptr. void intrusive_ptr_add_ref(kmlbase::Referent* r) { r->add_ref(); } // This function is used from within boost::intrusive_ptr to decrement the // reference count when an intrusive_ptr to a Referent-derived object goes out // of scope. This is the only call to delete of a Referent-derived type. // This function is to be used only from within boost::intrusive_ptr. void intrusive_ptr_release(kmlbase::Referent* r) { // Strictly speaking this need only be "if (r->release() == 0)" given that // under normal operations with no direct use of these functions or // methods on Referent the reference count should never go negative. // A full "non-negative" here makes the implementation more robust. // An alternative implementation might assert r->release >= 0 to catch // usage that goes around the API in some way. if (r->release() <= 0) { delete r; } } } // end namespace kmlbase libkml-1.3.0/src/kml/base/referent.h000066400000000000000000000060021263603257100172370ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_BASE_REFERENT_H__ #define KML_BASE_REFERENT_H__ // This file contains the implementation of the Referent class which holds // the reference counter used by boost::intrusive_ptr. The Referent class // is a base class of all KML DOM Elements and also the base TempFile // class. Neither the Referent class nor the methods here are part of the // libkml public API. namespace kmlbase { // This class implements the reference count used by boost::intrusive_ptr. class Referent { public: // The constructor only constructs the Referent object. The reference // count is incremented if and when the Referent-derived object is assigned // to a boost::intrusive_ptr. Referent() : ref_count_(0) {} virtual ~Referent() {} // This method is used by intrusive_ptr_add_ref() to increment the reference // count of a given Referent-derived object. void add_ref() { ++ref_count_; } // This method is used by intrusive_ptr_release() to decrement the reference // count of a given Referent-derived object. int release() { return --ref_count_; } // This is for debugging purposes only. int get_ref_count() const { return ref_count_; } private: int ref_count_; }; // These declarations are for the implementation of the functions used within // boost::intrusive_ptr to manage Referent-derived objects.. See referent.cc // and boost/intrusive_ptr.hpp. void intrusive_ptr_add_ref(kmlbase::Referent* r); void intrusive_ptr_release(kmlbase::Referent* r); } // end namespace kmlbase #endif // KML_BASE_REFERENT_H__ libkml-1.3.0/src/kml/base/string_util.cc000066400000000000000000000161431263603257100201350ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations of various string utility functions. #include "kml/base/string_util.h" #include // strtod() #include // memcpy, strchr namespace kmlbase { void b2a_hex(uint32_t i, char* out) { char map[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; out[0] = map[(i >> 4) & 0xf]; out[1] = map[(i) & 0xf]; } string CreateExpandedStrings(const string& in, const StringMap& string_map, const string& start, const string& end) { string out(in); StringMap::const_iterator itr = string_map.begin(); for (itr = string_map.begin(); itr != string_map.end(); ++itr) { string candidate(start + itr->first + end); size_t start_pos = out.find(candidate); while (start_pos != string::npos) { out.replace(start_pos, candidate.size(), itr->second); // Avoid an infinite loop if the value contains the key. Allow the first // replacement to happen, then bail. if (itr->second.find(itr->first) != string::npos) { break; } start_pos = out.find(candidate, start_pos + candidate.size()); } } return out; } void SplitStringUsing(const string& input, const string& split_string, std::vector* output) { string iter = input; size_t separator; while ((separator = iter.find(split_string)) != string::npos) { output->push_back(iter.substr(0, separator)); iter = iter.substr(separator+1); } output->push_back(iter); } template<> void FromString(const string& str, bool* out) { if (out) { size_t skip_ws = SkipLeadingWhitespaceString(str); *out = (str.compare(skip_ws, 4, "true") == 0) || (str.compare(skip_ws, 1, "1") == 0); } } template<> void FromString(const string& str, double* out) { if (out) { *out = strtod(str.c_str(), NULL); } } template<> void FromString(const string& str, int* out) { if (out) { *out = atoi(str.c_str()); } } template<> void FromString(const string& str, string* out) { if (out) { *out = str; } } bool StringEndsWith(const string& str, const string& end) { if (str.empty() || end.empty()) { return false; } if (str.size() == end.size()) { return str == end; } return end.size() < str.size() && str.substr(str.size() - end.size()) == end; } bool StringCaseEqual(const string& a, const string& b) { #ifdef WIN32 # define strncasecmp(s1, s2, n) _strnicmp (s1, s2, n) #endif return a.size() == b.size() && strncasecmp(a.data(), b.data(), a.size()) == 0; } bool StringToDouble(const string& number, double* output) { if (!IsDecimalDoubleString(number)) { return false; } if (output) { // TODO: consider protobuf's NoLocaleStrtod. *output = strtod(number.c_str(), NULL); } return true; } bool IsDecimalDoubleString(const string& number) { if (number.empty()) { return false; } char* cp = const_cast(number.data()); const char* end = cp + number.size(); if (*cp == '-' && ++cp == end) { return false; } if (*cp == '.' && ++cp == end) { return false; } return isdigit(*cp) != 0; } size_t SkipLeadingWhitespace(const char* begin, const char* end) { const char* cp = begin; for (; cp < end; cp++) { if (!isspace(*cp)) { break; } } return cp - begin; } size_t SkipLeadingWhitespaceString(const string& str) { return SkipLeadingWhitespace(str.data(), str.data() + str.size()); } // Derived from and compatible with google3's SplitCSVLineWithDelimiter. void SplitQuotedUsing(const char* input, size_t nbytes, const char delimiter, std::vector* cols) { if (input == NULL) { return; } // Copy the line to a buffer we can write into. char *copy = (char*)malloc(nbytes + 1); memcpy(copy, static_cast(input), nbytes); copy[nbytes] = 0; char* end; char* start; const char* end_of_line = copy + nbytes; for (char* line = copy; line < end_of_line; line++) { // Skip leading whitespace, unless said whitespace is the delimiter. while (isspace(*line) && *line != delimiter) ++line; if (*line == '"' && delimiter == ',') { // Quoted value... start = ++line; end = start; for (; *line; line++) { if (*line == '"') { line++; if (*line != '"') // [""] is an escaped ["] break; // but just ["] is end of value } *end++ = *line; } // All characters after the closing quote and before the comma // are ignored. line = strchr(line, delimiter); if (!line) line = const_cast(end_of_line); } else { start = line; line = strchr(line, delimiter); if (!line) line = const_cast(end_of_line); // Skip all trailing whitespace, unless said whitespace is the delimiter. for (end = line; end > start && isspace(end[-1]) && end[-1] != delimiter; --end) ; } const bool need_another_column = (*line == delimiter) && (line == end_of_line - 1); *end = '\0'; cols->push_back(start); // If line was something like [paul,] (comma is the last character // and is not proceeded by whitespace or quote) then we are about // to eliminate the last column (which is empty). This would be // incorrect. if (need_another_column) cols->push_back(end); } free(copy); } void SplitQuotedUsingFromString(const string& linestr, const char delimiter, std::vector* cols) { SplitQuotedUsing(linestr.data(), linestr.size(), delimiter, cols); } } // end namespace kmlbase libkml-1.3.0/src/kml/base/string_util.h000066400000000000000000000125221263603257100177740ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations of various string utility functions. #ifndef KML_BASE_STRING_UTIL_H__ #define KML_BASE_STRING_UTIL_H__ #include #include #include #include "kml/base/util.h" namespace kmlbase { typedef std::map StringMap; typedef std::map::value_type StringPair; typedef std::vector StringVector; typedef std::vector< std::pair > StringPairVector; // Binary-to-ASCII hex conversion. void b2a_hex(uint32_t i, char* out); // This permits a class containing a StringMap to export a way to iterate the // internal container without exposing it directly. In the future the STL // map presently used internally may be replaced with a hash map, for example. class StringMapIterator { public: StringMapIterator(const StringMap& map) : map_(map), iter_(map.begin()) { } StringPair Data() const { return *iter_; } bool AtEnd() const { return iter_ == map_.end(); } void Advance() { ++iter_; } private: const StringMap& map_; StringMap::const_iterator iter_; }; // Walks through the input string, replacing all keys in StringMap // with the corresponding key value. The key strings are wrapped with the // start and end strings before searching the input string. Returns a new // string with the replaced entities. For example: // input: "this is $[my] $[cool] string" // string_map: { "my" : "your", "cool", "cooler" } // start: "$[" // end: "]" // replaced string: "this is your cooler string" string CreateExpandedStrings(const string& in, const StringMap& string_map, const string& start, const string& end); // This converts from string to any T of int, bool or double. template void FromString(const string& in, T* out); // This converts to string from any T of int, bool or double. template inline string ToString(T value) { std::stringstream ss; ss.precision(15); ss << value; return ss.str(); } // Split the input string on the split_string saving each string into the // output vector. void SplitStringUsing(const string& input, const string& split_string, std::vector* output); // This processes the given "-escaped string as specified here: // http://www.gdal.org/ogr/drv_csv.html // For example: // ["The ""big"" cheese."] -> [The "big" cheese.] // ["First point"] -> [First point] // ["White Bear Lake, MN, USA"] -> [White Bear Lake, MN, USA] void SplitQuotedUsing(const char* begin, size_t nbytes,const char split_char, std::vector* output); void SplitQuotedUsingFromString(const string& input, const char split_char, std::vector* output); // Returns true if end appears at the end of str. Returns false if either of // str or end are empty or if end is longer than str. bool StringEndsWith(const string& str, const string& end); // This returns true if the two strings are case-insensitively equal. // "foo" == "Foo" == "FOO" == "foo" in this regard. bool StringCaseEqual(const string& a, const string& b); // This converts the string representation of the number to a double. If the // string is not numeric false is returned, else true. It is safe to pass NULL // as the output argument in which case this function becomes a simple "is this // a number" check. bool StringToDouble(const string& number, double* output); // This returns true if number starts with [-][.][0123456789]. bool IsDecimalDoubleString(const string& number); // This returns the offset to the first non-whitespace character. size_t SkipLeadingWhitespace(const char* begin, const char* end); // This returns the offset to the first non-whitespace character. size_t SkipLeadingWhitespaceString(const string& str); } // end namespace kmlbase #endif // KML_BASE_STRING_UTIL_H__ libkml-1.3.0/src/kml/base/tempfile.h000066400000000000000000000050531263603257100172370ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the TempFile class. #ifndef KML_BASE_TEMPFILE_H__ #define KML_BASE_TEMPFILE_H__ #include "boost/intrusive_ptr.hpp" #include "kml/base/file.h" #include "kml/base/referent.h" namespace kmlbase { class TempFile; typedef boost::intrusive_ptr TempFilePtr; // A helper class to manage the creation and deletion of temporary files. // TempFile::CreateTempFile(string) returns a pointer to the class upon // successful creation of a tempfile. Returns NULL otherwise. The class // is derived from Referent, which implements the boost::intrusive_ptr // behavior. class TempFile : public Referent { public: static TempFile* CreateTempFile() { string tempfile; if (!File::CreateNewTempFile(&tempfile)) { return NULL; } return new TempFile(tempfile); } ~TempFile() { if (File::Exists(name_)) { File::Delete(name_); } } const string& name() { return name_; } private: TempFile(const string& filename) : name_(filename) { } string name_; }; } // end namespace kmlbase #endif // KML_BASE_TEMPFILE_H__ libkml-1.3.0/src/kml/base/time_util.cc000066400000000000000000000055701263603257100175670ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/base/time_util.h" #include // NULL #ifdef WIN32 #include // This header MUST come before windows.h. See #include // http://code.google.com/p/libkml/issues/detail?id=31 #include #else #include #endif namespace kmlbase { #ifdef WIN32 // http://forums.msdn.microsoft.com/en/vcgeneral/thread/430449b3-f6dd-4e18-84de-eebd26a8d668/ #if defined(_MSC_VER) || defined(_MSC_EXTENSIONS) #define DELTA_EPOCH_IN_MICROSECS 11644473600000000Ui64 #else #define DELTA_EPOCH_IN_MICROSECS 11644473600000000ULL #endif // void gettimeofday(struct timeval* tv, void *) { FILETIME file_time; GetSystemTimeAsFileTime(&file_time); // First covert file_time to a single 64 bit value. unsigned __int64 file_time64 = 0; file_time64 |= file_time.dwHighDateTime; file_time64 <<= 32; file_time64 |= file_time.dwLowDateTime; /* Now convert file_time64 to unix time. */ file_time64 /= 10; /* Convert into microseconds. */ file_time64 -= DELTA_EPOCH_IN_MICROSECS; tv->tv_sec = (long)(file_time64 / 1000000UL); tv->tv_usec = (long)(file_time64 % 1000000UL); } #endif // This is here because Windows has no gettimeofday(). double GetMicroTime() { struct timeval now_tv; gettimeofday(&now_tv, NULL); // Make this one double with secs.microseconds. return (double)now_tv.tv_sec + (double)now_tv.tv_usec/1000000; } } // end namespace kmlbase libkml-1.3.0/src/kml/base/time_util.h000066400000000000000000000033111263603257100174200ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_BASE_TIME_UTIL_H__ #define KML_BASE_TIME_UTIL_H__ namespace kmlbase { // This returns the current time as seconds.microseconds. double GetMicroTime(); } // end namespace kmlbase #endif // KML_BASE_TIME__UTILH__ libkml-1.3.0/src/kml/base/uri_parser.cc000066400000000000000000000205641263603257100177470ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the internal UriParser class. #include "kml/base/uri_parser.h" #include // memset() #include "uriparser/Uri.h" namespace kmlbase { class UriParserPrivate { public: UriParserPrivate() { // Initialize the UriUriA struct this class wraps to a sane state. memset((void *)&uri_, 0, sizeof(UriUriA)); } ~UriParserPrivate() { uriFreeUriMembersA(&uri_); } UriUriA* get_mutable_uri() { return &uri_; } UriUriA* get_uri() const { return const_cast(&uri_); } // This helper function detects the existence of the given component and // converts it to a string if one is supplied. If this component does not // exist false is returned. If the component does exist true is returned. bool GetUriComponent(const UriTextRangeA& text_range, string* output) const { if (!text_range.first || !text_range.afterLast) { return false; } if (output) { output->assign(text_range.first, text_range.afterLast - text_range.first); } return true; } private: UriUriA uri_; }; UriParser* UriParser::CreateFromParse(const char* str) { UriParser* uri_parser = new UriParser; if (uri_parser->Parse(str)) { return uri_parser; } delete uri_parser; return NULL; } UriParser* UriParser::CreateResolvedUri(const char* base, const char* relative) { boost::scoped_ptr base_uri(CreateFromParse(base)); boost::scoped_ptr relative_uri(CreateFromParse(relative)); if (!base_uri.get() || !relative_uri.get()) { return NULL; } UriParser* resolved_uri = new UriParser; if (resolved_uri->Resolve(*base_uri.get(), *relative_uri.get())) { return resolved_uri; } delete resolved_uri; return NULL; } UriParser::UriParser() { uri_parser_private_.reset(new UriParserPrivate); } UriParser::~UriParser() { } bool UriParser::Parse(const char* str) { UriParserStateA state; state.uri = uri_parser_private_->get_mutable_uri(); if (uriParseUriA(&state, str) != URI_SUCCESS) { uriFreeUriMembersA(uri_parser_private_->get_mutable_uri()); return false; } return true; } bool UriParser::Normalize() { return uriNormalizeSyntaxA(uri_parser_private_->get_mutable_uri()) == URI_SUCCESS; } bool UriParser::Resolve(const UriParser& base, const UriParser& relative) { return uriAddBaseUriA(uri_parser_private_->get_mutable_uri(), relative.uri_parser_private_->get_uri(), base.uri_parser_private_->get_uri()) == URI_SUCCESS; } bool UriParser::ToString(string* output) const { if (!output) { return false; } int chars_required; if (uriToStringCharsRequiredA(uri_parser_private_->get_mutable_uri(), &chars_required) != URI_SUCCESS) { return false; } char* dest_str = (char*)malloc(chars_required+1); if (!dest_str) { return false; } int chars_written; if (uriToStringA(dest_str, uri_parser_private_->get_mutable_uri(), chars_required+1, &chars_written) != URI_SUCCESS) { free(dest_str); return false; } *output = dest_str; free(dest_str); return true; } bool UriParser::UriToFilename(const string& uri, string* output) { #ifdef WIN32 return UriToWindowsFilename(uri, output); #else return UriToUnixFilename(uri, output); #endif } bool UriParser::UriToUnixFilename(const string& uri, string* output) { if (!output) { return false; } const int chars_required = static_cast(uri.size()) + 1; char* filename = (char*)malloc(chars_required * sizeof(char)); if (uriUriStringToUnixFilenameA(uri.c_str(), filename) != URI_SUCCESS) { free(filename); return false; } *output = filename; free(filename); return true; } bool UriParser::UriToWindowsFilename(const string& uri, string* output) { if (!output) { return false; } const int chars_required = static_cast(uri.size()) + 1; char* filename = (char*)malloc(chars_required * sizeof(char)); if (uriUriStringToWindowsFilenameA(uri.c_str(), filename) != URI_SUCCESS) { free(filename); return false; } *output = filename; free(filename); return true; } bool UriParser::FilenameToUri(const string& filename, string* output) { #ifdef WIN32 return WindowsFilenameToUri(filename, output); #else return UnixFilenameToUri(filename, output); #endif } bool UriParser::UnixFilenameToUri(const string& filename, string* output) { if (!output) { return false; } const int chars_required = 7 + 3 * static_cast(filename.size()) + 1; char* uri = (char*)malloc(chars_required * sizeof(char)); if (uriUnixFilenameToUriStringA(filename.c_str(), uri) != URI_SUCCESS) { free(uri); return false; } *output = uri; free(uri); return true; } bool UriParser::WindowsFilenameToUri(const string& filename, string* output) { if (!output) { return false; } const int chars_required = 8 + 3 * static_cast(filename.size()) + 1; char* uri = (char*)malloc(chars_required * sizeof(char)); if (uriWindowsFilenameToUriStringA(filename.c_str(), uri) != URI_SUCCESS) { free(uri); return false; } *output = uri; free(uri); return true; } bool UriParser::GetScheme(string* scheme) const { return uri_parser_private_->GetUriComponent( uri_parser_private_->get_uri()->scheme, scheme); } bool UriParser::GetHost(string* host) const { return uri_parser_private_->GetUriComponent( uri_parser_private_->get_uri()->hostText, host); } bool UriParser::GetPort(string* port) const { return uri_parser_private_->GetUriComponent( uri_parser_private_->get_uri()->portText, port); } bool UriParser::GetQuery(string* query) const { return uri_parser_private_->GetUriComponent( uri_parser_private_->get_uri()->query, query); } bool UriParser::GetFragment(string* fragment) const { return uri_parser_private_->GetUriComponent( uri_parser_private_->get_uri()->fragment, fragment); } bool UriParser::GetPath(string* path) const { if (!uri_parser_private_->get_uri()->pathHead || !uri_parser_private_->get_uri()->pathTail) { return false; } if (path) { path->clear(); UriPathSegmentA* segment = uri_parser_private_->get_uri()->pathHead; while (segment) { UriTextRangeA* text_range = &segment->text; if (!text_range || !text_range->first || !text_range->afterLast) { return false; // Something is corrupt. } path->append(text_range->first, text_range->afterLast - text_range->first); segment = segment->next; if (segment) { // If there's a next segment append a separator. path->append("/"); } } } return true; } } // end namespace kmlbase libkml-1.3.0/src/kml/base/uri_parser.h000066400000000000000000000170361263603257100176110ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the internal UriParser class that // front-ends the third_party/uriparser in a C++ API. See kml/engine/kml_uri.h // for the public API to URI handling. #ifndef KML_BASE_URI_PARSER_H__ #define KML_BASE_URI_PARSER_H__ #include "kml/base/util.h" #include "boost/scoped_ptr.hpp" namespace kmlbase { class UriParserPrivate; // This class is a memory-safe wrapper to uriparser's UriUriA. class UriParser { public: // UriParser is always constructed from one of the following static methods. // The main intentended usage of UriParser is within libkml and is restricted // to these static methods. // This creates a UriParser from a URI in string form. static UriParser* CreateFromParse(const char* str); // This creates a UriParser representing the resolution of the given // relative URI against the given base URI. static UriParser* CreateResolvedUri(const char* base, const char* relative); // The intended usage is to create a UriParser from a static method. UriParser(); // The destructor must perform uriparser-specific operations to release // resources. It is highly recommdended that a UriParser* be managed // with boost::scoped_ptr or equivalent (as is done in CreateResolveUri). ~UriParser(); // This parses the given URI string into the UriParser object and obliterates // any previous URI parsed into this object. If the parse succeeds true is // returned, else false is returned. This method is intended for use mainly // with the CreateFromParse() static method. bool Parse(const char* str); // UriParser (and the underlying uriparser library) does not automatically // normalize any URI. (Normalize resolves the ..'s in a path, for example). // This method may be used at any time to normalize the URI. RFC 3986 // requires a fetching client to normalize a URI before fetching it. bool Normalize(); // This resolves the URI represented by the UriParser relative against the // URI represented by the UriParser base. This method is intended for use // mainly with the CreateResolvedUri() static method. bool Resolve(const UriParser& base, const UriParser& relative); // This method saves the URI in string form into the given string. This // returns false if a NULL string argument is supplied or on any internal // errors in saving to this string. True is returned on success. bool ToString(string* output) const; // Converts a URI to its corresponding filename. The implementation // is platform-independent and handles either UNIX- or Windows-style path // names transparently. Returns false if output is NULL or on any internal // error in converting the uri. static bool UriToFilename(const string& uri, string* output); // Converts a UNIX URI to its corresponding UNIX filename. Returns false if // output is NULL or on any internal error in converting the uri. // For example, calling this function on "file:///home/libkml/foo.bar" will // output "/home/libkml/foo.bar". // Clients should use UriToFilename in preference to this to have the path // name style handled automatically. static bool UriToUnixFilename(const string& uri, string* output); // Converts a Windows URI to its corresponding Windows filename. Returns // false if output is NULL or on any internal error in converting the uri. // For example, calling this function on "file:///C:/home/libkml/foo.bar" // will output "C:\\home\\libkml\\foo.bar". // Clients should use UriToFilename in preference to this to have the path // name style handled automatically. static bool UriToWindowsFilename(const string& uri, string* output); // Converts a filename to its corresponding URI. The implementation is // platform-independent and handles either UNIX- or Windows-style path names // transparently. Returns false if output is NULL or on any internal // error in converting the uri. static bool FilenameToUri(const string& filename, string* output); // Converts a UNIX filename to its corresponding URI. Returns false if // output is NULL or on any internal error in converting the filename. // For example, calling this function on "/home/libkml/foo.bar" will output // "file:///home/libkml/foo.bar". // Clients should use FilenameToUri in preference to this to have the path // name style handled automatically. static bool UnixFilenameToUri(const string& filename, string* output); // Converts a Windows filename to its corresponding URI. Returns false if // output is NULL or on any internal error in converting the filename. // For example, calling this function on "C:\\home\\libkml\\foo.bar" will // output "file:///C:/home/libkml/foo.bar". // Clients should use FilenameToUri in preference to this to have the path // name style handled automatically. static bool WindowsFilenameToUri(const string& filename, string* output); // This returns the scheme of the URI if one exists. bool GetScheme(string* scheme) const; // This returns the host of the URI if one exists. bool GetHost(string* host) const; // This returns the port of the URI if one exists. bool GetPort(string* port) const; // This returns the query of the URI if one exists. bool GetQuery(string* query) const; // This method returns the fragment portion of the URI into the given // string if such is supplied. If no string is supplied or if there is no // fragment in this URI false is returned. The fragment returned does not // include the '#' found in the corresponding URI. bool GetFragment(string* fragment) const; // This method returns true if the uri has a path. If an output string // pointer is supplied the path is saved there. bool GetPath(string* path) const; private: // UriParserPrivate hides the internals of the underlying third party // uriparser types from clients of this header. boost::scoped_ptr uri_parser_private_; // No copy construction or assignment please. LIBKML_DISALLOW_EVIL_CONSTRUCTORS(UriParser); }; } // end namespace kmlbase #endif // KML_BASE_URI_PARSER_H__ libkml-1.3.0/src/kml/base/util.h000066400000000000000000000047051263603257100164120ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_BASE_UTIL_H__ #define KML_BASE_UTIL_H__ #if !defined(_MSC_VER) || (_MSC_VER >= 1600) // Visual Studio versions < 10 do not contain stdint. Assumes // all other platforms include this c99 standard header. # include #else // MSVC versions prior to v10 have no header for C99 typedefs. typedef __int8 int8_t; typedef __int16 int16_t; typedef __int32 int32_t; typedef __int64 int64_t; typedef unsigned __int8 uint8_t; typedef unsigned __int16 uint16_t; typedef unsigned __int32 uint32_t; typedef unsigned __int64 uint64_t; #endif typedef unsigned int uint; // A macro to disallow the evil copy constructor and assignment operator. // Should be used in the private: declarations for a class. #define LIBKML_DISALLOW_EVIL_CONSTRUCTORS(TypeName) \ TypeName(const TypeName&);\ void operator=(const TypeName&) #include // A convenience for the internal build system at Google. #ifndef HAS_GLOBAL_STRING using std::string; #endif #endif // KML_BASE_UTIL_H__ libkml-1.3.0/src/kml/base/vec3.h000066400000000000000000000071211263603257100162700ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the Vec3 class. #ifndef KML_BASE_VEC3_H__ #define KML_BASE_VEC3_H__ namespace kmlbase { // A Vec3 represents a 2d or 3d point. A Vec3 always has at least longitude // and latitude. Altitude defaults to 0 and has_altitude() returns false if // altitude was not set. class Vec3 { public: // Create an empty Vec3. Vec3() { lon_ = lat_ = 0.0; clear_altitude(); } // Create a 2d Vec3. Vec3(double longitude, double latitude) { lon_ = longitude; lat_ = latitude; clear_altitude(); } // Create a 3d Vec3. Vec3(double longitude, double latitude, double altitude) { lon_ = longitude; lat_ = latitude; set_altitude(altitude); } void set(int i, double val) { if (i == 0) { lon_ = val; } else if (i == 1) { lat_ = val; } else if (i == 2) { set_altitude(val); } else { // We should notify about incorrect usage. } } double get_longitude() const { return lon_; } double get_latitude() const { return lat_; } bool has_altitude() const { return has_altitude_; } double get_altitude() const { return alt_; } void set_altitude(double altitude) { alt_ = altitude; has_altitude_ = true; } void clear_altitude() { alt_ = 0; has_altitude_ = false; } // This class does double-duty as the representation of both gx:coord and // gx:angles. In the future we might need to split these out as separate // classes. For instance, the initial specifiction of these new elements // is unclear on how too few or too many tuples should be handled. For now // we treat them exactly as the old-style coordinates. double get_heading() const { return get_longitude(); } double get_pitch() const { return get_latitude(); } double get_roll() const { return get_altitude(); } // Operator overrides. bool operator==(const Vec3& vec3) const { return lon_ == vec3.get_longitude() && lat_ == vec3.get_latitude() && alt_ == vec3.get_altitude(); } private: double lon_, lat_, alt_; bool has_altitude_; }; } // namespace kmlbase #endif // KML_BASE_VEC3_H__ libkml-1.3.0/src/kml/base/version.cc000066400000000000000000000043301263603257100172520ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the Version class. The key purpose // is to "bake" the values of the LIBKML_*_VERSION #defines into the library. #include "kml/base/version.h" #include "kml/base/string_util.h" namespace kmlbase { // static string Version::GetString() { return ToString(get_major()) + "." + ToString(get_minor()) + "." + ToString(get_micro()); } // static bool Version::IsCompat(int major, int minor, int micro) { return major == get_major() && minor >= get_minor(); } // static int Version::get_major() { return LIBKML_MAJOR_VERSION; } // static int Version::get_minor() { return LIBKML_MINOR_VERSION; } // static int Version::get_micro() { return LIBKML_MICRO_VERSION; } } // end namespace kmlbase libkml-1.3.0/src/kml/base/version.h000066400000000000000000000056021263603257100171170ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations of the Version API. #ifndef KML_BASE_VERSION_H__ #define KML_BASE_VERSION_H__ #include "kml/base/util.h" namespace kmlbase { // Include this file and use these #define's in your code such that your // code can call the methods of the Version API to verify compatibility between // your code and libkml. It is the intention that these values match those // used in the configure.ac file's AC_INIT. #define LIBKML_MAJOR_VERSION 1 #define LIBKML_MINOR_VERSION 3 #define LIBKML_MICRO_VERSION 0 // This API provides the version info this library was compiled with. class Version { public: // This returns the major.minor.micro in string form. static string GetString(); // This is an advisory method which provides the given libkml instance the // oportunity to guess at its compatibility with the given version info. // In general this will return true for a match on major and any minor // greater than or equal to the compiled-in minor. static bool IsCompat(int major, int minor, int micro); // This returns the value LIBKML_MAJOR_VERSION this libkml was compiled with. static int get_major(); // This returns the value LIBKML_MINOR_VERSION this libkml was compiled with. static int get_minor(); // This returns the value LIBKML_MICRO_VERSION this libkml was compiled with. static int get_micro(); }; } // end namespace kmlbase #endif // KML_BASE_VERSION_H__ libkml-1.3.0/src/kml/base/xml_element.h000066400000000000000000000077411263603257100177510ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the definition of the XmlElement class. #ifndef KML_BASE_XML_ELEMENT_H__ #define KML_BASE_XML_ELEMENT_H__ #include "boost/intrusive_ptr.hpp" #include "kml/base/referent.h" #include "kml/base/util.h" #include "kml/base/xml_namespaces.h" namespace kmlbase { class XmlFile; // Forward declare XmlElement to create typedef used within class XmlElement. class XmlElement; typedef boost::intrusive_ptr XmlElementPtr; // This class represents an XML element. An XmlElement may be in one XmlFile, // and may have one parent XmlElement. This class is derived from Referent // such that derived classes can use boost::intrusive_ptr. class XmlElement : public Referent { public: // Get the parent XmlElement if any. const XmlElement* GetParent() const { return parent_; } // Get the parent XmlFile if any. const XmlFile* GetXmlFile() const { return xml_file_; } XmlnsId get_xmlns() const { return xmlns_id_; } // This returns true if the passed element is in the same XmlFile or if both // this XmlElement and the passed element are in no XmlFile. Passing a NULL // pointer always causes a false return value. bool InSameXmlFile(const XmlElementPtr& element) const { return element && xml_file_ == element->xml_file_; } // If this element is not already in an XmlFile this associates this element // with the given XmlFile and true is returned. If this element is already // in an XmlFile false is returned and that association remains. There is // no means to detach an XmlElement from an XmlFile. bool SetXmlFile(const XmlFile* xml_file) { if (!xml_file_ && xml_file) { xml_file_ = xml_file; return true; } return false; } protected: // This is an abstract base class and is never created directly. XmlElement() : xmlns_id_(XMLNS_NONE), parent_(NULL), xml_file_(NULL) {} void set_xmlns(XmlnsId xmlns_id) { xmlns_id_ = xmlns_id; } // Only a derived class can set its parent. This returns false if this // XmlElement already has a parent or if this XmlElement is in a different // XmlFile. bool SetParent(const XmlElementPtr& parent) { if (!parent_ && parent && InSameXmlFile(parent)) { parent_ = parent.get(); return true; } return false; } private: XmlnsId xmlns_id_; const XmlElement* parent_; // Can't ref count due to circularity. const XmlFile* xml_file_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(XmlElement); }; } // end namespace kmlbase #endif // KML_BASE_XML_ELEMENT_H__ libkml-1.3.0/src/kml/base/xml_file.h000066400000000000000000000057111263603257100172320ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the XmlFile class. #ifndef KML_BASE_XML_FILE_H__ #define KML_BASE_XML_FILE_H__ #include #include "boost/intrusive_ptr.hpp" #include "kml/base/xml_element.h" #include "kml/base/referent.h" #include "kml/base/util.h" namespace kmlbase { // TODO: use a typedef (or type) for XmlId typedef std::map XmlElementIdMap; // This class represents an XML file (in XML standards this is known as a // "document", however we avoid that term due to the use of "" as // an element in KML). An XmlFile may have a URL, a root XmlElement and // a set of xml ID to XmlElement mappings. class XmlFile : public Referent { public: const string& get_url() const { return url_; } const XmlElementPtr& get_root() const { return root_; } protected: void set_url(const string& url) { url_ = url; } bool set_root(const XmlElementPtr& element) { return root_ ? false : (root_ = element, true); } XmlElementPtr FindXmlElementById(const string& id) const { XmlElementIdMap::const_iterator find = id_map_.find(id); return find != id_map_.end() ? find->second : NULL; } protected: // This is an abstract base class and is never created directly. XmlFile() {} private: // TODO: use a typedef for URL and/or URL string string url_; XmlElementPtr root_; XmlElementIdMap id_map_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(XmlFile); }; } // end namespace kmlbase #endif // KML_BASE_XML_FILE_H__ libkml-1.3.0/src/kml/base/xml_namespaces.cc000066400000000000000000000066331263603257100205740ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/base/xml_namespaces.h" namespace kmlbase { const XmlNamespace XmlNamespaces[] = { { XMLNS_NONE, NULL, NULL }, { XMLNS_APP, "app", "http://www.w3.org/2007/app" }, { XMLNS_ATOM, "atom", "http://www.w3.org/2005/Atom" }, { XMLNS_BATCH, "batch", "http://schemas.google.com/gdata/batch" }, { XMLNS_DOCS, "docs", "http://schemas.google.com/docs/2007" }, { XMLNS_EXIF, "exif", "http://schemas.google.com/photos/exif/2007" }, { XMLNS_GD, "gd", "http://schemas.google.com/g/2005" }, { XMLNS_GEORSS, "georss", "http://www.georss.org/georss" }, { XMLNS_GML, "gml", "http://www.opengis.net/gml" }, { XMLNS_GPHOTO, "gphoto", "http://schemas.google.com/photos/2007" }, { XMLNS_GPX, "gpx", "http://www.topografix.com/GPX/1/0" }, { XMLNS_GX22, "gx", "http://www.google.com/kml/ext/2.2" }, { XMLNS_GS, "gs", "http://schemas.google.com/spreadsheets/2006" }, { XMLNS_KML22, "kml", "http://www.opengis.net/kml/2.2" }, { XMLNS_MEDIA, "media", "http://search.yahoo.com/mrss/" }, { XMLNS_OPENSEARCH, "openSearch", "http://a9.com/-/spec/opensearch/1.1/" }, { XMLNS_XAL, "xal", "urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" }, { XMLNS_XML, "xml", "http://www.w3.org/XML/1998/namespace" }, { XMLNS_XSD, "xsd", "http://www.w3.org/2001/XMLSchema" }, { XMLNS_XSI, "xsi", "http://www.w3.org/2001/XMLSchema-instance" } }; bool FindXmlNamespaceAndPrefix(XmlnsId xmlns_id, string* prefix, string* xml_namespace) { if (xmlns_id == XMLNS_NONE) { return false; } const size_t num_namespaces = sizeof(XmlNamespaces)/sizeof(XmlNamespaces[0]); for (size_t i = 0; i < num_namespaces; ++i) { if (XmlNamespaces[i].xmlns_id_ == xmlns_id) { if (prefix) { *prefix = XmlNamespaces[i].prefix_; } if (xml_namespace) { *xml_namespace = XmlNamespaces[i].xml_namespace_; } return true; } } return false; } } // end namespace kmlbase libkml-1.3.0/src/kml/base/xml_namespaces.h000066400000000000000000000057761263603257100204450ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_BASE_XML_NAMESPACES_H__ #define KML_BASE_XML_NAMESPACES_H__ #include "kml/base/util.h" namespace kmlbase { // These identify KML-related XML namespaces. Most are not used by KML or // by libkml and are here only as a convenience when parsing other XML // langauges that may include KML. Many are specific to the Google Data APIs // as indicated. typedef enum { XMLNS_NONE, XMLNS_APP, XMLNS_ATOM, XMLNS_BATCH, // Google Data XMLNS_DOCS, // Google Data XMLNS_EXIF, XMLNS_GD, // Google Data XMLNS_GEORSS, XMLNS_GML, XMLNS_GPHOTO, // Google Data XMLNS_GPX, XMLNS_GX22, XMLNS_GS, // Google Data XMLNS_KML22, XMLNS_MEDIA, XMLNS_OPENSEARCH, XMLNS_XAL, XMLNS_XML, XMLNS_XSD, XMLNS_XSI } XmlnsId; // This data structure associates the libkml-internal xmlns id with the // namespace's typical prefix and the full namespace name. All ids, prefixes, // and namespaces must be unique. struct XmlNamespace { XmlnsId xmlns_id_; const char* prefix_; const char* xml_namespace_; }; // This function returns a libkml-specific prefix and XML namespace for the // given id. This exists such that elements within libkml need only hold // a small identifier instead of a full namespace string. Either prefix or // xml_namespace pointers can be NULL. The return value indicates whether // the given id is known to libkml. bool FindXmlNamespaceAndPrefix(XmlnsId xmlns_id, string* prefix, string* xml_namespace); } // end namespace kmlbase #endif // KML_BASE_XML_NAMESPACES_H__ libkml-1.3.0/src/kml/base/xmlns.h000066400000000000000000000120131263603257100165650ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // The Xmlns class is deprecated. Use Attributes. #ifndef KML_BASE_XMLNS_H__ #define KML_BASE_XMLNS_H__ #include #include #include "boost/scoped_ptr.hpp" #include "kml/base/attributes.h" namespace kmlbase { // This class holds the default namespace and the set of prefix-namespace // mappings for an XML file. For example, if these attributes of the root // element are used with this class's Create... // // ...the get_default() will return "http://www.w3.org/2001/XMLSchema", and the // following prefix-namespaces pairs will be returned by get_namespace: // kml="http://www.opengis.net/kml/2.2" // atom="http://www.w3.org/2005/Atom" // xal="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0" // If there are no "xmlns*" attribute names in the passed attributes Create() // returns NULL. class Xmlns { public: // The caller owns the created Xmlns object. static Xmlns* Create(const kmlbase::Attributes& attributes) { Xmlns* xmlns = new Xmlns; if (xmlns->Parse(attributes)) { return xmlns; } delete xmlns; return NULL; } // This returns the URI of the default namespace. The returned string is // empty if there is no default namespace. A default namespace is the value // of an "xmlns" attribute (one with no : and prefix), for example the above // sample has this default namespace URI: "http://www.w3.org/2001/XMLSchema". const string& get_default() const { return default_; } // This returns the URI of the namespace for the given prefix. The returned // string is empty if no such prefix-namespace mapping exists. In the sample // above a prefix of "kml" returns "http://www.opengis.net/kml/2.2". const string GetNamespace(const string& prefix) const { string name_space; if (prefix_map_.get()) { prefix_map_->GetValue(prefix, &name_space); } return name_space; } // This returns the prefix for the given namespace. The returned string is // empty if no such namespace has a prefix. In the sample above a namespace // of "http://www.opengis.net/kml/2.2" returns "kml". const string GetKey(const string& value) const { string key; if (prefix_map_.get()) { prefix_map_->FindKey(value, &key); } return key; } // This returns a list of all xmlns prefix names. For example, from the // sample above this returns "kml", "atom", "xal". Order from the original // XML is not preserved (XML attributes in general have no order semantics // and must each be unique). void GetPrefixes(std::vector* prefix_vector) const { if (prefix_map_.get()) { prefix_map_->GetAttrNames(prefix_vector); } } private: Xmlns() {} bool Parse(const kmlbase::Attributes& attributes) { // Create a copy so that we can use non-const SplitByPrefix. boost::scoped_ptr clone(attributes.Clone()); prefix_map_.reset(clone->SplitByPrefix("xmlns")); attributes.GetValue("xmlns", &default_); // Return true if there is a default xmlns or if there are any // xmlns:prefx="ns" pairs. return !default_.empty() || prefix_map_.get(); } string default_; boost::scoped_ptr prefix_map_; }; } // end namespace kmlbase #endif // KML_BASE_XMLNS_H__ libkml-1.3.0/src/kml/base/zip_file.cc000066400000000000000000000171541263603257100173760ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the ZipFile class. #include #include "kml/base/zip_file.h" #include "kml/base/file.h" #include "kml/base/contrib/minizip/unzip.h" #include "kml/base/contrib/minizip/iomem_simple.h" #include namespace kmlbase { // The maximum uncompressed file size we permit the underlying zip reader // to attempt to handle by default. (2 GB, as per minizip/unzip.h.) static const unsigned long kMaxUncompressedZipSize = ZIP_MAX_UNCOMPRESSED_SIZE; // This class hides the use of minizip from the interface. class MinizipFile { public: MinizipFile(zipFile zipfile) : zipfile_(zipfile) {} ~MinizipFile() { if (zipfile_) { zipClose(zipfile_, 0); } } zipFile get_zipfile() { return zipfile_; } private: zipFile zipfile_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(MinizipFile); }; // Static. ZipFile* ZipFile::OpenFromString(const string& zip_data) { return IsZipData(zip_data) ? new ZipFile(zip_data) : NULL; } // Static. ZipFile* ZipFile::OpenFromFile(const char* file_path) { if (!File::Exists(file_path)) { return NULL; } string data; if (!File::ReadFileToString(file_path, &data)) { return NULL; } return OpenFromString(data); } // Static. ZipFile* ZipFile::Create(const char* file_path) { zipFile zipfile = zipOpen(file_path, 0); if (!zipfile) { return NULL; } MinizipFile* minizipfile = new MinizipFile(zipfile); if (!minizipfile) { return NULL; } return new ZipFile(minizipfile); } // Private. Class constructed with static methods. ZipFile::ZipFile(const string& data) : minizip_file_(NULL), data_(data), max_uncompressed_file_size_(kMaxUncompressedZipSize) { // Fill the table of contents for this zipfile. zlib_filefunc_def api; if (voidpf mem_stream = mem_simple_create_file( &api, const_cast(static_cast(data.data())), data.size())) { unzFile zfile = libkml_unzAttach(mem_stream, &api); if (zfile) { unz_file_info finfo; do { static char buf[1024]; if (libkml_unzGetCurrentFileInfo(zfile, &finfo, buf, sizeof(buf), 0, 0, 0, 0) == UNZ_OK) { zipfile_toc_.push_back(buf); } } while (libkml_unzGoToNextFile(zfile) == UNZ_OK); libkml_unzClose(zfile); } } } // Private. Class constructed with static methods. ZipFile::ZipFile(MinizipFile* minizip_file) : minizip_file_(minizip_file), max_uncompressed_file_size_(kMaxUncompressedZipSize) {} ZipFile::~ZipFile() { // Scoped ptr takes care of minizip_file_. } // Static. bool ZipFile::IsZipData(const string& zip_data) { return zip_data.substr(0, 4) == "PK\003\004" ? true : false; } bool ZipFile::FindFirstOf(const string& file_extension, string* path_in_zip) const { if (!path_in_zip) { return false; } kmlbase::StringVector::const_iterator itr = zipfile_toc_.begin(); for(; itr != zipfile_toc_.end(); ++itr) { if (kmlbase::StringEndsWith(*itr, file_extension)) { *path_in_zip = *itr; return true; } } return false; } bool ZipFile::GetToc(kmlbase::StringVector* subfiles) const { if (!subfiles) { return false; } *subfiles = zipfile_toc_; return true; } // Is the requested path in the Zip file's table of contents? bool ZipFile::IsInToc(const string& path_in_zip) const { kmlbase::StringVector::const_iterator itr = zipfile_toc_.begin(); for(; itr != zipfile_toc_.end(); ++itr) { if (*itr == path_in_zip) { return true; } } return false; } // This helper class owns the closing of the unzFile handle used in the // GetEntry method. class UnzFileHelper { public: UnzFileHelper(unzFile unzfile) : unzfile_(unzfile) {} ~UnzFileHelper() { libkml_unzClose(unzfile_); } unzFile get_unzfile() { return unzfile_; } private: unzFile unzfile_; }; bool ZipFile::GetEntry(const string& path_in_zip, string* output) const { // Check the TOC first. if (!IsInToc(path_in_zip)) { return false; } zlib_filefunc_def api; voidpf mem_stream = mem_simple_create_file( &api, const_cast(static_cast(data_.data())), data_.size()); if (!mem_stream) { return false; } unzFile unzfile = libkml_unzAttach(mem_stream, &api); if (!unzfile) { return false; } boost::scoped_ptr unzfilehelper(new UnzFileHelper(unzfile)); unz_file_info finfo; if (libkml_unzLocateFile(unzfilehelper->get_unzfile(), path_in_zip.c_str(), 0) != UNZ_OK || libkml_unzOpenCurrentFile(unzfilehelper->get_unzfile()) != UNZ_OK || libkml_unzGetCurrentFileInfo(unzfilehelper->get_unzfile(), &finfo, 0, 0, 0, 0, 0, 0) != UNZ_OK) { return false; } unsigned long nbytes = finfo.uncompressed_size; if (nbytes == 0 || nbytes > max_uncompressed_file_size_) { // This is likely an imcompatibility between the library with which the // file was created and what the underlying minizip library can // uncompress. One such error is in the unit test for this file. return false; } // We permit output to be NULL. if (!output) { return true; } char* filedata = new char[nbytes]; if (libkml_unzReadCurrentFile(unzfilehelper->get_unzfile(), filedata, nbytes) == static_cast(nbytes)) { output->assign(filedata, nbytes); delete [] filedata; return true; } delete [] filedata; return false; } bool ZipFile::AddEntry(const string& data, const string& path_in_zip) { // The path must be relative to and below the archive. if (path_in_zip.substr(0, 1).find_first_of("/\\") != string::npos || path_in_zip.substr(0, 2) == "..") { return false; } if (!minizip_file_) { return false; } zipFile zipfile = minizip_file_->get_zipfile(); if (!zipfile) { return false; } zipOpenNewFileInZip(zipfile, path_in_zip.c_str(), 0, 0, 0, 0, 0, 0, Z_DEFLATED, Z_DEFAULT_COMPRESSION); zipWriteInFileInZip(zipfile, static_cast(data.data()), static_cast(data.size())); return zipCloseFileInZip(zipfile) == ZIP_OK; } } // end namespace kmlbase libkml-1.3.0/src/kml/base/zip_file.h000066400000000000000000000124541263603257100172360ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR FILEIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE FILEIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the ZipFile class. #ifndef KML_BASE_ZIP_FILE_H__ #define KML_BASE_ZIP_FILE_H__ #include "boost/scoped_ptr.hpp" #include "kml/base/string_util.h" #include "kml/base/util.h" namespace kmlbase { // Forward-declare the internal MinizipFile class that hides our current use // of minizip. class MinizipFile; // This class represents a ZIP file. Obviously the intent within this project // is for use with KMZ files, but this class has no particular KML or KMZ // specifics. class ZipFile { public: // Open a ZIP file in-memory suitable for reading. Will return NULL on any // internal error. static ZipFile* OpenFromString(const string& zip_data); // Open a ZIP file at file_path suitable for reading. Will return NULL on any // internal error. static ZipFile* OpenFromFile(const char* file_path); // Create a ZIP file suitable for writing. Will return NULL on any internal // error or a failure to create a file at file_path. static ZipFile* Create(const char* file_path); ~ZipFile(); // The default maximum uncompressed file size we permit the underlying // zip reader to handle is 2 GB by default. void set_max_uncompressed_file_size(unsigned int i) { max_uncompressed_file_size_ = i; } unsigned int get_max_uncompressed_file_size() { return max_uncompressed_file_size_; } // Returns true if zip_data looks like a PK ZIP archive. This is the only // supported ZIP variant. static bool IsZipData(const string& zip_data); // Finds the first file in the ZIP file that ends with the given file // extension and writes the entire path into path_in_zip. Returns false // if no file with the given extension exists in the archive or if // path_in_zip is NULL. bool FindFirstOf(const string& file_extension, string* path_in_zip) const; // Returns the table of contents for the ZIP file. The StringVector // is not cleared before writing. Returns false if the pointer is invalid. // The list is simply an enumeration of the files with their full pathnames. // With respect to ZIP files, there is no concrete concept of a traditional // directory; thus any name with a path separator ("/", etc) has no special // treatment. It is the client's responsibility to supply such handling. bool GetToc(StringVector* subfiles) const; // Is the requested path in the ZIP file's table of contents? bool IsInToc(const string& path_in_zip) const; // Returns the contents of path_in_zip in the ZIP file. Returns true // if path_in_zip exists in the ZIP file. If output is a valid pointer // the data of path_in_zip are read into it. bool GetEntry(const string& path_in_zip, string* output) const; // Returns the raw bytes of this ZipFile. const string& get_data() const { return data_; } // Writes data to path_in_zip. The path must be relative to the root of the // archive. e.g. AddEntry(data, "somedir/file.png"). Specifically, paths that // start with a '/' or '..' will be rejected and false is returned. False is // also returned on any internal ZIP file error. The ZipFile instance must // have been created with ZipFile::Create. If it wasn't false is returned. // Note that a second call to AddEntry with new data to the same path is // essentially a NOP. True will be returned, but the data is unchanged. bool AddEntry(const string& data, const string& path_in_zip); private: // The constructor used to open a ZIP file in-memory, suitable for reading. ZipFile(const string& data); // The constructor used in creation of a ZIP file suitable for writing. ZipFile(MinizipFile* minizip_file); boost::scoped_ptr minizip_file_; string data_; StringVector zipfile_toc_; unsigned long max_uncompressed_file_size_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(ZipFile); }; } // end namespace kmlbase #endif // KML_BASE_ZIP_FILE_H__ libkml-1.3.0/src/kml/convenience/000077500000000000000000000000001263603257100166405ustar00rootroot00000000000000libkml-1.3.0/src/kml/convenience/CMakeLists.txt000066400000000000000000000002611263603257100213770ustar00rootroot00000000000000file(GLOB SRCS "*.cc" ) file(GLOB INCS "${CMAKE_CURRENT_SOURCE_DIR}/*.h") build_target( NAME kmlconvenience SRCS ${SRCS} INCS ${INCS} DEPENDS kmlengine;kmldom;kmlbase) libkml-1.3.0/src/kml/convenience/atom_util.cc000066400000000000000000000215671263603257100211570ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the Atom utility functions. #include "kml/convenience/atom_util.h" #include // Required by boost::intrusive_ptr. #include "kml/base/string_util.h" #include "kml/convenience/http_client.h" #include "kml/dom.h" #include "kml/engine/clone.h" using kmldom::AtomContentPtr; using kmldom::AtomEntryPtr; using kmldom::AtomFeedPtr; using kmldom::AtomLinkPtr; using kmldom::ContainerPtr; using kmldom::ElementPtr; using kmldom::FeaturePtr; using kmldom::KmlFactory; namespace kmlconvenience { // static AtomEntryPtr AtomUtil::CreateBasicEntry(const string& title, const string& summary) { AtomEntryPtr entry = KmlFactory::GetFactory()->CreateAtomEntry(); entry->set_title(title); entry->set_summary(summary); return entry; } // static AtomLinkPtr AtomUtil::CreateBasicLink(const string& href, const string& rel, const string& type) { AtomLinkPtr link = KmlFactory::GetFactory()->CreateAtomLink(); link->set_href(href); link->set_rel(rel); link->set_type(type); return link; } // static kmldom::AtomEntryPtr AtomUtil::CreateEntryForFeature( const FeaturePtr& feature) { if (!feature.get()) { return NULL; } AtomEntryPtr entry = CreateBasicEntry(feature->get_name(), feature->get_description()); AtomContentPtr content = KmlFactory::GetFactory()->CreateAtomContent(); ElementPtr element = content; // There is no public API for programmatically adding an unknown or // misplaced element to any other, so use the same API the parser uses // which is that all elements pass anything they don't know up to // Element::AddElement(). element->AddElement(feature); entry->set_content(content); return entry; } // static bool AtomUtil::GetContentSrc(const AtomEntryPtr& entry, string* src) { if (entry.get() && entry->has_content() && entry->get_content()->has_src()) { if (src) { *src = entry->get_content()->get_src(); } return true; } return false; } // static bool AtomUtil::LinkIsOfRel(const kmldom::AtomLinkPtr& link, const string& rel_type) { return link.get() && !rel_type.empty() && kmlbase::StringEndsWith(link->get_rel(), rel_type); } // static kmldom::AtomCategoryPtr AtomUtil::FindCategoryByScheme( const kmldom::AtomCommon& atom_common, const string& scheme) { size_t category_size = atom_common.get_category_array_size(); for (size_t i = 0; i < category_size; ++i) { const kmldom::AtomCategoryPtr& category = atom_common.get_category_array_at(i); if (category->has_scheme() && kmlbase::StringEndsWith(category->get_scheme(), scheme)) { return category; } } return NULL; } // static bool AtomUtil::FindRelUrl(const kmldom::AtomCommon& atom_common, const string& rel_type, string* href) { size_t link_size = atom_common.get_link_array_size(); for (size_t i = 0; i < link_size; ++i) { const kmldom::AtomLinkPtr& link = atom_common.get_link_array_at(i); if (link->has_href() && LinkIsOfRel(link, rel_type)) { if (href) { *href = link->get_href(); } return true; } } return false; } // static kmldom::AtomLinkPtr AtomUtil::FindLink(const kmldom::AtomCommon& atom_common, const string& rel_type, const string& mime_type) { size_t link_size = atom_common.get_link_array_size(); for (size_t i = 0; i < link_size; ++i) { const kmldom::AtomLinkPtr& link = atom_common.get_link_array_at(i); if (LinkIsOfRel(link, rel_type) && link->get_type() == mime_type) { return link; } } return NULL; } // static FeaturePtr AtomUtil::GetEntryFeature(const AtomEntryPtr& entry) { // Any KML child of will appear as a misplaced element. if (entry.get() && entry->has_content() && entry->get_content()->get_misplaced_elements_array_size() > 0) { return kmldom::AsFeature( entry->get_content()->get_misplaced_elements_array_at(0)); } return NULL; } // static FeaturePtr AtomUtil::CloneEntryFeature(const AtomEntryPtr& entry) { if (FeaturePtr feature = GetEntryFeature(entry)) { string href; if (FindRelUrl(*entry.get(), "self", &href)) { AtomLinkPtr link = KmlFactory::GetFactory()->CreateAtomLink(); link->set_href(href); feature->set_atomlink(link); } return feature; } return NULL; } // static void AtomUtil::GetFeedFeatures(const AtomFeedPtr& feed, ContainerPtr container) { // Need both an and Container to do anything interesting. if (feed.get() && container.get()) { for (size_t i = 0; i < feed->get_entry_array_size(); ++i) { // We need to clone because libkml allows no more than one parent per // XmlElement (see kmlbase::XmlElement::SetParent). container->add_feature(CloneEntryFeature(feed->get_entry_array_at(i))); } } } // static AtomEntryPtr AtomUtil::FindEntryByTitle(const kmldom::AtomFeedPtr& feed, const string& title) { for (size_t e = 0; e < feed->get_entry_array_size(); ++e) { const kmldom::AtomEntryPtr& entry = feed->get_entry_array_at(e); if (entry->get_title() == title) { return entry; } } return NULL; } // static kmldom::AtomFeedPtr AtomUtil::GetAndParseFeed(const string& feed_uri, const HttpClient& http_client) { string feed_xml; if (http_client.SendRequest(HTTP_GET, feed_uri, NULL, NULL, &feed_xml)) { return kmldom::AsAtomFeed(kmldom::ParseAtom(feed_xml, NULL)); } return NULL; } // static kmldom::AtomFeedPtr AtomUtil::GetNextFeed(const kmldom::AtomFeedPtr& feed, const HttpClient& http_client) { string next_feed_url; if (kmlconvenience::AtomUtil::FindRelUrl(*feed, "next", &next_feed_url)) { return GetAndParseFeed(next_feed_url, http_client); } return NULL; } // Parse a string of this form: val. // TODO: put this in kmlbase as a general facility. static bool HackParseElement(const string& element, string* key, string* val) { size_t pipe = element.find('|'); if (pipe == string::npos) { return false; } size_t gt = element.find('>', pipe + 1); if (gt == string::npos) { return false; } size_t lt = element.find('<', gt + 1); if (lt == string::npos) { return false; } *key = element.substr(pipe + 1, gt - pipe - 1); *val = element.substr(gt + 1, lt - gt - 1); return true; } // Look for something about like this in the 's unknown (unparsed) // elements array: // document:0ARX2bBe7ATEpZHg1a3poY18xOWNwZ2NuN2Qy bool AtomUtil::GetGdResourceId(const kmldom::AtomEntryPtr& entry, string* resource_id) { // Since libkml does not presently know about the gd namespace we look for // this element in the unknown elements list. size_t num_un = entry->get_unknown_elements_array_size(); for (size_t i = 0; i < num_un; ++i) { string tag; string content; if (HackParseElement(entry->get_unknown_elements_array_at(i), &tag, &content) && tag == "resourceId") { *resource_id = content; return true; } } return false; } } // end namespace kmlconvenience libkml-1.3.0/src/kml/convenience/atom_util.h000066400000000000000000000156471263603257100210230ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of some convenience functions for // processing Atom and Atom with KML. While no code here is specific to // the Google Maps Data API much of this is useful in coding to that service. // See RFC 4287 for more information about Atom. #ifndef KML_CONVENIENCE_ATOM_UTIL_H_ #define KML_CONVENIENCE_ATOM_UTIL_H_ #include "kml/dom.h" namespace kmlconvenience { class HttpClient; // This class is an API of Atom (RFC 4287) utility functions especially with // particular emphasis on wrapping KML. class AtomUtil { public: // This creates an with the specified values for // and . static kmldom::AtomEntryPtr CreateBasicEntry(const string& title, const string& summary); // This creates an with the specified values of href=, rel=, // and type=. static kmldom::AtomLinkPtr CreateBasicLink(const string& href, const string& rel, const string& type); // This creates an from and for the KML Feature. The // 's is set from the Feature's and the // is set from the Feature's . static kmldom::AtomEntryPtr CreateEntryForFeature( const kmldom::FeaturePtr& feature); // This returns the 's 's src= and returns true // if these exist. False is returned if the has no // or if the has no src=. Passing a NULL // src is safe and has no bearing on the return value. static bool GetContentSrc(const kmldom::AtomEntryPtr& entry, string* src); // This returns the first who's scheme= ends with scheme. // NULL is returned if no matching is found. static kmldom::AtomCategoryPtr FindCategoryByScheme( const kmldom::AtomCommon& atom_common, const string& scheme); // This returns true if the given 's rel= ends with rel_type. static bool LinkIsOfRel(const kmldom::AtomLinkPtr& link, const string& rel_type); // This returns the first matching the given link relation // (rel= attribute) and mimetype (type= attribute). LinkIsOfRel is used // to match the rel_type. The mime_type is an exact match. NULL is // returned if no matching is found. static kmldom::AtomLinkPtr FindLink(const kmldom::AtomCommon& atom_common, const string& rel_type, const string& mime_type); // Return the first in the feed with the given title. // This returns NULL if no 's have this exact . static kmldom::AtomEntryPtr FindEntryByTitle(const kmldom::AtomFeedPtr& feed, const string& title); // This returns the href= value of the first <atom:link> whose first rel= // ends with the given link relation type. Both AtomFeed (<atom:feed>) // and AtomEntry (<atom:entry>) are of the AtomCommon type. static bool FindRelUrl(const kmldom::AtomCommon& atom_common, const string& rel_type, string* href); // This returns a clone of the KML Feature contained in the <atom:entry>. // The returned clone Feature's <atom:link> is set to the <atom:entry>'s // "self" link relation if such is found in the <atom:entry>. // NULL is returned if no KML Feature is contained by this <atom:entry>. static kmldom::FeaturePtr CloneEntryFeature( const kmldom::AtomEntryPtr& entry); // This simply gets the KML Feature in the <atom:entry> if it has one. // See CloneEntryFeature() for a slightly richer function for use in // reconstructing a KML file from one or more <atom:entry>'s. Note: since // this feature is the child of another element it cannot be directly // parented to any other element, hence the use of kmlengine::Clone() // in the CloneEntryFeature() function. static kmldom::FeaturePtr GetEntryFeature(const kmldom::AtomEntryPtr& entry); // This calls CloneEntryFeature() for each <atom:entry> in the <atom:feed>. // The Container's <atom:link> is set to the <atom:feed>'s "self" link // relation if such is found in the <atom:feed>. static void GetFeedFeatures(const kmldom::AtomFeedPtr& feed, kmldom::ContainerPtr container); // This fetches and parses the given <atom:feed> at the given URL. NULL is // returned on any fetch or parse errors. The HttpClient is expected to be // "logged in" as appropriate for the URL. static kmldom::AtomFeedPtr GetAndParseFeed(const string& feed_url, const HttpClient& http_client); // This fetches and parses the given feed's rel="next" link if it has one. // The HttpClient is expected to be "logged in" as appropriate for the URL. static kmldom::AtomFeedPtr GetNextFeed(const kmldom::AtomFeedPtr& feed, const HttpClient& http_client); // If the <atom:entry> has a <gd:resourceId> true is returned. Also return // the value of this element if a resource_id string is supplied. // Note: the gd:resourceId is a Google Data API extension to Atom. static bool GetGdResourceId(const kmldom::AtomEntryPtr& entry, string* resource_id); }; } // end namespace kmlconvenience #endif // KML_CONVENIENCE_ATOM_UTIL_H �����������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/convenience.cc�����������������������������������������������������0000664�0000000�0000000�00000026357�12636032571�0021460�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/convenience/convenience.h" #include "boost/scoped_ptr.hpp" #include "kml/base/attributes.h" #include "kml/base/date_time.h" #include "kml/base/math_util.h" #include "kml/engine/bbox.h" #include "kml/engine/clone.h" #include "kml/engine/feature_view.h" #include "kml/engine/location_util.h" using kmlbase::Attributes; using kmlbase::DateTime; using kmlbase::Vec3; using kmldom::AbstractViewPtr; using kmldom::CameraPtr; using kmldom::ChangePtr; using kmldom::CoordinatesPtr; using kmldom::DataPtr; using kmldom::ExtendedDataPtr; using kmldom::FeaturePtr; using kmldom::GxAnimatedUpdatePtr; using kmldom::GxFlyToPtr; using kmldom::GxWaitPtr; using kmldom::KmlFactory; using kmldom::LatLonAltBoxPtr; using kmldom::LodPtr; using kmldom::LookAtPtr; using kmldom::OuterBoundaryIsPtr; using kmldom::PlacemarkPtr; using kmldom::PointPtr; using kmldom::PolygonPtr; using kmldom::RegionPtr; using kmldom::TimeStampPtr; using kmldom::UpdatePtr; namespace kmlconvenience { void AddExtendedDataValue(const string& name, const string& value, FeaturePtr feature) { if (!feature) { return; } if (!feature->has_extendeddata()) { feature->set_extendeddata(KmlFactory::GetFactory()->CreateExtendedData()); } feature->get_extendeddata()->add_data(CreateDataNameValue(name, value)); } kmldom::GxAnimatedUpdatePtr CreateAnimatedUpdateChangePoint( const string& target_id, const kmlbase::Vec3& vec3, double duration) { KmlFactory* factory = KmlFactory::GetFactory(); PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_targetid(target_id); placemark->set_geometry(CreatePointFromVec3(vec3)); ChangePtr change = factory->CreateChange(); change->add_object(placemark); UpdatePtr update = factory->CreateUpdate(); update->add_updateoperation(change); update->set_targethref(""); GxAnimatedUpdatePtr animated_update = factory->CreateGxAnimatedUpdate(); animated_update->set_update(update); animated_update->set_gx_duration(duration); return animated_update; } PlacemarkPtr CreateBasicPolygonPlacemark( const kmldom::LinearRingPtr& lr) { KmlFactory* factory = KmlFactory::GetFactory(); OuterBoundaryIsPtr obi = factory->CreateOuterBoundaryIs(); obi->set_linearring(lr); PolygonPtr poly = factory->CreatePolygon(); poly->set_outerboundaryis(obi); PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_geometry(poly); return placemark; } CameraPtr CreateCamera(double latitude, double longitude, double altitude, double heading, double tilt, double roll, int altitudemode) { CameraPtr camera = KmlFactory::GetFactory()->CreateCamera(); camera->set_longitude(longitude); camera->set_latitude(latitude); camera->set_altitude(altitude); camera->set_heading(heading); camera->set_tilt(tilt); camera->set_roll(roll); camera->set_altitudemode(altitudemode); return camera; } CoordinatesPtr CreateCoordinatesCircle(double lat, double lng, double radius, size_t segments) { CoordinatesPtr coords = KmlFactory::GetFactory()->CreateCoordinates(); for (size_t i = 0; i < segments; ++i) { coords->add_vec3(kmlbase::LatLngOnRadialFromPoint( lat, lng, radius, static_cast<double>(i))); } return coords; } DataPtr CreateDataNameValue(const string& name, const string& value) { DataPtr data = KmlFactory::GetFactory()->CreateData(); data->set_name(name); data->set_value(value); return data; } LookAtPtr CreateLookAt(double latitude, double longitude, double altitude, double heading, double tilt, double range, int altitudemode) { LookAtPtr lookat = KmlFactory::GetFactory()->CreateLookAt(); lookat->set_longitude(longitude); lookat->set_latitude(latitude); lookat->set_altitude(altitude); lookat->set_heading(heading); lookat->set_tilt(tilt); lookat->set_range(range); lookat->set_altitudemode(altitudemode); return lookat; } PointPtr CreatePointFromLatLonAtts(const char** atts) { boost::scoped_ptr<Attributes> attributes(Attributes::Create(atts)); if (attributes.get()) { double latitude; double longitude; if (attributes->GetValue("lat", &latitude) && attributes->GetValue("lon", &longitude)) { return CreatePointLatLon(latitude, longitude); } } return NULL; } PointPtr CreatePointFromVec3(const Vec3& vec) { KmlFactory* factory = KmlFactory::GetFactory(); CoordinatesPtr coordinates = factory->CreateCoordinates(); if (vec.has_altitude()) { coordinates->add_latlngalt(vec.get_latitude(), vec.get_longitude(), vec.get_altitude()); } else { coordinates->add_latlng(vec.get_latitude(), vec.get_longitude()); } PointPtr point = factory->CreatePoint(); point->set_coordinates(coordinates); return point; } PointPtr CreatePointLatLon(double lat, double lon) { KmlFactory* factory = KmlFactory::GetFactory(); CoordinatesPtr coordinates = factory->CreateCoordinates(); coordinates->add_latlng(lat, lon); PointPtr point = factory->CreatePoint(); point->set_coordinates(coordinates); return point; } // This is a convenience function to create a Point Placemark. PlacemarkPtr CreatePointPlacemark(const string& name, double lat, double lon) { PlacemarkPtr placemark = KmlFactory::GetFactory()->CreatePlacemark(); placemark->set_name(name); placemark->set_geometry(CreatePointLatLon(lat, lon)); return placemark; } // This creates a Region at the given bounding box with the given Lod range. RegionPtr CreateRegion2d(double north, double south, double east, double west, double minlodpixels, double maxlodpixels) { KmlFactory* factory = KmlFactory::GetFactory(); RegionPtr region = factory->CreateRegion(); LatLonAltBoxPtr latlonaltbox = factory->CreateLatLonAltBox(); latlonaltbox->set_north(north); latlonaltbox->set_south(south); latlonaltbox->set_east(east); latlonaltbox->set_west(west); LodPtr lod = factory->CreateLod(); lod->set_minlodpixels(minlodpixels); lod->set_maxlodpixels(maxlodpixels); region->set_latlonaltbox(latlonaltbox); region->set_lod(lod); return region; } GxFlyToPtr CreateFlyTo(const AbstractViewPtr& abstractview, double duration) { GxFlyToPtr flyto = KmlFactory::GetFactory()->CreateGxFlyTo(); flyto->set_gx_duration(duration); AbstractViewPtr av = kmldom::AsAbstractView(kmlengine::Clone(abstractview)); flyto->set_abstractview(av); return flyto; } GxFlyToPtr CreateFlyToForFeature(const FeaturePtr& feature, double duration) { if (!feature) { return NULL; } if (feature->has_abstractview()) { return CreateFlyTo(feature->get_abstractview(), duration); } LookAtPtr lookat = kmlengine::ComputeFeatureLookAt(feature); if (!lookat) { return NULL; } return CreateFlyTo(lookat, duration); } GxWaitPtr CreateWait(double duration) { GxWaitPtr wait = KmlFactory::GetFactory()->CreateGxWait(); wait->set_gx_duration(duration); return wait; } bool GetExtendedDataValue(const FeaturePtr& feature, const string& name, string* value) { if (value && feature->has_extendeddata()) { ExtendedDataPtr extendeddata = feature->get_extendeddata(); for (size_t i = 0; i < extendeddata->get_data_array_size(); ++i) { DataPtr data = extendeddata->get_data_array_at(i); if (data->has_name() && name == data->get_name()) { *value = data->get_value(); return true; } } } return false; } void SetExtendedDataValue(const string& name, const string& value, FeaturePtr feature) { if (!feature) { return; } feature->set_extendeddata(KmlFactory::GetFactory()->CreateExtendedData()); AddExtendedDataValue(name, value, feature); } PlacemarkPtr CreatePointPlacemarkWithTimeStamp(const PointPtr& point, const DateTime& date_time, const char* style_id) { KmlFactory* kml_factory = KmlFactory::GetFactory(); PlacemarkPtr placemark = kml_factory->CreatePlacemark(); // <name> placemark->set_name(date_time.GetXsdTime()); // <styleUrl> placemark->set_styleurl(string("#") + style_id); // <TimeStamp> TimeStampPtr time_stamp = kml_factory->CreateTimeStamp(); time_stamp->set_when(date_time.GetXsdDateTime()); placemark->set_timeprimitive(time_stamp); // <ExtendedData> AddExtendedDataValue("date", date_time.GetXsdDate(), placemark); AddExtendedDataValue("time", date_time.GetXsdTime(), placemark); // <Point> placemark->set_geometry(point); return placemark; } void SimplifyCoordinates(const CoordinatesPtr& src, CoordinatesPtr dest, double merge_tolerance) { if (!src || !dest) { return; } // Remember the last coordinate. Vec3 last_vec; for (size_t i = 0; i < src->get_coordinates_array_size(); ++i) { // If this is the first tuple, just append it to the result vec. if (i == 0) { dest->add_vec3(src->get_coordinates_array_at(i)); last_vec = src->get_coordinates_array_at(i); continue; } // If the distance between the position of the last point and the current // point is greater than merge_tolerance, do not append it to the vector. if (merge_tolerance > 0.0) { Vec3 this_vec = src->get_coordinates_array_at(i); if (merge_tolerance >= kmlbase::DistanceBetweenPoints3d( last_vec.get_latitude(), last_vec.get_longitude(), last_vec.get_altitude(), this_vec.get_latitude(), this_vec.get_longitude(), this_vec.get_altitude())) { last_vec = src->get_coordinates_array_at(i); continue; } } last_vec = src->get_coordinates_array_at(i); dest->add_vec3(src->get_coordinates_array_at(i)); } } } // end namespace kmlconvenience ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/convenience.h������������������������������������������������������0000664�0000000�0000000�00000017147�12636032571�0021317�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations of some KML convenience functions. #ifndef KML_CONVENIENCE_CONVENIENCE_H__ #define KML_CONVENIENCE_CONVENIENCE_H__ #include <vector> #include "kml/base/vec3.h" #include "kml/dom.h" namespace kmlbase { class DateTime; } namespace kmlconvenience { // NOTE: this collection of convenience routines is expected to grow. // NOTE: for now these are all in one file in alphabetical order. // This creates a Data element with the given name and value and appends // this to the Feature's ExtendedData. An ExtendedData is created in the // Feature if one does not already exist. void AddExtendedDataValue(const string& name, const string& value, kmldom::FeaturePtr feature); // Creates a <gx:AnimatedUpdate> with a <Change> to a Point Placemark of // the specified target_id and coordinates as specified by vec3. kmldom::GxAnimatedUpdatePtr CreateAnimatedUpdateChangePoint( const string& target_id, const kmlbase::Vec3& vec3, double duration); // Creates a simple Polygon Placemark from a LinearRing. kmldom::PlacemarkPtr CreateBasicPolygonPlacemark( const kmldom::LinearRingPtr& lr); // Creates a <Camera> element with the specified fields. kmldom::CameraPtr CreateCamera(double latitude, double longitude, double altitude, double heading, double tilt, double roll, int altitudemode); // Creates a <coordinates> element filled with the lng, lat[, alt] tuples // describing a great circle of radius around a point lat, lng. The // antemeridian is not considered here. kmldom::CoordinatesPtr CreateCoordinatesCircle(double lat, double lng, double radius, size_t segments); // This creates a Data element with the name and value specified: // <Data name="NAME><value>VALUE</value></Data> kmldom::DataPtr CreateDataNameValue(const string& name, const string& value); // Creates a <LookAt> element from the specified fields. kmldom::LookAtPtr CreateLookAt(double latitude, double longitude, double altitude, double heading, double tilt, double range, int altitudemode); // If the atts contains both a double "lat" and double "lon" then create // a KML <Point> with <coordinates> set from these attributes. kmldom::PointPtr CreatePointFromLatLonAtts(const char** atts); // Create a <Point> with <coordinates> from the given Vec3. kmldom::PointPtr CreatePointFromVec3(const kmlbase::Vec3& vec); // This creates a Point coordinates set as indicated. kmldom::PointPtr CreatePointLatLon(double lat, double lon); // This is a convenience function to create a Point Placemark. kmldom::PlacemarkPtr CreatePointPlacemark(const string& name, double lat, double lon); // Create a <Placemark> with the given <Point>, DateTime and <styleUrl>. // A <TimeStamp> is created from the DateTime and <ExtendedData> fields are // created for date and time. kmldom::PlacemarkPtr CreatePointPlacemarkWithTimeStamp( const kmldom::PointPtr& point, const kmlbase::DateTime& date_time, const char* style_id); // Create a Region with LatLonAltBox set to the given bounds and Lod // set to the given values. This is a "2D" Region because no altitude // mode is set which defaults the LatLonAltBox to clampToGround. kmldom::RegionPtr CreateRegion2d(double north, double south, double east, double west, double minlodpixels, double maxlodpixels); // Creates a <gx:FlyTo> element which has the specified <gx:duration> and the // specified AbstractView. kmldom::GxFlyToPtr CreateFlyTo(const kmldom::AbstractViewPtr& abstractview, double duration); // Creates a <gx:FlyTo> element which has the specified <gx:duration> and a // an AbstractView. If the feature has a existing AbstractView it is used, // otherwise a <LookAt> is computed from the spatial extents of the feature. The // LookAt's altitude, heading and tilt are set to 0.0 and the altitudeMode is // set to relativeToGroud. Returns NULL if the feature has no specified // AbstractView and none can be computed. // See kmlengine::ComputeFeatureLookAt for details of how the LookAt is // generated. kmldom::GxFlyToPtr CreateFlyToForFeature(const kmldom::FeaturePtr& feature, double duration); // Creates a <gx:Wait> with a <gx:duration> of the specified value. kmldom::GxWaitPtr CreateWait(double duration); // This gets the value of the given name from the ExtendedData/Data as // described above. If there is no ExtendedData or no Data element with // the given name false is returned. bool GetExtendedDataValue(const kmldom::FeaturePtr& feature, const string& name, string* value); // This sets the ExtendedData element of the feature to hold the given name // value as a Data element as described above. NOTE: Any previous ExtendedData // is delete from this feature. void SetExtendedDataValue(const string& name, const string& value, kmldom::FeaturePtr feature); // Returns a simplification of coordinates elements. merge_tolerance specifies // a distance (in meters) within which adjacent coordinates tuples will be // merged. If set to 0, no merge will occur. // For example, assume we have coordinates of: // (0,0,0 0,0,0 2,2,2 5,5,5 6,6,6 9,9,9) // where the first two coordinates elements are coincident. // If SimplifyCoordinates is called with a merge_tolerance of 1.0, the // coincident points will be elided and the returned coordinates will be: // (0,0,0 2,2,2 5,5,5 6,6,6 9,9,9) // Since a 1 x 1 degree square near the equator has a diagonal of around // 157,147m, if SimplifyCoordinates is called with a merge // tolerance of 160000 the points at (5,5,5 6,6,6) will also be elided and the // returned coordinates will be: // (0,0,0 2,2,2 5,5,5 9,9,9) void SimplifyCoordinates(const kmldom::CoordinatesPtr& src, kmldom::CoordinatesPtr dest, double merge_tolerance); } // end namespace kmlconvenience #endif // KML_CONVENIENCE_CONVENIENCE_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/csv_file.cc��������������������������������������������������������0000664�0000000�0000000�00000005650�12636032571�0020747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the Csv class for parsing CSV // files and generating Point Placemark KML. #include "kml/convenience/csv_file.h" #include <fstream> #include <iostream> #include <vector> #include "kml/base/string_util.h" #include "kml/dom.h" #include "kml/engine.h" #include "kml/convenience/convenience.h" #include "kml/convenience/feature_list.h" namespace kmlconvenience { using kmldom::FeaturePtr; using kmldom::KmlFactory; using kmldom::PlacemarkPtr; using kmlconvenience::FeatureList; using std::vector; void CsvFile::ParseCsvLine(const string& csv_line) { vector<string> csv_parts; kmlbase::SplitStringUsing(csv_line, "|", &csv_parts); if (csv_parts.size() < 5) { return; } PlacemarkPtr placemark = kmlconvenience::CreatePointPlacemark( csv_parts[3], strtod(csv_parts[1].c_str(), NULL), strtod(csv_parts[2].c_str(), NULL)); placemark->set_description(csv_parts[4]); if (csv_parts.size() > 5) { placemark->set_styleurl(csv_parts[5]); } kmlconvenience::SetFeatureScore(csv_parts[0], placemark); feature_list_->PushBack(placemark); } // TODO: create a File line getter in kml/base/file.cc void CsvFile::ParseCsvFile(const char* filename) { std::ifstream csv_file; csv_file.open(filename); while (csv_file.good()) { string csv_line; getline(csv_file, csv_line); if (csv_line.empty()) { return; } ParseCsvLine(csv_line); } } } // end namespace kmlconvenience ����������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/csv_file.h���������������������������������������������������������0000664�0000000�0000000�00000004755�12636032571�0020616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the Csv class for parsing CSV // files and generating Point Placemark KML. // NOTE: The CsvFile class is deprecated. Use CsvParser in new code. #include <vector> #include "kml/base/util.h" namespace kmlconvenience { class FeatureList; // This class converts a CSV file into a FeatureList. // Usage: // FeatureList feature_list; // CsvFile csv_file(&feature_list); // csv_file.ParseCsvFile("input.csv"); // A FeatureList can be used with the FeatureListRegionHandler or directly // with a KML Container. See feature_list.h for more information. // NOTE: This class is deprecated. Use CsvParser in new code. class CsvFile { public: CsvFile(kmlconvenience::FeatureList* feature_list) : feature_list_(feature_list) {} void ParseCsvLine(const string& csv_line); // Create a Point Placemark for each line of the given CSV file. void ParseCsvFile(const char* filename); private: kmlconvenience::FeatureList* feature_list_; }; } // end namespace kmlconvenience �������������������libkml-1.3.0/src/kml/convenience/csv_parser.cc������������������������������������������������������0000664�0000000�0000000�00000014357�12636032571�0021330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2010, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the CsvParser class. #include "kml/convenience/csv_parser.h" #include <vector> #include "boost/scoped_ptr.hpp" #include "kml/base/csv_splitter.h" #include "kml/base/string_util.h" #include "kml/convenience/convenience.h" #include "kml/dom.h" #include "kml/engine.h" namespace kmlconvenience { static const size_t npos = -1; static const char* kDefaultStyleUrlBase = "style.kml"; // These basenames are prepended to help ensure the // id is a valid xml id. Ids in the wild are often // numbers and while digits are valid in an xml id // a leading digit is not. static const char* kFeatureIdBase = "feature-"; static const char* kStyleIdBase = "style-"; // static bool CsvParser::ParseCsv(kmlbase::CsvSplitter* csv_splitter, CsvParserHandler* csv_parser_handler) { if (!csv_splitter || !csv_parser_handler) { return false; } kmlbase::StringVector schema; if (!csv_splitter->SplitCurrentLine(&schema)) { return false; } boost::scoped_ptr<CsvParser> csv_parser( new CsvParser(csv_splitter, csv_parser_handler)); CsvParserStatus schema_status = csv_parser->SetSchema(schema); // Send the schema parsing status out just like any other line. if (schema_status != CSV_PARSER_STATUS_OK) { csv_parser_handler->HandleLine(1, schema_status, NULL); return false; } return csv_parser->ParseCsvData(); } // private CsvParser::CsvParser(kmlbase::CsvSplitter* csv_splitter, CsvParserHandler* csv_parser_handler) : csv_splitter_(csv_splitter) , csv_parser_handler_(csv_parser_handler) , schema_size_(0) , name_col_(npos) , description_col_(npos) , lat_col_(npos) , lon_col_(npos) , feature_id_(npos) , style_id_(npos) , style_url_base_(kDefaultStyleUrlBase) , kml_factory_(0) { } // private CsvParserStatus CsvParser::SetSchema(const kmlbase::StringVector& csv_schema) { if (csv_schema.empty()) { return CSV_PARSER_STATUS_BLANK_LINE; } schema_size_ = csv_schema.size(); for (size_t i = 0; i < schema_size_; ++i) { const string& this_col = csv_schema[i]; if (kmlbase::StringCaseEqual(this_col, "name")) { name_col_ = i; } else if (kmlbase::StringCaseEqual(this_col, "description")) { description_col_ = i; } else if (kmlbase::StringCaseEqual(this_col, "latitude")) { lat_col_ = i; } else if (kmlbase::StringCaseEqual(this_col, "longitude")) { lon_col_ = i; } else if (kmlbase::StringCaseEqual(this_col, "feature-id")) { feature_id_ = i; } else if (kmlbase::StringCaseEqual(this_col, "style-id")) { style_id_ = i; } else { csv_schema_[i] = this_col; } } if (lat_col_ == npos || lon_col_ == npos) { return CSV_PARSER_STATUS_NO_LAT_LON; } return CSV_PARSER_STATUS_OK; } CsvParserStatus CsvParser::CsvLineToPlacemark( kmlbase::StringVector& csv_line, kmldom::PlacemarkPtr placemark) const { if (csv_line.size() > 0 && csv_line[0].size() > 0 && csv_line[0][0] == '#') { return CSV_PARSER_STATUS_COMMENT; } if (csv_line.size() != schema_size_) { return CSV_PARSER_STATUS_INVALID_DATA; } // Note that StringToDouble returns false on non-numeric strings. double lat; double lon; if (lat_col_ != npos && lon_col_ != npos && csv_line.size() > lat_col_ && csv_line.size() > lon_col_ && kmlbase::StringToDouble(csv_line[lat_col_], &lat) && kmlbase::StringToDouble(csv_line[lon_col_], &lon)) { placemark->set_geometry(CreatePointLatLon(lat, lon)); } else { return CSV_PARSER_STATUS_BAD_LAT_LON; } if (name_col_ != npos) { placemark->set_name(csv_line[name_col_]); } if (description_col_ != npos) { placemark->set_description(csv_line[description_col_]); } if (feature_id_ != npos && !csv_line[feature_id_].empty()) { placemark->set_id(kFeatureIdBase + csv_line[feature_id_]); } if (style_id_ != npos && !csv_line[style_id_].empty()) { placemark->set_styleurl(style_url_base_ + "#" + kStyleIdBase + csv_line[style_id_]); } // Walk the actual line cols to handle non-strict mode. for (size_t i = 0; i < csv_line.size(); ++i) { CsvSchema::const_iterator iter = csv_schema_.find(i); if (iter != csv_schema_.end()) { AddExtendedDataValue(iter->second, csv_line[iter->first], placemark); } } return CSV_PARSER_STATUS_OK; } bool CsvParser::ParseCsvData() { int line_number = 2; // Schema line is 1, first data line is 2. kmlbase::StringVector cols; while (csv_splitter_->SplitCurrentLine(&cols)) { kmldom::PlacemarkPtr p = kml_factory_->CreatePlacemark(); CsvParserStatus status = CsvLineToPlacemark(cols, p); if (!csv_parser_handler_->HandleLine(line_number, status, p)) { return false; } ++line_number; cols.clear(); } return true; } } // end kmlconvenience ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/csv_parser.h�������������������������������������������������������0000664�0000000�0000000�00000014127�12636032571�0021165�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2010, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the CsvParser class. #ifndef KML_CONVENIENCE_CSV_PARSER_H_ #define KML_CONVENIENCE_CSV_PARSER_H_ #include "kml/base/string_util.h" #include "kml/dom.h" namespace kmlbase { class CsvSplitter; } namespace kmlconvenience { enum CsvParserStatus { CSV_PARSER_STATUS_OK = 0, CSV_PARSER_STATUS_BLANK_LINE, CSV_PARSER_STATUS_NO_LAT_LON, CSV_PARSER_STATUS_BAD_LAT_LON, CSV_PARSER_STATUS_INVALID_DATA, CSV_PARSER_STATUS_COMMENT }; // This class is used as the output and error reporting mechanism for the // CsvParser. Application code should subclass this and implement HandleLine. // This "default" implementation acts as a data sink. class CsvParserHandler { public: virtual ~CsvParserHandler() {} // This method is called for each line in the CSV data. The line is the line // number of the CSV. The status indicates the success of creating // a KML Point Placemark from the CSV line. A Placemark is always created // but it may be devoid of children depending on the strictness state of // CsvParser. In strict mode CSV_PARSER_STATUS_OK indicates the Placemark // has at least a Point with lat and lon. The caller takes ownership of // the placemark. The return value indicates if CSV parsing is to continue // to the next line in the file. Returning false immediately halts all // further processing of the CsvParse. virtual bool HandleLine(int line, CsvParserStatus status, kmldom::PlacemarkPtr placemark) { return true; // Always continue to the next line. } }; // This class converts CSV data to KML. Overall usage: // CsvSplitter csv_splitter(csv_data); // class YourCsvParserHandler : public CsvParserHandler { // public: // virtual bool HandleLine(int line, CsvParserStatus status, // kmldom::PlacemarkPtr placemark) { // ...inspect status and/or save/process placemark... // return true; // Or false to stop CSV parsing. // } // }; // YourCsvParserHandler your_csv_parser_handler; // CsvParser::ParseCsv(&csv_splitter, &your_csv_parser_handler); class CsvParser { public: // This method uses CsvSplitter to split each line which CsvParser converts // to KML which is handed to the CsvParserHandler. static bool ParseCsv(kmlbase::CsvSplitter* csv_splitter, CsvParserHandler* csv_parser_handler); // All of the below should really be private. // Use the static ParseCsv method. CsvParser(kmlbase::CsvSplitter* csv_splitter, CsvParserHandler* csv_parser_handler); // This gets the internal CSV schema. typedef std::map<int, string> CsvSchema; const CsvSchema& GetSchema() const { return csv_schema_; } // This internal method sets the schema for subsequent lines of CSV data. // This sets the mappings from column to field. Here is how the data for // each column is used. VAL is substituted for the value in the cell: // name - <name>VAL</name> // feature-id - <Placemark id="feature-VAL"> // description - <description>VAL</description> // style-id - <styleUrl>style.kml#style-VAL</styleUrl> // latitude - <Point><coordinates>xxx,VAL</coordinates></Point> // longitude - <Point><coordinates>VAL,xxx</coordinates></Point> // other - <Data name="other"><value>VAL</value></Data> // # - comment causes CSV_PARSER_STATUS_COMMENT for that line // The "latitude" and "longitude" columns specify which columns are used // for the latitude and longitude of the <Point>. All other columns specify // <ExtendedData>/<Data> names. The csv_schema must contain at least // "latitude" and "longitude". Any schema term may be mixed case. CsvParserStatus SetSchema(const kmlbase::StringVector& csv_schema); // This internal method sets the fields of the given placemark from the // csv_line as per the state of the csv schema. The csv_line size must // match the CSV schema. CsvParserStatus CsvLineToPlacemark(kmlbase::StringVector& csv_line, kmldom::PlacemarkPtr placemark) const; // This internal method iterates over each line using the CsvSplitter and // and passes the created KML to the CsvParserHandler. bool ParseCsvData(); private: kmlbase::CsvSplitter* csv_splitter_; CsvParserHandler* csv_parser_handler_; size_t schema_size_; size_t name_col_; size_t description_col_; size_t lat_col_; size_t lon_col_; size_t feature_id_; size_t style_id_; string style_url_base_; kmldom::KmlFactory* kml_factory_; CsvSchema csv_schema_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(CsvParser); }; } // end namespace kmlconvenience #endif // KML_CONVENIENCE_CSV_PARSER_H_ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/element_counter.h��������������������������������������������������0000664�0000000�0000000�00000004770�12636032571�0022211�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_CONVENIENCE_ELEMENT_COUNTER_H__ #define KML_CONVENIENCE_ELEMENT_COUNTER_H__ #include <map> #include "kml/dom.h" namespace kmlconvenience { // This map is used to hold the occurrence count for each element. typedef std::map<kmldom::KmlDomType, int> ElementCountMap; // This ParserObserver uses the NewElement() method to count the number of // ocurrences of each element. class ElementCounter : public kmldom::ParserObserver { public: ElementCounter(ElementCountMap* element_count_map) : element_count_map_(*element_count_map) { } // ParserObserver::NewElement() virtual bool NewElement(const kmldom::ElementPtr& element) { if (element_count_map_.find(element->Type()) == element_count_map_.end()) { element_count_map_[element->Type()] = 1; } else { element_count_map_[element->Type()] += 1; } return true; // Always return true to keep parsing. } private: ElementCountMap& element_count_map_; }; } // end namespace kmlconvenience #endif // KML_CONVENIENCE_ELEMENT_COUNTER_H__ ��������libkml-1.3.0/src/kml/convenience/feature_list.cc����������������������������������������������������0000664�0000000�0000000�00000012641�12636032571�0021641�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the FeatureList class. // While STL list is not directly exposed the name FeatureList is as such // to suggest list-like performance. #include "kml/convenience/feature_list.h" #include <stdlib.h> #include <algorithm> #include <fstream> #include <list> #include <sstream> #include "kml/dom.h" #include "kml/convenience/convenience.h" #include "kml/engine.h" using kmldom::ContainerPtr; using kmldom::DataPtr; using kmldom::ExtendedDataPtr; using kmldom::FeaturePtr; using kmldom::LatLonAltBoxPtr; using kmldom::KmlFactory; using kmldom::RegionPtr; using kmlengine::Bbox; namespace kmlconvenience { static const char* kFeatureScoreName = "kml.FeatureScore"; int GetFeatureScore(FeaturePtr feature) { string score; if (GetExtendedDataValue(feature, kFeatureScoreName, &score)) { return atoi(score.c_str()); } return 0; } void SetFeatureScore(const string& score, FeaturePtr feature) { SetExtendedDataValue(kFeatureScoreName, score, feature); } void FeatureList::PushBack(const FeaturePtr& feature) { if (feature) { feature_list_.push_back(feature); } } size_t FeatureList::Save(ContainerPtr container) const { size_t count = 0; feature_list_t::const_iterator iter; for (iter = feature_list_.begin(); iter != feature_list_.end(); ++iter) { ++count; container->add_feature(*iter); } return count; } size_t FeatureList::BboxSplit(const Bbox& bbox, size_t max, FeatureList* output) { if (max == 0) { // "0" has the special meaning of "all". max = feature_list_.size(); } size_t count = 0; // See Effective STL, by Scott Meyers, Item 9, page 46. A while loop is used // instead of for to make explicit the advancement of iter within the loop. // If the item is erased then list.erase() returns the advanced iter, // else we advance it oursevles. feature_list_t::iterator iter = feature_list_.begin(); while (iter != feature_list_.end()) { double lat, lon; if (kmlengine::GetFeatureLatLon(*iter, &lat, &lon) && bbox.Contains(lat,lon)) { if (output) { output->PushBack(*iter); } iter = feature_list_.erase(iter); // list.erase() advances to next. ++count; if (--max == 0) { // max guaranteed to be > 0. break; } } else { ++iter; // Not erasing so we advance to next explicitely. } } return count; } size_t FeatureList::RegionSplit(const RegionPtr& region, size_t max, FeatureList* output) { if (region && region->has_latlonaltbox()) { LatLonAltBoxPtr llab = region->get_latlonaltbox(); Bbox bbox(llab->get_north(), llab->get_south(), llab->get_east(), llab->get_west()); return BboxSplit(bbox, max, output); } return 0; } // This function object is used by STL sort() to order Features // by score. Results in sort of highest score first. struct CompareFeatures : public std::binary_function<const kmldom::FeaturePtr&, const kmldom::FeaturePtr&, bool> { bool operator()(const kmldom::FeaturePtr& a, const kmldom::FeaturePtr& b) { return GetFeatureScore(a) > GetFeatureScore(b); } }; // Sort the internal list of features based on score. void FeatureList::Sort() { // See Effective STL, by Scott Meyers, Item 44, page 192. feature_list_.sort(CompareFeatures()); } // Return the number of features held in the internal list. size_t FeatureList::Size() const { return feature_list_.size(); } // Expand the bounds of the given bbox based on the features in the list. void FeatureList::ComputeBoundingBox(Bbox* bbox) const { if (!bbox) { return; } feature_list_t::const_iterator iter; for (iter = feature_list_.begin(); iter != feature_list_.end(); ++iter) { double lat, lon; if (kmlengine::GetFeatureLatLon(*iter, &lat, &lon)) { bbox->ExpandLatLon(lat, lon); } } } } // end namespace kmlconvenience �����������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/feature_list.h�����������������������������������������������������0000664�0000000�0000000�00000007772�12636032571�0021514�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the FeatureList class. #ifndef KML_CONVENIENCE_FEATURE_LIST_H__ #define KML_CONVENIENCE_FEATURE_LIST_H__ #include <list> #include "kml/dom.h" #include "kml/engine.h" namespace kmlconvenience { // This returns the value of the "Score" Data element as described above. // This uses GetExtendedDataValue(). int GetFeatureScore(kmldom::FeaturePtr feature); // This sets the value of the "Score" data element as described above. // This uses SetExtendedDataValue(). void SetFeatureScore(const string& score, kmldom::FeaturePtr feature); // STL list has constant time erase. typedef std::list<kmldom::FeaturePtr> feature_list_t; // This class provides an efficient data structure to gather, sort and // split Features by bounding box. Basic usage: // FeatureList feature_list; // for each feature: // SetFeatureScore(the_features_score, feature); // feature_list.PushBack(feature); // feature_list.Sort() // FeatureList features_in_some_bbox; // Bbox some_bbox; // feature_list.BboxSplit(bbox, how_many, &features_in_some_bbox); // FolderPtr folder; // features_in_some_bbox.Save(&folder); // folder->set_region(something-that-creates-a-Region-from-a-Bbox(some_bbox); class FeatureList { public: // Append the feature to the end of the list. void PushBack(const kmldom::FeaturePtr& feature); // Split up to max features which are within the bounding box out to the // given FeatureList. If a NULL FeatureList is supplied the features are // deleted from this FeatureList. NOTE: This is DESTRUCTIVE with respect // to this FeatureList. size_t BboxSplit(const kmlengine::Bbox& bbox, size_t max, FeatureList* output); // This calls BboxSplit based on a Bbox constructed from the LatLonAltBox // of the Region if it has one. NOTE: This is DESTRUCTIVE. size_t RegionSplit(const kmldom::RegionPtr& region, size_t max, FeatureList* output); // This sorts the features within this FeatureList based on score as set // in ExtendedData. void Sort(); // This returns the number of features within the FeatureList. size_t Size() const; // This expands the bounds of the given Bbox to enclose all features in // this FeatureList. void ComputeBoundingBox(kmlengine::Bbox* bbox) const; // This appends all features to the given container. Order is preserved. size_t Save(kmldom::ContainerPtr container) const; private: feature_list_t feature_list_; }; } // end namespace kmlconvenience #endif // KML_CONVENIENCE_FEATURE_LIST_H__ ������libkml-1.3.0/src/kml/convenience/google_doc_list.cc�������������������������������������������������0000664�0000000�0000000�00000006746�12636032571�0022320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the GoogleDocList class. #include "kml/convenience/google_doc_list.h" #include "kml/convenience/atom_util.h" #include "kml/convenience/http_client.h" namespace kmlconvenience { static const char* kServiceName = "writely"; static const char* kScope = "http://docs.google.com"; static const char* kDocListMetaFeedUri = "/feeds/default/private/full"; // static GoogleDocList* GoogleDocList::Create( HttpClient* http_client) { // The HttpClient must exist. if (!http_client) { return NULL; } GoogleDocList* gs = new GoogleDocList; http_client->AddHeader("GData-Version", "3.0"); gs->http_client_.reset(http_client); return gs; } // static const char* GoogleDocList::get_service_name() { return kServiceName; } // static const char* GoogleDocList::get_metafeed_uri() { return kDocListMetaFeedUri; } static string GetScope() { if (const char* scope = getenv("GOOGLE_DOC_LIST_SCOPE")) { return scope; } return kScope; } GoogleDocList::GoogleDocList() : scope_(GetScope()) { } // Keep POI of scoped_ptr<GoogleHttpClient>'s dtor out of .h GoogleDocList::~GoogleDocList() { } bool GoogleDocList::GetMetaFeedXml(string* atom_feed) const { return http_client_->SendRequest(HTTP_GET, scope_ + kDocListMetaFeedUri, NULL, NULL, atom_feed); } kmldom::AtomFeedPtr GoogleDocList::GetMetaFeed() const { string meta_feed; if (GetMetaFeedXml(&meta_feed)) { return kmldom::AsAtomFeed(kmldom::ParseAtom(meta_feed, NULL)); } return NULL; } bool GoogleDocList::UploadSpreadsheet(const string& spreadsheet, const string& mimetype, string* atom_entry) { StringPairVector request_headers; HttpClient::PushHeader("Content-Type", mimetype, &request_headers); return http_client_->SendRequest(HTTP_POST, scope_ + kDocListMetaFeedUri, &request_headers, &spreadsheet, atom_entry); } } // end namespace kmlconvenience ��������������������������libkml-1.3.0/src/kml/convenience/google_doc_list.h��������������������������������������������������0000664�0000000�0000000�00000010346�12636032571�0022151�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the GoogleDocList class. // Very distantly related to: // http://code.google.com/p/gdata-cpp-util/source/browse/trunk/gdata/client/doc_list_service.h // TODO: this interface and implemenation are experimental, expect additions // and changes. #ifndef KML_CONVENIENCE_GOOGLE_DOC_LIST_H_ #define KML_CONVENIENCE_GOOGLE_DOC_LIST_H_ #include <string> #include <vector> #include "boost/scoped_ptr.hpp" #include "kml/dom.h" namespace kmlconvenience { class HttpClient; // This class provides an API to the Google DocList API. // See the Google Documents List Data API v3.0 Protocol Guide. // http://code.google.com/apis/documents/docs/3.0/developers_guide_protocol.html // Overall usage: // class YourHttpClient : public kmlconvenience::HttpClient { // public: // virtual bool SendRequest(...) const { // ...your network I/O code goes here... // }; // }; // YourHttpClient* your_http_client = new YourHttpClient; // your_http_client->Login("user@gmail.com", "users-password"); // GoogleDocList* maps_data = GoogleDocList::Create(&your_http_client); // string spreadsheets_feed; // maps_data->GetMetaFeed(&spreadsheets_feed); // kmldom::ElementPtr root = kmldom::ParseAtom(spreadsheets_feed); // kmlconvenience::AtomUtil... for common Atom inspection. class GoogleDocList { public: // Create a GoogleDocList object. The HttpClient must already be logged // in. See http_client.h for more information about authentication. // The HttpClient is used for all network communication from inside this // GoogleDocList instance. The GoogleDocList object // takes ownership of the HttpClient and destroys it when // the GoogleDocList object is destroyed. static GoogleDocList* Create(HttpClient* http_client); ~GoogleDocList(); static const char* get_service_name(); static const char* get_metafeed_uri(); const string& get_scope() const { return scope_; } // This returns the "meta feed" for the authenticated user. The result is an // Atom <feed> containing an <entry> for each spreadsheet. See: // http://code.google.com/apis/spreadsheets/data/3.0/developers_guide_protocol.html#ListingDocList bool GetMetaFeedXml(string* atom_feed) const; // This calls GetMetaFeedXml and returns the parsed result. kmldom::AtomFeedPtr GetMetaFeed() const; // http://code.google.com/apis/documents/docs/3.0/developers_guide_protocol.html#UploadingDocs bool UploadSpreadsheet(const string& spreadsheet, const string& mimetype, string* atom_entry); private: // Use static Create(). GoogleDocList(); boost::scoped_ptr<HttpClient> http_client_; const string scope_; }; } // end namespace kmlconvenience #endif // KML_CONVENIENCE_GOOGLE_DOC_LIST_H_ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/google_maps_data.cc������������������������������������������������0000664�0000000�0000000�00000032634�12636032571�0022444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the GoogleMapsData class. #include "kml/convenience/google_maps_data.h" #include <vector> #include "kml/base/mimetypes.h" #include "kml/base/string_util.h" #include "kml/convenience/atom_util.h" #include "kml/convenience/http_client.h" #include "kml/dom.h" #include "kml/engine.h" namespace kmlconvenience { static const char* kServiceName = "local"; static const char* kScope = "http://maps.google.com"; static const char* kMetaFeedUri = "/maps/feeds/maps/default/full"; // static GoogleMapsData* GoogleMapsData::Create(HttpClient* http_client) { GoogleMapsData* mds = new GoogleMapsData; // The HttpClient must exist. if (http_client) { http_client->AddHeader("GData-Version", "2.0"); mds->http_client_.reset(http_client); return mds; } delete http_client; delete mds; return NULL; } static string GetScope() { if (const char* scope = getenv("GOOGLE_MAPS_DATA_SCOPE")) { return scope; } return kScope; } GoogleMapsData::GoogleMapsData() : scope_(GetScope()) { } // Keep POI of scoped_ptr<GoogleHttpClient>'s dtor out of .h GoogleMapsData::~GoogleMapsData() { } // static const char* GoogleMapsData::get_service_name() { return kServiceName; } // static const char* GoogleMapsData::get_metafeed_uri() { return kMetaFeedUri; } const string& GoogleMapsData::get_scope() const { return scope_; } HttpClient* GoogleMapsData::get_http_client() const { return http_client_.get(); } bool GoogleMapsData::GetMetaFeedXml(string* atom_feed) const { return http_client_->SendRequest(HTTP_GET, scope_ + kMetaFeedUri, NULL, NULL, atom_feed); } kmldom::AtomFeedPtr GoogleMapsData::GetMetaFeed() const { string meta_feed; if (GetMetaFeedXml(&meta_feed)) { return kmldom::AsAtomFeed(kmldom::ParseAtom(meta_feed, NULL)); } return NULL; } // static bool GoogleMapsData::GetFeatureFeedUri(const kmldom::AtomEntryPtr& map_entry, string* feature_feed_uri) { if (map_entry.get() && map_entry->has_content()) { const kmldom::AtomContentPtr& content = map_entry->get_content(); if (content->has_src()) { if (feature_feed_uri) { *feature_feed_uri = content->get_src(); } return true; } } return false; } bool GoogleMapsData::GetFeatureFeedXml(const string& feature_feed_uri, string* atom_feed) const { return http_client_->SendRequest(HTTP_GET, feature_feed_uri, NULL, NULL, atom_feed); } kmldom::AtomFeedPtr GoogleMapsData::GetFeatureFeedByUri( const string& feature_feed_uri) const { string feature_feed; if (GetFeatureFeedXml(feature_feed_uri, &feature_feed)) { return kmldom::AsAtomFeed(kmldom::ParseAtom(feature_feed, NULL)); } return NULL; } // static kmldom::FeaturePtr GoogleMapsData::GetEntryFeature( const kmldom::AtomEntryPtr& entry) { if (entry.get() && entry->has_content() && entry->get_content()->get_misplaced_elements_array_size() > 0) { return kmldom::AsFeature( entry->get_content()->get_misplaced_elements_array_at(0)); } return NULL; } // static int GoogleMapsData::GetMapKml(const kmldom::AtomFeedPtr& feature_feed, kmldom::ContainerPtr container) { if (!container.get() || !feature_feed.get()) { return -1; // Not much to do w/o both a feature feed and container. } int feature_count = 0; // TODO: set container's <atom:link> to the feature feed? // A Google My Maps Feature Feed has one KML Feature in each <entry>. for (size_t i = 0; i < feature_feed->get_entry_array_size(); ++i) { // TODO: set <atom:link> in the cloned Feature? const kmldom::FeaturePtr feature = GetEntryFeature(feature_feed->get_entry_array_at(i)); if (feature.get()) { ++feature_count; // Must clone because libkml strictly prevents any element from having // more than one parent element. container->add_feature(kmldom::AsFeature(kmlengine::Clone(feature))); } } return feature_count; } // static kmldom::DocumentPtr GoogleMapsData::CreateDocumentOfMapFeatures( const kmldom::AtomFeedPtr& feature_feed) { if (!feature_feed.get()) { return NULL; } kmldom::DocumentPtr document = kmldom::KmlFactory::GetFactory()->CreateDocument(); // TODO: set <atom:link> kmldom::AtomFeedPtr this_feed = feature_feed; do { GetMapKml(this_feed, document); } while ((this_feed = AtomUtil::GetNextFeed(this_feed, *http_client_))); return document; } bool GoogleMapsData::CreateMap(const string& title, const string& summary, string* entry) { // Create the <atom:entry> for the new map. kmlengine::KmlFilePtr kml_file = kmlengine::KmlFile::CreateFromImport( AtomUtil::CreateBasicEntry(title, summary)); if (!kml_file.get()) { return false; } // Get the Atom in XML form. string post_data; kml_file->SerializeToString(&post_data); // Indicate that we're posting XML. StringPairVector headers; HttpClient::PushHeader("Content-Type", kmlbase::kAtomMimeType, &headers); // Send off the HTTP POST and save the result to the user supplied buffer. return http_client_->SendRequest(HTTP_POST, scope_ + kMetaFeedUri, &headers, &post_data, entry); } bool GoogleMapsData::AddFeature(const string& feature_feed_post_uri, const kmldom::FeaturePtr& feature, string* feature_entry_xml) { // Create an <atom:content> to hold the Feature. kmldom::AtomContentPtr content = kmldom::KmlFactory::GetFactory()->CreateAtomContent(); content->AddElement(feature); content->set_type(kmlbase::kKmlMimeType); // Create an <atom:entry> to hold the <atom:content>. Set the <atom:title> // from the Feature's <name> and <atom:description> from the Feature's // <description>. kmldom::AtomEntryPtr entry = AtomUtil::CreateBasicEntry(feature->get_name(), feature->get_description()); entry->set_content(content); // Get the Atom in XML form. Use KmlFile's serializer to get proper xmlns // headers. kmlengine::KmlFilePtr kml_file = kmlengine::KmlFile::CreateFromImport(entry); string post_data; kml_file->SerializeToString(&post_data); // Indicate that we're posting XML. StringPairVector headers; HttpClient::PushHeader("Content-Type", kmlbase::kAtomMimeType, &headers); // Send off the HTTP POST and save the result to the user supplied buffer. return http_client_->SendRequest(HTTP_POST, feature_feed_post_uri, &headers, &post_data, feature_entry_xml); } int GoogleMapsData::PostPlacemarks(const kmldom::FeaturePtr& root_feature, const string& feature_feed_uri) { // Because GetElementsById looks only _below_ the root feature. if (kmldom::Type_Placemark == root_feature->Type()) { return AddFeature(feature_feed_uri, root_feature, NULL) ? 1 : 0; } // Dig out all <Placemarks>. Everything else is ignored, essentially // flattening Container hierarchies. kmlengine::ElementVector placemarks; kmlengine::GetElementsById(root_feature, kmldom::Type_Placemark, &placemarks); int placemark_count = 0; for (size_t i = 0; i < placemarks.size(); ++i) { const kmldom::PlacemarkPtr placemark = kmldom::AsPlacemark(placemarks[i]); if (placemark->has_geometry()) { string dummy; if (AddFeature(feature_feed_uri, placemark, &dummy)) { ++placemark_count; } } } return placemark_count; } // The Google Maps Data API Search Feeds section documents the search feed uri // as based on the feature feed uri. // See: http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html#Search. // A feature feed is of this form: // http://maps.google.com/maps/feeds/features/userID/mapID/full // A search feed is of this form: // http://maps.google.com/maps/feeds/features/userID/mapID/snippet?searchParameters // static bool GoogleMapsData::GetSearchFeedUri(const kmldom::AtomEntryPtr& map_entry, string* search_feed_uri) { string feature_feed_uri; if (!GetFeatureFeedUri(map_entry, &feature_feed_uri)) { return false; } size_t last_slash = feature_feed_uri.find_last_of('/'); if (last_slash == string::npos) { return false; } if (search_feed_uri) { *search_feed_uri = feature_feed_uri.substr(0, last_slash+1) + "snippet"; } return true; } // TODO: abstract the overall search URL and use UriParser bool GoogleMapsData::GetSearchFeed(const string& search_feed_uri, const string& search_parameters, string* atom_feed) { // TODO: enhance kmlbase::UriParser to provide support for // http://uriparser.sourceforge.net/doc/html/#querystrings const string uri = search_feed_uri + "?" + search_parameters; return http_client_->SendRequest(HTTP_GET, uri, NULL, NULL, atom_feed); } // static void GoogleMapsData::AppendBoxParameter(const double north, const double south, const double east, const double west, string* search_parameters) { if (!search_parameters) { return; } search_parameters->append("box=" + kmlbase::ToString(west) + "," + kmlbase::ToString(south) + "," + kmlbase::ToString(east) + "," + kmlbase::ToString(north)); } // static void GoogleMapsData::AppendBoxParameterFromBbox(const kmlengine::Bbox& bbox, string* search_parameters) { AppendBoxParameter(bbox.get_north(), bbox.get_south(), bbox.get_east(), bbox.get_west(), search_parameters); } kmldom::AtomFeedPtr GoogleMapsData::SearchMapByBbox( const kmldom::AtomEntryPtr& map_entry, const kmlengine::Bbox& bbox) { string search_feed_uri; if (!GetSearchFeedUri(map_entry, &search_feed_uri)) { return NULL; } string search_parameters; AppendBoxParameterFromBbox(bbox, &search_parameters); string atom_feed; if (!GetSearchFeed(search_feed_uri, search_parameters, &atom_feed)) { return NULL; } return kmldom::AsAtomFeed(kmldom::ParseAtom(atom_feed, NULL)); } kmldom::AtomEntryPtr GoogleMapsData::PostMedia(const string& slug, const string& content_type, const string& data, string* errors) { kmlconvenience::StringPairVector headers; kmlconvenience::HttpClient::PushHeader("Content-Type", content_type, &headers); kmlconvenience::HttpClient::PushHeader("Slug", slug, &headers); string map_entry_xml; if (!http_client_->SendRequest(kmlconvenience::HTTP_POST, scope_ + kMetaFeedUri, &headers, &data, &map_entry_xml)) { return NULL; } if (errors) { *errors = map_entry_xml; } return kmldom::AsAtomEntry(kmldom::ParseAtom(map_entry_xml, NULL)); } kmldom::AtomEntryPtr GoogleMapsData::PostCsv(const string& title, const string& csv_data, string* errors) { return PostMedia(title, kmlbase::kCsvMimeType, csv_data, errors); } kmldom::AtomEntryPtr GoogleMapsData::PostKml(const string& title, const string& kml_data) { return PostMedia(title, kmlbase::kKmlMimeType, kml_data, NULL); } // static bool GoogleMapsData::GetKmlUri(const kmldom::AtomEntryPtr& map_entry, string* kml_uri) { string alt; if (!map_entry || !kmlconvenience::AtomUtil::FindRelUrl(*map_entry, "alternate", &alt)) { return false; } if (kml_uri) { *kml_uri = alt + "&output=kml"; } return true; } } // end namespace kmlconvenience ����������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/google_maps_data.h�������������������������������������������������0000664�0000000�0000000�00000025342�12636032571�0022304�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the GoogleMapsData class. // Very distantly related to: // http://code.google.com/p/gdata-cpp-util/source/browse/trunk/gdata/client/ // doc_list_service.h // TODO: this interface and implemenation are under construction, expect // additions and changes. #ifndef KML_CONVENIENCE_GOOGLE_MAPS_DATA_H_ #define KML_CONVENIENCE_GOOGLE_MAPS_DATA_H_ #include <exception> #include "boost/scoped_ptr.hpp" #include "kml/dom.h" // TODO: move Bbox to kmlbase namespace kmlengine { class Bbox; } namespace kmlconvenience { class HttpClient; // This class provides an API to the Google Maps Data API. // See the "Google Maps Data API HTTP Protocol Guide": // http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html // Overall usage: // class YourHttpClient : public kmlconvenience::HttpClient { // public: // virtual bool SendRequest(...) const { // ...your network I/O code goes here... // }; // }; // YourHttpClient* your_http_client = new YourHttpClient; // your_http_client->Login("user@gmail.com", "users-password"); // GoogleMapsData* maps_data = GoogleMapsData::Create(&your_http_client); // string map_feed_atom; // maps_data->GetMapFeed(&map_feed_atom); // kmldom::ElementPtr root = kmldom::ParseAtom(map_feed_atom); // kmlconvenience::AtomUtil... for common Atom inspection. class GoogleMapsData { public: // Create a GoogleMapsData object. The HttpClient must already be logged // in. See http_client.h for more information about authentication. // The HttpClient is used for all network communication from inside this // GoogleMapsData instance. static GoogleMapsData* Create(HttpClient* http_client); ~GoogleMapsData(); // This returns the Google Maps Data service name. This is the name that // should be used with ClientLogin authentication. static const char* get_service_name(); // This returns the pathname portion of the Google Maps Data "meta feed". static const char* get_metafeed_uri(); // This returns the scope (hostname:port). const string& get_scope() const; // This returns the HttpClient. Ownership is retained by this class. HttpClient* get_http_client() const; // This returns the "meta feed" for the authenticated user. The result is an // Atom <feed> containing an <entry> for each of the user's maps. See: // http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html#RetrievingMetafeed bool GetMetaFeedXml(string* atom_feed) const; // This calls GetMetaFeedXml and returns the parsed result. kmldom::AtomFeedPtr GetMetaFeed() const; // This creates a new map with the given title and summary. This is simply // an HTTP POST to the user's maps meta feed. On success true is returned. // If a map_entry_xml string is supplied the <atom:entry> for the new map // is saved there. See: // http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html#CreatingMaps bool CreateMap(const string& title, const string& summary, string* map_entry_xml); // TODO: // http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html#UpdatingMaps // TODO: // http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html#DeletingMaps // This returns the URI of the Feature Feed of the given map. // "A map's feature feed is published in the map's <content> tag within its // src attibute." See: // http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html#RetrievingMaps static bool GetFeatureFeedUri(const kmldom::AtomEntryPtr& map_entry, string* feature_feed_uri); // This fetches the given URI and saves the result in the supplied string. // http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html#RetrievingFeatures bool GetFeatureFeedXml(const string& feature_feed_uri, string* atom_feed) const; // This calls GetFeatureFeedXml and returns the parsed result. kmldom::AtomFeedPtr GetFeatureFeedByUri( const string& feature_feed_uri) const; // Return the KML Feature child of the Atom <entry>'s <content>. This // returns NULL if the <entry>'s <content> has no KML Feature. static kmldom::FeaturePtr GetEntryFeature(const kmldom::AtomEntryPtr& entry); // This appends the KML Feature in each of the feed's entry's to the // given container. The number of KML Features appended is returned. // Each Feature added to the Container is a full clone from the feed entry. static int GetMapKml(const kmldom::AtomFeedPtr& feature_feed, kmldom::ContainerPtr container); // Creates a <Document>, sets the <atom:link> and calls GetMapKml. kmldom::DocumentPtr CreateDocumentOfMapFeatures( const kmldom::AtomFeedPtr& feature_feed); // This adds a new feature to a map. This is simply an HTTP POST to the // given feature feed URI which can be retrieved from the map entry using // GetFeatureFeedUri. On success true is returned. If a feature_entry_xml // string is supplied the <atom:entry> for the new feature is saved there. // http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html#CreatingFeatures bool AddFeature(const string& feature_feed_post_uri, const kmldom::FeaturePtr& feature, string* feature_entry_xml); // This is a convenience utility based on AddFeature. This calls AddFeature // on each <Placemark> in the given feature hierarchy. The total count of // <Placemark>s successfully added is returned. All non-<Placemark> features // are ignored including Containers thus flattening any hierarchy. int PostPlacemarks(const kmldom::FeaturePtr& root_feature, const string& feature_feed_uri); // TODO: // http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html#UpdatingFeatures // TODO: // http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html#DeletingFeatures // This gets the feed representing a search over the specified map. // Use GetSearchFeedUri to get the search_feed_uri for a map. // Construct the search_parameters using AppendBoxParameter(), etc. // http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html#Search bool GetSearchFeed(const string& search_feed_uri, const string& search_parameters, string* atom_feed); // This returns the search feed URI for the given map. static bool GetSearchFeedUri(const kmldom::AtomEntryPtr& map_entry, string* search_feed_uri); // This is a convenience to format "bbox=w,s,e,n" search parameters. static void AppendBoxParameter(const double north, const double south, const double east, const double west, string* search_parameters); // This is a convenience to format "bbox=w,s,e,n" search parameters. static void AppendBoxParameterFromBbox(const kmlengine::Bbox& bbox, string* search_parameters); // This returns a feed to features of the map within the bbox. kmldom::AtomFeedPtr SearchMapByBbox(const kmldom::AtomEntryPtr& map_entry, const kmlengine::Bbox& bbox); // TODO: implement these queries // "mq" "mq" // "lat,lon" "lat // "radius" // "sortby" // This creates a new map and adds a feature for each line of CSV data. // See kmlconvenience::CsvParser for details about the CSV format. This // method is strict: the map will not be created if any of the CSV lines // are bad. kmldom::AtomEntryPtr PostCsv(const string& title, const string& csv_data, string* errors); // This creates a new map and adds a feature for each KML feature. Note // that not all OGC KML 2.2 Feature's are recognized by the Google Maps // Data API: the unrecognized Feature's are quietly ignored and not added // to the Google My Map. At present support is limited to <Placemark>. // On success the standard Google Maps Data <atom:entry> for the new map // is returned. On failure NULL is returned. kmldom::AtomEntryPtr PostKml(const string& title, const string& kml_data); // This is the common code for PostCsv and PostKml. The slug and // content_type arguments create the Slug: and Content-Type: headers // respectively and the data is HTTP POST'ed returning a parsed Atom // entry for the created map. If the POST failed a NULL is returned and // an error may be saved to the passed error string if one is supplied. // At present Google Maps Data API supports CSV and KML. Use of the // PostCsv() and PostKml() are the recommended methods. kmldom::AtomEntryPtr PostMedia(const string& slug, const string& content_type, const string& data, string* errors); static bool GetKmlUri(const kmldom::AtomEntryPtr& map_entry, string* kml_uri); private: // Use static Create(). GoogleMapsData(); boost::scoped_ptr<HttpClient> http_client_; const string scope_; }; } // end namespace kmlconvenience #endif // KML_CONVENIENCE_GOOGLE_MAPS_DATA_H_ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/google_picasa_web.cc�����������������������������������������������0000664�0000000�0000000�00000006167�12636032571�0022612�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the GooglePicasaWeb class. #include "kml/convenience/google_picasa_web.h" #include "kml/convenience/atom_util.h" #include "kml/convenience/http_client.h" namespace kmlconvenience { static const char* kServiceName = "lh2"; static const char* kScope = "http://picasaweb.google.com"; static const char* kPicasaWebMetaFeedUri = "/data/feed/api/user/default"; static const char* kGdataVersion = "2"; // static GooglePicasaWeb* GooglePicasaWeb::Create( HttpClient* http_client) { // The HttpClient must exist. if (!http_client) { return NULL; } GooglePicasaWeb* gs = new GooglePicasaWeb; http_client->AddHeader("GData-Version", kGdataVersion); gs->http_client_.reset(http_client); return gs; } // static const char* GooglePicasaWeb::get_service_name() { return kServiceName; } // static const char* GooglePicasaWeb::get_metafeed_uri() { return kPicasaWebMetaFeedUri; } static string GetScope() { if (const char* scope = getenv("GOOGLE_PICASA_WEB_SCOPE")) { return scope; } return kScope; } GooglePicasaWeb::GooglePicasaWeb() : scope_(GetScope()) { } // Keep POI of scoped_ptr<GoogleHttpClient>'s dtor out of .h GooglePicasaWeb::~GooglePicasaWeb() { } bool GooglePicasaWeb::GetMetaFeedXml(string* atom_feed) const { return http_client_->SendRequest(HTTP_GET, scope_ + kPicasaWebMetaFeedUri, NULL, NULL, atom_feed); } kmldom::AtomFeedPtr GooglePicasaWeb::GetMetaFeed() const { string meta_feed; if (GetMetaFeedXml(&meta_feed)) { return kmldom::AsAtomFeed(kmldom::ParseAtom(meta_feed, NULL)); } return NULL; } } // end namespace kmlconvenience ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/google_picasa_web.h������������������������������������������������0000664�0000000�0000000�00000010163�12636032571�0022443�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the GooglePicasaWeb class. // Very distantly related to: // http://code.google.com/p/gdata-cpp-util/source/browse/trunk/gdata/client/doc_list_service.h // TODO: this interface and implemenation are experimental, expect additions // and changes. #ifndef KML_CONVENIENCE_GOOGLE_PICASA_WEB_H_ #define KML_CONVENIENCE_GOOGLE_PICASA_WEB_H_ #include <string> #include <vector> #include "boost/scoped_ptr.hpp" #include "kml/dom.h" namespace kmlconvenience { class HttpClient; // This class provides an API to the Google PicasaWeb API. // See the Google PicasaWeb API Protocol guide: // http://code.google.com/apis/spreadsheets/data/3.0/developers_guide_protocol.html // Overall usage: // class YourHttpClient : public kmlconvenience::HttpClient { // public: // virtual bool SendRequest(...) const { // ...your network I/O code goes here... // }; // }; // YourHttpClient* your_http_client = new YourHttpClient; // your_http_client->Login("user@gmail.com", "users-password"); // GooglePicasaWeb* maps_data = GooglePicasaWeb::Create(&your_http_client); // std::string albums_feed; // maps_data->GetMetaFeed(&albums_feed); // kmldom::ElementPtr root = kmldom::ParseAtom(albums_feed); // kmlconvenience::AtomUtil... for common Atom inspection. // TODO: this and the other Google Data API classes here provide ample // opportunity for refactoring to more common code. class GooglePicasaWeb { public: // Create a GooglePicasaWeb object. The HttpClient must already be logged // in. See http_client.h for more information about authentication. // The HttpClient is used for all network communication from inside this // GooglePicasaWeb instance. The GooglePicasaWeb object // takes ownership of the HttpClient and destroys it when // the GooglePicasaWeb object is destroyed. static GooglePicasaWeb* Create(HttpClient* http_client); ~GooglePicasaWeb(); static const char* get_service_name(); static const char* get_metafeed_uri(); const string& get_scope() const { return scope_; } // This returns the "meta feed" for the authenticated user. The result is an // Atom <feed> containing an <entry> for each of the user's albums. See: // http://code.google.com/apis/picasaweb/docs/2.0/developers_guide_protocol.html#ListAlbums bool GetMetaFeedXml(string* atom_feed) const; // This calls GetMetaFeedXml and returns the parsed result. kmldom::AtomFeedPtr GetMetaFeed() const; private: // Use static Create(). GooglePicasaWeb(); boost::scoped_ptr<HttpClient> http_client_; const string scope_; }; } // end namespace kmlconvenience #endif // KML_CONVENIENCE_GOOGLE_PICASA_WEB_H_ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/google_spreadsheets.cc���������������������������������������������0000664�0000000�0000000�00000007453�12636032571�0023206�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the GoogleSpreadsheets class. #include "kml/convenience/google_spreadsheets.h" #include "kml/convenience/atom_util.h" #include "kml/convenience/http_client.h" namespace kmlconvenience { static const char* kServiceName = "wise"; static const char* kScope = "http://spreadsheets.google.com"; static const char* kMetaFeedUri = "/feeds/spreadsheets/private/full"; // static GoogleSpreadsheets* GoogleSpreadsheets::Create( HttpClient* http_client) { // The HttpClient must exist. if (!http_client) { return NULL; } GoogleSpreadsheets* gs = new GoogleSpreadsheets; http_client->AddHeader("GData-Version", "3.0"); gs->http_client_.reset(http_client); return gs; } static string GetScope() { if (const char* scope = getenv("GOOGLE_SPREADSHEETS_DATA_SCOPE")) { return scope; } return kScope; } GoogleSpreadsheets::GoogleSpreadsheets() : scope_(GetScope()) { } // Keep POI of scoped_ptr<GoogleHttpClient>'s dtor out of .h GoogleSpreadsheets::~GoogleSpreadsheets() { } // static const char* GoogleSpreadsheets::get_service_name() { return kServiceName; } // static const char* GoogleSpreadsheets::get_metafeed_uri() { return kMetaFeedUri; } const string& GoogleSpreadsheets::get_scope() const { return scope_; } bool GoogleSpreadsheets::GetMetaFeedXml(string* atom_feed) const { return http_client_->SendRequest(HTTP_GET, scope_ + kMetaFeedUri, NULL, NULL, atom_feed); } kmldom::AtomFeedPtr GoogleSpreadsheets::GetMetaFeed() const { string meta_feed; if (GetMetaFeedXml(&meta_feed)) { return kmldom::AsAtomFeed(kmldom::ParseAtom(meta_feed, NULL)); } return NULL; } // http://spreadsheets.google.com/feeds/download/spreadsheets/Export?key={resource_id}&exportFormat={format} bool GoogleSpreadsheets::DownloadSpreadsheet(const kmldom::AtomEntryPtr& entry, const string& format, string* spreadsheet_data) { string resource_id; if (!AtomUtil::GetGdResourceId(entry, &resource_id)) { return false; } const string uri = scope_ + "/feeds/download/spreadsheets/Export?key=" + resource_id + "&exportFormat=" + format; return http_client_->SendRequest(HTTP_GET, uri, NULL, NULL, spreadsheet_data); } } // end namespace kmlconvenience ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/google_spreadsheets.h����������������������������������������������0000664�0000000�0000000�00000010611�12636032571�0023036�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the GoogleSpreadsheets class. // Very distantly related to: // http://code.google.com/p/gdata-cpp-util/source/browse/trunk/gdata/client/doc_list_service.h // TODO: this interface and implemenation are experimental, expect additions // and changes. #ifndef KML_CONVENIENCE_GOOGLE_SPREADSHEETS_H_ #define KML_CONVENIENCE_GOOGLE_SPREADSHEETS_H_ #include "boost/scoped_ptr.hpp" #include "kml/dom.h" namespace kmlconvenience { class HttpClient; // This class provides an API to the Google Spreadsheets API. // See the Google Spreadsheets API Protocol guide: // http://code.google.com/apis/spreadsheets/data/3.0/developers_guide_protocol.html // Overall usage: // class YourHttpClient : public kmlconvenience::HttpClient { // public: // virtual bool SendRequest(...) const { // ...your network I/O code goes here... // }; // }; // YourHttpClient* your_http_client = new YourHttpClient; // your_http_client->Login("user@gmail.com", "users-password"); // GoogleSpreadsheets* maps_data = GoogleSpreadsheets::Create(&your_http_client); // string spreadsheets_feed; // maps_data->GetMetaFeed(&spreadsheets_feed); // kmldom::ElementPtr root = kmldom::ParseAtom(spreadsheets_feed); // kmlconvenience::AtomUtil... for common Atom inspection. class GoogleSpreadsheets { public: // Create a GoogleSpreadsheets object. The HttpClient must already be logged // in. See http_client.h for more information about authentication. // The HttpClient is used for all network communication from inside this // GoogleSpreadsheets instance. The GoogleSpreadsheets object // takes ownership of the HttpClient and destroys it when // the GoogleSpreadsheets object is destroyed. static GoogleSpreadsheets* Create(HttpClient* http_client); ~GoogleSpreadsheets(); static const char* get_service_name(); static const char* get_metafeed_uri(); const string& get_scope() const; // This returns the "meta feed" for the authenticated user. The result is an // Atom <feed> containing an <entry> for each of the user's spreadsheets. See: // http://code.google.com/apis/spreadsheets/data/3.0/developers_guide_protocol.html#ListingSpreadsheets bool GetMetaFeedXml(string* atom_feed) const; // This calls GetMetaFeedXml and returns the parsed result. kmldom::AtomFeedPtr GetMetaFeed() const; // This downloads the Google Spreadsheet described by the entry in the // format requested, "csv" for example. For the full list see: // http://code.google.com/apis/documents/docs/3.0/developers_guide_protocol.html#DownloadingSpreadsheets bool DownloadSpreadsheet(const kmldom::AtomEntryPtr& entry, const string& format, string* spreadsheet_data); private: // Use static Create(). GoogleSpreadsheets(); boost::scoped_ptr<HttpClient> http_client_; const string scope_; }; } // end namespace kmlconvenience #endif // KML_CONVENIENCE_GOOGLE_SPREADSHEETS_H_ �����������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/gpx_trk_pt_handler.h�����������������������������������������������0000664�0000000�0000000�00000010577�12636032571�0022701�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the GpxTrkPtHandler class. #ifndef KML_CONVENIENCE_GPX_TRK_PT_HANDLER_H__ #define KML_CONVENIENCE_GPX_TRK_PT_HANDLER_H__ #include <cstring> // strcmp #include "boost/scoped_ptr.hpp" #include "kml/base/attributes.h" #include "kml/base/expat_handler.h" #include "kml/base/vec3.h" namespace kmlconvenience { // Find all <trkpt>'s in the GPX file. // For example: // <trkpt lat="-33.911973070" lon="18.422974152"> // <ele>4.943848</ele> // <time>2008-10-11T14:55:41Z</time> // </trkpt> // Each <trkpt> results in a call to HandlePoint(). // Overall usage: Derive a class from GpxTrkPtHandler with an implementation of // HandlePoint(). class GpxTrkPtHandler : public kmlbase::ExpatHandler { public: GpxTrkPtHandler() : time_("") , gather_char_data_(false) , char_data_("") { } // ExpatHandler::StartElement() virtual void StartElement(const string& name, const std::vector <string>& atts) { if (name.compare("trkpt") == 0) { // <trkpt lat="-33.911973070" lon="18.422974152"> // If both lat and lon exist and are sane doubles create a Vec3 for // the point. boost::scoped_ptr<kmlbase::Attributes> attributes( kmlbase::Attributes::Create(atts)); if (attributes.get()) { double latitude; double longitude; if (attributes->GetDouble("lat", &latitude) && attributes->GetDouble("lon", &longitude)) { vec3_.reset(new kmlbase::Vec3(longitude, latitude)); } } time_.clear(); } else if (name.compare("time") == 0 || name.compare("ele") == 0) { // <time>2008-10-11T14:55:41Z</time> // <ele>4.943848</ele> gather_char_data_ = true; char_data_.clear(); } } // ExpatHandler::EndElement() virtual void EndElement(const string& name) { if (name.compare("trkpt") == 0) { // </trkpt> // If a Vec3 was created for this element call the handler. if (vec3_.get()) { HandlePoint(*vec3_, time_); } } else if (name.compare("time") == 0) { // <time>2008-10-11T14:55:41Z</time> time_ = char_data_; } else if (name.compare("ele") == 0) { // <ele>4.943848</ele> if (vec3_.get()) { vec3_->set_altitude(strtod(char_data_.c_str(), NULL)); } } } // ExpatHandler::CharData() virtual void CharData(const string& str) { if (gather_char_data_) { char_data_.append(str); } } // This is called for each <trkpt>. This default implemenation does nothing. virtual void HandlePoint(const kmlbase::Vec3& where, const string& when) { }; private: // A fresh Vec3 is created for each <trkpt>. boost::scoped_ptr<kmlbase::Vec3> vec3_; string time_; bool gather_char_data_; string char_data_; }; } // end namespace kmlconvenience #endif // KML_CONVENIENCE_GPX_TRK_PT_HANDLER_H__ ���������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/http_client.cc�����������������������������������������������������0000664�0000000�0000000�00000013742�12636032571�0021473�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the default implementation of the HttpClient interface. // This implementation is fairly specific to the Google Data API authentication // system as described here: #include "kml/convenience/http_client.h" namespace kmlconvenience { class HttpMethod { public: static const char* GetMethodString(HttpMethodEnum method_enum) { if (method_enum >= HTTP_OPTIONS && method_enum <= HTTP_CONNECT) { return kHttpMethodString[method_enum]; } return NULL; } private: // This must exactly match the order in HttpMethodEnum. static const char* kHttpMethodString[]; }; // private static const char* HttpMethod::kHttpMethodString[] = { NULL, // HTTP_NONE = 0, "OPTIONS", "GET", "HEAD", "POST", "PUT", "DELETE", "TRACE", "CONNECT" }; static const char* kVersion = "1.0"; static const char* kGoogleClientLoginUrl = "https://www.google.com/accounts/ClientLogin"; static const char* kAccountType = "HOSTED_OR_GOOGLE"; HttpClient::HttpClient(const string& application_name) : application_name_(application_name) { // Standard headers for every request PushHeader("User-Agent", application_name_ + " GData-C++/" + kVersion, &headers_); } void HttpClient::AddHeader(const string& field_name, const string& field_value) { PushHeader(field_name, field_value, &headers_); } // This is an implementation of this: // http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html bool HttpClient::Login(const string& service_name, const string& email, const string& password) { const string data = string("Email=") + email + "&Passwd=" + password + "&accountType=" + kAccountType + "&source=" + application_name_ + "&service=" + service_name; string response; if (!SendRequest(HTTP_POST, kGoogleClientLoginUrl, NULL, &data, &response)) { return false; } const string kAuth = "Auth="; // prefix of the ClientLogin token const size_t auth_offset = response.find(kAuth); if (auth_offset == string::npos) { return false; } const string token = response.substr(auth_offset + kAuth.size()); auth_token_ = token.substr(0, token.size() - 1); // remove trailing "\n" // Attach Authorization header to every subsequent request PushHeader("Authorization", "GoogleLogin auth=" + auth_token_, &headers_); return true; } // This default implemention is really only for debugging and unit testing. bool HttpClient::SendRequest(const HttpMethodEnum method, const string& uri, const StringPairVector* headers, const string* data, string* response) const { if (response) { response->append(HttpMethod::GetMethodString(method)); response->append(" "); response->append(uri); response->append("\n"); for (size_t i = 0; i < headers_.size(); ++i) { response->append(HttpClient::FormatHeader(headers_[i])); response->append("\n"); } if (headers) { for (size_t i = 0; i < headers->size(); ++i) { response->append(HttpClient::FormatHeader((*headers)[i])); response->append("\n"); } } } return true; } bool HttpClient::FetchUrl(const string& url, string* data) const { return SendRequest(HTTP_GET, url, NULL, NULL, data); } // static void HttpClient::PushHeader(const string& field_name, const string& field_value, StringPairVector* headers) { if (headers) { headers->push_back(std::make_pair(field_name, field_value)); } } // static bool HttpClient::FindHeader(const string& field_name, const StringPairVector& headers, string* field_value) { for (size_t i = 0; i < headers.size(); ++i) { if (field_name == headers[i].first) { if (field_value) { *field_value = headers[i].second; } return true; } } return false; } // static string HttpClient::FormatHeader(const StringPair& header) { return header.first + ": " + header.second; } // static void HttpClient::AppendHeaders(const StringPairVector& src, StringPairVector* dest) { if (dest) { for (size_t i = 0; i < src.size(); ++i) { dest->push_back(src[i]); } } } } // end namespace kmlconvenience ������������������������������libkml-1.3.0/src/kml/convenience/http_client.h������������������������������������������������������0000664�0000000�0000000�00000015155�12636032571�0021335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the HttpClient API. // TODO: decide if this should really attempt to be a platform agnostic // authenticated http api or just punt and call it the GoogleHttpClient #ifndef KML_CONVENIENCE_HTTP_CLIENT_H_ #define KML_CONVENIENCE_HTTP_CLIENT_H_ #include <vector> #include <memory> #include "kml/base/net_cache.h" namespace kmlconvenience { // TODO: push these to kml/base/string_util.h typedef std::pair<string, string> StringPair; typedef std::vector<StringPair> StringPairVector; // RFC 2616, Section 5.1.1 Method: "GET", "POST", "PUT", "DELETE". enum HttpMethodEnum { HTTP_NONE = 0, HTTP_OPTIONS, HTTP_GET, HTTP_HEAD, HTTP_POST, HTTP_PUT, HTTP_DELETE, HTTP_TRACE, HTTP_CONNECT }; // This class declares an HTTP client interface. There is nothing directly // specific to any of KML, Google Maps Data API or the Google Data APIs in // this _interface_, however the default implementation of the virtual methods // is specific to Google's Data API ClientLogin. The typical intended usage // is to derive a class from this in which the SendRequest() implementation // performs I/O. The key purpose of this class is to hold authorization and // other header state used for a given "session". class HttpClient : kmlbase::NetFetcher { public: // The application_name is used in the HTTP User-Agent. HttpClient(const string &application_name); virtual ~HttpClient() {} // These virtuals are the core of the HttpClient interface. // The default implementation is as per Google's ClientLogin: // http://code.google.com/apis/gdata/auth.html#ClientLogin // Derived classes typically are not expected to implement this. This is // virtual primarily for testing. virtual bool Login(const string& service_name, const string& email, const string& password); // Adds the given field name and value to the set of headers used in every // request. This is a simple append. No provision is made for overwriting // a header field of the same name. void AddHeader(const string& field_name, const string& field_value); // All I/O goes through this method. See HttpMethodEnum for valid // http_method values. See RFC 2616, Section 5.1.2 Request-URI for // request_uri. See Section 5.3 for request_headers. Any of // request_headers, data and response may be NULL. The return value is with // regards to the I/O operation itself and is not a reflection of the HTTP // response code which is left to the caller to parse out of the response. // The response is the "raw" HTTP response and includes all headers. // The default implementation performs no I/O and sets the response to the // request constructed from the arguments virtual bool SendRequest(HttpMethodEnum http_method, const string& request_uri, const StringPairVector* request_headers, const string* post_data, string* response) const; // kmlbase::NetFetcher::FetchUrl() // The HttpClient implementation of this sends all fetches to SendRequest. virtual bool FetchUrl(const string& url, string* data) const; // The following static methods are for the convenience of managing headers. // This method appends each string pair in src to the end of dest. If dest // is NULL this is a nop. static void AppendHeaders(const StringPairVector& src, StringPairVector* dest); // If the given headers have a field of the given name return true. If // an output field_value string is supplied the value is saved there. static bool FindHeader(const string& field_name, const StringPairVector& headers, string* field_value); // This returns the given name-value pair formatted properly for use in an // HTTP request. static string FormatHeader(const StringPair& header); // RFC 2616, Section 4.2. No formatting such as ':', ' ' or '\n' should // appear in the field_name or field_value. This function appends the // given field_name and field_value to the given headers vector. If the // headers vector is NULL this function does nothing. static void PushHeader(const string& field_name, const string& field_value, StringPairVector* headers); // The following methods return internal information about the state of // this HttpClient. This is primarily for debugging. // This returns the internal state of the authorization token. This will be // empty unless Login() was called successfully. const string& get_auth_token() const { return auth_token_; } // This returns the internal state of the request headers to be used with // each SendRequest. const StringPairVector& get_headers() const { return headers_; } private: // The key reason for this class is to hold the authorization token from // the Login() for use in subsequent SendRequest()'s. string auth_token_; const string service_name_; const string application_name_; StringPairVector headers_; }; } // end namespace kmlconvenience #endif // KML_CONVENIENCE_HTTP_CLIENT_H_ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/kml_feature_list_saver.h�������������������������������������������0000664�0000000�0000000�00000010357�12636032571�0023550�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2010, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the KmlFeatureListSaver class. #ifndef KML_CONVENIENCE_KML_FEATURE_LIST_SAVER_H__ #define KML_CONVENIENCE_KML_FEATURE_LIST_SAVER_H__ #include "kml/convenience/feature_list.h" #include "kml/dom.h" #include "kml/engine/engine_types.h" namespace kmlconvenience { // This ParserObserver saves the non-Container Features in the input KML // to the given FeatureList and the shared style selectors to the given // SharedStyleMap if one is supplied. If a style_base is supplied any Feature // with a in-file relative reference is saved to the FeatureList with the // given string as the base. The SharedStyleMap and style_base are optional. // Example usage: // FeatureList feature_list; // SharedStyleMap shared_style_map; // KmlFeatureListSaver kml_saver(&feature_list, &shared_style_map, "s.kml"); // Parser parser; // parser.AddObserver(&kml_saver); // string errors; // parser.Parse(kml, &errors); class KmlFeatureListSaver : public kmldom::ParserObserver { public: KmlFeatureListSaver(FeatureList* feature_list, kmlengine::SharedStyleMap* shared_style_map, const char* style_base) : feature_list_(feature_list), shared_style_map_(shared_style_map), in_update_(false) { if (style_base) { style_base_ = string(style_base); } } virtual bool StartElement(const kmldom::ElementPtr& element) { if (element->Type() == kmldom::Type_Update) { in_update_ = true; } return true; } virtual bool EndElement(const kmldom::ElementPtr& parent, const kmldom::ElementPtr& child) { if (child->Type() == kmldom::Type_Update) { // </Update> in_update_ = false; return false; } if (in_update_) { return true; } if (child->IsA(kmldom::Type_Feature) && !child->IsA(kmldom::Type_Container)) { kmldom::FeaturePtr feature = kmldom::AsFeature(child); if (!style_base_.empty() && feature->has_styleurl()) { const string& styleurl = feature->get_styleurl(); if (styleurl.size() > 2 && styleurl[0] == '#') { feature->set_styleurl(style_base_ + styleurl); } } feature_list_->PushBack(feature); return false; } if (shared_style_map_ && child->IsA(kmldom::Type_StyleSelector) && parent->IsA(kmldom::Type_Document)) { const kmldom::StyleSelectorPtr ss = kmldom::AsStyleSelector(child); if (ss->has_id()) { (*shared_style_map_)[ss->get_id()] = ss; return false; } } return true; } private: FeatureList* feature_list_; kmlengine::SharedStyleMap* shared_style_map_; string style_base_; bool in_update_; }; } // end namespace kmlconvenience #endif // KML_CONVENIENCE_KML_FEATURE_LIST_SAVER_H__ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/convenience/kmz_check_links.cc�������������������������������������������������0000664�0000000�0000000�00000004773�12636032571�0022320�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the KmzCheckLinks() function. #include "kml/convenience/kmz_check_links.h" #include <vector> #include "kml/engine/get_links.h" #include "kml/engine/href.h" #include "kml/engine/kmz_file.h" using kmlengine::Href; using kmlengine::KmzFile; using std::vector; namespace kmlconvenience { bool KmzCheckLinks(const KmzFile& kmzfile, vector<string>* missing_links) { string kml; if (!kmzfile.ReadKml(&kml)) { return false; } kmlengine::href_vector_t href_vector; if (!kmlengine::GetLinks(kml, &href_vector)) { return false; // Parse error. } bool ret = true; // Innocent until proven guilty. for (size_t i = 0; i < href_vector.size(); ++i) { Href href(href_vector[i]); if (href.IsRelative()) { string content; if (!kmzfile.ReadFile(href.get_path().c_str(), &content)) { if (missing_links) { missing_links->push_back(href_vector[i]); } ret = false; } } } return ret; } } // end namespace kmlconvenience �����libkml-1.3.0/src/kml/convenience/kmz_check_links.h��������������������������������������������������0000664�0000000�0000000�00000003645�12636032571�0022157�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/engine/kmz_file.h" #include <vector> namespace kmlconvenience { // This returns true iff the KmzFile's relative links within the KMZ exist. // This returns false if there is no KML in the KmzFile. If a missing_files // vector is supplied the names of all missing files are saved there. bool KmzCheckLinks(const kmlengine::KmzFile& kmzfile, std::vector<string>* missing_files); } // end namespace kmlconvenience �������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom.h��������������������������������������������������������������������������0000664�0000000�0000000�00000003642�12636032571�0015301�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This is the main include file for the KMLDOM library. Clients of kmldom // should include only this header file. #ifndef KML_DOM_H__ #define KML_DOM_H__ #include <exception> #include "kml/dom/kml_cast.h" #include "kml/dom/kml_factory.h" #include "kml/dom/kml_funcs.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/kmldom.h" #include "kml/dom/kml22.h" #include "kml/dom/parser_observer.h" #include "kml/dom/parser.h" #endif // KML_DOM_H__ ����������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/���������������������������������������������������������������������������0000775�0000000�0000000�00000000000�12636032571�0015123�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/CMakeLists.txt�������������������������������������������������������������0000664�0000000�0000000�00000001407�12636032571�0017665�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������file(GLOB SRCS "*.cc" ) set(INCS abstractlatlonbox.h abstractview.h atom.h balloonstyle.h colorstyle.h container.h document.h element.h extendeddata.h feature.h folder.h geometry.h hotspot.h iconstyle.h kml.h kml22.h kml_cast.h kml_factory.h kml_funcs.h kml_ptr.h kmldom.h labelstyle.h linestyle.h link.h liststyle.h model.h networklink.h networklinkcontrol.h object.h overlay.h parser.h parser_observer.h placemark.h polystyle.h region.h schema.h snippet.h style.h stylemap.h styleselector.h substyle.h timeprimitive.h gx_timeprimitive.h gx_tour.h vec2.h xal.h xsd.h visitor.h visitor_driver.h) build_target( NAME kmldom SRCS ${SRCS} INCS ${INCS} DEPENDS kmlbase) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/abstractlatlonbox.cc�������������������������������������������������������0000664�0000000�0000000�00000005455�12636032571�0021171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/abstractlatlonbox.h" #include "kml/dom/serializer.h" namespace kmldom { // Defaults http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd for // <north>, <south>, <east>, and <west>. AbstractLatLonBox::AbstractLatLonBox() : north_(180.0), has_north_(false), south_(-180.0), has_south_(false), east_(180.0), has_east_(false), west_(-180.0), has_west_(false) {} AbstractLatLonBox::~AbstractLatLonBox() {} void AbstractLatLonBox::AddElement(const ElementPtr& element) { switch (element->Type()) { case Type_north: has_north_ = element->SetDouble(&north_); break; case Type_south: has_south_ = element->SetDouble(&south_); break; case Type_east: has_east_ = element->SetDouble(&east_); break; case Type_west: has_west_ = element->SetDouble(&west_); break; default: Object::AddElement(element); break; } } void AbstractLatLonBox::Serialize(Serializer& serializer) const { Object::Serialize(serializer); if (has_north()) { serializer.SaveFieldById(Type_north, get_north()); } if (has_south()) { serializer.SaveFieldById(Type_south, get_south()); } if (has_east()) { serializer.SaveFieldById(Type_east, get_east()); } if (has_west()) { serializer.SaveFieldById(Type_west, get_west()); } } } // end namespace kmldom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/abstractlatlonbox.h��������������������������������������������������������0000664�0000000�0000000�00000007066�12636032571�0021033�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_ABSTRACTLATLONBOX_H__ #define KML_DOM_ABSTRACTLATLONBOX_H__ #include "kml/dom/kml22.h" #include "kml/dom/object.h" namespace kmldom { class Element; class Serializer; // OGC KML 2.2 Standard: 9.14 kml:AbstractLatLonAltBox // OGC KML 2.2 XSD: <complexType name="AbstractLatLonBoxType" abstract="true"> class AbstractLatLonBox : public Object { public: virtual ~AbstractLatLonBox(); virtual KmlDomType Type() const { return Type_AbstractLatLonBox; } virtual bool IsA(KmlDomType type) const { return type == Type_AbstractLatLonBox || Object::IsA(type); } // <north> double get_north() const { return north_; } bool has_north() const { return has_north_; } void set_north(double north) { north_ = north; has_north_ = true; } void clear_north() { north_ = 180.0; has_north_ = false; } // <south> double get_south() const { return south_; } bool has_south() const { return has_south_; } void set_south(double south) { south_ = south; has_south_ = true; } void clear_south() { south_ = -180.0; has_south_ = false; } // <east> double get_east() const { return east_; } bool has_east() const { return has_east_; } void set_east(double south) { east_ = south; has_east_ = true; } void clear_east() { east_ = 180.0; has_east_ = false; } // <west> double get_west() const { return west_; } bool has_west() const { return has_west_; } void set_west(double south) { west_ = south; has_west_ = true; } void clear_west() { west_ = -180.0; has_west_ = false; } protected: // Abstract element. Access for derived types only. AbstractLatLonBox(); virtual void AddElement(const ElementPtr& element); virtual void Serialize(Serializer& serializer) const; private: double north_; bool has_north_; double south_; bool has_south_; double east_; bool has_east_; double west_; bool has_west_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(AbstractLatLonBox); }; } // end namespace kmldom #endif // KML_DOM_ABSTRACTLATLONBOX_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/abstractview.cc������������������������������������������������������������0000664�0000000�0000000�00000013343�12636032571�0020134�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the LookAt and Camera elements. #include "kml/dom/abstractview.h" #include "kml/base/attributes.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { // AbstractView void AbstractView::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->IsA(Type_TimePrimitive)) { set_gx_timeprimitive(AsTimePrimitive(element)); return; } Object::AddElement(element); } void AbstractView::Serialize(Serializer& serializer) const { if (has_gx_timeprimitive()) { serializer.SaveElementGroup(get_gx_timeprimitive(), Type_TimePrimitive); } } void AbstractView::AcceptChildren(VisitorDriver* driver) { Object::AcceptChildren(driver); if (has_gx_timeprimitive()) { driver->Visit(get_gx_timeprimitive()); } } // AbstractViewCommon AbstractViewCommon::AbstractViewCommon() : longitude_(0.0), has_longitude_(false), latitude_(0.0), has_latitude_(false), altitude_(0.0), has_altitude_(false), heading_(0.0), has_heading_(false), tilt_(0.0), has_tilt_(false), altitudemode_(ALTITUDEMODE_CLAMPTOGROUND), has_altitudemode_(false), gx_altitudemode_(GX_ALTITUDEMODE_CLAMPTOSEAFLOOR), has_gx_altitudemode_(false) { } void AbstractViewCommon::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_longitude: has_longitude_ = element->SetDouble(&longitude_); break; case Type_latitude: has_latitude_ = element->SetDouble(&latitude_); break; case Type_altitude: has_altitude_ = element->SetDouble(&altitude_); break; case Type_heading: has_heading_ = element->SetDouble(&heading_); break; case Type_tilt: has_tilt_ = element->SetDouble(&tilt_); break; case Type_altitudeMode: has_altitudemode_ = element->SetEnum(&altitudemode_); break; case Type_GxAltitudeMode: has_gx_altitudemode_ = element->SetEnum(&gx_altitudemode_); break; default: AbstractView::AddElement(element); break; } } void AbstractViewCommon::SerializeBeforeR(Serializer& serializer) const { AbstractView::Serialize(serializer); if (has_longitude()) { serializer.SaveFieldById(Type_longitude, get_longitude()); } if (has_latitude()) { serializer.SaveFieldById(Type_latitude, get_latitude()); } if (has_altitude()) { serializer.SaveFieldById(Type_altitude, get_altitude()); } if (has_heading()) { serializer.SaveFieldById(Type_heading, get_heading()); } if (has_tilt()) { serializer.SaveFieldById(Type_tilt, get_tilt()); } } void AbstractViewCommon::SerializeAfterR(Serializer& serializer) const { if (has_altitudemode()) { serializer.SaveEnum(Type_altitudeMode, get_altitudemode()); } if (has_gx_altitudemode()) { serializer.SaveEnum(Type_GxAltitudeMode, get_gx_altitudemode()); } } // <LookAt> LookAt::LookAt() : range_(0.0), has_range_(false) { } void LookAt::AddElement(const ElementPtr& element) { if (element && element->Type() == Type_range) { has_range_ = element->SetDouble(&range_); } else { AbstractViewCommon::AddElement(element); } } void LookAt::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); AbstractViewCommon::SerializeBeforeR(serializer); if (has_range()) { serializer.SaveFieldById(Type_range, get_range()); } AbstractViewCommon::SerializeAfterR(serializer); } void LookAt::Accept(Visitor* visitor) { visitor->VisitLookAt(LookAtPtr(this)); } // <Camera> Camera::Camera() : roll_(0.0), has_roll_(false) { } void Camera::AddElement(const ElementPtr& element) { if (element && element->Type() == Type_roll) { has_roll_ = element->SetDouble(&roll_); } else { AbstractViewCommon::AddElement(element); } } void Camera::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); AbstractViewCommon::SerializeBeforeR(serializer); if (has_roll()) { serializer.SaveFieldById(Type_roll, get_roll()); } AbstractViewCommon::SerializeAfterR(serializer); } void Camera::Accept(Visitor* visitor) { visitor->VisitCamera(CameraPtr(this)); } } // end namespace kmldom ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/abstractview.h�������������������������������������������������������������0000664�0000000�0000000�00000017445�12636032571�0020005�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_ABSTRACTVIEW_H__ #define KML_DOM_ABSTRACTVIEW_H__ #include "kml/dom/object.h" #include "kml/dom/gx_timeprimitive.h" namespace kmldom { class Visitor; class VisitorDriver; // OGC KML 2.2 Standard: 14.1 kml:AbstractViewGroup // OGC KML 2.2 XSD: <element name="AbstractViewGroup"... class AbstractView : public Object { public: virtual ~AbstractView() {} virtual KmlDomType Type() const { return Type_AbstractView; } virtual bool IsA(KmlDomType type) const { return type == Type_AbstractView || Object::IsA(type); } // From kml:AbstractViewObjectExtensionGroup. const TimePrimitivePtr& get_gx_timeprimitive() const { return gx_timeprimitive_; } bool has_gx_timeprimitive() const { return gx_timeprimitive_ != NULL; } void set_gx_timeprimitive(const TimePrimitivePtr& gx_timeprimitive) { SetComplexChild(gx_timeprimitive, &gx_timeprimitive_); } void clear_gx_timeprimitive() { set_gx_timeprimitive(NULL); } // Visitor API methods, see visitor.h. virtual void AcceptChildren(VisitorDriver* driver); protected: // AbstractView is abstract. AbstractView() {} virtual void AddElement(const ElementPtr& element); virtual void Serialize(Serializer& serializer) const; private: TimePrimitivePtr gx_timeprimitive_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(AbstractView); }; // This is an internal convenience class for code common to LookAt and Camera. // This is not part of the OGC KML 2.2 standard. class AbstractViewCommon : public AbstractView { public: // <longitude> double get_longitude() const { return longitude_; } bool has_longitude() const { return has_longitude_; } void set_longitude(double longitude) { longitude_ = longitude; has_longitude_ = true; } void clear_longitude() { longitude_ = 0.0; has_longitude_ = false; } // <latitude> double get_latitude() const { return latitude_; } bool has_latitude() const { return has_latitude_; } void set_latitude(double latitude) { latitude_ = latitude; has_latitude_ = true; } void clear_latitude() { latitude_ = 0.0; has_latitude_ = false; } // <altitude> double get_altitude() const { return altitude_; } bool has_altitude() const { return has_altitude_; } void set_altitude(double altitude) { altitude_ = altitude; has_altitude_ = true; } void clear_altitude() { altitude_ = 0.0; has_altitude_ = false; } // <heading> double get_heading() const { return heading_; } bool has_heading() const { return has_heading_; } void set_heading(double heading) { heading_ = heading; has_heading_ = true; } void clear_heading() { heading_ = 0.0; has_heading_ = false; } // <tilt> double get_tilt() const { return tilt_; } bool has_tilt() const { return has_tilt_; } void set_tilt(double tilt) { tilt_ = tilt; has_tilt_ = true; } void clear_tilt() { tilt_ = 0.0; has_tilt_ = false; } // <altitudeMode> int get_altitudemode() const { return altitudemode_; } bool has_altitudemode() const { return has_altitudemode_; } void set_altitudemode(int altitudemode) { altitudemode_ = altitudemode; has_altitudemode_ = true; } void clear_altitudemode() { altitudemode_ = ALTITUDEMODE_CLAMPTOGROUND; has_altitudemode_ = false; } // <gx:altitudeMode> // NOTE: In OGC KML 2.2 altitude mode is a group hence only one of // <altitudeMode> _OR_ <gx:altitudeMode> shall be used for XSD validation. int get_gx_altitudemode() const { return gx_altitudemode_; } bool has_gx_altitudemode() const { return has_gx_altitudemode_; } void set_gx_altitudemode(int gx_altitudemode) { gx_altitudemode_ = gx_altitudemode; has_gx_altitudemode_ = true; } void clear_gx_altitudemode() { gx_altitudemode_ = GX_ALTITUDEMODE_CLAMPTOSEAFLOOR; has_gx_altitudemode_ = false; } protected: // AbstractViewCommon is abstract. AbstractViewCommon(); ~AbstractViewCommon() {} virtual void AddElement(const ElementPtr& element); virtual void SerializeBeforeR(Serializer& serializer) const; virtual void SerializeAfterR(Serializer& serializer) const; private: double longitude_; bool has_longitude_; double latitude_; bool has_latitude_; double altitude_; bool has_altitude_; double heading_; bool has_heading_; double tilt_; bool has_tilt_; int altitudemode_; bool has_altitudemode_; int gx_altitudemode_; bool has_gx_altitudemode_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(AbstractViewCommon); }; // <LookAt> class LookAt : public AbstractViewCommon { public: virtual ~LookAt() {} virtual KmlDomType Type() const { return Type_LookAt; } virtual bool IsA(KmlDomType type) const { return type == Type_LookAt || AbstractView::IsA(type); } // <range> double get_range() const { return range_; } bool has_range() const { return has_range_; } void set_range(double range) { range_ = range; has_range_ = true; } void clear_range() { range_ = 0.0; has_range_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; LookAt(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; double range_; bool has_range_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(LookAt); }; // <Camera> class Camera : public AbstractViewCommon { public: virtual ~Camera() {} virtual KmlDomType Type() const { return Type_Camera; } virtual bool IsA(KmlDomType type) const { return type == Type_Camera || AbstractView::IsA(type); } // <roll> double get_roll() const { return roll_; } bool has_roll() const { return has_roll_; } void set_roll(double roll) { roll_ = roll; has_roll_ = true; } void clear_roll() { roll_ = 0.0; has_roll_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Camera(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; double roll_; bool has_roll_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Camera); }; } // end namespace kmldom #endif // KML_DOM_ABSTRACTVIEW_H__ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/atom.cc��������������������������������������������������������������������0000664�0000000�0000000�00000022520�12636032571�0016373�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the Atom elements. #include "kml/dom/atom.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" #include "kml/base/attributes.h" using kmlbase::Attributes; namespace kmldom { // Attributes. static const char kHref[] = "href"; static const char kHrefLang[] = "hreflang"; static const char kLabel[] = "label"; static const char kLength[] = "length"; static const char kRel[] = "rel"; static const char kScheme[] = "scheme"; static const char kSrc[] = "src"; static const char kTerm[] = "term"; static const char kTitle[] = "title"; static const char kType[] = "type"; // <atom:author> AtomAuthor::AtomAuthor() : has_name_(false), has_uri_(false), has_email_(false) { set_xmlns(kmlbase::XMLNS_ATOM); } AtomAuthor::~AtomAuthor() {} void AtomAuthor::AddElement(const ElementPtr& element) { if (!element) { return; } // Explicit child elements. switch(element->Type()) { case Type_atomEmail: has_email_ = element->SetString(&email_); break; case Type_atomName: has_name_ = element->SetString(&name_); break; case Type_atomUri: has_uri_ = element->SetString(&uri_); break; default: Element::AddElement(element); } } void AtomAuthor::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); // In order of http://schemas.opengis.net/kml/2.2.0/atom-author-link.xsd // although no order is specified (this is not an XSD sequence, for example). if (has_name()) { serializer.SaveFieldById(Type_atomName, get_name()); } if (has_uri()) { serializer.SaveFieldById(Type_atomUri, get_uri()); } if (has_email()) { serializer.SaveFieldById(Type_atomEmail, get_email()); } } // <atom:category> AtomCategory::AtomCategory() : has_term_(false), has_scheme_(false), has_label_(false) { set_xmlns(kmlbase::XMLNS_ATOM); } AtomCategory::~AtomCategory() {} void AtomCategory::AddElement(const ElementPtr& element) { // Any element passed in here is unknown. Element::AddElement(element); } void AtomCategory::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_term_ = attributes->CutValue(kTerm, &term_); has_scheme_ = attributes->CutValue(kScheme, &scheme_); has_label_ = attributes->CutValue(kLabel, &label_); AddUnknownAttributes(attributes); } void AtomCategory::SerializeAttributes(Attributes* attributes) const { Element::SerializeAttributes(attributes); if (has_scheme()) { attributes->SetValue(kScheme, get_scheme()); } if (has_term()) { attributes->SetValue(kTerm, get_term()); } if (has_label()) { attributes->SetValue(kLabel, get_label()); } } void AtomCategory::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); } // <atom:content> AtomContent::AtomContent() : has_src_(false), has_type_(false) { set_xmlns(kmlbase::XMLNS_ATOM); } AtomContent::~AtomContent() {} void AtomContent::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_src_ = attributes->CutValue(kSrc, &src_); has_type_ = attributes->CutValue(kType, &type_); AddUnknownAttributes(attributes); } void AtomContent::SerializeAttributes(Attributes* attributes) const { Element::SerializeAttributes(attributes); if (has_src()) { attributes->SetValue(kSrc, get_src()); } if (has_type()) { attributes->SetValue(kType, get_type()); } } void AtomContent::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); } // Common children of <atom:feed> and <atom:entry>. AtomCommon::AtomCommon() : has_id_(false), has_title_(false), has_updated_(false) { } void AtomCommon::add_category(const AtomCategoryPtr& category) { AddComplexChild(category, &category_array_); } void AtomCommon::add_link(const AtomLinkPtr& link) { AddComplexChild(link, &link_array_); } void AtomCommon::AddElement(const ElementPtr& element) { if (!element) { return; } // Explicit child elements. switch(element->Type()) { case Type_atomId: has_id_ = element->SetString(&id_); break; case Type_atomTitle: has_title_ = element->SetString(&title_); break; case Type_atomUpdated: has_updated_ = element->SetString(&updated_); break; case Type_AtomCategory: add_category(AsAtomCategory(element)); break; case Type_AtomLink: add_link(AsAtomLink(element)); break; default: Element::AddElement(element); } } void AtomCommon::Serialize(Serializer& serializer) const { Element::Serialize(serializer); if (has_id()) { serializer.SaveFieldById(Type_atomId, get_id()); } if (has_title()) { serializer.SaveFieldById(Type_atomTitle, get_title()); } if (has_updated()) { serializer.SaveFieldById(Type_atomUpdated, get_updated()); } serializer.SaveElementArray(category_array_); serializer.SaveElementArray(link_array_); } // <atom:entry> AtomEntry::AtomEntry() : has_summary_(false) { set_xmlns(kmlbase::XMLNS_ATOM); } AtomEntry::~AtomEntry() {} void AtomEntry::AddElement(const ElementPtr& element) { if (!element) { return; } switch(element->Type()) { case Type_atomSummary: has_summary_ = element->SetString(&summary_); break; case Type_AtomContent: set_content(AsAtomContent(element)); break; default: AtomCommon::AddElement(element); } } void AtomEntry::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); AtomCommon::Serialize(serializer); if (has_summary()) { serializer.SaveFieldById(Type_atomSummary, get_summary()); } if (has_content()) { serializer.SaveElement(get_content()); } } // <atom:feed> AtomFeed::AtomFeed() { set_xmlns(kmlbase::XMLNS_ATOM); } AtomFeed::~AtomFeed() {} void AtomFeed::add_entry(const AtomEntryPtr& atom_entry) { AddComplexChild(atom_entry, &entry_array_); } void AtomFeed::AddElement(const ElementPtr& element) { if (AtomEntryPtr entry = AsAtomEntry(element)) { add_entry(entry); } else { AtomCommon::AddElement(element); } } void AtomFeed::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); AtomCommon::Serialize(serializer); serializer.SaveElementArray(entry_array_); } // <atom:link> AtomLink::AtomLink() : has_href_(false), has_rel_(false), has_type_(false), has_hreflang_(false), has_title_(false), has_length_(false), length_(0) { set_xmlns(kmlbase::XMLNS_ATOM); } AtomLink::~AtomLink() {} void AtomLink::AddElement(const ElementPtr& element) { // Any element passed in here is by definition unknown, or "undefinedContent" // in the atom standard. Element::AddElement(element); } void AtomLink::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_href_ = attributes->CutValue(kHref, &href_); has_rel_ = attributes->CutValue(kRel, &rel_); has_type_ = attributes->CutValue(kType, &type_); has_hreflang_ = attributes->CutValue(kHrefLang, &hreflang_); has_title_ = attributes->CutValue(kTitle, &title_); has_length_ = attributes->CutValue(kLength, &length_); AddUnknownAttributes(attributes); } void AtomLink::SerializeAttributes(Attributes* attributes) const { Element::SerializeAttributes(attributes); if (has_href()) { attributes->SetValue(kHref, get_href()); } if (has_rel()) { attributes->SetValue(kRel, get_rel()); } if (has_type()) { attributes->SetValue(kType, get_type()); } if (has_hreflang()) { attributes->SetValue(kHrefLang, get_hreflang()); } if (has_title()) { attributes->SetValue(kTitle, get_title()); } if (has_length()) { attributes->SetValue(kLength, get_length()); } } void AtomLink::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); } } // end namespace kmldom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/atom.h���������������������������������������������������������������������0000664�0000000�0000000�00000030476�12636032571�0016246�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of Atom elements used in KML. // See: http://atompub.org/rfc4287.html. #ifndef KML_DOM_ATOM_H__ #define KML_DOM_ATOM_H__ #include "kml/dom/element.h" namespace kmldom { // <atom:author>, RFC 4287 4.2.1, and 3.2 (atomPersonConstruct) class AtomAuthor : public BasicElement<Type_AtomAuthor> { public: virtual ~AtomAuthor(); // <atom:name> const string& get_name() const { return name_; } bool has_name() const { return has_name_; } void set_name(const string& value) { name_ = value; has_name_ = true; } void clear_name() { name_.clear(); has_name_ = false; } // <atom:uri>, RFC 3987 const string& get_uri() const { return uri_; } bool has_uri() const { return has_uri_; } void set_uri(const string& value) { uri_ = value; has_uri_ = true; } void clear_uri() { uri_.clear(); has_uri_ = false; } // <atom:email>, RFC 2822 const string& get_email() const { return email_; } bool has_email() const { return has_email_; } void set_email(const string& value) { email_ = value; has_email_ = true; } void clear_email() { email_.clear(); has_email_ = false; } private: bool has_name_; string name_; bool has_uri_; string uri_; bool has_email_; string email_; friend class KmlFactory; AtomAuthor(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(AtomAuthor); }; // Elements common to <atom:feed> and <atom:entry>. class AtomCommon : public Element { public: // <atom:id> const string& get_id() const { return id_; } bool has_id() const { return has_id_; } void set_id(const string& value) { id_ = value; has_id_ = true; } void clear_id() { id_.clear(); has_id_ = false; } // <atom:title> const string& get_title() const { return title_; } bool has_title() const { return has_title_; } void set_title(const string& value) { title_ = value; has_title_ = true; } void clear_title() { title_.clear(); has_title_ = false; } // <atom:updated> const string& get_updated() const { return updated_; } bool has_updated() const { return has_updated_; } void set_updated(const string& value) { updated_ = value; has_updated_ = true; } void clear_updated() { updated_.clear(); has_updated_ = false; } // <atom:category>... void add_category(const AtomCategoryPtr& entry); size_t get_category_array_size() const { return category_array_.size(); } const AtomCategoryPtr& get_category_array_at(size_t index) const { return category_array_[index]; } // <atom:link>... void add_link(const AtomLinkPtr& entry); size_t get_link_array_size() const { return link_array_.size(); } const AtomLinkPtr& get_link_array_at(size_t index) const { return link_array_[index]; } protected: AtomCommon(); void AddElement(const ElementPtr& element); virtual void Serialize(Serializer& serializer) const; private: friend class KmlFactory; friend class KmlHandler; friend class Serializer; bool has_id_; string id_; bool has_title_; string title_; bool has_updated_; string updated_; std::vector<AtomCategoryPtr> category_array_; std::vector<AtomLinkPtr> link_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(AtomCommon); }; // <atom:category scheme="..." term="..." label=..."/>, RFC 4287 4.2.2 // NOTE: This element is not part of the OGC KML 2.2 standard. class AtomCategory : public BasicElement<Type_AtomCategory> { public: virtual ~AtomCategory(); // term= const string& get_term() const { return term_; } bool has_term() const { return has_term_; } void set_term(const string& value) { term_ = value; has_term_ = true; } void clear_term() { term_.clear(); has_term_ = false; } // scheme= const string& get_scheme() const { return scheme_; } bool has_scheme() const { return has_scheme_; } void set_scheme(const string& value) { scheme_ = value; has_scheme_ = true; } void clear_scheme() { scheme_.clear(); has_scheme_ = false; } // label= const string& get_label() const { return label_; } bool has_label() const { return has_label_; } void set_label(const string& value) { label_ = value; has_label_ = true; } void clear_label() { label_.clear(); has_label_ = false; } private: friend class KmlFactory; AtomCategory(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); virtual void ParseAttributes(kmlbase::Attributes* attributes); friend class Serializer; virtual void Serialize(Serializer& serializer) const; virtual void SerializeAttributes(kmlbase::Attributes* attributes) const; bool has_term_; string term_; bool has_scheme_; string scheme_; bool has_label_; string label_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(AtomCategory); }; // <atom:content src="..." type="...">, RFC 4287 4.1.3 // NOTE: This element is not part of the OGC KML 2.2 standard. class AtomContent : public BasicElement<Type_AtomContent> { public: virtual ~AtomContent(); // src= const string& get_src() const { return src_; } bool has_src() const { return has_src_; } void set_src(const string& value) { src_ = value; has_src_ = true; } void clear_src() { src_.clear(); has_src_ = false; } // type= const string& get_type() const { return type_; } bool has_type() const { return has_type_; } void set_type(const string& value) { type_ = value; has_type_ = true; } void clear_type() { type_.clear(); has_type_ = false; } private: friend class KmlFactory; AtomContent(); friend class KmlHandler; void ParseAttributes(kmlbase::Attributes* attributes); void SerializeAttributes(kmlbase::Attributes* attributes) const; friend class Serializer; virtual void Serialize(Serializer& serializer) const; bool has_src_; string src_; bool has_type_; string type_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(AtomContent); }; // <atom:entry>, RFC 4287 4.1.2 // NOTE: This element is not part of the OGC KML 2.2 standard. class AtomEntry : public AtomCommon { public: virtual ~AtomEntry(); virtual KmlDomType Type() const { return Type_AtomEntry; } virtual bool IsA(KmlDomType type) const { return type == Type_AtomEntry; } // This static method makes the class useable with ElementCast. static KmlDomType ElementType() { return static_cast<KmlDomType>(Type_AtomEntry); } // <atom:summary> const string& get_summary() const { return summary_; } bool has_summary() const { return has_summary_; } void set_summary(const string& value) { summary_ = value; has_summary_ = true; } void clear_summary() { summary_.clear(); has_summary_ = false; } // <atom:content> const AtomContentPtr& get_content() const { return content_; } bool has_content() const { return content_ != NULL; } void set_content(const AtomContentPtr& content) { SetComplexChild(content, &content_); } void clear_content() { set_content(NULL); } private: friend class KmlFactory; AtomEntry(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; bool has_summary_; string summary_; AtomContentPtr content_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(AtomEntry); }; // <atom:feed>, RFC 4287 4.1.1 // NOTE: This element is not part of the OGC KML 2.2 standard. class AtomFeed : public AtomCommon { public: virtual ~AtomFeed(); virtual KmlDomType Type() const { return Type_AtomFeed; } virtual bool IsA(KmlDomType type) const { return type == Type_AtomFeed; } // This static method makes the class useable with ElementCast. static KmlDomType ElementType() { return static_cast<KmlDomType>(Type_AtomFeed); } // <atom:entry>... void add_entry(const AtomEntryPtr& entry); size_t get_entry_array_size() const { return entry_array_.size(); } const AtomEntryPtr& get_entry_array_at(size_t index) const { return entry_array_[index]; } private: friend class KmlFactory; AtomFeed(); friend class Serializer; virtual void Serialize(Serializer& serializer) const; friend class KmlHandler; virtual void AddElement(const ElementPtr& element); std::vector<AtomEntryPtr> entry_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(AtomFeed); }; // <atom:link>, RFC 4287 4.2.7 class AtomLink : public BasicElement<Type_AtomLink> { public: virtual ~AtomLink(); // href=, RFC 4287 4.2.7.1, RFC 3987 const string& get_href() const { return href_; } bool has_href() const { return has_href_; } void set_href(const string& value) { href_ = value; has_href_ = true; } void clear_href() { href_.clear(); has_href_ = false; } // rel=, RFC 4287 4.2.7.2, RFC 3987 const string& get_rel() const { return rel_; } bool has_rel() const { return has_rel_; } void set_rel(const string& value) { rel_ = value; has_rel_ = true; } void clear_rel() { rel_.clear(); has_rel_ = false; } // type=, RFC 4287 4.2.7.3, MIME const string& get_type() const { return type_; } bool has_type() const { return has_type_; } void set_type(const string& value) { type_ = value; has_type_ = true; } void clear_type() { type_.clear(); has_type_ = false; } // hreflang=, RFC 4287 4.2.7.4, RFC 3066 const string& get_hreflang() const { return hreflang_; } bool has_hreflang() const { return has_hreflang_; } void set_hreflang(const string& value) { hreflang_ = value; has_hreflang_ = true; } void clear_hreflang() { hreflang_.clear(); has_hreflang_ = false; } // title=, RFC 4287 4.2.7.5 const string& get_title() const { return title_; } bool has_title() const { return has_title_; } void set_title(const string& value) { title_ = value; has_title_ = true; } void clear_title() { title_.clear(); has_title_ = false; } // length=, RFC 4287 4.2.7.6 int get_length() const { return length_; } bool has_length() const { return has_length_; } void set_length(const int value) { length_ = value; has_length_ = true; } void clear_length() { length_ = 0; has_length_ = false; } private: bool has_href_; string href_; bool has_rel_; string rel_; bool has_type_; string type_; bool has_hreflang_; string hreflang_; bool has_title_; string title_; bool has_length_; int length_; friend class KmlFactory; AtomLink(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); void ParseAttributes(kmlbase::Attributes* attributes); void SerializeAttributes(kmlbase::Attributes* attributes) const; friend class Serializer; virtual void Serialize(Serializer& serializer) const; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(AtomLink); }; } // end namespace kmldom #endif // KML_DOM_ATOM_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/balloonstyle.cc������������������������������������������������������������0000664�0000000�0000000�00000006222�12636032571�0020143�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the BalloonStyle element. #include "kml/dom/balloonstyle.h" #include "kml/base/attributes.h" #include "kml/dom/element.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; using kmlbase::Color32; namespace kmldom { BalloonStyle::BalloonStyle() : bgcolor_("ffffffff"), has_bgcolor_(false), textcolor_("ff000000"), has_textcolor_(false), has_text_(false), displaymode_(DISPLAYMODE_DEFAULT), has_displaymode_(false) { } BalloonStyle::~BalloonStyle() { } void BalloonStyle::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_bgColor: set_bgcolor(Color32(element->get_char_data())); break; case Type_textColor: set_textcolor(Color32(element->get_char_data())); break; case Type_text: has_text_ = element->SetString(&text_); break; case Type_displayMode: has_displaymode_ = element->SetEnum(&displaymode_); break; default: SubStyle::AddElement(element); break; } } void BalloonStyle::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); SubStyle::Serialize(serializer); if (has_bgcolor()) { serializer.SaveColor(Type_bgColor, get_bgcolor()); } if (has_textcolor()) { serializer.SaveColor(Type_textColor, get_textcolor()); } if (has_text()) { serializer.SaveFieldById(Type_text, get_text()); } if (has_displaymode()) { serializer.SaveEnum(Type_displayMode, get_displaymode()); } } void BalloonStyle::Accept(Visitor* visitor) { visitor->VisitBalloonStyle(BalloonStylePtr(this)); } } // end namespace kmldom ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/balloonstyle.h�������������������������������������������������������������0000664�0000000�0000000�00000007615�12636032571�0020014�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the BalloonStyle element. #ifndef KML_DOM_BALLOONSTYLE_H__ #define KML_DOM_BALLOONSTYLE_H__ #include "kml/base/color32.h" #include "kml/dom/substyle.h" #include "kml/dom/kml22.h" namespace kmldom { class Visitor; class BalloonStyle : public SubStyle { public: virtual ~BalloonStyle(); virtual KmlDomType Type() const { return Type_BalloonStyle; } virtual bool IsA(KmlDomType type) const { return type == Type_BalloonStyle || SubStyle::IsA(type); } // <bgColor> const kmlbase::Color32& get_bgcolor() const { return bgcolor_; } bool has_bgcolor() const { return has_bgcolor_; } void set_bgcolor(const kmlbase::Color32& bgcolor) { bgcolor_ = bgcolor; has_bgcolor_ = true; } void clear_bgcolor() { bgcolor_ = kmlbase::Color32(0xffffffff); has_bgcolor_ = false; } // <textColor> const kmlbase::Color32& get_textcolor() const { return textcolor_; } bool has_textcolor() const { return has_textcolor_; } void set_textcolor(const kmlbase::Color32& textcolor) { textcolor_ = textcolor; has_textcolor_ = true; } void clear_textcolor() { textcolor_ = kmlbase::Color32(0xff000000); has_textcolor_ = false; } // <text> const string& get_text() const { return text_; } bool has_text() const { return has_text_; } void set_text(const string& text) { text_ = text; has_text_ = true; } void clear_text() { text_.clear(); has_text_ = false; } // <displayMode> int get_displaymode() const { return displaymode_; } bool has_displaymode() const { return has_displaymode_; } void set_displaymode(int displaymode) { displaymode_ = displaymode; has_displaymode_ = true; } void clear_displaymode() { displaymode_ = DISPLAYMODE_DEFAULT; has_displaymode_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; BalloonStyle(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serialize) const; kmlbase::Color32 bgcolor_; bool has_bgcolor_; kmlbase::Color32 textcolor_; bool has_textcolor_; string text_; bool has_text_; int displaymode_; bool has_displaymode_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(BalloonStyle); }; } // end namespace kmldom #endif // KML_DOM_BALLOONSTYLE_H__ �������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/colorstyle.cc��������������������������������������������������������������0000664�0000000�0000000�00000004713�12636032571�0017636�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the ColorStyle element. #include "kml/dom/colorstyle.h" #include "kml/dom/element.h" #include "kml/dom/serializer.h" using kmlbase::Color32; namespace kmldom { ColorStyle::ColorStyle() : color_(Color32(0xffffffff)), has_color_(false), colormode_(COLORMODE_NORMAL), has_colormode_(false) { } ColorStyle::~ColorStyle() {} void ColorStyle::AddElement(const ElementPtr& element) { switch (element->Type()) { case Type_color: set_color(Color32(element->get_char_data())); break; case Type_colorMode: has_colormode_ = element->SetEnum(&colormode_); break; default: SubStyle::AddElement(element); break; } } void ColorStyle::Serialize(Serializer& serializer) const { SubStyle::Serialize(serializer); if (has_color()) { serializer.SaveColor(Type_color, get_color()); } if (has_colormode()) { serializer.SaveEnum(Type_colorMode, get_colormode()); } } } // end namespace kmldom �����������������������������������������������������libkml-1.3.0/src/kml/dom/colorstyle.h���������������������������������������������������������������0000664�0000000�0000000�00000006134�12636032571�0017477�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the ColorStyle element. #ifndef KML_DOM_COLORSTYLE_H__ #define KML_DOM_COLORSTYLE_H__ #include "kml/dom/substyle.h" #include "kml/base/color32.h" #include "kml/dom/kml22.h" #include "kml/base/util.h" namespace kmldom { // OGC KML 2.2 Standard: 12.7 kml:AbstractColorStyleGroup // OGC KML 2.2 XSD: <element name="AbstractColorStyleGroup"... class ColorStyle : public SubStyle { public: virtual ~ColorStyle(); virtual KmlDomType Type() const { return Type_ColorStyle; } virtual bool IsA(KmlDomType type) const { return type == Type_ColorStyle || SubStyle::IsA(type); } // <color> const kmlbase::Color32& get_color() const { return color_; } bool has_color() const { return has_color_; } void set_color(const kmlbase::Color32& color) { color_ = color; has_color_ = true; } void clear_color() { color_ = kmlbase::Color32(0xffffffff); has_color_ = false; } // <colorMode> int get_colormode() const { return colormode_; } bool has_colormode() const { return has_colormode_; } void set_colormode(int colormode) { colormode_ = colormode; has_colormode_ = true; } void clear_colormode() { colormode_ = COLORMODE_NORMAL; has_colormode_ = false; } protected: // ColorStyle is abstract. ColorStyle(); virtual void AddElement(const ElementPtr& element); virtual void Serialize(Serializer& serializer) const; private: kmlbase::Color32 color_; bool has_color_; int colormode_; bool has_colormode_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(ColorStyle); }; } // end namespace kmldom #endif // KML_COLORSTYLE_H_ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/container.cc���������������������������������������������������������������0000664�0000000�0000000�00000006527�12636032571�0017426�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the abstract Container element. #include "kml/dom/container.h" #include "kml/dom/feature.h" #include "kml/dom/kml_cast.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/serializer.h" namespace kmldom { Container::Container() {} Container::~Container() { // feature_array_'s destructor calls the destructor of each FeaturePtr // releasing the reference and potentially freeing the Feature storage. } void Container::add_feature(const FeaturePtr& feature) { AddComplexChild(feature, &feature_array_); } void Container::AddElement(const ElementPtr& element) { if (FeaturePtr feature = AsFeature(element)) { add_feature(feature); } else { Feature::AddElement(element); } } // This exists for the benefit of Document which has special serialization // needs. See document.cc. void Container::SerializeFeatureArray(Serializer& serializer) const { serializer.SaveElementGroupArray(feature_array_, Type_Feature); } void Container::Serialize(Serializer& serializer) const { Feature::Serialize(serializer); SerializeFeatureArray(serializer); } FeaturePtr Container::DeleteFeatureById(const string& id) { // TODO: push all this to Element to properly/centrally remove parent. std::vector<FeaturePtr>::iterator iter = feature_array_.begin(); for (; iter != feature_array_.end(); ++iter) { FeaturePtr feature = *iter; if (feature->has_id() && id == feature->get_id()) { // TODO: if Container is in a KmlFile remove Feature from object map feature_array_.erase(iter); return feature; } } return NULL; } FeaturePtr Container::DeleteFeatureAt(size_t i) { return Element::DeleteFromArrayAt(&feature_array_, i); } void Container::AcceptChildren(VisitorDriver* driver) { Feature::AcceptChildren(driver); Element::AcceptRepeated<FeaturePtr>(&feature_array_, driver); } } // end namespace kmldom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/container.h����������������������������������������������������������������0000664�0000000�0000000�00000007405�12636032571�0017264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_CONTAINER_H__ #define KML_DOM_CONTAINER_H__ #include <vector> #include "kml/dom/feature.h" #include "kml/dom/kml22.h" #include "kml/base/util.h" namespace kmldom { class Serializer; class VisitorDriver; // OGC KML 2.2 Standard: 9.6 kml:AbstractContainerGroup // OGC KML 2.2 XSD: <element name="AbstractContainerGroup"... class Container : public Feature { public: virtual ~Container(); virtual KmlDomType Type() const { return Type_Container; } virtual bool IsA(KmlDomType type) const { return type == Type_Container || Feature::IsA(type); } void add_feature(const FeaturePtr& feature); size_t get_feature_array_size() const { return feature_array_.size(); } const FeaturePtr& get_feature_array_at(size_t index) const { return feature_array_[index]; } // The following two methods delete a Feature from the Container. If the // id='ed or index'ed Feature exists a pointer to it is returned and it is // removed from the Container. This Feature can be used by client code as // as normal including use in any client code container; however it cannot // be added back to any dom parent. At present the only way to detach a // Feature to be moved elsewhere in the dom is to clone it: see // kmlengine::Clone(). To effect a full delete the caller simply ignores // the returned pointer and normal smart pointer semantics deletes the // feature and all of its children. If no such Feature exists NULL is // returned. // This variant of DeleteFeature is method is a special mostly for use with // Update/Delete. See above for general comments about DeleteFeature*(). FeaturePtr DeleteFeatureById(const string& id); // Delete a Feature from the Container by offset. See above for general // comments about DeleteFeature*(). FeaturePtr DeleteFeatureAt(size_t index); // Visitor API methods, see visitor.h. virtual void AcceptChildren(VisitorDriver* driver); protected: // Container is abstract. Container(); virtual void AddElement(const ElementPtr& element); void SerializeFeatureArray(Serializer& serializer) const; virtual void Serialize(Serializer& serializer) const; private: std::vector<FeaturePtr> feature_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Container); }; } // end namespace kmldom #endif // KML_CONTAINER_H_ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/document.cc����������������������������������������������������������������0000664�0000000�0000000�00000005667�12636032571�0017266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/document.h" #include "kml/base/attributes.h" #include "kml/dom/kml_cast.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { Document::Document() {} Document::~Document() {} void Document::AddElement(const ElementPtr& element) { if (SchemaPtr schema = AsSchema(element)) { add_schema(schema); } else if (StyleSelectorPtr styleselector = AsStyleSelector(element)) { add_styleselector(styleselector); } else { Container::AddElement(element); } } // Due to Document being the only Feature with a StyleSelectorArray we have to // take some matters into our own hands here and reach up into Feature and // Container to serialize in XSD order. void Document::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Feature::SerializeBeforeStyleSelector(serializer); serializer.SaveElementGroupArray(styleselector_array_, Type_StyleSelector); Feature::SerializeAfterStyleSelector(serializer); serializer.SaveElementArray(schema_array_); Container::SerializeFeatureArray(serializer); } void Document::Accept(Visitor* visitor) { visitor->VisitDocument(DocumentPtr(this)); } void Document::AcceptChildren(VisitorDriver* driver) { Container::AcceptChildren(driver); Element::AcceptRepeated<SchemaPtr>(&schema_array_, driver); Element::AcceptRepeated<StyleSelectorPtr>(&styleselector_array_, driver); } } // end namespace kmldom �������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/document.h�����������������������������������������������������������������0000664�0000000�0000000�00000007315�12636032571�0017120�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_DOCUMENT_H__ #define KML_DOM_DOCUMENT_H__ #include <vector> #include "kml/dom/container.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/schema.h" #include "kml/dom/styleselector.h" namespace kmldom { class Visitor; class VisitorDriver; class Document : public Container { public: virtual ~Document(); virtual KmlDomType Type() const { return Type_Document; } virtual bool IsA(KmlDomType type) const { return type == Type_Document || Container::IsA(type); } // <Schema> void add_schema(const SchemaPtr& schema) { AddComplexChild(schema, &schema_array_); } size_t get_schema_array_size() const { return schema_array_.size(); } const SchemaPtr& get_schema_array_at(size_t index) const { return schema_array_[index]; } SchemaPtr DeleteSchemaAt(size_t index) { return Element::DeleteFromArrayAt(&schema_array_, index); } // <Style> and <StyleMap> void add_styleselector(const StyleSelectorPtr& styleselector) { AddComplexChild(styleselector, &styleselector_array_); } size_t get_styleselector_array_size() const { return styleselector_array_.size(); } const StyleSelectorPtr& get_styleselector_array_at(size_t index) const { return styleselector_array_[index]; } StyleSelectorPtr DeleteStyleSelectorAt(size_t index) { return Element::DeleteFromArrayAt(&styleselector_array_, index); } // Note: If Document contains a StyleSelector, it is appended to Document's // array of StyleSelectors and is NOT handed up to Feature. The current // KML Spec/XSD is incorrect in that it gives any Feature this array // behaviour. Any Feature other than Document may have only ONE StyleSelector. // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Document(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; std::vector<SchemaPtr> schema_array_; std::vector<StyleSelectorPtr> styleselector_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Document); }; } // end namespace kmldom #endif // KML_DOM_DOCUMENT_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/element.cc�����������������������������������������������������������������0000664�0000000�0000000�00000015576�12636032571�0017101�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementations of the Element and Field classes. #include "kml/dom/element.h" #include <stdlib.h> #include "kml/base/attributes.h" #include "kml/base/string_util.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" #include "kml/dom/xsd.h" using kmlbase::Attributes; using kmlbase::XmlElement; namespace kmldom { Element::Element() : type_id_(Type_Unknown) { } Element::Element(KmlDomType type_id) : type_id_(type_id) { } Element::~Element() { } // Anything reaching this level is an known (KML) element found in an illegal // position during parse. We will store it for later serialiation. void Element::AddElement(const ElementPtr& element) { unknown_legal_elements_array_.push_back(element); } // Anything that reaches this level of the hierarchy is an unknown (non-KML) // element found during parse. void Element::AddUnknownElement(const string& s) { unknown_elements_array_.push_back(s); } // Serialize at this level is expected to handle only the unknown elements // we discovered during parse. void Element::SerializeUnknown(Serializer& serializer) const { // First serialize the misplaced elements: for (size_t i = 0; i < unknown_legal_elements_array_.size(); ++i) { // Anything derived from Element implements a Serialize() method. unknown_legal_elements_array_[i]->Serialize(serializer); } // Now serialize unknown elements: // Announce to the Serializer that the next N SaveContent() are each // unparsed xml. size_t unknown_size = unknown_elements_array_.size(); if (unknown_size > 0) { serializer.BeginElementArray(Type_Unknown, unknown_size); for (size_t i = 0; i < unknown_size; ++i) { serializer.Indent(); // This is raw XML do not try to CDATA escape it. serializer.SaveContent(unknown_elements_array_[i], false); } serializer.EndElementArray(Type_Unknown); } } // Handling of unknown attributes found during parse. Split out // xmlns attributes. Take ownership of the passed attributes object. void Element::AddUnknownAttributes(Attributes* attributes) { if (attributes) { // Split out any attribute of the form xmlns:PREFIX=. if (Attributes* xmlns = attributes->SplitByPrefix("xmlns")) { if (xmlns_.get()) { xmlns_->MergeAttributes(*xmlns); delete xmlns; } else { xmlns_.reset(xmlns); } } // Split out xmlns= itself. string xmlns; if (attributes->CutValue("xmlns", &xmlns)) { if (!xmlns_.get()) { xmlns_.reset(new Attributes); } // "xmlns" can never be an xml namespace prefix. xmlns_->SetValue("xmlns", xmlns); } // Anything left is saved as fully unknown. if (attributes->GetSize() == 0) { delete attributes; // Nothing left so delete it. } else { unknown_attributes_.reset(attributes); } } } // This default implementation for elements that otherwise have no attributes // to parse simply add all attributes to the unknown attributes held in Element // for later retreival with GetUnknownAttributes(). void Element::ParseAttributes(Attributes* attributes) { AddUnknownAttributes(attributes); } // This is the reverse of ParseAttributes(). void Element::SerializeAttributes(Attributes* attributes) const { if (attributes) { if (unknown_attributes_.get()) { attributes->MergeAttributes(*unknown_attributes_); } if (xmlns_.get()) { kmlbase::StringMapIterator iter = xmlns_->CreateIterator(); for (; !iter.AtEnd(); iter.Advance()) { string key = iter.Data().first == "xmlns" ? iter.Data().first : string("xmlns:") + iter.Data().first; attributes->SetValue(key, iter.Data().second); } } } } ElementPtr Element::GetParent() const { return AsElement(const_cast<XmlElement*>(XmlElement::GetParent())); } void Element::MergeXmlns(const Attributes& xmlns) { if (!xmlns_.get()) { xmlns_.reset(new Attributes); } xmlns_->MergeAttributes(xmlns); } ElementSerializer::ElementSerializer(const Element& element, Serializer& serializer) : element_(element), serializer_(serializer) { Attributes attributes; element_.SerializeAttributes(&attributes); serializer.BeginById(element_.Type(), attributes); } ElementSerializer::~ElementSerializer() { element_.SerializeUnknown(serializer_); serializer_.End(); } void Element::Accept(Visitor* visitor) { visitor->VisitElement(ElementPtr(this)); } Field::Field(KmlDomType type_id) : Element(type_id), xsd_(*Xsd::GetSchema()) { } void Field::Serialize(Serializer& serializer) const { serializer.SaveFieldById(Type(), get_char_data()); } bool Field::SetBool(bool* val) { bool ret = false; if (val) { kmlbase::FromString(get_char_data(), val); ret = true; } return ret; } bool Field::SetDouble(double* val) { bool ret = false; if (val) { kmlbase::FromString(get_char_data(), val); ret = true; } return ret; } bool Field::SetInt(int* val) { bool ret = false; if (val) { kmlbase::FromString(get_char_data(), val); ret = true; } return ret; } bool Field::SetEnum(int* enum_val) { bool ret = false; if (enum_val) { int val = xsd_.EnumId(Type(), get_char_data()); if (val != -1) { *enum_val = val; ret = true; } } return ret; } bool Field::SetString(string* val) { bool ret = false; if (val) { *val = get_char_data(); ret = true; } return ret; } } // namespace kmldom ����������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/element.h������������������������������������������������������������������0000664�0000000�0000000�00000032126�12636032571�0016731�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the Element and Field classes. // The Element class is the base class for the KML Object Model. All // KML complex elements are derived from this class. As the Element class // members wnd methods indicate an Element always has a given type id, and // a single parent Element. Element itself holds all unknown XML for a given // KML element including completely unknown XML, misplaced KML, // and unknown attributes. During parse a simple element is held for // a short time in the Field specialization of Element. #ifndef KML_DOM_ELEMENT_H__ #define KML_DOM_ELEMENT_H__ #include <vector> #include "boost/scoped_ptr.hpp" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/visitor_driver.h" #include "kml/base/util.h" #include "kml/base/xml_element.h" namespace kmlbase { class Attributes; } namespace kmldom { class Serializer; class Visitor; class Xsd; // This is a KML-specific implementation of the somewhat abstracted // kmlbase::XmlElement. class Element : public kmlbase::XmlElement { public: virtual ~Element(); virtual KmlDomType Type() const { return type_id_; } virtual bool IsA(KmlDomType type) const { return type == type_id_; } // This returns the element of which this is a child (if any). ElementPtr GetParent() const; // This is the concatenation of all character data found parsing this element. const string& get_char_data() const { return char_data_; } void set_char_data(const string& char_data) { char_data_ = char_data; } // TODO: AddElement() and ParseAttributes() should really be protected. // A derived class implements this to use with parsing. Element is // either a complex or simple element which the given concrete element // can accept. If the given element is a valid child the concrete element // takes ownership. The given element is attached to the concrete parent // if it is a valid complex child. If the element is a simple element // the character data is converted to the appropropriate simple type // and the passed element is discarded. If the passed element is not // a valid child of the given concrete element the AddElement method // there should pass this up to its parent for consideration. A misplaced // element will ultimately be attached to Element itself. virtual void AddElement(const ElementPtr& element); // A derived class implements this to use with parsing. A given concrete // element examines the passed attributes for any it is aware of and // passes the attributes to its parent class and ultimately to Element // itself to preserve unknown attributes. The caller takes ownership of // the passed attributes class instance and is expected to erase any items // it parses. virtual void ParseAttributes(kmlbase::Attributes* attributes); // A derived class implements this to use with serialization. See // class Serializer for more information. virtual void Serialize(Serializer& /*serialize*/ ) const {} // A derived class uses this to use with serialization. The derived // class adds its attributes to the given set and passes attributes // along to the parent and utlimately to Element itself to preserve // unknown attributes. virtual void SerializeAttributes(kmlbase::Attributes* attributes) const; // Each fully unknown element (and its children) is saved in raw XML form. void AddUnknownElement(const string& s); // Called by concrete elements to serialize unknown and/or misplaced // elements discovered at parse time. void SerializeUnknown(Serializer& serializer) const; // Returns the unknown elements. size_t get_unknown_elements_array_size() const { return unknown_elements_array_.size(); } const string& get_unknown_elements_array_at(size_t i) const { return unknown_elements_array_[i]; } // Returns the unknown legal (misplaced) elements. size_t get_misplaced_elements_array_size() const { return unknown_legal_elements_array_.size(); } const ElementPtr& get_misplaced_elements_array_at(size_t i) const { return unknown_legal_elements_array_[i]; } // Add the given set of attributes to the element's unknown attributes. // Element takes ownership of attributes. void AddUnknownAttributes(kmlbase::Attributes* attributes); // This returns a pointer to the Attributes class holding all unknown // attributes for this element found during parse. This returns NULL if // there are no unparsed attributes. Ownership of the object is retained // by the Element class. const kmlbase::Attributes* GetUnknownAttributes() const { return unknown_attributes_.get(); } // This is the set of xmlns:PREFIX=NAMESPACE attributes on the // element if any. The attribute keys are without the "xmlns:" prefix. // The default namespace is merely an "unknown" attribute // of "xmlns" in the normal "unknown" attributes list. Use // get_default_xmlns() to access the default namespace for an element. const kmlbase::Attributes* GetXmlns() const { return xmlns_.get(); } // This merges in the given set of prefix/namespace attributes into the // the xml namespaces set for this element. Each prefix is is _just_ the // namespace prefix. Each prefix added here appears in the // SerializeAttributeswith a "xmlns:" prepended. void MergeXmlns(const kmlbase::Attributes& xmlns); // Permits polymorphic use of Field methods. virtual bool SetBool(bool* /*val*/) { return false; } virtual bool SetDouble(double* /*val*/) { return false; } virtual bool SetInt(int* /*val*/) { return false; } virtual bool SetEnum(int* /*val*/) { return false; } virtual bool SetString(string* /*val*/) { return false; } // Accepts the visitor for this element (this must be overridden for each // element type). // TODO(dbeaumont): Make pure virtual when all sub-classes implement Accept(). virtual void Accept(Visitor* visitor); // This needs to be implemented by subclasses with child elements and must // call its parent's implementation first. The default implementation does // nothing. virtual void AcceptChildren(VisitorDriver* /*driver*/) { /* Inlinable for efficiency */ } protected: // Element is an abstract base class and is never created directly. Element(); Element(KmlDomType type_id); // This sets the given complex child to a field of this element. // The intended usage is to implement the set_child() and clear_child() // methods in a concrete element. template <class T> bool SetComplexChild(const T& child, T* field) { if (child == NULL) { // TODO: remove child and children from ID maps... *field = NULL; // Assign removes reference and possibly deletes Element. return true; } else if (child->SetParent(this)) { *field = child; // This first releases the reference to previous field. return true; } return false; } // This adds the given complex child to an array in this element. template <class T> bool AddComplexChild(const T& child, std::vector<T>* vec) { // NULL child ignored. if (child && child->SetParent(this)) { vec->push_back(child); return true; } return false; } // Allows subclasses to easily visit repeated fields. template <class T> static void AcceptRepeated(std::vector<T>* elements, VisitorDriver* driver) { typename std::vector<T>::iterator it; for (it = elements->begin(); it != elements->end(); ++it) { driver->Visit(*it); } } // This is the internal implementation of the various DeleteTAt() methods. template <class T> static T DeleteFromArrayAt(std::vector<T>* array, size_t i) { if (!array || i >= array->size()) { return NULL; } T e = (*array)[i]; array->erase(array->begin() + i); // TODO: notify e's XmlFile about the delete (kmlengine::KmlFile, for // example would want to remove e from its internal maps). // TODO: disparent e return e; } private: KmlDomType type_id_; string char_data_; // A vector of strings to contain unknown non-KML elements discovered during // parse. std::vector<string> unknown_elements_array_; // A vector of Element*'s to contain known KML elements found during parse // to be in illegal positions, e.g. <Placemark><Document>. std::vector<ElementPtr> unknown_legal_elements_array_; // Unknown attributes found during parse are copied out and a pointer is // stored. The object is dynamically allocated so every element is not // burdened with an unnecessary Attributes object. boost::scoped_ptr<kmlbase::Attributes> unknown_attributes_; // Any Element may have 0 or more xmlns attributes. boost::scoped_ptr<kmlbase::Attributes> xmlns_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Element); }; // This class implements common code for use in serializing most elements. // Intended usage is as follows: // ConcreteElement::Serialize(Serializer& serializer) const { // ElementSerializer element_serializer(Type(), serializer); // // serialize each child element and/or field // // ElementSerializer dtor ends serialization properly. // } class ElementSerializer { public: ElementSerializer(const Element& element, Serializer& serializer); ~ElementSerializer(); private: const Element& element_; Serializer& serializer_; }; // This class template is essentially common code for all elements based // directly on Element. template<int I> class BasicElement : public Element { public: // This static method makes the class useable with ElementCast. static KmlDomType ElementType() { return static_cast<KmlDomType>(I); } virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType(); } }; // A field is generally short lived and holds the element id and character data // for that field during parse. When a Field is presented to AddElement() and // is recognized by a parent element that parent typically copies the value of // the Field to a field held within the parent. However, when a "misplaced" // field is parsed it is held in this form in Element's misplaced elements // list. Known child fields are serialized by their parents, but a Serialize // method implementation is provided specifically to provide a means to // serialize a Field held in an Element's misplaced elements list. For // example, <snippet> is a known element and is parsed initially into a Field, // but since no element accepts <snippet> this results in a <snippet> Field in // the parent element's misplaced elements list. class Field : public Element { public: Field(KmlDomType type_id); // Serialize this Field to the given serializer. See the class comment above // for when this is used. virtual void Serialize(Serializer& serialize) const; // Sets the given bool from the character data. If no val pointer is // supplied false is returned, else true is returned and the val is set. bool SetBool(bool* val); // Sets the given double from the character data. If no val pointer is // supplied false is returned, else true is returned and the val is set. bool SetDouble(double *val); // Sets the given int from the character data. If no val pointer is // supplied false is returned, else true is returned and the val is set. bool SetInt(int* val); // Sets the given enum from the character data. If no val pointer is // supplied false is returned, else true is returned and the val is set. bool SetEnum(int* enum_val); // Sets the given string from the character data. If no val pointer is // supplied false is returned, else true is returned and the val is set. bool SetString(string* val); private: const Xsd& xsd_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Field); }; } // namespace kmldom #endif // KML_DOM_ELEMENT_H__ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/extendeddata.cc������������������������������������������������������������0000664�0000000�0000000�00000021412�12636032571�0020064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the ExtendedData, SimpleData, // SchemaData and Data element. #include "kml/dom/extendeddata.h" #include "kml/base/attributes.h" #include "kml/base/xml_namespaces.h" #include "kml/dom/kml_cast.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/serializer.h" #include "kml/dom/xsd.h" using kmlbase::Attributes; namespace kmldom { // <SimpleData> SimpleData::SimpleData() : has_name_(false), has_text_(false) { set_xmlns(kmlbase::XMLNS_KML22); } SimpleData::~SimpleData() {} static const char kSimpleDataName[] = "name"; void SimpleData::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_name_ = attributes->CutValue(kSimpleDataName, &name_); AddUnknownAttributes(attributes); } void SimpleData::SerializeAttributes(Attributes* attributes) const { Element::SerializeAttributes(attributes); if (has_name_) { attributes->SetValue(kSimpleDataName, name_); } } // SimpleData needs to parse its own character data (like Snippet). void SimpleData::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_SimpleData) { set_text(get_char_data()); } else { // We have a known KML element inside <SimpleData> and need to store it. Element::AddElement(element); } } void SimpleData::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); if (has_text()) { serializer.SaveContent(text_, true); } } void SimpleData::Accept(Visitor* visitor) { visitor->VisitSimpleData(SimpleDataPtr(this)); } /////////////////////////////////////////////// // <GxSimpleArrayData> GxSimpleArrayData::GxSimpleArrayData() : has_name_(false) { set_xmlns(kmlbase::XMLNS_GX22); } GxSimpleArrayData::~GxSimpleArrayData() {} static const char kGxSimpleArrayDataName[] = "name"; void GxSimpleArrayData::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_name_ = attributes->CutValue(kGxSimpleArrayDataName, &name_); AddUnknownAttributes(attributes); } void GxSimpleArrayData::SerializeAttributes(Attributes* attributes) const { Element::SerializeAttributes(attributes); if (has_name_) { attributes->SetValue(kGxSimpleArrayDataName, name_); } } void GxSimpleArrayData::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_GxValue) { add_gx_value(element->get_char_data()); } else { Element::AddElement(element); } } void GxSimpleArrayData::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); for (size_t i = 0; i < gx_value_array_.size(); i++) { serializer.SaveFieldById(Type_GxValue, get_gx_value_array_at(i)); } } void GxSimpleArrayData::Accept(Visitor* visitor) { visitor->VisitGxSimpleArrayData(GxSimpleArrayDataPtr(this)); } // <SchemaData> SchemaData::SchemaData() : has_schemaurl_(false) { set_xmlns(kmlbase::XMLNS_KML22); } SchemaData::~SchemaData() { // simpledata_array_'s destructor calls the destructor of each SimpleDataPtr // releasing the reference and potentially freeing the SimpleData storage. } static const char kSchemaUrl[] = "schemaUrl"; void SchemaData::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_schemaurl_ = attributes->CutValue(kSchemaUrl, &schemaurl_); Object::ParseAttributes(attributes); } void SchemaData::SerializeAttributes(Attributes* attributes) const { Object::SerializeAttributes(attributes); if (has_schemaurl_) { attributes->SetValue(kSchemaUrl, schemaurl_); } } void SchemaData::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_SimpleData: add_simpledata(AsSimpleData(element)); break; case Type_GxSimpleArrayData: add_gx_simplearraydata(AsGxSimpleArrayData(element)); break; default: Object::AddElement(element); } } void SchemaData::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); serializer.SaveElementArray(simpledata_array_); serializer.SaveElementArray(gx_simplearraydata_array_); } void SchemaData::Accept(Visitor* visitor) { visitor->VisitSchemaData(SchemaDataPtr(this)); } void SchemaData::AcceptChildren(VisitorDriver* driver) { Object::AcceptChildren(driver); Element::AcceptRepeated<SimpleDataPtr>(&simpledata_array_, driver); Element::AcceptRepeated<GxSimpleArrayDataPtr>(&gx_simplearraydata_array_, driver); } // <Data> Data::Data() : has_name_(false), has_displayname_(false), has_value_(false) { set_xmlns(kmlbase::XMLNS_KML22); } Data::~Data() {} static const char kDataName[] = "name"; void Data::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_name_ = attributes->CutValue(kDataName, &name_); Object::ParseAttributes(attributes); } void Data::SerializeAttributes(Attributes* attributes) const { Object::SerializeAttributes(attributes); if (has_name_) { attributes->SetValue(kDataName, name_); } } void Data::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_displayName) { has_displayname_ = element->SetString(&displayname_); } else if (element->Type() == Type_value) { has_value_ = element->SetString(&value_); } else { Object::AddElement(element); } } void Data::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); if (has_displayname()) { serializer.SaveFieldById(Type_displayName, get_displayname()); } if (has_value()) { serializer.SaveFieldById(Type_value, get_value()); } } void Data::Accept(Visitor* visitor) { visitor->VisitData(DataPtr(this)); } // <ExtendedData> ExtendedData::ExtendedData() { set_xmlns(kmlbase::XMLNS_KML22); } ExtendedData::~ExtendedData() { // data_array_'s and schemadata_array_'s destructors call the destructor of // each DataPtr and SchemaDataPtr, releasing the references and potentially // freeing the SchemaData and Data storage. } void ExtendedData::AddElement(const ElementPtr& element) { if (!element) { return; } if (DataPtr data = AsData(element)) { add_data(data); } else if (SchemaDataPtr schemadata = AsSchemaData(element)) { add_schemadata(schemadata); } else { Element::AddElement(element); } } void ExtendedData::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); serializer.SaveElementArray(data_array_); serializer.SaveElementArray(schemadata_array_); } void ExtendedData::Accept(Visitor* visitor) { visitor->VisitExtendedData(ExtendedDataPtr(this)); } void ExtendedData::AcceptChildren(VisitorDriver* driver) { Element::AcceptChildren(driver); Element::AcceptRepeated<DataPtr>(&data_array_, driver); Element::AcceptRepeated<SchemaDataPtr>(&schemadata_array_, driver); } // <Metadata> Metadata::Metadata() { set_xmlns(kmlbase::XMLNS_KML22); } Metadata::~Metadata() { } void Metadata::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); } void Metadata::Accept(Visitor* visitor) { visitor->VisitMetadata(MetadataPtr(this)); } } // end namespace kmldom ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/extendeddata.h�������������������������������������������������������������0000664�0000000�0000000�00000023324�12636032571�0017732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations of the SimpleData, SchemaData, // Data, and ExtendedData elements. #ifndef KML_DOM_EXTENDEDDATA_H__ #define KML_DOM_EXTENDEDDATA_H__ #include <vector> #include "kml/dom/element.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/object.h" #include "kml/base/util.h" namespace kmlbase { class Attributes; } namespace kmldom { class Visitor; class VisitorDriver; // <SimpleData> class SimpleData : public BasicElement<Type_SimpleData> { public: virtual ~SimpleData(); // name= const string& get_name() const { return name_; } bool has_name() const { return has_name_; } void set_name(const string& value) { name_ = value; has_name_ = true; } void clear_name() { name_.clear(); has_name_ = false; } // char data const string& get_text() const { return text_; } bool has_text() const { return has_text_; } void set_text(const string& value) { text_ = value; has_text_ = true; } void clear_text() { text_.clear(); has_text_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; SimpleData(); friend class KmlHandler; virtual void ParseAttributes(kmlbase::Attributes* attributes); virtual void AddElement(const ElementPtr& child); friend class Serializer; virtual void Serialize(Serializer& serializer) const; virtual void SerializeAttributes(kmlbase::Attributes* attributes) const; string name_; bool has_name_; string text_; bool has_text_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(SimpleData); }; // <gx:SimpleArrayData> class GxSimpleArrayData : public BasicElement<Type_GxSimpleArrayData> { public: virtual ~GxSimpleArrayData(); // name= const string& get_name() const { return name_; } bool has_name() const { return has_name_; } void set_name(const string& value) { name_ = value; has_name_ = true; } void clear_name() { name_.clear(); has_name_ = false; } // <gx:value> void add_gx_value(const string& value) { gx_value_array_.push_back(value); } size_t get_gx_value_array_size() const { return gx_value_array_.size(); } const string& get_gx_value_array_at(size_t index) const { return gx_value_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; GxSimpleArrayData(); friend class KmlHandler; virtual void ParseAttributes(kmlbase::Attributes* attributes); virtual void AddElement(const ElementPtr& child); friend class Serializer; virtual void Serialize(Serializer& serializer) const; virtual void SerializeAttributes(kmlbase::Attributes* attributes) const; string name_; bool has_name_; std::vector<string> gx_value_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxSimpleArrayData); }; // <SchemaData> class SchemaData : public Object { public: virtual ~SchemaData(); virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType() || Object::IsA(type); } static KmlDomType ElementType() { return Type_SchemaData; } // schemaUrl= const string& get_schemaurl() const { return schemaurl_; } bool has_schemaurl() const { return has_schemaurl_; } void set_schemaurl(const string& value) { schemaurl_ = value; has_schemaurl_ = true; } void clear_schemaurl() { schemaurl_.clear(); has_schemaurl_ = false; } void add_simpledata(const SimpleDataPtr& simpledata) { AddComplexChild(simpledata, &simpledata_array_); } size_t get_simpledata_array_size() const { return simpledata_array_.size(); } const SimpleDataPtr& get_simpledata_array_at(size_t index) const { return simpledata_array_[index]; } void add_gx_simplearraydata( const GxSimpleArrayDataPtr& gx_simplearraydata) { AddComplexChild(gx_simplearraydata, &gx_simplearraydata_array_); } size_t get_gx_simplearraydata_array_size() const { return gx_simplearraydata_array_.size(); } const GxSimpleArrayDataPtr& get_gx_simplearraydata_array_at( size_t index) const { return gx_simplearraydata_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; SchemaData(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); virtual void ParseAttributes(kmlbase::Attributes* attributes); friend class ExtendedData; friend class Serializer; virtual void Serialize(Serializer& serializer) const; virtual void SerializeAttributes(kmlbase::Attributes* attributes) const; string schemaurl_; bool has_schemaurl_; std::vector<SimpleDataPtr> simpledata_array_; std::vector<GxSimpleArrayDataPtr> gx_simplearraydata_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(SchemaData); }; // <Data> class Data : public Object { public: virtual ~Data(); virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType() || Object::IsA(type); } static KmlDomType ElementType() { return Type_Data; } // name= const string& get_name() const { return name_; } bool has_name() const { return has_name_; } void set_name(const string& value) { name_ = value; has_name_ = true; } void clear_name() { name_.clear(); has_name_ = false; } // <displayname> const string& get_displayname() const { return displayname_; } bool has_displayname() const { return has_displayname_; } void set_displayname(const string& value) { displayname_ = value; has_displayname_ = true; } void clear_displayname() { displayname_.clear(); has_displayname_ = false; } // <value> const string& get_value() const { return value_; } bool has_value() const { return has_value_; } void set_value(const string& value) { value_ = value; has_value_ = true; } void clear_value() { value_.clear(); has_value_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Data(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); virtual void ParseAttributes(kmlbase::Attributes* attributes); friend class ExtendedData; friend class Serializer; virtual void Serialize(Serializer& serializer) const; virtual void SerializeAttributes(kmlbase::Attributes* attributes) const; string name_; bool has_name_; string displayname_; bool has_displayname_; string value_; bool has_value_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Data); }; // <ExtendedData> class ExtendedData : public BasicElement<Type_ExtendedData> { public: virtual ~ExtendedData(); // <Data>. void add_data(const DataPtr& data) { AddComplexChild(data, &data_array_); } size_t get_data_array_size() const { return data_array_.size(); } const DataPtr& get_data_array_at(size_t index) const { return data_array_[index]; } // <SchemaData>. void add_schemadata(const SchemaDataPtr& schemadata) { AddComplexChild(schemadata, &schemadata_array_); } size_t get_schemadata_array_size() const { return schemadata_array_.size(); } const SchemaDataPtr& get_schemadata_array_at(size_t index) const { return schemadata_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; ExtendedData(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; std::vector<DataPtr> data_array_; std::vector<SchemaDataPtr> schemadata_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(ExtendedData); }; // <Metadata> // This element is deprecated in OGC KML 2.2. New KML should use // <ExtendedData>. class Metadata : public BasicElement<Type_Metadata> { public: virtual ~Metadata(); // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Metadata(); friend class Serializer; virtual void Serialize(Serializer& serializer) const; }; } // end namespace kmldom #endif // KML_DOM_EXTENDEDDATA_H__ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/feature.cc�����������������������������������������������������������������0000664�0000000�0000000�00000015030�12636032571�0017064�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the abstract Feature element. #include "kml/dom/feature.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" namespace kmldom { Feature::Feature() : has_name_(false), visibility_(true), has_visibility_(false), open_(false), has_open_(false), has_address_(false), has_phonenumber_(false), has_description_(false), has_styleurl_(false), gx_balloonvisibility_(false), has_gx_balloonvisibility_(false) { } Feature::~Feature() {} void Feature::AddElement(const ElementPtr& element) { if (!element) { return; } // Substitution groups. if (element->IsA(Type_AbstractView)) { set_abstractview(AsAbstractView(element)); return; } if (element->IsA(Type_TimePrimitive)) { set_timeprimitive(AsTimePrimitive(element)); return; } if (element->IsA(Type_StyleSelector)) { set_styleselector(AsStyleSelector(element)); return; } // Explicit child elements. switch(element->Type()) { case Type_name: has_name_ = element->SetString(&name_); break; case Type_visibility: has_visibility_ = element->SetBool(&visibility_); break; case Type_open: has_open_ = element->SetBool(&open_); break; case Type_AtomAuthor: set_atomauthor(AsAtomAuthor(element)); break; case Type_AtomLink: set_atomlink(AsAtomLink(element)); break; case Type_address: has_address_ = element->SetString(&address_); break; case Type_XalAddressDetails: set_xaladdressdetails(AsXalAddressDetails(element)); break; case Type_phoneNumber: has_phonenumber_ = element->SetString(&phonenumber_); break; case Type_Snippet: set_snippet(AsSnippet(element)); break; // TODO: intentionally do not process <snippet> and let it fall to unknown #if 0 case Type_snippet: // Recognize (little) <snippet> and save as a big <Snippet>. SnippetPtr snippet = KmlFactory::GetFactory()->CreateSnippet(); snippet->set_text(element->get_char_data()); set_snippet(snippet); #endif break; case Type_description: has_description_ = element->SetString(&description_); break; case Type_styleUrl: has_styleurl_ = element->SetString(&styleurl_); break; case Type_Region: set_region(AsRegion(element)); break; // TODO: intentionally do not process <Metadata> and let it fall to unknown #if 0 case Type_Metadata: // Recognize <Metdata> and save into <ExtendedData>. break; #endif case Type_ExtendedData: set_extendeddata(AsExtendedData(element)); break; case Type_GxBalloonVisibility: has_gx_balloonvisibility_ = element->SetBool(&gx_balloonvisibility_); break; default: Object::AddElement(element); } } void Feature::SerializeBeforeStyleSelector(Serializer& serializer) const { if (has_name()) { serializer.SaveFieldById(Type_name, name_); } if (has_visibility()) { serializer.SaveFieldById(Type_visibility, visibility_); } if (has_open()) { serializer.SaveFieldById(Type_open, open_); } if (has_atomauthor()) { serializer.SaveElement(get_atomauthor()); } if (has_atomlink()) { serializer.SaveElement(get_atomlink()); } if (has_address()) { serializer.SaveFieldById(Type_address, get_address()); } if (has_phonenumber()) { serializer.SaveFieldById(Type_phoneNumber, get_phonenumber()); } if (has_xaladdressdetails()) { serializer.SaveElement(get_xaladdressdetails()); } if (has_snippet()) { serializer.SaveElement(get_snippet()); } if (has_description()) { serializer.SaveFieldById(Type_description, description_); } if (has_abstractview()) { serializer.SaveElementGroup(get_abstractview(), Type_AbstractView); } if (has_timeprimitive()) { serializer.SaveElementGroup(get_timeprimitive(), Type_TimePrimitive); } if (has_styleurl()) { serializer.SaveFieldById(Type_styleUrl, styleurl_); } } void Feature::SerializeAfterStyleSelector(Serializer& serializer) const { if (has_region()) { serializer.SaveElement(get_region()); } if (has_extendeddata()) { serializer.SaveElement(get_extendeddata()); } if (has_gx_balloonvisibility()) { serializer.SaveFieldById(Type_GxBalloonVisibility, gx_balloonvisibility_); } } void Feature::Serialize(Serializer& serializer) const { Feature::SerializeBeforeStyleSelector(serializer); if (has_styleselector()) { serializer.SaveElementGroup(get_styleselector(), Type_StyleSelector); } Feature::SerializeAfterStyleSelector(serializer); } void Feature::AcceptChildren(VisitorDriver* driver) { Object::AcceptChildren(driver); if (has_snippet()) { driver->Visit(get_snippet()); } if (has_abstractview()) { driver->Visit(get_abstractview()); } if (has_timeprimitive()) { driver->Visit(get_timeprimitive()); } if (has_styleselector()) { driver->Visit(get_styleselector()); } if (has_region()) { driver->Visit(get_region()); } if (has_extendeddata()) { driver->Visit(get_extendeddata()); } } } // namespace kmldom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/feature.h������������������������������������������������������������������0000664�0000000�0000000�00000022041�12636032571�0016726�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the abstract Feature element. #ifndef KML_DOM_FEATURE_H__ #define KML_DOM_FEATURE_H__ #include "kml/dom/abstractview.h" #include "kml/dom/atom.h" #include "kml/dom/extendeddata.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/object.h" #include "kml/dom/region.h" #include "kml/dom/snippet.h" #include "kml/dom/styleselector.h" #include "kml/dom/timeprimitive.h" #include "kml/dom/xal.h" #include "kml/base/util.h" namespace kmldom { class VisitorDriver; // OGC KML 2.2 Standard: 9.1 kml:AbstractFeatureGroup // OGC KML 2.2 XSD: <element name="AbstractFeatureGroup"... class Feature : public Object { public: virtual ~Feature(); virtual KmlDomType Type() const { return Type_Feature; } virtual bool IsA(KmlDomType type) const { return type == Type_Feature || Object::IsA(type); } // <name> const string& get_name() const { return name_; } bool has_name() const { return has_name_; } void set_name(const string& value) { name_ = value; has_name_ = true; } void clear_name() { name_.clear(); has_name_ = false; } // <visibility> bool get_visibility() const { return visibility_; } bool has_visibility() const { return has_visibility_; } void set_visibility(bool value) { visibility_ = value; has_visibility_ = true; } void clear_visibility() { visibility_ = true; // Default <visibility> is true. has_visibility_ = false; } // <open> bool get_open() const { return open_; } bool has_open() const { return has_open_; } void set_open(bool value) { open_ = value; has_open_ = true; } void clear_open() { open_ = false; has_open_ = false; } // <atom:author> const AtomAuthorPtr& get_atomauthor() const { return atomauthor_; } bool has_atomauthor() const { return atomauthor_ != NULL; } void set_atomauthor(const AtomAuthorPtr& atomauthor) { SetComplexChild(atomauthor, &atomauthor_); } void clear_atomauthor() { set_atomauthor(NULL); } // <atom:link> const AtomLinkPtr& get_atomlink() const { return atomlink_; } bool has_atomlink() const { return atomlink_ != NULL; } void set_atomlink(const AtomLinkPtr& atomlink) { SetComplexChild(atomlink, &atomlink_); } void clear_atomlink() { set_atomlink(NULL); } // <address> const string& get_address() const { return address_; } bool has_address() const { return has_address_; } void set_address(const string& value) { address_ = value; has_address_ = true; } void clear_address() { address_.clear(); has_address_ = false; } // <xal:AddressDetails> const XalAddressDetailsPtr& get_xaladdressdetails() const { return xaladdressdetails_; } bool has_xaladdressdetails() const { return xaladdressdetails_ != NULL; } void set_xaladdressdetails(const XalAddressDetailsPtr& xaladdressdetails) { SetComplexChild(xaladdressdetails, &xaladdressdetails_); } void clear_xaladdressdetails() { set_xaladdressdetails(NULL); } // <phoneNumber> const string& get_phonenumber() const { return phonenumber_; } bool has_phonenumber() const { return has_phonenumber_; } void set_phonenumber(const string& value) { phonenumber_ = value; has_phonenumber_ = true; } void clear_phonenumber() { phonenumber_.clear(); has_phonenumber_ = false; } // TODO: "little" <snippet> (presently preserved as a misplaced child) // <Snippet> const SnippetPtr& get_snippet() const { return snippet_; } bool has_snippet() const { return snippet_ != NULL; } void set_snippet(const SnippetPtr& snippet) { SetComplexChild(snippet, &snippet_); } void clear_snippet() { set_snippet(NULL); } // <description> const string& get_description() const { return description_; } bool has_description() const { return has_description_; } void set_description(const string& value) { description_ = value; has_description_ = true; } void clear_description() { description_.clear(); has_description_ = false; } // AbstractView const AbstractViewPtr& get_abstractview() const { return abstractview_; } bool has_abstractview() const { return abstractview_ != NULL; } void set_abstractview(const AbstractViewPtr& abstractview) { SetComplexChild(abstractview, &abstractview_); } void clear_abstractview() { set_abstractview(NULL); } // TimePrimitive const TimePrimitivePtr& get_timeprimitive() const { return timeprimitive_; } bool has_timeprimitive() const { return timeprimitive_ != NULL; } void set_timeprimitive(const TimePrimitivePtr& timeprimitive) { SetComplexChild(timeprimitive, &timeprimitive_); } void clear_timeprimitive() { set_timeprimitive(NULL); } // <styleUrl> const string& get_styleurl() const { return styleurl_; } string& styleurl() { return styleurl_; } bool has_styleurl() const { return has_styleurl_; } void set_styleurl(const string& value) { styleurl_ = value; has_styleurl_ = true; } void clear_styleurl() { styleurl_.clear(); has_styleurl_ = false; } // StyleSelector const StyleSelectorPtr& get_styleselector() const { return styleselector_; } bool has_styleselector() const { return styleselector_ != NULL; } void set_styleselector(const StyleSelectorPtr& styleselector) { SetComplexChild(styleselector, &styleselector_); } void clear_styleselector() { set_styleselector(NULL); } // <Region> const RegionPtr& get_region() const { return region_; } bool has_region() const { return region_ != NULL; } void set_region(const RegionPtr& region) { SetComplexChild(region, ®ion_); } void clear_region() { set_region(NULL); } // TODO: <Metadata> (presently preserved as a misplaced child) // <ExtendedData> const ExtendedDataPtr& get_extendeddata() const { return extendeddata_; } bool has_extendeddata() const { return extendeddata_ != NULL; } void set_extendeddata(const ExtendedDataPtr& extendeddata) { SetComplexChild(extendeddata, &extendeddata_); } void clear_extendeddata() { set_extendeddata(NULL); } // From kml:AbstractFeatureSimpleExtensionGroup. // <gx:balloonVisibility> bool get_gx_balloonvisibility() const { return gx_balloonvisibility_; } bool has_gx_balloonvisibility() const { return has_gx_balloonvisibility_; } void set_gx_balloonvisibility(bool value) { gx_balloonvisibility_ = value; has_gx_balloonvisibility_ = true; } void clear_gx_balloonvisibility() { gx_balloonvisibility_ = false; has_gx_balloonvisibility_ = false; } // Visitor API methods, see visitor.h. virtual void AcceptChildren(VisitorDriver* driver); protected: // Feature is abstract. Feature(); virtual void AddElement(const ElementPtr& element); void SerializeBeforeStyleSelector(Serializer& serialize) const; void SerializeAfterStyleSelector(Serializer& serialize) const; virtual void Serialize(Serializer& serialize) const; private: string name_; bool has_name_; bool visibility_; bool has_visibility_; bool open_; bool has_open_; AtomAuthorPtr atomauthor_; AtomLinkPtr atomlink_; string address_; bool has_address_; XalAddressDetailsPtr xaladdressdetails_; string phonenumber_; bool has_phonenumber_; SnippetPtr snippet_; string description_; bool has_description_; AbstractViewPtr abstractview_; TimePrimitivePtr timeprimitive_; string styleurl_; bool has_styleurl_; StyleSelectorPtr styleselector_; RegionPtr region_; ExtendedDataPtr extendeddata_; bool gx_balloonvisibility_; bool has_gx_balloonvisibility_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Feature); }; } // namespace kmldom #endif // KML_DOM_FEATURE_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/folder.cc������������������������������������������������������������������0000664�0000000�0000000�00000003655�12636032571�0016716�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/folder.h" #include "kml/base/attributes.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { Folder::Folder() { } Folder::~Folder() { } void Folder::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Container::Serialize(serializer); } void Folder::Accept(Visitor* visitor) { visitor->VisitFolder(FolderPtr(this)); } } // end namespace kmldom �����������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/folder.h�������������������������������������������������������������������0000664�0000000�0000000�00000004275�12636032571�0016557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_FOLDER_H__ #define KML_DOM_FOLDER_H__ #include "kml/dom/container.h" #include "kml/dom/kml22.h" namespace kmldom { class Serializer; class Visitor; // <Folder> class Folder : public Container { public: virtual ~Folder(); virtual KmlDomType Type() const { return Type_Folder; } virtual bool IsA(KmlDomType type) const { return type == Type_Folder || Container::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Folder(); friend class Serializer; virtual void Serialize(Serializer& serializer) const; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Folder); }; } // end namespace kmldom #endif // KML_DOM_FOLDER_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/geometry.cc����������������������������������������������������������������0000664�0000000�0000000�00000041434�12636032571�0017273�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the abstract element Geometry // and the concrete elements coordinates, Point, LineString, LinearRing, // outerBoundaryIs, innerBoundaryIs and Polygon. #include "kml/dom/geometry.h" #include <ctype.h> #include <stdlib.h> #include "kml/base/attributes.h" #include "kml/base/xml_namespaces.h" #include "kml/dom/element.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_cast.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; using kmlbase::Vec3; namespace kmldom { Coordinates::Coordinates() { set_xmlns(kmlbase::XMLNS_KML22); } Coordinates::~Coordinates() {} // This parses off a Vec3 from the given string and returns a pointer // to the end of chars consumed. The purpose is for use in the inner loop // of the overall parse of a <coordinates> string. This handles both 2d and // 3d points and handles any form of whitespace around the commas between // coordinates. The general formula is commas between 2 or 3 coordinates // with any form of whitespace permitted around the commas and whitespace // between tuples including before the first and after the last. // Here are some example 3d cstr's which all set the Vec3(1.1, 2.2, 3.3) // Comma separated coords, space only between tuples: // "1.1,2.2,3.3 4.4,5.5,6.6" // Comma separated coords, leading whitespace: // " 1.1,2.2,3.3 4.4,5.5,6.6" // "\n 1.1,2.2,3.3 4.4,5.5,6.6" // Whitespace between coordinates: // "\t1.1 , 2.2 , 3.3 4.4 , 5.5,6.6" // Here are some 2d cstr's which all parse to Vec3(1.1, 2.2, 0.0). // Note that lack of altitude is represented as altitude = 0.0. // (Actual use of the altitude typeically depends on altitudeMode). // No spaces. Comma separated as might be common for Point: // "1.1,2.2" // A couple of tuples with comma-separated coordinates and single space // separatting the tuples as might be used in LineString: // "1.1,2.2 4.4,5.5" // Leading newlines and tabs as might created by a pretty printer: // "\n\t1.1, 2.2\t\t4.4, 5.5\n" // Bad separators are simply discarded and we move to the next comma. A string // like this: "1.1*2.2,3,3" will become "1.1,3.3,0.0". This precisely matches // the precent for parsing of bad coordinate strings set by Google Earth. bool Coordinates::ParseVec3(const char* cstr, char** nextp, Vec3* vec) { if (!cstr || !vec) { // Not much to do w/o input or output. return false; } bool done = false; char* endp = const_cast<char*>(cstr); // Ignore any commas at the start of our scan. This will cause this: // <coordinates>1,2,3,4,5</coordinates> to be treated as: // <coordinates>1,2,3 4,5</coordinates>, which is how Google Earth treats // the misuse of commas as separators. if (*endp == ',') { ++endp; } // Longitude first. strtod() eats leading whitespace. vec->set(0, strtod(endp, &endp)); if (endp) { // Latitude next. while (isspace(*endp) || *endp != ',') { // We check here to make sure the parse is sane. If we've been passed // an invalid coordinate string, this loop will reach the null // terminator. If we see it, we set the nextp pointer to the end and // return which will let Coordinates::Parse know that it's finished. if (*endp == '\0') { *nextp = endp; return done; } // Eat whitespace between double and comma. ++endp; } vec->set(1, strtod(endp+1, &endp)); done = true; // Need at least lon,lat to be valid. // If no altitude set to 0 while (isspace(*endp)) { // Eat whitespace between double and comma. ++endp; } if (*endp == ',') { // Note that this sets altitude only if an altitude is supplied. vec->set(2, strtod(endp+1, &endp)); } } if (nextp) { while ((endp != NULL) && isspace(*endp)) { // Eat the remaining whitespace before return. ++endp; } *nextp = endp; } return done; } // The char_data is everything between <coordinates> elements including // leading and trailing whitespace. void Coordinates::Parse(const string& char_data) { const char* cstr = char_data.c_str(); const char* endp = cstr + char_data.size(); char* next = const_cast<char*>(cstr); while (next != endp) { Vec3 vec; if (ParseVec3(next, &next, &vec)) { coordinates_array_.push_back(vec); } } } // Coordinates essentially parses itself. void Coordinates::AddElement(const ElementPtr& element) { Parse(get_char_data()); } void Coordinates::Serialize(Serializer& serializer) const { Attributes dummy; serializer.BeginById(Type(), dummy); serializer.BeginElementArray(Type(), coordinates_array_.size()); for (size_t i = 0; i < coordinates_array_.size(); ++i) { serializer.SaveVec3(coordinates_array_[i]); } serializer.EndElementArray(Type_coordinates); serializer.End(); } void Coordinates::Accept(Visitor* visitor) { visitor->VisitCoordinates(CoordinatesPtr(this)); } Geometry::Geometry() {} Geometry::~Geometry() {} AltitudeGeometryCommon::AltitudeGeometryCommon() : altitudemode_(ALTITUDEMODE_CLAMPTOGROUND), has_altitudemode_(false), gx_altitudemode_(GX_ALTITUDEMODE_CLAMPTOSEAFLOOR), has_gx_altitudemode_(false) { } AltitudeGeometryCommon::~AltitudeGeometryCommon() { } void AltitudeGeometryCommon::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_altitudeMode: has_altitudemode_ = element->SetEnum(&altitudemode_); return; case Type_GxAltitudeMode: has_gx_altitudemode_ = element->SetEnum(&gx_altitudemode_); return; default: Geometry::AddElement(element); } } ExtrudeGeometryCommon::ExtrudeGeometryCommon() : extrude_(false), has_extrude_(false) { } ExtrudeGeometryCommon::~ExtrudeGeometryCommon() { } void ExtrudeGeometryCommon::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_extrude) { has_extrude_ = element->SetBool(&extrude_); return; } AltitudeGeometryCommon::AddElement(element); } CoordinatesGeometryCommon::CoordinatesGeometryCommon() {} CoordinatesGeometryCommon::~CoordinatesGeometryCommon() {} void CoordinatesGeometryCommon::AddElement(const ElementPtr& element) { if (CoordinatesPtr coordinates = AsCoordinates(element)) { set_coordinates(coordinates); } else { ExtrudeGeometryCommon::AddElement(element); } } void CoordinatesGeometryCommon::AcceptChildren(VisitorDriver* driver) { ExtrudeGeometryCommon::AcceptChildren(driver); if (has_coordinates()) { driver->Visit(get_coordinates()); } } Point::Point() {} Point::~Point() {} void Point::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Geometry::Serialize(serializer); if (has_extrude()) { serializer.SaveFieldById(Type_extrude, get_extrude()); } if (has_altitudemode()) { serializer.SaveEnum(Type_altitudeMode, get_altitudemode()); } if (has_gx_altitudemode()) { serializer.SaveEnum(Type_GxAltitudeMode, get_gx_altitudemode()); } if (has_coordinates()) { serializer.SaveElement(get_coordinates()); } } void Point::Accept(Visitor* visitor) { visitor->VisitPoint(PointPtr(this)); } LineCommon::LineCommon() : tessellate_(false), has_tessellate_(false) { } LineCommon::~LineCommon() {} void LineCommon::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_tessellate) { has_tessellate_ = element->SetBool(&tessellate_); return; } CoordinatesGeometryCommon::AddElement(element); } void LineCommon::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Geometry::Serialize(serializer); if (has_extrude()) { serializer.SaveFieldById(Type_extrude, get_extrude()); } if (has_tessellate()) { serializer.SaveFieldById(Type_tessellate, get_tessellate()); } if (has_altitudemode()) { serializer.SaveEnum(Type_altitudeMode, get_altitudemode()); } if (has_gx_altitudemode()) { serializer.SaveEnum(Type_GxAltitudeMode, get_gx_altitudemode()); } if (has_coordinates()) { serializer.SaveElement(get_coordinates()); } } LineString::LineString() {} LineString::~LineString() {} void LineString::Accept(Visitor* visitor) { visitor->VisitLineString(LineStringPtr(this)); } LinearRing::LinearRing() {} LinearRing::~LinearRing() {} void LinearRing::Accept(Visitor* visitor) { visitor->VisitLinearRing(LinearRingPtr(this)); } BoundaryCommon::BoundaryCommon() {} BoundaryCommon::~BoundaryCommon() {} void BoundaryCommon::AddElement(const ElementPtr& element) { if (LinearRingPtr linearring = AsLinearRing(element)) { set_linearring(linearring); } else { Element::AddElement(element); } } void BoundaryCommon::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); if (has_linearring()) { serializer.SaveElement(get_linearring()); } } void BoundaryCommon::AcceptChildren(VisitorDriver* driver) { Element::AcceptChildren(driver); if (has_linearring()) { driver->Visit(get_linearring()); } } OuterBoundaryIs::OuterBoundaryIs() {} OuterBoundaryIs::~OuterBoundaryIs() {} void OuterBoundaryIs::Accept(Visitor* visitor) { visitor->VisitOuterBoundaryIs(OuterBoundaryIsPtr(this)); } InnerBoundaryIs::InnerBoundaryIs() {} InnerBoundaryIs::~InnerBoundaryIs() {} void InnerBoundaryIs::Accept(Visitor* visitor) { visitor->VisitInnerBoundaryIs(InnerBoundaryIsPtr(this)); } Polygon::Polygon() : tessellate_(false), has_tessellate_(false) { } Polygon::~Polygon() {} void Polygon::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_tessellate: has_tessellate_ = element->SetBool(&tessellate_); break; case Type_outerBoundaryIs: set_outerboundaryis(AsOuterBoundaryIs(element)); break; case Type_innerBoundaryIs: add_innerboundaryis(AsInnerBoundaryIs(element)); break; default: ExtrudeGeometryCommon::AddElement(element); } } void Polygon::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Geometry::Serialize(serializer); if (has_extrude()) { serializer.SaveFieldById(Type_extrude, get_extrude()); } if (has_tessellate()) { serializer.SaveFieldById(Type_tessellate, get_tessellate()); } if (has_altitudemode()) { serializer.SaveEnum(Type_altitudeMode, get_altitudemode()); } if (has_gx_altitudemode()) { serializer.SaveEnum(Type_GxAltitudeMode, get_gx_altitudemode()); } if (has_outerboundaryis()) { serializer.SaveElement(get_outerboundaryis()); } serializer.SaveElementArray(innerboundaryis_array_); } void Polygon::Accept(Visitor* visitor) { visitor->VisitPolygon(PolygonPtr(this)); } void Polygon::AcceptChildren(VisitorDriver* driver) { ExtrudeGeometryCommon::AcceptChildren(driver); if (has_outerboundaryis()) { driver->Visit(get_outerboundaryis()); } Element::AcceptRepeated<InnerBoundaryIsPtr>(&innerboundaryis_array_, driver); } MultiGeometry::MultiGeometry() {} MultiGeometry::~MultiGeometry() {} void MultiGeometry::add_geometry(const GeometryPtr& geometry) { AddComplexChild(geometry, &geometry_array_); } void MultiGeometry::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->IsA(Type_Geometry)) { add_geometry(AsGeometry(element)); return; } Geometry::AddElement(element); } void MultiGeometry::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Geometry::Serialize(serializer); serializer.SaveElementGroupArray(geometry_array_, Type_Geometry); } void MultiGeometry::Accept(Visitor* visitor) { visitor->VisitMultiGeometry(MultiGeometryPtr(this)); } void MultiGeometry::AcceptChildren(VisitorDriver* driver) { Geometry::AcceptChildren(driver); Element::AcceptRepeated<GeometryPtr>(&geometry_array_, driver); } GxTrack::GxTrack() { set_xmlns(kmlbase::XMLNS_GX22); } GxTrack::~GxTrack() {} void GxTrack::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_when: add_when(element->get_char_data()); break; case Type_GxAngles: Parse(element->get_char_data(), &gx_angles_array_); break; case Type_GxCoord: Parse(element->get_char_data(), &gx_coord_array_); break; case Type_Model: set_model(AsModel(element)); break; case Type_ExtendedData: set_extendeddata(AsExtendedData(element)); break; default: AltitudeGeometryCommon::AddElement(element); } } void GxTrack::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Geometry::Serialize(serializer); if (has_altitudemode()) { serializer.SaveEnum(Type_altitudeMode, get_altitudemode()); } if (has_gx_altitudemode()) { serializer.SaveEnum(Type_GxAltitudeMode, get_gx_altitudemode()); } for (size_t i = 0; i < when_array_.size(); i++) { serializer.SaveStringFieldById(Type_when, when_array_[i]); } const Attributes dummy; for (size_t i = 0; i < gx_coord_array_.size(); i++) { serializer.SaveSimpleVec3(Type_GxCoord, gx_coord_array_.at(i), " "); } for (size_t i = 0; i < gx_angles_array_.size(); i++) { serializer.SaveSimpleVec3(Type_GxAngles, gx_angles_array_.at(i), " "); } if (has_model()) { serializer.SaveElement(get_model()); } if (has_extendeddata()) { serializer.SaveElement(get_extendeddata()); } } void GxTrack::Accept(Visitor* visitor) { visitor->VisitGxTrack(GxTrackPtr(this)); } void GxTrack::AcceptChildren(VisitorDriver* driver) { AltitudeGeometryCommon::AcceptChildren(driver); if (has_model()) { driver->Visit(get_model()); } if (has_extendeddata()) { driver->Visit(get_extendeddata()); } } void GxTrack::Parse(const string& char_data, std::vector<Vec3>* out) { if (!out) { return; } // TODO: this is a little heavy. Optimization along the lines of // Coordinates::Parse may be required. std::vector<string> s; kmlbase::SplitStringUsing(char_data, " ", &s); kmlbase::Vec3 vec; for (size_t i = 0; i < s.size(); i++) { vec.set(i, strtod(s[i].c_str(), NULL)); if (i > 2) break; } out->push_back(vec); } GxMultiTrack::GxMultiTrack() : gx_interpolate_(false), has_gx_interpolate_(false) { set_xmlns(kmlbase::XMLNS_GX22); } GxMultiTrack::~GxMultiTrack() {} void GxMultiTrack::add_gx_track(const GxTrackPtr& gx_track) { AddComplexChild(gx_track, &gx_track_array_); } void GxMultiTrack::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_GxInterpolate) { has_gx_interpolate_ = element->SetBool(&gx_interpolate_); return; } if (element->IsA(Type_GxTrack)) { add_gx_track(AsGxTrack(element)); return; } Geometry::AddElement(element); } void GxMultiTrack::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Geometry::Serialize(serializer); if (has_gx_interpolate_) { serializer.SaveFieldById(Type_GxInterpolate, gx_interpolate_); } serializer.SaveElementGroupArray(gx_track_array_, Type_GxTrack); } void GxMultiTrack::Accept(Visitor* visitor) { visitor->VisitGxMultiTrack(GxMultiTrackPtr(this)); } void GxMultiTrack::AcceptChildren(VisitorDriver* driver) { Geometry::AcceptChildren(driver); Element::AcceptRepeated<GxTrackPtr>(&gx_track_array_, driver); } } // end namespace kmldom ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/geometry.h�����������������������������������������������������������������0000664�0000000�0000000�00000071476�12636032571�0017146�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations for the abstract Geometry element // and concrete coordinates, Point, LineString, LinearRing, Polygon, // outerBoundaryIs, and innerBoundaryIs elements. // In addition to classes for the abstract and concrete elements in the // KML standard there are internal convenience classes used here to hold // common code. Each such class is named *GeometryCommon and follows // this general pattern: constructor is protected, implements set,get,has,clear // for the field it owns, and parses that field (implements AddElement). // Each concrete element owns serialization of all fields for itself as per // the order the KML standard. The KML standard does not specify the common // simple elements in an order that maps well to a type hierarchy hence // the more typical pattern of abstract types serializing their own // fields is not followed here. // // Here is a quick summary of the type hierarchy used and what fields // are associated with each type: // // class Geometry : public Object // AbstractGeometryGroup in the KML standard. No child elements. // class AltitudeGeometryCommon : public Geometry // Geometry with <altitudeMode> // class ExtrudeGeometryCommon : public AltitudeGeometryCommon // Geometry with <altitudeMode> + <extrude> // class CoordinatesGeometryCommon : public ExtrudeGeometryCommon // Geometry with <altitudeMode> + <extrude> + <coordinates> // class Point : public CoordinatesGeometryCommon // <Point> has <altitudeMode> + <extrude> + <coordinates> // class LineCommon : public CoordinatesGeometryCommon // LineCommon has <altitudeMode> + <extrude> + <coordinates> + <tessellate> // class LineString : public LineCommon // <LineString> is an instantiation of LineCommon // class LinearRing : public LineCommon // <LinearRing> is an instantiation of LineCommon // class BoundaryCommon : public Element // BoundaryCommon has <LinearRing> // class OuterBoundaryIs : public BoundaryCommon // <outerBoundaryIs> is an instantiation of BoundaryCommon // class InnerBoundaryIs : public BoundaryCommon // <innerBoundaryIs> is an instantiation of BoundaryCommon // class Polygon : public ExtrudeGeometryCommon // <Polygon> has <altitudeMode> + <extrude> + <tessellate> + // <outerBoundaryIs> and N x <innerBoundaryIs> // class MultiGeometry : public Geometry // Note: class Model : public AltitudeGeometryCommon #ifndef KML_DOM_GEOMETRY_H__ #define KML_DOM_GEOMETRY_H__ #include <vector> #include "kml/base/util.h" #include "kml/base/vec3.h" #include "kml/dom/extendeddata.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/link.h" // Remove when model.h is repaired. #include "kml/dom/object.h" namespace kmldom { class Serializer; class Visitor; class VisitorDriver; // <coordinates> class Coordinates : public BasicElement<Type_coordinates> { public: virtual ~Coordinates(); // The main KML-specific API void add_latlngalt(double latitude, double longitude, double altitude) { coordinates_array_.push_back(kmlbase::Vec3(longitude, latitude, altitude)); } void add_latlng(double latitude, double longitude) { coordinates_array_.push_back(kmlbase::Vec3(longitude, latitude)); } void add_vec3(const kmlbase::Vec3& vec3) { coordinates_array_.push_back(vec3); } size_t get_coordinates_array_size() const { return coordinates_array_.size(); } const kmlbase::Vec3 get_coordinates_array_at(size_t index) const { return coordinates_array_[index]; } // Internal methods used in parser. Public for unittest purposes. // See .cc for more details. void Parse(const string& char_data); static bool ParseVec3(const char* coords, char** nextp, kmlbase::Vec3* vec); // This clears the internal coordinates array. void Clear() { coordinates_array_.clear(); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Coordinates(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; std::vector<kmlbase::Vec3> coordinates_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Coordinates); }; // OGC KML 2.2 Standard: 10.1 kml:AbstractGeometryGroup // OGC KML 2.2 XSD: <element name="AbstractGeometryGroup"... class Geometry : public Object { public: virtual ~Geometry(); virtual KmlDomType Type() const { return Type_Geometry; } virtual bool IsA(KmlDomType type) const { return type == Type_Geometry || Object::IsA(type); } protected: // Geometry is abstract. Geometry(); private: LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Geometry); }; // Internal convenience class for any Geometry with <altitudeMode>. // This is not in the KML standard, hence there is no type info. class AltitudeGeometryCommon : public Geometry { public: virtual ~AltitudeGeometryCommon(); protected: AltitudeGeometryCommon(); public: // <altitudeMode> int get_altitudemode() const { return altitudemode_; } bool has_altitudemode() const { return has_altitudemode_; } void set_altitudemode(int value) { altitudemode_ = value; has_altitudemode_ = true; } void clear_altitudemode() { altitudemode_ = ALTITUDEMODE_CLAMPTOGROUND; has_altitudemode_ = false; } // <gx:altitudeMode> int get_gx_altitudemode() const { return gx_altitudemode_; } bool has_gx_altitudemode() const { return has_gx_altitudemode_; } void set_gx_altitudemode(int value) { gx_altitudemode_ = value; has_gx_altitudemode_ = true; } void clear_gx_altitudemode() { gx_altitudemode_ = GX_ALTITUDEMODE_CLAMPTOSEAFLOOR; has_gx_altitudemode_ = false; } virtual void AddElement(const ElementPtr& element); private: int altitudemode_; bool has_altitudemode_; int gx_altitudemode_; bool has_gx_altitudemode_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(AltitudeGeometryCommon); }; // Internal convenience class for any Geometry with <altitudeMode> + <extrude> // This is not in the KML standard, hence there is no type info. class ExtrudeGeometryCommon : public AltitudeGeometryCommon { public: virtual ~ExtrudeGeometryCommon(); // <extrude> bool get_extrude() const { return extrude_; } bool has_extrude() const { return has_extrude_; } void set_extrude(bool value) { extrude_ = value; has_extrude_ = true; } void clear_extrude() { extrude_ = false; has_extrude_ = false; } protected: ExtrudeGeometryCommon(); virtual void AddElement(const ElementPtr& element); private: bool extrude_; bool has_extrude_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(ExtrudeGeometryCommon); }; // Internal convenience class for any Geometry with // <altitudeMode> + <extrude> + <coordinates>. // This is not in the KML standard, hence there is no type info. class CoordinatesGeometryCommon : public ExtrudeGeometryCommon { public: virtual ~CoordinatesGeometryCommon(); public: // <coordinates> const CoordinatesPtr& get_coordinates() const { return coordinates_; } bool has_coordinates() const { return coordinates_ != NULL; } void set_coordinates(const CoordinatesPtr& coordinates) { SetComplexChild(coordinates, &coordinates_); } void clear_coordinates() { set_coordinates(NULL); } // Visitor API methods, see visitor.h. virtual void AcceptChildren(VisitorDriver* driver); protected: CoordinatesGeometryCommon(); // Parser support virtual void AddElement(const ElementPtr& element); private: CoordinatesPtr coordinates_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(CoordinatesGeometryCommon); }; // <Point> class Point : public CoordinatesGeometryCommon { public: virtual ~Point(); virtual KmlDomType Type() const { return Type_Point; } virtual bool IsA(KmlDomType type) const { return type == Type_Point || Geometry::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Point(); friend class Serializer; void Serialize(Serializer& serializer) const; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Point); }; // Internal convenience class for code common to LineString and LinearRing. // This is not in the KML standard, hence there is no type info. class LineCommon : public CoordinatesGeometryCommon { public: virtual ~LineCommon(); public: // <tessellate> bool get_tessellate() const { return tessellate_; } bool has_tessellate() const { return has_tessellate_; } void set_tessellate(bool value) { tessellate_ = value; has_tessellate_ = true; } void clear_tessellate() { tessellate_ = false; has_tessellate_ = false; } protected: LineCommon(); // Parser support virtual void AddElement(const ElementPtr& element); private: friend class Serializer; void Serialize(Serializer& serializer) const; bool tessellate_; bool has_tessellate_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(LineCommon); }; // <LineString> class LineString : public LineCommon { public: virtual ~LineString(); virtual KmlDomType Type() const { return Type_LineString; } virtual bool IsA(KmlDomType type) const { return type == Type_LineString || Geometry::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; LineString(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(LineString); }; // <LinearRing> class LinearRing : public LineCommon { public: virtual ~LinearRing(); virtual KmlDomType Type() const { return Type_LinearRing; } virtual bool IsA(KmlDomType type) const { return type == Type_LinearRing || Geometry::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; LinearRing(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(LinearRing); }; // Internal class for code common to OuterBoundaryIs and InnerBoundaryIs. // This is not in the KML standard, hence there is no type info. class BoundaryCommon : public Element { public: virtual ~BoundaryCommon(); public: const LinearRingPtr& get_linearring() const { return linearring_; } bool has_linearring() const { return linearring_ != NULL; } void set_linearring(const LinearRingPtr& linearring) { SetComplexChild(linearring, &linearring_); } void clear_linearring() { set_linearring(NULL); } // Parser support virtual void AddElement(const ElementPtr& element); // Visitor API methods, see visitor.h. virtual void AcceptChildren(VisitorDriver* driver); protected: BoundaryCommon(); virtual void Serialize(Serializer& serializer) const; private: LinearRingPtr linearring_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(BoundaryCommon); }; // <outerBoundaryIs> class OuterBoundaryIs : public BoundaryCommon { public: virtual ~OuterBoundaryIs(); virtual KmlDomType Type() const { return Type_outerBoundaryIs; } virtual bool IsA(KmlDomType type) const { return type == Type_outerBoundaryIs; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; OuterBoundaryIs(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(OuterBoundaryIs); }; // <innerBoundaryIs> class InnerBoundaryIs : public BoundaryCommon { public: virtual ~InnerBoundaryIs(); virtual KmlDomType Type() const { return Type_innerBoundaryIs; } virtual bool IsA(KmlDomType type) const { return type == Type_innerBoundaryIs; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; InnerBoundaryIs(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(InnerBoundaryIs); }; // <Polygon> class Polygon : public ExtrudeGeometryCommon { public: virtual ~Polygon(); virtual KmlDomType Type() const { return Type_Polygon; } virtual bool IsA(KmlDomType type) const { return type == Type_Polygon || Geometry::IsA(type); } // <tessellate> bool get_tessellate() const { return tessellate_; } bool has_tessellate() const { return has_tessellate_; } void set_tessellate(bool value) { tessellate_ = value; has_tessellate_ = true; } void clear_tessellate() { tessellate_ = false; has_tessellate_ = false; } // <outerBoundaryIs> const OuterBoundaryIsPtr& get_outerboundaryis() const { return outerboundaryis_; } bool has_outerboundaryis() const { return outerboundaryis_ != NULL; } void set_outerboundaryis(const OuterBoundaryIsPtr& outerboundaryis) { SetComplexChild(outerboundaryis, &outerboundaryis_); } void clear_outerboundaryis() { set_outerboundaryis(NULL); } // <innerBoundaryIs> void add_innerboundaryis(const InnerBoundaryIsPtr& innerboundaryis) { AddComplexChild(innerboundaryis, &innerboundaryis_array_); } size_t get_innerboundaryis_array_size() const { return innerboundaryis_array_.size(); } const InnerBoundaryIsPtr& get_innerboundaryis_array_at(size_t index) { return innerboundaryis_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Polygon(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; bool tessellate_; bool has_tessellate_; OuterBoundaryIsPtr outerboundaryis_; std::vector<InnerBoundaryIsPtr> innerboundaryis_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Polygon); }; // <MultiGeometry> class MultiGeometry : public Geometry { public: virtual ~MultiGeometry(); virtual KmlDomType Type() const { return Type_MultiGeometry; } virtual bool IsA(KmlDomType type) const { return type == Type_MultiGeometry || Geometry::IsA(type); } // The main KML-specific API void add_geometry(const GeometryPtr& geometry); size_t get_geometry_array_size() const { return geometry_array_.size(); } const GeometryPtr& get_geometry_array_at(size_t index) const { return geometry_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; MultiGeometry(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; std::vector<GeometryPtr> geometry_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(MultiGeometry); }; // <gx:Track> class GxTrack : public AltitudeGeometryCommon { public: virtual ~GxTrack(); static KmlDomType ElementType() { return Type_GxTrack; } virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType() || Geometry::IsA(type); } // <when> size_t get_when_array_size() { return when_array_.size(); } void add_when(const string& when) { when_array_.push_back(when); } const string& get_when_array_at(size_t index) const { return when_array_[index]; } // <gx:coord> size_t get_gx_coord_array_size() { return gx_coord_array_.size(); } void add_gx_coord(const kmlbase::Vec3& gx_coord) { gx_coord_array_.push_back(gx_coord); } const kmlbase::Vec3& get_gx_coord_array_at(size_t index) const { return gx_coord_array_[index]; } // <gx:angles> size_t get_gx_angles_array_size() { return gx_angles_array_.size(); } void add_gx_angles(const kmlbase::Vec3& gx_angles) { gx_angles_array_.push_back(gx_angles); } const kmlbase::Vec3& get_gx_angles_array_at(size_t index) const { return gx_angles_array_[index]; } // <Model> const ModelPtr& get_model() const { return model_; } void set_model(const ModelPtr& model) { SetComplexChild(model, &model_); } bool has_model() const { return model_ != NULL; } void clear_model() { set_model(NULL); } // <ExtendedData> const ExtendedDataPtr& get_extendeddata() const { return extendeddata_; } bool has_extendeddata() const { return extendeddata_ != NULL; } void set_extendeddata(const ExtendedDataPtr& extendeddata) { SetComplexChild(extendeddata, &extendeddata_); } void clear_extendeddata() { set_extendeddata(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); // Internal methods used in parser. Public for unittest purposes. // See .cc for more details. void Parse(const string& char_data, std::vector<kmlbase::Vec3>* out); private: friend class KmlFactory; GxTrack(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; std::vector<string> when_array_; std::vector<kmlbase::Vec3> gx_coord_array_; std::vector<kmlbase::Vec3> gx_angles_array_; ModelPtr model_; ExtendedDataPtr extendeddata_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxTrack); }; // <gx:MultiTrack> class GxMultiTrack : public Geometry { public: virtual ~GxMultiTrack(); static KmlDomType ElementType() { return Type_GxMultiTrack; } virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType() || Geometry::IsA(type); } bool get_gx_interpolate() const { return gx_interpolate_; } bool has_gx_interpolate() const { return has_gx_interpolate_; } void set_gx_interpolate(bool value) { gx_interpolate_ = value; has_gx_interpolate_ = true; } void clear_gx_interpolate() { gx_interpolate_ = false; // Default <gx:interpolate> is false. has_gx_interpolate_ = false; } void add_gx_track(const GxTrackPtr& gx_track); size_t get_gx_track_array_size() const { return gx_track_array_.size(); } const GxTrackPtr& get_gx_track_array_at(size_t index) const { return gx_track_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; GxMultiTrack(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; bool gx_interpolate_; bool has_gx_interpolate_; std::vector<GxTrackPtr> gx_track_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxMultiTrack); }; // HACK: the rest of this file contains what was in, and what should return to, // kml/dom/model.h. GxTrack was added to this file, which has a <Model>. Since // Model is defined in its own file, this double inclusion, coupled with the // inline implementation of most methods in the headers, caused the builds of // other dependent projects to break. The correct solution is to ensure that // the headers are pure and all implementation is in the .cc files. // <Location> class Location : public Object { public: virtual ~Location(); virtual KmlDomType Type() const { return Type_Location; } virtual bool IsA(KmlDomType type) const { return type == Type_Location || Object::IsA(type); } // <longitude> double get_longitude() const { return longitude_; } bool has_longitude() const { return has_longitude_; } void set_longitude(double longitude) { longitude_ = longitude; has_longitude_ = true; } void clear_longitude() { longitude_ = 0.0; has_longitude_ = false; } // <latitude> double get_latitude() const { return latitude_; } bool has_latitude() const { return has_latitude_; } void set_latitude(double latitude) { latitude_ = latitude; has_latitude_ = true; } void clear_latitude() { latitude_ = 0.0; has_latitude_ = false; } // <altitude> double get_altitude() const { return altitude_; } bool has_altitude() const { return has_altitude_; } void set_altitude(double altitude) { altitude_ = altitude; has_altitude_ = true; } void clear_altitude() { altitude_ = 0.0; has_altitude_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Location(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; double longitude_; bool has_longitude_; double latitude_; bool has_latitude_; double altitude_; bool has_altitude_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Location); }; // <Orientation> class Orientation : public Object { public: virtual ~Orientation(); virtual KmlDomType Type() const { return Type_Orientation; } virtual bool IsA(KmlDomType type) const { return type == Type_Orientation || Object::IsA(type); } // <heading> double get_heading() const { return heading_; } bool has_heading() const { return has_heading_; } void set_heading(double heading) { heading_ = heading; has_heading_ = true; } void clear_heading() { heading_ = 0.0; has_heading_ = false; } // <tilt> double get_tilt() const { return tilt_; } bool has_tilt() const { return has_tilt_; } void set_tilt(double tilt) { tilt_ = tilt; has_tilt_ = true; } void clear_tilt() { tilt_ = 0.0; has_tilt_ = false; } // <roll> double get_roll() const { return roll_; } bool has_roll() const { return has_roll_; } void set_roll(double roll) { roll_ = roll; has_roll_ = true; } void clear_roll() { roll_ = 0.0; has_roll_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Orientation(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; double heading_; bool has_heading_; double tilt_; bool has_tilt_; double roll_; bool has_roll_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Orientation); }; // <Scale> class Scale : public Object { public: virtual ~Scale(); virtual KmlDomType Type() const { return Type_Scale; } virtual bool IsA(KmlDomType type) const { return type == Type_Scale || Object::IsA(type); } // <x> double get_x() const { return x_; } bool has_x() const { return has_x_; } void set_x(double x) { x_ = x; has_x_ = true; } void clear_x() { x_ = 1.0; has_x_ = false; } // <y> double get_y() const { return y_; } bool has_y() const { return has_y_; } void set_y(double y) { y_ = y; has_y_ = true; } void clear_y() { y_ = 1.0; has_y_ = false; } // <z> double get_z() const { return z_; } bool has_z() const { return has_z_; } void set_z(double z) { z_ = z; has_z_ = true; } void clear_z() { z_ = 1.0; has_z_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Scale(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; double x_; bool has_x_; double y_; bool has_y_; double z_; bool has_z_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Scale); }; // <Alias> class Alias : public Object { public: virtual ~Alias(); virtual KmlDomType Type() const { return Type_Alias; } virtual bool IsA(KmlDomType type) const { return type == Type_Alias || Object::IsA(type); } // <targetHref> const string& get_targethref() const { return targethref_; } bool has_targethref() const { return has_targethref_; } void set_targethref(const string& targethref) { targethref_ = targethref; has_targethref_ = true; } void clear_targethref() { targethref_.clear(); has_targethref_ = false; } // <sourceHref> const string& get_sourcehref() const { return sourcehref_; } bool has_sourcehref() const { return has_sourcehref_; } void set_sourcehref(const string& sourcehref) { sourcehref_ = sourcehref; has_sourcehref_ = true; } void clear_sourcehref() { sourcehref_.clear(); has_sourcehref_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Alias(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; string targethref_; bool has_targethref_; string sourcehref_; bool has_sourcehref_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Alias); }; // <ResourceMap> class ResourceMap : public Object { public: virtual ~ResourceMap(); virtual KmlDomType Type() const { return Type_ResourceMap; } virtual bool IsA(KmlDomType type) const { return type == Type_ResourceMap || Object::IsA(type); } void add_alias(const AliasPtr& alias); size_t get_alias_array_size() const { return alias_array_.size(); } const AliasPtr& get_alias_array_at(size_t index) const { return alias_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; ResourceMap(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; std::vector<AliasPtr> alias_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(ResourceMap); }; // <Model> class Model : public AltitudeGeometryCommon { public: virtual ~Model(); virtual KmlDomType Type() const { return Type_Model; } virtual bool IsA(KmlDomType type) const { return type == Type_Model || Geometry::IsA(type); } // <Location> const LocationPtr& get_location() const { return location_; } bool has_location() const { return location_ != NULL; } void set_location(const LocationPtr& location) { SetComplexChild(location, &location_); } void clear_location() { set_location(NULL); } // <Orientation> const OrientationPtr& get_orientation() const { return orientation_; } bool has_orientation() const { return orientation_ != NULL; } void set_orientation(const OrientationPtr& orientation) { SetComplexChild(orientation, &orientation_); } void clear_orientation() { set_orientation(NULL); } // <Scale> const ScalePtr& get_scale() const { return scale_; } bool has_scale() const { return scale_ != NULL; } void set_scale(const ScalePtr& scale) { SetComplexChild(scale, &scale_); } void clear_scale() { set_scale(NULL); } // <Link> const LinkPtr& get_link() const { return link_; } bool has_link() const { return link_ != NULL; } void set_link(const LinkPtr& link) { SetComplexChild(link, &link_); } void clear_link() { set_link(NULL); } // <ResourceMap> const ResourceMapPtr& get_resourcemap() const { return resourcemap_; } bool has_resourcemap() const { return resourcemap_ != NULL; } void set_resourcemap(const ResourceMapPtr& resourcemap) { SetComplexChild(resourcemap, &resourcemap_); } void clear_resourcemap() { resourcemap_ = NULL; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Model(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; LocationPtr location_; OrientationPtr orientation_; ScalePtr scale_; LinkPtr link_; ResourceMapPtr resourcemap_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Model); }; } // namespace kmldom #endif // KML_DOM_GEOMETRY_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/gx_timeprimitive.cc��������������������������������������������������������0000664�0000000�0000000�00000004142�12636032571�0021020�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the concrete elements GxTimeSpan // and GxTimeStamp. #include "kml/dom/gx_timeprimitive.h" #include "kml/base/attributes.h" using kmlbase::Attributes; namespace kmldom { GxTimeSpan::GxTimeSpan() { set_xmlns(kmlbase::XMLNS_GX22); } GxTimeSpan::~GxTimeSpan() {} void GxTimeSpan::Accept(Visitor* visitor) { visitor->VisitGxTimeSpan(GxTimeSpanPtr(this)); } GxTimeStamp::GxTimeStamp() { set_xmlns(kmlbase::XMLNS_GX22); } GxTimeStamp::~GxTimeStamp() {} void GxTimeStamp::Accept(Visitor* visitor) { visitor->VisitGxTimeStamp(GxTimeStampPtr(this)); } } // end namespace kmldom ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/gx_timeprimitive.h���������������������������������������������������������0000664�0000000�0000000�00000005645�12636032571�0020673�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations for the gx:TimeStamp and gx:TimeSpan // elements. #ifndef KML_DOM_GX_TIMEPRIMITIVE_H__ #define KML_DOM_GX_TIMEPRIMITIVE_H__ #include <string> #include "kml/base/xml_namespaces.h" #include "kml/dom/kml22.h" #include "kml/dom/object.h" #include "kml/dom/timeprimitive.h" namespace kmldom { class Serializer; class Visitor; // <gx:TimeSpan> class GxTimeSpan : public TimeSpan { public: virtual ~GxTimeSpan(); static KmlDomType ElementType() { return Type_GxTimeSpan; } virtual KmlDomType Type() const { return Type_GxTimeSpan; } virtual bool IsA(KmlDomType type) const { return type == Type_GxTimeSpan || TimeSpan::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; GxTimeSpan(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxTimeSpan); }; // <gx:TimeStamp> class GxTimeStamp : public TimeStamp { public: virtual ~GxTimeStamp(); static KmlDomType ElementType() { return Type_GxTimeStamp; } virtual KmlDomType Type() const { return Type_GxTimeStamp; } virtual bool IsA(KmlDomType type) const { return type == Type_GxTimeStamp || TimeStamp::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; GxTimeStamp(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxTimeStamp); }; } // end namespace kmldom #endif // KML_DOM_GX_TIMEPRIMITIVE_H__ �������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/gx_tour.cc�����������������������������������������������������������������0000664�0000000�0000000�00000020064�12636032571�0017123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the <gx:Tour> and related elements. #include "kml/dom/gx_tour.h" #include "kml/base/attributes.h" #include "kml/base/xml_namespaces.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { // <gx:Tour> GxTour::GxTour() { set_xmlns(kmlbase::XMLNS_GX22); } GxTour::~GxTour() {} void GxTour::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_GxPlaylist) { set_gx_playlist(AsGxPlaylist(element)); } else { Feature::AddElement(element); } } void GxTour::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Feature::Serialize(serializer); if (has_gx_playlist()) { serializer.SaveElement(get_gx_playlist()); } } void GxTour::Accept(Visitor* visitor) { visitor->VisitGxTour(GxTourPtr(this)); } void GxTour::AcceptChildren(VisitorDriver* driver) { Feature::AcceptChildren(driver); if (has_gx_playlist()) { driver->Visit(get_gx_playlist()); } } // <gx:Playlist> GxPlaylist::GxPlaylist() { set_xmlns(kmlbase::XMLNS_GX22); } GxPlaylist::~GxPlaylist() {} void GxPlaylist::add_gx_tourprimitive( const GxTourPrimitivePtr& gx_tourprimitive) { gx_tourprimitive_array_.push_back(gx_tourprimitive); } size_t GxPlaylist::get_gx_tourprimitive_array_size() const { return gx_tourprimitive_array_.size(); } const GxTourPrimitivePtr& GxPlaylist::get_gx_tourprimitive_array_at(size_t index) const{ return gx_tourprimitive_array_[index]; } void GxPlaylist::AddElement(const ElementPtr& element) { if (GxTourPrimitivePtr gx_tourprimitive = AsGxTourPrimitive(element)) { add_gx_tourprimitive(gx_tourprimitive); } else { Element::AddElement(element); } } void GxPlaylist::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); for (size_t i = 0; i < get_gx_tourprimitive_array_size(); ++i) { serializer.SaveElementGroup(get_gx_tourprimitive_array_at(i), Type_GxTourPrimitive); } } void GxPlaylist::Accept(Visitor* visitor) { visitor->VisitGxPlaylist(GxPlaylistPtr(this)); } void GxPlaylist::AcceptChildren(VisitorDriver* driver) { Object::AcceptChildren(driver); Element::AcceptRepeated<GxTourPrimitivePtr>(&gx_tourprimitive_array_, driver); } // TourPrimitiveCommon void GxTourPrimitiveCommon::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_GxDuration) { has_gx_duration_ = element->SetDouble(&gx_duration_); return; } GxTourPrimitive::AddElement(element); } void GxTourPrimitiveCommon::Serialize(Serializer& serializer) const { if (has_gx_duration()) { serializer.SaveFieldById(Type_GxDuration, get_gx_duration()); } } // <gx:AnimatedUpdate> GxAnimatedUpdate::GxAnimatedUpdate() { set_xmlns(kmlbase::XMLNS_GX22); } GxAnimatedUpdate::~GxAnimatedUpdate() {} void GxAnimatedUpdate::AddElement(const ElementPtr& element) { if (UpdatePtr update = AsUpdate(element)) { set_update(update); return; } GxTourPrimitiveCommon::AddElement(element); } void GxAnimatedUpdate::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); GxTourPrimitiveCommon::Serialize(serializer); if (has_update()) { serializer.SaveElement(get_update()); } } void GxAnimatedUpdate::Accept(Visitor* visitor) { visitor->VisitGxAnimatedUpdate(GxAnimatedUpdatePtr(this)); } void GxAnimatedUpdate::AcceptChildren(VisitorDriver* driver) { GxTourPrimitiveCommon::AcceptChildren(driver); if (has_update()) { driver->Visit(get_update()); } } // <gx:FlyTo> GxFlyTo::GxFlyTo() : gx_flytomode_(GX_FLYTOMODE_BOUNCE), has_gx_flytomode_(false) { set_xmlns(kmlbase::XMLNS_GX22); } GxFlyTo::~GxFlyTo() {} void GxFlyTo::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_GxFlyToMode) { has_gx_flytomode_ = element->SetEnum(&gx_flytomode_); return; } if (AbstractViewPtr abstractview = AsAbstractView(element)) { set_abstractview(abstractview); return; } GxTourPrimitiveCommon::AddElement(element); } void GxFlyTo::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); GxTourPrimitiveCommon::Serialize(serializer); if (has_gx_flytomode()) { serializer.SaveEnum(Type_GxFlyToMode, get_gx_flytomode()); } if (has_abstractview()) { serializer.SaveElement(get_abstractview()); } } void GxFlyTo::Accept(Visitor* visitor) { visitor->VisitGxFlyTo(GxFlyToPtr(this)); } void GxFlyTo::AcceptChildren(VisitorDriver* driver) { GxTourPrimitiveCommon::AcceptChildren(driver); if (has_abstractview()) { driver->Visit(get_abstractview()); } } // <gx:Wait> GxWait::GxWait() { set_xmlns(kmlbase::XMLNS_GX22); } GxWait::~GxWait() {} void GxWait::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); GxTourPrimitiveCommon::Serialize(serializer); } void GxWait::Accept(Visitor* visitor) { visitor->VisitGxWait(GxWaitPtr(this)); } // <gx:SoundCue> GxSoundCue::GxSoundCue() : has_href_(false) { set_xmlns(kmlbase::XMLNS_GX22); } GxSoundCue::~GxSoundCue() {} void GxSoundCue::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_href) { has_href_ = element->SetString(&href_); return; } GxTourPrimitive::AddElement(element); } void GxSoundCue::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); GxTourPrimitive::Serialize(serializer); if (has_href()) { serializer.SaveFieldById(Type_href, get_href()); } } void GxSoundCue::Accept(Visitor* visitor) { visitor->VisitGxSoundCue(GxSoundCuePtr(this)); } // <gx:TourControl> GxTourControl::GxTourControl() : gx_playmode_(GX_PLAYMODE_PAUSE), has_gx_playmode_(false) { set_xmlns(kmlbase::XMLNS_GX22); } GxTourControl::~GxTourControl() {} void GxTourControl::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_GxPlayMode) { has_gx_playmode_ = element->SetEnum(&gx_playmode_); return; } GxTourPrimitive::AddElement(element); } void GxTourControl::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); GxTourPrimitive::Serialize(serializer); if (has_gx_playmode()) { serializer.SaveEnum(Type_GxPlayMode, get_gx_playmode()); } } void GxTourControl::Accept(Visitor* visitor) { visitor->VisitGxTourControl(GxTourControlPtr(this)); } } // end namespace kmldom ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/gx_tour.h������������������������������������������������������������������0000664�0000000�0000000�00000025074�12636032571�0016773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of <gx:Tour>, <gx:Playlist>, // <gx:AnimatedUpdate>, <gx:Wait>, <gx:FlyTo>, <gx:SoundCue>, and // <gx:TourControl>. #ifndef KML_GX_DOM_TOUR_H__ #define KML_GX_DOM_TOUR_H__ #include "kml/dom/element.h" #include "kml/dom/feature.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/networklinkcontrol.h" namespace kmlbase { class Attributes; } namespace kmldom { class Serializer; class Visitor; class VisitorDriver; // <gx:Tour> class GxTour : public Feature { public: virtual ~GxTour(); static KmlDomType ElementType() { return Type_GxTour; } virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType() || Feature::IsA(type); } // <gx:Playlist> const GxPlaylistPtr& get_gx_playlist() const { return gx_playlist_; } bool has_gx_playlist() const { return gx_playlist_ != NULL; } void set_gx_playlist(const GxPlaylistPtr& gx_playlist) { SetComplexChild(gx_playlist, &gx_playlist_); } void clear_gx_playlist() { set_gx_playlist(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; GxTour(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; GxPlaylistPtr gx_playlist_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxTour); }; // <gx:Playlist> class GxPlaylist : public Object { public: virtual ~GxPlaylist(); static KmlDomType ElementType() { return Type_GxPlaylist; } virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType() || Object::IsA(type); } // GxTourPrimitive... void add_gx_tourprimitive(const GxTourPrimitivePtr& tourprimitive); size_t get_gx_tourprimitive_array_size() const; const GxTourPrimitivePtr& get_gx_tourprimitive_array_at(size_t index) const; // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; GxPlaylist(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; std::vector<GxTourPrimitivePtr> gx_tourprimitive_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxPlaylist); }; // GxTourPrimitive is an abstract base type. This corresponds to // gx:AbstractGxTourPrimitiveType/Group in KML 2.2 gx. class GxTourPrimitive : public Object { public: static KmlDomType ElementType() { return static_cast<KmlDomType>(Type_GxTourPrimitive); } virtual KmlDomType Type() const { return ElementType(); } bool IsA(KmlDomType type) const { return type == ElementType() || Object::IsA(type); } protected: GxTourPrimitive() {} private: LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxTourPrimitive); }; // Intermediate common class for GxTourPrimitive with gx_duration. class GxTourPrimitiveCommon : public GxTourPrimitive { public: // <gx:duration> double get_gx_duration() const { return gx_duration_; } bool has_gx_duration() const { return has_gx_duration_; } void set_gx_duration(double gx_duration) { gx_duration_ = gx_duration; has_gx_duration_ = true; } void clear_gx_duration() { gx_duration_ = 0.0; has_gx_duration_ = false; } protected: // This is an internal abstract element and is inherited only and never // instantiated directly. GxTourPrimitiveCommon() : has_gx_duration_(false), gx_duration_(0.0) { } virtual void AddElement(const ElementPtr& element); virtual void Serialize(Serializer& serializer) const; private: bool has_gx_duration_; double gx_duration_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxTourPrimitiveCommon); }; // <gx:AnimatedUpdate> class GxAnimatedUpdate : public GxTourPrimitiveCommon { public: virtual ~GxAnimatedUpdate(); static KmlDomType ElementType() { return Type_GxAnimatedUpdate; } virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType() || GxTourPrimitive::IsA(type); } // <Update> const UpdatePtr& get_update() const { return update_; } bool has_update() const { return update_ != NULL; } void set_update(const UpdatePtr& update) { SetComplexChild(update, &update_); } void clear_update() { set_update(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; GxAnimatedUpdate(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; UpdatePtr update_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxAnimatedUpdate); }; // <gx:FlyTo> class GxFlyTo : public GxTourPrimitiveCommon { public: virtual ~GxFlyTo(); static KmlDomType ElementType() { return Type_GxFlyTo; } virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType() || GxTourPrimitive::IsA(type); } // <gx:flyToMode>. int get_gx_flytomode() const { return gx_flytomode_; } bool has_gx_flytomode() const { return has_gx_flytomode_; } void set_gx_flytomode(int value) { gx_flytomode_ = value; has_gx_flytomode_ = true; } void clear_gx_flytomode() { gx_flytomode_ = kmldom::GX_FLYTOMODE_BOUNCE; has_gx_flytomode_ = false; } // AbstractView const AbstractViewPtr& get_abstractview() const { return abstractview_; } bool has_abstractview() const { return abstractview_ != NULL; } void set_abstractview(const AbstractViewPtr& abstractview) { SetComplexChild(abstractview, &abstractview_); } void clear_abstractview() { set_abstractview(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: int gx_flytomode_; bool has_gx_flytomode_; friend class KmlFactory; GxFlyTo(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; AbstractViewPtr abstractview_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxFlyTo); }; // <gx:Wait> class GxWait : public GxTourPrimitiveCommon { public: virtual ~GxWait(); static KmlDomType ElementType() { return Type_GxWait; } virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType() || GxTourPrimitive::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; GxWait(); friend class Serializer; virtual void Serialize(Serializer& serializer) const; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxWait); }; // <gx:SoundCue> class GxSoundCue : public GxTourPrimitive { public: virtual ~GxSoundCue(); static KmlDomType ElementType() { return Type_GxSoundCue; } virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType() || GxTourPrimitive::IsA(type); } // <href> const string& get_href() const { return href_; } bool has_href() const { return has_href_; } void set_href(const string& href) { href_ = href; has_href_ = true; } void clear_href() { href_.clear(); has_href_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: string href_; bool has_href_; friend class KmlFactory; GxSoundCue(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxSoundCue); }; // <gx:TourControl> class GxTourControl : public GxTourPrimitive { public: virtual ~GxTourControl(); static KmlDomType ElementType() { return Type_GxTourControl; } virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType() || GxTourPrimitive::IsA(type); } // <gx:playMode> int get_gx_playmode() const { return gx_playmode_; } bool has_gx_playmode() const { return has_gx_playmode_; } void set_gx_playmode(int value) { gx_playmode_ = value; has_gx_playmode_ = true; } void clear_gx_playmode() { gx_playmode_ = GX_PLAYMODE_PAUSE; has_gx_playmode_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: int gx_playmode_; bool has_gx_playmode_; friend class KmlFactory; GxTourControl(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxTourControl); }; } // end namespace kmldom #endif // KML_GX_DOM_TOUR_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/hotspot.cc�����������������������������������������������������������������0000664�0000000�0000000�00000003146�12636032571�0017136�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/hotspot.h" namespace kmldom { HotSpot::HotSpot() {} HotSpot::~HotSpot() {} } // end namespace kmldom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/hotspot.h������������������������������������������������������������������0000664�0000000�0000000�00000004036�12636032571�0016777�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_HOTSPOT_H__ #define KML_DOM_HOTSPOT_H__ #include "kml/dom/vec2.h" #include "kml/dom/kml22.h" #include "kml/base/util.h" namespace kmldom { class Serializer; // <hotSpot> class HotSpot : public Vec2 { public: virtual ~HotSpot(); virtual KmlDomType Type() const { return Type_hotSpot; } virtual bool IsA(KmlDomType type) const { return type == Type_hotSpot || Vec2::IsA(type); } private: friend class KmlFactory; HotSpot(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(HotSpot); }; } // end namespace kmldom #endif // KML_DOM_HOTSPOT_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/iconstyle.cc���������������������������������������������������������������0000664�0000000�0000000�00000006302�12636032571�0017444�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the IconStyle element. #include "kml/dom/iconstyle.h" #include "kml/base/attributes.h" #include "kml/dom/element.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { class IconStyleIcon; class HotSpot; IconStyle::IconStyle() : scale_(1.0), has_scale_(false), heading_(0.0), has_heading_(false) { } IconStyle::~IconStyle() {} void IconStyle::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_scale: has_scale_ = element->SetDouble(&scale_); break; case Type_heading: has_heading_ = element->SetDouble(&heading_); break; case Type_IconStyleIcon: set_icon(AsIconStyleIcon(element)); break; case Type_hotSpot: set_hotspot(AsHotSpot(element)); break; default: ColorStyle::AddElement(element); break; } } void IconStyle::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); ColorStyle::Serialize(serializer); if (has_scale()) { serializer.SaveFieldById(Type_scale, get_scale()); } if (has_heading()) { serializer.SaveFieldById(Type_heading, get_heading()); } if (has_icon()) { serializer.SaveElement(get_icon()); } if (has_hotspot()) { serializer.SaveElement(get_hotspot()); } } void IconStyle::Accept(Visitor* visitor) { visitor->VisitIconStyle(IconStylePtr(this)); } void IconStyle::AcceptChildren(VisitorDriver* driver) { ColorStyle::AcceptChildren(driver); if (has_icon()) { driver->Visit(get_icon()); } if (has_hotspot()) { driver->Visit(get_hotspot()); } } } // end namespace kmldom ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/iconstyle.h����������������������������������������������������������������0000664�0000000�0000000�00000007273�12636032571�0017316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_ICONSTYLE_H__ #define KML_DOM_ICONSTYLE_H__ #include "kml/dom/colorstyle.h" #include "kml/dom/hotspot.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/link.h" #include "kml/base/util.h" namespace kmldom { class Visitor; class VisitorDriver; // <IconStyle> class IconStyle : public ColorStyle { public: virtual ~IconStyle(); virtual KmlDomType Type() const { return Type_IconStyle; } virtual bool IsA(KmlDomType type) const { return type == Type_IconStyle || ColorStyle::IsA(type); } // <scale> double get_scale() const { return scale_; } bool has_scale() const { return has_scale_; } void set_scale(double scale) { scale_ = scale; has_scale_ = true; } void clear_scale() { scale_ = 1.0; has_scale_ = false; } // <heading> double get_heading() const { return heading_; } bool has_heading() const { return has_heading_; } void set_heading(double heading) { heading_ = heading; has_heading_ = true; } void clear_heading() { heading_ = 0.0; has_heading_ = false; } // <Icon> (different than Overlay Icon) const IconStyleIconPtr& get_icon() const { return icon_; } bool has_icon() const { return icon_ != NULL; } void set_icon(const IconStyleIconPtr& icon) { SetComplexChild(icon, &icon_); } void clear_icon() { set_icon(NULL); } // <hotSpot> const HotSpotPtr& get_hotspot() const { return hotspot_; } bool has_hotspot() const { return hotspot_ != NULL; } void set_hotspot(const HotSpotPtr& hotspot) { SetComplexChild(hotspot, &hotspot_); } void clear_hotspot() { set_hotspot(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; IconStyle(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serialize) const; double scale_; bool has_scale_; double heading_; bool has_heading_; IconStyleIconPtr icon_; HotSpotPtr hotspot_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(IconStyle); }; } // end namespace kmldom #endif // KML_DOM_ICONSTYLE_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml.cc���������������������������������������������������������������������0000664�0000000�0000000�00000006120�12636032571�0016214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/kml.h" #include "kml/base/attributes.h" #include "kml/base/xml_namespaces.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { Kml::Kml() : has_hint_(false) { set_xmlns(kmlbase::XMLNS_KML22); } Kml::~Kml() {} static const char kHint[] = "hint"; void Kml::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_hint_ = attributes->CutValue(kHint, &hint_); AddUnknownAttributes(attributes); } void Kml::SerializeAttributes(Attributes* attributes) const { Element::SerializeAttributes(attributes); if (has_hint_) { attributes->SetValue(kHint, hint_); } } void Kml::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->IsA(Type_Feature)) { set_feature(AsFeature(element)); } else if (element->Type() == Type_NetworkLinkControl) { set_networklinkcontrol(AsNetworkLinkControl(element)); } else { Element::AddElement(element); } } void Kml::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); if (has_networklinkcontrol()) { serializer.SaveElement(get_networklinkcontrol()); } if (has_feature()) { serializer.SaveElementGroup(get_feature(), Type_Feature); } } void Kml::Accept(Visitor* visitor) { visitor->VisitKml(KmlPtr(this)); } void Kml::AcceptChildren(VisitorDriver* driver) { Element::AcceptChildren(driver); if (has_networklinkcontrol()) { driver->Visit(get_networklinkcontrol()); } if (has_feature()) { driver->Visit(get_feature()); } } } // end namespace kmldom ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml.h����������������������������������������������������������������������0000664�0000000�0000000�00000006661�12636032571�0016070�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_KML_H__ #define KML_DOM_KML_H__ #include "kml/dom/element.h" #include "kml/dom/feature.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/networklinkcontrol.h" namespace kmlbase { class Attributes; } namespace kmldom { class Serializer; class Visitor; class VisitorDriver; // <kml> class Kml : public BasicElement<Type_kml> { public: virtual ~Kml(); const string& get_hint() { return hint_; } bool has_hint() const { return has_hint_; } void set_hint(const string& hint) { hint_ = hint; has_hint_ = true; } void clear_hint() { hint_.clear(); has_hint_ = false; } const NetworkLinkControlPtr& get_networklinkcontrol() const { return networklinkcontrol_; } bool has_networklinkcontrol() const { return networklinkcontrol_ != NULL; } void set_networklinkcontrol(const NetworkLinkControlPtr& networklinkcontrol) { SetComplexChild(networklinkcontrol, &networklinkcontrol_); } void clear_networklinkcontrol() { set_networklinkcontrol(NULL); } const FeaturePtr& get_feature() const { return feature_; } bool has_feature() const { return feature_ != NULL; } void set_feature(const FeaturePtr& feature) { SetComplexChild(feature, &feature_); } void clear_feature() { set_feature(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Kml(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); virtual void ParseAttributes(kmlbase::Attributes* attributes); friend class Serializer; virtual void Serialize(Serializer& serializer) const; virtual void SerializeAttributes(kmlbase::Attributes* attributes) const; string hint_; bool has_hint_; NetworkLinkControlPtr networklinkcontrol_; FeaturePtr feature_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Kml); }; } // end namespace kmldom #endif // KML_DOM_KML_H__ �������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml22.cc�������������������������������������������������������������������0000664�0000000�0000000�00000031665�12636032571�0016374�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the KML 2.2 element names as found in the KML 2.2 XSD. #include "kml/dom/kml22.h" #include "kml/dom/xsd.h" namespace kmldom { // There is an entry here for each global <xs:element> in the KML 2.2 XSD static XsdElement kKml22Elements[] = { { "<Unknown>", XSD_UNKNOWN }, // Reserve slot 0, note impossible tag name. // These are the abstract substitution group elements in the XSD. // The name matches that of the OGC KML 2.2 (Candidate) Standard // The "casual" name in the comment is the corresponding name // used in the code.google.com/apis/kml KML 2.2 Reference. { "AbstractColorStyleGroup", XSD_COMPLEX_TYPE }, // "ColorStyle" { "Container", XSD_COMPLEX_TYPE }, // "Container" { "Feature", XSD_COMPLEX_TYPE }, // "Feature" { "Geometry", XSD_COMPLEX_TYPE }, // "Geometry" { "AbstractLatLonBox", XSD_COMPLEX_TYPE }, // (Not in Kml ref). { "AbstractObjectGroup", XSD_COMPLEX_TYPE }, // "Object" { "AbstractOverlayGroup", XSD_COMPLEX_TYPE }, // "Overlay" { "StyleSelector", XSD_COMPLEX_TYPE }, // "StyleSelector" { "AbstractSubStyleGroup", XSD_COMPLEX_TYPE }, // "SubStyle" { "TimePrimitive", XSD_COMPLEX_TYPE }, // "TimePrimitive" { "AbstractView", XSD_COMPLEX_TYPE }, // "AbstractView" { "BasicLink", XSD_COMPLEX_TYPE }, // (Not in KML ref). { "vec2Type", XSD_COMPLEX_TYPE }, // "vec2" // Most elements starting with a big letter are complex. { "Alias", XSD_COMPLEX_TYPE }, { "BalloonStyle", XSD_COMPLEX_TYPE }, { "Camera", XSD_COMPLEX_TYPE }, { "Change", XSD_COMPLEX_TYPE }, { "Create", XSD_COMPLEX_TYPE }, { "Data", XSD_COMPLEX_TYPE }, { "Delete", XSD_COMPLEX_TYPE }, { "Document", XSD_COMPLEX_TYPE }, { "ExtendedData", XSD_COMPLEX_TYPE }, { "Folder", XSD_COMPLEX_TYPE }, { "GroundOverlay", XSD_COMPLEX_TYPE }, { "Icon", XSD_COMPLEX_TYPE }, // <Icon> in Overlay { "IconStyle", XSD_COMPLEX_TYPE }, { "IconStyleIcon", XSD_COMPLEX_TYPE }, // <Icon> in <IconStyle> { "ImagePyramid", XSD_COMPLEX_TYPE }, { "ItemIcon", XSD_COMPLEX_TYPE }, { "LabelStyle", XSD_COMPLEX_TYPE }, { "LatLonAltBox", XSD_COMPLEX_TYPE }, { "LatLonBox", XSD_COMPLEX_TYPE }, { "LineString", XSD_COMPLEX_TYPE }, { "LineStyle", XSD_COMPLEX_TYPE }, { "LinearRing", XSD_COMPLEX_TYPE }, { "Link", XSD_COMPLEX_TYPE }, { "ListStyle", XSD_COMPLEX_TYPE }, { "Location", XSD_COMPLEX_TYPE }, { "Lod", XSD_COMPLEX_TYPE }, { "LookAt", XSD_COMPLEX_TYPE }, { "Metadata", XSD_COMPLEX_TYPE }, { "Model", XSD_COMPLEX_TYPE }, { "MultiGeometry", XSD_COMPLEX_TYPE }, { "NetworkLink", XSD_COMPLEX_TYPE }, { "NetworkLinkControl", XSD_COMPLEX_TYPE }, { "Orientation", XSD_COMPLEX_TYPE }, { "Pair", XSD_COMPLEX_TYPE }, { "PhotoOverlay", XSD_COMPLEX_TYPE }, { "Placemark", XSD_COMPLEX_TYPE }, { "Point", XSD_COMPLEX_TYPE }, { "PolyStyle", XSD_COMPLEX_TYPE }, { "Polygon", XSD_COMPLEX_TYPE }, { "Region", XSD_COMPLEX_TYPE }, { "ResourceMap", XSD_COMPLEX_TYPE }, { "Scale", XSD_COMPLEX_TYPE }, { "Schema", XSD_COMPLEX_TYPE }, { "SchemaData", XSD_COMPLEX_TYPE }, { "ScreenOverlay", XSD_COMPLEX_TYPE }, { "SimpleData", XSD_COMPLEX_TYPE }, { "SimpleField", XSD_COMPLEX_TYPE }, { "Snippet", XSD_COMPLEX_TYPE }, { "Style", XSD_COMPLEX_TYPE }, { "StyleMap", XSD_COMPLEX_TYPE }, { "TimeSpan", XSD_COMPLEX_TYPE }, { "TimeStamp", XSD_COMPLEX_TYPE }, { "Update", XSD_COMPLEX_TYPE }, { "Url", XSD_COMPLEX_TYPE }, { "ViewVolume", XSD_COMPLEX_TYPE }, // Most elements (but not all) starting with a little letter are simple. { "address", XSD_SIMPLE_TYPE }, { "altitude", XSD_SIMPLE_TYPE }, { "altitudeMode", XSD_SIMPLE_TYPE }, { "altitudeModeGroup", XSD_SIMPLE_TYPE }, { "begin", XSD_SIMPLE_TYPE }, { "bgColor", XSD_SIMPLE_TYPE }, { "bottomFov", XSD_SIMPLE_TYPE }, { "color", XSD_SIMPLE_TYPE }, { "colorMode", XSD_SIMPLE_TYPE }, { "cookie", XSD_SIMPLE_TYPE }, { "coordinates", XSD_COMPLEX_TYPE }, // class Coordinates { "description", XSD_SIMPLE_TYPE }, { "displayMode", XSD_SIMPLE_TYPE }, { "displayName", XSD_SIMPLE_TYPE }, { "drawOrder", XSD_SIMPLE_TYPE }, { "east", XSD_SIMPLE_TYPE }, { "end", XSD_SIMPLE_TYPE }, { "expires", XSD_SIMPLE_TYPE }, { "extrude", XSD_SIMPLE_TYPE }, { "fill", XSD_SIMPLE_TYPE }, { "flyToView", XSD_SIMPLE_TYPE }, { "gridOrigin", XSD_SIMPLE_TYPE }, { "heading", XSD_SIMPLE_TYPE }, { "hotSpot", XSD_COMPLEX_TYPE }, { "href", XSD_SIMPLE_TYPE }, { "httpQuery", XSD_SIMPLE_TYPE }, { "innerBoundaryIs", XSD_COMPLEX_TYPE }, // Implemented as class { "key", XSD_SIMPLE_TYPE }, { "kml", XSD_COMPLEX_TYPE }, // <kml> is special { "latitude", XSD_SIMPLE_TYPE }, { "leftFov", XSD_SIMPLE_TYPE }, { "linkDescription", XSD_SIMPLE_TYPE }, { "linkName", XSD_SIMPLE_TYPE }, { "linkSnippet", XSD_COMPLEX_TYPE }, // Like Snippet this has maxLines { "listItemType", XSD_SIMPLE_TYPE }, { "longitude", XSD_SIMPLE_TYPE }, { "maxAltitude", XSD_SIMPLE_TYPE }, { "maxFadeExtent", XSD_SIMPLE_TYPE }, { "maxHeight", XSD_SIMPLE_TYPE }, { "maxLength", XSD_SIMPLE_TYPE }, { "maxLodPixels", XSD_SIMPLE_TYPE }, { "maxSessionLength", XSD_SIMPLE_TYPE }, { "maxSnippetLines", XSD_SIMPLE_TYPE }, { "maxWidth", XSD_SIMPLE_TYPE }, { "message", XSD_SIMPLE_TYPE }, { "minAltitude", XSD_SIMPLE_TYPE }, { "minFadeExtent", XSD_SIMPLE_TYPE }, { "minLodPixels", XSD_SIMPLE_TYPE }, { "minRefreshPeriod", XSD_SIMPLE_TYPE }, { "name", XSD_SIMPLE_TYPE }, { "near", XSD_SIMPLE_TYPE }, { "north", XSD_SIMPLE_TYPE }, { "open", XSD_SIMPLE_TYPE }, { "outerBoundaryIs", XSD_COMPLEX_TYPE }, // Implemented as a class { "outline", XSD_SIMPLE_TYPE }, { "overlayXY", XSD_COMPLEX_TYPE }, { "phoneNumber", XSD_SIMPLE_TYPE }, { "range", XSD_SIMPLE_TYPE }, { "refreshInterval", XSD_SIMPLE_TYPE }, { "refreshMode", XSD_SIMPLE_TYPE }, { "refreshVisibility", XSD_SIMPLE_TYPE }, { "rightFov", XSD_SIMPLE_TYPE }, { "roll", XSD_SIMPLE_TYPE }, { "rotation", XSD_SIMPLE_TYPE }, { "rotationXY", XSD_COMPLEX_TYPE }, { "scale", XSD_SIMPLE_TYPE }, { "screenXY", XSD_COMPLEX_TYPE }, { "shape", XSD_SIMPLE_TYPE }, { "size", XSD_COMPLEX_TYPE }, { "snippet", XSD_SIMPLE_TYPE }, { "sourceHref", XSD_SIMPLE_TYPE }, { "south", XSD_SIMPLE_TYPE }, { "state", XSD_SIMPLE_TYPE }, { "styleUrl", XSD_SIMPLE_TYPE }, { "targetHref", XSD_SIMPLE_TYPE }, { "tessellate", XSD_SIMPLE_TYPE }, { "text", XSD_SIMPLE_TYPE }, { "textColor", XSD_SIMPLE_TYPE }, { "tileSize", XSD_SIMPLE_TYPE }, { "tilt", XSD_SIMPLE_TYPE }, { "topFov", XSD_SIMPLE_TYPE }, { "units", XSD_SIMPLE_TYPE }, // For unitsEnum, not actually an element. { "value", XSD_SIMPLE_TYPE }, { "viewBoundScale", XSD_SIMPLE_TYPE }, { "viewFormat", XSD_SIMPLE_TYPE }, { "viewRefreshMode", XSD_SIMPLE_TYPE }, { "viewRefreshTime", XSD_SIMPLE_TYPE }, { "visibility", XSD_SIMPLE_TYPE }, { "west", XSD_SIMPLE_TYPE }, { "when", XSD_SIMPLE_TYPE }, { "width", XSD_SIMPLE_TYPE }, { "x", XSD_SIMPLE_TYPE }, { "y", XSD_SIMPLE_TYPE }, { "z", XSD_SIMPLE_TYPE }, // Atom complex elements { "atom:author", XSD_COMPLEX_TYPE }, { "atom:category", XSD_COMPLEX_TYPE }, { "atom:content", XSD_COMPLEX_TYPE }, { "atom:entry", XSD_COMPLEX_TYPE }, { "atom:feed", XSD_COMPLEX_TYPE }, { "atom:link", XSD_COMPLEX_TYPE }, // Atom simple elements { "atom:email", XSD_SIMPLE_TYPE }, { "atom:id", XSD_SIMPLE_TYPE }, { "atom:label", XSD_SIMPLE_TYPE }, { "atom:name", XSD_SIMPLE_TYPE }, { "atom:scheme", XSD_SIMPLE_TYPE }, { "atom:summary", XSD_SIMPLE_TYPE }, { "atom:term", XSD_SIMPLE_TYPE }, { "atom:title", XSD_SIMPLE_TYPE }, { "atom:updated", XSD_SIMPLE_TYPE }, { "atom:uri", XSD_SIMPLE_TYPE }, // xAL complex elements { "xal:AddressDetails", XSD_COMPLEX_TYPE }, { "xal:AdministrativeArea", XSD_COMPLEX_TYPE }, { "xal:Country", XSD_COMPLEX_TYPE }, { "xal:Locality", XSD_COMPLEX_TYPE }, { "xal:PostalCode", XSD_COMPLEX_TYPE }, { "xal:SubAdministrativeArea", XSD_COMPLEX_TYPE }, { "xal:Thoroughfare", XSD_COMPLEX_TYPE }, // xAL simple elements { "xal:AdministrativeAreaName", XSD_SIMPLE_TYPE }, { "xal:CountryNameCode", XSD_SIMPLE_TYPE }, { "xal:LocalityName", XSD_SIMPLE_TYPE }, { "xal:PostalCodeNumber", XSD_SIMPLE_TYPE }, { "xal:SubAdministrativeAreaName", XSD_SIMPLE_TYPE }, { "xal:ThoroughfareName", XSD_SIMPLE_TYPE }, { "xal:ThoroughfareNumber", XSD_SIMPLE_TYPE }, // Google extension abstract substitution group elements { "gx:AbstractTourPrimitiveGroup", XSD_COMPLEX_TYPE }, // "gx:TourPrimitive" // Google extension complex elements { "gx:AnimatedUpdate", XSD_COMPLEX_TYPE }, { "gx:FlyTo", XSD_COMPLEX_TYPE }, { "gx:LatLonQuad", XSD_COMPLEX_TYPE }, { "gx:MultiTrack", XSD_COMPLEX_TYPE }, { "gx:Playlist", XSD_COMPLEX_TYPE }, { "gx:SimpleArrayData", XSD_COMPLEX_TYPE }, { "gx:SimpleArrayField", XSD_COMPLEX_TYPE }, { "gx:SoundCue", XSD_COMPLEX_TYPE }, { "gx:TimeSpan", XSD_COMPLEX_TYPE }, { "gx:TimeStamp", XSD_COMPLEX_TYPE }, { "gx:Tour", XSD_COMPLEX_TYPE }, { "gx:TourControl", XSD_COMPLEX_TYPE }, { "gx:Track", XSD_COMPLEX_TYPE }, { "gx:Wait", XSD_COMPLEX_TYPE }, // Google extension simple elements { "gx:altitudeMode", XSD_SIMPLE_TYPE }, { "gx:angles", XSD_SIMPLE_TYPE }, { "gx:balloonVisibility", XSD_SIMPLE_TYPE }, { "gx:coord", XSD_SIMPLE_TYPE }, { "gx:duration", XSD_SIMPLE_TYPE }, { "gx:flyToMode", XSD_SIMPLE_TYPE }, { "gx:h", XSD_SIMPLE_TYPE }, { "gx:interpolate", XSD_SIMPLE_TYPE }, { "gx:playMode", XSD_SIMPLE_TYPE }, { "gx:value", XSD_SIMPLE_TYPE }, { "gx:w", XSD_SIMPLE_TYPE }, { "gx:x", XSD_SIMPLE_TYPE }, { "gx:y", XSD_SIMPLE_TYPE }, { "</Unknown>", XSD_UNKNOWN } // Mark the end appropriately. }; // There is an entry here for each enumeration in the XSD. // See the declaration of xsd_simple_type_enum_t for more details. static const char* kAltitudeModeEnums[] = { "clampToGround", "relativeToGround", "absolute", NULL }; static const char* kColorModeEnums[] = { "normal", "random", NULL }; static const char* kDisplayModeEnums[] = { "default", "hide", NULL }; static const char* kGridOriginEnums[] = { "lowerLeft", "upperLeft", NULL }; static const char* kItemIconStateEnums[] = { "open", "closed", "error", "fetching0", "fetching1", "fetching2", NULL }; static const char* kListItemTypeEnums[] = { "check", "radioFolder", "checkOffOnly", "checkHideChildren", NULL }; static const char* kRefreshModeEnums[] = { "onChange", "onInterval", "onExpire", NULL }; static const char* kShapeEnums[] = { "rectangle", "cylinder", "sphere", NULL }; static const char* kStyleStateEnums[] = { "normal", "highlight", NULL }; static const char* kUnitsEnums[] = { "fraction", "pixels", "insetPixels", NULL }; static const char* kViewRefreshModeEnums[] = { "never", "onRequest", "onStop", "onRegion", NULL }; static const char* kGxAltitudeModeEnums[] = { "clampToSeaFloor", "relativeToSeaFloor", NULL }; static const char* kGxFlyToViewEnums[] = { "bounce", "smooth", NULL }; static const char* kGxPlayModeEnums[] = { "pause", NULL }; static XsdSimpleTypeEnum kKml22Enums[] = { { Type_altitudeMode, kAltitudeModeEnums }, { Type_colorMode, kColorModeEnums }, { Type_displayMode, kDisplayModeEnums }, { Type_gridOrigin, kGridOriginEnums }, { Type_state, kItemIconStateEnums }, { Type_listItemType, kListItemTypeEnums }, { Type_refreshMode, kRefreshModeEnums }, { Type_shape, kShapeEnums }, { Type_key, kStyleStateEnums }, { Type_units, kUnitsEnums }, { Type_viewRefreshMode, kViewRefreshModeEnums }, { Type_GxAltitudeMode, kGxAltitudeModeEnums }, { Type_GxFlyToMode, kGxFlyToViewEnums }, { Type_GxPlayMode, kGxPlayModeEnums } }; } // namespace kmldom ���������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml22.h��������������������������������������������������������������������0000664�0000000�0000000�00000020415�12636032571�0016225�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file defines the id of each element. // The element names exactly match the OGC KML 2.2 Standard: // http://www.opengeospatial.org/standards/kml // See also Google's reference especially for the "gx" elements: // http://code.google.com/apis/kml/documentation/kmlreference.html // Type_${element_name} #ifndef KML_DOM_KML22_H #define KML_DOM_KML22_H namespace kmldom { // This list matches kml22_elements_[] exactly: typedef enum { Type_Unknown, Type_ColorStyle, Type_Container, Type_Feature, Type_Geometry, Type_AbstractLatLonBox, Type_Object, Type_Overlay, Type_StyleSelector, Type_SubStyle, Type_TimePrimitive, Type_AbstractView, Type_BasicLink, Type_Vec2, Type_Alias, Type_BalloonStyle, Type_Camera, Type_Change, Type_Create, Type_Data, Type_Delete, Type_Document, Type_ExtendedData, Type_Folder, Type_GroundOverlay, Type_Icon, Type_IconStyle, Type_IconStyleIcon, Type_ImagePyramid, Type_ItemIcon, Type_LabelStyle, Type_LatLonAltBox, Type_LatLonBox, Type_LineString, Type_LineStyle, Type_LinearRing, Type_Link, Type_ListStyle, Type_Location, Type_Lod, Type_LookAt, Type_Metadata, Type_Model, Type_MultiGeometry, Type_NetworkLink, Type_NetworkLinkControl, Type_Orientation, Type_Pair, Type_PhotoOverlay, Type_Placemark, Type_Point, Type_PolyStyle, Type_Polygon, Type_Region, Type_ResourceMap, Type_Scale, Type_Schema, Type_SchemaData, Type_ScreenOverlay, Type_SimpleData, Type_SimpleField, Type_Snippet, Type_Style, Type_StyleMap, Type_TimeSpan, Type_TimeStamp, Type_Update, Type_Url, Type_ViewVolume, Type_address, Type_altitude, Type_altitudeMode, Type_altitudeModeGroup, Type_begin, Type_bgColor, Type_bottomFov, Type_color, Type_colorMode, Type_cookie, Type_coordinates, Type_description, Type_displayMode, Type_displayName, Type_drawOrder, Type_east, Type_end, Type_expires, Type_extrude, Type_fill, Type_flyToView, Type_gridOrigin, Type_heading, Type_hotSpot, Type_href, Type_httpQuery, Type_innerBoundaryIs, Type_key, Type_kml, Type_latitude, Type_leftFov, Type_linkDescription, Type_linkName, Type_linkSnippet, Type_listItemType, Type_longitude, Type_maxAltitude, Type_maxFadeExtent, Type_maxHeight, Type_maxLength, Type_maxLodPixels, Type_maxSessionLength, Type_maxSnippetLines, Type_maxWidth, Type_message, Type_minAltitude, Type_minFadeExtent, Type_minLodPixels, Type_minRefreshPeriod, Type_name, Type_near, Type_north, Type_open, Type_outerBoundaryIs, Type_outline, Type_overlayXY, Type_phoneNumber, Type_range, Type_refreshInterval, Type_refreshMode, Type_refreshVisibility, Type_rightFov, Type_roll, Type_rotation, Type_rotationXY, Type_scale, Type_screenXY, Type_shape, Type_size, Type_snippet, Type_sourceHref, Type_south, Type_state, Type_styleUrl, Type_targetHref, Type_tessellate, Type_text, Type_textColor, Type_tileSize, Type_tilt, Type_topFov, Type_units, Type_value, Type_viewBoundScale, Type_viewFormat, Type_viewRefreshMode, Type_viewRefreshTime, Type_visibility, Type_west, Type_when, Type_width, Type_x, Type_y, Type_z, Type_AtomAuthor, Type_AtomCategory, Type_AtomContent, Type_AtomEntry, Type_AtomFeed, Type_AtomLink, Type_atomEmail, Type_atomId, Type_atomLabel, Type_atomName, Type_atomScheme, Type_atomSummary, Type_atomTerm, Type_atomTitle, Type_atomUpdated, Type_atomUri, Type_XalAddressDetails, Type_XalAdministrativeArea, Type_XalCountry, Type_XalLocality, Type_XalPostalCode, Type_XalSubAdministrativeArea, Type_XalThoroughfare, Type_xalAdministrativeAreaName, Type_xalCountryNameCode, Type_xalLocalityName, Type_xalPostalCodeNumber, Type_xalSubAdministrativeAreaName, Type_xalThoroughfareName, Type_xalThoroughfareNumber, Type_GxTourPrimitive, Type_GxAnimatedUpdate, Type_GxFlyTo, Type_GxLatLonQuad, Type_GxMultiTrack, Type_GxPlaylist, Type_GxSimpleArrayData, Type_GxSimpleArrayField, Type_GxSoundCue, Type_GxTimeSpan, Type_GxTimeStamp, Type_GxTour, Type_GxTourControl, Type_GxTrack, Type_GxWait, Type_GxAltitudeMode, Type_GxAngles, Type_GxBalloonVisibility, Type_GxCoord, Type_GxDuration, Type_GxFlyToMode, Type_GxH, Type_GxInterpolate, Type_GxPlayMode, Type_GxValue, Type_GxW, Type_GxX, Type_GxY, Type_Invalid } KmlDomType; // The value of each enum is the offset to the corresponding string in the // kKml22Enums table. The enum type name here is the element name with first // char folded up to be consistent with the convention of type names starting // with an upper case letter, hence <altitudeMode>'s enum values are of type // AltitudeModeEnum. Each enum value repeats the name of the element with all // chars folded up followed by an underscore followed by the name of the // enumeration value folded to upper case. Thus DOM API code examining a // <LookAt>'s <altitudeMode> might be as follows: // // AltitudeModeEnum altitudemode = lookat->altitudemode(); // switch (altitudemode) { // case ALTITUDEMODE_CLAMPTOGROUND: // ... // case ALTITUDEMODE_RELATIVETOGROUND: // ... // case ALTITUDEMODE_ABSOLUTE // ... // default: // // unknown altitudeMode // }; typedef enum { ALTITUDEMODE_CLAMPTOGROUND = 0, ALTITUDEMODE_RELATIVETOGROUND, ALTITUDEMODE_ABSOLUTE } AltitudeModeEnum; typedef enum { COLORMODE_NORMAL = 0, COLORMODE_RANDOM } ColorModeEnum; typedef enum { DISPLAYMODE_DEFAULT = 0, DISPLAYMODE_HIDE } DisplayModeEnum; typedef enum { GRIDORIGIN_LOWERLEFT = 0, GRIDORIGIN_UPPERLEFT } GridOriginEnum; typedef enum { ITEMICONSTATE_OPEN = 0, ITEMICONSTATE_CLOSED, ITEMICONSTATE_ERROR, ITEMICONSTATE_FETCHING0, ITEMICONSTATE_FETCHING1, ITEMICONSTATE_FETCHING2 } ItemIconStateEnum; typedef enum { LISTITEMTYPE_CHECK = 0, LISTITEMTYPE_RADIOFOLDER, LISTITEMTYPE_CHECKOFFONLY, LISTITEMTYPE_CHECKHIDECHILDREN } ListItemTypeEnum; typedef enum { REFRESHMODE_ONCHANGE = 0, REFRESHMODE_ONINTERVAL, REFRESHMODE_ONEXPIRE } RefreshModeEnum; typedef enum { SHAPE_RECTANGLE = 0, SHAPE_CYLINDER, SHAPE_SPHERE } ShapeEnum; typedef enum { STYLESTATE_NORMAL = 0, STYLESTATE_HIGHLIGHT } StyleStateEnum; typedef enum { UNITS_FRACTION = 0, UNITS_PIXELS, UNITS_INSETPIXELS } UnitsEnum; typedef enum { VIEWREFRESHMODE_NEVER = 0, VIEWREFRESHMODE_ONREQUEST, VIEWREFRESHMODE_ONSTOP, VIEWREFRESHMODE_ONREGION } ViewRefreshModeEnum; typedef enum { GX_ALTITUDEMODE_CLAMPTOSEAFLOOR = 0, GX_ALTITUDEMODE_RELATIVETOSEAFLOOR } GxAltitudeModeEnum; typedef enum { GX_FLYTOMODE_BOUNCE = 0, GX_FLYTOMODE_SMOOTH } GxFlyToModeEnum; typedef enum { GX_PLAYMODE_PAUSE = 0 } GxPlayModeEnum; } // end namespace kmldom #endif // KML_DOM_KML22_H__ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml_cast.cc����������������������������������������������������������������0000664�0000000�0000000�00000034525�12636032571�0017240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml_cast.h" #include "kml_ptr.h" #include "boost/intrusive_ptr.hpp" namespace kmldom { const AbstractLatLonBoxPtr AsAbstractLatLonBox(const ElementPtr element) { if (element && element->IsA(Type_AbstractLatLonBox)) { return boost::static_pointer_cast<AbstractLatLonBox>(element); } return NULL; } const AbstractViewPtr AsAbstractView(const ElementPtr element) { if (element && element->IsA(Type_AbstractView)) { return boost::static_pointer_cast<AbstractView>(element); } return NULL; } const ColorStylePtr AsColorStyle(const ElementPtr element) { if (element && element->IsA(Type_ColorStyle)) { return boost::static_pointer_cast<ColorStyle>(element); } return NULL; } const ContainerPtr AsContainer(const ElementPtr element) { if (element && element->IsA(Type_Container)) { return boost::static_pointer_cast<Container>(element); } return NULL; } const FeaturePtr AsFeature(const ElementPtr element) { if (element && element->IsA(Type_Feature)) { return boost::static_pointer_cast<Feature>(element); } return NULL; } const GeometryPtr AsGeometry(const ElementPtr element) { if (element && element->IsA(Type_Geometry)) { return boost::static_pointer_cast<Geometry>(element); } return NULL; } const ObjectPtr AsObject(const ElementPtr element) { if (element && element->IsA(Type_Object)) { return boost::static_pointer_cast<Object>(element); } return NULL; } const OverlayPtr AsOverlay(const ElementPtr element) { if (element && element->IsA(Type_Overlay)) { return boost::static_pointer_cast<Overlay>(element); } return NULL; } const StyleSelectorPtr AsStyleSelector(const ElementPtr element) { if (element && element->IsA(Type_StyleSelector)) { return boost::static_pointer_cast<StyleSelector>(element); } return NULL; } const SubStylePtr AsSubStyle(const ElementPtr element) { if (element && element->IsA(Type_SubStyle)) { return boost::static_pointer_cast<SubStyle>(element); } return NULL; } const TimePrimitivePtr AsTimePrimitive(const ElementPtr element) { if (element && element->IsA(Type_TimePrimitive)) { return boost::static_pointer_cast<TimePrimitive>(element); } return NULL; } const AliasPtr AsAlias(const ElementPtr element) { if (element && element->Type() == Type_Alias) { return boost::static_pointer_cast<Alias>(element); } return NULL; } const BalloonStylePtr AsBalloonStyle(const ElementPtr element) { if (element && element->Type() == Type_BalloonStyle) { return boost::static_pointer_cast<BalloonStyle>(element); } return NULL; } const CameraPtr AsCamera(const ElementPtr element) { if (element && element->Type() == Type_Camera) { return boost::static_pointer_cast<Camera>(element); } return NULL; } const ChangePtr AsChange(const ElementPtr element) { if (element && element->Type() == Type_Change) { return boost::static_pointer_cast<Change>(element); } return NULL; } const CreatePtr AsCreate(const ElementPtr element) { if (element && element->Type() == Type_Create) { return boost::static_pointer_cast<Create>(element); } return NULL; } const DataPtr AsData(const ElementPtr element) { if (element && element->Type() == Type_Data) { return boost::static_pointer_cast<Data>(element); } return NULL; } const DeletePtr AsDelete(const ElementPtr element) { if (element && element->Type() == Type_Delete) { return boost::static_pointer_cast<Delete>(element); } return NULL; } const DocumentPtr AsDocument(const ElementPtr element) { if (element && element->Type() == Type_Document) { return boost::static_pointer_cast<Document>(element); } return NULL; } const FolderPtr AsFolder(const ElementPtr element) { if (element && element->Type() == Type_Folder) { return boost::static_pointer_cast<Folder>(element); } return NULL; } const GroundOverlayPtr AsGroundOverlay(const ElementPtr element) { if (element && element->Type() == Type_GroundOverlay) { return boost::static_pointer_cast<GroundOverlay>(element); } return NULL; } const HotSpotPtr AsHotSpot(const ElementPtr element) { if (element && element->Type() == Type_hotSpot) { return boost::static_pointer_cast<HotSpot>(element); } return NULL; } const IconPtr AsIcon(const ElementPtr element) { if (element && element->Type() == Type_Icon) { return boost::static_pointer_cast<Icon>(element); } return NULL; } const IconStylePtr AsIconStyle(const ElementPtr element) { if (element && element->Type() == Type_IconStyle) { return boost::static_pointer_cast<IconStyle>(element); } return NULL; } const IconStyleIconPtr AsIconStyleIcon(const ElementPtr element) { if (element && element->Type() == Type_IconStyleIcon) { return boost::static_pointer_cast<IconStyleIcon>(element); } return NULL; } const ImagePyramidPtr AsImagePyramid(const ElementPtr element) { if (element && element->Type() == Type_ImagePyramid) { return boost::static_pointer_cast<ImagePyramid>(element); } return NULL; } const InnerBoundaryIsPtr AsInnerBoundaryIs(const ElementPtr element) { if (element && element->Type() == Type_innerBoundaryIs) { return boost::static_pointer_cast<InnerBoundaryIs>(element); } return NULL; } const ItemIconPtr AsItemIcon(const ElementPtr element) { if (element && element->Type() == Type_ItemIcon) { return boost::static_pointer_cast<ItemIcon>(element); } return NULL; } const LabelStylePtr AsLabelStyle(const ElementPtr element) { if (element && element->Type() == Type_LabelStyle) { return boost::static_pointer_cast<LabelStyle>(element); } return NULL; } const LatLonAltBoxPtr AsLatLonAltBox(const ElementPtr element) { if (element && element->Type() == Type_LatLonAltBox) { return boost::static_pointer_cast<LatLonAltBox>(element); } return NULL; } const LatLonBoxPtr AsLatLonBox(const ElementPtr element) { if (element && element->Type() == Type_LatLonBox) { return boost::static_pointer_cast<LatLonBox>(element); } return NULL; } const LineStringPtr AsLineString(const ElementPtr element) { if (element && element->Type() == Type_LineString) { return boost::static_pointer_cast<LineString>(element); } return NULL; } const LineStylePtr AsLineStyle(const ElementPtr element) { if (element && element->Type() == Type_LineStyle) { return boost::static_pointer_cast<LineStyle>(element); } return NULL; } const LinearRingPtr AsLinearRing(const ElementPtr element) { if (element && element->Type() == Type_LinearRing) { return boost::static_pointer_cast<LinearRing>(element); } return NULL; } const LinkPtr AsLink(const ElementPtr element) { if (element && element->Type() == Type_Link) { return boost::static_pointer_cast<Link>(element); } return NULL; } const LinkSnippetPtr AsLinkSnippet(const ElementPtr element) { if (element && element->Type() == Type_linkSnippet) { return boost::static_pointer_cast<LinkSnippet>(element); } return NULL; } const ListStylePtr AsListStyle(const ElementPtr element) { if (element && element->Type() == Type_ListStyle) { return boost::static_pointer_cast<ListStyle>(element); } return NULL; } const LocationPtr AsLocation(const ElementPtr element) { if (element && element->Type() == Type_Location) { return boost::static_pointer_cast<Location>(element); } return NULL; } const LodPtr AsLod(const ElementPtr element) { if (element && element->Type() == Type_Lod) { return boost::static_pointer_cast<Lod>(element); } return NULL; } const LookAtPtr AsLookAt(const ElementPtr element) { if (element && element->Type() == Type_LookAt) { return boost::static_pointer_cast<LookAt>(element); } return NULL; } const ModelPtr AsModel(const ElementPtr element) { if (element && element->Type() == Type_Model) { return boost::static_pointer_cast<Model>(element); } return NULL; } const MultiGeometryPtr AsMultiGeometry(const ElementPtr element) { if (element && element->Type() == Type_MultiGeometry) { return boost::static_pointer_cast<MultiGeometry>(element); } return NULL; } const NetworkLinkPtr AsNetworkLink(const ElementPtr element) { if (element && element->Type() == Type_NetworkLink) { return boost::static_pointer_cast<NetworkLink>(element); } return NULL; } const OrientationPtr AsOrientation(const ElementPtr element) { if (element && element->Type() == Type_Orientation) { return boost::static_pointer_cast<Orientation>(element); } return NULL; } const OuterBoundaryIsPtr AsOuterBoundaryIs(const ElementPtr element) { if (element && element->Type() == Type_outerBoundaryIs) { return boost::static_pointer_cast<OuterBoundaryIs>(element); } return NULL; } const OverlayXYPtr AsOverlayXY(const ElementPtr element) { if (element && element->Type() == Type_overlayXY) { return boost::static_pointer_cast<OverlayXY>(element); } return NULL; } const PairPtr AsPair(const ElementPtr element) { if (element && element->Type() == Type_Pair) { return boost::static_pointer_cast<Pair>(element); } return NULL; } const PhotoOverlayPtr AsPhotoOverlay(const ElementPtr element) { if (element && element->Type() == Type_PhotoOverlay) { return boost::static_pointer_cast<PhotoOverlay>(element); } return NULL; } const PlacemarkPtr AsPlacemark(const ElementPtr element) { if (element && element->Type() == Type_Placemark) { return boost::static_pointer_cast<Placemark>(element); } return NULL; } const PointPtr AsPoint(const ElementPtr element) { if (element && element->Type() == Type_Point) { return boost::static_pointer_cast<Point>(element); } return NULL; } const PolyStylePtr AsPolyStyle(const ElementPtr element) { if (element && element->Type() == Type_PolyStyle) { return boost::static_pointer_cast<PolyStyle>(element); } return NULL; } const PolygonPtr AsPolygon(const ElementPtr element) { if (element && element->Type() == Type_Polygon) { return boost::static_pointer_cast<Polygon>(element); } return NULL; } const RegionPtr AsRegion(const ElementPtr element) { if (element && element->Type() == Type_Region) { return boost::static_pointer_cast<Region>(element); } return NULL; } const ResourceMapPtr AsResourceMap(const ElementPtr element) { if (element && element->Type() == Type_ResourceMap) { return boost::static_pointer_cast<ResourceMap>(element); } return NULL; } const RotationXYPtr AsRotationXY(const ElementPtr element) { if (element && element->Type() == Type_rotationXY) { return boost::static_pointer_cast<RotationXY>(element); } return NULL; } const ScalePtr AsScale(const ElementPtr element) { if (element && element->Type() == Type_Scale) { return boost::static_pointer_cast<Scale>(element); } return NULL; } const SchemaPtr AsSchema(const ElementPtr element) { if (element && element->Type() == Type_Schema) { return boost::static_pointer_cast<Schema>(element); } return NULL; } const SchemaDataPtr AsSchemaData(const ElementPtr element) { if (element && element->Type() == Type_SchemaData) { return boost::static_pointer_cast<SchemaData>(element); } return NULL; } const ScreenOverlayPtr AsScreenOverlay(const ElementPtr element) { if (element && element->Type() == Type_ScreenOverlay) { return boost::static_pointer_cast<ScreenOverlay>(element); } return NULL; } const ScreenXYPtr AsScreenXY(const ElementPtr element) { if (element && element->Type() == Type_screenXY) { return boost::static_pointer_cast<ScreenXY>(element); } return NULL; } const SizePtr AsSize(const ElementPtr element) { if (element && element->Type() == Type_size) { return boost::static_pointer_cast<Size>(element); } return NULL; } const SnippetPtr AsSnippet(const ElementPtr element) { if (element && element->Type() == Type_Snippet) { return boost::static_pointer_cast<Snippet>(element); } return NULL; } const StylePtr AsStyle(const ElementPtr element) { if (element && element->Type() == Type_Style) { return boost::static_pointer_cast<Style>(element); } return NULL; } const StyleMapPtr AsStyleMap(const ElementPtr element) { if (element && element->Type() == Type_StyleMap) { return boost::static_pointer_cast<StyleMap>(element); } return NULL; } const TimeSpanPtr AsTimeSpan(const ElementPtr element) { if (element && element->Type() == Type_TimeSpan) { return boost::static_pointer_cast<TimeSpan>(element); } return NULL; } const TimeStampPtr AsTimeStamp(const ElementPtr element) { if (element && element->Type() == Type_TimeStamp) { return boost::static_pointer_cast<TimeStamp>(element); } return NULL; } const UpdatePtr AsUpdate(const ElementPtr element) { if (element && element->Type() == Type_Update) { return boost::static_pointer_cast<Update>(element); } return NULL; } const ViewVolumePtr AsViewVolume(const ElementPtr element) { if (element && element->Type() == Type_ViewVolume) { return boost::static_pointer_cast<ViewVolume>(element); } return NULL; } } // end namespace kmldom ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml_cast.h�����������������������������������������������������������������0000664�0000000�0000000�00000024551�12636032571�0017100�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_KML_CAST_H__ #define KML_DOM_KML_CAST_H__ #include <exception> // Needed by boost::instrusive_ptr. #include "kml/base/xml_element.h" #include "kml/dom/kmldom.h" #include "kml/dom/kml_ptr.h" namespace kmldom { // This function template operates akin to dynamic_cast. If the given // Element-derived type is of the template type then a pointer is returned, // else NULL. It is safe to pass a NULL to this function. template<class T> inline const boost::intrusive_ptr<T> ElementCast( const ElementPtr& element) { if (element && element->IsA(T::ElementType())) { return boost::static_pointer_cast<T>(element); } return NULL; } inline const ElementPtr AsElement(const kmlbase::XmlElementPtr& xml_element) { return boost::static_pointer_cast<Element>(xml_element); } // Abstract element groups. const AbstractLatLonBoxPtr AsAbstractLatLonBox(const ElementPtr element); const AbstractViewPtr AsAbstractView(const ElementPtr element); const ColorStylePtr AsColorStyle(const ElementPtr element); const ContainerPtr AsContainer(const ElementPtr element); const FeaturePtr AsFeature(const ElementPtr element); const GeometryPtr AsGeometry(const ElementPtr element); const ObjectPtr AsObject(const ElementPtr element); const OverlayPtr AsOverlay(const ElementPtr element); const StyleSelectorPtr AsStyleSelector(const ElementPtr element); const SubStylePtr AsSubStyle(const ElementPtr element); const TimePrimitivePtr AsTimePrimitive(const ElementPtr element); // Concrete elements. const AliasPtr AsAlias(const ElementPtr element); const BalloonStylePtr AsBalloonStyle(const ElementPtr element); const CameraPtr AsCamera(const ElementPtr element); const ChangePtr AsChange(const ElementPtr element); inline const CoordinatesPtr AsCoordinates(const ElementPtr& element) { return ElementCast<Coordinates>(element); } const CreatePtr AsCreate(const ElementPtr element); const DataPtr AsData(const ElementPtr element); const DeletePtr AsDelete(const ElementPtr element); const DocumentPtr AsDocument(const ElementPtr element); inline const ExtendedDataPtr AsExtendedData(const ElementPtr& element) { return ElementCast<ExtendedData>(element); } const FolderPtr AsFolder(const ElementPtr element); const GroundOverlayPtr AsGroundOverlay(const ElementPtr element); const HotSpotPtr AsHotSpot(const ElementPtr element); const IconPtr AsIcon(const ElementPtr element); const IconStylePtr AsIconStyle(const ElementPtr element); const IconStyleIconPtr AsIconStyleIcon(const ElementPtr element); const ImagePyramidPtr AsImagePyramid(const ElementPtr element); const InnerBoundaryIsPtr AsInnerBoundaryIs(const ElementPtr element); const ItemIconPtr AsItemIcon(const ElementPtr element); inline const KmlPtr AsKml(const ElementPtr& element) { return ElementCast<Kml>(element); } const LabelStylePtr AsLabelStyle(const ElementPtr element); const LatLonAltBoxPtr AsLatLonAltBox(const ElementPtr element); const LatLonBoxPtr AsLatLonBox(const ElementPtr element); const LineStringPtr AsLineString(const ElementPtr element); const LineStylePtr AsLineStyle(const ElementPtr element); const LinearRingPtr AsLinearRing(const ElementPtr element); const LinkPtr AsLink(const ElementPtr element); const LinkSnippetPtr AsLinkSnippet(const ElementPtr element); const ListStylePtr AsListStyle(const ElementPtr element); const LocationPtr AsLocation(const ElementPtr element); const LodPtr AsLod(const ElementPtr element); const LookAtPtr AsLookAt(const ElementPtr element); inline const MetadataPtr AsMetadata(const ElementPtr& element) { return ElementCast<Metadata>(element); } const ModelPtr AsModel(const ElementPtr element); const MultiGeometryPtr AsMultiGeometry(const ElementPtr element); const NetworkLinkPtr AsNetworkLink(const ElementPtr element); inline const NetworkLinkControlPtr AsNetworkLinkControl( const ElementPtr& element) { return ElementCast<NetworkLinkControl>(element); } const OrientationPtr AsOrientation(const ElementPtr element); const OuterBoundaryIsPtr AsOuterBoundaryIs(const ElementPtr element); const OverlayXYPtr AsOverlayXY(const ElementPtr element); const PairPtr AsPair(const ElementPtr element); const PhotoOverlayPtr AsPhotoOverlay(const ElementPtr element); const PlacemarkPtr AsPlacemark(const ElementPtr element); const PointPtr AsPoint(const ElementPtr element); const PolyStylePtr AsPolyStyle(const ElementPtr element); const PolygonPtr AsPolygon(const ElementPtr element); const RegionPtr AsRegion(const ElementPtr element); const ResourceMapPtr AsResourceMap(const ElementPtr element); const RotationXYPtr AsRotationXY(const ElementPtr element); const ScalePtr AsScale(const ElementPtr element); const SchemaPtr AsSchema(const ElementPtr element); const SchemaDataPtr AsSchemaData(const ElementPtr element); const ScreenOverlayPtr AsScreenOverlay(const ElementPtr element); const ScreenXYPtr AsScreenXY(const ElementPtr element); inline const SimpleDataPtr AsSimpleData(const ElementPtr& element) { return ElementCast<SimpleData>(element); } inline const SimpleFieldPtr AsSimpleField(const ElementPtr& element) { return ElementCast<SimpleField>(element); } const SizePtr AsSize(const ElementPtr element); const SnippetPtr AsSnippet(const ElementPtr element); const StylePtr AsStyle(const ElementPtr element); const StyleMapPtr AsStyleMap(const ElementPtr element); const TimeSpanPtr AsTimeSpan(const ElementPtr element); const TimeStampPtr AsTimeStamp(const ElementPtr element); inline const UpdatePtr AsUpdate(const ElementPtr& element) { return ElementCast<Update>(element); } const ViewVolumePtr AsViewVolume(const ElementPtr element); // Atom inline const AtomAuthorPtr AsAtomAuthor(const ElementPtr& element) { return ElementCast<AtomAuthor>(element); } inline const AtomCategoryPtr AsAtomCategory(const ElementPtr& element) { return ElementCast<AtomCategory>(element); } inline const AtomContentPtr AsAtomContent(const ElementPtr& element) { return ElementCast<AtomContent>(element); } inline const AtomEntryPtr AsAtomEntry(const ElementPtr& element) { return ElementCast<AtomEntry>(element); } inline const AtomFeedPtr AsAtomFeed(const ElementPtr& element) { return ElementCast<AtomFeed>(element); } inline const AtomLinkPtr AsAtomLink(const ElementPtr& element) { return ElementCast<AtomLink>(element); } // xAL inline const XalAddressDetailsPtr AsXalAddressDetails( const ElementPtr& element) { return ElementCast<XalAddressDetails>(element); } inline const XalAdministrativeAreaPtr AsXalAdministrativeArea( const ElementPtr& element) { return ElementCast<XalAdministrativeArea>(element); } inline const XalCountryPtr AsXalCountry(const ElementPtr& element) { return ElementCast<XalCountry>(element); } inline const XalLocalityPtr AsXalLocality(const ElementPtr& element) { return ElementCast<XalLocality>(element); } inline const XalPostalCodePtr AsXalPostalCode(const ElementPtr& element) { return ElementCast<XalPostalCode>(element); } inline const XalSubAdministrativeAreaPtr AsXalSubAdministrativeArea( const ElementPtr& element) { return ElementCast<XalSubAdministrativeArea>(element); } inline const XalThoroughfarePtr AsXalThoroughfare(const ElementPtr& element) { return ElementCast<XalThoroughfare>(element); } // gx inline const GxAnimatedUpdatePtr AsGxAnimatedUpdate(const ElementPtr element) { return ElementCast<GxAnimatedUpdate>(element); } inline const GxFlyToPtr AsGxFlyTo(const ElementPtr element) { return ElementCast<GxFlyTo>(element); } inline const GxLatLonQuadPtr AsGxLatLonQuad(const ElementPtr element) { return ElementCast<GxLatLonQuad>(element); } inline const GxMultiTrackPtr AsGxMultiTrack(const ElementPtr element) { return ElementCast<GxMultiTrack>(element); } inline const GxPlaylistPtr AsGxPlaylist(const ElementPtr element) { return ElementCast<GxPlaylist>(element); } inline const GxSimpleArrayFieldPtr AsGxSimpleArrayField( const ElementPtr element) { return ElementCast<GxSimpleArrayField>(element); } inline const GxSimpleArrayDataPtr AsGxSimpleArrayData( const ElementPtr element) { return ElementCast<GxSimpleArrayData>(element); } inline const GxSoundCuePtr AsGxSoundCue(const ElementPtr element) { return ElementCast<GxSoundCue>(element); } inline const GxTimeSpanPtr AsGxTimeSpan(const ElementPtr element) { return ElementCast<GxTimeSpan>(element); } inline const GxTimeStampPtr AsGxTimeStamp(const ElementPtr element) { return ElementCast<GxTimeStamp>(element); } inline const GxTourPtr AsGxTour(const ElementPtr element) { return ElementCast<GxTour>(element); } inline const GxTourControlPtr AsGxTourControl(const ElementPtr element) { return ElementCast<GxTourControl>(element); } inline const GxTourPrimitivePtr AsGxTourPrimitive(const ElementPtr element) { return ElementCast<GxTourPrimitive>(element); } inline const GxTrackPtr AsGxTrack(const ElementPtr element) { return ElementCast<GxTrack>(element); } inline const GxWaitPtr AsGxWait(const ElementPtr element) { return ElementCast<GxWait>(element); } } // end namespace kmldom #endif // KML_DOM_KML_CAST_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml_factory.cc�������������������������������������������������������������0000664�0000000�0000000�00000033570�12636032571�0017754�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/kml_factory.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/kmldom.h" #include "kml/dom/xsd.h" namespace kmldom { KmlFactory* KmlFactory::factory_ = NULL; // static KmlFactory* KmlFactory::GetFactory() { if (factory_ == NULL) { factory_ = new KmlFactory(); } return factory_; } ElementPtr KmlFactory::CreateElementById(KmlDomType id) const { switch (id) { case Type_Alias: return CreateAlias(); case Type_AtomAuthor: return CreateAtomAuthor(); case Type_AtomCategory: return CreateAtomCategory(); case Type_AtomContent: return CreateAtomContent(); case Type_AtomEntry: return CreateAtomEntry(); case Type_AtomFeed: return CreateAtomFeed(); case Type_AtomLink: return CreateAtomLink(); case Type_BalloonStyle: return CreateBalloonStyle(); case Type_Camera: return CreateCamera(); case Type_Change: return CreateChange(); case Type_Create: return CreateCreate(); case Type_Data: return CreateData(); case Type_Delete: return CreateDelete(); case Type_Document: return CreateDocument(); case Type_ExtendedData: return CreateExtendedData(); case Type_Folder: return CreateFolder(); case Type_GroundOverlay: return CreateGroundOverlay(); case Type_Icon: return CreateIcon(); case Type_IconStyle: return CreateIconStyle(); case Type_IconStyleIcon: return CreateIconStyleIcon(); case Type_ImagePyramid: return CreateImagePyramid(); case Type_ItemIcon: return CreateItemIcon(); case Type_LabelStyle: return CreateLabelStyle(); case Type_LatLonBox: return CreateLatLonBox(); case Type_LatLonAltBox: return CreateLatLonAltBox(); case Type_LinearRing: return CreateLinearRing(); case Type_LineString: return CreateLineString(); case Type_LineStyle: return CreateLineStyle(); case Type_Link: return CreateLink(); case Type_ListStyle: return CreateListStyle(); case Type_Location: return CreateLocation(); case Type_Lod: return CreateLod(); case Type_LookAt: return CreateLookAt(); case Type_Metadata: return CreateMetadata(); case Type_Model: return CreateModel(); case Type_MultiGeometry: return CreateMultiGeometry(); case Type_NetworkLink: return CreateNetworkLink(); case Type_NetworkLinkControl: return CreateNetworkLinkControl(); case Type_Orientation: return CreateOrientation(); case Type_Pair: return CreatePair(); case Type_PhotoOverlay: return CreatePhotoOverlay(); case Type_Placemark: return CreatePlacemark(); case Type_PolyStyle: return CreatePolyStyle(); case Type_Point: return CreatePoint(); case Type_Polygon: return CreatePolygon(); case Type_Region: return CreateRegion(); case Type_ResourceMap: return CreateResourceMap(); case Type_Scale: return CreateScale(); case Type_Schema: return CreateSchema(); case Type_SchemaData: return CreateSchemaData(); case Type_ScreenOverlay: return CreateScreenOverlay(); case Type_SimpleData: return CreateSimpleData(); case Type_SimpleField: return CreateSimpleField(); case Type_Snippet: return CreateSnippet(); case Type_Style: return CreateStyle(); case Type_StyleMap: return CreateStyleMap(); case Type_TimeSpan: return CreateTimeSpan(); case Type_TimeStamp: return CreateTimeStamp(); case Type_ViewVolume: return CreateViewVolume(); case Type_Update: return CreateUpdate(); case Type_Url: return CreateUrl(); case Type_coordinates: return CreateCoordinates(); case Type_hotSpot: return CreateHotSpot(); case Type_innerBoundaryIs: return CreateInnerBoundaryIs(); case Type_kml: return CreateKml(); case Type_linkSnippet: return CreateLinkSnippet(); case Type_overlayXY: return CreateOverlayXY(); case Type_outerBoundaryIs: return CreateOuterBoundaryIs(); case Type_rotationXY: return CreateRotationXY(); case Type_screenXY: return CreateScreenXY(); case Type_size: return CreateSize(); case Type_XalAddressDetails: return CreateXalAddressDetails(); case Type_XalAdministrativeArea: return CreateXalAdministrativeArea(); case Type_XalCountry: return CreateXalCountry(); case Type_XalLocality: return CreateXalLocality(); case Type_XalPostalCode: return CreateXalPostalCode(); case Type_XalSubAdministrativeArea: return CreateXalSubAdministrativeArea(); case Type_XalThoroughfare: return CreateXalThoroughfare(); case Type_GxAnimatedUpdate: return CreateGxAnimatedUpdate(); case Type_GxFlyTo: return CreateGxFlyTo(); case Type_GxLatLonQuad: return CreateGxLatLonQuad(); case Type_GxMultiTrack: return CreateGxMultiTrack(); case Type_GxPlaylist: return CreateGxPlaylist(); case Type_GxSimpleArrayData: return CreateGxSimpleArrayData(); case Type_GxSimpleArrayField: return CreateGxSimpleArrayField(); case Type_GxSoundCue: return CreateGxSoundCue(); case Type_GxTimeSpan: return CreateGxTimeSpan(); case Type_GxTimeStamp: return CreateGxTimeStamp(); case Type_GxTour: return CreateGxTour(); case Type_GxTourControl: return CreateGxTourControl(); case Type_GxTrack: return CreateGxTrack(); case Type_GxWait: return CreateGxWait(); default: return NULL; } } ElementPtr KmlFactory::CreateElementFromName(const string& element_name) const { return CreateElementById( static_cast<KmlDomType>(Xsd::GetSchema()->ElementId(element_name))); } Field* KmlFactory::CreateFieldById(KmlDomType type_id) const { return new Field(type_id); } Alias* KmlFactory::CreateAlias() const { return new Alias(); } AtomAuthor* KmlFactory::CreateAtomAuthor() const { return new AtomAuthor(); } AtomCategory* KmlFactory::CreateAtomCategory() const { return new AtomCategory(); } AtomContent* KmlFactory::CreateAtomContent() const { return new AtomContent(); } AtomEntry* KmlFactory::CreateAtomEntry() const { return new AtomEntry(); } AtomFeed* KmlFactory::CreateAtomFeed() const { return new AtomFeed(); } AtomLink* KmlFactory::CreateAtomLink() const { return new AtomLink(); } BalloonStyle* KmlFactory::CreateBalloonStyle() const { return new BalloonStyle(); } Camera* KmlFactory::CreateCamera() const { return new Camera(); } Change* KmlFactory::CreateChange() const { return new Change(); } Create* KmlFactory::CreateCreate() const { return new Create(); } Data* KmlFactory::CreateData() const { return new Data(); } Delete* KmlFactory::CreateDelete() const { return new Delete(); } Document* KmlFactory::CreateDocument() const { return new Document(); } ExtendedData* KmlFactory::CreateExtendedData() const { return new ExtendedData(); } Folder* KmlFactory::CreateFolder() const { return new Folder(); } GroundOverlay* KmlFactory::CreateGroundOverlay() const { return new GroundOverlay(); } HotSpot* KmlFactory::CreateHotSpot() const { return new HotSpot(); } Icon* KmlFactory::CreateIcon() const { return new Icon(); } IconStyle* KmlFactory::CreateIconStyle() const { return new IconStyle(); } IconStyleIcon* KmlFactory::CreateIconStyleIcon() const { return new IconStyleIcon(); } ImagePyramid* KmlFactory::CreateImagePyramid() const { return new ImagePyramid(); } InnerBoundaryIs* KmlFactory::CreateInnerBoundaryIs() const { return new InnerBoundaryIs(); } ItemIcon* KmlFactory::CreateItemIcon() const { return new ItemIcon(); } Kml* KmlFactory::CreateKml() const { return new Kml(); } LabelStyle* KmlFactory::CreateLabelStyle() const { return new LabelStyle(); } LatLonBox* KmlFactory::CreateLatLonBox() const { return new LatLonBox(); } LatLonAltBox* KmlFactory::CreateLatLonAltBox() const { return new LatLonAltBox(); } LinearRing* KmlFactory::CreateLinearRing() const { return new LinearRing(); } LineString* KmlFactory::CreateLineString() const { return new LineString(); } LineStyle* KmlFactory::CreateLineStyle() const { return new LineStyle(); } Link* KmlFactory::CreateLink() const { return new Link(); } LinkSnippet* KmlFactory::CreateLinkSnippet() const { return new LinkSnippet(); } ListStyle* KmlFactory::CreateListStyle() const { return new ListStyle(); } Location* KmlFactory::CreateLocation() const { return new Location(); } Lod* KmlFactory::CreateLod() const { return new Lod(); } LookAt* KmlFactory::CreateLookAt() const { return new LookAt(); } Metadata* KmlFactory::CreateMetadata() const { return new Metadata(); } Model* KmlFactory::CreateModel() const { return new Model(); } MultiGeometry* KmlFactory::CreateMultiGeometry() const { return new MultiGeometry(); } NetworkLink* KmlFactory::CreateNetworkLink() const { return new NetworkLink(); } NetworkLinkControl* KmlFactory::CreateNetworkLinkControl() const { return new NetworkLinkControl(); } Orientation* KmlFactory::CreateOrientation() const { return new Orientation(); } OuterBoundaryIs* KmlFactory::CreateOuterBoundaryIs() const { return new OuterBoundaryIs(); } OverlayXY* KmlFactory::CreateOverlayXY() const { return new OverlayXY(); } Pair* KmlFactory::CreatePair() const { return new Pair(); } PhotoOverlay* KmlFactory::CreatePhotoOverlay() const { return new PhotoOverlay(); } Placemark* KmlFactory::CreatePlacemark() const { return new Placemark(); } Point* KmlFactory::CreatePoint() const { return new Point(); } Polygon* KmlFactory::CreatePolygon() const { return new Polygon(); } PolyStyle* KmlFactory::CreatePolyStyle() const { return new PolyStyle(); } Region* KmlFactory::CreateRegion() const { return new Region(); } ResourceMap* KmlFactory::CreateResourceMap() const { return new ResourceMap(); } RotationXY* KmlFactory::CreateRotationXY() const { return new RotationXY(); } Scale* KmlFactory::CreateScale() const { return new Scale(); } ScreenOverlay* KmlFactory::CreateScreenOverlay() const { return new ScreenOverlay(); } Coordinates* KmlFactory::CreateCoordinates() const { return new Coordinates(); } ScreenXY* KmlFactory::CreateScreenXY() const { return new ScreenXY(); } Schema* KmlFactory::CreateSchema() const { return new Schema(); } SchemaData* KmlFactory::CreateSchemaData() const { return new SchemaData(); } Update* KmlFactory::CreateUpdate() const { return new Update(); } Url* KmlFactory::CreateUrl() const { return new Url(); } SimpleData* KmlFactory::CreateSimpleData() const { return new SimpleData(); } SimpleField* KmlFactory::CreateSimpleField() const { return new SimpleField(); } Size* KmlFactory::CreateSize() const { return new Size(); } Snippet* KmlFactory::CreateSnippet() const { return new Snippet(); } Style* KmlFactory::CreateStyle() const { return new Style(); } StyleMap* KmlFactory::CreateStyleMap() const { return new StyleMap(); } TimeSpan* KmlFactory::CreateTimeSpan() const { return new TimeSpan(); } TimeStamp* KmlFactory::CreateTimeStamp() const { return new TimeStamp(); } ViewVolume* KmlFactory::CreateViewVolume() const { return new ViewVolume(); } XalAddressDetails* KmlFactory::CreateXalAddressDetails() const { return new XalAddressDetails(); } XalAdministrativeArea* KmlFactory::CreateXalAdministrativeArea() const { return new XalAdministrativeArea(); } XalCountry* KmlFactory::CreateXalCountry() const { return new XalCountry(); } XalLocality* KmlFactory::CreateXalLocality() const { return new XalLocality(); } XalPostalCode* KmlFactory::CreateXalPostalCode() const { return new XalPostalCode(); } XalSubAdministrativeArea* KmlFactory::CreateXalSubAdministrativeArea() const { return new XalSubAdministrativeArea(); } XalThoroughfare* KmlFactory::CreateXalThoroughfare() const { return new XalThoroughfare(); } GxAnimatedUpdate* KmlFactory::CreateGxAnimatedUpdate() const { return new GxAnimatedUpdate(); } GxFlyTo* KmlFactory::CreateGxFlyTo() const { return new GxFlyTo(); } GxLatLonQuad* KmlFactory::CreateGxLatLonQuad() const { return new GxLatLonQuad(); } GxMultiTrack* KmlFactory::CreateGxMultiTrack() const { return new GxMultiTrack(); } GxPlaylist* KmlFactory::CreateGxPlaylist() const { return new GxPlaylist(); } GxSimpleArrayData* KmlFactory::CreateGxSimpleArrayData() const { return new GxSimpleArrayData(); } GxSimpleArrayField* KmlFactory::CreateGxSimpleArrayField() const { return new GxSimpleArrayField(); } GxSoundCue* KmlFactory::CreateGxSoundCue() const { return new GxSoundCue(); } GxTimeSpan* KmlFactory::CreateGxTimeSpan() const { return new GxTimeSpan(); } GxTimeStamp* KmlFactory::CreateGxTimeStamp() const { return new GxTimeStamp(); } GxTour* KmlFactory::CreateGxTour() const { return new GxTour(); } GxTourControl* KmlFactory::CreateGxTourControl() const { return new GxTourControl(); } GxTrack* KmlFactory::CreateGxTrack() const { return new GxTrack(); } GxWait* KmlFactory::CreateGxWait() const { return new GxWait(); } } // namespace kmldom ����������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml_factory.h��������������������������������������������������������������0000664�0000000�0000000�00000013474�12636032571�0017617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_KML_FACTORY_H__ #define KML_DOM_KML_FACTORY_H__ #include <string> #include "kml/dom/kmldom.h" #include "kml/base/util.h" namespace kmldom { // A singleton factory class. class KmlFactory { public: static KmlFactory* GetFactory(); // Factory functions used by the parser to create any KML element. ElementPtr CreateElementById(KmlDomType id) const; ElementPtr CreateElementFromName(const string& element_name) const; Field* CreateFieldById(KmlDomType type_id) const; // Factory functions to create all KML complex elements. Alias* CreateAlias() const; AtomAuthor* CreateAtomAuthor() const; AtomCategory* CreateAtomCategory() const; AtomContent* CreateAtomContent() const; AtomEntry* CreateAtomEntry() const; AtomFeed* CreateAtomFeed() const; AtomLink* CreateAtomLink() const; BalloonStyle* CreateBalloonStyle() const; Coordinates* CreateCoordinates() const; Camera* CreateCamera() const; Change* CreateChange() const; Create* CreateCreate() const; Data* CreateData() const; Delete* CreateDelete() const; Document* CreateDocument() const; ExtendedData* CreateExtendedData() const; Folder* CreateFolder() const; GroundOverlay* CreateGroundOverlay() const; HotSpot* CreateHotSpot() const; Icon* CreateIcon() const; IconStyle* CreateIconStyle() const; IconStyleIcon* CreateIconStyleIcon() const; ImagePyramid* CreateImagePyramid() const; InnerBoundaryIs* CreateInnerBoundaryIs() const; ItemIcon* CreateItemIcon() const; Kml* CreateKml() const; LabelStyle* CreateLabelStyle() const; LatLonBox* CreateLatLonBox() const; LatLonAltBox* CreateLatLonAltBox() const; LinearRing* CreateLinearRing() const; LineString* CreateLineString() const; LineStyle* CreateLineStyle() const; Link* CreateLink() const; LinkSnippet* CreateLinkSnippet() const; ListStyle* CreateListStyle() const; Location* CreateLocation() const; Lod* CreateLod() const; LookAt* CreateLookAt() const; Metadata* CreateMetadata() const; Model* CreateModel() const; MultiGeometry* CreateMultiGeometry() const; NetworkLink* CreateNetworkLink() const; Orientation* CreateOrientation() const; NetworkLinkControl* CreateNetworkLinkControl() const; OuterBoundaryIs* CreateOuterBoundaryIs() const; OverlayXY* CreateOverlayXY() const; Pair* CreatePair() const; PhotoOverlay* CreatePhotoOverlay() const; Placemark* CreatePlacemark() const; Polygon* CreatePolygon() const; Point* CreatePoint() const; PolyStyle* CreatePolyStyle() const; Region* CreateRegion() const; ResourceMap* CreateResourceMap() const; RotationXY* CreateRotationXY() const; Scale* CreateScale() const; Schema* CreateSchema() const; SchemaData* CreateSchemaData() const; ScreenOverlay* CreateScreenOverlay() const; ScreenXY* CreateScreenXY() const; Size* CreateSize() const; SimpleData* CreateSimpleData() const; SimpleField* CreateSimpleField() const; Snippet* CreateSnippet() const; Style* CreateStyle() const; StyleMap* CreateStyleMap() const; TimeSpan* CreateTimeSpan() const; TimeStamp* CreateTimeStamp() const; ViewVolume* CreateViewVolume() const; Update* CreateUpdate() const; Url* CreateUrl() const; XalAddressDetails* CreateXalAddressDetails() const; XalAdministrativeArea* CreateXalAdministrativeArea() const; XalCountry* CreateXalCountry() const; XalLocality* CreateXalLocality() const; XalPostalCode* CreateXalPostalCode() const; XalSubAdministrativeArea* CreateXalSubAdministrativeArea() const; XalThoroughfare* CreateXalThoroughfare() const; // These methods create the elements in the Google extensions to KML 2.2. GxAnimatedUpdate* CreateGxAnimatedUpdate() const; GxFlyTo* CreateGxFlyTo() const; GxLatLonQuad* CreateGxLatLonQuad() const; GxMultiTrack* CreateGxMultiTrack() const; GxPlaylist* CreateGxPlaylist() const; GxSimpleArrayData* CreateGxSimpleArrayData() const; GxSimpleArrayField* CreateGxSimpleArrayField() const; GxSoundCue* CreateGxSoundCue() const; GxTimeSpan* CreateGxTimeSpan() const; GxTimeStamp* CreateGxTimeStamp() const; GxTour* CreateGxTour() const; GxTourControl* CreateGxTourControl() const; GxTrack* CreateGxTrack() const; GxWait* CreateGxWait() const; private: KmlFactory() {}; // Singleton class, use GetFactory(). static KmlFactory* factory_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(KmlFactory); }; } // namespace kmldom #endif // KML_DOM_KML_FACTORY_H__ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml_funcs.h����������������������������������������������������������������0000664�0000000�0000000�00000007272�12636032571�0017265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the public Parse and Serialize API // functions. #ifndef KML_DOM_KML_FUNCS_H__ #define KML_DOM_KML_FUNCS_H__ #include <ostream> #include "kml/dom/element.h" #include "kml/dom/kml_ptr.h" namespace kmldom { // Parse the KML in the given memory buffer. On success this returns an // Element* to the root of the KML. On failure 0 is returned and a human // readable error string is stored to errors if such is supplied. ElementPtr Parse(const string& xml, string* errors); // As Parse(), but invokes the underlying XML parser's namespace-aware mode. ElementPtr ParseNS(const string& xml, string* errors); // As Parse(), but invokes the underlying XML parser's namespace-aware mode // such that both prefixed and non-prefixed Atom is recognized as the root. // Use this to parse "<feed xmlns='http://www.w3.org/2005/Atom'>...", or // "<atom:feed xmlns:atom='http://www.w3.org/2005/Atom'>...". The Atom // namespace MUST be supplied. ElementPtr ParseAtom(const string& atom, string* errors); // This is a simplified interface for the benefit of SWIG. ElementPtr ParseKml(const string& xml); // This function is the public API for generating "pretty" XML for the KML // hierarchy rooted at the given Element. "pretty" is 2 space indent for // each level of XML depth. string SerializePretty(const ElementPtr& root); // This function is the public API for generating "raw" XML for the KML // hierarchy rooted at the given Element. "raw" is no indentation white space // and no newlines. string SerializeRaw(const ElementPtr& root); // This function is the public API for emitting the XML of an element // hierarchy. The comments for SerializePretty() vs SerializeRaw() describe // the behavior of the "pretty" flag. If root or xml are null this method // does nothing and immediately returns. void SerializeToOstream(const ElementPtr& root, bool pretty, std::ostream* xml); // This function is the public API for returning the element's tag name, for // example "Placemark" for <Placemark> and "NetworkLink" for <NetworkLink>. // If element is NULL or otherwise invalid an empty string is returned. string GetElementName(const ElementPtr& element); } // end namespace kmldom #endif // KML_DOM_KML_FUNCS_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml_handler.cc�������������������������������������������������������������0000664�0000000�0000000�00000041231�12636032571�0017713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file implements the KML Parse() function. The parser uses expat. // The overall process is as follows: // 1) map instance file element name to id // 2) create Element for each element and push onto stack at StartElement // 2a) call NewElement() for each ParserObserver. // 3) gather character data for simple elements // 4) in EndElement pop off the child to add to the parent on the stack // 4a) call AddChild() for each ParserObserver. #include "kml/dom/kml_handler.h" #include "boost/scoped_ptr.hpp" #include "kml/base/attributes.h" #include "kml/dom/element.h" #include "kml/dom/kml_cast.h" #include "kml/dom/kml_factory.h" #include "kml/dom/parser_observer.h" #include "kml/dom/xsd.h" using kmlbase::Attributes; using kmlbase::StringVector; // The maximum nesting depth we permit. Depths beyond this are treated as // errors. Override it with a -DLIBKML_MAX_NESTING_DEPTH preprocessor // instruction. // TODO: some flags-like solution would be preferable. static const unsigned int kMaxNestingDepth = 100; #ifdef LIBKML_MAX_NESTING_DEPTH kMaxNestingDepth = LIBKML_MAX_NESTING_DEPTH; #endif namespace kmldom { KmlHandler::KmlHandler(parser_observer_vector_t& observers) : kml_factory_(*KmlFactory::GetFactory()), skip_depth_(0), in_description_(0), nesting_depth_(0), in_old_schema_placemark_(false), observers_(observers) { } KmlHandler::~KmlHandler() { // stack_'s destructor calls the destructor of each ElementPtr releasing // the reference and potentially freeing the associated storage. } void KmlHandler::StartElement(const string& name, const StringVector& attrs) { // Check that we're not nested beyond the max permissible depth. if (++nesting_depth_ > kMaxNestingDepth) { XML_StopParser(get_parser(), XML_TRUE); return; } // 3 possibilities: // 1) complex element: create an Element. // 2) simple element: create a Field // 3) unknown element: save XML as a string inside the parent element. // No matter what an Element is pushed onto the stack and we always gather // character data. // See the comment towards the end of this function about permitting "raw" // HTML inside <description> elements. This check will catch an instance // of a <description> inside a <description> and permit us to handle it // correctly as unknown text. if (in_description_ > 0 && name.length() == 11 && name == "description") { in_description_++; } if (skip_depth_ > 0) { // We're already inside an unknown element. Stringify the next element and // its attributes, increment the skip counter again, and return // immediately. InsertUnknownStartElement(name, attrs); skip_depth_++; return; } // If we see <Schema parent=""> then we attempt to parse the old Schema // usage outlined in the header. The name of the schema is stored in the // old_schema_name_ string. // Yes, this means that we'll only do this kind of parse if the Schema // defines its children before they appear. But, as mentioned in the header, // this is exactly Google Earth's behavior. Likewise, only one <Schema> // element is used to define a subclass of Placemark. In the case of // multiple Schema elements appearing at the top of the file, the last // one wins. if (name.length() == 6 && name == "Schema") { FindOldSchemaParentName(attrs, &old_schema_name_); } // Push a string onto the stack we'll use to manage the gathering of // character data. string element_char_data; char_data_.push(element_char_data); ElementPtr element; KmlDomType type_id = static_cast<KmlDomType>(Xsd::GetSchema()->ElementId(name)); // If we're parsing old Schema usage, we force the creation of a Placemark. if (!old_schema_name_.empty() && name == old_schema_name_) { // Treat this as a Placemark. type_id = Type_Placemark; } XsdType xsd_type = Xsd::GetSchema()->ElementType(type_id); if ((xsd_type == XSD_COMPLEX_TYPE) && (element = kml_factory_.CreateElementById(type_id))) { // Icon as a child of IconStyle is really IconStyleIcon if (element->Type() == Type_Icon) { // If there is a parent and it is IconStyle... if (!stack_.empty() && stack_.top()->Type() == Type_IconStyle) { // ... delete the Icon and create an IconStyleIcon instead. element = kml_factory_.CreateElementById(Type_IconStyleIcon); } } // We parse attributes only if StartElement received any. if (!attrs.empty()) { // Element::ParseAttributes takes ownership of the created Attributes. element->ParseAttributes(Attributes::Create(attrs)); } } else if (xsd_type == XSD_SIMPLE_TYPE) { element = kml_factory_.CreateFieldById(type_id); } else if (xsd_type == XSD_UNKNOWN && !old_schema_name_.empty()) { // We might be parsing one of the children of the old schema usage. in_old_schema_placemark_ = ParseOldSchemaChild(name, simplefield_name_vec_, &simpledata_vec_); if (in_old_schema_placemark_) { return; } } if (!element) { if (stack_.empty()) { // Root element is not known. XML_TRUE causes XML_Parse() to return // XML_STATUS_SUSPENDED. Returning XML_FALSE _can_ result in // XML_Parse() returning XML_STATUS_OK. XML_StopParser(get_parser(), XML_TRUE); return; } // The transition point from known to unknown KML. We treat everything // from this point as a string until EndElement has decremented the // skip_depth_ counter to 0. InsertUnknownStartElement(name, attrs); skip_depth_++; return; } // This is a known element. Push onto parse stack and gather content. stack_.push(element); // We need to permit parsing of un-CDATA'd markup inside <description> // elements. We bump the skip counter here as if we'd encountered an unknown // element, but only after we've allowed the description ElementPtr to be // pushed onto the stack. In EndElement we'll check for the closing of // description and decrement the skip counter before anything else happens. if (element->Type() == Type_description) { skip_depth_++; in_description_++; } // Call the NewElement() method of each ParserObserver. The whole parse // terminates if and when any observer's NewElement() returns false. if (!CallNewElementObservers(observers_, element)) { XML_StopParser(get_parser(), XML_TRUE); } } // private bool KmlHandler::CallNewElementObservers( const parser_observer_vector_t& observers, const ElementPtr& element) { for (size_t i = 0; i < observers_.size(); ++i) { if (!observers_[i]->NewElement(element)) { return false; } } return true; } void KmlHandler::EndElement(const string& name) { --nesting_depth_; // See the comment towards the end of StartElement about handling "raw" HTML // inside <description> elements. Here we are checking to see if (1) we're // inside a closing </description> element and (2) if we're at the end of any // possible series of nested description elements. if (name.length() == 11 && name == "description" && --in_description_ == 0) { skip_depth_--; } if (skip_depth_ > 0) { // We're inside an unknown element. Build the closing tag, decrement // the skip counter and then check if we're back to known KML. InsertUnknownEndElement(name); if (--skip_depth_ == 0) { // The next element will be known KML. Push the gathered char_data_ up // to Element as a string for serializiation later on. char_data_.top().append("\n"); stack_.top()->AddUnknownElement(char_data_.top()); char_data_.pop(); } return; } // This is to cover the special case of "<unknown/>" in expat where // endElement is still called even if XML_StopParser() was called in the // beginElement handler. See the discussion on this matter in // XML_StopParser comment in expat.h. if (stack_.empty()) { return; } // If we're parsing an old Schema placemark child, store the character data // gathered into the SimpleData element we put on a stack in StartElement. if (in_old_schema_placemark_ && simpledata_vec_.size() > 0) { // TODO: the pretty serialization of SimpleData will produce some // ugly (but harmless) whitespace and unnecessary line breaks. Fix this in // the serializer. simpledata_vec_.back()->set_text(char_data_.top()); char_data_.pop(); in_old_schema_placemark_ = false; return; } // The top of the stack is the begin of the element ending here. ElementPtr child = stack_.top(); string child_char_data_ = char_data_.top(); char_data_.pop(); child->set_char_data(child_char_data_); if (child->Type() == Type_coordinates || child->Type() == Type_Snippet || child->Type() == Type_linkSnippet || child->Type() == Type_SimpleData) { // These are effectively complex elements, but with character data. child->AddElement(child); // "Parse yourself" } // Check if we're parsing old-style Schema KML. If we are, and if this // EndElement is the closing </Schema>, give the schema an id (by appending // "_id" to its name) and walk through its <SimpleField> children to // discover what element name we should special-case in StartElement. // Handle the case of reaching the closing of an old-style </Schema>. if (!old_schema_name_.empty()) { if (name.length() == 6 && name == "Schema") { HandleOldSchemaEndElement(AsSchema(child), old_schema_name_, &simplefield_name_vec_); } else if (name == old_schema_name_) { // Or that of its Placemark substitute. HandleOldSchemaParentEndElement(AsPlacemark(child), old_schema_name_, kml_factory_, simpledata_vec_); } } // If stack_.size() == 1 this is the root element: leave it alone. if (stack_.size() >= 2) { // We have a parent. Pop ourselves off and hand to parent. Parent element // always takes ownsership: 1) a known complex child, 2) a known field, // or 3) unknown is passed onwards to its parent and possibly ultimately // to the unknown element list in Element. stack_.pop(); if (CallEndElementObservers(observers_, stack_.top(), child)) { stack_.top()->AddElement(child); } if (!CallAddChildObservers(observers_, stack_.top(), child)) { XML_StopParser(get_parser(), XML_TRUE); } } } bool KmlHandler::CallEndElementObservers( const parser_observer_vector_t& observers, const ElementPtr& parent, const ElementPtr& child) { for (size_t i = 0; i < observers_.size(); ++i) { if (!observers_[i]->EndElement(parent, child)) { return false; } } return true; } // private bool KmlHandler::CallAddChildObservers( const parser_observer_vector_t& observers, const ElementPtr& parent, const ElementPtr& child) { for (size_t i = 0; i < observers_.size(); ++i) { if (!observers_[i]->AddChild(parent, child)) { return false; } } return true; } // Note the handling of char data w.r.t. unknown elements. If we are within // a known element that cannot contain char data, setting it in EndElement is // a no-op. For known elements within unknown elements, everything is treated // as a string and _all_ data is saved. // <Placemark><Point>foo<coordinates/>bar</Point></Placemark> becomes: // <Placemark><Point><coordinates/></Point></Placemark> // <X><Point>foo<coordinates/>bar</Point></P> remains as-is. void KmlHandler::CharData(const string& s) { char_data_.top().append(s); } // As with STL pop() methods this is (potentially) destructive. If the // parse succeeded the root element will be the only item on the stack and // this method will detach it. Either way the destructor will delete all // elements on the stack. This should only be called after XML_Parse() // has completed. ElementPtr KmlHandler::PopRoot() { if (!stack_.empty() && stack_.size() == 1) { ElementPtr root = stack_.top(); stack_.pop(); return root; } return NULL; } // Private. void KmlHandler::InsertUnknownStartElement(const string& name, const StringVector& atts) { string& top = char_data_.top(); top.append("<"); top.append(name); for (size_t i = 0; i < atts.size(); i += 2) { top.append(" "); top.append(atts.at(i)); top.append("=\""); top.append(atts.at(i+1)); top.append("\""); } top.append(">"); } // Private. void KmlHandler::InsertUnknownEndElement(const string& name) { string& top = char_data_.top(); top.append("</"); top.append(name); top.append(">"); } // Static, private. void KmlHandler::FindOldSchemaParentName(const StringVector& attrs, string* old_schema_name) { boost::scoped_ptr<Attributes> schema_attrs(Attributes::Create(attrs)); if (schema_attrs.get() && old_schema_name && schema_attrs->FindValue("parent", NULL)) { schema_attrs->FindValue("name", old_schema_name); } } // Static, private. bool KmlHandler::ParseOldSchemaChild( const string& name, const StringVector& simplefield_name_vec, std::vector<SimpleDataPtr>* simpledata_vec) { // We'll iterate through a vector of possible names (created in // EndElement) and check to see if we have a match. If we do, we'll make // a SimpleData element and put it on a stack for later re-parenting to // an ExtendedData element (again in EndElement). if (!simpledata_vec) { return false; } StringVector::const_iterator itr = simplefield_name_vec.begin(); for (; itr != simplefield_name_vec.end(); itr++) { if (name == *itr) { // Treat this as a SimpleData element. SimpleDataPtr simpledata = KmlFactory::GetFactory()->CreateSimpleData(); simpledata->set_name(name); simpledata_vec->push_back(simpledata); return true; } } return false; } // Static, private. void KmlHandler::HandleOldSchemaEndElement( const SchemaPtr& schema, const string& old_schema_name, StringVector* simplefield_name_vec) { if (!simplefield_name_vec) { return; } schema->set_id(old_schema_name + "_id"); // TODO: nuke the parent="Placemark" attr. for (size_t i = 0; i < schema->get_simplefield_array_size(); i++) { if (const SimpleFieldPtr& simplefield = AsSimpleField(schema->get_simplefield_array_at(i))) { if (simplefield->has_name()) { simplefield_name_vec->push_back(simplefield->get_name()); } } } } // Static, private. void KmlHandler::HandleOldSchemaParentEndElement( const PlacemarkPtr& placemark, const string& old_schema_name, const KmlFactory& kml_factory, const std::vector<SimpleDataPtr> simpledata_vec) { // We've reached the closing tag of the old placemark substitute // element. Take the SimpleData elements we've been creating from its // children and hand them to an ExtendedData, then give that to the // parent placemark. ExtendedDataPtr extendeddata = kml_factory.CreateExtendedData(); SchemaDataPtr schemadata = kml_factory.CreateSchemaData(); schemadata->set_schemaurl(old_schema_name + "_id"); std::vector<SimpleDataPtr>::const_iterator itr = simpledata_vec.begin(); for (; itr != simpledata_vec.end(); itr++) { schemadata->add_simpledata(*itr); } extendeddata->add_schemadata(schemadata); placemark->set_extendeddata(extendeddata); } } // end namespace kmldom �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml_handler.h��������������������������������������������������������������0000664�0000000�0000000�00000017114�12636032571�0017560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file declares the KmlHandler specialization of ExpatHandler. // This is used internally to the Parse() function. KmlHandler is constructed // with a list of ParserObservers which essentially layer on an Element-level // SAX parse as the DOM is built. // Note: although the parser itself is SAX-driven, we make a best effort // to preserve all unknown (non-KML) elements found during the parse, and // will serialize those elements after the known elements on output. // As of libkml 1.3, we also attempt to parse old (KML 2.0, 2.1 era) // <Schema> usage found in files created by Google Earth Pro's "GIS Ingest" // module (created by Google Earth 5.1 and earlier). These files used the // <Schema> element to subclass the Placemark element and extend it by // naming typed children in SimpleField elements. This practice was never // standardized, so we attempt to coerce the nonstandard markup into // equivalent and valid KML that preserves the data and its typing. This // implementation only works when the <Schema> element appears before // any of the children it defines. Conveniently, this is also Google Earth's // exact behavior. // // In short, we turn this: // <Document> // <Schema parent="Placemark" name="S_521_525_SSSSS"> // <SimpleField type="string" name="Foo"></SimpleField> // </Schema> // <S_521_525_SSSSS> // <Foo>foo 1</Foo> // </S_521_525_SSSSS> // </Document> // // into this: // // <Document> // <Schema id="S_521_525_SSSSS_id" name="S_521_525_SSSSS"> // <SimpleField name="Foo" type="string"/> // </Schema> // <Placemark> // <ExtendedData> // <SchemaData schemaUrl="S_521_525_SSSSS_id"> // <SimpleData name="Foo">foo 1</SimpleData> // </SchemaData> // </ExtendedData> // </Placemark> // </Document> // // Both of those when loaded into Google Earth 4.0 or later produce equivalent // data displays and interaction models. #ifndef KML_DOM_KML_HANDLER_H__ #define KML_DOM_KML_HANDLER_H__ #include <stack> #include "kml/base/expat_handler.h" #include "kml/dom/element.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/parser_observer.h" namespace kmldom { class KmlFactory; // This class implements the expat handlers for parsing KML. This class is // handed to expat in the ExpatParser() function. class KmlHandler : public kmlbase::ExpatHandler { public: KmlHandler(parser_observer_vector_t& observers); ~KmlHandler(); // ExpatHandler methods virtual void StartElement(const string& name, const kmlbase::StringVector& atts); virtual void EndElement(const string& name); virtual void CharData(const string& s); // This destructively removes the Element on the top of the stack and // transfers ownership of it to the caller. The intention is to use this // after a successful parse. ElementPtr PopRoot(); private: const KmlFactory& kml_factory_; std::stack<ElementPtr> stack_; // Char data is managed as a stack to allow for gathering all character data // inside unknown elements. std::stack<string> char_data_; // Helpers for handling unknown elements: void InsertUnknownStartElement(const string& name, const kmlbase::StringVector& atts); void InsertUnknownEndElement(const string& name); unsigned int skip_depth_; unsigned int in_description_; unsigned int nesting_depth_; // TODO: these next four are for the purpose of handling old-style <Schema> // usage. Instead of creating these by default, we could move them into // a separate class created only when needed. bool in_old_schema_placemark_; string old_schema_name_; kmlbase::StringVector simplefield_name_vec_; std::vector<SimpleDataPtr> simpledata_vec_; // This calls the NewElement() method of each ParserObserver. If any // ParserObserver::NewElement() returns false this immediately returns false. // If all ParserObserver::NewElement()'s return true this returns true. bool CallNewElementObservers(const parser_observer_vector_t& observers, const ElementPtr& element); // This calls the EndElement() method of each ParserObserver. If any // ParserObserver::EndElement() returns false the child is NOT added to // the parent. bool CallEndElementObservers(const parser_observer_vector_t& observers, const ElementPtr& parent, const ElementPtr& child); // This calls the AddChild() method of each ParserObserver. If any // ParserObserver::AddChild() returns false this immediately returns false. // If all ParserObserver::AddChild()'s return true this returns true. bool CallAddChildObservers(const parser_observer_vector_t& observers, const ElementPtr& parent, const ElementPtr& child); // Looks in attrs to find the attributes of an old KML 2.0/2.1 // <Schema parent="Placemark" name="..."> element. Writes the value of the // name attribute to old_schema_name. static void FindOldSchemaParentName(const kmlbase::StringVector& attrs, string* old_schema_name); // Returns true if name matches the name of a child declared in an // old Schema element. Appends a SimpleData element from the name // and character data to simpledata_vec for later reparenting. static bool ParseOldSchemaChild( const string& name, const kmlbase::StringVector& simplefield_name_vec, std::vector<SimpleDataPtr>* simpledata_vec); // Handle reaching the closing old-style </Schema> tag. static void HandleOldSchemaEndElement( const SchemaPtr& schema, const string& old_schema_name, kmlbase::StringVector* simplefield_name_vec); // Handle reaching the closing of the element discovered by // FindOldSchemaParentName. void HandleOldSchemaParentEndElement( const PlacemarkPtr& placemark, const string& old_schema_name, const KmlFactory& kml_factory, const std::vector<SimpleDataPtr> simpledata_vec); const parser_observer_vector_t& observers_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(KmlHandler); }; } // end namespace kmldom #endif // KML_DOM_KML_HANDLER_H__ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml_handler_ns.cc����������������������������������������������������������0000664�0000000�0000000�00000006055�12636032571�0020420�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file implements the KML ParseNS() function. The parser uses expat in // its namespace-aware mode. See kml_handler.cc for more details. #include "kml/dom/kml_handler_ns.h" #include "kml/dom/parser.h" // for kXmlnsSeparator. #include <string.h> // For strchr(). namespace kmldom { // The uri:local_name separator used in expat's ParserCreateNS. // TODO: pull this from a common header with the separator in parse.h. static const char kXmlnsSeparator = '|'; KmlHandlerNS::KmlHandlerNS(parser_observer_vector_t& observers) : KmlHandler(observers) { } KmlHandlerNS::~KmlHandlerNS() { } void KmlHandlerNS::StartElement(const string& name, const kmlbase::StringVector& atts) { // Expat guarantees that there will be delimited uri-name string here. size_t token = name.find_last_of(kXmlnsSeparator) + 1; KmlHandler::StartElement(name.substr(token), atts); } void KmlHandlerNS::EndElement(const string& name) { // Expat guarantees that there will be delimited uri-name string here. size_t token = name.find_last_of(kXmlnsSeparator) + 1; KmlHandler::EndElement(name.substr(token)); } void KmlHandlerNS::CharData(const string& s) { KmlHandler::CharData(s); } void KmlHandlerNS::StartNamespace(const string& prefix, const string& uri) { // TODO: save the uri:prefix mappings. // TODO: enforce the rule that the ONLY default namespace is KML's? // TODO: enforce that there must be a 1:1 uri:prefix mapping per file? } void KmlHandlerNS::EndNamespace(const string& prefix) { } } // end namespace kmldom �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml_handler_ns.h�����������������������������������������������������������0000664�0000000�0000000�00000005277�12636032571�0020267�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file declares the KmlHandlerNS subclass of KmlHandler. // This is used internally to the ParseNS() function. See kml_handler.h for // details. #ifndef KML_DOM_KML_HANDLER_NS_H__ #define KML_DOM_KML_HANDLER_NS_H__ #include <stack> #include <string> #include "kml_handler.h" #include "kml/base/expat_handler.h" #include "kml/dom/element.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/parser_observer.h" namespace kmldom { class KmlFactory; // This subclass of KmlHandler is used with Expat's namespace-aware parsing. class KmlHandlerNS : public KmlHandler { public: KmlHandlerNS(parser_observer_vector_t& observers); ~KmlHandlerNS(); // ExpatHandler methods. virtual void StartElement(const string &name, const kmlbase::StringVector& atts); virtual void EndElement(const string &name); virtual void CharData(const string &s); virtual void StartNamespace(const string &prefix, const string &uri); virtual void EndNamespace(const string &prefix); private: // TODO: A map of namespace URIs to their prefixes found during the parse. LIBKML_DISALLOW_EVIL_CONSTRUCTORS(KmlHandlerNS); }; } // end namespace kmldom #endif // KML_DOM_KML_HANDLER_NS_H__ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/kml_ptr.h������������������������������������������������������������������0000664�0000000�0000000�00000022766�12636032571�0016761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_KML_PTR_H__ #define KML_DOM_KML_PTR_H__ #include "boost/intrusive_ptr.hpp" namespace kmldom { class Element; class Field; class AbstractLatLonBox; class AbstractLink; class AbstractView; class BasicLink; class ColorStyle; class Container; class Feature; class Geometry; class Object; class Overlay; class StyleSelector; class SubStyle; class TimePrimitive; class Vec2; class Alias; class AtomAuthor; class AtomCategory; class AtomContent; class AtomEntry; class AtomFeed; class AtomLink; class BalloonStyle; class Camera; class Change; class Coordinates; class Create; class Data; class Delete; class Document; class ExtendedData; class Folder; class GroundOverlay; class Icon; class IconStyle; class IconStyleIcon; class ImagePyramid; class ItemIcon; class LabelStyle; class LatLonAltBox; class LatLonBox; class LineString; class LineStyle; class LinearRing; class Link; class ListStyle; class Location; class Lod; class LookAt; class Metadata; class Model; class MultiGeometry; class NetworkLink; class NetworkLinkControl; class Orientation; class Pair; class PhotoOverlay; class Placemark; class Point; class PolyStyle; class Polygon; class Region; class ResourceMap; class Scale; class Schema; class SchemaData; class ScreenOverlay; class SimpleData; class SimpleField; class Snippet; class Style; class StyleMap; class TimeSpan; class TimeStamp; class Update; class UpdateOperation; class Url; class ViewVolume; class HotSpot; class InnerBoundaryIs; class Kml; class LinkSnippet; class OuterBoundaryIs; class OverlayXY; class RotationXY; class ScreenXY; class Size; class XalAddressDetails; class XalAdministrativeArea; class XalCountry; class XalLocality; class XalPostalCode; class XalSubAdministrativeArea; class XalThoroughfare; class GxAnimatedUpdate; class GxFlyTo; class GxLatLonQuad; class GxMultiTrack; class GxPlaylist; class GxSimpleArrayField; class GxSimpleArrayData; class GxSoundCue; class GxTimeSpan; class GxTimeStamp; class GxTimePrimitive; class GxTour; class GxTourControl; class GxTourPrimitive; class GxTrack; class GxWait; typedef boost::intrusive_ptr<Element> ElementPtr; typedef boost::intrusive_ptr<Field> FieldPtr; typedef boost::intrusive_ptr<AbstractLatLonBox> AbstractLatLonBoxPtr; typedef boost::intrusive_ptr<AbstractLink> AbstractLinkPtr; typedef boost::intrusive_ptr<AbstractView> AbstractViewPtr; typedef boost::intrusive_ptr<BasicLink> BasicLinkPtr; typedef boost::intrusive_ptr<ColorStyle> ColorStylePtr; typedef boost::intrusive_ptr<Container> ContainerPtr; typedef boost::intrusive_ptr<Feature> FeaturePtr; typedef boost::intrusive_ptr<Geometry> GeometryPtr; typedef boost::intrusive_ptr<Object> ObjectPtr; typedef boost::intrusive_ptr<Overlay> OverlayPtr; typedef boost::intrusive_ptr<StyleSelector> StyleSelectorPtr; typedef boost::intrusive_ptr<SubStyle> SubStylePtr; typedef boost::intrusive_ptr<TimePrimitive> TimePrimitivePtr; typedef boost::intrusive_ptr<Vec2> Vec2Ptr; typedef boost::intrusive_ptr<Alias> AliasPtr; typedef boost::intrusive_ptr<AtomAuthor> AtomAuthorPtr; typedef boost::intrusive_ptr<AtomCategory> AtomCategoryPtr; typedef boost::intrusive_ptr<AtomContent> AtomContentPtr; typedef boost::intrusive_ptr<AtomEntry> AtomEntryPtr; typedef boost::intrusive_ptr<AtomFeed> AtomFeedPtr; typedef boost::intrusive_ptr<AtomLink> AtomLinkPtr; typedef boost::intrusive_ptr<BalloonStyle> BalloonStylePtr; typedef boost::intrusive_ptr<Camera> CameraPtr; typedef boost::intrusive_ptr<Change> ChangePtr; typedef boost::intrusive_ptr<Coordinates> CoordinatesPtr; typedef boost::intrusive_ptr<Create> CreatePtr; typedef boost::intrusive_ptr<Data> DataPtr; typedef boost::intrusive_ptr<Delete> DeletePtr; typedef boost::intrusive_ptr<Document> DocumentPtr; typedef boost::intrusive_ptr<ExtendedData> ExtendedDataPtr; typedef boost::intrusive_ptr<Folder> FolderPtr; typedef boost::intrusive_ptr<GroundOverlay> GroundOverlayPtr; typedef boost::intrusive_ptr<Icon> IconPtr; typedef boost::intrusive_ptr<IconStyle> IconStylePtr; typedef boost::intrusive_ptr<IconStyleIcon> IconStyleIconPtr; typedef boost::intrusive_ptr<ImagePyramid> ImagePyramidPtr; typedef boost::intrusive_ptr<ItemIcon> ItemIconPtr; typedef boost::intrusive_ptr<LabelStyle> LabelStylePtr; typedef boost::intrusive_ptr<LatLonAltBox> LatLonAltBoxPtr; typedef boost::intrusive_ptr<LatLonBox> LatLonBoxPtr; typedef boost::intrusive_ptr<LineString> LineStringPtr; typedef boost::intrusive_ptr<LineStyle> LineStylePtr; typedef boost::intrusive_ptr<LinearRing> LinearRingPtr; typedef boost::intrusive_ptr<Link> LinkPtr; typedef boost::intrusive_ptr<ListStyle> ListStylePtr; typedef boost::intrusive_ptr<Location> LocationPtr; typedef boost::intrusive_ptr<Lod> LodPtr; typedef boost::intrusive_ptr<LookAt> LookAtPtr; typedef boost::intrusive_ptr<Metadata> MetadataPtr; typedef boost::intrusive_ptr<Model> ModelPtr; typedef boost::intrusive_ptr<MultiGeometry> MultiGeometryPtr; typedef boost::intrusive_ptr<NetworkLink> NetworkLinkPtr; typedef boost::intrusive_ptr<NetworkLinkControl> NetworkLinkControlPtr; typedef boost::intrusive_ptr<Orientation> OrientationPtr; typedef boost::intrusive_ptr<Pair> PairPtr; typedef boost::intrusive_ptr<PhotoOverlay> PhotoOverlayPtr; typedef boost::intrusive_ptr<Placemark> PlacemarkPtr; typedef boost::intrusive_ptr<Point> PointPtr; typedef boost::intrusive_ptr<PolyStyle> PolyStylePtr; typedef boost::intrusive_ptr<Polygon> PolygonPtr; typedef boost::intrusive_ptr<Region> RegionPtr; typedef boost::intrusive_ptr<ResourceMap> ResourceMapPtr; typedef boost::intrusive_ptr<Scale> ScalePtr; typedef boost::intrusive_ptr<Schema> SchemaPtr; typedef boost::intrusive_ptr<SchemaData> SchemaDataPtr; typedef boost::intrusive_ptr<ScreenOverlay> ScreenOverlayPtr; typedef boost::intrusive_ptr<SimpleData> SimpleDataPtr; typedef boost::intrusive_ptr<SimpleField> SimpleFieldPtr; typedef boost::intrusive_ptr<Snippet> SnippetPtr; typedef boost::intrusive_ptr<Style> StylePtr; typedef boost::intrusive_ptr<StyleMap> StyleMapPtr; typedef boost::intrusive_ptr<TimeSpan> TimeSpanPtr; typedef boost::intrusive_ptr<TimeStamp> TimeStampPtr; typedef boost::intrusive_ptr<Update> UpdatePtr; typedef boost::intrusive_ptr<UpdateOperation> UpdateOperationPtr; typedef boost::intrusive_ptr<Url> UrlPtr; typedef boost::intrusive_ptr<ViewVolume> ViewVolumePtr; typedef boost::intrusive_ptr<HotSpot> HotSpotPtr; typedef boost::intrusive_ptr<InnerBoundaryIs> InnerBoundaryIsPtr; typedef boost::intrusive_ptr<Kml> KmlPtr; typedef boost::intrusive_ptr<LinkSnippet> LinkSnippetPtr; typedef boost::intrusive_ptr<OuterBoundaryIs> OuterBoundaryIsPtr; typedef boost::intrusive_ptr<OverlayXY> OverlayXYPtr; typedef boost::intrusive_ptr<RotationXY> RotationXYPtr; typedef boost::intrusive_ptr<ScreenXY> ScreenXYPtr; typedef boost::intrusive_ptr<Size> SizePtr; typedef boost::intrusive_ptr<XalAddressDetails> XalAddressDetailsPtr; typedef boost::intrusive_ptr<XalAdministrativeArea> XalAdministrativeAreaPtr; typedef boost::intrusive_ptr<XalCountry> XalCountryPtr; typedef boost::intrusive_ptr<XalLocality> XalLocalityPtr; typedef boost::intrusive_ptr<XalPostalCode> XalPostalCodePtr; typedef boost::intrusive_ptr<XalSubAdministrativeArea> XalSubAdministrativeAreaPtr; typedef boost::intrusive_ptr<XalThoroughfare> XalThoroughfarePtr; typedef boost::intrusive_ptr<GxAnimatedUpdate> GxAnimatedUpdatePtr; typedef boost::intrusive_ptr<GxFlyTo> GxFlyToPtr; typedef boost::intrusive_ptr<GxLatLonQuad> GxLatLonQuadPtr; typedef boost::intrusive_ptr<GxMultiTrack> GxMultiTrackPtr; typedef boost::intrusive_ptr<GxPlaylist> GxPlaylistPtr; typedef boost::intrusive_ptr<GxSimpleArrayField> GxSimpleArrayFieldPtr; typedef boost::intrusive_ptr<GxSimpleArrayData> GxSimpleArrayDataPtr; typedef boost::intrusive_ptr<GxSoundCue> GxSoundCuePtr; typedef boost::intrusive_ptr<GxTimeSpan> GxTimeSpanPtr; typedef boost::intrusive_ptr<GxTimeStamp> GxTimeStampPtr; typedef boost::intrusive_ptr<GxTour> GxTourPtr; typedef boost::intrusive_ptr<GxTourControl> GxTourControlPtr; typedef boost::intrusive_ptr<GxTourPrimitive> GxTourPrimitivePtr; typedef boost::intrusive_ptr<GxTrack> GxTrackPtr; typedef boost::intrusive_ptr<GxWait> GxWaitPtr; } // end namespace kmldom #endif // KML_DOM_KML_PTR_H__ ����������libkml-1.3.0/src/kml/dom/kmldom.h�������������������������������������������������������������������0000664�0000000�0000000�00000005001�12636032571�0016553�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_KMLDOM_H__ #define KML_DOM_KMLDOM_H__ #include "kml/dom/abstractview.h" #include "kml/dom/atom.h" #include "kml/dom/balloonstyle.h" #include "kml/dom/container.h" #include "kml/dom/document.h" #include "kml/dom/element.h" #include "kml/dom/extendeddata.h" #include "kml/dom/feature.h" #include "kml/dom/folder.h" #include "kml/dom/geometry.h" #include "kml/dom/iconstyle.h" #include "kml/dom/kml.h" #include "kml/dom/labelstyle.h" #include "kml/dom/link.h" #include "kml/dom/liststyle.h" #include "kml/dom/model.h" #include "kml/dom/networklink.h" #include "kml/dom/networklinkcontrol.h" #include "kml/dom/object.h" #include "kml/dom/overlay.h" #include "kml/dom/placemark.h" #include "kml/dom/polystyle.h" #include "kml/dom/region.h" #include "kml/dom/schema.h" #include "kml/dom/snippet.h" #include "kml/dom/style.h" #include "kml/dom/stylemap.h" #include "kml/dom/timeprimitive.h" #include "kml/dom/gx_timeprimitive.h" #include "kml/dom/gx_tour.h" #include "kml/dom/xal.h" #include "kml/dom/visitor.h" #endif // KML_DOM_KMLDOM_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/labelstyle.cc��������������������������������������������������������������0000664�0000000�0000000�00000004566�12636032571�0017605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/labelstyle.h" #include "kml/base/attributes.h" #include "kml/dom/element.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { LabelStyle::LabelStyle() : scale_(1.0), has_scale_(false) { } LabelStyle::~LabelStyle() { } void LabelStyle::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_scale: has_scale_ = element->SetDouble(&scale_); break; default: ColorStyle::AddElement(element); break; } } void LabelStyle::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); ColorStyle::Serialize(serializer); if (has_scale()) { serializer.SaveFieldById(Type_scale, get_scale()); } } void LabelStyle::Accept(Visitor* visitor) { visitor->VisitLabelStyle(LabelStylePtr(this)); } } // end namespace kmldom ������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/labelstyle.h���������������������������������������������������������������0000664�0000000�0000000�00000005141�12636032571�0017435�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_LABELSTYLE_H__ #define KML_DOM_LABELSTYLE_H__ #include "kml/dom/colorstyle.h" #include "kml/dom/kml22.h" #include "kml/base/util.h" namespace kmldom { class Visitor; class LabelStyle : public ColorStyle { public: virtual ~LabelStyle(); virtual KmlDomType Type() const { return Type_LabelStyle; } virtual bool IsA(KmlDomType type) const { return type == Type_LabelStyle || ColorStyle::IsA(type); } // <scale> double get_scale() const { return scale_; } bool has_scale() const { return has_scale_; } void set_scale(double scale) { scale_ = scale; has_scale_ = true; } void clear_scale() { scale_ = 1.0; has_scale_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; LabelStyle(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serialize) const; double scale_; bool has_scale_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(LabelStyle); }; } // end namespace kmldom #endif // KML_DOM_LABELSTYLE_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/linestyle.cc���������������������������������������������������������������0000664�0000000�0000000�00000004552�12636032571�0017450�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/linestyle.h" #include "kml/base/attributes.h" #include "kml/dom/element.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { LineStyle::LineStyle() : width_(1.0), has_width_(false) { } LineStyle::~LineStyle() { } void LineStyle::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_width: has_width_ = element->SetDouble(&width_); break; default: ColorStyle::AddElement(element); break; } } void LineStyle::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); ColorStyle::Serialize(serializer); if (has_width()) { serializer.SaveFieldById(Type_width, get_width()); } } void LineStyle::Accept(Visitor* visitor) { visitor->VisitLineStyle(LineStylePtr(this)); } } // end namespace kmldom ������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/linestyle.h����������������������������������������������������������������0000664�0000000�0000000�00000005147�12636032571�0017313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_LINESTYLE_H__ #define KML_DOM_LINESTYLE_H__ #include "kml/dom/colorstyle.h" #include "kml/dom/kml22.h" #include "kml/base/util.h" namespace kmldom { class Visitor; // <LineStyle> class LineStyle : public ColorStyle { public: virtual ~LineStyle(); virtual KmlDomType Type() const { return Type_LineStyle; } virtual bool IsA(KmlDomType type) const { return type == Type_LineStyle || ColorStyle::IsA(type); } // <width> double get_width() const { return width_; } bool has_width() const { return has_width_; } void set_width(double width) { width_ = width; has_width_ = true; } void clear_width() { width_ = 1.0; has_width_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; LineStyle(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serialize) const; double width_; bool has_width_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(LineStyle); }; } // end namespace kmldom #endif // KML_DOM_LINESTYLE_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/link.cc��������������������������������������������������������������������0000664�0000000�0000000�00000015353�12636032571�0016376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // #include <cstring> #include "kml/dom/link.h" #include "kml/base/attributes.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { BasicLink::BasicLink() : has_href_(false) { } BasicLink::~BasicLink() { } // TODO: fix CDATA parsing in general. static const char *kCdataOpen = "<![CDATA["; static bool SetStringInsideCdata(ElementPtr element, const string& char_data, string* val) { if (!element) { return false; } string::size_type offset = strlen(kCdataOpen); if (char_data.compare(0, offset, kCdataOpen, offset) == 0) { *val = char_data.substr(offset, char_data.size() - offset - 3); return true; } return element->SetString(val); } void BasicLink::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_href: // TODO: use a generalized approach // has_href_ = element->SetString(&href_); has_href_ = SetStringInsideCdata(element, element->get_char_data(), &href_); break; default: Object::AddElement(element); break; } } void BasicLink::Serialize(Serializer& serializer) const { Object::Serialize(serializer); if (has_href()) { serializer.SaveFieldById(Type_href, get_href()); } } void BasicLink::Accept(Visitor* visitor) { visitor->VisitBasicLink(BasicLinkPtr(this)); } // Construct with defaults as per KML standard. AbstractLink::AbstractLink() : has_href_(false), refreshmode_(REFRESHMODE_ONCHANGE), has_refreshmode_(false), refreshinterval_(4.0), has_refreshinterval_(false), viewrefreshmode_(VIEWREFRESHMODE_NEVER), has_viewrefreshmode_(false), viewrefreshtime_(4.0), has_viewrefreshtime_(false), viewboundscale_(1.0), has_viewboundscale_(false), has_viewformat_(false), has_httpquery_(false) { } AbstractLink::~AbstractLink() { } void AbstractLink::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_refreshMode: has_refreshmode_ = element->SetEnum(&refreshmode_); break; case Type_refreshInterval: has_refreshinterval_ = element->SetDouble(&refreshinterval_); break; case Type_viewRefreshMode: has_viewrefreshmode_ = element->SetEnum(&viewrefreshmode_); break; case Type_viewRefreshTime: has_viewrefreshtime_ = element->SetDouble(&viewrefreshtime_); break; case Type_viewBoundScale: has_viewboundscale_ = element->SetDouble(&viewboundscale_); break; case Type_viewFormat: has_viewformat_ = element->SetString(&viewformat_); break; case Type_httpQuery: has_httpquery_ = element->SetString(&httpquery_); break; default: BasicLink::AddElement(element); break; } } void AbstractLink::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); BasicLink::Serialize(serializer); if (has_refreshmode()) { serializer.SaveEnum(Type_refreshMode, get_refreshmode()); } if (has_refreshinterval()) { serializer.SaveFieldById(Type_refreshInterval, get_refreshinterval()); } if (has_viewrefreshmode()) { serializer.SaveEnum(Type_viewRefreshMode, get_viewrefreshmode()); } if (has_viewrefreshtime()) { serializer.SaveFieldById(Type_viewRefreshTime, get_viewrefreshtime()); } if (has_viewboundscale()) { serializer.SaveFieldById(Type_viewBoundScale, get_viewboundscale()); } if (has_viewformat()) { serializer.SaveFieldById(Type_viewFormat, get_viewformat()); } if (has_httpquery()) { serializer.SaveFieldById(Type_httpQuery, get_httpquery()); } } Link::Link() {} Link::~Link() {} void Link::Accept(Visitor* visitor) { visitor->VisitLink(LinkPtr(this)); } Icon::Icon() {} Icon::~Icon() {} void Icon::Accept(Visitor* visitor) { visitor->VisitIcon(IconPtr(this)); } Url::Url() {} Url::~Url() {} void Url::Accept(Visitor* visitor) { visitor->VisitUrl(UrlPtr(this)); } IconStyleIcon::IconStyleIcon() : gx_x_(0.0), has_gx_x_(false), gx_y_(0.0), has_gx_y_(false), gx_w_(0.0), has_gx_w_(false), gx_h_(0.0), has_gx_h_(false) { } IconStyleIcon::~IconStyleIcon() {} void IconStyleIcon::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_GxX: has_gx_x_ = element->SetDouble(&gx_x_); break; case Type_GxY: has_gx_y_ = element->SetDouble(&gx_y_); break; case Type_GxW: has_gx_w_ = element->SetDouble(&gx_w_); break; case Type_GxH: has_gx_h_ = element->SetDouble(&gx_h_); break; default: BasicLink::AddElement(element); } } void IconStyleIcon::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); BasicLink::Serialize(serializer); if (has_gx_x_) { serializer.SaveFieldById(Type_GxX, gx_x_); } if (has_gx_y_) { serializer.SaveFieldById(Type_GxY, gx_y_); } if (has_gx_w_) { serializer.SaveFieldById(Type_GxW, gx_w_); } if (has_gx_h_) { serializer.SaveFieldById(Type_GxH, gx_h_); } } void IconStyleIcon::Accept(Visitor* visitor) { visitor->VisitIconStyleIcon(IconStyleIconPtr(this)); } } // end namespace kmldom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/link.h���������������������������������������������������������������������0000664�0000000�0000000�00000022554�12636032571�0016241�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations for the the classes for the Link, Icon, // and Url elements. #ifndef KML_DOM_LINK_H__ #define KML_DOM_LINK_H__ #include "kml/dom/kml22.h" #include "kml/dom/object.h" namespace kmldom { class Visitor; // OGC KML 2.2 Standard: 12.9 kml:Icon (kml:BasicLinkType) // OGC KML 2.2 XSD: <complexType name="BasicLinkType"... class BasicLink : public Object { public: virtual ~BasicLink(); virtual KmlDomType Type() const { return Type_BasicLink; } virtual bool IsA(KmlDomType type) const { return type == Type_BasicLink || Object::IsA(type); } // <href> const string& get_href() const { return href_; } bool has_href() const { return has_href_; } void set_href(const string& href) { href_ = href; has_href_ = true; } void clear_href() { href_.clear(); has_href_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); protected: // Internal class, not for direct instantiation. BasicLink(); virtual void AddElement(const ElementPtr& element); virtual void Serialize(Serializer& serializer) const; private: string href_; bool has_href_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(BasicLink); }; // This is LinkType in the KML 2.2 XSD. LinkType is the only XSD complexType // instantiated as more than one element. class AbstractLink : public BasicLink { public: virtual ~AbstractLink(); // <refreshMode> int get_refreshmode() const { return refreshmode_; } bool has_refreshmode() const { return has_refreshmode_; } void set_refreshmode(const int refreshmode) { refreshmode_ = refreshmode; has_refreshmode_ = true; } void clear_refreshmode() { refreshmode_ = REFRESHMODE_ONCHANGE; has_refreshmode_ = false; } // <refreshInterval> double get_refreshinterval() const { return refreshinterval_; } bool has_refreshinterval() const { return has_refreshinterval_; } void set_refreshinterval(const double refreshinterval) { refreshinterval_ = refreshinterval; has_refreshinterval_ = true; } void clear_refreshinterval() { refreshinterval_ = 4.0; has_refreshinterval_ = false; } // <viewRefreshMode> int get_viewrefreshmode() const { return viewrefreshmode_; } bool has_viewrefreshmode() const { return has_viewrefreshmode_; } void set_viewrefreshmode(const int viewrefreshmode) { viewrefreshmode_ = viewrefreshmode; has_viewrefreshmode_ = true; } void clear_viewrefreshmode() { viewrefreshmode_ = VIEWREFRESHMODE_NEVER; has_viewrefreshmode_ = false; } // <viewRefreshTime> double get_viewrefreshtime() const { return viewrefreshtime_; } bool has_viewrefreshtime() const { return has_viewrefreshtime_; } void set_viewrefreshtime(const double viewrefreshtime) { viewrefreshtime_ = viewrefreshtime; has_viewrefreshtime_ = true; } void clear_viewrefreshtime() { viewrefreshtime_ = 4.0; has_viewrefreshtime_ = false; } // <viewBoundScale> double get_viewboundscale() const { return viewboundscale_; } bool has_viewboundscale() const { return has_viewboundscale_; } void set_viewboundscale(const double viewboundscale) { viewboundscale_ = viewboundscale; has_viewboundscale_ = true; } void clear_viewboundscale() { viewboundscale_ = 1.0; has_viewboundscale_ = false; } // <viewFormat> const string& get_viewformat() const { return viewformat_; } bool has_viewformat() const { return has_viewformat_; } void set_viewformat(const string& viewformat) { viewformat_ = viewformat; has_viewformat_ = true; } void clear_viewformat() { viewformat_.clear(); has_viewformat_ = false; } // <httpQuery> const string& get_httpquery() const { return httpquery_; } bool has_httpquery() const { return has_httpquery_; } void set_httpquery(const string& httpquery) { httpquery_ = httpquery; has_httpquery_ = true; } void clear_httpquery() { httpquery_.clear(); has_httpquery_ = false; } protected: // Internal class, not for direct instantiation. AbstractLink(); virtual void AddElement(const ElementPtr& element); virtual void Serialize(Serializer& serializer) const; private: bool has_href_; int refreshmode_; bool has_refreshmode_; double refreshinterval_; bool has_refreshinterval_; int viewrefreshmode_; bool has_viewrefreshmode_; double viewrefreshtime_; bool has_viewrefreshtime_; double viewboundscale_; bool has_viewboundscale_; string viewformat_; bool has_viewformat_; string httpquery_; bool has_httpquery_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(AbstractLink); }; // <Link> in NetworkLink and Model class Link : public AbstractLink { public: virtual ~Link(); virtual KmlDomType Type() const { return Type_Link; } virtual bool IsA(KmlDomType type) const { return type == Type_Link || AbstractLink::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Link(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Link); }; // <Icon> in Overlay class Icon : public AbstractLink { public: virtual ~Icon(); virtual KmlDomType Type() const { return Type_Icon; } virtual bool IsA(KmlDomType type) const { return type == Type_Icon || AbstractLink::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Icon(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Icon); }; // <Url> in NetworkLink class Url : public AbstractLink { public: virtual ~Url(); virtual KmlDomType Type() const { return Type_Url; } virtual bool IsA(KmlDomType type) const { return type == Type_Url || AbstractLink::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Url(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Url); }; // <Icon> in <IconStyle> // This is the only case in KML of a non-global element. The <Icon> // of any Overlay is the same as <Link> with all refresh modes, etc. // The <Icon> of <IconStyle> is just an <href> to an icon as the // derivation from BasicLink suggests. class IconStyleIcon : public BasicLink { public: virtual ~IconStyleIcon(); virtual KmlDomType Type() const { return Type_IconStyleIcon; } virtual bool IsA(KmlDomType type) const { return type == Type_IconStyleIcon || BasicLink::IsA(type); } // <gx:x> double get_gx_x() const { return gx_x_; } bool has_gx_x() const { return has_gx_x_; } void set_gx_x(const double x) { gx_x_ = x; has_gx_x_= true; } void clear_gx_x() { gx_x_= 0.0; has_gx_x_ = false; } // <gx:y> double get_gx_y() const { return gx_y_; } bool has_gx_y() const { return has_gx_y_; } void set_gx_y(const double y) { gx_y_ = y; has_gx_y_= true; } void clear_gx_y() { gx_y_= 0.0; has_gx_y_ = false; } // <gx:w> double get_gx_w() const { return gx_w_; } bool has_gx_w() const { return has_gx_w_; } void set_gx_w(const double w) { gx_w_ = w; has_gx_w_= true; } void clear_gx_w() { gx_w_= 0.0; has_gx_w_ = false; } // <gx:h> double get_gx_h() const { return gx_h_; } bool has_gx_h() const { return has_gx_h_; } void set_gx_h(const double h) { gx_h_ = h; has_gx_h_= true; } void clear_gx_h() { gx_h_= 0.0; has_gx_h_ = false; } virtual void AddElement(const ElementPtr& element); // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; IconStyleIcon(); friend class Serializer; virtual void Serialize(Serializer& serializer) const; double gx_x_; bool has_gx_x_; double gx_y_; bool has_gx_y_; double gx_w_; bool has_gx_w_; double gx_h_; bool has_gx_h_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(IconStyleIcon); }; } // end namespace kmldom #endif // KML_DOM_LINK_H__ ����������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/liststyle.cc���������������������������������������������������������������0000664�0000000�0000000�00000011550�12636032571�0017470�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/liststyle.h" #include "kml/base/string_util.h" #include "kml/base/attributes.h" #include "kml/dom/element.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" #include "kml/dom/xsd.h" using kmlbase::Attributes; using kmlbase::Color32; namespace kmldom { // <ItemIcon> ItemIcon::ItemIcon() : has_state_(false), has_href_(false) { state_array_.push_back(ITEMICONSTATE_OPEN); } ItemIcon::~ItemIcon() {} void ItemIcon::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_state: { clear_state(); std::vector<string> v; kmlbase::SplitStringUsing(element->get_char_data(), " ", &v); std::vector<string>::const_iterator itr; for (itr = v.begin(); itr != v.end(); ++itr) { int val = Xsd::GetSchema()->EnumId(Type_state, *itr); if (val != -1) { add_state(val); } } has_state_ = true; } break; case Type_href: has_href_ = element->SetString(&href_); break; default: Object::AddElement(element); break; } } void ItemIcon::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); if (has_state()) { string content; for (size_t i = 0; i != get_state_array_size(); ++i) { string s = Xsd::GetSchema()->EnumValue(Type_state, get_state_array_at(i)); content.append(s); if (i != get_state_array_size() - 1) { content.append(" "); } } serializer.SaveFieldById(Type_state, content); } if (has_href()) { serializer.SaveFieldById(Type_href, get_href()); } } void ItemIcon::Accept(Visitor* visitor) { visitor->VisitItemIcon(ItemIconPtr(this)); } // <ListStyle> ListStyle::ListStyle() : listitemtype_(LISTITEMTYPE_CHECK), has_listitemtype_(false), bgcolor_(Color32(0xffffffff)), has_bgcolor_(false), maxsnippetlines_(2), has_maxsnippetlines_(false) { } ListStyle::~ListStyle() {} void ListStyle::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_listItemType: has_listitemtype_ = element->SetEnum(&listitemtype_); break; case Type_bgColor: set_bgcolor(Color32(element->get_char_data())); break; case Type_ItemIcon: add_itemicon(AsItemIcon(element)); break; case Type_maxSnippetLines: has_maxsnippetlines_ = element->SetInt(&maxsnippetlines_); break; default: SubStyle::AddElement(element); break; } } void ListStyle::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); SubStyle::Serialize(serializer); if (has_listitemtype()) { serializer.SaveEnum(Type_listItemType, get_listitemtype()); } if (has_bgcolor()) { serializer.SaveColor(Type_bgColor, get_bgcolor()); } serializer.SaveElementArray(itemicon_array_); if (has_maxsnippetlines()) { serializer.SaveFieldById(Type_maxSnippetLines, get_maxsnippetlines()); } } void ListStyle::Accept(Visitor* visitor) { visitor->VisitListStyle(ListStylePtr(this)); } void ListStyle::AcceptChildren(VisitorDriver* driver) { SubStyle::AcceptChildren(driver); Element::AcceptRepeated<ItemIconPtr>(&itemicon_array_, driver); } } // end namespace kmldom ��������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/liststyle.h����������������������������������������������������������������0000664�0000000�0000000�00000014442�12636032571�0017335�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the ItemIcon and ListStyle elements. #ifndef KML_DOM_LISTSTYLE_H__ #define KML_DOM_LISTSTYLE_H__ #include <vector> #include "kml/base/color32.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/object.h" #include "kml/dom/substyle.h" #include "kml/base/util.h" namespace kmldom { class Visitor; class VisitorDriver; // <ItemIcon> class ItemIcon : public Object { public: virtual ~ItemIcon(); virtual KmlDomType Type() const { return Type_ItemIcon; } virtual bool IsA(KmlDomType type) const { return type == Type_ItemIcon || Object::IsA(type); } // <state> // Note that <state> within <ItemIcon> is an oddity within KML. It is the // only instance of an element whose character data is an array of // enumerations. // // Also note that since the element has a default enumeration // (<state>open</state>) the API usage is a little different. Calling // add_state(...) will simply append to the array of state enums. If you // initalize an ItemIcon object and wish to give it an explicit state, e.g. // <state>closed</state>, you should call clear_state() before using // add_state(...). // // State enumerations must be space-delimited. New lines, tabs, etc. are not // supported. This is consistent with the use of xsd:list in the KML schema. int get_state_array_at(size_t index) const { return state_array_[index]; } size_t get_state_array_size() const { return state_array_.size(); } bool has_state() const { return has_state_; } void add_state(int state) { state_array_.push_back(state); has_state_ = true; } // Note that clear_state will empty ALL stored state enums and thus does // not return the element to its default value of <state>open</state>. void clear_state() { state_array_.clear(); has_state_ = false; } // <href> const string& get_href() const { return href_; } bool has_href() const { return has_href_; } void set_href(const string& href) { href_ = href; has_href_ = true; } void clear_href() { href_.clear(); has_href_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; ItemIcon(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serialize) const; std::vector<int> state_array_; bool has_state_; string href_; bool has_href_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(ItemIcon); }; // <ListStyle> class ListStyle : public SubStyle { public: virtual ~ListStyle(); virtual KmlDomType Type() const { return Type_ListStyle; } virtual bool IsA(KmlDomType type) const { return type == Type_ListStyle || SubStyle::IsA(type); } // <listItemType> int get_listitemtype() const { return listitemtype_; } bool has_listitemtype() const { return has_listitemtype_; } void set_listitemtype(int listitemtype) { listitemtype_ = listitemtype; has_listitemtype_ = true; } void clear_listitemtype() { listitemtype_ = LISTITEMTYPE_CHECK; has_listitemtype_ = false; } // <bgColor> const kmlbase::Color32& get_bgcolor() const { return bgcolor_; } bool has_bgcolor() const { return has_bgcolor_; } void set_bgcolor(const kmlbase::Color32& bgcolor) { bgcolor_ = bgcolor; has_bgcolor_ = true; } void clear_bgcolor() { bgcolor_ = kmlbase::Color32(0xffffffff); has_bgcolor_ = false; } // <ItemIcon> void add_itemicon(const ItemIconPtr& itemicon) { AddComplexChild(itemicon, &itemicon_array_); } size_t get_itemicon_array_size() const { return itemicon_array_.size(); } const ItemIconPtr& get_itemicon_array_at(size_t index) const { return itemicon_array_[index]; } // <maxSnippetLines> int get_maxsnippetlines() const { return maxsnippetlines_; } bool has_maxsnippetlines() const { return has_maxsnippetlines_; } void set_maxsnippetlines(int maxsnippetlines) { maxsnippetlines_ = maxsnippetlines; has_maxsnippetlines_ = true; } void clear_maxsnippetlines() { maxsnippetlines_ = 2; has_maxsnippetlines_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; ListStyle(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serialize) const; int listitemtype_; bool has_listitemtype_; kmlbase::Color32 bgcolor_; bool has_bgcolor_; std::vector<ItemIconPtr> itemicon_array_; int maxsnippetlines_; bool has_maxsnippetlines_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(ListStyle); }; } // end namespace kmldom #endif // KML_DOM_LISTSTYLE_H__ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/model.cc�������������������������������������������������������������������0000664�0000000�0000000�00000020721�12636032571�0016534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the Location, Orientation, // Scale, ResourceMap, Alias and Model elements. #include "kml/dom/model.h" #include "kml/base/attributes.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_cast.h" #include "kml/dom/link.h" #include "kml/dom/serializer.h" #include "kml/dom/xsd.h" using kmlbase::Attributes; namespace kmldom { Location::Location() : longitude_(0.0), has_longitude_(false), latitude_(0.0), has_latitude_(false), altitude_(0.0), has_altitude_(false) {} Location::~Location() {} void Location::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_longitude: has_longitude_ = element->SetDouble(&longitude_); break; case Type_latitude: has_latitude_ = element->SetDouble(&latitude_); break; case Type_altitude: has_altitude_ = element->SetDouble(&altitude_); break; default: Object::AddElement(element); break; } } void Location::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); if (has_longitude()) { serializer.SaveFieldById(Type_longitude, get_longitude()); } if (has_latitude()) { serializer.SaveFieldById(Type_latitude, get_latitude()); } if (has_altitude()) { serializer.SaveFieldById(Type_altitude, get_altitude()); } } void Location::Accept(Visitor* visitor) { visitor->VisitLocation(LocationPtr(this)); } Orientation::Orientation() : heading_(0.0), has_heading_(false), tilt_(0.0), has_tilt_(false), roll_(0.0), has_roll_(false) { } Orientation::~Orientation() {} void Orientation::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_heading: has_heading_ = element->SetDouble(&heading_); break; case Type_tilt: has_tilt_ = element->SetDouble(&tilt_); break; case Type_roll: has_roll_ = element->SetDouble(&roll_); break; default: Object::AddElement(element); break; } } void Orientation::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); if (has_heading()) { serializer.SaveFieldById(Type_heading, get_heading()); } if (has_tilt()) { serializer.SaveFieldById(Type_tilt, get_tilt()); } if (has_roll()) { serializer.SaveFieldById(Type_roll, get_roll()); } } void Orientation::Accept(Visitor* visitor) { visitor->VisitOrientation(OrientationPtr(this)); } Scale::Scale() : x_(1.0), has_x_(false), y_(1.0), has_y_(false), z_(1.0), has_z_(false) { } Scale::~Scale() {} void Scale::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_x: has_x_ = element->SetDouble(&x_); break; case Type_y: has_y_ = element->SetDouble(&y_); has_y_ = true; break; case Type_z: has_z_ = element->SetDouble(&z_); break; default: Object::AddElement(element); break; } } void Scale::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); if (has_x()) { serializer.SaveFieldById(Type_x, get_x()); } if (has_y()) { serializer.SaveFieldById(Type_y, get_y()); } if (has_z()) { serializer.SaveFieldById(Type_z, get_z()); } } void Scale::Accept(Visitor* visitor) { visitor->VisitScale(ScalePtr(this)); } Alias::Alias() : has_targethref_(false), has_sourcehref_(false) {} Alias::~Alias() {} void Alias::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_targetHref: has_targethref_ = element->SetString(&targethref_); break; case Type_sourceHref: has_sourcehref_ = element->SetString(&sourcehref_); break; default: Object::AddElement(element); } } void Alias::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); if (has_targethref()) { serializer.SaveFieldById(Type_targetHref, get_targethref()); } if (has_sourcehref()) { serializer.SaveFieldById(Type_sourceHref, get_sourcehref()); } } void Alias::Accept(Visitor* visitor) { visitor->VisitAlias(AliasPtr(this)); } ResourceMap::ResourceMap() {} ResourceMap::~ResourceMap() {} void ResourceMap::add_alias(const AliasPtr& alias) { AddComplexChild(alias, &alias_array_); } void ResourceMap::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_Alias) { add_alias(AsAlias(element)); } else { Object::AddElement(element); } } void ResourceMap::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); serializer.SaveElementArray(alias_array_); } void ResourceMap::Accept(Visitor* visitor) { visitor->VisitResourceMap(ResourceMapPtr(this)); } void ResourceMap::AcceptChildren(VisitorDriver* driver) { Object::AcceptChildren(driver); Element::AcceptRepeated<AliasPtr>(&alias_array_, driver); } Model::Model() {} Model::~Model() {} void Model::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_Location: set_location(AsLocation(element)); break; case Type_Orientation: set_orientation(AsOrientation(element)); break; case Type_Scale: set_scale(AsScale(element)); break; case Type_Link: set_link(AsLink(element)); break; case Type_ResourceMap: set_resourcemap(AsResourceMap(element)); break; default: AltitudeGeometryCommon::AddElement(element); } } void Model::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Geometry::Serialize(serializer); if (has_altitudemode()) { serializer.SaveEnum(Type_altitudeMode, get_altitudemode()); } if (has_gx_altitudemode()) { serializer.SaveEnum(Type_GxAltitudeMode, get_gx_altitudemode()); } if (has_location()) { serializer.SaveElement(get_location()); } if (has_orientation()) { serializer.SaveElement(get_orientation()); } if (has_scale()) { serializer.SaveElement(get_scale()); } if (has_link()) { serializer.SaveElement(get_link()); } if (has_resourcemap()) { serializer.SaveElement(get_resourcemap()); } } void Model::Accept(Visitor* visitor) { visitor->VisitModel(ModelPtr(this)); } void Model::AcceptChildren(VisitorDriver* driver) { AltitudeGeometryCommon::AcceptChildren(driver); if (has_location()) { driver->Visit(get_location()); } if (has_orientation()) { driver->Visit(get_orientation()); } if (has_scale()) { driver->Visit(get_scale()); } if (has_link()) { driver->Visit(get_link()); } if (has_resourcemap()) { driver->Visit(get_resourcemap()); } } } // end namespace kmldom �����������������������������������������������libkml-1.3.0/src/kml/dom/model.h��������������������������������������������������������������������0000664�0000000�0000000�00000003765�12636032571�0016407�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file declares the Model, Location, Orientation, Scale, ResourceMap // and Alias elements. #ifndef KML_DOM_MODEL_H__ #define KML_DOM_MODEL_H__ #include <vector> #include "kml/dom/geometry.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/link.h" #include "kml/dom/object.h" namespace kmldom { class Visitor; class VisitorDriver; // HACK: see the corresponding note in kml/dom/geometry.h for why this header // is temporarily empty. } // end namespace kmldom #endif // KML_DOM_MODEL_H__ �����������libkml-1.3.0/src/kml/dom/networklink.cc�������������������������������������������������������������0000664�0000000�0000000�00000006423�12636032571�0020006�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the definition of the NetworkLink element. #include "kml/dom/networklink.h" #include "kml/base/attributes.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { NetworkLink::NetworkLink() : refreshvisibility_(false), has_refreshvisibility_(false), flytoview_(false), has_flytoview_(false) { } NetworkLink::~NetworkLink() {} void NetworkLink::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_refreshVisibility: has_refreshvisibility_ = element->SetBool(&refreshvisibility_); break; case Type_flyToView: has_flytoview_ = element->SetBool(&flytoview_); break; case Type_Url: // <Url> is deprecated. This permits it in the parser. // Force the cast to accept Url as a LinkPtr. set_link(boost::static_pointer_cast<Link>(element)); break; case Type_Link: set_link(AsLink(element)); break; default: Feature::AddElement(element); break; } } void NetworkLink::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Feature::Serialize(serializer); if (has_refreshvisibility()) { serializer.SaveFieldById(Type_refreshVisibility, get_refreshvisibility()); } if (has_flytoview()) { serializer.SaveFieldById(Type_flyToView, get_flytoview()); } if (has_link()) { // If this is <Url> it will serialize as such. serializer.SaveElement(get_link()); } } void NetworkLink::Accept(Visitor* visitor) { visitor->VisitNetworkLink(NetworkLinkPtr(this)); } void NetworkLink::AcceptChildren(VisitorDriver* driver) { Feature::AcceptChildren(driver); if (has_link()) { driver->Visit(get_link()); } } } // end namespace kmldom ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/networklink.h��������������������������������������������������������������0000664�0000000�0000000�00000007053�12636032571�0017650�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file declares the NetworkLink element. #ifndef KML_DOM_NETWORKLINK_H__ #define KML_DOM_NETWORKLINK_H__ #include "kml/dom/feature.h" #include "kml/dom/link.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/base/util.h" namespace kmldom { class Visitor; class VisitorDriver; // <NetworkLink> class NetworkLink : public Feature { public: virtual ~NetworkLink(); virtual KmlDomType Type() const { return Type_NetworkLink; } virtual bool IsA(KmlDomType type) const { return type == Type_NetworkLink || Feature::IsA(type); } // <refreshVisibility> bool get_refreshvisibility() const { return refreshvisibility_; } bool has_refreshvisibility() const { return has_refreshvisibility_; } void set_refreshvisibility(bool value) { refreshvisibility_ = value; has_refreshvisibility_ = true; } void clear_refreshvisibility() { refreshvisibility_ = false; has_refreshvisibility_ = false; } // <flyToView> bool get_flytoview() const { return flytoview_; } bool has_flytoview() const { return has_flytoview_; } void set_flytoview(bool value) { flytoview_ = value; has_flytoview_ = true; } void clear_flytoview() { flytoview_ = false; has_flytoview_ = false; } // <Link> // <Url> is deprecated, no API access const LinkPtr& get_link() const { return link_; } bool has_link() const { return link_ != NULL; } void set_link(const LinkPtr& link) { SetComplexChild(link, &link_); } void clear_link() { set_link(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; NetworkLink(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; bool refreshvisibility_; bool has_refreshvisibility_; bool flytoview_; bool has_flytoview_; LinkPtr link_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(NetworkLink); }; } // namespace kmldom #endif // KML_DOM_NETWORKLINK_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/networklinkcontrol.cc������������������������������������������������������0000664�0000000�0000000�00000020615�12636032571�0021406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of NetworkLinkControl and its // children. #include "kml/dom/networklinkcontrol.h" #include "kml/base/attributes.h" #include "kml/base/xml_namespaces.h" #include "kml/dom/abstractview.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { // UpdateOperation UpdateOperation::UpdateOperation() {} UpdateOperation::~UpdateOperation() {} void UpdateOperation::Accept(Visitor* visitor) { visitor->VisitUpdateOperation(UpdateOperationPtr(this)); } // <Create> Create::Create() { set_xmlns(kmlbase::XMLNS_KML22); } Create::~Create() {} void Create::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->IsA(Type_Container)) { add_container(AsContainer(element)); } else { Element::AddElement(element); } } void Create::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); serializer.SaveElementGroupArray(container_array_, Type_Container); } void Create::Accept(Visitor* visitor) { visitor->VisitCreate(CreatePtr(this)); } void Create::AcceptChildren(VisitorDriver* driver) { UpdateOperation::AcceptChildren(driver); Element::AcceptRepeated<ContainerPtr>(&container_array_, driver); } // <Delete> Delete::Delete() { set_xmlns(kmlbase::XMLNS_KML22); } Delete::~Delete() {} void Delete::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->IsA(Type_Feature)) { add_feature(AsFeature(element)); } else { Element::AddElement(element); } } void Delete::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); serializer.SaveElementGroupArray(feature_array_, Type_Feature); } void Delete::Accept(Visitor* visitor) { visitor->VisitDelete(DeletePtr(this)); } void Delete::AcceptChildren(VisitorDriver* driver) { UpdateOperation::AcceptChildren(driver); Element::AcceptRepeated<FeaturePtr>(&feature_array_, driver); } // <Change> Change::Change() { set_xmlns(kmlbase::XMLNS_KML22); } Change::~Change() {} void Change::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->IsA(Type_Object)) { add_object(AsObject(element)); } else { Element::AddElement(element); } } void Change::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); serializer.SaveElementGroupArray(object_array_, Type_Object); } void Change::Accept(Visitor* visitor) { visitor->VisitChange(ChangePtr(this)); } void Change::AcceptChildren(VisitorDriver* driver) { UpdateOperation::AcceptChildren(driver); Element::AcceptRepeated<ObjectPtr>(&object_array_, driver); } // <Update> Update::Update() : has_targethref_(false) { set_xmlns(kmlbase::XMLNS_KML22); } Update::~Update() {} void Update::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_targetHref: has_targethref_ = element->SetString(&targethref_); break; case Type_Create: add_updateoperation(AsCreate(element)); break; case Type_Delete: add_updateoperation(AsDelete(element)); break; case Type_Change: add_updateoperation(AsChange(element)); break; default: Element::AddElement(element); break; } } void Update::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); if (has_targethref()) { serializer.SaveFieldById(Type_targetHref, get_targethref()); } for (size_t i = 0; i < updateoperation_array_.size(); ++i) { serializer.SaveElement(get_updateoperation_array_at(i)); } } void Update::Accept(Visitor* visitor) { visitor->VisitUpdate(UpdatePtr(this)); } void Update::AcceptChildren(VisitorDriver* driver) { Element::AcceptChildren(driver); Element::AcceptRepeated<UpdateOperationPtr>(&updateoperation_array_, driver); } // <NetworkLinkControl> NetworkLinkControl::NetworkLinkControl() : minrefreshperiod_(0.0), has_minrefreshperiod_(false), maxsessionlength_(0.0), has_maxsessionlength_(false), has_cookie_(false), has_message_(false), has_linkname_(false), has_linkdescription_(false), linksnippet_(NULL), has_expires_(false), update_(NULL), abstractview_(NULL) { set_xmlns(kmlbase::XMLNS_KML22); } NetworkLinkControl::~NetworkLinkControl() {} void NetworkLinkControl::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->IsA(Type_AbstractView)) { set_abstractview(AsAbstractView(element)); return; } switch (element->Type()) { case Type_minRefreshPeriod: has_minrefreshperiod_ = element->SetDouble(&minrefreshperiod_); break; case Type_maxSessionLength: has_maxsessionlength_ = element->SetDouble(&maxsessionlength_); break; case Type_cookie: has_cookie_ = element->SetString(&cookie_); break; case Type_message: has_message_ = element->SetString(&message_); break; case Type_linkName: has_linkname_ = element->SetString(&linkname_); break; case Type_linkDescription: has_linkdescription_ = element->SetString(&linkdescription_); break; case Type_linkSnippet: set_linksnippet(AsLinkSnippet(element)); break; case Type_expires: has_expires_ = element->SetString(&expires_); break; case Type_Update: set_update(AsUpdate(element)); break; default: Element::AddElement(element); break; } } void NetworkLinkControl::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); if (has_minrefreshperiod_) { serializer.SaveFieldById(Type_minRefreshPeriod, minrefreshperiod_); } if (has_maxsessionlength_) { serializer.SaveFieldById(Type_maxSessionLength, maxsessionlength_); } if (has_cookie_) { serializer.SaveFieldById(Type_cookie, cookie_); } if (has_message_) { serializer.SaveFieldById(Type_message, message_); } if (has_linkname_) { serializer.SaveFieldById(Type_linkName, linkname_); } if (has_linkdescription_) { serializer.SaveFieldById(Type_linkDescription, linkdescription_); } if (linksnippet_) { serializer.SaveElement(get_linksnippet()); } if (has_expires_) { serializer.SaveFieldById(Type_expires, expires_); } if (update_) { serializer.SaveElement(get_update()); } if (abstractview_) { serializer.SaveElementGroup(get_abstractview(), Type_AbstractView); } } void NetworkLinkControl::Accept(Visitor* visitor) { visitor->VisitNetworkLinkControl(NetworkLinkControlPtr(this)); } void NetworkLinkControl::AcceptChildren(VisitorDriver* driver) { Element::AcceptChildren(driver); if (has_linksnippet()) { driver->Visit(get_linksnippet()); } if (has_update()) { driver->Visit(get_update()); } if (has_abstractview()) { driver->Visit(get_abstractview()); } } } // end namespace kmldom �������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/networklinkcontrol.h�������������������������������������������������������0000664�0000000�0000000�00000025725�12636032571�0021257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the NetworkLinkControl element. #ifndef KML_DOM_NETWORKLINKCONTROL_H__ #define KML_DOM_NETWORKLINKCONTROL_H__ #include <vector> #include "kml/dom/abstractview.h" #include "kml/dom/container.h" #include "kml/dom/element.h" #include "kml/dom/feature.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/object.h" #include "kml/base/util.h" namespace kmldom { class Visitor; class VisitorDriver; // UpdateOperation // An internal class from which <Create>, <Delete> and <Change> derive. The // KML XSD uses a choice here which is not readily modeled in C++. class UpdateOperation : public Element { public: virtual ~UpdateOperation(); // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); protected: // UpdateOperation is abstract. UpdateOperation(); private: LIBKML_DISALLOW_EVIL_CONSTRUCTORS(UpdateOperation); }; // <Create> class Create : public UpdateOperation { public: virtual ~Create(); virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType(); } static KmlDomType ElementType() { return Type_Create; } // Create targets containers. void add_container(const ContainerPtr& container) { AddComplexChild(container, &container_array_); } size_t get_container_array_size() const { return container_array_.size(); } const ContainerPtr& get_container_array_at(size_t index) const { return container_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Create(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; std::vector<ContainerPtr> container_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Create); }; // <Delete> class Delete : public UpdateOperation { public: virtual ~Delete(); virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType(); } static KmlDomType ElementType() { return Type_Delete; } // Delete targets Features. void add_feature(const FeaturePtr& feature) { AddComplexChild(feature, &feature_array_); } size_t get_feature_array_size() const { return feature_array_.size(); } const FeaturePtr& get_feature_array_at(size_t index) const { return feature_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Delete(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; std::vector<FeaturePtr> feature_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Delete); }; // <Change> class Change : public UpdateOperation { public: virtual ~Change(); virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType(); } static KmlDomType ElementType() { return Type_Change; } // Change targets Objects. void add_object(const ObjectPtr& object) { AddComplexChild(object, &object_array_); } size_t get_object_array_size() const { return object_array_.size(); } const ObjectPtr& get_object_array_at(size_t index) const { return object_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Change(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; std::vector<ObjectPtr> object_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Change); }; // <Update> class Update : public BasicElement<Type_Update> { public: virtual ~Update(); // <targetHref> const string& get_targethref() const { return targethref_; } bool has_targethref() const { return has_targethref_; } void set_targethref(const string& targethref) { targethref_ = targethref; has_targethref_ = true; } void clear_targethref() { targethref_.clear(); has_targethref_ = false; } // <Create>, <Delete> and <Change> elements. void add_updateoperation(const UpdateOperationPtr& updateoperation) { AddComplexChild(updateoperation, &updateoperation_array_); } size_t get_updateoperation_array_size() const { return updateoperation_array_.size(); } const UpdateOperationPtr& get_updateoperation_array_at( size_t index) const { return updateoperation_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Update(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; string targethref_; bool has_targethref_; std::vector<UpdateOperationPtr> updateoperation_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Update); }; // <NetworkLinkControl> class NetworkLinkControl : public BasicElement<Type_NetworkLinkControl> { public: virtual ~NetworkLinkControl(); // <minRefreshPeriod> double get_minrefreshperiod() const { return minrefreshperiod_; } bool has_minrefreshperiod() const { return has_minrefreshperiod_; } void set_minrefreshperiod(double value) { minrefreshperiod_ = value; has_minrefreshperiod_ = true; } void clear_minrefreshperiod() { minrefreshperiod_ = 0.0; has_minrefreshperiod_ = false; } // <maxSessionLength> double get_maxsessionlength() const { return maxsessionlength_; } bool has_maxsessionlength() const { return has_maxsessionlength_; } void set_maxsessionlength(double value) { maxsessionlength_ = value; has_maxsessionlength_ = true; } void clear_maxsessionlength() { maxsessionlength_ = 0.0; has_maxsessionlength_ = false; } // <cookie> const string& get_cookie() const { return cookie_; } bool has_cookie() const { return has_cookie_; } void set_cookie(const string& cookie) { cookie_ = cookie; has_cookie_ = true; } void clear_cookie() { cookie_.clear(); has_cookie_ = false; } // <message> const string& get_message() const { return message_; } bool has_message() const { return has_message_; } void set_message(const string& message) { message_ = message; has_message_ = true; } void clear_message() { message_.clear(); has_message_ = false; } // <linkName> const string& get_linkname() const { return linkname_; } bool has_linkname() const { return has_linkname_; } void set_linkname(const string& linkname) { linkname_ = linkname; has_linkname_ = true; } void clear_linkname() { linkname_.clear(); has_linkname_ = false; } // <linkDescription> const string& get_linkdescription() const { return linkdescription_; } bool has_linkdescription() const { return has_linkdescription_; } void set_linkdescription(const string& linkdescription) { linkdescription_ = linkdescription; has_linkdescription_ = true; } void clear_linkdescription() { linkdescription_.clear(); has_linkdescription_ = false; } // <linkSnippet> const LinkSnippetPtr& get_linksnippet() const { return linksnippet_; } bool has_linksnippet() const { return linksnippet_ != NULL; } void set_linksnippet(LinkSnippetPtr linksnippet) { SetComplexChild(linksnippet, &linksnippet_); } void clear_linksnippet() { set_linksnippet(NULL); } // <expires> const string& get_expires() const { return expires_; } bool has_expires() const { return has_expires_; } void set_expires(const string& expires) { expires_ = expires; has_expires_ = true; } void clear_expires() { expires_.clear(); has_expires_ = false; } // <Update> const UpdatePtr& get_update() const { return update_; } bool has_update() const { return update_ != NULL; } void set_update(const UpdatePtr& update) { SetComplexChild(update, &update_); } void clear_update() { set_update(NULL); } // AbstractView const AbstractViewPtr& get_abstractview() const { return abstractview_; } bool has_abstractview() const { return abstractview_ != NULL; } void set_abstractview(const AbstractViewPtr& abstractview) { SetComplexChild(abstractview, &abstractview_); } void clear_abstractview() { set_abstractview(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; NetworkLinkControl(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; double minrefreshperiod_; bool has_minrefreshperiod_; double maxsessionlength_; bool has_maxsessionlength_; string cookie_; bool has_cookie_; string message_; bool has_message_; string linkname_; bool has_linkname_; string linkdescription_; bool has_linkdescription_; LinkSnippetPtr linksnippet_; string expires_; bool has_expires_; UpdatePtr update_; AbstractViewPtr abstractview_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(NetworkLinkControl); }; } // namespace kmldom #endif // KML_DOM_NETWORKLINKCONTROL_H__ �������������������������������������������libkml-1.3.0/src/kml/dom/object.cc������������������������������������������������������������������0000664�0000000�0000000�00000005401�12636032571�0016700�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/object.h" #include "kml/base/attributes.h" #include "kml/base/xml_namespaces.h" using kmlbase::Attributes; namespace kmldom { Object::Object() : has_id_(false), has_targetid_(false) { set_xmlns(kmlbase::XMLNS_KML22); } Object::~Object() {} static const char kId[] = "id"; static const char kTargetId[] = "targetId"; void Object::AddElement(const ElementPtr& element) { // Any element passed in here is by definition unknown. Specificially, // it will handle a "known" element appearing in the wrong place, e.g. // <Placemark><Document>. We pass everything straight to Element for // storage. Element::AddElement(element); } void Object::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_id_ = attributes->CutValue(kId, &id_); has_targetid_ = attributes->CutValue(kTargetId, &targetid_); AddUnknownAttributes(attributes); } void Object::SerializeAttributes(Attributes* attributes) const { Element::SerializeAttributes(attributes); // If the id or targetId have been explictly set via API calls, we overwrite // the values stored in the attributes object. if (has_id_) { attributes->SetValue(kId, id_); } if (has_targetid_) { attributes->SetValue(kTargetId, targetid_); } } } // namespace kmldom ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/object.h�������������������������������������������������������������������0000664�0000000�0000000�00000005747�12636032571�0016557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This is the declaration of the abstract element Object. #ifndef KML_DOM_OBJECT_H__ #define KML_DOM_OBJECT_H__ #include "kml/dom/element.h" #include "kml/dom/kml22.h" #include "kml/base/util.h" namespace kmlbase { class Attributes; } namespace kmldom { // OGC KML 2.2 Standard: 8.1 kml:AbstractObjectGroup // OGC KML 2.2 XSD: <element name="AbstractObjectGroup"... class Object : public Element { public: virtual ~Object(); KmlDomType Type() const { return Type_Object; } bool IsA(KmlDomType type) const { return type == Type_Object; } const string& get_id() const { return id_; } bool has_id() const { return has_id_; } void set_id(const string& value) { id_ = value; has_id_ = true; } void clear_id() { id_.clear(); has_id_ = false; } const string& get_targetid() const { return targetid_; } bool has_targetid() const { return has_targetid_; } void set_targetid(const string& targetid) { targetid_ = targetid; has_targetid_ = true; } void clear_targetid() { targetid_.clear(); has_targetid_ = false; } protected: // Object is abstract, derived class access only. Object(); virtual void AddElement(const ElementPtr& element); virtual void ParseAttributes(kmlbase::Attributes* attributes); virtual void SerializeAttributes(kmlbase::Attributes* attributes) const; private: string id_; bool has_id_; string targetid_; bool has_targetid_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Object); }; } // namespace kmldom #endif // KML_DOM_OBJECT_H__ �������������������������libkml-1.3.0/src/kml/dom/overlay.cc�����������������������������������������������������������������0000664�0000000�0000000�00000032206�12636032571�0017116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the abstract Overlay and concrete // LatLonBox, GroundOverlay, ViewVolume, ImagePyramid, PhotoOverlay, OverlayXY, // ScreenXY, RotationXY, Size, and ScreenOverlay elements. #include "kml/dom/overlay.h" #include "kml/base/attributes.h" #include "kml/dom/geometry.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; using kmlbase::Color32; namespace kmldom { Overlay::Overlay() : color_(Color32(0xffffffff)), has_color_(false), draworder_(0), has_draworder_(false) { } Overlay::~Overlay() {} void Overlay::AddElement(const ElementPtr& element) { switch (element->Type()) { case Type_color: set_color(Color32(element->get_char_data())); break; case Type_drawOrder: has_draworder_ = element->SetInt(&draworder_); break; case Type_Icon: set_icon(AsIcon(element)); break; default: Feature::AddElement(element); break; } } void Overlay::Serialize(Serializer& serializer) const { Feature::Serialize(serializer); if (has_color()) { serializer.SaveColor(Type_color, get_color()); } if (has_draworder()) { serializer.SaveFieldById(Type_drawOrder, get_draworder()); } if (has_icon()) { serializer.SaveElement(get_icon()); } } void Overlay::AcceptChildren(VisitorDriver* driver) { Feature::AcceptChildren(driver); if (has_icon()) { driver->Visit(get_icon()); } } LatLonBox::LatLonBox() : rotation_(0.0), has_rotation_(false) { } LatLonBox::~LatLonBox() { } void LatLonBox::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_rotation: has_rotation_ = element->SetDouble(&rotation_); break; default: AbstractLatLonBox::AddElement(element); break; } } void LatLonBox::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); AbstractLatLonBox::Serialize(serializer); if (has_rotation()) { serializer.SaveFieldById(Type_rotation, get_rotation()); } } void LatLonBox::Accept(Visitor* visitor) { visitor->VisitLatLonBox(LatLonBoxPtr(this)); } GxLatLonQuad::GxLatLonQuad() { set_xmlns(kmlbase::XMLNS_GX22); } GxLatLonQuad::~GxLatLonQuad() {} void GxLatLonQuad::AddElement(const ElementPtr& element) { if (CoordinatesPtr coordinates = AsCoordinates(element)) { set_coordinates(coordinates); } else { Object::AddElement(element); } } void GxLatLonQuad::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); if (has_coordinates()) { serializer.SaveElement(get_coordinates()); } } void GxLatLonQuad::Accept(Visitor* visitor) { visitor->VisitGxLatLonQuad(GxLatLonQuadPtr(this)); } void GxLatLonQuad::AcceptChildren(VisitorDriver* driver) { Object::AcceptChildren(driver); if (has_coordinates()) { driver->Visit(get_coordinates()); } } GroundOverlay::GroundOverlay() : altitude_(0.0), has_altitude_(false), altitudemode_(ALTITUDEMODE_CLAMPTOGROUND), has_altitudemode_(false), gx_altitudemode_(GX_ALTITUDEMODE_CLAMPTOSEAFLOOR), has_gx_altitudemode_(false) { } GroundOverlay::~GroundOverlay() { } void GroundOverlay::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_altitude: has_altitude_ = element->SetDouble(&altitude_); break; case Type_altitudeMode: has_altitudemode_ = element->SetEnum(&altitudemode_); break; case Type_GxAltitudeMode: has_gx_altitudemode_ = element->SetEnum(&gx_altitudemode_); break; case Type_LatLonBox: set_latlonbox(AsLatLonBox(element)); break; case Type_GxLatLonQuad: set_gx_latlonquad(AsGxLatLonQuad(element)); break; default: Overlay::AddElement(element); break; } } void GroundOverlay::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Overlay::Serialize(serializer); if (has_altitude()) { serializer.SaveFieldById(Type_altitude, get_altitude()); } if (has_altitudemode()) { serializer.SaveEnum(Type_altitudeMode, get_altitudemode()); } if (has_gx_altitudemode()) { serializer.SaveEnum(Type_GxAltitudeMode, get_gx_altitudemode()); } if (has_latlonbox()) { serializer.SaveElement(get_latlonbox()); } if (has_gx_latlonquad()) { serializer.SaveElement(get_gx_latlonquad()); } } void GroundOverlay::Accept(Visitor* visitor) { visitor->VisitGroundOverlay(GroundOverlayPtr(this)); } void GroundOverlay::AcceptChildren(VisitorDriver* driver) { Overlay::AcceptChildren(driver); if (has_latlonbox()) { driver->Visit(get_latlonbox()); } if (has_gx_latlonquad()) { driver->Visit(get_gx_latlonquad()); } } ViewVolume::ViewVolume() : leftfov_(0.0), has_leftfov_(false), rightfov_(0.0), has_rightfov_(false), bottomfov_(0.0), has_bottomfov_(false), topfov_(0.0), has_topfov_(false), near_(0.0), has_near_(false) { } ViewVolume::~ViewVolume() {} void ViewVolume::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_leftFov: has_leftfov_ = element->SetDouble(&leftfov_); break; case Type_rightFov: has_rightfov_ = element->SetDouble(&rightfov_); break; case Type_bottomFov: has_bottomfov_ = element->SetDouble(&bottomfov_); break; case Type_topFov: has_topfov_ = element->SetDouble(&topfov_); break; case Type_near: has_near_ = element->SetDouble(&near_); break; default: Object::AddElement(element); break; } } void ViewVolume::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); if (has_leftfov()) { serializer.SaveFieldById(Type_leftFov, get_leftfov()); } if (has_rightfov()) { serializer.SaveFieldById(Type_rightFov, get_rightfov()); } if (has_bottomfov()) { serializer.SaveFieldById(Type_bottomFov, get_bottomfov()); } if (has_topfov()) { serializer.SaveFieldById(Type_topFov, get_topfov()); } if (has_near()) { serializer.SaveFieldById(Type_near, get_near()); } } void ViewVolume::Accept(Visitor* visitor) { visitor->VisitViewVolume(ViewVolumePtr(this)); } ImagePyramid::ImagePyramid() : tilesize_(256), has_tilesize_(false), maxwidth_(0), has_maxwidth_(false), maxheight_(0), has_maxheight_(false), gridorigin_(GRIDORIGIN_LOWERLEFT), has_gridorigin_(false) { } ImagePyramid::~ImagePyramid() {} void ImagePyramid::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_tileSize: has_tilesize_ = element->SetInt(&tilesize_); break; case Type_maxWidth: has_maxwidth_ = element->SetInt(&maxwidth_); break; case Type_maxHeight: has_maxheight_ = element->SetInt(&maxheight_); break; case Type_gridOrigin: has_gridorigin_ = element->SetEnum(&gridorigin_); break; default: Object::AddElement(element); break; } } void ImagePyramid::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); if (has_tilesize()) { serializer.SaveFieldById(Type_tileSize, get_tilesize()); } if (has_maxwidth()) { serializer.SaveFieldById(Type_maxWidth, get_maxwidth()); } if (has_maxheight()) { serializer.SaveFieldById(Type_maxHeight, get_maxheight()); } if (has_gridorigin()) { serializer.SaveEnum(Type_gridOrigin, get_gridorigin()); } } void ImagePyramid::Accept(Visitor* visitor) { visitor->VisitImagePyramid(ImagePyramidPtr(this)); } PhotoOverlay::PhotoOverlay() : rotation_(0.0), has_rotation_(false), shape_(SHAPE_RECTANGLE), has_shape_(false) { } PhotoOverlay::~PhotoOverlay() { } void PhotoOverlay::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_rotation: has_rotation_ = element->SetDouble(&rotation_); break; case Type_ViewVolume: set_viewvolume(AsViewVolume(element)); break; case Type_ImagePyramid: set_imagepyramid(AsImagePyramid(element)); break; case Type_Point: set_point(AsPoint(element)); break; case Type_shape: has_shape_ = element->SetEnum(&shape_); break; default: Overlay::AddElement(element); break; } } void PhotoOverlay::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Overlay::Serialize(serializer); if (has_rotation()) { serializer.SaveFieldById(Type_rotation, get_rotation()); } if (has_viewvolume()) { serializer.SaveElement(get_viewvolume()); } if (has_imagepyramid()) { serializer.SaveElement(get_imagepyramid()); } if (has_point()) { serializer.SaveElement(get_point()); } if (has_shape()) { serializer.SaveEnum(Type_shape, get_shape()); } } void PhotoOverlay::Accept(Visitor* visitor) { visitor->VisitPhotoOverlay(PhotoOverlayPtr(this)); } void PhotoOverlay::AcceptChildren(VisitorDriver* driver) { Overlay::AcceptChildren(driver); if (has_viewvolume()) { driver->Visit(get_viewvolume()); } if (has_imagepyramid()) { driver->Visit(get_imagepyramid()); } if (has_point()) { driver->Visit(get_point()); } } OverlayXY::OverlayXY() {} OverlayXY::~OverlayXY() {} void OverlayXY::Accept(Visitor* visitor) { visitor->VisitOverlayXY(OverlayXYPtr(this)); } ScreenXY::ScreenXY() {} ScreenXY::~ScreenXY() {} void ScreenXY::Accept(Visitor* visitor) { visitor->VisitScreenXY(ScreenXYPtr(this)); } RotationXY::RotationXY() {} RotationXY::~RotationXY() {} void RotationXY::Accept(Visitor* visitor) { visitor->VisitRotationXY(RotationXYPtr(this)); } Size::Size() {} Size::~Size() {} void Size::Accept(Visitor* visitor) { visitor->VisitSize(SizePtr(this)); } ScreenOverlay::ScreenOverlay() : rotation_(0.0), has_rotation_(false) { } ScreenOverlay::~ScreenOverlay() { } void ScreenOverlay::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_overlayXY: set_overlayxy(AsOverlayXY(element)); break; case Type_screenXY: set_screenxy(AsScreenXY(element)); break; case Type_rotationXY: set_rotationxy(AsRotationXY(element)); break; case Type_size: set_size(AsSize(element)); break; case Type_rotation: has_rotation_ = element->SetDouble(&rotation_); break; default: Overlay::AddElement(element); break; } } void ScreenOverlay::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Overlay::Serialize(serializer); if (has_overlayxy()) { serializer.SaveElement(get_overlayxy()); } if (has_screenxy()) { serializer.SaveElement(get_screenxy()); } if (has_rotationxy()) { serializer.SaveElement(get_rotationxy()); } if (has_size()) { serializer.SaveElement(get_size()); } if (has_rotation()) { serializer.SaveFieldById(Type_rotation, get_rotation()); } } void ScreenOverlay::Accept(Visitor* visitor) { visitor->VisitScreenOverlay(ScreenOverlayPtr(this)); } void ScreenOverlay::AcceptChildren(VisitorDriver* driver) { Overlay::AcceptChildren(driver); if (has_overlayxy()) { driver->Visit(get_overlayxy()); } if (has_screenxy()) { driver->Visit(get_screenxy()); } if (has_rotationxy()) { driver->Visit(get_rotationxy()); } if (has_size()) { driver->Visit(get_size()); } } } // end namespace kmldom ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/overlay.h������������������������������������������������������������������0000664�0000000�0000000�00000045404�12636032571�0016764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations for the abstract Overlay element // and the concrete GroundOverlay, ScreenOverlay, and PhotoOverlay elements // and their child elements LatLonBox, OverlayXY, ScreenXY, RotationXY, // Size, ViewVolume, and ImagePyramid. #ifndef KML_DOM_OVERLAY_H__ #define KML_DOM_OVERLAY_H__ #include "kml/base/color32.h" #include "kml/dom/abstractlatlonbox.h" #include "kml/dom/feature.h" #include "kml/dom/geometry.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/link.h" #include "kml/dom/object.h" #include "kml/dom/vec2.h" namespace kmldom { class Serializer; class Visitor; class VisitorDriver; // OGC KML 2.2 Standard: 11.1 kml:AbstractOverlayGroup // OGC KML 2.2 XSD: <element name="AbstractOverlayGroup"... class Overlay : public Feature { public: virtual ~Overlay(); virtual KmlDomType Type() const { return Type_Overlay; } virtual bool IsA(KmlDomType type) const { return type == Type_Overlay || Feature::IsA(type); } // <color> const kmlbase::Color32& get_color() const { return color_; } bool has_color() const { return has_color_; } void set_color(const kmlbase::Color32& color) { color_ = color; has_color_ = true; } void clear_color() { color_ = kmlbase::Color32(0xffffffff); has_color_ = false; } // <drawOrder> int get_draworder() const { return draworder_; } bool has_draworder() const { return has_draworder_; } void set_draworder(int draworder) { draworder_ = draworder; has_draworder_ = true; } void clear_draworder() { draworder_ = 0; has_draworder_ = false; } // <Icon> const IconPtr& get_icon() const { return icon_; } bool has_icon() const { return icon_ != NULL; } void set_icon(const IconPtr& icon) { SetComplexChild(icon, &icon_); } void clear_icon() { set_icon(NULL); } // Visitor API methods, see visitor.h. virtual void AcceptChildren(VisitorDriver* driver); protected: // Overlay is abstract. Overlay(); virtual void AddElement(const ElementPtr& element); virtual void Serialize(Serializer& serializer) const; private: kmlbase::Color32 color_; bool has_color_; int draworder_; bool has_draworder_; IconPtr icon_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Overlay); }; // <LatLonBox> class LatLonBox : public AbstractLatLonBox { public: virtual ~LatLonBox(); virtual KmlDomType Type() const { return Type_LatLonBox; } virtual bool IsA(KmlDomType type) const { return type == Type_LatLonBox || AbstractLatLonBox::IsA(type); } // <rotation> double get_rotation() const { return rotation_; } bool has_rotation() const { return has_rotation_; } void set_rotation(double rotation) { rotation_ = rotation; has_rotation_ = true; } void clear_rotation() { rotation_ = 0.0; has_rotation_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; LatLonBox(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; private: double rotation_; bool has_rotation_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(LatLonBox); }; // <gx:LatLonQuad> class GxLatLonQuad : public Object { public: virtual ~GxLatLonQuad(); static KmlDomType ElementType() { return Type_GxLatLonQuad; } virtual KmlDomType Type() const { return ElementType(); } virtual bool IsA(KmlDomType type) const { return type == ElementType() || Object::IsA(type); } // <coordinates> const CoordinatesPtr& get_coordinates() const { return coordinates_; } bool has_coordinates() const { return coordinates_ != NULL; } void set_coordinates(const CoordinatesPtr& coordinates) { SetComplexChild(coordinates, &coordinates_); } void clear_coordinates() { set_coordinates(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; GxLatLonQuad(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; CoordinatesPtr coordinates_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxLatLonQuad); }; // <GroundOverlay> class GroundOverlay : public Overlay { public: virtual ~GroundOverlay(); virtual KmlDomType Type() const { return Type_GroundOverlay; } virtual bool IsA(KmlDomType type) const { return type == Type_GroundOverlay || Overlay::IsA(type); } // <altitude> double get_altitude() const { return altitude_; } bool has_altitude() const { return has_altitude_; } void set_altitude(double altitude) { altitude_ = altitude; has_altitude_ = true; } void clear_altitude() { altitude_ = 0.0; has_altitude_ = false; } // <altitudeMode> int get_altitudemode() const { return altitudemode_; } bool has_altitudemode() const { return has_altitudemode_; } void set_altitudemode(int altitudemode) { altitudemode_ = altitudemode; has_altitudemode_ = true; } void clear_altitudemode() { altitudemode_ = ALTITUDEMODE_CLAMPTOGROUND; has_altitudemode_ = false; } // <gx:altitudeMode> int get_gx_altitudemode() const { return gx_altitudemode_; } bool has_gx_altitudemode() const { return has_gx_altitudemode_; } void set_gx_altitudemode(int gx_altitudemode) { gx_altitudemode_ = gx_altitudemode; has_gx_altitudemode_ = true; } void clear_gx_altitudemode() { gx_altitudemode_ = GX_ALTITUDEMODE_CLAMPTOSEAFLOOR; has_gx_altitudemode_ = false; } // <LatLonBox> const LatLonBoxPtr& get_latlonbox() const { return latlonbox_; } bool has_latlonbox() const { return latlonbox_ != NULL; } void set_latlonbox(const LatLonBoxPtr& latlonbox) { SetComplexChild(latlonbox, &latlonbox_); } void clear_latlonbox() { set_latlonbox(NULL); } // <gx:LatLonQuad> const GxLatLonQuadPtr& get_gx_latlonquad() const { return gx_latlonquad_; } bool has_gx_latlonquad() const { return gx_latlonquad_ != NULL; } void set_gx_latlonquad(const GxLatLonQuadPtr& gx_latlonquad) { SetComplexChild(gx_latlonquad, &gx_latlonquad_); } void clear_gx_latlonquad() { set_gx_latlonquad(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; GroundOverlay(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; private: double altitude_; bool has_altitude_; int altitudemode_; bool has_altitudemode_; int gx_altitudemode_; bool has_gx_altitudemode_; LatLonBoxPtr latlonbox_; GxLatLonQuadPtr gx_latlonquad_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GroundOverlay); }; // <overlayXY> class OverlayXY : public Vec2 { public: virtual ~OverlayXY(); virtual KmlDomType Type() const { return Type_overlayXY; } virtual bool IsA(KmlDomType type) const { return type == Type_overlayXY || Vec2::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; OverlayXY(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(OverlayXY); }; // <screenXY> class ScreenXY : public Vec2 { public: virtual ~ScreenXY(); virtual KmlDomType Type() const { return Type_screenXY; } virtual bool IsA(KmlDomType type) const { return type == Type_screenXY || Vec2::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; ScreenXY(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(ScreenXY); }; // <rotationXY> class RotationXY : public Vec2 { public: virtual ~RotationXY(); virtual KmlDomType Type() const { return Type_rotationXY; } virtual bool IsA(KmlDomType type) const { return type == Type_rotationXY || Vec2::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; RotationXY(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(RotationXY); }; // <size> class Size : public Vec2 { public: virtual ~Size(); virtual KmlDomType Type() const { return Type_size; } virtual bool IsA(KmlDomType type) const { return type == Type_size || Vec2::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Size(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Size); }; // <ScreenOverlay> class ScreenOverlay : public Overlay { public: virtual ~ScreenOverlay(); virtual KmlDomType Type() const { return Type_ScreenOverlay; } virtual bool IsA(KmlDomType type) const { return type == Type_ScreenOverlay || Overlay::IsA(type); } // <overlayXY> const OverlayXYPtr& get_overlayxy() const { return overlayxy_; } bool has_overlayxy() const { return overlayxy_ != NULL; } void set_overlayxy(const OverlayXYPtr& overlayxy) { SetComplexChild(overlayxy, &overlayxy_); } void clear_overlayxy() { set_overlayxy(NULL); } // <screenXY> const ScreenXYPtr& get_screenxy() const { return screenxy_; } bool has_screenxy() const { return screenxy_ != NULL; } void set_screenxy(const ScreenXYPtr& screenxy) { SetComplexChild(screenxy, &screenxy_); } void clear_screenxy() { set_screenxy(NULL); } // <rotationXY> const RotationXYPtr& get_rotationxy() const { return rotationxy_; } bool has_rotationxy() const { return rotationxy_ != NULL; } void set_rotationxy(const RotationXYPtr& rotationxy) { SetComplexChild(rotationxy, &rotationxy_); } void clear_rotationxy() { set_rotationxy(NULL); } // <size> const SizePtr& get_size() const { return size_; } bool has_size() const { return size_ != NULL; } void set_size(const SizePtr& size) { SetComplexChild(size, &size_); } void clear_size() { set_size(NULL); } // <rotation> double get_rotation() const { return rotation_; } bool has_rotation() const { return has_rotation_; } void set_rotation(double rotation) { rotation_ = rotation; has_rotation_ = true; } void clear_rotation() { rotation_ = 0.0; has_rotation_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; ScreenOverlay(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; OverlayXYPtr overlayxy_; ScreenXYPtr screenxy_; RotationXYPtr rotationxy_; SizePtr size_; double rotation_; bool has_rotation_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(ScreenOverlay); }; // <ViewVolume> class ViewVolume : public Object { public: virtual ~ViewVolume(); virtual KmlDomType Type() const { return Type_ViewVolume; } virtual bool IsA(KmlDomType type) const { return type == Type_ViewVolume || Object::IsA(type); } // <leftFov> double get_leftfov() const { return leftfov_; } bool has_leftfov() const { return has_leftfov_; } void set_leftfov(double leftfov) { leftfov_ = leftfov; has_leftfov_ = true; } void clear_leftfov() { leftfov_ = 0.0; has_leftfov_ = false; } // <rightFov> double get_rightfov() const { return rightfov_; } bool has_rightfov() const { return has_rightfov_; } void set_rightfov(double rightfov) { rightfov_ = rightfov; has_rightfov_ = true; } void clear_rightfov() { rightfov_ = 0.0; has_rightfov_ = false; } // <bottomFov> double get_bottomfov() const { return bottomfov_; } bool has_bottomfov() const { return has_bottomfov_; } void set_bottomfov(double altitude) { bottomfov_ = altitude; has_bottomfov_ = true; } void clear_bottomfov() { bottomfov_ = 0.0; has_bottomfov_ = false; } // <topFov> double get_topfov() const { return topfov_; } bool has_topfov() const { return has_topfov_; } void set_topfov(double topfov) { topfov_ = topfov; has_topfov_ = true; } void clear_topfov() { topfov_ = 0.0; has_topfov_ = false; } // <near> double get_near() const { return near_; } bool has_near() const { return has_near_; } void set_near(double val) { near_ = val; has_near_ = true; } void clear_near() { near_ = 0.0; has_near_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; ViewVolume(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; double leftfov_; bool has_leftfov_; double rightfov_; bool has_rightfov_; double bottomfov_; bool has_bottomfov_; double topfov_; bool has_topfov_; double near_; bool has_near_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(ViewVolume); }; // <ImagePyramid> class ImagePyramid : public Object { public: virtual ~ImagePyramid(); virtual KmlDomType Type() const { return Type_ImagePyramid; } virtual bool IsA(KmlDomType type) const { return type == Type_ImagePyramid || Object::IsA(type); } // <tileSize> int get_tilesize() const { return tilesize_; } bool has_tilesize() const { return has_tilesize_; } void set_tilesize(int tilesize) { tilesize_ = tilesize; has_tilesize_ = true; } void clear_tilesize() { tilesize_ = 256; has_tilesize_ = false; } // <maxWidth> int get_maxwidth() const { return maxwidth_; } bool has_maxwidth() const { return has_maxwidth_; } void set_maxwidth(int maxwidth) { maxwidth_ = maxwidth; has_maxwidth_ = true; } void clear_maxwidth() { maxwidth_ = 0; has_maxwidth_ = false; } // <maxHeight> int get_maxheight() const { return maxheight_; } bool has_maxheight() const { return has_maxheight_; } void set_maxheight(int altitude) { maxheight_ = altitude; has_maxheight_ = true; } void clear_maxheight() { maxheight_ = 0; has_maxheight_ = false; } // <gridOrigin> int get_gridorigin() const { return gridorigin_; } bool has_gridorigin() const { return has_gridorigin_; } void set_gridorigin(int gridorigin) { gridorigin_ = gridorigin; has_gridorigin_ = true; } void clear_gridorigin() { gridorigin_ = GRIDORIGIN_LOWERLEFT; has_gridorigin_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; ImagePyramid(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; int tilesize_; bool has_tilesize_; int maxwidth_; bool has_maxwidth_; int maxheight_; bool has_maxheight_; int gridorigin_; bool has_gridorigin_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(ImagePyramid); }; // <PhotoOverlay> class PhotoOverlay : public Overlay { public: virtual ~PhotoOverlay(); virtual KmlDomType Type() const { return Type_PhotoOverlay; } virtual bool IsA(KmlDomType type) const { return type == Type_PhotoOverlay || Overlay::IsA(type); } // <rotation> double get_rotation() const { return rotation_; } bool has_rotation() const { return has_rotation_; } void set_rotation(double rotation) { rotation_ = rotation; has_rotation_ = true; } void clear_rotation() { rotation_ = 0.0; has_rotation_ = false; } // <ViewVolume> const ViewVolumePtr& get_viewvolume() const { return viewvolume_; } bool has_viewvolume() const { return viewvolume_ != NULL; } void set_viewvolume(const ViewVolumePtr& viewvolume) { SetComplexChild(viewvolume, &viewvolume_); } void clear_viewvolume() { set_viewvolume(NULL); } // <ImagePyramid> const ImagePyramidPtr& get_imagepyramid() const { return imagepyramid_; } bool has_imagepyramid() const { return imagepyramid_ != NULL; } void set_imagepyramid(const ImagePyramidPtr& imagepyramid) { SetComplexChild(imagepyramid, &imagepyramid_); } void clear_imagepyramid() { set_imagepyramid(NULL); } // <Point> const PointPtr& get_point() const { return point_; } bool has_point() const { return point_ != NULL; } void set_point(const PointPtr& point) { SetComplexChild(point, &point_); } void clear_point() { set_point(NULL); } // <shape> int get_shape() const { return shape_; } bool has_shape() const { return has_shape_; } void set_shape(int shape) { shape_ = shape; has_shape_ = true; } void clear_shape() { shape_ = SHAPE_RECTANGLE; has_shape_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; PhotoOverlay(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; double rotation_; bool has_rotation_; ViewVolumePtr viewvolume_; ImagePyramidPtr imagepyramid_; PointPtr point_; int shape_; bool has_shape_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(PhotoOverlay); }; } // end namespace kmldom #endif // KML_DOM_OVERLAY_H__ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/parser.cc������������������������������������������������������������������0000664�0000000�0000000�00000011705�12636032571�0016732�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file maps the C-based expat to a general purpose C++ ExpatHandler class. // KmlHandler is the only such handler at present, hence the static nature // of the ExpatParser() function. #include "kml/dom/kml_funcs.h" #include <cstring> #include <sstream> #include "kml/base/attributes.h" #include "kml/base/expat_parser.h" #include "kml/base/expat_handler_ns.h" #include "kml/base/xmlns.h" #include "kml/dom/element.h" #include "kml/dom/kml_handler.h" #include "kml/dom/kml_handler_ns.h" #include "kml/dom/parser.h" #include "kml/dom/parser_observer.h" namespace kmldom { // This is an internal API to add Element-level SAX-style handlers to // a given parser instance. TODO: determine how/if to make public and SWIG. void Parser::AddObserver(ParserObserver* parser_observer) { observers_.push_back(parser_observer); } // This is the internal API to the parser. TODO: determine how/if to make // public and SWIG. ElementPtr Parser::Parse(const string& kml, string* errors) { KmlHandler kml_handler(observers_); kmlbase::ExpatParser parser(&kml_handler, false); if (kmlbase::ExpatParser::ParseString(kml, &kml_handler, errors, false)) { return kml_handler.PopRoot(); } return NULL; } // As Parser::Parse(), but invokes the underlying XML parser's namespace-aware // mode. ElementPtr Parser::ParseNS(const string& kml, string* errors) { KmlHandlerNS kml_handler(observers_); if (kmlbase::ExpatParser::ParseString(kml, &kml_handler, errors, true)) { return kml_handler.PopRoot(); } return NULL; } // This is obviously a bit of a special case. If libkml always used full // namespace-aware parsing we'd not need this. ElementPtr Parser::ParseAtom(const string& atom, string* errors) { // Create a garden variety KML parser with "short-hand" namespace prefixes // for Atom. KmlHandler kml_handler(observers_); kmlbase::Attributes attributes; // Create a namespace aware expat handler which converts the Atom namespace // elements to the "short-hand" namespace prefixing used in KmlHandler. // Here's the overall flow: // 1) instance file has <feed xmlns="http://www.w3.org/2005/Atom">... // 2) namespace-enabled expat turns this into: // <http://www.w3.org/2005/Atom|feed> // 3) ExpatHandlerNns turns this to <atom:feed> // 4) KmlHandler knows that <atom:feed> is kmldom::AtomFeed attributes.SetValue("xmlns", "http://www.opengis.net/kml/2.2"); attributes.SetValue("xmlns:atom", "http://www.w3.org/2005/Atom"); boost::scoped_ptr<kmlbase::Xmlns> xmlns(kmlbase::Xmlns::Create(attributes)); kmlbase::ExpatHandlerNs expat_handler_ns(&kml_handler, xmlns.get()); if (kmlbase::ExpatParser::ParseString(atom, &expat_handler_ns, errors, true)) { return kml_handler.PopRoot(); } return NULL; } // This is the implementation of the public API to parse KML from a memory // buffer. ElementPtr Parse(const string& kml, string* errors) { Parser parser; return parser.Parse(kml, errors); } // As Parse(), but invokes the underlying XML parser's namespace-aware mode. ElementPtr ParseNS(const string& kml, string* errors) { Parser parser; return parser.ParseNS(kml, errors); } // Parse the KML in the given string. NULL is returned on any parse errors, // but the error string is unavailable with this function. ElementPtr ParseKml(const string& kml) { return Parse(kml, NULL); } ElementPtr ParseAtom(const string& atom, string* errors) { Parser parser; return parser.ParseAtom(atom, errors); } } // end namespace kmldom �����������������������������������������������������������libkml-1.3.0/src/kml/dom/parser.h�������������������������������������������������������������������0000664�0000000�0000000�00000006647�12636032571�0016605�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the internal Parser class. #ifndef KML_DOM_PARSER_H__ #define KML_DOM_PARSER_H__ #include <vector> #include "kml/dom/kml_ptr.h" #include "kml/dom/parser_observer.h" #include "kml/base/util.h" namespace kmldom { // The internal Parser class implements the public Parse API. // CDATA tags are dropped (by expat) upon parse and internally we carry // around the resultant representation. There are thus no methods within // the KML DOM to set/get/query for the presence of CDATA. The serializer // scans the markup and conditionally wraps entities with CDATA. For files // with multiple CDATA wrappers in a single element's character data, this // will result in a single CDATA wrapper. // // Intended usage: // Parser parser; // parser.AddObserver(...); // parser.AddObserver(...); // ... // string errors; // ElementPtr root = parser.Parse(kml, &errors); class Parser { public: Parser() {} // This method calls the parser with the given KML string. If there are // any errors NULL is returned and if error's is non-NULL a human readable // diagnostic is stored there. If there are no parse errors the root // element is returned. Note that any ParseObserver can terminate the parse. ElementPtr Parse(const string& kml, string *errors); // As Parse(), but invokes the underlying XML parser's namespace-aware mode. ElementPtr ParseNS(const string& kml, string *errors); // As Parse(), but invokes the underlying XML parser's namespace-aware mode // with special recognition of the Atom namespace. See kml_funcs.h. ElementPtr ParseAtom(const string& atom, string *errors); // This method registers the given ParserObserver-based class. Each // NewElement() and AddChild() method is called in the order added. void AddObserver(ParserObserver* parser_observer); private: parser_observer_vector_t observers_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Parser); }; } // end namespace kmldom #endif // KML_DOM_PARSER_H__ �����������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/parser_observer.h����������������������������������������������������������0000664�0000000�0000000�00000006055�12636032571�0020505�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file defines the ParserObserver base class. #ifndef KML_DOM_PARSER_OBSERVER_H__ #define KML_DOM_PARSER_OBSERVER_H__ #include "kml/dom/kml_ptr.h" namespace kmldom { // This class should be derived from to provide SAX-style callbacks during // the DOM parse. The derived class can implement one or both of // EndElement() and AddChild(). EndElement() is called after the Element // has been constructed. AddChild() is called after the given child has // been added to the given parent. If the derived class returns false // from either EndElement() or AddChild() the parse is immediately terminated. class ParserObserver { public: virtual ~ParserObserver() { // Silence compiler warnings. } // Called after this element is created by the parser. virtual bool NewElement(const ElementPtr& /*element*/ ) { return true; // Default implementation is a NOP: parse continues. } // Called after child is fully constructed before it is added to the parent. // A derived class can return false to inhibit adding the child to the parent. // Returning true permits the parser to add this child to the parent. virtual bool EndElement(const ElementPtr& /*parent*/, const ElementPtr& /*child*/) { return true; } // Called after the given child has been set to the given parent. virtual bool AddChild(const ElementPtr& /*parent*/, const ElementPtr& /*child*/) { return true; // Default implementation is a NOP: parse continues. } }; typedef std::vector<ParserObserver*> parser_observer_vector_t; } // end namespace kmldom #endif // KML_DOM_PARSER_OBSERVER_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/placemark.cc���������������������������������������������������������������0000664�0000000�0000000�00000004715�12636032571�0017400�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/placemark.h" #include "kml/base/attributes.h" #include "kml/dom/kml_cast.h" #include "kml/dom/element.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { Placemark::Placemark() {} Placemark::~Placemark() {} void Placemark::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->IsA(Type_Geometry)) { set_geometry(AsGeometry(element)); return; } Feature::AddElement(element); } void Placemark::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Feature::Serialize(serializer); if (has_geometry()) { serializer.SaveElementGroup(get_geometry(), Type_Geometry); } } void Placemark::Accept(Visitor* visitor) { visitor->VisitPlacemark(PlacemarkPtr(this)); } void Placemark::AcceptChildren(VisitorDriver* driver) { Feature::AcceptChildren(driver); if (has_geometry()) { driver->Visit(get_geometry()); } } } // namespace kmldom ���������������������������������������������������libkml-1.3.0/src/kml/dom/placemark.h����������������������������������������������������������������0000664�0000000�0000000�00000005316�12636032571�0017240�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_PLACEMARK_H__ #define KML_DOM_PLACEMARK_H__ #include "kml/dom/feature.h" #include "kml/dom/geometry.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/base/util.h" namespace kmldom { class Visitor; class VisitorDriver; class Placemark : public Feature { public: virtual ~Placemark(); virtual KmlDomType Type() const { return Type_Placemark; } virtual bool IsA(KmlDomType type) const { return type == Type_Placemark || Feature::IsA(type); } const GeometryPtr& get_geometry() const { return geometry_; } bool has_geometry() const { return geometry_ != NULL; } void set_geometry(const GeometryPtr& geometry) { SetComplexChild(geometry, &geometry_); } void clear_geometry() { set_geometry(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Placemark(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; GeometryPtr geometry_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Placemark); }; } // namespace kmldom #endif // KML_DOM_PLACEMARK_H__ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/polystyle.cc���������������������������������������������������������������0000664�0000000�0000000�00000005113�12636032571�0017476�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/polystyle.h" #include "kml/base/attributes.h" #include "kml/dom/element.h" #include "kml/dom/serializer.h" #include "kml/dom/xsd.h" using kmlbase::Attributes; namespace kmldom { PolyStyle::PolyStyle() : fill_(true), has_fill_(false), outline_(true), has_outline_(false) { } PolyStyle::~PolyStyle() { } void PolyStyle::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_fill: has_fill_ = element->SetBool(&fill_); break; case Type_outline: has_outline_ = element->SetBool(&outline_); break; default: ColorStyle::AddElement(element); break; } } void PolyStyle::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); ColorStyle::Serialize(serializer); if (has_fill()) { serializer.SaveFieldById(Type_fill, get_fill()); } if (has_outline()) { serializer.SaveFieldById(Type_outline, get_outline()); } } void PolyStyle::Accept(Visitor* visitor) { visitor->VisitPolyStyle(PolyStylePtr(this)); } } // end namespace kmldom �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/polystyle.h����������������������������������������������������������������0000664�0000000�0000000�00000005635�12636032571�0017351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_POLYSTYLE_H__ #define KML_DOM_POLYSTYLE_H__ #include "kml/dom/colorstyle.h" #include "kml/dom/kml22.h" #include "kml/base/util.h" namespace kmldom { class Visitor; // <PolyStyle> class PolyStyle : public ColorStyle { public: virtual ~PolyStyle(); virtual KmlDomType Type() const { return Type_PolyStyle; } virtual bool IsA(KmlDomType type) const { return type == Type_PolyStyle || ColorStyle::IsA(type); } // <fill> bool get_fill() const { return fill_; } bool has_fill() const { return has_fill_; } void set_fill(bool fill) { fill_ = fill; has_fill_ = true; } void clear_fill() { fill_ = true; has_fill_ = false; } // <outline> bool get_outline() const { return outline_; } bool has_outline() const { return has_outline_; } void set_outline(bool outline) { outline_ = outline; has_outline_ = true; } void clear_outline() { outline_ = true; has_outline_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; PolyStyle(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serialize) const; bool fill_; bool has_fill_; bool outline_; bool has_outline_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(PolyStyle); }; } // end namespace kmldom #endif // KML_DOM_POLYSTYLE_H__ ���������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/region.cc������������������������������������������������������������������0000664�0000000�0000000�00000013353�12636032571�0016722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the LatLonAltBox, Lod // and Region elements. #include "kml/dom/region.h" #include "kml/base/attributes.h" #include "kml/dom/abstractlatlonbox.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { LatLonAltBox::LatLonAltBox() : minaltitude_(0.0), has_minaltitude_(false), maxaltitude_(0.0), has_maxaltitude_(false), altitudemode_(ALTITUDEMODE_CLAMPTOGROUND), has_altitudemode_(false), gx_altitudemode_(GX_ALTITUDEMODE_CLAMPTOSEAFLOOR), has_gx_altitudemode_(false) {} LatLonAltBox::~LatLonAltBox() {} void LatLonAltBox::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_minAltitude: has_minaltitude_ = element->SetDouble(&minaltitude_); break; case Type_maxAltitude: has_maxaltitude_ = element->SetDouble(&maxaltitude_); break; case Type_altitudeMode: has_altitudemode_ = element->SetEnum(&altitudemode_); break; case Type_GxAltitudeMode: has_gx_altitudemode_ = element->SetEnum(&gx_altitudemode_); break; default: AbstractLatLonBox::AddElement(element); break; } } void LatLonAltBox::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); AbstractLatLonBox::Serialize(serializer); if (has_minaltitude()) { serializer.SaveFieldById(Type_minAltitude, get_minaltitude()); } if (has_maxaltitude()) { serializer.SaveFieldById(Type_maxAltitude, get_maxaltitude()); } if (has_altitudemode()) { serializer.SaveEnum(Type_altitudeMode, get_altitudemode()); } if (has_gx_altitudemode()) { serializer.SaveEnum(Type_GxAltitudeMode, get_gx_altitudemode()); } } void LatLonAltBox::Accept(Visitor* visitor) { visitor->VisitLatLonAltBox(LatLonAltBoxPtr(this)); } Lod::Lod() : minlodpixels_(0.0), has_minlodpixels_(false), maxlodpixels_(-1.0), has_maxlodpixels_(false), minfadeextent_(0.0), has_minfadeextent_(false), maxfadeextent_(0.0), has_maxfadeextent_(false) {} Lod::~Lod() {} void Lod::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_minLodPixels: has_minlodpixels_ = element->SetDouble(&minlodpixels_); break; case Type_maxLodPixels: has_maxlodpixels_ = element->SetDouble(&maxlodpixels_); break; case Type_minFadeExtent: has_minfadeextent_ = element->SetDouble(&minfadeextent_); break; case Type_maxFadeExtent: has_maxfadeextent_ = element->SetDouble(&maxfadeextent_); break; default: Object::AddElement(element); break; } } void Lod::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); if (has_minlodpixels()) { serializer.SaveFieldById(Type_minLodPixels, get_minlodpixels()); } if (has_maxlodpixels()) { serializer.SaveFieldById(Type_maxLodPixels, get_maxlodpixels()); } if (has_minfadeextent()) { serializer.SaveFieldById(Type_minFadeExtent, get_minfadeextent()); } if (has_maxfadeextent()) { serializer.SaveFieldById(Type_maxFadeExtent, get_maxfadeextent()); } } void Lod::Accept(Visitor* visitor) { visitor->VisitLod(LodPtr(this)); } Region::Region() { } Region::~Region() { } void Region::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_LatLonAltBox: set_latlonaltbox(AsLatLonAltBox(element)); break; case Type_Lod: set_lod(AsLod(element)); break; default: Object::AddElement(element); } } void Region::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); if (has_latlonaltbox()) { serializer.SaveElement(get_latlonaltbox()); } if (has_lod()) { serializer.SaveElement(get_lod()); } } void Region::Accept(Visitor* visitor) { visitor->VisitRegion(RegionPtr(this)); } void Region::AcceptChildren(VisitorDriver* driver) { Object::AcceptChildren(driver); if (has_latlonaltbox()) { driver->Visit(get_latlonaltbox()); } if (has_lod()) { driver->Visit(get_lod()); } } } // end namespace kmldom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/region.h�������������������������������������������������������������������0000664�0000000�0000000�00000017133�12636032571�0016564�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file declares the Region, LatLonAltBox and Lod elements. // LatLonAltBox and Lod are here because they are used only with Region. #ifndef KML_DOM_REGION_H__ #define KML_DOM_REGION_H__ #include "kml/dom/abstractlatlonbox.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/object.h" #include "kml/base/util.h" namespace kmldom { class Visitor; class VisitorDriver; // <LatLonAltBox> class LatLonAltBox : public AbstractLatLonBox { public: virtual ~LatLonAltBox(); virtual KmlDomType Type() const { return Type_LatLonAltBox; } virtual bool IsA(KmlDomType type) const { return type == Type_LatLonAltBox || AbstractLatLonBox::IsA(type); } // <minAltitude> double get_minaltitude() const { return minaltitude_; } bool has_minaltitude() const { return has_minaltitude_; } void set_minaltitude(double minaltitude) { minaltitude_ = minaltitude; has_minaltitude_ = true; } void clear_minaltitude() { minaltitude_ = 0.0; has_minaltitude_ = false; } // <maxAltitude> double get_maxaltitude() const { return maxaltitude_; } bool has_maxaltitude() const { return has_maxaltitude_; } void set_maxaltitude(double maxaltitude) { maxaltitude_ = maxaltitude; has_maxaltitude_ = true; } void clear_maxaltitude() { maxaltitude_ = 0.0; has_maxaltitude_ = false; } // <altitudeMode> int get_altitudemode() const { return altitudemode_; } bool has_altitudemode() const { return has_altitudemode_; } void set_altitudemode(int altitudemode) { altitudemode_ = altitudemode; has_altitudemode_ = true; } void clear_altitudemode() { altitudemode_ = ALTITUDEMODE_CLAMPTOGROUND; has_altitudemode_ = false; } // <gx:altitudeMode> int get_gx_altitudemode() const { return gx_altitudemode_; } bool has_gx_altitudemode() const { return has_gx_altitudemode_; } void set_gx_altitudemode(int gx_altitudemode) { gx_altitudemode_ = gx_altitudemode; has_gx_altitudemode_ = true; } void clear_gx_altitudemode() { gx_altitudemode_ = GX_ALTITUDEMODE_CLAMPTOSEAFLOOR; has_gx_altitudemode_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; LatLonAltBox(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; double minaltitude_; bool has_minaltitude_; double maxaltitude_; bool has_maxaltitude_; int altitudemode_; bool has_altitudemode_; int gx_altitudemode_; bool has_gx_altitudemode_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(LatLonAltBox); }; // <Lod> class Lod : public Object { public: virtual ~Lod(); virtual KmlDomType Type() const { return Type_Lod; } virtual bool IsA(KmlDomType type) const { return type == Type_Lod || Object::IsA(type); } // <minLodPixels> double get_minlodpixels() const { return minlodpixels_; } bool has_minlodpixels() const { return has_minlodpixels_; } void set_minlodpixels(double minlodpixels) { minlodpixels_ = minlodpixels; has_minlodpixels_ = true; } void clear_minlodpixels() { minlodpixels_ = 0.0; has_minlodpixels_ = false; } // <maxLodPixels> double get_maxlodpixels() const { return maxlodpixels_; } bool has_maxlodpixels() const { return has_maxlodpixels_; } void set_maxlodpixels(double minlodpixels) { maxlodpixels_ = minlodpixels; has_maxlodpixels_ = true; } void clear_maxlodpixels() { maxlodpixels_ = -1.0; has_maxlodpixels_ = false; } // <minFadeExtent> double get_minfadeextent() const { return minfadeextent_; } bool has_minfadeextent() const { return has_minfadeextent_; } void set_minfadeextent(double minlodpixels) { minfadeextent_ = minlodpixels; has_minfadeextent_ = true; } void clear_minfadeextent() { minfadeextent_ = 0.0; has_minfadeextent_ = false; } // <maxFadeExtent> double get_maxfadeextent() const { return maxfadeextent_; } bool has_maxfadeextent() const { return has_maxfadeextent_; } void set_maxfadeextent(double maxlodpixels) { maxfadeextent_ = maxlodpixels; has_maxfadeextent_ = true; } void clear_maxfadeextent() { maxfadeextent_ = 0.0; has_maxfadeextent_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Lod(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; double minlodpixels_; bool has_minlodpixels_; double maxlodpixels_; bool has_maxlodpixels_; double minfadeextent_; bool has_minfadeextent_; double maxfadeextent_; bool has_maxfadeextent_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Lod); }; // <Region> class Region : public Object { public: virtual ~Region(); virtual KmlDomType Type() const { return Type_Region; } virtual bool IsA(KmlDomType type) const { return type == Type_Region || Object::IsA(type); } // <LatLonAltBox> const LatLonAltBoxPtr& get_latlonaltbox() const { return latlonaltbox_; } bool has_latlonaltbox() const { return latlonaltbox_ != NULL; } void set_latlonaltbox(const LatLonAltBoxPtr& latlonaltbox) { SetComplexChild(latlonaltbox, &latlonaltbox_); } void clear_latlonaltbox() { set_latlonaltbox(NULL); } // <Lod> const LodPtr& get_lod() const { return lod_; } bool has_lod() const { return lod_ != NULL; } void set_lod(const LodPtr& lod) { SetComplexChild(lod, &lod_); } void clear_lod() { set_lod(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Region(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; LatLonAltBoxPtr latlonaltbox_; LodPtr lod_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Region); }; } // end namespace kmldom #endif // KML_DOM_REGION_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/schema.cc������������������������������������������������������������������0000664�0000000�0000000�00000011565�12636032571�0016702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the SimpleField and Schema elements. #include "kml/dom/schema.h" #include "kml/base/attributes.h" #include "kml/base/xml_namespaces.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { // <SimpleField> SimpleField::SimpleField() : has_type_(false), has_name_(false), has_displayname_(false) { set_xmlns(kmlbase::XMLNS_KML22); } SimpleField::~SimpleField() {} static const char kSimpleFieldTypeAttr[] = "type"; static const char kSimpleFieldNameAttr[] = "name"; void SimpleField::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_type_ = attributes->CutValue(kSimpleFieldTypeAttr, &type_); has_name_ = attributes->CutValue(kSimpleFieldNameAttr, &name_); AddUnknownAttributes(attributes); } void SimpleField::SerializeAttributes(Attributes* attributes) const { Element::SerializeAttributes(attributes); if (has_type_) { attributes->SetValue(kSimpleFieldTypeAttr, type_); } if (has_name_) { attributes->SetValue(kSimpleFieldNameAttr, name_); } } void SimpleField::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_displayName) { has_displayname_ = element->SetString(&displayname_); } else { Element::AddElement(element); } } void SimpleField::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); if (has_displayname()) { serializer.SaveFieldById(Type_displayName, get_displayname()); } } void SimpleField::Accept(Visitor* visitor) { visitor->VisitSimpleField(SimpleFieldPtr(this)); } // <GxSimpleArrayField> GxSimpleArrayField::GxSimpleArrayField() { set_xmlns(kmlbase::XMLNS_GX22); } GxSimpleArrayField::~GxSimpleArrayField() {} void GxSimpleArrayField::Accept(Visitor* visitor) { visitor->VisitGxSimpleArrayField(GxSimpleArrayFieldPtr(this)); } // <Schema> Schema::Schema() : has_name_(false) { } Schema::~Schema() {} static const char kSchemaNameAttr[] = "name"; void Schema::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_name_ = attributes->CutValue(kSchemaNameAttr, &name_); Object::ParseAttributes(attributes); } void Schema::SerializeAttributes(Attributes* attributes) const { Object::SerializeAttributes(attributes); if (has_name_) { attributes->SetValue(kSchemaNameAttr, name_); } } void Schema::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_SimpleField: add_simplefield(AsSimpleField(element)); break; case Type_GxSimpleArrayField: add_gx_simplearrayfield(AsGxSimpleArrayField(element)); break; default: Object::AddElement(element); } } void Schema::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); serializer.SaveElementArray(simplefield_array_); serializer.SaveElementArray(gx_simplearrayfield_array_); } void Schema::Accept(Visitor* visitor) { visitor->VisitSchema(SchemaPtr(this)); } void Schema::AcceptChildren(VisitorDriver* driver) { Object::AcceptChildren(driver); Element::AcceptRepeated<SimpleFieldPtr>(&simplefield_array_, driver); Element::AcceptRepeated<GxSimpleArrayFieldPtr>(&gx_simplearrayfield_array_, driver); } } // end namespace kmldom �������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/schema.h�������������������������������������������������������������������0000664�0000000�0000000�00000013544�12636032571�0016543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_SCHEMA_H__ #define KML_DOM_SCHEMA_H__ #include <vector> #include "kml/dom/element.h" #include "kml/dom/object.h" #include "kml/dom/kml22.h" #include "kml/base/util.h" namespace kmlbase { class Attributes; } namespace kmldom { class Visitor; class VisitorDriver; // <SimpleField> class SimpleField : public BasicElement<Type_SimpleField> { public: virtual ~SimpleField(); const string& get_type() const { return type_; } bool has_type() const { return has_type_; } void set_type(const string& value) { type_ = value; has_type_ = true; } void clear_type() { type_.clear(); has_type_ = false; } const string& get_name() const { return name_; } bool has_name() const { return has_name_; } void set_name(const string& value) { name_ = value; has_name_ = true; } void clear_name() { name_.clear(); has_name_ = false; } const string& get_displayname() const { return displayname_; } bool has_displayname() const { return has_displayname_; } void set_displayname(const string& value) { displayname_ = value; has_displayname_ = true; } void clear_displayname() { displayname_.clear(); has_displayname_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); protected: SimpleField(); virtual void AddElement(const ElementPtr& element); virtual void ParseAttributes(kmlbase::Attributes* attributes); friend class Serializer; virtual void Serialize(Serializer& serializer) const; virtual void SerializeAttributes(kmlbase::Attributes* attributes) const; private: friend class KmlFactory; friend class KmlHandler; string type_; bool has_type_; string name_; bool has_name_; string displayname_; bool has_displayname_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(SimpleField); }; // <gx:SimpleArrayField> class GxSimpleArrayField : public SimpleField { public: virtual ~GxSimpleArrayField(); virtual KmlDomType Type() const { return Type_GxSimpleArrayField; } virtual bool IsA(KmlDomType type) const { return type == Type_GxSimpleArrayField || SimpleField::IsA(type); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; GxSimpleArrayField(); friend class KmlHandler; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(GxSimpleArrayField); }; // <Schema> // Note: in the XSD Schema is not an Object. We inherit from Object here // so it appears in the parsed object map and is easily accessible. class Schema : public Object { public: virtual ~Schema(); virtual KmlDomType Type() const { return Type_Schema; } virtual bool IsA(KmlDomType type) const { return type == Type_Schema || Object::IsA(type); } const string& get_name() const { return name_; } bool has_name() const { return has_name_; } void set_name(const string& value) { name_ = value; has_name_ = true; } void clear_name() { name_.clear(); has_name_ = false; } void add_simplefield(const SimpleFieldPtr& simplefield) { AddComplexChild(simplefield, &simplefield_array_); } size_t get_simplefield_array_size() const { return simplefield_array_.size(); } const SimpleFieldPtr& get_simplefield_array_at(size_t index) const { return simplefield_array_[index]; } void add_gx_simplearrayfield( const GxSimpleArrayFieldPtr& gx_simplearrayfield) { AddComplexChild(gx_simplearrayfield, &gx_simplearrayfield_array_); } size_t get_gx_simplearrayfield_array_size() const { return gx_simplearrayfield_array_.size(); } const GxSimpleArrayFieldPtr& get_gx_simplearrayfield_array_at( size_t index) const { return gx_simplearrayfield_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Schema(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); virtual void ParseAttributes(kmlbase::Attributes* attributes); friend class Serializer; virtual void Serialize(Serializer& serializer) const; virtual void SerializeAttributes(kmlbase::Attributes* attributes) const; string name_; bool has_name_; std::vector<SimpleFieldPtr> simplefield_array_; std::vector<GxSimpleArrayFieldPtr> gx_simplearrayfield_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Schema); }; } // namespace kmldom #endif // KML_DOM_SCHEMA_H__ ������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/serializer.cc��������������������������������������������������������������0000664�0000000�0000000�00000011026�12636032571�0017603�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the public XML serializing // functions and the implementation of the Serialize class. #include "kml/dom/serializer.h" #include "kml/base/string_util.h" #include "kml/base/vec3.h" #include "kml/dom/element.h" #include "kml/dom/xsd.h" using kmlbase::ToString; namespace kmldom { static string EnityEscapeXml(const string& xml) { kmlbase::StringMap map; map["&"] = "&"; map["<"] = "<"; map[">"] = ">"; map["'"] = "'"; map["\""] = """; return kmlbase::CreateExpandedStrings(xml, map, "", ""); } Serializer::Serializer() : xsd_(*Xsd::GetSchema()) { } // Study the incoming string for chars that are invalid to represent in XML. // Wrap the whole thing in a CDATA if any found. Avoids CDATA-ing any string // that's already a CDATA, and will entity-escape any reserved XML chars in // the process. Returns a string that's legal for an XML value. const string Serializer::MaybeQuoteString(const string& value) { // If there's a CDATA anywhere in this string, it must have been set through // the API (since the underlying XML parser will strip it out). We need to // entity-replace any reserved characters. if (value.find("<![CDATA[") != string::npos) { return EnityEscapeXml(value); } // If the string contains any reserved characters (but does not have any // raw CDATA as checked above), wrap it in CDATA. if (value.find_first_of("&'<>\"") != string::npos) { return "<![CDATA[" + value + "]]>"; } return value; } // This emits the string for the given enum and enum value. // For example, type_id=Type_altitudeMode, enum_value=ALTITUDEMODE_ABSOLUTE. // If enum_value is not valid for the given type_id nothing is emitted. void Serializer::SaveEnum(int type_id, int enum_value) { string enum_string = xsd_.EnumValue(type_id, enum_value); if (!enum_string.empty()) { SaveFieldById(type_id, enum_string); } } // This emits the given Element. This is a method of Serialize such that // an Element's Serialize method need only friend class Serialize. void Serializer::SaveElement(const ElementPtr& element) { if (!element) { return; } element->Serialize(*this); } // This default implementation turns the tuple into an indented string and // emits it as generic content. This is entirely adequate for any text-based // serializer such as XML. void Serializer::SaveVec3(const kmlbase::Vec3& vec3) { Indent(); SaveContent(ToString(vec3.get_longitude()) + "," + ToString(vec3.get_latitude()) + "," + ToString(vec3.get_altitude()) + "\n", false); // TODO: here's where we can use has_altitude() to avoid emitting that. // TODO: just call the following SaveSimpleVec3. } void Serializer::SaveSimpleVec3(int type_id, const kmlbase::Vec3& vec3, const string& delimiter) { string char_data = ToString(vec3.get_longitude()) + delimiter + ToString(vec3.get_latitude()) + delimiter + ToString(vec3.get_altitude()); SaveStringFieldById(type_id, char_data); } } // namespace kmldom ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/serializer.h���������������������������������������������������������������0000664�0000000�0000000�00000014265�12636032571�0017455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the internal Serializer class. #ifndef KML_DOM_SERIALIZER_H__ #define KML_DOM_SERIALIZER_H__ #include <sstream> #include "kml/base/string_util.h" #include "kml/dom/kml_ptr.h" namespace kmlbase { class Attributes; class Color32; class Vec3; } namespace kmldom { class Xsd; // The Serializer class is internal to the KML DOM and is used by each // Element to save its tag name, fields (attributes and simple elements), // character data content and/or complex child elements. class Serializer { public: Serializer(); virtual ~Serializer() {} // Emit the start tag of the given element: <Placemark id="pm123">. virtual void BeginById(int type_id, const kmlbase::Attributes& attributes) {}; // Emit the end tag of the given element: </Placemark>. virtual void End() {}; // Emit a complex element. virtual void SaveElement(const ElementPtr& element); // Emit a complex element as a member of the specified group. For example, // when Point is a child of Placemark it is a Geometry, but when it is a // child of PhotoOverlay it is emitted with SaveElement and no group id. virtual void SaveElementGroup(const ElementPtr& element, int group_id) { // Default implementation just calls SaveElement for those serializers // that have no need to use the group id of the given child element. // This also ensures that a serializer recurses on a complex element // whether SaveElement() or SaveElementGroup() is used. SaveElement(element); } // Emit a simple element. virtual void SaveStringFieldById(int type_id, string value) {} // Save out raw text. If maybe_quote is true the content is examined // for non-XML-valid characters and if so the content is CDATA escaped. // If maybe_quote is false the content is emitted directly. virtual void SaveContent(const string& content, bool maybe_quote) {}; // Save a lon,lat,alt tuple as appears within <coordinates>. virtual void SaveVec3(const kmlbase::Vec3& vec3); // Save a Vec3 with a specified delimiter and with an optional newline char. virtual void SaveSimpleVec3(int type_id, const kmlbase::Vec3& vec3, const string& delimiter); // Emit indent. virtual void Indent() {} // Save a Color32 value. virtual void SaveColor(int type_id, const kmlbase::Color32& color) {} // If value contains any non-XML valid characters a CDATA-escaped // string is returned, else the original string is returned. const string MaybeQuoteString(const string& value); // Save the given value out as the enum element identified by type_id. void SaveEnum(int type_id, int enum_value); // Save the given value out as the simple element identified by type_id. template<typename T> void SaveFieldById(int type_id, T value) { SaveStringFieldById(type_id, kmlbase::ToString(value)); } // Notify the serializer that an array of the given type of element is being // saved. SaveElement will now be called N times (N == element_count). virtual void BeginElementArray(int type_id, size_t element_count) {} // Notify the serializer that an array of the given type was just saved. virtual void EndElementArray(int type_id) {} // This is common code for saving any element array. The BeginElementArray // and EndElementArray methods are called before/after saving all elements. template<class T> void SaveElementArray(const std::vector<T>& element_array) { if (size_t element_count = element_array.size()) { BeginElementArray(element_array[0]->Type(), element_count); for (size_t i = 0; i < element_count; ++i) { SaveElement(element_array[i]); } EndElementArray(element_array[0]->Type()); } } // Notify the serializer that an array of the given group type of element is // being saved. SaveElementGroup will now be called N times (N == // element_count). virtual void BeginElementGroupArray(int group_id, size_t element_count) {} // Notify the serializer that an array of the given group type was just saved. virtual void EndElementGroupArray(int group_id) {} // This is common code for saving any substitution group element array. The // BeginElementArray and EndElementArray methods are called before/after // saving all elements. template<class T> void SaveElementGroupArray(const std::vector<T>& element_array, int group_id) { if (size_t element_count = element_array.size()) { BeginElementGroupArray(group_id, element_count); for (size_t i = 0; i < element_count; ++i) { SaveElementGroup(element_array[i], group_id); } EndElementGroupArray(group_id); } } protected: const Xsd& xsd_; }; } // end namespace kmldom #endif // KML_DOM_SERIALIZER_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/snippet.cc�����������������������������������������������������������������0000664�0000000�0000000�00000005700�12636032571�0017116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/snippet.h" #include "kml/base/attributes.h" #include "kml/base/xml_namespaces.h" #include "kml/dom/serializer.h" #include "kml/dom/xsd.h" using kmlbase::Attributes; namespace kmldom { SnippetCommon::SnippetCommon() : has_text_(false), maxlines_(2), has_maxlines_(false) { set_xmlns(kmlbase::XMLNS_KML22); } SnippetCommon::~SnippetCommon() {} static const char kMaxLines[] = "maxLines"; void SnippetCommon::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_maxlines_ = attributes->CutValue(kMaxLines, &maxlines_); AddUnknownAttributes(attributes); } void SnippetCommon::SerializeAttributes(Attributes* attributes) const { Element::SerializeAttributes(attributes); if (has_maxlines_) { attributes->SetValue(kMaxLines, static_cast<double>(maxlines_)); } } // Snippet needs to parse its own character data. void SnippetCommon::AddElement(const ElementPtr& element) { if (!element) { return; } set_text(get_char_data()); } void SnippetCommon::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); serializer.SaveContent(text_, true); } Snippet::Snippet() {} Snippet::~Snippet() {} void Snippet::Accept(Visitor* visitor) { visitor->VisitSnippet(SnippetPtr(this)); } LinkSnippet::LinkSnippet() {} LinkSnippet::~LinkSnippet() {} void LinkSnippet::Accept(Visitor* visitor) { visitor->VisitLinkSnippet(LinkSnippetPtr(this)); } } // end namespace kmldom ����������������������������������������������������������������libkml-1.3.0/src/kml/dom/snippet.h������������������������������������������������������������������0000664�0000000�0000000�00000007505�12636032571�0016765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_SNIPPET_H__ #define KML_DOM_SNIPPET_H__ #include "kml/dom/element.h" #include "kml/dom/kml22.h" #include "kml/base/util.h" namespace kmlbase { class Attributes; } namespace kmldom { class Serializer; class Visitor; // This is SnippetType in the KML standard. class SnippetCommon : public Element { public: virtual ~SnippetCommon(); virtual KmlDomType Type() const { return Type_Snippet; } virtual bool IsA(KmlDomType type) const { return type == Type_Snippet; } // This is the character data content of <Snippet> const string& get_text() const { return text_; } bool has_text() const { return has_text_; } void set_text(const string& value) { text_ = value; has_text_ = true; } void clear_text() { text_.clear(); has_text_ = false; } // maxlines= int get_maxlines() const { return maxlines_; } bool has_maxlines() const { return has_maxlines_; } void set_maxlines(int value) { maxlines_ = value; has_maxlines_ = true; } void clear_maxlines() { maxlines_ = 2; has_maxlines_ = false; } protected: SnippetCommon(); virtual void AddElement(const ElementPtr& child); virtual void ParseAttributes(kmlbase::Attributes* attributes); virtual void Serialize(Serializer& serializer) const; virtual void SerializeAttributes(kmlbase::Attributes* attributes) const; private: string text_; bool has_text_; int maxlines_; bool has_maxlines_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(SnippetCommon); }; // <Snippet> class Snippet : public SnippetCommon { public: virtual ~Snippet(); virtual KmlDomType Type() const { return Type_Snippet; } virtual bool IsA(KmlDomType type) const { return type == Type_Snippet; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; Snippet(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Snippet); }; // <linkSnippet> class LinkSnippet : public SnippetCommon { public: virtual ~LinkSnippet(); virtual KmlDomType Type() const { return Type_linkSnippet; } virtual bool IsA(KmlDomType type) const { return type == Type_linkSnippet; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); private: friend class KmlFactory; LinkSnippet(); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(LinkSnippet); }; } // end namespace kmldom #endif // KML_DOM_SNIPPET_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/stats_serializer.h���������������������������������������������������������0000664�0000000�0000000�00000006500�12636032571�0020664�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the definition of the StatsSerializer test utility. // TODO: some ilk of unit test for this class despite this _being_ part of // some unit tests. #ifndef KML_DOM_STATS_SERIALIZER_H__ #define KML_DOM_STATS_SERIALIZER_H__ #include "kml/dom/serializer.h" #include "kml/dom/kml_ptr.h" namespace kmlbase { class Attributes; } namespace kmldom { // This Serializer implementation counts begin and end tags of complex elements // and a count of all simple elements (fields). class StatsSerializer : public Serializer { public: StatsSerializer() : begin_count_(0), end_count_(0), field_count_(0), element_count_(0), element_group_count_(0), content_count_(0) {} virtual void BeginById(int type_id, const kmlbase::Attributes& attributes) { ++begin_count_; } virtual void End() { ++end_count_; } virtual void SaveStringFieldById(int type_id, string value) { ++field_count_; } virtual void SaveContent(const string& content, bool maybe_quote) { ++content_count_; } virtual void SaveElement(const ElementPtr& element) { ++element_count_; Serializer::SaveElement(element); } virtual void SaveElementGroup(const ElementPtr& element, int group_id) { ++element_group_count_; SaveElement(element); // To count elements and recurse. } int get_begin_count() const { return begin_count_; } int get_end_count() const { return end_count_; } int get_field_count() const { return field_count_; } int get_element_count() const { return element_count_; } int get_element_group_count() const { return element_group_count_; } private: int begin_count_; int end_count_; int field_count_; int element_count_; int element_group_count_; int content_count_; }; } // end namespace kmldom #endif // KML_DOM_STATS_SERIALIZER_H__ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/style.cc�������������������������������������������������������������������0000664�0000000�0000000�00000007101�12636032571�0016571�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/style.h" #include "kml/base/attributes.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { Style::Style() {} Style::~Style() {} void Style::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_IconStyle: set_iconstyle(AsIconStyle(element)); break; case Type_LabelStyle: set_labelstyle(AsLabelStyle(element)); break; case Type_LineStyle: set_linestyle(AsLineStyle(element)); break; case Type_PolyStyle: set_polystyle(AsPolyStyle(element)); break; case Type_BalloonStyle: set_balloonstyle(AsBalloonStyle(element)); break; case Type_ListStyle: set_liststyle(AsListStyle(element)); break; default: StyleSelector::AddElement(element); break; } } void Style::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); StyleSelector::Serialize(serializer); if (has_iconstyle()) { serializer.SaveElement(get_iconstyle()); } if (has_labelstyle()) { serializer.SaveElement(get_labelstyle()); } if (has_linestyle()) { serializer.SaveElement(get_linestyle()); } if (has_polystyle()) { serializer.SaveElement(get_polystyle()); } if (has_balloonstyle()) { serializer.SaveElement(get_balloonstyle()); } if (has_liststyle()) { serializer.SaveElement(get_liststyle()); } } void Style::Accept(Visitor* visitor) { visitor->VisitStyle(StylePtr(this)); } void Style::AcceptChildren(VisitorDriver* driver) { StyleSelector::AcceptChildren(driver); if (has_iconstyle()) { driver->Visit(get_iconstyle()); } if (has_labelstyle()) { driver->Visit(get_labelstyle()); } if (has_linestyle()) { driver->Visit(get_linestyle()); } if (has_polystyle()) { driver->Visit(get_polystyle()); } if (has_balloonstyle()) { driver->Visit(get_balloonstyle()); } if (has_liststyle()) { driver->Visit(get_liststyle()); } } } // end namespace kmldom ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/style.h��������������������������������������������������������������������0000664�0000000�0000000�00000011052�12636032571�0016433�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_STYLE_H__ #define KML_DOM_STYLE_H__ #include "kml/dom/balloonstyle.h" #include "kml/dom/iconstyle.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/labelstyle.h" #include "kml/dom/liststyle.h" #include "kml/dom/linestyle.h" #include "kml/dom/polystyle.h" #include "kml/dom/styleselector.h" namespace kmldom { class Serializer; class Visitor; class VisitorDriver; class Style : public StyleSelector { public: virtual ~Style(); virtual KmlDomType Type() const { return Type_Style; } virtual bool IsA(KmlDomType type) const { return type == Type_Style || StyleSelector::IsA(type); } // <IconStyle> const IconStylePtr& get_iconstyle() const { return iconstyle_; } bool has_iconstyle() const { return iconstyle_ != NULL; } void set_iconstyle(const IconStylePtr& iconstyle) { SetComplexChild(iconstyle, &iconstyle_); } void clear_iconstyle() { set_iconstyle(NULL); } // <LabelStyle> const LabelStylePtr& get_labelstyle() const { return labelstyle_; } bool has_labelstyle() const { return labelstyle_ != NULL; } void set_labelstyle(const LabelStylePtr& labelstyle) { SetComplexChild(labelstyle, &labelstyle_); } void clear_labelstyle() { set_labelstyle(NULL); } // <LineStyle> const LineStylePtr& get_linestyle() const { return linestyle_; } bool has_linestyle() const { return linestyle_ != NULL; } void set_linestyle(const LineStylePtr& linestyle) { SetComplexChild(linestyle, &linestyle_); } void clear_linestyle() { set_linestyle(NULL); } // <PolyStyle> const PolyStylePtr& get_polystyle() const { return polystyle_; } bool has_polystyle() const { return polystyle_ != NULL; } void set_polystyle(const PolyStylePtr& polystyle) { SetComplexChild(polystyle, &polystyle_); } void clear_polystyle() { set_polystyle(NULL); } // <BalloonStyle> const BalloonStylePtr& get_balloonstyle() const { return balloonstyle_; } bool has_balloonstyle() const { return balloonstyle_ != NULL; } void set_balloonstyle(const BalloonStylePtr& balloonstyle) { SetComplexChild(balloonstyle, &balloonstyle_); } void clear_balloonstyle() { set_balloonstyle(NULL); } // <ListStyle> const ListStylePtr& get_liststyle() const { return liststyle_; } bool has_liststyle() const { return liststyle_ != NULL; } void set_liststyle(const ListStylePtr& liststyle) { SetComplexChild(liststyle, &liststyle_); } void clear_liststyle() { set_liststyle(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Style (); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; IconStylePtr iconstyle_; LabelStylePtr labelstyle_; LineStylePtr linestyle_; PolyStylePtr polystyle_; BalloonStylePtr balloonstyle_; ListStylePtr liststyle_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Style); }; } // end namespace kmldom #endif // KML_DOM_STYLE_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/stylemap.cc����������������������������������������������������������������0000664�0000000�0000000�00000007154�12636032571�0017277�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/stylemap.h" #include "kml/base/attributes.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { // <Pair> Pair::Pair() : key_(STYLESTATE_NORMAL), has_key_(false), has_styleurl_(false) { } Pair::~Pair() {} void Pair::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->IsA(Type_StyleSelector)) { set_styleselector(AsStyleSelector(element)); return; } switch (element->Type()) { case Type_key: has_key_ = element->SetEnum(&key_); break; case Type_styleUrl: has_styleurl_ = element->SetString(&styleurl_); break; default: Object::AddElement(element); break; } } void Pair::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); Object::Serialize(serializer); if (has_key()) { serializer.SaveEnum(Type_key, get_key()); } if (has_styleurl()) { serializer.SaveFieldById(Type_styleUrl, get_styleurl()); } if (has_styleselector()) { serializer.SaveElementGroup(get_styleselector(), Type_StyleSelector); } } void Pair::Accept(Visitor* visitor) { visitor->VisitPair(PairPtr(this)); } void Pair::AcceptChildren(VisitorDriver* driver) { Object::AcceptChildren(driver); if (has_styleselector()) { driver->Visit(get_styleselector()); } } // <StyleMap> StyleMap::StyleMap() {} StyleMap::~StyleMap() {} void StyleMap::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_Pair) { add_pair(AsPair(element)); } else { StyleSelector::AddElement(element); } } void StyleMap::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); StyleSelector::Serialize(serializer); serializer.SaveElementArray(pair_array_); } void StyleMap::Accept(Visitor* visitor) { visitor->VisitStyleMap(StyleMapPtr(this)); } void StyleMap::AcceptChildren(VisitorDriver* driver) { StyleSelector::AcceptChildren(driver); Element::AcceptRepeated<PairPtr>(&pair_array_, driver); } } // end namespace kmldom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/stylemap.h�����������������������������������������������������������������0000664�0000000�0000000�00000010645�12636032571�0017140�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations of the Pair and StyleMap elements. #ifndef KML_DOM_STYLEMAP_H__ #define KML_DOM_STYLEMAP_H__ #include <vector> #include "kml/dom/kml22.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/object.h" #include "kml/dom/styleselector.h" namespace kmldom { class Serializer; class Visitor; class VisitorDriver; // <Pair> class Pair : public Object { public: virtual ~Pair(); virtual KmlDomType Type() const { return Type_Pair; } virtual bool IsA(KmlDomType type) const { return type == Type_Pair || Object::IsA(type); } // <key> int get_key() const { return key_; } bool has_key() const { return has_key_; } void set_key(int key) { key_ = key; has_key_ = true; } void clear_key() { key_ = STYLESTATE_NORMAL; has_key_ = false; } // <styleUrl> const string& get_styleurl() const { return styleurl_; } bool has_styleurl() const { return has_styleurl_; } void set_styleurl(const string& styleurl) { styleurl_ = styleurl; has_styleurl_ = true; } void clear_styleurl() { styleurl_.clear(); has_styleurl_ = false; } // StyleSelector const StyleSelectorPtr& get_styleselector() const { return styleselector_; } bool has_styleselector() const { return styleselector_ != NULL; } void set_styleselector(const StyleSelectorPtr& styleselector) { SetComplexChild(styleselector, &styleselector_); } void clear_styleselector() { set_styleselector(NULL); } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; Pair(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; int key_; bool has_key_; string styleurl_; bool has_styleurl_; StyleSelectorPtr styleselector_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Pair); }; // <StyleMap> class StyleMap : public StyleSelector { public: virtual ~StyleMap(); virtual KmlDomType Type() const { return Type_StyleMap; } virtual bool IsA(KmlDomType type) const { return type == Type_StyleMap || StyleSelector::IsA(type); } void add_pair(const PairPtr& pair) { AddComplexChild(pair, &pair_array_); } size_t get_pair_array_size() const { return pair_array_.size(); } const PairPtr& get_pair_array_at(size_t index) const { return pair_array_[index]; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); virtual void AcceptChildren(VisitorDriver* driver); private: friend class KmlFactory; StyleMap(); friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; std::vector<PairPtr> pair_array_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(StyleMap); }; } // end namespace kmldom #endif // KML_DOM_STYLEMAP_H__ �������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/styleselector.cc�����������������������������������������������������������0000664�0000000�0000000�00000003176�12636032571�0020342�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/styleselector.h" namespace kmldom { StyleSelector::StyleSelector() {} StyleSelector::~StyleSelector() {} } // end namespace kmldom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/styleselector.h������������������������������������������������������������0000664�0000000�0000000�00000004235�12636032571�0020201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_STYLESELECTOR_H__ #define KML_DOM_STYLESELECTOR_H__ #include <vector> #include "kml/dom/object.h" #include "kml/dom/kml22.h" #include "kml/base/util.h" namespace kmldom { // OGC KML 2.2 Standard: 12.1 kml:AbstractStyleSelectorGroup // OGC KML 2.2 XSD: <element name="AbstractStyleSelectorGroup"... class StyleSelector : public Object { public: virtual ~StyleSelector(); virtual KmlDomType Type() const { return Type_StyleSelector; } virtual bool IsA(KmlDomType type) const { return type == Type_StyleSelector || Object::IsA(type); } protected: // StyleSelector is abstract. StyleSelector(); }; } // end namespace kmldom #endif // KML_DOM_STYLESELECTOR_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/substyle.cc����������������������������������������������������������������0000664�0000000�0000000�00000003433�12636032571�0017307�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/dom/substyle.h" namespace kmldom { SubStyle::SubStyle() {} SubStyle::~SubStyle() {} void SubStyle::AddElement(const ElementPtr& element) { Object::AddElement(element); } void SubStyle::Serialize(Serializer& serializer) const { Object::Serialize(serializer); } } // end namespace kmldom �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/substyle.h�����������������������������������������������������������������0000664�0000000�0000000�00000004376�12636032571�0017160�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_DOM_SUBSTYLE_H__ #define KML_DOM_SUBSTYLE_H__ #include "kml/dom/object.h" #include "kml/dom/kml22.h" #include "kml/base/util.h" namespace kmldom { // OGC KML 2.2 Standard: 12.5 kml:AbstractSubStyleGroup // OGC KML 2.2 XSD: <element name="AbstractSubStyleGroup"... class SubStyle : public Object { public: virtual ~SubStyle(); virtual KmlDomType Type() const { return Type_SubStyle; } virtual bool IsA(KmlDomType type) const { return type == Type_SubStyle || Object::IsA(type); } virtual void AddElement(const ElementPtr& element); virtual void Serialize(Serializer& serializer) const; protected: // SubStyle is abstract. SubStyle(); private: LIBKML_DISALLOW_EVIL_CONSTRUCTORS(SubStyle); }; } // end namespace kmldom #endif // KML_DOM_SUBSTYLE_H__ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/timeprimitive.cc�����������������������������������������������������������0000664�0000000�0000000�00000006557�12636032571�0020336�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the abstract element TimePrimitive // and the concrete elements TimeSpan, TimeStamp. #include "kml/dom/timeprimitive.h" #include "kml/base/attributes.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { TimePrimitive::TimePrimitive() {} TimePrimitive::~TimePrimitive() {} void TimePrimitive::AddElement(const ElementPtr& element) { Object::AddElement(element); } TimeSpan::TimeSpan() : has_begin_(false), has_end_(false) { } TimeSpan::~TimeSpan() {} void TimeSpan::AddElement(const ElementPtr& element) { if (!element) { return; } switch (element->Type()) { case Type_begin: has_begin_ = element->SetString(&begin_); break; case Type_end: has_end_ = element->SetString(&end_); break; default: TimePrimitive::AddElement(element); } } void TimeSpan::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); TimePrimitive::Serialize(serializer); if (has_begin()) { serializer.SaveFieldById(Type_begin, begin_); } if (has_end()) { serializer.SaveFieldById(Type_end, end_); } } void TimeSpan::Accept(Visitor* visitor) { visitor->VisitTimeSpan(TimeSpanPtr(this)); } TimeStamp::TimeStamp() : has_when_(false) { } TimeStamp::~TimeStamp() {} void TimeStamp::AddElement(const ElementPtr& element) { if (!element) { return; } if (element->Type() == Type_when) { has_when_ = element->SetString(&when_); } else { TimePrimitive::AddElement(element); } } void TimeStamp::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); TimePrimitive::Serialize(serializer); if (has_when()) { serializer.SaveFieldById(Type_when, when_); } } void TimeStamp::Accept(Visitor* visitor) { visitor->VisitTimeStamp(TimeStampPtr(this)); } } // end namespace kmldom �������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/timeprimitive.h������������������������������������������������������������0000664�0000000�0000000�00000011012�12636032571�0020156�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations for the abstract TimePrimitive element // and the concrete TimeStamp, TimeSpan elements. #ifndef KML_DOM_TIMEPRIMITIVE_H__ #define KML_DOM_TIMEPRIMITIVE_H__ #include "kml/dom/kml22.h" #include "kml/dom/object.h" namespace kmldom { class Serializer; class Visitor; // OGC KML 2.2 Standard: 15.1 kml:AbstractTimePrimitiveGroup // OGC KML 2.2 XSD: <element name="AbstractTimePrimitiveGroup"... class TimePrimitive : public Object { public: virtual ~TimePrimitive(); virtual KmlDomType Type() const { return Type_TimePrimitive; } virtual bool IsA(KmlDomType type) const { return type == Type_TimePrimitive || Object::IsA(type); } // Internal API for parse and serialize. virtual void AddElement(const ElementPtr& element); protected: // TimePrimitive is abstract. TimePrimitive(); private: LIBKML_DISALLOW_EVIL_CONSTRUCTORS(TimePrimitive); }; // <TimeSpan> class TimeSpan : public TimePrimitive { public: virtual ~TimeSpan(); virtual KmlDomType Type() const { return Type_TimeSpan; } virtual bool IsA(KmlDomType type) const { return type == Type_TimeSpan || TimePrimitive::IsA(type); } // <begin> const string& get_begin() const { return begin_; } bool has_begin() const { return has_begin_; } void set_begin(const string& value) { begin_ = value; has_begin_ = true; } void clear_begin() { begin_.clear(); has_begin_ = false; } // <end> const string& get_end() const { return end_; } bool has_end() const { return has_end_; } void set_end(const string& value) { end_ = value; has_end_ = true; } void clear_end() { end_.clear(); has_end_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); protected: TimeSpan(); virtual void AddElement(const ElementPtr& element); virtual void Serialize(Serializer& serializer) const; private: friend class KmlFactory; friend class KmlHandler; friend class Serializer; string begin_; bool has_begin_; string end_; bool has_end_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(TimeSpan); }; // <TimeStamp> class TimeStamp : public TimePrimitive { public: virtual ~TimeStamp(); virtual KmlDomType Type() const { return Type_TimeStamp; } virtual bool IsA(KmlDomType type) const { return type == Type_TimeStamp || TimePrimitive::IsA(type); } // <when> const string& get_when() const { return when_; } bool has_when() const { return has_when_; } void set_when(const string& value) { when_ = value; has_when_ = true; } void clear_when() { when_.clear(); has_when_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); protected: TimeStamp(); virtual void AddElement(const ElementPtr& element); virtual void Serialize(Serializer& serializer) const; private: friend class KmlFactory; friend class KmlHandler; friend class Serializer; string when_; bool has_when_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(TimeStamp); }; } // end namespace kmldom #endif // KML_DOM_TIMEPRIMITIVE_H__ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/vec2.cc��������������������������������������������������������������������0000664�0000000�0000000�00000007363�12636032571�0016302�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the abstract Vec2 element. #include "kml/dom/vec2.h" #include "kml/base/attributes.h" #include "kml/dom/serializer.h" #include "kml/dom/xsd.h" using kmlbase::Attributes; namespace kmldom { Vec2::Vec2() : x_(1.0), has_x_(false), y_(1.0), has_y_(false), xunits_(UNITS_FRACTION), has_xunits_(false), yunits_(UNITS_FRACTION), has_yunits_(false) { } Vec2::~Vec2() {} static const char kX[] = "x"; static const char kY[] = "y"; static const char kXUnits[] = "xunits"; static const char kYUnits[] = "yunits"; // Look up the given attribute and convert it to an enum val of the given // enum type. For example, attr_name="xunits" and enum_type=Type_units. // This matches the behavior in kmldom::Field::SetEnum. // NOTE: This would be a general purpose method if any other KML elements // had attributes of enum type. static bool CutEnumAttr(Attributes* attributes, const string attr_name, int enum_type, int* enum_val) { string attr_val; if (attributes->CutValue(attr_name, &attr_val)) { int val = Xsd::GetSchema()->EnumId(enum_type, attr_val); if (val != -1) { *enum_val = val; return true; } } return false; } void Vec2::ParseAttributes(Attributes* attributes) { if (!attributes) { return; } has_x_ = attributes->CutValue(kX, &x_); has_y_ = attributes->CutValue(kY, &y_); has_xunits_ = CutEnumAttr(attributes, kXUnits, Type_units, &xunits_); has_yunits_ = CutEnumAttr(attributes, kYUnits, Type_units, &yunits_); AddUnknownAttributes(attributes); } void Vec2::SerializeAttributes(Attributes* attributes) const { Element::SerializeAttributes(attributes); if (has_x_) { attributes->SetValue(kX, x_); } if (has_y_) { attributes->SetValue(kY, y_); } if (has_xunits_) { attributes->SetValue(kXUnits, Xsd::GetSchema()->EnumValue(Type_units, xunits_)); } if (has_yunits_) { attributes->SetValue(kYUnits, Xsd::GetSchema()->EnumValue(Type_units, yunits_)); } } void Vec2::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); } void Vec2::Accept(Visitor* visitor) { visitor->VisitVec2(Vec2Ptr(this)); } } // end namespace kmldom �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/vec2.h���������������������������������������������������������������������0000664�0000000�0000000�00000007003�12636032571�0016133�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the abstract Vec2 element. #ifndef KML_DOM_VEC2_H__ #define KML_DOM_VEC2_H__ #include "kml/dom/element.h" #include "kml/dom/kml22.h" #include "kml/base/util.h" namespace kmlbase { class Attributes; } namespace kmldom { class Serializer; class Visitor; // OGC KML 2.2 Standard: 16.21 kml:vec2Type // OGC KML 2.2 XSD: <complexType name="vec2Type"... class Vec2 : public Element { public: virtual ~Vec2(); virtual KmlDomType Type() const { return Type_Vec2; } virtual bool IsA(KmlDomType type) const { return type == Type_Vec2; } double get_x() const { return x_; } bool has_x() const { return has_x_; } void set_x(double value) { x_ = value; has_x_ = true; } void clear_x() { x_ = 1.0; has_x_ = false; } double get_y() const { return y_; } bool has_y() const { return has_y_; } void set_y(double value) { y_ = value; has_y_ = true; } void clear_y() { y_ = 1.0; has_y_ = false; } int get_xunits() const { return xunits_; } bool has_xunits() const { return has_xunits_; } void set_xunits(int value) { xunits_ = value; has_xunits_ = true; } void clear_xunits() { xunits_ = false; has_xunits_ = false; } int get_yunits() const { return yunits_; } bool has_yunits() const { return has_yunits_; } void set_yunits(int value) { yunits_ = value; has_yunits_ = true; } void clear_yunits() { yunits_ = false; has_yunits_ = false; } // Visitor API methods, see visitor.h. virtual void Accept(Visitor* visitor); protected: // Vec2 is abstract, derived class access only. Vec2(); virtual void ParseAttributes(kmlbase::Attributes* attributes); virtual void SerializeAttributes(kmlbase::Attributes* attributes) const; void Serialize(Serializer& serializer) const; private: double x_; bool has_x_; double y_; bool has_y_; int xunits_; bool has_xunits_; int yunits_; bool has_yunits_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Vec2); }; } // end namespace kmldom #endif // KML_DOM_VEC2_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/visitor.cc�����������������������������������������������������������������0000664�0000000�0000000�00000025374�12636032571�0017144�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // WARNING: THE VISITOR API IMPLEMENTED IN THIS CLASS IS EXPERIMENTAL AND // SUBJECT TO CHANGE WITHOUT WARNING. #include "kml/dom/visitor.h" #include "kml/dom/kmldom.h" #include "kml/dom/kml_cast.h" namespace kmldom { Visitor::Visitor() { } Visitor::~Visitor() { } void Visitor::VisitElement(const ElementPtr& element) { /* Top of element class hierarchy: Do nothing. */ } void Visitor::VisitAbstractLatLonBox( const AbstractLatLonBoxPtr& element) { VisitObject(element); } void Visitor::VisitAbstractLink( const AbstractLinkPtr& element) { VisitBasicLink(element); } void Visitor::VisitAbstractView( const AbstractViewPtr& element) { VisitObject(element); } void Visitor::VisitAlias( const AliasPtr& element) { VisitObject(element); } void Visitor::VisitBalloonStyle( const BalloonStylePtr& element) { VisitSubStyle(element); } void Visitor::VisitBasicLink( const BasicLinkPtr& element) { VisitObject(element); } void Visitor::VisitCamera( const CameraPtr& element) { VisitAbstractView(element); } void Visitor::VisitChange( const ChangePtr& element) { VisitUpdateOperation(element); } void Visitor::VisitColorStyle( const ColorStylePtr& element) { VisitSubStyle(element); } void Visitor::VisitContainer( const ContainerPtr& element) { VisitFeature(element); } void Visitor::VisitCoordinates( const CoordinatesPtr& element) { VisitElement(element); } void Visitor::VisitCreate( const CreatePtr& element) { VisitUpdateOperation(element); } void Visitor::VisitData( const DataPtr& element) { VisitObject(element); } void Visitor::VisitDelete( const DeletePtr& element) { VisitUpdateOperation(element); } void Visitor::VisitDocument( const DocumentPtr& element) { VisitContainer(element); } void Visitor::VisitExtendedData( const ExtendedDataPtr& element) { VisitElement(element); } void Visitor::VisitFeature( const FeaturePtr& element) { VisitObject(element); } void Visitor::VisitField( const FieldPtr& element) { VisitElement(element); } void Visitor::VisitFolder( const FolderPtr& element) { VisitContainer(element); } void Visitor::VisitGeometry( const GeometryPtr& element) { VisitObject(element); } void Visitor::VisitGroundOverlay( const GroundOverlayPtr& element) { VisitOverlay(element); } void Visitor::VisitGxAnimatedUpdate( const GxAnimatedUpdatePtr& element) { VisitGxTourPrimitive(element); } void Visitor::VisitGxFlyTo( const GxFlyToPtr& element) { VisitGxTourPrimitive(element); } void Visitor::VisitGxLatLonQuad( const GxLatLonQuadPtr& element) { VisitObject(element); } void Visitor::VisitGxMultiTrack( const GxMultiTrackPtr& element) { VisitGeometry(element); } void Visitor::VisitGxPlaylist( const GxPlaylistPtr& element) { VisitObject(element); } void Visitor::VisitGxSimpleArrayData( const GxSimpleArrayDataPtr& element) { VisitElement(element); } void Visitor::VisitGxSimpleArrayField( const GxSimpleArrayFieldPtr& element) { VisitSimpleField(element); } void Visitor::VisitGxSoundCue( const GxSoundCuePtr& element) { VisitGxTourPrimitive(element); } void Visitor::VisitGxTimeSpan( const GxTimeSpanPtr& element) { VisitTimeSpan(element); } void Visitor::VisitGxTimeStamp( const GxTimeStampPtr& element) { VisitTimeStamp(element); } void Visitor::VisitGxTour( const GxTourPtr& element) { VisitFeature(element); } void Visitor::VisitGxTourControl( const GxTourControlPtr& element) { VisitGxTourPrimitive(element); } void Visitor::VisitGxTourPrimitive( const GxTourPrimitivePtr& element) { VisitObject(element); } void Visitor::VisitGxTrack( const GxTrackPtr& element) { VisitGeometry(element); } void Visitor::VisitGxWait( const GxWaitPtr& element) { VisitGxTourPrimitive(element); } void Visitor::VisitHotSpot( const HotSpotPtr& element) { VisitVec2(element); } void Visitor::VisitIcon( const IconPtr& element) { VisitAbstractLink(element); } void Visitor::VisitIconStyle( const IconStylePtr& element) { VisitColorStyle(element); } void Visitor::VisitIconStyleIcon( const IconStyleIconPtr& element) { VisitBasicLink(element); } void Visitor::VisitImagePyramid( const ImagePyramidPtr& element) { VisitObject(element); } void Visitor::VisitInnerBoundaryIs( const InnerBoundaryIsPtr& element) { VisitElement(element); } void Visitor::VisitItemIcon( const ItemIconPtr& element) { VisitObject(element); } void Visitor::VisitKml( const KmlPtr& element) { VisitElement(element); } void Visitor::VisitLabelStyle( const LabelStylePtr& element) { VisitColorStyle(element); } void Visitor::VisitLatLonAltBox( const LatLonAltBoxPtr& element) { VisitAbstractLatLonBox(element); } void Visitor::VisitLatLonBox( const LatLonBoxPtr& element) { VisitAbstractLatLonBox(element); } void Visitor::VisitLineString( const LineStringPtr& element) { VisitGeometry(element); } void Visitor::VisitLineStyle( const LineStylePtr& element) { VisitColorStyle(element); } void Visitor::VisitLinearRing( const LinearRingPtr& element) { VisitGeometry(element); } void Visitor::VisitLink( const LinkPtr& element) { VisitAbstractLink(element); } void Visitor::VisitLinkSnippet( const LinkSnippetPtr& element) { VisitElement(element); } void Visitor::VisitListStyle( const ListStylePtr& element) { VisitSubStyle(element); } void Visitor::VisitLocation( const LocationPtr& element) { VisitObject(element); } void Visitor::VisitLod( const LodPtr& element) { VisitObject(element); } void Visitor::VisitLookAt( const LookAtPtr& element) { VisitAbstractView(element); } void Visitor::VisitMetadata( const MetadataPtr& element) { VisitElement(element); } void Visitor::VisitModel( const ModelPtr& element) { VisitGeometry(element); } void Visitor::VisitMultiGeometry( const MultiGeometryPtr& element) { VisitGeometry(element); } void Visitor::VisitNetworkLink( const NetworkLinkPtr& element) { VisitFeature(element); } void Visitor::VisitNetworkLinkControl( const NetworkLinkControlPtr& element) { VisitElement(element); } void Visitor::VisitObject( const ObjectPtr& element) { VisitElement(element); } void Visitor::VisitOrientation( const OrientationPtr& element) { VisitObject(element); } void Visitor::VisitOuterBoundaryIs( const OuterBoundaryIsPtr& element) { VisitElement(element); } void Visitor::VisitOverlay( const OverlayPtr& element) { VisitFeature(element); } void Visitor::VisitOverlayXY( const OverlayXYPtr& element) { VisitVec2(element); } void Visitor::VisitPair( const PairPtr& element) { VisitObject(element); } void Visitor::VisitPhotoOverlay( const PhotoOverlayPtr& element) { VisitOverlay(element); } void Visitor::VisitPlacemark( const PlacemarkPtr& element) { VisitFeature(element); } void Visitor::VisitPoint( const PointPtr& element) { VisitGeometry(element); } void Visitor::VisitPolyStyle( const PolyStylePtr& element) { VisitColorStyle(element); } void Visitor::VisitPolygon( const PolygonPtr& element) { VisitGeometry(element); } void Visitor::VisitRegion( const RegionPtr& element) { VisitObject(element); } void Visitor::VisitResourceMap( const ResourceMapPtr& element) { VisitObject(element); } void Visitor::VisitRotationXY( const RotationXYPtr& element) { VisitVec2(element); } void Visitor::VisitScale( const ScalePtr& element) { VisitObject(element); } void Visitor::VisitSchema( const SchemaPtr& element) { VisitObject(element); } void Visitor::VisitSchemaData( const SchemaDataPtr& element) { VisitObject(element); } void Visitor::VisitScreenOverlay( const ScreenOverlayPtr& element) { VisitOverlay(element); } void Visitor::VisitScreenXY( const ScreenXYPtr& element) { VisitVec2(element); } void Visitor::VisitSimpleData( const SimpleDataPtr& element) { VisitElement(element); } void Visitor::VisitSimpleField( const SimpleFieldPtr& element) { VisitElement(element); } void Visitor::VisitSize( const SizePtr& element) { VisitVec2(element); } void Visitor::VisitSnippet( const SnippetPtr& element) { VisitElement(element); } void Visitor::VisitStyle( const StylePtr& element) { VisitStyleSelector(element); } void Visitor::VisitStyleMap( const StyleMapPtr& element) { VisitStyleSelector(element); } void Visitor::VisitStyleSelector( const StyleSelectorPtr& element) { VisitObject(element); } void Visitor::VisitSubStyle( const SubStylePtr& element) { VisitObject(element); } void Visitor::VisitTimePrimitive( const TimePrimitivePtr& element) { VisitObject(element); } void Visitor::VisitTimeSpan( const TimeSpanPtr& element) { VisitTimePrimitive(element); } void Visitor::VisitTimeStamp( const TimeStampPtr& element) { VisitTimePrimitive(element); } void Visitor::VisitUpdate( const UpdatePtr& element) { VisitElement(element); } void Visitor::VisitUpdateOperation( const UpdateOperationPtr& element) { VisitElement(element); } void Visitor::VisitUrl( const UrlPtr& element) { VisitAbstractLink(element); } void Visitor::VisitVec2( const Vec2Ptr& element) { VisitElement(element); } void Visitor::VisitViewVolume( const ViewVolumePtr& element) { VisitObject(element); } } // end namespace kmldom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/visitor.h������������������������������������������������������������������0000664�0000000�0000000�00000023641�12636032571�0017001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // WARNING: THE VISITOR API IMPLEMENTED IN THIS CLASS IS EXPERIMENTAL AND // SUBJECT TO CHANGE WITHOUT WARNING. #ifndef KML_DOM_VISITOR_H__ #define KML_DOM_VISITOR_H__ #include <vector> #include "kml/base/util.h" #include "kml/dom/kml_ptr.h" namespace kmldom { // A base class implementing a visitor for elements in a kml dom hierarchy. // This class should be extended to implement specific visitors by overriding // the approriate VisitXxx() methods. // // The Visitor base class will ensure that the expected visit methods are // invoked even if the element being visited is a sub-type of the element for // which VisitXxx() was overridden. For example, if VisitContainer() is // overridden by a subclass then it will be called for any Container elements // visited, such as Document or Folder. // // If you wish to visit an element for several types (for example Container and // Feature) using a single visitor, the sub-type visit methods should invoke // their parent class method: // // void MyVisitor::VisitContainer(const ContainerPtr& container) { // // do stuff // Visitor::VisitContainer(container); // calls VisitFeature() // } // // A visitation over an element hierarchy is controlled by a VisitorDriver // instance. The choice of driver can affect the order in which elements are // visited and it is up to the user to select an appropriate driver for their // needs. A visitor has no requirement to manage the visitation of its child // elements as this is handled by the chosen driver, although a visitor is free // to operate on its child elements directly if it so chooses. // // In typical usage processing an element hierarchy might look something like: // // const KmlPtr& root = GetRootElement(); // MyVisitor visitor(); // SimplePreorderDriver(visitor).Visit(root); // ProcessResults(visitor.GetResults()); // class Visitor { protected: Visitor(); public: virtual ~Visitor(); virtual void VisitElement(const ElementPtr& node); virtual void VisitAbstractLatLonBox( const AbstractLatLonBoxPtr& element); virtual void VisitAbstractLink( const AbstractLinkPtr& element); virtual void VisitAbstractView( const AbstractViewPtr& element); virtual void VisitAlias( const AliasPtr& element); virtual void VisitBalloonStyle( const BalloonStylePtr& element); virtual void VisitBasicLink( const BasicLinkPtr& element); virtual void VisitCamera( const CameraPtr& element); virtual void VisitChange( const ChangePtr& element); virtual void VisitColorStyle( const ColorStylePtr& element); virtual void VisitContainer( const ContainerPtr& element); virtual void VisitCoordinates( const CoordinatesPtr& element); virtual void VisitCreate( const CreatePtr& element); virtual void VisitData( const DataPtr& element); virtual void VisitDelete( const DeletePtr& element); virtual void VisitDocument( const DocumentPtr& element); virtual void VisitExtendedData( const ExtendedDataPtr& element); virtual void VisitFeature( const FeaturePtr& element); virtual void VisitField( const FieldPtr& element); virtual void VisitFolder( const FolderPtr& element); virtual void VisitGeometry( const GeometryPtr& element); virtual void VisitGroundOverlay( const GroundOverlayPtr& element); virtual void VisitGxAnimatedUpdate( const GxAnimatedUpdatePtr& element); virtual void VisitGxFlyTo( const GxFlyToPtr& element); virtual void VisitGxLatLonQuad( const GxLatLonQuadPtr& element); virtual void VisitGxMultiTrack( const GxMultiTrackPtr& element); virtual void VisitGxPlaylist( const GxPlaylistPtr& element); virtual void VisitGxSimpleArrayData( const GxSimpleArrayDataPtr& element); virtual void VisitGxSimpleArrayField( const GxSimpleArrayFieldPtr& element); virtual void VisitGxSoundCue( const GxSoundCuePtr& element); virtual void VisitGxTimeSpan( const GxTimeSpanPtr& element); virtual void VisitGxTimeStamp( const GxTimeStampPtr& element); virtual void VisitGxTour( const GxTourPtr& element); virtual void VisitGxTourControl( const GxTourControlPtr& element); virtual void VisitGxTourPrimitive( const GxTourPrimitivePtr& element); virtual void VisitGxTrack( const GxTrackPtr& element); virtual void VisitGxWait( const GxWaitPtr& element); virtual void VisitHotSpot( const HotSpotPtr& element); virtual void VisitIcon( const IconPtr& element); virtual void VisitIconStyle( const IconStylePtr& element); virtual void VisitIconStyleIcon( const IconStyleIconPtr& element); virtual void VisitImagePyramid( const ImagePyramidPtr& element); virtual void VisitInnerBoundaryIs( const InnerBoundaryIsPtr& element); virtual void VisitItemIcon( const ItemIconPtr& element); virtual void VisitKml( const KmlPtr& element); virtual void VisitLabelStyle( const LabelStylePtr& element); virtual void VisitLatLonAltBox( const LatLonAltBoxPtr& element); virtual void VisitLatLonBox( const LatLonBoxPtr& element); virtual void VisitLineString( const LineStringPtr& element); virtual void VisitLineStyle( const LineStylePtr& element); virtual void VisitLinearRing( const LinearRingPtr& element); virtual void VisitLink( const LinkPtr& element); virtual void VisitLinkSnippet( const LinkSnippetPtr& element); virtual void VisitListStyle( const ListStylePtr& element); virtual void VisitLocation( const LocationPtr& element); virtual void VisitLod( const LodPtr& element); virtual void VisitLookAt( const LookAtPtr& element); virtual void VisitMetadata( const MetadataPtr& element); virtual void VisitModel( const ModelPtr& element); virtual void VisitMultiGeometry( const MultiGeometryPtr& element); virtual void VisitNetworkLink( const NetworkLinkPtr& element); virtual void VisitNetworkLinkControl( const NetworkLinkControlPtr& element); virtual void VisitObject( const ObjectPtr& element); virtual void VisitOrientation( const OrientationPtr& element); virtual void VisitOuterBoundaryIs( const OuterBoundaryIsPtr& element); virtual void VisitOverlay( const OverlayPtr& element); virtual void VisitOverlayXY( const OverlayXYPtr& element); virtual void VisitPair( const PairPtr& element); virtual void VisitPhotoOverlay( const PhotoOverlayPtr& element); virtual void VisitPlacemark( const PlacemarkPtr& element); virtual void VisitPoint( const PointPtr& element); virtual void VisitPolyStyle( const PolyStylePtr& element); virtual void VisitPolygon( const PolygonPtr& element); virtual void VisitRegion( const RegionPtr& element); virtual void VisitResourceMap( const ResourceMapPtr& element); virtual void VisitRotationXY( const RotationXYPtr& element); virtual void VisitScale( const ScalePtr& element); virtual void VisitSchema( const SchemaPtr& element); virtual void VisitSchemaData( const SchemaDataPtr& element); virtual void VisitScreenOverlay( const ScreenOverlayPtr& element); virtual void VisitScreenXY( const ScreenXYPtr& element); virtual void VisitSimpleData( const SimpleDataPtr& element); virtual void VisitSimpleField( const SimpleFieldPtr& element); virtual void VisitSize( const SizePtr& element); virtual void VisitSnippet( const SnippetPtr& element); virtual void VisitStyle( const StylePtr& element); virtual void VisitStyleMap( const StyleMapPtr& element); virtual void VisitStyleSelector( const StyleSelectorPtr& element); virtual void VisitSubStyle( const SubStylePtr& element); virtual void VisitTimePrimitive( const TimePrimitivePtr& element); virtual void VisitTimeSpan( const TimeSpanPtr& element); virtual void VisitTimeStamp( const TimeStampPtr& element); virtual void VisitUpdate( const UpdatePtr& element); virtual void VisitUpdateOperation( const UpdateOperationPtr& element); virtual void VisitUrl( const UrlPtr& element); virtual void VisitVec2( const Vec2Ptr& element); virtual void VisitViewVolume( const ViewVolumePtr& element); LIBKML_DISALLOW_EVIL_CONSTRUCTORS(Visitor); }; } // end namespace kmldom #endif // KML_DOM_VISITOR_H__ �����������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/visitor_driver.cc����������������������������������������������������������0000664�0000000�0000000�00000004501�12636032571�0020504�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // WARNING: THE VISITOR API IMPLEMENTED IN THIS CLASS IS EXPERIMENTAL AND // SUBJECT TO CHANGE WITHOUT WARNING. #include "kml/dom/visitor.h" #include "kml/dom/kmldom.h" #include "kml/dom/kml_cast.h" namespace kmldom { VisitorDriver::VisitorDriver() { } VisitorDriver::~VisitorDriver() { } SimplePreorderDriver::SimplePreorderDriver(Visitor* visitor) : visitor_(visitor) { } SimplePreorderDriver::~SimplePreorderDriver() { } void SimplePreorderDriver::Visit(const ElementPtr& element) { element->Accept(visitor_); element->AcceptChildren(this); } SimplePostorderDriver::SimplePostorderDriver(Visitor* visitor) : visitor_(visitor) { } SimplePostorderDriver::~SimplePostorderDriver() { } void SimplePostorderDriver::Visit(const ElementPtr& element) { element->AcceptChildren(this); element->Accept(visitor_); } } // namespace kmldom �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/visitor_driver.h�����������������������������������������������������������0000664�0000000�0000000�00000007570�12636032571�0020357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // WARNING: THE VISITOR API IMPLEMENTED IN THIS CLASS IS EXPERIMENTAL AND // SUBJECT TO CHANGE WITHOUT WARNING. #ifndef KML_DOM_VISITOR_DRIVER_H__ #define KML_DOM_VISITOR_DRIVER_H__ #include "kml/base/util.h" #include "kml/dom/kml_ptr.h" #include "kml/dom/visitor.h" namespace kmldom { // A visitor driver controls the flow of a visitation over the dom element // hierarchy. There is typically expected to be only a single driver for each // visitation and currently there is not concept of chaining drivers (though // visitors themselves could be chained within a single 'multi driver'). class VisitorDriver { protected: VisitorDriver(); virtual ~VisitorDriver(); public: // Handles the visitation of the subtree of elements rooted at the given // element. This method is invoked either by the user to initiate a visitation // or in response to a call to AcceptChildren() for an element. // // Typically when a driver visits an element it will, in some order: // - call accept() on the given element for some set of visitors // - call acceptChildren() on the given element, passing itself // However there is no requirement that either of these actually occur and // the driver is free to implement whatever semantics it chooses. virtual void Visit(const ElementPtr& element) = 0; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(VisitorDriver); }; // A simple driver implementation that invokes a single visitor in pre-order // traversal of an element hierarchy. The visitor will visit each element in a // hierarchy before that element's children are visited. class SimplePreorderDriver : public VisitorDriver { public: explicit SimplePreorderDriver(Visitor* visitor); virtual ~SimplePreorderDriver(); virtual void Visit(const ElementPtr& element); private: Visitor* visitor_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(SimplePreorderDriver); }; // A simple driver implementation that invokes a single visitor in post-order // traversal of an element hierarchy. The visitor will visit each element in a // hierarchy after that element's children have been visited. class SimplePostorderDriver : public VisitorDriver { public: explicit SimplePostorderDriver(Visitor* visitor); virtual ~SimplePostorderDriver(); virtual void Visit(const ElementPtr& element); private: Visitor* visitor_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(SimplePostorderDriver); }; } // namespace kmldom #endif // KML_DOM_VISITOR_DRIVER_H__ ����������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/xal.cc���������������������������������������������������������������������0000664�0000000�0000000�00000017462�12636032571�0016230�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the <xal:AddressDetails> elements. // TODO: handle <xs:choice> better. #include "kml/dom/xal.h" #include "kml/base/attributes.h" #include "kml/dom/kml_cast.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; namespace kmldom { // <xal:AddressDetails> XalAddressDetails::XalAddressDetails() { set_xmlns(kmlbase::XMLNS_XAL); } void XalAddressDetails::AddElement(const ElementPtr& element) { if (!element) { return; } switch(element->Type()) { case Type_XalCountry: set_country(AsXalCountry(element)); break; default: Element::AddElement(element); } } void XalAddressDetails::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); // <xal:Country> if (has_country()) { serializer.SaveElement(get_country()); } } // <xal:AdministrativeArea> XalAdministrativeArea::XalAdministrativeArea() : has_administrativeareaname_(false) { set_xmlns(kmlbase::XMLNS_XAL); } void XalAdministrativeArea::AddElement(const ElementPtr& element) { if (!element) { return; } switch(element->Type()) { case Type_xalAdministrativeAreaName: has_administrativeareaname_ = element->SetString(&administrativeareaname_); break; case Type_XalLocality: set_locality(AsXalLocality(element)); break; case Type_XalSubAdministrativeArea: set_subadministrativearea(AsXalSubAdministrativeArea(element)); break; default: Element::AddElement(element); } } void XalAdministrativeArea::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); if (has_administrativeareaname()) { serializer.SaveFieldById(Type_xalAdministrativeAreaName, get_administrativeareaname()); } if (has_locality()) { serializer.SaveElement(get_locality()); } if (has_subadministrativearea()) { serializer.SaveElement(get_subadministrativearea()); } } // <xal:Country> XalCountry::XalCountry() : has_countrynamecode_(false) { set_xmlns(kmlbase::XMLNS_XAL); } void XalCountry::AddElement(const ElementPtr& element) { if (!element) { return; } switch(element->Type()) { case Type_xalCountryNameCode: has_countrynamecode_ = element->SetString(&countrynamecode_); break; case Type_XalAdministrativeArea: set_administrativearea(AsXalAdministrativeArea(element)); break; default: Element::AddElement(element); } } void XalCountry::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); // <xal:CountryNameCode> if (has_countrynamecode()) { serializer.SaveFieldById(Type_xalCountryNameCode, get_countrynamecode()); } // <xal:AdministrativeArea> if (has_administrativearea()) { serializer.SaveElement(get_administrativearea()); } } // <xal:Locality> XalLocality::XalLocality() : has_localityname_(false) { set_xmlns(kmlbase::XMLNS_XAL); } void XalLocality::AddElement(const ElementPtr& element) { if (!element) { return; } switch(element->Type()) { case Type_xalLocalityName: has_localityname_ = element->SetString(&localityname_); break; case Type_XalPostalCode: set_postalcode(AsXalPostalCode(element)); break; case Type_XalThoroughfare: set_thoroughfare(AsXalThoroughfare(element)); break; default: Element::AddElement(element); break; } } void XalLocality::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); if (has_thoroughfare()) { serializer.SaveElement(get_thoroughfare()); } if (has_postalcode()) { serializer.SaveElement(get_postalcode()); } } // <xal:PostalCode> XalPostalCode::XalPostalCode() : has_postalcodenumber_(false) { set_xmlns(kmlbase::XMLNS_XAL); } void XalPostalCode::AddElement(const ElementPtr& element) { if (!element) { return; } switch(element->Type()) { case Type_xalPostalCodeNumber: has_postalcodenumber_ = element->SetString(&postalcodenumber_); break; default: Element::AddElement(element); break; } } void XalPostalCode::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); if (has_postalcodenumber()) { serializer.SaveFieldById(Type_xalPostalCodeNumber, get_postalcodenumber()); } } // <xal:SubAdministrativeArea> XalSubAdministrativeArea::XalSubAdministrativeArea() : has_subadministrativeareaname_(false) { set_xmlns(kmlbase::XMLNS_XAL); } void XalSubAdministrativeArea::AddElement(const ElementPtr& element) { if (!element) { return; } switch(element->Type()) { case Type_xalSubAdministrativeAreaName: has_subadministrativeareaname_ = element->SetString(&subadministrativeareaname_); break; case Type_XalLocality: set_locality(AsXalLocality(element)); break; default: Element::AddElement(element); } } void XalSubAdministrativeArea::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); if (has_subadministrativeareaname()) { serializer.SaveFieldById(Type_xalSubAdministrativeAreaName, get_subadministrativeareaname()); } if (has_locality()) { serializer.SaveElement(get_locality()); } } // <xal:Thoroughfare> XalThoroughfare::XalThoroughfare() : has_thoroughfarename_(false), has_thoroughfarenumber_(false) { set_xmlns(kmlbase::XMLNS_XAL); } void XalThoroughfare::AddElement(const ElementPtr& element) { if (!element) { return; } switch(element->Type()) { case Type_xalThoroughfareName: has_thoroughfarename_ = element->SetString(&thoroughfarename_); break; case Type_xalThoroughfareNumber: has_thoroughfarenumber_ = element->SetString(&thoroughfarenumber_); break; default: Element::AddElement(element); break; } } void XalThoroughfare::Serialize(Serializer& serializer) const { ElementSerializer element_serializer(*this, serializer); if (has_thoroughfarenumber()) { serializer.SaveFieldById(Type_xalThoroughfareNumber, get_thoroughfarenumber()); } if (has_thoroughfarename()) { serializer.SaveFieldById(Type_xalThoroughfareName, get_thoroughfarename()); } } } // end namespace kmldom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/xal.h����������������������������������������������������������������������0000664�0000000�0000000�00000025725�12636032571�0016073�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the <xal:AddressDetails> elements. // Note, only a subset of XAL using these elements is implemented here. // However, note that the normal unknown/misplaced element handling of libkml // is employed thus all of XAL is preserved on parse and emitted on // serialization. The portion implemented here pertains to programmatic // dom access. // // xAL complex elements: // <xal:AddressDetails> // <xal:AdministrativeArea> // <xal:Country> // <xal:Locality> // <xal:PostalCode> // <xal:SubAdministrativeArea> // <xal:Thoroughfare> // // xAL simple elements: // <xal:AdministrativeAreaName> // <xal:CountryNameCode> // <xal:LocalityName> // <xal:PostalCodeNumber> // <xal:SubAdministrativeAreaName> // <xal:ThoroughfareName> // <xal:ThoroughfareNumber> #ifndef KML_DOM_XAL_H__ #define KML_DOM_XAL_H__ #include "kml/dom/element.h" #include "kml/base/attributes.h" namespace kmldom { // <xal:AddressDetails> class XalAddressDetails : public BasicElement<Type_XalAddressDetails> { public: virtual ~XalAddressDetails() {} // <xal:Country> const XalCountryPtr& get_country() const { return country_; } bool has_country() const { return country_ != NULL; } void set_country(const XalCountryPtr& country) { SetComplexChild(country, &country_); } void clear_country() { set_country(NULL); } private: XalAddressDetails(); XalCountryPtr country_; friend class KmlFactory; friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; }; // <xal:AdministrativeArea> class XalAdministrativeArea : public BasicElement<Type_XalAdministrativeArea> { public: virtual ~XalAdministrativeArea() {} // <xal:AdministrativeAreaName> const string& get_administrativeareaname() const { return administrativeareaname_; } bool has_administrativeareaname() const { return has_administrativeareaname_; } void set_administrativeareaname(const string& value) { administrativeareaname_ = value; has_administrativeareaname_ = true; } void clear_administrativeareaname() { administrativeareaname_.clear(); has_administrativeareaname_ = false; } // <xal:Locality> const XalLocalityPtr& get_locality() const { return locality_; } bool has_locality() const { return locality_ != NULL; } void set_locality(const XalLocalityPtr& locality) { SetComplexChild(locality, &locality_); } void clear_locality() { set_locality(NULL); } // <xal:SubAdministrativeArea> const XalSubAdministrativeAreaPtr& get_subadministrativearea() const { return subadministrativearea_; } bool has_subadministrativearea() const { return subadministrativearea_ != NULL; } void set_subadministrativearea( const XalSubAdministrativeAreaPtr& subadministrativearea) { SetComplexChild(subadministrativearea, &subadministrativearea_); } void clear_subadministrativearea() { set_subadministrativearea(NULL); } private: XalAdministrativeArea(); bool has_administrativeareaname_; string administrativeareaname_; XalLocalityPtr locality_; XalSubAdministrativeAreaPtr subadministrativearea_; friend class KmlFactory; friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; }; // <xal:Country> class XalCountry : public BasicElement<Type_XalCountry> { public: virtual ~XalCountry() {} // <xal:CountryNameCode>, ISO 3166-1 const string& get_countrynamecode() const { return countrynamecode_; } bool has_countrynamecode() const { return has_countrynamecode_; } void set_countrynamecode(const string& value) { countrynamecode_ = value; has_countrynamecode_ = true; } void clear_countrynamecode() { countrynamecode_.clear(); has_countrynamecode_ = false; } // <xal:AdministrativeArea> const XalAdministrativeAreaPtr& get_administrativearea() const { return administrativearea_; } bool has_administrativearea() const { return administrativearea_ != NULL; } void set_administrativearea( const XalAdministrativeAreaPtr& administrativearea) { SetComplexChild(administrativearea, &administrativearea_); } void clear_administrativearea() { set_administrativearea(NULL); } private: XalCountry(); bool has_countrynamecode_; string countrynamecode_; XalAdministrativeAreaPtr administrativearea_; friend class KmlFactory; friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(XalCountry); }; // <xal:Locality> class XalLocality : public BasicElement<Type_XalLocality> { public: virtual ~XalLocality() {} // <xal:LocalityName> const string& get_localityname() const { return localityname_; } bool has_localityname() const { return has_localityname_; } void set_localityname(const string& value) { localityname_ = value; has_localityname_ = true; } void clear_localityname() { localityname_.clear(); has_localityname_ = false; } // <xal:Thoroughfare> const XalThoroughfarePtr& get_thoroughfare() const { return thoroughfare_; } bool has_thoroughfare() const { return thoroughfare_ != NULL; } void set_thoroughfare(const XalThoroughfarePtr& thoroughfare) { SetComplexChild(thoroughfare, &thoroughfare_); } void clear_thoroughfare() { set_thoroughfare(NULL); } // <xal:PostalCode> const XalPostalCodePtr& get_postalcode() const { return postalcode_; } bool has_postalcode() const { return postalcode_ != NULL; } void set_postalcode(const XalPostalCodePtr& postalcode) { SetComplexChild(postalcode, &postalcode_); } void clear_postalcode() { set_postalcode(NULL); } private: XalLocality(); bool has_localityname_; string localityname_; XalThoroughfarePtr thoroughfare_; XalPostalCodePtr postalcode_; friend class KmlFactory; friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; }; // <xal:PostalCode> class XalPostalCode : public BasicElement<Type_XalPostalCode> { public: virtual ~XalPostalCode() {} // <xal:PostalCodeNumber> const string& get_postalcodenumber() const { return postalcodenumber_; } bool has_postalcodenumber() const { return has_postalcodenumber_; } void set_postalcodenumber(const string& value) { postalcodenumber_ = value; has_postalcodenumber_ = true; } void clear_postalcodenumber() { postalcodenumber_.clear(); has_postalcodenumber_ = false; } private: XalPostalCode(); bool has_postalcodenumber_; string postalcodenumber_; friend class KmlFactory; friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; }; // <xal:SubAdministrativeArea> class XalSubAdministrativeArea : public BasicElement<Type_XalSubAdministrativeArea> { public: virtual ~XalSubAdministrativeArea() {} // <xal:SubAdministrativeAreaName> const string& get_subadministrativeareaname() const { return subadministrativeareaname_; } bool has_subadministrativeareaname() const { return has_subadministrativeareaname_; } void set_subadministrativeareaname(const string& value) { subadministrativeareaname_ = value; has_subadministrativeareaname_ = true; } void clear_subadministrativeareaname() { subadministrativeareaname_.clear(); has_subadministrativeareaname_ = false; } // <xal:Locality> const XalLocalityPtr& get_locality() const { return locality_; } bool has_locality() const { return locality_ != NULL; } void set_locality(const XalLocalityPtr& locality) { SetComplexChild(locality, &locality_); } void clear_locality() { set_locality(NULL); } private: XalSubAdministrativeArea(); bool has_subadministrativeareaname_; string subadministrativeareaname_; XalLocalityPtr locality_; friend class KmlFactory; friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; }; // <xal:Thoroughfare> class XalThoroughfare : public BasicElement<Type_XalThoroughfare> { public: virtual ~XalThoroughfare() {} // <xal:ThoroughfareName> const string& get_thoroughfarename() const { return thoroughfarename_; } bool has_thoroughfarename() const { return has_thoroughfarename_; } void set_thoroughfarename(const string& value) { thoroughfarename_ = value; has_thoroughfarename_ = true; } void clear_thoroughfarename() { thoroughfarename_.clear(); has_thoroughfarename_ = false; } // <xal:ThoroughfareNumber> const string& get_thoroughfarenumber() const { return thoroughfarenumber_; } bool has_thoroughfarenumber() const { return has_thoroughfarenumber_; } void set_thoroughfarenumber(const string& value) { thoroughfarenumber_ = value; has_thoroughfarenumber_ = true; } void clear_thoroughfarenumber() { thoroughfarenumber_.clear(); has_thoroughfarenumber_ = false; } private: XalThoroughfare(); bool has_thoroughfarename_; string thoroughfarename_; bool has_thoroughfarenumber_; string thoroughfarenumber_; friend class KmlFactory; friend class KmlHandler; virtual void AddElement(const ElementPtr& element); friend class Serializer; virtual void Serialize(Serializer& serializer) const; }; } // end namespace kmldom #endif // KML_DOM_XAL_H__ �������������������������������������������libkml-1.3.0/src/kml/dom/xml_serializer.cc����������������������������������������������������������0000664�0000000�0000000�00000005522�12636032571�0020467�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the public XML serializing // functions and the implementation of the XmlSerialize class. #include "kml/dom/xml_serializer.h" #include "kml/dom/kml_funcs.h" #include <cstring> #include <stack> #include <sstream> #include "kml/base/attributes.h" #include "kml/dom/element.h" #include "kml/dom/kml22.h" #include "kml/dom/kml_factory.h" #include "kml/dom/xsd.h" using kmlbase::Attributes; namespace kmldom { // This function is in the public API for converting the given Element // hierarchy to "pretty" xml. string SerializePretty(const ElementPtr& root) { if (!root) { return string(""); } string xml; StringAdapter string_adapter(&xml); XmlSerializer<StringAdapter> serializer("\n", " ", &string_adapter); root->Serialize(serializer); return xml; } // This function is in the public API for converting the given Element // hierarchy to xml with no additional whitespace for newlines or // indentation. string SerializeRaw(const ElementPtr& root) { if (!root) { return string(""); } string xml; StringAdapter string_adapter(&xml); XmlSerializer<StringAdapter> serializer("", "", &string_adapter); root->Serialize(serializer); return xml; } string GetElementName(const ElementPtr& element) { return element ? Xsd::GetSchema()->ElementName(element->Type()) : string(""); } } // namespace kmldom ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/xml_serializer.h�����������������������������������������������������������0000664�0000000�0000000�00000017624�12636032571�0020337�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the internal XmlSerializer class. // NOTE: This class is internal to libkml and is not intended for use in // client code outside libkml. #ifndef KML_DOM_XML_SERIALIZER_H__ #define KML_DOM_XML_SERIALIZER_H__ #include <ostream> #include <stack> #include <vector> #include "kml/base/attributes.h" #include "kml/base/vec3.h" #include "kml/dom/serializer.h" #include "kml/dom/xsd.h" #include "kml/dom.h" namespace kmldom { // A poor man's std::ostringstream. Note that this uses a non-namespace // qualified string. See base/util.h for more info about string vs std::string. class StringAdapter { public: StringAdapter(string* str) : str_(str) { } void write(const char* s, size_t n) { str_->append(s, n); } void put(char c) { str_->append(1, c); } private: string* str_; }; // T should match this signature: // class T { // public: // void write(const char*, size_t); // void put(char c); // }; // C++ std::ostream matches T template<class T> class XmlSerializer : public Serializer { public: static void Serialize(const ElementPtr& root, const char* newline, const char* indent, T* output) { if (!root || !newline || !indent || !output) { return; } boost::scoped_ptr<XmlSerializer> xml_ostream_serializer( new XmlSerializer(newline, indent, output)); root->Serialize(*xml_ostream_serializer); } // Construct a serializer with the given strings for line breaks and // indentation. The indent string is used once for each level of // indentation. For no line break and/or indent whitespace use "". This is // primarily for unit testing. Use SerializePrettyToBase whenever // possible. Use kmldom::SerializeToBase() external client code. XmlSerializer(const char* newline, const char* indent, T* output) : newline_(newline), indent_(indent), output_(output), start_pending_(false) { } virtual ~XmlSerializer() {} // Emit the start tag of the given element: <Placemark id="pm123">. virtual void BeginById(int type_id, const kmlbase::Attributes& attributes) { // Here we just record the element we're starting and its attributes if // it has any. The "<TAGNAME [name="VAL" ...]..." are not emmited until // it is known if this is a nil element or not. EmitStart(false); Indent(); tag_stack_.push(type_id); // So we know what tag to use in End(). if (attributes.GetSize() > 0) { // TODO: Attributes::SerializeToBase would be handy. attributes.Serialize(&serialized_attributes_); } start_pending_ = true; } // Emit the end tag of the given element: </Placemark>. virtual void End() { int type_id = tag_stack_.top(); // TODO: make this less fiddly if (EmitStart(true)) { tag_stack_.pop(); } else { tag_stack_.pop(); Indent(); output_->write("</", 2); const string& tag_name = xsd_.ElementName(type_id); output_->write(tag_name.data(), tag_name.size()); output_->put('>'); Newline(); } } // Emit the XML for the field of the given type with the given content // as its character data. If value is empty a nil element is emitted. virtual void SaveStringFieldById(int type_id, string value) { EmitStart(false); Indent(); const string& tag_name = xsd_.ElementName(type_id); output_->put('<'); output_->write(tag_name.data(), tag_name.size()); if (value.empty()) { // Special case to emit <TAGNAME/> output_->put('/'); } else { // <TAGNAME>VALUE</TAGNAME> output_->put('>'); WriteQuoted(value); output_->write("</", 2); output_->write(tag_name.data(), tag_name.size()); } output_->put('>'); Newline(); } // Save out character data. virtual void SaveContent(const string& content, bool maybe_quote) { EmitStart(false); if (maybe_quote) { WriteQuoted(content); } else { output_->write(content.data(), content.size()); } } // Save a lon,lat,alt tuple as appears within <coordinates>. virtual void SaveVec3(const kmlbase::Vec3& vec3) { EmitStart(false); Indent(); string val = kmlbase::ToString(vec3.get_longitude()); output_->write(val.data(), val.size()); output_->put(','); val = kmlbase::ToString(vec3.get_latitude()); output_->write(val.data(), val.size()); // Ideally, we'd only emit if vec3.has_altitude(), but lots of test cases // expect lon,lat,0 output_->put(','); val = kmlbase::ToString(vec3.get_altitude()); output_->write(val.data(), val.size()); // In libkml 1.2 a "\n" was baked into Serializer::SaveVec3. We emit an // explicit "\n" for compatibility instead of calling Newline() because // Newline() could be an empty string which would effectively concatenate // coordinates items in SerializeRaw. if (newline_.empty()) { output_->write("\n", 1); } else { Newline(); } } // Save a Color32 value as its AABBGGRR representation. virtual void SaveColor(int type_id, const kmlbase::Color32& color) { EmitStart(false); SaveFieldById(type_id, color.to_string_abgr()); } // Emit one level of indentation. virtual void Indent() { if (!indent_.empty()) { size_t depth = tag_stack_.size(); while (depth--) { output_->write(indent_.data(), indent_.size()); } } } private: // Emit a line break. void Newline() { if (!newline_.empty()) { output_->write(newline_.data(), newline_.size()); } } // Emit quoted. See Serializer::MaybeQuoteString(). void WriteQuoted(const string& value) { string quoted = MaybeQuoteString(value); output_->write(quoted.data(), quoted.size()); } bool EmitStart(bool is_nil) { if (!start_pending_) { return false; } output_->put('<'); const string& tag_name = xsd_.ElementName(tag_stack_.top()); output_->write(tag_name.data(), tag_name.size()); if (!serialized_attributes_.empty()) { output_->write(serialized_attributes_.data(), serialized_attributes_.size()); serialized_attributes_.clear(); } if (is_nil) { output_->write("/>", 2); } else { output_->put('>'); } Newline(); start_pending_ = false; return true; } const string newline_; const string indent_; T* output_; std::stack<int> tag_stack_; bool start_pending_; string serialized_attributes_; }; } // end namespace kmldom #endif // KML_DOM_XML_SERIALIZER_H__ ������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/xsd.cc���������������������������������������������������������������������0000664�0000000�0000000�00000007512�12636032571�0016235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file implements the internal Xsd class specifically for KML 2.2. #include "kml/dom/xsd.h" #include "kml/dom/kml22.h" #include "kml/dom/kml22.cc" namespace kmldom { Xsd* Xsd::schema_ = NULL; Xsd* Xsd::GetSchema() { if (schema_ == NULL) { schema_ = new Xsd; } return schema_; } Xsd::Xsd() { for (int i = 0; i < Type_Invalid; ++i) { tag_to_id[kKml22Elements[i].element_name_] = i; } } int Xsd::ElementId(const string& element_name) const { tag_id_map_t::const_iterator iter = tag_to_id.find(element_name); if (iter == tag_to_id.end()) { return Type_Unknown; } return iter->second; } static bool is_valid(int id) { return id > Type_Unknown && id < Type_Invalid; } string Xsd::ElementName(int id) const { if (!is_valid(id)) { return string(); } // This is the other side of the wart found in KmlHandler::StartElement. // TODO: factor this and kKml22 out of Xsd. if (id == Type_IconStyleIcon) { return "Icon"; } XsdElement element = kKml22Elements[id]; return element.element_name_; } XsdType Xsd::ElementType(int id) const { if (!is_valid(id)) { return XSD_UNKNOWN; } XsdElement element = kKml22Elements[id]; return element.xsd_type_; } int Xsd::EnumId(int type_id, string enum_value) const { const int size = sizeof(kKml22Enums)/sizeof(XsdSimpleTypeEnum); for (int i = 0; i < size ; ++i) { if (kKml22Enums[i].type_id == type_id) { for (const char** enum_value_item = kKml22Enums[i].enum_value_list; *enum_value_item; ++enum_value_item) { if (*enum_value_item == enum_value) { // enum id is simple offset into enum_value_list; return static_cast<int>(enum_value_item - kKml22Enums[i].enum_value_list); } } } } // KML fully ignores the whole element if the enum value is unknown. Thus, // <altitudeMode>somethingNew</altitudeMode> is effectively // <altitudeMode>clampToGround</altitudeMode> given // that clampToGround is the default for <altitudeMode>. return -1; } string Xsd::EnumValue(int type_id, int enum_id) const { if (enum_id < 0) { return string(); } const int size = sizeof(kKml22Enums)/sizeof(XsdSimpleTypeEnum); for (int i = 0; i < size; ++i) { if (kKml22Enums[i].type_id == type_id) { return kKml22Enums[i].enum_value_list[enum_id]; } } return string(); } } // end namespace kmldom ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/dom/xsd.h����������������������������������������������������������������������0000664�0000000�0000000�00000010076�12636032571�0016076�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file declares the internal Xsd class which holds some of the // information in the KML XSD. There are three main users of the Xsd class: // 1) the parser for mapping names to ids, 2) the dom for mapping ids // to classes, and 3) the serializer for mapping ids back to names. #ifndef KML_XSD_XSD_H__ #define KML_XSD_XSD_H__ #include <map> #include "kml/base/util.h" namespace kmldom { enum XsdType { XSD_SIMPLE_TYPE, XSD_COMPLEX_TYPE, XSD_UNKNOWN }; // This represents an XSD <element>. // For example: // <element name="name" type="string"/> // If the type is fundamental then xsd_type_t is XSD_SIMPLE_TYPE // Enumerations are considered simple. // Or: // <element name="Placemark" type="kml:PlacemarkType" // substitutionGroup="kml:AbstractFeatureGroup"/> // If the type is no fundamental then xsd_type_t is XSD_COMPLEX_TYPE struct XsdElement { const char* element_name_; // <element name="element_name_" ... /> XsdType xsd_type_; // <element ... type="simple-or-complex" /> }; // This respresents an XSD <simpleType> with <restriction base="string"> // and <enumeration> children. For example: // <simpleType name="altitudeModeEnumType"> // <restriction base="string"> // <enumeration value="clampToGround"/> // <enumeration value="relativeToGround"/> // <enumeration value="absolute"/> // </restriction> // </simpleType> // KML's use of XSD offers an opportunity for simplification: there is // a 1:1 mapping between the element name and the type. That is, altitudeMode // is the only element of type altitudeModeEnumType and vice versa. struct XsdSimpleTypeEnum { // Yes, this is the element of this type not the type itself int type_id; const char** enum_value_list; // Value of value attribute. }; typedef std::map<string,int> tag_id_map_t; // This a 0.1 C++ version of the information in the KML XSD. // At present it is just the list of elements. Each element has a name, // libkml-specific id, and type info (simple vs complex). class Xsd { public: static Xsd* GetSchema(); // Essentially the API to the global <element>'s int ElementId(const string& name) const; XsdType ElementType(int id) const; string ElementName(int id) const; // Return the id of the given enum string for the given enum element. int EnumId(int type_id, string enum_value) const; // Return the enum string for the given enum id for the given enum element. string EnumValue(int type_id, int enum_id) const; private: Xsd(); static Xsd* schema_; tag_id_map_t tag_to_id; std::map<int,XsdElement> id_to_string; }; } // end namespace kmldom #endif // KML_XSD_XSD_H__ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine.h�����������������������������������������������������������������������0000664�0000000�0000000�00000005172�12636032571�0015767�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This is the main include file for the KMLENGINE library. Clients of // kmlengine should include only this header file. #ifndef KML_ENGINE_H__ #define KML_ENGINE_H__ #include "kml/engine/bbox.h" #include "kml/engine/clone.h" #include "kml/engine/engine_types.h" #include "kml/engine/entity_mapper.h" #include "kml/engine/feature_balloon.h" #include "kml/engine/feature_view.h" #include "kml/engine/feature_visitor.h" #include "kml/engine/find.h" #include "kml/engine/find_xml_namespaces.h" #include "kml/engine/get_links.h" #include "kml/engine/href.h" #include "kml/engine/id_mapper.h" #include "kml/engine/kml_cache.h" #include "kml/engine/kml_file.h" #include "kml/engine/kml_stream.h" #include "kml/engine/kml_uri.h" #include "kml/engine/kmz_file.h" #include "kml/engine/link_util.h" #include "kml/engine/location_util.h" #include "kml/engine/merge.h" #include "kml/engine/object_id_parser_observer.h" #include "kml/engine/shared_style_parser_observer.h" #include "kml/engine/style_inliner.h" #include "kml/engine/style_merger.h" #include "kml/engine/style_resolver.h" #include "kml/engine/style_splitter.h" #include "kml/engine/update.h" #endif // KML_ENGINE_H__ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/������������������������������������������������������������������������0000775�0000000�0000000�00000000000�12636032571�0015611�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/CMakeLists.txt����������������������������������������������������������0000664�0000000�0000000�00000001244�12636032571�0020352�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������file(GLOB SRCS "*.cc" ) set(INCS bbox.h clone.h engine_types.h entity_mapper.h feature_balloon.h feature_view.h feature_visitor.h find.h find_xml_namespaces.h get_link_parents.h get_links.h href.h id_mapper.h kml_cache.h kml_file.h kml_stream.h kml_uri.h kmz_cache.h kmz_file.h link_util.h location_util.h merge.h object_id_parser_observer.h old_schema_parser_observer.h parse_old_schema.h schema_parser_observer.h shared_style_parser_observer.h style_inliner.h style_merger.h style_resolver.h style_splitter.h update.h) build_target( NAME kmlengine SRCS ${SRCS} INCS ${INCS} DEPENDS kmlbase;kmldom) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/bbox.h������������������������������������������������������������������0000664�0000000�0000000�00000014212�12636032571�0016714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the definition of the Bbox class. #ifndef KML_ENGINE_BBOX_H__ #define KML_ENGINE_BBOX_H__ namespace kmlengine { const double kMinLat = -180.0; const double kMaxLat = 180.0; const double kMinLon = -180.0; const double kMaxLon = 180.0; // This class maintains a simple geographic bounding box. Example usage: // Bbox bbox; // bbox.ExpandLatLon(lat, lon); // 0 or more times for a set of lat,lon. // // // Inquire some things about the bounding box: // double mid_lat, mid_lon; // bbox.GetCenter(&mid_lat, &mid_lon); // double north = bbox.get_north() // Same for s,e,w // bool contains = bbox.Contains(lat, lon); // // NOTE: There is no provision for the ante-meridian nor for the validity // of any latitude or longitude value. class Bbox { public: // Construct a default bounding box. The mininums and maximums are set such // that any valid latitude/longitude are handled properly. Bbox() : north_(kMinLat), south_(kMaxLat), east_(kMinLon), west_(kMaxLon) {} // Construct a bounding box of a given extent. There are no checks for // the validity of these parameters. Bbox(double north, double south, double east, double west) : north_(north), south_(south), east_(east), west_(west) {} // This aligns this Bbox within the quadtree specified down to the maximum // level specified. void AlignBbox(Bbox* qt, unsigned int max_depth) { if (!qt) { return; } double lat = qt->GetCenterLat(); double lon = qt->GetCenterLon(); if (ContainedByBox(qt->get_north(), lat, qt->get_east(), lon)) { qt->set_south(lat); qt->set_west(lon); } else if (ContainedByBox(qt->get_north(), lat, lon, qt->get_west())) { qt->set_south(lat); qt->set_east(lon); } else if (ContainedByBox(lat, qt->get_south(), qt->get_east(), lon)) { qt->set_north(lat); qt->set_west(lon); } else if (ContainedByBox(lat, qt->get_south(), lon, qt->get_west())) { qt->set_north(lat); qt->set_east(lon); } else { return; // target not contained by any child quadrant of qt. } // Fall through from above and recurse. if (max_depth > 0) { AlignBbox(qt, max_depth - 1); } } // This returns true if this Bbox is contained by the given Bbox. bool ContainedByBbox(const Bbox& b) const { return ContainedByBox(b.get_north(), b.get_south(), b.get_east(), b.get_west()); } // This returns true of this Bbox is contained with the given bounds. bool ContainedByBox(double north, double south, double east, double west) const { return north >= north_ && south <= south_ && east >= east_ && west <= west_; } // This returns true if the bbox contains the given latitude,longitude. bool Contains(double latitude, double longitude) const { return north_ >= latitude && south_ <= latitude && east_ >= longitude && west_ <= longitude; } // This expands this Bbox to contain the given Bbox. void ExpandFromBbox(const Bbox& bbox) { ExpandLatitude(bbox.get_north()); ExpandLatitude(bbox.get_south()); ExpandLongitude(bbox.get_east()); ExpandLongitude(bbox.get_west()); } // This expands the bounding box to include the given latitude. void ExpandLatitude(double latitude) { if (latitude > north_) { north_ = latitude; } if (latitude < south_) { south_ = latitude; } } // This expands the bounding box to include the given longitude. void ExpandLongitude(double longitude) { if (longitude > east_) { east_ = longitude; } if (longitude < west_) { west_ = longitude; } } // This expands the bounding box to include the given latitude and longitude. void ExpandLatLon(double latitude, double longitude) { ExpandLatitude(latitude); ExpandLongitude(longitude); } double get_north() const { return north_; } double get_south() const { return south_; } double get_east() const { return east_; } double get_west() const { return west_; } // This returns the center of the bounding box. void GetCenter(double* latitude, double* longitude) const { if (latitude) { *latitude = GetCenterLat(); } if (longitude) { *longitude = GetCenterLon(); } } double GetCenterLat() const { return (north_ + south_)/2.0; } double GetCenterLon() const { return (east_ + west_)/2.0; } void set_north(double n) { north_ = n; } void set_south(double s) { south_ = s; } void set_east(double e) { east_ = e; } void set_west(double w) { west_ = w; } private: double north_, south_, east_, west_; }; } // end namespace kmlengine #endif // KML_ENGINE_BBOX_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/clone.cc����������������������������������������������������������������0000664�0000000�0000000�00000015425�12636032571�0017227�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the Clone() function. #include "kml/engine/clone.h" #include <stack> #include "kml/dom/element.h" #include "kml/dom/geometry.h" #include "kml/dom/kml_factory.h" #include "kml/dom/serializer.h" namespace kmlbase { class Attributes; } using kmlbase::Attributes; using kmldom::CoordinatesPtr; using kmldom::ElementPtr; using kmldom::KmlFactory; using kmldom::KmlDomType; namespace kmlengine { // The ElementReplicator is a Serializer used by the Clone() function to walk // the entire hierarchy of the target element. Each field and child element // of each element is "serialized" to a new parallel instance using the same // methods used in the parser. This technique essentially mates the output // of the serializer to the input of the parser. class ElementReplicator : public kmldom::Serializer { public: ElementReplicator() : serializing_unknown_(false) { } virtual ~ElementReplicator() {} // Serializer::BeginById() is called at the start of a complex element. virtual void BeginById(int type_id, const Attributes& attributes) { KmlDomType id = static_cast<KmlDomType>(type_id); ElementPtr clone = KmlFactory::GetFactory()->CreateElementById(id); clone->ParseAttributes(attributes.Clone()); clone_stack_.push(clone); } // Serializer::End() is called at the end of a complex element. virtual void End() { // BeginById() always puts something on the stack so this is always safe. ElementPtr child = clone_stack_.top(); // This mimics the part of KmlHandler::EndElement() which special cases // those complex elements which have character data. // TODO: refactor the special-casing in KmlHandler::EndElement() such that // it can be used from here. Using child->AddElement(child) is dangerous. if (!char_data_.empty()) { child->set_char_data(char_data_); char_data_.clear(); // NOTE: This very much expects this to mean "parse yourself". If // this falls through to Element::AddChild() this will make the element // a child of itself by putting itself in the misplaced elements array. // TODO: see above TODO child->AddElement(child); } // Two or more items on the stack implies the top is a child to be added // to the parent above it on the stack. if (clone_stack_.size() > 1) { // Pop off the child. clone_stack_.pop(); // Parent is now the top item. clone_stack_.top()->AddElement(child); } } // Serializer::SaveStringFieldById() is called for each field. virtual void SaveStringFieldById(int type_id, string value) { KmlDomType id = static_cast<KmlDomType>(type_id); ElementPtr clone = KmlFactory::GetFactory()->CreateFieldById(id); clone->set_char_data(value); clone_stack_.top()->AddElement(clone); } // Detects if we're serializing the unknown elements array. We don't use // element_count here and instead rely on EndElementArray() to indicate the // end of the array. Begin/End are always paired and never nested. virtual void BeginElementArray(int type_id, size_t element_count) { if (type_id == kmldom::Type_Unknown) { serializing_unknown_ = true; } } // This is called after the last element of the given array. This brackets // the BeginElementArray() above. virtual void EndElementArray(int type_id) { if (type_id == kmldom::Type_Unknown) { serializing_unknown_ = false; } } // Serializer::SaveContent() is called for arbitrary character data. virtual void SaveContent(const string& content, bool maybe_quote) { // If this is an item in the unknown elements array do _not_ add it to // this element's raw char_data, add it correctly to the unknown element // array directly. if (serializing_unknown_) { if (clone_stack_.size() > 0) { clone_stack_.top()->AddUnknownElement(content); } } else { char_data_.append(content); } } // Serializer::SaveVec3() is called to save each <coordinates> tuple. virtual void SaveVec3(const kmlbase::Vec3& vec3) { if (CoordinatesPtr coordinates = AsCoordinates(clone_stack_.top())) { coordinates->add_vec3(vec3); } // else something is very wrong. } // Serializer::SaveColor() is called to save all Color32 values. virtual void SaveColor(int type_id, const kmlbase::Color32& color) { SaveFieldById(type_id, color.to_string_abgr()); } // Return the top of the stack which holds the root element. ElementPtr root() { if (clone_stack_.empty()) { return NULL; } return clone_stack_.top(); } private: // This stack operates akin to the stack in the parser. std::stack<ElementPtr> clone_stack_; string char_data_; // This flag indicates that we're serializing an array of unknown elements. // See BeginElementArray(), EndElementArray(), and SaveContent() above. bool serializing_unknown_; }; // Clone operates by "Serializing" the given element. The ElementReplicator // operates akin to the parser in that it maintains a stack of complex // elements created from the factory and sets fields and child elements // to the parent as they are completed. ElementPtr Clone(const ElementPtr& element) { if (!element) { return NULL; } ElementReplicator serializer; element->Serialize(serializer); return serializer.root(); } } // end namespace kmlengine �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/clone.h�����������������������������������������������������������������0000664�0000000�0000000�00000003554�12636032571�0017071�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the Clone() function. #ifndef KML_ENGINE_CLONE_H__ #define KML_ENGINE_CLONE_H__ #include "kml/dom.h" namespace kmlengine { // This returns a "deep" clone of the given element. All child elements and // fields are copied. kmldom::ElementPtr Clone(const kmldom::ElementPtr& element); } // end namespace kmlengine #endif // KML_ENGINE_CLONE_H__ ����������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/engine_constants.h������������������������������������������������������0000664�0000000�0000000�00000003771�12636032571�0021333�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file containts constants of the implementation of the KML Engine. #ifndef KML_ENGINE_ENGINE_CONSTANTS_H__ #define KML_ENGINE_ENGINE_CONSTANTS_H__ namespace kmlengine { // This is the maximum number of styleUrls followed in resolving a style // selector. Note: the KML standard specifies no such limit. This is used // primarily to inhibit infinite loops on styleUrls that are self referencing. const unsigned int kDefaultMaxNestedStyleUrls = 5; } // end namespace kmlengine #endif // KML_ENGINE_ENGINE_CONSTANTS_H__ �������libkml-1.3.0/src/kml/engine/engine_types.h����������������������������������������������������������0000664�0000000�0000000�00000004631�12636032571�0020457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file containts typedefs and declarations common within KML Engine. #ifndef KML_ENGINE_ENGINE_TYPES_H__ #define KML_ENGINE_ENGINE_TYPES_H__ #include <map> #include <vector> #include "kml/dom.h" namespace kmlengine { // This is a vector Elements used in a variety of places in the KML engine. typedef std::vector<kmldom::ElementPtr> ElementVector; // The SharedStyleParserObserver class uses this data structure to map the XML // id to a kmldom::StyleSelectorPtr. typedef std::map<string, kmldom::StyleSelectorPtr> SharedStyleMap; // The ObjectIdParserObserver class uses this data structure to map the XML // id to a kmldom::ObjectPtr. typedef std::map<string, kmldom::ObjectPtr> ObjectIdMap; // The SchemaParserObserver class uses this data structure to map the <Schema> // name= to a kmldom::SchemaPtr. typedef std::map<string, kmldom::SchemaPtr> SchemaNameMap; } // end namespace kmlengine #endif // KML_ENGINE_ENGINE_TYPES_H__ �������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/entity_mapper.cc��������������������������������������������������������0000664�0000000�0000000�00000020360�12636032571�0021001�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementatio of the EntityMapper class and the // CreateExpandedEntities function. #include "kml/engine/entity_mapper.h" #include "kml/dom/xsd.h" // TODO: should be Xsd class be public? #include "kml/engine/kml_uri.h" using kmlbase::StringMap; using kmlbase::StringPairVector; using kmldom::DataPtr; using kmldom::ExtendedDataPtr; using kmldom::FeaturePtr; using kmldom::SchemaDataPtr; using kmldom::SchemaPtr; using kmldom::SimpleDataPtr; using kmldom::SimpleFieldPtr; using kmldom::Xsd; namespace kmlengine { static const char kDisplayNamePfx[] = "/displayName"; EntityMapper::EntityMapper(const KmlFilePtr& kml_file, StringMap* string_map) : kml_file_(kml_file), entity_map_(string_map), alt_markup_map_(NULL) {} EntityMapper::EntityMapper(const KmlFilePtr& kml_file, StringMap* string_map, StringPairVector* alt_markup_map) : kml_file_(kml_file), entity_map_(string_map), alt_markup_map_(alt_markup_map) {} EntityMapper::~EntityMapper() {} void EntityMapper::GetEntityFields(const FeaturePtr& feature) { GatherObjectFields(feature); GatherFeatureFields(feature); GatherExtendedDataFields(feature); } // Private. void EntityMapper::GatherObjectFields(const FeaturePtr& feature) { // Object id="... if (feature->has_id()) { (*entity_map_)["id"] = feature->get_id(); // KMLDOM has no attr types. } // Object targetId="... if (feature->has_targetid()) { (*entity_map_)["targetId"] = feature->get_targetid(); } } // Private. // TODO: OGC KML 2.2 does not single out specific elements. Any simple field of // Feature, or any attribute, is an entity candidate. We could use a Serializer // specialization like FieldMerger to handle this for us. void EntityMapper::GatherFeatureFields(const FeaturePtr& feature) { // <name>... if (feature->has_name()) { (*entity_map_)[Xsd::GetSchema()->ElementName(kmldom::Type_name)] = feature->get_name(); } // <address>... if (feature->has_address()) { (*entity_map_)[Xsd::GetSchema()->ElementName(kmldom::Type_address)] = feature->get_address(); } // <Snippet>... if (feature->has_snippet()) { (*entity_map_)[Xsd::GetSchema()->ElementName(kmldom::Type_Snippet)] = feature->get_snippet()->get_text(); } // <description>... if (feature->has_description()) { (*entity_map_)[Xsd::GetSchema()->ElementName(kmldom::Type_description)] = feature->get_description(); } } // Private. void EntityMapper::GatherExtendedDataFields(const FeaturePtr& feature) { if (feature->has_extendeddata()) { ExtendedDataPtr ed = kmldom::AsExtendedData(feature->get_extendeddata()); for (size_t i = 0; i < ed->get_data_array_size(); ++i) { GatherDataFields(ed->get_data_array_at(i)); } for (size_t i = 0; i < ed->get_schemadata_array_size(); ++i) { GatherSchemaDataFields(ed->get_schemadata_array_at(i)); } } } // Private. void EntityMapper::GatherDataFields(const DataPtr& data) { // If <ExtendedData><Data name="..."><value>... if (data->has_name()) { (*entity_map_)[data->get_name()] = data->get_value(); // If <ExtendedData><Data name="..."><displayName>... if (data->has_displayname()) { (*entity_map_)[data->get_name() + kDisplayNamePfx] = data->get_displayname(); } } if (alt_markup_map_ && data->has_name()) { if (data->has_displayname()) { alt_markup_map_->push_back( std::make_pair(data->get_displayname(), data->get_value())); } else { alt_markup_map_->push_back( std::make_pair(data->get_name(), data->get_value())); } } } // Private. void EntityMapper::GatherSchemaDataFields(const SchemaDataPtr& schemadata) { // We need to take the schemaUrl and find the <Schema> with that id. schemadata_prefix_ = "/"; if (schemadata->has_schemaurl()) { // We need to get the name= attr of the <Schema> with the id= attr that // matches this schemaUrl. string schema_id; if (SplitUriFragment(schemadata->get_schemaurl(), &schema_id)) { SchemaPtr schema = kmldom::AsSchema(kml_file_->GetObjectById(schema_id)); if (schema) { // Now walk all SimpleFields in schema building concatenations of // Schema_name/SimpleField_name/displayName (if we have displayName). for (size_t i = 0; i < schema->get_simplefield_array_size(); ++i) { GatherSimpleFieldFields(schema->get_simplefield_array_at(i), schema); } schemadata_prefix_ = schema->get_name() + schemadata_prefix_; if (alt_markup_map_) { PopulateSimpleFieldNameMap(schema); } } } } // Iterate over any SimpleData elements in SchemaData. for (size_t i = 0; i < schemadata->get_simpledata_array_size(); ++i) { GatherSimpleDataFields(schemadata->get_simpledata_array_at(i)); } } // Private. void EntityMapper::GatherSimpleFieldFields(const SimpleFieldPtr& simplefield, const SchemaPtr& schema) { if (simplefield->has_name() && simplefield->has_displayname()) { (*entity_map_)[schema->get_name() + "/" + simplefield->get_name() + kDisplayNamePfx] = simplefield->get_displayname(); } } // Private. void EntityMapper::GatherSimpleDataFields(const SimpleDataPtr& simpledata) { if (simpledata->has_name()) { // Required. (*entity_map_)[schemadata_prefix_ + simpledata->get_name()] = simpledata->get_text(); } // If there is a schemaUrl, the names we will use for display are in // the populated map. If there isn't, the map is empty and we'll use the // name attr of the SimpleData element. if (alt_markup_map_) { if (simplefield_name_map_.empty()) { alt_markup_map_->push_back( std::make_pair(simpledata->get_name(), simpledata->get_text())); } else { alt_markup_map_->push_back( std::make_pair(simplefield_name_map_[simpledata->get_name()], simpledata->get_text())); } } } // Private. void EntityMapper::PopulateSimpleFieldNameMap(const SchemaPtr& schema) { for (size_t i = 0; i < schema->get_simplefield_array_size(); ++i) { SimpleFieldPtr simplefield = kmldom::AsSimpleField(schema->get_simplefield_array_at(i)); if (simplefield->has_name()) { if (simplefield->has_displayname()) { simplefield_name_map_[simplefield->get_name()] = schema->get_name() + ":" + simplefield->get_displayname(); } else { simplefield_name_map_[simplefield->get_name()] = schema->get_name() + ":" + simplefield->get_name(); } } } } string CreateExpandedEntities(const string & in, const StringMap& entity_map) { // TODO: $[geDirections]. return kmlbase::CreateExpandedStrings(in, entity_map, "$[", "]"); } } // end namespace kmlengine ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/entity_mapper.h���������������������������������������������������������0000664�0000000�0000000�00000013341�12636032571�0020644�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declatation of the EntityMapper class and the // CreateExpandedEntities function. #ifndef KML_ENGINE_ENTITY_MAPPER_H__ #define KML_ENGINE_ENTITY_MAPPER_H__ #include "kml/dom.h" #include "kml/base/string_util.h" #include "kml/engine/engine_types.h" #include "kml/engine/kml_file.h" namespace kmlengine { // The EntityMapper walks through a given FeaturePtr in a given KmlFile // and stores to the supplied StringMap any replacable entities and their // replacement text. If a StringPairVector is supplied, it stores a mapping // of any <ExtendedData> items and their values. (The utility of this latter // is seen in Google Earth's behavior if asked to show the description balloon // for a feature with <ExtendedData> but no <description>. It creates an // HTML table of name-value pairs from the <ExtendedData> structure.) // // For an overview of how this is used within KML, see: // http://code.google.com/apis/kml/documentation/kmlreference.html#text // http://code.google.com/apis/kml/documentation/extendeddata.html // // Usage: // kmlbase::StringMap your_entity_map; // kmlbase::StringPairVector your_alt_text; // EntityMapper entity_mapper(kml_file, &your_entity_map); // entity_mapper.GetEntityFields(your_feature_ptr); class EntityMapper { public: // Instantiate the class with a reference to a KmlFile object. // It is the caller's responsibility to ensure that the pointer to the // StringMap instance is not NULL. EntityMapper(const KmlFilePtr& kml_file, kmlbase::StringMap* string_map); // In addition to the string_map, this constructor also takes a pointer to // a StringPairVector which, if non-NULL, will be filled with a mapping // of name-value pairs of the ExtendedData items if present. This is // really a convenience to simulate the historical behavior of Google Earth // which, if given a Feature which has no <description> but does have // <ExtendedData>, will display a table of Data or SchemaData names together // with their values. EntityMapper(const KmlFilePtr& kml_file, kmlbase::StringMap* string_map, kmlbase::StringPairVector* alt_markup_map); ~EntityMapper(); // Fills the StringMap supplied in the constructor with a mapping of all // replaceable entities in the given feature to their replacment text. The // StringMap is not modified in any way before being written into. If a // StringPairVector was supplied in the constructor, information from // any <ExtendedData> in the feature is stored there as described above. The // StringPairVector is not modified before writing. Note that this means // that this function is not idempotent if a StringPairVector has been // supplied; the StringMap will be overwritten, but the StringPairVector // will be created twice if this function is called twice. // It is the caller's responsibilty to ensure that the FeaturePtr exists // within the KmlFile from which the class was instantiated. void GetEntityFields(const kmldom::FeaturePtr& feature); private: void GatherObjectFields(const kmldom::FeaturePtr& feature); void GatherFeatureFields(const kmldom::FeaturePtr& feature); void GatherExtendedDataFields(const kmldom::FeaturePtr& feature); void GatherDataFields(const kmldom::DataPtr& feature); void GatherSchemaDataFields(const kmldom::SchemaDataPtr& feature); void GatherSimpleFieldFields(const kmldom::SimpleFieldPtr& simplefield, const kmldom::SchemaPtr& schema); void GatherSimpleDataFields(const kmldom::SimpleDataPtr& simpledata); void PopulateSimpleFieldNameMap(const kmldom::SchemaPtr& schema); const KmlFilePtr kml_file_; kmlbase::StringMap* entity_map_; kmlbase::StringPairVector* alt_markup_map_; kmlbase::StringMap simplefield_name_map_; string schemadata_prefix_; }; // Walks through the given string, replacing all keys in StringMap // with the corresponding key value. The key strings are wrapped with the // $[xxx] entity format before searching the string. Returns a new string with // the replaced entities. The entity_map is typically built with the // EntityMapper class declared in this file. string CreateExpandedEntities(const string& in, const kmlbase::StringMap& entity_map); } // end namespace kmlengine #endif // KML_ENGINE_ENTITY_MAPPER_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/feature_balloon.cc������������������������������������������������������0000664�0000000�0000000�00000007430�12636032571�0021265�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // TODO: file comment. #include "kml/engine/feature_balloon.h" #include "kml/engine/style_resolver.h" #include "kml/base/string_util.h" #include "kml/engine/engine_types.h" #include "kml/engine/entity_mapper.h" #include "kml/engine/style_merger.h" using kmlbase::StringMap; using kmlbase::StringPairVector; using kmldom::BalloonStylePtr; using kmldom::FeaturePtr; using kmldom::StylePtr; namespace kmlengine { string CreateBalloonText(const KmlFilePtr& kml_file, const FeaturePtr& feature) { // First we merge the feature's styles so we have access to the BalloonStyle. // TODO: clarify if a highlight state can be used to define the balloon // style. StylePtr style = CreateResolvedStyle(feature, kml_file, kmldom::STYLESTATE_NORMAL); // Create a vector of strings and fill it with the Feature's entities and // their replacements. StringMap entity_map; StringPairVector alt_markup_map; EntityMapper entity_mapper(kml_file, &entity_map, &alt_markup_map); entity_mapper.GetEntityFields(feature); // If we have BalloonStyle/text, expand its entities and return the result. if (style->has_balloonstyle()) { BalloonStylePtr bs = style->get_balloonstyle(); if (bs->has_text()) { return CreateExpandedEntities(bs->get_text(), entity_map); } } // Otherwise, build a default description balloon for the feature. string text; // The feature's name, if given, appears at the top of the balloon as an // <h3> header with two consecutive line breaks. if (feature->has_name()) { text += "<h3>" + feature->get_name() + "</h3><br/><br/>"; } // If we have a description, append it. if (feature->has_description()) { text += CreateExpandedEntities(feature->get_description(), entity_map); } // If we have neither a BalloonStyle/text nor a description, we try to // build the balloon from any Data and/or SchemaData elements. if (feature->has_extendeddata()) { text.append("\n<table border=\"1\">\n"); StringPairVector::const_iterator itr; for (itr = alt_markup_map.begin(); itr != alt_markup_map.end(); ++itr) { text.append("<tr><td>" + itr->first + "</td><td>" + itr->second + "</tr>\n"); } text.append("</table>\n"); } return text; } } // end namespace kmlengine ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/feature_balloon.h�������������������������������������������������������0000664�0000000�0000000�00000007215�12636032571�0021130�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the CreateBalloonText function. // Every KML Feature may have an associated "description balloon". By default, // this is an HTML composition of the Feature's name and description. It may // be overridden with the use of BalloonStyle, and may further be modified // by the use of entity replacements (such as "$[name]") and by supplying // various combinations of ExtendedData elements. // A useful guide for the various combinations of the latter can be found here: // http://code.google.com/apis/kml/documentation/extendeddata.html // For more information, see the OGC KML 2.2 specificication. In particular, // sections 6.5 and 9.1.3.10. #ifndef KML_ENGINE_FEATURE_BALLOON_H__ #define KML_ENGINE_FEATURE_BALLOON_H__ #include "kml/dom/feature.h" #include "kml/engine/kml_file.h" namespace kmlengine { // Returns the markup for a Feature's "description balloon" (or "info window", // in Google Maps-speak) as an HTML-formatted string. The text is composited // from the KML roughly as follows: // - The feature's styles are resolved and merged // - All entity references are expanded to their full form. For more // information on entity references, see: // http://code.google.com/apis/kml/documentation/kmlreference.html#text // - If a <BalloonStyle> and <description> are supplied, the description with // expanded entities is returned. Otherwise, a default name and description // balloon is created, identical to that shown by Google Earth 5.1 and earlier. // - If no <description> is supplied but the feature has <ExtendedData>, a // description is created from that ExtendedData similar to Google Earth's // behavior. The format is: // data_displayname | data_value (if displayName) // data_name | data_value (if not displayName) // schema_name:simplefield_displayName | simpledata_value (if displayName) // schema_name:simplefield_name | simpledata_value (if not displayName) // // It is the caller's responsibility to ensure that the feature exists within // the kml_file. string CreateBalloonText(const KmlFilePtr& kml_file, const kmldom::FeaturePtr& feature); } // end namespace kmlengine #endif // KML_ENGINE_FEATURE_BALLOON_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/feature_view.cc���������������������������������������������������������0000664�0000000�0000000�00000007427�12636032571�0020617�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the ComputeFeatureLookAt function. #include "kml/engine/feature_view.h" #include "kml/base/math_util.h" #include "kml/dom/kml_factory.h" #include "kml/engine/bbox.h" #include "kml/engine/location_util.h" using kmldom::LookAtPtr; using kmldom::KmlFactory; using kmldom::FeaturePtr; namespace kmlengine { // The range of the LookAt that emcompasses the feature's extents depends on // the field of view of the virtual camera. Google Earth has a 60 degree // horizontal FOV (equivalent to looking through a 30mm lens) and that value // is used here. static const double kFieldOfView = 60.0; // To avoid zooming in to far to point features or features that are spatially // small, we clap the computed range to a minimum value. Google Earth has // always used 1 km as its minimum. static const double kMinRange = 1000.0; LookAtPtr ComputeFeatureLookAt(const FeaturePtr& feature) { Bbox bbox; if (!GetFeatureBounds(feature, &bbox)) { return NULL; } return ComputeBboxLookAt(bbox); } LookAtPtr ComputeBboxLookAt(const Bbox& bbox) { // The distance from the center point to the northern bound. const double d_north = kmlbase::DistanceBetweenPoints( bbox.GetCenterLat(), bbox.GetCenterLon(), bbox.get_north(), bbox.GetCenterLon()); // The distance from the center point to the western bound. const double d_west = kmlbase::DistanceBetweenPoints( bbox.GetCenterLat(), bbox.GetCenterLon(), bbox.GetCenterLat(), bbox.get_west()); // The distance from the center point to the north-western bound. const double d_nw_corner = sqrt(pow(d_north, 2) + pow(d_west, 2)); // Scale the result by 1.2 to provide a margin around the feature. double range = d_nw_corner * tan(kmlbase::DegToRad(kFieldOfView)) * 1.1; if (range < kMinRange) { range = kMinRange; // Clamp to minimum range. } LookAtPtr lookat = KmlFactory::GetFactory()->CreateLookAt(); lookat->set_longitude(bbox.GetCenterLon()); lookat->set_latitude(bbox.GetCenterLat()); lookat->set_range(range); lookat->set_altitudemode(kmldom::ALTITUDEMODE_RELATIVETOGROUND); // We don't explcitly set the altitude, tilt or heading, relying instead on // their defaults of 0. This produces a LookAt that is north-up, looking // straight down. return lookat; } } // end namespace kmlengine �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/feature_view.h����������������������������������������������������������0000664�0000000�0000000�00000004750�12636032571�0020455�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the ComputeFeatureLookAt function. #ifndef KML_ENGINE_FEATURE_VIEW_H__ #define KML_ENGINE_FEATURE_VIEW_H__ #include "kml/dom/abstractview.h" #include "kml/dom/feature.h" namespace kmlengine { class Bbox; // Returns a <LookAt> element computed from the spatial extents of a feature. // The LookAt's altitude, heading and tilt are set to 0.0, and the altitudeMode // is set to relativeToGroud. The range is computed such that the feature will // be within a viewport with a field of view of 60 deg and is clamped to a // minimum of 1,000 meters. Returns NULL if the feature has no specified // AbstractView and none can be computed. kmldom::LookAtPtr ComputeFeatureLookAt(const kmldom::FeaturePtr& feature); // Returns a <LookAt> element computed from the spatial extents of a Bbox. // See ComputeFeatureLookAt for the details of how the LookAt is created. kmldom::LookAtPtr ComputeBboxLookAt(const Bbox& bbox); } // end namespace kmlengine #endif // KML_ENGINE_FEATURE_VIEW_H__ ������������������������libkml-1.3.0/src/kml/engine/feature_visitor.cc������������������������������������������������������0000664�0000000�0000000�00000004677�12636032571�0021350�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the GetRootFeature() and // VisitFeatureHierarchy() functions. #include "kml/engine/feature_visitor.h" #include "kml/dom.h" using kmldom::ContainerPtr; using kmldom::ElementPtr; using kmldom::FeaturePtr; using kmldom::KmlPtr; namespace kmlengine { const FeaturePtr GetRootFeature(const ElementPtr& root) { const KmlPtr kml = kmldom::AsKml(root); if (kml && kml->has_feature()) { return kml->get_feature(); } return kmldom::AsFeature(root); } void VisitFeatureHierarchy(const FeaturePtr& feature, FeatureVisitor& feature_visitor) { if (!feature) { return; } feature_visitor.VisitFeature(feature); if (const ContainerPtr container = kmldom::AsContainer(feature)) { for (size_t i = 0; i < container->get_feature_array_size(); ++i) { VisitFeatureHierarchy(container->get_feature_array_at(i), feature_visitor); } } } } // end namespace kmlengine �����������������������������������������������������������������libkml-1.3.0/src/kml/engine/feature_visitor.h�������������������������������������������������������0000664�0000000�0000000�00000005067�12636032571�0021204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations of the GetRootFeature(), // VisitFeatureHierarchy() functions and FeatureVisitor base class. #ifndef KML_ENGINE_FEATURE_VISITOR_H__ #define KML_ENGINE_FEATURE_VISITOR_H__ #include "kml/dom.h" namespace kmlengine { // This returns the root Feature of the given KML hierarchy. If root is // neither of Type_Kml nor Type_Feature NULL is returned. const kmldom::FeaturePtr GetRootFeature(const kmldom::ElementPtr& root); // This is the base class for use with VisitFeatureHierarchy. Derive your own // class and implement VisitFeature and pass the instance of your class to // VisitFeatureHierarchy class FeatureVisitor { public: virtual ~FeatureVisitor() {} virtual void VisitFeature(const kmldom::FeaturePtr& feature) {} }; // Visit the Feature hierarchy rooted at feature calling the VisitFeature() // method of the given FeatureVisitor in depth-first order. void VisitFeatureHierarchy(const kmldom::FeaturePtr& feature, FeatureVisitor& feature_visitor); } // end namespace kmlengine #endif // KML_ENGINE_FEATURE_VISITOR_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/find.cc�����������������������������������������������������������������0000664�0000000�0000000�00000007362�12636032571�0017050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the GetElementsById() function. #include "kml/engine/find.h" #include "kml/dom/serializer.h" using kmldom::ElementPtr; using kmldom::KmlDomType; using kmldom::Serializer; namespace kmlengine { // The ElementFinder adds every complex element of the given type to the // given vector. class ElementTypeFinder : public Serializer { public: ElementTypeFinder(KmlDomType type_id, ElementVector* element_vector) : type_id_(type_id), element_vector_(element_vector) { } // This is the only Serializer virtual method implemented // in ElementFinder. As such only complex elements are found. virtual void SaveElement(const ElementPtr& element) { // If this element is of the desired type save a pointer. if (element->IsA(type_id_)) { element_vector_->push_back(element); } // Call Serializer to recurse. Serializer::SaveElement(element); } private: const KmlDomType type_id_; ElementVector* element_vector_; }; class AllElementFinder : public Serializer { public: AllElementFinder(bool recurse, ElementVector* element_vector) : recurse_(recurse), count_(0), element_vector_(element_vector) { } virtual void SaveElement(const ElementPtr& element) { ++count_; if (element_vector_) { element_vector_->push_back(element); } if (recurse_) { Serializer::SaveElement(element); } } int get_count() const { return count_; } private: bool recurse_; int count_; ElementVector* element_vector_; }; // Append all elements of the given type id in the hierarchy // root at element. void GetElementsById(const ElementPtr& element, KmlDomType type_id, ElementVector* element_vector) { if (!element || !element_vector) { return; } // The ElementTypeFinder derivation of Serializer does all the work. ElementTypeFinder element_type_finder(type_id, element_vector); element->Serialize(element_type_finder); } int GetChildElements(const ElementPtr& element, bool recurse, ElementVector* element_vector) { if (!element) { return 0; } AllElementFinder all_element_finder(recurse, element_vector); element->Serialize(all_element_finder); return all_element_finder.get_count(); } } // end namespace kmlengine ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/find.h������������������������������������������������������������������0000664�0000000�0000000�00000005453�12636032571�0016711�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the GetElementsByType() and the // internal ElementFinder class. #ifndef KML_ENGINE_FIND_H__ #define KML_ENGINE_FIND_H__ #include <stack> #include <string> #include "kml/dom.h" #include "kml/engine/engine_types.h" namespace kmlengine { // Starting at the hierarchy rooted at element this finds all complex elements // of the given type and appends an ElementPtr to each in the given array. // The element is not cloned. The array is simple a list into the DOM. // Since ElementPtr is reference counted it is safe to release any references // to any parent of any element in the array. // TODO: decide const vs non-const semantics: modifications to an Element // in one place might wreak havoc on usage elsewhere. void GetElementsById(const kmldom::ElementPtr& element, kmldom::KmlDomType type_id, ElementVector* element_vector); // Get all children of the given element. If recurse is true find all children // hierarchically. If element_vector is non-NULL all children found are // appended in depth-first order. The return value is the number of children // encountered. int GetChildElements(const kmldom::ElementPtr& element, bool recurse, ElementVector* element_vector); } // end namespace kmlengine #endif // KML_ENGINE_FIND_H__ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/find_xml_namespaces.cc��������������������������������������������������0000664�0000000�0000000�00000006513�12636032571�0022124�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/engine/find_xml_namespaces.h" #include <set> #include "kml/base/attributes.h" #include "kml/base/xml_namespaces.h" #include "kml/dom/serializer.h" using kmlbase::Attributes; using kmldom::ElementPtr; using kmldom::Serializer; namespace kmlengine { typedef std::set<kmlbase::XmlnsId> XmlnsIdSet; class XmlNamespaceFinder : public Serializer { public: XmlNamespaceFinder(XmlnsIdSet* xmlns_id_set) : xmlns_id_set_(xmlns_id_set) { } // This is the only Serializer virtual method implemented // in ElementFinder. As such only complex elements are found. virtual void SaveElement(const ElementPtr& element) { xmlns_id_set_->insert(element->get_xmlns()); // Call Serializer to recurse. Serializer::SaveElement(element); } private: XmlnsIdSet* xmlns_id_set_; }; void FindXmlNamespaces(const ElementPtr& element, Attributes* xmlns_attributes) { if (element && xmlns_attributes) { XmlnsIdSet xmlns_id_set; XmlNamespaceFinder xml_namespace_finder(&xmlns_id_set); xmlns_id_set.insert(element->get_xmlns()); element->Serialize(xml_namespace_finder); XmlnsIdSet::const_iterator iter = xmlns_id_set.begin(); for (; iter != xmlns_id_set.end(); ++iter) { string prefix; string xml_namespace; if (kmlbase::FindXmlNamespaceAndPrefix(*iter, &prefix, &xml_namespace)) { xmlns_attributes->SetValue(prefix, xml_namespace); } } } } void FindAndInsertXmlNamespaces(ElementPtr element) { if (element) { Attributes xmlns; FindXmlNamespaces(element, &xmlns); // We (kmlengine in libkml) never prefix KML 2.2 elements. string kml_namespace; if (xmlns.CutValue("kml", &kml_namespace)) { // This makes KML the default namespace xmlns.SetValue("xmlns", kml_namespace); } element->MergeXmlns(xmlns); } } } // end namespace kmlengine �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/find_xml_namespaces.h���������������������������������������������������0000664�0000000�0000000�00000005162�12636032571�0021765�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the GetElementsByType() and the // internal ElementFinder class. #ifndef KML_ENGINE_FIND_XML_NAMESPACES_H__ #define KML_ENGINE_FIND_XML_NAMESPACES_H__ #include "kml/dom.h" namespace kmlbase { class Attributes; } namespace kmlengine { // This creates one attribute name-value pair for each XML namespace found in // the hierarchy rooted at the given element. The namespaces must be in the // kmlbase::XmlnsId list and the prefix and xml_namespace is as is found by // kmlbase::FindXmlNamespaceAndPrefix. Unknown namespaces are ignored. void FindXmlNamespaces(const kmldom::ElementPtr& element, kmlbase::Attributes* xmlns_attributes); // This calls FindXmlNamespaces() and inserts the resulting xmlns // prefix/namespace pairs. The KML namespace is special cased as the default // namespace (xmlns="...") if any KML elements are present. All other // namespaces are prefixed with the libkml-standard prefixes (see // kmlbase::FindXmlNamespaceAndPrefix(). void FindAndInsertXmlNamespaces(kmldom::ElementPtr element); } // end namespace kmlengine #endif // KML_ENGINE_FIND_XML_NAMESPACES_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/get_link_parents.cc�����������������������������������������������������0000664�0000000�0000000�00000004766�12636032571�0021465�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/engine/get_link_parents.h" #include "kml/dom/parser.h" #include "kml/engine/engine_types.h" using kmldom::ElementPtr; using kmldom::Parser; namespace kmlengine { bool IsIconParent(const ElementPtr& element) { switch (element->Type()) { default: return false; case kmldom::Type_PhotoOverlay: case kmldom::Type_GroundOverlay: case kmldom::Type_ScreenOverlay: case kmldom::Type_ItemIcon: case kmldom::Type_IconStyle: return true; } } bool IsLinkParent(const ElementPtr& element) { switch (element->Type()) { default: return false; case kmldom::Type_NetworkLink: case kmldom::Type_Model: return true; } } bool GetLinkParents(const string& kml, ElementVector* link_parent_vector) { if (!link_parent_vector) { return false; } GetLinkParentsParserObserver get_link_parents(link_parent_vector); Parser parser; parser.AddObserver(&get_link_parents); return parser.Parse(kml, NULL) != NULL; } } // end namespace kmlengine ����������libkml-1.3.0/src/kml/engine/get_link_parents.h������������������������������������������������������0000664�0000000�0000000�00000005676�12636032571�0021330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the GetLinkParents() function and the // definition of the GetLinkParentsParserObserver. #ifndef KML_ENGINE_GET_LINK_PARENTS_H__ #define KML_ENGINE_GET_LINK_PARENTS_H__ #include <vector> #include "kml/dom.h" #include "kml/engine/engine_types.h" namespace kmlengine { // Is this element the parent of a Link? bool IsLinkParent(const kmldom::ElementPtr& element); // Is this element the parent of an Icon? bool IsIconParent(const kmldom::ElementPtr& element); // This ParserObserver looks for all elements that have a link child. class GetLinkParentsParserObserver : public kmldom::ParserObserver { public: GetLinkParentsParserObserver(ElementVector* link_parent_vector) : link_parent_vector_(link_parent_vector) {} virtual ~GetLinkParentsParserObserver() {} virtual bool NewElement(const kmldom::ElementPtr& element) { if (IsLinkParent(element) || IsIconParent(element)) { link_parent_vector_->push_back(element); } return true; } private: ElementVector* link_parent_vector_; }; // This function appends all Elements with link children to the supplied // vector. This returns false if a NULL vector pointer is supplied or if the // parse of the kml fails. See the IsLinkParent() and IsIconParent() // functions for the definition of "Element with link child". bool GetLinkParents(const string& kml, ElementVector* link_parent_vector); } // end namespace kmlengine #endif // KML_ENGINE_GET_LINK_PARENTS_H__ ������������������������������������������������������������������libkml-1.3.0/src/kml/engine/get_links.cc������������������������������������������������������������0000664�0000000�0000000�00000004703�12636032571�0020103�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/engine/get_links.h" #include "kml/dom/parser.h" #include "kml/dom/parser_observer.h" // TODO: deprecate use of kmlengine::Href. kml_url.h and/or kmlbase::UriParser // should be used instead. #include "kml/engine/href.h" using kmldom::Parser; namespace kmlengine { bool GetLinks(const string& kml, href_vector_t* href_vector) { if (!href_vector) { return false; } GetLinksParserObserver get_links(href_vector); Parser parser; parser.AddObserver(&get_links); return parser.Parse(kml, NULL) != NULL; } bool GetRelativeLinks(const string& kml, href_vector_t* href_vector) { if (!href_vector) { return false; } href_vector_t all_hrefs; if (!GetLinks(kml, &all_hrefs)) { return false; } href_vector_t::const_iterator itr; for (itr = all_hrefs.begin(); itr != all_hrefs.end(); ++ itr) { Href href(*itr); if (href.IsRelativePath()) { href_vector->push_back(*itr); } } return true; } } // end namespace kmlengine �������������������������������������������������������������libkml-1.3.0/src/kml/engine/get_links.h�������������������������������������������������������������0000664�0000000�0000000�00000007234�12636032571�0017747�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the GetLinks() function and the // definition of the GetLinksParserObserver. #ifndef KML_ENGINE_GET_LINKS_H__ #define KML_ENGINE_GET_LINKS_H__ #include <vector> #include "kml/dom.h" #include "kml/dom/parser_observer.h" namespace kmlengine { typedef std::vector<string> href_vector_t; // This ParserObserver looks for all elements with an "href" and saves the // content of each to the passed vector. class GetLinksParserObserver : public kmldom::ParserObserver { public: GetLinksParserObserver(href_vector_t* href_vector) : href_vector_(href_vector) {} virtual ~GetLinksParserObserver() {} virtual bool AddChild(const kmldom::ElementPtr& parent, const kmldom::ElementPtr& child) { switch (child->Type()) { default: break; case kmldom::Type_href: // NetworkLink/Link/href, Overlay/Icon/href, ItemIcon/href // Model/Link/href, IconStyle/Icon/href href_vector_->push_back(child->get_char_data()); break; case kmldom::Type_targetHref: if (kmldom::Type_Alias == parent->Type()) { href_vector_->push_back(child->get_char_data()); } break; case kmldom::Type_styleUrl: href_vector_->push_back(child->get_char_data()); break; case kmldom::Type_SchemaData: kmldom::SchemaDataPtr schemadata = kmldom::AsSchemaData(child); if (schemadata->has_schemaurl()) { href_vector_->push_back(schemadata->get_schemaurl()); } // TODO: HTML links in description and BalloonStyle/text break; } return true; } private: href_vector_t* href_vector_; }; // This function saves to the vector all href's found in the given KML. // This returns false if the vector is NULL or on any parse error. This does // not search the balloon text for links. bool GetLinks(const string& kml, href_vector_t* href_vector); // As GetLinks, but considers only those href's that are relative (local) to // the given KML. This does not search the balloon text for links. bool GetRelativeLinks(const string& kml, href_vector_t* href_vector); } // end namespace kmlengine #endif // KML_ENGINE_GET_LINKS_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/href.cc�����������������������������������������������������������������0000664�0000000�0000000�00000005027�12636032571�0017050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/engine/href.h" namespace kmlengine { // private size_t Href::ParseScheme(const string& href) { // Look for <scheme>://... size_t css = href.find("://"); if (css == string::npos || css == 0) { return 0; } scheme_ = href.substr(0, css); return css + 3; // First char after :// } // private size_t Href::ParseNetLoc(const string& href) { // Look for ...://<net_loc>/... size_t slash = href.find('/'); if (slash == string::npos) { return 0; } net_loc_ = href.substr(0, slash); return slash + 1; // First char after / } // private void Href::Parse(const string& href) { size_t net_loc_start = ParseScheme(href); size_t path_start; if (net_loc_start > 0) { path_start = ParseNetLoc(href.substr(net_loc_start)) + net_loc_start; } else { path_start = 0; } size_t path_end = href.size(); size_t pound = href.find_first_of('#'); if (pound != string::npos) { fragment_ = href.substr(pound + 1); path_end = pound; } path_ = href.substr(path_start, path_end); } } // end namespace kmlengine ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/href.h������������������������������������������������������������������0000664�0000000�0000000�00000007465�12636032571�0016722�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the definition of the Href class used to parse a // KML-style URL such as that found in <href> and <styleUrl>. // TODO: methods to parse/assemble a full RFC 1808 URL: // TODO: <scheme>://<net_loc>/<path>;<params>?<query>#<fragment> // TODO: "...;params..." is not used in KML #ifndef KML_ENGINE_HREF_H__ #define KML_ENGINE_HREF_H__ #include "kml/base/util.h" namespace kmlengine { // This class parses a KML URL. Basic usage at present: // Href href("#object-id"); // if (href.HasFragment()) { // return href.Fragment(); // "object-id" // } class Href { public: Href() {} // Construct from the contents of <href> Href(const string& href) { Parse(href); } bool IsRelative() const { return !has_scheme() && !has_net_loc(); } bool IsRelativePath() const { return !has_scheme() && !has_net_loc() && has_path(); } bool IsFragmentOnly() const { return has_fragment() && !has_scheme() && !has_net_loc() && !has_path(); } const string& get_scheme() const { return scheme_; } bool has_scheme() const { return !scheme_.empty(); } void set_scheme(const string& scheme) { scheme_ = scheme; } void clear_scheme() { scheme_.clear(); } const string& get_net_loc() const { return net_loc_; } bool has_net_loc() const { return !net_loc_.empty(); } void set_net_loc(const string& net_loc) { net_loc_ = net_loc; } void clear_net_loc() { net_loc_.clear(); } const string& get_path() const { return path_; } bool has_path() const { return !path_.empty(); } void set_path(const string& path) { path_ = path; } void clear_path() { path_.clear(); } const string& get_fragment() const { return fragment_; } bool has_fragment() const { return !fragment_.empty(); } void set_fragment(const string& fragment) { fragment_ = fragment; } void clear_fragment() { fragment_.clear(); } private: void Parse(const string& href); size_t ParseScheme(const string& href); size_t ParseNetLoc(const string& href); // These names match RFC 1808: // <scheme>://<net_loc>/<path>;<params>?<query>#<fragment> // Note: params is unused in a KML URL. string scheme_; string net_loc_; string path_; string query_; string fragment_; }; } // end namespace kmlengine #endif // KML_ENGINE_HREF_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/id_mapper.cc������������������������������������������������������������0000664�0000000�0000000�00000010176�12636032571�0020065�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the MapIds function. #include "kml/engine/id_mapper.h" #include "kml/engine/id_mapper_internal.h" #include "kml/dom/serializer.h" #include "kml/engine/engine_types.h" using kmlbase::StringMap; using kmldom::ElementPtr; using kmldom::ObjectPtr; using kmldom::Serializer; namespace kmlengine { // SaveElement is the only virtual method required given that IdMapper is only // concerned with Objects which are Elements (no fields). void IdMapper::SaveElement(const ElementPtr& element) { if (ObjectPtr object = AsObject(element)) { if (object->has_id()) { const string& id = object->get_id(); ObjectIdMap::const_iterator iter = object_id_map_->find(id); if (iter != object_id_map_->end()) { // Save this as a dupe if a vector was supplied. if (dup_id_vector_) { dup_id_vector_->push_back(iter->second); } } // This matches the semantics of ObjectIdParserObserver. (*object_id_map_)[id] = object; // "Last one wins" } } // Call Serializer to recurse. Serializer::SaveElement(element); } // Append all elements of the given type id in the hierarchy rooted at element. void MapIds(const ElementPtr& root, ObjectIdMap* object_id_map, ElementVector* dup_id_vector) { if (root && object_id_map) { // NULL dup_id_vector ok. // The IdMapper derivation of Serializer does all the work. IdMapper id_mapper(object_id_map, dup_id_vector); id_mapper.SaveElement(root); } } const ElementPtr& ClearIds(const ElementPtr& root) { // Get all objects with an id. ObjectIdMap object_id_map; MapIds(root, &object_id_map, NULL); // Iterate through them all and clear the id. ObjectIdMap::const_iterator iter = object_id_map.begin(); for (; iter != object_id_map.end(); ++iter) { iter->second->clear_id(); } return root; } int RemapIds(const ObjectIdMap& input_object_id_map, const StringMap& id_map, ObjectIdMap* output_object_id_map) { int clear_count = 0; ObjectIdMap::const_iterator iter = input_object_id_map.begin(); for (; iter != input_object_id_map.end(); ++iter) { kmldom::ObjectPtr object = iter->second; if (object->has_id()) { kmlbase::StringMap::const_iterator find = id_map.find(object->get_id()); if (find == id_map.end()) { // No mapping so clear the id. object->clear_id(); ++clear_count; } else { // Change the id to the given mapping. object->set_id(find->second); if (output_object_id_map) { (*output_object_id_map)[find->second] = object; } } } } return clear_count; } } // end namespace kmlengine ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/id_mapper.h�������������������������������������������������������������0000664�0000000�0000000�00000005572�12636032571�0017733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the public id mapping functions. #ifndef KML_ENGINE_ID_MAPPER_H__ #define KML_ENGINE_ID_MAPPER_H__ #include "kml/base/string_util.h" #include "kml/dom.h" #include "kml/engine/engine_types.h" namespace kmlengine { // This function creates a map of all Objects with ids in the given element // hierarchy. If an element_vector is supplied it will be given all elements // with duplicate ids. void MapIds(const kmldom::ElementPtr& root, ObjectIdMap* object_id_map, ElementVector* element_vector); // This function clears the id= attribute of every Object with an id in the // given element hierarchy. This function should be used with caution! const kmldom::ElementPtr& ClearIds(const kmldom::ElementPtr& root); // This function changes ALL id='s in the given ObjectIdMap. If the // Object's id= is not found in the given id_map that object's id= is cleared. // If the Object's id= _is_ found in the id_map then that Object's id= is // changed to the map'ed id. If an output_object_id_map is supplied each // remapped object is added to that map. This returns the number of objects // whose ids were cleared. This function should be used with caution! int RemapIds(const ObjectIdMap& input_object_id_map, const kmlbase::StringMap& id_map, ObjectIdMap* output_object_id_map); } // end namespace kmlengine #endif // KML_ENGINE_ID_MAPPER_H__ ��������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/id_mapper_internal.h����������������������������������������������������0000664�0000000�0000000�00000005054�12636032571�0021622�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the internal IdMapper class. // Do not use this class in application code. See id_mapper.h for the public // functions. #ifndef KML_ENGINE_ID_MAPPER_INTERNAL_H__ #define KML_ENGINE_ID_MAPPER_INTERNAL_H__ #include "kml/base/string_util.h" #include "kml/dom.h" #include "kml/dom/serializer.h" #include "kml/engine/engine_types.h" namespace kmlengine { // This class walks the element hierarchy and assigns any Object with an id // to the given required ObjectIdMap. Objects with duplicate ids are appended // to the given ElementVector if one is supplied. class IdMapper : public kmldom::Serializer { public: IdMapper(ObjectIdMap* object_id_map, ElementVector* dup_id_vector) : object_id_map_(object_id_map), dup_id_vector_(dup_id_vector) { } // This is the Serializer method used to recurse on each child element. virtual void SaveElement(const kmldom::ElementPtr& element); private: ObjectIdMap* object_id_map_; ElementVector* dup_id_vector_; }; } // end namespace kmlengine #endif // KML_ENGINE_ID_MAPPER_INTERNAL_H__ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/kml_cache.cc������������������������������������������������������������0000664�0000000�0000000�00000007355�12636032571�0020040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the KmlCache class. #include "kml/engine/kml_cache.h" #include "boost/scoped_ptr.hpp" #include "kml/engine/kml_file.h" #include "kml/engine/kml_uri_internal.h" #include "kml/engine/kmz_cache.h" namespace kmlengine { KmlCache::KmlCache(kmlbase::NetFetcher* net_fetcher, size_t max_size) { kml_file_cache_.reset(new KmlFileNetCache(net_fetcher, max_size)); kmz_file_cache_.reset(new KmzCache(net_fetcher, max_size)); } KmlFilePtr KmlCache::FetchKmlRelative(const string& base, const string& target) { boost::scoped_ptr<KmlUri> kml_uri(KmlUri::CreateRelative(base, target)); if (!kml_uri.get()) { // Failed to create KmlUri likely due to bad url or href. return NULL; } string url = kml_uri->get_url(); // If there's a KmlFile cached for this URL just return it and we're done. if (KmlFilePtr kml_file = kml_file_cache_->LookUp(url)) { return kml_file; } // No KmlFile cached for this URL. Fetch the KML through the KMZ cache. string content; if (kmz_file_cache_->DoFetchAndReturnUrl(kml_uri.get(), &content, &url)) { // The KML content was found within in a fetched and/or cached KMZ. // Parse it into a KmlFile for it and cache it. KmlFilePtr kml_file = KmlFile::CreateFromStringWithUrl(content, url, this); if (kml_file) { // Parsed fine so save in KmlFile cache and return. kml_file_cache_->Save(url, kml_file); return kml_file; } } return NULL; } // TODO teach KmlUri about the concept of absolute... KmlFilePtr KmlCache::FetchKmlAbsolute(const string& kml_uri) { // The base url must be a valid absolute URL even if the target is // absolute. See the above TODO w.r.t KmlUri and absolute. // FetchXxxRelative is the most common use case. return FetchKmlRelative(kml_uri, kml_uri); } bool KmlCache::FetchDataRelative(const string& base, const string& target, string* data) { boost::scoped_ptr<KmlUri> kml_uri(KmlUri::CreateRelative(base, target)); // KmzCache::Fetch has NULL pointer check. if (kmz_file_cache_->DoFetch(kml_uri.get(), data)) { return true; } return false; } // TODO is a FetchDataAbsolute necessary? } // end namespace kmlengine �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/kml_cache.h�������������������������������������������������������������0000664�0000000�0000000�00000011256�12636032571�0017675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_ENGINE_KML_CACHE_H__ #define KML_ENGINE_KML_CACHE_H__ #include "kml/base/net_cache.h" #include "boost/scoped_ptr.hpp" #include "kml/engine/kml_file.h" #include "kml/engine/kmz_cache.h" namespace kmlengine { // A cache of KmlFile's (parse of a KML file of a given URL). typedef kmlbase::NetCache<KmlFile> KmlFileNetCache; // This class is the main public API for networked KML. Overall usage is as // follows: // class YourNetFetcher : public kmlbase::NetFetcher { // // see kmlbase::NetCache // }; // YourNetFetcher your_net_fetcher; // KmlCache kml_cache(&your_net_fetcher, cache_size); // KmlFilePtr k0 = kml_cache.FetchKmlAbsolute("http://host.com/file.kml"); // KmlFilePtr k1 = kml_cache.FetchKmlAbsolute("http://host.com/file.kmz"); // KmlFilePtr k2 = // kml_cache.FetchKmlAbsolute("http://host.com/file.kmz/foo.kml"); // KmlFilePtr k3 = // kml_cache.FetchKmlRelative("http://host.com/file.kmz/doc.kml", // "link.kml"); // string data; // bool status = kml_cache.FetchDataRelative("http://host.com/overlay.kml", // "image.jpg", &data); // bool status = // kml_cache.FetchDataRelative("http://host.com/file.kmz/doc.kml" // "image.jpg", &data); // As the "cache" name suggests subsequent fetches for a given URL will // potentially hit the cache. class KmlCache { public: KmlCache(kmlbase::NetFetcher* net_fetcher, size_t max_size); // Any caller expecting to fetch and parse KML data should use this method. // Use this with the raw content of a NetworkLink/Link/href, styleUrl, or // schemaUrl. A given parse of a local or remote StyleSelector or Schema // referenced by a styleUrl/schemaUrl is thus cached. The returned KmlFile // is marked with a pointer back to this cache such that other internal // KML Engine algorithms can fetch (and cache) shared styles and schemas. // The base_url is typically that of the file containing the target_href. KmlFilePtr FetchKmlRelative(const string& base_url, const string& target_href); // This method is used to fetch a remote KML or KMZ file with an absolute URL. // If the fetch or parse fails NULL is returned. KmlFilePtr FetchKmlAbsolute(const string& kml_url); // Any caller expecting to fetch data which _may_ be within a KMZ should use // this method. If the data is within a remote KMZ file that KMZ file is // first fetched and cached such that subsequent access to this or other files // within that KMZ file are out of the locally cached KMZ file. Such content // includes Model/Link/href (COLLADA geometry) and images for icons, overlays // or model textures. The target_href here typically is the content of an // Overlay Icon's href, or Model's Link href. The base_url is typically that // of the file containing the target_href. bool FetchDataRelative(const string& base_url, const string& target_href, string* content); private: boost::scoped_ptr<KmzCache> kmz_file_cache_; boost::scoped_ptr<KmlFileNetCache> kml_file_cache_; }; } // end namespace kmlengine #endif // KML_ENGINE_KML_CACHE_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/kml_file.cc�������������������������������������������������������������0000664�0000000�0000000�00000020544�12636032571�0017707�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the KmlFile class methods. #include "kml/engine/kml_file.h" #include "kml/base/xml_namespaces.h" #include "kml/engine/find_xml_namespaces.h" #include "kml/engine/id_mapper.h" #include "kml/engine/kmz_file.h" #include "kml/dom.h" #include "kml/dom/xml_serializer.h" using kmlbase::FindXmlNamespaceAndPrefix; using kmlbase::XmlnsId; namespace kmlengine { static const char kDefaultXmlns[] = "http://www.opengis.net/kml/2.2"; static const char kDefaultEncoding[] = "utf-8"; // static KmlFile* KmlFile::CreateFromParse(const string& kml_or_kmz_data, string* errors) { // Here our focus is on managing the KmlFile storage. If _CreateFromParse() // fails we release the storage else we return a pointer to it. KmlFile* kml_file = new KmlFile; if (kml_file->_CreateFromParse(kml_or_kmz_data, errors)) { return kml_file; } delete kml_file; return NULL; } // static KmlFile* KmlFile::CreateFromStringWithUrl(const string& kml_data, const string& url, KmlCache* kml_cache) { if (KmlFile* kml_file = CreateFromString(kml_data)) { kml_file->set_url(url); kml_file->set_kml_cache(kml_cache); return kml_file; } return NULL; } // private // This is an internal helper function used in CreateFromParse(). bool KmlFile::_CreateFromParse(const string& kml_or_kmz_data, string* errors) { // Here our focus is on deciding KML vs KMZ. if (kmlengine::KmzFile::IsKmz(kml_or_kmz_data)) { return OpenAndParseKmz(kml_or_kmz_data, errors); } return ParseFromString(kml_or_kmz_data, errors); } // private // The caller is expected to have called KmzFile::IsKmz on this, thus the return // status represents file handling errors. bool KmlFile::OpenAndParseKmz(const string& kmz_data, string* errors) { string kml_data; KmzFilePtr kmz_file = kmlengine::KmzFile::OpenFromString(kmz_data); if (!kmz_file || !kmz_file->ReadKml(&kml_data)) { return false; } return ParseFromString(kml_data, errors); } // private // TODO: push strict parsing out as a Create() method arg KmlFile::KmlFile() : encoding_(kDefaultEncoding), kml_cache_(NULL), strict_parse_(false) { } // private bool KmlFile::ParseFromString(const string& kml, string* errors) { // Create a parser object. kmldom::Parser parser; // Create a ParserObserver both to save the id's of all Objects as well as // check for duplicates if strict parsing has been enabled. If set, this // ParserObserver fails the parse immediately on the first duplicate id. ObjectIdParserObserver object_id_parser_observer(&object_id_map_, strict_parse_); parser.AddObserver(&object_id_parser_observer); // Create a ParserObserver to map and save the id's of all shared // StyleSelectors. SharedStyleParserObserver shared_style_parser_observer(&shared_style_map_, strict_parse_); parser.AddObserver(&shared_style_parser_observer); // Create a ParserObserver to save the parent of all <Link> and <Icon> // elements found in the KML file. See get_link_parents.h for more info. GetLinkParentsParserObserver get_link_parents(&link_parent_vector_); parser.AddObserver(&get_link_parents); // Actually perform the parse. if (kmldom::ElementPtr root = parser.Parse(kml, errors)) { // TODO: set encoding, xmlns, etc from parse set_root(root); return true; } return false; } // static KmlFile* KmlFile::CreateFromImportInternal(const kmldom::ElementPtr& element, bool strict) { if (!element) { return NULL; } KmlFile* kml_file = new KmlFile; ElementVector dup_id_elements; ObjectIdMap* map_ptr = &kml_file->object_id_map_; MapIds(element, map_ptr, &dup_id_elements); if (strict && !dup_id_elements.empty()) { delete kml_file; return NULL; } // Add all the shared styles to the style map. A shared style is any style // with an id whose parent is a document (and by defintion anything in // object_id_map_ has an id). ObjectIdMap::const_iterator it; for (it = map_ptr->begin(); it != map_ptr->end(); it++) { if (kmldom::StyleSelectorPtr ss = kmldom::AsStyleSelector(it->second)) { if (kmldom::AsDocument(ss->GetParent())) { (kml_file->shared_style_map_)[ss->get_id()] = ss; } } } // TODO check/set all elements under elements to be in this file. kml_file->set_root(element); return kml_file; } KmlFile* KmlFile::CreateFromImport(const kmldom::ElementPtr& element) { return CreateFromImportInternal(element, true); } KmlFile* KmlFile::CreateFromImportLax(const kmldom::ElementPtr& element) { return CreateFromImportInternal(element, false); } const string KmlFile::CreateXmlHeader() const { return string("<?xml version=\"1.0\" encoding=\"" + encoding_ + "\"?>\n"); } bool KmlFile::SerializeToOstream(std::ostream* xml_output) const { if (!xml_output || !get_root()) { return false; } const string xml_header = CreateXmlHeader(); xml_output->write(xml_header.data(), xml_header.size()); // Find all xml namespaces known to libkml used by all elements descending // from the root and insert the appropriate xmlns attributes to the root // element. See kmlengine::FindAndInsertXmlNamespaces() for more info on // how KML vs other namespaces are treated. FindAndInsertXmlNamespaces(get_root()); // Append the serialization to the XML header. kmldom::XmlSerializer<std::ostream>::Serialize(get_root(), "\n", " ", xml_output); return true; } bool KmlFile::SerializeToString(string* xml_output) const { if (!xml_output) { return false; } const string xml_header = CreateXmlHeader(); xml_output->append(xml_header.data(), xml_header.size()); // Find all xml namespaces known to libkml used by all elements descending // from the root and insert the appropriate xmlns attributes to the root // element. See kmlengine::FindAndInsertXmlNamespaces() for more info on // how KML vs other namespaces are treated. FindAndInsertXmlNamespaces(get_root()); // Append the serialization to the XML header. kmldom::StringAdapter string_adapter(xml_output); kmldom::XmlSerializer<kmldom::StringAdapter>::Serialize( get_root(), "\n", " ", &string_adapter); return true; } kmldom::ObjectPtr KmlFile::GetObjectById(const string& id) const { ObjectIdMap::const_iterator find = object_id_map_.find(id); return find != object_id_map_.end() ? kmldom::AsObject(find->second) : NULL; } kmldom::StyleSelectorPtr KmlFile::GetSharedStyleById( const string& id) const { SharedStyleMap::const_iterator find = shared_style_map_.find(id); return find != shared_style_map_.end() ? find->second : NULL; } } // end namespace kmlengine ������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/kml_file.h��������������������������������������������������������������0000664�0000000�0000000�00000017074�12636032571�0017555�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the KmlFile class. #ifndef KML_ENGINE_KML_FILE_H__ #define KML_ENGINE_KML_FILE_H__ #include <ostream> #include <vector> #include "boost/scoped_ptr.hpp" #include "kml/base/attributes.h" #include "kml/base/referent.h" #include "kml/base/xml_namespaces.h" #include "kml/base/util.h" #include "kml/base/xml_file.h" #include "kml/dom.h" #include "kml/engine/engine_types.h" #include "kml/engine/get_link_parents.h" #include "kml/engine/object_id_parser_observer.h" #include "kml/engine/shared_style_parser_observer.h" namespace kmlengine { class KmlCache; // The KmlFile class represents the instance of a KML file from a given URL. // A KmlFile manages an XML id domain and includes an internal map of all // id'ed Objects, shared styles, and name'ed Schemas and a list of all links. // KmlFile is a fundamental component of the KML Engine and is central in the // use of shared style resolution. class KmlFile : public kmlbase::XmlFile { public: // This creates a KmlFile from a memory buffer of either KML or KMZ data. // In the case of KMZ the KmzFile module's ReadKml() is used to read the // KML data from the KMZ archive. On any parse errors NULL is returned // and a human readable error message is saved in the supplied string. // The caller is responsible for deleting the KmlFile this creates. static KmlFile* CreateFromParse(const string& kml_or_kmz_data, string *errors); // This method is for use with NetCache CacheItem. static KmlFile* CreateFromString(const string& kml_or_kmz_data) { // Internal KML fetch/parse (styleUrl, etc) errors are quietly ignored. return CreateFromParse(kml_or_kmz_data, NULL); } // This method is for use with KmlCache. The purpose is to keep set_url() // and set_kml_cache() private and at creation-time. static KmlFile* CreateFromStringWithUrl(const string& kml_data, const string& url, KmlCache* kml_cache); // This creates a KmlFile from the given element hierarchy. This variant of // CreateFromImport fails on id duplicates. static KmlFile* CreateFromImport(const kmldom::ElementPtr& element); // This creates a KmlFile from the given element hierarchy. This variant of // CreateFromImport employs a "last one wins" strategy for id duplicates. static KmlFile* CreateFromImportLax(const kmldom::ElementPtr& element); // This returns the root element of this KML file. const kmldom::ElementPtr get_root() const { return kmldom::AsElement(XmlFile::get_root()); } // Deprecated. Use get_root(). const kmldom::ElementPtr root() const { return get_root(); } // This serializes the KML from the root. The xmlns() value is added to // the root element, the set of namespace prefixes to namespaces is added, // and the encoding is set in a prepended XML header: // <?xml version="1.0" encoding="ENCODING"> // <kml xmlns="XMLNS" xmlns:PREFIX1="XMLNS1" xmlns:PREFIX2="XMLNS2"...> // ... // </kml> bool SerializeToString(string* xml_output) const; // This does as SerializeToString() except to an ostream. bool SerializeToOstream(std::ostream* xml_output) const; // This returns the XML header including the encoding: // The default is this: "<?version="1.0" encoding="utf-8"?> const string CreateXmlHeader() const; // These methods access the XML encoding of the XML file. // TODO: set should be create time only. void set_encoding(const string& encoding) { encoding_ = encoding; } const string& get_encoding() const { return encoding_; } // This returns the Object Element with the given id. A NULL Object is // returned if no Object with this id exists in the KML file. kmldom::ObjectPtr GetObjectById(const string& id) const; // This returns the shared StyleSelector Element with the given id. NULL is // returned if no StyleSelector with this id exists as a shared style // selector in the KML file. kmldom::StyleSelectorPtr GetSharedStyleById(const string& id) const; const SharedStyleMap& get_shared_style_map() const { return shared_style_map_; } // This returns the all Elements that may have link children. See // GetLinkParents() for more information. const ElementVector& get_link_parent_vector() const { return link_parent_vector_; } // This is the KmlCache which created this KmlFile. This may be NULL if this // KmlFile was not created using CreateFromStringWithUrl(). KmlCache* get_kml_cache() const { return kml_cache_; } // Duplicate id attributes are illegal and should cause the parse to fail. // However, Google Earth never enforced this in its KML ingest and thus the // web has a lot of invalid KML. We attempt to parse this by default. A // client may use set_strict_parse(true) to override this, which will // instruct the ObjectIdParserObserver to fail on duplicate ids. void set_strict_parse(bool val) { strict_parse_ = val; } private: // Constructor is private. Use static Create methods. KmlFile(); // This is an internal helper function for the public CreateFromImport*() // methods. static KmlFile* CreateFromImportInternal(const kmldom::ElementPtr& element, bool disallow_duplicate_ids); // This is an internal method used in the static Create methods. bool ParseFromString(const string& kml, string* errors); // Only static Create methods can set the KmlCache. void set_kml_cache(KmlCache* kml_cache) { kml_cache_ = kml_cache; } // These are helper functions for CreateFromParse(). bool _CreateFromParse(const string& kml_or_kmz_data, string* errors); bool OpenAndParseKmz(const string& kmz_data, string* errors); string encoding_; // TODO: use XmlElement's id map. ObjectIdMap object_id_map_; SharedStyleMap shared_style_map_; ElementVector link_parent_vector_; KmlCache* kml_cache_; bool strict_parse_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(KmlFile); }; typedef boost::intrusive_ptr<KmlFile> KmlFilePtr; } // end namespace kmlengine #endif // KML_ENGINE_KML_FILE_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/kml_stream.cc�����������������������������������������������������������0000664�0000000�0000000�00000005625�12636032571�0020266�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the KmlStream class. #include "kml/engine/kml_stream.h" #include "kml/base/expat_parser.h" #include "kml/dom/kml_handler.h" #include "kml/dom/parser_observer.h" using kmldom::ElementPtr; using kmldom::ParserObserver; namespace kmlengine { KmlStream* KmlStream::ParseFromIstream( std::istream* input, string* errors, ParserObserver* observer) { if (!input) { return NULL; } // Initialize Kml parser. kmldom::parser_observer_vector_t observers; if (observer) { observers.push_back(observer); } kmldom::KmlHandler kml_handler(observers); // Perform buffered parse kmlbase::ExpatParser parser(&kml_handler, false); const int kBufSize = 4096; while (input->good()) { if (void* buf = parser.GetInternalBuffer(kBufSize)) { std::streamsize read_size = input->read(static_cast<char*>(buf), kBufSize).gcount(); // Guard negative read sizes for MSVC 2010. if (read_size < 0 || !parser.ParseInternalBuffer(static_cast<size_t>(read_size), errors, input->eof())) { return NULL; // Parse error } } else { if (errors) { *errors = "memory error"; } return NULL; } } // Parse succeeded. Construct KmlStream. KmlStream* kml_stream = new KmlStream; kml_stream->set_root(kml_handler.PopRoot()); return kml_stream; } } // end namespace kmlengine �����������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/kml_stream.h������������������������������������������������������������0000664�0000000�0000000�00000005572�12636032571�0020131�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the KmlStream class. #ifndef KML_ENGINE_KML_STREAM_H__ #define KML_ENGINE_KML_STREAM_H__ #include <istream> #include "kml/dom.h" #include "kml/base/util.h" #include "kml/base/xml_file.h" namespace kmldom { class ParserObserver; } namespace kmlengine { // This class is for processing a large KML file in a streamed fashion. // Unlike the KmlFile class this does NOT build a map of object and shared // style ids. This does still build a full KML DOM (unless the user-supplied // ParserObserver inhibits parenting of certain children). class KmlStream : public kmlbase::XmlFile { public: // Create a KmlFile from KML/KMZ in the given C++ istream. The entire // input is consumed. On any parse or I/O failure NULL is returned and an // error message is set to the given error string if one is supplied. // If a ParserObserver is supplied it is used during parse. static KmlStream* ParseFromIstream(std::istream* input, string* errors, kmldom::ParserObserver* observer); // This returns the root element of this KML stream. const kmldom::ElementPtr get_root() const { return kmldom::AsElement(XmlFile::get_root()); } private: // Constructor is private. Use static creation methods. KmlStream() {} LIBKML_DISALLOW_EVIL_CONSTRUCTORS(KmlStream); }; } // end namespace kmlengine #endif // KML_ENGINE_KML_STREAM_H__ ��������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/kml_uri.cc��������������������������������������������������������������0000664�0000000�0000000�00000020053�12636032571�0017562�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the KML URI resolution functions. #include "kml/engine/kml_uri.h" #include "kml/engine/kml_uri_internal.h" #include "boost/scoped_ptr.hpp" #include "kml/base/uri_parser.h" using kmlbase::UriParser; namespace kmlengine { KmlUri::KmlUri(const string& base, const string& target) : is_kmz_(false), base_(base), target_(target), target_uri_(kmlbase::UriParser::CreateFromParse(target.c_str())) { } // This is required to keep the point of instatiation of the scoped_ptr // template arg where the full class definition (of UriParser) is known. KmlUri::~KmlUri() { } // static KmlUri* KmlUri::CreateRelative(const string& base, const string& target) { KmlUri* kml_uri = new KmlUri(base, target); // To create a valid KmlUri the base must be absolute, the target must be // valid and the resolution must succeed. If any of these are false then // NULL is returned. The returned KmlUri object must be managed by the // caller; boost::scoped_ptr is recommended. // TODO: streamline UriParser::CreateFromParse, ResolveUri, GetFetchableUri, // and KmzSplit, possibly push all of KmlUri into kmlbase::UriParser. string fetchable_url; if (kml_uri->target_uri_.get() && ResolveUri(base, target, &kml_uri->url_) && GetFetchableUri(kml_uri->url_, &fetchable_url)) { kml_uri->is_kmz_ = KmzSplit(fetchable_url, &kml_uri->kmz_url_, &kml_uri->path_in_kmz_); return kml_uri; } // KmlCache NULL or base or target invalid. delete kml_uri; return NULL; } // Note that this is implemented in terms of the 3rd party uriparser library // which is fully encapsulated here. bool ResolveUri(const string& base, const string& relative, string* result) { boost::scoped_ptr<UriParser> uri_parser( UriParser::CreateResolvedUri(base.c_str(), relative.c_str())); return uri_parser.get() && uri_parser->ToString(result); } bool NormalizeUri(const string& uri, string* result) { boost::scoped_ptr<UriParser> uri_parser( UriParser::CreateFromParse(uri.c_str())); return uri_parser.get() && uri_parser->Normalize() && uri_parser->ToString(result); } bool NormalizeHref(const string& href, string* result) { if (!result) { return false; } // Convert to URI. string uri; if (!FilenameToUri(href, &uri)) { return false; } // Normalize. string normalized_uri; if (!NormalizeUri(uri, &normalized_uri)) { return false; } // Then convert back to href. string normalized_href; if (!UriToFilename(normalized_uri, &normalized_href)) { return false; } *result = normalized_href; return true; } bool UriToFilename(const string& uri, string* output) { return UriParser::UriToFilename(uri, output); } bool FilenameToUri(const string& filename, string* output) { return UriParser::FilenameToUri(filename, output); } // TODO: provide a query splitter. // Note that RFC 3986 does not define the structure of a query. However, // the uriparser library does implement a name-value pair splitter and // assembler which can be front-ended in a future libkml function. bool SplitUri(const string& uri, string* scheme, string* host, string* port, string* path, string* query, string* fragment) { boost::scoped_ptr<UriParser> uri_parser( UriParser::CreateFromParse(uri.c_str())); if (!uri_parser.get()) { return false; } /* splitUri method must return true even if below Get* methods returns false. i.e; this method checks if url is valid and then try to find Scheme, host, port, path, query and fragment. Even if one of them is false that wont indicate the url can't be split As return value of below methods is irrelevent we void cast them to keep coverity checker from annoying us. */ static_cast<void>(uri_parser->GetScheme(scheme)); static_cast<void>(uri_parser->GetHost(host)); static_cast<void>(uri_parser->GetPort(port)); static_cast<void>(uri_parser->GetPath(path)); static_cast<void>(uri_parser->GetQuery(query)); static_cast<void>(uri_parser->GetFragment(fragment)); return true; } bool SplitUriPath(const string& uri, string* path) { boost::scoped_ptr<UriParser> uri_parser( UriParser::CreateFromParse(uri.c_str())); if (!uri_parser.get()) { return false; } return uri_parser->GetPath(path); } bool SplitUriFragment(const string& uri, string* fragment) { boost::scoped_ptr<UriParser> uri_parser( UriParser::CreateFromParse(uri.c_str())); if (!uri_parser.get()) { return false; } return uri_parser->GetFragment(fragment); } bool GetFetchableUri(const string& uri, string* fetchable_uri) { boost::scoped_ptr<UriParser> uri_parser( UriParser::CreateFromParse(uri.c_str())); if (!uri_parser.get()) { return false; } if (!fetchable_uri) { return true; // uri parsed fine, just not interested in output. } string scheme; static_cast<void> (uri_parser->GetScheme(&scheme)); string host; static_cast<void> (uri_parser->GetHost(&host)); if (!scheme.empty() && !host.empty()) { fetchable_uri->append(scheme).append("://",3).append(host); string port; static_cast<void> (uri_parser->GetPort(&port)); if (!port.empty()) { fetchable_uri->append(":",1).append(port); } fetchable_uri->append("/",1); } string path; static_cast<void> (uri_parser->GetPath(&path)); if (!path.empty()) { fetchable_uri->append(path); } return true; } bool KmzSplit(const string& kml_url, string* kmz_url, string* kmz_path) { size_t kmz = kml_url.find(".kmz"); if (kmz == string::npos) { return false; } if (kmz_url) { *kmz_url = kml_url.substr(0, kmz + 4); } if (kmz_path && kml_url.size() > kmz + 4) { *kmz_path = kml_url.substr(kmz + 4 + 1); // one past / after ".kmz/" } else if (kmz_path && kmz == kml_url.size() - 4) { // kml_url was just a kmz file kmz_path->clear(); } return true; } bool ResolveModelTargetHref(const string& base_url, const string& geometry_href, const string& target_href, string* result) { if (!result) { return false; } // First resolve the geometry href against the base URI. string geometry_url; if (!ResolveUri(base_url, geometry_href, &geometry_url)) { return false; // Failed to resolve geometry URL. } // Resolve the targetHref against the resolved geometry URI. if (!ResolveUri(geometry_url, target_href, result)) { return false; } return true; } } // end namespace kmlengine �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/kml_uri.h���������������������������������������������������������������0000664�0000000�0000000�00000015702�12636032571�0017431�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the KML URI resolution and parsing // functions. #ifndef KML_ENGINE_KML_URI_H__ #define KML_ENGINE_KML_URI_H__ #include "kml/base/util.h" namespace kmlengine { // This function implements standard RFC 3986 URI resolution (Section 5). // In the context of KML the base URI is typically that of the KML file // (see KmlFile::get_url()), and "relative" is typically the contents of an // <href> (such as in <NetworkLink>'s <Link> or any Overlay's <Icon>), // <styleUrl> or schemaUrl=. The result string is the resolved URI to fetch. // No network fetching is performed with this function. This merely // computes the URI resolution. // For example, // if the file overlay.kml is fetched from http://host.com/dir/overlay.kml // <GroundOverlay> // <Icon> // <href>../images/pretty.jpg</href> // </Icon> // </GroundOverlay> // ...then the result resolving relative="../images/pretty.jpg" against // the base of "http://host.com/kml/overlay.kml" will be: // "http://host.com/images/pretty.jpg". // Also, note that these same standard rules apply for KMZ URIs. // Here is an example of the two levels of resolution required to resolve // each <targetHref> of a given <Model>'s <ResourceMap>. // First presume the base URI of a KMZ is "http://host.com/dir/model.kmz". // Within the default KML file of the KMZ is the following: // <Model> // <Link> // <href>geometry/bldg.dae</href> // </Link> // <ResourceMap> // <Alias> // <targetHref>../textures/brick.jpg</targetHref> // <sourceHref>../files/CU-Macky-4sideturretnoCulling.jpg</sourceHref> // </Alias> // </ResourceMap> // </Model> // The relative "geometry/bldg.dae" results in // "http://host.com/dir/model.kmz/geometry/bldg.dae". (A KMZ-aware fetching // system is required to split the fetchable URL from the path reference into // the KMZ, but this result is still a valid standard URI). // With the resolved base of "http://host.com/dir/model.kmz/geometry/bldg.dae" // and relative of "../textures/brick.jpg" the resolved result URI is // "http://host.com/dir/model.kmz/textures/brick.jpg" which is to say a // path of "textures/brick.jpg" at the KMZ whose URI is // "http://host.com/dir/model.kmz". Note that it is perfectly valid for a // relative reference with a KMZ to refer "up and out" of the KMZ to // either a file within another KMZ or a single file. bool ResolveUri(const string& base, const string& relative, string* result); // Performs a syntax-based normalization of uri as per RFC 3986 6.2.2. False is // returned if result is NULL or upon any internal error. bool NormalizeUri(const string& uri, string* result); // Performs a syntax-based normalization of href as per RFC 3986 6.2.2. False // is returned if result is NULL or upon any internal error. bool NormalizeHref(const string& href, string* result); // Converts a URI to its corresponding filename. The implementation // is platform-specific. Returns false if output is NULL or on any internal // error in converting the uri. bool UriToFilename(const string& uri, string* output); // Converts a filename to its corresponding URI. The implementation is // platform-specific. Returns false if output is NULL or on any internal // error in converting the uri. bool FilenameToUri(const string& filename, string* output); // This function splits out the various components of a URI: // uri = scheme://host:port/path?query#fragment // An output string NULL pointer simply ignores splitting out that component. // The return value reflects the validity of the uri. Each desired output // string should be inspected using empty() to discover if the uri has // the particular component. bool SplitUri(const string& uri, string* scheme, string* host, string* port, string* path, string* query, string* fragment); // This function returns true if the given uri is valid and has a fragment. // If it has a fragment and a string pointer is supplied it is saved there // (without the #). bool SplitUriFragment(const string& uri, string* fragment); // This function returns true if the given uri is valid and has a path. // If is has a path and the string pointer is supplied it is saved there. bool SplitUriPath(const string& uri, string* path); // This function returns true if the given uri is valid. If the fetchable_uri // output string is supplied a uri w/o the fragment is stored there. bool GetFetchableUri(const string& uri, string* fetchable_uri); // Given a url of the form scheme:authority/path/file.kmz/file/in/kmz this // function splits out the fetchable subfile in the KMZ archive, writing the // fetchable KMZ URL to kmz_url and the archived file to kmz_path. If the // fetchable URL does not end in .kmz it returns false. If there is no subfile // to split out, it sets kmz_path to an empty string. bool KmzSplit(const string& kml_url, string* kmz_url, string* kmz_path); // Resolve the URL to the Model's targetHref. The base is the URL // of the KML file holding the Model. The geometry_href is the value // of the Model's Link/href. The target_href is the value of one of the // Model's ResourceMap/Alias/targetHref's. Note that the result URL may // be into a KMZ and hence might be used with KmzSplit. bool ResolveModelTargetHref(const string& base, const string& geometry_href, const string& target, string* result); } // end namespace kmlengine #endif // KML_ENGINE_KML_URI_H__ ��������������������������������������������������������������libkml-1.3.0/src/kml/engine/kml_uri_internal.h������������������������������������������������������0000664�0000000�0000000�00000011257�12636032571�0021326�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the internal KmlUri class. Do not use // this class in application code. Use the functions declared in kml_uri.h. #ifndef KML_ENGINE_KML_URI_INTERNAL_H__ #define KML_ENGINE_KML_URI_INTERNAL_H__ #include "boost/scoped_ptr.hpp" #include "kml/base/util.h" // Forward declare to avoid including uri_parser.h in app code. namespace kmlbase { class UriParser; } namespace kmlengine { // The main purpose of the KmlUri class is to hold the URI state for a given // fetch. This state is principally a base url and a relative target to fetch. // Ideally any URI stands alone, however, the two-level fetch system used for // relative KMZ references requires the target reference to be retained // to be resolved against either the full URI of the base (typically that of // the KmlFile in the KML Engine) or the URI of the KMZ archive containing // the KML file, in that order. For more details and examples see kml_uri.cc // NOTE: This is an internal class. Do not use in application code. // Applications should use KmlFile (where the API provides the means to pass // a base URI and target URI for relative fetches). class KmlUri { public: // The base is a full absolute URI including scheme. The base is typically // the URI of a KML file as maintained in KmlFile::get_url(). For example, // http://host.com/dir/path.kml, or http://host.com/dir/path.kmz/doc.kml. // (Note that a "bare" KMZ reference here does _not_ automatically imply // "the KML file" within the KMZ. See the note above about this being and // internal class). The target is a relative or abstolue URI typically the // raw content of any <href>, <styleUrl>, schemaUrl=, <targetHref>, // <a href="...">, or <img href="..."> within the KmlFile. However, there // is no specific knowlege of any KML or HTML element within this class. static KmlUri* CreateRelative(const string& base, const string& target); ~KmlUri(); bool is_kmz() const { return is_kmz_; } const string& get_target() const { return target_; } const string& get_url() const { return url_; } const string& get_kmz_url() const { return kmz_url_; } const string& get_path_in_kmz() const { return path_in_kmz_; } // TODO Ideally this class has no non-const methods. No module should alter // a KmlUri. Instead a new one should be created as needed. void set_path_in_kmz(const string path_in_kmz) { path_in_kmz_ = path_in_kmz; url_ = kmz_url_ + "/" + path_in_kmz; } private: // Private constructor. Use static Create() method. // TODO streamline this with the Create method. KmlUri(const string& base, const string& target); bool is_kmz_; // TODO should this be is_relative_kmz_? const string base_; const string target_; // TODO use UriParser's throughout _or_ string, not both. boost::scoped_ptr<kmlbase::UriParser> target_uri_; string url_; // TODO this is too complex. Better might be to create a new KmlUri for // a new fetch. string kmz_url_; string path_in_kmz_; // No copy construction or assignment please. LIBKML_DISALLOW_EVIL_CONSTRUCTORS(KmlUri); }; } // end namespace kmlengine #endif // KML_ENGINE_KML_URI_INTERNAL_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/kmz_cache.cc������������������������������������������������������������0000664�0000000�0000000�00000015351�12636032571�0020051�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the KmzCache class. #include "kml/engine/kmz_cache.h" #include "kml/base/time_util.h" #include "kml/engine/kml_uri_internal.h" using kmlbase::MemoryFilePtr; namespace kmlengine { // This encodes "a bit of history" regarding the two-level fetch semantics of // KMZ relative references. While there exists no formal KMZ specification // it is possible that such would specify a simpler deterministic scheme // such as supporting only the more obvious meaning of relative. But, at this // time (pre KMZ spec) this encodes the behavior of Google Earth for KMZ // files in widespread use today. // // If the base KML file is in a KMZ and the target is relative there are two // possible ways to resolve the absolute URL of the target. The first is // relative to the path _within_ the KMZ and the second is _relative_ to the // KMZ. This code first computes the KMZ-internal path and attempts a lookup // within the KMZ and if that fails computes a KMZ-relative path and attempts // a fetch of that. // // This scheme is used for anything referenced in any Link/href-like element // including the <a href="..."> and <img src="..."> elements within the HTML // of a balloon. No specific knowledge of any KML or HTML element exists // in this code. // // Here are some examples. In all cases the base is the fully resolved // URL of the KML file containing the Link/href-like element. // // Here the base URI is not within a KMZ: // base: http://example.com/path/file.kml // target: more.kml // resolved: http://example.com/path/more.kml // // Here the base IS within a KMZ. Note that this code assumes that the // base is the full URL into the KMZ (as opposed to the "short hand" URL // of the KMZ itself whose behavior is encoded in KmzFile::ReadFile()). // base: http://example.com/path/file.kmz/doc.kml // target: pretty.jpg [for example as <Icon><href>pretty.jpg</href></Icon>] // resolved: http://example.com/path/file.kmz/pretty.jpg // OR // resolved: http://example.com/path/pretty.jpg // // base: http://example.com/path/file.kmz/a/b/c.kml // target: ../images/0.jpg // resolved: http://example.com/path/file.kmz/a/images/0.jpg // OR // resolved: http://example.com/images/0.jpg bool KmzCache::DoFetchAndReturnUrl(KmlUri* kml_uri, string* content, string* fetched_url) { if (!kml_uri || !content) { return false; } // There are three possibilities: // 1) If this is not relative to a KMZ just fetch the raw file. if (!kml_uri->is_kmz()) { if (MemoryFilePtr file = memory_file_cache_->Fetch(kml_uri->get_url())) { *content = file->get_content(); if (fetched_url) { *fetched_url = kml_uri->get_url(); } return true; } return false; // Network fetch for this URL failed. } // 2) This is a KMZ reference _within_ the KMZ. First get the KMZ file. // This _may_ entail a network fetch. But, in typical usage this KMZ is // already in cache given that this is the KMZ that holds the KML file now // doing a relative fetch. const KmzFilePtr kmz_file = Fetch(kml_uri->get_kmz_url()); if (!kmz_file) { return false; // No such KMZ file was found. } // The KMZ file is now in cache, proceed to try to read the file within the // KMZ. This is expected to be a very lightweight operation especially if // the target does not exist in the KMZ file. if (FetchFromCache(kml_uri, content)) { if (fetched_url) { *fetched_url = kml_uri->get_url(); } return true; } // Fall through if the target in the KmlUri was not within the KMZ. // 3) This is a KMZ reference _relative_ to the KMZ file. // PATH/foo.kmz + bar.jpg can mean either PATH/foo.kmz/bar.jpg // OR PATH/bar.jpg. The following attempts the latter. boost::scoped_ptr<KmlUri> kmz_relative( KmlUri::CreateRelative(kml_uri->get_kmz_url(), kml_uri->get_target())); if (!kmz_relative.get()) { return false; } if (fetched_url) { *fetched_url = kmz_relative->get_url(); } return DoFetch(kmz_relative.get(), content); } bool KmzCache::FetchFromCache(KmlUri* kml_uri, string* content) const { if (!kml_uri || !content) { return false; } // The caller expects the KmlUri references a file in a KMZ. // First see if the KMZ is already cached. if (const KmzFilePtr kmz_file = LookUp(kml_uri->get_kmz_url())) { // Yes, the KMZ is in the cache. Now see if the desired file is in the KMZ. if (!kml_uri->get_path_in_kmz().empty()) { // An explicit path within the KMZ was specified. Try to read the // content. return kmz_file->ReadFile(kml_uri->get_path_in_kmz().c_str(), content); } // No explicit path within the KMZ means "the KML file". // NOTE: It is considered a best practice to always use "doc.kml" as the // name of "the KML file" within a KMZ, but this is not guaranteed. // See ReadKml() in kmz_file.h for a discussion on this subject. string kml_path; if (kmz_file->ReadKmlAndGetPath(content, &kml_path)) { // A default KML file was found and its name was saved to kml_path. kml_uri->set_path_in_kmz(kml_path); return true; } } // Fall through to here if this KMZ was not in the cache or if the desired // file was not in the KMZ. return false; } } // end namespace kmlengine ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/kmz_cache.h�������������������������������������������������������������0000664�0000000�0000000�00000007342�12636032571�0017714�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the internal KmzCache class declaration. #ifndef KML_ENGINE_KMZ_CACHE_H__ #define KML_ENGINE_KMZ_CACHE_H__ #include <map> #include "boost/scoped_ptr.hpp" #include "kml/base/memory_file.h" #include "kml/base/net_cache.h" #include "kml/engine/kmz_file.h" namespace kmlengine { class KmlUri; // This class is a cache of network-fetched KmzFile's. The NetFetcher // is supplied by the caller to implement application-specific networking. // See kmlbase::NetCache for more information. // NOTE: Applications should generally use KmlCache. class KmzCache : public kmlbase::NetCache<KmzFile> { typedef kmlbase::NetCache<kmlbase::MemoryFile> MemoryFileCache; public: // This creates a KmzCache to hold up to the given number of KmzFiles. // This same size is used for an internal cache of MemoryFile's of fetched // files which are not KMZ. KmzCache(kmlbase::NetFetcher* net_fetcher_, size_t max_size) : kmlbase::NetCache<KmzFile>(net_fetcher_, max_size) { memory_file_cache_.reset(new MemoryFileCache(net_fetcher_, max_size)); } // This is the main KML Engine internal method to perform a KMZ-aware fetch. // KmlUri encodes the fetch base and target. The data fetched is stored to // the content string. False is returned if kml_uri or content are NULL or // if the fetch fails. If a fetched_url arg is supplied the actual URL // fetched is stored there. bool DoFetchAndReturnUrl(KmlUri* kml_uri, string* content, string* fetched_url); // This wrapper is supplied for backwards compat. bool DoFetch(KmlUri* kml_uri, string* content) { return DoFetchAndReturnUrl(kml_uri, content, NULL); } // This is basically an internal helper method to perform a simple lookup // of a file within a KMZ. If the KmlUri describes a KMZ file in the cache // and the target is exists within that KMZ then the content is saved to // the supplied buffer and true is returned. If the KmlUri is not KMZ // related or if the target is not within the KMZ or if no content buffer // is supplied false is returned. bool FetchFromCache(KmlUri* kml_uri, string* content) const; private: boost::scoped_ptr<MemoryFileCache> memory_file_cache_; }; } // end namespace kmlengine #endif // KML_ENGINE_KMZ_CACHE_H__ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/kmz_file.cc�������������������������������������������������������������0000664�0000000�0000000�00000016743�12636032571�0017733�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // The file contains the implementation of the KmzFile class methods. #include "kml/engine/kmz_file.h" #include <cstring> #include <set> #include "boost/scoped_ptr.hpp" #include "kml/base/file.h" #include "kml/base/string_util.h" #include "kml/base/zip_file.h" #include "kml/engine/get_links.h" #include "kml/engine/href.h" #include "kml/engine/kml_uri.h" #include <new> using kmlbase::File; using kmlbase::StringVector; using kmlbase::ZipFile; namespace kmlengine { // This is the default name for writing a KML file to a new archive. The // default file for reading is simply the first file in the table of contents // that ends with ".kml". const char kDefaultKmlFilename[] = "doc.kml"; KmzFile::KmzFile(ZipFile* zip_file) : zip_file_(zip_file) {} KmzFile::~KmzFile() {} // Static. KmzFile* KmzFile::OpenFromFile(const char* kmz_filename) { if (ZipFile* zipfile = ZipFile::OpenFromFile(kmz_filename)) { return new(std::nothrow) KmzFile(zipfile); } return NULL; } // Static. KmzFile* KmzFile::OpenFromString(const string& kmz_data) { if (ZipFile* zipfile = ZipFile::OpenFromString(kmz_data)) { return new KmzFile(zipfile); } return NULL; } // Static. bool KmzFile::IsKmz(const string& kmz_data) { return ZipFile::IsZipData(kmz_data); } void KmzFile::set_max_uncompressed_file_size(unsigned int i) { zip_file_->set_max_uncompressed_file_size(i); } unsigned int KmzFile::get_max_uncompressed_file_size() { return zip_file_->get_max_uncompressed_file_size(); } bool KmzFile::ReadKmlAndGetPath(string* output, string* kml_name) const { if (!output) { return false; } string default_kml; if (!zip_file_->FindFirstOf(".kml", &default_kml)) { return false; } if (!zip_file_->GetEntry(default_kml, output)) { return false; } if (kml_name) { *kml_name = default_kml; } return true; } bool KmzFile::ReadKml(string* output) const { return ReadKmlAndGetPath(output, NULL); } bool KmzFile::ReadFile(const char* path_in_kmz, string* output) const { return zip_file_->GetEntry(path_in_kmz, output); } bool KmzFile::List(std::vector<string>* subfiles) { return zip_file_->GetToc(subfiles); } bool KmzFile::SaveToString(string* kmz_bytes) { if (!kmz_bytes) { return false; } *kmz_bytes = zip_file_->get_data(); return true; } // Static. KmzFile* KmzFile::Create(const char* kmz_filepath) { ZipFile* zipfile = ZipFile::Create(kmz_filepath); if (!zipfile) { return NULL; } return new KmzFile(zipfile); } bool KmzFile::AddFile(const string& data, const string& path_in_kmz) { return zip_file_->AddEntry(data, path_in_kmz); } // TODO: the implementation of this function really belongs in base/zip_file. size_t KmzFile::AddFileList(const string& base_url, const StringVector& file_paths) { size_t error_count = 0; // We remember all stored resources so we can eliminate duplicates. std::set<string> stored_hrefs; StringVector::const_iterator itr; for (itr = file_paths.begin(); itr != file_paths.end(); ++itr) { // Drop the fragment if any to get the stem of the filename. Href href(*itr); if (href.has_fragment()) { href.clear_fragment(); } // Normalize the href. string normalized_href; if (!NormalizeHref(href.get_path(), &normalized_href)) { error_count++; continue; } // If the normalized_href points above the base_url, we consider it // invalid. if (normalized_href.substr(0, 2) == "..") { error_count++; continue; } // Detect duplicate resources and skip if found. if (stored_hrefs.find(normalized_href) != stored_hrefs.end()) { continue; // Not an error. } stored_hrefs.insert(normalized_href); // Try to read the file pointed to by base_url and the normalized href. string relative_path = File::JoinPaths(base_url, normalized_href); string file_data; if (!kmlbase::File::ReadFileToString(relative_path, &file_data)) { error_count++; continue; } // Add the file to the KMZ archive. if (!AddFile(file_data, normalized_href)) { error_count++; continue; } } return error_count; } // Static. bool KmzFile::WriteKmz(const char* kmz_filepath, const string& kml) { boost::scoped_ptr<KmzFile> kmz(KmzFile::Create(kmz_filepath)); if (!kmz.get()) { return false; } if (!kmz->AddFile(kml, kDefaultKmlFilename)) { return false; } return kmlbase::File::Exists(kmz_filepath); } // Static. bool KmzFile::CreateFromKmlFilepath(const string& kml_filepath, const string& kmz_filepath) { if (kmz_filepath.empty() || kml_filepath.empty()) { return false; } string kml_data; if (!kmlbase::File::ReadFileToString(kml_filepath, &kml_data)) { return false; } string base_dir; kmlbase::File::SplitFilePath(kml_filepath, &base_dir, NULL); KmlFilePtr kml_file = KmlFile::CreateFromStringWithUrl(kml_data, base_dir, NULL); return CreateFromKmlFile(kml_file, kmz_filepath); } // Static. bool KmzFile::CreateFromElement(const kmldom::ElementPtr& element, const string& base_url, const string& kmz_filepath) { if (kmz_filepath.empty()) { return false; } KmzFilePtr kmz_file = Create(kmz_filepath.c_str()); if (!kmz_file) { return false; } const string kml_data = kmldom::SerializePretty(element); // First add the KML file. This is the file opened by default by a client // from a KMZ archive. kmz_file->AddFile(kml_data, kDefaultKmlFilename); // Next gather the local references and add them. StringVector file_paths; if (GetRelativeLinks(kml_data, &file_paths)) { kmz_file->AddFileList(base_url, file_paths); } return kmlbase::File::Exists(kmz_filepath); } // Static. bool KmzFile::CreateFromKmlFile(const KmlFilePtr& kml_file, const string& kmz_filepath) { return KmzFile::CreateFromElement( kml_file->get_root(), kml_file->get_url(), kmz_filepath); } } // end namespace kmlengine �����������������������������libkml-1.3.0/src/kml/engine/kmz_file.h��������������������������������������������������������������0000664�0000000�0000000�00000020501�12636032571�0017560�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the KmzFile class. #ifndef KML_ENGINE_KMZ_FILE_H__ #define KML_ENGINE_KMZ_FILE_H__ #include <vector> #include "boost/intrusive_ptr.hpp" #include "boost/scoped_ptr.hpp" #include "kml/base/referent.h" #include "kml/base/util.h" #include "kml/engine/kml_file.h" // ZipFile hides the implementation details of the underlying zip library from // this interface. namespace kmlbase { class ZipFile; } namespace kmlengine { // The Kmz class represents an instance of a KMZ file. It contains methods // for reading and writing KMZ files. By default, there is an upper limit of // 2 GB on uncompressed file sizes. If you need to lower this limit, use // the set_max_uncompressed_size method. class KmzFile : public kmlbase::Referent { public: ~KmzFile(); // Open a KMZ file from a file path. Returns a pointer to a KmzFile object // if the file could be opened and read, and the data was recognizably KMZ. // Otherwise returns NULL. static KmzFile* OpenFromFile(const char* kmz_filepath); // Open a KMZ file from a string. Returns a pointer to a KmzFile object if a // temporary file could be created, the data was recognizably KMZ. Otherwise // returns NULL. static KmzFile* OpenFromString(const string& kmz_data); static KmzFile* CreateFromString(const string& kmz_data) { return OpenFromString(kmz_data); } // Sets the upper limit for the largest uncompressed file size (in bytes) // for the underlying Zip implementation to handle. By default it is 2 GB. // If this is exceeded, any attempt to read the archived file will return // false. void set_max_uncompressed_file_size(unsigned int i); // Returns the maximum uncompressed file size that the underlying Zip // implementation will handle in bytes. unsigned int get_max_uncompressed_file_size(); // Checks to see if kmz_data looks like a PK ZIP file. static bool IsKmz(const string& kmz_data); // Read the default KML file from a KMZ archive. This is defined as the first // entry in the ZIP table of contents that ends in ".kml". Note that it may // NOT be at the root level of the archive. The ZIP archives table of // contents is exactly the order in which the source files were added to the // archive. Returns false if no KML file. The output string is not cleared // before being written to. bool ReadKml(string* output) const; // This does the same as ReadKml() and in addition returns the path of the // KML file within the KMZ archive if a non-NULL kml_path is supplied. // NOTE: While it is considered a best practice to have The KML file of // a KMZ archive be "doc.kml" this is not always the case. bool ReadKmlAndGetPath(string* output, string* kml_path) const; // Read a specific file from a KMZ archive. Returns false if subfile was not // found, or if subfile could not be read. Note: subfile must be a full path // from the archive root. Relative references of "../../foo" are not handled. // The output string is not cleared before being written to. bool ReadFile(const char* subfile, string* output) const; // Fills a vector of strings of the files contained in the opened KMZ archive. // The vector is not cleared, only appended to. The string is the full path // name of the KML file from the archive root, with '/' as the separator. // Returns false upon error. bool List(std::vector<string>* subfiles); // Saves the raw bytes of the in-memory KMZ file. bool SaveToString(string* kmz_bytes); // These are for the creation of KMZ files: // Creates an empty KmzFile at kmz_filepath on which AddFile may be called. // Returns NULL if the file could not be created for writing. static KmzFile* Create(const char* kmz_filepath); // Writes data to path_in_kmz. The path must be relative to the root of the // archive. e.g. AddFile(data, "somedir/file.png"). If not, false is returned. // False is also returned on any interal zipfile error. bool AddFile(const string& data, const string& path_in_kmz); // Adds a StringVector of hrefs to the KMZ file, resolved against a base // URL. The base URL is usually from kmz_file->get_url() and the hrefs // are most easily generated from GetRelativeLinks. All paths are normalized // prior to writing. // Returns the number of errors encountered during processing. // Errors may result from failure to normalize an href, an href that points // above the base url, or failure to read the resolved file prior to writing. // Duplicate entries are ignored and not considered errors. size_t AddFileList(const string& base_url, const kmlbase::StringVector& file_paths); // Creates a KMZ file from a string of KML data. Returns true if // kmz_filepath could be successfully created and written. // TODO: Permit adding resources (images, models, etc.) to the KMZ archive. static bool WriteKmz(const char* kmz_filepath, const string& kml); // Creates a KMZ file at kmz_filepath from a string of KML. Any local // references in the file are written to the KMZ as archived resources // according to the rules explained in CreateFromElement. // TODO: handle <Model> references. // TODO: handle references in <description>. static bool CreateFromKmlFilepath(const string& kml_filepath, const string& kmz_filepath); // Creates a KMZ file at kmz_filepath from an ElementPtr and a base url. Any // local references in the file are written to the KMZ as archived resources // if and only if the resource URI is relative to and below the base_url. // i.e. <href>/etc/passwd</href> is not valid because it is absolute, and // from a base url of "/home/libkml/" <href>../../etc/passwd</href> is // invalid because it does not point below /home/libkml. // TODO: handle <Model> references. // TODO: handle references in <description>. static bool CreateFromElement(const kmldom::ElementPtr& element, const string& base_url, const string& kmz_filepath); // Creates a KMZ file at kmz_filepath from a KmlFile. Any local // references in the file are written to the KMZ as archived resources // according to the rules laid out above for CreateFromElement. // The KmlFile _must_ have been created with its base URL set to the // local path where the KML file can be found, i.e. // KmlPtr kml_file = KmlFile::CreateFromStringWithUrl(...). // TODO: handle <Model> references. // TODO: handle references in <description>. static bool CreateFromKmlFile(const KmlFilePtr& kml_file, const string& kmz_filepath); private: // Class can only be created from static methods. KmzFile(kmlbase::ZipFile* zip_file); boost::scoped_ptr<kmlbase::ZipFile> zip_file_; LIBKML_DISALLOW_EVIL_CONSTRUCTORS(KmzFile); }; typedef boost::intrusive_ptr<KmzFile> KmzFilePtr; } // end namespace kmlengine #endif // KML_ENGINE_KMZ_FILE_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/link_util.cc������������������������������������������������������������0000664�0000000�0000000�00000004573�12636032571�0020123�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/engine/link_util.h" #include "kml/dom.h" #include "kml/engine/kml_cache.h" #include "kml/engine/kml_uri.h" #include "kml/engine/kml_file.h" namespace kmlengine { KmlFilePtr FetchLink(const KmlFilePtr& kml_file, const kmldom::NetworkLinkPtr& networklink) { if (KmlCache* kml_cache = kml_file->get_kml_cache()) { string href; if (kmlengine::GetLinkParentHref(networklink, &href)) { return kml_cache->FetchKmlRelative(kml_file->get_url(), href); } } return NULL; } bool FetchIcon(const KmlFilePtr& kml_file, const kmldom::OverlayPtr& overlay, string* data) { if (KmlCache* kml_cache = kml_file->get_kml_cache()) { string href; if (kmlengine::GetIconParentHref(overlay, &href)) { return kml_cache->FetchDataRelative(kml_file->get_url(), href, data); } } return false; } } // end namespace kmlengine �������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/link_util.h�������������������������������������������������������������0000664�0000000�0000000�00000006723�12636032571�0017764�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains function templates useful for accessing link element data. #ifndef KML_ENGINE_LINK_UTIL_H__ #define KML_ENGINE_LINK_UTIL_H__ #include "kml/dom.h" #include "kml/engine.h" namespace kmlengine { // This function fetches and parses the KML referenced by this NetworkLink. // The NetworkLink must be within the KmlFile and the KmlFile must point to // a KmlCache (such as a KmlFile created by KmlCache). // If the fetch or parse fail a NULL KmlFilePtr is returned. KmlFilePtr FetchLink(const KmlFilePtr& kml_file, const kmldom::NetworkLinkPtr& networklink); // This function fetches the Overlay's Icon image data. The KmlFile must have // a KmlCache (see KmlCache). If the fetch fails false is returned. bool FetchIcon(const KmlFilePtr& kml_file, const kmldom::OverlayPtr& overlay, string* data); // This function template gets the content of the <href> child of <Link>, // <Icon>, <ItemIcon> and <IconStyle>'s <Icon>. This returns true if both // arguments are non-NULL and if the has_href() test passes for the parent, // else false is returned. (It is safe to pass all or some NULL arguments). template<typename HP> bool GetHref(const HP& href_parent, string* href) { if (href && href_parent && href_parent->has_href()) { *href = href_parent->get_href(); return true; } return false; } // This function template gets the content of the <href> of the <Link> child // of <NetworkLink> and <Model>. See GetHref() for info about the return. template<typename LP> bool GetLinkParentHref(const LP& link_parent, string* href) { return GetHref(link_parent->get_link(), href); } // This function template gets the content of the <href> of the <Icon> child // of any Overlay, or of <IconStyle>. See GetHref() for info about the return. template<typename IP> bool GetIconParentHref(const IP& icon_parent, string* href) { return GetHref(icon_parent->get_icon(), href); } } // end namespace kmlengine #endif // KML_ENGINE_LINK_UTIL_H__ ���������������������������������������������libkml-1.3.0/src/kml/engine/location_util.cc��������������������������������������������������������0000664�0000000�0000000�00000015177�12636032571�0021000�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of location-related utility functions. #include "kml/engine/location_util.h" #include "kml/dom.h" #include "kml/engine/bbox.h" using kmlbase::Vec3; using kmldom::AbstractLatLonBoxPtr; using kmldom::ContainerPtr; using kmldom::CoordinatesPtr; using kmldom::FeaturePtr; using kmldom::GeometryPtr; using kmldom::LinearRingPtr; using kmldom::LineStringPtr; using kmldom::ModelPtr; using kmldom::MultiGeometryPtr; using kmldom::PhotoOverlayPtr; using kmldom::PlacemarkPtr; using kmldom::PointPtr; using kmldom::PolygonPtr; namespace kmlengine { bool GetCoordinatesBounds(const CoordinatesPtr& coordinates, Bbox* bbox) { if (!coordinates) { return false; } size_t num_coords = coordinates->get_coordinates_array_size(); if (bbox) { for (size_t i = 0; i < num_coords; ++i) { const Vec3& vec3 = coordinates->get_coordinates_array_at(i); bbox->ExpandLatLon(vec3.get_latitude(), vec3.get_longitude()); } } return num_coords != 0; } bool GetFeatureBounds(const FeaturePtr& feature, Bbox* bbox) { if (PlacemarkPtr placemark = kmldom::AsPlacemark(feature)) { return GetGeometryBounds(placemark->get_geometry(), bbox); } else if (PhotoOverlayPtr photooverlay = kmldom::AsPhotoOverlay(feature)) { return GetCoordinatesParentBounds(photooverlay->get_point(), bbox); } else if (ContainerPtr container = kmldom::AsContainer(feature)) { // TODO: unify feature hierarchy walking with public API for such size_t num_features = container->get_feature_array_size(); // for (size_t i = 0; i < num_features; ++num_features) { bool has_bounds = false; // Turns true on any Feature w/ bounds. for (size_t i = 0; i < num_features; ++i) { if (GetFeatureBounds(container->get_feature_array_at(i), bbox)) { has_bounds = true; } } return has_bounds; //} } // TODO: other GroundOverlay return false; } bool GetFeatureLatLon(const FeaturePtr& feature, double* lat, double* lon) { Bbox bbox; if (GetFeatureBounds(feature, &bbox)) { if (lat) { *lat = bbox.GetCenterLat(); } if (lon) { *lon = bbox.GetCenterLon(); } return true; } return false; } bool GetGeometryBounds(const GeometryPtr& geometry, Bbox* bbox) { if (!geometry) { return false; } // TODO: Arguably the bounds of a Geometry includes extrusion... if (PointPtr point = AsPoint(geometry)) { return GetCoordinatesParentBounds(point, bbox); } else if (LineStringPtr linestring = AsLineString(geometry)) { return GetCoordinatesParentBounds(linestring, bbox); } else if (LinearRingPtr linearring = AsLinearRing(geometry)) { return GetCoordinatesParentBounds(linearring, bbox); } else if (PolygonPtr polygon = AsPolygon(geometry)) { return polygon->has_outerboundaryis() && polygon->get_outerboundaryis()->has_linearring() && GetCoordinatesParentBounds( polygon->get_outerboundaryis()->get_linearring(), bbox); } else if (ModelPtr model = AsModel(geometry)) { return GetModelBounds(model, bbox); } else if (MultiGeometryPtr multigeometry = AsMultiGeometry(geometry)) { bool has_bounds = false; // Turns true on any Geometry w/ bounds. size_t size = multigeometry->get_geometry_array_size(); for (size_t i = 0; i < size; ++i) { if (GetGeometryBounds(multigeometry->get_geometry_array_at(i), bbox)) { has_bounds = true; } } return has_bounds; } return false; } bool GetGeometryLatLon(const GeometryPtr& geometry, double* lat, double* lon) { Bbox bbox; if (GetGeometryBounds(geometry, &bbox)) { if (lat) { *lat = bbox.GetCenterLat(); } if (lon) { *lon = bbox.GetCenterLon(); } return true; } return false; } bool GetPlacemarkLatLon(const PlacemarkPtr& placemark, double* lat, double* lon) { return GetGeometryLatLon(placemark->get_geometry(), lat, lon); } bool GetModelBounds(const ModelPtr& model, Bbox* bbox) { double lat, lon; if (GetModelLatLon(model, &lat, &lon)) { if (bbox) { bbox->ExpandLatLon(lat, lon); } return true; } return false; } bool GetModelLatLon(const ModelPtr& model, double* lat, double* lon) { if (model) { if (model->has_location()) { if (lat) { *lat = model->get_location()->get_latitude(); } if (lon) { *lon = model->get_location()->get_longitude(); } return true; } } return false; } bool GetPointLatLon(const PointPtr& point, double* lat, double* lon) { if (point) { if (CoordinatesPtr coordinates = point->get_coordinates()) { if (coordinates->get_coordinates_array_size() > 0) { Vec3 point = coordinates->get_coordinates_array_at(0); if (lat) { *lat = point.get_latitude(); } if (lon) { *lon = point.get_longitude(); } return true; } } } return false; } void GetCenter(const AbstractLatLonBoxPtr& allb, double* lat, double* lon) { if (!allb) { return; } if (lat) { *lat = (allb->get_north() + allb->get_south())/2.0; } if (lon) { *lon = (allb->get_east() + allb->get_west())/2.0; } } } // end namespace kmlengine �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/location_util.h���������������������������������������������������������0000664�0000000�0000000�00000010231�12636032571�0020624�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations of location-related utilities. // Since the location of a Feature or Geometry is closely tied to KML // these functions are considered part of the KML Engine and not // simply pure convenenience. #ifndef KML_ENGINE_LOCATION_UTIL_H__ #define KML_ENGINE_LOCATION_UTIL_H__ #include "kml/dom.h" namespace kmlengine { class Bbox; // This returns the latitude half way between the north and south and // the longitude half way between the east and west of the given LatLonBox // or LatLonAltBox. void GetCenter(const kmldom::AbstractLatLonBoxPtr& allb, double* lat, double* lon); // This returns the n,s,e,w bounds of the given list of coordinates. This // returns true if the coordinates are not empty. A NULL bbox is ignored. bool GetCoordinatesBounds(const kmldom::CoordinatesPtr& coordinates, Bbox* bbox); // This returns the n,s,e,w bounds of the given Feature. If the Feature is // a Container this is the bounds of all Features within that Container // recursively. This returns true if the coordinates are not empty. // A NULL bbox is ignored. bool GetFeatureBounds(const kmldom::FeaturePtr& placemark, Bbox* bbox); // Return the location of the Feature. bool GetFeatureLatLon(const kmldom::FeaturePtr& placemark, double* lat, double* lon); // This returns the bounding box of any Geometry including: Point, LineString, // LinearRing, Polygon, Model, and MultiGeometry. If the Geometry has no // location (empty or missing <coordinates>, for example) false is returned. // A NULL bbox is ignored and does not affect the return value. bool GetGeometryBounds(const kmldom::GeometryPtr& geometry, Bbox* bbox); // Return the location of the Geometry. bool GetGeometryLatLon(const kmldom::GeometryPtr& geometry, double* lat, double* lon); // This returns the bounds of the coordinates child of the given element. // CP can be one of LineString, LinearRing or Point. template<class CP> bool GetCoordinatesParentBounds(const CP& cp, Bbox* bbox) { return cp && cp->has_coordinates() && GetCoordinatesBounds(cp->get_coordinates(), bbox); } // Return the bounds of the Model. bool GetModelBounds(const kmldom::ModelPtr& model, Bbox* bbox); // Return the location of the Model. bool GetModelLatLon(const kmldom::ModelPtr& model, double* lat, double* lon); // Return the location of the Placemark. bool GetPlacemarkLatLon(const kmldom::PlacemarkPtr& placemark, double* lat, double* lon); // Return the location of the Point. bool GetPointLatLon(const kmldom::PointPtr& point, double* lat, double* lon); } // end namespace kmlengine #endif // KML_ENGINE_LOCATION_UTIL_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/merge.cc����������������������������������������������������������������0000664�0000000�0000000�00000015001�12636032571�0017214�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the MergeFields() and // MergeElement() functions and their internal helper classes and functions. #include "kml/engine/merge.h" #include <vector> #include "kml/dom.h" #include "kml/dom/serializer.h" #include "kml/engine/clone.h" #include "kml/engine/engine_types.h" #include "kml/engine/find.h" using kmlbase::Attributes; using kmldom::CoordinatesPtr; using kmldom::ElementPtr; using kmldom::KmlDomType; using kmldom::KmlFactory; using kmldom::Serializer; namespace kmlengine { // This Serializer-specialization finds all simple element children in the // source and sets each of their values in the target. class FieldMerger : public Serializer { public: // The target is expected to be a complex element. FieldMerger(ElementPtr target) : target_(target) {} virtual ~FieldMerger() {} // Set the attributes in the target. virtual void BeginById(int type_id, const Attributes& attributes) { // ParseAttributes reflects the state of the passed attributes, so we // preserve the state of the element's attributes here ourselves and into // our private copy of the state merge the passed attributes and then // pass the result to ParseAttributes which sets/clears each attribute to // exactly reflect the state we create here. Attributes target_attributes; target_->SerializeAttributes(&target_attributes); target_attributes.MergeAttributes(attributes); target_->ParseAttributes(target_attributes.Clone()); // Merge on <coordinates> is consistent with setting any other simple // element: replace the content. Since <coordinates> is not implemented // as a simple element and since the only "set" operations on <coordinates> // are add (append) we must first clear the <coordinates>. if (CoordinatesPtr coordinates = AsCoordinates(target_)) { coordinates->Clear(); } } // The default implementation recurses on complex children. FieldMerger is // only interested in the immediate simple children of the serialized element // so its implementation is empty to prevent recursing on complex children. virtual void SaveElement(const ElementPtr& element) { } // Save a lon,lat,alt tuple as appears within <coordinates>. virtual void SaveVec3(const kmlbase::Vec3& vec3) { if (CoordinatesPtr coordinates = AsCoordinates(target_)) { coordinates->add_vec3(vec3); } } // This sets the given field in the target. virtual void SaveStringFieldById(int type_id, string value) { KmlDomType id = static_cast<KmlDomType>(type_id); ElementPtr field = KmlFactory::GetFactory()->CreateFieldById(id); field->set_char_data(value); target_->AddElement(field); } // Serializer::SaveColor() is called to save all Color32 values. virtual void SaveColor(int type_id, const kmlbase::Color32& color) { SaveFieldById(type_id, color.to_string_abgr()); } private: ElementPtr target_; }; // This is the implementation of the public API function to merge the // fields in one element into another. void MergeFields(const ElementPtr& source, ElementPtr target) { // It's actually well behaved to copy each field from the element back on to // itself, but it's a bit silly so we detect that here and just return. // No action is performed if either source or target do not exist. if (!source || !target || source == target) { return; } FieldMerger field_merger(target); source->Serialize(field_merger); } // This function sets all target simple element ("fields") and all complex // element children to values found in the source. This form of merge // behavior is central to "style merging". // TODO: Update/Change behaves _slightly_ differently but may borrow from this. void MergeElements(const ElementPtr& source, ElementPtr target) { if (!source || !target) { return; } // Get the pointers to the immediate complex element children of the source // and target element. ElementVector source_children; GetChildElements(source, false, &source_children); ElementVector target_children; GetChildElements(target, false, &target_children); // Iterate through the source children looking for a match in the target. // TODO: walk through both lists taking advantage of both being in // the same order given that Element::Serialize() is XSD order. for (size_t i = 0; i < source_children.size(); ++i) { size_t j; for (j = 0; j < target_children.size(); ++j) { // If the target has an element of this type... if (source_children[i]->Type() == target_children[j]->Type()) { // ... recurse and merge it. MergeElements(source_children[i], target_children[j]); break; } } // If we get here the target had no child of this type so we clone one. if (j == target_children.size()) { // This smashes anything in the same group. // LineString smashes Point in Placemark... target->AddElement(Clone(source_children[i])); } } // Merge in the immediately simple children of source to target. MergeFields(source, target); } } // end namespace kmlengine �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/merge.h�����������������������������������������������������������������0000664�0000000�0000000�00000006414�12636032571�0017066�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the MergeElements() and MergeFields() // functions. // TODO: move these to an engine-specific kml_funcs.h #ifndef KML_ENGINE_MERGE_H__ #define KML_ENGINE_MERGE_H__ #include "kml/dom.h" namespace kmlengine { // Each set simple child of source is set in target. If a field is not set // (has_xxx() == false) it is not changed in the target. While the intended // usage is for both source and target to be of the same complex type this does // not need to be the case. Thus, it is possible to set the latitude of Camera // from a LookAt. void MergeFields(const kmldom::ElementPtr& source, kmldom::ElementPtr target); // This function implements a deep merge of all simple and complex child // elements of source into the corresponding children of target. The source // is left unchanged upon return. Any complex elements added to target are // complete clones of those from the source. No complex elements are ever // shared between elements. All array value elements in the source are // appended to the corresponding array in the target. Any substitution group // elements (Placemark/Geometry) are _replaced_ in the target; for example, a // Placemark/Point in the target will be fully replaced with a // Placemark/LineString Clone()'ed from the source. Each matching complex // child element of source and target is recursively Merge()'ed. Each field of // source is merged into target (using MergeFields). The source and target // element type do not need to match. Elements from source unknown to target // are handled the same as a parse of unknown elements into the target and // are similarily preserved for serialization. void MergeElements(const kmldom::ElementPtr& source, kmldom::ElementPtr target); } // end namespace kmlengine #endif // KML_ENGINE_MERGE_H__ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/object_id_parser_observer.h���������������������������������������������0000664�0000000�0000000�00000007352�12636032571�0023176�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the definition of the ObjectIdParserObserver class. #ifndef KML_ENGINE_OBJECT_ID_PARSER_OBSERVER_H__ #define KML_ENGINE_OBJECT_ID_PARSER_OBSERVER_H__ #include <map> #include <string> #include "kml/dom.h" #include "kml/dom/parser_observer.h" #include "kml/engine/engine_types.h" namespace kmlengine { // The ObjectIdParserObserver is a kmldom::ParserObserver which gathers all // all Objects with id's into the given map. An Object whose id is already // in the map causes NewElement() to return false if strict parsing is enabled. // Duplicate id attributes are illegal and _should_ cause the parse to fail. // However, Google Earth never enforced this in its KML ingest and thus the // web has a lot of invalid KML. Clients who want to successfully parse unknown // KML from the wider web should attempt to parse this by default. class ObjectIdParserObserver : public kmldom::ParserObserver { public: ObjectIdParserObserver(ObjectIdMap* object_id_map, bool strict_parsing) : object_id_map_(object_id_map), strict_parse_(strict_parsing) {} // TODO: NULL check, or use reference virtual ~ObjectIdParserObserver() {} // This is ParserObserver::NewElement(). If the Element is an Object with an // id and a mapping for this id already exists and strict parsing has been // enabled, return false. Else add this id to Object mapping to the // object_id_map and return true. virtual bool NewElement(const kmldom::ElementPtr& element) { if (kmldom::ObjectPtr object = kmldom::AsObject(element)) { if (object->has_id()) { if (object_id_map_->find(object->get_id()) != object_id_map_->end() && strict_parse_) { // TODO: create an error message return false; // Duplicate id, fail parse. } (*object_id_map_)[object->get_id()] = object; // Last one wins. } } // Not a duplicate id, or strict parsing not enabled, keep parsing. return true; } // The default implementation of Parser::AddChild() is essentially a nop. private: // An ObjectIdParserObserver only exists for a short time and operates // on a persistent ObjectIdMap. ObjectIdMap* object_id_map_; bool strict_parse_; }; } // end namespace kmlengine #endif // KML_ENGINE_OBJECT_ID_PARSER_OBSERVER_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/old_schema_parser_observer.h��������������������������������������������0000664�0000000�0000000�00000006745�12636032571�0023357�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the definition of the OldSchemaParserObserver class. // TODO: This class is still under development. #ifndef KML_ENGINE_OLD_SCHEMA_PARSER_OBSERVER_H__ #define KML_ENGINE_OLD_SCHEMA_PARSER_OBSERVER_H__ #include <map> #include "kml/dom.h" #include "kml/dom/parser_observer.h" #include "kml/engine/engine_types.h" #include "kml/engine/parse_old_schema.h" namespace kmlengine { // This class detects old-style Schema instances, converts them and inserts // the converted Placemark into the container within which the Schema instance // element was found. // TODO: delete the unparsed xml after conversion. class OldSchemaParserObserver : public kmldom::ParserObserver { public: OldSchemaParserObserver(const SchemaNameMap& schema_name_map) : schema_name_map_(schema_name_map) {} virtual ~OldSchemaParserObserver() {} // ParserObserver::AddChild() // Old-style <Schema> looked like this: // <Schema parent="Placemark" name="S_park_boundaries_S"> // ... // </Schema> virtual bool AddChild(const kmldom::ElementPtr& parent, const kmldom::ElementPtr& child) { if (kmldom::ContainerPtr container = kmldom::AsContainer(child)) { size_t size = container->get_unknown_elements_array_size(); for (size_t i = 0; i < size; ++i) { string errors; // TODO: this can fail if the original pass through had CDATA sections // in <description>, for example, which were stripped going into the // unknown elements array. if (kmldom::PlacemarkPtr placemark = ParseOldSchema( container->get_unknown_elements_array_at(i), schema_name_map_, &errors)) { container->add_feature(placemark); // TODO: container->delete_unknown_elements_array_at(i) } // TODO: else terminate the parse and emit the error. } } return true; // Keep parsing. } private: const SchemaNameMap& schema_name_map_; }; } // end namespace kmlengine #endif // KML_ENGINE_OLD_SCHEMA_PARSER_OBSERVER_H__ ���������������������������libkml-1.3.0/src/kml/engine/parse_old_schema.cc�����������������������������������������������������0000664�0000000�0000000�00000006526�12636032571�0021421�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice,// this list of conditions and the following disclaimer in the documentation// and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the ConvertOldSchema() and // ParseOldSchema() functions. #include "kml/engine/parse_old_schema.h" #include <map> #include "kml/dom.h" #include "kml/engine/engine_types.h" using kmldom::PlacemarkPtr; using kmldom::SchemaPtr; namespace kmlengine { bool ConvertOldSchema(const string& input_xml, const SchemaNameMap& schema_name_map, string* output_xml) { if (!output_xml) { return false; } // Determine if this looks like "<tag>...</tag>". if (input_xml[0] != '<') { return false; } string::size_type gt = input_xml.find('>'); if (gt == string::npos) { return false; } const string tag_name = input_xml.substr(1, gt-1); string::size_type end_tag = input_xml.find(string("</" + tag_name + ">")); if (end_tag == string::npos) { return false; } // See if there's a <Schema> by/for this name. SchemaNameMap::const_iterator iter = schema_name_map.find(tag_name); if (iter == schema_name_map.end()) { return false; } // Old <Schema> had a parent= attribute naming the element to extend, but // only <Placemark> was ever supported. (And OGC KML 2.2 <Schema> has no // parent=. Replace <tag>...</tag> with <Placemark>...</Placemark>). *output_xml = "<Placemark>" + input_xml.substr(gt+1, end_tag - gt - 1) + "</Placemark>"; return true; } PlacemarkPtr ParseOldSchema(const string& xml, const SchemaNameMap& schema_name_map, string* errors) { string converted_xml; if (!ConvertOldSchema(xml, schema_name_map, &converted_xml)) { return NULL; } // TODO: translate each field to a <ExtendedData><Data> item, perhaps by // parsing here with a ParserObserver for this specific task. return kmldom::AsPlacemark(kmldom::Parse(converted_xml, errors)); } } // end namespace kmlengine ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/parse_old_schema.h������������������������������������������������������0000664�0000000�0000000�00000007017�12636032571�0021257�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice,// this list of conditions and the following disclaimer in the documentation// and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the "old-schema" parsing functions. #ifndef KML_ENGINE_PARSE_OLD_SCHEMA_H__ #define KML_ENGINE_PARSE_OLD_SCHEMA_H__ #include "kml/dom.h" #include "kml/engine/engine_types.h" namespace kmlengine { // This is how "old-style" <Schema> worked. (This is NOT how <Schema> is used // in OGC KML 2.2. This function is provided to map old-style <Schema> to // OGC-compliant KML. // // In old-style <Schema> the following construct essentially extended // <Placemark> to add a <NAME> field of the given type. All instances of this // element would then appear as <S_park_boundaries_S>...</S_park_boundaries_S> // and would generally take the form of a <Placemark>. Tecnically speaking // the parent could be anything, but <Placemark> was the only element ever // extended in this fashion. // // <Schema parent="Placemark" name="S_park_boundaries_S"> // <SimpleField type="wstring" name="NAME"/> // </Schema> // // <S_park_boundaries_S> // <name>Arches NP</name> // <Polygon>...</Polygon> // <NAME>Arches NP</NAME> // </S_park_boundaries_S> // // Assuming the above <Schema> is in the passed map the above sample is parsed // to the following: // // <Placemark> // <name>Arches NP</name> // <Polygon>...</Polygon> // <ExtendedData> // <Data name="NAME">Arches NP</Data> // </ExtendedData> // <NAME>Arches NP</NAME> // </Placemark> // If the input_xml is an element whose name is in the SchemaNameMap then // this returns a converted <Placemark> to the given output buffer. bool ConvertOldSchema(const string& input_xml, const SchemaNameMap& schema_name_map, string* output_xml); // This uses ConvertOldSchema() to convert and parse the input. If anything // fails NULL is returned and errors are saved to the given error buffer. kmldom::PlacemarkPtr ParseOldSchema(const string& xml, const SchemaNameMap& schema_name_map, string* errors); } // end namespace kmlengine #endif // KML_ENGINE_PARSE_OLD_SCHEMA_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/schema_parser_observer.h������������������������������������������������0000664�0000000�0000000�00000006054�12636032571�0022512�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the definition of the SchemaParserObserver class. #ifndef KML_ENGINE_SCHEMA_PARSER_OBSERVER_H__ #define KML_ENGINE_SCHEMA_PARSER_OBSERVER_H__ #include <map> #include <string> #include "kml/dom.h" #include "kml/dom/parser_observer.h" #include "kml/engine/engine_types.h" namespace kmlengine { // The SchemaParserObserver is a kmldom::ParserObserver which gathers all // all name'ed <Schema>'s into a SchemaNameMap. This implementation treats // <Schema> as global in scope and as such multiple <Schema>'s in the same file // with the same name= follow a "last one wins" pattern. // TODO: decide if <Schema> is scoped by <Document> class SchemaParserObserver : public kmldom::ParserObserver { public: SchemaParserObserver(SchemaNameMap* schema_name_map) : schema_name_map_(schema_name_map) {} virtual ~SchemaParserObserver() {} // ParserObserver::AddChild() // Old-style <Schema> looked like this: // <Schema parent="Placemark" name="S_park_boundaries_S"> // ... // </Schema> virtual bool AddChild(const kmldom::ElementPtr& parent, const kmldom::ElementPtr& child) { if (kmldom::DocumentPtr document = kmldom::AsDocument(parent)) { if (kmldom::SchemaPtr schema = kmldom::AsSchema(child)) { if (schema->has_name()) { // Last one wins on name collisions. (*schema_name_map_)[schema->get_name()] = schema; } } } return true; // Keep parsing. } private: SchemaNameMap* schema_name_map_; }; } // end namespace kmlengine #endif // KML_ENGINE_SCHEMA_PARSER_OBSERVER_H__ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/shared_style_parser_observer.h������������������������������������������0000664�0000000�0000000�00000007261�12636032571�0023741�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the definition of the SharedStyleParserObserver class. #ifndef KML_ENGINE_SHARED_STYLE_PARSER_OBSERVER_H__ #define KML_ENGINE_SHARED_STYLE_PARSER_OBSERVER_H__ #include <map> #include <string> #include "kml/dom.h" #include "kml/dom/parser_observer.h" #include "kml/engine/engine_types.h" namespace kmlengine { // The SharedStyleParserObserver is a kmldom::ParserObserver which gathers all // all shared StyleSelectors into the supplied SharedStyleMap. If strict_parse // is true AddChild() returns false on any id collision causing the parse to // terminate when this is used with kmldom::Parse::AddObserver(). If // strict_parse is false the "last one wins" on any duplicate. // TODO: provide an error log for this latter case. class SharedStyleParserObserver : public kmldom::ParserObserver { public: // A SharedStyleMap must be supplied. SharedStyleParserObserver(SharedStyleMap* shared_style_map, bool strict_parse) : shared_style_map_(shared_style_map), strict_parse_(strict_parse) {} virtual ~SharedStyleParserObserver() {} // ParserObserver::AddChild() virtual bool AddChild(const kmldom::ElementPtr& parent, const kmldom::ElementPtr& child) { // A shared style is defined to be a StyleSelector with an id that is // a child of a Document. If this id already has a mapping return false // to terminate the parse. if (kmldom::DocumentPtr document = kmldom::AsDocument(parent)) { if (kmldom::StyleSelectorPtr ss = kmldom::AsStyleSelector(child)) { if (ss->has_id()) { if (strict_parse_ && shared_style_map_->find(ss->get_id()) != shared_style_map_->end()) { // TODO: provide means to send back an and error string with id return false; // Duplicate id, fail parse. } } // No such mapping so save it, and "last one wins" on non-strict parse. (*shared_style_map_)[ss->get_id()] = ss; } } return true; // Not a duplicate id, keep parsing. } private: SharedStyleMap* shared_style_map_; bool strict_parse_; }; } // end namespace kmlengine #endif // KML_ENGINE_SHARED_STYLE_PARSER_OBSERVER_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/style_inliner.cc��������������������������������������������������������0000664�0000000�0000000�00000011120�12636032571�0020773�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the internal StyleInliner. #include "kml/engine/style_inliner.h" #include "kml/engine/style_inliner_internal.h" #include "kml/engine/id_mapper.h" #include "kml/engine/kml_uri.h" #include "kml/engine/style_resolver.h" namespace kmlengine { StyleInliner::StyleInliner() : in_update_(false) { } // ParserObserver::NewElement() bool StyleInliner::NewElement(const kmldom::ElementPtr& element) { // Grab a pointer to what we will consider the root <Document>. if (!document_ && element->IsA(kmldom::Type_Document)) { document_ = AsDocument(element); } if (element->IsA(kmldom::Type_Update)) { in_update_ = true; } return true; // Always continue parsing. } // TODO: create a kmldom::AsNonDocumentFeature() // static kmldom::FeaturePtr StyleInliner::AsNonDocumentFeature( const kmldom::ElementPtr& element) { if (kmldom::FeaturePtr feature = kmldom::AsFeature(element)) { return feature->IsA(kmldom::Type_Document) ? NULL : feature; } return NULL; } // ParserObserver::EndElement() bool StyleInliner::EndElement(const kmldom::ElementPtr& parent, const kmldom::ElementPtr& child) { if (in_update_) { return true; // Leave everything under <Update> alone. } if (parent->IsA(kmldom::Type_Document)) { // Capture shared styles. if (kmldom::StyleSelectorPtr styleselector = kmldom::AsStyleSelector(child)) { if (styleselector->has_id()) { shared_styles_[styleselector->get_id()] = styleselector; return false; // Do not add the shared style to the <Document>. } } } // Do a "mini-resolve" of each Feature's styleUrl. if (kmldom::FeaturePtr feature = AsNonDocumentFeature(parent)) { if (child->Type() == kmldom::Type_styleUrl) { // If it's a local reference and we've captured this shared style // give a copy of that to the Feature instead of this styleUrl. string fragment; string path; if (SplitUri(child->get_char_data(), NULL, NULL, NULL, &path, NULL, &fragment) && path.empty()) { SharedStyleMap::const_iterator iter = shared_styles_.find(fragment); if (iter != shared_styles_.end()) { feature->set_styleselector( kmlengine::StyleResolver::CreateResolvedStyleSelector( child->get_char_data(), shared_styles_)); return false; // Don't add the <styleUrl> to the feature. } } // We fall to here if the styleUrl is a remote reference or if the // styleUrl's local reference is not found. } } // Everything else. return true; } bool StyleInliner::AddChild(const kmldom::ElementPtr& parent, const kmldom::ElementPtr& child) { if (child->IsA(kmldom::Type_Update)) { in_update_ = false; } return true; // Always continue parsing. } kmldom::ElementPtr InlineStyles(const string& input_kml, string* errors) { StyleInliner style_inliner; kmldom::Parser parser; parser.AddObserver(&style_inliner); return parser.Parse(input_kml, errors); } } // end namespace kmlengine ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/style_inliner.h���������������������������������������������������������0000664�0000000�0000000�00000004100�12636032571�0020635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the internal StyleInliner class. #ifndef KML_ENGINE_STYLE_INLINER_H__ #define KML_ENGINE_STYLE_INLINER_H__ #include "kml/dom.h" namespace kmlengine { // This parses the KML and lines all resolvable local style selector references. // Only those shared style selectors which appear before their styleUrl // reference are inlined by this function (as is fairly typical in most KML). kmldom::ElementPtr InlineStyles(const string& input_kml, string* errors); } // end namespace kmlengine #endif // KML_ENGINE_STYLE_INLINER_H__ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/style_inliner_internal.h������������������������������������������������0000664�0000000�0000000�00000006315�12636032571�0022543�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the internal StyleInliner class. #ifndef KML_ENGINE_STYLE_INLINER_INTERNAL_H__ #define KML_ENGINE_STYLE_INLINER_INTERNAL_H__ #include "kml/base/string_util.h" #include "kml/dom.h" #include "kml/engine/engine_types.h" namespace kmlengine { // This class inlines _most_ shared StyleSelectors into each Feature. // NOTE: Direct use of this class in production code is not recommended. // Use the InlineStyles function declared above. class StyleInliner : public kmldom::ParserObserver { public: StyleInliner(); virtual ~StyleInliner() {} // ParserObserver::NewElement() virtual bool NewElement(const kmldom::ElementPtr& element); // Like AsFeature(), but not if the feature is a <Document>. static kmldom::FeaturePtr AsNonDocumentFeature( const kmldom::ElementPtr& element); // ParserObserver::EndElement() virtual bool EndElement(const kmldom::ElementPtr& parent, const kmldom::ElementPtr& child); // ParserObserver::AddChild() virtual bool AddChild(const kmldom::ElementPtr& parent, const kmldom::ElementPtr& child); // Mostly for debugging, but no reason to hide these. const kmldom::DocumentPtr& get_document() const { return document_; } bool in_update() const { return in_update_; } // All shared styles are added to this map _instead_ of their <Document> // parent. Any duplicate id's are handled in a "last one wins" fashion. const kmlengine::SharedStyleMap& get_shared_styles() const { return shared_styles_; } private: kmlengine::SharedStyleMap shared_styles_; kmldom::DocumentPtr document_; bool in_update_; }; } // end namespace kmlengine #endif // KML_ENGINE_STYLE_INLINER_INTERNAL_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/style_merger.cc���������������������������������������������������������0000664�0000000�0000000�00000014556�12636032571�0020634�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the internal StyleMerger class // used in style resolution. #include "kml/engine/style_merger.h" #include "kml/dom.h" #include "kml/engine/engine_constants.h" #include "kml/engine/kml_cache.h" #include "kml/engine/kml_file.h" #include "kml/engine/kml_uri.h" #include "kml/engine/merge.h" using kmldom::FeaturePtr; using kmldom::KmlFactory; using kmldom::PairPtr; using kmldom::StylePtr; using kmldom::StyleMapPtr; using kmldom::StyleSelectorPtr; using kmldom::StyleStateEnum; namespace kmlengine { // TODO: verify unsigned int to int init of nesting_depth_ ok on MSVC StyleMerger::StyleMerger(const SharedStyleMap& shared_style_map, KmlCache* kml_cache, const string& base_url, StyleStateEnum style_state) : shared_style_map_(shared_style_map), kml_cache_(kml_cache), base_url_(base_url), style_state_(style_state), resolved_style_(KmlFactory::GetFactory()->CreateStyle()), nesting_depth_(kDefaultMaxNestedStyleUrls) { } // TODO: verify unsigned int to int init of nesting_depth_ ok on MSVC StyleMerger::StyleMerger(const SharedStyleMap& shared_style_map, KmlCache* kml_cache, const string& base_url, StyleStateEnum style_state, unsigned int nesting_depth) : shared_style_map_(shared_style_map), kml_cache_(kml_cache), base_url_(base_url), style_state_(style_state), resolved_style_(KmlFactory::GetFactory()->CreateStyle()), nesting_depth_(nesting_depth) { } // static StyleMerger* StyleMerger::CreateFromKmlFile( const KmlFile& kml_file, kmldom::StyleStateEnum style_state) { return new StyleMerger(kml_file.get_shared_style_map(), kml_file.get_kml_cache(), kml_file.get_url(), style_state); } void StyleMerger::MergeStyleUrl(const string& styleurl) { if (--nesting_depth_ < 0) { return; } string path; string style_id; // fragment if (styleurl.empty() || !SplitUri(styleurl, NULL, NULL, NULL, &path, NULL, &style_id) || style_id.empty()) { return; // Empty or bad styleurl or w/o fragment: ignore. } // If there's no path this is a StyleSelector within this file. if (path.empty()) { SharedStyleMap::const_iterator found = shared_style_map_.find(style_id); if (found != shared_style_map_.end()) { MergeStyleSelector(found->second); } return; } // No KmlCache provided for this KmlFile? Just return. if (!kml_cache_) { return; } // This fetches the given style KML from/into the KmlCache. // Note that KmlCache::FetchKml() understands any KML URL including those to // and into a KMZ (style.kmz#styld_id, style.kmz/style.kml#style_id). const KmlFilePtr kml_file = kml_cache_->FetchKmlRelative(base_url_, styleurl); if (!kml_file) { return; // Fetch (and parse) failures are quietly ignored. } // Find the StyleSelector within the KmlFile. StyleSelectorPtr styleselector = kml_file->GetSharedStyleById(style_id); if (!styleselector) { return; // No shared style by this id in this KML file: ignore. } // TODO: resolve relative hrefs in substyles of this styleselector w.r.t. // fetchable_url // Merge in this StyleSelector. MergeStyleSelector(styleselector); } // Both Feature and Pair have a styleUrl and/or StyleSelector. void StyleMerger::MergeStyle(const string& styleurl, const StyleSelectorPtr& styleselector) { // If there's a styleUrl to a shared style merge that in first. MergeStyleUrl(styleurl); // If there's an inline style that takes priority so merge that over. MergeStyleSelector(styleselector); } // Merge in the given StyleMap's Pair's whose key's match the style_state_. void StyleMerger::MergeStyleMap(const StyleMapPtr& stylemap) { if (!stylemap) { return; } // TODO: KML standard language on multiple Pair of the same key. This // implementation is a fine-grained "last one wins". for (size_t i = 0; i < stylemap->get_pair_array_size(); ++i) { // Lack of <key> returns <key>'s default. if (style_state_ == stylemap->get_pair_array_at(i)->get_key()) { PairPtr pair = stylemap->get_pair_array_at(i); // Recurse down this Pair's styleUrl and/or StyleSelector. MergeStyle(pair->get_styleurl(), pair->get_styleselector()); } } } // Merge in the given StyleSelector. void StyleMerger::MergeStyleSelector(const StyleSelectorPtr& styleselector) { // NULL ok with AsXXX() if (StylePtr style = AsStyle(styleselector)) { // All StyleMerger methods ultimately reduce to this call out to the // general purpose element merger. MergeElements(style, resolved_style_); } else if (StyleMapPtr stylemap = AsStyleMap(styleselector)) { MergeStyleMap(stylemap); } } } // endnamespace kmlengine ��������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/style_merger.h����������������������������������������������������������0000664�0000000�0000000�00000013573�12636032571�0020474�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the internal StyleMerger class. // This class is not recommended for use in application code. Use the // StyleResolver API instead. #ifndef KML_ENGINE_STYLE_MERGER_H__ #define KML_ENGINE_STYLE_MERGER_H__ #include "kml/dom.h" #include "kml/engine/engine_types.h" #include "kml/engine/kml_file.h" namespace kmlengine { class KmlCache; // This class computes a resolved style for a Feature in a KML file. // Usage is as follows: // // Create a KmlFileNetCache to fetch and parse a KML file: // KmlFileNetCache kml_file_net_cache(&your_net_fetcher, max_cache_items); // KmlFilePtr = kml_file_net_cache.Fetch(kml_url); // // (Parse into a KmlFile makes use of its GetSharedStyleById()) // // Create a style merger instance for the given style state. // StyleMerger* style_merger = // StyleMerger::CreateFromKmlFile(kmlfile, // STYLESTATE_NORMAL|STYLESTATE_HIGHLIGHT); // // Merge in the Feature's styleUrl and StyleSelector (both may be empty). // style_merger->MergeStyle(styleurl, styleselector); // // MergeStyle() recurses down the styleurl as necessary. // // The caller retrieves the shared style: // StylePtr style = style_merger->ResolvedStyle() // // The style itself is non-null, but only those SubStyles with values // // found in the resolution process are set. // The methods of the StyleResolver is the preferred API to use in // application code. class StyleMerger { public: // A StyleMerger needs a SharedStyleMap and a style state. If both a // KmlCache and base_url are given then StyleMerger performs networked // style resolution to the extent the NetFetcher configured for the KmlCache // provides for remote fetching. If kml_cache is NULL and base_url is empty // or if the styleurl does not reference a fetchable address or if the // NetFetcher for the supplied KmlCache does not provide access to this URL // the given styleurl is effectively (and quietly) ignored. This constructor // defaults the maximum level of styleUrls followed to the KML Engine // internal maximum: see engine_constants.h -- as such styleUrl "loops" are // detected. StyleMerger(const SharedStyleMap& shared_style_map, KmlCache* kml_cache, const string& base_url, kmldom::StyleStateEnum style_state); // This constructor permits an arbirary styleUrl nesting level to be set. StyleMerger(const SharedStyleMap& shared_style_map, KmlCache* kml_cache, const string& base_url, kmldom::StyleStateEnum style_state, unsigned int max_nested_styleurls); // This is a convenience method to create a StyleMerger from a KmlFile. static StyleMerger* CreateFromKmlFile(const KmlFile& kml_file, kmldom::StyleStateEnum style_state); // This method is guaranteed to return non-NULL, however the resolved <Style> // itself may be devoid of child elements which simply means the style is // full default. const kmldom::StylePtr& GetResolvedStyle() const { return resolved_style_; } // Both Feature and Pair have a styleUrl and/or StyleSelector. void MergeStyle(const string& styleurl, const kmldom::StyleSelectorPtr& styleselector); // Merge in the StyleSelector this styleurl references. Remote fetches are // performed through the KmlFileNetCache if one is supplied otherwise // remote fetches are quietly ignored. An empty styleurl is quietly ignored. // This returns immediately and has no action if the styleUrl nesting depth // is < 0; this facilitates styleUrl loop detection. void MergeStyleUrl(const string& styleurl); // Merge in the given StyleMap's Pair's whose key's match the style_state_. void MergeStyleMap(const kmldom::StyleMapPtr& stylemap); // Merge in the given StyleSelector. void MergeStyleSelector(const kmldom::StyleSelectorPtr& styleselector); // Return the current styleUrl nesting depth. If this is < 0 no further // styleUrl references are followed. The resolved style is still essentially // valid, but it's up to the user of this class to decide if that's an error. int get_nesting_depth() const { return nesting_depth_; } private: const SharedStyleMap& shared_style_map_; KmlCache* kml_cache_; string base_url_; const kmldom::StyleStateEnum style_state_; kmldom::StylePtr resolved_style_; int nesting_depth_; }; } // endnamespace kmlengine #endif // KML_ENGINE_STYLE_MERGER_H__ �������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/style_resolver.cc�������������������������������������������������������0000664�0000000�0000000�00000010241�12636032571�0021177�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the CreateResolvedStyle() function. #include "kml/engine/style_resolver.h" #include "kml/dom.h" #include "kml/engine/id_mapper.h" #include "kml/engine/kml_file.h" #include "kml/engine/style_merger.h" using kmldom::FeaturePtr; using kmldom::KmlFactory; using kmldom::PairPtr; using kmldom::StylePtr; using kmldom::StyleMapPtr; using kmldom::StyleSelectorPtr; namespace kmlengine { // This is the implementation of the public API function to compute the // resolved style for a given Feature within a KML file. See the header // for the full description of usage. StylePtr CreateResolvedStyle(const FeaturePtr& feature, const KmlFilePtr& kml_file, kmldom::StyleStateEnum style_state) { return StyleResolver::CreateResolvedStyle(feature->get_styleurl(), feature->get_styleselector(), kml_file->get_shared_style_map(), kml_file->get_url(), kml_file->get_kml_cache(), style_state); } // static StylePtr StyleResolver::CreateResolvedStyle( const string& styleurl, const StyleSelectorPtr& styleselector, const SharedStyleMap& shared_style_map, const string& base_url, KmlCache* kml_cache, kmldom::StyleStateEnum style_state) { StyleMerger style_merger(shared_style_map, kml_cache, base_url, style_state); style_merger.MergeStyle(styleurl, styleselector); // This always returns the thus-far resolved <Style> even if the nesting // level was reached. return style_merger.GetResolvedStyle(); } // static kmldom::StyleSelectorPtr StyleResolver::CreateResolvedStyleSelector( const string& styleurl, const SharedStyleMap& shared_style_map) { const string empty; StyleMapPtr stylemap = KmlFactory::GetFactory()->CreateStyleMap(); PairPtr normal = KmlFactory::GetFactory()->CreatePair(); normal->set_key(kmldom::STYLESTATE_NORMAL); StylePtr style = CreateResolvedStyle(styleurl, NULL, shared_style_map, empty, NULL, kmldom::STYLESTATE_NORMAL); normal->set_styleselector(AsStyleSelector(ClearIds(style))); stylemap->add_pair(normal); PairPtr highlight = KmlFactory::GetFactory()->CreatePair(); highlight->set_key(kmldom::STYLESTATE_HIGHLIGHT); style = CreateResolvedStyle(styleurl, NULL, shared_style_map, empty, NULL, kmldom::STYLESTATE_HIGHLIGHT); highlight->set_styleselector(AsStyleSelector(ClearIds(style))); stylemap->add_pair(highlight); return stylemap; } } // endnamespace kmlengine ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/style_resolver.h��������������������������������������������������������0000664�0000000�0000000�00000006621�12636032571�0021050�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the CreateResolvedStyle() function. #ifndef KML_ENGINE_STYLE_RESOLVER_H__ #define KML_ENGINE_STYLE_RESOLVER_H__ #include "kml/dom.h" #include "kml/engine/kml_cache.h" #include "kml/engine/kml_file.h" namespace kmlengine { // This creates a new <Style> representing the merge of the inline and/or // shared StyleSelector(s) of the given Feature within the given KmlFile for // the given style state (<key>). All SubStyle simple and complex children // set in inline/shared StyleSelectors are also set in the created Style. // This folows an internal maximum number of nested styleUrls. kmldom::StylePtr CreateResolvedStyle(const kmldom::FeaturePtr& feature, const KmlFilePtr& kml_file, kmldom::StyleStateEnum style_state); // This class provides the full set of style resolution possibilities. class StyleResolver { public: // This creates a <Style> representing the fully resolved style of the // given state. The styleurl and styleselector are typically those from // Feature or Pair and the SharedStyleMap, base_url and KmlCache are // typically from a KmlFile. This method is well behaved with any or all // arguments NULL or empty. static kmldom::StylePtr CreateResolvedStyle( const string& styleurl, const kmldom::StyleSelectorPtr& styleselector, const SharedStyleMap& shared_style_map, const string& base_url, KmlCache* kml_cache, kmldom::StyleStateEnum style_state); // This method resolves the style selector for the given styleurl assuming // it references a style selector in the given SharedStyleMap. The resulting // StyleSelector has all id= attributes cleared. static kmldom::StyleSelectorPtr CreateResolvedStyleSelector( const string& styleurl, const SharedStyleMap& shared_style_map); }; } // end namespace kmlengine #endif // KML_ENGINE_STYLE_RESOLVER_H__ ���������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/style_splitter.cc�������������������������������������������������������0000664�0000000�0000000�00000011675�12636032571�0021220�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the StyleSplitter class and the // SplitStyles function. #include "kml/engine/style_splitter.h" #include "kml/engine/style_splitter_internal.h" #include <map> #include "kml/base/string_util.h" #include "kml/dom.h" #include "kml/dom/parser_observer.h" #include "kml/engine/engine_types.h" #include "kml/engine/merge.h" namespace kmlengine { bool StyleSplitter::NewElement(const kmldom::ElementPtr& element) { // Use the first <Document> found as the home of all shared styles. if (!document_ && element->IsA(kmldom::Type_Document)) { document_ = AsDocument(element); } // Don't touch anything inside an <Update>. if (element->IsA(kmldom::Type_Update)) { in_update_ = true; } return true; } // static kmldom::FeaturePtr StyleSplitter::AsNonDocumentFeature( const kmldom::ElementPtr& element) { if (kmldom::FeaturePtr feature = kmldom::AsFeature(element)) { return feature->IsA(kmldom::Type_Document) ? NULL : feature; } return NULL; } // static kmldom::StyleSelectorPtr StyleSplitter::CreateStyleSelector( kmldom::KmlDomType type_id) { if (type_id == kmldom::Type_Style) { return kmldom::KmlFactory::GetFactory()->CreateStyle(); } else if (type_id == kmldom::Type_StyleMap) { return kmldom::KmlFactory::GetFactory()->CreateStyleMap(); } else { return NULL; } } bool StyleSplitter::EndElement(const kmldom::ElementPtr& parent, const kmldom::ElementPtr& child) { // If we're not in <Update> and the child is a StyleSelector... if (!in_update_ && document_ && child->IsA(kmldom::Type_StyleSelector)) { // ...and the parent is a Feature, but not a <Document>... if (kmldom::FeaturePtr feature = AsNonDocumentFeature(parent)) { // ...and the feature does _not_ have a <styleUrl>... if (!feature->has_styleurl()) { const string style_id( CreateUniqueId(*shared_style_map_, id_counter_)); // ...and this id does not collide: if (shared_style_map_->find(style_id) == shared_style_map_->end()) { ++id_counter_; // Bump the id counter only if it was used. // Create an empty StyleSelector of the child's type and set the id. kmldom::StyleSelectorPtr shared = CreateStyleSelector(child->Type()); shared->set_id(style_id); // Merge the children from child into the new StyleSelector. kmlengine::MergeElements(child, shared); // Add the StyleSelector to the Document and the shared style map. document_->add_styleselector(shared); (*shared_style_map_)[shared->get_id()] = shared; // Set the feature's <styleUrl> to this new shared style. feature->set_styleurl(string("#") + style_id); return false; // Do _not_ add this child to this parent. } } } } // Falling through any of the conditions above means no action is taken // to interfere with this child being added to this parent. // Parsing of <Update> is complete so disable guard. if (child->IsA(kmldom::Type_Update)) { in_update_ = false; } return true; // Proceed to add this child to this parent. } kmldom::ElementPtr SplitStyles(const string& input_kml, string* errors) { SharedStyleMap shared_style_map; StyleSplitter style_splitter(&shared_style_map); kmldom::Parser parser; parser.AddObserver(&style_splitter); return parser.Parse(input_kml, errors); } } // end namespace kmlengine �������������������������������������������������������������������libkml-1.3.0/src/kml/engine/style_splitter.h��������������������������������������������������������0000664�0000000�0000000�00000004620�12636032571�0021052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the SplitStyles function. #ifndef KML_ENGINE_STYLE_SPLITTER_H__ #define KML_ENGINE_STYLE_SPLITTER_H__ #include <map> #include "kml/base/string_util.h" #include "kml/dom.h" #include "kml/dom/parser_observer.h" #include "kml/engine/engine_types.h" #include "kml/engine/merge.h" namespace kmlengine { // This parses the given KML splitting all inline styles to the root Document. // The given KML _must_ have a <Document>. For a <Style> or <StyleMap> to be // split from a Feature the following conditions must all be met: // 1) the Feature is not within an <Update> // 2) the Feature is not a <Document> // 3) the Feature does not have a <styleUrl> // 4) the internally generated xml id must exist elsewhere in the KML kmldom::ElementPtr SplitStyles(const string& input_kml, string* errors); } // end namespace kmlengine #endif // KML_ENGINE_STYLE_SPLITTER_H__ ����������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/style_splitter_internal.h�����������������������������������������������0000664�0000000�0000000�00000007703�12636032571�0022753�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the internal StyleSplitter class. // Do not use this class in application code. Applications should use the // SplitStyles() function. #ifndef KML_ENGINE_STYLE_SPLITTER_INTERNAL_H__ #define KML_ENGINE_STYLE_SPLITTER_INTERNAL_H__ #include <map> #include "kml/base/string_util.h" #include "kml/dom.h" #include "kml/dom/parser_observer.h" #include "kml/engine/engine_types.h" #include "kml/engine/merge.h" namespace kmlengine { // This class splits _most_ inline StyleSelectors to shared style // NOTE: Direct use of this class in production code is not recommended. // Use the SplitStyles function declared above. class StyleSplitter : public kmldom::ParserObserver { public: // A SharedStyleMap must be supplied. StyleSplitter(kmlengine::SharedStyleMap* shared_style_map) : shared_style_map_(shared_style_map), id_counter_(0), in_update_(false) {} virtual ~StyleSplitter() {} // ParserObserver::NewElement() virtual bool NewElement(const kmldom::ElementPtr& element); // Like AsFeature(), but not if the feature is a <Document>. static kmldom::FeaturePtr AsNonDocumentFeature( const kmldom::ElementPtr& element); // A convenience routine to create a <Style> or <StyleMap>. static kmldom::StyleSelectorPtr CreateStyleSelector( kmldom::KmlDomType type_id); // The default implementation simply uses the internal sequential id counter // as the xml id for the shared style. A derived class can override this // method and use its own naming scheme, however if the id created is not // unique the given style will not be split from the feature. virtual string CreateUniqueId(const SharedStyleMap& shared_style_map, unsigned int id_counter) { // xml:id cannot begin with a digit. return string("_") + kmlbase::ToString(id_counter); } // ParserObserver::EndElement() virtual bool EndElement(const kmldom::ElementPtr& parent, const kmldom::ElementPtr& child); // Mostly for debugging, but no reason to hide these. unsigned int get_id_counter() const { return id_counter_; } const kmldom::DocumentPtr& get_document() const { return document_; } bool get_in_update() const { return in_update_; } private: kmlengine::SharedStyleMap* shared_style_map_; unsigned int id_counter_; kmldom::DocumentPtr document_; bool in_update_; }; } // end namespace kmlengine #endif // KML_ENGINE_STYLE_SPLITTER_INTERNAL_H__ �������������������������������������������������������������libkml-1.3.0/src/kml/engine/update.cc���������������������������������������������������������������0000664�0000000�0000000�00000004715�12636032571�0017411�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // TODO: nothing here updates the id maps in KmlFile. <Create> can add // an Object with an id (such as a shared style) and <Delete> always deletes // an Object with an id. <Change> should probably be prevented from ever // changing an id. #include "kml/engine/update.h" #include "kml/base/string_util.h" #include "kml/engine/kml_file.h" #include "kml/engine/update_processor.h" using kmlbase::StringMap; using kmldom::UpdatePtr; namespace kmlengine { void ProcessUpdate(const UpdatePtr& update, KmlFilePtr kml_file) { if (update && kml_file) { UpdateProcessor update_processor(*kml_file, NULL); update_processor.ProcessUpdate(update); } } void ProcessUpdateWithIdMap(const UpdatePtr& update, const StringMap* id_map, KmlFilePtr kml_file) { if (update && kml_file) { // UpdateProcessor handles NULL id_map. UpdateProcessor update_processor(*kml_file, id_map); update_processor.ProcessUpdate(update); } } } // end namespace kmlengine ���������������������������������������������������libkml-1.3.0/src/kml/engine/update.h����������������������������������������������������������������0000664�0000000�0000000�00000005650�12636032571�0017252�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_ENGINE_UPDATE_H__ #define KML_ENGINE_UPDATE_H__ #include "kml/dom.h" #include "kml/engine/kml_file.h" namespace kmlengine { // This provides in-place (destructive) processing of the given update against // the given KmlFile. In the case of NetworkLinkControl it is presumed the // caller has checked Update's targetHref against KmlFile's url. void ProcessUpdate(const kmldom::UpdatePtr& update, KmlFilePtr kml_file); // This is the same as ProcessUpdate() except the caller provided StringMap is // used to map the targetId='s in the Update before they are applied to the // id='s in the KmlFile. If a StringMap is supplied and a given targetId= does // not have a mapping to an id= or if an Object with this id= does not exist in // the KmlFile that particular Update target is quietly ignored. While the // target'ed Object's contents are Update'ed the id is not whether the // targetId= is mapped or not. If a NULL pointer is passed for the StringMap // then no mapping are performed and this operates like ProcessUpdate(). void ProcessUpdateWithIdMap(const kmldom::UpdatePtr& update, const kmlbase::StringMap* id_map, KmlFilePtr kml_file); // Clone each Feature in the source_container and append to the target. void CopyFeatures(const kmldom::ContainerPtr& source_container, kmldom::ContainerPtr target_container); } // namespace kmlengine #endif // KML_ENGINE_UPDATE_H__ ����������������������������������������������������������������������������������������libkml-1.3.0/src/kml/engine/update_processor.cc�����������������������������������������������������0000664�0000000�0000000�00000013742�12636032571�0021510�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the internal UpdateProcessor class. // TODO: nothing here updates the id maps in KmlFile. <Create> can add // an Object with an id (such as a shared style) and <Delete> always deletes // an Object with an id. <Change> should probably be prevented from ever // changing an id. #include "kml/engine/update_processor.h" #include "kml/base/string_util.h" #include "kml/engine/clone.h" #include "kml/engine/kml_file.h" #include "kml/engine/merge.h" #include "kml/engine/update.h" using kmlbase::StringMap; using kmldom::AsChange; using kmldom::AsContainer; using kmldom::AsCreate; using kmldom::AsDelete; using kmldom::AsFeature; using kmldom::AsKml; using kmldom::ChangePtr; using kmldom::ContainerPtr; using kmldom::CreatePtr; using kmldom::DeletePtr; using kmldom::FeaturePtr; using kmldom::KmlPtr; using kmldom::ObjectPtr; using kmldom::UpdatePtr; using kmldom::UpdateOperationPtr; namespace kmlengine { void UpdateProcessor::ProcessUpdate(const UpdatePtr& update) { size_t size = update->get_updateoperation_array_size(); for (size_t i = 0; i < size; ++i) { const UpdateOperationPtr& op = update->get_updateoperation_array_at(i); if (ChangePtr change = AsChange(op)) { ProcessUpdateChange(change); } else if (CreatePtr create = AsCreate(op)) { ProcessUpdateCreate(create); } else if (DeletePtr deleet = AsDelete(op)) { ProcessUpdateDelete(deleet); } } } void UpdateProcessor::ProcessUpdateChange(const ChangePtr& change) { size_t size = change->get_object_array_size(); for (size_t i = 0; i < size; ++i) { const ObjectPtr& source_object = change->get_object_array_at(i); string targetid; if (GetTargetId(source_object, &targetid)) { if (ObjectPtr target_object = kml_file_.GetObjectById(targetid)) { MergeElements(source_object, target_object); // It's easier to just clear the target's targetId= attribute than // to teach MergeElements() how to avoid copying targetId from // source to target. This does imply that targetId is treated as // any other attribute and merged over on anything other than the // root Object. Ideally the targetId would not be _within_ the // source Object at all, but such is the OGC KML 2.2 standard. target_object->clear_targetid(); } } } } void UpdateProcessor::ProcessUpdateCreate(const CreatePtr& create) { size_t container_count = create->get_container_array_size(); for (size_t i = 0; i < container_count; ++i) { const ContainerPtr& source_container = create->get_container_array_at(i); string targetid; if (GetTargetId(source_container, &targetid)) { if (ContainerPtr target_container = AsContainer(kml_file_.GetObjectById(targetid))) { CopyFeatures(source_container, target_container); } } } } void UpdateProcessor::ProcessUpdateDelete(const DeletePtr& deleet) { size_t feature_count = deleet->get_feature_array_size(); for (size_t i = 0; i < feature_count; ++i) { const FeaturePtr& source_feature = deleet->get_feature_array_at(i); string targetid; if (GetTargetId(source_feature, &targetid)) { DeleteFeatureById(targetid); } } } FeaturePtr UpdateProcessor::DeleteFeatureById(const string& id) { if (FeaturePtr feature = AsFeature(kml_file_.GetObjectById(id))) { if (ContainerPtr container = AsContainer(feature->GetParent())) { return container->DeleteFeatureById(id); } if (KmlPtr kml = AsKml(feature->GetParent())) { kml->clear_feature(); return feature; } } return NULL; } // This is a key reason for this class: to remap the targetId against // the supplied id map (if one is supplied). bool UpdateProcessor::GetTargetId(const kmldom::ObjectPtr& object, string* targetid) const { if (!object->has_targetid()) { return false; } if (id_map_) { StringMap::const_iterator find = id_map_->find(object->get_targetid()); if (find != id_map_->end()) { if (targetid) { *targetid = find->second; } return true; } return false; } if (targetid) { *targetid = object->get_targetid(); } return true; } void CopyFeatures(const ContainerPtr& source_container, ContainerPtr target_container) { size_t feature_count = source_container->get_feature_array_size(); for (size_t j = 0; j < feature_count; ++j) { target_container->add_feature( AsFeature(Clone(source_container->get_feature_array_at(j)))); } } } // end namespace kmlengine ������������������������������libkml-1.3.0/src/kml/engine/update_processor.h������������������������������������������������������0000664�0000000�0000000�00000006643�12636032571�0021354�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the internal UpdateProcecssor class. // This is not intended for use in application code. See update.h for info // about kmlengine::ProcessUpdate(). #ifndef KML_ENGINE_UPDATE_PROCESSOR_H__ #define KML_ENGINE_UPDATE_PROCESSOR_H__ #include "kml/base/string_util.h" #include "kml/dom/kml_ptr.h" namespace kmlengine { class KmlFile; class UpdateProcessor { public: // Create an UpdateProcessor for a given KmlFile. If an id_map is supplied // then all targetId='s in all Update operations are looked up there to find // the id=' used in the KmlFile. The id='s found inside the KmlFile are never // changed by this class. UpdateProcessor(const KmlFile& kml_file, const kmlbase::StringMap* id_map) : kml_file_(kml_file), id_map_(id_map) { } // Process the given <Update> against the KmlFile associated with this // UpdateProcessor. The <targetHref> is NOT examined. void ProcessUpdate(const kmldom::UpdatePtr& update); // Process the given <Change> against the KmlFile associated with this // UpdateProcessor. void ProcessUpdateChange(const kmldom::ChangePtr& change); // Process the given <Create> against the KmlFile associated with this // UpdateProcessor. void ProcessUpdateCreate(const kmldom::CreatePtr& create); // Process the given <Delete> against the KmlFile associated with this // UpdateProcessor. void ProcessUpdateDelete(const kmldom::DeletePtr& deleet); // This is a key reason for this class: to remap the targetId against // the supplied id map. If the id_map this class was constructed with was // NULL then this simply returns the targetid. bool GetTargetId(const kmldom::ObjectPtr& object, string* targetid) const; private: kmldom::FeaturePtr DeleteFeatureById(const string& id); const kmlengine::KmlFile& kml_file_; const kmlbase::StringMap* id_map_; }; } // end namespace kmlengine #endif // KML_ENGINE_UPDATE_PROCESSOR_H__ ���������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/regionator/��������������������������������������������������������������������0000775�0000000�0000000�00000000000�12636032571�0016515�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/regionator/CMakeLists.txt������������������������������������������������������0000664�0000000�0000000�00000000277�12636032571�0021263�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������file(GLOB SRCS "*.cc" ) file(GLOB INCS "${CMAKE_CURRENT_SOURCE_DIR}/*.h") build_target( NAME kmlregionator SRCS ${SRCS} INCS ${INCS} DEPENDS kmlbase;kmldom;kmlengine;kmlconvenience) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/regionator/feature_list_region_handler.cc��������������������������������������0000664�0000000�0000000�00000006143�12636032571�0024556�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/regionator/feature_list_region_handler.h" #include <map> #include "kml/base/file.h" #include "kml/dom.h" #include "kml/engine.h" #include "kml/regionator/region_handler.h" #include "kml/regionator/regionator.h" #include "kml/regionator/regionator_qid.h" #include "kml/regionator/regionator_util.h" using kmldom::FeaturePtr; using kmldom::FolderPtr; using kmldom::KmlPtr; using kmldom::KmlFactory; using kmldom::PlacemarkPtr; using kmldom::RegionPtr; using kmlconvenience::FeatureList; using kmlengine::Bbox; using kmlregionator::RegionHandler; using kmlregionator::Regionator; namespace kmlregionator { // This is the maximum number of features per region. static const int kMaxPer = 10; bool FeatureListRegionHandler::HasData(const RegionPtr& region) { FeatureList this_region; if (feature_list_.RegionSplit(region, kMaxPer, &this_region) > 0) { FolderPtr folder = KmlFactory::GetFactory()->CreateFolder(); this_region.Save(folder); feature_map_[region->get_id()] = folder; return true; } return false; } FeaturePtr FeatureListRegionHandler::GetFeature(const RegionPtr& region) { // The Regionator calls GetFeature for a region iff we previously had // returned true on this region in HasData(). If we have data in a region // we saved the folder of that data in HasData() which we return now. return feature_map_[region->get_id()]; } void FeatureListRegionHandler::SaveKml(const KmlPtr& kml, const string& filename) { string kml_data(kmldom::SerializePretty(kml)); kmlbase::File::WriteStringToFile(kml_data, filename); } } // end namespace kmlregionator �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/regionator/feature_list_region_handler.h���������������������������������������0000664�0000000�0000000�00000006235�12636032571�0024422�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_REGIONATOR_FEATURE_LIST_REGION_HANDLER_H__ #define KML_REGIONATOR_FEATURE_LIST_REGION_HANDLER_H__ #include <map> #include "kml/dom.h" #include "kml/convenience/feature_list.h" #include "kml/engine.h" #include "kml/regionator/region_handler.h" namespace kmlregionator { // This RegionHandler creates a Region-based NetworkLink hierarchy from a // FeatureList. See the FeatureList class comments for usage of this with // a CSV file of point data. class FeatureListRegionHandler : public RegionHandler { public: FeatureListRegionHandler(kmlconvenience::FeatureList* feature_list) : feature_list_(*feature_list) {} // TODO rename to RegionHandler::BeginRegion() // RegionHandler::HasData() // This is called by the Regionator at the start of the given region. // Here we split out the first kMaxPer Features within this region into // a new FeatureList saved to a map based on the Region's id. virtual bool HasData(const kmldom::RegionPtr& region); // TODO rename to RegionHandler::EndRegion() // RegionHandler::GetFeature() // This is called by the Regionator at the end of the given region iff // HasData returned true for this region. virtual kmldom::FeaturePtr GetFeature(const kmldom::RegionPtr& region); // RegionHandler::SaveKml() // This is called by the Regionator to save the completed KML file. We // simply write the file out into the file system into the current directory. virtual void SaveKml(const kmldom::KmlPtr& kml, const string& filename); private: kmlconvenience::FeatureList feature_list_; std::map<string, kmldom::FolderPtr> feature_map_; }; } // end namespace kmlregionator #endif // KML_REGIONATOR_FEATURE_LIST_REGION_HANDLER_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/regionator/feature_list_regionator.h�������������������������������������������0000664�0000000�0000000�00000016075�12636032571�0023616�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2010, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_REGIONATOR_FEATURE_LIST_REGIONATOR_H__ #define KML_REGIONATOR_FEATURE_LIST_REGIONATOR_H__ #include <map> #include "kml/dom.h" #include "kml/convenience/feature_list.h" #include "kml/engine.h" #include "kml/regionator/regionator.h" #include "kml/regionator/region_handler.h" namespace kmlregionator { // This class provides a "NULL" ProgressMonitor usable with // FeatureListRegionator. class NullProgress { public: // This method is called periodically from the FeatureListRegionator // providing the count of features regionated and the total. The return // status indicates if regionation should proceed or immediately stop. bool RegionatorProgress(unsigned int count, unsigned int total) { // This RegionatorProgress always lets the regionation run to completion. return true; } }; // This RegionHandler creates a Region-based NetworkLink hierarchy from a // FeatureList. YourProgressMonitor is any class which provides a // RegionatorProgress method such as a class implementing a progress bar widget. // Templates are used here to avoid requiring such a class inherit from any // class within libkml. // YourProgressMonitor progress; // Supplies a RegionatorProgress method. // FeatureListRegionator<YourProgressMonitor>::Regionate(feature_list, // features_per_node, // &progress, // output_dir); template<class ProgressMonitor = NullProgress> class FeatureListRegionator : public RegionHandler { public: // RegionHandler::HasData() // This is called by the Regionator at the start of the given region. // Here we split out the first kMaxPer Features within this region into // a new FeatureList saved to a map based on the Region's id. virtual bool HasData(const kmldom::RegionPtr& region) { kmlconvenience::FeatureList this_region; if (feature_list_.RegionSplit(region, max_per_, &this_region) > 0) { kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); this_region.Save(folder); feature_map_[region->get_id()] = folder; if (progress_monitor_) { return progress_monitor_->RegionatorProgress( feature_list_size_ - feature_list_.Size(), feature_list_size_); } return true; } return false; } // RegionHandler::GetFeature() // This is called by the Regionator at the end of the given region iff // HasData returned true for this region. virtual kmldom::FeaturePtr GetFeature(const kmldom::RegionPtr& region) { return feature_map_[region->get_id()]; } // RegionHandler::SaveKml() // This is called by the Regionator to save the completed KML file. We // simply write the file out into the file system into the current directory. virtual void SaveKml(const kmldom::KmlPtr& kml, const string& filename) { string kml_data(kmldom::SerializePretty(kml)); kmlbase::File::WriteStringToFile(kml_data, filename); } // This static method permits a one line call to the regionator for the // data in the given FeatureList. While a feature_list must always be // provided either or both of the ProgressMonitor or output_dir may be NULL. // The return status is that of the overall regionation. See // Regionator::RegionateAligned for more information. static bool Regionate(kmlconvenience::FeatureList* feature_list, unsigned int max_per, ProgressMonitor* progress_monitor, const char* output_dir) { if (!feature_list) { return false; } // Create a root Region based on the bounding box of the FeatureList. kmlengine::Bbox bbox; feature_list->ComputeBoundingBox(&bbox); // The minLodPixels value of 256 means that a given node in the hierarchy // becomes visible at 256^2 pixels, hence max_per items in 256^2 pixels // of screen space. The maxLodPixels value of -1 essentially requests // that the feature remain visible no matter how close the viewpoint. The // overall effect is for features to accumulate as the viewpoint nears (and // also to "thin out" as the viewpoint retreats. (Note that "nears" and // "retreats" are simplistic given that visibility is related also to tilt // and terrain). // For a deeper discussion of these matters please see: // http://code.google.com/apis/kml/documentation/regions.html kmldom::RegionPtr root = kmlconvenience::CreateRegion2d(bbox.get_north(), bbox.get_south(), bbox.get_east(), bbox.get_west(), 256, -1); feature_list->Sort(); FeatureListRegionator flr(feature_list, max_per, progress_monitor); return Regionator::RegionateAligned(flr, root, output_dir); } private: // Use the static Regionate method. FeatureListRegionator(kmlconvenience::FeatureList* feature_list, unsigned int max_per, ProgressMonitor* progress_monitor) : feature_list_(*feature_list), feature_list_size_(feature_list->Size()), max_per_(max_per), progress_monitor_(progress_monitor) { } kmlconvenience::FeatureList feature_list_; const size_t feature_list_size_; std::map<string, kmldom::FolderPtr> feature_map_; const unsigned int max_per_; ProgressMonitor* progress_monitor_; }; } // end namespace kmlregionator #endif // KML_REGIONATOR_FEATURE_LIST_REGIONATOR_H__ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/regionator/region_handler.h����������������������������������������������������0000664�0000000�0000000�00000010143�12636032571�0021645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the RegionHandler abstract base class. #ifndef KML_REGIONATOR_REGION_HANDLER_H__ #define KML_REGIONATOR_REGION_HANDLER_H__ #include "kml/dom.h" namespace kmlregionator { // This abstract base class defines the interface used by the Regionator in // calling out to the class implementing the "Regionation" of a dataset. // The Regionator creates each KML file with Region-based NetworkLinks // and queries the implementation for the KML Feature to show in each Region. // A given specific regionator inherits from this class and implements the // methods as indicated below. Overall usage is: // // Create a specific RegionHandler: // class MyRegionHandler : public RegionHandler {...}; // MyRegionHandler my_region_handler; // // The Regionator walks down the Region hierarchy starting at the // // specified Region calling the RegionHandler methods for each child // // Region in the hierarchy. It is up to the HasData() method to // // eventually terminate the walk of the Region hierarchy. // kmldom::RegionPtr root_region; // Regionator regionator(&my_region_handler, root_region); // regionator.Regionate(NULL); // Or supply a specific output directory. // // All "regionated" KML is now available wherever MyRegionHandler // // saved each file passed in to SaveKml(). class RegionHandler { public: virtual ~RegionHandler() {}; // Silence compiler warning. // This method is the first one called for a given Region. The implementation // of this method should return true if there is data in this Region and/or // below this Region. The implementation must eventually return false // for the Region walk to complete. This method is called _before_ all // children are visited. virtual bool HasData(const kmldom::RegionPtr& region) = 0; // This method is always called if the HasData() method returned true. // The implementation of this method should return the Feature for this // Region. This method is called _after_ all children are visited. virtual kmldom::FeaturePtr GetFeature(const kmldom::RegionPtr& region) = 0; // This method is called for each Region with the KML data for a given // Region along with the file name that the parent NetworkLink will use // to fetch the file. It is implementation dependent just how the KML // is saved, but the exact name in the filename argument should be used // with no modification. // TODO: provide a flag to specify use of .kmz. virtual void SaveKml(const kmldom::KmlPtr& kml, const string& filename) = 0; }; } // end namespace kmlregionator #endif // KML_REGIONATOR_REGION_HANDLER_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/regionator/regionator.cc�������������������������������������������������������0000664�0000000�0000000�00000016415�12636032571�0021204�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file defines the Regionator class which implements the core // "regionation" algorithm. See region_handler.h for how this operates. #include "kml/regionator/regionator.h" #include <sstream> #include "kml/base/file.h" #include "kml/base/mimetypes.h" #include "kml/base/util.h" #include "kml/convenience/atom_util.h" #include "kml/dom.h" #include "kml/engine/bbox.h" #include "kml/engine/feature_view.h" #include "kml/regionator/regionator_qid.h" #include "kml/regionator/regionator_util.h" using kmldom::DocumentPtr; using kmldom::ElementPtr; using kmldom::FeaturePtr; using kmldom::KmlPtr; using kmldom::RegionPtr; namespace kmlregionator { // A Regionator instance is created from a class derived from RegionHandler // and descends over a Region hierarchy as specified. Regionator::Regionator(RegionHandler& rhandler, const RegionPtr& region) : rhandler_(rhandler) , region_count_(0) , output_directory_(0) , root_filename_(0) { root_region_ = CloneRegion(region); root_region_->set_id(Qid::CreateRoot().str()); } Regionator::~Regionator() { } // This provides the relative path name to the KML file for the given Region. // This is the name baked into the NetworkLink/Link/href to the .kml for the // give Region. string Regionator::RegionFilename(const RegionPtr& region) { Qid qid(region->get_id()); if (root_filename_ && qid.IsRoot()) { return root_filename_; } std::stringstream str; str << qid_map_[qid.str()]; return str.str() + ".kml"; } // This is an internal method to recurse down to a child of the given Region. // This will save the child region to output vector if the child has data. void Regionator::Recurse(const RegionPtr& parent, quadrant_t quadrant, region_vector_t* children) { kmldom::RegionPtr child = CreateChildRegion(parent, quadrant); Qid qid(parent->get_id()); child->set_id(qid.CreateChild(quadrant).str()); if (_Regionate(child)) { children->push_back(child); } } // This is an internal method to visit a given Region. All calls to // the RegionHandler are within this method. This method returns false // if there is no data at this Region or below. bool Regionator::_Regionate(const RegionPtr& region) { // Ask the RegionHandler if this region has any data. if (rhandler_.HasData(region) == false) { return false; // No data here or below so no recursing on any children. } Qid qid(region->get_id()); qid_map_[qid.str()] = ++region_count_; // Recurse on each child region saving each with data in the vector. region_vector_t children; Recurse(region, NW, &children); Recurse(region, NE, &children); Recurse(region, SW, &children); Recurse(region, SE, &children); // Create the Document that will be the root feature of the KML file for this // Region. DocumentPtr document = CreateRegionDocument(region); document->set_name(region->get_id()); // Add an <atom:link> for each node. The root gets a "self" relation. // All other nodes get an "up" relation whose href is the root KML file. // up: "A URI that refers to a parent document in a hierarchy of documents." // See: http://www.iana.org/assignments/link-relations/link-relations.xhtml document->set_atomlink(kmlconvenience::AtomUtil::CreateBasicLink( root_filename_ ? root_filename_ : "1.kml", qid.IsRoot() ? "self" : "up", kmlbase::kKmlMimeType)); // Create a NetworkLink to the KML file for each child region with data. for (size_t i = 0; i < children.size(); ++i) { string href = RegionFilename(children[i]); document->add_feature(CreateRegionNetworkLink(children[i], href)); } // Ask the RegionHandler for the Feature for this region. FeaturePtr feature = rhandler_.GetFeature(region); if (feature == NULL) { return false; // This region has no data. } document->add_feature(feature); // Supply the root node of the RbNL hierarchy with a <LookAt> to the natural // bounds of the data if such bounds were supplied using SetNaturalRegion(). if (natural_region_ && qid.IsRoot()) { if (kmldom::LatLonAltBoxPtr llab = natural_region_->get_latlonaltbox()) { kmlengine::Bbox bbox(llab->get_north(), llab->get_south(), llab->get_east(), llab->get_west()); document->set_abstractview(kmlengine::ComputeBboxLookAt(bbox)); } } // Create the root element for the KML file and set the Document as the root // feature. Hand the completed KML file to the RegionHandler for it to save. KmlPtr kml = kmldom::KmlFactory::GetFactory()->CreateKml(); kml->set_feature(document); string filename(RegionFilename(region)); if (output_directory_) { filename = kmlbase::File::JoinPaths(output_directory_, filename); } rhandler_.SaveKml(kml, filename); return true; // This region has data. } // This is the public API to start the "regionation" at the Region supplied // in the constructor. bool Regionator::Regionate(const char* output_directory) { output_directory_ = const_cast<char*>(output_directory); _Regionate(root_region_); return true; } // static bool Regionator::RegionateAligned(RegionHandler& rhandler, const RegionPtr& region, const char* output_directory) { kmldom::LatLonAltBoxPtr llab = CloneLatLonAltBox(region->get_latlonaltbox()); if (!CreateAlignedAbstractLatLonBox(region->get_latlonaltbox(), llab)) { return false; } kmldom::RegionPtr aligned_region = kmldom::KmlFactory::GetFactory()->CreateRegion(); aligned_region->set_latlonaltbox(llab); aligned_region->set_lod(CloneLod(region->get_lod())); boost::scoped_ptr<Regionator> regionator(new Regionator(rhandler, aligned_region)); regionator->SetNaturalRegion(region); return regionator->Regionate(output_directory); } } // end namespace kmlregionator ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/regionator/regionator.h��������������������������������������������������������0000664�0000000�0000000�00000012152�12636032571�0021040�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the Regionator class. See the // comments in region_handler.h for details on programming and regionator.cc // for details of the operation. #ifndef KML_REGIONATOR_REGIONATOR_H__ #define KML_REGIONATOR_REGIONATOR_H__ #include <map> #include <vector> #include "kml/dom.h" #include "kml/regionator/region_handler.h" #include "kml/regionator/regionator_qid.h" namespace kmlregionator { typedef std::vector<kmldom::RegionPtr> region_vector_t; // The Regionator class is the API to the "regionator" algorithm. class Regionator { public: // A Regionator instance is created with a class derived from // RegionHandler and a root Region. Regionator(RegionHandler& rhandler, const kmldom::RegionPtr& region); ~Regionator(); // This method starts the "regionation". See region_handler.h for // details on how this class calls out to the RegionHandler. // The default output directory (output_directory == NULL) is the // current working directory of the caller. Returns true when regionation // has completed. Each generated KML file has a rel="up" link to the root // KML file. The root KML file has a rel="self" link. See SetRootFilename // for the name of the root KML file. Since data presented via Region-based // NetworkLinks used in this manner compounds it is of interest to "reach up" // all the way to the root upon discovering any descendant node. bool Regionate(const char* output_directory); // This method "regionates" using the given RegionHandler and region. The // region is first aligned to the lowest level region in a quadtree rooted // at n=180, s=-180, e=180, w=-180. All output files are saved to the // given directory if a non-NULL pointer is supplied. Regionation progresses // the same whether nor not an output directory is supplied. This also // adds a <LookAt> to the root node for the bounds of the data set as // described by the region used here. static bool RegionateAligned(RegionHandler& rhandler, const kmldom::RegionPtr& region, const char* output_directory); // By default, the resulting root filename will be "1.kml". Provide an // override for that name with this method. This file is also added as the // <atom:link> of every descendent kml. void SetRootFilename(const char *filename) { root_filename_ = filename; } // This <Region>'s <LatLonAltBox> is used as the basis for the <LookAt> // added to the root node of the generated hierarchy. Without this there // is no explicit <LookAt>. void SetNaturalRegion(const kmldom::RegionPtr& region) { natural_region_ = region; } private: kmldom::RegionPtr root_region_; // This calls _Regionate() for the given child of the parent Region. // This saves the child Region to the children vector if the child Region // has data. void Recurse(const kmldom::RegionPtr& parent, quadrant_t quadrant, region_vector_t* children); // This calls the RegionHandler for the given region. If the RegionHandler // returns false from HasData() or NULL from GetFeature() this returns false // signalling that this Region has no data. bool _Regionate(const kmldom::RegionPtr& region); RegionHandler& rhandler_; // This returns the relative filename for the given Region. A parent KML // file NetworkLink will look for a child with this name. string RegionFilename(const kmldom::RegionPtr& region); int region_count_; std::map<string,int> qid_map_; char* output_directory_; const char* root_filename_; kmldom::RegionPtr natural_region_; }; } // end namespace kmlregionator #endif // KML_REGIONATOR_REGIONATOR_H__ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/regionator/regionator_qid.h����������������������������������������������������0000664�0000000�0000000�00000005003�12636032571�0021672�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the definition of the Qid class used to manage the // Region hierarchy walked in the Regionator class. This is an internal class. #ifndef KML_REGIONATOR_REGIONATOR_QID_H__ #define KML_REGIONATOR_REGIONATOR_QID_H__ #include <sstream> #include "kml/base/util.h" namespace kmlregionator { enum quadrant_t { NW, NE, SW, SE }; const char* const kRootName = "q0"; // A Qid is simply a number to identify a Region. There are methods on a Qid // to create Qid's for the four children of a Region. class Qid { public: Qid() {} Qid(const string& qid) : qid_(qid) {} static Qid CreateRoot() { return Qid(kRootName); } Qid CreateChild(quadrant_t quadrant) const { std::stringstream ss; ss << quadrant; return Qid(qid_ + ss.str()); } size_t depth() const { return qid_.size() - 1; } const string& str() const { return qid_; } bool IsRoot() { return qid_ == kRootName; } private: string qid_; }; } // end namespace kmlregionator #endif // KML_REGIONATOR_REGIONATOR_QID_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/regionator/regionator_util.cc��������������������������������������������������0000664�0000000�0000000�00000015071�12636032571�0022236�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of some utility functions used // from within the Regionator which are also available for use in classes // derived from RegionHandler. #include "kml/regionator/regionator_util.h" #include "kml/engine.h" namespace kmlregionator { static const int kAlignRegionMaxDepth = 24; using kmldom::AbstractLatLonBoxPtr; using kmldom::CoordinatesPtr; using kmldom::DocumentPtr; using kmldom::FolderPtr; using kmldom::KmlFactory; using kmldom::LatLonAltBoxPtr; using kmldom::LineStringPtr; using kmldom::LinkPtr; using kmldom::LodPtr; using kmldom::NetworkLinkPtr; using kmldom::PlacemarkPtr; using kmldom::PointPtr; using kmldom::RegionPtr; using kmlengine::Bbox; // This creates a new LatLonAltBox setting all fields set in the original. LatLonAltBoxPtr CloneLatLonAltBox(const LatLonAltBoxPtr& orig) { return AsLatLonAltBox(kmlengine::Clone(orig)); } // This creates a new Lod setting all fields set in the original. LodPtr CloneLod(const LodPtr& orig) { return AsLod(kmlengine::Clone(orig)); } // This creates a new Region based on the LatLonAltBox and/or Lod found in the // original Region. RegionPtr CloneRegion(const RegionPtr& orig) { return AsRegion(kmlengine::Clone(orig)); } bool CreateAlignedAbstractLatLonBox(const AbstractLatLonBoxPtr& llb, AbstractLatLonBoxPtr aligned_llb) { if (!llb || !aligned_llb) { return false; } Bbox qt(180,-180,180,-180); Bbox r(llb->get_north(), llb->get_south(), llb->get_east(), llb->get_west()); if (!r.ContainedByBbox(qt)) { return false; } r.AlignBbox(&qt, 24); aligned_llb->set_north(qt.get_north()); aligned_llb->set_south(qt.get_south()); aligned_llb->set_east(qt.get_east()); aligned_llb->set_west(qt.get_west()); return true; } // This creates a new child Region of the given quadrant of the parent. // The altitude fields of LatLonAltBox are cloned unchanged as are // all fields in the Lod if there is one. RegionPtr CreateChildRegion(const RegionPtr& parent, quadrant_t quadrant) { KmlFactory* factory = KmlFactory::GetFactory(); RegionPtr child = factory->CreateRegion(); if (parent->has_latlonaltbox()) { double mid_lat, mid_lon; kmlengine::GetCenter(parent->get_latlonaltbox(), &mid_lat, &mid_lon); LatLonAltBoxPtr latlonaltbox = CloneLatLonAltBox(parent->get_latlonaltbox()); switch (quadrant) { case NW: latlonaltbox->set_south(mid_lat); latlonaltbox->set_east(mid_lon); break; case NE: latlonaltbox->set_south(mid_lat); latlonaltbox->set_west(mid_lon); break; case SW: latlonaltbox->set_north(mid_lat); latlonaltbox->set_east(mid_lon); break; case SE: latlonaltbox->set_north(mid_lat); latlonaltbox->set_west(mid_lon); break; } child->set_latlonaltbox(latlonaltbox); } if (parent->has_lod()) { // Make an exact clone. child->set_lod(CloneLod(parent->get_lod())); } return child; } // This is a convenience function to create a LineString Placemark whose // coordinates are taken from the LatLonAltBox in the Region. If the Region // has no LatLonAltBox no LineString is created, but a Placemark with the // given name is created and returned. PlacemarkPtr CreateLineStringBox(const string& name, const RegionPtr& region) { KmlFactory* factory = KmlFactory::GetFactory(); PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_name(name); if (region->has_latlonaltbox()) { double north = region->get_latlonaltbox()->get_north(); double south = region->get_latlonaltbox()->get_south(); double east = region->get_latlonaltbox()->get_east(); double west = region->get_latlonaltbox()->get_west(); CoordinatesPtr coordinates = factory->CreateCoordinates(); coordinates->add_latlng(north, west); coordinates->add_latlng(north, east); coordinates->add_latlng(south, east); coordinates->add_latlng(south, west); coordinates->add_latlng(south, west); LineStringPtr linestring = factory->CreateLineString(); linestring->set_coordinates(coordinates); linestring->set_tessellate(true); placemark->set_geometry(linestring); } return placemark; } // This is a convenience function to create a NetworkLink to the specified // url with onRegion refresh semantics. NetworkLinkPtr CreateRegionNetworkLink(const RegionPtr& region, const string& href) { KmlFactory* factory = KmlFactory::GetFactory(); NetworkLinkPtr networklink = factory->CreateNetworkLink(); networklink->set_region(CloneRegion(region)); LinkPtr link = factory->CreateLink(); link->set_href(href); link->set_viewrefreshmode(kmldom::VIEWREFRESHMODE_ONREGION); networklink->set_link(link); return networklink; } // This is a convenience function to create a new Document whose Region // is as specified. DocumentPtr CreateRegionDocument(const RegionPtr& region) { KmlFactory* factory = KmlFactory::GetFactory(); DocumentPtr document = factory->CreateDocument(); document->set_region(CloneRegion(region)); return document; } } // end namespace kmlregionator �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/regionator/regionator_util.h���������������������������������������������������0000664�0000000�0000000�00000006663�12636032571�0022107�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declarations of utility functions used in creating // Region KML. // TODO: the bulk of these are general purpose and should find their way to // some more central place. #ifndef KML_REGIONATOR_REGIONATOR_UTIL_H__ #define KML_REGIONATOR_REGIONATOR_UTIL_H__ #include "kml/base/util.h" #include "kml/dom.h" #include "kml/regionator/regionator_qid.h" namespace kmlengine { class Bbox; } namespace kmlregionator { // Creates a copy of the given LatLonAltBox. kmldom::LatLonAltBoxPtr CloneLatLonAltBox(const kmldom::LatLonAltBoxPtr& orig); // Creates a copy of the given Lod. kmldom::LodPtr CloneLod(const kmldom::LodPtr& orig); // Creates a deep copy of the given Region. kmldom::RegionPtr CloneRegion(const kmldom::RegionPtr& orig); // This sets the bounds of the output aligned_llb to the lowest level node // in a quadtree rooted at n=180, s=-180, e=180, w=-180. bool CreateAlignedAbstractLatLonBox(const kmldom::AbstractLatLonBoxPtr& llb, kmldom::AbstractLatLonBoxPtr aligned_llb); // Creates a Region whose LatLonAltBox is the specified quadrant of // that in the parent. The created Region's Lod is cloned from the parent. kmldom::RegionPtr CreateChildRegion(const kmldom::RegionPtr& parent, quadrant_t quadrant); // Create a Placemark with LineString based on the LatLonAltBox in the Region. kmldom::PlacemarkPtr CreateLineStringBox(const string& name, const kmldom::RegionPtr& region); // Create a NetworkLink to the given URL with a Region cloned from the // given Region. kmldom::NetworkLinkPtr CreateRegionNetworkLink(const kmldom::RegionPtr& region, const string& href); // Create a Document with a Region cloned from the given Region. kmldom::DocumentPtr CreateRegionDocument(const kmldom::RegionPtr& region); } // end namespace kmlregionator #endif // KML_REGIONATOR_REGIONATOR_UTIL_H__ �����������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/���������������������������������������������������������������������������0000775�0000000�0000000�00000000000�12636032571�0015142�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/CMakeLists.txt�������������������������������������������������������������0000664�0000000�0000000�00000000230�12636032571�0017675�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������file(GLOB SRCS "*.cc" ) file(GLOB INCS "${CMAKE_CURRENT_SOURCE_DIR}/*.h") build_target( NAME kmlxsd SRCS ${SRCS} INCS ${INCS} DEPENDS kmlbase) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_complex_type.cc��������������������������������������������������������0000664�0000000�0000000�00000003576�12636032571�0021052�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the XsdComplexType class. #include "kml/xsd/xsd_complex_type.h" #include "kml/base/attributes.h" namespace kmlxsd { // private bool XsdComplexType::ParseAttributes(const kmlbase::Attributes& attributes) { // <xs:complexType name="FooType">. Returns false if there's no name=. return attributes.GetString("name", &name_); } } // end namespace kmlxsd ����������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_complex_type.h���������������������������������������������������������0000664�0000000�0000000�00000010712�12636032571�0020702�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_XSD_XSD_COMPLEX_TYPE_H__ #define KML_XSD_XSD_COMPLEX_TYPE_H__ #include <vector> #include "boost/intrusive_ptr.hpp" #include "kml/base/attributes.h" #include "kml/xsd/xsd_element.h" #include "kml/xsd/xsd_type.h" namespace kmlxsd { class XsdComplexType; // Use this typedef to manage the XsdComplexType pointer. For example: // XsdComplexTypePtr complex_type = XsdComplexType::Create(attributes); typedef boost::intrusive_ptr<XsdComplexType> XsdComplexTypePtr; // Corresponds to <xs:complexType> with possible <xs:extension> and use of // <xs:sequence> (order of <xs:element>'s matters in <xs:sequence>). class XsdComplexType : public XsdType { public: // Create an XsdComplexType from the given attributes. The "name" attribute // must exist for this to succeed. On success a pointer is returned which // may be managed with intrusive_ptr using the recommended typedef above. static XsdComplexType* Create(const kmlbase::Attributes& attributes) { string name; if (attributes.GetString("name", &name)) { return new XsdComplexType(name); } return NULL; } // This dynamic cast to XsdComplexTypePtr returns non-NULL if the xsd_type // is non-NULL and is_complex() is true. static XsdComplexTypePtr AsComplexType(const XsdTypePtr& xsd_type) { if (xsd_type && xsd_type->get_xsd_type_id() == XSD_TYPE_COMPLEX) { return boost::static_pointer_cast<XsdComplexType>(xsd_type); } return NULL; } virtual XsdTypeEnum get_xsd_type_id() const { return XSD_TYPE_COMPLEX; } virtual bool is_complex() const { return true; } // Get the value of the name attribute. virtual const string get_name() const { return name_; } virtual const string get_base() const { return extension_base_; } // Set the value of the "base" attribute of the complexType's // <xs:extension> element. void set_extension_base(const string& extension_base) { extension_base_ = extension_base; } // Get the <xs:extension base=".."> value. const string& get_extension_base() const { return extension_base_; } // Return true IFF this complexType has an <xs:extension base="..."/>. bool has_extension_base() const { return !extension_base_.empty(); } // Append the given <xs:element> to this complexType's <xs:sequence>. void add_element(const XsdElementPtr& element) { sequence_.push_back(element); } // Return the number of elements in the <xs:sequence>. size_t get_sequence_size() const { return sequence_.size(); } // Return the index'th element in the <xs:sequence>. const XsdElementPtr get_sequence_at(size_t index) const { return sequence_[index]; } private: bool ParseAttributes(const kmlbase::Attributes& attributes); XsdComplexType(const string& name) : name_(name) { } string name_; string extension_base_; // <xs:extension base="xx"> std::vector<XsdElementPtr> sequence_; // <xs:sequence> of <xs:element>'s. }; } // end namespace kmlxsd #endif // KML_XSD_XSD_COMPLEX_TYPE_H__ ������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_element.cc�������������������������������������������������������������0000664�0000000�0000000�00000005337�12636032571�0017770�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the XsdElement class. #include "kml/xsd/xsd_element.h" #include "kml/xsd/xsd_primitive_type.h" #include "kml/base/attributes.h" namespace kmlxsd { // private XsdElement::XsdElement() : abstract_(false), // XSD default ref_(false), type_id_(XsdPrimitiveType::XSD_INVALID) { } // private bool XsdElement::ParseAttributes(const kmlbase::Attributes& attributes) { // <xs:element> comes in one of two forms: // <xs:element name=".." type=".." [default=".."] [substitutionGroup=".."]/> if (attributes.GetString("name", &name_)) { attributes.GetBool("abstract", &abstract_); attributes.GetString("default", &default_); attributes.GetString("type", &type_); type_id_ = XsdPrimitiveType::GetTypeId(type_); attributes.GetString("substitutionGroup", &substitution_group_); return true; } // <xs:element ref=".."/> if (attributes.GetString("ref", &name_)) { ref_ = true; return true; } return false; } // static XsdElement* XsdElement::Create(const kmlbase::Attributes& attributes) { XsdElement* xsd_element = new XsdElement; if (xsd_element->ParseAttributes(attributes)) { return xsd_element; } delete xsd_element; return NULL; } } // end namespace kmlxsd �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_element.h��������������������������������������������������������������0000664�0000000�0000000�00000007644�12636032571�0017635�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the XsdElement class. #ifndef KML_XSD_XSD_ELEMENT_H__ #define KML_XSD_XSD_ELEMENT_H__ #include "boost/intrusive_ptr.hpp" #include "kml/base/referent.h" #include "kml/xsd/xsd_primitive_type.h" namespace kmlbase { class Attributes; } namespace kmlxsd { // XsdElement corresponds to <xs:element name="..." type="..." ... /> // or <xs:element ref="..."/>. class XsdElement : public kmlbase::Referent { public: // Create an XsdElement from the given attributes. static XsdElement* Create(const kmlbase::Attributes& attributes); // Get the value of the <xs:element abstract="..."> attribute. bool is_abstract() const { return abstract_; } // Get the value of the <xs:element default="..."> attribute. const string& get_default() const { return default_; } // Get the value of the <xs:element name="..."> attribute. This is the // value of ref= if is_ref() is true. const string& get_name() const { return name_; } // Get the <xs:element substitutionGroup="..."> attribute. const string& get_substitution_group() const { return substitution_group_; } // Get the <xs:element type="..."> attribute. const string& get_type() const { return type_; } // Return the XSD type id of the element type IF this element is of a // primitive type, else return XSD_INVALID. XsdPrimitiveType::TypeId get_type_id() const { return type_id_; } // This returns true if the element is of an XSD native/primitive type. // Note that an element of any simpleType is _not_ considered primitive. // See XsdPrimitiveType for the list of XSD primitive types. bool is_primitive() const { return type_id_ != XsdPrimitiveType::XSD_INVALID; } // This returns true if this is an <xs:element ref="..."> and false if this // is an <xs:element name="..." ... > bool is_ref() const { return ref_ == true; } private: // Use static Create(). XsdElement(); // Set the class internals from the attributes and return true if the // attributes were valid for an <xsd:element>. False is returned if there // was no "name" or "ref" attribute found. bool ParseAttributes(const kmlbase::Attributes& attributes); bool abstract_; bool ref_; string default_; string name_; string type_; XsdPrimitiveType::TypeId type_id_; string substitution_group_; }; typedef boost::intrusive_ptr<XsdElement> XsdElementPtr; } // end namespace kmlxsd #endif // KML_XSD_XSD_ELEMENT_H__ ��������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_file.cc����������������������������������������������������������������0000664�0000000�0000000�00000022462�12636032571�0017254�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/xsd/xsd_file.h" #include <algorithm> #include <vector> #include "kml/base/expat_handler.h" #include "kml/base/expat_parser.h" #include "kml/base/string_util.h" #include "kml/xsd/xsd_handler.h" using std::vector; using kmlbase::ExpatParser; namespace kmlxsd { // static XsdFile* XsdFile::CreateFromParse(const string& xsd_data, string* errors) { XsdFile* xsd_file = new XsdFile; XsdHandler xsd_handler(xsd_file); if (ExpatParser::ParseString(xsd_data, &xsd_handler, errors, false)) { return xsd_file; } delete xsd_file; return NULL; } // TODO: mem_fun might help avoid this functor typedef std::pair<string, XsdElementPtr> NameElementPair; struct GetElement : public std::unary_function<NameElementPair, void> { GetElement(XsdElementVector* elements) : elements_(elements) { } void operator()(NameElementPair name_element_pair) { elements_->push_back(name_element_pair.second); } private: XsdElementVector* elements_; }; void XsdFile::GetAllElements(XsdElementVector* elements) const { // TODO: a normal for loop would be simpler... std::for_each(element_map_.begin(), element_map_.end(), GetElement(elements)); } void XsdFile::GetAllTypes(XsdTypeVector* types) const { XsdTypeMap::const_iterator iter = type_map_.begin(); XsdTypeMap::const_iterator type_map_end = type_map_.end(); for(;iter != type_map_end; ++iter) { XsdTypePtr xsd_type = iter->second; types->push_back(xsd_type); } } const XsdTypePtr XsdFile::FindType(const string& type_name) const { XsdTypeMap::const_iterator iter = type_map_.find(type_name); return iter == type_map_.end() ? NULL : iter->second; } const XsdElementPtr XsdFile::FindElement( const string& element_name) const { XsdElementMap::const_iterator iter = element_map_.find(element_name); return iter == element_map_.end() ? NULL : iter->second; } const XsdTypePtr XsdFile::FindElementType(const XsdElementPtr& element) const { // Not much to do if the <xs:element> has no type="..." attribute. if (!element || element->get_type().empty()) { return NULL; } // If this is primitive synthesize an XsdType. if (element->is_primitive()) { return XsdPrimitiveType::Create(element->get_type()); } // Chop off the namespace prefix of this element's type IFF this type is in // the <xs:schema>'s targetNamespace. string type_name; if (!xsd_schema_ || !xsd_schema_->SplitNsName(element->get_type(), &type_name)) { return NULL; } return FindType(type_name); } void XsdFile::FindChildElements(const XsdComplexTypePtr& complex_type, XsdElementVector* elements) const { if (!complex_type) { return; } size_t sequence_size = complex_type->get_sequence_size(); for (size_t i = 0; i < sequence_size; ++i) { const XsdElementPtr element = complex_type->get_sequence_at(i); if (element->is_ref()) { elements->push_back(ResolveRef(element->get_name())); } else { elements->push_back(element); } } } void XsdFile::GetChildElements(const string& complex_element_name, XsdElementVector* elements) const { const XsdTypePtr xsd_type = FindElementType(FindElement(complex_element_name)); if (XsdComplexTypePtr complex_type = XsdComplexType::AsComplexType(xsd_type)) { FindChildElements(complex_type, elements); } } const XsdElementPtr XsdFile::ResolveRef(const string& element_ref) const { // Proceed only if there is an <xs:schema> set and if the given element_ref // is for this XSD file's target namespace. string element_name; if (!xsd_schema_ || !xsd_schema_->SplitNsName(element_ref, &element_name)) { return NULL; } return FindElement(element_name); } XsdComplexTypePtr XsdFile::GetBaseType( const XsdComplexTypePtr& complex_type) const { string type_name; if (!xsd_schema_->SplitNsName(complex_type->get_extension_base(), &type_name)) { return NULL; // XSD is incomplete. } return XsdComplexType::AsComplexType(FindType(type_name)); } bool XsdFile::GetTypeHierarchy(const XsdComplexTypePtr& complex_type, vector<XsdComplexTypePtr>* type_hier) const { if (!xsd_schema_) { // Not much we can do w/o a <xs:schema ... >! return false; } XsdComplexTypePtr current = complex_type; while (current->has_extension_base()) { if (XsdComplexTypePtr base = GetBaseType(current)) { if (type_hier) { type_hier->push_back(base); } current = base; } else { return false; } } return true; // Walked type hierarchy successfully. } // TODO: XsdFile::ElementIterator w/ some filter or a back_inserter-alike for // these three... void XsdFile::GetAbstractElements(XsdElementVector* elements) const { XsdElementMap::const_iterator iter = element_map_.begin(); for (; iter != element_map_.end(); ++iter) { XsdElementPtr element = iter->second; // TODO: filter out extension elements, e.g., only referenced substi-groups if (element->is_abstract()) { elements->push_back(element); } } } void XsdFile::GetComplexElements(XsdElementVector* elements) const { XsdElementMap::const_iterator iter = element_map_.begin(); for (; iter != element_map_.end(); ++iter) { XsdElementPtr element = iter->second; if (!element->is_abstract()) { // TODO: FindElementType a bit inefficient... make a map<element,type> if (XsdComplexType::AsComplexType(FindElementType(element))) { elements->push_back(element); } } } } void XsdFile::GetSimpleElements(XsdElementVector* elements) const { XsdElementMap::const_iterator iter = element_map_.begin(); for (; iter != element_map_.end(); ++iter) { XsdElementPtr element = iter->second; if (!element->is_abstract()) { if (element->is_primitive() || (XsdSimpleType::AsSimpleType(FindElementType(element)))) { elements->push_back(element); } } } } // TODO: this isn't particularily XsdFile-specific void XsdFile::GenerateElementIdVector(XsdElementVector* elements, size_t* begin_complex, size_t *begin_simple) const { // TODO: make a map<XsdElement, XsdType> first and avoid FindElementType // in the GetXxxElements() above. if (!elements) { return; } GetAbstractElements(elements); if (begin_complex) { *begin_complex = elements->size(); } GetComplexElements(elements); if (begin_simple) { *begin_simple = elements->size(); } GetSimpleElements(elements); } bool XsdFile::SearchTypeHierarchy(const XsdComplexTypePtr& complex_type, const XsdComplexTypePtr& find_type) const { if (!xsd_schema_) { // Not much we can do w/o a <xs:schema ... >! return false; } if (find_type == complex_type) { return true; } if (XsdComplexTypePtr base_type = GetBaseType(complex_type)) { return SearchTypeHierarchy(base_type, find_type); } return false; } void XsdFile::GetElementsOfType(const XsdComplexTypePtr& type, XsdElementVector* elements) const { if (!elements) { return; } XsdElementMap::const_iterator iter = element_map_.begin(); for (; iter != element_map_.end(); ++iter) { XsdElementPtr element = iter->second; if (XsdComplexTypePtr complex_type = XsdComplexType::AsComplexType(FindElementType(element))) { if (SearchTypeHierarchy(complex_type, type)) { elements->push_back(element); } } } } void XsdFile::GetElementsOfTypeByName(const string& type_name, XsdElementVector* elements) const { if (!elements) { return; } if (const XsdComplexTypePtr complex_type = XsdComplexType::AsComplexType(FindType(type_name))) { GetElementsOfType(complex_type, elements); } } } // end namespace kmlxsd ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_file.h�����������������������������������������������������������������0000664�0000000�0000000�00000017107�12636032571�0017116�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the XsdFile class. #ifndef KML_XSD_XSD_FILE_H__ #define KML_XSD_XSD_FILE_H__ #include <map> #include <stack> #include <vector> #include "boost/scoped_ptr.hpp" #include "kml/base/xmlns.h" #include "kml/xsd/xsd_element.h" #include "kml/xsd/xsd_complex_type.h" #include "kml/xsd/xsd_schema.h" #include "kml/xsd/xsd_simple_type.h" #include "kml/xsd/xsd_type.h" namespace kmlxsd { typedef std::map<string, string> XsdAliasMap; typedef std::map<string, XsdElementPtr> XsdElementMap; typedef std::vector<XsdElementPtr> XsdElementVector; typedef std::map<string, XsdTypePtr> XsdTypeMap; typedef std::vector<XsdTypePtr> XsdTypeVector; // This class holds the state of a processed XSD file. Overall usage: // // Process: fetch and parse. // const string xsd_data = fetch_the_xsd_file(); // string errors; // XsdFile* xsd_file = XsdFile::CreateFromParse(xsd_data, &errors); // // Access XSD file info. // xsd_file.GetElementNames(...); // xsd_file.IsComplex(...); // GetChildElementNames(...); class XsdFile { public: static XsdFile* CreateFromParse(const string& xsd_data, string* errors); XsdFile() {} // Use static CreateFromParse(). // Set <xs:schema> info. The attributes are those of the <schema> element // in the XSD file. void set_schema(const XsdSchemaPtr& xsd_schema) { xsd_schema_ = xsd_schema; } // Add global <xs:element> info. A "global" <xs:element> is a child of // <xs::schema>. void add_element(const XsdElementPtr& xsd_element) { element_map_[xsd_element->get_name()] = xsd_element; } // Add a <xs:complexType> or <xs:simpleType>. void add_type(const XsdTypePtr& xsd_type) { type_map_[xsd_type->get_name()] = xsd_type; } const string& get_target_namespace() const { return xsd_schema_->get_target_namespace(); } const string& get_target_namespace_prefix() const { return xsd_schema_->get_target_namespace_prefix(); } // Create an alias. For example, "AbstractFeatureGroup" == "Feature". void set_alias(const string& real_name, const string& alias_name) { alias_map_[real_name] = alias_name; } // Returns the alias for this name or NULL if this name has no alias. For // example, if set_alias("AbstractGeometryGroup", "Geometry") was used then // get_alias("AbstractGeometryGroup") returns "Geometry". const string get_alias(const string& real_name) const { XsdAliasMap::const_iterator iter = alias_map_.find(real_name); return iter == alias_map_.end() ? "" : iter->second; } // Return all <xs:element> children of <xs:schema>. Order is not preserved // w.r.t. to the XSD file. void GetAllElements(XsdElementVector* elements) const; // Return all <xs:complexType> and <xs:simpleType> children of <xs:schema>. // Order is not preserved w.r.t. to the XSD file. void GetAllTypes(XsdTypeVector* type) const; // Return the names of the immediate child elements of the given complex // element. Each <xs:element ref="..."> is resolved. void FindChildElements(const XsdComplexTypePtr& complex_element, XsdElementVector* elements) const; void GetChildElements(const string& complex_element_name, XsdElementVector* elements) const; // This looks up the given element by name. const XsdElementPtr FindElement(const string& element_name) const; // Return the XsdType for the given element. If there is no type for this // element in the target namespace NULL is returned. const XsdTypePtr FindElementType(const XsdElementPtr& element) const; // This looks up the given type by name. const XsdTypePtr FindType(const string& type_name) const; // Return the global <xs:element> for the given <xs:element ref="..."/>. // For example, element ref of "kml:name" returns the XsdElement describing // the <xs:element name="name".../> child of <xs:schema/>. const XsdElementPtr ResolveRef(const string& element_ref) const; // Return the XsdComplexType of the complex_type's extension base. NULL is // returned if the complex_type has no extension base or if the extension // base is not found within this XsdFile's target namespace. XsdComplexTypePtr GetBaseType(const XsdComplexTypePtr& complex_type) const; // Return the inheritance hierarchy of a given <xs:complexType>. The first // item in the vector is this type's extension base, the next that type's // extension base and so on until a type with no extension base is reached. bool GetTypeHierarchy(const XsdComplexTypePtr& complex_type, std::vector<XsdComplexTypePtr>* type_hier) const; // This appends all abstract elements to the given vector. void GetAbstractElements(XsdElementVector* elements) const; // This appends all concrete complex elements to the given vector. void GetComplexElements(XsdElementVector* elements) const; // This appends all concrete simple elements to the given vector. void GetSimpleElements(XsdElementVector* elements) const; // This sorts the elements in this XSD file into 3 ranges in this order and // then alphabetical order within each group: 1) abstract elements, // 2) complex elements, 3) simple elements. Offset 0 is reserved/invalid. void GenerateElementIdVector(XsdElementVector* elements, size_t* begin_complex, size_t *begin_simple) const; // If find_type is a base type of complex_type return true, else false. bool SearchTypeHierarchy(const XsdComplexTypePtr& complex_type, const XsdComplexTypePtr& find_type) const; // Return all elements derived from the given complex type. void GetElementsOfType(const XsdComplexTypePtr& complex_type, XsdElementVector* elements) const; // Return all elements derived from the given complex type name. void GetElementsOfTypeByName(const string& type_name, XsdElementVector* elements) const; private: XsdSchemaPtr xsd_schema_; XsdElementMap element_map_; XsdTypeMap type_map_; XsdAliasMap alias_map_; }; } // end namespace kmlxsd #endif // KML_XSD_XSD_FILE_H__ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_handler.cc�������������������������������������������������������������0000664�0000000�0000000�00000012273�12636032571�0017751�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the XsdHandler class. #include "kml/xsd/xsd_handler.h" #include <cstring> // strcmp #include "boost/scoped_ptr.hpp" #include "kml/base/attributes.h" #include "kml/xsd/xsd_element.h" #include "kml/xsd/xsd_file.h" #include "kml/xsd/xsd_schema.h" #include "kml/xsd/xsd_util.h" using kmlbase::Attributes; namespace kmlxsd { // <xs:complexType name="..." abstract="..."> void XsdHandler::StartComplexType(const Attributes& attributes) { if (!current_type_) { // <xs:complexType> and/or <xs:simpleType> current_type_ = XsdComplexType::Create(attributes); } } // </xs:complexType"> // </xs:simpleType"> void XsdHandler::EndType() { xsd_file_->add_type(current_type_); current_type_ = NULL; } // <xs:extension base="..."> void XsdHandler::StartExtension(const Attributes& attributes) { if (XsdComplexTypePtr complex_type = XsdComplexType::AsComplexType(current_type_)) { string base; if (attributes.GetString(kBase, &base)) { complex_type->set_extension_base(base); } } } // <xs:simpleType name="..."/> void XsdHandler::StartSimpleType(const Attributes& attributes) { if (!current_type_) { // <xs:simpleType is never nested... current_type_ = XsdSimpleType::Create(attributes); } } // <xs:restriction base="..."> void XsdHandler::StartRestriction(const Attributes& attributes) { if (XsdSimpleTypePtr simple_type = XsdSimpleType::AsSimpleType(current_type_)) { string base; if (attributes.GetString(kBase, &base)) { simple_type->set_restriction_base(base); } } } // <xs:enumeration value="..."> void XsdHandler::StartEnumeration(const Attributes& attributes) { if (XsdSimpleTypePtr simple_type = XsdSimpleType::AsSimpleType(current_type_)) { string value; if (attributes.GetString(kValue, &value)) { simple_type->add_enumeration(value); } } } // <xs:element name="..." type="..." default=".."/> // <xs:element ref="..." minOccurs="..." maxOccurs="..."/> void XsdHandler::StartXsElement(const Attributes& attributes) { XsdElement* element = XsdElement::Create(attributes); if (!element) { return; } // Is this a global element? if (parse_.top() == kSchema) { xsd_file_->add_element(element); } else if (XsdComplexTypePtr complex_type = XsdComplexType::AsComplexType(current_type_)) { // Is it a child of <xs:complexType>? complex_type->add_element(element); } } // ExpatHandler::StartElement void XsdHandler::StartElement(const string& xs_element_name, const kmlbase::StringVector& atts) { boost::scoped_ptr<Attributes> attributes(Attributes::Create(atts)); if (xs_element_name.compare(kSchema) == 0) { xsd_file_->set_schema(XsdSchema::Create(*attributes)); } else if (xs_element_name.compare(kElement) == 0) { StartXsElement(*attributes); } else if (xs_element_name.compare(kComplexType) == 0) { StartComplexType(*attributes); } else if (xs_element_name.compare(kExtension) == 0) { StartExtension(*attributes); } else if (xs_element_name.compare(kSimpleType) == 0) { StartSimpleType(*attributes); } else if (xs_element_name.compare(kRestriction) == 0) { StartRestriction(*attributes); } else if (xs_element_name.compare(kEnumeration) == 0) { StartEnumeration(*attributes); } // Always push, and we always pop in EndElement(). parse_.push(xs_element_name); } // ExpatHandler::EndElement void XsdHandler::EndElement(const string& xs_element_name) { // Always pop, because we always push in StartElement(). parse_.pop(); if (xs_element_name.compare(kComplexType) == 0) { EndType(); } else if (xs_element_name.compare(kSimpleType) == 0) { EndType(); } } } // end namespace kmlxsd �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_handler.h��������������������������������������������������������������0000664�0000000�0000000�00000006322�12636032571�0017611�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the XsdHandler class. #ifndef KML_XSD_XSD_HANDLER_H__ #define KML_XSD_XSD_HANDLER_H__ #include <stack> #include "boost/scoped_ptr.hpp" #include "kml/base/expat_handler.h" #include "kml/xsd/xsd_type.h" namespace kmlbase { class Attributes; } namespace kmlxsd { class XsdFile; // This ExpatHandler specialization parses an XSD file. Overall usage is: // // Read the XSD file. // string xsd_data; // File::ReadFileToString("my.xsd", &xsd_data); // // Parse it. // XsdHandler my_xsd_handler; // ExpatParser(xsd_data, &my_xsd_handler); class XsdHandler : public kmlbase::ExpatHandler { public: XsdHandler(XsdFile* xsd_file) : xsd_file_(xsd_file), current_type_(NULL) { } virtual ~XsdHandler() {} // ExpatHandler::StartElement. virtual void StartElement(const string& element_name, const kmlbase::StringVector& atts); // ExpatHandler::EndElement. virtual void EndElement(const string& element_name); // ExpatHandler::CharData. No XSD element has character data. virtual void CharData(const string& s) {} private: XsdFile* xsd_file_; // <xs:element> processing. void StartXsElement(const kmlbase::Attributes& attributes); // <xs:complexType> processing. void StartComplexType(const kmlbase::Attributes& attributes); void StartExtension(const kmlbase::Attributes& attributes); // <xs:simpleType> processing. void StartSimpleType(const kmlbase::Attributes& attributes); void StartRestriction(const kmlbase::Attributes& attributes); void StartEnumeration(const kmlbase::Attributes& attributes); void EndType(); XsdTypePtr current_type_; std::stack<string> parse_; }; } // end namespace kmlxsd #endif // KML_XSD_XSD_HANDLER_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_primitive_type.cc������������������������������������������������������0000664�0000000�0000000�00000005443�12636032571�0021406�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/xsd/xsd_primitive_type.h" namespace kmlxsd { // This exactly matches the XsdPrimitiveType enum. static const char* XsdPrimitiveTypeName[] = { NULL, // XSD_INVALID "string", // 3.2.1 "boolean", // 3.2.2 "decimal", // 3.2.3 "float", // 3.2.4 "double", // 3.2.5 "duration", // 3.2.6 "dateTime", // 3.2.7 "time", // 3.2.8 "date", // 3.2.9 "gYearMonth", // 3.2.10 "gYear", // 3.2.11 "gMonthDay", // 3.2.12 "gDay", // 3.2.13 "gMonth", // 3.2.14 "hexBinary", // 3.2.15 "base64Binary", // 3.2.16 "anyURI", // 3.2.17 "QNAME", // 3.2.18 "NOTATION", // 3.2.19 // NOTE: this includes only the types involved in the xsd:int derivation. "integer", // 3.3.13. Is-a XSD_DECIMAL. "long", // 3.3.16. Is-a XSD_INTEGER. "int", // 3.3.17. Is-a XSD_LONG. }; const string XsdPrimitiveType::GetTypeName(TypeId type_id) { return XsdPrimitiveTypeName[type_id]; } XsdPrimitiveType::TypeId XsdPrimitiveType::GetTypeId( const string& type_name) { // TODO: make a map and save it somewhere... size_t size = sizeof(XsdPrimitiveTypeName)/sizeof(XsdPrimitiveTypeName[0]); for (size_t i = 1; i < size; ++i) { if (type_name.compare(XsdPrimitiveTypeName[i]) == 0) { return static_cast<TypeId>(i); } } return XSD_INVALID; } } // end namespace kmlxsd �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_primitive_type.h�������������������������������������������������������0000664�0000000�0000000�00000011300�12636032571�0021235�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file declares the XsdPrimitiveType. #ifndef KML_XSD_XSD_PRIMITIVE_TYPE_H__ #define KML_XSD_XSD_PRIMITIVE_TYPE_H__ #include "kml/xsd/xsd_type.h" namespace kmlxsd { // This class is a specialization of XsdType for XSD primitive ("built-in") // types. This permits elements of non-complexType and non-simpleType to have // an XsdType. This class also has methods to convert between type name as // found in an XSD file and the enum defined here. class XsdPrimitiveType : public XsdType { public: // This enumerates the XSD primitive ("built-in") types as listed here: // http://www.w3.org/TR/xmlschema-2/#built-in-primitive-datatypes enum TypeId { XSD_INVALID, XSD_STRING, // 3.2.1 XSD_BOOLEAN, // 3.2.2 XSD_DECIMAL, // 3.2.3 XSD_FLOAT, // 3.2.4 XSD_DOUBLE, // 3.2.5 XSD_DURATION, // 3.2.6 XSD_DATE_TIME, // 3.2.7 XSD_TIME, // 3.2.8 XSD_DATE, // 3.2.9 XSD_G_YEAR_MONTH, // 3.2.10 XSD_G_YEAR, // 3.2.11 XSD_G_MONTH_DAY, // 3.2.12 XSD_G_DAY, // 3.2.13 XSD_G_MONTH, // 3.2.14 XSD_HEX_BINARY, // 3.2.15 XSD_BASE64_BINARY, // 3.2.16 XSD_ANY_URI, // 3.2.17 XSD_QNAME, // 3.2.18 XSD_NOTATION, // 3.2.19 // NOTE: this includes only the types involved in the xsd:int derivation. XSD_INTEGER, // 3.3.13. Is-a XSD_DECIMAL. XSD_LONG, // 3.3.16. Is-a XSD_INTEGER. XSD_INT // 3.3.17. Is-a XSD_LONG. }; // Use this method to create a new XsdPrimitiveType from the type name. // For example the XsdPrimitiveType for <element name="open" type="boolean"> // would be: // XsdPrimitiveTypePtr primitive_type = XsdPrimitiveType::Create("boolean"); // If the type_name is not that of an XSD primitive type then no // XsdPrimitiveType is created and NULL is returned. static XsdPrimitiveType* Create(const string& type_name) { TypeId type_id = GetTypeId(type_name); if (type_id != XSD_INVALID) { return new XsdPrimitiveType(type_id); } return NULL; } virtual XsdTypeEnum get_xsd_type_id() const { return XSD_TYPE_PRIMITIVE; } // The XsdPrimitiveType implementation of this XsdType virtual method always // returns false. virtual bool is_complex() const { return false; } // The XsdPrimitiveType implementation of this XsdType virtual method returns // the name of the type. virtual const string get_name() const { return GetTypeName(type_id_); } // The XsdPrimitiveType implementation of XsdType returns "xsd:primitive". virtual const string get_base() const { return "xsd:primitive"; } // This returns the name of the given XSD primitive type. For example, // XSD_DOUBLE returns "double. An empty string is returned for an invalid // type id. static const string GetTypeName(TypeId type_id); // This returns the id of the given XSD primitive type. For example, // "double" returns XSD_DOUBLE. XSD_INVALID is returned if the name is // on that of an XSD primitive type. static XsdPrimitiveType::TypeId GetTypeId(const string& type_name); private: // Use the static Create method to create an XsdPrimitiveType. XsdPrimitiveType(TypeId type_id) : type_id_(type_id) { } TypeId type_id_; }; } // end namespace kmlxsd #endif // KML_XSD_XSD_ELEMENT_H__ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_schema.h���������������������������������������������������������������0000664�0000000�0000000�00000010637�12636032571�0017440�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the XsdSchema class. #ifndef KML_XSD_XSD_SCHEMA_H__ #define KML_XSD_XSD_SCHEMA_H__ #include "boost/intrusive_ptr.hpp" #include "boost/scoped_ptr.hpp" #include "kml/base/attributes.h" #include "kml/base/referent.h" #include "kml/base/xmlns.h" namespace kmlxsd { // XsdSchema corresponds to <xs:schema ... > class XsdSchema : public kmlbase::Referent { public: // Create an XsdSchema from the given attributes. The attributes must // include both a targetNamespace="tns" and xmlns:prefix="tns". All xmlns:'s // are processed and saved. static XsdSchema* Create(const kmlbase::Attributes& attributes) { XsdSchema* xsd_schema = new XsdSchema; if (xsd_schema->Parse(attributes)) { return xsd_schema; } delete xsd_schema; return NULL; } // Return the value of the targetNamespace= attribute. const string& get_target_namespace() const { return target_namespace_; } // Return the xmlns prefix whose value is the targetNamespace. For example, // if targetNamespace="a:b:c" and xmlns:foo="a:b:c" this returns "foo". const string& get_target_namespace_prefix() const { return target_namespace_prefix_; } // If the given namespace qualified name is prefixed with the target // namespace prefix then return true and save the local portion to ncname. // For example, if ns_name is "kml:LookAt" and the target namespace prefix // is "kml" then name is set to "LookAt" and true is returned. bool SplitNsName(const string& ns_name, string* name) const { size_t prefix_size = target_namespace_prefix_.size(); if (ns_name.size() > prefix_size + 1 && ns_name.compare(0, prefix_size + 1, target_namespace_prefix_ + ":") == 0) { if (name) { *name = ns_name.substr(prefix_size + 1); } return true; } return false; } private: XsdSchema() {} // Use static Create(). // Set state from attributes, returns true if both targetNamespace= and the // target namespace prefix were found, false otherwise. bool Parse(const kmlbase::Attributes& attributes) { attributes.GetString("targetNamespace", &target_namespace_); if (target_namespace_.empty()) { return false; } xmlns_.reset(kmlbase::Xmlns::Create(attributes)); if (!xmlns_.get()) { return false; } // Find the prefix used for the targetNamespace. // For example, if xmlns:foo="a:b:c" and targetNamespace="a:b:c" then the // prefix we seek is "foo". A targetNamespace and xmlns:prefix _must_ // appear in the <schema> for this to be a valid XSD. target_namespace_prefix_ = xmlns_->GetKey(target_namespace_); return !target_namespace_.empty() && !target_namespace_prefix_.empty(); } boost::scoped_ptr<kmlbase::Xmlns> xmlns_; string target_namespace_; string target_namespace_prefix_; }; typedef boost::intrusive_ptr<XsdSchema> XsdSchemaPtr; } // end namespace kmlxsd #endif // KML_XSD_XSD_SCHEMA_H__ �������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_simple_type.h����������������������������������������������������������0000664�0000000�0000000�00000007255�12636032571�0020534�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_XSD_XSD_SIMPLE_TYPE_H__ #define KML_XSD_XSD_SIMPLE_TYPE_H__ #include <vector> #include "boost/intrusive_ptr.hpp" #include "kml/base/attributes.h" #include "kml/xsd/xsd_type.h" namespace kmlxsd { class XsdSimpleType; typedef boost::intrusive_ptr<XsdSimpleType> XsdSimpleTypePtr; // Corresponds to <xs:simpleType>. class XsdSimpleType : public XsdType { public: static XsdSimpleType* Create(const kmlbase::Attributes& attributes) { string name; if (attributes.GetString("name", &name)) { return new XsdSimpleType(name); } return NULL; } static XsdSimpleTypePtr AsSimpleType(const XsdTypePtr& xsd_type) { if (xsd_type && xsd_type->get_xsd_type_id() == XSD_TYPE_SIMPLE) { return boost::static_pointer_cast<XsdSimpleType>(xsd_type); } return NULL; } virtual XsdTypeEnum get_xsd_type_id() const { return XSD_TYPE_SIMPLE; } virtual bool is_complex() const { return false; } // <xs:simpleType name="NAME"/> virtual const string get_name() const { return name_; } virtual const string get_base() const { return restriction_base_; } // <xs:restriction base="BASE"/> void set_restriction_base(const string& base) { restriction_base_ = base; } const string& get_restriction_base() const { return restriction_base_; } // <xs:enumeration value="VALUE"/> void add_enumeration(const string& value) { enumeration_.push_back(value); } // Return the number of <xs:enumeration value="..."/>'s. size_t get_enumeration_size() const { return enumeration_.empty() ? 0 : enumeration_.size(); } // Return the index'th <xs:enumeration value="..."/>. The order is preserved // as added in add_enumeration_value(). const string& get_enumeration_at(size_t index) const { return enumeration_[index]; } // Returns true if this is an enumerated type. bool IsEnumeration() const { return restriction_base_ == "string" && !enumeration_.empty(); } private: // Client code should use Create(). XsdSimpleType(const string& name) : name_(name) { } const string name_; string restriction_base_; std::vector<string> enumeration_; }; } // end namespace kmlxsd #endif // KML_XSD_XSD_SIMPLE_TYPE_H__ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_type.h�����������������������������������������������������������������0000664�0000000�0000000�00000005373�12636032571�0017162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_XSD_XSD_TYPE_H__ #define KML_XSD_XSD_TYPE_H__ #include "boost/intrusive_ptr.hpp" #include "kml/base/referent.h" #include "kml/base/util.h" namespace kmlxsd { // This is a pure virtual base type for all other XSD type types such as // <xs:simpleType> and <xs:complexType>. class XsdType : public kmlbase::Referent { public: typedef enum { XSD_TYPE_PRIMITIVE, XSD_TYPE_SIMPLE, XSD_TYPE_COMPLEX } XsdTypeEnum; virtual XsdTypeEnum get_xsd_type_id() const = 0; virtual ~XsdType() {} // This returns true of this is an <xs:complexType>. virtual bool is_complex() const = 0; // This returns the name attribute of an <xs:simpleType> or <xs:complexType> // and the XSD name for a primitive type, for example "string", "boolean" // or "double". virtual const string get_name() const = 0; // This returns the extension base for a <xs:complexType>, the restriction // base for a <xs:simpleType> and "xsd:primitive" for a primitive type. virtual const string get_base() const = 0; // Two XsdType's are equal if their names are the same. bool operator==(const XsdType& xsd_type) const { return get_name() == xsd_type.get_name(); } }; typedef boost::intrusive_ptr<XsdType> XsdTypePtr; } // end namespace kmlxsd #endif // KML_XSD_XSD_TYPE_H__ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_util.cc����������������������������������������������������������������0000664�0000000�0000000�00000006047�12636032571�0017313�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains XSD convenience utilities. #include "kml/xsd/xsd_util.h" #include "kml/base/attributes.h" #include "kml/xsd/xsd_complex_type.h" #include "kml/xsd/xsd_schema.h" using kmlbase::Attributes; namespace kmlxsd { const char kAbstract[] = "abstract"; const char kBase[] = "base"; const char kComplexType[] = "complexType"; const char kDefault[] = "default"; const char kElement[] = "element"; const char kExtension[] = "extension"; const char kEnumeration[] = "enumeration"; const char kName[] = "name"; const char kSchema[] = "schema"; const char kSimpleType[] = "simpleType"; const char kSubstitutionGroup[] = "substitutionGroup"; const char kTargetNamespace[] = "targetNamespace"; const char kRestriction[] = "restriction"; const char kType[] = "type"; const char kValue[] = "value"; // Test utility to create a <xs:complexType name="type_name">. XsdComplexType* CreateXsdComplexType(const string& type_name) { Attributes attributes; attributes.SetString(kName, type_name); return XsdComplexType::Create(attributes); } XsdElement* CreateXsdElement(const string& name, const string& type) { Attributes attributes; attributes.SetString(kName, name); attributes.SetString(kType, type); return XsdElement::Create(attributes); } XsdSchema* CreateXsdSchema(const string& prefix, const string& target_namespace) { Attributes attributes; attributes.SetString(string("xmlns:") + prefix, target_namespace); attributes.SetString("targetNamespace", target_namespace); return XsdSchema::Create(attributes); } } // end namespace kmlxsd �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xsd_util.h�����������������������������������������������������������������0000664�0000000�0000000�00000005216�12636032571�0017152�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains XSD convenience utilities. #include "kml/base/util.h" namespace kmlxsd { class XsdComplexType; class XsdElement; class XsdSchema; extern const char kAbstract[]; extern const char kBase[]; extern const char kComplexType[]; extern const char kDefault[]; extern const char kElement[]; extern const char kEnumeration[]; extern const char kExtension[]; extern const char kName[]; extern const char kSchema[]; extern const char kSimpleType[]; extern const char kSubstitutionGroup[]; extern const char kRestriction[]; extern const char kTargetNamespace[]; extern const char kType[]; extern const char kValue[]; // Convenience utility to create a <xs:complexType name="TYPE_NAME"/>. XsdComplexType* CreateXsdComplexType(const string& type_name); // Convenience utility ot create a <xs:element name="NAME" type="TYPE"/>. XsdElement* CreateXsdElement(const string& name, const string& type); // Convenience utilty to create an XsdSchema based on: // <schema xmlns:PREFIX="TARGET_NAMESPACE" // targetNamespace="TARGET_NAMESPACE"/> XsdSchema* CreateXsdSchema(const string& prefix, const string& target_namespace); } // end namespace kmlxsd ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xst_parser.cc��������������������������������������������������������������0000664�0000000�0000000�00000004413�12636032571�0017645�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the implementation of the XstParser class. #include "kml/xsd/xst_parser.h" #include "kml/base/string_util.h" #include "kml/xsd/xsd_file.h" using kmlbase::SplitStringUsing; using std::vector; namespace kmlxsd { void XstParser::ParseXstAlias(const vector<string>& alias_line) { if (alias_line.size() != 3) { return; } xsd_file_->set_alias(alias_line[1], alias_line[2]); } void XstParser::ParseXst(const string& xst_data) { vector<string> xst_lines; SplitStringUsing(xst_data, "\n", &xst_lines); for (size_t i = 0; i < xst_lines.size(); ++i) { vector<string> line; SplitStringUsing(xst_lines[i], " ", &line); if (line.empty()) { continue; } if (line[0] == "alias") { ParseXstAlias(line); } } } } // end namespace kmlxsd �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/kml/xsd/xst_parser.h���������������������������������������������������������������0000664�0000000�0000000�00000005151�12636032571�0017507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the declaration of the XsdParser class. #ifndef KML_XSD_XST_PARSER_H__ #define KML_XSD_XST_PARSER_H__ #include <vector> #include "kml/base/util.h" namespace kmlxsd { class XsdFile; // An ".xst" file is a simple textual representation of a ".xsd". At present // this is limited to defining aliases to names used in the XSD. // TODO: implement element, simpleType (enums), complexType (child elements). // Overall usage is as follows: // XsdFile* xsd_file = XsdFile::CreateFromParse(...); // XstParser xst_parser(&xsd_file); // string xst_data = read_xst_file(); // xst_parser.ParseXst(&xst_data); class XstParser { public: // Construct the XstParser with an XsdFile to write into. XstParser(XsdFile* xsd_file) : xsd_file_(xsd_file) { } // Parse the contents of the XST data into the XsdFile. void ParseXst(const string& xst_data); // Parse the "alias" line into the XsdFile. An alias line takes this form: // "alias real_name alias_name" void ParseXstAlias(const std::vector<string>& alias_line); private: XsdFile* xsd_file_; }; } // end namespace kmlxsd #endif // KML_XSD_XST_PARSER_H__ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/swig/������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�12636032571�0014532�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/swig/CMakeLists.txt����������������������������������������������������������������0000664�0000000�0000000�00000007467�12636032571�0017310�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������if(WITH_PYTHON) find_package(PythonLibs REQUIRED) if(NOT PYTHONLIBS_FOUND) message(FATAL_ERROR "Python Libraries not found.") endif() find_package(PythonInterp REQUIRED) include_directories(${PYTHON_INCLUDE_PATH}) if(NOT DEFINED PYTHON_INSTALL_DIR) execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(True)" OUTPUT_VARIABLE PYTHON_INSTALL_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ) endif(NOT DEFINED PYTHON_INSTALL_DIR) file(GLOB IFILES "kml*.i") foreach(INTERFACE_FILE ${IFILES}) get_filename_component(MODULE_NAME ${INTERFACE_FILE} NAME_WE) set_source_files_properties(${INTERFACE_FILE} PROPERTIES CPLUSPLUS ON ) set_source_files_properties(${INTERFACE_FILE} PROPERTIES CMAKE_SWIG_FLAGS "-includeall -DSWIGPYTHON") set_source_files_properties( ${CMAKE_CURRENT_BINARY_DIR}/${MODULE_NAME}PYTHON_wrap.cxx COMPILE_FLAGS "-Wno-long-long" ) swig_add_module(${MODULE_NAME} python ${INTERFACE_FILE}) swig_link_libraries(${MODULE_NAME} kmlbase kmlengine kmldom ${PYTHON_LIBRARIES}) add_custom_command( TARGET _${MODULE_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo "Byte-compiling ${MODULE_NAME}.py" COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/cmake/pycompile.py ${CMAKE_CURRENT_BINARY_DIR}/${MODULE_NAME}.py DEPENDS kmlbase kmlengine kmldom) install(TARGETS _${MODULE_NAME} DESTINATION ${PYTHON_INSTALL_DIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${MODULE_NAME}.py ${CMAKE_CURRENT_BINARY_DIR}/${MODULE_NAME}.pyc DESTINATION ${PYTHON_INSTALL_DIR}) endforeach() endif(WITH_PYTHON) if(WITH_JAVA) find_package(Java REQUIRED) find_package(JNI REQUIRED) mark_as_advanced(JAVA_HOME) include_directories(${JAVA_INCLUDE_PATH} ${JNI_INCLUDE_DIRS}) include_directories ( ${JAVA_INCLUDE_PATH} ${JNI_INCLUDE_DIRS} ) # Make sure the nested directory structure exists set(JAVA_SOURCE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/com/googlecode/libkml) set(JAVA_BINARY_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/build) if(NOT EXISTS "${JAVA_SOURCE_DIRECTORY}") file(MAKE_DIRECTORY ${JAVA_SOURCE_DIRECTORY}) endif() if(NOT EXISTS "${JAVA_BINARY_DIRECTORY}") file(MAKE_DIRECTORY ${JAVA_BINARY_DIRECTORY}) endif() # java_package_dir = com/googlecode/libkml file(GLOB IFILES "kml*.i") set(LIBKML_JAVA_PACKAGE "com.googlecode.libkml") set(CMAKE_SWIG_OUTDIR ${JAVA_SOURCE_DIRECTORY}) set(CMAKE_SWIG_FLAGS -package "${LIBKML_JAVA_PACKAGE}" ${CMAKE_SWIG_GLOBAL_FLAGS}) foreach(INTERFACE_FILE ${IFILES}) get_filename_component(MODULE_NAME ${INTERFACE_FILE} NAME_WE) set_source_files_properties(${INTERFACE_FILE} PROPERTIES CPLUSPLUS ON) set_source_files_properties(${INTERFACE_FILE} PROPERTIES CMAKE_SWIG_FLAGS "-includeall -DSWIGJAVA") set_source_files_properties( ${CMAKE_CURRENT_BINARY_DIR}/${MODULE_NAME}JAVA_wrap.cxx COMPILE_FLAGS "-w") swig_add_module(${MODULE_NAME}_swig_java java ${INTERFACE_FILE}) swig_link_libraries(${MODULE_NAME}_swig_java ${MODULE_NAME}) install(TARGETS ${MODULE_NAME}_swig_java DESTINATION ${JNI_INSTALL_DIR}) endforeach() add_custom_target(LibKML_jar ALL DEPENDS LibKML.jar) add_custom_command( OUTPUT LibKML.jar COMMENT "Creating jar file..." COMMAND ${Java_JAVAC_EXECUTABLE} -d ${JAVA_BINARY_DIRECTORY} ${JAVA_SOURCE_DIRECTORY}/*.java COMMAND ${Java_JAR_EXECUTABLE} cf ${CMAKE_CURRENT_BINARY_DIR}/LibKML.jar -C ${JAVA_BINARY_DIRECTORY} com DEPENDS LibKML_jar kmlbase_swig_java kmldom_swig_java kmlengine_swig_java) # Get the location of the extension directory string(REGEX REPLACE "include" "jre/lib/ext" JAVA_EXTENSION_DIR ${JAVA_INCLUDE_PATH}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/LibKML.jar DESTINATION ${JAVA_INSTALL_DIR}) endif(WITH_JAVA) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/swig/java/�������������������������������������������������������������������������0000775�0000000�0000000�00000000000�12636032571�0015453�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/swig/java/libkml_boost_intrusive_ptr.i���������������������������������������������0000664�0000000�0000000�00000035734�12636032571�0023316�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file is derived from swig-1.3.35/Lib/python/boost_shared_ptr.i // This file can and should be removed from libkml If and when this file or // equivalent functionality appears in a future version of SWIG. // [The following is from swig-1.3.35/LICENSE] // // SWIG is distributed under the following terms: // // I. // // Copyright (c) 1995-1998 // The University of Utah and the Regents of the University of California // All Rights Reserved // // Permission is hereby granted, without written agreement and without // license or royalty fees, to use, copy, modify, and distribute this // software and its documentation for any purpose, provided that // (1) The above copyright notice and the following two paragraphs // appear in all copies of the source code and (2) redistributions // including binaries reproduces these notices in the supporting // documentation. Substantial modifications to this software may be // copyrighted by their authors and need not follow the licensing terms // described here, provided that the new terms are clearly indicated in // all files where they apply. // // IN NO EVENT SHALL THE AUTHOR, THE UNIVERSITY OF CALIFORNIA, THE // UNIVERSITY OF UTAH OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY // PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL // DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, // EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF // THE POSSIBILITY OF SUCH DAMAGE. // // THE AUTHOR, THE UNIVERSITY OF CALIFORNIA, AND THE UNIVERSITY OF UTAH // SPECIFICALLY DISCLAIM ANY WARRANTIES,INCLUDING, BUT NOT LIMITED TO, // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND // THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, // SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. // // // II. // // This software includes contributions that are Copyright (c) 1998-2005 // University of Chicago. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. Redistributions // in binary form must reproduce the above copyright notice, this list of // conditions and the following disclaimer in the documentation and/or // other materials provided with the distribution. Neither the name of // the University of Chicago nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF CHICAGO AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF // CHICAGO OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // // III. // // This software includes contributions that are Copyright (c) 2005-2006 // Arizona Board of Regents (University of Arizona). // All Rights Reserved // // Permission is hereby granted, without written agreement and without // license or royalty fees, to use, copy, modify, and distribute this // software and its documentation for any purpose, provided that // (1) The above copyright notice and the following two paragraphs // appear in all copies of the source code and (2) redistributions // including binaries reproduces these notices in the supporting // documentation. Substantial modifications to this software may be // copyrighted by their authors and need not follow the licensing terms // described here, provided that the new terms are clearly indicated in // all files where they apply. // // THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF ARIZONA AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF // ARIZONA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // [End of swig-1.3.35/LICENSE] %include <libkml_intrusive_ptr.i> %define SWIG_INTRUSIVE_PTR_TYPEMAPS(PROXYCLASS, CONST, TYPE...) %naturalvar TYPE; %naturalvar SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >; // destructor mods %feature("unref") TYPE //"if (debug_shared) { cout << \"deleting use_count: \" << (*smartarg1).use_count() << \" [\" << (boost::get_deleter<SWIG_null_deleter>(*smartarg1) ? std::string(\"CANNOT BE DETERMINED SAFELY\") : ( (*smartarg1).get() ? (*smartarg1)->getValue() : std::string(\"NULL PTR\") )) << \"]\" << endl << flush; }\n" "(void)arg1; delete smartarg1;" // plain value %typemap(in) CONST TYPE ($&1_type argp = 0) %{ argp = (*(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > **)&$input) ? (*(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > **)&$input)->get() : 0; if (!argp) { SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "Attempt to dereference null $1_type"); return $null; } $1 = *argp; %} %typemap(out) CONST TYPE %{ *(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > **)&$result = new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(new $1_ltype(($1_ltype &)$1)); %} // plain pointer %typemap(in) CONST TYPE * (SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartarg = 0) %{ smartarg = *(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > **)&$input; $1 = (TYPE *)(smartarg ? smartarg->get() : 0); %} %typemap(out, fragment="SWIG_null_deleter") CONST TYPE * %{ *(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > **)&$result = $1 ? new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner) : 0; %} // plain reference %typemap(in) CONST TYPE & %{ $1 = ($1_ltype)((*(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > **)&$input) ? (*(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > **)&$input)->get() : 0); if(!$1) { SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "$1_type reference is null"); return $null; } %} %typemap(out, fragment="SWIG_null_deleter") CONST TYPE & %{ *(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > **)&$result = new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner); %} // plain pointer by reference %typemap(in) CONST TYPE *& ($*1_ltype temp = 0) %{ temp = ((*(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > **)&$input) ? (*(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > **)&$input)->get() : 0); $1 = &temp; %} %typemap(out, fragment="SWIG_null_deleter") CONST TYPE *& %{ *(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > **)&$result = new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(*$1 SWIG_NO_NULL_DELETER_$owner); %} // intrusive_ptr by value %typemap(in) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > ($&1_type argp) %{ argp = *($&1_ltype*)&$input; if (argp) $1 = *argp; %} %typemap(out) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > %{ *($&1_ltype*)&$result = $1 ? new $1_ltype($1) : 0; %} // intrusive_ptr by reference %typemap(in) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > & ($*1_ltype tempnull) %{ $1 = $input ? *($&1_ltype)&$input : &tempnull; %} %typemap(out) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > & %{ *($&1_ltype)&$result = *$1 ? new $*1_ltype(*$1) : 0; %} // intrusive_ptr by pointer %typemap(in) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * ($*1_ltype tempnull) %{ $1 = $input ? *($&1_ltype)&$input : &tempnull; %} %typemap(out) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * %{ *($&1_ltype)&$result = ($1 && *$1) ? new $*1_ltype(*$1) : 0; if ($owner) delete $1; %} // intrusive_ptr by pointer reference %typemap(in) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& (SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > tempnull, $*1_ltype temp = 0) %{ temp = $input ? *($1_ltype)&$input : &tempnull; $1 = &temp; %} %typemap(out) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& %{ *($1_ltype)&$result = (*$1 && **$1) ? new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(**$1) : 0; %} // various missing typemaps - If ever used (unlikely) ensure compilation error rather than runtime bug %typemap(in) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{ #error "typemaps for $1_type not available" %} %typemap(out) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{ #error "typemaps for $1_type not available" %} %typemap (jni) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > &, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& "jlong" %typemap (jtype) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > &, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& "long" %typemap (jstype) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > &, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& "PROXYCLASS" %typemap(javain) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > &, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& "PROXYCLASS.getCPtr($javainput)" %typemap(javaout) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > { long cPtr = $jnicall; return (cPtr == 0) ? null : new PROXYCLASS(cPtr, true); } %typemap(javaout) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > & { long cPtr = $jnicall; return (cPtr == 0) ? null : new PROXYCLASS(cPtr, true); } %typemap(javaout) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * { long cPtr = $jnicall; return (cPtr == 0) ? null : new PROXYCLASS(cPtr, true); } %typemap(javaout) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& { long cPtr = $jnicall; return (cPtr == 0) ? null : new PROXYCLASS(cPtr, true); } %typemap(javaout) CONST TYPE { return new PROXYCLASS($jnicall, true); } %typemap(javaout) CONST TYPE & { return new PROXYCLASS($jnicall, true); } %typemap(javaout) CONST TYPE * { long cPtr = $jnicall; return (cPtr == 0) ? null : new PROXYCLASS(cPtr, true); } %typemap(javaout) CONST TYPE *& { long cPtr = $jnicall; return (cPtr == 0) ? null : new PROXYCLASS(cPtr, true); } // Base proxy classes %typemap(javabody) TYPE %{ private long swigCPtr; private boolean swigCMemOwnBase; protected $javaclassname(long cPtr, boolean cMemoryOwn) { swigCMemOwnBase = cMemoryOwn; swigCPtr = cPtr; } protected static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } %} // Derived proxy classes %typemap(javabody_derived) TYPE %{ private long swigCPtr; private boolean swigCMemOwnDerived; protected $javaclassname(long cPtr, boolean cMemoryOwn) { super($imclassname.$javaclassname_SWIGSharedPtrUpcast(cPtr), true); swigCMemOwnDerived = cMemoryOwn; swigCPtr = cPtr; } protected static long getCPtr($javaclassname obj) { return (obj == null) ? 0 : obj.swigCPtr; } %} %typemap(javadestruct, methodname="delete", methodmodifiers="public synchronized") TYPE { if(swigCPtr != 0 && swigCMemOwnBase) { swigCMemOwnBase = false; $jnicall; } swigCPtr = 0; } %typemap(javadestruct_derived, methodname="delete", methodmodifiers="public synchronized") TYPE { if(swigCPtr != 0 && swigCMemOwnDerived) { swigCMemOwnDerived = false; $jnicall; } swigCPtr = 0; super.delete(); } // CONST version needed ???? also for C# %typemap(jtype, nopgcpp="1") SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > swigSharedPtrUpcast "long" %typemap(jtype, nopgcpp="1") SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > swigSharedPtrUpcast "long" %template() SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >; %enddef ������������������������������������libkml-1.3.0/src/swig/kmlbase.i���������������������������������������������������������������������0000664�0000000�0000000�00000010726�12636032571�0016330�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This is the SWIG interface file for the KML Base module. // This was developed with SWIG version 1.3.35. //%rename(__set__) *::operator=; //%rename(__getitem__) *::operator[]; %module kmlbase // Include the headers needed to build kmlengine_wrap.cc. %{ #include "kml/base/attributes.h" #include "kml/base/color32.h" #include "kml/base/date_time.h" #include "kml/base/vec3.h" #include "kml/base/version.h" #include "kml/base/xml_file.h" %} // Tell SWIG about C99 integer types. %include "inttypes.i" // Tell SWIG about C++ Standard Library std::string. %include "std_string.i" %include "typemaps.i" // NOTE: these typemaps are not fully supported in current SWIG. See this doc: // http://www.swig.org/Doc1.3/Library.html#Library_nn14 (1.3.39) // It happens to work in Python, but Java is stymied. Ideally SWIG evolves to // have a std_string.i that can wrap writing to a pointer. %apply std::string* OUTPUT { std::string* output_value }; %apply std::string* OUTPUT { std::string* output_key }; typedef long time_t; namespace kmlbase { class Attributes { public: bool FindValue(const std::string& key, std::string* output_value) const; bool FindKey(const std::string& value, std::string* output_key) const; size_t GetSize() const; void SetString(const std::string& attr_name, const std::string& attr_val); }; %rename(Color32_op_equal) Color32::operator==; class Color32 { public: Color32(); Color32(uint32_t abgr); Color32(unsigned char a, unsigned char b, unsigned char g, unsigned char r); Color32(const std::string& value); uint32_t get_red() const; void set_red(unsigned char value); uint32_t get_green() const; void set_green(unsigned char value); uint32_t get_blue() const; void set_blue(unsigned char value); uint32_t get_alpha() const; void set_alpha(unsigned char value); uint32_t get_color_abgr() const; uint32_t get_color_argb() const; std::string to_string_abgr() const; std::string to_string_argb() const; void set_color_abgr(uint32_t color_abgr); void set_color_abgr(const std::string& color_abgr); void set_color_abgr(unsigned char a, unsigned char b, unsigned char g, unsigned char r); void set_color_argb(uint32_t color_argb); bool operator==(const Color32& color) const; // TODO: other operator overrides. }; %nodefaultctor DateTime; class DateTime { public: static DateTime* Create(const std::string& str); static time_t ToTimeT(const std::string& str); time_t GetTimeT(); std::string GetXsdTime() const; std::string GetXsdDate() const; std::string GetXsdDateTime() const; }; class Vec3 { public: Vec3(double longitude, double latitude); Vec3(double longitude, double latitude, double altitude); double get_longitude() const; double get_latitude() const; bool has_altitude() const; double get_altitude() const; }; %nodefaultctor Version; class Version { public: static std::string GetString(); }; %nodefaultctor XmlFile; class XmlFile { public: const std::string& get_url() const; }; } // end namespace kmlbase ������������������������������������������libkml-1.3.0/src/swig/kmldom.i����������������������������������������������������������������������0000664�0000000�0000000�00000036614�12636032571�0016201�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This is the SWIG interface file for the KML DOM. // This was developed with SWIG version 1.3.35. %module kmldom %import "kmlbase.i" // Include the headers needed to build kmldom_wrap.cc. %{ #include "kml/dom.h" #include "kml/dom/xsd.h" %} // Tell SWIG about boost::intrusive_ptr and the inheritance hierarchy // of objects using intrusive_ptr. Without this SWIG does not know // that PlacemarkPtr "is a" FeaturePtr "is a" ObjectPtr "is a" ElementPtr. // (SWIG _does_ know that a Placemark "is a" Feature, but pointers directly // to these types are never used directly in libkml). // TODO: push these changes into a future version of SWIG as there // are no libkml-specific enhancements these intrusive_ptr .i files. #ifdef SWIGPYTHON %include "python/libkml_boost_intrusive_ptr.i" #elif SWIGJAVA %include "java/libkml_boost_intrusive_ptr.i" #endif %include "typemaps.i" // Classes for abstract elements and internal convenience classes. SWIG_INTRUSIVE_PTR(Referent, kmlbase::Referent) SWIG_INTRUSIVE_PTR_DERIVED(XmlElement, kmlbase::Referent, kmlbase::XmlElement) SWIG_INTRUSIVE_PTR_DERIVED(Element, kmlbase::XmlElement, kmldom::Element) SWIG_INTRUSIVE_PTR_DERIVED(AbstractLatLonBox, kmldom::Object, kmldom::AbstractLatLonBox) SWIG_INTRUSIVE_PTR_DERIVED(AbstractView, kmldom::Object, kmldom::AbstractView) SWIG_INTRUSIVE_PTR_DERIVED(BasicLink, kmldom::Object, kmldom::BasicLink) SWIG_INTRUSIVE_PTR_DERIVED(Container, kmldom::Feature, kmldom::Container) SWIG_INTRUSIVE_PTR_DERIVED(ColorStyle, kmldom::SubStyle, kmldom::ColorStyle) SWIG_INTRUSIVE_PTR_DERIVED(Feature, kmldom::Object, kmldom::Feature) SWIG_INTRUSIVE_PTR_DERIVED(Geometry, kmldom::Object, kmldom::Geometry) SWIG_INTRUSIVE_PTR_DERIVED(Object, kmldom::Element, kmldom::Object) SWIG_INTRUSIVE_PTR_DERIVED(Overlay, kmldom::Feature, kmldom::Overlay) SWIG_INTRUSIVE_PTR_DERIVED(SnippetCommon, kmldom::Element, kmldom::SnippetCommon) SWIG_INTRUSIVE_PTR_DERIVED(StyleSelector, kmldom::Object, kmldom::StyleSelector) SWIG_INTRUSIVE_PTR_DERIVED(SubStyle, kmldom::Object, kmldom::SubStyle) SWIG_INTRUSIVE_PTR_DERIVED(TimePrimitive, kmldom::Object, kmldom::TimePrimitive) SWIG_INTRUSIVE_PTR_DERIVED(UpdateOperation, kmldom::Element, kmldom::UpdateOperation) SWIG_INTRUSIVE_PTR_DERIVED(Vec2, kmldom::Element, kmldom::Vec2) // Classes for concrete elements. SWIG_INTRUSIVE_PTR_DERIVED(Alias, kmldom::Object, kmldom::Alias) SWIG_INTRUSIVE_PTR_DERIVED(AtomAuthor, kmldom::Element, kmldom::AtomAuthor) SWIG_INTRUSIVE_PTR_DERIVED(AtomLink, kmldom::Element, kmldom::AtomLink) SWIG_INTRUSIVE_PTR_DERIVED(BalloonStyle, kmldom::SubStyle, kmldom::BalloonStyle) SWIG_INTRUSIVE_PTR_DERIVED(Camera, kmldom::AbstractView, kmldom::Camera) SWIG_INTRUSIVE_PTR_DERIVED(Change, kmldom::UpdateOperation, kmldom::Change) SWIG_INTRUSIVE_PTR_DERIVED(Coordinates, kmldom::Element, kmldom::Coordinates) SWIG_INTRUSIVE_PTR_DERIVED(Create, kmldom::UpdateOperation, kmldom::Create) SWIG_INTRUSIVE_PTR_DERIVED(Data, kmldom::Object, kmldom::Data) SWIG_INTRUSIVE_PTR_DERIVED(Delete, kmldom::UpdateOperation, kmldom::Delete) SWIG_INTRUSIVE_PTR_DERIVED(Document, kmldom::Container, kmldom::Document) SWIG_INTRUSIVE_PTR_DERIVED(ExtendedData, kmldom::Element, kmldom::ExtendedData) SWIG_INTRUSIVE_PTR_DERIVED(Folder, kmldom::Container, kmldom::Folder) SWIG_INTRUSIVE_PTR_DERIVED(GroundOverlay, kmldom::Overlay, kmldom::GroundOverlay) SWIG_INTRUSIVE_PTR_DERIVED(HotSpot, kmldom::Vec2, kmldom::HotSpot) SWIG_INTRUSIVE_PTR_DERIVED(Icon, kmldom::BasicLink, kmldom::Icon) SWIG_INTRUSIVE_PTR_DERIVED(IconStyle, kmldom::ColorStyle, kmldom::IconStyle) SWIG_INTRUSIVE_PTR_DERIVED(IconStyleIcon, kmldom::BasicLink, kmldom::IconStyleIcon) SWIG_INTRUSIVE_PTR_DERIVED(ImagePyramid, kmldom::Object, kmldom::ImagePyramid) SWIG_INTRUSIVE_PTR_DERIVED(InnerBoundaryIs, kmldom::Element, kmldom::InnerBoundaryIs) SWIG_INTRUSIVE_PTR_DERIVED(ItemIcon, kmldom::Object, kmldom::ItemIcon) SWIG_INTRUSIVE_PTR_DERIVED(Kml, kmldom::Element, kmldom::Kml) SWIG_INTRUSIVE_PTR_DERIVED(LabelStyle, kmldom::ColorStyle, kmldom::LabelStyle) SWIG_INTRUSIVE_PTR_DERIVED(LatLonBox, kmldom::AbstractLatLonBox, kmldom::LatLonBox) SWIG_INTRUSIVE_PTR_DERIVED(LatLonAltBox, kmldom::AbstractLatLonBox, kmldom::LatLonAltBox) SWIG_INTRUSIVE_PTR_DERIVED(LinearRing, kmldom::Geometry, kmldom::LinearRing) SWIG_INTRUSIVE_PTR_DERIVED(LineString, kmldom::Geometry, kmldom::LineString) SWIG_INTRUSIVE_PTR_DERIVED(LineStyle, kmldom::ColorStyle, kmldom::LineStyle) SWIG_INTRUSIVE_PTR_DERIVED(Link, kmldom::BasicLink, kmldom::Link) SWIG_INTRUSIVE_PTR_DERIVED(LinkSnippet, kmldom::SnippetCommon, kmldom::LinkSnippet) SWIG_INTRUSIVE_PTR_DERIVED(ListStyle, kmldom::SubStyle, kmldom::ListStyle) SWIG_INTRUSIVE_PTR_DERIVED(Location, kmldom::Object, kmldom::Location) SWIG_INTRUSIVE_PTR_DERIVED(Lod, kmldom::Object, kmldom::Lod) SWIG_INTRUSIVE_PTR_DERIVED(LookAt, kmldom::AbstractView, kmldom::LookAt) SWIG_INTRUSIVE_PTR_DERIVED(Model, kmldom::Geometry, kmldom::Model) SWIG_INTRUSIVE_PTR_DERIVED(MultiGeometry, kmldom::Geometry, kmldom::MultiGeometry) SWIG_INTRUSIVE_PTR_DERIVED(NetworkLink, kmldom::Feature, kmldom::NetworkLink) SWIG_INTRUSIVE_PTR_DERIVED(Orientation, kmldom::Object, kmldom::Orientation) SWIG_INTRUSIVE_PTR_DERIVED(NetworkLinkControl, kmldom::Element, kmldom::NetworkLinkControl) SWIG_INTRUSIVE_PTR_DERIVED(OuterBoundaryIs, kmldom::Element, kmldom::OuterBoundaryIs) SWIG_INTRUSIVE_PTR_DERIVED(OverlayXY, kmldom::Vec2, kmldom::OverlayXY) SWIG_INTRUSIVE_PTR_DERIVED(Pair, kmldom::Object, kmldom::Pair) SWIG_INTRUSIVE_PTR_DERIVED(PhotoOverlay, kmldom::Overlay, kmldom::PhotoOverlay) SWIG_INTRUSIVE_PTR_DERIVED(Placemark, kmldom::Feature, kmldom::Placemark) SWIG_INTRUSIVE_PTR_DERIVED(Polygon, kmldom::Geometry, kmldom::Polygon) SWIG_INTRUSIVE_PTR_DERIVED(Point, kmldom::Geometry, kmldom::Point) SWIG_INTRUSIVE_PTR_DERIVED(PolyStyle, kmldom::ColorStyle, kmldom::PolyStyle) SWIG_INTRUSIVE_PTR_DERIVED(Region, kmldom::Object, kmldom::Region) SWIG_INTRUSIVE_PTR_DERIVED(ResourceMap, kmldom::Object, kmldom::ResourceMap) SWIG_INTRUSIVE_PTR_DERIVED(RotationXY, kmldom::Vec2, kmldom::RotationXY) SWIG_INTRUSIVE_PTR_DERIVED(Scale, kmldom::Object, kmldom::Scale) SWIG_INTRUSIVE_PTR_DERIVED(Schema, kmldom::Object, kmldom::Schema) SWIG_INTRUSIVE_PTR_DERIVED(SchemaData, kmldom::Object, kmldom::SchemaData) SWIG_INTRUSIVE_PTR_DERIVED(ScreenOverlay, kmldom::Overlay, kmldom::ScreenOverlay) SWIG_INTRUSIVE_PTR_DERIVED(ScreenXY, kmldom::Vec2, kmldom::ScreenXY) SWIG_INTRUSIVE_PTR_DERIVED(Size, kmldom::Vec2, kmldom::Size) SWIG_INTRUSIVE_PTR_DERIVED(SimpleData, kmldom::Element, kmldom::SimpleData) SWIG_INTRUSIVE_PTR_DERIVED(SimpleField, kmldom::Element, kmldom::SimpleField) SWIG_INTRUSIVE_PTR_DERIVED(Snippet, kmldom::SnippetCommon, kmldom::Snippet) SWIG_INTRUSIVE_PTR_DERIVED(Style, kmldom::StyleSelector, kmldom::Style) SWIG_INTRUSIVE_PTR_DERIVED(StyleMap, kmldom::StyleSelector, kmldom::StyleMap) SWIG_INTRUSIVE_PTR_DERIVED(TimeSpan, kmldom::TimePrimitive, kmldom::TimeSpan) SWIG_INTRUSIVE_PTR_DERIVED(TimeStamp, kmldom::TimePrimitive, kmldom::TimeStamp) SWIG_INTRUSIVE_PTR_DERIVED(ViewVolume, kmldom::Object, kmldom::ViewVolume) SWIG_INTRUSIVE_PTR_DERIVED(Update, kmldom::Element, kmldom::Update) SWIG_INTRUSIVE_PTR_DERIVED(GxTourPrimitive, kmldom::Object, kmldom::GxTourPrimitive) SWIG_INTRUSIVE_PTR_DERIVED(GxAnimatedUpdate, kmldom::GxTourPrimitive, kmldom::GxAnimatedUpdate) SWIG_INTRUSIVE_PTR_DERIVED(GxFlyTo, kmldom::GxTourPrimitive, kmldom::GxFlyTo) SWIG_INTRUSIVE_PTR_DERIVED(GxLatLonQuad, kmldom::Object, kmldom::GxLatLonQuad) SWIG_INTRUSIVE_PTR_DERIVED(GxPlaylist, kmldom::Object, kmldom::GxPlaylist) SWIG_INTRUSIVE_PTR_DERIVED(GxSoundCue, kmldom::GxTourPrimitive, kmldom::GxSoundCue) SWIG_INTRUSIVE_PTR_DERIVED(GxTimeSpan, kmldom::TimeSpan, kmldom::GxTimeSpan) SWIG_INTRUSIVE_PTR_DERIVED(GxTimeStamp, kmldom::TimeStamp, kmldom::GxTimeStamp) SWIG_INTRUSIVE_PTR_DERIVED(GxTour, kmldom::Feature, kmldom::GxTour) SWIG_INTRUSIVE_PTR_DERIVED(GxTourControl, kmldom::GxTourPrimitive, kmldom::GxTourControl) SWIG_INTRUSIVE_PTR_DERIVED(GxWait, kmldom::GxTourPrimitive, kmldom::GxWait) // Tell SWIG about C++ Standard Library std::string. %include "std_string.i" %include "kml/dom/xsd.h" // Tell SWIG about the kmldom type ids (Type_Placemark, etc). %include "kml/dom/kml22.h" // Tell SWIG about the intrusive_ptr typedefs. %include "kml/dom/kml_ptr.h" namespace kmlbase { %nodefaultctor Referent; class Referent { }; %nodefaultctor XmlElement; class XmlElement { public: // TODO: XmlnsId get_xmlns() const; }; } // end namespace kmlbase namespace kmldom { // All complex elements in KML are derived from Element. Element-derived // classes are constructed using KmlFactory thus no constructor is available. // All elements are "%nodefaultctor" given that the constructor is private // in the underlying class since only the factory creates an element instance. %nodefaultctor Element; class Element : public kmlbase::XmlElement { public: virtual KmlDomType Type(); virtual bool IsA(KmlDomType type_id); }; // This is <coordinates> in the KML 2.2 XSD. %nodefaultctor Coordinates; class Coordinates : public Element { public: void add_latlng(double latitude, double longitude); void add_latlngalt(double latitude, double longitude, double altitude); size_t get_coordinates_array_size(); const kmlbase::Vec3 get_coordinates_array_at(unsigned int index); }; // This is vec2Type in the KML 2.2 XSD. %nodefaultctor Vec2; class Vec2 : public Element { public: // x= double get_x(); void set_x(double value); bool has_x(); void clear_x(); // y= double get_y(); void set_y(double value); bool has_y(); void clear_y(); // xunits= int get_xunits(); void set_xunits(int value); bool has_xunits(); void clear_xunits(); // yunits= int get_yunits(); void set_yunits(int value); bool has_yunits(); void clear_yunits(); }; %include "libkml_kmlelements.i" %nodefaultctor KmlFactory; class KmlFactory { public: static KmlFactory* GetFactory(); // This method creates any complex element in Element type. ElementPtr CreateElementById(KmlDomType id) const; // Factory functions to create all KML complex elements in their native type. AliasPtr CreateAlias() const; AtomAuthorPtr CreateAtomAuthor() const; AtomLinkPtr CreateAtomLink() const; BalloonStylePtr CreateBalloonStyle() const; CameraPtr CreateCamera() const; ChangePtr CreateChange() const; CoordinatesPtr CreateCoordinates() const; CreatePtr CreateCreate() const; DataPtr CreateData() const; DeletePtr CreateDelete() const; DocumentPtr CreateDocument() const; ExtendedDataPtr CreateExtendedData() const; FolderPtr CreateFolder() const; GroundOverlayPtr CreateGroundOverlay() const; HotSpotPtr CreateHotSpot() const; IconPtr CreateIcon() const; IconStylePtr CreateIconStyle() const; IconStyleIconPtr CreateIconStyleIcon() const; ImagePyramidPtr CreateImagePyramid() const; InnerBoundaryIsPtr CreateInnerBoundaryIs() const; ItemIconPtr CreateItemIcon() const; KmlPtr CreateKml() const; LabelStylePtr CreateLabelStyle() const; LatLonBoxPtr CreateLatLonBox() const; LatLonAltBoxPtr CreateLatLonAltBox() const; LinearRingPtr CreateLinearRing() const; LineStringPtr CreateLineString() const; LineStylePtr CreateLineStyle() const; LinkPtr CreateLink() const; LinkSnippetPtr CreateLinkSnippet() const; ListStylePtr CreateListStyle() const; LocationPtr CreateLocation() const; LodPtr CreateLod() const; LookAtPtr CreateLookAt() const; ModelPtr CreateModel() const; MultiGeometryPtr CreateMultiGeometry() const; NetworkLinkPtr CreateNetworkLink() const; OrientationPtr CreateOrientation() const; NetworkLinkControlPtr CreateNetworkLinkControl() const; OuterBoundaryIsPtr CreateOuterBoundaryIs() const; OverlayXYPtr CreateOverlayXY() const; PairPtr CreatePair() const; PhotoOverlayPtr CreatePhotoOverlay() const; PlacemarkPtr CreatePlacemark() const; PolygonPtr CreatePolygon() const; PointPtr CreatePoint() const; PolyStylePtr CreatePolyStyle() const; RegionPtr CreateRegion() const; ResourceMapPtr CreateResourceMap() const; RotationXYPtr CreateRotationXY() const; ScalePtr CreateScale() const; SchemaPtr CreateSchema() const; SchemaDataPtr CreateSchemaData() const; ScreenOverlayPtr CreateScreenOverlay() const; ScreenXYPtr CreateScreenXY() const; SizePtr CreateSize() const; SimpleDataPtr CreateSimpleData() const; SimpleFieldPtr CreateSimpleField() const; SnippetPtr CreateSnippet() const; StylePtr CreateStyle() const; StyleMapPtr CreateStyleMap() const; TimeSpanPtr CreateTimeSpan() const; TimeStampPtr CreateTimeStamp() const; ViewVolumePtr CreateViewVolume() const; UpdatePtr CreateUpdate() const; GxAnimatedUpdatePtr CreateGxAnimatedUpdate() const; GxFlyToPtr CreateGxFlyTo() const; GxLatLonQuadPtr CreateGxLatLonQuad() const; GxPlaylistPtr CreateGxPlaylist() const; GxSoundCuePtr CreateGxSoundCue() const; GxTimeSpanPtr CreateGxTimeSpan() const; GxTimeStampPtr CreateGxTimeStamp() const; GxTourPtr CreateGxTour() const; GxTourControlPtr CreateGxTourControl() const; GxWaitPtr CreateGxWait() const; }; // Parse KML from memory buffer to Element hierarchy. ElementPtr ParseKml(const std::string& kml); // Serialize "pretty": newlines and indentation. std::string SerializePretty(const ElementPtr& element); // Serialize "raw": no newlines or indentation added. std::string SerializeRaw(const ElementPtr& element); } // end namespace kmldom // This must come after the elements declared above in kmlelements.i. %include "kml/dom/kml_cast.h" ��������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/swig/kmlengine.i�������������������������������������������������������������������0000664�0000000�0000000�00000011500�12636032571�0016652�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This is the SWIG interface file for the KML Engine. // This was developed with SWIG version 1.3.35. %module kmlengine %import "kmldom.i" // Include the headers needed to build kmlengine_wrap.cc. %{ #include "kml/dom.h" #include "kml/engine.h" %} // Tell SWIG about C++ Standard Library std::string. %include "std_string.i" // Tell SWIG about the KML DOM intrusive_ptr typedefs. %include "kml/dom/kml_ptr.h" %include "typemaps.i" namespace kmlengine { class Bbox { public: Bbox(); Bbox(double north, double south, double east, double west); bool Contains(double latitude, double longitude) const; void ExpandFromBbox(const Bbox& bbox); void ExpandLatitude(double latitude); void ExpandLongitude(double longitude); void ExpandLatLon(double latitude, double longitude); double get_north() const; double get_south() const; double get_east() const; double get_west() const; }; kmldom::ElementPtr Clone(const kmldom::ElementPtr& element); bool GetFeatureBounds(const kmldom::FeaturePtr& feature, Bbox* bbox); %apply double* OUTPUT { double* lat }; %apply double* OUTPUT { double* lon }; bool GetFeatureLatLon(const kmldom::FeaturePtr& feature, double* lat, double* lon); const kmldom::FeaturePtr GetRootFeature(const kmldom::ElementPtr& root); %nodefaultctor KmlFile; %apply std::string* OUTPUT { std::string* errors }; %apply std::string* OUTPUT { std::string* xml_output }; class KmlFile { public: static KmlFile* CreateFromParse(const std::string& kml_data, std::string* errors); static KmlFile* CreateFromImport(const kmldom::ElementPtr& root); const kmldom::ElementPtr get_root() const; bool SerializeToString(std::string* xml_output) const; kmldom::ObjectPtr GetObjectById(const std::string& id) const; kmldom::StyleSelectorPtr GetSharedStyleById(const std::string& id) const; }; %nodefaultctor KmzFile; %apply std::string* OUTPUT { std::string* output }; class KmzFile { public: static KmzFile* OpenFromFile(const char* kmz_filepath); static KmzFile* CreateFromString(const std::string& kmz_data); bool ReadKml(std::string* output) const; bool ReadFile(const char* subfile, std::string* output) const; }; %apply std::string* OUTPUT { std::string* kmz_url }; %apply std::string* OUTPUT { std::string* kmz_path }; bool KmzSplit(const std::string& kml_url, std::string* kmz_url, std::string* kmz_path); %apply std::string* OUTPUT { std::string* scheme }; %apply std::string* OUTPUT { std::string* host }; %apply std::string* OUTPUT { std::string* port }; %apply std::string* OUTPUT { std::string* path }; %apply std::string* OUTPUT { std::string* query }; %apply std::string* OUTPUT { std::string* fragment }; bool SplitUri(const std::string& uri, std::string* scheme, std::string* host, std::string* port, std::string* path, std::string* query, std::string* fragment); // TODO: // void ProcessUpdate(const kmldom::UpdatePtr& update, KmlFile* kml_file); // TODO: // std::string CreateBalloonText(const KmlFilePtr& kml_file, // const kmldom::FeaturePtr& feature); // TODO: // kmldom::StylePtr CreateResolvedStyle(const kmldom::FeaturePtr& feature, // const KmlFilePtr& kml_file, // kmldom::StyleStateEnum style_state); } // end namespace kmlengine ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/swig/libkml_intrusive_ptr.i��������������������������������������������������������0000664�0000000�0000000�00000021167�12636032571�0021162�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file is derived from swig-1.3.35/Lib/shared_ptr.i // This file can and should be removed from libkml if and when this file or // equivalent functionality appears in a future version of SWIG. // [The following is from swig-1.3.35/LICENSE] // // SWIG is distributed under the following terms: // // I. // // Copyright (c) 1995-1998 // The University of Utah and the Regents of the University of California // All Rights Reserved // // Permission is hereby granted, without written agreement and without // license or royalty fees, to use, copy, modify, and distribute this // software and its documentation for any purpose, provided that // (1) The above copyright notice and the following two paragraphs // appear in all copies of the source code and (2) redistributions // including binaries reproduces these notices in the supporting // documentation. Substantial modifications to this software may be // copyrighted by their authors and need not follow the licensing terms // described here, provided that the new terms are clearly indicated in // all files where they apply. // // IN NO EVENT SHALL THE AUTHOR, THE UNIVERSITY OF CALIFORNIA, THE // UNIVERSITY OF UTAH OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY // PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL // DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, // EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF // THE POSSIBILITY OF SUCH DAMAGE. // // THE AUTHOR, THE UNIVERSITY OF CALIFORNIA, AND THE UNIVERSITY OF UTAH // SPECIFICALLY DISCLAIM ANY WARRANTIES,INCLUDING, BUT NOT LIMITED TO, // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND // THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, // SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. // // // II. // // This software includes contributions that are Copyright (c) 1998-2005 // University of Chicago. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. Redistributions // in binary form must reproduce the above copyright notice, this list of // conditions and the following disclaimer in the documentation and/or // other materials provided with the distribution. Neither the name of // the University of Chicago nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF CHICAGO AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF // CHICAGO OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // // III. // // This software includes contributions that are Copyright (c) 2005-2006 // Arizona Board of Regents (University of Arizona). // All Rights Reserved // // Permission is hereby granted, without written agreement and without // license or royalty fees, to use, copy, modify, and distribute this // software and its documentation for any purpose, provided that // (1) The above copyright notice and the following two paragraphs // appear in all copies of the source code and (2) redistributions // including binaries reproduces these notices in the supporting // documentation. Substantial modifications to this software may be // copyrighted by their authors and need not follow the licensing terms // described here, provided that the new terms are clearly indicated in // all files where they apply. // // THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF ARIZONA AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF // ARIZONA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // [End of swig-1.3.35/LICENSE] // intrusive_ptr namespaces could be boost or std or std::tr1 #if !defined(SWIG_INTRUSIVE_PTR_NAMESPACE) # define SWIG_INTRUSIVE_PTR_NAMESPACE boost #endif #if defined(SWIG_INTRUSIVE_PTR_SUBNAMESPACE) # define SWIG_INTRUSIVE_PTR_QNAMESPACE SWIG_INTRUSIVE_PTR_NAMESPACE::SWIG_INTRUSIVE_PTR_SUBNAMESPACE #else # define SWIG_INTRUSIVE_PTR_QNAMESPACE SWIG_INTRUSIVE_PTR_NAMESPACE #endif namespace SWIG_INTRUSIVE_PTR_NAMESPACE { #if defined(SWIG_INTRUSIVE_PTR_SUBNAMESPACE) namespace SWIG_INTRUSIVE_PTR_SUBNAMESPACE { #endif template <class T> class intrusive_ptr { }; #if defined(SWIG_INTRUSIVE_PTR_SUBNAMESPACE) } #endif } %fragment("SWIG_null_deleter", "header") { struct SWIG_null_deleter { void operator() (void const *) const { } }; %#define SWIG_NO_NULL_DELETER_0 , SWIG_null_deleter() %#define SWIG_NO_NULL_DELETER_1 %#define SWIG_NO_NULL_DELETER_SWIG_POINTER_NEW %#define SWIG_NO_NULL_DELETER_SWIG_POINTER_OWN } // Main user macro for defining intrusive_ptr typemaps for both const and non-const pointer types // For plain classes, do not use for derived classes %define SWIG_INTRUSIVE_PTR(PROXYCLASS, TYPE...) SWIG_INTRUSIVE_PTR_TYPEMAPS(PROXYCLASS, , TYPE) SWIG_INTRUSIVE_PTR_TYPEMAPS(PROXYCLASS, const, TYPE) %enddef // Main user macro for defining intrusive_ptr typemaps for both const and non-const pointer types // For derived classes %define SWIG_INTRUSIVE_PTR_DERIVED(PROXYCLASS, BASECLASSTYPE, TYPE...) SWIG_INTRUSIVE_PTR_TYPEMAPS(PROXYCLASS, , TYPE) SWIG_INTRUSIVE_PTR_TYPEMAPS(PROXYCLASS, const, TYPE) %types(SWIG_INTRUSIVE_PTR_NAMESPACE::intrusive_ptr< TYPE > = SWIG_INTRUSIVE_PTR_NAMESPACE::intrusive_ptr< BASECLASSTYPE >) %{ *newmemory = SWIG_CAST_NEW_MEMORY; return (void *) new SWIG_INTRUSIVE_PTR_NAMESPACE::intrusive_ptr< BASECLASSTYPE >(*(SWIG_INTRUSIVE_PTR_NAMESPACE::intrusive_ptr< TYPE > *)$from); %} %extend TYPE { static SWIG_INTRUSIVE_PTR_NAMESPACE::intrusive_ptr< BASECLASSTYPE > SWIGSharedPtrUpcast(SWIG_INTRUSIVE_PTR_NAMESPACE::intrusive_ptr< TYPE > swigSharedPtrUpcast) { return swigSharedPtrUpcast; } } %enddef ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/swig/libkml_kmlelements.i����������������������������������������������������������0000664�0000000�0000000�00000121403�12636032571�0020557�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Generated from the KML 2.2 XSD. // This is the SWIG interface file for the public API to the KML DOM. // In addition to serving the needs of SWIG this also serves to document the // public C++ API separate from the present implementation found in the // private sections of the present C++ .h files. // This is AbstractObjectType in the KML 2.2 XSD. %nodefaultctor Object; class Object : public Element { public: // id= const std::string& get_id(); void set_id(const std::string& id); bool has_id(); void clear_id(); // targetId= const std::string& get_targetid(); void set_targetid(const std::string& targetid); bool has_targetid(); void clear_targetid(); }; %nodefaultctor SubStyle; class SubStyle : public Object { }; %nodefaultctor ColorStyle; class ColorStyle : public SubStyle { public: // <color> const kmlbase::Color32& get_color(); void set_color(const kmlbase::Color32& color); bool has_color(); void clear_color(); // <colorMode> int get_colormode(); void set_colormode(int colormode); bool has_colormode(); void clear_colormode(); }; %nodefaultctor SnippetCommon; class SnippetCommon : public Element { public: // Content. const std::string& get_text(); void set_text(const std::string& text); bool has_text(); void clear_text(); // maxLines= int get_maxlines(); void set_maxlines(int maxlines); bool has_maxlines(); void clear_maxlines(); }; %nodefaultctor Snippet; class Snippet : public SnippetCommon { }; %nodefaultctor LinkSnippet; class LinkSnippet : public SnippetCommon { }; %nodefaultctor AbstractView; class AbstractView : public Object { public: // gx:TimeStamp and gx:TimeSpan. const TimePrimitivePtr get_gx_timeprimitive(); bool has_gx_timeprimitive(); void set_gx_timeprimitive(const TimePrimitivePtr& gx_timeprimitive); void clear_gx_timeprimitive(); }; %nodefaultctor TimePrimitive; class TimePrimitive : public Object { }; %nodefaultctor StyleSelector; class StyleSelector : public Object { }; %nodefaultctor AbstractLatLonBox; class AbstractLatLonBox : public Object { public: // <north> double get_north(); bool has_north(); void set_north(double north); void clear_north(); // <south> double get_south(); bool has_south(); void set_south(double south); void clear_south(); // <east> double get_east(); bool has_east(); void set_east(double east); void clear_east(); // <west> double get_west(); bool has_west(); void set_west(double west); void clear_west(); }; %nodefaultctor LatLonAltBox; class LatLonAltBox : public AbstractLatLonBox { public: // <minAltitude> double get_minaltitude(); void set_minaltitude(double minaltitude); bool has_minaltitude(); void clear_minaltitude(); // <maxAltitude> double get_maxaltitude(); void set_maxaltitude(double maxaltitude); bool has_maxaltitude(); void clear_maxaltitude(); // <altitudeMode> int get_altitudemode(); void set_altitudemode(int altitudemode); bool has_altitudemode(); void clear_altitudemode(); // <gx:altitudeMode> int get_gx_altitudemode(); bool has_gx_altitudemode(); void set_gx_altitudemode(int gx_altitudemode); void clear_gx_altitudemode(); }; %nodefaultctor Lod; class Lod : public Object { public: // <minLodPixels> double get_minlodpixels(); void set_minlodpixels(double minlodpixels); bool has_minlodpixels(); void clear_minlodpixels(); // <maxLodPixels> double get_maxlodpixels(); void set_maxlodpixels(double maxlodpixels); bool has_maxlodpixels(); void clear_maxlodpixels(); // <minFadeExtent> double get_minfadeextent(); void set_minfadeextent(double minfadeextent); bool has_minfadeextent(); void clear_minfadeextent(); // <maxFadeExtent> double get_maxfadeextent(); void set_maxfadeextent(double maxfadeextent); bool has_maxfadeextent(); void clear_maxfadeextent(); }; %nodefaultctor Region; class Region : public Object { public: // <LatLonAltBox> const LatLonAltBoxPtr get_latlonaltbox(); void set_latlonaltbox(LatLonAltBoxPtr latlonaltbox); bool has_latlonaltbox(); void clear_latlonaltbox(); // <Lod> const LodPtr get_lod(); void set_lod(LodPtr lod); bool has_lod(); void clear_lod(); }; %nodefaultctor ExtendedData; class ExtendedData : public Element { public: // <Data>. void add_data(DataPtr data); const size_t get_data_array_size(); const DataPtr get_data_array_at(unsigned int index); // <SchemaData>. void add_schemadata(SchemaDataPtr schemadata); const size_t get_schemadata_array_size(); const SchemaDataPtr get_schemadata_array_at(unsigned int index); }; %nodefaultctor Feature; class Feature : public Object { public: // <name> const std::string& get_name(); void set_name(const std::string& name); bool has_name(); void clear_name(); // <visibility> bool get_visibility(); void set_visibility(bool visibility); bool has_visibility(); void clear_visibility(); // <open> bool get_open(); void set_open(bool open); bool has_open(); void clear_open(); // <atom:author> const AtomAuthorPtr get_atomauthor(); bool has_atomauthor(); void set_atomauthor(AtomAuthorPtr atomauthor); void clear_atomauthor(); // <atom:link> const AtomLinkPtr get_atomlink(); bool has_atomlink(); void set_atomlink(AtomLinkPtr atomlink); void clear_atomlink(); // <address> const std::string& get_address(); void set_address(const std::string& address); bool has_address(); void clear_address(); // <phoneNumber> const std::string& get_phonenumber(); void set_phonenumber(const std::string& phonenumber); bool has_phonenumber(); void clear_phonenumber(); // <Snippet> const SnippetPtr get_snippet(); void set_snippet(SnippetPtr snippet); bool has_snippet(); void clear_snippet(); // <description> const std::string& get_description(); void set_description(const std::string& description); bool has_description(); void clear_description(); // AbstractView const AbstractViewPtr get_abstractview(); void set_abstractview(AbstractViewPtr abstractview); bool has_abstractview(); void clear_abstractview(); // TimePrimitive const TimePrimitivePtr get_timeprimitive(); void set_timeprimitive(TimePrimitivePtr timeprimitive); bool has_timeprimitive(); void clear_timeprimitive(); // <styleUrl> const std::string& get_styleurl(); void set_styleurl(const std::string& styleurl); bool has_styleurl(); void clear_styleurl(); // StyleSelector const StyleSelectorPtr get_styleselector(); void set_styleselector(StyleSelectorPtr styleselector); bool has_styleselector(); void clear_styleselector(); // <Region> const RegionPtr get_region(); void set_region(RegionPtr region); bool has_region(); void clear_region(); // <ExtendedData> const ExtendedDataPtr get_extendeddata(); void set_extendeddata(ExtendedDataPtr extendeddata); bool has_extendeddata(); void clear_extendeddata(); // <gx:balloonVisibility> bool get_gx_balloonvisibility(); void set_gx_balloonvisibility(bool balloonvisibility); bool has_gx_balloonvisibility(); void clear_gx_balloonvisibility(); }; %nodefaultctor Container; class Container : public Feature { public: // Feature... void add_feature(FeaturePtr feature); const size_t get_feature_array_size(); const FeaturePtr get_feature_array_at(unsigned int index); }; %nodefaultctor Geometry; class Geometry : public Object { }; %nodefaultctor BasicLink; class BasicLink : public Object { public: // <href> const std::string& get_href(); bool has_href(); void set_href(const std::string& href); void clear_href(); }; %nodefaultctor Icon; class Icon : public BasicLink { public: // <refreshMode> int get_refreshmode(); void set_refreshmode(int refreshmode); bool has_refreshmode(); void clear_refreshmode(); // <refreshInterval> double get_refreshinterval(); void set_refreshinterval(double refreshinterval); bool has_refreshinterval(); void clear_refreshinterval(); // <viewRefreshMode> int get_viewrefreshmode(); void set_viewrefreshmode(int viewrefreshmode); bool has_viewrefreshmode(); void clear_viewrefreshmode(); // <viewRefreshTime> double get_viewrefreshtime(); void set_viewrefreshtime(double viewrefreshtime); bool has_viewrefreshtime(); void clear_viewrefreshtime(); // <viewBoundScale> double get_viewboundscale(); void set_viewboundscale(double viewboundscale); bool has_viewboundscale(); void clear_viewboundscale(); // <viewFormat> const std::string& get_viewformat(); void set_viewformat(const std::string& viewformat); bool has_viewformat(); void clear_viewformat(); // <httpQuery> const std::string& get_httpquery(); void set_httpquery(const std::string& httpquery); bool has_httpquery(); void clear_httpquery(); }; %nodefaultctor IconStyleIcon; class IconStyleIcon : public BasicLink { public: // <href> const std::string& get_href(); bool has_href(); void set_href(const std::string& href); void clear_href(); }; %nodefaultctor Overlay; class Overlay : public Feature { public: // <color> const kmlbase::Color32& get_color(); void set_color(const kmlbase::Color32& color); bool has_color(); void clear_color(); // <drawOrder> int get_draworder(); void set_draworder(int draworder); bool has_draworder(); void clear_draworder(); // <Icon> const IconPtr get_icon(); void set_icon(IconPtr icon); bool has_icon(); void clear_icon(); }; %nodefaultctor BalloonStyle; class BalloonStyle : public SubStyle { public: // <bgColor> const kmlbase::Color32& get_bgcolor(); void set_bgcolor(const kmlbase::Color32& bgcolor); bool has_bgcolor(); void clear_bgcolor(); // <textColor> const kmlbase::Color32& get_textcolor(); void set_textcolor(const kmlbase::Color32& textcolor); bool has_textcolor(); void clear_textcolor(); // <text> const std::string& get_text(); void set_text(const std::string& text); bool has_text(); void clear_text(); // <displayMode> int get_displaymode(); void set_displaymode(int displaymode); bool has_displaymode(); void clear_displaymode(); }; %nodefaultctor Camera; class Camera : public AbstractView { public: // <longitude> double get_longitude(); void set_longitude(double longitude); bool has_longitude(); void clear_longitude(); // <latitude> double get_latitude(); void set_latitude(double latitude); bool has_latitude(); void clear_latitude(); // <altitude> double get_altitude(); void set_altitude(double altitude); bool has_altitude(); void clear_altitude(); // <heading> double get_heading(); void set_heading(double heading); bool has_heading(); void clear_heading(); // <tilt> double get_tilt(); void set_tilt(double tilt); bool has_tilt(); void clear_tilt(); // <roll> double get_roll(); void set_roll(double roll); bool has_roll(); void clear_roll(); // <altitudeMode> int get_altitudemode(); void set_altitudemode(int altitudemode); bool has_altitudemode(); void clear_altitudemode(); // <gx:altitudeMode> int get_gx_altitudemode(); bool has_gx_altitudemode(); void set_gx_altitudemode(int gx_altitudemode); void clear_gx_altitudemode(); }; %nodefaultctor UpdateOperation; class UpdateOperation : public Element { }; %nodefaultctor Change; class Change : public UpdateOperation { public: // Object... void add_object(ObjectPtr object); const size_t get_object_array_size(); const ObjectPtr get_object_array_at(unsigned int index); }; %nodefaultctor Create; class Create : public UpdateOperation { public: // Container... void add_container(ContainerPtr container); const size_t get_container_array_size(); const ContainerPtr get_container_array_at(unsigned int index); }; %nodefaultctor Data; class Data : public Object { public: // name= const std::string& get_name(); bool has_name(); void set_name(const std::string& name); void clear_name(); // <displayname> const std::string& get_displayname(); bool has_displayname(); void set_displayname(const std::string& displayname); void clear_displayname(); // <value> const std::string& get_value(); bool has_value(); void set_value(const std::string& value); void clear_value(); }; %nodefaultctor Delete; class Delete : public UpdateOperation { public: // Feature... void add_feature(FeaturePtr feature); const size_t get_feature_array_size(); const FeaturePtr get_feature_array_at(unsigned int index); }; %nodefaultctor SimpleField; class SimpleField : public Element { public: // type= const std::string& get_type(); bool has_type(); void set_type(const std::string& value); void clear_type(); // name= const std::string& get_name(); bool has_name(); void set_name(const std::string& value); void clear_name(); // <displayName> const std::string& get_displayname(); void set_displayname(const std::string& displayname); bool has_displayname(); void clear_displayname(); }; %nodefaultctor Schema; class Schema : public Object { public: // name= const std::string& get_name(); bool has_name(); void set_name(const std::string& value); void clear_name(); // <SimpleField>... void add_simplefield(SimpleFieldPtr simplefield); const size_t get_simplefield_array_size(); const SimpleFieldPtr get_simplefield_array_at(unsigned int index); }; %nodefaultctor Document; class Document : public Container { public: // <Schema>... void add_schema(SchemaPtr schema); const size_t get_schema_array_size(); const SchemaPtr get_schema_array_at(unsigned int index); // <Style>,<StyleMap>... void add_styleselector(StyleSelectorPtr styleselector); const size_t get_styleselector_array_size(); const StyleSelectorPtr get_styleselector_array_at(unsigned int index); }; %nodefaultctor Folder; class Folder : public Container { }; %nodefaultctor LatLonBox; class LatLonBox : public AbstractLatLonBox { public: // <rotation> double get_rotation(); void set_rotation(double rotation); bool has_rotation(); void clear_rotation(); }; %nodefaultctor GxLatLonQuad; class GxLatLonQuad : public Object { public: // <coordinates> const CoordinatesPtr get_coordinates(); bool has_coordinates(); void set_coordinates(const CoordinatesPtr& coordinates); void clear_coordinates(); }; %nodefaultctor GroundOverlay; class GroundOverlay : public Overlay { public: // <altitude> double get_altitude(); void set_altitude(double altitude); bool has_altitude(); void clear_altitude(); // <altitudeMode> int get_altitudemode(); void set_altitudemode(int altitudemode); bool has_altitudemode(); void clear_altitudemode(); // <gx:altitudeMode> int get_gx_altitudemode(); bool has_gx_altitudemode(); void set_gx_altitudemode(int gx_altitudemode); void clear_gx_altitudemode(); // <LatLonBox> const LatLonBoxPtr get_latlonbox(); void set_latlonbox(LatLonBoxPtr latlonbox); bool has_latlonbox(); void clear_latlonbox(); // <gx:LatLonQuad> const GxLatLonQuadPtr get_gx_latlonquad(); bool has_gx_latlonquad(); void set_gx_latlonquad(GxLatLonQuadPtr gx_latlonquad); void clear_gx_latlonquad(); }; %nodefaultctor HotSpot; class HotSpot : public Vec2 { }; %nodefaultctor IconStyle; class IconStyle : public ColorStyle { public: // <scale> double get_scale(); void set_scale(double scale); bool has_scale(); void clear_scale(); // <Icon> (different from Overlay Icon) const IconStyleIconPtr get_icon(); void set_icon(IconStyleIconPtr icon); bool has_icon(); void clear_icon(); // <heading> double get_heading(); void set_heading(double heading); bool has_heading(); void clear_heading(); // <hotSpot> const HotSpotPtr get_hotspot(); void set_hotspot(HotSpotPtr hotspot); bool has_hotspot(); void clear_hotspot(); }; %nodefaultctor ImagePyramid; class ImagePyramid : public Object { public: // <tileSize> int get_tilesize(); void set_tilesize(int tilesize); bool has_tilesize(); void clear_tilesize(); // <maxWidth> int get_maxwidth(); void set_maxwidth(int maxwidth); bool has_maxwidth(); void clear_maxwidth(); // <maxHeight> int get_maxheight(); void set_maxheight(int maxheight); bool has_maxheight(); void clear_maxheight(); // <gridOrigin> int get_gridorigin(); void set_gridorigin(int gridorigin); bool has_gridorigin(); void clear_gridorigin(); }; %nodefaultctor ItemIcon; class ItemIcon : public Object { public: // <state> int get_state_array_at(unsigned int index); const size_t get_state_array_size(); bool has_state(); void add_state(int state); void clear_state(); // <href> const std::string& get_href(); void set_href(const std::string& href); bool has_href(); void clear_href(); }; %nodefaultctor LabelStyle; class LabelStyle : public ColorStyle { public: // <scale> double get_scale(); void set_scale(double scale); bool has_scale(); void clear_scale(); }; %nodefaultctor LineString; class LineString : public Geometry { public: // <extrude> bool get_extrude(); void set_extrude(bool extrude); bool has_extrude(); void clear_extrude(); // <tessellate> bool get_tessellate(); void set_tessellate(bool tessellate); bool has_tessellate(); void clear_tessellate(); // <altitudeMode> int get_altitudemode(); void set_altitudemode(int altitudemode); bool has_altitudemode(); void clear_altitudemode(); // <gx:altitudeMode> int get_gx_altitudemode(); bool has_gx_altitudemode(); void set_gx_altitudemode(int gx_altitudemode); void clear_gx_altitudemode(); // <coordinates> const CoordinatesPtr get_coordinates(); void set_coordinates(CoordinatesPtr coordinates); bool has_coordinates(); void clear_coordinates(); }; %nodefaultctor LineStyle; class LineStyle : public ColorStyle { public: // <width> double get_width(); void set_width(double width); bool has_width(); void clear_width(); }; %nodefaultctor LinearRing; class LinearRing : public Geometry { public: // <extrude> bool get_extrude(); void set_extrude(bool extrude); bool has_extrude(); void clear_extrude(); // <tessellate> bool get_tessellate(); void set_tessellate(bool tessellate); bool has_tessellate(); void clear_tessellate(); // <altitudeMode> int get_altitudemode(); void set_altitudemode(int altitudemode); bool has_altitudemode(); void clear_altitudemode(); // <gx:altitudeMode> int get_gx_altitudemode(); bool has_gx_altitudemode(); void set_gx_altitudemode(int gx_altitudemode); void clear_gx_altitudemode(); // <coordinates> const CoordinatesPtr get_coordinates(); void set_coordinates(CoordinatesPtr coordinates); bool has_coordinates(); void clear_coordinates(); }; %nodefaultctor Link; class Link : public BasicLink { public: // <refreshMode> int get_refreshmode(); void set_refreshmode(int refreshmode); bool has_refreshmode(); void clear_refreshmode(); // <refreshInterval> double get_refreshinterval(); void set_refreshinterval(double refreshinterval); bool has_refreshinterval(); void clear_refreshinterval(); // <viewRefreshMode> int get_viewrefreshmode(); void set_viewrefreshmode(int viewrefreshmode); bool has_viewrefreshmode(); void clear_viewrefreshmode(); // <viewRefreshTime> double get_viewrefreshtime(); void set_viewrefreshtime(double viewrefreshtime); bool has_viewrefreshtime(); void clear_viewrefreshtime(); // <viewBoundScale> double get_viewboundscale(); void set_viewboundscale(double viewboundscale); bool has_viewboundscale(); void clear_viewboundscale(); // <viewFormat> const std::string& get_viewformat(); void set_viewformat(const std::string& viewformat); bool has_viewformat(); void clear_viewformat(); // <httpQuery> const std::string& get_httpquery(); void set_httpquery(const std::string& httpquery); bool has_httpquery(); void clear_httpquery(); }; %nodefaultctor ListStyle; class ListStyle : public SubStyle { public: // <listItemType> int get_listitemtype(); void set_listitemtype(int listitemtype); bool has_listitemtype(); void clear_listitemtype(); // <bgColor> const kmlbase::Color32& get_bgcolor(); void set_bgcolor(const kmlbase::Color32& bgcolor); bool has_bgcolor(); void clear_bgcolor(); // <ItemIcon>... void add_itemicon(ItemIconPtr itemicon); const size_t get_itemicon_array_size(); const ItemIconPtr get_itemicon_array_at(unsigned int index); }; %nodefaultctor Location; class Location : public Object { public: // <longitude> double get_longitude(); void set_longitude(double longitude); bool has_longitude(); void clear_longitude(); // <latitude> double get_latitude(); void set_latitude(double latitude); bool has_latitude(); void clear_latitude(); // <altitude> double get_altitude(); void set_altitude(double altitude); bool has_altitude(); void clear_altitude(); }; %nodefaultctor LookAt; class LookAt : public AbstractView { public: // <longitude> double get_longitude(); void set_longitude(double longitude); bool has_longitude(); void clear_longitude(); // <latitude> double get_latitude(); void set_latitude(double latitude); bool has_latitude(); void clear_latitude(); // <altitude> double get_altitude(); void set_altitude(double altitude); bool has_altitude(); void clear_altitude(); // <heading> double get_heading(); void set_heading(double heading); bool has_heading(); void clear_heading(); // <tilt> double get_tilt(); void set_tilt(double tilt); bool has_tilt(); void clear_tilt(); // <range> double get_range(); void set_range(double range); bool has_range(); void clear_range(); // <altitudeMode> int get_altitudemode(); void set_altitudemode(int altitudemode); bool has_altitudemode(); void clear_altitudemode(); // <gx:altitudeMode> int get_gx_altitudemode(); bool has_gx_altitudemode(); void set_gx_altitudemode(int gx_altitudemode); void clear_gx_altitudemode(); }; %nodefaultctor Orientation; class Orientation : public Object { public: // <heading> double get_heading(); void set_heading(double heading); bool has_heading(); void clear_heading(); // <tilt> double get_tilt(); void set_tilt(double tilt); bool has_tilt(); void clear_tilt(); // <roll> double get_roll(); void set_roll(double roll); bool has_roll(); void clear_roll(); }; %nodefaultctor Scale; class Scale : public Object { public: // <x> double get_x(); void set_x(double x); bool has_x(); void clear_x(); // <y> double get_y(); void set_y(double y); bool has_y(); void clear_y(); // <z> double get_z(); void set_z(double z); bool has_z(); void clear_z(); }; %nodefaultctor Alias; class Alias : public Object { public: // <targetHref> const std::string& get_targethref(); void set_targethref(const std::string& targethref); bool has_targethref(); void clear_targethref(); // <sourceHref> const std::string& get_sourcehref(); void set_sourcehref(const std::string& sourcehref); bool has_sourcehref(); void clear_sourcehref(); }; %nodefaultctor ResourceMap; class ResourceMap : public Object { public: // <Alias>... void add_alias(AliasPtr alias); const size_t get_alias_array_size(); const AliasPtr get_alias_array_at(unsigned int index); }; %nodefaultctor Model; class Model : public Geometry { public: // <altitudeMode> int get_altitudemode(); void set_altitudemode(int altitudemode); bool has_altitudemode(); void clear_altitudemode(); // <gx:altitudeMode> int get_gx_altitudemode(); bool has_gx_altitudemode(); void set_gx_altitudemode(int gx_altitudemode); void clear_gx_altitudemode(); // <Location> const LocationPtr get_location(); void set_location(LocationPtr location); bool has_location(); void clear_location(); // <Orientation> const OrientationPtr get_orientation(); void set_orientation(OrientationPtr orientation); bool has_orientation(); void clear_orientation(); // <Scale> const ScalePtr get_scale(); void set_scale(ScalePtr scale); bool has_scale(); void clear_scale(); // <Link> const LinkPtr get_link(); void set_link(LinkPtr link); bool has_link(); void clear_link(); // <ResourceMap> const ResourceMapPtr get_resourcemap(); void set_resourcemap(ResourceMapPtr resourcemap); bool has_resourcemap(); void clear_resourcemap(); }; %nodefaultctor MultiGeometry; class MultiGeometry : public Geometry { public: // Geometry... void add_geometry(GeometryPtr geometry); const size_t get_geometry_array_size(); const GeometryPtr get_geometry_array_at(unsigned int index); }; %nodefaultctor NetworkLink; class NetworkLink : public Feature { public: // <refreshVisibility> bool get_refreshvisibility(); void set_refreshvisibility(bool refreshvisibility); bool has_refreshvisibility(); void clear_refreshvisibility(); // <flyToView> bool get_flytoview(); void set_flytoview(bool flytoview); bool has_flytoview(); void clear_flytoview(); // <Link> const LinkPtr get_link(); void set_link(LinkPtr link); bool has_link(); void clear_link(); }; %nodefaultctor Update; class Update : public Element { public: // <targetHref> const std::string& get_targethref(); bool has_targethref(); void set_targethref(const std::string& targethref); void clear_targethref(); // <Change>,<Create>,<Delete>... void add_updateoperation(UpdateOperationPtr updateoperation); const size_t get_updateoperation_array_size(); const UpdateOperationPtr get_updateoperation_array_at(unsigned int index); }; %nodefaultctor NetworkLinkControl; class NetworkLinkControl : public Element { public: // <minRefreshPeriod> double get_minrefreshperiod(); void set_minrefreshperiod(double minrefreshperiod); bool has_minrefreshperiod(); void clear_minrefreshperiod(); // <maxSessionLength> double get_maxsessionlength(); void set_maxsessionlength(double maxsessionlength); bool has_maxsessionlength(); void clear_maxsessionlength(); // <cookie> const std::string& get_cookie(); void set_cookie(const std::string& cookie); bool has_cookie(); void clear_cookie(); // <message> const std::string& get_message(); void set_message(const std::string& message); bool has_message(); void clear_message(); // <linkName> const std::string& get_linkname(); void set_linkname(const std::string& linkname); bool has_linkname(); void clear_linkname(); // <linkDescription> const std::string& get_linkdescription(); void set_linkdescription(const std::string& linkdescription); bool has_linkdescription(); void clear_linkdescription(); // <linkSnippet> const LinkSnippetPtr get_linksnippet(); void set_linksnippet(LinkSnippetPtr linksnippet); bool has_linksnippet(); void clear_linksnippet(); // <expires> const std::string& get_expires(); void set_expires(const std::string& expires); bool has_expires(); void clear_expires(); // <Update> const UpdatePtr get_update(); void set_update(UpdatePtr update); bool has_update(); void clear_update(); // AbstractView const AbstractViewPtr get_abstractview(); void set_abstractview(AbstractViewPtr abstractview); bool has_abstractview(); void clear_abstractview(); }; %nodefaultctor Pair; class Pair : public Object { public: // <key> int get_key(); void set_key(int key); bool has_key(); void clear_key(); // <styleUrl> const std::string& get_styleurl(); void set_styleurl(const std::string& styleurl); bool has_styleurl(); void clear_styleurl(); // <StyleSelector> const StyleSelectorPtr get_styleselector(); void set_styleselector(StyleSelectorPtr styleselector); bool has_styleselector(); void clear_styleselector(); }; %nodefaultctor ViewVolume; class ViewVolume : public Object { public: // <leftFov> double get_leftfov(); void set_leftfov(double leftfov); bool has_leftfov(); void clear_leftfov(); // <rightFov> double get_rightfov(); void set_rightfov(double rightfov); bool has_rightfov(); void clear_rightfov(); // <bottomFov> double get_bottomfov(); void set_bottomfov(double bottomfov); bool has_bottomfov(); void clear_bottomfov(); // <topFov> double get_topfov(); void set_topfov(double topfov); bool has_topfov(); void clear_topfov(); // <near> double get_near(); void set_near(double val); bool has_near(); void clear_near(); }; %nodefaultctor Point; class Point : public Geometry { public: // <extrude> bool get_extrude(); void set_extrude(bool extrude); bool has_extrude(); void clear_extrude(); // <altitudeMode> int get_altitudemode(); void set_altitudemode(int altitudemode); bool has_altitudemode(); void clear_altitudemode(); // <gx:altitudeMode> int get_gx_altitudemode(); bool has_gx_altitudemode(); void set_gx_altitudemode(int gx_altitudemode); void clear_gx_altitudemode(); // <coordinates> const CoordinatesPtr get_coordinates(); void set_coordinates(CoordinatesPtr coordinates); bool has_coordinates(); void clear_coordinates(); }; %nodefaultctor PhotoOverlay; class PhotoOverlay : public Overlay { public: // <rotation> double get_rotation(); void set_rotation(double rotation); bool has_rotation(); void clear_rotation(); // <ViewVolume> const ViewVolumePtr get_viewvolume(); void set_viewvolume(ViewVolumePtr viewvolume); bool has_viewvolume(); void clear_viewvolume(); // <ImagePyramid> const ImagePyramidPtr get_imagepyramid(); void set_imagepyramid(ImagePyramidPtr imagepyramid); bool has_imagepyramid(); void clear_imagepyramid(); // <Point> const PointPtr get_point(); void set_point(PointPtr point); bool has_point(); void clear_point(); // <shape> int get_shape(); bool has_shape(); void set_shape(int shape); void clear_shape(); }; %nodefaultctor Placemark; class Placemark : public Feature { public: // Geometry const GeometryPtr get_geometry(); void set_geometry(GeometryPtr geometry); bool has_geometry(); void clear_geometry(); }; %nodefaultctor PolyStyle; class PolyStyle : public ColorStyle { public: // <fill> bool get_fill(); void set_fill(bool fill); bool has_fill(); void clear_fill(); // <outline> bool get_outline(); void set_outline(bool outline); bool has_outline(); void clear_outline(); }; %nodefaultctor OuterBoundaryIs; class OuterBoundaryIs : public Element { public: // <LinearRing> const LinearRingPtr get_linearring(); void set_linearring(LinearRingPtr linearring); bool has_linearring(); void clear_linearring(); }; %nodefaultctor InnerBoundaryIs; class InnerBoundaryIs : public Element { public: // <LinearRing> const LinearRingPtr get_linearring(); void set_linearring(LinearRingPtr linearring); bool has_linearring(); void clear_linearring(); }; %nodefaultctor Polygon; class Polygon : public Geometry { public: // <extrude> bool get_extrude(); void set_extrude(bool extrude); bool has_extrude(); void clear_extrude(); // <tessellate> bool get_tessellate(); void set_tessellate(bool tessellate); bool has_tessellate(); void clear_tessellate(); // <altitudeMode> int get_altitudemode(); void set_altitudemode(int altitudemode); bool has_altitudemode(); void clear_altitudemode(); // <gx:altitudeMode> int get_gx_altitudemode(); bool has_gx_altitudemode(); void set_gx_altitudemode(int gx_altitudemode); void clear_gx_altitudemode(); // <outerBoundaryIs> const OuterBoundaryIsPtr get_outerboundaryis(); void set_outerboundaryis(OuterBoundaryIsPtr outerboundaryis); bool has_outerboundaryis(); void clear_outerboundaryis(); // <innerBoundaryIs>... void add_innerboundaryis(InnerBoundaryIsPtr innerboundaryis); const size_t get_innerboundaryis_array_size(); const InnerBoundaryIsPtr get_innerboundaryis_array_at(unsigned int index); }; %nodefaultctor SimpleData; class SimpleData : public Element { public: // name= const std::string& get_name(); bool has_name(); void set_name(const std::string& value); void clear_name(); // char data const std::string& get_text(); bool has_text(); void set_text(const std::string& value); void clear_text(); }; %nodefaultctor SchemaData; class SchemaData : public Object { public: // schemaUrl= const std::string& get_schemaurl(); bool has_schemaurl(); void set_schemaurl(const std::string& value); void clear_schemaurl(); // <SimpleData>... void add_simpledata(SimpleDataPtr simpledata); const size_t get_simpledata_array_size(); const SimpleDataPtr get_simpledata_array_at(unsigned int index); }; %nodefaultctor OverlayXY; class OverlayXY : public Vec2 { }; %nodefaultctor ScreenXY; class ScreenXY : public Vec2 { }; %nodefaultctor RotationXY; class RotationXY : public Vec2 { }; %nodefaultctor Size; class Size : public Vec2 { }; %nodefaultctor ScreenOverlay; class ScreenOverlay : public Overlay { public: // <OverlayXY> const OverlayXYPtr get_overlayxy(); void set_overlayxy(OverlayXYPtr overlayxy); bool has_overlayxy(); void clear_overlayxy(); // <ScreenXY> const ScreenXYPtr get_screenxy(); void set_screenxy(ScreenXYPtr screenxy); bool has_screenxy(); void clear_screenxy(); // <RotationXY> const RotationXYPtr get_rotationxy(); void set_rotationxy(RotationXYPtr rotationxy); bool has_rotationxy(); void clear_rotationxy(); // <size> const SizePtr get_size(); void set_size(SizePtr size); bool has_size(); void clear_size(); // <rotation> double get_rotation(); void set_rotation(double rotation); bool has_rotation(); void clear_rotation(); }; %nodefaultctor Style; class Style : public StyleSelector { public: // <IconStyle> const IconStylePtr get_iconstyle(); void set_iconstyle(IconStylePtr iconstyle); bool has_iconstyle(); void clear_iconstyle(); // <LabelStyle> const LabelStylePtr get_labelstyle(); void set_labelstyle(LabelStylePtr labelstyle); bool has_labelstyle(); void clear_labelstyle(); // <LineStyle> const LineStylePtr get_linestyle(); void set_linestyle(LineStylePtr linestyle); bool has_linestyle(); void clear_linestyle(); // <PolyStyle> const PolyStylePtr get_polystyle(); void set_polystyle(PolyStylePtr polystyle); bool has_polystyle(); void clear_polystyle(); // <BalloonStyle> const BalloonStylePtr get_balloonstyle(); void set_balloonstyle(BalloonStylePtr balloonstyle); bool has_balloonstyle(); void clear_balloonstyle(); // <ListStyle> const ListStylePtr get_liststyle(); void set_liststyle(ListStylePtr liststyle); bool has_liststyle(); void clear_liststyle(); }; %nodefaultctor StyleMap; class StyleMap : public StyleSelector { public: // <Pair>... void add_pair(PairPtr pair); const size_t get_pair_array_size(); const PairPtr get_pair_array_at(unsigned int index); }; %nodefaultctor TimeSpan; class TimeSpan : public TimePrimitive { public: // <begin> const std::string& get_begin(); void set_begin(const std::string& begin); bool has_begin(); void clear_begin(); // <end> const std::string& get_end(); void set_end(const std::string& end); bool has_end(); void clear_end(); }; %nodefaultctor GxTimeSpan; class GxTimeSpan : public TimeSpan { }; %nodefaultctor TimeStamp; class TimeStamp : public TimePrimitive { public: // <when> const std::string& get_when(); void set_when(const std::string& when); bool has_when(); void clear_when(); }; %nodefaultctor GxTimeStamp; class GxTimeStamp : public TimeStamp { }; %nodefaultctor Kml; class Kml : public Element { public: // hint= const std::string& get_hint(); void set_hint(const std::string& hint); bool has_hint(); void clear_hint(); // <NetworkLinkControl> const NetworkLinkControlPtr get_networklinkcontrol(); void set_networklinkcontrol(NetworkLinkControlPtr networklinkcontrol); bool has_networklinkcontrol(); void clear_networklinkcontrol(); // Feature const FeaturePtr get_feature(); void set_feature(FeaturePtr feature); bool has_feature(); void clear_feature(); }; // <atom:author> %nodefaultctor AtomAuthor; class AtomAuthor : public Element { public: // <atom:name> const std::string& get_name(); void set_name(const std::string& name); bool has_name(); void clear_name(); // <atom:uri> const std::string& get_uri(); void set_uri(const std::string& uri); bool has_uri(); void clear_uri(); // <atom:email> const std::string& get_email(); void set_email(const std::string& email); bool has_email(); void clear_email(); }; // <atom:link> %nodefaultctor AtomLink; class AtomLink : public Element { public: // href=, RFC 4287 4.2.7.1, RFC 3987 const std::string& get_href(); bool has_href(); void set_href(const std::string& value); void clear_href(); // rel=, RFC 4287 4.2.7.2, RFC 3987 const std::string& get_rel(); bool has_rel(); void set_rel(const std::string& value); void clear_rel(); // type=, RFC 4287 4.2.7.3, MIME const std::string& get_type(); bool has_type(); void set_type(const std::string& value); void clear_type(); // hreflang=, RFC 4287 4.2.7.4, RFC 3066 const std::string& get_hreflang(); bool has_hreflang(); void set_hreflang(const std::string& value); void clear_hreflang(); // title=, RFC 4287 4.2.7.5 const std::string& get_title(); bool has_title(); void set_title(const std::string& value); void clear_title(); // length=, RFC 4287 4.2.7.6 const int get_length(); bool has_length(); void set_length(int value); void clear_length(); }; // GxTourPrimitive is an abstract base type. This corresponds to // gx:AbstractGxTourPrimitiveType/Group in KML 2.2 gx. %nodefaultctor GxTourPrimitive; class GxTourPrimitive : public Object { }; // <gx:Playlist> %nodefaultctor GxPlaylist; class GxPlaylist : public Object { // GxTourPrimitive... public: void add_gx_tourprimitive(GxTourPrimitivePtr tourprimitive); const size_t get_gx_tourprimitive_array_size(); const GxTourPrimitivePtr get_gx_tourprimitive_array_at(unsigned int index); }; // <gx:Tour> %nodefaultctor GxTour; class GxTour : public Feature { public: // <gx:Playlist> const GxPlaylistPtr get_gx_playlist(); bool has_gx_playlist(); void set_gx_playlist(GxPlaylistPtr gx_playlist); void clear_gx_playlist(); }; // <gx:AnimatedUpdate> %nodefaultctor GxAnimatedUpdate; class GxAnimatedUpdate : public GxTourPrimitive { public: // <gx:duration> double get_gx_duration(); bool has_gx_duration(); void set_gx_duration(double gx_duration); void clear_gx_duration(); // <Update> const UpdatePtr get_update(); bool has_update(); void set_update(UpdatePtr update); void clear_update(); }; // <gx:FlyTo> %nodefaultctor GxFlyTo; class GxFlyTo : public GxTourPrimitive { public: // <gx:duration> double get_gx_duration(); bool has_gx_duration(); void set_gx_duration(double gx_duration); void clear_gx_duration(); // <gx:flyToMode>. int get_gx_flytomode(); bool has_gx_flytomode(); void set_gx_flytomode(int value); void clear_gx_flytomode(); // AbstractView const AbstractViewPtr get_abstractview(); bool has_abstractview(); void set_abstractview(AbstractViewPtr abstractview); void clear_abstractview(); }; // <gx:Wait> %nodefaultctor GxWait; class GxWait : public GxTourPrimitive { public: // <gx:duration> double get_gx_duration(); bool has_gx_duration(); void set_gx_duration(double gx_duration); void clear_gx_duration(); }; // <gx:SoundCue> %nodefaultctor GxSoundCue; class GxSoundCue : public GxTourPrimitive { public: // <href> const std::string& get_href(); bool has_href(); void set_href(const std::string& href); void clear_href(); }; // <gx:TourControl> %nodefaultctor GxTourControl; class GxTourControl : public GxTourPrimitive { public: // <gx:playMode> int get_gx_playmode(); bool has_gx_playmode(); void set_gx_playmode(int value); void clear_gx_playmode(); }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/swig/python/�����������������������������������������������������������������������0000775�0000000�0000000�00000000000�12636032571�0016053�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/swig/python/libkml_boost_intrusive_ptr.i�������������������������������������������0000664�0000000�0000000�00000055252�12636032571�0023713�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file is derived from swig-1.3.35/Lib/python/boost_shared_ptr.i // This file can and should be removed from libkml if and when this file or // equivalent functionality appears in a future version of SWIG. // [The following is from swig-1.3.35/LICENSE] // // SWIG is distributed under the following terms: // // I. // // Copyright (c) 1995-1998 // The University of Utah and the Regents of the University of California // All Rights Reserved // // Permission is hereby granted, without written agreement and without // license or royalty fees, to use, copy, modify, and distribute this // software and its documentation for any purpose, provided that // (1) The above copyright notice and the following two paragraphs // appear in all copies of the source code and (2) redistributions // including binaries reproduces these notices in the supporting // documentation. Substantial modifications to this software may be // copyrighted by their authors and need not follow the licensing terms // described here, provided that the new terms are clearly indicated in // all files where they apply. // // IN NO EVENT SHALL THE AUTHOR, THE UNIVERSITY OF CALIFORNIA, THE // UNIVERSITY OF UTAH OR DISTRIBUTORS OF THIS SOFTWARE BE LIABLE TO ANY // PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL // DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, // EVEN IF THE AUTHORS OR ANY OF THE ABOVE PARTIES HAVE BEEN ADVISED OF // THE POSSIBILITY OF SUCH DAMAGE. // // THE AUTHOR, THE UNIVERSITY OF CALIFORNIA, AND THE UNIVERSITY OF UTAH // SPECIFICALLY DISCLAIM ANY WARRANTIES,INCLUDING, BUT NOT LIMITED TO, // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND // THE AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE MAINTENANCE, // SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. // // // II. // // This software includes contributions that are Copyright (c) 1998-2005 // University of Chicago. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. Redistributions // in binary form must reproduce the above copyright notice, this list of // conditions and the following disclaimer in the documentation and/or // other materials provided with the distribution. Neither the name of // the University of Chicago nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF CHICAGO AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF // CHICAGO OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // // III. // // This software includes contributions that are Copyright (c) 2005-2006 // Arizona Board of Regents (University of Arizona). // All Rights Reserved // // Permission is hereby granted, without written agreement and without // license or royalty fees, to use, copy, modify, and distribute this // software and its documentation for any purpose, provided that // (1) The above copyright notice and the following two paragraphs // appear in all copies of the source code and (2) redistributions // including binaries reproduces these notices in the supporting // documentation. Substantial modifications to this software may be // copyrighted by their authors and need not follow the licensing terms // described here, provided that the new terms are clearly indicated in // all files where they apply. // // THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY OF ARIZONA AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A // PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY OF // ARIZONA OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // [End of swig-1.3.35/LICENSE] %include <libkml_intrusive_ptr.i> %define SWIG_INTRUSIVE_PTR_TYPEMAPS(PROXYCLASS, CONST, TYPE...) %naturalvar TYPE; %naturalvar SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >; // destructor mods %feature("unref") TYPE //"if (debug_shared) { cout << \"deleting use_count: \" << (*smartarg1).use_count() << \" [\" << (boost::get_deleter<SWIG_null_deleter>(*smartarg1) ? std::string(\"CANNOT BE DETERMINED SAFELY\") : ( (*smartarg1).get() ? (*smartarg1)->getValue() : std::string(\"NULL PTR\") )) << \"]\" << endl << flush; }\n" "(void)arg1; delete smartarg1;" %feature("smartptr", noblock=1) TYPE { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > } // plain value %typemap(in) CONST TYPE (void *argp, int res = 0) { int newmem = 0; res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), %convertptr_flags, &newmem); if (!SWIG_IsOK(res)) { %argument_fail(res, "$type", $symname, $argnum); } if (!argp) { %argument_nullref("$type", $symname, $argnum); } else { $1 = *(%reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *)->get()); if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); } } %typemap(out) CONST TYPE { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartresult = new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(new $1_ltype(($1_ltype &)$1)); %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), SWIG_POINTER_OWN)); } %typemap(varin) CONST TYPE { void *argp = 0; int newmem = 0; int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), %convertptr_flags, &newmem); if (!SWIG_IsOK(res)) { %variable_fail(res, "$type", "$name"); } if (!argp) { %argument_nullref("$type", $symname, $argnum); } else { $1 = *(%reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *)->get()); if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); } } %typemap(varout) CONST TYPE { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartresult = new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(new $1_ltype(($1_ltype &)$1)); %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), SWIG_POINTER_OWN)); } // plain pointer // Note: $disown not implemented as it will lead to a memory leak of the intrusive_ptr instance %typemap(in) CONST TYPE * (void *argp = 0, int res = 0, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > tempshared, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartarg = 0) { int newmem = 0; res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), %convertptr_flags, &newmem); if (!SWIG_IsOK(res)) { %argument_fail(res, "$type", $symname, $argnum); } if (newmem & SWIG_CAST_NEW_MEMORY) { tempshared = *%reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); delete %reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); $1 = %const_cast(tempshared.get(), $1_ltype); } else { smartarg = %reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); $1 = %const_cast((smartarg ? smartarg->get() : 0), $1_ltype); } } %typemap(out, fragment="SWIG_null_deleter") CONST TYPE * { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartresult = $1 ? new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner) : 0; %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), $owner | SWIG_POINTER_OWN)); } %typemap(varin) CONST TYPE * { void *argp = 0; int newmem = 0; int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), %convertptr_flags, &newmem); if (!SWIG_IsOK(res)) { %variable_fail(res, "$type", "$name"); } SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > tempshared; SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartarg = 0; if (newmem & SWIG_CAST_NEW_MEMORY) { tempshared = *%reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); delete %reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); $1 = %const_cast(tempshared.get(), $1_ltype); } else { smartarg = %reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); $1 = %const_cast((smartarg ? smartarg->get() : 0), $1_ltype); } } %typemap(varout, fragment="SWIG_null_deleter") CONST TYPE * { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartresult = $1 ? new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_0) : 0; %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), SWIG_POINTER_OWN)); } // plain reference %typemap(in) CONST TYPE & (void *argp = 0, int res = 0, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > tempshared) { int newmem = 0; res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), %convertptr_flags, &newmem); if (!SWIG_IsOK(res)) { %argument_fail(res, "$type", $symname, $argnum); } if (!argp) { %argument_nullref("$type", $symname, $argnum); } if (newmem & SWIG_CAST_NEW_MEMORY) { tempshared = *%reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); delete %reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); $1 = %const_cast(tempshared.get(), $1_ltype); } else { $1 = %const_cast(%reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *)->get(), $1_ltype); } } %typemap(out, fragment="SWIG_null_deleter") CONST TYPE & { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartresult = new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >($1 SWIG_NO_NULL_DELETER_$owner); %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), SWIG_POINTER_OWN)); } %typemap(varin) CONST TYPE & { void *argp = 0; int newmem = 0; int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), %convertptr_flags, &newmem); if (!SWIG_IsOK(res)) { %variable_fail(res, "$type", "$name"); } SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > tempshared; if (!argp) { %argument_nullref("$type", $symname, $argnum); } if (newmem & SWIG_CAST_NEW_MEMORY) { tempshared = *%reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); delete %reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); $1 = *%const_cast(tempshared.get(), $1_ltype); } else { $1 = *%const_cast(%reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *)->get(), $1_ltype); } } %typemap(varout, fragment="SWIG_null_deleter") CONST TYPE & { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartresult = new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(&$1 SWIG_NO_NULL_DELETER_0); %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), SWIG_POINTER_OWN)); } // plain pointer by reference // Note: $disown not implemented as it will lead to a memory leak of the intrusive_ptr instance %typemap(in) CONST TYPE *& (void *argp = 0, int res = 0, $*1_ltype temp = 0, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > tempshared) { int newmem = 0; res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), %convertptr_flags, &newmem); if (!SWIG_IsOK(res)) { %argument_fail(res, "$type", $symname, $argnum); } if (newmem & SWIG_CAST_NEW_MEMORY) { tempshared = *%reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); delete %reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *); temp = %const_cast(tempshared.get(), $*1_ltype); } else { temp = %const_cast(%reinterpret_cast(argp, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *)->get(), $*1_ltype); } $1 = &temp; } %typemap(out, fragment="SWIG_null_deleter") CONST TYPE *& { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartresult = new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(*$1 SWIG_NO_NULL_DELETER_$owner); %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), SWIG_POINTER_OWN)); } %typemap(varin) CONST TYPE *& %{ #error "varin typemap not implemented" %} %typemap(varout) CONST TYPE *& %{ #error "varout typemap not implemented" %} // intrusive_ptr by value %typemap(in) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > (void *argp, int res = 0) { int newmem = 0; res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), %convertptr_flags, &newmem); if (!SWIG_IsOK(res)) { %argument_fail(res, "$type", $symname, $argnum); } if (argp) $1 = *(%reinterpret_cast(argp, $<ype)); if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $<ype); } %typemap(out) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartresult = $1 ? new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >($1) : 0; %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), SWIG_POINTER_OWN)); } %typemap(varin) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > { int newmem = 0; void *argp = 0; int res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), %convertptr_flags, &newmem); if (!SWIG_IsOK(res)) { %variable_fail(res, "$type", "$name"); } $1 = argp ? *(%reinterpret_cast(argp, $<ype)) : SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE >(); if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $<ype); } %typemap(varout) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartresult = $1 ? new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >($1) : 0; %set_varoutput(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), SWIG_POINTER_OWN)); } // intrusive_ptr by reference %typemap(in) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > & (void *argp, int res = 0, $*1_ltype tempshared) { int newmem = 0; res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), %convertptr_flags, &newmem); if (!SWIG_IsOK(res)) { %argument_fail(res, "$type", $symname, $argnum); } if (newmem & SWIG_CAST_NEW_MEMORY) { if (argp) tempshared = *%reinterpret_cast(argp, $ltype); delete %reinterpret_cast(argp, $ltype); $1 = &tempshared; } else { $1 = (argp) ? %reinterpret_cast(argp, $ltype) : &tempshared; } } %typemap(out) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > & { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartresult = *$1 ? new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(*$1) : 0; %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), SWIG_POINTER_OWN)); } %typemap(varin) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > & %{ #error "varin typemap not implemented" %} %typemap(varout) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > & %{ #error "varout typemap not implemented" %} // intrusive_ptr by pointer %typemap(in) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * (void *argp, int res = 0, $*1_ltype tempshared) { int newmem = 0; res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), %convertptr_flags, &newmem); if (!SWIG_IsOK(res)) { %argument_fail(res, "$type", $symname, $argnum); } if (newmem & SWIG_CAST_NEW_MEMORY) { if (argp) tempshared = *%reinterpret_cast(argp, $ltype); delete %reinterpret_cast(argp, $ltype); $1 = &tempshared; } else { $1 = (argp) ? %reinterpret_cast(argp, $ltype) : &tempshared; } } %typemap(out) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartresult = $1 && *$1 ? new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(*$1) : 0; %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), SWIG_POINTER_OWN)); if ($owner) delete $1; } %typemap(varin) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * %{ #error "varin typemap not implemented" %} %typemap(varout) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > * %{ #error "varout typemap not implemented" %} // intrusive_ptr by pointer reference %typemap(in) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& (void *argp, int res = 0, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > tempshared, $*1_ltype temp = 0) { int newmem = 0; res = SWIG_ConvertPtrAndOwn($input, &argp, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), %convertptr_flags, &newmem); if (!SWIG_IsOK(res)) { %argument_fail(res, "$type", $symname, $argnum); } if (argp) tempshared = *%reinterpret_cast(argp, $*ltype); if (newmem & SWIG_CAST_NEW_MEMORY) delete %reinterpret_cast(argp, $*ltype); temp = &tempshared; $1 = &temp; } %typemap(out) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& { SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *smartresult = *$1 && **$1 ? new SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >(**$1) : 0; %set_output(SWIG_NewPointerObj(%as_voidptr(smartresult), $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), SWIG_POINTER_OWN)); } %typemap(varin) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& %{ #error "varin typemap not implemented" %} %typemap(varout) SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& %{ #error "varout typemap not implemented" %} // Typecheck typemaps // Note: SWIG_ConvertPtr with void ** parameter set to 0 instead of using SWIG_ConvertPtrAndOwn, so that the casting // function is not called thereby avoiding a possible smart pointer copy constructor call when casting up the inheritance chain. %typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER,noblock=1) CONST TYPE, CONST TYPE &, CONST TYPE *, CONST TYPE *&, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > &, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *, SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE > *& { int res = SWIG_ConvertPtr($input, 0, $descriptor(SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< TYPE > *), 0); $1 = SWIG_CheckState(res); } // various missing typemaps - If ever used (unlikely) ensure compilation error rather than runtime bug %typemap(in) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{ #error "typemaps for $1_type not available" %} %typemap(out) CONST TYPE[], CONST TYPE[ANY], CONST TYPE (CLASS::*) %{ #error "typemaps for $1_type not available" %} %template() SWIG_INTRUSIVE_PTR_QNAMESPACE::intrusive_ptr< CONST TYPE >; %enddef ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/src/swig/run-java-tests.sh�������������������������������������������������������������0000775�0000000�0000000�00000001266�12636032571�0017761�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# The path to the directory that holds the build shared libraries. BUILT_LIB_DIR=../../build/src/swig/.libs # The path to the built LibKML.jar. LIBKML_JAR_PATH=../../build/src/swig/LibKML.jar #The path to your junit jar file. JUNIT_JAR_PATH=$JUNIT_HOME/junit-4.6.jar echo "=== setting shared library path to built libraries dir: $BUILT_LIB_DIR" export LD_LIBRARY_PATH=$BUILT_LIB_DIR # For Linux. export DYLD_LIBRARY_PATH=$BUILT_LIB_DIR # For Mac OS X. # Cleanup previous test runs. rm -f *.class echo "=== Running KmlBaseTest" javac -classpath .:$LIBKML_JAR_PATH:$JUNIT_JAR_PATH KmlBaseTest.java java -classpath .:$LIBKML_JAR_PATH:$JUNIT_JAR_PATH org.junit.runner.JUnitCore KmlBaseTest ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/testdata/������������������������������������������������������������������������������0000775�0000000�0000000�00000000000�12636032571�0014603�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/testdata/atom/�������������������������������������������������������������������������0000775�0000000�0000000�00000000000�12636032571�0015543�5����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/testdata/atom/atom-all-a.kml�����������������������������������������������������������0000664�0000000�0000000�00000001114�12636032571�0020171�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:a="http://www.w3.org/2005/Atom"> <Document> <a:author> <a:name>Ernest Hemmingway</a:name> <a:uri>http://example.com/ErnestH</a:uri> <a:email>ernesth@example.com</a:email> </a:author> <Placemark> <name>Ernest</name> <visibility>0</visibility> <a:link href="http://example.com/EH" rel="alternate" type="text/plain" hreflang="en-US" title="For Whom" length="142"/> <Region/> <Point/> </Placemark> </Document> </kml> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/testdata/atom/atom-all.kml�������������������������������������������������������������0000664�0000000�0000000�00000001152�12636032571�0017755�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"> <Document> <atom:author> <atom:name>Ernest Hemmingway</atom:name> <atom:uri>http://example.com/ErnestH</atom:uri> <atom:email>ernesth@example.com</atom:email> </atom:author> <Placemark> <name>Ernest</name> <visibility>0</visibility> <atom:link href="http://example.com/EH" rel="alternate" type="text/plain" hreflang="en-US" title="For Whom" length="142"/> <Region/> <Point/> </Placemark> </Document> </kml> ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/testdata/atom/atom-author-ns.kml�������������������������������������������������������0000664�0000000�0000000�00000000614�12636032571�0021127�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="UTF-8"?> <!-- This sample shows the atom elements are known by the namespace not the prefix --> <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:at="http://www.w3.org/2005/Atom"> <Placemark> <name>Ernest</name> <visibility>0</visibility> <at:author> <at:name>Ernest Hemmingway</at:name> </at:author> <Region/> <Point/> </Placemark> </kml> ��������������������������������������������������������������������������������������������������������������������libkml-1.3.0/testdata/atom/atom-author.kml����������������������������������������������������������0000664�0000000�0000000�00000000423�12636032571�0020507�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"> <Placemark> <name>Ernest</name> <visibility>0</visibility> <atom:author> <atom:name>Ernest Hemmingway</atom:name> </atom:author> <Region/> <Point/> </Placemark> </kml> ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/testdata/atom/entry-faulkner.atom������������������������������������������������������0000664�0000000�0000000�00000001552�12636032571�0021376�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!-- From: http://code.google.com/apis/maps/documentation/mapsdata/developers_guide_protocol.html#UpdatingFeatures --> <atom:entry xmlns='http://www.opengis.net/kml/2.2' xmlns:atom='http://www.w3.org/2005/Atom'> <atom:title type='text'>Faulkner's Birthplace</atom:title> <atom:content type='application/vnd.google-earth.kml+xml'> <Placemark> <name>Faulkner's Birthplace</name> <description> <![CDATA[ <p><b>William Faulkner</b> adopted Oxford, Mississippi as his hometown when his family moved to Oxford from nearby New Albany when he was three.</p> ]]> </description> <Point> <coordinates>-89.520753,34.360902,0.0</coordinates> </Point> </Placemark> </atom:content> <atom:author> <atom:name>Tom</atom:name> </atom:author> </atom:entry> ������������������������������������������������������������������������������������������������������������������������������������������������������libkml-1.3.0/testdata/atom/georss-gml.xml�����������������������������������������������������������0000664�0000000�0000000�00000002607�12636032571�0020351�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<?xml version="1.0" encoding="utf-8"?> <!-- From: http://georss.org/gml, "Boat trip / hike" --> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"> <title>Dino's Mt. Washington trip 2005-12-13T18:30:02Z Dino Bravo dbv@example.org http://www.myisp.com/dbv/ 45.256 -110.45 46.46 -109.48 43.84 -109.86 45.8 -109.2 Setting off http://www.myisp.com/dbv/1 2005-08-17T07:02:32Z getting ready to take the mountain! 45.256 -110.45 Crossing Muddy Creek http://www.myisp.com/dbv/2 2005-08-15T07:02:32Z Check out the salamanders here 45.94 -74.377 libkml-1.3.0/testdata/atom/georss-simple-point.xml000066400000000000000000000014671263603257100222150ustar00rootroot00000000000000 Earthquakes International earthquake observation labs 2005-12-13T18:30:02Z Dr. Thaddeus Remor tremor@quakelab.edu urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6 M 3.2, Mona Passage urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a 2005-08-17T07:02:32Z We just had a big one. 45.256 -71.92 libkml-1.3.0/testdata/balloon/000077500000000000000000000000001263603257100162315ustar00rootroot00000000000000libkml-1.3.0/testdata/balloon/all-balloons.kml000066400000000000000000000117361263603257100213250ustar00rootroot00000000000000 named named described named id is $[id]]]> named named to be or not to be that is the question She was called and she had just turned named Balloon Girl 23 -123.115786, 49.283323 default data 1st display name 1st 2nd display name 2nd data name data description -122.000,36.996 1 simple field display name 1 default schemadatadata one 2 -122.000,36.995 1 simple field display name 1 default data and schemadatadata 1st display name 1st 2nd display name 2nd one 2 -122.000,36.994 libkml-1.3.0/testdata/csv/000077500000000000000000000000001263603257100153765ustar00rootroot00000000000000libkml-1.3.0/testdata/csv/README000066400000000000000000000031741263603257100162630ustar00rootroot00000000000000gnis-ak-first-101.csv: This is the first 101 features from AK_Features_20091002.txt available here: http://geonames.usgs.gov/domestic/download_data.htm The |'s from the original have been replaced with ,'s, and these "headings" have been changed: FEATURE_ID -> FEATURE-ID FEATURE_NAME -> NAME FEATURE_CLASS -> STYLE-ID PRIM_LAT_DEC -> LATITUDE PRIM_LONG_DEC -> LONGITUDE This data is in the public domain as described here: http://www.usgs.gov/laws/info_policies.html. "Credit: U.S. Geological Survey" california.recovery.csv: Derived from http://www.recovery.ca.gov/newmap/data/recovery_map_projects.xls http://www.recovery.ca.gov/HTML/About/conditionsofuse.shtml#ownership: "In general, information presented on this web site, unless otherwise indicated, is considered in the public domain. It may be distributed or copied as permitted by law." colleges.csv: This is CSV output from Microsoft Excel on Mac and uses \r line breaks. crnl.csv: This is CSV output from Microsoft Excel on Windows and uses \r\n line breaks. lincoln-park-gc.csv: This is CSV output from Google Spreadsheets and uses \n line breaks. test.csv: The format of test.csv is as follows: score|lat|lon|name|description[|style_url] The data are the first 101 Summit items from the USGS BGN national features file "NationalFile_20081228.zip" from http://geonames.usgs.gov/domestic/download_data.htm as follows: score: ELEVATION lat: SOURCE_LAT_DEC lon: SOURCE_LONG_DEC name: FEATURE_NAME description: ELEVATION + COUNTY_NAME + STATE_ALPHA NOTE: this .csv is deprecated, see kml/convenience/csv_parser.h libkml-1.3.0/testdata/csv/colleges.csv000066400000000000000000014064661263603257100177310ustar00rootroot00000000000000name,address,Website,Type,Size A T Still University of Health Sciences,"800 W Jefferson, Kirksville, Missouri 63501",WWW.ATSU.EDU,"4-year, Private not-for-profit",3480 Abilene Christian University,"1600 Campus Court, Abilene, Texas 79699",www.acu.edu,"4-year, Private not-for-profit",4669 Abraham Baldwin Agricultural College,"2802 Moore Hwy, Tifton, Georgia 31793-2601",www.abac.edu,"4-year, primarily associate's, Public",3600 Academy College,"1101 E. 78th Street, Suite 100, Minneapolis, Minnesota 55420-1554",www.academycollege.edu,"4-year, primarily associate's, Private for-profit",165 Academy for Five Element Acupuncture,"305 SE 2nd Ave, Gainesville, Florida 32601",www.acupuncturist.edu,"4-year, Private not-for-profit",51 Academy of Art University,"79 New Montgomery, San Francisco, California 94105",www.academyart.edu,"4-year, Private for-profit",13181 Academy of Chinese Culture and Health Sciences,"1601 Clay St, Oakland, California 94612",www.acchs.edu,"4-year, Private not-for-profit",92 Academy of Oriental Medicine,"2700 W Anderson Ln Ste 204, Austin, Texas 78757",www.aoma.edu,"4-year, Private for-profit",207 Academy of Vocal Arts,"1920 Spruce St, Philadelphia, Pennsylvania 19103-6685",www.avaopera.org,"4-year, Private not-for-profit",27 Acupuncture and Integrative Medicine College-Berkeley,"2550 Shattuck Ave, Berkeley, California 94704",www.aimc.edu,"4-year, Private not-for-profit",181 Acupuncture and Massage College,"10506 N Kendall Drive, Miami, Florida 33176",WWW.AMCOLLEGE.edu,"4-year, primarily associate's, Private for-profit",131 Adams State College,"208 Edgemont Blvd, Alamosa, Colorado 81102",www.adams.edu,"4-year, Public",2920 Adelphi University,"South Ave, Garden City, New York 11530-0701",WWW.ADELPHI.EDU,"4-year, Private not-for-profit",8177 Adler Graduate School,"1550 East 78th Street, Richfield, Minnesota 55423",www.alfredadler.edu,"4-year, Private not-for-profit",274 Adler School of Professional Psychology,"65 East Wacker Place, Suite 2100, Chicago, Illinois 60601",www.adler.edu,"4-year, Private not-for-profit",639 Adrian College,"110 S Madison St, Adrian, Michigan 49221-2575",www.adrian.edu,"4-year, Private not-for-profit",1469 Agnes Scott College,"141 E. College Ave, Decatur, Georgia 30030-3797",www.agnesscott.edu,"4-year, Private not-for-profit",832 AI Miami International University of Art and Design,"1501 Biscayne Boulevard, Miami, Florida 33132-1418",www.aimiu.aii.edu,"4-year, Private for-profit",3429 AIB College of Business,"2500 Fleur Drive, Des Moines, Iowa 50321-1799",www.aib.edu,"4-year, primarily associate's, Private not-for-profit",985 Air Force Institute of Technology-Graduate School of Engineering & Management,"2950 Hobson Way-Wright Patterson AFB, Dayton, Ohio 45433-7765",www.afit.edu,"4-year, Public",773 Alabama A & M University,"4900 Meridian St, Normal, Alabama 35762",www.aamu.edu/,"4-year, Public",5124 Alabama State University,"915 S Jackson Street, Montgomery, Alabama 36101-0271",www.alasu.edu,"4-year, Public",5695 Alaska Pacific University,"4101 University Dr, Anchorage, Alaska 99508",www.alaskapacific.edu,"4-year, Private not-for-profit",803 Albany College of Pharmacy and Health Sciences,"106 New Scotland Avenue, Albany, New York 12208-3492",www.acp.edu,"4-year, Private not-for-profit",1525 Albany Law School,"80 New Scotland Avenue, Albany, New York 12208",www.albanylaw.edu,"4-year, Private not-for-profit",784 Albany Medical College,"47 New Scotland Ave, Albany, New York 12208-0000",www.amc.edu,"4-year, Private not-for-profit",839 Albany State University,"504 College Dr., Albany, Georgia 31705",www.asurams.edu/,"4-year, Public",4176 Albertus Magnus College,"700 Prospect St, New Haven, Connecticut 06511-1189",www.albertus.edu,"4-year, Private not-for-profit",2129 Albion College,"611 E Porter St, Albion, Michigan 49224",www.albion.edu,"4-year, Private not-for-profit",1860 Albright College,"1621 N. 13th St., Reading, Pennsylvania 19612-5234",www.albright.edu,"4-year, Private not-for-profit",2305 Alcorn State University,"1000 ASU Dr Ste 359, Alcorn State, Mississippi 39096-7500",www.alcorn.edu,"4-year, Public",3252 Alderson Broaddus College,"101 College Hill Drive, Philippi, West Virginia 26416-2035",www.ab.edu/,"4-year, Private not-for-profit",738 Alfred University,"One Saxon Drive, Alfred, New York 14802-1205",www.alfred.edu,"4-year, Private not-for-profit",2427 Alice Lloyd College,"100 Purpose Rd, Pippa Passes, Kentucky 41844",www.alc.edu,"4-year, Private not-for-profit",609 Allegheny College,"520 N Main St, Meadville, Pennsylvania 16335-3902",www.allegheny.edu,"4-year, Private not-for-profit",2125 Allegheny Wesleyan College,"2161 Woodsdale Rd, Salem, Ohio 44460-9598",awc.edu,"4-year, Private not-for-profit",55 Allen College,"1990 Heath St, Waterloo, Iowa 50703-1999",www.allencollege.edu,"4-year, Private not-for-profit",417 Allen University,"1530 Harden Street, Columbia, South Carolina 29204",www.allenuniversity.edu,"4-year, Private not-for-profit",725 Alliant International University,"One Beach Street, Suite 100, San Francisco, California 94133-1221",www.alliant.edu,"4-year, Private not-for-profit", Alliant International University,"2500 Michelson Dr-Ste 250, Irvine, California 92612-1221",www.alliant.edu,"4-year, Private not-for-profit", Alliant International University,"2595 Capital Oaks Drive, Suite 200, Sacramento, California 95833",www.alliant.edu,"4-year, Private not-for-profit", Alliant International University,"10455 Pomerado Road, San Diego, California 92131-1799",www.alliant.edu,"4-year, Private not-for-profit",4149 Alliant International University,"5130 E Clinton Way, Fresno, California 93727-1360",www.alliant.edu,"4-year, Private not-for-profit", Alliant International University,"1000 S Fremont Ave, Unit 5, Alhambra, California 91803-1360",www.alliant.edu,"4-year, Private not-for-profit", Alma College,"614 W Superior, Alma, Michigan 48801-1599",www.alma.edu,"4-year, Private not-for-profit",1382 Alvernia College,"400 Saint Bernardine St, Reading, Pennsylvania 19607-1799",www.alvernia.edu,"4-year, Private not-for-profit",2809 Alverno College,"3400 S 43rd St, Milwaukee, Wisconsin 53234-3922",www.alverno.edu,"4-year, Private not-for-profit",2782 Amberton University,"1700 Eastgate Dr, Garland, Texas 75041-5595",www.amberton.edu,"4-year, Private not-for-profit",1562 American Academy of Acupuncture and Oriental Medicine,"1925 W County Rd B-2, Roseville, Minnesota 55113",www.aaaom.edu,"4-year, Private for-profit",111 American Academy of Art,"332 S Michigan Ave, Chicago, Illinois 60604-4302",www.aaart.edu,"4-year, Private for-profit",391 American Baptist College,"1800 Baptist World Ctr Dr, Nashville, Tennessee 37207",www.abcnash.edu,"4-year, Private not-for-profit",106 American Baptist Seminary of the West,"2606 Dwight Way, Berkeley, California 94704-3029",www.absw.edu,"4-year, Private not-for-profit",65 American College,"270 Bryn Mawr Ave, Bryn Mawr, Pennsylvania 19010-2196",www.theamericancollege.edu,"4-year, Private not-for-profit",386 American College of Acupuncture and Oriental Med,"9100 Park West Drive, Houston, Texas 70063-4104",www.acaom.edu,"4-year, Private for-profit",127 American College of Traditional Chinese Medicine,"455 Arkansas St, San Francisco, California 94107",www.actcm.edu,"4-year, Private not-for-profit",322 American Conservatory Theater,"30 Grant Ave, San Francisco, California 94108-5834",www.act-sf.org,"4-year, Private not-for-profit",44 American Film Institute Conservatory,"2021 N Western Ave, Los Angeles, California 90027-1625",www.AFI.com,"4-year, Private not-for-profit",357 American Indian College of the Assemblies of God Inc,"10020 N 15th Ave, Phoenix, Arizona 85021",www.aicag.edu,"4-year, Private not-for-profit",99 American Intercontinental University,"2250 North Commerce Pkwy, Weston, Florida 33326",www.aiufl.edu,"4-year, Private for-profit",887 American Intercontinental University,"9999 Richmond Avenue, Houston, Texas 77042",www.houston.aiuniv.edu,"4-year, Private for-profit",474 American Intercontinental University,"12655 West Jefferson Blvd, Los Angeles, California 90066",la.aiuniv.edu/,"4-year, Private for-profit",229 American InterContinental University,"3330 Peachtree Rd., NE, Atlanta, Georgia 30326-1001",www.aiuniv.edu,"4-year, Private for-profit",967 American Intercontinental University Online,"5550 Prairie Stone Pky-Ste 400, Hoffman Estates, Illinois 60192",www.aiuonline.edu,"4-year, Private for-profit",22798 American Intercontinental University-Dunwoody Campus,"6600 Peachtree Dunwoody Road, 500 Embassy Row, Atlanta, Georgia 30328",www.aiudunwoody.com,"4-year, Private for-profit",980 American International College,"1000 State Street, Springfield, Massachusetts 01109",www.aic.edu,"4-year, Private not-for-profit",3112 American Jewish University,"15600 Mulholland Dr, Los Angeles, California 90077-1519",www.ajula.edu,"4-year, Private not-for-profit",209 American Musical and Dramatic Academy,"2109 Broadway, New York, New York 10023",www.amda.edu,"4-year, primarily associate's, Private not-for-profit",896 American Public University System,"111 W Congress St, Charles Town, West Virginia 25414",www.apus.edu,"4-year, Private for-profit",21729 American Samoa Community College,"Pago Pago, American Samoa 96799-2609",www.amsamoa.edu,"4-year, primarily associate's, Public",1806 American University,"4400 Massachusetts Ave NW, Washington, District of Columbia 20016-8001",WWW.AMERICAN.EDU,"4-year, Private not-for-profit",11684 American University of Health Sciences,"3501 Atlantic Ave., Long Beach, California 90807",auhs.edu,"4-year, primarily associate's, Private for-profit",33 American University of Puerto Rico,"Carretera Estatal #2 Km.48.1, Manati, Puerto Rico 00674-1082",www.aupr.edu,"4-year, Private not-for-profit",1528 American University of Puerto Rico,"Carr. #2, Km.14.4, Bo. Hato Tejas, Bayamon, Puerto Rico 00960-2037",www.aupr.edu,"4-year, Private not-for-profit",1747 Amherst College,"Boltwood Avenue, Amherst, Massachusetts 01002-5000",www.amherst.edu,"4-year, Private not-for-profit",1697 Amridge University,"1200 Taylor Rd, Montgomery, Alabama 36117-3553",www.amridgeuniversity.edu,"4-year, Private not-for-profit",705 Anderson University,"316 Boulevard, Anderson, South Carolina 29621",www.andersonuniversity.edu,"4-year, Private not-for-profit",2064 Anderson University,"1100 E 5th St, Anderson, Indiana 46012-3495",www.anderson.edu,"4-year, Private not-for-profit",2737 Andover Newton Theological School,"210 Herrick Rd, Newton Centre, Massachusetts 02459-2243",www.ants.edu,"4-year, Private not-for-profit",320 Andrews University,"Berrien Springs, Michigan 49104",www.andrews.edu,"4-year, Private not-for-profit",3419 Angelo State University,"2601 W Avenue N, San Angelo, Texas 76909",www.angelo.edu,"4-year, Public",6155 Angley College,"1700 S. Woodland Blvd., Deland, Florida 32720",www.angley.edu,"4-year, primarily associate's, Private for-profit",206 Anna Maria College,"50 Sunset Lane, Paxton, Massachusetts 01612-1198",www.annamaria.edu,"4-year, Private not-for-profit",1333 Anthem College-Phoenix,"1515 E Indian School Road, Phoenix, Arizona 85014",www.anthem.edu,"4-year, primarily associate's, Private for-profit",2280 Antioch University McGregor,"900 Dayton St, Yellow Springs, Ohio 45387",www.mcgregor.edu,"4-year, Private not-for-profit",630 Antioch University New England,"40 Avon St, Keene, New Hampshire 03431",www.antiochne.edu,"4-year, Private not-for-profit",842 Antioch University PhD Program in Leadership and Change,"150 E South College St, Yellow Springs, Ohio 45387",www.phd.antioch.edu,"4-year, Private not-for-profit",133 Antioch University Seattle,"2326 6th Ave, Seattle, Washington 98121",www.antiochseattle.edu,"4-year, Private not-for-profit",854 Antioch University-Los Angeles Branch,"400 Corporate Pointe, Culver City, California 90230-7615",www.antiochla.edu,"4-year, Private not-for-profit",697 Antioch University-Santa Barbara,"801 Garden St, Suite 101, Santa Barbara, California 93101-1581",www.antiochsb.edu,"4-year, Private not-for-profit",369 Apex School of Theology,"2945 South Miami Blvd Ste 114, Durham, North Carolina 27703",www.apexsot.edu,"4-year, primarily associate's, Private not-for-profit",171 Apostolic Bible Institute Inc,"6944 Hudson Blvd N, Saint Paul, Minnesota 55128-7021",www.apostolic.org,"4-year, Private not-for-profit",64 Appalachian Bible College,"161 College Drive, Mount Hope, West Virginia 25880",www.abc.edu,"4-year, Private not-for-profit",286 Appalachian College of Pharmacy,"1060 Dragon Road, Oakwood, Virginia 24631",www.uacp.org,"4-year, Private not-for-profit",191 Appalachian School of Law,"1169 Edgewater Drive, Grundy, Virginia 24614-2825",www.asl.edu,"4-year, Private not-for-profit",350 Appalachian State University,"Boone, North Carolina 28608",www.appstate.edu/,"4-year, Public",16610 Aquinas College,"1607 Robinson Rd SE, Grand Rapids, Michigan 49506-1799",www.aquinas.edu,"4-year, Private not-for-profit",2159 Aquinas College,"4210 Harding Pike, Nashville, Tennessee 37205",www.aquinascollege.edu,"4-year, primarily associate's, Private not-for-profit",847 Aquinas Institute of Theology,"23 S. Spring Ave., Saint Louis, Missouri 63108",www.ai.edu,"4-year, Private not-for-profit",267 Arcadia University,"450 S Easton Rd, Glenside, Pennsylvania 19038-3295",www.arcadia.edu,"4-year, Private not-for-profit",3868 Argosy University-Atlanta,"980 Hammond Drive, Suite 100, Atlanta, Georgia 30328",www.argosy.edu/atlanta,"4-year, Private for-profit",2481 Argosy University-Chicago,"225 N. Michigan Ave, Ste 1300, Chicago, Illinois 60601",www.argosy.edu/chicago,"4-year, Private for-profit",4347 Argosy University-Dallas,"8080 Park Lane, Suite 400A, Dallas, Texas 75231",www.argosy.edu/dallas/,"4-year, Private for-profit",470 Argosy University-Denver,"1200 Lincoln St., Denver, Colorado 80203",www.argosy.edu/denver/,"4-year, primarily associate's, Private for-profit",260 Argosy University-Hawaii,"400 ASB Tower, 1001 Bishop Street, Honolulu, Hawaii 96813",www.argosy.edu/hawaii/,"4-year, Private for-profit",457 Argosy University-Inland Empire,"636 East Brier Dr, Suite 120, San Bernardino, California 92408",www.argosy.edu/inlandempire,"4-year, Private for-profit",434 Argosy University-Los Angeles,"2950 31st Street, Santa Monica, California 90405",www.argosy.edu/losangeles,"4-year, primarily associate's, Private for-profit",307 Argosy University-Nashville,"100 Centerview Dr, Suite 225, Nashville, Tennessee 37214",www.argosy.edu/nashville/,"4-year, Private for-profit",442 Argosy University-Orange County,"3501 West Sunflower Avenue, Suite 110, Santa Ana, California 92704",www.argosy.edu/orangecounty,"4-year, Private for-profit",881 Argosy University-Phoenix,"2233 West Dunlap Avenue, Phoenix, Arizona 85021",www.argosy.edu/phoenix/,"4-year, Private for-profit",773 Argosy University-Salt Lake City,"121 Election Rd Ste 300, Draper, Utah 84020",www.argosy.edu/locations/salt-lake-city,"4-year, Private for-profit",64 Argosy University-San Diego,"1615 Murray Canyon Road, Suite 100, San Diego, California 92108",www.argosy.edu/sandiego,"4-year, primarily associate's, Private for-profit",175 Argosy University-San Francisco Bay Area,"1005 Atlantic Avenue, Alameda, California 94501",www.argosy.edu/sanfrancisco,"4-year, Private for-profit",768 Argosy University-Sarasota,"5250 17th Street, Sarasota, Florida 34235",www.argosy.edu/sarasota/,"4-year, Private for-profit",1783 Argosy University-Schaumburg,"999 North Plaza Dr., Suite 111, Schaumburg, Illinois 60173-5403",www.argosy.edu/schaumburg,"4-year, Private for-profit",730 Argosy University-Seattle,"2601-A Elliott Avenue, Seattle, Washington 98121",www.argosy.edu/seattle,"4-year, Private for-profit",448 Argosy University-Tampa,"4401 North Himes Ave, Suite 150, Tampa, Florida 33614",www.argosy.edu/tampa,"4-year, Private for-profit",771 Argosy University-Twin Cities,"1515 Central Parkway, Eagan, Minnesota 55121",www.argosy.edu/twincities/,"4-year, primarily associate's, Private for-profit",2046 Argosy University-Washington D.C.,"1550 Wilson Boulevard, Suite 600, Arlington, Virginia 22209",www.argosy.edu/washingtondc,"4-year, Private for-profit",1137 Arizona School of Acupuncture and Oriental Medicine,"4646 E Fort Lowell Rd Ste 104, Tucson, Arizona 85712",www.asaom.edu,"4-year, Private for-profit",50 Arizona State University,"Tempe, Arizona 85287",www.asu.edu,"4-year, Public",67082 Arkansas Baptist College,"1621 Dr. Marting Luther King Drive, Little Rock, Arkansas 72202-6099",www.arkansasbaptist.edu,"4-year, primarily associate's, Private not-for-profit",626 Arkansas State University-Main Campus,"2105 E. Aggie Road, State University, Arkansas 72467",www.astate.edu,"4-year, Public",11490 Arkansas Tech University,"Administration Bldg 200; 1509 N Boulder Ave, Russellville, Arkansas 72801-2222",www.atu.edu,"4-year, Public",7492 Arlington Baptist College,"3001 W Division, Arlington, Texas 76012-3425",www.abconline.edu,"4-year, Private not-for-profit",140 Armstrong Atlantic State University,"11935 Abercorn St, Savannah, Georgia 31419-1997",www.armstrong.edu,"4-year, Public",7067 Art Academy of Cincinnati,"1212 Jackson Street, Cincinnati, Ohio 45202-1706",www.artacademy.edu,"4-year, Private not-for-profit",167 Art Center College of Design,"1700 Lida St, Pasadena, California 91103",www.artcenter.edu,"4-year, Private not-for-profit",1632 Asbury College,"1 Macklem Dr, Wilmore, Kentucky 40390-1198",www.asbury.edu,"4-year, Private not-for-profit",1550 Asbury Theological Seminary,"204 N Lexington Ave, Wilmore, Kentucky 40390-1199",www.asburyseminary.edu,"4-year, Private not-for-profit",1602 Ashford University,"400 N Bluff Blvd, Clinton, Iowa 52733-2967",www.ashford.edu,"4-year, Private for-profit",25605 Ashland University,"401 College Ave, Ashland, Ohio 44805",www.ashland.edu,"4-year, Private not-for-profit",6200 Assemblies of God Theological Seminary,"1435 N Glenstone Ave, Springfield, Missouri 65802-2131",www.agts.edu,"4-year, Private not-for-profit",470 Associated Mennonite Biblical Seminary,"3003 Benham Ave, Elkhart, Indiana 46517-1999",www.ambs.edu,"4-year, Private not-for-profit",146 Assumption College,"500 Salisbury St, Worcester, Massachusetts 01609-1296",www.assumption.edu,"4-year, Private not-for-profit",2876 Atenas College,"Paseo de La Atenas #101, Manati, Puerto Rico 00674",,"4-year, primarily associate's, Private not-for-profit",1522 Athenaeum of Ohio,"6616 Beechmont Ave, Cincinnati, Ohio 45230-2091",www.athenaeum.edu,"4-year, Private not-for-profit",253 Athens State University,"300 N Beaty St, Athens, Alabama 35611",www.athens.edu,"4-year, Public",3330 Atlanta Christian College,"2605 Ben Hill Rd, East Point, Georgia 30344",www.acc.edu,"4-year, Private not-for-profit",456 Atlantic College,"Colton St. # 9, Guaynabo, Puerto Rico 00970",www.atlanticcollege-pr.com,"4-year, Private not-for-profit",1186 Atlantic Institute of Oriental Medicine,"100 E Broward Blvd, Suite 100, Fort Lauderdale, Florida 33301-3510",www.atom.edu,"4-year, Private not-for-profit",101 Atlantic Union College,"338 Main St, South Lancaster, Massachusetts 01561-1000",www.auc.edu,"4-year, Private not-for-profit",691 Auburn University Main Campus,"Auburn, Alabama, Auburn University, Alabama 36849",www.auburn.edu,"4-year, Public",24530 Auburn University-Montgomery,"7440 East Drive, Montgomery, Alabama 36117-3596",www.aum.edu,"4-year, Public",5296 Augsburg College,"2211 Riverside Ave, Minneapolis, Minnesota 55454",www.augsburg.edu,"4-year, Private not-for-profit",3898 Augusta Area Dietetic Internship-University Hospital,"1350 Walton Way, Augusta, Georgia 30901-2629",www.universityhealth.org,"4-year, Private not-for-profit",12 Augusta State University,"2500 Walton Way, Augusta, Georgia 30904-2200",www.aug.edu,"4-year, Public",6689 Augustana College,"2001 S Summit Ave, Sioux Falls, South Dakota 57197-0001",www.augie.edu,"4-year, Private not-for-profit",1754 Augustana College,"639 38th St, Rock Island, Illinois 61201-2296",www.augustana.edu,"4-year, Private not-for-profit",2547 Aurora University,"347 S Gladstone Ave, Aurora, Illinois 60506-4892",www.aurora.edu,"4-year, Private not-for-profit",4291 Austin College,"900 N Grand Ave, Sherman, Texas 75090-4400",www.austincollege.edu,"4-year, Private not-for-profit",1298 Austin Graduate School of Theology,"7640 Guadalupe St, Austin, Texas 78752",www.austingrad.edu,"4-year, Private not-for-profit",59 Austin Peay State University,"601 College St, Clarksville, Tennessee 37044",www.apsu.edu,"4-year, Public",9401 Austin Presbyterian Theological Seminary,"100 E 27th St, Austin, Texas 78705-5797",www.austinseminary.edu,"4-year, Private not-for-profit",168 Ave Maria School of Law,"3475 Plymouth Rd, Ann Arbor, Michigan 48105-2550",www.avemarialaw.edu,"4-year, Private not-for-profit",302 Ave Maria University,"5050 Ave Maria Blvd, Ave Maria, Florida 34142",www.avemaria.edu,"4-year, Private not-for-profit",672 Averett University,"420 W Main St, Danville, Virginia 24541",www.averett.edu,"4-year, Private not-for-profit",842 Averett University-Non-traditional programs,"420 W Main St, Danville, Virginia 24541",www.averett.edu/working-professionals/index.html,"4-year, Private not-for-profit",1664 Avila University,"11901 Wornall Rd, Kansas City, Missouri 64145-1698",www.Avila.edu,"4-year, Private not-for-profit",1939 Azusa Pacific University,"901 E Alosta, Azusa, California 91702-7000",www.apu.edu,"4-year, Private not-for-profit",8548 Babson College,"Babson Park, Wellesley, Massachusetts 02457-0310",www.babson.edu,"4-year, Private not-for-profit",3439 Bacone College,"2299 Old Bacone Rd, Muskogee, Oklahoma 74403-1597",www.bacone.edu,"4-year, primarily associate's, Private not-for-profit",958 Bais Binyomin Academy,"132 Prospect St, Stamford, Connecticut 06901",,"4-year, Private not-for-profit",63 Bais Medrash Elyon,"73 Main St, Monsey, New York 10952",,"4-year, Private not-for-profit",26 Bais Medrash Toras Chesed,"901 Monmouth Ave, Lakewood, New Jersey 08701",,"4-year, Private not-for-profit",93 Baker College Center for Graduate Studies,"1116 W Bristol Rd, Flint, Michigan 48507",www.baker.edu,"4-year, Private not-for-profit",6008 Baker College Corporate Services,"1195 Centre Rd., Auburn Hills, Michigan 48326",www.corporate.baker.edu,"4-year, primarily associate's, Private not-for-profit",440 Baker College of Allen Park,"4500 Enterprise Dr, Allen Park, Michigan 48101",www.baker.edu,"4-year, primarily associate's, Private not-for-profit",2551 Baker College of Auburn Hills,"1500 University Dr, Auburn Hills, Michigan 48326-2642",www.baker.edu,"4-year, primarily associate's, Private not-for-profit",3824 Baker College of Cadillac,"9600 E 13th St, Cadillac, Michigan 49601-9600",www.baker.edu,"4-year, primarily associate's, Private not-for-profit",1952 Baker College of Clinton Township,"34950 Little Mack Ave, Clinton Township, Michigan 48035",www.baker.edu,"4-year, primarily associate's, Private not-for-profit",5637 Baker College of Flint,"1050 West Bristol Road, Flint, Michigan 48507-9987",www.baker.edu,"4-year, primarily associate's, Private not-for-profit",5820 Baker College of Jackson,"2800 Springport Rd, Jackson, Michigan 49202-1290",www.baker.edu,"4-year, primarily associate's, Private not-for-profit",1830 Baker College of Muskegon,"1903 Marquette Ave, Muskegon, Michigan 49442",www.Baker.edu,"4-year, primarily associate's, Private not-for-profit",5232 Baker College of Owosso,"1020 S Washington St, Owosso, Michigan 48867",www.baker.edu,"4-year, primarily associate's, Private not-for-profit",2926 Baker College of Port Huron,"3403 Lapeer Road, Port Huron, Michigan 48060",www.baker.edu/,"4-year, primarily associate's, Private not-for-profit",1716 Baker University,"618 Eighth Street, Baldwin City, Kansas 66006-0065",www.bakeru.edu,"4-year, Private not-for-profit",4112 Baker University School of Nursing,"1500 SW 10th Street, Topeka, Kansas 66604-1353",www.bakeru.edu,"4-year, Private not-for-profit", Baker University School of Professional and Graduate Studies and Graduate School of Education,"8001 College Blvd, Suite 100, Overland Park, Kansas 66210-1353",www.bakeru.edu,"4-year, Private not-for-profit", Baldwin-Wallace College,"275 Eastland Rd, Berea, Ohio 44017-2088",www.bw.edu,"4-year, Private not-for-profit",4374 Ball State University,"2000 University Ave, Muncie, Indiana 47306",www.bsu.edu,"4-year, Public",20243 Baltimore Hebrew University Inc,"5800 Park Heights Avenue, Baltimore, Maryland 21215-3932",www.bhu.edu,"4-year, Private not-for-profit",104 Baltimore International College,"17 Commerce Street, Commerce Exchange, Baltimore, Maryland 21202-3230",www.bic.edu,"4-year, primarily associate's, Private not-for-profit",499 Bangor Theological Seminary,"Two College Circle, Bangor, Maine 04402-0411",www.BTS.edu,"4-year, Private not-for-profit",132 Bank Street College of Education,"610 W 112 St, New York, New York 10025",www.bankstreet.edu,"4-year, Private not-for-profit",1126 Baptist Bible College and Graduate School,"628 E Kearney, Springfield, Missouri 65803-3498",www.gobbc.edu,"4-year, Private not-for-profit",571 Baptist Bible College and Seminary,"538 Venard Rd, Clarks Summit, Pennsylvania 18411",www.bbc.edu,"4-year, Private not-for-profit",910 Baptist Memorial College of Health Sciences,"1003 Monroe Ave, Memphis, Tennessee 38104",www.bchs.edu,"4-year, Private not-for-profit",929 Baptist Missionary Association Theological Seminary,"1530 E Pine St, Jacksonville, Texas 75766-5407",www.bmats.edu,"4-year, Private not-for-profit",140 Baptist Theological Seminary at Richmond,"3400 Brook Road, Richmond, Virginia 23227-4536",www.btsr.edu,"4-year, Private not-for-profit",120 Baptist University of the Americas,"8019 Pan Am Expwy, San Antonio, Texas 78224-1336",www.bua.edu,"4-year, Private not-for-profit",175 Barclay College,"607 N Kingman, Haviland, Kansas 67059-0288",www.barclaycollege.edu,"4-year, Private not-for-profit",137 Bard College,"Annandale-On-Hudson, New York 12504-5000",www.bard.edu,"4-year, Private not-for-profit",2158 Bard College at Simon's Rock,"84 Alford Rd, Great Barrington, Massachusetts 01230-9702",www.simons-rock.edu,"4-year, primarily associate's, Private not-for-profit",436 Barnard College,"3009 Broadway, New York, New York 10027-6598",www.barnard.edu,"4-year, Private not-for-profit",2359 Barnes-Jewish College Goldfarb School of Nursing,"4483 Duncan Avenue, Saint Louis, Missouri 63110",www.barnesjewishcollege.edu,"4-year, Private not-for-profit",673 Barry University,"11300 NE 2nd Ave, Miami, Florida 33161-6695",www.barry.edu,"4-year, Private not-for-profit",8581 Barton College,"200 ACC Drive NE, Wilson, North Carolina 27893-7000",WWW.BARTON.EDU,"4-year, Private not-for-profit",1155 Bastyr University,"14500 Juanita Drive NE, Kenmore, Washington 98028",www.bastyr.edu,"4-year, Private not-for-profit",988 Bates College,"2 Andrews Road, Lewiston, Maine 04240",www.bates.edu/,"4-year, Private not-for-profit",1776 Bauder College,"384 Northyards Blvd., Suite 190, Atlanta, Georgia 30313",www.bauder.edu,"4-year, primarily associate's, Private for-profit",1472 Bay Path College,"588 Longmeadow Street, Longmeadow, Massachusetts 01106",www.baypath.edu,"4-year, Private not-for-profit",1784 Bay State College,"122 Commonwealth Avenue, Boston, Massachusetts 02116",www.baystate.edu,"4-year, primarily associate's, Private for-profit",753 Bayamon Central University,"Avenida Zaya Verde La Milagrosa Barrio Hato Tejas, Bayamon, Puerto Rico 00959",www.ucb.edu.pr,"4-year, Private not-for-profit",2382 Baylor College of Medicine,"One Baylor Plaza BCM 365, Houston, Texas 77030-3498",www.bcm.edu,"4-year, Private not-for-profit",1385 Baylor University,"500 Speight Ave., Waco, Texas 76798",www.baylor.edu,"4-year, Private not-for-profit",14541 Beacon College,"105 E Main St, Leesburg, Florida 34748",www.beaconcollege.edu,"4-year, Private not-for-profit",122 Beacon University,"6003 Veterans Parkway, Columbus, Georgia 31909-4663",beacon.edu,"4-year, Private not-for-profit",133 Becker College,"61 Sever St, Worcester, Massachusetts 01609-2165",www.becker.edu,"4-year, Private not-for-profit",1752 Beckfield College,"16 Spiral Drive, Florence, Kentucky 41042",www.beckfield.edu,"4-year, primarily associate's, Private for-profit",671 Beis Medrash Heichal Dovid,"257 Beach 17th St, Far Rockaway, New York 11691",,"4-year, Private not-for-profit",124 Belhaven College,"1500 Peachtree St, Jackson, Mississippi 39202",www.belhaven.edu,"4-year, Private not-for-profit",2619 Bellarmine University,"2001 Newburg Rd, Louisville, Kentucky 40205-0671",www.bellarmine.edu,"4-year, Private not-for-profit",3040 Bellevue College,"3000 Landerholm Cir SE, Bellevue, Washington 98007-6484",bellevuecollege.edu/,"4-year, primarily associate's, Public",13035 Bellevue University,"1000 Galvin Rd S, Bellevue, Nebraska 68005-3098",BELLEVUE.EDU,"4-year, Private not-for-profit",8278 Bellin College of Nursing,"725 S Webster Ave, Green Bay, Wisconsin 54305-3400",www.bcon.edu,"4-year, Private not-for-profit",294 Belmont Abbey College,"100 Belmont-Mt Holly Road, Belmont, North Carolina 28012-1802",www.belmontabbeycollege.edu,"4-year, Private not-for-profit",1497 Belmont University,"1900 Belmont Blvd, Nashville, Tennessee 37212-3757",www.belmont.edu,"4-year, Private not-for-profit",4991 Beloit College,"700 College St, Beloit, Wisconsin 53511-5595",www.beloit.edu,"4-year, Private not-for-profit",1388 Bemidji State University,"1500 Birchmont Dr, Bemidji, Minnesota 56601",www.bemidjistate.edu,"4-year, Public",4816 Benedict College,"1600 Harden Street, Columbia, South Carolina 29204-1086",www.benedict.edu,"4-year, Private not-for-profit",2883 Benedictine College,"1020 N 2nd St, Atchison, Kansas 66002-1499",www.benedictine.edu,"4-year, Private not-for-profit",2012 Benedictine University,"5700 College Rd, Lisle, Illinois 60532-0900",www.ben.edu,"4-year, Private not-for-profit",5850 Benjamin Franklin Institute of Technology,"41 Berkeley St, Boston, Massachusetts 02116",www.bfit.edu/,"4-year, primarily associate's, Private not-for-profit",536 Bennett College for Women,"900 E Washington St, Greensboro, North Carolina 27401-3239",www.bennett.edu,"4-year, Private not-for-profit",689 Bennington College,"One College Drive, Bennington, Vermont 05201-6003",www.bennington.edu,"4-year, Private not-for-profit",759 Bentley University,"175 Forest St, Waltham, Massachusetts 02452-4705",www.bentley.edu,"4-year, Private not-for-profit",5693 Berea College,"101 Chestnut Street, Berea, Kentucky 40404-2182",www.berea.edu,"4-year, Private not-for-profit",1549 Berkeley College,"3 East 43 Street, New York, New York 10017",www.BerkeleyCollege.edu,"4-year, Private for-profit",3802 Berkeley College,"44 Rifle Camp Rd, West Paterson, New Jersey 07424",www.BerkeleyCollege.edu,"4-year, Private for-profit",3450 Berkeley College - Westchester Campus,"99 Church Street, White Plains, New York 10601",www.BerkeleyCollege.edu,"4-year, Private for-profit", Berklee College of Music,"1140 Boylston St, Boston, Massachusetts 02215",www.berklee.edu,"4-year, Private not-for-profit",4054 Berry College,"2277 Martha Berry Hwy NW, Mount Berry, Georgia 30149",www.berry.edu,"4-year, Private not-for-profit",1795 Beth Hamedrash Shaarei Yosher Institute,"4102 16th Ave, Brooklyn, New York 11204",,"4-year, Private not-for-profit",62 Beth Hatalmud Rabbinical College,"2127 82nd St, Brooklyn, New York 11214",,"4-year, Private not-for-profit",66 Beth Medrash Govoha,"617 6th St, Lakewood, New Jersey 08701-2754",,"4-year, Private not-for-profit",5639 Bethany College,"Bethany, West Virginia 26032",www.bethanywv.edu,"4-year, Private not-for-profit",825 Bethany College,"335 e swensson st, Lindsborg, Kansas 67456-1897",www.bethanylb.edu,"4-year, Private not-for-profit",587 Bethany Lutheran College,"700 Luther Dr, Mankato, Minnesota 56001",www.blc.edu,"4-year, Private not-for-profit",615 Bethany Theological Seminary,"615 National Rd W, Richmond, Indiana 47374-4019",WWW.BETHANYSEMINARY.EDU,"4-year, Private not-for-profit",55 Bethany University,"800 Bethany Dr, Scotts Valley, California 95066-2898",www.bethany.edu,"4-year, Private not-for-profit",516 Bethel College,"325 Cherry Ave, McKenzie, Tennessee 38201",www.bethel-college.edu,"4-year, Private not-for-profit",2408 Bethel College,"300 E 27th St, North Newton, Kansas 67117-0531",www.bethelks.edu,"4-year, Private not-for-profit",500 Bethel College,"1001 W McKinley Ave, Mishawaka, Indiana 46545",www.bethelcollege.edu,"4-year, Private not-for-profit",2075 Bethel Seminary of the East,"2325 Maryland Road, Suite 225, Willow Grove, Pennsylvania 19090",www.bethel.edu,"4-year, Private not-for-profit",115 Bethel Seminary San Diego,"6116 Arosa St, San Diego, California 92115",www.bethel.edu,"4-year, Private not-for-profit",213 Bethel Seminary-St. Paul,"3949 Bethel Dr, Saint Paul, Minnesota 55112",www.bethel.edu,"4-year, Private not-for-profit",776 Bethel University,"3900 Bethel Dr, Saint Paul, Minnesota 55112-6902",www.bethel.edu,"4-year, Private not-for-profit",4332 Bethesda Christian University,"730 N. Euclid St, Anaheim, California 92801",www.bcu.edu,"4-year, Private not-for-profit",299 Bethune-Cookman University,"640 Dr Mary McLeod Bethune Blvd, Daytona Beach, Florida 32114-3099",www.cookman.edu,"4-year, Private not-for-profit",3633 Beulah Heights University,"892 Berne St SE, Atlanta, Georgia 30316",www.beulah.org,"4-year, Private not-for-profit",825 Bexley Hall Episcopal Seminary,"583 Sheridan Avenue, Columbus, Ohio 43209-2325",www.bexley.edu,"4-year, Private not-for-profit",18 Biblical Theological Seminary,"200 N Main St, Hatfield, Pennsylvania 19440",www.biblical.edu,"4-year, Private not-for-profit",218 Biola University,"13800 Biola Ave, La Mirada, California 90639-0001",www.biola.edu,"4-year, Private not-for-profit",5893 Birmingham Southern College,"900 Arkadelphia Road, Birmingham, Alabama 35254",www.bsc.edu,"4-year, Private not-for-profit",1458 Birthingway College of Midwifery,"12113 SE Foster Rd, Portland, Oregon 97266",www.birthingway.edu,"4-year, Private not-for-profit",83 Bismarck State College,"1500 Edwards Ave, Bismarck, North Dakota 58506-5587",www.bismarckstate.edu,"4-year, primarily associate's, Public",3787 Black Hills State University,"1200 University St, Spearfish, South Dakota 57799-9500",www.bhsu.edu,"4-year, Public",4016 Blackburn College,"700 College Ave, Carlinville, Illinois 62626",www.blackburn.edu,"4-year, Private not-for-profit",636 Blessed John XXIII National Seminary,"558 South Ave, Weston, Massachusetts 02493-2699",www.blessedjohnxxiii.edu,"4-year, Private not-for-profit",60 Blessing Rieman College of Nursing,"Broadway at 11th Street, Quincy, Illinois 62305-7005",www.brcn.edu,"4-year, Private not-for-profit",209 Bloomfield College,"467 Franklin St, Bloomfield, New Jersey 07003",www.bloomfield.edu,"4-year, Private not-for-profit",2029 Bloomsburg University of Pennsylvania,"400 E Second St, Bloomsburg, Pennsylvania 17815",www.bloomu.edu,"4-year, Public",8855 Blue Mountain College,"201 W Main St, Blue Mountain, Mississippi 38610-9509",www.bmc.edu,"4-year, Private not-for-profit",470 Bluefield College,"3000 College Dr, Bluefield, Virginia 24605",www.bluefield.edu,"4-year, Private not-for-profit",736 Bluefield State College,"219 Rock St, Bluefield, West Virginia 24701",www.bluefieldstate.edu,"4-year, Public",1868 Bluffton University,"1 University Drive, Bluffton, Ohio 45817-2104",www.bluffton.edu,"4-year, Private not-for-profit",1149 Bob Jones University,"1700 Wade Hampton Boulavard, Greenville, South Carolina 29614-0001",www.bju.edu,"4-year, Private not-for-profit",4141 Boise Bible College,"8695 W Marigold St, Boise, Idaho 83714-1220",www.boisebible.edu,"4-year, primarily associate's, Private not-for-profit",170 Boise State University,"1910 University Dr, Boise, Idaho 83725",www.boisestate.edu,"4-year, Public",19667 Boricua College,"3755 Broadway, New York, New York 10032-1560",boricuacollege.edu,"4-year, primarily associate's, Private not-for-profit",1052 Boston Architectural College,"320 Newbury Street, Boston, Massachusetts 02115-2703",www.the-bac.edu,"4-year, Private not-for-profit",1452 Boston Baptist College,"950 Metropolitan Ave, Boston, Massachusetts 02136-4030",Boston.edu,"4-year, Private not-for-profit",121 Boston College,"140 Commonwealth Ave, Chestnut Hill, Massachusetts 02467",www.bc.edu,"4-year, Private not-for-profit",14836 Boston Graduate School of Psychoanalysis Inc,"1581 Beacon St, Brookline, Massachusetts 02446",www.bgsp.edu,"4-year, Private not-for-profit",165 Boston University,"One Silber Way, Boston, Massachusetts 02215",www.bu.edu,"4-year, Private not-for-profit",31766 Bowdoin College,"5700 College Station - President's Office, Brunswick, Maine 04011-8448",www.bowdoin.edu,"4-year, Private not-for-profit",1723 Bowie State University,"14000 Jericho Park Rd, Bowie, Maryland 20715-9465",www.bowiestate.edu,"4-year, Public",5483 Bowling Green State University-Firelands,"One University Drive, Huron, Ohio 44839-9791",www.firelands.bgsu.edu,"4-year, primarily associate's, Public",2354 Bowling Green State University-Main Campus,"220 McFall Ctr, Bowling Green, Ohio 43403",www.bgsu.edu,"4-year, Public",17874 Bradley University,"1501 W Bradley Ave, Peoria, Illinois 61625-0001",www.bradley.edu,"4-year, Private not-for-profit",5873 Brandeis University,"415 South St, Waltham, Massachusetts 02454-9110",www.brandeis.edu/,"4-year, Private not-for-profit",5327 Brazosport College,"500 College Dr, Lake Jackson, Texas 77566-3199",www.brazosport.edu,"4-year, primarily associate's, Public",3893 Brenau University,"500 Washington Street SE, Gainesville, Georgia 30501-3668",www.brenau.edu,"4-year, Private not-for-profit",2591 Brescia University,"717 Frederica St, Owensboro, Kentucky 42301-3023",www.brescia.edu,"4-year, Private not-for-profit",622 Brevard College,"One Brevard College Drive, Brevard, North Carolina 28712",www.brevard.edu,"4-year, Private not-for-profit",650 Brewton-Parker College,"201 David-Eliza Fountain Circle, Mount Vernon, Georgia 30445",www.bpc.edu,"4-year, Private not-for-profit",1017 Briar Cliff University,"3303 Rebecca St, Sioux City, Iowa 51104",www.briarcliff.edu,"4-year, Private not-for-profit",1114 Briarcliffe College,"1055 Stewart Ave, Bethpage, New York 11714-3545",www.briarcliffe.edu,"4-year, primarily associate's, Private for-profit",1728 Briarwood College,"2279 Mount Vernon Rd, Southington, Connecticut 06489-1057",www.briarwood.edu,"4-year, primarily associate's, Private for-profit",702 Bridgewater College,"402 E College St, Bridgewater, Virginia 22812-1599",www.bridgewater.edu,"4-year, Private not-for-profit",1514 Bridgewater State College,"131 Summer Street, Bridgewater, Massachusetts 02325",www.bridgew.edu,"4-year, Public",10269 Brigham Young University,"Main Campus, Provo, Utah 84602",www.byu.edu,"4-year, Private not-for-profit",34244 Brigham Young University-Hawaii,"55-220 Kulanui Street, Laie, Hawaii 96762-1294",www.byuh.edu,"4-year, Private not-for-profit",2424 Brigham Young University-Idaho,"525 S Center, Rexburg, Idaho 83460",www.byui.edu,"4-year, Private not-for-profit",14276 Brite Divinity School,"2800 S. University Dr., Forth Worth, Texas 76129",www.brite.tcu.edu,"4-year, Private not-for-profit",241 Brooklyn Law School,"250 Joralemon St, Brooklyn, New York 11201",www.brooklaw.edu,"4-year, Private not-for-profit",1490 Brooks Institute,"1321 Alameda Padre Serra, Santa Barbara, California 93108",www.brooks.edu,"4-year, Private for-profit",1240 Brown College,"1440 Northland Dr, Mendota Heights, Minnesota 55120-1004",www.browncollege.edu,"4-year, primarily associate's, Private for-profit",1416 Brown Mackie College-Fort Wayne,"3000 E.Coliseum Blvd., Fort Wayne, Indiana 46805",www.brownmackie.edu,"4-year, primarily associate's, Private for-profit",212 Brown Mackie College-Indianapolis,"1200 N Meridian St, Ste 100, Indianapolis, Indiana 46204",,"4-year, primarily associate's, Private for-profit",402 Brown Mackie College-Merrillville,"1000 E 80th Place, Suite 101N, Merrillville, Indiana 46410",www.brownmackie.edu,"4-year, primarily associate's, Private for-profit",775 Brown Mackie College-Miami,"1501 Biscayne Blvd, Miami, Florida 33132",www.brownmackie.edu/Miami,"4-year, primarily associate's, Private for-profit",716 Brown Mackie College-Michigan City,"325 E US Hwy 20, Michigan City, Indiana 46360-7362",www.brownmackie.edu,"4-year, primarily associate's, Private for-profit",378 Brown Mackie College-South Bend,"1030 E Jefferson Blvd, South Bend, Indiana 46617",www.allalliedhealthschools.com/schools/ID2204/,"4-year, primarily associate's, Private for-profit",823 Brown Mackie College-Tucson,"4585 E Speedway Blvd., Tucson, Arizona 85712",www.brownmackie.edu,"4-year, Private for-profit",386 Brown University,"Prospect St, Providence, Rhode Island 02912",www.brown.edu,"4-year, Private not-for-profit",8318 Bryan College,"721 Bryan Drive, Dayton, Tennessee 37321-7000",www.bryan.edu,"4-year, Private not-for-profit",1079 BryanLGH College of Health Sciences,"5035 Everett, Lincoln, Nebraska 68506-1299",www.bryanlghcollege.org,"4-year, primarily associate's, Private not-for-profit",493 Bryant and Stratton College-Amherst Campus,"Audubon Business Centre, 40 Hazelwood Drive, Amherst, New York 14228",www.bryantstratton.edu,"4-year, primarily associate's, Private for-profit",474 Bryant and Stratton College-Buffalo,"465 Main Street, Suite 400, Buffalo, New York 14203",www.bryantstratton.edu,"4-year, primarily associate's, Private for-profit",693 Bryant and Stratton College-Cleveland,"1700 E 13th St, Cleveland, Ohio 44114-3203",www.bryantstratton.edu,"4-year, primarily associate's, Private for-profit",731 Bryant and Stratton College-Eastlake Campus,"35350 Curtis Blvd., Eastlake, Ohio 44095",www.bryantstratton.edu,"4-year, primarily associate's, Private for-profit",762 Bryant and Stratton College-Milwaukee,"310 W. Wisconsin Avenue Suite 500, Milwaukee, Wisconsin 53203-2608",www.bryantstratton.edu,"4-year, primarily associate's, Private for-profit",828 Bryant and Stratton College-Parma,"12955 Snow Rd, Parma, Ohio 44130-3151",www.bryantstratton.edu,"4-year, primarily associate's, Private for-profit",528 Bryant and Stratton College-Richmond,"8141 Hull St Rd, Richmond, Virginia 23235",www.bryantstratton.edu,"4-year, primarily associate's, Private for-profit",560 Bryant and Stratton College-Southtowns,"200 Redtail, Orchard Park, New York 14127",www.bryantstratton.edu,"4-year, primarily associate's, Private for-profit",1206 Bryant and Stratton College-Virginia Beach,"301 Centre Pointe Dr, Virginia Beach, Virginia 23462",www.bryantstratton.edu,"4-year, primarily associate's, Private for-profit",595 Bryant and Stratton College-Wauwatosa,"10950 W Potter Road, Wauwatosa, Wisconsin 53226",,"4-year, primarily associate's, Private for-profit",663 Bryant University,"1150 Douglas Pike, Smithfield, Rhode Island 02917-1284",www.bryant.edu,"4-year, Private not-for-profit",3800 Bryn Athyn College of the New Church,"801 Tomlinson Rd, Bryn Athyn, Pennsylvania 19009-0717",www.brynathyn.edu,"4-year, Private not-for-profit",164 Bryn Mawr College,"101 N Merion Avenue, Bryn Mawr, Pennsylvania 19010",www.brynmawr.edu,"4-year, Private not-for-profit",1745 Bucknell University,"Dent Drive, Lewisburg, Pennsylvania 17837",www.bucknell.edu,"4-year, Private not-for-profit",3759 Buena Vista University,"610 W 4th St, Storm Lake, Iowa 50588",www.bvu.edu,"4-year, Private not-for-profit",2478 Burlington College,"95 North Ave, Burlington, Vermont 05401",www.burlington.edu,"4-year, Private not-for-profit",167 Butler University,"4600 Sunset Ave, Indianapolis, Indiana 46208",www.butler.edu,"4-year, Private not-for-profit",4438 Byzantine Catholic Seminary,"3605 Perrysville Ave, Pittsburgh, Pennsylvania 15214",www.byzcathsem.org,"4-year, Private not-for-profit",13 Cabarrus College of Health Sciences,"401 Medical Park Drive, Concord, North Carolina 28025",www.cabarruscollege.edu,"4-year, primarily associate's, Private not-for-profit",372 Cabrini College,"610 King of Prussia Rd, Radnor, Pennsylvania 19087-3698",www.cabrini.edu,"4-year, Private not-for-profit",3580 Caldwell College,"9 Ryerson Avenue, Caldwell, New Jersey 07006-6195",www.caldwell.edu,"4-year, Private not-for-profit",2308 California Baptist University,"8432 Magnolia Ave, Riverside, California 92504-3297",www.calbaptist.edu,"4-year, Private not-for-profit",4013 California Christian College,"4881 E University Ave, Fresno, California 93703-3599",www.calchristiancollege.org,"4-year, Private not-for-profit",25 California College of the Arts,"5212 Broadway, Oakland, California 94618-1487",www.cca.edu,"4-year, Private not-for-profit",1710 California College-San Diego,"2820 Camino Del Rio South, Suite 300, San Diego, California 92108-3824",www.cc-sd.edu,"4-year, primarily associate's, Private for-profit",817 California Institute of Integral Studies,"1453 Mission Street, San Francisco, California 94103",www.ciis.edu,"4-year, Private not-for-profit",1166 California Institute of Technology,"1200 E California Blvd, Pasadena, California 91125",www.caltech.edu,"4-year, Private not-for-profit",2126 California Institute of the Arts,"24700 W McBean Pky, Valencia, California 91355-2397",www.calarts.edu,"4-year, Private not-for-profit",1381 California Lutheran University,"60 W Olsen Rd, Thousand Oaks, California 91360-2787",www.callutheran.edu/,"4-year, Private not-for-profit",3499 California Maritime Academy,"200 Maritime Academy Dr, Vallejo, California 94590",www.csum.edu,"4-year, Public",875 California Polytechnic State University-San Luis Obispo,"One Grand Ave, San Luis Obispo, California 93407",www.calpoly.edu,"4-year, Public",19471 California State Polytechnic University-Pomona,"3801 W Temple Ave, Pomona, California 91768",www.csupomona.edu,"4-year, Public",21190 California State University-Bakersfield,"9001 Stockdale Hwy, Bakersfield, California 93311-1099",www.csub.edu,"4-year, Public",7684 California State University-Channel Islands,"One University Dr, Camarillo, California 93012",www.csuci.edu,"4-year, Public",3783 California State University-Chico,"First and Normal Sts, Chico, California 95929-0150",www.csuchico.edu,"4-year, Public",17132 California State University-Dominguez Hills,"1000 E Victoria St, Carson, California 90747-0005",www.csudh.edu,"4-year, Public",12851 California State University-East Bay,"25800 Carlos Bee Blvd, Hayward, California 94542",www.csueastbay.edu,"4-year, Public",14167 California State University-Fresno,"5241 N Maple Ave, Fresno, California 93740",www.csufresno.edu,"4-year, Public",22613 California State University-Fullerton,"800 N State College Blvd, Fullerton, California 92831-3599",www.fullerton.edu,"4-year, Public",36996 California State University-Long Beach,"1250 Bellflower Blvd, Long Beach, California 90840-0115",www.csulb.edu,"4-year, Public",37891 California State University-Los Angeles,"5151 State University Dr, Los Angeles, California 90032",www.calstatela.edu,"4-year, Public",20743 California State University-Monterey Bay,"100 Campus Center, Seaside, California 93955-8001",www.csumb.edu,"4-year, Public",4340 California State University-Northridge,"18111 Nordhoff St, Northridge, California 91330",www.csun.edu,"4-year, Public",36208 California State University-Sacramento,"6000 J St, Sacramento, California 95819-2694",www.csus.edu,"4-year, Public",29011 California State University-San Bernardino,"5500 University Pky, San Bernardino, California 92407-2397",www.csusb.edu,"4-year, Public",17646 California State University-San Marcos,"333 S Twin Oaks Valley Rd, San Marcos, California 92096-0001",www.csusm.edu,"4-year, Public",9148 California State University-Stanislaus,"One University Circle, Turlock, California 95382",www.csustan.edu,"4-year, Public",8601 California University of Pennsylvania,"250 University Ave, California, Pennsylvania 15419-1394",www.cup.edu,"4-year, Public",8519 California Western School of Law,"225 Cedar St, San Diego, California 92101-3046",www.cwsl.edu,"4-year, Private not-for-profit",911 Calumet College of Saint Joseph,"2400 New York Ave, Whiting, Indiana 46394",www.ccsj.edu,"4-year, Private not-for-profit",1213 Calvary Baptist Theological Seminary,"1380 S. Valley Forge Rd., Lansdale, Pennsylvania 19446-4797",www.cbs.edu,"4-year, Private not-for-profit",104 Calvary Bible College and Theological Seminary,"15800 Calvary Road, Kansas City, Missouri 64147-1341",www.calvary.edu,"4-year, Private not-for-profit",302 Calvin College,"3201 Burton SE, Grand Rapids, Michigan 49546",www.calvin.edu,"4-year, Private not-for-profit",4171 Calvin Theological Seminary,"3233 Burton St SE, Grand Rapids, Michigan 49546-4387",www.calvinseminary.edu,"4-year, Private not-for-profit",276 Cambridge College,"1000 Massachusetts Ave, Cambridge, Massachusetts 02138",WWW.CAMBRIDGECOLLEGE.EDU,"4-year, Private not-for-profit",5311 Cameron University,"2800 Gore Blvd, Lawton, Oklahoma 73505",www.cameron.edu,"4-year, Public",5449 Campbell University Inc,"450 Leslie Campbell Ave, Buies Creek, North Carolina 27506",www.campbell.edu,"4-year, Private not-for-profit",6075 Campbellsville University,"1 University Dr, Campbellsville, Kentucky 42718-2799",www.campbellsville.edu,"4-year, Private not-for-profit",2830 Canisius College,"2001 Main St, Buffalo, New York 14208-1098",WWW.Canisius.edu,"4-year, Private not-for-profit",4916 Capella University,"225 South 6th Street, 9th Floor, Minneapolis, Minnesota 55402-3389",www.capella.edu,"4-year, Private for-profit",25245 Capital University,"1 College and Main, Columbus, Ohio 43209-2394",www.capital.edu,"4-year, Private not-for-profit",3632 Capitol College,"11301 Springfield Rd, Laurel, Maryland 20708",www.capitol-college.edu,"4-year, Private not-for-profit",701 Cardinal Stritch University,"6801 N Yates Rd, Milwaukee, Wisconsin 53217-3985",www.stritch.edu,"4-year, Private not-for-profit",6242 Careers Unlimited,"1176 South 1480 West, Orem, Utah 84058",www.ucdh.edu,"4-year, primarily associate's, Private for-profit",121 Caribbean University-Bayamon,"Carr 167 Km 21.2, Ave. Comerio, Bayamon, Puerto Rico 00959-0493",www.caribbean.edu,"4-year, Private not-for-profit",2009 Caribbean University-Carolina,"Calle Ignacio Arzuaga #6, Carolina, Puerto Rico 00979",www.caribbean.edu,"4-year, Private not-for-profit",747 Caribbean University-Ponce,"1015 Ave. Ceiba, Ponce, Puerto Rico 00732-7733",www.caribbean.edu,"4-year, Private not-for-profit",1577 Caribbean University-Vega Baja,"Carr 671, Sector El Criollo, Bo. Algarrobo, Vega Baja, Puerto Rico 00964",www.caribbean.edu,"4-year, Private not-for-profit",1036 Carleton College,"One North College Street, Northfield, Minnesota 55057-4001",www.carleton.edu,"4-year, Private not-for-profit",1983 Carlos Albizu University,"San Francisco St Old San Juan, San Juan, Puerto Rico 00902-3711",www.albizu.edu,"4-year, Private not-for-profit",896 Carlos Albizu University-Miami Campus,"2173 N.W. 99th Avenue, Miami, Florida 33172-2209",www.mia.albizu.edu,"4-year, Private not-for-profit",1134 Carlow University,"3333 Fifth Ave, Pittsburgh, Pennsylvania 15213-3165",www.carlow.edu,"4-year, Private not-for-profit",2128 Carnegie Mellon University,"5000 Forbes Ave, Pittsburgh, Pennsylvania 15213-3890",www.cmu.edu/,"4-year, Private not-for-profit",10875 Carolina Christian College,"4117 Northampton Dr, Winston Salem, North Carolina 27105",www.carolina.edu,"4-year, Private not-for-profit",25 Carroll College,"1601 N Benton Ave, Helena, Montana 59625-0002",www.carroll.edu,"4-year, Private not-for-profit",1409 Carroll University,"100 N East Ave, Waukesha, Wisconsin 53186",www.carrollu.edu,"4-year, Private not-for-profit",3318 Carson-Newman College,"1646 S Russell Ave, Jefferson City, Tennessee 37760",www.cn.edu,"4-year, Private not-for-profit",2032 Carthage College,"2001 Alford Park Dr, Kenosha, Wisconsin 53140-1994",www.carthage.edu,"4-year, Private not-for-profit",2972 Cascade College,"9101 E Burnside Street, Portland, Oregon 97216-1515",www.cascade.edu,"4-year, Private not-for-profit",282 Case Western Reserve University,"10900 Euclid Ave, Cleveland, Ohio 44106",www.case.edu,"4-year, Private not-for-profit",9814 Castleton State College,"62 Alumni Dr, Castleton, Vermont 05735",www.castleton.edu,"4-year, Public",2089 Catawba College,"2300 W Innes St, Salisbury, North Carolina 28144",www.catawba.edu,"4-year, Private not-for-profit",1261 Cathedral Bible College,"803 Howard Pkwy, Myrtle Beach, South Carolina 29577-1413",www.cathedralministries.org,"4-year, primarily associate's, Private not-for-profit",152 Catholic Theological Union at Chicago,"5416 S Cornell Ave, Chicago, Illinois 60615-5698",www.ctu.edu,"4-year, Private not-for-profit",470 Catholic University of America,"620 Michigan Avenue, NE, Washington, District of Columbia 20064",www.cua.edu,"4-year, Private not-for-profit",6705 Cazenovia College,"22 Sullivan St, Cazenovia, New York 13035",www.cazenovia.edu,"4-year, Private not-for-profit",1159 Cedar Crest College,"100 College Drive, Allentown, Pennsylvania 18104-6196",www.cedarcrest.edu,"4-year, Private not-for-profit",1872 Cedarville University,"251 N. Main Street, Cedarville, Ohio 45314-0601",www.cedarville.edu,"4-year, Private not-for-profit",3066 Centenary College,"400 Jefferson St, Hackettstown, New Jersey 07840",www.centenarycollege.edu,"4-year, Private not-for-profit",3261 Centenary College of Louisiana,"2911 Centenary Boulevard, Shreveport, Louisiana 71134-1188",www.centenary.edu,"4-year, Private not-for-profit",907 Center for Advanced Legal Studies,"3910 Kirby Ste 200, Houston, Texas 77098-4151",www.paralegal.edu,"4-year, Private for-profit",182 Center for Advanced Studies On Puerto Rico & the Caribbean,"Calle Del Cristo #52, San Juan, Puerto Rico 00901",ceaprc.org,"4-year, Private not-for-profit",539 Central Baptist College,"1501 College Avenue, Conway, Arkansas 72034",www.cbc.edu,"4-year, Private not-for-profit",559 Central Baptist Theological Seminary,"6601 Monticello Road, Shawnee, Kansas 66226-3513",www.cbts.edu,"4-year, Private not-for-profit",112 Central Bible College,"3000 N Grant Ave, Springfield, Missouri 65803-1033",www.cbcag.edu,"4-year, Private not-for-profit",649 Central Christian College of Kansas,"1200 S Main, McPherson, Kansas 67460-5740",www.centralchristian.edu,"4-year, Private not-for-profit",390 Central Christian College of the Bible,"911 E Urbandale Dr, Moberly, Missouri 65270-1997",www.cccb.edu,"4-year, Private not-for-profit",417 Central College,"812 University, Pella, Iowa 50219",www.central.edu,"4-year, Private not-for-profit",1558 Central Connecticut State University,"1615 Stanley St, New Britain, Connecticut 06050",www.ccsu.edu,"4-year, Public",12233 Central Methodist University-College of Graduate & Extended Studies,"411 Central Methodist Square, Fayette, Missouri 65248-1198",www.centralmethodist.edu,"4-year, Private not-for-profit",3271 Central Methodist University-College of Liberal Arts & Sciences,"411 Central Methodist Square, Fayette, Missouri 65248-1198",www.centralmethodist.edu,"4-year, Private not-for-profit",1031 Central Michigan University,"Mount Pleasant, Michigan 48859",www.cmich.edu,"4-year, Public",27225 Central Pennsylvania College,"College Hill & Valley Rds, Summerdale, Pennsylvania 17093-0309",www.centralpenn.edu,"4-year, Private for-profit",1091 Central State University,"1400 Brush Row Rd, Wilberforce, Ohio 45384-1004",www.centralstate.edu,"4-year, Public",2171 Central Washington University,"400 East University Way, Ellensburg, Washington 98926-7501",www.cwu.edu,"4-year, Public",10662 Central Yeshiva Tomchei Tmimim Lubavitz,"841-853 Ocean Pky, Brooklyn, New York 11230",,"4-year, Private not-for-profit",637 Centre College,"600 W Walnut St, Danville, Kentucky 40422-1394",www.centre.edu,"4-year, Private not-for-profit",1197 Centura College,"2697 Dean Drive, Ste 100, Virginia Beach, Virginia 23452-7431",centuracollege.edu,"4-year, primarily associate's, Private for-profit",1277 Chadron State College,"1000 Main St, Chadron, Nebraska 69337-2690",www.csc.edu,"4-year, Public",2649 Chamberlain College of Nursing (Addison Campus),"1221 N Swift Rd, Addison, Illinois 60101",,"4-year, primarily associate's, Private for-profit",244 Chamberlain College of Nursing (Columbus Campus),"1350 Alum Creek Dr, Columbus, Ohio 43209",www.chamberlain.edu,"4-year, Private for-profit",632 Chamberlain College of Nursing (Phoenix Campus),"2149 West Dunlap Ave, Phoenix, Arizona 85021",www.chamberlain.edu,"4-year, primarily associate's, Private for-profit",119 Chamberlain College of Nursing (St. Louis Campus),"6150 Oakland Ave, Saint Louis, Missouri 63139",www.chamberlain.edu,"4-year, Private for-profit",2208 Chaminade University of Honolulu,"3140 Waialae Avenue, Honolulu, Hawaii 96816-1578",www.chaminade.edu,"4-year, Private not-for-profit",2688 Champlain College,"163 S. Willard St, Burlington, Vermont 05401",www.champlain.edu,"4-year, Private not-for-profit",2891 Chancellor University,"3921 Chester Avenue, Cleveland, Ohio 44114",www.myers.edu,"4-year, Private for-profit",422 Chapman University,"One University Dr., Orange, California 92866",www.chapman.edu,"4-year, Private not-for-profit",6128 Chapman University-University College,"One University Dr, Orange, California 92866",www.chapman.edu/univcoll/,"4-year, Private not-for-profit",6067 Charles Drew University of Medicine and Science,"1731 E 120th St, Los Angeles, California 90059",www.cdrewu.edu,"4-year, primarily associate's, Private not-for-profit",255 Charleston School of Law,"81 Mary St, Charleston, South Carolina 29402",,"4-year, Private for-profit",616 Charleston Southern University,"9200 University Blvd, Charleston, South Carolina 29410-8087",www.csuniv.edu,"4-year, Private not-for-profit",3200 Charter College,"2221 E Northern Lights Blvd Ste 120, Anchorage, Alaska 99508",www.chartercollege.edu,"4-year, primarily associate's, Private for-profit",747 Charter Oak State College,"55 Paul J Manafort Dr, New Britain, Connecticut 06053-2142",www.cosc.edu,"4-year, Public",1988 Chatham University,"Woodland Rd, Pittsburgh, Pennsylvania 15232",www.chatham.edu,"4-year, Private not-for-profit",2184 Chester College of New England,"40 Chester St, Chester, New Hampshire 03036-4331",www.chestercollege.edu,"4-year, Private not-for-profit",211 Chestnut Hill College,"9601 Germantown Ave, Philadelphia, Pennsylvania 19118-2693",www.chc.edu,"4-year, Private not-for-profit",2085 Cheyney University of Pennsylvania,"1837 University Circle, Cheyney, Pennsylvania 19319-0200",www.cheyney.edu,"4-year, Public",1488 Chicago School of Professional Psychology,"325 N Wells Street, Chicago, Illinois 60654",www.thechicagoschool.edu,"4-year, Private not-for-profit",1925 Chicago State University,"9501 S. King Drive, Chicago, Illinois 60628-1598",www.csu.edu,"4-year, Public",6820 Chicago Theological Seminary,"5757 University Ave, Chicago, Illinois 60637",www.ctschicago.edu,"4-year, Private not-for-profit",210 Chipola College,"3094 Indian Circle, Marianna, Florida 32446-2053",www.chipola.edu,"4-year, primarily associate's, Public",2305 Chowan University,"One University Place, Murfreesboro, North Carolina 27855",www.chowan.edu/,"4-year, Private not-for-profit",952 Christ the King Seminary,"711 Knox Rd, East Aurora, New York 14052-0607",www.cks.edu,"4-year, Private not-for-profit",98 Christian Brothers University,"650 E Parkway S, Memphis, Tennessee 38104",www.cbu.edu,"4-year, Private not-for-profit",1869 Christian Life College,"400 E Gregory St, Mount Prospect, Illinois 60056-2522",www.christianlifecollege.edu,"4-year, primarily associate's, Private not-for-profit",46 Christian Theological Seminary,"1000 W 42nd St, Indianapolis, Indiana 46208-3301",www.cts.edu,"4-year, Private not-for-profit",253 Christopher Newport University,"1 University Place, Newport News, Virginia 23606",www.cnu.edu,"4-year, Public",4904 Church Divinity School of the Pacific,"2451 Ridge Road, Berkeley, California 94709-1211",www.cdsp.edu,"4-year, Private not-for-profit",115 Church of God Theological Seminary,"900 Walker St NE, Cleveland, Tennessee 37320-3330",www.cogts.edu,"4-year, Private not-for-profit",208 Cincinnati Christian University,"2700 Glenway Ave, Cincinnati, Ohio 45204-3200",www.CCUniversity.edu,"4-year, Private not-for-profit",1058 Cincinnati College of Mortuary Science,"645 W North Bend Rd, Cincinnati, Ohio 45224-1462",WWW.CCMS.EDU,"4-year, Private not-for-profit",134 Citadel Military College of South Carolina,"171 Moultrie St, Charleston, South Carolina 29409",www.citadel.edu,"4-year, Public",3328 City College,"9300 S Dadeland Blvd. Suite Ph, Miami, Florida 33156",www.citycollege.edu,"4-year, primarily associate's, Private not-for-profit",292 City College,"2000 W. Commerical Boulevard, Fort Lauderdale, Florida 33309",www.citycollege.edu,"4-year, primarily associate's, Private not-for-profit",470 City College Branch Campus,"2400 SW 13th St, Gainesville, Florida 32608",www.citycollege.edu,"4-year, primarily associate's, Private not-for-profit",278 City of Hope Graduate School of Biological Sciences,"1500 E. Duarte Rd., Duarte, California 91010-3000",gradschool.coh.org,"4-year, Private not-for-profit",69 City University of Seattle,"11900 NE First Street, Bellevue, Washington 98005",www.cityu.edu,"4-year, Private not-for-profit",3184 Claflin University,"400 Magnolia Street, Orangeburg, South Carolina 29115-4498",www.claflin.edu,"4-year, Private not-for-profit",1773 Claremont Graduate University,"150 E Tenth St, Claremont, California 91711-6160",www.cgu.edu,"4-year, Private not-for-profit",2215 Claremont McKenna College,"500 E 9th St, Claremont, California 91711-6400",www.claremontmckenna.edu/,"4-year, Private not-for-profit",1212 Claremont School of Theology,"1325 N College Ave, Claremont, California 91711-3199",www.cst.edu,"4-year, Private not-for-profit",358 Clarion University of Pennsylvania,"840 Wood St, Clarion, Pennsylvania 16214",www.clarion.edu,"4-year, Public",7100 Clark Atlanta University,"223 James P Brawley Drive, S.W., Atlanta, Georgia 30314-4391",www.cau.edu,"4-year, Private not-for-profit",4068 Clark University,"950 Main St, Worcester, Massachusetts 01610-1477",www.clarku.edu,"4-year, Private not-for-profit",3330 Clarke College,"1550 Clarke Dr, Dubuque, Iowa 52001-3198",www.clarke.edu,"4-year, Private not-for-profit",1156 Clarkson College,"101 S 42nd St, Omaha, Nebraska 68131-2739",www.clarksoncollege.edu/,"4-year, Private not-for-profit",820 Clarkson University,"Potsdam, New York 13699-5557",www.clarkson.edu,"4-year, Private not-for-profit",3045 Clayton State University,"2000 Clayton State Boulevard, Morrow, Georgia 30260-0285",www.clayton.edu,"4-year, Public",6074 Clear Creek Baptist Bible College,"300 Clear Creek Rd, Pineville, Kentucky 40977-9752",www.ccbbc.edu,"4-year, Private not-for-profit",164 Clearwater Christian College,"3400 Gulf to Bay Blvd, Clearwater, Florida 33759-4595",www.clearwater.edu,"4-year, Private not-for-profit",604 Cleary University,"3750 Cleary Drive, Howell, Michigan 48843-8566",www.cleary.edu,"4-year, Private not-for-profit", Cleary University,"3601 Plymouth Rd, Ann Arbor, Michigan 48105-2659",www.cleary.edu,"4-year, Private not-for-profit",857 Clemson University,"201 Sikes Hall, Clemson, South Carolina 29634",www.clemson.edu,"4-year, Public",18317 Cleveland Chiropractic College,"10850 Lowell Avenue, Overland Park, Kansas 66210",www.cleveland.edu,"4-year, Private not-for-profit",535 Cleveland Chiropractic College of Los Angeles,"590 N Vermont Ave, Los Angeles, California 90004-2196",WWW.CLEVELAND.EDU,"4-year, Private not-for-profit",342 Cleveland Institute of Art,"11141 East Blvd, Cleveland, Ohio 44106-1710",www.cia.edu,"4-year, Private not-for-profit",503 Cleveland Institute of Music,"11021 East Blvd, Cleveland, Ohio 44106-1776",www.cim.edu,"4-year, Private not-for-profit",462 Cleveland State University,"2121 Euclid Avenue, Cleveland, Ohio 44115-2214",www.csuohio.edu/,"4-year, Public",15139 Coastal Carolina University,"108 James P. Blanton Circle, Conway, South Carolina 29526",www.coastal.edu,"4-year, Public",8154 Coe College,"1220 First Ave NE, Cedar Rapids, Iowa 52402-5092",www.coe.edu,"4-year, Private not-for-profit",1326 Cogswell Polytechnical College,"1175 Bordeaux Drive, Sunnyvale, California 94089",www.cogswell.edu,"4-year, Private not-for-profit",224 Coker College,"300 E College Ave, Hartsville, South Carolina 29550",www.coker.edu,"4-year, Private not-for-profit",1099 Colby College,"4000 Mayflower Hill Drive, Waterville, Maine 04901-8840",www.colby.edu,"4-year, Private not-for-profit",1847 Colby-Sawyer College,"541 Main St, New London, New Hampshire 03257-7835",www.colby-sawyer.edu,"4-year, Private not-for-profit",1004 Colegio Biblico Pentecostal de Puerto Rico,"Road 848 Km. 0.5 Callejon Marquez, Bo. Saint Just, Trujillo Alto, Puerto Rico 00978-0901",www.cbp.edu,"4-year, Private not-for-profit",262 Colegio Pentecostal Mizpa,"Bo Caimito Rd 199 Km 0.3, Rio Piedras, Puerto Rico 00928",www.colmizpa.edu,"4-year, primarily associate's, Private not-for-profit",251 Colegio Universitario de San Juan,"180 Jose Oliver St Tres Monjitas Ind. Park, San Juan, Puerto Rico 00918",www.cunisanjuan.edu,"4-year, primarily associate's, Public",1355 Coleman University,"8888 Balboa Ave, San Diego, California 92123-1506",www.coleman.edu,"4-year, primarily associate's, Private not-for-profit",532 Colgate Rochester Crozer Divinity School,"1100 S Goodman St, Rochester, New York 14620-2589",www.crcds.edu,"4-year, Private not-for-profit",77 Colgate University,"13 Oak Dr, Hamilton, New York 13346-1398",www.colgate.edu,"4-year, Private not-for-profit",2844 College America-Cheyenne,"6101 Yellowstone Rd Ste 101, Cheyenne, Wyoming 82009",www.collegeamerica.edu,"4-year, primarily associate's, Private for-profit",146 College America-Colorado Springs,"3645 Citadel Drive South, Colorado Springs, Colorado 80909",,"4-year, primarily associate's, Private for-profit",388 College America-Denver,"1385 S Colorado Blvd., 5th Floor, Denver, Colorado 80222",www.collegeamerica.edu,"4-year, primarily associate's, Private for-profit",416 College America-Fort Collins,"4601 South Mason St, Fort Collins, Colorado 80525",www.collegeamerica.edu,"4-year, primarily associate's, Private for-profit",215 College for Creative Studies,"201 E Kirby, Detroit, Michigan 48202",www.collegeforcreativestudies.edu,"4-year, Private not-for-profit",1369 College of Biblical Studies-Houston,"7000 Regency Square Blvd., Houston, Texas 77036-3211",www.cbshouston.edu,"4-year, Private not-for-profit",1005 College of Charleston,"66 George St, Charleston, South Carolina 29424-0001",www.cofc.edu,"4-year, Public",11367 College of Mount Saint Vincent,"6301 Riverdale Ave, Bronx, New York 10471-1093",www.mountsaintvincent.edu,"4-year, Private not-for-profit",1834 College of Mount St. Joseph,"5701 Delhi Rd, Cincinnati, Ohio 45233-1670",www.msj.edu,"4-year, Private not-for-profit",2133 College of Notre Dame of Maryland,"4701 N Charles St, Baltimore, Maryland 21210-2476",www.ndm.edu,"4-year, Private not-for-profit",2935 College of Our Lady of the Elms,"291 Springfield St, Chicopee, Massachusetts 01013",www.elms.edu,"4-year, Private not-for-profit",1228 College of Saint Benedict,"37 S. College Ave., Saint Joseph, Minnesota 56374",www.csbsju.edu,"4-year, Private not-for-profit",2110 College of Saint Elizabeth,"2 Convent Rd, Morristown, New Jersey 07960-6989",www.cse.edu,"4-year, Private not-for-profit",2111 College of Saint Mary,"7000 Mercy Rd., Omaha, Nebraska 68106",WWW.CSM.EDU,"4-year, Private not-for-profit",953 College of Santa Fe,"1600 St. Michael's Drive, Santa Fe, New Mexico 87505-7634",www.csf.edu,"4-year, Private not-for-profit",622 College of Santa Fe at Albuquerque,"4501 Indian School Rd NE, Albuquerque, New Mexico 87110",www.csf.edu,"4-year, Private not-for-profit",795 College of Southern Nevada,"6375 W. Charleston Blvd., Las Vegas, Nevada 89146-1164",www.csn.edu,"4-year, primarily associate's, Public",40310 College of St Catherine,"2004 Randolph Ave, Saint Paul, Minnesota 55105",www.stkate.edu,"4-year, Private not-for-profit",5201 College of St Joseph,"71 Clement Road, Rutland, Vermont 05701-3899",www.csj.edu,"4-year, Private not-for-profit",428 College of the Atlantic,"105 Eden Street, Bar Harbor, Maine 04609",www.coa.edu,"4-year, Private not-for-profit",327 College of the Holy Cross,"One College Street, Worcester, Massachusetts 01610-2395",www.holycross.edu,"4-year, Private not-for-profit",2898 College of the Ozarks,"Point Lookout, Missouri 65726-0017",www.cofo.edu,"4-year, Private not-for-profit",1334 College of Visual Arts,"344 Summit Ave, Saint Paul, Minnesota 55102-2199",www.cva.edu,"4-year, Private not-for-profit",191 College of William and Mary,"Williamsburg, Virginia 23187-8795",www.wm.edu,"4-year, Public",7892 Collins College,"1140 S Priest Dr, Tempe, Arizona 85281-5206",www.collinscollege.edu,"4-year, Private for-profit",1456 Colorado Christian University,"8787 West Alameda Avenue, Lakewood, Colorado 80226",WWW.CCU.EDU,"4-year, Private not-for-profit",2599 Colorado College,"14. E Cache La Poudre St., Colorado Springs, Colorado 80903",www.coloradocollege.edu,"4-year, Private not-for-profit",2026 Colorado School of Mines,"1500 Illinois St, Golden, Colorado 80401",www.mines.edu,"4-year, Public",4704 Colorado School of Traditional Chinese Medicine,"1441 York St Ste 202, Denver, Colorado 80206",www.cstcm.edu,"4-year, Private for-profit",96 Colorado State University,"102 Administration Building, Fort Collins, Colorado 80523-0100",www.colostate.edu,"4-year, Public",28882 Colorado State University-Pueblo,"2200 Bonforte Blvd, Pueblo, Colorado 81001-4901",www.colostate-pueblo.edu,"4-year, Public",6759 Colorado Technical University,"5775 Denver Tech Ctr Blvd, Greenwood Village, Colorado 80111-3201",www.coloradotech.edu,"4-year, Private for-profit",733 Colorado Technical University,"520 E 19th Ave, North Kansas City, Missouri 64116",www.coloradotech.com,"4-year, primarily associate's, Private for-profit",679 Colorado Technical University,"4435 N Chestnut Street, Colorado Springs, Colorado 80907-3812",www.coloradotech.edu,"4-year, Private for-profit",2359 Colorado Technical University of Sioux Falls,"3901 W 59th St, Sioux Falls, South Dakota 57108-2272",www.coloradotech.edu,"4-year, Private for-profit",912 Colorado Technical University Online,"4435 N Chestnut-Ste E, Colorado Springs, Colorado 80907",www.ctuonline.edu,"4-year, Private for-profit",25797 Columbia Centro Universitario,"Carr 183 Km 1.7, Caguas, Puerto Rico 00726",www.columbiaco.edu,"4-year, primarily associate's, Private for-profit",1050 Columbia Centro Universitario,"3 Betances St, Yauco, Puerto Rico 00698",columbiaco.edu,"4-year, primarily associate's, Private for-profit",539 Columbia College,"1001 Rogers, Columbia, Missouri 65216",www.ccis.edu,"4-year, Private not-for-profit",14081 Columbia College,"1301 Columbia College Dr, Columbia, South Carolina 29203",www.columbiacollegesc.edu,"4-year, Private not-for-profit",1445 Columbia College Chicago,"600 South Michigan, Chicago, Illinois 60605-1996",www.colum.edu,"4-year, Private not-for-profit",12464 Columbia College Hollywood,"18618 Oxnard St, Tarzana, California 91356-1411",WWW.COLUMBIACOLLEGE.EDU,"4-year, Private not-for-profit",355 Columbia International University,"7435 Monticello Rd, Columbia, South Carolina 29203-1513",www.ciu.edu,"4-year, Private not-for-profit",923 Columbia Southern University,"21982 University Lane, Orange Beach, Alabama 36561",www.columbiasouthern.edu,"4-year, Private for-profit",28360 Columbia Theological Seminary,"701 S. Columbia Dr, Decatur, Georgia 30030-4118",WWW.CTSNET.EDU,"4-year, Private not-for-profit",419 Columbia Union College,"7600 Flower Ave, Takoma Park, Maryland 20912",www.cuc.edu,"4-year, Private not-for-profit",960 Columbia University in the City of New York,"116 St and Broadway, New York, New York 10027",www.columbia.edu,"4-year, Private not-for-profit",23196 Columbus College of Art and Design,"107 N Ninth St, Columbus, Ohio 43215",WWW.CCAD.EDU,"4-year, Private not-for-profit",1558 Columbus State University,"4225 University Ave, Columbus, Georgia 31907-5645",www.colstate.edu,"4-year, Public",7951 Conception Seminary College,"37174 State Hwy V V, Conception, Missouri 64433-0502",www.conception.edu,"4-year, Private not-for-profit",98 Concord University,"100 Vermillion Street, Athens, West Virginia 24712",www.concord.edu,"4-year, Public",2812 Concordia College,"171 White Plains Rd, Bronxville, New York 10708-1998",www.concordia-ny.edu,"4-year, Private not-for-profit",707 Concordia College at Moorhead,"901 S 8th St, Moorhead, Minnesota 56562",www.cord.edu,"4-year, Private not-for-profit",2823 Concordia College-Selma,"1804 Green St, Selma, Alabama 36701",www.concordiaselma.edu,"4-year, Private not-for-profit",539 Concordia Seminary,"801 Seminary Place, Saint Louis, Missouri 63105-3196",WWW.CSL.EDU,"4-year, Private not-for-profit",522 Concordia Theological Seminary,"6600 N Clinton St, Fort Wayne, Indiana 46825-4996",www.ctsfw.edu,"4-year, Private not-for-profit",382 Concordia University,"800 N Columbia Ave, Seward, Nebraska 68434-1556",www.cune.edu,"4-year, Private not-for-profit",1344 Concordia University,"2811 NE Holman Street, Portland, Oregon 97211-6099",www.cu-portland.edu,"4-year, Private not-for-profit",1709 Concordia University,"7400 Augusta, River Forest, Illinois 60305-1499",www.cuchicago.edu,"4-year, Private not-for-profit",4185 Concordia University,"1530 Concordia West, Irvine, California 92612-3299",www.cui.edu,"4-year, Private not-for-profit",2543 Concordia University Texas,"11400 Concordia University Dr., Austin, Texas 78726",www.concordia.edu,"4-year, Private not-for-profit",2260 Concordia University-Ann Arbor,"4090 Geddes Rd, Ann Arbor, Michigan 48105",www.cuaa.edu,"4-year, Private not-for-profit",896 Concordia University-Saint Paul,"275 Syndicate Street North, Saint Paul, Minnesota 55104-5494",www.csp.edu,"4-year, Private not-for-profit",2644 Concordia University-Wisconsin,"12800 N Lake Shore Dr, Mequon, Wisconsin 53097-2402",www.cuw.edu,"4-year, Private not-for-profit",6549 Connecticut College,"270 Mohegan Ave, New London, Connecticut 06320",www.connecticutcollege.edu,"4-year, Private not-for-profit",1852 Converse College,"580 E Main St, Spartanburg, South Carolina 29302-0006",www.converse.edu,"4-year, Private not-for-profit",2068 Conway School of Landscape Design,"332 South Deerfield Rd, Conway, Massachusetts 01341-0179",www.csld.edu,"4-year, Private not-for-profit",19 Cooper Health System Center for Allied Health Education,"1 Cooper Plz, Camden, New Jersey 08103",www.cooperhealth.org,"4-year, Private not-for-profit",45 Cooper Union for the Advancement of Science and Art,"7 East 7th Street, New York, New York 10003-7120",www.cooper.edu,"4-year, Private not-for-profit",972 Coppin State University,"2500 West North Avenue, Baltimore, Maryland 21216-3698",www.coppin.edu,"4-year, Public",4051 Corban College,"5000 Deer Park Dr SE, Salem, Oregon 97317-9392",www.corban.edu,"4-year, Private not-for-profit",1031 Corcoran College of Art and Design,"500 Seventeenth St NW, Washington, District of Columbia 20006-4804",www.corcoran.edu,"4-year, Private not-for-profit",942 Cornell College,"600 First St. SW, Mount Vernon, Iowa 52314-1098",www.cornellcollege.edu,"4-year, Private not-for-profit",1112 Cornell University,"Ithaca, New York 14853",www.cornell.edu,"4-year, Private not-for-profit",20273 Cornerstone University,"1001 E Beltline Ave NE, Grand Rapids, Michigan 49525-5897",www.cornerstone.edu,"4-year, Private not-for-profit",2440 Cornish College of the Arts,"1000 Lenora Street, Seattle, Washington 98121",www.cornish.edu,"4-year, Private not-for-profit",815 Covenant College,"14049 Scenic Highway, Lookout Mountain, Georgia 30750-4164",www.covenant.edu,"4-year, Private not-for-profit",1343 Covenant Theological Seminary,"12330 Conway Road, Saint Louis, Missouri 63141-8697",www.covenantseminary.edu,"4-year, Private not-for-profit",823 Cox College,"1423 N Jefferson, Springfield, Missouri 65802",www.coxcollege.edu,"4-year, Private not-for-profit",427 Cranbrook Academy of Art,"39221 Woodward Avenue, Bloomfield Hills, Michigan 48304",www.cranbrook.edu,"4-year, Private not-for-profit",151 Creighton University,"2500 California Plaza, Omaha, Nebraska 68178",www.creighton.edu,"4-year, Private not-for-profit",7051 Crichton College,"255 N Highland, Memphis, Tennessee 38111-1375",www.crichton.edu,"4-year, Private not-for-profit",1016 Crossroads Bible College,"601 N Shortridge Rd, Indianapolis, Indiana 46219-4912",www.crossroads.edu,"4-year, Private not-for-profit",158 Crossroads College,"920 Mayowood Road SW, Rochester, Minnesota 55902-2382",www.crossroadscollege.edu,"4-year, Private not-for-profit",161 Crowley's Ridge College,"100 College Dr, Paragould, Arkansas 72450",www.crowleysridgecollege.edu,"4-year, primarily associate's, Private not-for-profit",175 Crown College,"8700 College View Drive, Saint Bonifacius, Minnesota 55375-9001",www.crown.edu,"4-year, Private not-for-profit",1229 Culinary Institute of America,"1946 Campus Drive, Hyde Park, New York 12538-1499",www.ciachef.edu,"4-year, primarily associate's, Private not-for-profit",2812 Culver-Stockton College,"1 College Hill, Canton, Missouri 63435-1299",www.culver.edu,"4-year, Private not-for-profit",810 Cumberland University,"One Cumberland Square, Lebanon, Tennessee 37087",www.cumberland.edu,"4-year, Private not-for-profit",1351 CUNY Bernard M Baruch College,"One Bernard Baruch Way (55 Lexington at 24th St), New York, New York 10010",www.baruch.cuny.edu,"4-year, Public",16321 CUNY Brooklyn College,"2900 Bedford Ave, Brooklyn, New York 11210-2889",www.brooklyn.cuny.edu,"4-year, Public",16689 CUNY City College,"160 Convent Ave, New York, New York 10031-9101",www.ccny.cuny.edu,"4-year, Public",15306 CUNY College of Staten Island,"2800 Victory Blvd, Staten Island, New York 10314",www.csi.cuny.edu,"4-year, Public",13092 CUNY Graduate School and University Center,"365 Fifth Ave, New York, New York 10016-4309",www.gc.cuny.edu,"4-year, Public",5944 CUNY Hunter College,"695 Park Ave, New York, New York 10065",www.hunter.cuny.edu,"4-year, Public",21258 CUNY John Jay College Criminal Justice,"899 Tenth Ave, New York, New York 10019",www.jjay.cuny.edu,"4-year, Public",14844 CUNY Lehman College,"Bedford Park Blvd W, Bronx, New York 10468",www.lehman.edu,"4-year, Public",11860 CUNY Medgar Evers College,"1650 Bedford Ave, Brooklyn, New York 11225-2010",www.mec.cuny.edu/default_int.asp,"4-year, primarily associate's, Public",6036 CUNY New York City College of Technology,"300 Jay St, Brooklyn, New York 11201-2983",www.citytech.cuny.edu,"4-year, primarily associate's, Public",14268 CUNY Queens College,"65-30 Kissena Blvd, Flushing, New York 11367-0904",www.qc.edu,"4-year, Public",19572 CUNY School of Law at Queens College,"65-21 Main St, Flushing, New York 11367",www.law.cuny.edu,"4-year, Public",388 CUNY York College,"94-20 Guy R Brewer Blvd, Jamaica, New York 11451",www.york.cuny.edu,"4-year, Public",7157 Curry College,"1071 Blue Hill Ave, Milton, Massachusetts 02186-2395",www.curry.edu,"4-year, Private not-for-profit",3097 Daemen College,"4380 Main St, Amherst, New York 14226-3592",www.daemen.edu,"4-year, Private not-for-profit",2716 Dakota State University,"820 N Washington, Madison, South Dakota 57042-1799",www.dsu.edu,"4-year, Public",2675 Dakota Wesleyan University,"1200 W University Ave, Mitchell, South Dakota 57301-4398",www.dwu.edu,"4-year, Private not-for-profit",730 Dallas Baptist University,"3000 Mountain Creek Parkway, Dallas, Texas 75211-9299",www.dbu.edu,"4-year, Private not-for-profit",5297 Dallas Christian College,"2700 Christian Pkwy, Dallas, Texas 75234-7299",www.dallas.edu,"4-year, Private not-for-profit",315 Dallas Theological Seminary,"3909 Swiss Ave, Dallas, Texas 75204",WWW.DTS.EDU,"4-year, Private not-for-profit",2024 Dalton State College,"650 College Drive, Dalton, Georgia 30720-3797",www.daltonstate.edu,"4-year, primarily associate's, Public",4957 Dana College,"2848 College Dr, Blair, Nebraska 68008",www.dana.edu,"4-year, Private not-for-profit",546 Daniel Webster College,"20 University Dr, Nashua, New Hampshire 03063-1300",www.dwc.edu,"4-year, Private not-for-profit",1007 Darkei Noam Rabbinical College,"2822 Ave J, Brooklyn, New York 11210",,"4-year, Private not-for-profit",17 Dartmouth College,"Hanover, New Hampshire 03755-3529",www.dartmouth.edu,"4-year, Private not-for-profit",5848 Davenport University,"6191 Kraft Avenue S.E., Grand Rapids, Michigan 49512-9396",www.davenport.edu,"4-year, Private not-for-profit",10773 Davenport University-Alma Location,"1500 N. Pine St, Alma, Michigan 48801-9069",www.davenport.edu,"4-year, Private not-for-profit", Davenport University-Caro Location,"1231 Cleaver Rd, Caro, Michigan 48723-9121",www.davenport.edu,"4-year, Private not-for-profit", Davenport University-Flint Location,"4318 Miller Road, Suite A, Flint, Michigan 48507-9121",www.davenport.edu,"4-year, Private not-for-profit", Davenport University-Fulton Street Location,"415 E Fulton St, Grand Rapids, Michigan 49503-9121",www.davenport.edu,"4-year, Private not-for-profit", Davenport University-Holland Location,"643 S Waverly Rd, Holland, Michigan 49423-9121",www.davenport.edu,"4-year, Private not-for-profit", Davenport University-Kalamazoo Location,"4123 W Main St, Kalamazoo, Michigan 49006-2791",www.davenport.edu,"4-year, Private not-for-profit", Davenport University-Lansing Location,"220 E Kalamazoo, Lansing, Michigan 48933-2197",www.davenport.edu,"4-year, Private not-for-profit", Davenport University-Livonia Location,"19499 Victor Parkway, Livonia, Michigan 48152-9069",,"4-year, Private not-for-profit", Davenport University-Merrillville Location,"8200 Georgia St, Merrillville, Indiana 46410-6128",www.davenport.edu,"4-year, Private not-for-profit", Davenport University-Midland Location,"3555 E Patrick Rd, Midland, Michigan 48642-3799",www.davenport.edu,"4-year, Private not-for-profit", Davenport University-Saginaw Location,"5300 Bay Rd, Saginaw, Michigan 48604-9069",davenport.edu,"4-year, Private not-for-profit", Davenport University-South Bend Location,"7121 Grape Road, Granger, Indiana 46530-9069",www.davenport.edu/tabid/323/default.aspx,"4-year, Private not-for-profit", Davenport University-Traverse City Location,"2200 Dendrinos Dr, Ste. 110, Traverse City, Michigan 49684-9121",www.davenport.edu,"4-year, Private not-for-profit", Davenport University-Warren Location,"27650 Dequindre Rd, Warren, Michigan 48092-5209",www.davenport.edu,"4-year, Private not-for-profit", Davidson College,"102 N. Main Street, Davidson, North Carolina 28035",www.davidson.edu/,"4-year, Private not-for-profit",1668 Davis & Elkins College,"100 Campus Dr, Elkins, West Virginia 26241-3996",www.davisandelkins.edu,"4-year, Private not-for-profit",580 Davis College,"400 Riverside Drive, Johnson City, New York 13790-2712",www.davisny.edu,"4-year, Private not-for-profit",325 Daytona State College,"1200 W. International Speedway Blvd., Daytona Beach, Florida 32114",www.DaytonaState.edu,"4-year, primarily associate's, Public",15030 Dean College,"99 Main Street, Franklin, Massachusetts 02038-1941",www.dean.edu,"4-year, primarily associate's, Private not-for-profit",1341 Defiance College,"701 N Clinton, Defiance, Ohio 43512",www.defiance.edu,"4-year, Private not-for-profit",1001 Delaware State University,"1200 N. Dupont Highway, Dover, Delaware 19901",www.desu.edu,"4-year, Public",3534 Delaware Valley College,"700 E Butler Ave, Doylestown, Pennsylvania 18901-2697",www.delval.edu,"4-year, Private not-for-profit",2152 Dell'Arte International School of Physical Theatre,"131 H Street, Blue Lake, California 95525-0816",www.dellarte.com/school,"4-year, Private not-for-profit",44 Delta State University,"Hwy 8 West, Cleveland, Mississippi 38733",www.deltastate.edu,"4-year, Public",4064 Denison University,"100 West College Rd, Granville, Ohio 43023-0713",www.denison.edu,"4-year, Private not-for-profit",2200 Denver Seminary,"6399 S. Santa Fe Drive, Littleton, Colorado 80120",www.denverseminary.edu,"4-year, Private not-for-profit",880 DePaul University,"55 E Jackson, Chicago, Illinois 60604",www.depaul.edu,"4-year, Private not-for-profit",24352 DePauw University,"313 S Locust St, Greencastle, Indiana 46135-1772",www.depauw.edu,"4-year, Private not-for-profit",2298 Des Moines University-Osteopathic Medical Center,"3200 Grand Ave, Des Moines, Iowa 50312",www.dmu.edu,"4-year, Private not-for-profit",1729 DeSales University,"2755 Station Avenue, Center Valley, Pennsylvania 18034-9568",www.desales.edu,"4-year, Private not-for-profit",3162 Design Institute of San Diego,"8555 Commerce Ave, San Diego, California 92121",WWW.DISD.EDU,"4-year, Private for-profit",253 DeVry College of New York,"3020 Thomson Ave, Long Island City, New York 11101-3051",www.devry.edu,"4-year, Private for-profit",1435 DeVry University-Arizona,"2149 W Dunlap Ave, Phoenix, Arizona 85021-2995",www.devry.edu,"4-year, Private for-profit",1700 DeVry University-California,"901 Corporate Ctr Dr, Pomona, California 91768-2642",www.devry.edu,"4-year, Private for-profit",7234 DeVry University-Colorado,"1870 West 122nd Avenue, Ste. 316, Westminster, Colorado 80234-2010",www.devry.edu,"4-year, Private for-profit",1308 DeVry University-Florida,"2300 SW 145th Ave, Miramar, Florida 33027",www.devry.edu,"4-year, Private for-profit",3586 DeVry University-Georgia,"250 N Arcadia Ave, Decatur, Georgia 30030-2198",www.devry.edu,"4-year, Private for-profit",5006 DeVry University-Illinois,"3300 N Campbell Ave, Chicago, Illinois 60618",www.devry.edu,"4-year, Private for-profit",24624 DeVry University-Indiana,"9100 Keystone Crossing, Ste 350, Indianapolis, Indiana 46240",www.devry.edu,"4-year, Private for-profit",590 DeVry University-Kentucky,"10172 Linn Station Rd, Louisville, Kentucky 40223",www.devry.edu,"4-year, Private for-profit",34 DeVry University-Maryland,"4550 Montgomery Ave, Suite 100 North, Bethesda, Maryland 20814-3304",www.devry.edu,"4-year, Private for-profit",95 DeVry University-Michigan,"26999 Central Park Blvd Ste 125, Southfield, Michigan 48076",www.devry.edu,"4-year, Private for-profit",41 DeVry University-Minnesota,"400 Hwy 169 S, Ste 100, St Louis Park, Minnesota 55426",www.devry.edu,"4-year, Private for-profit",357 DeVry University-Missouri,"11224 Holmes Road, Kansas City, Missouri 64131-3626",www.devry.edu,"4-year, Private for-profit",1450 DeVry University-Nevada,"2490 Paseo Verde Parkway, Ste 150, Henderson, Nevada 89074-7120",www.devry.edu,"4-year, Private for-profit",235 DeVry University-New Jersey,"630 US Hwy One, North Brunswick, New Jersey 08902-3362",www.devry.edu,"4-year, primarily associate's, Private for-profit",1292 DeVry University-North Carolina,"4521 Sharon Rd., Ste 145, Charlotte, North Carolina 28211-3627",www.devry.edu,"4-year, Private for-profit",642 DeVry University-Ohio,"1350 Alum Creek Dr, Columbus, Ohio 43209-2705",www.devry.edu,"4-year, Private for-profit",4035 DeVry University-Oklahoma,"4013 NW Expressway, Oklahoma City, Oklahoma 73116",www.devry.edu,"4-year, Private for-profit",81 DeVry University-Oregon,"Peterkort Center II - 9755 SW Barnes Road-Ste 150, Portland, Oregon 97225-6651",www.devry.edu,"4-year, Private for-profit",156 DeVry University-Pennsylvania,"1140 Virginia Dr, Fort Washington, Pennsylvania 19034-3204",www.devry.edu,"4-year, Private for-profit",2035 DeVry University-Tennessee,"6401 Poplar Ave Ste 600, Memphis, Tennessee 38119",www.devry.edu,"4-year, Private for-profit",193 DeVry University-Texas,"4800 Regent Blvd, Irving, Texas 75063-2439",www.devry.edu,"4-year, Private for-profit",4105 DeVry University-Utah,"9350 S. 150 East, Ste. 420, Sandy, Utah 84070",www.devry.edu,"4-year, Private for-profit",93 DeVry University-Virginia,"2450 Crystal Drive, Arlington, Virginia 22202-3843",www.devry.edu,"4-year, Private for-profit",916 DeVry University-Washington,"3600 S 344th Wy, Federal Way, Washington 98001-9558",www.devry.edu,"4-year, Private for-profit",903 DeVry University-Wisconsin,"100 E Wisconsin Ave, Ste 2550, Milwaukee, Wisconsin 53202",www.devry.edu,"4-year, Private for-profit",310 Dickinson College,"College and Louther Streets, Carlisle, Pennsylvania 17013-2896",www.dickinson.edu,"4-year, Private not-for-profit",2388 Dickinson State University,"291 Campus Drive, Dickinson, North Dakota 58601-4896",www.dickinsonstate.com,"4-year, Public",2730 DigiPen Institute of Technology,"5001-150th Ave NE, Redmond, Washington 98052",www.digipen.edu,"4-year, Private for-profit",915 Digital Media Arts College,"3785 N Federal Hwy, Boca Raton, Florida 33431",WWW.DMAC.EDU,"4-year, Private for-profit",406 Dillard University,"2601 Gentilly Blvd, New Orleans, Louisiana 70122",www.dillard.edu,"4-year, Private not-for-profit",851 Divine Word College,"102 Jacoby Dr SW, Epworth, Iowa 52045",www.dwci.edu,"4-year, primarily associate's, Private not-for-profit",61 Dixie State College of Utah,"225 S 700 E, Saint George, Utah 84770-3876",new.dixie.edu/,"4-year, primarily associate's, Public",6086 Doane College,"1014 Boswell, Crete, Nebraska 68333",www.doane.edu,"4-year, Private not-for-profit",894 Doane College-Lincoln Grand Island and Master,"303 N 52nd St, Lincoln, Nebraska 68504",www.doane.edu,"4-year, Private not-for-profit",1651 Dominican College of Blauvelt,"470 Western Highway, Orangeburg, New York 10962-1210",www.dc.edu,"4-year, Private not-for-profit",1977 Dominican House of Studies,"487 Michigan Ave, NE, Washington, District of Columbia 20017-1585",WWW.DHS.EDU,"4-year, Private not-for-profit",91 Dominican School of Philosophy & Theology,"2301 Vine Street, Berkeley, California 94708-1816",www.dspt.edu,"4-year, Private not-for-profit",83 Dominican University,"7900 W Division St, River Forest, Illinois 60305",www.dom.edu/,"4-year, Private not-for-profit",3413 Dominican University of California,"50 Acacia Ave, San Rafael, California 94901-2298",www.dominican.edu,"4-year, Private not-for-profit",2071 Dongguk Royal University,"440 Shatto Pl, Los Angeles, California 90020-1704",www.dru.edu,"4-year, Private not-for-profit",187 Donnelly College,"608 N 18th St, Kansas City, Kansas 66102",donnelly.edu,"4-year, primarily associate's, Private not-for-profit",634 Dordt College,"498 4th Ave NE, Sioux Center, Iowa 51250-1697",www.dordt.edu,"4-year, Private not-for-profit",1361 Dowling College,"150 Idle Hour Blvd, Oakdale, New York 11769-1999",WWW.DOWLING.EDU,"4-year, Private not-for-profit",5706 Dragon Rises College of Oriental Medicine,"1000 NE 16th Ave., Building F, Gainesville, Florida 32601",,"4-year, Private for-profit",36 Drake University,"2507 University Avenue, Des Moines, Iowa 50311-4505",www.drake.edu,"4-year, Private not-for-profit",5668 Drew University,"36 Madison Ave, Madison, New Jersey 07940",www.drew.edu,"4-year, Private not-for-profit",2581 Drexel University,"3141 Chestnut St, Philadelphia, Pennsylvania 19104",www.drexel.edu,"4-year, Private not-for-profit",21537 Drury University,"900 N.Benton, Springfield, Missouri 65802-3791",www.drury.edu,"4-year, Private not-for-profit",5260 Duke University,"103 Allen Bldg, Durham, North Carolina 27708",WWW.DUKE.EDU,"4-year, Private not-for-profit",14060 Dunwoody College of Technology,"818 Dunwoody Blvd, Minneapolis, Minnesota 55403-1192",www.dunwoody.edu,"4-year, primarily associate's, Private not-for-profit",1667 Duquesne University,"Administration Bldg 600 Forbes Ave, Pittsburgh, Pennsylvania 15282",www.duq.edu,"4-year, Private not-for-profit",10106 D'Youville College,"320 Porter Ave, Buffalo, New York 14201-1084",www.dyc.edu,"4-year, Private not-for-profit",2943 Eagle Gate College,"915 N 400 W, Layton, Utah 84041",www.eaglegatecollege.edu,"4-year, primarily associate's, Private for-profit",119 Eagle Gate College,"5588 South Green Street, Murray, Utah 84123-6965",EAGLEGATECOLLEGE.EDU,"4-year, primarily associate's, Private for-profit",406 Earlham College,"801 National Rd West, Richmond, Indiana 47374-4095",www.earlham.edu,"4-year, Private not-for-profit",1336 East Carolina University,"East 5th Street, Greenville, North Carolina 27858-4353",www.ecu.edu,"4-year, Public",27677 East Central University,"1100 E. 14, Ada, Oklahoma 74820-6899",www.ecok.edu,"4-year, Public",4361 East Stroudsburg University of Pennsylvania,"200 Prospect Street, East Stroudsburg, Pennsylvania 18301-2999",www.esu.edu,"4-year, Public",7234 East Tennessee State University,"807 University Pky, Johnson City, Tennessee 37614-0000",www.etsu.edu,"4-year, Public",13646 East Texas Baptist University,"1209 N Grove, Marshall, Texas 75670-1498",www.etbu.edu,"4-year, Private not-for-profit",1210 East West College of Natural Medicine,"3808 N. Tamiami Tr, Sarasota, Florida 34234-0000",ewcollege.org,"4-year, Private for-profit",120 Eastern Connecticut State University,"83 Windham St, Willimantic, Connecticut 06226",www.easternct.edu/,"4-year, Public",5427 Eastern Illinois University,"600 Lincoln Avenue, Charleston, Illinois 61920",www.eiu.edu,"4-year, Public",12040 Eastern Kentucky University,"521 Lancaster Ave, Richmond, Kentucky 40475-3102",www.eku.edu,"4-year, Public",16031 Eastern Mennonite University,"1200 Park Rd, Harrisonburg, Virginia 22802-2462",www.emu.edu/l/collegenavigator,"4-year, Private not-for-profit",1387 Eastern Michigan University,"Ypsilanti, Michigan 48197",www.emich.edu,"4-year, Public",22032 Eastern Nazarene College,"23 E Elm Ave, Quincy, Massachusetts 02170-2999",www.enc.edu,"4-year, Private not-for-profit",1000 Eastern New Mexico University-Main Campus,"1500 S Ave K, Portales, New Mexico 88130",www.enmu.edu,"4-year, Public",4294 Eastern Oregon University,"One University Blvd, La Grande, Oregon 97850",www.eou.edu,"4-year, Public",3666 Eastern University,"1300 Eagle Rd, Saint Davids, Pennsylvania 19087-3696",www.eastern.edu,"4-year, Private not-for-profit",4364 Eastern Virginia Medical School,"700w. Olney, Norfolk, Virginia 23507",www.evms.edu,"4-year, Private not-for-profit",747 Eastern Washington University,"526 5th Street, Cheney, Washington 99004-2496",www.ewu.edu/Home.xml,"4-year, Public",10809 East-West University,"816 S Michigan Ave, Chicago, Illinois 60605",www.eastwest.edu,"4-year, primarily associate's, Private not-for-profit",1171 Ecclesia College,"9653 Nations Dr, Springdale, Arkansas 72762",www.ecollege.edu,"4-year, Private not-for-profit",235 Eckerd College,"4200 54th Ave S, Saint Petersburg, Florida 33711-4700",www.eckerd.edu,"4-year, Private not-for-profit",2508 ECPI College of Technology,"5555 Greenwich Rd Ste 300, Virginia Beach, Virginia 23462",www.ecpi.edu,"4-year, primarily associate's, Private for-profit",8543 ECPI Technical College,"5234 Airport Rd, Roanoke, Virginia 24012",www.ecpitech.edu,"4-year, primarily associate's, Private for-profit",374 ECPI Technical College,"800 Moorefield Pk Dr, Richmond, Virginia 23236",www.ecpitech.edu,"4-year, primarily associate's, Private for-profit",605 Ecumenical Theological Seminary,"2930 Woodward Ave, Detroit, Michigan 48201",www.etseminary.org,"4-year, Private not-for-profit",132 Eden Theological Seminary,"475 E Lockwood Ave, Webster Grove, Missouri 63119-3192",www.eden.edu,"4-year, Private not-for-profit",213 Edgewood College,"1000 Edgewood College Drive, Madison, Wisconsin 53711-1997",www.edgewood.edu,"4-year, Private not-for-profit",2544 Edinboro University of Pennsylvania,"219 Meadville Street, Edinboro, Pennsylvania 16444-0001",webs.edinboro.edu/welcome/,"4-year, Public",7671 Edison State College,"8099 College Pky SW, Fort Myers, Florida 33919-0000",www.edison.edu,"4-year, primarily associate's, Public",13007 Edison State Community College,"1973 Edison Dr, Piqua, Ohio 45356-9239",www.edisonOHIO.edu,"4-year, Public",3343 EDP College of Puerto Rico Inc,"560 Ponce de Leon Ave. Cr. Arroyo St., San Juan, Puerto Rico 00919-2303",www.edpcollege.edu,"4-year, Private for-profit",1016 EDP College of Puerto Rico Inc-San Sebastian,"Betances # 49, San Sebastian, Puerto Rico 00685",www.edpcollege.edu,"4-year, Private for-profit",858 Edward Via Virginia College of Osteopathic Medicine,"2265 Kraft Dr, Blacksburg, Virginia 24060",www.vcom.vt.edu,"4-year, Private not-for-profit",676 Edward Waters College,"1658 Kings Rd, Jacksonville, Florida 32209",www.ewc.edu,"4-year, Private not-for-profit",843 Elizabeth City State University,"1704 Weeksville Rd, Elizabeth City, North Carolina 27909",www.ecsu.edu,"4-year, Public",3104 Elizabethtown College,"One Alpha Dr, Elizabethtown, Pennsylvania 17022-2298",www.etown.edu,"4-year, Private not-for-profit",2311 Ellis University,"111 N Canal St Ste 380, Chicago, Illinois 60606",www.ellis.edu,"4-year, Private not-for-profit",814 Elmhurst College,"190 Prospect Ave, Elmhurst, Illinois 60126-3096",public.elmhurst.edu,"4-year, Private not-for-profit",3316 Elmira College,"One Park Place, Elmira, New York 14901",www.elmira.edu,"4-year, Private not-for-profit",1639 Elon University,"100 Campus Drive, Elon, North Carolina 27244-2010",www.elon.edu,"4-year, Private not-for-profit",5628 Embry Riddle Aeronautical University-Daytona Beach,"600 S Clyde Morris Blvd, Daytona Beach, Florida 32114-3900",www.erau.edu,"4-year, Private not-for-profit",5062 Embry Riddle Aeronautical University-Prescott,"3700 Willow Creek Road, Prescott, Arizona 86301-3720",www.erau.edu,"4-year, Private not-for-profit",1719 Embry Riddle Aeronautical University-Worldwide,"600 S. Clyde Morris Blvd., Daytona Beach, Florida 32114-3900",www.erau.edu,"4-year, Private not-for-profit",15225 Emerson College,"120 Boylston Street, Boston, Massachusetts 02116-4624",www.emerson.edu,"4-year, Private not-for-profit",4536 Emmanuel College,"181 Springs St, Franklin Springs, Georgia 30639",www.ec.edu,"4-year, Private not-for-profit",697 Emmanuel College,"400 the Fenway, Boston, Massachusetts 02115",www.emmanuel.edu,"4-year, Private not-for-profit",2412 Emmanuel School of Religion,"One Walker Dr, Johnson City, Tennessee 37601-9989",www.esr.edu,"4-year, Private not-for-profit",133 Emmaus Bible College,"2570 Asbury Rd, Dubuque, Iowa 52001-3096",www.emmaus.edu,"4-year, primarily associate's, Private not-for-profit",245 Emory and Henry College,"1 Garnand Drive, Emory, Virginia 24327-0947",www.ehc.edu,"4-year, Private not-for-profit",1015 Emory University,"408 Administration Building, 201 Dowman Drive, Atlanta, Georgia 30322",www.emory.edu,"4-year, Private not-for-profit",12755 Emperor's College of Traditional Oriental Medicine,"1807 Wilshire Blvd, Ste #200, Santa Monica, California 90403",www.emperors.edu,"4-year, Private for-profit",218 Emporia State University,"1200 Commercial, Emporia, Kansas 66801-5087",www.emporia.edu,"4-year, Public",6404 Endicott College,"376 Hale St, Beverly, Massachusetts 01915",www.endicott.edu,"4-year, Private not-for-profit",3717 Episcopal Divinity School,"99 Brattle St, Cambridge, Massachusetts 02138-3494",www.eds.edu,"4-year, Private not-for-profit",80 Episcopal Theological Seminary of the Southwest,"501 E. 32nd St., Austin, Texas 78705",www.ssw.edu,"4-year, Private not-for-profit",75 Erikson Institute,"451 N. LaSalle Street, Chicago, Illinois 60654-4510",www.erikson.edu,"4-year, Private not-for-profit",294 Erskine College and Seminary,"2 Washington St, Due West, South Carolina 29639",www.erskine.edu,"4-year, Private not-for-profit",864 Escuela de Artes Plasticas de Puerto Rico,"Barrio Ballaja Campo Del Morro, San Juan, Puerto Rico 00902-1112",www.eap.edu,"4-year, Public",512 Eugene Bible College,"2155 Bailey Hill Rd, Eugene, Oregon 97405",EBC.EDU,"4-year, Private not-for-profit",129 Eureka College,"300 E. College Ave., Eureka, Illinois 61530",www.eureka.edu,"4-year, Private not-for-profit",753 Evangel University,"1111 N Glenstone, Springfield, Missouri 65802",www.evangel.edu,"4-year, Private not-for-profit",1911 Evangelical Theological Seminary,"121 S College St, Myerstown, Pennsylvania 17067-1222",www.evangelical.edu,"4-year, Private not-for-profit",158 Everest College-Mesa,"5416 East Baseline Ste. 200, Mesa, Arizona 85206",www.everest.edu/campus/mesa,"4-year, primarily associate's, Private for-profit",116 Everest College-Ontario Metro,"1819 South Excise Avenue, Ontario, California 91761",www.everest.edu/campus/ontario_metro,"4-year, primarily associate's, Private for-profit",307 Everest College-Phoenix,"10400 N. 25th Avenue, Suite 190, Phoenix, Arizona 85021-1641",www.everest.edu/campus/phoenix,"4-year, primarily associate's, Private for-profit",3350 Everest College-Springfield Campus,"1010 W Sunshine, Springfield, Missouri 65807",www.everest.edu/campus/springfield,"4-year, primarily associate's, Private for-profit",584 Everest College-West Valley City,"3280 W 3500 S, West Valley City, Utah 84119-2632",www.everest.edu/campus/salt_lake_city,"4-year, primarily associate's, Private for-profit",179 Everest University-Brandon,"3924 Coconut Palm Dr, Tampa, Florida 33619-1354",www.everest.edu/campus/brandon,"4-year, primarily associate's, Private for-profit",7251 Everest University-Jacksonville,"8226 Phillips Hwy, Jacksonville, Florida 32256-1240",www.everest.edu/campus/jacksonville,"4-year, primarily associate's, Private for-profit",377 Everest University-Lakeland,"995 E Memorial Blvd Suite110, Lakeland, Florida 33801",www.everest.edu/campus/lakeland,"4-year, primarily associate's, Private for-profit",1184 Everest University-Largo,"1199 East Bay Drive, Largo, Florida 33770-2556",www.everest.edu/campus/largo,"4-year, primarily associate's, Private for-profit",829 Everest University-Melbourne,"2401 N Harbor City Blvd, Melbourne, Florida 32935",www.everest.edu/campus/melbourne,"4-year, primarily associate's, Private for-profit",419 Everest University-North Orlando,"5421 Diplomat Circle, Orlando, Florida 32810",www.everest.edu/campus/north_orlando,"4-year, primarily associate's, Private for-profit",1901 Everest University-Orange Park,"805 Wells Rd, Orange Park, Florida 32073",www.everest.edu/campus/orange_park,"4-year, primarily associate's, Private for-profit",313 Everest University-Pompano Beach,"225 N. Federal Hwy., Pompano Beach, Florida 33062",www.everest.edu/campus/pompano_beach,"4-year, primarily associate's, Private for-profit",582 Everest University-South Orlando,"9200 Soutpark Center Loop, Orlando, Florida 32819",www.everest.edu/campus/south_orlando,"4-year, primarily associate's, Private for-profit",11548 Everest University-Tampa,"3319 W Hillsborough Ave, Tampa, Florida 33614",www.everest.edu/campus/tampa,"4-year, primarily associate's, Private for-profit",1730 Everglades University,"5002 T-Rex Avenue, Suite 100, Boca Raton, Florida 33431",www.evergladesuniversity.edu,"4-year, Private not-for-profit",1077 Everglades University-Orlando,"5600 Lake Underhill Rd.-Suite 200, Orlando, Florida 32807",www.evergladesuniversity.edu,"4-year, Private not-for-profit", Everglades University-Sarasota,"6001Lake Osprey Dr., Sarasota, Florida 34240",www.evergladesuniversity.edu,"4-year, Private not-for-profit", Excelsior College,"7 Columbia Cir, Albany, New York 12203-5159",www.excelsior.edu,"4-year, Private not-for-profit",33453 Ex-Pression College for Digital Arts,"6601 Shellmond St, Emeryville, California 94608",www.expression.edu,"4-year, Private for-profit",1200 Facultad de Derecho Eugenio Maria de Hostos,"Calle Peral #57 Sur, Mayaguez, Puerto Rico 00680",www.hostos.edu,"4-year, Private not-for-profit",205 Fairfield University,"1073 N Benson Rd, Fairfield, Connecticut 06824-5195",www.fairfield.edu,"4-year, Private not-for-profit",5128 Fairleigh Dickinson University-College at Florham,"285 Madison Ave, Madison, New Jersey 07940",www.fdu.edu,"4-year, Private not-for-profit",3465 Fairleigh Dickinson University-Metropolitan Campus,"1000 River Rd, Teaneck, New Jersey 07666",www.fdu.edu,"4-year, Private not-for-profit",8693 Fairmont State University,"1201 Locust Ave, Fairmont, West Virginia 26554-2470",www.fairmontstate.edu/,"4-year, Public",4547 Faith Baptist Bible College and Theological Seminary,"1900 NW 4th St, Ankeny, Iowa 50023-2152",www.faith.edu,"4-year, Private not-for-profit",392 Faith Evangelical Seminary,"3504 N Pearl St, Tacoma, Washington 98407-0186",www.faithseminary.edu,"4-year, Private not-for-profit",192 Family of Faith College,"30 Kinville, Shawnee, Oklahoma 74802",www.familyoffaithcollege.edu,"4-year, Private not-for-profit",59 Farmingdale State College,"2350 Broadhollow Road, Farmingdale, New York 11735-1021",WWW.FARMINGDALE.EDU,"4-year, primarily associate's, Public",6850 Fashion Institute of Technology,"227 W 27th St, New York, New York 10001-5992",www.fitnyc.edu,"4-year, primarily associate's, Public",10065 Faulkner University,"5345 Atlanta Hwy, Montgomery, Alabama 36109-3378",www.faulkner.edu,"4-year, Private not-for-profit",3103 Fayetteville State University,"1200 Murchison Rd, Fayetteville, North Carolina 28301-4298",www.uncfsu.edu,"4-year, Public",6217 Felician College,"262 S Main St, Lodi, New Jersey 07644",www.felician.edu,"4-year, Private not-for-profit",2040 Ferris State University,"1201 S State St, Big Rapids, Michigan 49307-2251",www.ferris.edu/,"4-year, Public",13532 Ferrum College,"215 Ferrum Mountain Road, Ferrum, Virginia 24088-9000",www.ferrum.edu,"4-year, Private not-for-profit",1397 Fielding Graduate University,"2112 Santa Barbara St, Santa Barbara, California 93105-3538",www.fielding.edu,"4-year, Private not-for-profit",1735 Finlandia University,"601 Quincy St, Hancock, Michigan 49930-1832",www.finlandia.edu,"4-year, Private not-for-profit",521 Fisher College,"118 Beacon St, Boston, Massachusetts 02116",www.fisher.edu,"4-year, primarily associate's, Private not-for-profit",1260 Fisk University,"1000 17th Ave N, Nashville, Tennessee 37208-4501",www.fisk.edu,"4-year, Private not-for-profit",726 Fitchburg State College,"160 Pearl St, Fitchburg, Massachusetts 01420-2697",WWW.FSC.EDU,"4-year, Public",6761 Five Branches University,"200 7th Avenue, Santa Cruz, California 95062",www.fivebranches.edu,"4-year, Private not-for-profit",289 Five Towns College,"305 North Service Road, Dix Hills, New York 11746-5871",www.ftc.edu,"4-year, Private for-profit",1163 Flagler College,"74 King Street, Saint Augustine, Florida 32084",www.flagler.edu,"4-year, Private not-for-profit",2662 Flagler College-Tallahassee,"444 Appleyard Dr, Tallahassee, Florida 32304",www.flagler.edu,"4-year, Private not-for-profit",463 Florida Agricultural and Mechanical University,"Tallahassee, Florida 32307",www.famu.edu,"4-year, Public",11857 Florida Atlantic University,"777 Glades Rd, Boca Raton, Florida 33431-0991",www.fau.edu/,"4-year, Public",26839 Florida Career College,"1321 SW 107 Ave Ste 201B, Miami, Florida 33174",www.careercollege.edu,"4-year, primarily associate's, Private for-profit",2948 Florida Christian College Inc,"1011 Bill Beck Blvd, Kissimmee, Florida 34744",www.fcc.edu,"4-year, Private not-for-profit",230 Florida Coastal School of Law,"8787 Baypine Road, Jacksonville, Florida 32256",www.fcsl.edu,"4-year, Private for-profit",1470 Florida College,"119 N Glen Arven Ave, Temple Terrace, Florida 33617-5578",www.floridacollege.edu,"4-year, primarily associate's, Private not-for-profit",506 Florida College of Integrative Medicine,"7100 Lake Ellenor Dr, Orlando, Florida 32809-5721",www.fcim.edu,"4-year, Private for-profit",143 Florida Community College at Jacksonville,"501 W State St, Jacksonville, Florida 32202",www.fccj.edu,"4-year, primarily associate's, Public",25903 Florida Gulf Coast University,"10501 Fgcu Blvd S, Fort Myers, Florida 33965-6565",www.fgcu.edu,"4-year, Public",10204 Florida Hospital College of Health Sciences,"671 Winyah Drive, Orlando, Florida 32803",www.fhchs.edu,"4-year, Private not-for-profit",2390 Florida Institute of Technology,"150 West University Boulevard, Melbourne, Florida 32901-6975",www.fit.edu,"4-year, Private not-for-profit",6400 Florida International University,"11200 S. W. 8 Street, Miami, Florida 33199",www.fiu.edu,"4-year, Public",38759 Florida Memorial University,"15800 NW 42 Ave, Miami Gardens, Florida 33054-6199",www.fmuniv.edu,"4-year, Private not-for-profit",1816 Florida National College,"4425 West 20 Avenue, Hialeah, Florida 33012",www.fnc.edu,"4-year, primarily associate's, Private for-profit",2369 Florida National College-South Campus,"11865 SW 26 St, Miami, Florida 33175-2478",www.fnc.edu,"4-year, Private for-profit", Florida Southern College,"111 Lake Hollingsworth Dr, Lakeland, Florida 33801-5698",www.flsouthern.edu,"4-year, Private not-for-profit",2319 Florida State University,"211 Westcott Bldg, Tallahassee, Florida 32306-1037",www.fsu.edu,"4-year, Public",38682 Fontbonne University,"6800 Wydown Blvd, Saint Louis, Missouri 63105-3098",www.fontbonne.edu,"4-year, Private not-for-profit",2967 Fordham University,"441 E Fordham Rd, Bronx, New York 10458",www.fordham.edu,"4-year, Private not-for-profit",14666 Forest Institute of Professional Psychology,"2885 W Battlefield Rd, Springfield, Missouri 65807",www.forest.edu,"4-year, Private not-for-profit",231 Fort Hays State University,"600 Park St, Hays, Kansas 67601-4099",www.fhsu.edu,"4-year, Public",10107 Fort Lewis College,"1000 Rim Drive, Durango, Colorado 81301-3999",www.fortlewis.edu,"4-year, Public",3740 Fort Valley State University,"1005 State University Dr, Fort Valley, Georgia 31030-4313",www.fvsu.edu,"4-year, Public",3106 Fountainhead College of Technology,"3203 Tazewell Pke, Knoxville, Tennessee 37918",www.fountainheadcollege.edu,"4-year, primarily associate's, Private for-profit",116 Framingham State College,"100 State Street, Framingham, Massachusetts 01701-9101",www.framingham.edu,"4-year, Public",6086 Francis Marion University,"4822 East Palmetto Street, Florence, South Carolina 29506",www.fmarion.edu,"4-year, Public",4020 Franciscan School of Theology,"1712 Euclid Ave, Berkeley, California 94709-1208",www.fst.edu,"4-year, Private not-for-profit",69 Franciscan University of Steubenville,"1235 University Blvd, Steubenville, Ohio 43952-1763",www.franciscan.edu,"4-year, Private not-for-profit",2449 Franklin and Marshall College,"College Ave, Lancaster, Pennsylvania 17604-3003",WWW.FANDM.EDU,"4-year, Private not-for-profit",2164 Franklin College,"101 Branigin Blvd, Franklin, Indiana 46131-2623",www.franklincollege.edu,"4-year, Private not-for-profit",1153 Franklin Pierce Law Center,"2 White St, Concord, New Hampshire 03301-4197",www.piercelaw.edu,"4-year, Private not-for-profit",481 Franklin Pierce University,"40 University Drive, Rindge, New Hampshire 03461-0060",www.franklinpierce.edu,"4-year, Private not-for-profit",2535 Franklin University,"201 S Grant Ave, Columbus, Ohio 43215-5399",www.franklin.edu,"4-year, Private not-for-profit",7683 Franklin W. Olin College of Engineering,"Olin Way, Needham, Massachusetts 02492-1200",www.olin.edu,"4-year, Private not-for-profit",308 Free Will Baptist Bible College,"3606 West End Ave, Nashville, Tennessee 37205-0117",WWW.FWBBC.EDU,"4-year, Private not-for-profit",317 Freed-Hardeman University,"158 E Main St, Henderson, Tennessee 38340-2399",www.fhu.edu,"4-year, Private not-for-profit",2061 Fresno Pacific University,"1717 S Chestnut Ave, Fresno, California 93702-4709",www.fresno.edu,"4-year, Private not-for-profit",2436 Friends University,"2100 W. University Ave., Wichita, Kansas 67213",www.friends.edu,"4-year, Private not-for-profit",2727 Frontier School of Midwifery and Family Nursing,"195 School Street, Hyden, Kentucky 41749",www.midwives.org,"4-year, Private not-for-profit",559 Frostburg State University,"101 Braddock Road, Frostburg, Maryland 21532-1099",www.frostburg.edu,"4-year, Public",5215 Full Sail University,"3300 University Blvd, Winter Park, Florida 32792-7429",www.fullsail.com,"4-year, Private for-profit",6979 Fuller Theological Seminary in California,"135 N Oakland Ave, Pasadena, California 91182",www.fuller.edu,"4-year, Private not-for-profit",2957 Furman University,"3300 Poinsett Highway, Greenville, South Carolina 29613-6162",www.furman.edu,"4-year, Private not-for-profit",2977 Gainesville State College,"3820 Mundy Mill Rd, Oakwood, Georgia 30566",www.gsc.edu,"4-year, primarily associate's, Public",8238 Gallaudet University,"800 Florida Ave, NE, Washington, District of Columbia 20002-3695",www.gallaudet.edu,"4-year, Private not-for-profit",1389 Gannon University,"109 W Sixth St, Erie, Pennsylvania 16541-0001",www.gannon.edu,"4-year, Private not-for-profit",4197 Gardner-Webb University,"Main St, Boiling Springs, North Carolina 28017-0997",www.gardner-webb.edu,"4-year, Private not-for-profit",4070 Garrett-Evangelical Theological Seminary,"2121 Sheridan Road, Evanston, Illinois 60201-3298",www.garrett.edu,"4-year, Private not-for-profit",362 Gemological Institute of America,"5345 Armada Dr, Carlsbad, California 92008",www.gia.edu,"4-year, primarily associate's, Private not-for-profit",2366 Geneva College,"3200 College Ave, Beaver Falls, Pennsylvania 15010-3599",www.geneva.edu,"4-year, Private not-for-profit",1951 George Fox University,"414 N Meridian St, Newberg, Oregon 97132",www.georgefox.edu,"4-year, Private not-for-profit",3383 George Mason University,"4400 University Dr, Fairfax, Virginia 22030-4444",www.gmu.edu,"4-year, Public",30613 George Washington University,"2121 I Street, NW, Washington, District of Columbia 20052",www.gwu.edu,"4-year, Private not-for-profit",25116 Georgetown College,"400 East College Street, Georgetown, Kentucky 40324",www.georgetowncollege.edu,"4-year, Private not-for-profit",1856 Georgetown University,"37th and O St NW, Washington, District of Columbia 20057",www.georgetown.edu,"4-year, Private not-for-profit",15318 Georgia College & State University,"231 W Hancock Street, Milledgeville, Georgia 31061",WWW.GCSU.EDU,"4-year, Public",6506 Georgia Gwinnett College,"1000 University Center Lane, Lawrenceville, Georgia 30043",www.ggc.usg.edu,"4-year, Public",1563 Georgia Institute of Technology-Main Campus,"225 North Ave, Atlanta, Georgia 30332-0530",www.gatech.edu,"4-year, Public",19413 Georgia Southern University,"Hwy 301 South, Statesboro, Georgia 30460",www.georgiasouthern.edu,"4-year, Public",17764 Georgia Southwestern State University,"800 Georgia Southwestern State University Dr., Americus, Georgia 31709-4693",,"4-year, Public",2717 Georgia State University,"33 gilmer st, Atlanta, Georgia 30303-3083",www.gsu.edu,"4-year, Public",28229 Georgian Court University,"900 Lakewood Ave, Lakewood, New Jersey 08701-2697",www.georgian.edu,"4-year, Private not-for-profit",3189 Gettysburg College,"300 N Washington St, Gettysburg, Pennsylvania 17325-1486",WWW.GETTYSBURG.EDU,"4-year, Private not-for-profit",2480 Glenville State College,"200 High Street, Glenville, West Virginia 26351-1292",www.glenville.edu,"4-year, Public",1443 Globe Institute of Technology,"291 Broadway, New York, New York 10007",www.globeinstitute.org,"4-year, primarily associate's, Private for-profit",229 Globe University,"8089 Globe Drive, Woodbury, Minnesota 55125-3388",www.globeuniversity.edu,"4-year, primarily associate's, Private for-profit",771 Goddard College,"123 Pitkin Road, Plainfield, Vermont 05667-9432",www.goddard.edu,"4-year, Private not-for-profit",731 Gods Bible School and College,"1810 Young Street, Cincinnati, Ohio 45202-6838",www.gbs.edu,"4-year, Private not-for-profit",278 Golden Gate University-Los Angeles,"725 S. Figueroa Street, Suite 1550, Los Angeles, California 90017-5418",www.ggu.edu,"4-year, Private not-for-profit", Golden Gate University-Monterey,"500 8th Street, Marina, California 93933-3833",www.ggu.edu,"4-year, Private not-for-profit", Golden Gate University-Roseville,"7 Sierra Gate Plaza, Suite 101, Roseville, California 95678-5418",WWW.GGU.EDU,"4-year, Private not-for-profit", Golden Gate University-San Francisco,"536 Mission Street, San Francisco, California 94105-2968",www.ggu.edu,"4-year, Private not-for-profit",3528 Golden Gate University-San Jose,"50 Airport Parkway, Suite 150, San Jose, California 95110-2218",WWW.GGU.EDU,"4-year, Private not-for-profit", Golden Gate University-Seattle,"1424 4th Avenue, Suite 4F, Seattle, Washington 98101-2218",www.ggu.edu,"4-year, Private not-for-profit", Golden Gate University-Walnut Creek,"One Ygnacio Center, 2nd Floor Annex, Suite 20, 1990 N. California Blvd., Walnut Creek, California 94596-3833",www.ggu.edu,"4-year, Private not-for-profit", Goldey-Beacom College,"4701 Limestone Rd, Wilmington, Delaware 19808",www.gbc.edu,"4-year, Private not-for-profit",1340 Gonzaga University,"E 502 Boone Ave, Spokane, Washington 99258-0001",www.gonzaga.edu,"4-year, Private not-for-profit",7272 Gooding Institute of Nurse Anesthesia,"615 N Bonita Ave, Panama City, Florida 32401",www.baymedical.org,"4-year, Public",48 Gordon College,"255 Grapevine Rd, Wenham, Massachusetts 01984",www.gordon.edu,"4-year, Private not-for-profit",1717 Gordon College,"419 College Dr, Barnesville, Georgia 30204",www.gdn.edu,"4-year, primarily associate's, Public",3855 Gordon-Conwell Theological Seminary,"130 Essex St, South Hamilton, Massachusetts 01982",www.gordonconwell.edu,"4-year, Private not-for-profit",2008 Goshen College,"1700 S Main St, Goshen, Indiana 46526-4794",www.goshen.edu,"4-year, Private not-for-profit",957 Goucher College,"1021 Dulaney Valley Rd, Baltimore, Maryland 21204-2794",WWW.GOUCHER.EDU,"4-year, Private not-for-profit",2319 Governors State University,"1 University Pky, University Park, Illinois 60466-0975",www.govst.edu,"4-year, Public",5636 Grace Bible College,"1011 Aldon SW, Wyoming, Michigan 49509",www.gbcol.edu,"4-year, Private not-for-profit",179 Grace College and Theological Seminary,"200 Seminary Dr, Winona Lake, Indiana 46590-1274",www.grace.edu,"4-year, Private not-for-profit",1509 Grace University,"1311 S 9th St, Omaha, Nebraska 68108-3629",www.GraceUniversity.edu,"4-year, Private not-for-profit",433 Graceland University,"1401 W Truman Rd, Independence, Missouri 64050-3434",www.graceland.edu,"4-year, Private not-for-profit", Graceland University-Lamoni,"1 University Place, Lamoni, Iowa 50140",www.graceland.edu,"4-year, Private not-for-profit",2444 Graduate Theological Union,"2400 Ridge Rd, Berkeley, California 94709",WWW.GTU.EDU,"4-year, Private not-for-profit",234 Grambling State University,"403 Main Street, Grambling, Louisiana 71245",www.gram.edu,"4-year, Public",5253 Grand Canyon University,"3300 W Camelback Rd, Phoenix, Arizona 85017",www.gcu.edu,"4-year, Private for-profit",22025 Grand Valley State University,"1 Campus Dr, Allendale, Michigan 49401-9403",www.gvsu.edu,"4-year, Public",23892 Grand View University,"1200 Grandview Ave, Des Moines, Iowa 50316",WWW.GVC.EDU,"4-year, Private not-for-profit",1936 Granite State College,"8 Old Suncook Road, Concord, New Hampshire 03301-7317",www.granite.edu,"4-year, Public",1542 Gratz College,"7605 Old York Rd, Melrose Park, Pennsylvania 19027-3010",www.gratz.edu/,"4-year, Private not-for-profit",423 Great Basin College,"1500 College Pky, Elko, Nevada 89801",www.gbcnv.edu,"4-year, primarily associate's, Public",3436 Great Lakes Christian College,"6211 W Willow Hwy, Lansing, Michigan 48917-1299",www.glcc.edu,"4-year, Private not-for-profit",258 Green Mountain College,"One Brennan Cir, Poultney, Vermont 05764-1199",www.greenmtn.edu,"4-year, Private not-for-profit",867 Greensboro College,"815 W Market St, Greensboro, North Carolina 27401-1875",www.greensborocollege.edu,"4-year, Private not-for-profit",1279 Greenville College,"315 E. College Ave, Greenville, Illinois 62246-0159",www.greenville.edu,"4-year, Private not-for-profit",1618 Grinnell College,"1210 Park Street, Grinnell, Iowa 50112-1690",www.grinnell.edu,"4-year, Private not-for-profit",1678 Grove City College,"100 Campus Dr, Grove City, Pennsylvania 16127-2104",www.gcc.edu,"4-year, Private not-for-profit",2499 Guilford College,"5800 W Friendly Ave, Greensboro, North Carolina 27410-4108",www.guilford.edu,"4-year, Private not-for-profit",2641 Gustavus Adolphus College,"800 West College Avenue, Saint Peter, Minnesota 56082-1498",WWW.GUSTAVUS.EDU,"4-year, Private not-for-profit",2503 Gwynedd Mercy College,"1325 Sumneytown Pike, Gwynedd Valley, Pennsylvania 19437-0901",www.gmc.edu,"4-year, Private not-for-profit",2548 Hamilton College,"198 College Hill Rd, Clinton, New York 13323",www.hamilton.edu,"4-year, Private not-for-profit",1872 Hamilton Technical College,"1011 E 53rd St, Davenport, Iowa 52807",www.hamiltontechcollege.com,"4-year, primarily associate's, Private for-profit",223 Hamline University,"1536 Hewitt Avenue, Saint Paul, Minnesota 55104-1284",www.hamline.edu,"4-year, Private not-for-profit",4876 Hampden-Sydney College,"College Road, Hampden-Sydney, Virginia 23943-0128",www.hsc.edu,"4-year, Private not-for-profit",1120 Hampshire College,"893 West St, Amherst, Massachusetts 01002-5001",www.hampshire.edu,"4-year, Private not-for-profit",1428 Hampton University,"Hampton, Virginia 23668-0099",www.hamptonu.edu,"4-year, Private not-for-profit",5427 Hannibal-Lagrange College,"2800 Palmyra Rd, Hannibal, Missouri 63401-1999",www.hlg.edu,"4-year, Private not-for-profit",1099 Hanover College,"359 LaGrange Road, Hanover, Indiana 47243-0108",www.hanover.edu,"4-year, Private not-for-profit",926 Harding University,"915 E. Market Ave., Searcy, Arkansas 72143",www.harding.edu,"4-year, Private not-for-profit",6446 Harding University Graduate School of Religion,"1000 Cherry Road, Memphis, Tennessee 38117-5499",www.hugsr.edu,"4-year, Private not-for-profit", Hardin-Simmons University,"2200 Hickory, Abilene, Texas 79698-0001",www.hsutx.edu,"4-year, Private not-for-profit",2387 Harrington College of Design,"200 W. Madison, Chicago, Illinois 60606",WWW.INTERIORDESIGN.EDU,"4-year, Private for-profit",1279 Harrisburg University of Science and Technology,"304 Market Street, Harrisburg, Pennsylvania 17101-2208",www.HarrisburgU.net,"4-year, Private not-for-profit",215 Harris-Stowe State University,"3026 Laclede Ave, Saint Louis, Missouri 63103-2136",www.hssu.edu,"4-year, Public",1854 Hartwick College,"One Hartwick Drive, Oneonta, New York 13820-4020",www.hartwick.edu/x12933.xml,"4-year, Private not-for-profit",1493 Harvard University,"Massachusetts Hall, Cambridge, Massachusetts 02138",www.harvard.edu/,"4-year, Private not-for-profit",26496 Harvey Mudd College,"301 Platt Blvd., Claremont, California 91711",www.hmc.edu,"4-year, Private not-for-profit",738 Haskell Indian Nations University,"155 Indian Ave, Lawrence, Kansas 66046-4800",www.haskell.edu,"4-year, primarily associate's, Public",997 Hastings College,"710 N Turner Ave, Hastings, Nebraska 68901",www.hastings.edu,"4-year, Private not-for-profit",1153 Haverford College,"370 Lancaster Ave, Haverford, Pennsylvania 19041-1392",www.haverford.edu,"4-year, Private not-for-profit",1169 Hawaii Pacific University,"1164 Bishop St., Suite 216, Honolulu, Hawaii 96813",www.hpu.edu,"4-year, Private not-for-profit",8293 Hazelden Graduate School of Addiction Studies,"15245 Pleasant Valley Rd, Center City, Minnesota 55012-0011",,"4-year, Private not-for-profit",89 Hebrew College,"160 Herrick Road, Newton Centre, Massachusetts 02459-2237",www.hebrewcollege.edu,"4-year, Private not-for-profit",219 Hebrew Theological College,"7135 N Carpenter Rd, Skokie, Illinois 60077",www.htc.edu/,"4-year, Private not-for-profit",545 Hebrew Union College-Jewish Institute of Religion,"3101 Clifton Ave, Cincinnati, Ohio 45220",www.huc.edu,"4-year, Private not-for-profit",292 Hebrew Union College-Jewish Institute of Religion,"One W 4th St, New York, New York 10012-1186",www.huc.edu,"4-year, Private not-for-profit",182 Hebrew Union College-Jewish Institute of Religion,"3077 University Ave, Los Angeles, California 90007-3796",www.huc.edu,"4-year, Private not-for-profit",110 Heidelberg University,"310 E Market St, Tiffin, Ohio 44883-2462",www.heidelberg.edu,"4-year, Private not-for-profit",1546 Hellenic College-Holy Cross Greek Orthodox School of Theology,"50 Goddard Ave, Brookline, Massachusetts 02445-7496",hchc.edu,"4-year, Private not-for-profit",190 Henderson State University,"1100 Henderson Street, Arkadelphia, Arkansas 71999-0001",www.hsu.edu,"4-year, Public",3652 Hendrix College,"1600 Washington Ave, Conway, Arkansas 72032-3080",www.hendrix.edu,"4-year, Private not-for-profit",1350 Heritage Bible College,"1747 Bud Hawkins Road, Dunn, North Carolina 28334",www.heritagebiblecollege.edu,"4-year, primarily associate's, Private not-for-profit",80 Heritage Christian University,"3625 Helton Dr, Florence, Alabama 35630-9977",www.hcu.edu,"4-year, Private not-for-profit",88 Heritage University,"3240 Fort Rd, Toppenish, Washington 98948",www.heritage.edu,"4-year, Private not-for-profit",1087 Herzing College,"5700 W Broadway, Minneapolis, Minnesota 55428-3548",www.herzing.edu,"4-year, primarily associate's, Private for-profit",285 Herzing College,"2400 Veterans Mem Blvd., Suite 410, Kenner, Louisiana 70062",www.herzing.edu,"4-year, primarily associate's, Private for-profit",226 Herzing College,"280 West Valley Ave, Birmingham, Alabama 35209",www.herzing.edu/birmingham,"4-year, primarily associate's, Private for-profit",293 Herzing College,"1595 S. Semoran Blvd, Ste 1501, Winter Park, Florida 32792-5509",www.herzing.edu,"4-year, primarily associate's, Private for-profit",187 Herzing College,"5218 E. Terrace Dr., Madison, Wisconsin 53718",www.Herzing.edu,"4-year, primarily associate's, Private for-profit",2102 Herzing University,"3393 Peachtree Road, Suite 1003, Atlanta, Georgia 30326",www.Herzing.com,"4-year, Private for-profit",366 Hesser College,"3 Sundial Ave, Manchester, New Hampshire 03103-9969",www.hesser.edu,"4-year, primarily associate's, Private for-profit",3800 Hickey College,"940 Westport Plaza, Saint Louis, Missouri 63146",www.hickeycollege.edu,"4-year, primarily associate's, Private for-profit",428 High Point University,"833 Montlieu Ave, High Point, North Carolina 27262-3598",WWW.HIGHPOINT.EDU,"4-year, Private not-for-profit",3409 Hilbert College,"5200 S Park Ave, Hamburg, New York 14075-1597",www.hilbert.edu,"4-year, Private not-for-profit",996 Hillsdale Free Will Baptist College,"3701 S I-35 Service Road, Moore, Oklahoma 73160",www.hc.edu,"4-year, Private not-for-profit",257 Hiram College,"Hinsdale Hall Third Floor, Hiram, Ohio 44234-0067",WWW.HIRAM.EDU,"4-year, Private not-for-profit",1360 Hobart William Smith Colleges,"Geneva, New York 14456",WWW.HWS.EDU,"4-year, Private not-for-profit",2078 Hobe Sound Bible College,"11298 SE Gomez, Hobe Sound, Florida 33455-1065",www.hsbc.edu,"4-year, Private not-for-profit",130 Hodges University,"2655 Northbrooke Drive, Naples, Florida 34119-7932",www.hodges.edu,"4-year, Private not-for-profit",1904 Hofstra University,"100 Hofstra University, Hempstead, New York 11549",www.hofstra.edu,"4-year, Private not-for-profit",12333 Hollins University,"7916 Williamson Rd NW, Roanoke, Virginia 24020",www.hollins.edu,"4-year, Private not-for-profit",1058 Holy Apostles College and Seminary,"33 Prospect Hill Rd, Cromwell, Connecticut 06416-2005",www.holyapostles.edu,"4-year, Private not-for-profit",276 Holy Cross College,"54515 State Road 933 North, Notre Dame, Indiana 46556-0308",www.hcc-nd.edu,"4-year, primarily associate's, Private not-for-profit",499 Holy Family University,"9801 Frankford Avenue, Philadelphia, Pennsylvania 19114-2009",www.holyfamily.edu,"4-year, Private not-for-profit",3498 Holy Names University,"3500 Mountain Blvd, Oakland, California 94619-1699",www.hnu.edu,"4-year, Private not-for-profit",1105 Hood College,"401 Rosemont Ave, Frederick, Maryland 21701",www.hood.edu,"4-year, Private not-for-profit",2533 Hood Theological Seminary,"1810 Lutheran Synod Drive, Salisbury, North Carolina 28144",www.hoodseminary.edu,"4-year, Private not-for-profit",248 Hope College,"141 E 12th St, Holland, Michigan 49423",www.hope.edu,"4-year, Private not-for-profit",3238 Hope International University,"2500 E Nutwood Ave, Fullerton, California 92831-3199",www.hiu.edu,"4-year, Private not-for-profit",864 Houghton College,"1 Willard Ave, Houghton, New York 14744",www.houghton.edu,"4-year, Private not-for-profit",1415 Houston Baptist University,"7502 Fondren Rd, Houston, Texas 77074-3298",www.hbu.edu,"4-year, Private not-for-profit",2564 Houston Graduate School of Theology,"2501 Central Parkway, Suite A19, Houston, Texas 77092-7729",www.hgst.edu,"4-year, Private not-for-profit",236 Howard Payne University,"1000 Fisk St., Brownwood, Texas 76801-2794",www.hputx.edu,"4-year, Private not-for-profit",1388 Howard University,"2400 Sixth St NW, Washington, District of Columbia 20059-0001",www.howard.edu,"4-year, Private not-for-profit",10320 Humboldt State University,"1 Harpst Street, Arcata, California 95521-8299",www.humboldt.edu,"4-year, Public",7800 Humphreys College-Stockton,"6650 Inglewood Ave, Stockton, California 95207-3896",www.humphreys.edu,"4-year, Private not-for-profit",714 Huntingdon College,"1500 East Fairview Avenue, Montgomery, Alabama 36106-2148",www.huntingdon.edu,"4-year, Private not-for-profit",1082 Huntington University,"2303 College Ave, Huntington, Indiana 46750",www.huntington.edu,"4-year, Private not-for-profit",1230 Huntsville Bible College,"904 Oakwood Ave, Huntsville, Alabama 35811-1632",www.hbc1.edu,"4-year, primarily associate's, Private not-for-profit",64 Husson University,"One College Circle, Bangor, Maine 04401-2999",www.husson.edu,"4-year, Private not-for-profit",2672 Huston-Tillotson University,"900 Chicon St, Austin, Texas 78702-2795",www.htu.edu,"4-year, Private not-for-profit",785 Idaho State University,"921 S 7th Ave, Pocatello, Idaho 83209",www.isu.edu,"4-year, Public",12653 IIA College,"4201 Central Ave Nw-Ste J, Albuquerque, New Mexico 87105",www.iia.edu,"4-year, primarily associate's, Private for-profit",160 IIA College,"5441 E. 22nd St. Ste. 125, Tucson, Arizona 85711-5444",www.iia.edu,"4-year, primarily associate's, Private for-profit",394 IIA College,"4240 W. Bethany Home Rd., Phoenix, Arizona 85019-1600",www.iia.edu,"4-year, primarily associate's, Private for-profit",914 IIA College,"925 S Gilbert Rd Ste 201, Mesa, Arizona 85204-4448",www.iia.edu,"4-year, primarily associate's, Private for-profit",213 Iliff School of Theology,"2201 S University Blvd, Denver, Colorado 80210-4798",www.iliff.edu,"4-year, Private not-for-profit",194 Illinois College,"1101 W College Ave, Jacksonville, Illinois 62650-2299",www.ic.edu,"4-year, Private not-for-profit",898 Illinois College of Optometry,"3241 S Michigan Ave, Chicago, Illinois 60616-3878",WWW.ICO.EDU,"4-year, Private not-for-profit",613 Illinois Institute of Technology,"3300 S Federal St, Chicago, Illinois 60616",www.iit.edu,"4-year, Private not-for-profit",7453 Illinois State University,"North and School Streets, Normal, Illinois 61790-1000",www.ilstu.edu,"4-year, Public",20799 Illinois Wesleyan University,"1312 N Park St, Bloomington, Illinois 61702-2900",www.iwu.edu,"4-year, Private not-for-profit",2125 Immaculata University,"1145 King Rd, Immaculata, Pennsylvania 19345-0702",www.immaculata.edu,"4-year, Private not-for-profit",4179 Indian River State College,"3209 Virginia Ave, Fort Pierce, Florida 34981-5596",www.irsc.edu,"4-year, primarily associate's, Public",15366 Indiana Business College-Evansville,"4601 Theatre Dr, Evansville, Indiana 47715-4601",www.ibcschools.edu,"4-year, primarily associate's, Private for-profit",265 Indiana Business College-Ft Wayne,"6413 N Clinton St, Fort Wayne, Indiana 46825-4911",www.ibcschools.edu,"4-year, primarily associate's, Private for-profit",499 Indiana Business College-Indianapolis,"550 East Washington Street, Indianapolis, Indiana 46204",www.ibcschools.edu,"4-year, primarily associate's, Private for-profit",1889 Indiana Business College-Muncie,"411 W Riggin Rd, Muncie, Indiana 47303",www.ibcschools.edu,"4-year, primarily associate's, Private for-profit",268 Indiana Business College-Terre Haute,"1378 South SR 46, Terre Haute, Indiana 47803",ibcschools.edu,"4-year, primarily associate's, Private for-profit",275 Indiana Institute of Technology,"1600 E Washington Blvd, Fort Wayne, Indiana 46803-1228",www.indianatech.edu,"4-year, Private not-for-profit",3653 Indiana State University,"210 N 7th St, Terre Haute, Indiana 47809",www.indstate.edu,"4-year, Public",10457 Indiana University of Pennsylvania-Main Campus,"1011 South Dr 201 Sutton Hall, Indiana, Pennsylvania 15705-1098",www.iup.edu,"4-year, Public",14310 Indiana University-Bloomington,"107 South Indiana Ave., Bloomington, Indiana 47405-7000",www.iub.edu,"4-year, Public",40354 Indiana University-East,"2325 Chester Blvd, Richmond, Indiana 47374-1289",www.iue.edu/,"4-year, Public",2447 Indiana University-Kokomo,"2300 S Washington St, Kokomo, Indiana 46904-9003",www.iuk.edu,"4-year, Public",2690 Indiana University-Northwest,"3400 Broadway, Gary, Indiana 46408-1197",www.iun.edu,"4-year, Public",4794 Indiana University-Purdue University-Fort Wayne,"2101 E Coliseum Blvd, Fort Wayne, Indiana 46805-1499",www.ipfw.edu,"4-year, Public",12338 Indiana University-Purdue University-Indianapolis,"425 University Blvd, Indianapolis, Indiana 46202-5143",www.iupui.edu,"4-year, Public",30300 Indiana University-South Bend,"1700 Mishawaka Ave, South Bend, Indiana 46634-7111",www.iusb.edu,"4-year, Public",7712 Indiana University-Southeast,"4201 Grant Line Rd, New Albany, Indiana 47150",www.ius.edu,"4-year, Public",6482 Indiana Wesleyan University,"4201 S Washington St, Marion, Indiana 46953-4974",www.indwes.edu,"4-year, Private not-for-profit",15442 Ingalls Memorial Hospital Dietetic Internship,"One Ingalls Dr, Harvey, Illinois 60426-3558",www.ingallshealthsystems.org,"4-year, Private not-for-profit",7 Institute for Clinical Social Work,"200 N. Michigan Avenue, Suite 407, Chicago, Illinois 60601-5908",www.icsw.edu,"4-year, Private not-for-profit",92 Institute for the Psychological Sciences,"2001 Jefferson Davis Highway, Suite 511, Arlington, Virginia 22202",www.ipsciences.edu,"4-year, Private not-for-profit",62 Institute of American Indian and Alaska Native Culture,"83 Avan Nu Po Road, Santa Fe, New Mexico 87508-1300",www.iaia.edu,"4-year, Public",249 Institute of Clinical Acupuncture & Oriental Med,"100 N. Beretania Street, Suite 203B, Honolulu, Hawaii 96817",www.orientalmedicine.edu,"4-year, Private for-profit",32 Institute of Transpersonal Psychology,"1069 East Meadow Cr, Palo Alto, California 94303",www.itp.edu,"4-year, Private not-for-profit",461 Inter American University of Puerto Rico-Aguadilla,"Barrio Corrales Sector Calero, Aguadilla, Puerto Rico 00602",www.aguadilla.inter.edu,"4-year, Private not-for-profit",4467 Inter American University of Puerto Rico-Arecibo,"Bo San Daniel Sector Las Canelas Carretera 2, Arecibo, Puerto Rico 00614",www.arecibo.inter.edu,"4-year, Private not-for-profit",4729 Inter American University of Puerto Rico-Barranquitas,"Bo Helechal Carr 156 Interseccion 719, Barranquitas, Puerto Rico 00794-0517",www.br.inter.edu,"4-year, Private not-for-profit",2329 Inter American University of Puerto Rico-Bayamon,"500 Dr. John Will Harris, Bayamon, Puerto Rico 00957",bc.inter.edu,"4-year, Private not-for-profit",5385 Inter American University of Puerto Rico-Fajardo,"Calle Union-Batey Central Carr 195, Fajardo, Puerto Rico 00738-7003",fajardo.inter.edu,"4-year, Private not-for-profit",2252 Inter American University of Puerto Rico-Guayama,"Bo Machete Carr 744 Km 1.2, Guayama, Puerto Rico 00785",www.guayama.inter.edu,"4-year, Private not-for-profit",2196 Inter American University of Puerto Rico-Metro,"Carretera #1 Km 16 3 Esq Calle Francisco Sein, San Juan, Puerto Rico 00919-1293",www.metro.inter.edu,"4-year, Private not-for-profit",10613 Inter American University of Puerto Rico-Ponce,"104 Turpo Industrial Park Rd1, Mercedita, Puerto Rico 00715-1602",www.ponce.inter.edu,"4-year, Private not-for-profit",5963 Inter American University of Puerto Rico-San German,"Rd. 102 Km. 30.6, San German, Puerto Rico 00683",www.sg.inter.edu,"4-year, Private not-for-profit",5712 Inter American University of Puerto Rico-School of Law,"Calle Federico Costa 170 Sector Tres Monjitas, San Juan, Puerto Rico 00936-8351",www.derecho.inter.edu,"4-year, Private not-for-profit",865 Inter American University of Puerto Rico-School of Optometry,"500 John Will Harris Avenue, Bayamon, Puerto Rico 00957",www.optonet.inter.edu,"4-year, Private not-for-profit",211 Interamerican College,"1607 Hoover Ave, National City, California 91950-4437",www.iacnc.edu,"4-year, Private not-for-profit",59 Interdenominational Theological Center,"700 Martin Luther King Jr Dr, Atlanta, Georgia 30314-4143",www.itc.edu,"4-year, Private not-for-profit",426 Interior Designers Institute,"1061 Camelback Rd, Newport Beach, California 92660",idi.edu,"4-year, primarily associate's, Private for-profit",360 International Academy of Design and Technology,"1850 Research Drive, Troy, Michigan 48083",www.iadtdetroit.com,"4-year, Private for-profit",936 International Academy of Design and Technology,"One Bridgestone Park, Nashville, Tennessee 37214",www.iadtnashville.com,"4-year, primarily associate's, Private for-profit",617 International Academy of Design and Technology,"2450 Del Paso Road-St 250, Sacramento, California 95834",www.iadtsacramento.com,"4-year, primarily associate's, Private for-profit",447 International Academy of Design and Technology,"5959 Lake Ellenor Dr., Orlando, Florida 32809",www.iadt.edu,"4-year, Private for-profit",1172 International Academy of Design and Technology,"5104 Eisenhower Blvd, Tampa, Florida 33634",www.academy.edu,"4-year, Private for-profit",2590 International Academy of Design and Technology,"One North State Street - Suite 500, Chicago, Illinois 60602-3300",www.iadtchicago.edu,"4-year, Private for-profit",1950 International Academy of Design and Technology,"645 Andover Park West, Seattle, Washington 98188-0000",www.iadtseattle.com,"4-year, Private for-profit",515 International Academy of Design and Technology,"2495 Village View Dr, Henderson, Nevada 89074",www.iadtvegas.com,"4-year, Private for-profit",461 International Baptist College,"2150 E Southern Ave, Tempe, Arizona 85282-7504",IBConline.edu,"4-year, Private not-for-profit",79 International Business College,"5699 Coventry Lane, Fort Wayne, Indiana 46804-7145",ibcfortwayne.edu,"4-year, primarily associate's, Private for-profit",629 International Institute for Restorative Practices,"544 Main St.-2nd Floor, Bethlehem, Pennsylvania 18018",iirp.org,"4-year, Private not-for-profit",120 Iona College,"715 North Ave, New Rochelle, New York 10801-1890",www.iona.edu,"4-year, Private not-for-profit",4375 Iowa State University,"Ames, Iowa 50011-2030",www.iastate.edu,"4-year, Public",26856 Iowa Wesleyan College,"601 N Main Street, Mount Pleasant, Iowa 52641",www.iwc.edu,"4-year, Private not-for-profit",843 Ithaca College,"953 Danby Rd, Ithaca, New York 14850",www.ithaca.edu,"4-year, Private not-for-profit",6448 ITT Technical Institute-Albuquerque,"5100 Masthead N.E., Albuquerque, New Mexico 87109",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",618 ITT Technical Institute-Anaheim,"525 N Muller Street, Anaheim, California 92801",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",834 ITT Technical Institute-Arnold,"1930 Meyer Drury Dr, Arnold, Missouri 63010",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",867 ITT Technical Institute-Atlanta,"1745 Phoenix Blvd., Suite 100, Atlanta, Georgia 30349",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",273 ITT Technical Institute-Baton Rouge,"14141 Airline Hwy Bldg 3 Ste K, Baton Rouge, Louisiana 70817",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",254 ITT Technical Institute-Bessemer,"6270 Park South Drive, Bessemer, Alabama 35022",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",990 ITT Technical Institute-Boise,"12302 W. Explorer Dr, Boise, Idaho 83713-1529",WWW.ITT-TECH.EDU,"4-year, primarily associate's, Private for-profit",540 ITT Technical Institute-Burr Ridge,"7040 High Grove Blvd, Burr Ridge, Illinois 60527",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",325 ITT Technical Institute-Chantilly,"14420 Albemarle Point Pl, Ste100, Chantilly, Virginia 20151",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",464 ITT Technical Institute-Charlotte,"4135 Southstream Blvd., Suite 200, Charlotte, North Carolina 28217",www.itt-tech.edu,"4-year, Private for-profit",649 ITT Technical Institute-Chattanooga,"5600 Brainerd Rd Ste G1, Chattanooga, Tennessee 37411",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",108 ITT Technical Institute-Clive,"1860 NW 118th St, Ste 110, Clive, Iowa 50325",www.itt-tech.edu,"4-year, Private for-profit",61 ITT Technical Institute-Clovis,"362 North Clovis Ave, Clovis, California 93612",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",431 ITT Technical Institute-Columbia,"720 Gracern Rd Ste 120, Columbia, South Carolina 29210",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",261 ITT Technical Institute-Columbus,"4717 Hilton Corporate Dr, Columbus, Ohio 43232",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",65 ITT Technical Institute-Cordova,"7260 Goodlett Farms Parkway, Cordova, Tennessee 38016",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",873 ITT Technical Institute-Duluth,"10700 Abbotts Bridge Rd-Ste 190, Duluth, Georgia 30097",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",517 ITT Technical Institute-Earth City,"3640 Corporate Trail Drive, Earth City, Missouri 63045",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",889 ITT Technical Institute-Eden Prairie,"8911 Columbine Road, Eden Prairie, Minnesota 55347",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",546 ITT Technical Institute-Everett,"1615 75th Street Sw, Suite 220, Everett, Washington 98203",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",427 ITT Technical Institute-Fort Lauderdale,"3401 S University Dr, Fort Lauderdale, Florida 33328",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",732 ITT Technical Institute-Fort Wayne,"2810 Dupont Commerce Court, Fort Wayne, Indiana 46825",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",618 ITT Technical Institute-Green Bay,"470 Security Blvd, Green Bay, Wisconsin 54313",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",1015 ITT Technical Institute-Greenfield,"6300 W Layton Ave, Greenfield, Wisconsin 53220-4612",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",1075 ITT Technical Institute-Greenville,"Six Independence Pointe, Greenville, South Carolina 29615",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",555 ITT Technical Institute-Henderson,"168 N Gibson Rd, Henderson, Nevada 89014",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",893 ITT Technical Institute-High Point,"4050 Piedmont Parkway, Ste 110, High Point, North Carolina 27265",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",158 ITT Technical Institute-Indianapolis,"9511 Angola Ct, Indianapolis, Indiana 46268-1119",www.itt-tech.edu,"4-year, Private for-profit",4036 ITT Technical Institute-Jacksonville,"7011 A.C. Skinner Pkwy, Suite 140, Jacksonville, Florida 32256",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",484 ITT Technical Institute-Kansas City,"9150 East 41st Place, Kansas City, Missouri 64133",,"4-year, primarily associate's, Private for-profit",730 ITT Technical Institute-Kennesaw,"1000 Cobb Place Blvd NW - Bldg 300 - Ste 300, Kennesaw, Georgia 30144",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",362 ITT Technical Institute-Knoxville,"10208 Technology Dr, Knoxville, Tennessee 37932",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",883 ITT Technical Institute-Lake Mary,"1400 South International Parkway South, Lake Mary, Florida 32746",WWW.ITT-TECH.EDU,"4-year, primarily associate's, Private for-profit",535 ITT Technical Institute-Lathrop,"16916 S. Harlan Rd, Lathrop, California 95330",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",687 ITT Technical Institute-Lexington,"2473 Fortune Dr - Suite 180, Lexington, Kentucky 40509",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",499 ITT Technical Institute-Little Rock,"4520 S University Ave, Little Rock, Arkansas 72204-9925",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",570 ITT Technical Institute-Louisville,"10509 Timberwood Cir, Louisville, Kentucky 40223-5392",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",759 ITT Technical Institute-Madison,"9238 Madison Blvd, Ste 500, Madison, Alabama 35758",www.itt-tech.edu,"4-year, Private for-profit",115 ITT Technical Institute-Madison,"2450 Rimrock Road, Ste 100, Madison, Wisconsin 53713",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",97 ITT Technical Institute-Miami,"7955 NW 12th St, Ste 119, Miami, Florida 33126",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",664 ITT Technical Institute-Mobile,"3100 Cottage Hill Rd Bldg 3, Mobile, Alabama 36606",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",183 ITT Technical Institute-Morrisville,"3200 Gateway Centre Blvd, Ste 105, Morrisville, North Carolina 27560",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",139 ITT Technical Institute-Mount Prospect,"1401 Feehanville Road, Mount Prospect, Illinois 60056-9823",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",479 ITT Technical Institute-Murray,"920 W Levoy Dr, Murray, Utah 84123",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",661 ITT Technical Institute-Nashville,"2845 Elm Hill Pike, Nashville, Tennessee 37214-3717",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",940 ITT Technical Institute-Newburgh,"10999 Stahl Rd, Newburgh, Indiana 47630",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",442 ITT Technical Institute-Norfolk,"863 Glenrock Rd, Ste 100, Norfolk, Virginia 23502-3701",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",900 ITT Technical Institute-Oklahoma City,"50 Penn Place Office Tower, 1900 NW Expressway St.-Ste 305, Oklahoma City, Oklahoma 73118",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",274 ITT Technical Institute-Omaha,"9814 M St, Omaha, Nebraska 68127-9812",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",532 ITT Technical Institute-Owings Mills,"11301 Red Run Blvd, Owings Mills, Maryland 21117",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",998 ITT Technical Institute-Oxnard,"2051 Solar Dr Suite 150, Oxnard, California 93036",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",436 ITT Technical Institute-Phoenix,"10220 North 25th Ave, Ste 100, Phoenix, Arizona 85021",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",126 ITT Technical Institute-Pinellas Park,"3491 Gandy Blvd Ste 101, Pinellas Park, Florida 33781",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",193 ITT Technical Institute-Portland,"9500 NE Cascades Parkway, Portland, Oregon 97220",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",682 ITT Technical Institute-Rancho Cordova,"10863 Gold Center Dr, Rancho Cordova, California 95670-6034",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",716 ITT Technical Institute-Richmond,"300 Gateway Centre Pky, Richmond, Virginia 23235-5139",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",659 ITT Technical Institute-Saint Rose,"140 James Dr E, Saint Rose, Louisiana 70087",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",585 ITT Technical Institute-San Bernardino,"670 E Carnegie Drive, San Bernardino, California 92408",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",1432 ITT Technical Institute-San Diego,"9680 Granite Ridge Dr, San Diego, California 92123",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",1190 ITT Technical Institute-San Dimas,"650 W. Cienega Ave., San Dimas, California 91773",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",901 ITT Technical Institute-Seattle,"12720 Gateway Dr Ste 100, Seattle, Washington 98168-2610",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",464 ITT Technical Institute-South Bend,"17390 Dugdale Dr Ste 100, South Bend, Indiana 46635",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",195 ITT Technical Institute-Spokane Valley,"13518 E Indiana Avenue, Spokane Valley, Washington 99216-1589",WWW.ITT-TECH.EDU,"4-year, primarily associate's, Private for-profit",433 ITT Technical Institute-Springfield,"7300 Boston Blvd, Springfield, Virginia 22153",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",685 ITT Technical Institute-Sylmar,"12669 Encinitas Ave, Sylmar, California 91342-3664",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",927 ITT Technical Institute-Tampa,"4809 Memorial Hwy, Tampa, Florida 33634-7350",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",719 ITT Technical Institute-Tempe,"5005 S. Wendler Drive, Tempe, Arizona 85282",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",803 ITT Technical Institute-Thornton,"500 E 84th Ave Ste B12, Thornton, Colorado 80229-5338",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",648 ITT Technical Institute-Torrance,"20050 S. Vermont Ave, Torrance, California 90502",WWW.ITT-TECH.EDU,"4-year, primarily associate's, Private for-profit",807 ITT Technical Institute-Tucson,"1455 W. River Rd, Tucson, Arizona 85704-5829",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",476 ITT Technical Institute-Tulsa,"8421 East 61st Street, Suite U, Tulsa, Oklahoma 74133",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",391 ITT Technical Institute-Wichita,"2024 N Woodlawn, Wichita, Kansas 67208",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",123 ITT Technical Institute-Wyoming,"1980 Metro Court S.W., Wyoming, Michigan 49519",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",795 ITT Technnical Institute-Orland Park,"11551 184th Place, Orland Park, Illinois 60467",www.itt-tech.edu,"4-year, primarily associate's, Private for-profit",474 Jackson State University,"1440 J R Lynch St, Jackson, Mississippi 39217",www.jsums.edu,"4-year, Public",8377 Jacksonville State University,"700 Pelham Road North, Jacksonville, Alabama 36265",www.jsu.edu/,"4-year, Public",9481 Jacksonville University,"2800 University Blvd N, Jacksonville, Florida 32211-3394",www.jacksonville.edu,"4-year, Private not-for-profit",3418 James Madison University,"800 South Main Street, Harrisonburg, Virginia 22807",www.jmu.edu/,"4-year, Public",18454 Jamestown Business College,"7 Fairmount Ave, Jamestown, New York 14701-4756",www.jamestownbusinesscollege.edu,"4-year, primarily associate's, Private for-profit",263 Jamestown College,"608 6th St NE, Jamestown, North Dakota 58405",www.jc.edu,"4-year, Private not-for-profit",1025 Jarvis Christian College,"Hwy 80 E, Hawkins, Texas 75765-1470",www.jarvis.edu,"4-year, Private not-for-profit",728 Jefferson College of Health Sciences,"920 S Jefferson St, Roanoke, Virginia 24016",www.jchs.edu,"4-year, primarily associate's, Private not-for-profit",995 Jesuit School of Theology at Berkeley,"1735 LeRoy Ave, Berkeley, California 94709",www.jstb.edu,"4-year, Private not-for-profit",148 Jewish Theological Seminary of America,"3080 Broadway, New York, New York 10027-4649",www.jtsa.edu,"4-year, Private not-for-profit",544 John Brown University,"2000 W University St, Siloam Springs, Arkansas 72761",www.jbu.edu,"4-year, Private not-for-profit",2017 John Carroll University,"20700 N Park Blvd, Cleveland, Ohio 44118-4581",www.jcu.edu,"4-year, Private not-for-profit",3826 John Dewey College-University Division,"Barbosa Ave #427 3rd Floor - Malco Bldg, Hato Rey, Puerto Rico 00910",johndeweycollegepr.com,"4-year, primarily associate's, Private not-for-profit",1140 John F Kennedy University,"100 Ellinwood Way, Pleasant Hill, California 94523-4817",www.jfku.edu,"4-year, Private not-for-profit",1580 John Marshall Law School-Atlanta,"1422 W Peachtree St NW, Atlanta, Georgia 30309",www.johnmarshall.edu,"4-year, Private for-profit",497 John Wesley College,"2314 N Centennial St, High Point, North Carolina 27265-3197",www.johnwesley.edu,"4-year, Private not-for-profit",78 Johns Hopkins University,"3400 N Charles St, Mason Hall, Baltimore, Maryland 21218-2688",www.jhu.edu,"4-year, Private not-for-profit",19758 Johnson & Wales University,"8 Abbott Park Place, Providence, Rhode Island 02903-3703",www.jwu.edu,"4-year, Private not-for-profit",10488 Johnson & Wales University-Charlotte,"Academic Center, 801 West Trade Street, Charlotte, North Carolina 28202",www.jwu.edu/,"4-year, primarily associate's, Private not-for-profit",2436 Johnson & Wales University-Denver,"7150 Montview Blvd, Denver, Colorado 80220",www.jwu.edu,"4-year, primarily associate's, Private not-for-profit",1454 Johnson & Wales University-Florida Campus,"1701 NE 127th St, North Miami, Florida 33181",www.jwu.edu,"4-year, primarily associate's, Private not-for-profit",1918 Johnson Bible College,"7900 Johnson Dr, Knoxville, Tennessee 37998",www.jbc.edu,"4-year, Private not-for-profit",801 Johnson C Smith University,"100 Beatties Ford Rd, Charlotte, North Carolina 28216-5398",www.jcsu.edu,"4-year, Private not-for-profit",1571 Johnson State College,"337 College Hill, Johnson, Vermont 05656-9464",WWW.JSC.VSC.EDU,"4-year, Public",1898 Jones College-Jacksonville,"5353 Arlington Expy, Jacksonville, Florida 32211",www.jones.edu,"4-year, Private not-for-profit",575 Jones College-Miami Campus,"11430 N Kendall Drive, Suite 200, Miami, Florida 33176",www.jones.edu,"4-year, Private not-for-profit",91 Jones International University,"9697 East Mineral Avenue, Centennial, Colorado 80112",www.jiu.edu,"4-year, Private for-profit",1882 Judson College,"302 Bibb St, Marion, Alabama 36756",www.judson.edu,"4-year, Private not-for-profit",324 Judson University,"1151 N State St, Elgin, Illinois 60123-1498",www.judsonu.edu,"4-year, Private not-for-profit",1239 Juniata College,"1700 Moore St, Huntingdon, Pennsylvania 16652-2196",www.juniata.edu,"4-year, Private not-for-profit",1526 Kalamazoo College,"1200 Academy St, Kalamazoo, Michigan 49006-3295",www.kzoo.edu,"4-year, Private not-for-profit",1389 Kansas City Art Institute,"4415 Warwick Blvd, Kansas City, Missouri 64111-1874",www.kcai.edu,"4-year, Private not-for-profit",665 Kansas City University of Medicine and Biosciences,"1750 Independence Ave, Kansas City, Missouri 64106-1453",www.kcumb.edu,"4-year, Private not-for-profit",1069 Kansas State University,"Anderson Hall, Manhattan, Kansas 66506",www.k-state.edu,"4-year, Public",23520 Kansas Wesleyan University,"100 E. Claflin Ave., Salina, Kansas 67401-6196",www.kwu.edu,"4-year, Private not-for-profit",879 Kaplan College,"18618 Crestwood Dr, Hagerstown, Maryland 21742",getinfo.kaplancollege.com/KaplanCollegePortal/KaplanCollegeCampuses/Maryland/Hagerstown/,"4-year, primarily associate's, Private for-profit",1046 Kaplan University,"1801 E Kimberly Rd Ste 1, Davenport, Iowa 52807",www.kucampus.edu,"4-year, Private for-profit",45153 Kaplan University-Cedar Falls Campus,"7009 Nordic Drive, Cedar Falls, Iowa 50613",www.kucampus.edu/kucampusPortal/kucampusCampuses/Iowa/CedarFalls/,"4-year, primarily associate's, Private for-profit",511 Kaplan University-Cedar Rapids Campus,"3165 Edgewood Parkway SW, Cedar Rapids, Iowa 52404",www.kucampus.edu/kucampusPortal/kucampusCampuses/Iowa/CedarRapids/,"4-year, primarily associate's, Private for-profit",528 Kaplan University-Council Bluffs Campus,"1751 Madison Avenue, Suite 750, Council Bluffs, Iowa 51503-5289",www.kucampus.edu/kucampusPortal/kucampusCampuses/Iowa/CouncilBluffs/,"4-year, primarily associate's, Private for-profit",194 Kaplan University-Des Moines Campus,"4655 121st Street, Urbandale, Iowa 50323",www.hamiltonia.edu,"4-year, primarily associate's, Private for-profit",540 Kaplan University-Lincoln Campus,"1821 K St, Lincoln, Nebraska 68501-2826",www.kucampus.edu/kucampusPortal/kucampusCampuses/Nebraska/Lincoln/,"4-year, primarily associate's, Private for-profit",429 Kaplan University-Mason City Campus,"Plaza West 2570 4th Street SW, Mason City, Iowa 50401",www.kucampus.edu/kucampusPortal/kucampusCampuses/Iowa/MasonCity/,"4-year, primarily associate's, Private for-profit",330 Kaplan University-Omaha Campus,"5417 N. 103rd St., Omaha, Nebraska 68134-1002",www.kucampus.edu/kucampusPortal/kucampusCampuses/Nebraska/Omaha/,"4-year, primarily associate's, Private for-profit",660 Kean University,"1000 Morris Ave, Union, New Jersey 07083-0411",www.kean.edu,"4-year, Public",14203 Keck Graduate Institute,"535 Watson Dr, Claremont, California 91711",www.kgi.edu,"4-year, Private not-for-profit",95 Keene State College,"229 Main Street, Keene, New Hampshire 03435-1506",www.keene.edu,"4-year, Public",5271 Kehilath Yakov Rabbinical Seminary,"340 Illington Road, Ossining, New York 10562",,"4-year, Private not-for-profit",85 Keiser University- Kendall,"8505 Mills Dr, Miami, Florida 33183",www.keiseruniversity.edu,"4-year, Private for-profit", Keiser University-Daytona,"1800 Business Park Blvd., Daytona Beach, Florida 32114",www.keiseruniversity.edu,"4-year, Private for-profit", Keiser University-Ft. Lauderdale,"1500 NW 49th St., Fort Lauderdale, Florida 33309",www.keiseruniversity.edu,"4-year, primarily associate's, Private for-profit",13392 Keiser University-Jacksonville,"6700 Southpoint Parkway #400, Jacksonville, Florida 32216",www.keiseruniversity.edu,"4-year, Private for-profit", Keiser University-Lakeland,"2400 Interstate Drive, Lakeland, Florida 33805",www.keiseruniversity.edu,"4-year, Private for-profit", Keiser University-Melbourne,"900 S Babcock St, Melbourne, Florida 32901",www.keiseruniversity.edu,"4-year, Private for-profit", Keiser University-Orlando,"5600 Lake Underhill Rd, Orlando, Florida 32807",www.keiseruniversity.edu,"4-year, Private for-profit", Keiser University-Pembroke Pines,"12520 Pines Blvd., Pembroke Pines, Florida 33027",www.keiseruniversity.edu,"4-year, Private for-profit", Keiser University-Port St Lucie,"10330 S US 1, Port St Lucie, Florida 34952",www.keiseruniversity.edu,"4-year, Private for-profit", Keiser University-Sarasota,"6151 Lake Osprey Dr., Sarasota, Florida 34240",www.keiseruniversity.edu,"4-year, Private for-profit", Keiser University-Tallahassee,"1700 Halstead Blvd, Tallahassee, Florida 32309",www.keiseruniversity.edu,"4-year, Private for-profit", Keiser University-Tampa,"5225 Memorial Highway, Tampa, Florida 33634",www.keiseruniversity.edu,"4-year, Private for-profit", Keiser University-West Palm Beach,"2085 Vista Parkway, West Palm Beach, Florida 33411",www.keiseruniversity.edu,"4-year, Private for-profit", Kendall College,"900 N. North Branch Ave, Chicago, Illinois 60622",www.kendall.edu,"4-year, primarily associate's, Private for-profit",1913 Kennesaw State University,"1000 Chastain Rd, Kennesaw, Georgia 30144-5591",www.kennesaw.edu,"4-year, Public",21449 Kenrick Glennon Seminary,"5200 Glennon Dr, Saint Louis, Missouri 63119-4399",kenrick.edu,"4-year, Private not-for-profit",119 Kent State University Kent Campus,"Kent, Ohio 44242-0001",www.kent.edu,"4-year, Public",22944 Kent State University Salem Campus,"2491 State Route 45 South, Salem, Ohio 44460",www.salem.kent.edu,"4-year, primarily associate's, Public",1319 Kentucky Christian University,"100 Academic Pky, Grayson, Kentucky 41143-1199",www.kcu.edu,"4-year, Private not-for-profit",662 Kentucky Mountain Bible College,"855 Hwy 541, Vancleve, Kentucky 41385-0010",www.kmbc.edu/,"4-year, Private not-for-profit",68 Kentucky State University,"400 East Main Street, Frankfort, Kentucky 40601",www.kysu.edu,"4-year, Public",2659 Kentucky Wesleyan College,"3000 Frederica Street, Owensboro, Kentucky 42301",WWW.KWC.EDU,"4-year, Private not-for-profit",909 Kenyon College,"Gambier, Ohio 43022",www.kenyon.edu/,"4-year, Private not-for-profit",1644 Kettering College of Medical Arts,"3737 Southern Blvd, Kettering, Ohio 45429-1299",www.kcma.edu,"4-year, primarily associate's, Private not-for-profit",813 Kettering University,"1700 University Avenue (formerly Third Avenue), Flint, Michigan 48504-4898",WWW.KETTERING.EDU,"4-year, Private not-for-profit",2600 Keuka College,"141 Central Avenue, Keuka Park, New York 14478",www.keuka.edu,"4-year, Private not-for-profit",1613 Keystone College,"One College Green, La Plume, Pennsylvania 18440-0200",www.keystone.edu,"4-year, Private not-for-profit",1716 King College,"1350 King College Rd, Bristol, Tennessee 37620-2699",www.king.edu,"4-year, Private not-for-profit",1702 King's College,"133 N River St, Wilkes Barre, Pennsylvania 18711-0801",www.kings.edu,"4-year, Private not-for-profit",2673 King's College and Seminary,"14800 Sherman Way, Van Nuys, California 91405-2233",www.kingsseminary.edu,"4-year, Private not-for-profit",473 Knowledge Systems Institute,"3420 Main St, Skokie, Illinois 60076",www.ksi.edu,"4-year, Private not-for-profit",72 Knox College,"2 E South St, Galesburg, Illinois 61401-9999",www.knox.edu,"4-year, Private not-for-profit",1379 Kol Yaakov Torah Center,"29 W Maple Ave, Monsey, New York 10952",,"4-year, Private not-for-profit",17 Kutztown University of Pennsylvania,"15200 Kutztown Rd, Kutztown, Pennsylvania 19530-0730",www.kutztown.edu,"4-year, Public",10393 Kuyper College,"3333 East Beltline N.E., Grand Rapids, Michigan 49525-9781",www.kuyper.edu,"4-year, Private not-for-profit",319 LA College International,"3200 Wilshire Blvd. #400, Los Angeles, California 90010-1308",www.lac.edu,"4-year, primarily associate's, Private for-profit",282 La Roche College,"9000 Babcock Blvd, Pittsburgh, Pennsylvania 15237-5898",www.laroche.edu,"4-year, Private not-for-profit",1425 La Salle University,"1900 W Olney Ave, Philadelphia, Pennsylvania 19141-1199",www.lasalle.edu,"4-year, Private not-for-profit",6176 La Sierra University,"4500 Riverwalk Parkway, Riverside, California 92515-8247",www.lasierra.edu,"4-year, Private not-for-profit",1899 Laboratory Institute of Merchandising,"12 E 53rd St, New York, New York 10022-5268",www.limcollege.edu,"4-year, Private for-profit",1295 Lafayette College,"High St, Easton, Pennsylvania 18042-1768",www.lafayette.edu,"4-year, Private not-for-profit",2382 LaGrange College,"601 Broad St., Lagrange, Georgia 30240-2999",www.lagrange.edu,"4-year, Private not-for-profit",958 Laguna College of Art and Design,"2222 Laguna Canyon Rd, Laguna Beach, California 92651",www.lagunacollege.edu,"4-year, Private not-for-profit",370 Lake Erie College,"391 W Washington St, Painesville, Ohio 44077-3389",www.lec.edu,"4-year, Private not-for-profit",1051 Lake Erie College of Osteopathic Medicine,"1858 W Grandview Blvd, Erie, Pennsylvania 16509-1025",www.lecom.edu,"4-year, Private not-for-profit",2300 Lake Forest College,"555 N Sheridan Road, Lake Forest, Illinois 60045-2399",www.lakeforest.edu,"4-year, Private not-for-profit",1400 Lake Forest Graduate School of Management,"1905 W. Field Court, Lake Forest, Illinois 60045",www.LakeForestMBA.edu,"4-year, Private not-for-profit",809 Lake Superior State University,"650 W Easterday Ave, Sault Ste Marie, Michigan 49783",www.lssu.edu,"4-year, Public",2575 Lakeland College,"W3718 South Drive, Cth M, Plymouth, Wisconsin 53073",www.lakeland.edu,"4-year, Private not-for-profit",3941 Lakeview College of Nursing,"903 N Logan Ave, Danville, Illinois 61832",www.lakeviewcol.edu,"4-year, Private not-for-profit",283 Lamar University,"4400 MLK, Beaumont, Texas 77705",www.lamar.edu,"4-year, Public",13465 Lambuth University,"705 Lambuth Boulevard, Jackson, Tennessee 38301",www.lambuth.edu,"4-year, Private not-for-profit",815 Lancaster Bible College,"901 Eden Rd, Lancaster, Pennsylvania 17601-3403",www.LBC.edu,"4-year, Private not-for-profit",931 Lancaster Theological Seminary,"555 W James St, Lancaster, Pennsylvania 17603-2897",www.lancasterseminary.edu,"4-year, Private not-for-profit",137 Lander University,"320 Stanley Avenue, Greenwood, South Carolina 29649-2099",www.lander.edu,"4-year, Public",2614 Lane College,"545 Lane Ave, Jackson, Tennessee 38301-4598",www.lanecollege.edu,"4-year, Private not-for-profit",1981 Langston University,"102 Page Hall, Langston, Oklahoma 73050",www.lunet.edu,"4-year, Public",2734 Lasell College,"1844 Commonwealth Ave, Newton, Massachusetts 02466-2716",www.lasell.edu,"4-year, Private not-for-profit",1488 Laura and Alvin Siegal College of Judaic Studies,"26500 Shaker Blvd, Beachwood, Ohio 44122",www.siegalcollege.edu,"4-year, Private not-for-profit", Lawrence Technological University,"21000 West Ten Mile Road, Southfield, Michigan 48075-1058",www.ltu.edu,"4-year, Private not-for-profit",4252 Lawrence University,"College Ave, Appleton, Wisconsin 54912",www.lawrence.edu,"4-year, Private not-for-profit",1496 Le Moyne College,"1419 Salt Springs Rd, Syracuse, New York 13214-1301",www.lemoyne.edu,"4-year, Private not-for-profit",3479 Le Moyne-Owen College,"807 Walker Ave, Memphis, Tennessee 38126-6595",www.loc.edu,"4-year, Private not-for-profit",693 Lebanon Valley College,"101 N College Ave, Annville, Pennsylvania 17003-1400",www.lvc.edu,"4-year, Private not-for-profit",1965 Lee University,"1120 N Ocoee St, Cleveland, Tennessee 37311",www.leeuniversity.edu,"4-year, Private not-for-profit",4147 Lees-McRae College,"275 College Drive, Banner Elk, North Carolina 28604-0128",WWW.LMC.EDU,"4-year, Private not-for-profit",948 Lehigh University,"27 Memorial Dr W, Bethlehem, Pennsylvania 18015",www.lehigh.edu,"4-year, Private not-for-profit",6994 Lenoir-Rhyne University,"625 7th Avenue NE, Hickory, North Carolina 28601",www.lrc.edu,"4-year, Private not-for-profit",1540 Lesley University,"29 Everett St, Cambridge, Massachusetts 02138-2790",www.lesley.edu,"4-year, Private not-for-profit",6690 Lester E Cox Medical Center-School of Medical Technology,"3801 S National Ave, Springfield, Missouri 65807-5210",,"4-year, Private not-for-profit",7 LeTourneau University,"2100 S Mobberly Ave, Longview, Texas 75607-7001",www.letu.edu,"4-year, Private not-for-profit",3662 Lewis & Clark College,"0615 S W Palatine Hill Rd, Portland, Oregon 97219-7899",www.lclark.edu/,"4-year, Private not-for-profit",3565 Lewis University,"One University Parkway, Romeoville, Illinois 60446-2200",www.lewisu.edu,"4-year, Private not-for-profit",5536 Lewis-Clark State College,"500 8th Ave, Lewiston, Idaho 83501-2698",www.lcsc.edu,"4-year, Public",3940 Lexington College,"310 South Peoria, Chicago, Illinois 60607-3534",www.lexingtoncollege.edu,"4-year, Private not-for-profit",53 Lexington Theological Seminary,"631 S Limestone, Lexington, Kentucky 40508-3288",www.lextheo.edu,"4-year, Private not-for-profit",89 Liberty University,"1971 University Blvd, Lynchburg, Virginia 24502",www.liberty.edu,"4-year, Private not-for-profit",33604 Life Chiropractic College-West,"25001 Industrial Blvd., Hayward, California 94545-2800",www.lifewest.edu,"4-year, Private not-for-profit", Life Pacific College,"1100 W. Covina Blvd., San Dimas, California 91773-3298",www.lifepacific.edu,"4-year, Private not-for-profit",514 Life University,"1269 Barclay Circle, Marietta, Georgia 30060",www.life.edu,"4-year, Private not-for-profit",2171 Limestone College,"1115 College Drive, Gaffney, South Carolina 29340-3799",www.limestone.edu,"4-year, Private not-for-profit",3255 Lincoln Christian College and Seminary,"100 Campus View Drive, Lincoln, Illinois 62656-2111",www.lccs.edu,"4-year, Private not-for-profit",1020 Lincoln College,"300 Keokuk St, Lincoln, Illinois 62656",www.lincolncollege.edu,"4-year, primarily associate's, Private not-for-profit",1275 Lincoln College of Technology,"2410 Metrocentre Boulevard, West Palm Beach, Florida 33407-3105",www.lincolncollegeoftechnology.com,"4-year, primarily associate's, Private for-profit",1759 Lincoln Memorial University,"6965 Cumberland Gap Pky, Harrogate, Tennessee 37752-9900",www.lmunet.edu,"4-year, Private not-for-profit",3365 Lincoln University,"820 Chestnut, Jefferson City, Missouri 65102-0029",www.lincolnu.edu/pages/1.asp,"4-year, Public",3109 Lincoln University,"401 15th Street, Oakland, California 94612-2801",www.lincolnuca.edu,"4-year, Private not-for-profit",438 Lincoln University of Pennsylvania,"1570 Baltimore Pike, Lincoln University, Pennsylvania 19352-0999",www.lincoln.edu,"4-year, Public",2524 Lindenwood University,"209 S Kingshighway, Saint Charles, Missouri 63301-1695",www.lindenwood.edu,"4-year, Private not-for-profit",10074 Lindsey Wilson College,"210 Lindsey Wilson St, Columbia, Kentucky 42728-1223",www.lindsey.edu,"4-year, Private not-for-profit",2003 Linfield College,"900 SE Baker, McMinnville, Oregon 97128-6894",www.linfield.edu,"4-year, Private not-for-profit",1720 Linfield College-Adult Degree Program,"900 SE Baker Street, McMinnville, Oregon 97128-6894",www.linfield.edu/dce/index.php,"4-year, Private not-for-profit",476 Linfield College-Portland Campus,"2215 NW Northrup St, Portland, Oregon 97210-2932",www.linfield.edu/portland,"4-year, Private not-for-profit",323 Lipscomb University,"One University Park Drive, Nashville, Tennessee 37204-3951",www.lipscomb.edu,"4-year, Private not-for-profit",3073 Livingstone College,"701 W Monroe St, Salisbury, North Carolina 28144",www.livingstone.edu,"4-year, Private not-for-profit",994 Lock Haven University,"401 North Fairview Street, Lock Haven, Pennsylvania 17745-2390",www.lhup.edu,"4-year, Public",5266 Logan College of Chiropractic,"1851 Schoettler Rd, Chesterfield, Missouri 63017-5529",www.logan.edu,"4-year, Private not-for-profit",1143 Loma Linda University,"Loma Linda, California 92350",www.llu.edu,"4-year, Private not-for-profit",4040 Long Island University-Brentwood,"100 Second Avenue, Brentwood, New York 11717-5300",www.liu.edu,"4-year, Private not-for-profit",589 Long Island University-Brooklyn Campus,"University Plaza, Brooklyn, New York 11201-5372",www.liu.edu,"4-year, Private not-for-profit",8051 Long Island University-C W Post Campus,"720 Northern Blvd, Brookville, New York 11548-1300",www.liu.edu,"4-year, Private not-for-profit",8771 Long Island University-Riverhead,"121 Speonk-Riverhead Rd, Riverhead, New York 11901-3499",liu.edu,"4-year, Private not-for-profit",234 Long Island University-Rockland Campus,"70 Route 340, Orangeburg, New York 10962-2219",www.liu.edu,"4-year, Private not-for-profit",486 Long Island University-Westchester Campus,"LIU/Westchester Campus, 735 Anderson Hill Road, Purchase, New York 10577-1400",www.liu.edu/cwis/west/index.html,"4-year, Private not-for-profit",248 Longwood University,"201 High St, Farmville, Virginia 23909",www.longwood.edu,"4-year, Public",4727 Longy School of Music,"One Follen St, Cambridge, Massachusetts 02138",www.longy.edu,"4-year, Private not-for-profit",210 Loras College,"1450 Alta Vista, Dubuque, Iowa 52004-0178",www.loras.edu,"4-year, Private not-for-profit",1588 Louisiana College,"1140 College Dr, Pineville, Louisiana 71359",www.lacollege.edu,"4-year, Private not-for-profit",1096 Louisiana State University and Agricultural & Mechanical College,"Baton Rouge, Louisiana 70803-2750",www.lsu.edu,"4-year, Public",28810 Louisiana State University at Alexandria,"8100 Hwy 71 South, Alexandria, Louisiana 71302-9121",www.lsua.edu,"4-year, primarily associate's, Public",2993 Louisiana State University Health Sciences Center at New Orleans,"433 Bolivar St, New Orleans, Louisiana 70112-2223",www.lsuhsc.edu/,"4-year, Public",2431 Louisiana State University Health Sciences Center-Shreveport,"1501 Kings Hwy, Shreveport, Louisiana 71103",www.sh.lsuhsc.edu,"4-year, Public",814 Louisiana State University-Shreveport,"One University Place, Shreveport, Louisiana 71115-2399",www.lsus.edu/,"4-year, Public",4281 Louisiana Tech University,"305 Wisteria, Ruston, Louisiana 71272",www.latech.edu,"4-year, Public",10917 Louisville Bible College,"8013 Damascus Rd, Louisville, Kentucky 40228-2472",www.LouisvilleBibleCollege.org,"4-year, Private not-for-profit", Louisville Presbyterian Theological Seminary,"1044 Alta Vista Rd, Louisville, Kentucky 40205-1798",www.lpts.edu,"4-year, Private not-for-profit",206 Lourdes College,"6832 Convent Blvd, Sylvania, Ohio 43560-2898",www.lourdes.edu,"4-year, Private not-for-profit",2062 Loyola College in Maryland,"4501 N Charles St, Baltimore, Maryland 21210-2699",www.loyola.edu,"4-year, Private not-for-profit",6080 Loyola Marymount University,"One Lmu Drive, Los Angeles, California 90045-2659",www.lmu.edu,"4-year, Private not-for-profit",9011 Loyola University Chicago,"820 N. Michigan, Chicago, Illinois 60611-9810",www.luc.edu,"4-year, Private not-for-profit",15670 Loyola University New Orleans,"6363 Saint Charles Ave, New Orleans, Louisiana 70118-6143",www.loyno.edu,"4-year, Private not-for-profit",4474 Lubbock Christian University,"5601 19th Street, Lubbock, Texas 79407-2099",www.lcu.edu,"4-year, Private not-for-profit",1868 Luther College,"700 College Drive, Decorah, Iowa 52101-1045",www.luther.edu,"4-year, Private not-for-profit",2423 Luther Rice University,"3038 Evans Mill Rd, Lithonia, Georgia 30038-2418",www.lru.edu,"4-year, Private not-for-profit",941 Luther Seminary,"2481 Como Ave, Saint Paul, Minnesota 55108-1496",www.luthersem.edu,"4-year, Private not-for-profit",822 Lutheran School of Theology at Chicago,"1100 E 55th St, Chicago, Illinois 60615-5199",www.lstc.edu,"4-year, Private not-for-profit",335 Lutheran Theological Seminary at Gettysburg,"61 Seminary Ridge, Gettysburg, Pennsylvania 17325-1795",www.ltsg.edu,"4-year, Private not-for-profit",176 Lutheran Theological Seminary at Philadelphia,"7301 Germantown Ave, Philadelphia, Pennsylvania 19119-1794",www.ltsp.edu,"4-year, Private not-for-profit",268 Lutheran Theological Southern Seminary,"4201 N Main St, Columbia, South Carolina 29203-5898",www.ltss.edu,"4-year, Private not-for-profit",146 Lycoming College,"700 College Place, Williamsport, Pennsylvania 17701-5192",www.lycoming.edu,"4-year, Private not-for-profit",1328 Lyme Academy College of Fine Arts,"84 Lyme St, Old Lyme, Connecticut 06371",www.lymeacademy.edu,"4-year, Private not-for-profit",128 Lynchburg College,"1501 Lakeside Dr, Lynchburg, Virginia 24501-3199",www.lynchburg.edu,"4-year, Private not-for-profit",2572 Lyndon State College,"1001 College Rd, Lyndonville, Vermont 05851-0919",WWW.LYNDONSTATE.EDU,"4-year, Public",1384 Lynn University,"3601 N. Military Trail, Boca Raton, Florida 33431-5598",www.lynn.edu,"4-year, Private not-for-profit",2410 Lyon College,"2300 Highland Road, Batesville, Arkansas 72501",www.lyon.edu,"4-year, Private not-for-profit",458 Macalester College,"1600 Grand Ave, Saint Paul, Minnesota 55105-1899",www.macalester.edu,"4-year, Private not-for-profit",1900 Machzikei Hadath Rabbinical College,"5407 16th Ave, Brooklyn, New York 11204",,"4-year, Private not-for-profit",114 MacMurray College,"447 E. College Ave, Jacksonville, Illinois 62650-2590",www.mac.edu,"4-year, Private not-for-profit",602 Macon State College,"100 College Station Dr, Macon, Georgia 31206-5145",www.maconstate.edu,"4-year, primarily associate's, Public",6431 Madison Area Technical College,"3550 Anderson St, Madison, Wisconsin 53704",matcmadison.edu,"4-year, Public",14666 Madonna University,"36600 Schoolcraft Rd, Livonia, Michigan 48150-1176",www.madonna.edu,"4-year, Private not-for-profit",4035 Magdalen College,"511 Kearsarge Mtn Rd, Warner, New Hampshire 03278-9206",www.magdalen.edu,"4-year, Private not-for-profit",63 Magnolia Bible College,"822 S Huntington St, Kosciusko, Mississippi 39090",www.magnolia.edu,"4-year, Private not-for-profit",19 Maharishi University of Management,"1000 N 4th St, Fairfield, Iowa 52557",www.mum.edu,"4-year, Private not-for-profit",1206 Maine College of Art,"522 Congress St., Portland, Maine 04101-3494",www.meca.edu,"4-year, Private not-for-profit",369 Maine Maritime Academy,"C3, Castine, Maine 04420-0001",www.mainemaritime.edu,"4-year, Public",893 Malone University,"2600 Cleveland Avenue NW, Canton, Ohio 44709-3897",www.malone.edu,"4-year, Private not-for-profit",2442 Manchester College,"604 College Ave, North Manchester, Indiana 46962",www.manchester.edu,"4-year, Private not-for-profit",1145 Manhattan Christian College,"1415 Anderson Ave, Manhattan, Kansas 66502-4801",www.mccks.edu,"4-year, Private not-for-profit",364 Manhattan College,"Manhattan College Pky, Bronx, New York 10471-4098",www.manhattan.edu,"4-year, Private not-for-profit",3441 Manhattan School of Music,"120 Claremont Ave, New York, New York 10027-4698",www.msmnyc.edu,"4-year, Private not-for-profit",967 Manhattanville College,"2900 Purchase St, Purchase, New York 10577",www.manhattanville.edu,"4-year, Private not-for-profit",2823 Mansfield University of Pennsylvania,"Mansfield, Pennsylvania 16933",www.mansfield.edu,"4-year, Public",3422 Maple Springs Baptist Bible College and Seminary,"4130 Belt Rd, Capitol Heights, Maryland 20743",www.msbbcs.edu,"4-year, Private not-for-profit",159 Maranatha Baptist Bible College Inc,"745 W Main St, Watertown, Wisconsin 53094",mbbc.edu,"4-year, Private not-for-profit",857 Marian College,"3200 Cold Spring Rd, Indianapolis, Indiana 46222-1997",www.marian.edu,"4-year, Private not-for-profit",2143 Marian University-Wisconsin,"45 S National Ave, Fond Du Lac, Wisconsin 54935-4699",www.marianuniversity.edu,"4-year, Private not-for-profit",2891 Marietta College,"Irvine Bldg, Marietta, Ohio 45750",www.marietta.edu,"4-year, Private not-for-profit",1606 Marist College,"3399 North Rd, Poughkeepsie, New York 12601",www.Marist.edu,"4-year, Private not-for-profit",5828 Marlboro College,"2582 South Rd, Marlboro, Vermont 05344-0300",www.marlboro.edu,"4-year, Private not-for-profit",326 Marlboro College Graduate Center,"28 Vernon Street, Suite #120, Brattleboro, Vermont 05301",www.gradcenter.marlboro.edu,"4-year, Private not-for-profit",42 Marquette University,"615 N 11th St, Milwaukee, Wisconsin 53233",www.marquette.edu,"4-year, Private not-for-profit",11633 Mars Hill College,"100 Athletic St, Mars Hill, North Carolina 28754",www.mhc.edu,"4-year, Private not-for-profit",1245 Mars Hill Graduate School,"2501 Elliott Avenue, Seattle, Washington 98121",www.mhgs.edu,"4-year, Private not-for-profit",276 Marshall University,"1 John Marshall Dr, Huntington, West Virginia 25755",www.marshall.edu/,"4-year, Public",13573 Martin Luther College,"1995 Luther Ct, New Ulm, Minnesota 56073-3965",www.mlc-wels.edu,"4-year, Private not-for-profit",842 Martin Methodist College,"433 West Madison Street, Pulaski, Tennessee 38478-2799",www.martinmethodist.edu,"4-year, Private not-for-profit",953 Martin University,"2171 Avondale Place, Indianapolis, Indiana 46218-0567",WWW.MARTIN.EDU/,"4-year, Private not-for-profit",1236 Mary Baldwin College,"New & Frederick St, Staunton, Virginia 24401",www.mbc.edu,"4-year, Private not-for-profit",1738 Marygrove College,"8425 W McNichols Rd, Detroit, Michigan 48221-2599",www.marygrove.edu,"4-year, Private not-for-profit",2879 Maryland Institute College of Art,"1300 Mount Royal Ave, Baltimore, Maryland 21217-4134",www.mica.edu,"4-year, Private not-for-profit",2075 Marylhurst University,"17600 Pacific Hwy - Hwy 43, Marylhurst, Oregon 97036-0261",www.marylhurst.edu,"4-year, Private not-for-profit",1802 Marymount Manhattan College,"221 E 71st St, New York, New York 10021-4597",www.mmm.edu,"4-year, Private not-for-profit",1988 Marymount University,"2807 N Glebe Rd, Arlington, Virginia 22207-4299",www.marymount.edu,"4-year, Private not-for-profit",3548 Maryville College,"502 E Lamar Alexander Pky, Maryville, Tennessee 37804-5907",www.maryvillecollege.edu,"4-year, Private not-for-profit",1114 Maryville University of Saint Louis,"650 Maryville University Drive, Saint Louis, Missouri 63141-7299",www.maryville.edu,"4-year, Private not-for-profit",3517 Marywood University,"2300 Adams Ave, Scranton, Pennsylvania 18509-1598",www.marywood.edu,"4-year, Private not-for-profit",3378 Massachusetts College of Art and Design,"621 Huntington Ave, Boston, Massachusetts 02115-5882",www.massart.edu,"4-year, Public",2340 Massachusetts College of Liberal Arts,"375 Church St, North Adams, Massachusetts 01247-4100",www.mcla.edu,"4-year, Public",1942 Massachusetts College of Pharmacy and Health Sciences,"179 Longwood Ave, Boston, Massachusetts 02115-5896",www.mcphs.edu,"4-year, Private not-for-profit",3909 Massachusetts General Hospital Dietetic Internship,"Fruit St, Boston, Massachusetts 02114-2696",,"4-year, Private not-for-profit",12 Massachusetts Institute of Technology,"77 Massachusetts Avenue, Cambridge, Massachusetts 02139-4307",web.mit.edu/student/,"4-year, Private not-for-profit",10299 Massachusetts Maritime Academy,"101 Academy Dr, Buzzards Bay, Massachusetts 02532-1803",www.maritime.edu,"4-year, Public",1166 Massachusetts School of Law,"500 Federal St Woodland Park, Andover, Massachusetts 01810",www.mslaw.edu,"4-year, Private not-for-profit",675 Massachusetts School of Professional Psychology,"221 Rivermoor St, Boston, Massachusetts 02132",www.mspp.edu,"4-year, Private not-for-profit",364 Maui Community College,"310 Kaahumanu Ave, Kahului, Hawaii 96732-1644",www.maui.hawaii.edu/index.php,"4-year, primarily associate's, Public",3287 Mayo Graduate School,"200 1st St SW, Rochester, Minnesota 55905",www.mayo.edu/mgs/index.html,"4-year, Private not-for-profit",229 Mayo Medical School,"200 1st St SW, Rochester, Minnesota 55905",www.mayo.edu/mms/,"4-year, Private not-for-profit",169 Mayo School of Health Sciences,"200 First St SW, Rochester, Minnesota 55905",www.mayo.edu/mshs/,"4-year, Private not-for-profit",299 Mayville State University,"330 Third Street NE, Mayville, North Dakota 58257-1299",www.mayvillestate.edu,"4-year, Public",789 McCormick Theological Seminary,"5460 S. University, Chicago, Illinois 60615",www.mccormick.edu,"4-year, Private not-for-profit",231 McDaniel College,"2 College Hill, Westminster, Maryland 21157",www.mcdaniel.edu,"4-year, Private not-for-profit",3789 McKendree University,"701 College Rd, Lebanon, Illinois 62254-1291",www.mckendree.edu,"4-year, Private not-for-profit",3257 McMurry University,"S 14th and Sayles Blvd, Abilene, Texas 79697",www.mcm.edu/,"4-year, Private not-for-profit",1515 McNally Smith College of Music,"19 Exchange Street East, Saint Paul, Minnesota 55101-2220",www.mcnallysmith.edu,"4-year, primarily associate's, Private for-profit",570 McNeese State University,"4205 Ryan St, Lake Charles, Louisiana 70609-2215",www.mcneese.edu,"4-year, Public",8283 McPherson College,"1600 E Euclid, McPherson, Kansas 67460-1402",www.mcpherson.edu,"4-year, Private not-for-profit",595 Meadville Lombard Theological School,"5701 South Woodlawn Avenue, Chicago, Illinois 60637",www.meadville.edu,"4-year, Private not-for-profit",63 Medaille College,"18 Agassiz Circle, Buffalo, New York 14214-2695",www.medaille.edu,"4-year, Private not-for-profit",2883 Medcenter One College of Nursing,"512 N 7th St, Bismarck, North Dakota 58501-4425",www.medcenterone.com/collegeofnursing,"4-year, Private not-for-profit",91 MedCentral College of Nursing,"335 Glessner Ave, Mansfield, Ohio 44903-2265",www.medcentral.edu,"4-year, Private not-for-profit",391 Medical College of Georgia,"1120 Fifteenth St, Augusta, Georgia 30912",www.mcg.edu,"4-year, Public",2443 Medical College of Wisconsin,"8701 Watertown Plank Rd, Milwaukee, Wisconsin 53226-0509",www.mcw.edu,"4-year, Private not-for-profit",1228 Medical University of South Carolina,"179 Ashley Ave, Charleston, South Carolina 29425",www.musc.edu,"4-year, Public",2528 Meharry Medical College,"1005 DB TODD BLVD, NASHVILLE, Tennessee 37208",www.mmc.edu,"4-year, Private not-for-profit",739 Memphis College of Art,"1930 Poplar Ave, Memphis, Tennessee 38104-2764",www.mca.edu,"4-year, Private not-for-profit",404 Memphis Theological Seminary,"168 East Parkway South, Memphis, Tennessee 38104-4395",www.memphisseminary.edu/,"4-year, Private not-for-profit",280 Menlo College,"1000 El Camino Real, Atherton, California 94027-4301",www.menlo.edu,"4-year, Private not-for-profit",666 Mennonite Brethren Biblical Seminary,"4824 E Butler, Fresno, California 93727-5097",www.mbseminary.edu,"4-year, Private not-for-profit",144 Mercer University,"1400 Coleman Avenue, Macon, Georgia 31207",www.mercer.edu,"4-year, Private not-for-profit",7622 Mercy College,"555 Broadway, Dobbs Ferry, New York 10522",mercy.edu,"4-year, Private not-for-profit",9043 Mercy College of Health Sciences,"928 Sixth Ave, Des Moines, Iowa 50309-1239",www.mchs.edu,"4-year, primarily associate's, Private not-for-profit",669 Mercy College of Northwest Ohio,"2221 Madison Avenue, Toledo, Ohio 43604-1132",www.mercycollege.edu,"4-year, primarily associate's, Private not-for-profit",921 Mercyhurst College,"501 E 38th St, Erie, Pennsylvania 16546",www.mercyhurst.edu,"4-year, Private not-for-profit",4326 Meredith College,"3800 Hillsborough St, Raleigh, North Carolina 27607-5298",www.meredith.edu,"4-year, Private not-for-profit",2250 Merrimack College,"315 Turnpike St, North Andover, Massachusetts 01845",www.merrimack.edu,"4-year, Private not-for-profit",2143 Mesa State College,"1100 North Avenue, Grand Junction, Colorado 81501-3122",www.mesastate.edu,"4-year, Public",6262 Mesivta of Eastern Parkway-Yeshiva Zichron Meilech,"510 Dahill Rd, Brooklyn, New York 11218",,"4-year, Private not-for-profit",39 Mesivta Torah Vodaath Rabbinical Seminary,"425 E 9th St, Brooklyn, New York 11218",,"4-year, Private not-for-profit",265 Mesivtha Tifereth Jerusalem of America,"145 E Broadway, New York, New York 10002-6301",,"4-year, Private not-for-profit",93 Messenger College,"300 E 50th St, Joplin, Missouri 64804-4909",www.messengercollege.edu,"4-year, Private not-for-profit",71 Messiah College,"One College Ave, Grantham, Pennsylvania 17027",www.messiah.edu,"4-year, Private not-for-profit",2802 Methodist College of Nursing,"415 St. Mark Court, Peoria, Illinois 61603",www.mcon.edu,"4-year, Private not-for-profit",126 Methodist Theological School in Ohio,"3081 Columbus Pike, Delaware, Ohio 43015-3211",www.mtso.edu,"4-year, Private not-for-profit",222 Methodist University,"5400 Ramsey St, Fayetteville, North Carolina 28311-1420",www.methodist.edu,"4-year, Private not-for-profit",2190 Metropolitan College of New York,"431 Canal St, New York, New York 10013-1919",www.mcny.edu,"4-year, Private not-for-profit",987 Metropolitan State College of Denver,"Speer Blvd and Colfax Ave, Denver, Colorado 80217-3362",www.mscd.edu,"4-year, Public",21729 Metropolitan State University,"700 E Seventh St, Saint Paul, Minnesota 55106-5000",www.metrostate.edu,"4-year, Public",6939 MGH Institute of Health Professions,"36 1st Avenue, Boston, Massachusetts 02129-4557",www.mghihp.edu,"4-year, Private not-for-profit",835 Miami Dade College,"300 NE 2nd Ave., Miami, Florida 33132-2297",www.mdc.edu/main/,"4-year, primarily associate's, Public",57222 Miami University-Hamilton,"1601 University Blvd, Hamilton, Ohio 45011",www.ham.muohio.edu,"4-year, Public",2858 Miami University-Middletown,"4200 E University Blvd, Middletown, Ohio 45042",www.mid.muohio.edu,"4-year, Public",1965 Miami University-Oxford,"500 High St, Oxford, Ohio 45056",www.muohio.edu,"4-year, Public",17191 Michigan Jewish Institute,"25401 Coolidge Hwy, Oak Park, Michigan 48237",www.mji.edu,"4-year, primarily associate's, Private not-for-profit",71 Michigan School of Professional Psychology,"26811 Orchard Lake Rd., Farmington Hills, Michigan 48334-4512",www.mispp.edu,"4-year, Private not-for-profit",127 Michigan State University,"East Lansing, Michigan 48824-1046",www.msu.edu,"4-year, Public",46510 Michigan State University College of Law,"368 Law College Bldg, East Lansing, Michigan 48824-1300",www.law.msu.edu,"4-year, Private not-for-profit",956 Michigan Technological University,"1400 Townsend Drive, Houghton, Michigan 49931-1295",www.mtu.edu,"4-year, Public",7009 Michigan Theological Seminary,"41550 E Ann Arbor Trail, Plymouth, Michigan 48170",www.mts.edu,"4-year, Private not-for-profit",184 Mid-America Christian University,"3500 SW 119th St, Oklahoma City, Oklahoma 73170-9797",www.macu.edu,"4-year, Private not-for-profit",997 Mid-America College of Funeral Service,"3111 Hamburg Pke, Jeffersonville, Indiana 47130",www.mid-america.edu,"4-year, primarily associate's, Private not-for-profit",77 MidAmerica Nazarene University,"2030 E College Way, Olathe, Kansas 66062-1899",www.mnu.edu,"4-year, Private not-for-profit",1743 Mid-Continent University,"99 Powell Rd E, Mayfield, Kentucky 42066-9007",www.midcontinent.edu,"4-year, Private not-for-profit",1636 Middle Georgia College,"1100 Second St SE, Cochran, Georgia 31014-1599",www.mgc.edu,"4-year, primarily associate's, Public",3434 Middle Tennessee School of Anesthesia Inc,"315 Hospital Drive, Madison, Tennessee 37116",www.MTSA.edu,"4-year, Private not-for-profit",213 Middle Tennessee State University,"1301 East Main Street, Murfreesboro, Tennessee 37132",www.mtsu.edu,"4-year, Public",23872 Middlebury College,"Old Chapel, Middlebury, Vermont 05753",www.middlebury.edu,"4-year, Private not-for-profit",2455 Midland College,"3600 N Garfield, Midland, Texas 79705",www.midland.edu,"4-year, primarily associate's, Public",5795 Midland Lutheran College,"900 N. Clarkson, Fremont, Nebraska 68025",www.MLC.edu,"4-year, Private not-for-profit",803 Midstate College,"411 W Northmoor Road, Peoria, Illinois 61614-3595",www.midstate.edu,"4-year, primarily associate's, Private for-profit",647 Midway College,"512 E. Stephens St, Midway, Kentucky 40347-1120",www.midway.edu,"4-year, Private not-for-profit",1283 Midwest College of Oriental Medicine,"4334 N Hazel, Suite 206, Chicago, Illinois 60613-1429",www.Acupuncture.edu,"4-year, Private for-profit",156 Midwest College of Oriental Medicine,"6232 Bankers Road, Racine, Wisconsin 53403-9747",www.Acupuncture.edu,"4-year, Private for-profit",117 Midwest University,"851 Parr Rd, Wentzville, Missouri 63385",www.midwest.edu,"4-year, Private not-for-profit",223 Midwestern Baptist Theological Seminary,"5001 N. Oak Trafficway, Kansas City, Missouri 64118-4697",www.mbts.edu,"4-year, Private not-for-profit",654 Midwestern State University,"3410 Taft Blvd, Wichita Falls, Texas 76308-2099",www.mwsu.edu,"4-year, Public",6093 Midwestern University,"555 31st Street, Downers Grove, Illinois 60515-5514",www.midwestern.edu,"4-year, Private not-for-profit",1998 Midwestern University,"19555 N 59th Ave, Glendale, Arizona 85308",www.midwestern.edu,"4-year, Private not-for-profit",1787 Miles College,"5500 Myron Massey Blvd, Fairfield, Alabama 35064",www.miles.edu,"4-year, Private not-for-profit",1786 Miller-Motte College,"5000 Market Street, Wilmington, North Carolina 28405",www.miller-motte.com,"4-year, primarily associate's, Private for-profit",737 Millersville University of Pennsylvania,"20 Dilworth Rd, Millersville, Pennsylvania 17551-0302",www.millersville.edu,"4-year, Public",8320 Milligan College,"Milligan Hwy, Milligan College, Tennessee 37682",www.milligan.edu,"4-year, Private not-for-profit",1018 Millikin University,"1184 W Main St, Decatur, Illinois 62522-2084",www.millikin.edu,"4-year, Private not-for-profit",2344 Mills College,"5000 MacArthur Blvd, Oakland, California 94613",www.mills.edu,"4-year, Private not-for-profit",1476 Millsaps College,"1701 N State St, Jackson, Mississippi 39210-0001",www.millsaps.edu,"4-year, Private not-for-profit",1118 Milwaukee Institute of Art & Design,"273 E Erie St, Milwaukee, Wisconsin 53202-6003",www.miad.edu,"4-year, Private not-for-profit",669 Milwaukee School of Engineering,"1025 N Broadway, Milwaukee, Wisconsin 53202-3109",www.msoe.edu,"4-year, Private not-for-profit",2621 Minneapolis College of Art and Design,"2501 Stevens Ave, Minneapolis, Minnesota 55404",WWW.MCAD.EDU,"4-year, Private not-for-profit",741 Minnesota School of Business,"2521 Pennington Drive NW, Rochester, Minnesota 55901",www.msbcollege.edu,"4-year, primarily associate's, Private for-profit",715 Minnesota School of Business,"3680 Pheasant Ridge Dr NE, Blaine, Minnesota 55449",,"4-year, primarily associate's, Private for-profit",751 Minnesota School of Business,"1401 W 76 St, Richfield, Minnesota 55423",www.msbcollege.edu,"4-year, primarily associate's, Private for-profit",1665 Minnesota School of Business,"1455 County Rd 101 North, Plymouth, Minnesota 55447",www.msbcollege.edu,"4-year, primarily associate's, Private for-profit",519 Minnesota School of Business-Brooklyn Center,"5910 Shingle Creek Pky, Brooklyn Center, Minnesota 55430",www.msbcollege.edu,"4-year, primarily associate's, Private for-profit",688 Minnesota School of Business-Shakopee,"1200 Shakopee Town Square, Shakopee, Minnesota 55379",www.msbcollege.edu,"4-year, primarily associate's, Private for-profit",502 Minnesota School of Business-Waite Park,"1201 2nd Street South, Waite Park, Minnesota 56387",www.msbcollege.edu,"4-year, primarily associate's, Private for-profit",968 Minnesota State University-Mankato,"South Rd and Ellis Ave, Mankato, Minnesota 56001",www.mnsu.edu,"4-year, Public",14621 Minnesota State University-Moorhead,"1104 7th Ave S, Moorhead, Minnesota 56563",www.mnstate.edu,"4-year, Public",7520 Minot State University,"500 University Ave W, Minot, North Dakota 58707",www.minotstateu.edu,"4-year, Public",3432 Mirrer Yeshiva Cent Institute,"1791-5 Ocean Pky, Brooklyn, New York 11223-2010",,"4-year, Private not-for-profit",289 Misericordia University,"301 Lake St, Dallas, Pennsylvania 18612-1098",www.misericordia.edu,"4-year, Private not-for-profit",2501 Mississippi College,"200 South Capitol Street, Clinton, Mississippi 39058",www.mc.edu,"4-year, Private not-for-profit",4741 Mississippi State University,"Mississippi State, Mississippi 39762",www.msstate.edu/,"4-year, Public",17824 Mississippi University for Women,"1100 College Street, Columbus, Mississippi 39701",www.muw.edu,"4-year, Public",2365 Mississippi Valley State University,"14000 Highway 82 West, Itta Bena, Mississippi 38941-1400",www.mvsu.edu,"4-year, Public",2929 Missouri Baptist University,"One College Park Dr, Saint Louis, Missouri 63141-8698",www.mobap.edu,"4-year, Private not-for-profit",4614 Missouri College,"1405 South Hanley, Brentwood, Missouri 63144",,"4-year, primarily associate's, Private for-profit",510 Missouri Southern State University,"3950 E Newman Rd, Joplin, Missouri 64801-1595",www.mssu.edu,"4-year, Public",5264 Missouri State University,"901 S National, Springfield, Missouri 65897",www.missouristate.edu,"4-year, Public",19489 Missouri Tech,"1167 Corporate Lake Dr, Saint Louis, Missouri 63132-1716",www.motech.edu,"4-year, primarily associate's, Private for-profit",150 Missouri University of Science and Technology,"1870 Miner Circle, Rolla, Missouri 65409",www.mst.edu/,"4-year, Public",6367 Missouri Valley College,"500 E College St, Marshall, Missouri 65340",www.moval.edu,"4-year, Private not-for-profit",1727 Missouri Western State University,"4525 Downs Dr, Saint Joseph, Missouri 64507",www.missouriwestern.edu,"4-year, Public",5508 Mitchell College,"437 Pequot Ave, New London, Connecticut 06320",www.mitchell.edu,"4-year, Private not-for-profit",936 Molloy College,"1000 Hempstead Ave, Rockville Centre, New York 11571-5002",www.molloy.edu,"4-year, Private not-for-profit",3879 Monmouth College,"700 E Broadway, Monmouth, Illinois 61462-1998",www.monm.edu,"4-year, Private not-for-profit",1328 Monmouth University,"400 Cedar Ave, West Long Branch, New Jersey 07764-1898",www.monmouth.edu,"4-year, Private not-for-profit",6442 Monroe College-Main Campus,"Monroe College Way, Bronx, New York 10468",www.monroecollege.edu,"4-year, primarily associate's, Private for-profit",4736 Monroe College-New Rochelle,"434 Main St, New Rochelle, New York 10801",www.monroecollege.edu,"4-year, Private for-profit",2164 Montana State University,"Montana State University, Bozeman, Montana 59717",www.montana.edu/,"4-year, Public",11976 Montana State University-Billings,"1500 University Drive, Billings, Montana 59101-0298",www.msubillings.edu,"4-year, Public",3598 Montana State University-Northern,"300 W 11th St, Havre, Montana 59501",WWW.MSUN.EDU,"4-year, Public",1217 Montana Tech of the University of Montana,"1300 W Park St, Butte, Montana 59701-8997",www.mtech.edu,"4-year, Public",1980 Montclair State University,"1 Normal Avenue - 855 Valley Road, Montclair, New Jersey 07043-1624",www.montclair.edu,"4-year, Public",17475 Monterey Institute of International Studies,"460 Pierce Street, Monterey, California 93940",www.miis.edu,"4-year, Private not-for-profit",849 Montessori Education Center of the Rockies,"4745 Walnut Street, Boulder, Colorado 80301",www.mecr.edu,"4-year, Private not-for-profit",75 Montessori Institute of Milwaukee,"3195 S Superior St Ste L428, Milwaukee, Wisconsin 53207-3074",www.montessori6-12ami.org,"4-year, Private not-for-profit",44 Montreat College,"310 Gaither Circle, Montreat, North Carolina 28757-1267",www.montreat.edu,"4-year, Private not-for-profit",1113 Montserrat College of Art,"23 Essex Street, Beverly, Massachusetts 01915-4508",www.montserrat.edu,"4-year, Private not-for-profit",278 Moore College of Art and Design,"20th and the Parkway, Philadelphia, Pennsylvania 19103-1179",www.moore.edu,"4-year, Private not-for-profit",556 Moravian College and Moravian Theological Seminary,"1200 Main St, Bethlehem, Pennsylvania 18018-6650",www.moravian.edu,"4-year, Private not-for-profit",2040 Morehead State University,"University Blvd, Morehead, Kentucky 40351",www.moreheadstate.edu,"4-year, Public",8832 Morehouse College,"830 Westview Dr SW, Atlanta, Georgia 30314",www.morehouse.edu,"4-year, Private not-for-profit",2781 Morehouse School of Medicine,"720 Westview Dr SW, Atlanta, Georgia 30310-1495",www.msm.edu,"4-year, Private not-for-profit",322 Morgan State University,"1700 East Cold Spring Lane, Baltimore, Maryland 21251-0001",www.morgan.edu,"4-year, Public",7005 Morningside College,"1501 Morningside Ave, Sioux City, Iowa 51106-1751",www.morningside.edu,"4-year, Private not-for-profit",1906 Morris College,"100 West College Street, Sumter, South Carolina 29150-3599",www.morris.edu,"4-year, Private not-for-profit",921 Morrison University,"10315 Professional Circle, Second Floor, Reno, Nevada 89521",www.morrison.anthem.edu,"4-year, Private for-profit",116 Morrisville State College,"Morrisville, New York 13408",www.morrisville.edu,"4-year, primarily associate's, Public",3338 Mount Aloysius College,"7373 Admiral Peary Hwy, Cresson, Pennsylvania 16630-1999",www.mtaloy.edu/home/,"4-year, primarily associate's, Private not-for-profit",1644 Mount Angel Seminary,"1 Abbey Dr, Saint Benedict, Oregon 97373-0505",www.mountangelabbey.org/seminary/index.html,"4-year, Private not-for-profit",142 Mount Carmel College of Nursing,"127 So. Davis Ave, Columbus, Ohio 43222-1504",www.mccn.edu,"4-year, Private not-for-profit",731 Mount Holyoke College,"50 College Street, South Hadley, Massachusetts 01075-1489",www.mtholyoke.edu,"4-year, Private not-for-profit",2241 Mount Ida College,"777 Dedham Street, Newton, Massachusetts 02459",www.mountida.edu,"4-year, Private not-for-profit",1460 Mount Marty College,"1105 W. 8th Street, Yankton, South Dakota 57078-3724",www.mtmc.edu,"4-year, Private not-for-profit",1180 Mount Mary College,"2900 N. Menomonee River Pky, Milwaukee, Wisconsin 53222-4597",www.mtmary.edu,"4-year, Private not-for-profit",1862 Mount Mercy College,"1330 Elmhurst Dr NE, Cedar Rapids, Iowa 52402-4797",www.mtmercy.edu,"4-year, Private not-for-profit",1555 Mount Olive College,"634 Henderson St, Mount Olive, North Carolina 28365-0919",www.moc.edu,"4-year, Private not-for-profit",3390 Mount Saint Mary College,"330 Powell Avenue, Newburgh, New York 12550",www.msmc.edu,"4-year, Private not-for-profit",2629 Mount Sinai School of Medicine,"1 Gustave L Levy Place, New York, New York 10029-6574",www.mssm.edu,"4-year, Private not-for-profit",902 Mount St Mary's College,"12001 Chalon Rd, Los Angeles, California 90049-1599",www.msmc.la.edu,"4-year, Private not-for-profit",2363 Mount St Mary's University,"16300 Old Emmitsburg Rd, Emmitsburg, Maryland 21727-7799",www.msmary.edu,"4-year, Private not-for-profit",2079 Mount St. Mary's College - Doheny Campus,"10 Chester Pl., Los Angeles, California 90007",www.msmc.la.edu,"4-year, Private not-for-profit", Mount Union College,"1972 Clark Ave., Alliance, Ohio 44601-3993",www.muc.edu,"4-year, Private not-for-profit",2204 Mount Vernon Nazarene University,"800 Martinsburg Rd, Mount Vernon, Ohio 43050-9500",www.mvnu.edu,"4-year, Private not-for-profit",2558 Mountain State University,"609 S Kanawha St, Beckley, West Virginia 25801-9003",www.mountainstate.edu,"4-year, Private not-for-profit",5108 Mt Sierra College,"101 E Huntington Dr, Monrovia, California 91016",www.mtsierra.edu,"4-year, Private for-profit",460 Muhlenberg College,"2400 Chew Street, Allentown, Pennsylvania 18104",www.muhlenberg.edu,"4-year, Private not-for-profit",2492 Multnomah University,"8435 NE Glisan St, Portland, Oregon 97220",www.multnomah.edu,"4-year, Private not-for-profit",840 Murray State University,"218 Wells Hall, Murray, Kentucky 42071-3318",www.murraystate.edu,"4-year, Public",10014 Musicians Institute,"1655 McCadden, Hollywood, California 90028",www.mi.edu,"4-year, primarily associate's, Private for-profit",1206 Muskingum College,"163 Stormont Street, New Concord, Ohio 43762",www.muskingum.edu,"4-year, Private not-for-profit",2135 Naropa University,"2130 Arapahoe Ave, Boulder, Colorado 80302-6697",www.naropa.edu,"4-year, Private not-for-profit",1075 Nashotah House,"2777 Mission Rd, Nashotah, Wisconsin 53058-9793",www.nashotah.edu,"4-year, Private not-for-profit",107 National American University-Albuquerque,"4775 Indian School Road NE, Suite 200, Albuequerque, New Mexico 87110-3976",www.national.edu,"4-year, Private for-profit",354 National American University-Austin,"13801 North Mo Pac Expressway Suite 300, Austin, Texas 78727",www.national.edu,"4-year, Private for-profit",51 National American University-Bloomington,"7801 Metro Parkway, Suite 200, Bloomington, Minnesota 55425",www.national.edu,"4-year, Private for-profit",270 National American University-Brooklyn Center,"6120 Earle Brown Drive, Suite 100, Brooklyn Center, Minnesota 55430-4100",www.national.edu,"4-year, Private for-profit",331 National American University-Colorado Springs,"5125 North Academy Boulevard, Colorado Springs, Colorado 80918-4001",www.national.edu,"4-year, Private for-profit",276 National American University-Denver,"1325 S. Colorado Boulevard, Suite 100, Denver, Colorado 80222-3308",www.national.edu,"4-year, primarily associate's, Private for-profit",274 National American University-Ellsworth AFB Extension,"1000 Ellsworth Street Suite 2400-B, Ellsworth AFB, South Dakota 57706",www.national.edu,"4-year, Private for-profit",324 National American University-Independence,"3620 Arrowhead Avenue, Independence, Missouri 64057",www.national.edu,"4-year, Private for-profit",424 National American University-Overland Park,"10310 Mastin, Overland Park, Kansas 66212-5451",www.national.edu,"4-year, Private for-profit",309 National American University-Rapid City,"321 Kansas City Street, Rapid City, South Dakota 57701-3692",www.national.edu,"4-year, Private for-profit",1637 National American University-Rio Rancho,"1601 Rio Rancho, Suite 200, Highway 528 & Sara Road, Rio Rancho, New Mexico 87124-1903",www.national.edu,"4-year, Private for-profit",163 National American University-Roseville,"1550 West Highway 36, Roseville, Minnesota 55113-4035",www.national.edu,"4-year, primarily associate's, Private for-profit",322 National American University-Sioux Falls,"Vista Park Office Building Suite 100, 2801 South Kiwanis Ave, Sioux Falls, South Dakota 57105-4293",www.national.edu,"4-year, primarily associate's, Private for-profit",383 National American University-Wichita,"7309 E 21st St. N. Suite G40, Wichita, Kansas 67206",www.national.edu,"4-year, Private for-profit",133 National American University-Zona Rosa,"7490 NW 87th Street, Kansas City, Missouri 64153",www.national.edu,"4-year, primarily associate's, Private for-profit",318 National College of Business and Technology-Arecibo,"Arecibo Centro Plz Ave Manuel Perez Aviles, Arecibo, Puerto Rico 00612",www.nationalcollegepr.edu,"4-year, primarily associate's, Private for-profit",1724 National College of Business and Technology-Bayamon,"St Rd 2 National College Plaza Bldg. Km., Bayamon, Puerto Rico 00960-2036",www.nationalcollegepr.edu,"4-year, primarily associate's, Private for-profit",2443 National College of Business and Technology-Rio Grande,"Carr. #3 Km 22.01 - Barrio Cienaga Baja, Rio Grande, Puerto Rico 00745",www.nationalcollegepr.edu,"4-year, primarily associate's, Private for-profit",1505 National College of Natural Medicine,"049 SW Porter Street, Portland, Oregon 97201-4848",www.ncnm.edu,"4-year, Private not-for-profit",71 National College-Lexington,"2376 Sir Barton Way, Lexington, Kentucky 40509",www.national-college.edu,"4-year, primarily associate's, Private for-profit",2723 National College-Salem,"1813 E Main St, Salem, Virginia 24153",www.national-college.edu,"4-year, primarily associate's, Private for-profit",4644 National Graduate School of Quality Management,"186 Jones Road, Falmouth, Massachusetts 02540-2958",www.ngs.edu,"4-year, Private not-for-profit",262 National Labor College,"10000 New Hampshire Ave, Silver Spring, Maryland 20903-1706",www.nlc.edu,"4-year, Private not-for-profit",222 National University,"11255 North Torrey Pines Road, La Jolla, California 92037-1011",www.nu.edu,"4-year, Private not-for-profit",15521 National University of Health Sciences,"200 E Roosevelt Rd, Lombard, Illinois 60148-4583",www.nuhs.edu,"4-year, Private not-for-profit",691 National-Louis University,"122 S Michigan Ave, Chicago, Illinois 60603",www.nl.edu,"4-year, Private not-for-profit",7056 Naval Postgraduate School,"1 University Circle, Monterey, California 93943",www.nps.edu,"4-year, Public",2309 Nazarene Bible College,"1111 Academy Park Loop, Colorado Springs, Colorado 80910-3704",www.nbc.edu,"4-year, Private not-for-profit",977 Nazarene Theological Seminary,"1700 E Meyer Blvd, Kansas City, Missouri 64131-1246",www.nts.edu,"4-year, Private not-for-profit",300 Nazareth College,"4245 East Ave, Rochester, New York 14618-3790",www.naz.edu,"4-year, Private not-for-profit",3250 Nebraska Christian College,"12550 S. 114th St., Papillion, Nebraska 68046",nechristian.edu,"4-year, Private not-for-profit",164 Nebraska Methodist College of Nursing & Allied Health,"720 North 87th Street, Omaha, Nebraska 68114-2852",www.methodistcollege.edu,"4-year, Private not-for-profit",589 Nebraska Wesleyan University,"5000 St Paul Ave, Lincoln, Nebraska 68504-2794",www.nebrwesleyan.edu/,"4-year, Private not-for-profit",2086 Ner Israel Rabbinical College,"400 Mount Wilson Ln, Baltimore, Maryland 21208",,"4-year, Private not-for-profit",624 Neumann College,"One Neumann Drive, Aston, Pennsylvania 19014-1298",www.neumann.edu,"4-year, Private not-for-profit",3037 Neumont University,"10701 S. River Front Parkway, Suite 300, South Jordan, Utah 84095",www.neumont.edu/,"4-year, Private for-profit",271 Nevada State College,"1125 Nevada State Drive, Henderson, Nevada 89015",www.nsc.nevada.edu,"4-year, Public",2126 New Brunswick Theological Seminary,"17 Seminary Place, New Brunswick, New Jersey 08901-1107",www.nbts.edu,"4-year, Private not-for-profit",220 New College of Florida,"5800 Bay Shore Road, Sarasota, Florida 34243-2109",www.ncf.edu,"4-year, Public",785 New England College,"98 Bridge St, Henniker, New Hampshire 03242",www.nec.edu/,"4-year, Private not-for-profit",1776 New England College of Optometry,"424 Beacon St, Boston, Massachusetts 02115",www.neco.edu,"4-year, Private not-for-profit",461 New England Culinary Institute,"56 College Street, Montpelier, Vermont 05602",www.neci.edu,"4-year, primarily associate's, Private for-profit",516 New England Culinary Institute at Essex,"5 Franklin Street, Essex Junction, Vermont 05452",www.neci.edu,"4-year, primarily associate's, Private for-profit",152 New England Institute of Technology,"2500 Post Rd, Warwick, Rhode Island 02886-2244",www.neit.edu,"4-year, primarily associate's, Private not-for-profit",3162 New England Law-Boston,"154 Stuart St, Boston, Massachusetts 02116",www.nesl.edu,"4-year, Private not-for-profit",1110 New England School of Acupuncture,"150 California St., Newton, Massachusetts 02458",www.nesa.edu,"4-year, Private not-for-profit",191 New England School of Communications,"1 College Circle, Bangor, Maine 04401",www.nescom.edu,"4-year, Private not-for-profit",440 New Hampshire Institute of Art,"148 Concord St, Manchester, New Hampshire 03104-4858",www.nhia.edu,"4-year, Private not-for-profit",354 New Jersey City University,"2039 Kennedy Blvd, Jersey City, New Jersey 07305",www.njcu.edu,"4-year, Public",8151 New Jersey Institute of Technology,"University Heights, Newark, New Jersey 07102",www.njit.edu,"4-year, Public",8398 New Life Theological Seminary,"3117 Whiting Ave, Charlotte, North Carolina 28205-1648",www.nlts.edu,"4-year, Private not-for-profit",85 New Mexico Highlands University,"University Ave, Las Vegas, New Mexico 87701",www.nmhu.edu,"4-year, Public",3524 New Mexico Institute of Mining and Technology,"801 Leroy Place, Socorro, New Mexico 87801",www.nmt.edu,"4-year, Public",1767 New Mexico State University-Main Campus,"2850 Weddell Street, Las Cruces, New Mexico 88003-8001",www.nmsu.edu/,"4-year, Public",17239 New Orleans Baptist Theological Seminary,"3939 Gentilly Blvd, New Orleans, Louisiana 70126",www.nobts.edu,"4-year, Private not-for-profit",2742 New Saint Andrews College,"405 S. Main Street, Moscow, Idaho 83843",nsa.edu,"4-year, Private not-for-profit",173 New York Academy of Art,"111 Franklin St, New York, New York 10013-2911",www.nyaa.edu,"4-year, Private not-for-profit",105 New York Chiropractic College,"2360 State Route 89, Seneca Falls, New York 13148-0800",www.nycc.edu,"4-year, Private not-for-profit",842 New York College of Health Professions,"6801 Jericho Tpk, Syosset, New York 11791-4413",www.nycollege.edu,"4-year, primarily associate's, Private not-for-profit",820 New York College of Podiatric Medicine,"53 East 124 Street, New York, New York 10035-1940",www.nycpm.edu,"4-year, Private not-for-profit",344 New York College of Traditional Chinese Medicine,"155 First St, Mineola, New York 11501",www.nyctcm.edu,"4-year, Private not-for-profit",129 New York Institute of Technology-Manhattan Campus,"1855 Broadway, New York, New York 10023-7692",www.nyit.edu,"4-year, Private not-for-profit",2758 New York Institute of Technology-Old Westbury,"Northern Blvd, Old Westbury, New York 11568-8000",www.nyit.edu,"4-year, Private not-for-profit",9073 New York Law School,"57 Worth Street, New York, New York 10013-2960",www.nyls.edu,"4-year, Private not-for-profit",1655 New York Medical College,"Administration Building, Valhalla, New York 10595",WWW.NYMC.EDU,"4-year, Private not-for-profit",1414 New York School of Interior Design,"170 East 70th Street, New York, New York 10021",www.nysid.edu,"4-year, primarily associate's, Private not-for-profit",628 New York University,"70 Washington Sq South, New York, New York 10012-1091",www.nyu.edu,"4-year, Private not-for-profit",42189 Newberry College,"2100 College St, Newberry, South Carolina 29108",www.newberry.edu,"4-year, Private not-for-profit",973 Newbury College-Brookline,"129 Fisher Ave, Brookline, Massachusetts 02445",www.newbury.edu,"4-year, Private not-for-profit",1058 Newman University,"3100 McCormick Ave, Wichita, Kansas 67213-2097",www.newmanu.edu,"4-year, Private not-for-profit",2435 Newschool of Architecture and Design,"1249 F St, San Diego, California 92101",www.newschoolarch.edu,"4-year, Private for-profit",509 Niagara University,"Niagara University, New York 14109",www.niagara.edu,"4-year, Private not-for-profit",4254 Nicholls State University,"University Station La Hwy 1, Thibodaux, Louisiana 70310",www.nicholls.edu,"4-year, Public",6916 Nichols College,"Center Rd, Dudley, Massachusetts 01571-5000",www.nichols.edu,"4-year, Private not-for-profit",1532 Norfolk State University,"700 Park Ave, Norfolk, Virginia 23504-8000",www.nsu.edu,"4-year, Public",6325 North Carolina A & T State University,"1601 E Market St, Greensboro, North Carolina 27411",www.ncat.edu,"4-year, Public",10388 North Carolina Central University,"1801 Fayetteville Street, Durham, North Carolina 27707",www.nccu.edu,"4-year, Public",8035 North Carolina State University at Raleigh,"2101 Hillsborough Street, Raleigh, North Carolina 27695-7001",www.ncsu.edu,"4-year, Public",32872 North Carolina Wesleyan College,"3400 N Wesleyan Blvd, Rocky Mount, North Carolina 27804",www.ncwc.edu,"4-year, Private not-for-profit",1506 North Central College,"30 N Brainard St, Naperville, Illinois 60540",northcentralcollege.edu,"4-year, Private not-for-profit",2726 North Central University,"910 Elliot Ave, Minneapolis, Minnesota 55404-1391",www.northcentral.edu,"4-year, Private not-for-profit",1094 North Dakota State University-Main Campus,"1301 12th Avenue North, Fargo, North Dakota 58108-6050",www.ndsu.nodak.edu,"4-year, Public",13230 North Georgia College & State University,"82 College Circle, Dahlonega, Georgia 30597-1001",www.ngcsu.edu,"4-year, Public",5500 North Greenville University,"7801 N. Tigerville Road, Tigerville, South Carolina 29688-1892",www.ngu.edu,"4-year, Private not-for-profit",2160 North Park University,"3225 W Foster Ave, Chicago, Illinois 60625-4895",www.northpark.edu,"4-year, Private not-for-profit",3244 Northcentral University,"10000 E. University Dr, Prescott Valley, Arizona 86314",www.ncu.edu,"4-year, Private for-profit",7468 Northeastern Illinois University,"5500 N Saint Louis Ave, Chicago, Illinois 60625-4699",www.neiu.edu/,"4-year, Public",12320 Northeastern Ohio Universities Colleges of Medicine and Pharmacy,"4209 State Route 44, Rootstown, Ohio 44272-0095",www.neoucom.edu,"4-year, Public",602 Northeastern Seminary,"2265 Westside Dr, Rochester, New York 14624",www.nes.edu/,"4-year, Private not-for-profit",112 Northeastern State University,"600 N Grand, Tahlequah, Oklahoma 74464-2399",www.nsuok.edu,"4-year, Public",8771 Northeastern University,"360 Huntington Ave, Boston, Massachusetts 02115-5000",www.northeastern.edu,"4-year, Private not-for-profit",25837 Northern Arizona University,"Knoles Drive, Babbitt Administrative Center, Flagstaff, Arizona 86011-4132",home.nau.edu/,"4-year, Public",22502 Northern Illinois University,"1425 W. Lincoln Hwy., Dekalb, Illinois 60115-2825",www.niu.edu,"4-year, Public",24397 Northern Kentucky University,"Nunn Drive, Highland Heights, Kentucky 41099",www.nku.edu,"4-year, Public",15082 Northern Marianas College,"As Terlaje Campus, Saipan, Northern Marianas 96950-1250",www.nmcnet.edu/,"4-year, primarily associate's, Public",791 Northern Michigan University,"1401 Presque Isle Avenue, Marquette, Michigan 49855",www.nmu.edu,"4-year, Public",9347 Northern New Mexico College,"921 Paseo de Onate, Espanola, New Mexico 87532",nnmc.edu,"4-year, primarily associate's, Public",2139 Northern State University,"1200 S Jay St, Aberdeen, South Dakota 57401-7198",www.northern.edu,"4-year, Public",2927 Northland Baptist Bible College,"W10085 Pike Plains Rd, Dunbar, Wisconsin 54119-9285",www.nbbc.edu,"4-year, Private not-for-profit",592 Northland College,"1411 Ellis Avenue, Ashland, Wisconsin 54806-3999",www.northland.edu,"4-year, Private not-for-profit",677 NorthShore University HealthSystems School of Nurse Anesthesia,"2650 Ridge Ave, Rm G603C, Evanston, Illinois 60201-1718",www.northshore.org/academics/anesthesia,"4-year, Private not-for-profit",57 Northwest Baptist Seminary,"4301 N Stevens, Tacoma, Washington 98407-6699",www.nbs.edu,"4-year, Private not-for-profit",78 Northwest Christian University,"828 East 11th Avenue, Eugene, Oregon 97401-3745",www.northwestchristian.edu/,"4-year, Private not-for-profit",534 Northwest College of Art,"16301 Creative Dr NE, Poulsbo, Washington 98370",www.NCA.edu,"4-year, Private for-profit",78 Northwest Florida State College,"100 College Blvd, Niceville, Florida 32578-1295",www.owc.edu,"4-year, primarily associate's, Public",7463 Northwest Indian College,"2522 Kwina Rd, Bellingham, Washington 98226-9217",www.nwic.edu,"4-year, primarily associate's, Public",554 Northwest Missouri State University,"800 University Drive, Maryville, Missouri 64468-6001",www.nwmissouri.edu,"4-year, Public",6687 Northwest Nazarene University,"623 Holly St, Nampa, Idaho 83686-5897",www.nnu.edu,"4-year, Private not-for-profit",1939 Northwest University,"5520 108th Ave NE, Kirkland, Washington 98083-0579",www.northwestu.edu,"4-year, Private not-for-profit",1246 Northwestern College,"101 Seventh St SW, Orange City, Iowa 51041",www.nwciowa.edu/,"4-year, Private not-for-profit",1226 Northwestern College,"3003 Snelling Ave N, Saint Paul, Minnesota 55113-1598",www.nwc.edu,"4-year, Private not-for-profit",3023 Northwestern Health Sciences University,"2501 W 84th St, Bloomington, Minnesota 55431",www.nwhealth.edu/,"4-year, Private not-for-profit",877 Northwestern Oklahoma State University,"709 Oklahoma Blvd, Alva, Oklahoma 73717-2799",www.nwosu.edu,"4-year, Public",2074 Northwestern Polytechnic University,"47671 Westinghouse Drive, Fremont, California 94539",www.npu.edu,"4-year, Private not-for-profit",1107 Northwestern State University of Louisiana,"College Ave, Natchitoches, Louisiana 71497-0002",www.nsula.edu/,"4-year, Public",9111 Northwestern University,"633 Clark St, Evanston, Illinois 60208",www.northwestern.edu,"4-year, Private not-for-profit",19291 Northwood University,"1114 W FM 1382, Cedar Hill, Texas 75104-1204",www.northwood.edu,"4-year, Private not-for-profit",885 Northwood University,"4000 Whiting Dr, Midland, Michigan 48640-2398",www.northwood.edu,"4-year, Private not-for-profit",3941 Northwood University-Florida Education Center,"2600 N Military Trail, West Palm Beach, Florida 33409-2911",www.northwood.edu,"4-year, Private not-for-profit",773 Norwich University,"158 Harmon Drive, Northfield, Vermont 05663-1035",www.norwich.edu,"4-year, Private not-for-profit",3309 Nossi College of Art,"907 Rivergate Pky Bldg E6, Goodlettsville, Tennessee 37072-9928",www.nossi.com,"4-year, primarily associate's, Private for-profit",381 Notre Dame College,"4545 College Rd, Cleveland, Ohio 44121-4293",www.notredamecollege.edu,"4-year, Private not-for-profit",1637 Notre Dame de Namur University,"1500 Ralston Ave, Belmont, California 94002-1908",www.ndnu.edu,"4-year, Private not-for-profit",1478 Notre Dame Seminary Graduate School of Theology,"2901 South Carrollton Ave, New Orleans, Louisiana 70118-4391",www.nds.edu,"4-year, Private not-for-profit",96 Nova Southeastern University,"3301 College Ave, Fort Lauderdale, Florida 33314-7796",www.nova.edu,"4-year, Private not-for-profit",28378 Nyack College,"1 South Blvd, Nyack, New York 10960-3698",www.nyack.edu,"4-year, Private not-for-profit",3041 Oak Hills Christian College,"1600 Oak Hills Rd SW, Bemidji, Minnesota 56601-8834",www.oakhills.edu,"4-year, Private not-for-profit",142 Oakland City University,"138 N Lucretia St, Oakland City, Indiana 47660-1099",www.oak.edu,"4-year, Private not-for-profit",1733 Oakland University,"Rochester Hills, Michigan 48309-4401",www.oakland.edu,"4-year, Public",18175 Oakwood University,"7000 Adventist Blvd NW, Huntsville, Alabama 35896",www.oakwood.edu,"4-year, Private not-for-profit",1865 Oberlin College,"70 N Professor St, Oberlin, Ohio 44074",www.oberlin.edu,"4-year, Private not-for-profit",2864 Oblate School of Theology,"285 Oblate Dr, San Antonio, Texas 78216-6693",www.ost.edu,"4-year, Private not-for-profit",173 Occidental College,"1600 Campus Rd, Los Angeles, California 90041-3392",www.oxy.edu,"4-year, Private not-for-profit",1868 Oglala Lakota College,"490 Piya Wiconi Road, Kyle, South Dakota 57752-0490",www.olc.edu,"4-year, primarily associate's, Public",1531 Oglethorpe University,"4484 Peachtree Rd NE, Atlanta, Georgia 30319-2797",www.oglethorpe.edu,"4-year, Private not-for-profit",1053 Ohio Christian University,"1476 Lancaster Pike, Circleville, Ohio 43113",www.ohiochristian.edu,"4-year, Private not-for-profit",780 Ohio College of Podiatric Medicine,"6000 Rockside Woods Boulevard, Independence, Ohio 44131",www.ocpm.edu,"4-year, Private not-for-profit",386 Ohio Dominican University,"1216 Sunbury Road, Columbus, Ohio 43219",www.ohiodominican.edu,"4-year, Private not-for-profit",3117 Ohio Northern University,"525 S. Main St, Ada, Ohio 45810-1599",www.onu.edu/,"4-year, Private not-for-profit",3721 Ohio State University-Lima Campus,"4240 Campus Dr, Lima, Ohio 45804",www.lima.ohio-state.edu,"4-year, Public",1409 Ohio State University-Main Campus,"190 N. Oval Mall, Columbus, Ohio 43210",www.osu.edu,"4-year, Public",53715 Ohio State University-Mansfield Campus,"1760 University Drive, Mansfield, Ohio 44906",www.mansfield.ohio-state.edu,"4-year, primarily associate's, Public",1545 Ohio State University-Marion Campus,"1465 Mount Vernon Ave, Marion, Ohio 43302-5695",www.marion.ohio-state.edu,"4-year, primarily associate's, Public",1673 Ohio State University-Newark Campus,"1179 University Dr, Newark, Ohio 43055",www.newark.osu.edu,"4-year, primarily associate's, Public",2472 Ohio University-Chillicothe Campus,"101 University Drive, Chillicothe, Ohio 45601-0629",www.chillicothe.ohiou.edu,"4-year, primarily associate's, Public",1978 Ohio University-Eastern Campus,"45425 National Rd W, Saint Clairsville, Ohio 43950",www.eastern.ohiou.edu,"4-year, primarily associate's, Public",774 Ohio University-Lancaster Campus,"1570 Granville Pike, Lancaster, Ohio 43130-1037",www.lancaster.ohiou.edu,"4-year, primarily associate's, Public",1868 Ohio University-Main Campus,"Athens, Ohio 45701-2979",www.ohio.edu,"4-year, Public",21369 Ohio University-Southern Campus,"1804 Liberty Ave, Ironton, Ohio 45638",www.southern.ohiou.edu/,"4-year, primarily associate's, Public",1831 Ohio University-Zanesville Campus,"1425 Newark Rd, Zanesville, Ohio 43701",www.zanesville.ohiou.edu/,"4-year, primarily associate's, Public",1893 Ohio Valley University,"#1 Campus View Drive, Vienna, West Virginia 26105-8000",www.ovu.edu,"4-year, Private not-for-profit",515 Ohio Wesleyan University,"61 S Sandusky Street, Delaware, Ohio 43015-2370",www.owu.edu/,"4-year, Private not-for-profit",1959 Ohr Hameir Theological Seminary,"141 Furnace Woods Rd, Peekskill, New York 10566",,"4-year, Private not-for-profit",89 Oklahoma Baptist University,"500 W University, Shawnee, Oklahoma 74804",www.okbu.edu,"4-year, Private not-for-profit",1769 Oklahoma Christian University,"2501 E Memorial Rd, Edmond, Oklahoma 73013-1100",www.oc.edu,"4-year, Private not-for-profit",2166 Oklahoma City University,"2501 N Blackwelder, Oklahoma City, Oklahoma 73106-1402",www.okcu.edu,"4-year, Private not-for-profit",3884 Oklahoma Panhandle State University,"323 Eagle Ave, Goodwell, Oklahoma 73939-0430",www.opsu.edu,"4-year, Public",1223 Oklahoma State University Center for Health Sciences,"1111 W 17th St, Tulsa, Oklahoma 74107-1898",www.healthsciences.okstate.edu,"4-year, Public",68 Oklahoma State University Institute of Technology-Okmulgee,"1801 E 4th St, Okmulgee, Oklahoma 74447-3901",www.osu-okmulgee.edu/,"4-year, primarily associate's, Public",3558 Oklahoma State University-Main Campus,"107 Whitehurst, Stillwater, Oklahoma 74078-1015",pio.okstate.edu,"4-year, Public",22995 Oklahoma State University-Oklahoma City,"900 N Portland, Oklahoma City, Oklahoma 73107-6195",www.osuokc.edu,"4-year, primarily associate's, Public",5871 Oklahoma Wesleyan University,"2201 Silver Lake Rd, Bartlesville, Oklahoma 74006-6299",www.okwu.edu,"4-year, Private not-for-profit",1021 Old Dominion University,"5115 Hampton Blvd, Norfolk, Virginia 23529",www.odu.edu,"4-year, Public",23086 Olivet College,"320 South Main Street, Olivet, Michigan 49076",www.olivetcollege.edu,"4-year, Private not-for-profit",1174 Olivet Nazarene University,"One University Avenue, Bourbonnais, Illinois 60914-2271",www.olivet.edu,"4-year, Private not-for-profit",4521 Olympic College,"1600 Chester Ave, Bremerton, Washington 98337-1699",www.olympic.edu,"4-year, primarily associate's, Public",7152 O'More College of Design,"423 S Margin St, Franklin, Tennessee 37064",www.omorecollege.edu,"4-year, Private not-for-profit",202 Oral Roberts University,"7777 S Lewis Ave., Tulsa, Oklahoma 74171",oru.edu,"4-year, Private not-for-profit",3067 Oregon College of Art and Craft,"8245 SW Barnes Rd, Portland, Oregon 97225",www.ocac.edu,"4-year, Private not-for-profit",140 Oregon College of Oriental Medicine,"10525 SE Cherry Blossom Dr, Portland, Oregon 97216",www.ocom.edu,"4-year, Private not-for-profit",296 Oregon Health & Science University,"3181 SW Sam Jackson Park Rd, Portland, Oregon 97239-3098",www.ohsu.edu,"4-year, Public",2424 Oregon Institute of Technology,"3201 Campus Drive, Klamath Falls, Oregon 97601-8801",www.oit.edu,"4-year, Public",3515 Oregon State University,"Corvallis, Oregon 97331",oregonstate.edu,"4-year, Public",20305 Oregon State University-Cascades Campus,"2600 NW College Way Cascades Hall, Bend, Oregon 97701",www.osucascades.edu,"4-year, Public",509 Otis College of Art and Design,"9045 Lincoln Blvd, Los Angeles, California 90045-3505",www.otis.edu,"4-year, Private not-for-profit",1206 Ottawa University,"1001 South Cedar, Ottawa, Kansas 66067-3399",www.ottawa.edu,"4-year, Private not-for-profit",553 Ottawa University-Jeffersonville,"287 Quarter Master Court, Jeffersonville, Indiana 47130",www.ottawa.edu,"4-year, Private not-for-profit",108 Ottawa University-Kansas City,"4370 W. 109th Street Suite 200, Overland Park, Kansas 66211",www.ottawa.edu,"4-year, Private not-for-profit",433 Ottawa University-Milwaukee,"245 South Executive Drive, Suite 110, Brookfield, Wisconsin 53005",www.ottawa.edu,"4-year, Private not-for-profit",396 Ottawa University-Online,"1001 South Cedar, Ottawa, Kansas 66067",,"4-year, Private not-for-profit",74 Ottawa University-Phoenix,"10020 North 25th Avenue, Phoenix, Arizona 85021",www.ottawa.edu,"4-year, Private not-for-profit",1059 Otterbein College,"One Otterbein College, Westerville, Ohio 43081",www.otterbein.edu,"4-year, Private not-for-profit",3131 Ouachita Baptist University,"410 Ouachita St, Arkadelphia, Arkansas 71998-0001",www.obu.edu,"4-year, Private not-for-profit",1493 Our Lady of Holy Cross College,"4123 Woodland Drive, New Orleans, Louisiana 70131-7399",www.olhcc.edu,"4-year, Private not-for-profit",1290 Our Lady of the Lake College,"7434 Perkins Rd, Baton Rouge, Louisiana 70808-4380",www.ololcollege.edu,"4-year, primarily associate's, Private not-for-profit",1956 Our Lady of the Lake University-San Antonio,"411 SW 24th St, San Antonio, Texas 78207-4689",www.ollusa.edu,"4-year, Private not-for-profit",2642 Ozark Christian College,"1111 N Main St, Joplin, Missouri 64801",www.occ.edu,"4-year, Private not-for-profit",612 Pace University-New York,"1 Pace Plaza, New York, New York 10038-1598",www.pace.edu,"4-year, Private not-for-profit",12704 Pacific College of Oriental Medicine,"3646 N Broadway-2nd Floor, Chicago, Illinois 60613",www.PacificCollege.edu,"4-year, Private for-profit",203 Pacific College of Oriental Medicine,"7445 Mission Valley Rd Ste 105, San Diego, California 92108-4407",www.PacificCollege.edu,"4-year, Private for-profit",502 Pacific College of Oriental Medicine-New York,"915 Broadway, 2nd Floor, New York, New York 10010-7108",WWW.PACIFICCOLLEGE.EDU,"4-year, Private for-profit",480 Pacific Graduate School of Psychology,"405 Broadway St., Redwood City, California 94063",www.pgsp.edu,"4-year, Private not-for-profit",491 Pacific Islands Bible College,"172 Kinney's Road, Mangilao, Guam 96913",www.PIBC.edu,"4-year, Private not-for-profit",149 Pacific Lutheran Theological Seminary,"2770 Marin Ave, Berkeley, California 94708-1597",www.plts.edu,"4-year, Private not-for-profit",108 Pacific Lutheran University,"1010 122nd St So, Tacoma, Washington 98447-0003",www.plu.edu,"4-year, Private not-for-profit",3652 Pacific Northwest College of Art,"1241 NW Johnson, Portland, Oregon 97209-3023",www.pnca.edu,"4-year, Private not-for-profit",507 Pacific Oaks College,"5 Westmoreland Pl, Pasadena, California 91103",www.pacificoaks.edu,"4-year, Private not-for-profit",655 Pacific School of Religion,"1798 Scenic Ave, Berkeley, California 94709",www.psr.edu,"4-year, Private not-for-profit",198 Pacific States University,"1516 S Western Ave, Los Angeles, California 90006-4234",www.psuca.edu,"4-year, Private not-for-profit",216 Pacific Union College,"One Angwin Ave, Angwin, California 94508-9707",www.puc.edu,"4-year, Private not-for-profit",1278 Pacific University,"2043 College Way, Forest Grove, Oregon 97116",www.pacificu.edu,"4-year, Private not-for-profit",3167 Pacifica Graduate Institute,"249 Lambert Rd, Carpinteria, California 93013",www.pacifica.edu,"4-year, Private for-profit",675 Paier College of Art Inc,"20 Gorham Ave, Hamden, Connecticut 06514-3902",www.paiercollegeofart.edu,"4-year, Private for-profit",221 Paine College,"1235 15th St, Augusta, Georgia 30901-3182",www.paine.edu,"4-year, Private not-for-profit",863 Palm Beach Atlantic University-West Palm Beach,"901 S. Flagler Drive, West Palm Beach, Florida 33401",www.pba.edu,"4-year, Private not-for-profit",3226 Palmer College of Chiropractic,"1000 Brady St, Davenport, Iowa 52803-5287",www.palmer.edu,"4-year, Private not-for-profit",2167 Palmer College of Chiropractic-West Campus,"90 E Tasman Dr, San Jose, California 95134-1617",www.palmer.edu,"4-year, Private not-for-profit",285 Pardee Rand Graduate School of Policy Studies,"1776 Main St, Santa Monica, California 90407-2138",www.prgs.edu,"4-year, Private not-for-profit",112 Park University,"8700 NW River Park Dr, Parkville, Missouri 64152-3795",www.park.edu,"4-year, Private not-for-profit",12457 Parker College of Chiropractic,"2500 Walnut Hill Ln, Dallas, Texas 75229-5668",www.parkercc.edu,"4-year, Private not-for-profit",985 Patricia Stevens College,"330 North Fourth Street, Suite 306, Saint Louis, Missouri 63102-2008",www.patriciastevenscollege.EDU,"4-year, primarily associate's, Private for-profit",182 Patten University,"2433 Coolidge Ave, Oakland, California 94601",www.patten.edu,"4-year, Private not-for-profit",1056 Paul Quinn College,"3837 Simpson Stuart Rd, Dallas, Texas 75241",www.pqc.edu,"4-year, Private not-for-profit",445 Paul Smiths College of Arts and Science,"State Routes 30 and 86, Paul Smiths, New York 12970-0265",www.paulsmiths.edu,"4-year, primarily associate's, Private not-for-profit",933 Payne Theological Seminary,"1230 Wilberforce-Clifton Rd., P.O. Box 474, Wilberforce, Ohio 45384-0474",www.payne.edu,"4-year, Private not-for-profit",82 Peace College,"15 E Peace St, Raleigh, North Carolina 27604-1194",www.peace.edu,"4-year, Private not-for-profit",713 Peirce College,"1420 Pine Street, Philadelphia, Pennsylvania 19102-4699",www.peirce.edu,"4-year, Private not-for-profit",2051 Peninsula College,"1502 E Lauridsen Blvd, Port Angeles, Washington 98362",www.pc.ctc.edu,"4-year, primarily associate's, Public",3776 Pennsylvania Academy of the Fine Arts,"128 N. Broad Street, Philadelphia, Pennsylvania 19102-1510",WWW.PAFA.ORG,"4-year, Private not-for-profit",326 Pennsylvania College of Art and Design,"204 N Prince St, Lancaster, Pennsylvania 17608-0059",www.pcad.edu,"4-year, Private not-for-profit",298 Pennsylvania College of Technology,"One College Ave, Williamsport, Pennsylvania 17701-5799",www.pct.edu,"4-year, primarily associate's, Public",6510 Pennsylvania State University-Brandywine,"25 Yearsley Mill Rd, Media, Pennsylvania 19063-5522",www.de.psu.edu/,"4-year, Public",1615 Pennsylvania State University-College of Medicine,"500 University Dr, Hershey, Pennsylvania 17033-2360",www.HMC.psu.edu/COLLEGE/,"4-year, Public",818 Pennsylvania State University-Main Campus,"201 Old Main, University Park, Pennsylvania 16802-1589",www.psu.edu/,"4-year, Public",44406 Pennsylvania State University-Penn State Abington,"1600 Woodland Rd, Abington, Pennsylvania 19001-3918",www.abington.psu.edu,"4-year, Public",3394 Pennsylvania State University-Penn State Altoona,"3000 Ivyside Pk, Altoona, Pennsylvania 16601-3777",www.aa.psu.edu/,"4-year, Public",4013 Pennsylvania State University-Penn State Beaver,"100 University Dr, Monaca, Pennsylvania 15061-2764",www.br.psu.edu/,"4-year, Public",845 Pennsylvania State University-Penn State Berks,"Tulpehocken Rd, Reading, Pennsylvania 19610-1016",www.bk.psu.edu/,"4-year, Public",2800 Pennsylvania State University-Penn State Dubois,"One College Place, Dubois, Pennsylvania 15801-2597",www.ds.psu.edu/,"4-year, primarily associate's, Public",963 Pennsylvania State University-Penn State Erie-Behrend College,"5091 Station Rd, Erie, Pennsylvania 16563-0002",www.pserie.psu.edu/,"4-year, Public",4334 Pennsylvania State University-Penn State Fayette- Eberly Campus,"One University Dr, Route 119 North, Uniontown, Pennsylvania 15401-0519",www.fe.psu.edu/,"4-year, primarily associate's, Public",1099 Pennsylvania State University-Penn State Great Valley,"30 E Swedesford Rd, Malvern, Pennsylvania 19355-1488",www.gv.psu.edu,"4-year, Public",1033 Pennsylvania State University-Penn State Greater Allegheny,"4000 University Dr, McKeesport, Pennsylvania 15131-7644",www.ga.psu.edu/,"4-year, Public",767 Pennsylvania State University-Penn State Harrisburg,"777 W Harrisburg Pike, Middletown, Pennsylvania 17057-4846",www.hbg.psu.edu,"4-year, Public",3936 Pennsylvania State University-Penn State Hazleton,"76 University Drive, Hazleton, Pennsylvania 18202-8025",www.hn.psu.edu/,"4-year, primarily associate's, Public",1228 Pennsylvania State University-Penn State Lehigh Valley,"8380 Mohr Ln, Fogelsville, Pennsylvania 18051-1918",www.an.psu.edu/,"4-year, Public",816 Pennsylvania State University-Penn State Mont Alto,"One Campus Dr, Mont Alto, Pennsylvania 17237-9700",www.ma.psu.edu/,"4-year, primarily associate's, Public",1189 Pennsylvania State University-Penn State New Kensington,"3550 7th Street Road Rte 780, Upper Burrell, Pennsylvania 15068-1765",www.nk.psu.edu/,"4-year, Public",876 Pennsylvania State University-Penn State Schuylkill,"200 University Dr, Schuylkill Haven, Pennsylvania 17972-2202",www.sl.psu.edu,"4-year, Public",1032 Pennsylvania State University-Penn State Shenango,"147 Shenango Ave, Sharon, Pennsylvania 16146-1537",www.shenango.psu.edu,"4-year, primarily associate's, Public",836 Pennsylvania State University-Penn State Wilkes-Barre,"Old Rte 115, Lehman, Pennsylvania 18627-0217",www.wb.psu.edu/,"4-year, Public",684 Pennsylvania State University-Penn State Worthington Scranton,"120 Ridge View Dr, Dunmore, Pennsylvania 18512-1602",www.sn.psu.edu/,"4-year, Public",1379 Pennsylvania State University-Penn State York,"1031 Edgecomb Ave, York, Pennsylvania 17403-3326",www.yk.psu.edu/,"4-year, Public",1587 Pepperdine University,"24255 Pacific Coast Hwy, Malibu, California 90263",www.pepperdine.edu/,"4-year, Private not-for-profit",7614 Peru State College,"600 Hoyt Street, Peru, Nebraska 68421-0010",www.peru.edu,"4-year, Public",2328 Pfeiffer University,"48380 Hwy 52n, Misenheimer, North Carolina 28109-0960",www.pfeiffer.edu,"4-year, Private not-for-profit",2019 Philadelphia Biblical University-Langhorne,"200 Manor Ave, Langhorne, Pennsylvania 19047-2990",www.pbu.edu,"4-year, Private not-for-profit",1335 Philadelphia College of Osteopathic Medicine,"4170 City Ave, Philadelphia, Pennsylvania 19131",www.pcom.edu,"4-year, Private not-for-profit",2148 Philadelphia University,"School House Lane and Henry Avenue, Philadelphia, Pennsylvania 19144-5497",www.philau.edu,"4-year, Private not-for-profit",3360 Philander Smith College,"One Trudie Kibbe Reed Drive, Little Rock, Arkansas 72202-3799",,"4-year, Private not-for-profit",587 Phillips Graduate Institute,"5445 Balboa Blvd, Encino, California 91316-1509",pgi.edu,"4-year, Private not-for-profit",309 Phillips Theological Seminary,"901 N Mingo Rd, Tulsa, Oklahoma 74116-5612",www.ptstulsa.edu,"4-year, Private not-for-profit",15 Phoenix Institute of Herbal Medicine & Acupuncture,"301 E Bethany Home Rd Ste A100, Phoenix, Arizona 85012",www.pihma.edu,"4-year, Private for-profit",119 Phoenix School of Law,"4041 N. Central Avenue Ste 100, Phoenix, Arizona 85012",www.phoenixlaw.edu,"4-year, Private for-profit",335 Phoenix Seminary,"4222 E Thomas Rd Ste 400, Phoenix, Arizona 85018-7607",www.phoenixseminary.edu,"4-year, Private not-for-profit",177 Piedmont Baptist College and Graduate School,"420 S. Broad St., Winston Salem, North Carolina 27101",www.pbc.edu/,"4-year, Private not-for-profit",393 Piedmont College,"165 Central Ave, Demorest, Georgia 30535-0010",www.piedmont.edu,"4-year, Private not-for-profit",2783 Pikeville College,"147 Sycamore St, Pikeville, Kentucky 41501",www.pc.edu,"4-year, Private not-for-profit",1077 Pine Manor College,"400 Heath St, Chestnut Hill, Massachusetts 02467",www.pmc.edu,"4-year, Private not-for-profit",441 Pioneer Pacific College,"27501 SW Parkway Ave, Wilsonville, Oregon 97070-9296",www.pioneerpacific.edu,"4-year, primarily associate's, Private for-profit",1273 Pittsburg State University,"1701 S Broadway, Pittsburg, Kansas 66762",www.pittstate.edu,"4-year, Public",7127 Pittsburgh Theological Seminary,"616 N Highland Ave, Pittsburgh, Pennsylvania 15206-2596",www.pts.edu,"4-year, Private not-for-profit",318 Pitzer College,"1050 North Mills Avenue, Claremont, California 91711-6101",www.pitzer.edu,"4-year, Private not-for-profit",1025 Platt College,"2727 W. Memorial Rd, Oklahoma City, Oklahoma 73134",www.plattcollege.org,"4-year, primarily associate's, Private for-profit",380 Platt College,"3100 S Parker Rd, Aurora, Colorado 80014-3141",www.plattcolorado.edu,"4-year, Private for-profit",153 Platt College-Los Angeles,"1000 South Fremont Avenue, A9w, Alhambra, California 91803",www.plattcollege.edu,"4-year, primarily associate's, Private for-profit",223 Platt College-Ontario,"3700 Inland Empire Boulevard, Ontario, California 91764",www.plattcollege.edu,"4-year, primarily associate's, Private for-profit",385 Platt College-San Diego,"6250 El Cajon Blvd, San Diego, California 92115-3919",www.platt.edu,"4-year, primarily associate's, Private for-profit",289 Plaza College,"74-09 37th Ave, Jackson Heights, New York 11372",WWW.PLAZACOLLEGE.EDU,"4-year, primarily associate's, Private for-profit",724 Plymouth State University,"17 High Street, Plymouth, New Hampshire 03264-1595",www.plymouth.edu,"4-year, Public",6540 Point Loma Nazarene University,"3900 Lomaland Dr, San Diego, California 92106-2899",www.pointloma.edu/home.htm,"4-year, Private not-for-profit",3390 Point Park University,"201 Wood St, Pittsburgh, Pennsylvania 15222-1984",www.pointpark.edu,"4-year, Private not-for-profit",3784 Polytechnic Institute of New York University,"Six Metrotech Ctr, Brooklyn, New York 11201",www.poly.edu,"4-year, Private not-for-profit",3983 Pomona College,"550 N College Ave Alexander Hall, Claremont, California 91711-6319",www.pomona.edu,"4-year, Private not-for-profit",1532 Ponce School of Medicine,"Urb Industrial Reparada Marginal St Lot 2, Ponce, Puerto Rico 00732",www.psm.edu,"4-year, Private not-for-profit",602 Pontifical Catholic University of Puerto Rico-Arecibo,"Carretera 662 KM 2.3, Arecibo, Puerto Rico 00614-4045",arecibo.pucpr.edu,"4-year, Private not-for-profit",645 Pontifical Catholic University of Puerto Rico-Mayaguez,"482 Calle Ramon Emerito Betances Sur, Mayaguez, Puerto Rico 00680-1713",www.pucpr.edu,"4-year, Private not-for-profit",1547 Pontifical Catholic University of Puerto Rico-Ponce,"2250 Las Americas Ave. Suite 608, Ponce, Puerto Rico 00717-9997",www.pucpr.edu,"4-year, Private not-for-profit",7413 Pontifical College Josephinum,"7625 N High Street, Columbus, Ohio 43235-1499",WWW.PCJ.EDU,"4-year, Private not-for-profit",184 Portland State University,"724 SW Harrison, Portland, Oregon 97201",www.pdx.edu,"4-year, Public",26382 Post University,"800 Country Club Rd, Waterbury, Connecticut 06723",www.post.edu/,"4-year, Private for-profit",1687 Potomac College,"1029 Herndon Pkwy, Herndon, Virginia 20170",www.potomac.edu,"4-year, Private for-profit",149 Potomac College,"4000 Chesapeake St NW, Washington, District of Columbia 20016",www.potomac.edu,"4-year, Private for-profit",466 Prairie View A & M University,"5th Street Ave. A, L.W. Minor Street., Prairie View, Texas 77446",www.pvamu.edu,"4-year, Public",8203 Pratt Institute-Main,"200 Willoughby Ave, Brooklyn, New York 11205",www.pratt.edu,"4-year, Private not-for-profit",4946 Pratt Manhattan-A Division of Pratt Institute,"144 West 14th Street, New York, New York 10011",www.pratt.edu,"4-year, Private not-for-profit", Presbyterian College,"503 S Broad St, Clinton, South Carolina 29325",www.presby.edu,"4-year, Private not-for-profit",1177 Prescott College,"220 Grove Ave, Prescott, Arizona 86301",www.prescott.edu,"4-year, Private not-for-profit",1065 Presentation College,"1500 N Main, Aberdeen, South Dakota 57401-1280",www.presentation.edu,"4-year, Private not-for-profit",733 Princeton Theological Seminary,"64 Mercer St, Princeton, New Jersey 08542-0803",www.ptsem.edu,"4-year, Private not-for-profit",638 Princeton University,"Princeton, New Jersey 08544-0070",www.princeton.edu,"4-year, Private not-for-profit",7330 Principia College,"1 Maybeck Place, Elsah, Illinois 62028-9799",www.prin.edu,"4-year, Private not-for-profit",519 Providence College,"River Ave and Eaton St, Providence, Rhode Island 02918-0001",www.providence.edu,"4-year, Private not-for-profit",5085 Puerto Rico Conservatory of Music,"Urb Roosevelt 350 Rafael Lamar St, San Juan, Puerto Rico 00918-2199",www.cmpr.edu,"4-year, Public",442 Purdue University-Calumet Campus,"2200 169th St, Hammond, Indiana 46323-2094",www.calumet.purdue.edu,"4-year, Public",9325 Purdue University-Main Campus,"Hovde Hall of Administration, West Lafayette, Indiana 47907-2040",www.purdue.edu,"4-year, Public",41433 Purdue University-North Central Campus,"1401 S US Hwy 421, Westville, Indiana 46391-9542",www.pnc.edu,"4-year, Public",4245 Queens University of Charlotte,"1900 Selwyn Ave, Charlotte, North Carolina 28274-0001",www.queens.edu,"4-year, Private not-for-profit",2302 Quincy University,"1800 College Ave, Quincy, Illinois 62301-2699",www.quincy.edu,"4-year, Private not-for-profit",1424 Quinnipiac University,"Mt Carmel Ave, Hamden, Connecticut 06518",www.quinnipiac.edu,"4-year, Private not-for-profit",7413 Rabbi Jacob Joseph School,"One Plainfield Ave, Edison, New Jersey 08817",,"4-year, Private not-for-profit",51 Rabbinical Academy Mesivta Rabbi Chaim Berlin,"1593 Coney Island Ave, Brooklyn, New York 11230",,"4-year, Private not-for-profit",246 Rabbinical College Beth Shraga,"28 Saddle River Rd, Monsey, New York 10952",,"4-year, Private not-for-profit",41 Rabbinical College Bobover Yeshiva Bnei Zion,"1577 48th St, Brooklyn, New York 11219",,"4-year, Private not-for-profit",266 Rabbinical College of America,"226 Sussex Ave, Morristown, New Jersey 07960",,"4-year, Private not-for-profit",224 Rabbinical College of Ch'san Sofer New York,"1876 50th St, Brooklyn, New York 11204",,"4-year, Private not-for-profit",50 Rabbinical College of Long Island,"205 W Beech St, Long Beach, New York 11561",,"4-year, Private not-for-profit",129 Rabbinical College of Ohr Shimon Yisroel,"215-217 Hewes St, Brooklyn, New York 11211",,"4-year, Private not-for-profit",146 Rabbinical College Telshe,"28400 Euclid Ave, Wickliffe, Ohio 44092",,"4-year, Private not-for-profit",39 Rabbinical Seminary M'kor Chaim,"1571 55th St, Brooklyn, New York 11219",,"4-year, Private not-for-profit",51 Rabbinical Seminary of Adas Yereim,"185 Wilson St, Brooklyn, New York 11211",,"4-year, Private not-for-profit",58 Rabbinical Seminary of America,"76-01 147th St, Flushing, New York 11367",,"4-year, Private not-for-profit",531 Radford University,"East Main Street, Radford, Virginia 24141-0672",www.radford.edu,"4-year, Public",9157 Ramapo College of New Jersey,"505 Ramapo Valley Rd, Mahwah, New Jersey 07430-1680",www.ramapo.edu,"4-year, Public",5847 Randolph College,"2500 Rivermont Ave, Lynchburg, Virginia 24503-1555",www.randolphcollege.edu,"4-year, Private not-for-profit",568 Randolph-Macon College,"204 Henry St, Ashland, Virginia 23005-5505",www.rmc.edu/Offices/Institutional-Research/ipeds.aspx,"4-year, Private not-for-profit",1201 Ranken Technical College,"4431 Finney Ave, Saint Louis, Missouri 63113-2811",www.ranken.edu,"4-year, primarily associate's, Private not-for-profit",1626 Rasmussen College-Bismarck,"1701 E. Century Ave., Bismarck, North Dakota 58503-0658",www.rasmussen.edu,"4-year, primarily associate's, Private for-profit",505 Rasmussen College-Brooklyn Park,"8301 93rd Ave N, Brooklyn Park, Minnesota 55445-1512",www.rasmussen.edu,"4-year, primarily associate's, Private for-profit",924 Rasmussen College-Eagan,"3500 Federal Dr, Eagan, Minnesota 55122-1346",www.rasmussen.edu,"4-year, primarily associate's, Private for-profit",733 Rasmussen College-Eden Prairie,"7905 Golden Triangle Drive, Suite 100, Eden Prairie, Minnesota 55344-7220",www.rasmussen.edu,"4-year, primarily associate's, Private for-profit",1045 Rasmussen College-Fargo,"4012 19th Ave SW, Fargo, North Dakota 58103-7196",www.rasmussen.edu,"4-year, primarily associate's, Private for-profit",954 Rasmussen College-Fort Myers,"9160 Forum Corporate Parkway, Suite 100, Fort Myers, Florida 33905-7805",www.rasmussen.edu,"4-year, primarily associate's, Private for-profit",164 Rasmussen College-Lake Elmo,"8565 Eagle Point Circle, Lake Elmo, Minnesota 55042-8637",www.rasmussen.edu,"4-year, primarily associate's, Private for-profit",534 Rasmussen College-Mankato,"130 Saint Andrews Drive, Mankato, Minnesota 56001",www.rasmussen.edu,"4-year, primarily associate's, Private for-profit",690 Rasmussen College-Ocala,"2221 SW 19th Avenue Road, Ocala, Florida 34471-7751",www.rasmussen.edu,"4-year, primarily associate's, Private for-profit",1229 Rasmussen College-Pasco County,"2127 Grand Blvd, Holiday, Florida 34690-4554",www.rasmussen.edu,"4-year, primarily associate's, Private for-profit",576 Rasmussen College-St Cloud,"226 Park Avenue South, St. Cloud, Minnesota 56301-3713",www.rasmussen.edu,"4-year, primarily associate's, Private for-profit",914 Reconstructionist Rabbinical College,"1299 Church Rd, Wyncote, Pennsylvania 19095-1898",www.rrc.edu,"4-year, Private not-for-profit",59 Reed College,"3203 SE Woodstock Blvd, Portland, Oregon 97202-8199",www.reed.edu,"4-year, Private not-for-profit",1471 Reformed Presbyterian Theological Seminary,"7418 Penn Ave, Pittsburgh, Pennsylvania 15208-2594",www.rpts.edu,"4-year, Private not-for-profit",86 Regent University,"1000 Regent University Dr, Virginia Beach, Virginia 23464",www.regent.edu,"4-year, Private not-for-profit",4278 Regis College,"235 Wellesley St, Weston, Massachusetts 02493-1571",www.regiscollege.edu,"4-year, Private not-for-profit",1590 Regis University,"3333 Regis Blvd, Denver, Colorado 80221-1099",www.regis.edu/,"4-year, Private not-for-profit",11040 Reinhardt College,"7300 Reinhardt College Circle, Waleska, Georgia 30183-2981",www.reinhardt.edu,"4-year, Private not-for-profit",1047 Remington College-Colorado Springs Campus,"6050 Erin Park Drive, Colorado Springs, Colorado 80918-3401",www.remingtoncollege.edu,"4-year, primarily associate's, Private for-profit",188 Remington College-Honolulu Campus,"1111 Bishop St Ste 400, Honolulu, Hawaii 96813-2811",WWW.REMINGTONCOLLEGE.EDU,"4-year, primarily associate's, Private for-profit",557 Remington College-Largo Campus,"8550 Ulmerton Rd Unit 100, Largo, Florida 33771-3842",www.remingtoncollege.edu,"4-year, primarily associate's, Private for-profit",168 Remington College-Memphis Campus,"2710 Nonconnah Blvd, Memphis, Tennessee 38132",www.remingtoncollege.edu,"4-year, primarily associate's, Private for-profit",922 Remington College-Mobile Campus,"828 Downtowner Loop W, Mobile, Alabama 36609",www.remingtoncollege.edu,"4-year, primarily associate's, Private for-profit",540 Remington College-San Diego Campus,"123 Camino de La Reina Ste 100 N, San Diego, California 92108",www.remingtoncollege.edu/,"4-year, primarily associate's, Private for-profit",162 Remington College-Tampa Campus,"2410 E Busch Blvd, Tampa, Florida 33612-8410",WWW.REMINGTONCOLLEGE.EDU,"4-year, primarily associate's, Private for-profit",314 Rensselaer Hartford Graduate Center Inc,"275 Windsor St, Hartford, Connecticut 06120",www.rpi.edu/ewp/hartford,"4-year, Private not-for-profit",741 Rensselaer Polytechnic Institute,"110 8th St, Troy, New York 12180-3590",www.rpi.edu,"4-year, Private not-for-profit",6777 Research College of Nursing,"2525 E. Meyer Boulevard, Kansas City, Missouri 64132-1199",www.researchcollege.edu,"4-year, Private for-profit",382 Rhode Island College,"600 Mount Pleasant Ave, Providence, Rhode Island 02908",www.ric.edu,"4-year, Public",9085 Rhode Island School of Design,"2 College St, Providence, Rhode Island 02903",www.risd.edu,"4-year, Private not-for-profit",2352 Rhodes College,"2000 North Parkway, Memphis, Tennessee 38112-1690",www.rhodes.edu,"4-year, Private not-for-profit",1678 Rice University,"6100 S Main, Houston, Texas 77005-1827",www.rice.edu,"4-year, Private not-for-profit",5357 Richmont Graduate University,"1815 McCallie Ave, Chattanooga, Tennessee 37404",www.psy.edu,"4-year, Private not-for-profit",268 Rider University,"2083 Lawrence Road, Lawrenceville, New Jersey 08648-3099",www.rider.edu,"4-year, Private not-for-profit",5974 Ringling College of Art and Design,"2700 North Tamiami Tr, Sarasota, Florida 34234-5895",www.ringling.edu,"4-year, Private not-for-profit",1229 Ripon College,"300 Seward St, Ripon, Wisconsin 54971-0248",www.ripon.edu,"4-year, Private not-for-profit",1057 Rivier College,"420 South Main St, Nashua, New Hampshire 03060",www.rivier.edu,"4-year, Private not-for-profit",2199 Roanoke Bible College,"715 N Poindexter St, Elizabeth City, North Carolina 27909-4054",www.roanokebible.edu,"4-year, Private not-for-profit",153 Roanoke College,"221 College Ln, Salem, Virginia 24153-3794",www.roanoke.edu,"4-year, Private not-for-profit",2021 Robert Morris College,"401 S State Street, Chicago, Illinois 60605",www.robertmorris.edu/,"4-year, primarily associate's, Private not-for-profit",4590 Robert Morris University,"6001 University Boulevard, Moon Township, Pennsylvania 15108-1189",www.rmu.edu,"4-year, Private not-for-profit",4815 Roberts Wesleyan College,"2301 Westside Dr, Rochester, New York 14624",WWW.Roberts.edu,"4-year, Private not-for-profit",1902 Rochester College,"800 W Avon Rd, Rochester Hills, Michigan 48307",www.rc.edu,"4-year, Private not-for-profit",901 Rochester General Hospital School of Medical Technology,"1425 Portland Ave, Rochester, New York 14621",www.viahealth.org,"4-year, Private not-for-profit",12 Rochester Institute of Technology,"1 Lomb Memorial Dr, Rochester, New York 14623-5603",www.rit.edu/,"4-year, Private not-for-profit",15055 Rockefeller University,"1230 York Ave, New York, New York 10065-6399",www.rockefeller.edu,"4-year, Private not-for-profit",207 Rockford College,"5050 E State St, Rockford, Illinois 61108-2393",www.rockford.edu,"4-year, Private not-for-profit",1388 Rockhurst University,"1100 Rockhurst Rd, Kansas City, Missouri 64110-2561",www.rockhurst.edu,"4-year, Private not-for-profit",3086 Rocky Mountain College,"1511 Poly Drive, Billings, Montana 59102-1796",www.rocky.edu,"4-year, Private not-for-profit",661 Rocky Mountain College of Art and Design,"1600 Pierce St, Denver, Colorado 80214",www.rmcad.edu,"4-year, Private for-profit",573 Roger Williams University,"One Old Ferry Rd, Bristol, Rhode Island 02809-2923",www.rwu.edu,"4-year, Private not-for-profit",4609 Roger Williams University School of Law,"Ten Metacom Ave, Bristol, Rhode Island 02809-5171",law.rwu.edu/,"4-year, Private not-for-profit",551 Rogers State University,"1701 W Will Rogers Blvd, Claremore, Oklahoma 74017-3252",www.rsu.edu,"4-year, primarily associate's, Public",3913 Rollins College,"1000 Holt Ave, Winter Park, Florida 32789-4499",www.rollins.edu,"4-year, Private not-for-profit",3259 Roosevelt University,"430 S Michigan Ave, Chicago, Illinois 60605-1394",www.roosevelt.edu,"4-year, Private not-for-profit",7692 Rosalind Franklin University of Medicine and Science,"3333 Green Bay Rd, North Chicago, Illinois 60064",www.rosalindfranklin.edu,"4-year, Private not-for-profit",1790 Rose-Hulman Institute of Technology,"5500 Wabash Avenue, Terre Haute, Indiana 47803-3999",www.rose-hulman.edu,"4-year, Private not-for-profit",1923 Rosemont College,"1400 Montgomery Ave, Rosemont, Pennsylvania 19010-1699",www.rosemont.edu,"4-year, Private not-for-profit",903 Rowan University,"201 Mullica Hill Road, Glassboro, New Jersey 08028",www.rowan.edu,"4-year, Public",10270 Rush University,"600 S. Paulina St. STE 440, Chicago, Illinois 60612",WWW.RUSHU.RUSH.EDU,"4-year, Private not-for-profit",1731 Russell Sage College,"45 Ferry St, Troy, New York 12180",www.sage.edu,"4-year, Private not-for-profit",699 Rust College,"150 Rust Ave, Holly Springs, Mississippi 38635",www.rustcollege.edu,"4-year, Private not-for-profit",942 Rutgers University-Camden,"406 Penn, Camden, New Jersey 08102",www.rutgers.edu,"4-year, Public",5398 Rutgers University-New Brunswick,"83 Somerset St, New Brunswick, New Jersey 08901-1281",www.rutgers.edu/,"4-year, Public",36041 Rutgers University-Newark,"249 University Avenue, Blumenthal Hall, Newark, New Jersey 07102",www.rutgers.edu,"4-year, Public",11032 Sacred Heart Major Seminary,"2701 Chicago Blvd, Detroit, Michigan 48206-1799",WWW.SHMS.EDU,"4-year, Private not-for-profit",426 Sacred Heart School of Theology,"7335 S Hwy 100, Franklin, Wisconsin 53132",www.shst.edu,"4-year, Private not-for-profit",120 Sacred Heart University,"5151 Park Ave, Fairfield, Connecticut 06825-1000",www.sacredheart.edu,"4-year, Private not-for-profit",5958 Sage College of Albany,"140 New Scotland Ave, Albany, New York 12208",www.sage.edu,"4-year, Private not-for-profit",1936 Saginaw Valley State University,"7400 Bay Rd, University Center, Michigan 48710",www.svsu.edu,"4-year, Public",9837 Saint Ambrose University,"518 W Locust St, Davenport, Iowa 52803-2898",www.sau.edu,"4-year, Private not-for-profit",3794 Saint Anselm College,"100 Saint Anselm Drive, Manchester, New Hampshire 03102-1310",www.anselm.edu,"4-year, Private not-for-profit",1900 Saint Anthony College of Nursing,"5658 E State St, Rockford, Illinois 61108-2468",sacn.edu,"4-year, Private not-for-profit",201 Saint Augustine College,"1333-45 W Argyle, Chicago, Illinois 60640-3593",www.staugustine.edu,"4-year, primarily associate's, Private not-for-profit",1263 Saint Augustines College,"1315 Oakwood Avenue, Raleigh, North Carolina 27610-2298",www.st-aug.edu,"4-year, Private not-for-profit",1451 Saint Bonaventure University,"Route 417, Saint Bonaventure, New York 14778",www.sbu.edu,"4-year, Private not-for-profit",2406 Saint Catharine College,"2735 Bardstown Rd, Saint Catharine, Kentucky 40061",www.sccky.edu,"4-year, primarily associate's, Private not-for-profit",768 Saint Charles Borromeo Seminary-Overbrook,"100 East Wynnewood Road, Wynnewood, Pennsylvania 19096",www.scs.edu,"4-year, Private not-for-profit",243 Saint Cloud State University,"720 Fourth Ave. South, Saint Cloud, Minnesota 56301-4498",www.stcloudstate.edu,"4-year, Public",17430 Saint Edward's University,"3001 S Congress Ave, Austin, Texas 78704",www.stedwards.edu,"4-year, Private not-for-profit",5348 Saint Francis Medical Center College of Nursing,"511 NE Greenleaf St, Peoria, Illinois 61603-3783",www.sfmccon.edu/,"4-year, Private not-for-profit",452 Saint Francis University,"117 Evergreen Dr, Loretto, Pennsylvania 15940",www.francis.edu,"4-year, Private not-for-profit",2210 Saint Gregorys University,"1900 W MacArthur, Shawnee, Oklahoma 74804",www.stgregorys.edu,"4-year, Private not-for-profit",745 Saint John Fisher College,"3690 East Ave, Rochester, New York 14618-3597",www.sjfc.edu,"4-year, Private not-for-profit",3832 Saint John Vianney College Seminary,"2900 SW 87th Ave, Miami, Florida 33165-3244",sjvcs.edu,"4-year, Private not-for-profit",63 Saint John's Seminary,"127 Lake St, Brighton, Massachusetts 02135",www.sjs.edu,"4-year, Private not-for-profit",144 Saint Johns University,"Collegeville, Minnesota 56321",www.csbsju.edu,"4-year, Private not-for-profit",2063 Saint Joseph College,"1678 Asylum Avenue, West Hartford, Connecticut 06117-2764",www.sjc.edu,"4-year, Private not-for-profit",1926 Saint Joseph Seminary College,"75376 River Road, St. Benedict, Louisiana 70457",www.sjasc.edu,"4-year, Private not-for-profit",153 Saint Josephs College,"US Highway 231, Rensselaer, Indiana 47978",www.saintjoe.edu,"4-year, Private not-for-profit",1076 Saint Joseph's College of Maine,"278 Whites Bridge Rd, Standish, Maine 04084-5236",www.sjcme.edu,"4-year, Private not-for-profit",2758 Saint Josephs College-Main Campus,"245 Clinton Ave, Brooklyn, New York 11205-3688",www.sjcny.edu,"4-year, Private not-for-profit",1246 Saint Josephs College-Suffolk Campus,"155 W Roe Blvd, Patchogue, New York 11772-2399",www.sjcny.edu,"4-year, Private not-for-profit",4211 Saint Josephs Seminary and College,"201 Seminary Ave, Yonkers, New York 10704-1896",www.archny.org,"4-year, Private not-for-profit",115 Saint Joseph's University,"5600 City Avenue, Philadelphia, Pennsylvania 19131-1395",www.sju.edu,"4-year, Private not-for-profit",7900 Saint Leo University,"33701 State Road 52, Saint Leo, Florida 33574-6665",www.saintleo.edu,"4-year, Private not-for-profit",13731 Saint Louis Christian College,"1360 Grandview Dr, Florissant, Missouri 63033",www.slcconline.edu,"4-year, Private not-for-profit",319 Saint Louis University-Main Campus,"221 N Grand Blvd, Saint Louis, Missouri 63103-2097",www.imagine.slu.edu,"4-year, Private not-for-profit",16086 Saint Lukes College,"8320 Ward Parkway Suite300, Kansas City, Missouri 64114",www.saint-lukes.org,"4-year, Private not-for-profit",120 Saint Martin's University,"5300 Pacific Ave SE, Lacey, Washington 98503-7500",www.stmartin.edu,"4-year, Private not-for-profit",1659 Saint Mary-of-the-Woods College,"St Hwy 150, Saint Mary-Of-The-Woods, Indiana 47876-1099",www.smwc.edu,"4-year, Private not-for-profit",1580 Saint Mary's College,"Notre Dame, Indiana 46556",www.saintmarys.edu,"4-year, Private not-for-profit",1628 Saint Marys College of California,"1928 Saint Marys Road, Moraga, California 94556",www.stmarys-ca.edu,"4-year, Private not-for-profit",3840 Saint Mary's University of Minnesota,"700 Terrace Heights, Winona, Minnesota 55987-1399",www.smumn.edu,"4-year, Private not-for-profit",5611 Saint Meinrad School of Theology,"200 Hill Drive, Saint Meinrad, Indiana 47577",www.saintmeinrad.edu,"4-year, Private not-for-profit",187 Saint Michaels College,"One Winooski Park, Colchester, Vermont 05439",www.smcvt.edu,"4-year, Private not-for-profit",2460 Saint Norbert College,"100 Grant St, De Pere, Wisconsin 54115-2099",www.snc.edu,"4-year, Private not-for-profit",2137 Saint Paul School of Theology,"5123 E. Truman Rd, Kansas City, Missouri 64127",www.spst.edu,"4-year, Private not-for-profit",267 Saint Pauls College,"115 College Drive, Lawrenceville, Virginia 23868",www.saintpauls.edu,"4-year, Private not-for-profit",644 Saint Peters College,"2641 Kennedy Blvd, Jersey City, New Jersey 07306-5997",www.spc.edu,"4-year, Private not-for-profit",3111 Saint Thomas Aquinas College,"125 Rte 340, Sparkill, New York 10976-1050",www.stac.edu,"4-year, Private not-for-profit",2100 Saint Thomas University,"16401 NW 37th Ave, Miami Gardens, Florida 33054-6459",www.stu.edu,"4-year, Private not-for-profit",2426 Saint Vincent College,"300 Fraser Purchase Rd, Latrobe, Pennsylvania 15650-2690",www.stvincent.edu,"4-year, Private not-for-profit",2021 Saint Vincent de Paul Regional Seminary,"10701 S Military Tr, Boynton Beach, Florida 33436-4899",www.svdp.edu,"4-year, Private not-for-profit",73 Saint Vincent Seminary,"300 Fraser Purchase Rd, Latrobe, Pennsylvania 15650-2690",www.saintvincentseminary.edu,"4-year, Private not-for-profit",73 Saint Vladimirs Orthodox Theological Seminary,"575 Scarsdale Rd, Crestwood, New York 10707-1699",www.svots.edu,"4-year, Private not-for-profit",88 Saint Xavier University,"3700 W 103rd St, Chicago, Illinois 60655",WWW.SXU.EDU,"4-year, Private not-for-profit",5337 Salem Bible College,"12234 River Rd NE, Gervais, Oregon 97026",www.salembiblecollege.org,"4-year, primarily associate's, Private not-for-profit",41 Salem College,"601 S Church St, Winston Salem, North Carolina 27101",www.salem.edu/,"4-year, Private not-for-profit",939 Salem International University,"223 W Main St, Salem, West Virginia 26426",WWW.SALEMU.EDU,"4-year, Private for-profit",574 Salem State College,"352 Lafayette St, Salem, Massachusetts 01970",www.salemstate.edu,"4-year, Public",10157 Salisbury University,"1101 Camden Ave, Salisbury, Maryland 21801-6862",www.salisbury.edu,"4-year, Public",7868 Salish Kootenai College,"58138 US Highway 93, Pablo, Montana 59855",www.skc.edu,"4-year, primarily associate's, Private not-for-profit",993 Salus University,"8360 Old York Rd, Elkins Park, Pennsylvania 19027-6262",www.Salus.edu,"4-year, Private not-for-profit",1556 Salve Regina University,"100 Ochre Point Avenue, Newport, Rhode Island 02840-4192",www.salve.edu,"4-year, Private not-for-profit",2693 Sam Houston State University,"1806 Ave J, Huntsville, Texas 77340",www.shsu.edu/,"4-year, Public",16662 Samford University,"800 Lakeshore Drive, Birmingham, Alabama 35229-2240",www.samford.edu,"4-year, Private not-for-profit",4469 Samra University of Oriental Medicine,"1730 W. Olympic Boulevard, 3rd Floor, Los Angeles, California 90015-1019",SAMRA.EDU,"4-year, Private not-for-profit",155 Samuel Merritt University,"370 Hawthorne Avenue, Oakland, California 94609",www.samuelmerritt.edu,"4-year, Private not-for-profit",1311 San Diego Christian College,"2100 Greenfield Dr, El Cajon, California 92019-1157",www.sdcc.edu,"4-year, Private not-for-profit",422 San Diego State University,"5500 Campanile Dr, San Diego, California 92182",www.sdsu.edu,"4-year, Public",34889 San Diego State University-Imperial Valley Campus,"720 Heber Ave, Calexico, California 92231",www.ivcampus.sdsu.edu,"4-year, Public",971 San Francisco Art Institute,"800 Chestnut St, San Francisco, California 94133-2299",www.sfai.edu,"4-year, Private not-for-profit",601 San Francisco Conservatory of Music,"50 Oak Street, San Francisco, California 94102-6011",www.sfcm.edu,"4-year, Private not-for-profit",402 San Francisco State University,"1600 Holloway Ave, San Francisco, California 94132",www.sfsu.edu,"4-year, Public",30014 San Francisco Theological Seminary,"105 Seminary Road, San Anselmo, California 94960-0000",WWW.SFTS.EDU,"4-year, Private not-for-profit",428 San Joaquin College of Law,"901 Fifth St, Clovis, California 93612-1312",www.sjcl.edu,"4-year, Private not-for-profit",200 San Jose State University,"1 Washington Sq, San Jose, California 95192-0001",www.sjsu.edu,"4-year, Public",32746 San Juan Bautista School of Medicine,"Carretera 172 Urb. Turabo Gardens, Caguas, Puerto Rico 00725-4968",www.sanjuanbautista.edu,"4-year, Private not-for-profit",265 Sanford-Brown College,"1980 Gallows Rd, Vienna, Virginia 22182",www.gibbsva.com,"4-year, primarily associate's, Private for-profit",568 Sanford-Brown College,"1345 Smizer Mill Road, Fenton, Missouri 63026-3400",www.sanford-browncollege.com,"4-year, primarily associate's, Private for-profit",707 Santa Clara University,"500 El Camino Real, Santa Clara, California 95053",www.scu.edu,"4-year, Private not-for-profit",8758 Sarah Lawrence College,"One Meadway, Bronxville, New York 10708",www.slc.edu,"4-year, Private not-for-profit",1715 Savannah College of Art and Design,"342 Bull St, Savannah, Georgia 31402-3146",www.scad.edu,"4-year, Private not-for-profit",9120 Savannah State University,"3219 College Street, Savannah, Georgia 31404-5310",www.savstate.edu/,"4-year, Public",3453 Saybrook Graduate School and Research Center,"747 Front Street, San Francisco, California 94111",www.saybrook.edu,"4-year, Private not-for-profit",548 Schiller International University,"300 East Bay Dr, Largo, Florida 33770",www.schiller.edu,"4-year, Private for-profit",515 School for International Training,"Kipling Rd, Brattleboro, Vermont 05302",www.sit.edu,"4-year, Private not-for-profit",574 School of the Art Institute of Chicago,"36 S Wabash, Chicago, Illinois 60603",www.saic.edu,"4-year, Private not-for-profit",3073 School of the Museum of Fine Arts-Boston,"230 The Fenway, Boston, Massachusetts 02115-5596",www.smfa.edu,"4-year, Private not-for-profit",761 School of Urban Missions,"735 - 105th Ave, Oakland, California 94603",www.sum.edu,"4-year, primarily associate's, Private not-for-profit",109 School of Visual Arts,"209 E 23rd St, New York, New York 10010",www.sva.edu,"4-year, Private for-profit",3988 Schreiner University,"2100 Memorial Blvd, Kerrville, Texas 78028-5697",www.schreiner.edu,"4-year, Private not-for-profit",974 Scottsdale Culinary Institute,"8100 E Camelback Rd, Suite 1001, Scottsdale, Arizona 85251-2729",www.scichefs.com,"4-year, primarily associate's, Private for-profit",1204 Scripps College,"1030 North Columbia Avenue, Claremont, California 91711-3905",www.scrippscollege.edu,"4-year, Private not-for-profit",972 Seabury-Western Theological Seminary,"2122 Sheridan Rd, Evanston, Illinois 60201-2976",www.seabury.edu/,"4-year, Private not-for-profit",69 Seattle Community College-South Campus,"6000 16th Ave SW, Seattle, Washington 98106-1499",southseattle.edu,"4-year, primarily associate's, Public",7095 Seattle Institute of Oriental Medicine,"916 NE 65th St., Seattle, Washington 98115",www.siom.edu,"4-year, Private for-profit",31 Seattle Pacific University,"3307 3rd Ave W, Seattle, Washington 98119-1997",www.spu.edu,"4-year, Private not-for-profit",3891 Seattle University,"900 Broadway, Seattle, Washington 98122-4340",www.seattleu.edu,"4-year, Private not-for-profit",7560 Selma University,"1501 Lapsley St, Dinkins Hall, Selma, Alabama 36701",,"4-year, Private not-for-profit", Seminario Evangelico de Puerto Rico,"776 Ponce de Leon Avenue, San Juan, Puerto Rico 00925",www.se-pr.org,"4-year, Private not-for-profit",231 Seminary of the Immaculate Conception,"440 W Neck Rd, Huntington, New York 11743-1626",www.icseminary.edu,"4-year, Private not-for-profit",150 Seton Hall University,"400 S Orange Ave, South Orange, New Jersey 07079-2697",www.shu.edu,"4-year, Private not-for-profit",9669 Seton Hill University,"Seton Hill Dr, Greensburg, Pennsylvania 15601",www.setonhill.edu,"4-year, Private not-for-profit",2087 Sewanee: The University of the South,"735 University Avenue, Sewanee, Tennessee 37383-1000",www.sewanee.edu,"4-year, Private not-for-profit",1562 Shasta Bible College and Graduate School,"2951 Goodwater Ave., Redding, California 96002",www.shasta.edu,"4-year, Private not-for-profit",71 Shaw University,"118 East South Street, Raleigh, North Carolina 27601",www.shawu.edu,"4-year, Private not-for-profit",2702 Shawnee State University,"940 Second St, Portsmouth, Ohio 45662",WWW.SHAWNEE.EDU,"4-year, Public",3976 Shenandoah University,"1460 University Dr, Winchester, Virginia 22601-5195",www.su.edu,"4-year, Private not-for-profit",3511 Shepherd University,"301 N. King St, Shepherdstown, West Virginia 25443-3210",WWW.SHEPHERD.EDU,"4-year, Public",4185 Sherman College of Straight Chiropractic,"2020 Springfield Rd, Spartanburg, South Carolina 29316",www.sherman.edu,"4-year, Private not-for-profit",240 Shimer College,"3424 South State Street, Chicago, Illinois 60616",www.shimer.edu,"4-year, Private not-for-profit",95 Shippensburg University of Pennsylvania,"1871 Old Main Drive, Shippensburg, Pennsylvania 17257-2299",www.ship.edu,"4-year, Public",7942 Sh'or Yoshuv Rabbinical College,"1 Cedarlawn Avenue, Lawrence, New York 11559-1714",,"4-year, Private not-for-profit",223 Shorter College,"315 Shorter Ave, Rome, Georgia 30165",www.shorter.edu,"4-year, Private not-for-profit",1136 Shorter College-Professional Studies,"6151 Powers Ferry Rd Ste 170, Atlanta, Georgia 30339",www.shorter.edu/pro_studies/professional_home.htm,"4-year, Private not-for-profit",1987 Siena College,"515 Loudon Rd, Loudonville, New York 12211-1462",www.siena.edu,"4-year, Private not-for-profit",3305 Siena Heights University,"1247 Siena Heights Dr, Adrian, Michigan 49221",www.sienaheights.edu,"4-year, Private not-for-profit",2307 Sierra Nevada College,"999 Tahoe Blvd., Incline Village, Nevada 89451",www.sierranevada.edu,"4-year, Private not-for-profit",934 Silicon Valley University,"2160 Lundy Avenue, Suite 110, San Jose, California 95131-1868",www.svuca.edu,"4-year, Private not-for-profit",600 Silver Lake College,"2406 S Alverno Rd, Manitowoc, Wisconsin 54220-9319",www.sl.edu,"4-year, Private not-for-profit",853 Simmons College,"300 The Fenway, Boston, Massachusetts 02115-5898",www.simmons.edu,"4-year, Private not-for-profit",4933 Simpson College,"701 North C St, Indianola, Iowa 50125",www.simpson.edu,"4-year, Private not-for-profit",2018 Simpson University,"2211 College View Drive, Redding, California 96003-8606",www.simpsonuniversity.edu,"4-year, Private not-for-profit",1147 Sinte Gleska University,"E. Highway 18, Mission, South Dakota 57555-0105",www.sintegleska.edu,"4-year, primarily associate's, Private not-for-profit",1012 Sioux Falls Seminary,"1525 S Grange Ave, Sioux Falls, South Dakota 57105-1526",www.sfseminary.edu,"4-year, Private not-for-profit",117 Sitting Bull College,"1341 92nd Street, Fort Yates, North Dakota 58538-9721",www.sittingbull.edu,"4-year, primarily associate's, Public",296 Skidmore College,"815 N Broadway, Saratoga Springs, New York 12866",www.skidmore.edu,"4-year, Private not-for-profit",2777 Slippery Rock University of Pennsylvania,"1 Morrow Way, Slippery Rock, Pennsylvania 16057-1383",www.sru.edu,"4-year, Public",8458 Smith College,"Elm St, Northampton, Massachusetts 01063",www.smith.edu,"4-year, Private not-for-profit",3101 Sojourner-Douglass College,"500 N Caroline St, Baltimore, Maryland 21205-1898",www.sdc.edu,"4-year, Private not-for-profit",1242 Soka University of America,"1 University Drive, Aliso Viejo, California 92656-4105",www.soka.edu,"4-year, Private not-for-profit",384 Somerset Christian College,"10 College Way, Zarephath, New Jersey 08890-9035",www.somerset.edu,"4-year, primarily associate's, Private not-for-profit",169 Sonoma State University,"1801 E Cotati Ave, Rohnert Park, California 94928-3609",www.sonoma.edu,"4-year, Public",8921 South Baylo University,"1126 N Brookhurst St, Anaheim, California 92801-1701",WWW.SOUTHBAYLO.EDU,"4-year, Private not-for-profit",551 South Carolina State University,"300 College St NE, Orangeburg, South Carolina 29117-0001",www.scsu.edu,"4-year, Public",4888 South College,"3904 Lonas Road, Knoxville, Tennessee 37909-0000",www.southcollegetn.edu,"4-year, primarily associate's, Private for-profit",825 South College-Asheville,"29 Turtle Creek Drive, Asheville, North Carolina 28803",www.southcollegenc.edu,"4-year, primarily associate's, Private for-profit",180 South Dakota School of Mines and Technology,"501 E Saint Joseph St, Rapid City, South Dakota 57701-3995",www.sdsmt.edu,"4-year, Public",2061 South Dakota State University,"Administration Lane, Brookings, South Dakota 57007-1898",www3.sdstate.edu,"4-year, Public",11995 South Texas College,"3201 W Pecan, McAllen, Texas 78502-9701",www.southtexascollege.edu,"4-year, primarily associate's, Public",21666 South Texas College of Law,"1303 San Jacinto St, Houston, Texas 77002-7000",www.stcl.edu,"4-year, Private not-for-profit",1267 South University,"9 Science Court, Columbia, South Carolina 29203",www.southuniversity.edu,"4-year, Private for-profit",1038 South University-Montgomery,"5355 Vaughn Road, Montgomery, Alabama 36116-1120",southuniversity.edu,"4-year, primarily associate's, Private for-profit",561 South University-Savannah,"709 Mall Blvd, Savannah, Georgia 31406",www.southuniversity.edu,"4-year, Private for-profit",7879 South University-Tampa,"4401 N Himes Ave, Tampa, Florida 33614-7095",www.southuniversity.edu,"4-year, Private for-profit",426 South University-West Palm Beach,"1760 N Congress Ave, West Palm Beach, Florida 33409",www.southuniversity.edu,"4-year, Private for-profit",771 Southeast Missouri State University,"One University Plaza, Cape Girardeau, Missouri 63701-9980",WWW.SEMO.EDU,"4-year, Public",10736 Southeastern Baptist College,"4229 Hwy 15 N, Laurel, Mississippi 39440-9989",southeasternbaptist.edu,"4-year, primarily associate's, Private not-for-profit",74 Southeastern Bible College,"2545 Valleydale Road, Birmingham, Alabama 35244-2083",www.sebc.edu,"4-year, Private not-for-profit",200 Southeastern Louisiana University,"548 Western Ave., Hammond, Louisiana 70402",www.selu.edu,"4-year, Public",15215 Southeastern Oklahoma State University,"Fifth and University, Durant, Oklahoma 74701-0609",www.se.edu,"4-year, Public",3866 Southeastern University,"1000 Longfellow Blvd, Lakeland, Florida 33801-6034",www.seuniversity.edu,"4-year, Private not-for-profit",3075 Southeastern University,"501 I St SW, Washington, District of Columbia 20024-2788",www.southeastern.edu/,"4-year, Private not-for-profit",642 Southern Adventist University,"4881 Taylor Cir, Collegedale, Tennessee 37315-0370",www.southern.edu,"4-year, Private not-for-profit",2777 Southern Arkansas University Main Campus,"100 E. University, Magnolia, Arkansas 71753",WWW.SAUMAG.EDU,"4-year, Public",3118 Southern California College of Optometry,"2575 Yorba Linda Blvd, Fullerton, California 92831-1699",www.scco.edu,"4-year, Private not-for-profit",385 Southern California Institute of Architecture,"960 E. 3rd Street, Los Angeles, California 90013-1822",www.sciarc.edu,"4-year, Private not-for-profit",482 Southern California Institute of Technology,"222 S. Harbor Blvd. Suite 200, Anaheim, California 92805-3701",WWW.SCIT-SCU.EDU,"4-year, primarily associate's, Private for-profit",604 Southern California Seminary,"2075 E. Madison Avenue, El Cajon, California 92019-1108",www.socalsem.edu,"4-year, Private not-for-profit",182 Southern California University of Health Sciences,"16200 E Amber Valley Dr, Whittier, California 90604",www.scuhs.edu,"4-year, Private not-for-profit",475 Southern Catholic College,"330 Southern Catholic Drive, Dawsonville, Georgia 30534-9913",www.southerncatholic.org,"4-year, Private not-for-profit",231 Southern College of Optometry,"1245 Madison Ave, Memphis, Tennessee 38104-2211",www.sco.edu,"4-year, Private not-for-profit",483 Southern Connecticut State University,"501 Crescent Street, New Haven, Connecticut 06515-1355",www.southernct.edu,"4-year, Public",11769 Southern Illinois University Carbondale,"Carbondale, Illinois 62901-4512",www.siuc.edu,"4-year, Public",20673 Southern Illinois University Edwardsville,"Il State Rte 157, Edwardsville, Illinois 62026-1001",www.siue.edu,"4-year, Public",13602 Southern Methodist College,"541 Broughton St, Orangeburg, South Carolina 29115-7367",www.smcollege.edu,"4-year, Private not-for-profit", Southern Methodist University,"6425 Boaz St, Dallas, Texas 75275-0221",www.smu.edu,"4-year, Private not-for-profit",10965 Southern Nazarene University,"6729 NW 39th Expy, Bethany, Oklahoma 73008",SNU.EDU,"4-year, Private not-for-profit",2069 Southern New England School of Law,"333 Faunce Corner Rd, North Dartmouth, Massachusetts 02747-1252",www.snesl.edu,"4-year, Private not-for-profit",234 Southern New Hampshire University,"2500 N River Rd, Manchester, New Hampshire 03106",www.snhu.edu,"4-year, Private not-for-profit",6991 Southern Oregon University,"1250 Siskiyou Blvd, Ashland, Oregon 97520",www.sou.edu,"4-year, Public",5079 Southern Polytechnic State University,"1100 S. Marietta Parkway, Marietta, Georgia 30060-2896",www.spsu.edu,"4-year, Public",4818 Southern University and A & M College,"Southern Branch Post Office, Baton Rouge, Louisiana 70813",www.subr.edu,"4-year, Public",7669 Southern University at New Orleans,"6801 Press Drive, New Orleans, Louisiana 70126",www.suno.edu,"4-year, Public",3104 Southern University Law Center,"Baton Rouge, Louisiana 70813",,"4-year, Public",531 Southern Utah University,"351 West University Blvd, Cedar City, Utah 84720",www.suu.edu,"4-year, Public",7516 Southern Vermont College,"982 Mansion Drive, Bennington, Vermont 05201-6002",www.svc.edu,"4-year, Private not-for-profit",456 Southern Virginia University,"One University Hill Drive, Buena Vista, Virginia 24416",www.svu.edu,"4-year, Private not-for-profit",686 Southern Wesleyan University,"907 Wesleyan Drive, Central, South Carolina 29630-1020",www.swu.edu.,"4-year, Private not-for-profit",2391 Southwest Acupuncture College-Albuquerque,"7801 Academy NE, Albuquerque, New Mexico 87109",www.acupuncturecollege.edu,"4-year, Private for-profit",82 Southwest Acupuncture College-Boulder,"6620 Gunpark Dr, Boulder, Colorado 80301",www.acupuncturecollege.edu,"4-year, Private for-profit",116 Southwest Acupuncture College-Santa Fe,"1622 Galisteo Street, Santa Fe, New Mexico 87505",www.acupuncturecollege.edu,"4-year, Private for-profit",56 Southwest Baptist University,"1600 University Ave, Bolivar, Missouri 65613-2596",www.sbuniv.edu,"4-year, Private not-for-profit",3656 Southwest College of Naturopathic Medicine & Health Sciences,"2140 E Broadway Rd, Tempe, Arizona 85282",www.scnm.edu,"4-year, Private not-for-profit",331 Southwest Florida College,"1685 Medical Lane, Fort Myers, Florida 33907-1108",www.swfc.edu,"4-year, primarily associate's, Private not-for-profit",1771 Southwest Minnesota State University,"1501 State St, Marshall, Minnesota 56258-5468",www.southwestmsu.edu,"4-year, Public",6502 Southwestern Adventist University,"100 W Hillcrest, Keene, Texas 76059",www.swau.edu/,"4-year, Private not-for-profit",821 Southwestern Assemblies of God University,"1200 Sycamore, Waxahachie, Texas 75165",www.sagu.edu,"4-year, Private not-for-profit",1843 Southwestern Baptist Theological Seminary,"2001 West Seminary Drive, Fort Worth, Texas 76115",www.swbts.edu,"4-year, Private not-for-profit",2588 Southwestern Christian College,"200 Bowser Circle, Terrell, Texas 75160-4812",www.swcc.edu,"4-year, primarily associate's, Private not-for-profit",203 Southwestern Christian University,"7210 NW 39th Expressway, Bethany, Oklahoma 73008",www.swcu.edu,"4-year, Private not-for-profit",291 Southwestern College,"2625 E Cactus Rd, Phoenix, Arizona 85032-7097",www.swcaz.edu,"4-year, Private not-for-profit",381 Southwestern College,"100 College St, Winfield, Kansas 67156-6224",www.sckans.edu,"4-year, Private not-for-profit",1823 Southwestern College,"3960 San Felipe, Santa Fe, New Mexico 87507",www.swc.edu,"4-year, Private not-for-profit",128 Southwestern Law School,"3050 Wilshire Boulevard, Los Angeles, California 90010-1106",www.swlaw.edu,"4-year, Private not-for-profit",1031 Southwestern Oklahoma State University,"100 Campus Dr, Weatherford, Oklahoma 73096-3098",www.swosu.edu,"4-year, Public",4850 Southwestern University,"1001 University Ave, Georgetown, Texas 78626",www.southwestern.edu,"4-year, Private not-for-profit",1270 Spalding University,"845 S. Third Street, Louisville, Kentucky 40203-2188",www.spalding.edu,"4-year, Private not-for-profit",1712 Spartan College of Aeronautics and Technology,"8820 E Pine St, Tulsa, Oklahoma 74115",www.spartan.edu,"4-year, primarily associate's, Private for-profit",1231 Spelman College,"350 Spelman Ln SW, Atlanta, Georgia 30314-4399",www.spelman.edu,"4-year, Private not-for-profit",2270 Spertus College,"610 S Michigan Ave, Chicago, Illinois 60605",www.spertus.edu,"4-year, Private not-for-profit",326 Spring Arbor University,"106 E. Main St, Spring Arbor, Michigan 49283-9799",www.arbor.edu,"4-year, Private not-for-profit",3973 Spring Hill College,"4000 Dauphin St, Mobile, Alabama 36608-1791",www.shc.edu,"4-year, Private not-for-profit",1534 Springfield College,"263 Alden St, Springfield, Massachusetts 01109-3797",www.spfldcol.edu,"4-year, Private not-for-profit",4806 St Andrews Presbyterian College,"1700 Dogwood Mile, Laurinburg, North Carolina 28352",www.sapc.edu,"4-year, Private not-for-profit",623 St Bernard's School of Theology and Ministry,"120 French Road, Rochester, New York 14618",www.stbernards.edu,"4-year, Private not-for-profit",124 St Johns College,"729 E. Carpenter St, Springfield, Illinois 62702",www.st-johns.org/Education/schools/nursing,"4-year, Private not-for-profit",71 St John's College,"1160 Camino Cruz Blanca, Santa Fe, New Mexico 87505-4599",www.stjohnscollege.edu,"4-year, Private not-for-profit",511 St John's College,"60 College Ave, Annapolis, Maryland 21401",www.stjohnscollege.edu,"4-year, Private not-for-profit",562 St Lawrence University,"23 Romoda Drive, Canton, New York 13617",www.stlawu.edu,"4-year, Private not-for-profit",2325 St Louis College of Pharmacy,"4588 Parkview Pl, Saint Louis, Missouri 63110-1088",www.stlcop.edu,"4-year, Private not-for-profit",1191 St Mary's College of Maryland,"18952 E. Fisher Rd, Saint Mary's City, Maryland 20686-3001",www.smcm.edu,"4-year, Public",2068 St Marys University,"One Camino Santa Maria, San Antonio, Texas 78228-8572",www.stmarytx.edu/,"4-year, Private not-for-profit",3889 St Petersburg College,"14025 58th Street North, Clearwater, Florida 33760",www.spcollege.edu,"4-year, primarily associate's, Public",26659 St Tikhon's Orthodox Theological Seminary,"178 St. Tikhon's Rd., South Canaan, Pennsylvania 18459-0130",www.stots.edu,"4-year, Private not-for-profit",75 St. Basil College,"195 Glenbrook Rd, Stamford, Connecticut 06902-3099",www.stbasilcollegesem.net,"4-year, Private not-for-profit",9 St. Francis College,"180 Remsen St, Brooklyn Heights, New York 11201-9902",www.stfranciscollege.edu,"4-year, Private not-for-profit",2425 St. John's Seminary,"5012 Seminary Rd, Camarillo, California 93012-2500",www.stjohnsem.edu,"4-year, Private not-for-profit",79 St. John's University-New York,"8000 Utopia Pky, Queens, New York 11439",www.stjohns.edu,"4-year, Private not-for-profit",20109 St. Mary's Seminary & University,"5400 Roland Ave, Baltimore, Maryland 21210-1994",www.stmarys.edu,"4-year, Private not-for-profit",239 St. Olaf College,"1520 St Olaf Ave, Northfield, Minnesota 55057-1098",www.stolaf.edu,"4-year, Private not-for-profit",3073 St. Petersburg Theological Seminary,"10830 Navajo Dr, Saint Petersburg, Florida 33708-3116",www.sptseminary.edu,"4-year, Private not-for-profit",46 Stanford University,"Stanford, California 94305",www.stanford.edu/,"4-year, Private not-for-profit",17833 Starr King School for Ministry,"2441 Le Conte AVE, Berkeley, California 94709-1209",www.sksm.edu,"4-year, Private not-for-profit",75 Stephen F Austin State University,"1936 North St, Nacogdoches, Texas 75962",www.sfasu.edu,"4-year, Public",12000 Stephens College,"1200 E Broadway, Columbia, Missouri 65215",www.stephens.edu,"4-year, Private not-for-profit",1147 Sterling College,"16 Sterling Drive, Craftsbury Common, Vermont 05827-0072",www.sterlingcollege.edu,"4-year, Private not-for-profit",99 Sterling College,"125 W. Cooper, Sterling, Kansas 67579",www.sterling.edu,"4-year, Private not-for-profit",653 Stetson University,"421 N Woodland Blvd, DeLand, Florida 32723",www.stetson.edu,"4-year, Private not-for-profit",3696 Stevens Henager College-Logan,"755 S Main St, Logan, Utah 84321",www.stevenshenager.edu/,"4-year, Private for-profit",225 Stevens Institute of Technology,"Castle Point On Hudson, Hoboken, New Jersey 07030-5991",www.stevens.edu,"4-year, Private not-for-profit",5595 Stevens-Henager College,"383 W Vine St, Murray, Utah 84123-5671",www.stevenshenager.edu,"4-year, primarily associate's, Private for-profit",876 Stevens-Henager College of Business-Provo,"1476 South Sandhill Road, Orem, Utah 84058",www.stevenshenager.edu,"4-year, Private for-profit",646 Stevens-Henager College-Ogden,"1350 W. 1890 S., West Haven, Utah 84401",stevenshenager.edu,"4-year, primarily associate's, Private for-profit",371 Stevenson University,"1525 Greenspring Valley Rd, Stevenson, Maryland 21153-0641",www.stevenson.edu/,"4-year, Private not-for-profit",3409 Stillman College,"3601 Stillman Boulevard, Tuscaloosa, Alabama 35403",www.stillman.edu,"4-year, Private not-for-profit",1048 Stonehill College,"320 Washington Street, Easton, Massachusetts 02357-6110",www.stonehill.edu,"4-year, Private not-for-profit",2426 Stony Brook University,"Stony Brook, New York 11794",www.stonybrook.edu,"4-year, Public",23991 Stratford University,"7777 Leesburg Pike, Falls Church, Virginia 22043-2403",www.stratford.edu,"4-year, Private for-profit",1468 Strayer University,"1133 15th St NW, Washington, District of Columbia 20005",www.strayer.edu,"4-year, Private for-profit",45491 Strayer University-Alexandria Campus,"2730 Eisenhower Ave, Alexandria, Virginia 22314",www.strayer.edu,"4-year, Private for-profit", Strayer University-Anne Arundel Campus,"1520 Jabez Run, Suite 100, Millersville, Maryland 21108",www.strayer.edu,"4-year, Private for-profit", Strayer University-Arlington Campus,"2121 15th Street North, Arlington, Virginia 22207",www.strayer.edu,"4-year, Private for-profit", Strayer University-Baymeadows Campus,"8375 Dix Ellis Trail Ste 200, Jacksonville, Florida 32256",www.strayer.edu,"4-year, Private for-profit", Strayer University-Birmingham Campus,"3570 Grandview Parkway Ste 200, Birmingham, Alabama 35243",,"4-year, Private for-profit", Strayer University-Center City Campus,"1601 Cherry St Ste 100, Philadelphia, Pennsylvania 19102",,"4-year, Private for-profit", Strayer University-Chamblee Campus,"3355 Northeast Expressway, Suite 100, Atlanta, Georgia 30341",www.strayer.edu,"4-year, Private for-profit", Strayer University-Charleston Campus,"5010 Wetland Crossing, North Charleston, South Carolina 29418",,"4-year, Private for-profit", Strayer University-Cherry Hill Campus,"2201 Route 38 Ste 100, Cherry Hill, New Jersey 08002",www.strayer.edu,"4-year, Private for-profit", Strayer University-Chesapeake Campus,"700 Independence Pkwy, Ste 400, Chesapeake, Virginia 23320",www.strayer.edu,"4-year, Private for-profit", Strayer University-Chesterfield Campus,"2820 Waterford Lake Dr, Suite 100, Midlothian, Virginia 23112",www.strayer.edu,"4-year, Private for-profit", Strayer University-Christiana Campus,"240 Continental Dr.-Ste 108, Neweark, Delaware 19713",,"4-year, Private for-profit", Strayer University-Cobb Campus,"3101 Towercreek Parkway Se, Suite 700, Atlanta, Georgia 30339",www.strayer.edu,"4-year, Private for-profit", Strayer University-Columbia Campus,"200 Center Point Circle, Ste 300, Columbia, South Carolina 29210",www.strayer.edu,"4-year, Private for-profit", Strayer University-Cranberry Woods Campus,"1601 850 Cranberry Woods Dr Ste 2241, Cranberry Township, Pennsylvania 16066",,"4-year, Private for-profit", Strayer University-Delaware County Campus,"760 W Sproul Rd, Suite 200, Springfield, Pennsylvania 19064",www.strayer.edu,"4-year, Private for-profit", Strayer University-Douglasville Campus,"4655 Timber Ridge Dr, Douglasville, Georgia 30135",www.strayer.edu,"4-year, Private for-profit", Strayer University-Fredericksburg Campus,"150 Riverside Parkway Suite 100, Fredericksburg, Virginia 22406",www.strayer.edu,"4-year, Private for-profit", Strayer University-Garner Campus,"1812 Garner Station Blvd, Raleigh, North Carolina 27603",www.strayer.edu,"4-year, Private for-profit", Strayer University-Greensboro Campus,"4900 Koger Blvd, Ste 400, Greensboro, North Carolina 27407",www.strayer.edu,"4-year, Private for-profit", Strayer University-Greenville Campus,"555 North Pleasantburg Drive, Suite 300, Greenville, South Carolina 29607",www.strayer.edu,"4-year, Private for-profit", Strayer University-Henrico Campus,"11501 Nuckols Road, Glen Allen, Virginia 23059",www.strayer.edu,"4-year, Private for-profit", Strayer University-Huntersville Campus,"13620 Reese Boulevard Suite 130, Raleigh, North Carolina 28078",www.strayer.edu,"4-year, Private for-profit", Strayer University-King of Prussia Campus,"234 Mall Boulevard, Suite G50, King of Prussia, Pennsylvania 19406",www.strayer.edu,"4-year, Private for-profit", Strayer University-Knoxville Campus,"10118 Parkside Dr Ste 200, Knoxville, Tennessee 37922",www.strayer.edu,"4-year, Private for-profit", Strayer University-Lexington Campus,"220 Lexington Green Circle Ste 550, Lexington, Kentucky 40503",www.strayer.edu,"4-year, Private for-profit", Strayer University-Lithonia Campus,"3120 Stonecrest Blvd Ste 200, Lithonia, Georgia 30038",www.strayer.edu,"4-year, Private for-profit", Strayer University-Loudoun Campus,"45150 Russell Branch Pky Ste 200, Ashburn, Virginia 20147",www.strayer.edu,"4-year, Private for-profit", Strayer University-Louisville Campus,"2650 Eastpoint Pkwy Ste 100, Louisville, Kentucky 40223",www.strayer.edu,"4-year, Private for-profit", Strayer University-Lower Bucks Campus,"3600 Horizon Blvd, Ste 100, Trevose, Pennsylvania 19053",www.strayer.edu,"4-year, Private for-profit", Strayer University-Maitland Campus,"850 Trafalgar Court Ste 360, Maitland, Florida 32751",www.strayer.edu,"4-year, Private for-profit", Strayer University-Manassas Campus,"9990 Battleview Pky, Manassas, Virginia 20109",www.strayer.edu,"4-year, Private for-profit", Strayer University-Morrow Campus,"3000 Corporate Center Dr, Ste 100, Morrow, Georgia 30260",www.strayer.edu,"4-year, Private for-profit", Strayer University-Nashville Campus,"30 Rachel Drive, Suite 200, Nashville, Tennessee 37214",www.strayer.edu,"4-year, Private for-profit", Strayer University-Newport News Campus,"813 Diligence Dr, Ste 100, Newport News, Virginia 23606",www.strayer.edu,"4-year, Private for-profit", Strayer University-North Charlotte,"8335 IBM Dr-Ste 150, Charlotte, North Carolina 28262",www.strayer.edu,"4-year, Private for-profit", Strayer University-North Raleigh Campus,"3200 Spring Forest Road, Suite 214, Raleigh, North Carolina 27616",www.strayer.edu,"4-year, Private for-profit", Strayer University-Online Campus,"82382-F Terminal Road, Lorton, Virginia 22079",www.strayer.edu,"4-year, Private for-profit", Strayer University-Orlando East Campus,"2200 North Alafaya Trail Ste 500, Orlando, Florida 32826",www.strayer.edu,"4-year, Private for-profit", Strayer University-Owings Mills Campus,"500 Redland Ct, Ste 100, Owings Mills, Maryland 21117",www.strayer.edu,"4-year, Private for-profit", Strayer University-Palm Beach Gardens Campus,"11025 RCA Center Dr Ste 200, Palm Beach Gardens, Florida 33410",www.strayer.edu,"4-year, Private for-profit", Strayer University-Penn Center West Campus,"One Penn Center West Ste 300, Pittsburgh, Pennsylvania 15276",,"4-year, Private for-profit", Strayer University-Prince Georges Campus,"4710 Auth Place, 1st Floor, Suitland, Maryland 20746",www.strayer.edu,"4-year, Private for-profit", Strayer University-Research Triangle Park Campus,"4 Copley Parkway, Morrisville, North Carolina 27560",www.strayer.edu,"4-year, Private for-profit", Strayer University-Rockville Campus,"4 Research Place Suite 100, Rockville, Maryland 20850",www.strayer.edu,"4-year, Private for-profit", Strayer University-Roswell Campus,"100 Mansell Court East, Roswell, Georgia 30076",,"4-year, Private for-profit", Strayer University-Sand Lake Campus,"8529 South Park Circle Ste 310, Orlando, Florida 32819",www.strayer.edu,"4-year, Private for-profit", Strayer University-Savannah Campus,"20 Martin Court, Savannah, Georgia 31419",www.strayer.edu,"4-year, Private for-profit", Strayer University-Shelby Oaks Campus,"6211 Shelby Oaks Drive, Suite 100, Memphis, Tennessee 38134",www.strayer.edu,"4-year, Private for-profit", Strayer University-South Charlotte,"2440 Whitehall Park Dr Suite 700, Charlotte, North Carolina 28273",www.strayer.edu,"4-year, Private for-profit", Strayer University-Takoma Park Campus,"6830 Laurel St Nw, Washington, District of Columbia 20012",www.strayer.edu,"4-year, Private for-profit", Strayer University-Tampa East Campus,"6302 E. Martin Luther King Blvd, Ste 450, Tampa, Florida 33619",www.strayer.edu,"4-year, Private for-profit", Strayer University-Tampa Westshore Campus,"4902 Eisenhower Blvd, Ste 100, Tampa, Florida 33634",www.strayer.edu,"4-year, Private for-profit", Strayer University-Thousand Oaks Campus,"1133 Thousand Oaks Boulevard, Suite 1100, Memphis, Tennessee 38118",www.strayer.edu,"4-year, Private for-profit", Strayer University-Virginia Beach Campus,"249 Central Park Avenue Ste 350, Virginia Beach, Virginia 23462",,"4-year, Private for-profit", Strayer University-Washington Campus,"1133 15th Street NW Ste 300, Washington, District of Columbia 20005",www.strayer.edu,"4-year, Private for-profit", Strayer University-White Marsh Campus,"9409 Philadelphia Rd, Baltimore, Maryland 21237",www.strayer.edu,"4-year, Private for-profit", Strayer University-Willingboro Campus,"300 Willingboro Pkwy Ste 125, Willingboro, New Jersey 08046",www.strayer.edu,"4-year, Private for-profit", Strayer University-Woodbridge Campus,"13385 Minnieville Rd, Woodbridge, Virginia 22192",www.strayer.edu,"4-year, Private for-profit", Suffolk University,"8 Ashburton Pl Beacon Hill, Boston, Massachusetts 02108-2770",www.suffolk.edu,"4-year, Private not-for-profit",9434 Sul Ross State University,"400 North Harrison, Alpine, Texas 79832",www.sulross.edu,"4-year, Public",2772 Sullivan College of Technology and Design,"3901 Atkinson Square Dr, Louisville, Kentucky 40218",www.sctd.edu,"4-year, primarily associate's, Private for-profit",553 Sullivan University,"3101 Bardstown Rd, Louisville, Kentucky 40205-3013",www.sullivan.edu,"4-year, primarily associate's, Private for-profit",3347 Summit Christian College,"2025 21st Street, Gering, Nebraska 69341",www.summitcc.net,"4-year, Private not-for-profit",41 Sunbridge College,"285 Hungry Hollow Rd, Spring Valley, New York 10977",www.Sunbridge.edu,"4-year, Private not-for-profit",54 SUNY at Albany,"1400 Washington Avenue, Albany, New York 12222",www.albany.edu,"4-year, Public",18204 SUNY at Binghamton,"Vestal Pky E, Binghamton, New York 13902-6000",www.binghamton.edu,"4-year, Public",14882 SUNY at Fredonia,"Central Ave, Fredonia, New York 14063-1136",www.fredonia.edu,"4-year, Public",5573 SUNY at Geneseo,"1 College Circle, Geneseo, New York 14454-1465",www.geneseo.edu/,"4-year, Public",5585 SUNY at Purchase College,"735 Anderson Hill Rd, Purchase, New York 10577-1400",www.purchase.edu,"4-year, Public",4251 SUNY College at Brockport,"350 New Campus Dr, Brockport, New York 14420-2919",www.brockport.edu,"4-year, Public",8275 SUNY College at Buffalo,"1300 Elmwood Ave, Buffalo, New York 14222",www.buffalostate.edu,"4-year, Public",11234 SUNY College at Cortland,"Cortland, New York 13045-0900",www.cortland.edu,"4-year, Public",7234 SUNY College at New Paltz,"1 Hawk Drive, New Paltz, New York 12561-2443",www.newpaltz.edu,"4-year, Public",8205 SUNY College at Old Westbury,"223 Store Hill Rd, Old Westbury, New York 11568-0210",WWW.OLDWESTBURY.EDU,"4-year, Public",3505 SUNY College at Oneonta,"Ravine Parkway, Oneonta, New York 13820-4015",www.oneonta.edu,"4-year, Public",5757 SUNY College at Oswego,"7060 State Route 104, Oswego, New York 13126",www.oswego.edu/,"4-year, Public",8909 SUNY College at Plattsburgh,"101 Broad Street, Plattsburgh, New York 12901-2681",www.plattsburgh.edu,"4-year, Public",6358 SUNY College at Potsdam,"Pierrepont Ave, Potsdam, New York 13676-2294",www.potsdam.edu,"4-year, Public",4325 SUNY College of Agriculture and Technology at Cobleskill,"Cobleskill, New York 12043",www.cobleskill.edu/,"4-year, primarily associate's, Public",2615 SUNY College of Environmental Science and Forestry,"One Forestry Dr., Syracuse, New York 13210",www.esf.edu,"4-year, Public",2523 SUNY College of Optometry,"33 West 42nd Street, New York, New York 10036-8003",www.sunyopt.edu,"4-year, Public",303 SUNY College of Technology at Alfred,"Alfred, New York 14802",www.alfredstate.edu,"4-year, primarily associate's, Public",3276 SUNY College of Technology at Canton,"34 Cornell Drive, Canton, New York 13617-1098",www.canton.edu,"4-year, primarily associate's, Public",2970 SUNY College of Technology at Delhi,"2 Main Street, Delhi, New York 13753-1100",www.delhi.edu,"4-year, primarily associate's, Public",2971 SUNY Empire State College,"2 Union Ave, Saratoga Springs, New York 12866-4391",www.esc.edu,"4-year, Public",13614 SUNY Health Science Center at Brooklyn,"450 Clarkson Ave, Brooklyn, New York 11203-2098",www.downstate.edu/,"4-year, Public",1613 SUNY Health Science Center at Syracuse,"750 E Adams St, Syracuse, New York 13210",www.upstate.edu,"4-year, Public",1374 SUNY Institute of Technology at Utica-Rome,"Horatio Street, Utica, New York 13504-3050",www.sunyit.edu,"4-year, Public",2891 SUNY Maritime College,"6 Pennyfield Avenue, Throggs Neck, New York 10465-4198",www.sunymaritime.edu,"4-year, Public",1630 Susquehanna University,"514 University Ave, Selinsgrove, Pennsylvania 17870-1025",www.susqu.edu,"4-year, Private not-for-profit",2137 Swarthmore College,"500 College Ave, Swarthmore, Pennsylvania 19081",www.swarthmore.edu,"4-year, Private not-for-profit",1490 Swedish Institute College of Health Sciences,"226 W 26th St., 5th Fl, New York, New York 10001-6700",www.swedishinstitute.edu,"4-year, primarily associate's, Private for-profit",578 Sweet Briar College,"134 Chapel Drive, Sweet Briar, Virginia 24595-9998",www.sbc.edu,"4-year, Private not-for-profit",828 Syracuse University,"Syracuse, New York 13244-1100",syr.edu/,"4-year, Private not-for-profit",19366 Tabor College,"400 S Jefferson, Hillsboro, Kansas 67063-1799",www.tabor.edu,"4-year, Private not-for-profit",612 Tai Sophia Institute,"7750 Montpelier Road, Laurel, Maryland 20723",WWW.TAI.EDU,"4-year, Private not-for-profit",444 Talladega College,"627 W Battle St, Talladega, Alabama 35160",www.talladega.edu,"4-year, Private not-for-profit",601 Talmudic College of Florida,"1910 Alton Rd, Miami Beach, Florida 33139",talmudicu.edu,"4-year, Private not-for-profit",44 Talmudical Academy-New Jersey,"Adelphia Road, Adelphia, New Jersey 07710",,"4-year, Private not-for-profit",53 Talmudical Institute of Upstate New York,"769 Park Ave, Rochester, New York 14607",,"4-year, Private not-for-profit",25 Talmudical Seminary of Bobov,"5120 New Utrecht Ave, Brooklyn, New York 11219",,"4-year, Private not-for-profit",126 Talmudical Seminary Oholei Torah,"667 Eastern Pky, Brooklyn, New York 11213",,"4-year, Private not-for-profit",323 Talmudical Yeshiva of Philadelphia,"6063 Drexel Rd, Philadelphia, Pennsylvania 19131",,"4-year, Private not-for-profit",116 Tarleton State University,"1333 W. Washington, Stephenville, Texas 76401-0000",www.tarleton.edu,"4-year, Public",9633 Taylor University,"236 W Reade Ave, Upland, Indiana 46989-1001",www.taylor.edu,"4-year, Private not-for-profit",1871 Taylor University Fort Wayne,"1025 W Rudisill Blvd, Fort Wayne, Indiana 46807-2197",fw.taylor.edu,"4-year, Private not-for-profit",999 Taylor University Graduate School,"236 W Reade Avenue, Upland, Indiana 46989",www.taylor.edu,"4-year, Private not-for-profit",134 Teachers College at Columbia University,"525 W 120th St, New York, New York 10027",www.tc.columbia.edu,"4-year, Private not-for-profit",5040 Teikyo Loretto Heights University,"3001 S Federal Blvd, Denver, Colorado 80236-2711",WWW.TLHU.EDU,"4-year, primarily associate's, Private not-for-profit",381 Telshe Yeshiva-Chicago,"3535 West Foster, Chicago, Illinois 60625",,"4-year, Private not-for-profit",89 Temple Baptist College,"11965 Kenn Rd, Cincinnati, Ohio 45240",templebaptist.edu,"4-year, Private not-for-profit",38 Temple Baptist Seminary,"1906 Union Avenue, Chattanooga, Tennessee 37404",www.templebaptistseminary.edu,"4-year, Private not-for-profit",173 Temple University,"1801 North Broad Street, Philadelphia, Pennsylvania 19122-6096",WWW.TEMPLE.EDU,"4-year, Public",35490 Tennessee State University,"3500 John Merritt Blvd, Nashville, Tennessee 37209-1561",www.tnstate.edu,"4-year, Public",8254 Tennessee Technological University,"1 William L. Jones Drive, Cookeville, Tennessee 38505-0001",www.tntech.edu,"4-year, Public",10793 Tennessee Temple University,"1815 Union Ave, Chattanooga, Tennessee 37404",www.tntemple.edu,"4-year, Private not-for-profit",716 Tennessee Wesleyan College,"204 East College Street, Athens, Tennessee 37303",www.twcnet.edu,"4-year, Private not-for-profit",988 Texas A & M International University,"5201 University Blvd, Laredo, Texas 78041-1900",TAMIU.EDU,"4-year, Public",5856 Texas A & M University,"College Station, Texas 77843",www.tamu.edu,"4-year, Public",48039 Texas A & M University at Galveston,"200 Seawolf Parkway, Galveston, Texas 77554",www.tamug.edu,"4-year, Public",1612 Texas A & M University-Commerce,"2600 South Neal, Commerce, Texas 75429-3011",www.tamu-commerce.edu,"4-year, Public",8725 Texas A & M University-Corpus Christi,"6300 Ocean Dr., Corpus Christi, Texas 78412-5503",www.tamucc.edu,"4-year, Public",9007 Texas A & M University-Kingsville,"955 University Blvd, Kingsville, Texas 78363",WWW.TAMUK.EDU,"4-year, Public",7133 Texas A & M University-Texarkana,"2600 N Robison Rd, Texarkana, Texas 75505",www.tamut.edu,"4-year, Public",1666 Texas A&M Health Science Center,"301 Tarrow, 7th Floor, College Station, Texas 77840",tamhsc.edu/,"4-year, Public",1695 Texas Chiropractic College Foundation Inc,"5912 Spencer Hwy, Pasadena, Texas 77505",www.txchiro.edu,"4-year, Private not-for-profit",365 Texas Christian University,"2800 S University Dr, Fort Worth, Texas 76129",www.tcu.edu,"4-year, Private not-for-profit",8696 Texas College,"2404 N. Grand Avenue, Tyler, Texas 75702",www.texascollege.edu,"4-year, Private not-for-profit",736 Texas College of Traditional Chinese Medicine,"4005 Manchaca Rd, Austin, Texas 78704",www.texastcm.edu,"4-year, Private for-profit",98 Texas Lutheran University,"1000 W. Court St, Seguin, Texas 78155-5999",www.tlu.edu,"4-year, Private not-for-profit",1432 Texas Southern University,"3100 Cleburne St, Houston, Texas 77004",www.tsu.edu,"4-year, Public",9102 Texas State University-San Marcos,"601 University Dr, San Marcos, Texas 78666",www.txstate.edu,"4-year, Public",29105 Texas Tech University,"Broadway and University Avenue, Lubbock, Texas 79409-5005",www.ttu.edu,"4-year, Public",28422 Texas Tech University Health Sciences Center,"3601 4th Street, Room 3B305A, Lubbock, Texas 79430-8305",www.ttuhsc.edu,"4-year, Public",2904 Texas Wesleyan University,"1201 Wesleyan St, Fort Worth, Texas 76105-1536",www.txwes.edu,"4-year, Private not-for-profit",3202 Texas Woman's University,"304 Administration Dr, Denton, Texas 76201",WWW.TWU.EDU,"4-year, Public",12465 The Art Center Design College-Albuquerque,"5000 Marble NE, Albuquerque, New Mexico 87110",www.theartcenter.EDU,"4-year, Private for-profit",294 The Art Center Design College-Tucson,"2525 N Country Club Rd, Tucson, Arizona 85716",www.theartcenter.edu,"4-year, Private for-profit",355 The Art Institute of Atlanta,"6600 Peachtree Dunwoody Rd., 100 Embassy Row, Atlanta, Georgia 30328-1635",www.artinstitutes.edu/atlanta,"4-year, Private for-profit",3576 The Art Institute of Austin,"101 W. Louis Henna Blvd, Suite 100, Austin, Texas 78728",,"4-year, Private for-profit",416 The Art Institute of Boston at Lesley University,"700 Beacon St, Boston, Massachusetts 02215-2598",www.aiboston.edu/,"4-year, Private not-for-profit", The Art Institute of California-Hollywood,"3440 Wilshire Blvd 10th Fl, Los Angeles, California 90010-2112",www.aicdc.artinstitutes.edu,"4-year, Private for-profit",918 The Art Institute of California-Inland Empire,"630 East Brier Drive, San Bernardino, California 92408-2800",www.artinstitutes.edu/inlandempire,"4-year, primarily associate's, Private for-profit",1057 The Art Institute of California-Los Angeles,"2900 31st St, Santa Monica, California 90405-3035",www.aila.artinstitutes.edu/,"4-year, Private for-profit",2179 The Art Institute of California-Orange County,"3601 W Sunflower Ave, Santa Ana, California 92704",www.aicaoc.artinstitutes.edu,"4-year, Private for-profit",1727 The Art Institute of California-Sacramento,"2850 Gateway Oaks Dr-Ste 100, Sacramento, California 95833",,"4-year, Private for-profit",339 The Art Institute of California-San Diego,"7650 Mission Valley Road, San Diego, California 92108-4423",www.artinstitutes.edu/sandiego/,"4-year, Private for-profit",2047 The Art Institute of California-San Francisco,"1170 Market St, San Francisco, California 94102-4908",www.aicasf.aii.edu,"4-year, Private for-profit",1548 The Art Institute of California-Sunnyvale,"1120 Kifer Rd, Sunnyvale, California 94086",,"4-year, Private for-profit",284 The Art Institute of Charleston,"24 N. Market St, Charleston, South Carolina 29401",www.artinstitutes.edu/charleston,"4-year, Private for-profit",499 The Art Institute of Charlotte,"Three Lakepointe Plaze, 2110 Water Ridge Parkway, Charlotte, North Carolina 28217-4536",www.artinstitutes.edu/charlotte,"4-year, primarily associate's, Private for-profit",1027 The Art Institute of Colorado,"1200 Lincoln Street, Denver, Colorado 80203-2983",www.aic.artinstitutes.edu,"4-year, Private for-profit",2404 The Art Institute of Dallas,"8080 Park Lane #100, Dallas, Texas 75231-5993",www.aid.edu,"4-year, primarily associate's, Private for-profit",1857 The Art Institute of Fort Lauderdale Inc,"1799 SE 17th St, Fort Lauderdale, Florida 33316-3000",www.aifl.edu,"4-year, primarily associate's, Private for-profit",3054 The Art Institute of Houston,"1900 Yorktown Street, Houston, Texas 77056-4197",www.aih.aii.edu,"4-year, Private for-profit",1915 The Art Institute of Indianapolis,"3500 DePauw Blvd Suite 1010, Indianapolis, Indiana 46268",www.aii.edu/indianapolis,"4-year, primarily associate's, Private for-profit",824 The Art Institute of Las Vegas,"2350 Corporate Circle, Henderson, Nevada 89074-7737",www.ailv.artinstitutes.edu,"4-year, Private for-profit",1301 The Art Institute of Michigan,"28125 Cabot Dr Ste 120, Novi, Michigan 48377-2985",www.artinstitutes.edu/detroit/,"4-year, Private for-profit",296 The Art Institute of Philadelphia,"1622 Chestnut Street, Philadelphia, Pennsylvania 19103-5198",www.artinstitutes.edu/philadelphia/,"4-year, Private for-profit",3689 The Art Institute of Phoenix,"2233 W Dunlap Ave, Phoenix, Arizona 85021-2859",www.aipx.aii.edu,"4-year, Private for-profit",1126 The Art Institute of Pittsburgh,"420 Boulevard of the Allies, Pittsburgh, Pennsylvania 15219-1328",artinstitutes.edu/pittsburgh/,"4-year, Private for-profit",2968 The Art Institute of Pittsburgh-Online Division,"1400 Penn Avenue, Pittsburgh, Pennsylvania 15222-4332",www.artinstitutes.edu/pittsburgh,"4-year, primarily associate's, Private for-profit",7032 The Art Institute of Portland,"1122 NW Davis St., Portland, Oregon 97209-2911",www.artinstitutes.edu/portland/,"4-year, Private for-profit",1786 The Art Institute of Raleigh-Durham,"410 Blackwell St, Ste 200, Durham, North Carolina 27701",www.artinstitutes.edu/durham,"4-year, primarily associate's, Private for-profit",110 The Art Institute of Salt Lake City,"121 W Election Rd - Ste 100, Draper, Utah 84020",www.artinstitutes.edu/saltlakecity/,"4-year, primarily associate's, Private for-profit",233 The Art Institute of Seattle,"2323 Elliott Ave, Seattle, Washington 98121-1622",www.ais.edu,"4-year, primarily associate's, Private for-profit",2234 The Art Institute of Tennessee-Nashville,"100 Centerview Drive, Suite 250, Nashville, Tennessee 37214-3439",www.artinstitutes.edu/nashville/,"4-year, primarily associate's, Private for-profit",472 The Art Institute of Tucson,"5099 E. Grant Rd. #100, Tucson, Arizona 85712",www.artinstitutes.edu/tucson,"4-year, primarily associate's, Private for-profit",135 The Art Institute of Washington,"1820 N Fort Myer Dr, Arlington, Virginia 22209-1802",www.aiw.aii.edu,"4-year, Private for-profit",1892 The Art Institutes International Minnesota,"15 S 9th Street, Minneapolis, Minnesota 55402",www.aim.artinstitutes.edu,"4-year, Private for-profit",1890 The Art Institutes International-Kansas City,"8202 Melrose Drive, Lenexa, Kansas 66214-1625",www.artinstitutes.edu/kansascity/,"4-year, Private for-profit",86 The Baptist College of Florida,"5400 College Dr, Graceville, Florida 32440",www.baptistcollege.edu,"4-year, Private not-for-profit",588 The Boston Conservatory,"8 the Fenway, Boston, Massachusetts 02215",www.bostonconservatory.edu,"4-year, Private not-for-profit",699 The College of Idaho,"2112 Cleveland Blvd, Caldwell, Idaho 83605-4432",www.collegeofidaho.edu,"4-year, Private not-for-profit",944 The College of New Jersey,"2000 Pennington Road, Ewing, New Jersey 08628-0718",www.tcnj.edu,"4-year, Public",6949 The College of New Rochelle,"29 Castle Pl, New Rochelle, New York 10805-2339",www.cnr.edu,"4-year, Private not-for-profit",5311 The College of Saint Rose,"432 Western Ave, Albany, New York 12203-1490",www.strose.edu,"4-year, Private not-for-profit",5102 The College of Saint Scholastica,"1200 Kenwood Ave, Duluth, Minnesota 55811-4199",www.css.edu,"4-year, Private not-for-profit",3593 The College of Saint Thomas More,"3020 Lubbock, Fort Worth, Texas 76109",www.cstm.edu,"4-year, Private not-for-profit",81 The College of Westchester,"325 Central Ave, White Plains, New York 10606",www.cw.edu,"4-year, primarily associate's, Private for-profit",1196 The College of Wooster,"1189 Beall Avenue, Wooster, Ohio 44691",www.wooster.edu,"4-year, Private not-for-profit",1884 The Colorado Center for Medical Laboratory Science,"1719 E 19th Ave, Denver, Colorado 80218-1281",www.medlabed.org,"4-year, Private not-for-profit",18 The Creative Center,"10850 Emmet St, Omaha, Nebraska 68164",www.creativecenter.edu,"4-year, primarily associate's, Private for-profit",118 The Curtis Institute of Music,"1726 Locust St, Philadelphia, Pennsylvania 19103",www.curtis.edu,"4-year, Private not-for-profit",162 The Dickinson School of Law of the Pennsylvania State University,"150 South College St, Carlisle, Pennsylvania 17013-2861",www.dsl.psu.edu/,"4-year, Public",349 The Evergreen State College,"2700 Evergreen Pkwy NW, Olympia, Washington 98505-0001",www.evergreen.edu,"4-year, Public",4696 The Fashion Institute of Design & Merchandising-Los Angeles,"919 S Grand Ave, Los Angeles, California 90015-1421",WWW.FIDM.EDU,"4-year, primarily associate's, Private for-profit",4651 The General Theological Seminary,"175 9th Ave, New York, New York 10011-4977",WWW.GTS.EDU,"4-year, Private not-for-profit",145 The Illinois Institute of Art-Chicago,"350 N Orleans St, Chicago, Illinois 60654-1593",www.aii.edu,"4-year, Private for-profit",2883 The Illinois Institute of Art-Schaumburg,"1000 Plaza Drive Ste. 100, Schaumburg, Illinois 60173-4913",www.ilia.aii.edu,"4-year, Private for-profit",1240 The John Marshall Law School,"315 S Plymouth Ct, Chicago, Illinois 60604",WWW.JMLS.EDU,"4-year, Private not-for-profit",1544 The Juilliard School,"60 Lincoln Center Plaza, New York, New York 10023-6588",www.juilliard.edu,"4-year, Private not-for-profit",1078 The King's College,"350 Fifth Ave Ste 1500, New York, New York 10118",www.tkc.edu,"4-year, Private not-for-profit",258 The Master's College and Seminary,"21726 Placerita Canyon Road, Santa Clarita, California 91321-1200",www.masters.edu,"4-year, Private not-for-profit",1417 The National Hispanic University,"14271 Story Rd, San Jose, California 95127-3823",www.nhu.edu,"4-year, Private not-for-profit",591 The New England Conservatory of Music,"290 Huntington Ave, Boston, Massachusetts 02115-5018",www.newenglandconservatory.edu,"4-year, Private not-for-profit",714 The New England Institute of Art,"10 Brookline Place West, Brookline, Massachusetts 02445-7295",www.artinstitutes.edu/boston,"4-year, Private for-profit",1641 The New School,"66 W 12th Street, New York, New York 10011-8603",www.newschool.edu,"4-year, Private not-for-profit",9825 The Restaurant School at Walnut Hill College,"4207 Walnut St, Philadelphia, Pennsylvania 19104",www.walnuthillcollege.edu,"4-year, primarily associate's, Private for-profit",509 The Richard Stockton College of New Jersey,"Jim Leeds Rd, Pomona, New Jersey 08240-0195",www.stockton.edu,"4-year, Public",7307 The Robert B Miller College,"450 North Ave, Battle Creek, Michigan 49017",www.millercollege.edu,"4-year, Private not-for-profit",242 The Southern Baptist Theological Seminary,"2825 Lexington Rd, Louisville, Kentucky 40280-0001",www.sbts.edu,"4-year, Private not-for-profit",3356 The University of Alabama,"739 University Blvd, Tuscaloosa, Alabama 35487-0166",www.ua.edu/,"4-year, Public",27014 The University of Connecticut School of Medicine and Dentistry,"263 Farmington Ave, Farmington, Connecticut 06030-1905",www.uchc.edu,"4-year, Public",503 The University of Findlay,"1000 N Main St, Findlay, Ohio 45840-3653",www.findlay.edu/,"4-year, Private not-for-profit",5761 The University of Montana,"Missoula, Montana, Missoula, Montana 59812",www.umt.edu,"4-year, Public",14207 The University of Montana-Western,"710 S Atlantic, Dillon, Montana 59725-3598",www.umwestern.edu,"4-year, Public",1190 The University of Tampa,"401 W Kennedy Blvd, Tampa, Florida 33606-1490",www.ut.edu,"4-year, Private not-for-profit",5800 The University of Tennessee,"Circle Park, Knoxville, Tennessee 37996",www.tennessee.edu,"4-year, Public",30410 The University of Tennessee at Chattanooga,"615 McCallie Ave, Chattanooga, Tennessee 37403-2598",www.utc.edu,"4-year, Public",9807 The University of Tennessee-Martin,"University Street, Martin, Tennessee 38238-5021",www.utm.edu,"4-year, Public",7574 The University of Texas at Arlington,"701 S. Nedderman Dr., Arlington, Texas 76013",WWW.UTA.EDU,"4-year, Public",25084 The University of Texas at Austin,"Austin, Texas 78712",www.utexas.edu,"4-year, Public",49984 The University of Texas at Brownsville,"80 Fort Brown, Brownsville, Texas 78520-4991",WWW.UTB.EDU,"4-year, Public",17189 The University of Texas at Dallas,"800 West Campbell Road, Richardson, Texas 75080-3021",www.utdallas.edu,"4-year, Public",14913 The University of Texas at El Paso,"500 W. University Ave, El Paso, Texas 79968-0691",www.utep.edu,"4-year, Public",20458 The University of Texas at San Antonio,"One UTSA Circle, San Antonio, Texas 78249-1644",www.utsa.edu/,"4-year, Public",28413 The University of Texas at Tyler,"3900 University Blvd, Tyler, Texas 75799-6699",www.uttyler.edu/,"4-year, Public",6117 The University of Texas Health Science Center at Houston,"7000 Fannin, Suite 1200, Houston, Texas 77030",www.uthouston.edu/,"4-year, Public",3865 The University of Texas Health Science Center at San Antonio,"7703 Floyd Curl Dr, San Antonio, Texas 78229-3900",www.uthscsa.edu,"4-year, Public",3093 The University of Texas M.D. Anderson Cancer Center,"1515 Holcombe Blvd., Houston, Texas 77030-4009",www.mdanderson.org,"4-year, Public",203 The University of Texas Medical Branch,"301 University Blvd, Galveston, Texas 77555-0129",www.utmb.edu,"4-year, Public",2338 The University of Texas of the Permian Basin,"4901 E University, Odessa, Texas 79762-0001",www.utpb.edu,"4-year, Public",3496 The University of Texas-Pan American,"1201 W University Dr, Edinburg, Texas 78539-2999",www.utpa.edu,"4-year, Public",17534 The University of the Arts,"320 S Broad St, Philadelphia, Pennsylvania 19102-4901",www.uarts.edu,"4-year, Private not-for-profit",2401 The University of Virginia's College at Wise,"1 College Avenue, Wise, Virginia 24293-4400",www.uvawise.edu,"4-year, Public",1964 The University of West Florida,"11000 University Parkway, Pensacola, Florida 32514-5750",uwf.edu,"4-year, Public",10491 The Wright Institute,"2728 Durant Ave, Berkeley, California 94704-1796",www.wi.edu,"4-year, Private not-for-profit",387 Theological Seminary of the Reformed Episcopal Church,"826 Second Avenue, Blue Bell, Pennsylvania 19422-1257",www.reseminary.edu,"4-year, Private not-for-profit",11 Thiel College,"75 College Ave, Greenville, Pennsylvania 16125-2181",www.thiel.edu,"4-year, Private not-for-profit",1137 Thomas Aquinas College,"10000 N Ojai Rd, Santa Paula, California 93060",www.thomasaquinas.edu,"4-year, Private not-for-profit",340 Thomas College,"180 W River Rd, Waterville, Maine 04901-5097",www.thomas.edu,"4-year, Private not-for-profit",943 Thomas Edison State College,"101 W State St, Trenton, New Jersey 08608-1176",www.tesc.edu,"4-year, Public",17369 Thomas Jefferson School of Law,"2121 San Diego Ave, San Diego, California 92110",www.tjsl.edu,"4-year, Private not-for-profit",870 Thomas Jefferson University,"1020 Walnut Street, Philadelphia, Pennsylvania 19107",www.jefferson.edu,"4-year, Private not-for-profit",3202 Thomas M. Cooley Law School,"300 S Capitol Ave, Lansing, Michigan 48901",www.cooley.edu,"4-year, Private not-for-profit",3725 Thomas More College,"333 Thomas More Parkway, Crestview Hills, Kentucky 41017-3495",www.thomasmore.edu,"4-year, Private not-for-profit",1894 Thomas More College of Liberal Arts,"6 Manchester St, Merrimack, New Hampshire 03054",www.thomasmorecollege.edu,"4-year, Private not-for-profit",92 Thomas University,"1501 Millpond Rd, Thomasville, Georgia 31792",www.thomasu.edu,"4-year, Private not-for-profit",900 Thunderbird School of Global Management,"1 Global Place, Glendale, Arizona 85306-6000",www.thunderbird.edu,"4-year, Private not-for-profit",1349 Tiffin University,"155 Miami Street, Tiffin, Ohio 44883",www.tiffin.edu,"4-year, Private not-for-profit",2674 Toccoa Falls College,"325 Chapel Drive, Toccoa Falls, Georgia 30598",www.tfc.edu,"4-year, Private not-for-profit",899 Torah Temimah Talmudical Seminary,"507 Ocean Pky, Brooklyn, New York 11218",,"4-year, Private not-for-profit",176 Tougaloo College,"500 W County Line Rd, Tougaloo, Mississippi 39174",www.tougaloo.edu,"4-year, Private not-for-profit",871 Touro College,"27-33 W 23rd St, New York, New York 10010",www.touro.edu,"4-year, Private not-for-profit",17327 Towson University,"8000 York Rd, Towson, Maryland 21252-0001",www.towson.edu,"4-year, Public",21111 Toyota Technological Institute at Chicago,"6045 S. Kenwood Ave., Chicago, Illinois 60637",www.tti-c.org,"4-year, Private not-for-profit",11 Traditional Chinese Medical College of Hawaii,"65-1206 Mamalahoa Hwy Bldg 3, Kamuela, Hawaii 96743",www.tcmch.edu,"4-year, Private not-for-profit",29 Transylvania University,"300 N Broadway, Lexington, Kentucky 40508-1797",www.transy.edu,"4-year, Private not-for-profit",1158 Trevecca Nazarene University,"333 Murfreesboro Rd, Nashville, Tennessee 37210",www.trevecca.edu,"4-year, Private not-for-profit",2366 Trine University,"1 University Ave, Angola, Indiana 46703-1764",www.trine.edu,"4-year, Private not-for-profit",1451 Trine University-Fort Wayne Regional Campus,"9910 Dupont Circle Drive East, Fort Wayne, Indiana 46825",www.trine.edu,"4-year, Private not-for-profit",200 Trine University-South Bend Regional Campus,"4101 Edison Lakes parkway Suite 250, Mishawaka, Indiana 46545",www.trine.edu,"4-year, Private not-for-profit",78 Trinity Baptist College,"800 Hammond Blvd, Jacksonville, Florida 32221",www.tbc.edu,"4-year, Private not-for-profit",291 Trinity Bible College,"50 6th Ave S, Ellendale, North Dakota 58436-7150",www.trinitybiblecollege.edu,"4-year, Private not-for-profit",296 Trinity Christian College,"6601 W College Dr, Palos Heights, Illinois 60463-0929",www.trnty.edu,"4-year, Private not-for-profit",1404 Trinity College,"300 Summit St, Hartford, Connecticut 06106-3100",www.Trincoll.edu,"4-year, Private not-for-profit",2504 Trinity College of Florida,"2430 Welbilt Boulevard, Trinity, Florida 34655-4401",trinitycollege.edu,"4-year, Private not-for-profit",184 Trinity College of Nursing and Health Sciences,"2122 - 25th Avenue, Rock Island, Illinois 61201-5317",www.trinitycollegeqc.edu,"4-year, primarily associate's, Private not-for-profit",230 Trinity College of the Bible and Trinity Theological Seminary,"4233 Medwel Drive, Newburgh, Indiana 47630-2528",www.trinitysem.edu,"4-year, Private not-for-profit",5518 Trinity Episcopal School for Ministry,"311 Eleventh St, Ambridge, Pennsylvania 15003-2397",www.tesm.edu,"4-year, Private not-for-profit",149 Trinity International University,"2065 Half Day Rd, Deerfield, Illinois 60015-1283",www.tiu.edu,"4-year, Private not-for-profit",2694 Trinity International University,"8190 West State Road 84, Davie, Florida 33324",www.tiu.edu/florida,"4-year, Private not-for-profit",327 Trinity Law and Graduate School,"2200 N Grand Ave, Santa Ana, California 92705",www.tiu.edu/law,"4-year, Private not-for-profit",132 Trinity Life Bible College,"5225 Hillsdale at Madison, Sacramento, California 95842",tlbc.edu,"4-year, primarily associate's, Private not-for-profit",175 Trinity Lutheran College,"2802 Wetmore Ave., Everett, Washington 98206",www.tlc.edu,"4-year, Private not-for-profit",90 Trinity Lutheran Seminary,"2199 E Main St, Columbus, Ohio 43209-2334",www.trinitylutheranseminary.edu,"4-year, Private not-for-profit",146 Trinity University,"One Trinity Place, San Antonio, Texas 78212-7200",www.trinity.edu,"4-year, Private not-for-profit",2703 Trinity Washington University,"125 Michigan Ave NE, Washington, District of Columbia 20017-1094",www.trinitydc.edu,"4-year, Private not-for-profit",1727 Tri-State Bible College,"506 Margaret St, South Point, Ohio 45680",www.tsbc.edu,"4-year, primarily associate's, Private not-for-profit",49 Tri-State College of Acupuncture,"80 Eighth Ave Rm 400, New York, New York 10011",www.TSCA.edu,"4-year, Private for-profit",169 Troy University,"University Avenue, Troy, Alabama 36082-0001",www.troy.edu,"4-year, Public",28303 Troy University-Atlantic Region,"5425 Robin Hood Road, Suite B1, Norfolk, Virginia 23513-4419",www.troy.edu/ar,"4-year, Public", Troy University-Dothan Campus,"500 University Drive, Dothan, Alabama 36303-4419",dothan.troy.edu,"4-year, Public", Troy University-eCampus,"Extended Learning Center 1101 South Brundidge St., Troy, Alabama 36082-5327",www.troy.edu/ecampus/index.html,"4-year, Public", Troy University-Montgomery Campus,"231 Montgomery Street, Montgomery, Alabama 36103-4419",montgomery.troy.edu,"4-year, Public", Troy University-Phenix City Campus,"1 University Place, Phenix City, Alabama 36869",phenix.troy.edu,"4-year, Public", Troy University-Southeast Region,"506 Manchester Expressway, Ste B20, Columbus, Georgia 31904-5327",ser.troy.edu,"4-year, Public", Troy University-Southeast Region,"506 Manchester Expressway, Suite B-20, Columbus, Georgia 31904-5327",ser.troy.edu,"4-year, Public", Troy University-Western Region,"8610 Explorer Drive Suite 101, Colorado Springs, Colorado 80920-5327",wr.troy.edu,"4-year, Public", Truett-McConnell College,"100 Alumni Dr, Cleveland, Georgia 30528",www.truett.edu,"4-year, primarily associate's, Private not-for-profit",461 Truman Medical Center School for Nurse Anesthesia,"2301 Holmes St, Kansas City, Missouri 64108",www.trumed.org,"4-year, Public",40 Truman State University,"100 E Normal, Kirksville, Missouri 63501-4221",www.truman.edu,"4-year, Public",5880 Tufts University,"Medford, Massachusetts 02155-5555",www.tufts.edu,"4-year, Private not-for-profit",10030 TUI University,"5665 Plaza Dr, 3rd fl, Cypress, California 90630",www.tuiu.edu,"4-year, Private for-profit",8004 Tulane University of Louisiana,"6823 Saint Charles Ave, New Orleans, Louisiana 70118-5698",www.tulane.edu,"4-year, Private not-for-profit",10737 Turtle Mountain Community College,"BIA #7 North, Belcourt, North Dakota 58316",www.tm.edu,"4-year, primarily associate's, Private not-for-profit",951 Tusculum College,"60 Shiloh Road, Greeneville, Tennessee 37743",www.tusculum.edu,"4-year, Private not-for-profit",2241 Tuskegee University,"Kresge Center, 3rd Floor, Tuskegee, Alabama 36088-1920",www.tuskegee.edu,"4-year, Private not-for-profit",2994 Unification Theological Seminary,"30 Seminary Drive, Barrytown, New York 12507",WWW.UTS.EDU,"4-year, Private not-for-profit",173 Union College,"3800 S 48th, Lincoln, Nebraska 68506",www.ucollege.edu,"4-year, Private not-for-profit",914 Union College,"310 College St, Barbourville, Kentucky 40906-1499",www.unionky.edu,"4-year, Private not-for-profit",1421 Union College,"807 Union St, Schenectady, New York 12308-2311",www.union.edu/,"4-year, Private not-for-profit",2240 Union College-Bennett Center,"300 Bennett Cir, London, Kentucky 40741-2839",www.unionky.edu/Acad/Bennett/,"4-year, Private not-for-profit",68 Union Graduate College,"807 Union St, Schenectady, New York 12308",www.uniongraduatecollege.edu,"4-year, Private not-for-profit",401 Union Institute & University,"62 Ridge Street, Suite 2, Montpelier, Vermont 05602-1746",www.myunion.edu,"4-year, Private not-for-profit", Union Institute & University,"157 Old Guilford Road, Brattleboro, Vermont 05301-3669",www.myunion.edu,"4-year, Private not-for-profit", Union Institute & University,"440 E McMillan St, Cincinnati, Ohio 45206-1925",www.myunion.edu,"4-year, Private not-for-profit",1708 Union Institute & University,"12777 W. Jefferson Blvd, Los Angeles, California 90066",www.myunion.edu,"4-year, Private not-for-profit", Union Institute & University,"16853 NE Second Ave, North Miami Beach, Florida 33162-1746",www.myunion.edu,"4-year, Private not-for-profit", Union Institute & University,"2710 Gateway Oaks Drive, Ste 310 South, Sacramento, California 95833-1746",www.myunion.edu,"4-year, Private not-for-profit", Union Theological Seminary,"3041 Broadway, New York, New York 10027-5792",www.utsnyc.edu,"4-year, Private not-for-profit",245 Union Theological Seminary & Presbyterian School of Christian Education,"3401 Brook Rd, Richmond, Virginia 23227",www.union-psce.edu,"4-year, Private not-for-profit",344 Union Theological Seminary & Presbyterian School-Charlotte,"1900 Selwyn Ave, Charlotte, North Carolina 28274",www.union-psce.edu,"4-year, Private not-for-profit", Union University,"1050 Union University Dr, Jackson, Tennessee 38305-3697",www.uu.edu,"4-year, Private not-for-profit",3655 United States Air Force Academy,"USAFA, Colorado 80840-5002",www.usafa.edu,"4-year, Public",4537 United States Coast Guard Academy,"15 Mohegan Avenue, New London, Connecticut 06320-4195",www.cga.edu,"4-year, Public",975 United States Merchant Marine Academy,"Steamboat Rd, Kings Point, New York 11024-1699",WWW.USMMA.EDU,"4-year, Public",986 United States Military Academy,"646 Swift Rd (ATTN: MASG), West Point, New York 10996-1905",www.usma.edu,"4-year, Public",4553 United States Naval Academy,"121 Blake Road, Annapolis, Maryland 21402-5000",www.usna.edu,"4-year, Public",4488 United States Sports Academy,"One Academy Dr, Daphne, Alabama 36526-7055",www.ussa.edu,"4-year, Private not-for-profit",546 United Talmudical Seminary,"Brooklyn, New York 11211",,"4-year, Private not-for-profit",1626 United Theological Seminary,"4501 Denlinger Rd., Dayton, Ohio 45426-2308",www.united.edu,"4-year, Private not-for-profit",228 United Theological Seminary of the Twin Cities,"3000 Fifth St NW, New Brighton, Minnesota 55112-2598",www.unitedseminary.edu,"4-year, Private not-for-profit",181 Unity College,"90 Quaker Hill Road, Unity, Maine 04988",www.unity.edu,"4-year, Private not-for-profit",544 Universidad Adventista de las Antillas,"Carr 106 Km 2.2 Int, Mayaguez, Puerto Rico 00680-0000",uaa.edu/,"4-year, Private not-for-profit",950 Universidad Central Del Caribe,"Ramon Ruiz Arnau University Hospital Laurel Ave, Bayamon, Puerto Rico 00960-6032",www.uccaribe.edu,"4-year, primarily associate's, Private not-for-profit",455 Universidad Del Este,"Carr. # 190 Esq. Calle 220 Bo. Sabana Abajo, Carolina, Puerto Rico 00985-0985",www.suagm.edu,"4-year, Private not-for-profit",12291 Universidad Del Turabo,"Carr. # 189 Km 3.1, Gurabo, Puerto Rico 00778-3030",www.suagm.edu,"4-year, Private not-for-profit",16296 Universidad Metropolitana,"Ave. Ana G. Mendez Km 0.3, Cupey, Puerto Rico 00928-1345",www.suagm.edu,"4-year, Private not-for-profit",12389 Universidad Politecnica de Puerto Rico,"377 Ponce de Leon Ave, Hato Rey, Puerto Rico 00919",www.pupr.edu,"4-year, Private not-for-profit",5800 University at Buffalo,"3435 Main Street, Buffalo, New York 14214",www.buffalo.edu,"4-year, Public",28192 University of Advancing Technology,"2625 W Baseline Rd, Tempe, Arizona 85283",www.uat.edu,"4-year, Private for-profit",1217 University of Akron Main Campus,"302 Buchtel Common, Akron, Ohio 44325-4702",www.uakron.edu,"4-year, Public",24119 University of Alabama at Birmingham,"Administration Bldg Suite 1070, Birmingham, Alabama 35294-0110",www.uab.edu,"4-year, Public",16149 University of Alabama in Huntsville,"301 Sparkman Dr, Huntsville, Alabama 35899",www.uah.edu,"4-year, Public",7431 University of Alaska Anchorage,"3211 Providence Drive, Anchorage, Alaska 99508",www.uaa.alaska.edu,"4-year, Public",16649 University of Alaska Fairbanks,"Signers' Hall, Fairbanks, Alaska 99775-7480",www.uaf.edu,"4-year, Public",8575 University of Alaska Southeast,"11120 Glacier Highway, Juneau, Alaska 99801-8697",www.uas.alaska.edu,"4-year, Public",2954 University of Arizona,"1401 E University, Tucson, Arizona 85721-0066",www.arizona.edu,"4-year, Public",38057 University of Arkansas at Little Rock,"2801 S University Ave, Little Rock, Arkansas 72204",www.ualr.edu,"4-year, Public",11965 University of Arkansas at Monticello,"Highway 425 South, Monticello, Arkansas 71656",www.uamont.edu,"4-year, primarily associate's, Public",3302 University of Arkansas at Pine Bluff,"1200 N University Mail Slot 4789, Pine Bluff, Arkansas 71601",www.uapb.edu,"4-year, Public",3525 University of Arkansas for Medical Sciences,"4301 W Markham, Little Rock, Arkansas 72205",www.uams.edu,"4-year, Public",2652 University of Arkansas Main Campus,"Administration Bldg 425, Fayetteville, Arkansas 72701",www.uark.edu,"4-year, Public",19194 University of Arkansas-Fort Smith,"5210 Grand Ave, Fort Smith, Arkansas 72913-3649",www.uafortsmith.edu,"4-year, primarily associate's, Public",6784 University of Baltimore,"Charles at Mount Royal, Baltimore, Maryland 21201-208",www.ubalt.edu,"4-year, Public",5843 University of Bridgeport,"126 Park Avenue, Bridgeport, Connecticut 06604-5620",www.bridgeport.edu,"4-year, Private not-for-profit",5323 University of California Hastings College of Law,"200 McAllister St, San Francisco, California 94102-4978",www.uchastings.edu,"4-year, Public",1306 University of California-Berkeley,"Berkeley, California 94720",www.berkeley.edu,"4-year, Public",35396 University of California-Davis,"One Shields Avenue, Davis, California 95616-8678",www.ucdavis.edu,"4-year, Public",30568 University of California-Irvine,"Irvine, California 92697",www.uci.edu/,"4-year, Public",26984 University of California-Los Angeles,"405 Hilgard Ave, Los Angeles, California 90095-1405",www.ucla.edu/,"4-year, Public",38220 University of California-Merced,"5200 North Lake Road, Merced, California 95343-5603",www.ucmerced.edu,"4-year, Public",2718 University of California-Riverside,"900 University Ave, Riverside, California 92521",WWW.UCR.EDU,"4-year, Public",18079 University of California-San Diego,"9500 Gilman Dr, La Jolla, California 92093",www.ucsd.edu,"4-year, Public",27520 University of California-San Francisco,"500 Parnassus Ave, San Francisco, California 94143-0244",www.ucsf.edu,"4-year, Public",2998 University of California-Santa Barbara,"Santa Barbara, California 93106",www.ucsb.edu,"4-year, Public",21868 University of California-Santa Cruz,"1156 High St, Santa Cruz, California 95064",www.ucsc.edu/,"4-year, Public",16615 University of Central Arkansas,"201 Donaghey Ave, Conway, Arkansas 72035-0001",www.uca.edu,"4-year, Public",12974 University of Central Florida,"4000 Central Florida Blvd, Orlando, Florida 32816",www.ucf.edu/,"4-year, Public",50121 University of Central Missouri,"Warrensburg, Missouri 64093",www.ucmo.edu,"4-year, Public",11063 University of Central Oklahoma,"100 N University Dr, Edmond, Oklahoma 73034",www.ucok.edu,"4-year, Public",15724 University of Charleston,"2300 MacCorkle Avenue, SE, Charleston, West Virginia 25304",www.ucwv.edu,"4-year, Private not-for-profit",1435 University of Chicago,"5801 S Ellis Ave, Chicago, Illinois 60637",WWW.UCHICAGO.EDU,"4-year, Private not-for-profit",14788 University of Cincinnati-Clermont College,"4200 Clermont College Dr, Batavia, Ohio 45103",www.clc.uc.edu,"4-year, Public",3241 University of Cincinnati-Main Campus,"2624 Clifton Avenue, Cincinnati, Ohio 45221-0063",www.uc.edu,"4-year, Public",29617 University of Cincinnati-Raymond Walters College,"9555 Plainfield Rd, Blue Ash, Ohio 45236-1096",www.rwc.uc.edu,"4-year, Public",4214 University of Colorado at Boulder,"Regent Drive at Broadway, Boulder, Colorado 80309-0017",www.colorado.edu,"4-year, Public",32469 University of Colorado at Colorado Springs,"1420 Austin Bluffs Parkway, Colorado Springs, Colorado 80918",www.uccs.edu,"4-year, Public",9373 University of Colorado Denver,"Denver, Colorado 80217-3364",www.ucdenver.edu/,"4-year, Public",21903 University of Connecticut,"Storrs, Connecticut 06269",www.uconn.edu,"4-year, Public",24273 University of Connecticut-Avery Point,"1084 Shennecossett Rd, Groton, Connecticut 06340-6097",www.uconn.edu,"4-year, Public",748 University of Connecticut-Stamford,"One University Place, Stamford, Connecticut 06901-2315",www.uconn.edu,"4-year, Public",1314 University of Connecticut-Tri-Campus,"55 West Main Street, Suite 500, Waterbury, Connecticut 06702",www.uconn.edu,"4-year, Public",2545 University of Dallas,"1845 E Northgate Drive, Irving, Texas 75062-4736",www.udallas.edu,"4-year, Private not-for-profit",2977 University of Dayton,"300 College Pk, Dayton, Ohio 45469",www.udayton.edu,"4-year, Private not-for-profit",10920 University of Delaware,"Newark, Delaware 19716",www.udel.edu/,"4-year, Public",20500 University of Denver,"2199 S. University Blvd, Denver, Colorado 80208",www.du.edu,"4-year, Private not-for-profit",11328 University of Detroit Mercy,"4001 W McNichols Rd, Detroit, Michigan 48221-3038",www.udmercy.edu,"4-year, Private not-for-profit",5725 University of Dubuque,"2000 University Ave, Dubuque, Iowa 52001",www.dbq.edu,"4-year, Private not-for-profit",1583 University of East-West Medicine,"970 W El Camino Real, Sunnyvale, California 94087",www.uewm.edu,"4-year, Private for-profit",200 University of Evansville,"1800 Lincoln Avenue, Evansville, Indiana 47722",www.evansville.edu/,"4-year, Private not-for-profit",2742 University of Florida,"355 Tigert Hall, Gainesville, Florida 32611-3115",www.ufl.edu/,"4-year, Public",51474 University of Georgia,"Athens, Georgia 30602",www.uga.edu,"4-year, Public",34180 University of Great Falls,"1301 Twentieth St S, Great Falls, Montana 59405-4996",www.ugf.edu,"4-year, Private not-for-profit",720 University of Guam,"303 J.U. Torres Drive, Mangilao, Guam 96923",www.uog.edu,"4-year, Public",3387 University of Hartford,"200 Bloomfield Ave, West Hartford, Connecticut 06117-1599",www.hartford.edu,"4-year, Private not-for-profit",7366 University of Hawaii at Hilo,"200 W Kawili St, Hilo, Hawaii 96720-4091",www.uhh.hawaii.edu/,"4-year, Public",3773 University of Hawaii at Manoa,"2500 Campus Road, Hawaii Hall, Honolulu, Hawaii 96822-2301",www.manoa.hawaii.edu,"4-year, Public",20169 University of Hawaii-West Oahu,"96-129 Ala Ike, Pearl City, Hawaii 96782-3699",www.uhwo.hawaii.edu,"4-year, Public",1140 University of Houston,"212 E. Cullen Building, Houston, Texas 77204-2018",www.uh.edu,"4-year, Public",36104 University of Houston-Clear Lake,"2700 Bay Area Blvd, Houston, Texas 77058-1098",www.uhcl.edu,"4-year, Public",7658 University of Houston-Downtown,"1 Main Street, Houston, Texas 77002-1014",www.uhd.edu,"4-year, Public",12283 University of Houston-Victoria,"3007 N. Ben Wilson, Victoria, Texas 77901",www.uhv.edu,"4-year, Public",3174 University of Idaho,"875 Perimeter Drive, Moscow, Idaho 83844-2282",www.uidaho.edu,"4-year, Public",11791 University of Illinois at Chicago,"601 S Morgan, Chicago, Illinois 60607",www.uic.edu/index.html/,"4-year, Public",25835 University of Illinois at Springfield,"One University Plaza, Springfield, Illinois 62703-5407",www.uis.edu,"4-year, Public",4711 University of Illinois at Urbana-Champaign,"601 E John Street, Champaign, Illinois 61820-5711",www.illinois.edu/,"4-year, Public",43246 University of Indianapolis,"1400 E Hanna Ave, Indianapolis, Indiana 46227-3697",uindy.edu,"4-year, Private not-for-profit",4829 University of Iowa,"101 Jessup Hall, Iowa City, Iowa 52242-1316",www.uiowa.edu,"4-year, Public",29152 University of Kansas,"Lawrence, Kansas 66045",www.ku.edu,"4-year, Public",29365 University of Kentucky,"Lexington, Kentucky 40506-0032",www.uky.edu,"4-year, Public",26054 University of La Verne,"1950 Third St, La Verne, California 91750-4401",www.ulv.edu,"4-year, Private not-for-profit",7511 University of Louisiana at Lafayette,"104 University Circle, Lafayette, Louisiana 70503",www.louisiana.edu,"4-year, Public",16320 University of Louisiana Monroe,"700 University Avenue, Monroe, Louisiana 71209-0000",www.ulm.edu,"4-year, Public",8754 University of Louisville,"2301 S 3rd St, Louisville, Kentucky 40292-0001",www.louisville.edu,"4-year, Public",20834 University of Maine,"Orono, Maine 04469",www.umaine.edu/,"4-year, Public",11818 University of Maine at Augusta,"46 University Dr, Augusta, Maine 04330-9410",www.uma.edu/,"4-year, Public",4977 University of Maine at Farmington,"224 Main St, Farmington, Maine 04938-9978",www.umf.maine.edu,"4-year, Public",2174 University of Maine at Fort Kent,"23 University Drive, Fort Kent, Maine 04743-1292",www.umfk.maine.edu,"4-year, Public",1102 University of Maine at Machias,"9 O'Brien Ave, Machias, Maine 04654-1397",www.umm.maine.edu,"4-year, Public",1023 University of Maine at Presque Isle,"181 Main St, Presque Isle, Maine 04769-2888",www.umpi.maine.edu,"4-year, Public",1455 University of Mary,"7500 University Dr, Bismarck, North Dakota 58504",www.umary.edu,"4-year, Private not-for-profit",2862 University of Mary Hardin-Baylor,"900 College St, Belton, Texas 76513-2599",www.umhb.edu,"4-year, Private not-for-profit",2648 University of Mary Washington,"1301 College Ave, Fredericksburg, Virginia 22401-5300",www.umw.edu,"4-year, Public",5084 University of Maryland Eastern Shore,"J.T. Williams Hall, Princess Anne, Maryland 21853-1299",www.umes.edu,"4-year, Public",4290 University of Maryland-Baltimore,"520 West Lombard Street, Baltimore, Maryland 21201-1627",www.umaryland.edu,"4-year, Public",6156 University of Maryland-Baltimore County,"1000 Hilltop Circle, Baltimore, Maryland 21250",www.umbc.edu,"4-year, Public",12268 University of Maryland-College Park,"College Park, Maryland 20742",www.umd.edu,"4-year, Public",37000 University of Maryland-University College,"3501 University Blvd East, Adelphi, Maryland 20783-8010",www.umuc.edu,"4-year, Public",34172 University of Massachusetts Amherst,"Amherst, Massachusetts 01003",www.umass.edu,"4-year, Public",26359 University of Massachusetts Medical School Worcester,"55 Lake Ave North, Worcester, Massachusetts 01655",www.umassmed.edu,"4-year, Public",1025 University of Massachusetts-Boston,"100 Morrissey Blvd, Boston, Massachusetts 02125-3393",www.umb.edu,"4-year, Public",14117 University of Massachusetts-Dartmouth,"285 Old Westport Rd, North Dartmouth, Massachusetts 02747-2300",www.umassd.edu,"4-year, Public",9155 University of Massachusetts-Lowell,"1 University Ave, Lowell, Massachusetts 01854-5104",WWW.UML.EDU,"4-year, Public",12471 University of Medicine and Dentistry of New Jersey,"65 Bergen Street, Room 1441, Newark, New Jersey 07101-1709",www.umdnj.edu,"4-year, Public",5906 University of Memphis,"Memphis, Tennessee 38152",www.memphis.edu,"4-year, Public",20220 University of Miami,"University of Miami, Coral Gables, Florida 33124",www.miami.edu/,"4-year, Private not-for-profit",15323 University of Michigan-Ann Arbor,"Ann Arbor, Michigan 48109",www.umich.edu,"4-year, Public",41028 University of Michigan-Dearborn,"4901 Evergreen Rd, Dearborn, Michigan 48128-1491",www.umd.umich.edu/,"4-year, Public",8311 University of Michigan-Flint,"303 E Kearsley, Flint, Michigan 48502-1950",www.umflint.edu,"4-year, Public",7260 University of Minnesota-Crookston,"2900 University Ave, Crookston, Minnesota 56716-5001",www.umcrookston.edu/,"4-year, Public",2199 University of Minnesota-Duluth,"515 Darland Administration Bldg, Duluth, Minnesota 55812",www.d.umn.edu/,"4-year, Public",11366 University of Minnesota-Morris,"309 Behmler Hall, Morris, Minnesota 56267",www.morris.umn.edu/,"4-year, Public",1607 University of Minnesota-Twin Cities,"100 Church Street SE, Minneapolis, Minnesota 55455-0213",www1.umn.edu/twincities/index.php,"4-year, Public",51140 University of Mississippi Main Campus,"Oxford, Mississippi, University, Mississippi 38677-1848",www.olemiss.edu,"4-year, Public",15289 University of Mississippi Medical Center,"2500 N State St, Jackson, Mississippi 39216-4505",www.umc.edu,"4-year, Public",2266 University of Missouri-Columbia,"105 Jesse Hall, Columbia, Missouri 65211",www.missouri.edu/,"4-year, Public",30130 University of Missouri-Kansas City,"5100 Rockhill Rd, Kansas City, Missouri 64110",www.umkc.edu/,"4-year, Public",14481 University of Missouri-St Louis,"One University Boulevard, Saint Louis, Missouri 63121-4400",www.umsl.edu/,"4-year, Public",15741 University of Mobile,"5735 College Parkway Drive, Mobile, Alabama 36613-2842",www.umobile.edu,"4-year, Private not-for-profit",1600 University of Montevallo,"Station 6001, Montevallo, Alabama 35115-6000",www.montevallo.edu,"4-year, Public",3023 University of Nebraska at Kearney,"905 W 25th St, Kearney, Nebraska 68849-1212",www.unk.edu,"4-year, Public",6543 University of Nebraska at Omaha,"6001 Dodge St, Omaha, Nebraska 68182-0225",www.unomaha.edu,"4-year, Public",14213 University of Nebraska Medical Center,"987815 Nebraska Medical Ctr, Omaha, Nebraska 68198-7815",www.unmc.edu,"4-year, Public",3194 University of Nebraska-Lincoln,"14th and R St, Lincoln, Nebraska 68588",www.unl.edu/,"4-year, Public",23573 University of Nevada-Las Vegas,"4505 S Maryland Pky, Las Vegas, Nevada 89154",www.unlv.edu,"4-year, Public",28600 University of Nevada-Reno,"Reno, Nevada 89557",www.unr.edu,"4-year, Public",16867 University of New England,"11 Hills Beach Rd, Biddeford, Maine 04005",WWW.UNE.EDU,"4-year, Private not-for-profit",4267 University of New Hampshire at Manchester,"400 Commercial Street, Manchester, New Hampshire 03101-1113",www.unhm.unh.edu,"4-year, Public",1058 University of New Hampshire-Main Campus,"105 Main St., Thompson Hall, Durham, New Hampshire 03824-3547",www.unh.edu,"4-year, Public",14898 University of New Haven,"300 Boston Post Road, West Haven, Connecticut 06516",www.newhaven.edu,"4-year, Private not-for-profit",5233 University of New Mexico-Main Campus,"Albuquerque, New Mexico 87131-0001",www.unm.edu,"4-year, Public",25754 University of New Orleans,"2000 Lakeshore Drive, New Orleans, Louisiana 70148",www.uno.edu,"4-year, Public",11428 University of North Alabama,"One Harrison Plaza, Florence, Alabama 35632-0001",www.una.edu,"4-year, Public",7203 University of North Carolina at Asheville,"One University Hts, Asheville, North Carolina 28804-8510",www.unca.edu,"4-year, Public",3629 University of North Carolina at Chapel Hill,"103 South Bldg Cb 9100, Chapel Hill, North Carolina 27599",www.unc.edu,"4-year, Public",28567 University of North Carolina at Charlotte,"9201 University City Blvd, Charlotte, North Carolina 28223-0001",www.uncc.edu,"4-year, Public",23300 University of North Carolina at Greensboro,"1000 Spring Garden St, Greensboro, North Carolina 27402-6170",www.uncg.edu,"4-year, Public",19976 University of North Carolina at Pembroke,"One University Drive, Pembroke, North Carolina 28372-1510",www.uncp.edu,"4-year, Public",6303 University of North Carolina School of the Arts,"1533 South Main St., Winston-Salem, North Carolina 27117-2189",www.ncarts.edu,"4-year, Public",879 University of North Carolina-Wilmington,"601 South College Road, Wilmington, North Carolina 28403-5963",www.uncw.edu,"4-year, Public",12643 University of North Dakota,"University Station, Grand Forks, North Dakota 58202-8193",www.und.edu,"4-year, Public",12748 University of North Florida,"1 UNF Drive, Jacksonville, Florida 32224-2645",www.unf.edu,"4-year, Public",15280 University of North Texas,"Chestnut Ave., Denton, Texas 76203-1277",www.unt.edu,"4-year, Public",34830 University of North Texas Health Science Center,"3500 Camp Bowie Blvd, Forth Worth, Texas 76107-2699",www.hsc.unt.edu,"4-year, Public",1225 University of Northern Colorado,"Carter Hall - Rm 4000, Greeley, Colorado 80639",www.unco.edu,"4-year, Public",12498 University of Northern Iowa,"1222 W 27th St, Cedar Falls, Iowa 50614",www.uni.edu,"4-year, Public",12998 University of Northwestern Ohio,"1441 N Cable Rd, Lima, Ohio 45805",www.unoh.edu,"4-year, primarily associate's, Private not-for-profit",3492 University of Notre Dame,"Notre Dame, Indiana 46556",www.nd.edu,"4-year, Private not-for-profit",11731 University of Oklahoma Health Sciences Center,"1100 N Lindsay, Oklahoma City, Oklahoma 73104-5499",www.ouhsc.edu,"4-year, Public",3926 University of Oklahoma Norman Campus,"660 Parrington Oval, Norman, Oklahoma 73019-3072",www.ou.edu,"4-year, Public",26140 University of Oregon,"110 Johnson Hall, Eugene, Oregon 97403",www.uoregon.edu,"4-year, Public",21452 University of Pennsylvania,"1 College Hall 34th and Spruce Sts, Philadelphia, Pennsylvania 19104-6303",www.upenn.edu,"4-year, Private not-for-profit",24107 University of Phoenix-Atlanta Campus,"8200 Roberts Drive, Suite 300, Dunwoody, Georgia 30350-4153",www.phoenix.edu,"4-year, Private for-profit",1658 University of Phoenix-Augusta Campus,"3150 Perimeter Parkway, Augusta, Georgia 30909-4583",www.phoenix.edu,"4-year, Private for-profit",905 University of Phoenix-Austin Campus,"10801-2 N. MoPac Suite 300, Austin, Texas 78759-5459",www.phoenix.edu,"4-year, Private for-profit",464 University of Phoenix-Bay Area Campus,"7901 Stoneridge Drive, Suite 130, Pleasanton, California 94588-3677",www.phoenix.edu,"4-year, Private for-profit",2344 University of Phoenix-Birmingham Campus,"100 Corporate Drive Ste 150, Birmingham, Alabama 35242-2928",www.phoenix.edu,"4-year, Private for-profit",178 University of Phoenix-Boston Campus,"100 Grossman Dr., Suite 201, Braintree, Massachusetts 02184-4949",www.phoenix.edu,"4-year, Private for-profit",391 University of Phoenix-Central Florida Campus,"2290 Lucien Way, Suite 400, Maitland, Florida 32751-7057",www.phoenix.edu,"4-year, Private for-profit",1637 University of Phoenix-Central Massachusetts Campus,"One Research Drive, Westborough, Massachusetts 01581-3906",www.phoenix.edu,"4-year, Private for-profit",151 University of Phoenix-Central Valley Campus,"45 Riverpark Place West Suite 300, Fresno, California 93720-1562",www.phoenix.edu,"4-year, Private for-profit",2328 University of Phoenix-Charlotte Campus,"3800 Arco Corporate Drive, Suite 100, Charlotte, North Carolina 28273-3409",www.phoenix.edu/campus-locations/NC/Charlotte/charlotte.aspx,"4-year, Private for-profit",1204 University of Phoenix-Chattanooga Campus,"1208 Pointe Centre Drive, Chattanooga, Tennessee 37421-3707",www.phoenix.edu,"4-year, Private for-profit",184 University of Phoenix-Cheyenne Campus,"6900 Yellowtail Road, Cheyenne, Wyoming 82009-6102",www.phoenix.edu,"4-year, Private for-profit",12 University of Phoenix-Chicago Campus,"1500 McConnor Pkwy., Suite 700, Schaumburg, Illinois 60173-4399",www.phoenix.edu,"4-year, Private for-profit",1223 University of Phoenix-Cincinnati Campus,"9050 Centre Point, Suite 250, West Chester, Ohio 45069-4875",www.phoenix.edu,"4-year, Private for-profit",155 University of Phoenix-Cleveland Campus,"5005 Rockside Road, Suite 130, Independence, Ohio 44131-2194",www.phoenix.edu,"4-year, Private for-profit",538 University of Phoenix-Columbia Campus,"1001 Pinnacle Point Drive, Columbia, South Carolina 29223-5733",www.phoenix.edu,"4-year, Private for-profit",465 University of Phoenix-Columbus Georgia Campus,"4747 Hamilton Road, Suite E, Columbus, Georgia 31904-6321",www.phoenix.edu,"4-year, Private for-profit",776 University of Phoenix-Columbus Ohio Campus,"8415 Pulsar Place, Columbus, Ohio 43240-4032",www.phoenix.edu,"4-year, Private for-profit",224 University of Phoenix-Dallas Fort Worth Campus,"12400 Coit Road, Churchill Towers, Suite 200, Dallas, Texas 75251-2009",www.phoenix.edu,"4-year, Private for-profit",1482 University of Phoenix-Denver Campus,"10004 Park Meadows Drive, Lone Tree, Colorado 80124-5453",www.phoenix.edu,"4-year, Private for-profit",2373 University of Phoenix-Des Moines Campus,"6600 Westown Parkway, West Des Moines, Iowa 50266-7724",www.phoenix.edu,"4-year, Private for-profit",24 University of Phoenix-Eastern Washington Campus,"8775 E. Mission Avenue, Spokane Valley, Washington 99212-2531",www.phoenix.edu,"4-year, Private for-profit",49 University of Phoenix-Fairfield County Campus,"535 Connecticut Ave, Norwalk, Connecticut 06854-1700",www.phoenix.edu,"4-year, Private for-profit",100 University of Phoenix-Harrisburg Campus,"4050 Crums Mill Rd, Harrisburg, Pennsylvania 17112-2894",www.phoenix.edu,"4-year, Private for-profit",38 University of Phoenix-Hawaii Campus,"827 Fort Street, Honolulu, Hawaii 96813-4317",www.phoenix.edu,"4-year, Private for-profit",993 University of Phoenix-Houston Westside Campus,"11451 Katy Freeway, Suite 100, Houston, Texas 77079-2004",www.phoenix.edu,"4-year, Private for-profit",2949 University of Phoenix-Idaho Campus,"3080 East Gentry Way, Suite 150, Meridian, Idaho 83642-3014",www.phoenix.edu,"4-year, Private for-profit",564 University of Phoenix-Indianapolis Campus,"7999 Knue Road Dr. , Ste. 100 & 500, Indianapolis, Indiana 46250-1932",www.phoenix.edu,"4-year, Private for-profit",358 University of Phoenix-Jersey City Campus,"100 Town Square Place Suite 305, Jersey City, New Jersey 07310-2778",www.phoenix.edu,"4-year, Private for-profit",343 University of Phoenix-Kansas City Campus,"901 E. 104th Street Suite 200, Kansas City, Missouri 64131-4517",www.phoenix.edu,"4-year, Private for-profit",807 University of Phoenix-Las Vegas Campus,"7455 W. Washington Street, Las Vegas, Nevada 89128-4337",www.phoenix.edu,"4-year, Private for-profit",3288 University of Phoenix-Little Rock Campus,"10800 Financial Centre Parkway, Little Rock, Arkansas 72211-3500",www.phoenix.edu/campus-locations/AR/Little-Rock/little-rock.aspx,"4-year, Private for-profit",814 University of Phoenix-Louisiana Campus,"One Galleria Blvd. Suite 725, Metairie, Louisiana 70001-2082",www.phoenix.edu/,"4-year, Private for-profit",2006 University of Phoenix-Louisville Campus,"10400 Linn Station Road, Suite 120, Louisville, Kentucky 40223-3839",www.phoenix.edu/,"4-year, Private for-profit",122 University of Phoenix-Madison Campus,"2310 Crossroads Dr. Ste 3000, Madison, Wisconsin 53718-2416",www.phoenix.edu,"4-year, Private for-profit",82 University of Phoenix-Maryland Campus,"8830 Stanford Blvd., Suite 100, Columbia, Maryland 21045-5424",www.phoenix.edu,"4-year, Private for-profit",812 University of Phoenix-Memphis Campus,"65 Germantown Court, Suite 100, Cordova, Tennessee 38018-7290",www.phoenix.edu,"4-year, Private for-profit",974 University of Phoenix-Metro Detroit Campus,"5480 Corporate Drive Suite 240, Troy, Michigan 48098-2623",www.phoenix.edu,"4-year, Private for-profit",2669 University of Phoenix-Milwaukee Campus,"20075 Watertower Blvd, Brookfield, Wisconsin 53045-6608",www.phoenix.edu,"4-year, Private for-profit",476 University of Phoenix-Minneapolis/St Paul Campus,"435 Ford Rd., Suite 1000, Saint Louis Park, Minnesota 55426-1063",www.phoenix.edu,"4-year, Private for-profit",306 University of Phoenix-Nashville Campus,"616 Marriott Drive, Suite 150, Nashville, Tennessee 37214-5048",www.phoenix.edu,"4-year, Private for-profit",975 University of Phoenix-New Mexico Campus,"5700 Pasadena NE, Albuquerque, New Mexico 87113-1570",www.phoenix.edu,"4-year, Private for-profit",4357 University of Phoenix-North Florida Campus,"4500 Salisbury Road North, Ste., 200, Jacksonville, Florida 32216-0959",www.phoenix.edu,"4-year, Private for-profit",1356 University of Phoenix-Northern Nevada Campus,"5370 Kietzke Lane, Suite 102, Reno, Nevada 89511-2040",www.phoenix.edu,"4-year, Private for-profit",640 University of Phoenix-Northern Virginia Campus,"11730 Plaza America Drive, Suite 200, Reston, Virginia 20190-4742",www.phoenix.edu,"4-year, Private for-profit",441 University of Phoenix-Northwest Arkansas Campus,"903 N. 47th Street, Barrington Centre 2, Rogers, Arkansas 72756-9615",www.phoenix.edu,"4-year, Private for-profit",447 University of Phoenix-Northwest Indiana Campus,"8401 Ohio Street, Merrillville, Indiana 46410-5572",www.phoenix.edu,"4-year, Private for-profit", University of Phoenix-Oklahoma City Campus,"6501 N. Broadway, Suite 100, Oklahoma City, Oklahoma 73116-8244",www.phoenix.edu,"4-year, Private for-profit",846 University of Phoenix-Omaha Campus,"13321 California Street Suite 200, Omaha, Nebraska 68154-5240",www.phoenix.edu,"4-year, Private for-profit",60 University of Phoenix-Online Campus,"3157 E. Elwood Street, Phoenix, Arizona 85034-7209",www.uopxonline.com,"4-year, Private for-profit",301323 University of Phoenix-Oregon Campus,"13221 SW 68th Parkway, Suite 500, Tigard, Oregon 97223-8368",www.phoenix.edu,"4-year, Private for-profit",1329 University of Phoenix-Philadelphia Campus,"170 South Warner Road, Ste. 200, Wayne, Pennsylvania 19087-2121",www.phoenix.edu,"4-year, Private for-profit",911 University of Phoenix-Phoenix-Hohokam Campus,"4635 East Elwood Street, Phoenix, Arizona 85040-1958",www.phoenix.edu,"4-year, Private for-profit",5868 University of Phoenix-Pittsburgh Campus,"Penn Center West, Bldg. 6, Suite 100, Pittsburgh, Pennsylvania 15276-0109",www.phoenix.edu,"4-year, Private for-profit",81 University of Phoenix-Puerto Rico Campus,"Santander Tower at San Patricio B-7 Tabonuco St., Ste. 700, Guaynabo, Puerto Rico 00968-3003",www.phoenix.edu,"4-year, Private for-profit",2907 University of Phoenix-Raleigh Campus,"5511 Capital Center Drive, Ste. 390, Raleigh, North Carolina 27606-4166",www.phoenix.edu,"4-year, Private for-profit",523 University of Phoenix-Richmond Campus,"6600 W. Broad Street, Richmond, Virginia 23230-1709",www.phoenix.edu,"4-year, Private for-profit",117 University of Phoenix-Sacramento Valley Campus,"2890 Gateway Oaks Drive, Suite 200, Sacramento, California 95833-3632",www.phoenix.edu,"4-year, Private for-profit",3933 University of Phoenix-San Antonio Campus,"8200 IH-10 West Suite 910, San Antonio, Texas 78230-3876",www.phoenix.edu,"4-year, Private for-profit",799 University of Phoenix-San Diego Campus,"3890 Murphy Canyon Road Suite 100, San Diego, California 92123-4448",www.phoenix.edu,"4-year, Private for-profit",3367 University of Phoenix-Savannah Campus,"8001 Chatham Center Drive Suite 200, Savannah, Georgia 31405-7400",www.phoenix.edu,"4-year, Private for-profit",585 University of Phoenix-South Florida Campus,"600 N. Pine Island Road Suite 500, Plantation, Florida 33324-1393",www.phoenix.edu,"4-year, Private for-profit",2560 University of Phoenix-Southern Arizona Campus,"300 S. Craycroft Road, Tucson, Arizona 85711-4574",www.phoenix.edu,"4-year, Private for-profit",2325 University of Phoenix-Southern California Campus,"3090 Bristol Street, Suite 500, Costa Mesa, California 92626-3079",www.phoenix.edu,"4-year, Private for-profit",12339 University of Phoenix-Southern Colorado Campus,"5725 Mark Dabling Blvd., Colorado Springs, Colorado 80919-2221",www.phoenix.edu,"4-year, Private for-profit",594 University of Phoenix-Springfield Campus,"1343 E. Kingsley Street, Springfield, Missouri 65804-7216",www.phoenix.edu,"4-year, Private for-profit",125 University of Phoenix-St Louis Campus,"13801 Riverport Drive, Ste. 102, Saint Louis, Missouri 63043-4828",www.phoenix.edu,"4-year, Private for-profit",460 University of Phoenix-Tulsa Campus,"10810 E. 45th Street, Suite 102, Tulsa, Oklahoma 74146-3801",www.phoenix.edu,"4-year, Private for-profit",826 University of Phoenix-Utah Campus,"5373 S. Green Street, Salt Lake City, Utah 84123-4617",www.phoenix.edu,"4-year, Private for-profit",3396 University of Phoenix-Washington DC Campus,"25 Massachusetts Avenue NW, Washington, District of Columbia 20001-1431",www.phoenix.edu,"4-year, Private for-profit",27 University of Phoenix-West Florida Campus,"12802 Tampa Oaks Boulevard, Suite 200, Temple Terrace, Florida 33637-1915",www.phoenix.edu,"4-year, Private for-profit",983 University of Phoenix-West Michigan Campus,"318 River Ridge Dr, NW, Grand Rapids, Michigan 49544-1683",www.phoenix.edu,"4-year, Private for-profit",549 University of Phoenix-Western Washington Campus,"7100 Fort Dent Way, Tukwila, Washington 98188-8559",www.phoenix.edu,"4-year, Private for-profit",802 University of Phoenix-Wichita Campus,"3020 N. Cypress Drive, Suite 150, Wichita, Kansas 67226-4011",www.phoenix.edu,"4-year, Private for-profit",143 University of Pittsburgh-Bradford,"300 Campus Drive, Bradford, Pennsylvania 16701",www.upb.pitt.edu/,"4-year, Public",1502 University of Pittsburgh-Greensburg,"150 Finoli Drive, Greensburg, Pennsylvania 15601",www.upg.pitt.edu,"4-year, Public",1826 University of Pittsburgh-Johnstown,"450 Schoolhouse Road, Johnstown, Pennsylvania 15904",www.upj.pitt.edu,"4-year, Public",3032 University of Pittsburgh-Pittsburgh Campus,"4200 Fifth Avenue, Pittsburgh, Pennsylvania 15260",www.pitt.edu,"4-year, Public",27562 University of Portland,"5000 N Willamette Blvd, Portland, Oregon 97203-5798",www.up.edu,"4-year, Private not-for-profit",3661 University of Puerto Rico at Cayey,"205 Antonio R. Barcelo Ave., Cayey, Puerto Rico 00736-9997",www.cayey.upr.edu,"4-year, Public",3739 University of Puerto Rico in Ponce,"2151 Santiago de los Caballeros Avenue, Ponce, Puerto Rico 00716-9996",www.uprp.edu,"4-year, Public",3232 University of Puerto Rico-Aguadilla,"Belt St., Ramey, Puerto Rico 00604-0160",www.uprag.edu,"4-year, Public",3036 University of Puerto Rico-Arecibo,"Finca las Dunas Carr 653 Ruta 129 Km 8, Arecibo, Puerto Rico 00614-4010",upra.edu,"4-year, Public",4094 University of Puerto Rico-Bayamon,"Road 174 #170 Minillas Industrial Park, Bayamon, Puerto Rico 00959",www.uprb.edu/,"4-year, Public",5014 University of Puerto Rico-Carolina,"Carretera 887 Bo San Anton, Carolina, Puerto Rico 00984-4800",www.uprc.edu,"4-year, Public",4240 University of Puerto Rico-Humacao,"100 Road 908, Humacao, Puerto Rico 00791",www.uprh.edu,"4-year, Public",4744 University of Puerto Rico-Mayaguez,"Post St, Mayaguez, Puerto Rico 00681",www.uprm.edu,"4-year, Public",13324 University of Puerto Rico-Medical Sciences Campus,"Rio Piedras Medical Center, Americo Miranda Avenue, San Juan, Puerto Rico 00936-5067",www.rcm.upr.edu,"4-year, Public",2319 University of Puerto Rico-Rio Piedras Campus,"Ponce de Leon Ave, Rio Piedras, Puerto Rico 00931-3300",www.uprrp.edu,"4-year, Public",18653 University of Puerto Rico-Utuado,"Carr. # 10 Km. 52.2, Utuado, Puerto Rico 00641",www.uprutuado.edu,"4-year, Public",1682 University of Puget Sound,"1500 N Warner, Tacoma, Washington 98416",www.ups.edu,"4-year, Private not-for-profit",2844 University of Redlands,"1200 E. Colton Ave, Redlands, California 92373-0999",www.redlands.edu,"4-year, Private not-for-profit",4317 University of Rhode Island,"Kingston, Rhode Island 02881",www.uri.edu/,"4-year, Public",15904 University of Richmond,"28 Westhampton Way, Richmond, Virginia 23173",www.richmond.edu,"4-year, Private not-for-profit",4249 University of Rio Grande,"218 N College Ave, Rio Grande, Ohio 45674",www.rio.edu,"4-year, Private not-for-profit",1967 University of Rochester,"240 Wallis Hall, Rochester, New York 14627-0011",www.rochester.edu,"4-year, Private not-for-profit",9735 University of Sacred Heart,"Calle Rosales Esq San Antonio Pda 26 1/2, Santurce, Puerto Rico 00907",www.sagrado.edu,"4-year, Private not-for-profit",5666 University of Saint Francis-Ft Wayne,"2701 Spring St, Fort Wayne, Indiana 46808-3994",www.sf.edu,"4-year, Private not-for-profit",2112 University of Saint Mary,"4100 S 4th St Trafficway, Leavenworth, Kansas 66048-5082",www.stmary.edu,"4-year, Private not-for-profit",955 University of Saint Mary of the Lake,"1000 E Maple Ave, Mundelein, Illinois 60060-1174",www.vocations.org,"4-year, Private not-for-profit",213 University of San Diego,"5998 Alcala Park, San Diego, California 92110-2492",www.sandiego.edu,"4-year, Private not-for-profit",7832 University of San Francisco,"2130 Fulton St, San Francisco, California 94117-1080",www.usfca.edu,"4-year, Private not-for-profit",8750 University of Science and Arts of Oklahoma,"17th Street and Grand Avenue, Chickasha, Oklahoma 73018-5322",www.usao.edu,"4-year, Public",1174 University of Scranton,"800 Linden Street, Scranton, Pennsylvania 18510-4629",www.scranton.edu,"4-year, Private not-for-profit",5651 University of Sioux Falls,"1101 W 22nd St, Sioux Falls, South Dakota 57105-1699",usiouxfalls.edu,"4-year, Private not-for-profit",1589 University of South Alabama,"307 N University Blvd, Mobile, Alabama 36688-0002",www.southalabama.edu,"4-year, Public",14064 University of South Carolina-Aiken,"471 University Pkwy, Aiken, South Carolina 29801",www.usca.edu,"4-year, Public",3232 University of South Carolina-Beaufort,"1 University Boulevard, Bluffton, South Carolina 29909",www.uscb.edu,"4-year, Public",1502 University of South Carolina-Columbia,"Columbia, South Carolina 29208",www.sc.edu/,"4-year, Public",27488 University of South Carolina-Upstate,"800 University Way, Spartanburg, South Carolina 29303-4999",www.uscupstate.edu,"4-year, Public",5063 University of South Dakota,"414 E Clark St, Vermillion, South Dakota 57069-2390",WWW.USD.EDU,"4-year, Public",9291 University of South Florida,"4202 East Fowler Ave, Tampa, Florida 33620-9951",www.usf.edu,"4-year, Public",46189 University of South Florida Polytechnic,"3433 Winter Lake Rd, Lakeland, Florida 33803-9807",www.poly.usf.edu/,"4-year, Public", University of South Florida Sarasota-Manatee,"8350 N Tamiami Trail, Sarasota, Florida 34243-2049",www.sarasota.usf.edu/,"4-year, Public", University of South Florida St. Petersburg,"140 Seventh Ave S., St. Petersburg, Florida 33701-9807",www.stpt.usf.edu,"4-year, Public", University of Southern California,"University Park, Los Angeles, California 90089",www.usc.edu/,"4-year, Private not-for-profit",33747 University of Southern Indiana,"8600 University Blvd, Evansville, Indiana 47712",www.usi.edu,"4-year, Public",10126 University of Southern Maine,"96 Falmouth St, Portland, Maine 04103",www.usm.maine.edu,"4-year, Public",10009 University of Southern Mississippi,"118 College Drive # 0001, Hattiesburg, Mississippi 39406-0001",WWW.USM.EDU,"4-year, Public",14793 University of Southern Nevada,"11 Sunset Way, Henderson, Nevada 89014",www.usn.edu,"4-year, Private not-for-profit",785 University of St Francis,"500 N Wilcox St, Joliet, Illinois 60435-6188",www.stfrancis.edu,"4-year, Private not-for-profit",3340 University of St Thomas,"3800 Montrose Blvd, Houston, Texas 77006-4696",www.stthom.edu,"4-year, Private not-for-profit",3165 University of St Thomas,"2115 Summit Ave, Saint Paul, Minnesota 55105-1078",www.stthomas.edu,"4-year, Private not-for-profit",10963 University of Texas Southwestern Medical Center at Dallas,"5323 Harry Hines Blvd, Dallas, Texas 75390-9096",www.utsouthwestern.edu,"4-year, Public",2461 University of the Cumberlands,"6191 College Station Drive, Williamsburg, Kentucky 40769",www.ucumberlands.edu,"4-year, Private not-for-profit",2553 University of the District of Columbia,"4200 Connecticut Ave NW, Washington, District of Columbia 20008",www.udc.edu,"4-year, Public",5339 University of the District of Columbia David A Clarke School of Law,"4200 Connecticut Ave NW, Washington, District of Columbia 20008",www.law.udc.edu,"4-year, Public",245 University of the Incarnate Word,"4301 Broadway, San Antonio, Texas 78209",www.uiw.edu,"4-year, Private not-for-profit",6361 University of the Ozarks,"415 N College Ave, Clarksville, Arkansas 72830",www.ozarks.edu,"4-year, Private not-for-profit",675 University of the Pacific,"3601 Pacific Ave, Stockton, California 95211-0197",www.pacific.edu,"4-year, Private not-for-profit",6251 University of the Rockies,"555 E Pikes Peak Ave #108, Colorado Springs, Colorado 80903-3612",www.rockies.edu,"4-year, Private for-profit",141 University of the Sciences in Philadelphia,"600 S 43rd Street, Philadelphia, Pennsylvania 19104-4495",www.usp.edu,"4-year, Private not-for-profit",3000 University of the Southwest,"6610 Lovington Hwy, Hobbs, New Mexico 88240",www.usw.edu,"4-year, Private not-for-profit",509 University of the Virgin Islands,"2 John Brewers Bay, Charlotte Amalie, Virgin Islands 00802-9990",www.uvi.edu,"4-year, Public",2393 University of the Virgin Islands-Kingshill,"St. Croix, St. Croix, Virgin Islands 00850",www.uvi.edu,"4-year, Public", University of the West,"1409 N Walnut Grove Ave, Rosemead, California 91770",www.uwest.edu,"4-year, primarily associate's, Private not-for-profit",232 University of Toledo,"2801 W Bancroft, Toledo, Ohio 43606-3390",www.utoledo.edu/,"4-year, Public",22336 University of Tulsa,"800 South Tucker Drive, Tulsa, Oklahoma 74104-3189",www.utulsa.edu,"4-year, Private not-for-profit",4192 University of Utah,"201 Presidents Circle, Salt Lake City, Utah 84112-9008",www.utah.edu,"4-year, Public",28211 University of Vermont,"85 S Prospect St, Burlington, Vermont 05405-0160",www.uvm.edu,"4-year, Public",12800 University of Virginia-Main Campus,"Charlottesville, Virginia 22904",www.virginia.edu/,"4-year, Public",24541 University of Washington-Bothell Campus,"18115 Campus Way NE, Bothell, Washington 98011-8246",www.bothell.washington.edu/,"4-year, Public",2291 University of Washington-Seattle Campus,"1400 NE Campus Parkway, Seattle, Washington 98195-4550",www.washington.edu,"4-year, Public",39675 University of Washington-Tacoma Campus,"1900 Commerce St, Tacoma, Washington 98402-3100",www.tacoma.washington.edu/,"4-year, Public",2967 University of West Alabama,"Station One, Livingston, Alabama 35470",www.uwa.edu,"4-year, Public",4888 University of West Georgia,"1601 Maple St, Carrollton, Georgia 30118-0001",www.westga.edu,"4-year, Public",11252 University of Wisconsin-Eau Claire,"105 Garfield Avenue, Eau Claire, Wisconsin 54702-4004",www.uwec.edu,"4-year, Public",11140 University of Wisconsin-Green Bay,"2420 Nicolet Dr, Green Bay, Wisconsin 54311-7001",WWW.UWGB.EDU,"4-year, Public",6286 University of Wisconsin-La Crosse,"1725 State St, La Crosse, Wisconsin 54601-9959",www.uwlax.edu,"4-year, Public",9880 University of Wisconsin-Madison,"500 Lincoln Dr, Madison, Wisconsin 53706-1380",www.wisc.edu,"4-year, Public",41620 University of Wisconsin-Milwaukee,"2200 E Kenwood Blvd, Milwaukee, Wisconsin 53201-0413",www.uwm.edu,"4-year, Public",29215 University of Wisconsin-Oshkosh,"800 Algoma Blvd, Oshkosh, Wisconsin 54901",www.uwosh.edu,"4-year, Public",12753 University of Wisconsin-Parkside,"900 Wood Rd, Kenosha, Wisconsin 53141-2000",www.uwp.edu,"4-year, Public",5167 University of Wisconsin-Platteville,"1 University Plz, Platteville, Wisconsin 53818-3001",www.uwplatt.edu,"4-year, Public",7512 University of Wisconsin-River Falls,"410 S 3rd St, River Falls, Wisconsin 54022",www.uwrf.edu,"4-year, Public",6555 University of Wisconsin-Stevens Point,"Main St, Stevens Point, Wisconsin 54481",www.uwsp.edu,"4-year, Public",9163 University of Wisconsin-Stout,"Menomonie, Wisconsin 54751",www.uwstout.edu,"4-year, Public",8839 University of Wisconsin-Superior,"Belknap & Catlin, Superior, Wisconsin 54880-4500",www.uwsuper.edu,"4-year, Public",2689 University of Wisconsin-Whitewater,"800 W Main St, Whitewater, Wisconsin 53190-1790",www.uww.edu,"4-year, Public",10962 University of Wyoming,"Corner of Ninth and Ivinson, Laramie, Wyoming 82071",www.uwyo.edu,"4-year, Public",12067 UPMC Presbyterian Shadyside Dietetic Internship,"5230 Centre Ave, Pittsburgh, Pennsylvania 15232",www.upmc.edu/shadyside/dieteticinternship,"4-year, Private not-for-profit",4 Upper Iowa University,"605 Washington St, Fayette, Iowa 52142-1857",www.uiu.edu,"4-year, Private not-for-profit",5278 Upper Valley Educators Institute,"194 Dartmouth College Highway, Lebanon, New Hampshire 03766-1358",www.uvti.org,"4-year, Private not-for-profit",52 Urbana University,"579 College Way, Urbana, Ohio 43078-2091",www.urbana.edu,"4-year, Private not-for-profit",1354 Ursinus College,"601 E. Main St, Collegeville, Pennsylvania 19426-1000",www.ursinus.edu,"4-year, Private not-for-profit",1680 Ursuline College,"2550 Lander Rd, Pepper Pike, Ohio 44124",www.ursuline.edu,"4-year, Private not-for-profit",1430 Uta Mesivta of Kiryas Joel,"9 Nickelsburg Rd Unit 312, Monroe, New York 10950",,"4-year, Private not-for-profit",1161 Utah Career College,"1902 W 7800 S, West Jordan, Utah 84088",www.utahcollege.edu,"4-year, primarily associate's, Private for-profit",422 Utah Career College-Layton,"869 West Hill Field Road, Layton, Utah 84041",www.utahcollege.edu,"4-year, primarily associate's, Private for-profit",95 Utah Career College-Orem Campus,"898 N 1200 W, Orem, Utah 84057",,"4-year, primarily associate's, Private for-profit",38 Utah State University,"Old Main Hill, Logan, Utah 84322-1400",www.usu.edu,"4-year, Public",15099 Utah State University-Continuing Education,"Old Main Hill, Logan, Utah 84322",www.usu.edu,"4-year, primarily associate's, Public",10130 Utah Valley University,"800 W University Parkway, Orem, Utah 84058-5999",www.uvu.edu,"4-year, primarily associate's, Public",26696 Utica College,"1600 Burrstone Rd, Utica, New York 13502-4892",www.utica.edu/,"4-year, Private not-for-profit",3082 Valdosta State University,"1500 N Patterson, Valdosta, Georgia 31698",www.valdosta.edu,"4-year, Public",11490 Valley City State University,"101 College St SW, Valley City, North Dakota 58072",www.vcsu.edu,"4-year, Public",1019 Valley Forge Christian College,"1401 Charlestown Road, Phoenixville, Pennsylvania 19460",www.vfcc.edu,"4-year, Private not-for-profit",1201 Valparaiso University,"US Highway 30 and Sturdy Road, Valparaiso, Indiana 46383",www.valpo.edu,"4-year, Private not-for-profit",3975 Vanderbilt University,"2101 West End Avenue, Nashville, Tennessee 37240",www.vanderbilt.edu,"4-year, Private not-for-profit",12093 VanderCook College of Music,"3140 S. Federal St., Chicago, Illinois 60616-3731",www.vandercook.edu,"4-year, Private not-for-profit",373 Vanguard University of Southern California,"55 Fair Dr, Costa Mesa, California 92626",www.vanguard.edu,"4-year, Private not-for-profit",2149 Vassar College,"124 Raymond Ave, Poughkeepsie, New York 12604",www.vassar.edu,"4-year, Private not-for-profit",2389 Vatterott College,"12970 Maurer Industrial Dr, Sunset Hills, Missouri 63127-1516",www.vatterott-college.edu/sunset_hills.asp,"4-year, primarily associate's, Private for-profit",494 Vatterott College,"8580 Evans Avenue, Berkeley, Missouri 63134",www.vatterott-college.edu,"4-year, primarily associate's, Private for-profit",755 Vaughn College of Aeronautics and Technology,"86-01 23rd Avenue, Flushing, New York 11369",www.vaughn.edu,"4-year, primarily associate's, Private not-for-profit",1097 Vermont Law School,"164 Chelsea St, South Royalton, Vermont 05068-0096",www.vermontlaw.edu,"4-year, Private not-for-profit",574 Vermont Technical College,"1 Main Street, Randolph Center, Vermont 05061-0500",www.vtc.edu,"4-year, primarily associate's, Public",1649 Villa Maria College Buffalo,"240 Pine Ridge Rd, Buffalo, New York 14225-3999",www.villa.edu,"4-year, primarily associate's, Private not-for-profit",488 Villanova University,"800 Lancaster Avenue, Villanova, Pennsylvania 19085-1699",www.villanova.edu,"4-year, Private not-for-profit",10274 Vincennes University,"1002 N First St, Vincennes, Indiana 47591",www.vinu.edu,"4-year, primarily associate's, Public",11590 Virginia College-Birmingham,"65 Bagby Dr., Birmingham, Alabama 35209-3703",www.vc.edu,"4-year, primarily associate's, Private for-profit",5264 Virginia College-Greenville,"78 Global Dr-Ste 200, Greenville, South Carolina 29607",vc.edu,"4-year, primarily associate's, Private for-profit",308 Virginia College-Huntsville,"2800 Bob Wallace Ave, Huntsville, Alabama 35805-9945",WWW.VC.EDU,"4-year, primarily associate's, Private for-profit",731 Virginia College-School of Business and Health,"721 Eastgate Loop Rd., Chattanooga, Tennessee 37411",,"4-year, primarily associate's, Private for-profit",558 Virginia Commonwealth University,"910 W Franklin St, Richmond, Virginia 23284-2512",www.vcu.edu/,"4-year, Public",32044 Virginia Intermont College,"1013 Moore Street, Bristol, Virginia 24201",www.vic.edu,"4-year, Private not-for-profit",542 Virginia Military Institute,"Lexington, Virginia 24450-0304",www.vmi.edu,"4-year, Public",1428 Virginia Polytechnic Institute and State University,"Blacksburg, Virginia 24061-0131",WWW.VT.EDU,"4-year, Public",30739 Virginia State University,"One Hayden Drive, Petersburg, Virginia 23806",www.vsu.edu,"4-year, Public",5042 Virginia Union University,"1500 N Lombardy St, Richmond, Virginia 23220",www.vuu.edu,"4-year, Private not-for-profit",1501 Virginia University of Lynchburg,"2058 Garfield Ave, Lynchburg, Virginia 24501",www.vul.edu,"4-year, Private not-for-profit",267 Virginia Wesleyan College,"1584 Wesleyan Dr, Norfolk, Virginia 23502-5599",www.vwc.edu,"4-year, Private not-for-profit",1381 Visible School-Music and Worships Arts College,"9817 Huff and Puff Rd, Lakeland, Tennessee 38002",www.visibleschool.com,"4-year, Private not-for-profit",92 Viterbo University,"900 Viterbo Drive, La Crosse, Wisconsin 54601-8804",www.viterbo.edu,"4-year, Private not-for-profit",2944 Voorhees College,"481 Porter Drive, Denmark, South Carolina 29042",www.voorhees.edu,"4-year, Private not-for-profit",568 W L Bonner College,"4430 Argent Ct, Columbia, South Carolina 29203",,"4-year, primarily associate's, Private not-for-profit",69 Wabash College,"301 West Wabash Avenue, Crawfordsville, Indiana 47933-0352",www.wabash.edu,"4-year, Private not-for-profit",911 Wagner College,"One Campus Rd, Staten Island, New York 10301-4495",www.wagner.edu,"4-year, Private not-for-profit",2294 Wake Forest University,"1834 Wake Forest Road, Winston Salem, North Carolina 27106",www.wfu.edu,"4-year, Private not-for-profit",6862 Walden University,"155 Fifth Ave S, Suite 100, Minneapolis, Minnesota 55401",www.waldenu.edu,"4-year, Private for-profit",34779 Waldorf College,"106 S Sixth St, Forest City, Iowa 50436-1713",www.waldorf.edu,"4-year, Private not-for-profit",582 Walla Walla University,"204 S College Ave, College Place, Washington 99324-1198",www.wallawalla.edu,"4-year, Private not-for-profit",1800 Walsh College of Accountancy and Business Administration,"3838 Livernois, Troy, Michigan 48083-5066",www.walshcollege.edu,"4-year, Private not-for-profit",3106 Walsh University,"2020 East Maple St, North Canton, Ohio 44720-3396",www.walsh.edu,"4-year, Private not-for-profit",2738 Warner Pacific College,"2219 SE 68th Ave, Portland, Oregon 97215-4026",www.warnerpacific.edu,"4-year, Private not-for-profit",973 Warner University,"13895 Hwy 27, Lake Wales, Florida 33859-8797",www.warner.edu,"4-year, Private not-for-profit",1154 Warren Wilson College,"701 Warren Wilson Rd, Swannanoa, North Carolina 28778-2099",www.warren-wilson.edu,"4-year, Private not-for-profit",1002 Wartburg College,"100 Wartburg Blvd., Waverly, Iowa 50677-0903",www.wartburg.edu,"4-year, Private not-for-profit",1799 Wartburg Theological Seminary,"333 Wartburg Pl, Dubuque, Iowa 52003-7797",www.wartburgseminary.edu,"4-year, Private not-for-profit",215 Washburn University,"1700 SW College Avenue, Topeka, Kansas 66621-0001",www.washburn.edu,"4-year, Public",6545 Washington & Jefferson College,"60 S Lincoln St, Washington, Pennsylvania 15301",www.washjeff.edu,"4-year, Private not-for-profit",1519 Washington and Lee University,"204 West Washington Street, Lexington, Virginia 24450-2116",www.wlu.edu/,"4-year, Private not-for-profit",2155 Washington Bible College-Capital Bible Seminary,"6511 Princess Garden Pky, Lanham, Maryland 20706-3599",www.bible.edu,"4-year, Private not-for-profit",587 Washington College,"300 Washington Ave, Chestertown, Maryland 21620-1438",www.washcoll.edu,"4-year, Private not-for-profit",1394 Washington State University,"French Administration Building, Pullman, Washington 99164-1009",www.wsu.edu/,"4-year, Public",25352 Washington State University-Spokane,"412 East Spokane Falls Blvd., Spokane, Washington 99210-1495",www.spokane.wsu.edu/,"4-year, Public", Washington State University-Tri Cities,"2710 University Drive, Richland, Washington 99354-1671",www.tricity.wsu.edu/,"4-year, Public", Washington State University-Vancouver,"14204 NE Salmon Creek Avenue, Vancouver, Washington 98686-9600",www.vancouver.wsu.edu/,"4-year, Public", Washington Theological Union,"6896 Laurel St NW, Washington, District of Columbia 20012",www.wtu.edu,"4-year, Private not-for-profit",252 Washington University in St Louis,"One Brookings Drive, Saint Louis, Missouri 63130-4899",www.wustl.edu,"4-year, Private not-for-profit",13339 Watkins College of Art & Design,"2298 Rosa L Parks Blvd, Nashville, Tennessee 37228",www.watkins.edu,"4-year, Private not-for-profit",387 Wayland Baptist University,"1900 W 7th St., Plainview, Texas 79072",www.wbu.edu,"4-year, Private not-for-profit",6031 Wayne State College,"1111 Main St, Wayne, Nebraska 68787",www.wsc.edu,"4-year, Public",3566 Wayne State University,"656 West Kirby Street, Detroit, Michigan 48202",www.wayne.edu,"4-year, Public",31024 Waynesburg University,"51 W College St, Waynesburg, Pennsylvania 15370-1257",www.waynesburg.edu,"4-year, Private not-for-profit",2549 Webb Institute,"298 Crescent Beach Rd, Glen Cove, New York 11542-1398",www.webb-institute.edu,"4-year, Private not-for-profit",90 Webber International University,"1201 N Scenic Hwy, Babson Park, Florida 33827-0096",www.webber.edu,"4-year, Private not-for-profit",602 Weber State University,"3848 Harrison Blvd, Ogden, Utah 84408-1137",www.weber.edu,"4-year, Public",21388 Webster University,"470 E Lockwood Ave., Saint Louis, Missouri 63119-3194",www.webster.edu,"4-year, Private not-for-profit",19154 Weill Cornell Medical College,"1300 York Ave, C-118, New York, New York 10065",www.med.cornell.edu,"4-year, Private not-for-profit",965 Wellesley College,"106 Central St, Wellesley, Massachusetts 02481-8203",www.wellesley.edu,"4-year, Private not-for-profit",2498 Wells College,"170 State Rte 90, Aurora, New York 13026-0500",www.wells.edu,"4-year, Private not-for-profit",579 Wentworth Institute of Technology,"550 Huntington Ave, Boston, Massachusetts 02115",WWW.WIT.EDU,"4-year, Private not-for-profit",3816 Wesley Biblical Seminary,"787 E. Northside Drive, Jackson, Mississippi 39286",www.wbs.edu,"4-year, Private not-for-profit",127 Wesley College,"120 N State St, Dover, Delaware 19901-3875",www.wesley.edu,"4-year, Private not-for-profit",2233 Wesley College,"111 Wesley Cir, Florence, Mississippi 39073-1070",www.wesleycollege.edu,"4-year, Private not-for-profit",140 Wesley Theological Seminary,"4500 Massachusetts Ave NW, Washington, District of Columbia 20016-5690",www.wesleyseminary.edu,"4-year, Private not-for-profit",447 Wesleyan College,"4760 Forsyth Rd, Macon, Georgia 31210-4462",www.wesleyancollege.edu,"4-year, Private not-for-profit",739 Wesleyan University,"237 High St, Middletown, Connecticut 06459",www.wesleyan.edu,"4-year, Private not-for-profit",3149 West Chester University of Pennsylvania,"University Avenue and High Street, West Chester, Pennsylvania 19383",www.wcupa.edu,"4-year, Public",13619 West Coast University,"4021 Rosewood Ave, Los Angeles, California 90004",www.westcoastuniversity.edu,"4-year, primarily associate's, Private for-profit",1113 West Liberty State College,"Route 88, West Liberty, West Virginia 26074",www.westliberty.edu,"4-year, Public",2513 West Suburban College of Nursing,"3 Erie Ct, Oak Park, Illinois 60302-2519",www.wscn.edu,"4-year, Private not-for-profit",262 West Texas A & M University,"2501 4th Ave, Canyon, Texas 79016-0001",www.wtamu.edu,"4-year, Public",7535 West Virginia School of Osteopathic Medicine,"400 N Lee St, Lewisburg, West Virginia 24901",www.wvsom.edu,"4-year, Public",695 West Virginia State University,"Rte 25, Institute, West Virginia 25112-1000",www.wvstateu.edu,"4-year, Public",3003 West Virginia University,"Stewart Hall, University Avenue, Morgantown, West Virginia 26506-6201",www.wvu.edu/,"4-year, Public",28840 West Virginia University at Parkersburg,"300 Campus Drive, Parkersburg, West Virginia 26104",www.wvup.edu,"4-year, primarily associate's, Public",3753 West Virginia University Hospital Departments of Rad Tech and Nutrition,"Medical Ctr Dr, Morgantown, West Virginia 26506-8062",www.wvuhradtech.com,"4-year, Private not-for-profit",52 West Virginia University Institute of Technology,"405 Fayette Pke, Montgomery, West Virginia 25136",www.wvutech.edu,"4-year, Public",1224 West Virginia Wesleyan College,"59 College Ave, Buckhannon, West Virginia 26201-2994",www.wvwc.edu,"4-year, Private not-for-profit",1317 Western Carolina University,"Cullowhee, North Carolina 28723-9646",www.wcu.edu,"4-year, Public",9050 Western Connecticut State University,"181 White Street, Danbury, Connecticut 06810-6826",www.wcsu.edu,"4-year, Public",6462 Western Governors University,"4001 East 700 South, Suite 701, Salt Lake City, Utah 84107",www.wgu.edu,"4-year, Private not-for-profit",11706 Western Illinois University,"1 University Circle, Macomb, Illinois 61455",www.wiu.edu,"4-year, Public",13175 Western International University,"9215 N Black Canyon Hwy, Phoenix, Arizona 85021",www.wintu.edu,"4-year, primarily associate's, Private for-profit",2901 Western Kentucky University,"1906 College Heights Blvd, Bowling Green, Kentucky 42101-1000",www.wku.edu,"4-year, Public",19742 Western Michigan University,"1903 West Michigan Avenue, Kalamazoo, Michigan 49008-5167",www.wmich.edu,"4-year, Public",24818 Western Nevada College,"2201 West College Parkway, Carson City, Nevada 89703-7399",www.wnc.edu,"4-year, primarily associate's, Public",4728 Western New England College,"1215 Wilbraham Rd, Springfield, Massachusetts 01119-2684",www.wnec.edu,"4-year, Private not-for-profit",3722 Western New Mexico University,"1000 W. College Ave, Silver City, New Mexico 88061",www.wnmu.edu,"4-year, Public",2822 Western Oregon University,"345 N Monmouth Ave, Monmouth, Oregon 97361-1394",www.wou.edu,"4-year, Public",5343 Western Seminary,"5511 SE Hawthorne Blvd, Portland, Oregon 97215-3367",www.westernseminary.edu,"4-year, Private not-for-profit",748 Western Seminary-Sacramento,"2924 Becerra Way, Sacramento, California 95821-4520",www.westernseminary.edu,"4-year, Private not-for-profit", Western Seminary-San Jose,"16330 Los Gatos Blvd, Suite 100, Los Gatos, California 95032-4520",www.westernseminary.edu,"4-year, Private not-for-profit", Western State College of Colorado,"600 N Adams, Gunnison, Colorado 81231",www.western.edu,"4-year, Public",2315 Western State University-College of Law-Argosy,"1111 N State College Blvd, Fullerton, California 92831-3014",www.wsulaw.edu,"4-year, Private for-profit",384 Western States Chiropractic College,"2900 NE 132nd Ave, Portland, Oregon 97230-3099",www.wschiro.edu,"4-year, Private not-for-profit",449 Western Theological Seminary,"101 E 13th St, Holland, Michigan 49423-3622",www.westernsem.edu,"4-year, Private not-for-profit",230 Western University of Health Sciences,"309 E 2nd St, Pomona, California 91766-1854",www.westernu.edu,"4-year, Private not-for-profit",2393 Western Washington University,"516 High St, Bellingham, Washington 98225-9008",www.wwu.edu,"4-year, Public",14620 Westfield State College,"577 Western Ave, Westfield, Massachusetts 01086-1630",www.wsc.ma.edu/,"4-year, Public",5548 Westminster College,"319 South Market Street, New Wilmington, Pennsylvania 16172",www.westminster.edu,"4-year, Private not-for-profit",1516 Westminster College,"1840 South 1300 East, Salt Lake City, Utah 84105",www.westminstercollege.edu,"4-year, Private not-for-profit",2859 Westminster College,"501 Westminster Ave, Fulton, Missouri 65251-1299",WWW.WESTMINSTER-MO.EDU,"4-year, Private not-for-profit",1000 Westminster Theological Seminary,"2960 W Church Rd, Glenside, Pennsylvania 19038",www.wts.edu,"4-year, Private not-for-profit",727 Westminster Theological Seminary in California,"1725 Bear Valley Pky, Escondido, California 92027",www.wscal.edu,"4-year, Private not-for-profit",129 Westmont College,"955 La Paz Rd, Santa Barbara, California 93108-1089",www.westmont.edu,"4-year, Private not-for-profit",1340 Westwood College-Anaheim,"1551 S. Douglass Rd, Anaheim, California 92806",www.westwood.edu,"4-year, Private for-profit",1249 Westwood College-Annandale,"7619 Little River Turnpike, 5th Floor, Annandale, Virginia 22003",www.westwood.edu,"4-year, primarily associate's, Private for-profit",451 Westwood College-Arlington Ballston,"4300 Wilson Boulevard, Suite 200, Arlington, Virginia 22203",www.westwood.edu,"4-year, primarily associate's, Private for-profit",418 Westwood College-Atlanta Midtown,"1100 Spring St, Ste. 102, Atlanta, Georgia 30309",www.westwood.edu,"4-year, Private for-profit",699 Westwood College-Chicago Loop,"17 N State St-Ste 300, Chicago, Illinois 60602",www.westwood.edu,"4-year, Private for-profit",1078 Westwood College-Denver North,"7350 N Broadway, Denver, Colorado 80221",www.westwood.edu,"4-year, Private for-profit",5970 Westwood College-Denver South,"3150 S Sheridan Blvd, Denver, Colorado 80227",www.westwood.edu,"4-year, Private for-profit",490 Westwood College-Dupage,"7155 Janes Avenue, Woodridge, Illinois 60517",www.westwood.edu,"4-year, Private for-profit",631 Westwood College-Inland Empire,"20 W 7th St, Upland, California 91786-7148",WWW.WESTWOOD.EDU,"4-year, Private for-profit",1192 Westwood College-Los Angeles,"3250 Wilshire Blvd Ste 400, Los Angeles, California 90010",www.westwood.edu,"4-year, Private for-profit",1090 Westwood College-Northlake,"2309 Parklake Drive NE, Atlanta, Georgia 30345",www.westwood.edu,"4-year, primarily associate's, Private for-profit",488 Westwood College-O'Hare Airport,"8501 W. Higgins Road Suite 100, Chicago, Illinois 60634",www.westwood.edu,"4-year, Private for-profit",828 Westwood College-River Oaks,"80 River Oaks Ctr-Ste 111, Calumet City, Illinois 60409",www.westwood.edu,"4-year, primarily associate's, Private for-profit",722 Westwood College-South Bay,"19700 S. Vermont Avenue, Suite 100, Torrance, California 90502",www.westwood.edu,"4-year, Private for-profit",778 Wheaton College,"26 E Main St, Norton, Massachusetts 02766",www.wheatoncollege.edu,"4-year, Private not-for-profit",1655 Wheaton College,"501 College Ave, Wheaton, Illinois 60187-5593",www.wheaton.edu,"4-year, Private not-for-profit",2915 Wheeling Jesuit University,"316 Washington Ave, Wheeling, West Virginia 26003",www.wju.edu,"4-year, Private not-for-profit",1319 Wheelock College,"200 the Riverway, Boston, Massachusetts 02215-4176",www.wheelock.edu,"4-year, Private not-for-profit",1109 Whitman College,"345 Boyer Ave, Walla Walla, Washington 99362",www.whitman.edu,"4-year, Private not-for-profit",1458 Whittier College,"13406 E Philadelphia Street, Whittier, California 90601",WWW.whittier.edu,"4-year, Private not-for-profit",2047 Whitworth University,"300 W Hawthorne Rd, Spokane, Washington 99251",www.whitworth.edu,"4-year, Private not-for-profit",2704 Wichita State University,"1845 Fairmount, Wichita, Kansas 67260-0124",www.wichita.edu,"4-year, Public",14405 Widener University-Delaware Campus,"4601 Concord Pike, Wilmington, Delaware 19803",www.widener.edu,"4-year, Private not-for-profit",1210 Widener University-Harrisburg Campus,"3800 Vartan Way, Harrisburg, Pennsylvania 17110-9450",www.widener.edu,"4-year, Private not-for-profit",530 Widener University-Main Campus,"One University Place, Chester, Pennsylvania 19013-5792",www.widener.edu,"4-year, Private not-for-profit",4861 Wilberforce University,"1055 N Bickett Rd, Wilberforce, Ohio 45384-1001",www.wilberforce.edu,"4-year, Private not-for-profit",785 Wiley College,"711 Wiley Ave, Marshall, Texas 75670",wileyc.edu,"4-year, Private not-for-profit",967 Wilkes University,"84 West South Street, Wilkes-Barre, Pennsylvania 18766",www.wilkes.edu,"4-year, Private not-for-profit",5901 Willamette University,"900 State St, Salem, Oregon 97301",www.willamette.edu,"4-year, Private not-for-profit",2721 William Carey University,"498 Tuscan Ave, Hattiesburg, Mississippi 39401-5499",www.wmcarey.edu,"4-year, Private not-for-profit",2971 William Jessup University,"333 Sunset Blvd., Rocklin, California 95765-3707",WWW.JESSUP.EDU,"4-year, Private not-for-profit",462 William Jewell College,"500 College Hill, Liberty, Missouri 64068-1896",www.jewell.edu,"4-year, Private not-for-profit",1210 William Mitchell College of Law,"875 Summit Ave, Saint Paul, Minnesota 55105-3076",www.wmitchell.edu,"4-year, Private not-for-profit",1031 William Paterson University of New Jersey,"300 Pompton Rd, Wayne, New Jersey 07470",www.wpunj.edu,"4-year, Public",10256 William Penn University,"201 Trueblood Ave, Oskaloosa, Iowa 52577",www.wmpenn.edu,"4-year, Private not-for-profit",1804 William Woods University,"One University Avenue, Fulton, Missouri 65251-1098",www.thewoods.edu,"4-year, Private not-for-profit",2305 Williams Baptist College,"60 W Fulbright Avenue, Walnut Ridge, Arkansas 72476",www.wbcoll.edu,"4-year, Private not-for-profit",560 Williams College,"880 Main St, Williamstown, Massachusetts 01267",www.williams.edu,"4-year, Private not-for-profit",2072 Williamson Christian College,"200 Seaboard Lane, Franklin, Tennessee 37067",www.williamsoncc.edu,"4-year, Private not-for-profit",68 Wilmington College,"1870 Quaker Way, Wilmington, Ohio 45177",www.wilmington.edu,"4-year, Private not-for-profit",1542 Wilmington University,"320 Dupont Hwy, New Castle, Delaware 19720",www.wilmu.edu,"4-year, Private not-for-profit",9133 Wilson College,"1015 Philadelphia Ave, Chambersburg, Pennsylvania 17201-1285",www.wilson.edu,"4-year, Private not-for-profit",710 Winebrenner Theological Seminary,"950 North Main Street, Findlay, Ohio 45840",www.winebrenner.edu,"4-year, Private not-for-profit",99 Wingate University,"220 North Camden Road, Wingate, North Carolina 28174-0157",www.wingate.edu,"4-year, Private not-for-profit",2128 Winona State University,"8th and Johnson St, Winona, Minnesota 55987-5838",www.winona.edu,"4-year, Public",8482 Winston-Salem State University,"601 Martin Luther King Jr Dr, Winston-Salem, North Carolina 27110-0001",www.wssu.edu,"4-year, Public",6442 Winthrop University,"119 Tillman Hall, Rock Hill, South Carolina 29733",www.winthrop.edu,"4-year, Public",6249 Wisconsin Lutheran College,"8800 W Bluemound Rd, Milwaukee, Wisconsin 53226-4699",wlc.edu,"4-year, Private not-for-profit",753 Wisconsin School of Professional Psychology,"9120 W Hampton Ave, Milwaukee, Wisconsin 53225-4960",www.wspp.edu,"4-year, Private not-for-profit",68 Wittenberg University,"Ward St at N Wittenberg Ave, Springfield, Ohio 45504",www.wittenberg.edu,"4-year, Private not-for-profit",1976 Wofford College,"429 N Church St, Spartanburg, South Carolina 29303-3663",www.wofford.edu,"4-year, Private not-for-profit",1429 Wolford College,"1336 Creekside Boulevard, Suite 2, Naples, Florida 34108",www.wolford.edu/,"4-year, Private not-for-profit",175 Won Institute of Graduate Studies,"137 S Easton Rd, Glenside, Pennsylvania 19038-4535",www.woninstitute.edu,"4-year, Private not-for-profit",49 Woodbury Institute at Champlain College,"660 Elm St, Montpelier, Vermont 05602",www.woodbury-college.edu,"4-year, Private not-for-profit",102 Woodbury University,"7500 Glenoaks Blvd, Burbank, California 91510-7846",www.woodbury.edu,"4-year, Private not-for-profit",1545 Worcester Polytechnic Institute,"100 Institute Road, Worcester, Massachusetts 01609-2280",www.wpi.edu,"4-year, Private not-for-profit",4556 Worcester State College,"486 Chandler St, Worcester, Massachusetts 01602-2597",www.worcester.edu,"4-year, Public",5378 World Medicine Institute,"1073 Hind Iuka Drive, Honolulu, Hawaii 96821",acupuncture-hi.com,"4-year, Private not-for-profit",35 World Mission University,"500 Shatto Pl Ste 600, Los Angeles, California 90020",www.wmu.edu,"4-year, Private not-for-profit",276 Wright State University-Main Campus,"3640 Colonel Glenn Highway, Dayton, Ohio 45435-0001",www.wright.edu,"4-year, Public",16672 Xavier University,"3800 Victory Parkway, Cincinnati, Ohio 45207-1092",www.xavier.edu,"4-year, Private not-for-profit",6584 Xavier University of Louisiana,"One Drexel Drive, New Orleans, Louisiana 70125-1098",www.xula.edu,"4-year, Private not-for-profit",3236 Yale University,"New Haven, Connecticut 06520",www.yale.edu,"4-year, Private not-for-profit",10192 Yale-New Haven Hospital Dietetic Internship,"20 York St EPB 806, New Haven, Connecticut 06510",www.ynhh.org,"4-year, Private not-for-profit",12 Yeshiva and Kollel Harbotzas Torah,"1049 E 15th St, Brooklyn, New York 11230",,"4-year, Private not-for-profit",23 Yeshiva College of the Nations Capital,"1216 Arcola Ave, Silver Spring, Maryland 20902",,"4-year, Private not-for-profit",45 Yeshiva Derech Chaim,"1573 39th St, Brooklyn, New York 11218-4413",,"4-year, Private not-for-profit",159 Yeshiva D'monsey Rabbinical College,"2 Roman Blvd, Monsey, New York 10952",,"4-year, Private not-for-profit",77 Yeshiva Gedolah Imrei Yosef D'spinka,"1466 56th St, Brooklyn, New York 11219",,"4-year, Private not-for-profit",108 Yeshiva Gedolah of Greater Detroit,"24600 Greenfield Rd, Oak Park, Michigan 48237",,"4-year, Private not-for-profit",82 Yeshiva Karlin Stolin,"1818 54th St, Brooklyn, New York 11204-1545",,"4-year, Private not-for-profit",78 Yeshiva of Nitra Rabbinical College,"Pines Bridge Road, Mount Kisco, New York 10549",,"4-year, Private not-for-profit",227 Yeshiva of the Telshe Alumni,"4904 Independence Ave, Riverdale, New York 10471",,"4-year, Private not-for-profit",98 Yeshiva Ohr Elchonon Chabad West Coast Talmudical Seminary,"7215 Waring Ave, Los Angeles, California 90046",,"4-year, Private not-for-profit",118 Yeshiva Shaar Hatorah,"117-06 84 Ave, Kew Gardens, New York 11418",,"4-year, Private not-for-profit",128 Yeshiva Shaarei Torah of Rockland,"91 W Carlton Rd, Suffern, New York 10901",,"4-year, Private not-for-profit",17 Yeshiva Toras Chaim,"999 Ridge Ave, Lakewood, New Jersey 08701",,"4-year, Private not-for-profit",135 Yeshiva Toras Chaim Talmudical Seminary,"1555 Stuart St, Denver, Colorado 80204",,"4-year, Private not-for-profit",7 Yeshiva University,"500 W 185th St, New York, New York 10033-3299",www.yu.edu,"4-year, Private not-for-profit",6292 Yeshivah Gedolah Rabbinical College,"1140 Alton Rd, Miami Beach, Florida 33139",www.lecfl.com,"4-year, Private not-for-profit",37 Yeshivas Be'er Yitzchok,"1391 North Ave, Elizabeth, New Jersey 07208",,"4-year, Private not-for-profit",37 Yeshivas Novominsk,"1690 60th Street, Brooklyn, New York 11204",,"4-year, Private not-for-profit",70 Yeshivat Mikdash Melech,"1326 Ocean Pky, Brooklyn, New York 11230-9963",,"4-year, Private not-for-profit",90 Yeshivath Beth Moshe,"930 Hickory St, Scranton, Pennsylvania 18505",,"4-year, Private not-for-profit",59 Yeshivath Viznitz,"25 Phyllis Terrace, Monsey, New York 10952",,"4-year, Private not-for-profit",429 Yeshivath Zichron Moshe,"South Fallsburgh, New York 12779",,"4-year, Private not-for-profit",228 Yo San University of Traditional Chinese Medicine,"13315 W. Washington Boulevard, Los Angeles, California 90066",www.yosan.edu,"4-year, Private not-for-profit",139 York College,"1125 E 8th St, York, Nebraska 68467-2699",www.york.edu/,"4-year, Private not-for-profit",396 York College Pennsylvania,"Country Club Rd, York, Pennsylvania 17403-3651",www.ycp.edu,"4-year, Private not-for-profit",5627 Youngstown State University,"One University Plaza, Youngstown, Ohio 44555-0001",www.ysu.edu,"4-year, Public",13704 Zion Bible College,"320 South Main Street, Haverhill, Massachusetts 01835",www.zbc.edu,"4-year, Private not-for-profit",247 libkml-1.3.0/testdata/csv/crnl.csv000066400000000000000000000000161263603257100170460ustar00rootroot00000000000000a,b,c 1,2,3 libkml-1.3.0/testdata/csv/gnis-ak-first-101.csv000066400000000000000000000343531263603257100211000ustar00rootroot00000000000000FEATURE-ID,NAME,STYLE-ID,STATE_ALPHA,STATE_NUMERIC,COUNTY_NAME,COUNTY_NUMERIC,PRIMARY_LAT_DMS,PRIM_LONG_DMS,LATITUDE,LONGITUDE,SOURCE_LAT_DMS,SOURCE_LONG_DMS,SOURCE_LAT_DEC,SOURCE_LONG_DEC,ELEVATION,MAP_NAME,DATE_CREATED,DATE_EDITED 247074,Pacific Ocean,Sea,CA,06,Mendocino,045,391837N,1235041W,39.3102778,-123.8447222,,,,,0,Mendocino,01/19/1981,06/19/2007 1397640,Cape Hinchinbrook,Cape,AK,02,Valdez-Cordova (CA),261,601405N,1463830W,60.2347222,-146.6416667,,,,,7,Cordova A-8,01/01/2000,02/05/2009 1397641,Delenia Island,Island,AK,02,Valdez-Cordova (CA),261,602022N,1480818W,60.3394444,-148.1383333,,,,,0,Seward B-4,01/01/2000, 1397642,Alaskaland,Park,AK,02,Fairbanks North Star,090,645022N,1474612W,64.8394444,-147.77,,,,,134,Fairbanks D-2,01/01/2000, 1397643,Badger Road Baptist Church,Church,AK,02,Fairbanks North Star,090,644900N,1473358W,64.8166667,-147.5661111,,,,,139,Fairbanks D-2,01/01/2000, 1397644,Barnes Creek,Stream,AK,02,Fairbanks North Star,090,650005N,1471738W,65.0013889,-147.2938889,650049N,1472244W,65.0136111,-147.3788889,373,Livengood A-1,01/01/2000, 1397645,Barnette School,School,AK,02,Fairbanks North Star,090,645019N,1474339W,64.8386111,-147.7275,,,,,136,Fairbanks D-2,01/01/2000, 1397646,Bentley Park,Park,AK,02,Fairbanks North Star,090,645011N,1474139W,64.8363889,-147.6941667,,,,,130,Fairbanks D-2,01/01/2000, 1397647,Big Horn,Locale,AK,02,Fairbanks North Star,090,644328N,1471842W,64.7244444,-147.3116667,,,,,154,Fairbanks C-1,01/01/2000, 1397648,Birch Hill Cemetery,Cemetery,AK,02,Fairbanks North Star,090,645142N,1474011W,64.8616667,-147.6697222,,,,,187,Fairbanks D-2,01/01/2000, 1397649,Birch School,School,AK,02,Fairbanks North Star,090,645046N,1473558W,64.8461111,-147.5994444,,,,,137,Fairbanks D-2,01/01/2000, 1397650,Chena River Campground,Locale,AK,02,Fairbanks North Star,090,645022N,1474829W,64.8394444,-147.8080556,,,,,135,Fairbanks D-2,01/01/2000, 1397651,Chena River State Recreation Area,Park,AK,02,Fairbanks North Star,090,645500N,1462000W,64.9166667,-146.3333333,,,,,225,Big Delta D-5,01/01/2000,03/30/2009 1397652,Chena School,School,AK,02,Fairbanks North Star,090,644939N,1473957W,64.8275,-147.6658333,,,,,136,Fairbanks D-2,01/01/2000, 1397653,Clay Street Cemetery,Cemetery,AK,02,Fairbanks North Star,090,645030N,1474217W,64.8416667,-147.7047222,,,,,133,Fairbanks D-2,01/01/2000, 1397654,Creamers Field State Game Refuge,Park,AK,02,Fairbanks North Star,090,645215N,1474400W,64.8708333,-147.7333333,,,,,137,Fairbanks D-2,01/01/2000, 1397655,Denali School,School,AK,02,Fairbanks North Star,090,645024N,1474450W,64.84,-147.7472222,,,,,136,Fairbanks D-2,01/01/2000, 1397656,Dream Gulch,Valley,AK,02,Fairbanks North Star,090,650349N,1470804W,65.0636111,-147.1344444,650345N,1470727W,65.0625,-147.1241667,316,Livengood A-1,01/01/2000, 1397657,Emily Ticasua Ivanhoff Brown Elementary School,School,AK,02,Fairbanks North Star,090,644931N,1473138W,64.8252778,-147.5272222,,,,,151,Fairbanks D-2,01/01/2000, 1397658,Ester,Populated Place,AK,02,Fairbanks North Star,090,645050N,1480052W,64.8472222,-148.0144444,,,,,224,Fairbanks D-3,01/01/2000,12/01/2008 1397659,Fairbanks Country Club,Locale,AK,02,Fairbanks North Star,090,645239N,1474921W,64.8775,-147.8225,,,,,171,Fairbanks D-2,01/01/2000, 1397660,Fox Spring,Spring,AK,02,Fairbanks North Star,090,645752N,1473726W,64.9644444,-147.6238889,,,,,243,Fairbanks D-2,01/01/2000, 1397661,Glass Park,Park,AK,02,Fairbanks North Star,090,645013N,1474058W,64.8369444,-147.6827778,,,,,136,Fairbanks D-2,01/01/2000, 1397662,Gold Hill Substation,Locale,AK,02,Fairbanks North Star,090,645116N,1475515W,64.8544444,-147.9208333,,,,,190,Fairbanks D-2,01/01/2000, 1397663,Grace and Truth Chapel,Church,AK,02,Fairbanks North Star,090,645716N,1473739W,64.9544444,-147.6275,,,,,224,Fairbanks D-2,01/01/2000, 1397664,Harding Lake State Recreation Area,Park,AK,02,Fairbanks North Star,090,642626N,1465150W,64.4405556,-146.8638889,,,,,224,Big Delta B-6,01/01/2000, 1397665,Hunter School,School,AK,02,Fairbanks North Star,090,644958N,1474344W,64.8327778,-147.7288889,,,,,136,Fairbanks D-2,01/01/2000, 1397666,Immaculate Conception School,School,AK,02,Fairbanks North Star,090,645107N,1474247W,64.8519444,-147.7130556,,,,,132,Fairbanks D-2,01/01/2000, 1397667,Joy School,School,AK,02,Fairbanks North Star,090,645142N,1474319W,64.8616667,-147.7219444,,,,,136,Fairbanks D-2,01/01/2000, 1397668,Kiwanis Park,Park,AK,02,Fairbanks North Star,090,645028N,1474541W,64.8411111,-147.7613889,,,,,135,Fairbanks D-2,01/01/2000, 1397669,Lathrop High School,School,AK,02,Fairbanks North Star,090,645010N,1474351W,64.8361111,-147.7308333,,,,,136,Fairbanks D-2,01/01/2000, 1397670,Liwa Lake,Lake,AK,02,Fairbanks North Star,090,645246N,1473518W,64.8794444,-147.5883333,,,,,187,Fairbanks D-2,01/01/2000, 1397671,Mount Lulu Fairbanks,Summit,AK,02,Fairbanks North Star,090,645648N,1473200W,64.9466667,-147.5333333,,,,,540,Fairbanks D-2,01/01/2000, 1397672,Main Junior High School,School,AK,02,Fairbanks North Star,090,645024N,1474308W,64.84,-147.7188889,,,,,136,Fairbanks D-2,01/01/2000, 1397673,McNair Woods,Woods,AK,02,Fairbanks North Star,090,644932N,1473414W,64.8255556,-147.5705556,,,,,137,Fairbanks D-2,01/01/2000, 1397674,McKinley School,School,AK,02,Fairbanks North Star,090,644926N,1474043W,64.8238889,-147.6786111,,,,,136,Fairbanks D-2,01/01/2000, 1397675,Monroe High School,School,AK,02,Fairbanks North Star,090,645104N,1474247W,64.8511111,-147.7130556,,,,,136,Fairbanks D-2,01/01/2000, 1397676,Monterey Lake,Lake,AK,02,Fairbanks North Star,090,644917N,1473712W,64.8213889,-147.62,,,,,136,Fairbanks D-2,01/01/2000, 1397677,Morgan Island,Island,AK,02,Fairbanks North Star,090,644738N,1475358W,64.7938889,-147.8994444,,,,,132,Fairbanks D-2,01/01/2000, 1397678,Nordale School,School,AK,02,Fairbanks North Star,090,645048N,1474124W,64.8466667,-147.69,,,,,136,Fairbanks D-2,01/01/2000, 1397679,Pearl Creek,Stream,AK,02,Fairbanks North Star,090,650005N,1471738W,65.0013889,-147.2938889,645842N,1471810W,64.9783333,-147.3027778,373,Livengood A-1,01/01/2000, 1397680,Salcha River State Recreation Site,Park,AK,02,Fairbanks North Star,090,642813N,1465515W,64.4702778,-146.9208333,,,,,197,Big Delta B-6,01/01/2000, 1397681,Ski Boot Hill,Locale,AK,02,Fairbanks North Star,090,645443N,1474404W,64.9119444,-147.7344444,,,,,293,Fairbanks D-2,01/01/2000, 1397682,Snow Gulch,Valley,AK,02,Fairbanks North Star,090,650300N,1470831W,65.05,-147.1419444,650324N,1470637W,65.0566667,-147.1102778,264,Livengood A-1,01/01/2000, 1397683,Thirtymile Slough,Stream,AK,02,Fairbanks North Star,090,644544N,1472033W,64.7622222,-147.3425,644429N,1471946W,64.7413889,-147.3294444,144,Fairbanks D-1,01/01/2000, 1397684,Tungsten Gulch,Valley,AK,02,Fairbanks North Star,090,645712N,1473230W,64.9533333,-147.5416667,645704N,1473151W,64.9511111,-147.5308333,372,Fairbanks D-2,01/01/2000, 1397685,Two Rivers,Locale,AK,02,Fairbanks North Star,090,645220N,1470218W,64.8722222,-147.0383333,,,,,231,Fairbanks D-1,01/01/2000, 1397686,University Park School,School,AK,02,Fairbanks North Star,090,645109N,1474846W,64.8525,-147.8127778,,,,,137,Fairbanks D-2,01/01/2000, 1397687,Woodriver Elementary School,School,AK,02,Fairbanks North Star,090,645020N,1475208W,64.8388889,-147.8688889,,,,,137,Fairbanks D-2,01/01/2000, 1397688,Baptist Pond,Lake,AK,02,Matanuska-Susitna,170,613612N,1493545W,61.6033333,-149.5958333,,,,,101,Anchorage C-7,01/01/2000, 1397689,Bear Paw Lake,Lake,AK,02,Matanuska-Susitna,170,613645N,1494515W,61.6125,-149.7541667,,,,,88,Anchorage C-8,01/01/2000, 1397690,Birch Lake,Lake,AK,02,Matanuska-Susitna,170,613730N,1494730W,61.625,-149.7916667,,,,,74,Anchorage C-8,01/01/2000, 1397691,Bruns Lake,Lake,AK,02,Matanuska-Susitna,170,613358N,1493700W,61.5661111,-149.6166667,,,,,96,Anchorage C-7,01/01/2000, 1397692,Dusk Lake,Lake,AK,02,Matanuska-Susitna,170,613900N,1492500W,61.65,-149.4166667,,,,,147,Anchorage C-7,01/01/2000, 1397693,Fuller Lake,Lake,AK,02,Matanuska-Susitna,170,613645N,1493630W,61.6125,-149.6083333,,,,,104,Anchorage C-7,01/01/2000, 1397694,Johnson Pond,Lake,AK,02,Matanuska-Susitna,170,613410N,1494300W,61.5694444,-149.7166667,,,,,63,Anchorage C-8,01/01/2000, 1397695,Lazy Lake,Lake,AK,02,Anchorage,020,611500N,1494900W,61.25,-149.8166667,,,,,53,Anchorage B-8,01/01/2000, 1397696,Maruro Lake,Lake,AK,02,Matanuska-Susitna,170,613600N,1494700W,61.6,-149.7833333,,,,,73,Anchorage C-8,01/01/2000, 1397697,Whale Lake,Lake,AK,02,Matanuska-Susitna,170,613305N,1494500W,61.5513889,-149.75,,,,,74,Anchorage C-8,01/01/2000, 1397698,Woody Lake,Lake,AK,02,Matanuska-Susitna,170,613415N,1494430W,61.5708333,-149.7416667,,,,,58,Anchorage C-8,01/01/2000, 1397699,Flat Island,Island,AK,02,Prince of Wales-Hyder (CA),198,550530N,1324140W,55.0916667,-132.6944444,,,,,4,Craig A-3,01/01/2000, 1397700,Turn Rock,Pillar,AK,02,Prince of Wales-Hyder (CA),198,551000N,1325450W,55.1666667,-132.9138889,,,,,0,Craig A-3,01/01/2000, 1397701,Abbot Creek,Stream,AK,02,Lake and Peninsula,164,565615N,1584026W,56.9375,-158.6738889,565629N,1584001W,56.9413889,-158.6669444,4,Chignik D-3,01/01/2000, 1397702,Abbott Creek,Stream,AK,02,Lake and Peninsula,164,565626N,1583958W,56.9405556,-158.6661111,565614N,1583704W,56.9372222,-158.6177778,13,Chignik D-2,01/01/2000, 1397704,Akulikutak River,Stream,AK,02,Bethel (CA),050,604505N,1611714W,60.7513889,-161.2872222,602947N,1603117W,60.4963889,-160.5213889,6,Bethel D-7,03/31/1981, 1397708,Althorp Peninsula,Cape,AK,02,Hoonah-Angoon (CA),105,580453N,1361857W,58.0813889,-136.3158333,,,,,267,Mount Fairweather A-1,01/01/2000, 1397709,Derickson Island,Island,AK,02,Lake and Peninsula,164,565931N,1564302W,56.9919444,-156.7172222,,,,,48,Sutwik Island D-3,03/31/1981, 1397712,Ananiuliak Island,Island,AK,02,Aleutians West (CA),016,530015N,1685353W,53.0041667,-168.8980556,,,,,6,Umnak A-3,03/31/1981,02/20/2008 1397715,Arsenic Creek,Stream,AK,02,Bethel (CA),050,600002N,1600857W,60.0005556,-160.1491667,600125N,1600643W,60.0236111,-160.1119444,548,Bethel A-4,03/31/1981, 1397727,Brinckman Gulch,Valley,AK,02,Denali,068,635030N,1480000W,63.8416667,-148,635154N,1480220W,63.865,-148.0388889,1135,Healy D-3,03/31/1981, 1397728,Brinkman Gulch,Valley,AK,02,Denali,068,634932N,1475856W,63.8255556,-147.9822222,635031N,1480005W,63.8419444,-148.0013889,837,Healy D-2,03/31/1981, 1397733,Canyon Creek,Stream,AK,02,Yukon-Koyukuk (CA),290,632626N,1560921W,63.4405556,-156.1558333,633143N,1555508W,63.5286111,-155.9188889,138,Ophir B-1,03/31/1981, 1397734,Cape Menshikof,Cape,AK,02,Lake and Peninsula,164,573122N,1574915W,57.5227778,-157.8208333,,,,,5,Ugashik C-6,03/31/1981,07/30/2009 1397742,Deacons Rock,Island,AK,02,Yukon-Koyukuk (CA),290,665952N,1430207W,66.9977778,-143.0352778,,,,,164,Black River D-5,03/31/1981, 1397743,Don Sheldon Amphitheater,Basin,AK,02,Matanuska-Susitna,170,630046N,1504000W,63.0127778,-150.6666667,,,,,1695,Mount McKinley A-2,03/31/1981,03/06/2009 1397744,Durants Cove,Bay,AK,02,Lake and Peninsula,164,594242N,1540222W,59.7116667,-154.0394444,,,,,14,Iliamna C-3,03/31/1981, 1397761,Fish Ranch Bay,Bay,AK,02,Lake and Peninsula,164,555946N,1584454W,55.9961111,-158.7483333,,,,,0,Stepovak Bay D-3,01/01/2000, 1397762,Fishrack Bay,Bay,AK,02,Lake and Peninsula,164,560027N,1584438W,56.0075,-158.7438889,,,,,0,Chignik A-3,01/01/2000, 1397763,Foggy Island,Island,AK,02,North Slope,185,701450N,1474904W,70.2472222,-147.8177778,,,,,6,Beechey Point A-2,01/01/2000, 1397764,Foggy Island,Island,AK,02,North Slope,185,701629N,1474612W,70.2747222,-147.77,,,,,0,Beechey Point B-2,01/01/2000, 1397769,Golovnin Sound,Bay,AK,02,Nome (CA),180,643114N,1630101W,64.5205556,-163.0169444,,,,,0,Solomon C-3,01/01/2000, 1397770,Granite Mountains,Unknown,AK,02,Southeast Fairbanks (CA),240,634650N,1452359W,63.7805556,-145.3997222,,,,,1502,Mount Hayes D-3,01/01/2000, 1397771,Horn Mountain,Ridge,AK,02,Matanuska-Susitna,170,615848N,1473045W,61.98,-147.5125,,,,,1653,Anchorage D-2,01/01/2000, 1397772,Horn Mountains,Ridge,AK,02,Matanuska-Susitna,170,615936N,1472123W,61.9933333,-147.3563889,,,,,1379,Anchorage D-1,01/01/2000, 1397773,Horn Mountains,Ridge,AK,02,Matanuska-Susitna,170,620012N,1473028W,62.0033333,-147.5077778,,,,,1491,Talkeetna Mountains A-2,01/01/2000, 1397774,Horn Mountains,Ridge,AK,02,Matanuska-Susitna,170,620130N,1472239W,62.025,-147.3775,,,,,1678,Talkeetna Mountains A-1,01/01/2000, 1397776,Ikathiwik Crater,Crater,AK,02,Bethel (CA),050,601340N,1661411W,60.2277778,-166.2363889,,,,,144,Nunivak Island A-4,01/01/2000, 1397784,Kinaruk River,Stream,AK,02,Bethel (CA),050,603533N,1641943W,60.5925,-164.3286111,603445N,1641458W,60.5791667,-164.2494444,3,Baird Inlet C-7,01/01/2000,02/20/2008 1397787,Kings Mountain,Summit,AK,02,Matanuska-Susitna,170,614453N,1483035W,61.7480556,-148.5097222,,,,,1675,Anchorage C-5,01/01/2000, 1397792,Kugrupaga River,Stream,AK,02,Nome (CA),180,655224N,1663005W,65.8733333,-166.5013889,654501N,1661516W,65.7502778,-166.2544444,34,Teller D-4,01/01/2000, 1397793,Kushluk River,Stream,AK,02,Bethel (CA),050,604441N,1611509W,60.7447222,-161.2525,603507N,1605042W,60.5852778,-160.845,7,Bethel C-7,03/31/1981,06/08/2009 1397796,Kuyungsik River,Gut,AK,02,Wade Hampton (CA),270,612900N,1643613W,61.4833333,-164.6036111,,,,,6,Marshall B-7,03/31/1981, 1397798,Magitchlie Creek,Stream,AK,02,Yukon-Koyukuk (CA),290,633227N,1581230W,63.5408333,-158.2083333,640528N,1582234W,64.0911111,-158.3761111,28,Ophir C-5,03/31/1981,07/21/2009 1397800,Marshall Gulch,Valley,AK,02,Fairbanks North Star,090,650421N,1473210W,65.0725,-147.5361111,650424N,1473002W,65.0733333,-147.5005556,271,Livengood A-2,03/31/1981, 1397808,Middle Fork Chena River,Stream,AK,02,Fairbanks North Star,090,645628N,1461505W,64.9411111,-146.2513889,650532N,1444325W,65.0922222,-144.7236111,252,Big Delta D-5,01/01/2000, 1397810,Moose Creek,Stream,AK,02,Matanuska-Susitna,170,624416N,1462913W,62.7377778,-146.4869444,624501N,1462950W,62.7502778,-146.4972222,803,Gulkana C-5,03/31/1981, 1397812,Munsatli Mountains,Unknown,AK,02,Yukon-Koyukuk (CA),290,634212N,1530036W,63.7033333,-153.01,,,,,575,Medfra C-1,03/31/1981, 1397813,Narogurum River,Stream,AK,02,Dillingham (CA),070,592228N,1600031W,59.3744444,-160.0086111,593001N,1595440W,59.5002778,-159.9111111,43,Goodnews Bay B-3,03/31/1981, 1397814,Mount Kubugakli,Summit,AK,02,Kodiak Island,150,575309N,1550803W,57.8858333,-155.1341667,,,,,725,Karluk D-4,03/31/1981, 1397815,Alaska Range,Range,AK,02,Yukon-Koyukuk (CA),290,623500N,1530500W,62.5833333,-153.0833333,,,,,1555,McGrath C-1,03/31/1981,02/20/2008 1397821,North Fork Bonanza Creek,Stream,AK,02,Yukon-Koyukuk (CA),290,663944N,1503956W,66.6622222,-150.6655556,664600N,1494128W,66.7666667,-149.6911111,260,Bettles C-2,03/31/1981, libkml-1.3.0/testdata/csv/hello.csv000066400000000000000000000004051263603257100172150ustar00rootroot00000000000000name,longitude,latitude,description Hello,-77.066395,-11.968312,Greetings from Lima! There,145.34502,-38.51512,Out There Down Under How,-88.421001,44.970465,How is Wisconsin? Are,13.084501,63.399164,Sorry about that You,140.637898,42.842568,I love you Hokkaido libkml-1.3.0/testdata/csv/lincoln-park-gc-errors.csv000066400000000000000000000023711263603257100224100ustar00rootroot00000000000000Name,Longitude,Latitude,BlueYardage,WhiteYardage,MensHandicap,MensPar,RedYardage,WomensHandicap,WomensPar # This line is considered empty and will count as an error. Next line is fine: 1,-122.494783,37.782353,316,299,3,4,281,3,4 # The following line has a spurious comma offsetting the lat,lon: 2,,-122.497593,37.783407,257,245,11,4,231,13 # The following line has junk for longitude. 3,Junk is not longitude,37.786807,156,140,15,3,133,15,3 # The following line has junk for latitude. 4,-122.501712,fish exist,321,313,7,4,304,11,4 # The following line has junk for latitude and longitude. 5,x,y,359,344,1,4,336,1,4 # This line is missing a few fields at the end. 6,-122.50144,37.784124,285,267,17,4 7,-122.500827,37.781563,334,325,9,4,314,9,4 8,-122.497507,37.781833,170,163,13,3,150,17,3 9,-122.49572,37.782458,309,294,5,4,279,5,4 # The back nine is fine. 10,-122.499431,37.782269,268,256,18,4,246,12,4 11,-122.499748,37.784402,265,260,14,4,247,10,4 12,-122.497511,37.783743,203,193,6,3,177,14,3 13,-122.498759,37.785548,500,486,8,5,464,2,5 14,-122.494481,37.783491,259,251,12,4,242,8,4 15,-122.496357,37.784873,282,277,16,4,272,6,4 16,-122.498096,37.786048,239,229,4,3,219,16,4 17,-122.496866,37.786266,240,230,10,3,318,18,4 18,-122.494135,37.785832,383,376,2,4,368,4,4 libkml-1.3.0/testdata/csv/lincoln-park-gc-style-ids.csv000066400000000000000000000021511263603257100230050ustar00rootroot00000000000000Feature-Id,Name,Longitude,Latitude,BlueYardage,WhiteYardage,MensHandicap,MensPar,RedYardage,WomensHandicap,WomensPar,Style-Id 1,1,-122.494783,37.782353,316,299,3,4,281,3,4,front 2,2,-122.497593,37.783407,257,245,11,4,231,13,4,front 3,3,-122.501432,37.786807,156,140,15,3,133,15,3,front 4,4,-122.501712,37.786355,321,313,7,4,304,11,4,front 5,5,-122.504031,37.78434,359,344,1,4,336,1,4,front 6,6,-122.50144,37.784124,285,267,17,4,251,7,4,front 7,7,-122.500827,37.781563,334,325,9,4,314,9,4,front 8,8,-122.497507,37.781833,170,163,13,3,150,17,3,front 9,9,-122.49572,37.782458,309,294,5,4,279,5,4,front 10,10,-122.499431,37.782269,268,256,18,4,246,12,4,back 11,11,-122.499748,37.784402,265,260,14,4,247,10,4,back 12,12,-122.497511,37.783743,203,193,6,3,177,14,3,back 13,13,-122.498759,37.785548,500,486,8,5,464,2,5,back 14,14,-122.494481,37.783491,259,251,12,4,242,8,4,back 15,15,-122.496357,37.784873,282,277,16,4,272,6,4,back 16,16,-122.498096,37.786048,239,229,4,3,219,16,4,back 17,17,-122.496866,37.786266,240,230,10,3,318,18,4,back 18,18,-122.494135,37.785832,383,376,2,4,368,4,4,back 19,Tee Off,-122.492961,37.78154,,,,,,,,bar libkml-1.3.0/testdata/csv/lincoln-park-gc.csv000066400000000000000000000016311263603257100210740ustar00rootroot00000000000000Name,Longitude,Latitude,BlueYardage,WhiteYardage,MensHandicap,MensPar,RedYardage,WomensHandicap,WomensPar 1,-122.494783,37.782353,316,299,3,4,281,3,4 2,-122.497593,37.783407,257,245,11,4,231,13,4 3,-122.501432,37.786807,156,140,15,3,133,15,3 4,-122.501712,37.786355,321,313,7,4,304,11,4 5,-122.504031,37.78434,359,344,1,4,336,1,4 6,-122.50144,37.784124,285,267,17,4,251,7,4 7,-122.500827,37.781563,334,325,9,4,314,9,4 8,-122.497507,37.781833,170,163,13,3,150,17,3 9,-122.49572,37.782458,309,294,5,4,279,5,4 10,-122.499431,37.782269,268,256,18,4,246,12,4 11,-122.499748,37.784402,265,260,14,4,247,10,4 12,-122.497511,37.783743,203,193,6,3,177,14,3 13,-122.498759,37.785548,500,486,8,5,464,2,5 14,-122.494481,37.783491,259,251,12,4,242,8,4 15,-122.496357,37.784873,282,277,16,4,272,6,4 16,-122.498096,37.786048,239,229,4,3,219,16,4 17,-122.496866,37.786266,240,230,10,3,318,18,4 18,-122.494135,37.785832,383,376,2,4,368,4,4libkml-1.3.0/testdata/csv/quotes.csv000066400000000000000000000002741263603257100174360ustar00rootroot00000000000000Name,Longitude,Latitude,Description "White Bear Lake, MN",-93.00994,45.08468,Somewhere I once lived. Somewhere,-98.484246,39.011902,"This is where ""Somewhere Over the Rainbow"" is from" libkml-1.3.0/testdata/csv/test.csv000066400000000000000000000144351263603257100171010ustar00rootroot000000000000001733|34.7339215|-109.731499|Potter Mesa|1733 meters Apache AZ 1251|33.4794988|-110.3795443|Black Mesa|1251 meters Gila AZ 831|34.3833509|-113.6674339|Black Mesa|831 meters Mohave AZ 1169|34.9525042|-114.3271791|Black Mesa|1169 meters Mohave AZ 1858|36.0247232|-110.5654145|Third Mesa|1858 meters Navajo AZ 1871|35.7194515|-110.3148511|Adams Butte|1871 meters Navajo AZ 1775|32.0336922|-110.1159029|Adams Peak|1775 meters Cochise AZ 1906|35.7466649|-111.6490393|Additional Hill|1906 meters Coconino AZ 517|33.6953164|-112.1201529|Adobe Mountain|517 meters Maricopa AZ 2100|36.8266665|-110.2256865|Agathla Peak|2100 meters Navajo AZ 587|33.0445011|-111.7329097|Agency Peak|587 meters Pinal AZ 267|32.9969905|-113.3321323|Agua Caliente Mountains|267 meters Yuma AZ 520|32.0556166|-113.1998955|Agua Dulce Mountains|520 meters Pima AZ 535|32.6467185|-113.3415732|Aguila Mountains|535 meters Yuma AZ 1491|31.6342535|-111.6370547|Aguirre Peak|1491 meters Pima AZ 1449|36.6741543|-111.6859942|Ah Hol Sah|1449 meters Coconino AZ 1613|31.6756473|-110.0809102|Ajax Hill|1613 meters Cochise AZ 777|32.3356141|-112.9065451|Ajo Peak|777 meters Pima AZ 1458|32.0267327|-112.690707|Mount Ajo|1458 meters Pima AZ 1532|36.3166489|-112.632689|Mount Akaba|1532 meters Coconino AZ 880|31.9070222|-111.8042877|Ali Chukson|880 meters Pima AZ 872|32.9370111|-111.1592798|Allens Peak|872 meters Pinal AZ 2281|36.2502617|-111.9498883|Alsap Butte|2281 meters Coconino AZ 1337|32.2722976|-111.1548216|Amole Peak|1337 meters Pima AZ 1650|36.1963704|-113.3666013|Andrus Point|1650 meters Mohave AZ 1957|36.091928|-111.989332|Angels Gate|1957 meters Coconino AZ 245|32.7039358|-114.0157671|Antelope Hill|245 meters Yuma AZ 426|32.1981136|-113.278232|Antelope Hills|426 meters Pima AZ 1317|33.4047772|-110.3195414|Antelope Hills|1317 meters Graham AZ 1814|36.688595|-113.2082775|Antelope Knoll|1814 meters Mohave AZ 1040|32.6764596|-111.0223303|Antelope Peak|1040 meters Pinal AZ 737|32.8047728|-112.1743078|Antelope Peak|737 meters Pinal AZ 1378|32.8509008|-110.8609402|Antelope Peak|1378 meters Pinal AZ 1760|34.215304|-112.7312892|Antelope Peak|1760 meters Yavapai AZ 2978|33.9264372|-109.6595396|Apache Butte|2978 meters Apache AZ 1578|34.9278023|-110.4451268|Apache Butte|1578 meters Navajo AZ 933|32.2839641|-111.1923231|Apache Peak|933 meters Pima AZ 970|33.8667036|-112.0320966|Apache Peak|970 meters Maricopa AZ 1867|36.115263|-111.8809944|Apollo Temple|1867 meters Coconino AZ 1001|36.135814|-114.5608121|Arch Mountain|1001 meters Mohave AZ 614|32.3533918|-112.8729326|Arkansas Mountain|614 meters Pima AZ 351|33.3480974|-112.7482267|Arlington Mesa|351 meters Maricopa AZ 1468|34.4211304|-113.3821463|Arrastra Mountain|1468 meters Mohave AZ 1778|35.2933475|-110.369296|Arrowhead Butte|1778 meters Navajo AZ 1821|35.3411258|-109.9887317|Arrowhead Butte|1821 meters Navajo AZ 798|31.8442459|-111.8801219|Artesa Mountains|798 meters Pima AZ 889|34.3694628|-113.5815973|Artillery Peak|889 meters Mohave AZ 1527|32.5222936|-110.148692|Ash Creek Black Hills|1527 meters Graham AZ 1657|32.7517349|-109.2614553|Ash Peak|1657 meters Graham AZ 2809|33.8181057|-109.6142586|Aspen Butte|2809 meters Apache AZ 2223|36.0200046|-109.9056709|Atsadahsidahi|2223 meters Apache AZ 193|34.3541809|-114.1530037|Aubrey Hills|193 meters Mohave AZ 783|34.3986274|-113.7979937|Aubrey Peak|783 meters Mohave AZ 1540|34.6630679|-113.7291053|Aubrey Peak|1540 meters Mohave AZ 1738|35.0927844|-113.5157685|Austin Peak|1738 meters Mohave AZ 1608|36.2149855|-111.8359941|Awatubi Crest|1608 meters Coconino AZ 259|32.7739378|-113.4543572|Aztec Hills|259 meters Yuma AZ 2358|31.771195|-111.5956648|Baboquivari Peak|2358 meters Pima AZ 1749|36.7036117|-110.0412332|Baby Rocks Mesa|1749 meters Navajo AZ 1888|36.4236125|-109.3120475|Bad Bug Butte|1888 meters Apache AZ 1958|35.4811213|-110.4517986|Bad Medicine Butte|1958 meters Navajo AZ 864|31.8667416|-112.4318054|Bailey Peak|864 meters Pima AZ 1601|32.5020161|-110.1623033|Baker Hill|1601 meters Graham AZ 416|32.6433812|-113.997989|Baker Peaks|416 meters Yuma AZ 2222|35.9838938|-109.9378939|Balakai Mesa|2222 meters Apache AZ 2122|35.8500079|-109.8340021|Balakai Point|2122 meters Apache AZ 1856|36.9755519|-110.8845853|Balanced Rock Mesa|1856 meters Coconino AZ 1156|34.0194776|-112.252941|Bald Hill|1156 meters Yavapai AZ 1498|31.5245417|-109.5275677|Bald Knob|1498 meters Cochise AZ 841|33.8725343|-112.341276|Baldy Mountain|841 meters Maricopa AZ 1235|31.8461948|-111.3351006|Baldy Peak|1235 meters Pima AZ 3472|33.9061599|-109.5628697|Baldy Peak|3472 meters Apache AZ 2245|31.4434325|-109.9592422|Mount Ballard|2245 meters Cochise AZ 2420|36.7924783|-113.8549633|Mount Bangs|2420 meters Mohave AZ 384|33.0939322|-113.4504708|Baragan Mountain|384 meters Yuma AZ 1395|36.3005407|-111.8796083|Barbenceta Butte|1395 meters Coconino AZ 2674|31.9209243|-109.2806175|Barfoot Peak|2674 meters Cochise AZ 515|33.467822|-111.9562562|Barnes Butte|515 meters Maricopa AZ 2325|32.506183|-110.2798065|Bassett Peak|2325 meters Graham AZ 706|32.4656126|-112.7548728|Batamote Mountains|706 meters Pima AZ 587|32.108395|-112.9507163|Bates Mountains|587 meters Pima AZ 1675|32.6617363|-110.0311909|Battle Mountain|1675 meters Graham AZ 1258|35.0741683|-114.3819034|Battleship Mountain|1258 meters Mohave AZ 783|34.0744668|-113.8082698|Battleship Peak|783 meters La Paz AZ 1941|33.9353266|-110.5353887|Bear Mountain|1941 meters Gila AZ 1050|32.84451|-109.9584151|Bear Springs Knoll|1050 meters Graham AZ 1477|33.8069947|-110.4589954|Beckers Butte|1477 meters Gila AZ 874|32.1472998|-111.0470388|Beehive Peak|874 meters Pima AZ 388|33.40699|-111.967089|Bell Butte|388 meters Maricopa AZ 1927|35.573898|-110.3531854|Bell Butte|1927 meters Navajo AZ 757|33.6447579|-112.9332362|Belmont Mountain|757 meters Maricopa AZ 1046|32.0608333|-112.1425|Ben Nevis Mountain|1046 meters Pima AZ 2006|36.5066483|-113.2066067|Berry Knoll|2006 meters Mohave AZ 1676|36.8391588|-111.3070943|Betay|1676 meters Coconino AZ 1976|35.5775093|-110.2940174|Betony Butte|1976 meters Navajo AZ 1918|35.4058461|-110.0553999|Bidahochi Butte|1918 meters Navajo AZ 1837|33.8269946|-109.946488|Big A Mountain|1837 meters Navajo AZ 1716|36.9286126|-110.0623465|Big Chair|1716 meters Navajo AZ 673|33.1406171|-110.9759463|Big Dome|673 meters Pinal AZ 833|33.6083691|-113.1507443|Big Horn Peak|833 meters Maricopa AZ 2143|34.0631006|-110.0189953|Big Mountain|2143 meters Navajo AZ libkml-1.3.0/testdata/deprecated/000077500000000000000000000000001263603257100167035ustar00rootroot00000000000000libkml-1.3.0/testdata/deprecated/deprecated.kml000066400000000000000000000007321263603257100215120ustar00rootroot00000000000000 BIG little there foo.kml libkml-1.3.0/testdata/gdata/000077500000000000000000000000001263603257100156635ustar00rootroot00000000000000libkml-1.3.0/testdata/gdata/doclist-metafeed.xml000066400000000000000000000270341263603257100216240ustar00rootroot00000000000000 http://docs.google.com/feeds/default/private/full 2009-11-02T22:33:03.910Z Available Documents - kml.bent@gmail.com kml.bent kml.bent@gmail.com 1 http://docs.google.com/feeds/id/document%3A0ARX2bBe7ATEpZHg1a3poY18xOWNwZ2NuN2Qy 2009-11-02T00:46:44.783Z 2009-11-02T00:47:12.693Z 2009-11-02T00:47:12.876Z Document Number One kml.bent kml.bent@gmail.com document:0ARX2bBe7ATEpZHg1a3poY18xOWNwZ2NuN2Qy kml.bent kml.bent@gmail.com 2009-11-02T00:46:44.982Z 0 http://docs.google.com/feeds/id/spreadsheet%3A0AhX2bBe7ATEpdFZseDJZXzlQelNfc2JzRUM4LTJvV3c 2009-10-19T13:51:58.653Z 2009-10-20T01:15:10.681Z 2009-10-20T01:17:46.466Z oz kml.bent kml.bent@gmail.com spreadsheet:0AhX2bBe7ATEpdFZseDJZXzlQelNfc2JzRUM4LTJvV3c kml.bent kml.bent@gmail.com 2009-10-20T01:15:01.289Z 0 http://docs.google.com/feeds/id/spreadsheet%3A0AhX2bBe7ATEpdEp2and4QVRoRkQyU2RfbFhpZmI2RlE 2009-10-19T13:51:15.031Z 2009-10-19T13:51:16.137Z 2009-10-20T01:15:34.080Z gplex kml.bent kml.bent@gmail.com spreadsheet:0AhX2bBe7ATEpdEp2and4QVRoRkQyU2RfbFhpZmI2RlE kml.bent kml.bent@gmail.com 2009-10-20T01:15:33.899Z 0 http://docs.google.com/feeds/id/presentation%3A0ARX2bBe7ATEpZHg1a3poY185Y3hqZnAyZjY 2008-07-21T22:51:21.292Z 2008-07-21T22:54:58.829Z 2009-06-05T02:22:35.721Z GeoWeb_Workshop_GE_Weather kml.bent kml.bent@gmail.com presentation:0ARX2bBe7ATEpZHg1a3poY185Y3hqZnAyZjY kml.bent kml.bent@gmail.com 2008-07-28T02:00:35.730Z 0 libkml-1.3.0/testdata/gdata/feed0.xml000066400000000000000000000004071263603257100173710ustar00rootroot00000000000000 feed0:entry0 feed0:entry1 feed0:entry2 libkml-1.3.0/testdata/gdata/feed1.xml000066400000000000000000000003301263603257100173650ustar00rootroot00000000000000 feed1:entry0 feed1:entry1 libkml-1.3.0/testdata/gdata/feed2.xml000066400000000000000000000001751263603257100173750ustar00rootroot00000000000000 feed2:entry0 libkml-1.3.0/testdata/gdata/picasaweb-album-feed.xml000066400000000000000000000527011263603257100223470ustar00rootroot00000000000000 http://picasaweb.google.com/data/feed/user/bent.hagemark/albumid/5391407703914628289 2009-10-11T18:55:45.902Z mijas-09-10 public http://lh5.ggpht.com/_KmQjrZ_ACBc/StIgvecixME/AAAAAAAACak/H9Cdfa1fEho/s160-c/Mijas0910.jpg oobie http://picasaweb.google.com/bent.hagemark Picasaweb 58 1 1000 5391407703914628289 public 1254603981000 58 442 18485186 bent.hagemark oobie true true http://picasaweb.google.com/data/entry/user/bent.hagemark/albumid/5391407703914628289/photoid/5391407738794724018 2009-10-11T18:15:34.000Z 2009-10-11T18:15:34.747Z 2009-10-11T18:15:34.747Z DSC_1253.JPG 5391407738794724018 5391407703914628289 public 1000 664 306309 1254572447000 2413 true 0 10.0 0.0025 false 46.0 200 1254572447000 2bba77e07b3f93b8325920a82288904d oobie DSC_1253.JPG 36.5948752 -4.6382817 http://picasaweb.google.com/data/entry/user/bent.hagemark/albumid/5391407703914628289/photoid/5391407898314993426 2009-10-11T18:16:11.000Z 2009-10-11T18:16:11.620Z 2009-10-11T18:16:11.620Z DSC_1257.JPG 5391407898314993426 5391407703914628289 public 1000 664 353117 1254572641000 2417 true 0 8.0 0.0040 false 18.0 200 1254572641000 8928ba835e3295b9a9ec7199ddf44093 oobie DSC_1257.JPG 36.5942926 -4.6379643 http://picasaweb.google.com/data/entry/user/bent.hagemark/albumid/5391407703914628289/photoid/5391408073958011170 2009-10-11T18:16:52.000Z 2009-10-11T18:16:52.203Z 2009-10-11T18:16:52.203Z DSC_1263.JPG 5391408073958011170 5391407703914628289 public 1000 664 417807 1254572964000 2423 true 0 10.0 0.0025 false 18.0 200 1254572964000 dd6278501d6dd6614a6ea6a372a220de oobie DSC_1263.JPG 36.5937561 -4.6388724 http://picasaweb.google.com/data/entry/user/bent.hagemark/albumid/5391407703914628289/photoid/5391408463124245698 2009-10-11T18:18:22.000Z 2009-10-11T18:18:22.137Z 2009-10-11T18:18:22.137Z DSC_1273.JPG 5391408463124245698 5391407703914628289 public 1000 664 394940 1254573577000 2434 true 0 9.0 0.003125 false 55.0 200 1254573577000 9fb23ec308cc7cd2fb215de19a46c1a4 oobie DSC_1273.JPG 36.5928372 -4.638877 http://picasaweb.google.com/data/entry/user/bent.hagemark/albumid/5391407703914628289/photoid/5391409535852007634 2009-10-11T18:22:32.000Z 2009-10-11T18:22:32.025Z 2009-10-11T18:22:32.025Z DSC_1308.JPG 5391409535852007634 5391407703914628289 public 1000 664 330970 1254578543000 2471 true 0 5.6 0.0020 false 55.0 200 1254578543000 162c37e645fe9720248bbdc58becc91c oobie DSC_1308.JPG 36.5950068 -4.6372198 libkml-1.3.0/testdata/gdata/picasaweb-metafeed.xml000066400000000000000000001253611263603257100221230ustar00rootroot00000000000000 http://picasaweb.google.com/data/feed/user/ben.gardenfield 2009-11-12T04:26:58.509Z ben.gardenfield http://lh4.ggpht.com/_KmQjrZ_ACBc/AAAA7lsnQJA/AAAAAAAAAAA/_sOudLlbYsY/s64-c/ben.gardenfield.jpg green-thumb http://picasaweb.google.com/ben.gardenfield Picasaweb 17 1 1000 ben.gardenfield green-thumb http://lh4.ggpht.com/_KmQjrZ_ACBc/AAAA7lsnQJA/AAAAAAAAAAA/_sOudLlbYsY/s64-c/ben.gardenfield.jpg 1073741824 719218397 500 http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5401835229645565361 2009-11-07T03:06:31.000Z 2009-11-08T21:15:26.599Z 2009-11-08T21:15:26.599Z sydney-manly-nov-09 public green-thumb http://picasaweb.google.com/ben.gardenfield 5401835229645565361 public 1257563191000 286 214 96241558 ben.gardenfield green-thumb green-thumb sydney-manly-nov-09 http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5391416077399944721 2009-10-05T19:39:27.000Z 2009-10-11T19:28:51.378Z 2009-10-11T19:28:51.378Z munich-09-10 public green-thumb http://picasaweb.google.com/ben.gardenfield 5391416077399944721 public 1254771567000 79 421 26256681 ben.gardenfield green-thumb green-thumb munich-09-10 http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5391407703914628289 2009-10-03T21:06:21.000Z 2009-10-11T18:55:45.902Z 2009-10-11T18:55:45.902Z mijas-09-10 public green-thumb http://picasaweb.google.com/ben.gardenfield 5391407703914628289 public 1254603981000 58 442 18485186 ben.gardenfield green-thumb green-thumb mijas-09-10 http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5391073910489697297 2009-09-29T17:17:40.000Z 2009-10-10T21:51:03.109Z 2009-10-10T21:51:03.109Z cadiz-ronda-sep09 public green-thumb http://picasaweb.google.com/ben.gardenfield 5391073910489697297 public 1254244660000 326 174 90900551 ben.gardenfield green-thumb green-thumb cadiz-ronda-sep09 http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5386539283323026545 2009-09-27T23:23:51.000Z 2009-09-28T16:43:56.993Z 2009-09-28T16:43:56.993Z marbella-09-09-28 public green-thumb http://picasaweb.google.com/ben.gardenfield 5386539283323026545 public 1254093831000 165 335 57716622 ben.gardenfield green-thumb green-thumb marbella-09-09-28 http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5359636961724674097 2009-06-27T16:41:26.000Z 2009-07-18T04:07:54.300Z 2009-07-18T04:07:54.300Z Floating City near Siem Reap public green-thumb http://picasaweb.google.com/ben.gardenfield 5359636961724674097 public 1246120886000 59 441 16860350 ben.gardenfield green-thumb green-thumb Floating City near Siem Reap http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5353103831368495329 2009-06-26T19:31:46.000Z 2009-07-05T20:08:40.452Z 2009-07-05T20:08:40.452Z Ta Prohm public green-thumb http://picasaweb.google.com/ben.gardenfield 5353103831368495329 public 1246044706000 56 444 56258835 ben.gardenfield green-thumb green-thumb Ta Prohm http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5353100272105805777 2009-06-26T18:38:55.000Z 2009-06-30T12:55:10.140Z 2009-06-30T12:55:10.140Z Angkor Thom public green-thumb http://picasaweb.google.com/ben.gardenfield 5353100272105805777 public 1246041535000 32 468 34150010 ben.gardenfield green-thumb green-thumb Angkor Thom http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5353097419729189985 2009-06-26T17:55:22.000Z 2009-07-05T20:09:20.038Z 2009-07-05T20:09:20.038Z Bayon public green-thumb http://picasaweb.google.com/ben.gardenfield 5353097419729189985 public 1246038922000 29 471 28074641 ben.gardenfield green-thumb green-thumb Bayon http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5353066396923070593 2009-06-26T17:22:59.000Z 2009-07-05T20:11:04.649Z 2009-07-05T20:11:04.649Z Angkor Wat public green-thumb http://picasaweb.google.com/ben.gardenfield 5353066396923070593 public 1246036979000 94 406 79437337 ben.gardenfield green-thumb green-thumb Angkor Wat http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5359635643499248081 2009-06-26T01:26:15.000Z 2009-07-18T03:27:04.970Z 2009-07-18T03:27:04.970Z Phnom Penh takeoff public green-thumb http://picasaweb.google.com/ben.gardenfield 5359635643499248081 public 1245979575000 11 489 1481603 ben.gardenfield green-thumb green-thumb Phnom Penh takeoff http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5353357613135444001 2009-06-23T07:00:00.000Z 2009-07-05T20:04:54.983Z 2009-07-05T20:04:54.983Z Field Trip public green-thumb http://picasaweb.google.com/ben.gardenfield 5353357613135444001 public 1245740400000 198 302 57398938 ben.gardenfield green-thumb green-thumb Field Trip http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5353055026156695633 2009-06-22T20:48:00.000Z 2009-07-05T20:12:09.625Z 2009-07-05T20:12:09.625Z Phnom Penh public green-thumb http://picasaweb.google.com/ben.gardenfield 5353055026156695633 public 1245703680000 121 379 85591681 ben.gardenfield green-thumb green-thumb Phnom Penh http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5353357001423431505 2009-06-22T07:00:00.000Z 2009-07-05T20:06:10.441Z 2009-07-05T20:06:10.441Z Killing Fields public green-thumb http://picasaweb.google.com/ben.gardenfield 5353357001423431505 public 1245654000000 93 407 28756973 ben.gardenfield green-thumb green-thumb Killing Fields http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5353341029351904625 2009-06-22T02:46:10.000Z 2009-07-01T05:24:28.587Z 2009-07-01T05:24:28.587Z cambo-geo public green-thumb http://picasaweb.google.com/ben.gardenfield 5353341029351904625 public 1245638770000 115 385 38198558 ben.gardenfield green-thumb green-thumb cambo-geo http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5335715514789456289 2009-05-14T16:21:17.000Z 2009-05-15T00:28:06.653Z 2009-05-15T00:28:06.653Z Drop Box Default album for newly uploaded photos. private green-thumb http://picasaweb.google.com/ben.gardenfield 5335715514789456289 private 1242318077000 5 495 46820 ben.gardenfield green-thumb green-thumb Default album for newly uploaded photos. Drop Box http://picasaweb.google.com/data/entry/user/ben.gardenfield/albumid/5333881821628355409 2009-05-09T17:45:36.000Z 2009-07-04T18:55:17.505Z 2009-07-04T18:55:17.505Z green-thumbcafe private green-thumb http://picasaweb.google.com/ben.gardenfield 5333881821628355409 private 1241891136000 26 474 3362053 ben.gardenfield green-thumb green-thumb green-thumbcafe libkml-1.3.0/testdata/gmaps/000077500000000000000000000000001263603257100157125ustar00rootroot00000000000000libkml-1.3.0/testdata/gmaps/create-map-result.xml000066400000000000000000000026661263603257100220000ustar00rootroot00000000000000 http://maps.google.com/maps/feeds/maps/201514259179526663268/00047559cc90a454dec4e 2009-10-07T15:14:11.413Z 2009-10-07T15:14:11.413Z 2009-10-07T15:14:11.413Z farshing fooshing Bent libkml-1.3.0/testdata/gmaps/feature-feed.xml000066400000000000000000000175271263603257100210040ustar00rootroot00000000000000http://maps.google.com/maps/feeds/features/201514259179526663268/00047417ce7cd9714554c2009-09-21T15:14:43.786ZMyGreatMap414http://maps.google.com/maps/feeds/features/201514259179526663268/00047417ce7cd9714554c/00047417d1b450aab73a22009-09-21T15:05:58.167Z2009-09-21T15:08:01.560Z2009-09-21T15:08:01.560ZMontanaMontanaThis is a point in the middle of Montana.

The icon is a red paddle with a black dot.]]>
-110.478516,46.920255,0.0
BentBent
http://maps.google.com/maps/feeds/features/201514259179526663268/00047417ce7cd9714554c/00047417e04201f655cb52009-09-21T15:10:02.334Z2009-09-21T15:11:02.867Z2009-09-21T15:11:02.867ZCanadian borderCanadian borderGo north of this line from Montana and you're in Canada!

This line is red, width 5, opacity 85.]]>
1-117.246094,49.124219,0.0 -104.238281,49.109838,0.0
BentBent
http://maps.google.com/maps/feeds/features/201514259179526663268/00047417ce7cd9714554c/00047417e3ddca65752252009-09-21T15:11:02.875Z2009-09-21T15:12:04.138Z2009-09-21T15:12:04.138ZI90 from Missoula to ButteI90 from Missoula to ButteThis traces I90 as indicated.

This is a green line of width 4 and opacity 90.]]>
1-114.191895,47.010226,0.0 -112.719727,46.13417,0.0
BentBent
http://maps.google.com/maps/feeds/features/201514259179526663268/00047417ce7cd9714554c/00047417eb1fd85dddab52009-09-21T15:13:04.645Z2009-09-21T15:14:43.786Z2009-09-21T15:14:43.786ZGlacier National ParkGlacier National ParkA natural wonder

The outline is a red line of width 4,
opacity 100, the fill is yellow with opacity 35.
]]>
1-113.615112,48.983822,0.0 -113.620605,48.929718,0.0 -113.477783,48.774293,0.0 -113.285522,48.447422,0.0 -113.587646,48.246626,0.0 -113.834839,48.443778,0.0 -114.11499,48.498408,0.0 -114.44458,48.983822,0.0 -113.615112,48.983822,0.0
BentBent
libkml-1.3.0/testdata/gmaps/gsheet-list-feed.xml000066400000000000000000000142561263603257100215750ustar00rootroot00000000000000 http://spreadsheets.google.com/feeds/list/tVlx2Y_9PzS_sbsEC8-2oWw/od6/private/full 2009-10-20T01:15:18.783Z Sheet1 kml.bent kml.bent@gmail.com 5 1 http://spreadsheets.google.com/feeds/list/tVlx2Y_9PzS_sbsEC8-2oWw/od6/cokwr 2009-10-20T01:15:18.783Z 2009-10-20T01:15:18.783Z sydney airport longitude: 151.173688796372, latitude: -33.940134018065 sydney airport 151.173688796372 -33.940134018065 http://spreadsheets.google.com/feeds/list/tVlx2Y_9PzS_sbsEC8-2oWw/od6/cpzh4 2009-10-20T01:15:18.783Z 2009-10-20T01:15:18.783Z opera house longitude: 151.215350963598, latitude: -33.8562478777676 opera house 151.215350963598 -33.8562478777676 http://spreadsheets.google.com/feeds/list/tVlx2Y_9PzS_sbsEC8-2oWw/od6/cre1l 2009-10-20T01:15:18.783Z 2009-10-20T01:15:18.783Z sydney westin longitude: 151.207748, latitude: -33.867792 sydney westin 151.207748 -33.867792 http://spreadsheets.google.com/feeds/list/tVlx2Y_9PzS_sbsEC8-2oWw/od6/chk2m 2009-10-20T01:15:18.783Z 2009-10-20T01:15:18.783Z croc hotel longitude: 132.831455817379, latitude: -12.6704922515546 croc hotel 132.831455817379 -12.6704922515546 http://spreadsheets.google.com/feeds/list/tVlx2Y_9PzS_sbsEC8-2oWw/od6/ciyn3 2009-10-20T01:15:18.783Z 2009-10-20T01:15:18.783Z jim jim falls longitude: 132.839305789228, latitude: -13.272837656375 jim jim falls 132.839305789228 -13.272837656375 libkml-1.3.0/testdata/gmaps/gsheet-metafeed.xml000066400000000000000000000061461263603257100214720ustar00rootroot00000000000000 http://spreadsheets.google.com/feeds/spreadsheets/private/full 2009-10-19T14:01:16.419Z Available Spreadsheets - kml.bent@gmail.com 2 1 http://spreadsheets.google.com/feeds/spreadsheets/tVlx2Y_9PzS_sbsEC8-2oWw 2009-10-19T13:59:42.529Z oz kml.bent kml.bent@gmail.com http://spreadsheets.google.com/feeds/spreadsheets/tJvjwxAThFD2Sd_lXifb6FQ 2009-10-19T13:51:16.137Z gplex kml.bent kml.bent@gmail.com libkml-1.3.0/testdata/gmaps/gsheet-worksheet-feed.xml000066400000000000000000000053271263603257100226340ustar00rootroot00000000000000 http://spreadsheets.google.com/feeds/worksheets/tVlx2Y_9PzS_sbsEC8-2oWw/private/full 2009-10-19T14:00:56.006Z oz kml.bent kml.bent@gmail.com 1 1 http://spreadsheets.google.com/feeds/worksheets/tVlx2Y_9PzS_sbsEC8-2oWw/od6 2009-10-19T14:00:56.006Z 2009-10-19T14:00:56.006Z Sheet1 100 20 libkml-1.3.0/testdata/gmaps/metafeed.xml000066400000000000000000000114701263603257100202110ustar00rootroot00000000000000 http://maps.google.com/maps/feeds/maps/201514259179526663268 2009-09-16T21:23:37.745Z My maps Bent http://maps.google.com/maps/feeds/maps/201514259179526663268/0004687a1a3e44d72b6b4 2009-04-26T19:19:02.429Z 2009-04-26T19:19:51.863Z 2009-04-26T19:19:51.863Z alaska a public map of alaska created in "my maps" Bent http://maps.google.com/maps/feeds/maps/201514259179526663268/0004683fb7cc18fd06bec 2009-04-23T21:39:42.677Z 2009-04-26T19:11:42.146Z 2009-04-26T19:11:42.146Z canada this is stuff about canada Bent http://maps.google.com/maps/feeds/maps/201514259179526663268/0004683df567cb63c5f79 2009-04-23T19:33:46.356Z 2009-04-24T21:59:06.974Z 2009-04-24T21:59:06.974Z this is the title this is the description Bent libkml-1.3.0/testdata/gpx/000077500000000000000000000000001263603257100154015ustar00rootroot00000000000000libkml-1.3.0/testdata/gpx/trkpts.gpx000066400000000000000000000415101263603257100174510ustar00rootroot00000000000000 ACTIVE LOG #2 1 3012.428223 3011.467285 3010.505859 3009.544434 3009.544434 3013.389648 3017.715820 3021.080078 3020.118652 3023.964355 3028.290527 3028.290527 3033.097168 3032.616211 3036.942383 3039.826172 3044.151855 3046.074707 3048.958496 3047.997070 3051.361816 3049.919922 3050.400391 3054.245605 3053.284180 3052.323242 3056.648926 3060.975098 3059.052246 3055.687500 3051.842285 3052.323242 3052.323242 3049.438965 3050.400391 3050.400391 3046.074707 3047.516602 3047.997070 3049.919922 3054.245605 3056.648926 3060.975098 3064.339844 3068.665527 3068.665527 3070.588379 3074.914062 3080.201172 3082.124023 3080.682129 3078.759277 3079.720703 3083.565918 3083.565918 3084.527344 3085.488770 3088.853027 3088.853027 3091.256348 3090.775879 3093.660156 3097.024414 3097.505371 3100.389160 3098.466797 3101.350586 3102.312012 3100.389160 3100.389160 3097.985840 3097.985840 3097.505371 3100.389160 3100.870117 3101.831055 3101.350586 3103.272949 3102.792480 3101.831055 3101.831055 3102.792480 3101.831055 3104.234375 3108.560547 3108.079590 3112.405273 3111.924805 3110.002441 3111.924805 3111.444336 3111.924805 3115.289551 3116.731445 3119.615234 3122.499023 3122.499023 3118.653809 3121.538086 3118.653809 3121.538086 3121.538086 3120.095703 3121.057129 ACTIVE LOG #3 2 3124.422363 3125.864258 3124.902832 3125.383789 3125.864258 3124.902832 3124.902832 3125.864258 3124.902832 3125.383789 3125.864258 3125.383789 3126.344727 3126.344727 3126.344727 3124.902832 3124.422363 3124.902832 3124.902832 3125.383789 3124.422363 3125.864258 3125.383789 3124.902832 3124.902832 3123.941406 3123.941406 3125.383789 3124.902832 3124.902832 3125.864258 3126.344727 3125.864258 3125.864258 3125.383789 3125.864258 3126.344727 3125.864258 3125.864258 libkml-1.3.0/testdata/gx/000077500000000000000000000000001263603257100152215ustar00rootroot00000000000000libkml-1.3.0/testdata/gx/all-gx-altitudemodes-golden.kml000066400000000000000000000062161263603257100232260ustar00rootroot00000000000000 -30 30 230 relativeToSeaFloor -30 30 1230 clampToSeaFloor 0 200 relativeToSeaFloor underwater.kml 1 relativeToSeaFloor -1.3,68.3,0 1 clampToSeaFloor -84,25,0 -92,25,0 relativeToSeaFloor 19,37,0 19,41,0 13,41,0 13,37,0 19,37,0 clampToSeaFloor -102,11,0 -107,29,0 -112,14,0 -102,11,0 relativeToSeaFloor 110 -15 shipwreck.jpg clampToSeaFloor libkml-1.3.0/testdata/gx/all-gx-altitudemodes.kml000066400000000000000000000063701263603257100217610ustar00rootroot00000000000000 -30 30 230 relativeToSeaFloor -30 30 1230 clampToSeaFloor 0 200 relativeToSeaFloor underwater.kml 1 relativeToSeaFloor -1.3,68.3 1 clampToSeaFloor -84,25 -92,25 relativeToSeaFloor 19,37 19,41 13,41 13,37 19,37 clampToSeaFloor -102,11 -107,29 -112,14 -102,11 relativeToSeaFloor 110 -15 shipwreck.jpg clampToSeaFloor libkml-1.3.0/testdata/gx/all-gx-golden.kml000066400000000000000000000140601263603257100203610ustar00rootroot00000000000000 clampToSeaFloor gx:altitudeMode Example 146.806 12.219 -60 70 6300 relativeToSeaFloor 1 relativeToSeaFloor 146.825,12.233,400 146.82,12.222,400 146.812,12.212,400 146.796,12.209,400 146.788,12.205,400 Eiffel Tower Located in Paris, France. This description balloon opens when the Placemark is loaded. 1 2.294785,48.858093,0 42 smooth bounce pause 6.5 10 4.1 170.157 -43.671 9700 -6.333 33.5 0 cntowerfacts.mp3 2000-07-08T17:52:02Z 2018-07-09T02:01:57Z -122 37 1990-08-04 1 SAF 1 display name SAF 2 display name 1st SAD value for SAF 1 2nd SAD value for SAF 1 3rd SAD value for SAF 1 2 3 4 absolute 2010-02-07T19:57:44Z 2010-02-07T19:57:45Z -122.250671 37.514194 14.08 -122.250671 37.514194 9.27 1 2 3 4 5 6 0 0 0 180 0 0 1 1 1 files/Untitled_0.dae libkml-1.3.0/testdata/gx/all-gx.kml000066400000000000000000000163061263603257100171200ustar00rootroot00000000000000 clampToSeaFloor gx:altitudeMode Example 146.806 12.219 -60 70 6300 relativeToSeaFloor 1 relativeToSeaFloor 146.825,12.233,400 146.820,12.222,400 146.812,12.212,400 146.796,12.209,400 146.788,12.205,400 Eiffel Tower Located in Paris, France. This description balloon opens when the Placemark is loaded. 1 2.294785,48.858093,0 42 smooth bounce pause 6.5 10.0 4.1 170.157 -43.671 9700 -6.333 33.5 0 cntowerfacts.mp3 2000-07-08T17:52:02Z 2018-07-09T02:01:57Z -122 37 1990-08-04 1 SAF 1 display name SAF 2 display name 1st SAD value for SAF 1 2nd SAD value for SAF 1 3rd SAD value for SAF 1 2 3 4 absolute 2010-02-07T19:57:44Z 2010-02-07T19:57:45Z -122.250671 37.514194 14.08 -122.250671 37.514194 9.27 1 2 3 4 5 6 0 0 0 180 0 0 1 1 1 files/Untitled_0.dae libkml-1.3.0/testdata/kml/000077500000000000000000000000001263603257100153665ustar00rootroot00000000000000libkml-1.3.0/testdata/kml/100_nested_folders.kml000066400000000000000000000042131263603257100214530ustar00rootroot00000000000000 libkml-1.3.0/testdata/kml/101_nested_elements.kml000066400000000000000000000047641263603257100216450ustar00rootroot00000000000000 libkml-1.3.0/testdata/kml/101_nested_folders.kml000066400000000000000000000042611263603257100214570ustar00rootroot00000000000000 libkml-1.3.0/testdata/kml/all-altitudemodes-golden.kml000066400000000000000000000065241263603257100227610ustar00rootroot00000000000000 -68.01403801019 -22.33657619233 0 27.113655770374 65.117194544486 4630.86597395819 clampToGround 126.414570808411 33.2519314668248 11 0 80 0 relativeToGround 27.2205658918 23.4514961082 -31.3849931082 -35.1540628918 0 0 absolute 256 -1 0 0 0 relativeToGround 116.98527466,-1.046186481,20.78 0 absolute -1.1117,52.6794,7360.92 -1.1683,52.743,7719.06 -1.2189,52.8006,7962.9 -1.2522,52.8392,8191.5 -1.3358,52.9324,8602.98 -1.3862,52.9811,8900.16 relativeToGround 19,37,0 19,41,0 13,41,0 13,37,0 19,37,0 1 relativeToGround 3.666667,56.5,300 4,56.5,300 4,56.75,300 3.666667,56.75,300 3.666667,56.5,300 relativeToGround -57.5 -51.8 0 4500 absolute 90 -90 180 -180 libkml-1.3.0/testdata/kml/all-altitudemodes.kml000066400000000000000000000071771263603257100215200ustar00rootroot00000000000000 -68.01403801019 -22.33657619233 0 27.113655770374 65.117194544486 4630.865973958193 clampToGround 126.414570808411 33.2519314668248 11 0 80 0 relativeToGround 27.2205658918 23.4514961082 -31.3849931082 -35.1540628918 0 0 absolute 256 -1 0 0 0 relativeToGround 116.98527466,-1.046186481,20.78 0 absolute -1.1117,52.6794,7360.92 -1.1683,52.743,7719.060 -1.2189,52.8006,7962.90 -1.2522,52.8392,8191.5 -1.3358,52.9324,8602.98 -1.3862,52.9811,8900.16 relativeToGround 19, 37 19, 41 13, 41 13, 37 19, 37 1 relativeToGround 3.666667,56.5,300.00 4,56.5,300.00 4,56.75,300.00 3.666667,56.75,300.00 3.666667,56.5,300.00 relativeToGround -57.5 -51.8 0 4500 absolute 90 -90 180 -180 libkml-1.3.0/testdata/kml/all-arrays-golden.kml000066400000000000000000000104621263603257100214130ustar00rootroot00000000000000 #dummy libkml-1.3.0/testdata/kml/all-arrays.kml000066400000000000000000000137771263603257100201610ustar00rootroot00000000000000 #dummy libkml-1.3.0/testdata/kml/all-itemicon-states-golden.kml000066400000000000000000000155351263603257100232300ustar00rootroot00000000000000 ItemIcon examples 1 Static icons 1 open folder #open_folder -100,37.011,0 closed folder #closed_folder -100,37.01,0 open network link #open_netlink -100,37.009,0 closed network link #closed_netlink -100,37.008,0 open error #open_error -100,37.007,0 closed error #closed_error -100,37.006,0 open_fetching0 #open_fetching0 -100,37.005,0 open_fetching1 #open_fetching1 -100,37.004,0 open_fetching2 #open_fetching2 -100,37.003,0 closed_fetching0 #closed_fetching0 -100,37.002,0 closed_fetching1 #closed_fetching1 -100,37.001,0 closed_fetching2 #closed_fetching2 -100,37,0 Anmiated fetches 1 open fetching 0 #open_fetching_anim http://dev.keyhole.com/cgi-bin/waitonemin.py closed fetching 0 #closed_fetching_anim http://dev.keyhole.com/cgi-bin/waitonemin.py libkml-1.3.0/testdata/kml/all-itemicon-states-input.kml000066400000000000000000000155031263603257100231120ustar00rootroot00000000000000 ItemIcon examples 1 Static icons 1 open folder #open_folder -100.000,37.011 closed folder #closed_folder -100.000,37.010 open network link #open_netlink -100.000,37.009 closed network link #closed_netlink -100.000,37.008 open error #open_error -100.000,37.007 closed error #closed_error -100.000,37.006 open_fetching0 #open_fetching0 -100.000,37.005 open_fetching1 #open_fetching1 -100.000,37.004 open_fetching2 #open_fetching2 -100.000,37.003 closed_fetching0 #closed_fetching0 -100.000,37.002 closed_fetching1 #closed_fetching1 -100.000,37.001 closed_fetching2 #closed_fetching2 -100.000,37.000 Anmiated fetches 1 open fetching 0 #open_fetching_anim http://dev.keyhole.com/cgi-bin/waitonemin.py closed fetching 0 #closed_fetching_anim http://dev.keyhole.com/cgi-bin/waitonemin.py libkml-1.3.0/testdata/kml/all-unknown-attrs-golden.kml000066400000000000000000000150661263603257100227510ustar00rootroot00000000000000 libkml-1.3.0/testdata/kml/all-unknown-attrs-input.kml000066400000000000000000000170311263603257100226320ustar00rootroot00000000000000 libkml-1.3.0/testdata/kml/all-unknown-golden.kml000066400000000000000000000176571263603257100216260ustar00rootroot00000000000000 b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b libkml-1.3.0/testdata/kml/all-unknown-input.kml000066400000000000000000000204611263603257100215000ustar00rootroot00000000000000 b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b libkml-1.3.0/testdata/kml/badcoords-golden.kml000066400000000000000000000005071263603257100213030ustar00rootroot00000000000000 Continental Convergent Boundary -55.8097,-60.700099,0 -55.0666,-60.7630997,0 -54.308998,-60.9776,0 -54.300701,-61.5102,0 libkml-1.3.0/testdata/kml/badcoords.kml000066400000000000000000000012261263603257100200340ustar00rootroot00000000000000 Continental Convergent Boundary -55.809700,-60.700099,0,-55.066600,-60.7630997,0,-54.308998,-60.977600,0,-54.300701,-61.510200,0 libkml-1.3.0/testdata/kml/billion.kml000066400000000000000000000026701263603257100175300ustar00rootroot00000000000000 ]> &laugh30; libkml-1.3.0/testdata/kml/ge-point.kml000066400000000000000000000022761263603257100176240ustar00rootroot00000000000000 KmlFile normal #sn_ylw-pushpin highlight #sh_ylw-pushpin Point 12.487995 47.969918 1000 relativeToGround #msn_ylw-pushpin 12.487995,47.969918 libkml-1.3.0/testdata/kml/gnis-ak-first-101.kml000066400000000000000000004710661263603257100210660ustar00rootroot00000000000000 normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight normal highlight Pacific Ocean #style-Sea CA 06 Mendocino 045 391837N 1235041W 0 Mendocino 01/19/1981 06/19/2007 -123.8447222,39.3102778,0 Cape Hinchinbrook #style-Cape AK 02 Valdez-Cordova (CA) 261 601405N 1463830W 7 Cordova A-8 01/01/2000 02/05/2009 -146.6416667,60.2347222,0 Delenia Island #style-Island AK 02 Valdez-Cordova (CA) 261 602022N 1480818W 0 Seward B-4 01/01/2000 -148.1383333,60.3394444,0 Alaskaland #style-Park AK 02 Fairbanks North Star 090 645022N 1474612W 134 Fairbanks D-2 01/01/2000 -147.77,64.8394444,0 Badger Road Baptist Church #style-Church AK 02 Fairbanks North Star 090 644900N 1473358W 139 Fairbanks D-2 01/01/2000 -147.5661111,64.8166667,0 Barnes Creek #style-Stream AK 02 Fairbanks North Star 090 650005N 1471738W 650049N 1472244W 65.0136111 -147.3788889 373 Livengood A-1 01/01/2000 -147.2938889,65.0013889,0 Barnette School #style-School AK 02 Fairbanks North Star 090 645019N 1474339W 136 Fairbanks D-2 01/01/2000 -147.7275,64.8386111,0 Bentley Park #style-Park AK 02 Fairbanks North Star 090 645011N 1474139W 130 Fairbanks D-2 01/01/2000 -147.6941667,64.8363889,0 Big Horn #style-Locale AK 02 Fairbanks North Star 090 644328N 1471842W 154 Fairbanks C-1 01/01/2000 -147.3116667,64.7244444,0 Birch Hill Cemetery #style-Cemetery AK 02 Fairbanks North Star 090 645142N 1474011W 187 Fairbanks D-2 01/01/2000 -147.6697222,64.8616667,0 Birch School #style-School AK 02 Fairbanks North Star 090 645046N 1473558W 137 Fairbanks D-2 01/01/2000 -147.5994444,64.8461111,0 Chena River Campground #style-Locale AK 02 Fairbanks North Star 090 645022N 1474829W 135 Fairbanks D-2 01/01/2000 -147.8080556,64.8394444,0 Chena River State Recreation Area #style-Park AK 02 Fairbanks North Star 090 645500N 1462000W 225 Big Delta D-5 01/01/2000 03/30/2009 -146.3333333,64.9166667,0 Chena School #style-School AK 02 Fairbanks North Star 090 644939N 1473957W 136 Fairbanks D-2 01/01/2000 -147.6658333,64.8275,0 Clay Street Cemetery #style-Cemetery AK 02 Fairbanks North Star 090 645030N 1474217W 133 Fairbanks D-2 01/01/2000 -147.7047222,64.8416667,0 Creamers Field State Game Refuge #style-Park AK 02 Fairbanks North Star 090 645215N 1474400W 137 Fairbanks D-2 01/01/2000 -147.7333333,64.8708333,0 Denali School #style-School AK 02 Fairbanks North Star 090 645024N 1474450W 136 Fairbanks D-2 01/01/2000 -147.7472222,64.84,0 Dream Gulch #style-Valley AK 02 Fairbanks North Star 090 650349N 1470804W 650345N 1470727W 65.0625 -147.1241667 316 Livengood A-1 01/01/2000 -147.1344444,65.0636111,0 Emily Ticasua Ivanhoff Brown Elementary School #style-School AK 02 Fairbanks North Star 090 644931N 1473138W 151 Fairbanks D-2 01/01/2000 -147.5272222,64.8252778,0 Ester #style-Populated-Place AK 02 Fairbanks North Star 090 645050N 1480052W 224 Fairbanks D-3 01/01/2000 12/01/2008 -148.0144444,64.8472222,0 Fairbanks Country Club #style-Locale AK 02 Fairbanks North Star 090 645239N 1474921W 171 Fairbanks D-2 01/01/2000 -147.8225,64.8775,0 Fox Spring #style-Spring AK 02 Fairbanks North Star 090 645752N 1473726W 243 Fairbanks D-2 01/01/2000 -147.6238889,64.9644444,0 Glass Park #style-Park AK 02 Fairbanks North Star 090 645013N 1474058W 136 Fairbanks D-2 01/01/2000 -147.6827778,64.8369444,0 Gold Hill Substation #style-Locale AK 02 Fairbanks North Star 090 645116N 1475515W 190 Fairbanks D-2 01/01/2000 -147.9208333,64.8544444,0 Grace and Truth Chapel #style-Church AK 02 Fairbanks North Star 090 645716N 1473739W 224 Fairbanks D-2 01/01/2000 -147.6275,64.9544444,0 Harding Lake State Recreation Area #style-Park AK 02 Fairbanks North Star 090 642626N 1465150W 224 Big Delta B-6 01/01/2000 -146.8638889,64.4405556,0 Hunter School #style-School AK 02 Fairbanks North Star 090 644958N 1474344W 136 Fairbanks D-2 01/01/2000 -147.7288889,64.8327778,0 Immaculate Conception School #style-School AK 02 Fairbanks North Star 090 645107N 1474247W 132 Fairbanks D-2 01/01/2000 -147.7130556,64.8519444,0 Joy School #style-School AK 02 Fairbanks North Star 090 645142N 1474319W 136 Fairbanks D-2 01/01/2000 -147.7219444,64.8616667,0 Kiwanis Park #style-Park AK 02 Fairbanks North Star 090 645028N 1474541W 135 Fairbanks D-2 01/01/2000 -147.7613889,64.8411111,0 Lathrop High School #style-School AK 02 Fairbanks North Star 090 645010N 1474351W 136 Fairbanks D-2 01/01/2000 -147.7308333,64.8361111,0 Liwa Lake #style-Lake AK 02 Fairbanks North Star 090 645246N 1473518W 187 Fairbanks D-2 01/01/2000 -147.5883333,64.8794444,0 Mount Lulu Fairbanks #style-Summit AK 02 Fairbanks North Star 090 645648N 1473200W 540 Fairbanks D-2 01/01/2000 -147.5333333,64.9466667,0 Main Junior High School #style-School AK 02 Fairbanks North Star 090 645024N 1474308W 136 Fairbanks D-2 01/01/2000 -147.7188889,64.84,0 McNair Woods #style-Woods AK 02 Fairbanks North Star 090 644932N 1473414W 137 Fairbanks D-2 01/01/2000 -147.5705556,64.8255556,0 McKinley School #style-School AK 02 Fairbanks North Star 090 644926N 1474043W 136 Fairbanks D-2 01/01/2000 -147.6786111,64.8238889,0 Monroe High School #style-School AK 02 Fairbanks North Star 090 645104N 1474247W 136 Fairbanks D-2 01/01/2000 -147.7130556,64.8511111,0 Monterey Lake #style-Lake AK 02 Fairbanks North Star 090 644917N 1473712W 136 Fairbanks D-2 01/01/2000 -147.62,64.8213889,0 Morgan Island #style-Island AK 02 Fairbanks North Star 090 644738N 1475358W 132 Fairbanks D-2 01/01/2000 -147.8994444,64.7938889,0 Nordale School #style-School AK 02 Fairbanks North Star 090 645048N 1474124W 136 Fairbanks D-2 01/01/2000 -147.69,64.8466667,0 Pearl Creek #style-Stream AK 02 Fairbanks North Star 090 650005N 1471738W 645842N 1471810W 64.9783333 -147.3027778 373 Livengood A-1 01/01/2000 -147.2938889,65.0013889,0 Salcha River State Recreation Site #style-Park AK 02 Fairbanks North Star 090 642813N 1465515W 197 Big Delta B-6 01/01/2000 -146.9208333,64.4702778,0 Ski Boot Hill #style-Locale AK 02 Fairbanks North Star 090 645443N 1474404W 293 Fairbanks D-2 01/01/2000 -147.7344444,64.9119444,0 Snow Gulch #style-Valley AK 02 Fairbanks North Star 090 650300N 1470831W 650324N 1470637W 65.0566667 -147.1102778 264 Livengood A-1 01/01/2000 -147.1419444,65.05,0 Thirtymile Slough #style-Stream AK 02 Fairbanks North Star 090 644544N 1472033W 644429N 1471946W 64.7413889 -147.3294444 144 Fairbanks D-1 01/01/2000 -147.3425,64.7622222,0 Tungsten Gulch #style-Valley AK 02 Fairbanks North Star 090 645712N 1473230W 645704N 1473151W 64.9511111 -147.5308333 372 Fairbanks D-2 01/01/2000 -147.5416667,64.9533333,0 Two Rivers #style-Locale AK 02 Fairbanks North Star 090 645220N 1470218W 231 Fairbanks D-1 01/01/2000 -147.0383333,64.8722222,0 University Park School #style-School AK 02 Fairbanks North Star 090 645109N 1474846W 137 Fairbanks D-2 01/01/2000 -147.8127778,64.8525,0 Woodriver Elementary School #style-School AK 02 Fairbanks North Star 090 645020N 1475208W 137 Fairbanks D-2 01/01/2000 -147.8688889,64.8388889,0 Baptist Pond #style-Lake AK 02 Matanuska-Susitna 170 613612N 1493545W 101 Anchorage C-7 01/01/2000 -149.5958333,61.6033333,0 Bear Paw Lake #style-Lake AK 02 Matanuska-Susitna 170 613645N 1494515W 88 Anchorage C-8 01/01/2000 -149.7541667,61.6125,0 Birch Lake #style-Lake AK 02 Matanuska-Susitna 170 613730N 1494730W 74 Anchorage C-8 01/01/2000 -149.7916667,61.625,0 Bruns Lake #style-Lake AK 02 Matanuska-Susitna 170 613358N 1493700W 96 Anchorage C-7 01/01/2000 -149.6166667,61.5661111,0 Dusk Lake #style-Lake AK 02 Matanuska-Susitna 170 613900N 1492500W 147 Anchorage C-7 01/01/2000 -149.4166667,61.65,0 Fuller Lake #style-Lake AK 02 Matanuska-Susitna 170 613645N 1493630W 104 Anchorage C-7 01/01/2000 -149.6083333,61.6125,0 Johnson Pond #style-Lake AK 02 Matanuska-Susitna 170 613410N 1494300W 63 Anchorage C-8 01/01/2000 -149.7166667,61.5694444,0 Lazy Lake #style-Lake AK 02 Anchorage 020 611500N 1494900W 53 Anchorage B-8 01/01/2000 -149.8166667,61.25,0 Maruro Lake #style-Lake AK 02 Matanuska-Susitna 170 613600N 1494700W 73 Anchorage C-8 01/01/2000 -149.7833333,61.6,0 Whale Lake #style-Lake AK 02 Matanuska-Susitna 170 613305N 1494500W 74 Anchorage C-8 01/01/2000 -149.75,61.5513889,0 Woody Lake #style-Lake AK 02 Matanuska-Susitna 170 613415N 1494430W 58 Anchorage C-8 01/01/2000 -149.7416667,61.5708333,0 Flat Island #style-Island AK 02 Prince of Wales-Hyder (CA) 198 550530N 1324140W 4 Craig A-3 01/01/2000 -132.6944444,55.0916667,0 Turn Rock #style-Pillar AK 02 Prince of Wales-Hyder (CA) 198 551000N 1325450W 0 Craig A-3 01/01/2000 -132.9138889,55.1666667,0 Abbot Creek #style-Stream AK 02 Lake and Peninsula 164 565615N 1584026W 565629N 1584001W 56.9413889 -158.6669444 4 Chignik D-3 01/01/2000 -158.6738889,56.9375,0 Abbott Creek #style-Stream AK 02 Lake and Peninsula 164 565626N 1583958W 565614N 1583704W 56.9372222 -158.6177778 13 Chignik D-2 01/01/2000 -158.6661111,56.9405556,0 Akulikutak River #style-Stream AK 02 Bethel (CA) 050 604505N 1611714W 602947N 1603117W 60.4963889 -160.5213889 6 Bethel D-7 03/31/1981 -161.2872222,60.7513889,0 Althorp Peninsula #style-Cape AK 02 Hoonah-Angoon (CA) 105 580453N 1361857W 267 Mount Fairweather A-1 01/01/2000 -136.3158333,58.0813889,0 Derickson Island #style-Island AK 02 Lake and Peninsula 164 565931N 1564302W 48 Sutwik Island D-3 03/31/1981 -156.7172222,56.9919444,0 Ananiuliak Island #style-Island AK 02 Aleutians West (CA) 016 530015N 1685353W 6 Umnak A-3 03/31/1981 02/20/2008 -168.8980556,53.0041667,0 Arsenic Creek #style-Stream AK 02 Bethel (CA) 050 600002N 1600857W 600125N 1600643W 60.0236111 -160.1119444 548 Bethel A-4 03/31/1981 -160.1491667,60.0005556,0 Brinckman Gulch #style-Valley AK 02 Denali 068 635030N 1480000W 635154N 1480220W 63.865 -148.0388889 1135 Healy D-3 03/31/1981 -148,63.8416667,0 Brinkman Gulch #style-Valley AK 02 Denali 068 634932N 1475856W 635031N 1480005W 63.8419444 -148.0013889 837 Healy D-2 03/31/1981 -147.9822222,63.8255556,0 Canyon Creek #style-Stream AK 02 Yukon-Koyukuk (CA) 290 632626N 1560921W 633143N 1555508W 63.5286111 -155.9188889 138 Ophir B-1 03/31/1981 -156.1558333,63.4405556,0 Cape Menshikof #style-Cape AK 02 Lake and Peninsula 164 573122N 1574915W 5 Ugashik C-6 03/31/1981 07/30/2009 -157.8208333,57.5227778,0 Deacons Rock #style-Island AK 02 Yukon-Koyukuk (CA) 290 665952N 1430207W 164 Black River D-5 03/31/1981 -143.0352778,66.9977778,0 Don Sheldon Amphitheater #style-Basin AK 02 Matanuska-Susitna 170 630046N 1504000W 1695 Mount McKinley A-2 03/31/1981 03/06/2009 -150.6666667,63.0127778,0 Durants Cove #style-Bay AK 02 Lake and Peninsula 164 594242N 1540222W 14 Iliamna C-3 03/31/1981 -154.0394444,59.7116667,0 Fish Ranch Bay #style-Bay AK 02 Lake and Peninsula 164 555946N 1584454W 0 Stepovak Bay D-3 01/01/2000 -158.7483333,55.9961111,0 Fishrack Bay #style-Bay AK 02 Lake and Peninsula 164 560027N 1584438W 0 Chignik A-3 01/01/2000 -158.7438889,56.0075,0 Foggy Island #style-Island AK 02 North Slope 185 701450N 1474904W 6 Beechey Point A-2 01/01/2000 -147.8177778,70.2472222,0 Foggy Island #style-Island AK 02 North Slope 185 701629N 1474612W 0 Beechey Point B-2 01/01/2000 -147.77,70.2747222,0 Golovnin Sound #style-Bay AK 02 Nome (CA) 180 643114N 1630101W 0 Solomon C-3 01/01/2000 -163.0169444,64.5205556,0 Granite Mountains #style-Unknown AK 02 Southeast Fairbanks (CA) 240 634650N 1452359W 1502 Mount Hayes D-3 01/01/2000 -145.3997222,63.7805556,0 Horn Mountain #style-Ridge AK 02 Matanuska-Susitna 170 615848N 1473045W 1653 Anchorage D-2 01/01/2000 -147.5125,61.98,0 Horn Mountains #style-Ridge AK 02 Matanuska-Susitna 170 615936N 1472123W 1379 Anchorage D-1 01/01/2000 -147.3563889,61.9933333,0 Horn Mountains #style-Ridge AK 02 Matanuska-Susitna 170 620012N 1473028W 1491 Talkeetna Mountains A-2 01/01/2000 -147.5077778,62.0033333,0 Horn Mountains #style-Ridge AK 02 Matanuska-Susitna 170 620130N 1472239W 1678 Talkeetna Mountains A-1 01/01/2000 -147.3775,62.025,0 Ikathiwik Crater #style-Crater AK 02 Bethel (CA) 050 601340N 1661411W 144 Nunivak Island A-4 01/01/2000 -166.2363889,60.2277778,0 Kinaruk River #style-Stream AK 02 Bethel (CA) 050 603533N 1641943W 603445N 1641458W 60.5791667 -164.2494444 3 Baird Inlet C-7 01/01/2000 02/20/2008 -164.3286111,60.5925,0 Kings Mountain #style-Summit AK 02 Matanuska-Susitna 170 614453N 1483035W 1675 Anchorage C-5 01/01/2000 -148.5097222,61.7480556,0 Kugrupaga River #style-Stream AK 02 Nome (CA) 180 655224N 1663005W 654501N 1661516W 65.7502778 -166.2544444 34 Teller D-4 01/01/2000 -166.5013889,65.8733333,0 Kushluk River #style-Stream AK 02 Bethel (CA) 050 604441N 1611509W 603507N 1605042W 60.5852778 -160.845 7 Bethel C-7 03/31/1981 06/08/2009 -161.2525,60.7447222,0 Kuyungsik River #style-Gut AK 02 Wade Hampton (CA) 270 612900N 1643613W 6 Marshall B-7 03/31/1981 -164.6036111,61.4833333,0 Magitchlie Creek #style-Stream AK 02 Yukon-Koyukuk (CA) 290 633227N 1581230W 640528N 1582234W 64.0911111 -158.3761111 28 Ophir C-5 03/31/1981 07/21/2009 -158.2083333,63.5408333,0 Marshall Gulch #style-Valley AK 02 Fairbanks North Star 090 650421N 1473210W 650424N 1473002W 65.0733333 -147.5005556 271 Livengood A-2 03/31/1981 -147.5361111,65.0725,0 Middle Fork Chena River #style-Stream AK 02 Fairbanks North Star 090 645628N 1461505W 650532N 1444325W 65.0922222 -144.7236111 252 Big Delta D-5 01/01/2000 -146.2513889,64.9411111,0 Moose Creek #style-Stream AK 02 Matanuska-Susitna 170 624416N 1462913W 624501N 1462950W 62.7502778 -146.4972222 803 Gulkana C-5 03/31/1981 -146.4869444,62.7377778,0 Munsatli Mountains #style-Unknown AK 02 Yukon-Koyukuk (CA) 290 634212N 1530036W 575 Medfra C-1 03/31/1981 -153.01,63.7033333,0 Narogurum River #style-Stream AK 02 Dillingham (CA) 070 592228N 1600031W 593001N 1595440W 59.5002778 -159.9111111 43 Goodnews Bay B-3 03/31/1981 -160.0086111,59.3744444,0 Mount Kubugakli #style-Summit AK 02 Kodiak Island 150 575309N 1550803W 725 Karluk D-4 03/31/1981 -155.1341667,57.8858333,0 Alaska Range #style-Range AK 02 Yukon-Koyukuk (CA) 290 623500N 1530500W 1555 McGrath C-1 03/31/1981 02/20/2008 -153.0833333,62.5833333,0 North Fork Bonanza Creek #style-Stream AK 02 Yukon-Koyukuk (CA) 290 663944N 1503956W 664600N 1494128W 66.7666667 -149.6911111 260 Bettles C-2 03/31/1981 -150.6655556,66.6622222,0 libkml-1.3.0/testdata/kml/golf-style.kml000066400000000000000000000016701263603257100201640ustar00rootroot00000000000000 libkml-1.3.0/testdata/kml/invalid_descriptions.kml000066400000000000000000000020161263603257100223060ustar00rootroot00000000000000 bad_description0 bold bad_description1 fooboldbar bad_description2 fooboldbar libkml-1.3.0/testdata/kml/kmlsamples.kml000066400000000000000000001103461263603257100202500ustar00rootroot00000000000000 KML Samples 1 Unleash your creativity with the help of these examples! Placemarks These are just some of the different kinds of placemarks with which you can mark your favorite places -122.083959714577 37.4222290452523 0 -148.412292262804 40.5575073395506 500.656664107225 Simple placemark Attached to the ground. Intelligently places itself at the height of the underlying terrain. -122.082203542568,37.4222899014025,0 Floating placemark 0 Floats a defined distance above the ground. -122.083959714577 37.4222290452523 0 -148.412292262804 40.5575073395506 500.656664107225 #downArrowIcon relativeToGround -122.084075,37.4220033612141,50 Extruded placemark 0 -122.084578742153 37.4221507873776 0 -148.412668494623 40.5575073391805 365.264660698032 #globeIcon 1 relativeToGround -122.085766700618,37.4215692786755,50 Styles and Markup 0 With KML it is easy to create rich, descriptive markup to annotate and enrich your placemarks -122.084578742237 37.4221507872684 0 -148.412677748817 40.5575073393087 365.264682629292 #noDrivingDirections Highlighted Icon 0 Place your mouse over the icon to see it display the new icon -122.085655212402 37.4224281311035 0 0 0 265.852042425002 normal #normalPlacemark highlight #highlightPlacemark Roll over this icon 0 #exampleStyleMap -122.085654575525,37.4224307740546,0 Descriptive HTML 0
Placemark descriptions can be enriched by using many standard HTML tags.
For example:
Styles:
Italics, Bold, Underlined, Strike Out, subscriptsubscript, superscriptsuperscript, Big, Small, Typewriter, Emphasized, Strong, Code
Fonts:
red by name, leaf green by hexadecimal RGB
size 1, size 2, size 3, size 4, size 5, size 6, size 7
Times, Verdana, Arial

Links:
Google Earth!
or: Check out our website at www.google.com
Alignment:

left

center

right


Ordered Lists:
  1. First
  2. Second
  3. Third
  1. First
  2. Second
  3. Third
  1. First
  2. Second
  3. Third

Unordered Lists:
  • A
  • B
  • C
  • A
  • B
  • C
  • A
  • B
  • C

Definitions:
Google:
The best thing since sliced bread

Centered:
Time present and time past
Are both perhaps present in time future,
And time future contained in time past.
If all time is eternally present
All time is unredeemable.

Block Quote:
We shall not cease from exploration
And the end of all our exploring
Will be to arrive where we started
And know the place for the first time.
-- T.S. Eliot


Headings:

Header 1

Header 2

Header 3

Header 4

Header 5


Images:
Remote image

Scaled image


Simple Tables:
12345
abcde

[Did you notice that double-clicking on the placemark doesn't cause the viewer to take you anywhere? This is because it is possible to directly author a "placeless placemark". If you look at the code for this example, you will see that it has neither a point coordinate nor a LookAt element.]]]>
Ground Overlays 0 Examples of ground overlays Large-scale overlay on terrain 0 Overlay shows Mount Etna erupting on July 13th, 2001. 15.0246893755712 37.6739516794167 0 -16.5581842842829 58.3122865289071 30350.3683843891 http://code.google.com/apis/kml/documentation/etna.jpg 37.9190419268166 37.4654338859814 15.3583265374221 14.601283697467 -0.155664079949624 Screen Overlays 0 Screen overlays have to be authored directly in KML. These examples illustrate absolute and dynamic positioning in screen space. Simple crosshairs 0 This screen overlay uses fractional positioning to put the image in the exact center of the screen http://code.google.com/apis/kml/documentation/crosshairs.png Absolute Positioning: Top left 0 http://code.google.com/apis/kml/documentation/top_left.jpg Absolute Positioning: Top right 0 http://code.google.com/apis/kml/documentation/top_right.jpg Absolute Positioning: Bottom left 0 http://code.google.com/apis/kml/documentation/bottom_left.jpg Absolute Positioning: Bottom right 0 http://code.google.com/apis/kml/documentation/bottom_right.jpg Dynamic Positioning: Top of screen 0 http://code.google.com/apis/kml/documentation/dynamic_screenoverlay.jpg Dynamic Positioning: Right of screen 0 http://code.google.com/apis/kml/documentation/dynamic_right.jpg Paths 0 Examples of paths. Note that the tessellate tag is by default set to 0. If you want to create tessellated lines, they must be authored (or edited) directly in KML. Tessellated 0 tag has a value of 1, the line will contour to the underlying terrain]]> -112.082268001314 36.0982558933356 0 103.812043204497 62.0485579627633 2889.14500769047 1 -112.081423783034,36.1067787047714,0 -112.087026775269,36.0905099328766,0 Untessellated 0 tag has a value of 0, the line follow a simple straight-line path from point to point]]> -112.082268001314 36.0982558933356 0 103.812043204497 62.0485579627633 2889.14500769047 0 -112.080622229595,36.10673460008,0 -112.085242575315,36.0904959861242,0 Absolute 0 Transparent purple line -112.271932904318 36.0889063345089 0 -106.81615459986 44.6076371406326 2569.38674439834 #transPurpleLineGreenPoly 1 absolute -112.265654928602,36.0944767260255,2357 -112.266038452824,36.0934260883867,2357 -112.266813901345,36.0925105877688,2357 -112.267782683444,36.09189827358,2357 -112.268855751095,36.0913137941187,2357 -112.269481071722,36.0903677207521,2357 -112.269526855561,36.0893217148729,2357 -112.269014456728,36.0885091606047,2357 -112.268152881534,36.0875381359796,2357 -112.267058817603,36.0868268526257,2357 -112.265737458732,36.086463123013,2357 Absolute Extruded 0 Transparent green wall with yellow outlines -112.264333474253 36.0856315474242 0 -125.751869866882 44.6103866581258 4451.8422040681 #yellowLineGreenPoly 1 1 absolute -112.255078533779,36.0795495214565,2357 -112.254927703974,36.0811708349212,2357 -112.255250506906,36.0826076130728,2357 -112.256454015838,36.0839566058851,2357 -112.258023897645,36.0851140104481,2357 -112.259521848902,36.0858435523939,2357 -112.260821634755,36.0861263454859,2357 -112.262073428656,36.0862601908515,2357 -112.26332049285,36.0862151986009,2357 -112.264496384644,36.0862789794527,2357 -112.265696955459,36.0864959909064,2357 Relative 0 Black line (10 pixels wide), height tracks terrain -112.258043855138 36.1072674824385 0 4.94742124955372 44.6132488204334 2927.61105910266 #thickBlackLine 1 relativeToGround -112.253284515335,36.0988694372912,645 -112.254046612114,36.0991957046526,645 -112.254734666947,36.0998499836618,645 -112.255493345654,36.1005131062175,645 -112.256315709847,36.1010844194342,645 -112.256803307644,36.1015972208809,645 -112.257494011321,36.1020432354287,645 -112.258410607231,36.1022913199565,645 -112.259658898797,36.1024000128636,645 -112.261058119949,36.1021317687341,645 -112.262628526279,36.1015701143722,645 Relative Extruded 0 Opaque blue walls with red outline, height tracks terrain -112.268359433343 36.0988436214491 0 -72.242715517684 44.6085544513956 2184.19352257147 #redLineBluePoly 1 1 relativeToGround -112.265663418136,36.094452147227,630 -112.26522389411,36.0952091612206,630 -112.26450799864,36.0958076386491,630 -112.263882742882,36.0962857228406,630 -112.263574683541,36.0967927595124,630 -112.263571182241,36.097400388719,630 -112.264029653183,36.0980491343554,630 -112.264327720538,36.098803374003,630 -112.264243656227,36.0996364479029,630 -112.263914868704,36.1005538111725,630 -112.262689497347,36.1014906282337,630 Polygons 0 Examples of polygon shapes Google Campus 0 A collection showing how easy it is to create 3-dimensional buildings -122.084120030116 37.4217401192548 0 -34.8246974008128 53.454348562403 276.787005376405 Building 40 0 #transRedPoly 1 relativeToGround -122.084893845961,37.4225712404479,17 -122.08495809792,37.4221192262686,17 -122.084746957305,37.4220718395262,17 -122.084572538096,37.4220900672968,17 -122.084595488672,37.4221593270089,17 -122.083852111827,37.4222727856437,17 -122.083792243335,37.4220353911208,17 -122.083507665662,37.4220900695711,17 -122.083470946415,37.4220098739516,17 -122.083122108575,37.4221046494946,17 -122.082924737457,37.4222650399039,17 -122.082933916939,37.4223124284309,17 -122.083383735974,37.4222504608762,17 -122.083360785425,37.4223415922875,17 -122.083420455164,37.4223707546064,17 -122.083659133885,37.42251292011,17 -122.083975843895,37.4226587309378,17 -122.084237474333,37.4226514397252,17 -122.08450369495,37.4226514386435,17 -122.08480204608,37.4226113391631,17 -122.084788275051,37.4225639505512,17 -122.084893845961,37.4225712404479,17 Building 41 0 #transBluePoly 1 relativeToGround -122.085741277148,37.4222703315526,17 -122.085816976848,37.4223140883235,17 -122.085852582875,37.4223033746974,17 -122.085879994564,37.4222568613879,17 -122.085886010141,37.4222311076138,17 -122.085806915729,37.4222025017386,17 -122.085837954265,37.4221402705868,17 -122.085673264052,37.4220869021441,17 -122.085602292641,37.4221488542904,17 -122.085590277844,37.422128290487,17 -122.085584167224,37.4220817196725,17 -122.085485206574,37.42210455875,17 -122.085506726435,37.4221426794982,17 -122.085443071291,37.4221278384617,17 -122.08509907149,37.422512824076,17 -122.085676981863,37.4228181532365,17 -122.086016227378,37.4224491885872,17 -122.0857260327,37.4222923960425,17 -122.085741277148,37.4222703315526,17 Building 42 0 #transGreenPoly 1 relativeToGround -122.085786228724,37.4213620888697,25 -122.08573129906,37.4213693598948,25 -122.085731299292,37.421409349109,25 -122.085607707368,37.4213839016656,25 -122.085580242652,37.4213729955087,25 -122.085218622197,37.4213729950432,25 -122.085227776564,37.4216165650827,25 -122.085259818935,37.421605658944,25 -122.08525981855,37.42168200156,25 -122.085236931148,37.4217001786035,25 -122.085264395783,37.4217619798258,25 -122.085323903275,37.4217619801391,25 -122.085355945432,37.421852864452,25 -122.085410875246,37.4218892182373,25 -122.085479537936,37.4218928533705,25 -122.085543622982,37.4218892179755,25 -122.085626017804,37.4218601349993,25 -122.085937287963,37.421860134536,25 -122.085942871867,37.4216089859004,25 -122.085965546986,37.4215799275914,25 -122.085864046234,37.4214711500296,25 -122.085854891121,37.4214057132618,25 -122.085809116277,37.4214057134039,25 -122.085786228724,37.4213620888697,25 Building 43 0 #transYellowPoly 1 relativeToGround -122.084437112828,37.4217725300309,19 -122.084511885575,37.421911115429,19 -122.08504709998,37.4217875512154,19 -122.085071991339,37.4214366302316,19 -122.084916406232,37.4213723782212,19 -122.084219386817,37.4213723780163,19 -122.08421938659,37.421476171615,19 -122.083808641999,37.4214613409357,19 -122.083789972856,37.421313064108,19 -122.08327965347,37.4212932884059,19 -122.083260981921,37.421392139443,19 -122.082937362174,37.4213723639988,19 -122.082906242567,37.4215156977887,19 -122.082850226966,37.4217628257647,19 -122.082943578864,37.4217677696964,19 -122.083217411188,37.4217924855269,19 -122.08359704301,37.4217480074456,19 -122.083945555677,37.421693642376,19 -122.084007789464,37.4217628381585,19 -122.084113587521,37.4217480110439,19 -122.084076247378,37.4217134129238,19 -122.084144704774,37.4216788153457,19 -122.084144704223,37.421817206602,19 -122.084250333307,37.4218170700446,19 -122.084437112828,37.4217725300309,19 Extruded Polygon A simple way to model a building The Pentagon -77.0558013917814 38.870832443487 59.8886556173822 48.0964607479739 742.055250667055 1 relativeToGround -77.0578845766097,38.8725325989282,100 -77.054659737567,38.872910162817,100 -77.0531553685479,38.8705326779439,100 -77.0555262249352,38.868757801256,100 -77.0584405629039,38.8699620650694,100 -77.0578845766097,38.8725325989282,100 -77.0566805501913,38.8715423979846,100 -77.0554262596082,38.8716789034408,100 -77.0548512590102,38.8707653539779,100 -77.0557767743315,38.8700868658145,100 -77.0569116201754,38.8705444696335,100 -77.0566805501913,38.8715423979846,100 Absolute and Relative 0 Four structures whose roofs meet exactly. Turn on/off terrain to see the difference between relative and absolute positioning. -112.334896915755 36.1484553321492 0 -86.9123503756691 49.3069542389419 990.67612010871 Absolute 0 #transBluePoly 1 absolute -112.337251073129,36.1488850510532,1784 -112.33561286884,36.1478154058902,1784 -112.336816937105,36.1465867773438,1784 -112.338440845754,36.1476277891408,1784 -112.337251073129,36.1488850510532,1784 Absolute Extruded 0 #transRedPoly 1 1 absolute -112.339658681884,36.1463761864751,1784 -112.338059765431,36.1453175187135,1784 -112.336825423779,36.1465959624461,1784 -112.33845550432,36.1476262176398,1784 -112.339658681884,36.1463761864751,1784 Relative 0 -112.335015249042 36.1494312307742 0 -118.92141008485 37.924862610932 345.516911367981 #transGreenPoly 1 relativeToGround -112.334946314593,36.1498870576772,100 -112.335401954068,36.1494110839837,100 -112.334442828915,36.1487849038131,100 -112.333128949291,36.1478084013244,100 -112.331701951695,36.1468075567836,100 -112.331131440106,36.1474173426228,100 -112.332616324338,36.1484545336465,100 -112.333987662052,36.1492657052207,100 -112.334946314593,36.1498870576772,100 Relative Extruded 0 -112.335158789238 36.1497924712903 0 -55.4281156089161 56.1028050373959 401.099727971252 #transYellowPoly 1 1 relativeToGround -112.334878398376,36.1514008468736,100 -112.337253534563,36.1488851755389,100 -112.335606892795,36.1478161267928,100 -112.335003480797,36.1484646902418,100 -112.335835386123,36.1489624162954,100 -112.334588830137,36.1502622937251,100 -112.333793785628,36.1497809602646,100 -112.333179820842,36.1504472788618,100 -112.334878398376,36.1514008468736,100
libkml-1.3.0/testdata/kml/model-macky.kml000066400000000000000000000107131263603257100202770ustar00rootroot00000000000000 SketchUp Model of Macky Auditorium University of Colorado, Boulder; model created by Noël Nemcik. -105.272737935874 40.0100059441238 0 -27.7033773405793 65.7445449587655 127.239310768052 relativeToGround -105.272774533734 40.009993372683 0 0 0 0 1 1 1 geometry/CU-Macky.dae ../photos/bh-flowers.jpg ../files/CU-Macky---Center-StairsnoCulling.jpg ../photos/cg-bottle.jpg ../files/CU-Macky-4sideturretnoCulling.jpg ../photos/jk-jack.jpg ../files/CU-Macky-Back-NorthnoCulling.jpg ../photos/pb-epm.jpg ../files/CU-Macky-BrickwallnoCulling.jpg ../photos/to-tower.jpg ../files/CU-Macky-East-WingnoCulling.jpg ../photos/bh-flowers.jpg ../files/CU-Macky-EastdetaildoornoCulling.jpg ../photos/bh-flowers.jpg ../files/CU-Macky-EastnoCulling.jpg ../photos/bh-flowers.jpg ../files/CU-Macky-EntrancenoCulling.jpg ../photos/bh-flowers.jpg ../files/CU-Macky-Front--TurretnoCulling.jpg ../photos/bh-flowers.jpg ../files/CU-Macky-FrontbrickwallnoCulling.jpg ../photos/to-tower.jpg ../files/CU-Macky-FrontnoCulling.jpg ../photos/to-tower.jpg ../files/CU-Macky-FrontofTowernoCulling.jpg ../photos/bh-flowers.jpg ../files/CU-Macky-NortheastUnivnoCulling.jpg ../photos/bh-flowers.jpg ../files/CU-Macky-NorthnoCulling.jpg ../photos/bh-flowers.jpg ../files/CU-Macky-RoofnoCulling.jpg ../photos/bh-flowers.jpg ../files/CU-Macky-Tower-SidenoCulling.jpg ../photos/bh-flowers.jpg ../files/CU-Macky-TowerBasenoCulling.jpg ../photos/bh-flowers.jpg ../files/CU-Macky-TowernoCulling.jpg ../photos/jk-jack.jpg ../files/CU-Macky-_Side_BrickwallnoCulling.jpg ../photos/bh-flowers.jpg ../files/roofnoCulling.jpg libkml-1.3.0/testdata/kml/old_schema_example.kml000066400000000000000000000013261263603257100217060ustar00rootroot00000000000000 1 foo 1 bar 1 -122,37 2 foo 2 bar 2 libkml-1.3.0/testdata/kml/outline_space.kml000066400000000000000000000021471263603257100207310ustar00rootroot00000000000000 D50027/Q53 ID: 0x6ab12354107956b7:0xe1462d52d4a18860 TYPE_AU_LAND_PARCEL 0x6ab12354107956b7:0xe1462d52d4a18860 138.4744880,-35.2268885 138.4749954,-35.2275562 138.4750684,-35.2275167 138.4752217,-35.2270192 138.4759562,-35.2264405 138.4759619,-35.2264332 138.4757817,-35.2263376 138.4746928,-35.2262208 138.4730142,-35.2271963 138.4730711,-35.2274503 138.4749954,-35.2275562 libkml-1.3.0/testdata/kml/photooverlay-zermatt.kml000066400000000000000000000026001263603257100223100ustar00rootroot00000000000000 Untitled Photo Overlay 7.71792711000002 45.968226693 496.979999997134 16.99 83.1600000000001 2.13108213421859e-06 files/zermatt.jpg -25 25 -17.225 17.225 107.223 relativeToGround 7.71792711000002,45.968226693,496.979999997134 libkml-1.3.0/testdata/kml/schemadata.kml000066400000000000000000000014621263603257100201700ustar00rootroot00000000000000 1 simple field display name 1 default schemadatadata -122.000,36.995 one 2 libkml-1.3.0/testdata/kmz/000077500000000000000000000000001263603257100154045ustar00rootroot00000000000000libkml-1.3.0/testdata/kmz/bad-pk-data.kmz000066400000000000000000000007451263603257100202020ustar00rootroot00000000000000PK-^m5*%doc.kmlMMQMS0+<|=xRǃF`R-%fڞ!4~$$Illm61ɶT*Pi!2ڇ6kknD A9A:ڌM76޹ż{=ZԓsC08tt0UZRJǥ`B,(uBF2sA0e [Hym`3B$,', DB7*%4jQ0D 1/$ YH1=*\>NwOCXٮb.@_VuRv:7s,$1)z*h)<5V-Z.몢PK--^m5*%doc.kmlMPKIlibkml-1.3.0/testdata/kmz/bad-too-large.kmz000066400000000000000000000004531263603257100205460ustar00rootroot00000000000000PK]N;巷 hello.kmlU0 wt`B5? ( t`*ѥB QbJEWiOT |ti[y5\@c/J \ɭFD [u/_뼇Fgylz6i\YJ57l5C\E]"*a$#GVij|HdN5$'h#߇SαkБhfojur>]LſlC7PK]N;巷 hello.kmlPK7libkml-1.3.0/testdata/kmz/bad.kmz000066400000000000000000003736511263603257100166740ustar00rootroot00000000000000&ExifMM*  (12<iNIKON CORPORATIONNIKON D40HHQuickTime 7.42008:02:07 17:28:30Mac OS X 10.4.9"'0220Ɛڒ     2007:02:06 14:21:442007:02:06 14:21:44$ `h(pHHJFIFHH AppleMark    % #!,!#'(***.1-)1%)*(  (((((((((((((((((((((((((((((((((((((((((((((((((((  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzw!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyze" ?z`Uv%iR ocOO0. z6FCL7+RLAKc.+>շ$֝`~uxś5mԇāTn7O\ӊԙ= ٸWdRݪ?$ҺV%N;ژHR~9;bx*cWRϽrHUmI6كWVOSdVܓ?_¹?~*Ț^xa~+H+%VЯ}_vI+0q^䨯N5w`m Rc$u 2;3K_Hz|BDq@0sqs͒R^F<#>ש4cJ8ҳ~#kJ ,X͏{ WSǗZ%E2I-li ]9G<9os[VL$ʆx)FpEsשjΜ5y+SwC8.o`r$8)~4-֖n7KLFr9'+Km+C8kGq:s^ [ZjY]|H"pI>۫g9^k#5Qnj}/M6^iI F(3d^ںxXjzK%؈OҮr*_ v/JOH2!V=|l 8.c#ZP#>Y֛7 ۡTc^Oza"ϾL6`qյ[ ^q!Q$ag#'5i;ob Y75}֋nI-ޟ2Efq" LZ[ BV8ƛh 6 'X٢jwѹۚ~<%oيT/w#vTZ&I~{3ȯu=\~)uk GHX!wLG~uKe} L'wsrv+ ,O-aHUVQNGW/R9]5:mRf4PDDmRAncp> KshleK)ϡy|y[bY]yo1Wmoi7F[v"S[¬e+v^Ej_Rr ;z}}}+nkA$;6^k?Nz~dW 8=r0}*Fڋr0>t8^v+Vg9]'Pͽs*ڤa!V 84h5A3$>w23~U'<`zV5_Ou 6"B ߧ=[jS^K#;HI)y-ctc6ҳ8\ҼƳ~ % t+lGK𮞐$Ck*8M;[MS_cܜsTȗ8U|v b θBi zp:W>èK}n>Ivq9Gccj\$ W_s eܞ W6=pC/+о jnsT̜*=p^j$l68 s՟٥<3Zj Y _F=+*;AAΫ[cIi#0v*u6h+kK+^ JismpZڜmSZT)ͻٝ=]8Yœ⤒zؒBoCcOa]o^N$@%VL\nVSY,Z\5@Q;W[y4/:G"rwatxٌq/J]}ΖKm\F u]O?h~ ySMބqtuX7pc ʫm20݋juW6s4ΎVMy')WV"KF L$EX?ݶpJ28k?&8̿jda9xdht;Xg~W^! -O݅m״)3_N&TL"c[2!b9ʳXZoך{兺b}|JO$:ZOh ǪingSc{ķ E<vZP0^ Ac|.BZ-?VԬ#̆h\+A(X?_Q7_ʖ> g3nY>MΠן]kP3ClggW{+DC|^Vr*:鄝Gd(w62pG|6uBK(9ployD?L?˯tq#}Q13(Q{¾}5/B5OH/} H#1o;i]\gF3eXhE=-AcMK/z?8pGDUQ(W'ZEFBb~,_7_kvO 5W{~H AppleMark   }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzw!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz|W!(ICC_PROFILEappl scnrRGB XYZ acspAPPLappl-appl rXYZgXYZbXYZ0wtptDchadX,rTRCgTRCbTRCdesc=cprtAdscmXYZ tK>XYZ Zs&XYZ (W3XYZ Rsf32 B&lcurv3descCamera RGB ProfileCamera RGB Profilemluc enUS$esES,LdaDK4deDE,fiFI(frFU<itIT,rnlNL$noNO xptBR(JsvSE*jaJPkoKR2zhTW2zhCNKameran RGB-profiiliRGB-profil fr Kamera000 RGB 000000exOMvj_ RGB r_icϏPerfil RGB para CmaraRGB-kameraprofilRGB-Profil fr Kamerasvg: RGB cϏeNRGB-beskrivelse til KameraRGB-profiel CameratT| RGB \ |Perfil RGB de CmeraProfilo RGB FotocameraCamera RGB ProfileProfil RVB de l appareil-phototextCopyright 2003 Apple Computer Inc., all rights reserved. ?aW>S+KNfk&[XGx銸ŗO#XfUzIPb3nWz翥II nғ*-bojY\5;, b❂j+TVauS ~mojc.$OȯձO?9VI )8Lz xkDb7?>GqVXMSW[tT qkxZ>viw$)0\8^ ΟLHG*zLe*tyb,(߻bszo!)tJ-#.F8)'ںbNYɶEHL,׊rDB ^{Tݖk1ʧ#3d=ZԨgm[~i$α+$>,׆nV~1>?[g]_=[ 5\@?EI]*V^Z6'LZH6CvuQJqڠIw~Ǖal5zMY6yxQf4HU$Y 3#+hym78ӊw7?+EJ\7`GׁT/X- rrKU V U17} Kuq͓50&N3g4ل^NbLdkZ,sU[qHh[9հ$3.m2KohǦj(ՋYdFǷksӋB^iTmڱ2Ue~*غޕnZO>ВΈXҩHԥ)b>l⫇H?F3#UQ I@bqqj7dIrg0?ic22V rFfgAa~c1V❄` k&+y󆍲 Mm#,F kgw[#b+UM'[kc'; g'޻-޶8?p< vtv2w0g'.Ǘ5vIl1NWrc .5`JO,rr]?/%B5h-_㮇ܖ=H7QWKgrA{*-nkC|#DOcR->$ rVLFkXH$r=ke?~ۯ4$ -\sڹ66;ֈ֗)YFqP#Z۫!0?DZF\DÒ:VO+7hF)*%esnWWU6e]ȵCpWlzyNh@pԵ4Q2E*ږU_4Zib9RJi =ECԵdm[̳ #tb&l`Y=74L~WBp5fB|kH/՞[:~H~\v+ D[AT qO&W?1eJ&iU9ZI,y=+GT} U^ēZ-5F.;Vq SICa(R6@=i?+}O}({ ɌZl}c]HO 75\lIҩ+݁.ry+>~s(bN*5n k6#PHs}+7Q3/`~ IH8aZ|?Q[ٵbVWQL#a Cs`VZ]cKl@wR+ Ͻj,hXWykMK]7"XH$fmHvЉfjʚSnbORH0Vbe$m 3h9vy{m:]`W4^6Hάsȿ3q\ _pIJy唱-vӧeh^CI gįԃ짯zaW]E[i2F:4i3Kb{QhJ9V)>5iY\yz2BaoOȥ̖nH|b͉:j2?ԥ- VL| qx>P%\_ ӶRG_x9H~?rSo7Q""8fdܓW,_o3uQ8`N:Wէk4vIګKnI8L49tokBsЌU]RW&M'tTtc֛I<&(_ f9-_gܨs٪fElZFRzة$mnE9/pÚ ܐ涭oENWF߶dSHC0-#mL۫A(*W;51+Hb$#g kIH |JËCXsҦ-R!`:V'b-nZ"A8B?Y2Yrޚ! ml?.?@=M-w a,I'z2+؟tvZ HV8J+av 18玵Y,R.Tt*{JE2bAMmA'G.-KV5EvkSVN3,YN=+XfsO9k.z-LSʘV־LBG?Қ`2z I[qCkm ӚƤȸvh24p~\Vt;OX4{\ə]$"5Ǩl,͖^8ȫkaXa\ TmNU0!yOȼzD/SOi2wewdihdslqTyb}qi[FꄩCҵH{TqhȞ<;~5)U'l+)sZ࿵#\E' f,~O=~_=H^=B_O#2 ,7*KFuf܅q?Z#Q>yYXxN*!B%k-5 g948]lXL=D\ԟ:1U4hdۖΕNM6}-QFʳr3޴F/r14}iK*3&,`E?7׭ hnsʌXOj[; ܞ1Y:#d6#FG;&@ a{3M1g .@\HdpU:t9dഩn䍣ޥ-I} eȊx-u-rʤE rILZ(9;Vdv@Ub9Y}zիiYiJe+`F#+[ir'rWv$bsDЧRMM$EJ4UvEf<0SQy 0z;>)LVW ~$d㷵h[wER㕼My?ʏZ^r?'ʿW{/gU/\U?4?%3ԜbC޾-;8 Z*qjT|Uı<sZodUxQq>^|TV @>}Uc!B=;t Zw0bG6 J7b!9pGZLٍ$83]x+=s9'%j&,S$FsjoN%}' GvcdL@:PI=Α-Ec-U ܐ8k{ջ+#9a'";*s3D0QڒX]9*~?Zm=R7ˌZovsỦ&O.R9~L+?mRXCI Dl$ }>;M\#mYB0DJ]Sҩ]N;>vglb[rLsRUTvsOg:0PwUɐF$;sXwӳv0pj]t/3'jc rzP!x#&[bǓd2ӊpK{sLӭe*)"w)c"s͚ʔ$v1w2%wbA}+:POMlZe7nZ<8אm;{⊕=nT#΢ .4"o\5q{io&1zc$~5ƜIҤO;s=6H+h-3kLjAWI2C.W\).JªL6L6RpەqzKY?ׇҼliMj%ɒ:}xK\++O4zб.wUӱ@cKMx!NJ4xZc2IO'>* vɦ:L\kXUȵ'_$qO頱ԇkV5ֈD7BeQm$nURH~5tmf_aEϿ=.s;T]QI)-Ji8@IǵV0>eRdrFsZ W?7W.-&h%Ļ夻q\Fs;BJ{GO^qXBjQs'BnqUa\-òMi`mX!@* ZFwRh,9X>WZt G"5yC -;EՖ;Ŏc2YڴK\)qČ[yTbNSťAY;Bԣ5Ԛe֊\SZLvm.,68!W1Zr5DԍUsZ1*qY=Hܷܣj!>ZFli!iQyI*01ԧgr䮎nnG5Člутc@#*l4=-ԁ_Q-#W)yvHNy& Rv1%54ŵX5TrǮk.gkN~v <؁WDcl1ϵmd$vm+15OAiXWIgi>c;`rkӴ6̳@gaZ*q7O1Ŵ*bIBt9?+''?S„\G'u?R9I-㻺k%坴2n#:_'S:T(;ݷ} Ҍb1{5e#=A+\sڑyP|uZl#ZL {bacdd|zd|ˡ+Z`jirmdS$3P69;Zi K s wr ד{Uحg$ Q¬I_ǫ}"-/ҷZ"[dXbb ayټ5>3xiCtS>[b>+bgS\~V 2mL?d{Ӥ3_/Ԍ}:W#w2rv+ ɂi1!SP*hG+{tPտJ|nOF8^mՁ"_Uj'>Cj+fBAkf#\;w7HDm̞TVT{In#Ht\Z+4c_cMk4df5P,Q*޴ړ.6F\( vc@k*񿚕7r͖:{qs=Esv !UъQadghٞĆgGm 3W-s3Q|Ke9n=Zfs{m< @2qXYtQjl<sKܶLR[߅bnUɢUx5q`\ڵ} 6U#ۄuNq u Pv?^Z(?-Rt-$2|۔،85%^kD̚0媼#T8)E% QӒXο/'-|q/xZv4epEe\geh܂ LN"0Ha\/;_ |u$Du}PHjZMnz:gھRUUR_fM}}[TMg:2RE&m-]WFң+JO,'DXOZBR0QӟbM+dǷ\Uޤ:;ǭaJ#RAP|sӫ=vJKXFY(cYKh})JM>IcEjۇGv{Z35?_jy~8 E}1=^Tcxά/,d;q_^|9@A'YU7 j[;0r#fM%?WM1x I}e3#S#/'oi=ʋZzim&FVAJG@EZ/mߍK-hhC0˽$*B[V0}M;8֫1@<#8sOH1'5 ʅVCk=nXޕjNepzA n1oS>{PBXrY洄o˺w$.qYO# DUs m[BL40NآSKAFjF.8E{6V{Vp=+.C*rW9=8YwpzP]~NFNy[g ׭+-{DiU#٤i5c5mdy'hȦW#,Mn3^{;Tdyk~y1q~<I-]Y7즺ˡH>RXr,'׭}1W*Pe.F8CxC<)\Wc)zN_>j6U$]5 eR~@NH^tګl9!Z1<?q3jlJ+ڄ uQ2$نh]pv޷u[1TǦbڿDaלS)B3J-Y;.nm(9>8sOiV54JKSРItQR3f,^%@|n|qoy?4mD\i 3*m9ƍ)ԖMD^[40vҴN7j*Wz_/M#RxN|'Ai>_k<#$h!FQXH@*p*!hk4_tkDڕQ'Ɋ5R 62ۀR0Hڢ\AROJO_>X8+:|T-\N.lF~ki6 $ă h* I$"Gm7)n70=RĒLʮ =Z<r4 ^G$ @ǩ$IMhD"+/Wf2dM淠Ux'9nf.$G' Tcff@EpRJ)u$Phbc r܏zXbC͞ٮ ̌8fчeƟY"Wk_F s5`_]'z8p>_>l巏:z߱Р`DmXUKo%jfA֍^Ք e!^ͽcԃR# >㚴A_ )7atȦ|i|=n #{;A1=@ !O-~Ѳ}3[G~=*?as0qIl0Dj ̧*ר$h'N(?JKuWvbO̤2:ʩKB8&T}1Wm=job WM-UsjMh# #dwn`W2UU1F;qU4fd"59H-L2d)[n~<r#F 5i؆(59i'=M>gc>QdTCjTy+`52ƝއKmhĊɎLV|yڋPErJS4?WD[^;bIW_r$]z\p+9#)F9+HFޯuG!FiW//__|mmW~(1hlE/e2Bs@nǟ#kՒ]V>eX㎲8xTii'Fͥ#kwD`lÀN wq_K_jχ/6y;4cDeԬfV67!C~W0xzm$?x!8#6jE[ovzXo8Q8e Wiܫq7^#LW hx[jeں#|j;ri)^z*#ae}HSU-[Bz\ Jtp3NڎNPw;[,j)7bZFG#u@qb̤їDVBrQ1#uð;x;UEݐ얆]؃!bYbbP"g a=kTTs gҫ"7n1Z+6Xr3;![Vj7e-CgeadīϽfc\Yb"U1Z%1$9#dv¡9 7f֟GKt[5,599#cN7g%(-ݏa\srKںQGzWQ1df>REhH#>Ċ9,Zer?Eeivď,W”$xZ\_#8#y(a p='kŏ|izCoqgTD[,y5gZ0M 6tekNk{OSK#w/^mi7 I[t/Tz}w6&K+FM{b8KռL]铟/,shA5Fe/Wvw=!d|/RJaJOdB./>yڄzw~~瀘/WL?ii9X]WͿjۚ;n %m=Wa$,xS,N#?^%;IYǖo/ ۟n5?'.E-IϒC2$Tߓq;a O[]<6F\Dl8=5.5V3) v-qzqYRS;zp:W\%I1G29V1u%is_PJ@x`;zꌴw9NI./R Mf8ˆ{ԍV,SqHl![ʊ>=d} K`BMV<=2kE 1(.q5?{Sԃ+4B.gվͧS}?gԾZVO孼q?PMy\NzkH?U'ZhVSaj[E$R!Opkc773i1 2ޢgbM|*Rlʌ;MjΠ,[=ibg;%#ժh+nWLJBejWopDk)g9qZ\n:h>;[`0Peٞ7JW;5ctW²YKEHjFX-^twJ&_Ann>\(Z4[_lE >%c~he;<#f-!w`f1N'&]4~Zky`U!46e:㻹iT¬ij2܅%ЇH &6r=+φk۵IJ5v6Lo-.1### o97ȬB ڳ3&66%z:lG*ߔR͵`$yMMӡ8dFILv,6 =~Z+RB/iHa09&PRTr>cm{]bN /5ux\*;p@݁)fܠWx⿁5{zsxonRU/.WČ(X+|t'윖`Z E+/\> 7촹."^[aȨn rX#$.{3 xCNf{A (?Y:Q׭9OiKY?M"}' ?"b2h,Zj#"q_GW؊^T%+)=,݋ۯVOz۷^ӄӯ?W؛ij-_2 tCVq_Qx?z-o)MJf_2%E;H$r5Ωjz4o+UE>.mSi1,iрel\,d#8֚Xxr<_?2rKc(6Z}f/Ȼմof/!Ǟ?H>","sV2.8}EouO3SP?j:;KxfQmIyWRWW+ 3>BN9>?r|BgFtىx!8q׏C_c~_h6ҢwT?>OQ2Wj~v|2&\sV\ss]1R斨|#AxX5m2Osv܂I3w!rp9?/x'C_U;9w$s8ɍͥV|8-ȉp=7T5/2(0B/CRMwźwM uZ>^h42d[xo=%;DY=CFR^۟jJ;}e3v'S[e1MUjr]%>'+o*j_zۚ3lPQ6*Wo8҄WVqzόo0}J|c{p]{מLI$rF%ſ~A6χ56bWk'y,cb*<)-z> #]2[۩!yWtb9ۥ-ǘBִTc4ZT{W(N/s/O=ƏZ,Ƅox]XrL_p$QT?O/K?\|SEۤXƾ\(H8BI⪽XfTq~㴯Oƕ):W>৿V :[m6KkF&Fe> @$e\|m澛>-|<>+p~ au$|{ڼiS8=+1ߌ~ xJ'y<:43@Qw`z ;|J迷iv~=Qk\WY#hwq$N95ӷK Rp~|uxAoa[XJXom-E< lS,2L76GA:ash^7O&U220 AՇRJmndi4RZ> Mz}ZW:ӽ_^߽PeiR8ˮŏz"󀂼׆~9Ax{_%E'f[KIR)ܭ 'yJgu-|bk#D^oI.55 v\ɔv1r_? -FP/j$k>%B 0 @miE*҄yn`Ѿ#͖C6׆/,H;xƼ*a;nWu#'q~]bW n˧re1dNA )a/ׯs <]Ӽ6U4rNs_N8A|=~["E[O]_i[p6Ѹ ye|Es|MSpx]RRy 5 y+Y $d 9}>Vp>Wm7]o4}SFQYLJ˃9vr3J½m_? 8åd?Ugwm|5++_|ڌē.@V(x_O_ͮlG2C@A!I>i[7A9ٯK "U;J}TNWNZ/6_ uu~No6Yf&O"d@%,~^h iMVS*`w5OC>KE9櫵g}*<JREn'Ȃ-{2pNzΥ.#0 -, TMI!_k ; }V/z?B߼oEK?'.䶷yNiMxNǀ bU,~|?FӴsHԭ]A6T+9*A|*>/JT-.=.h\bG lLZQR aٯb-_ >:|ۣï&kuR<`x3 |?*`_;\^s,>>.{=kDTgE6lW= w2t4 cr-֍N5:tיj~'6NEsBXl#؁^*kFyhKT"Y1́lTUJ*7=c|+BH: &u7 zrIp5 vG\`姛L8- $ p:֯m5 vөoA#c>Jɹr zsN+[lĕCOeL78?(}+,bzlƧ -tV tRԼY\XSj5 H܋xʎH>@F' <Z;\k*W ok-ܷ~"+Yn۴0&SɄHq퐃k[-7t|]lMդoq# \%Z3RHkIM>JQa[c{2K/RY-To-yjArk{w^%ƺֳe=[AL|[.d)%~o3'F {/O>#¼U^q9rZ|mLLSi^I=ߩxU~I-]~ ַCgi 傘rsɯOس⎅_ŗ oO 2‰'N6ùCt\fQqzL=ɩJ۵é;[)^$|YsCoߤR76ň9x S#WhE'$+Gx_CqwY@yE ;+A0HWfqVTV=vx;δ**VZ~IR S[;nO&j,DK~'5|7}?G$L[Fh˲CI nr:bhTM>8L 9bik('={KUø< S>xCzW^#I/.ՍSqfޗFYB1|A׵/wlo5{I/$6]/)/9 Fmb<_⮺[T: )!x Fyx^>ҝs__StqvMũ(Mzدp֬5~)Z%m-F]`sdu95GBk<~x(>dcgxWV9s^1ۛw%-UX߳_]✟ ^յ>bicb#Y<L>i ~_`=ޕfhf9%]vfK0#8kREiۚ۞\ϿF+ܯ^Tןi?*iA?xJMx[M}krq*nSvpN1q^ v|YҦ׵sudm|dd H*$xR1RiߥU(G^V#xӮaޝmbRmc 9NKU(EK?xoῶI&fJW!b^n[JVO;[ OvZ30mhw~QTP" aI2~|NԵYhz$k:Dq*ǾHT2O<6g9ڄtqiv3I-ԽG+їFT}.y *gdt湏^_/+i/},V ׄW|mw_" O) $[furψ-n4мwÑ_71/(.u{| Y.ir?3 |dG_;,16%ڎN? .4+KKB`V(I:u#t?Q J%^XW?ui,u FG4R:KxOt~UVIA'=u:bw>qj~i>3hVi$WaK2h-IeXe_7]h>3yK Q>~`fT1oGzT]j9NW 7_4o? <>{]6_oy."QUbNҹl澉/xYU5ᨃXjp xb.Py}^2Ot_?#ˆuMnqÞ4QGǺVs:io}" K@uW}$q+V~Vڴ:.o]Fѭ<v2I=S^ M%R}]OS̭b\ۃg d@-4:N k ُ$~d:~c&;+Y/X\xkuWR{Uy$68s;FFk]-%uyqu>*^#e ψ5\&Iu:I8] <%񦯥Ggr-'UKݧڃ9hWzRJ~ʷdrNI;LO>&״I5ΛY[6 qf`T`Nq 55Ziچ%JDrƈrʀ.p@q վWXNQOnKmyEk+ bAf?nÊf~K47 B8-$`8q-wT򺓡r/ /)|䏺sF.|u.^ltWǭ1`Wؕh20XWƖۧRIS pۮ^lre7*u[/+,l_կ5d~">|&> YId*?`$@1ޗ^X]e!fpAW敪N刯;z|vǖ9ۭv(G1!z?SHwſ'. TfM51oio$3%gTp 0tZq:C?u> a_ 2 宷x'PkO=v2G!1JNx ޡo 3g|gơxն-p {q$QCw+m#"i[e†wF䓋58ښoh_ ?h6 Ok::F z<17Q(.X2 +g-_ 4~Ԃ\ac2[IoiXl}Kz'2>:\7^8cOk 1q$ʍ\(m6",z&?v1u2E۬so"@#( Ḵ߽̾W^;$#y.)me ̷s1|8\ &7 qs2O*pldr|\جvQvw?YO,SsI|+ϖ?F|_u/x`&iqBXHfdIw('q9W էڷw1ǀ~?νj4 7/S4;}CPWe_ rIeq !w({Kpn|LVMEfʬ`pr.+tR-Umח{<𳃟2M.?}*Ķ=캖gkauks RqnKJE)Hb9,ɑ_ߴ|d㿴zdf}|%͙[3jqw`Nr{^ױe+UrvW*]Pr韴Pķz>jC i*|nA} RźlZ~"׺]ݵm`q$l"XJ`}:StRk'yxyʔn_nh~'wW9/ ~q$&dCd(ʃ3Ul| +n'dҾ֧%>)pC(cӎu}I %+6g rJۭX31@Y *J2 ]JRDrtMkC%G|Ax5'ŵnn!ıOo+&5xfV, 6.+ɞC!Xmt-c'o"$-A Qc(){`*/M?h o_x2Z khs^5!;l[n7rKcsnolߖV ok Rj3Ku5M+IfX3I%׭b)$x8xs*tK{w-PoAWKk?xpbyxO }+:=r"D4M̊#'ޮ4X5oh]mʆUj;Reya[$r>}%ŧݚzvj gMqvrDpD䀣8ʐ/ј^[gG՜'JF԰ ~͗lj<']..o}fisjX2ڙ'vxɉR$|0\ψ:5cYAg Pd:u}Ne_P+zݟ )8Fӫ+-~rxS.n(X1-_{DVi=T|O`&=jMf6Ϯc?.|G[ZH,-OM*5m<^f Tm$h_?Wx*UzڬZjTiEH텑$l g}<0ҡ"ݾ-\Dt_O_f~ kq_]_Xiך5K( 3BR ;`[Fv~ a!2ODBw+7ԞIbM|{^~w>7z:|I]xĒYX+EAX!? h2x] 4ᮻk> Bmo$h,;Ky7 0D׻$yZ_y&ƙKmff?/3vC%S1i'WcbծG'Olc;wG?$1DY$[뷪0sk75ߒjk*bz᥇{C]e,+#I?f]4ۈe+2_n@n##GZYӝF.jkh,g]jOz,*1;01ƣ~ou{F5!wXoY_9< [VNkwjM)Yr[MGgޢ<;,%s%̡6z`km~/x[JtrURn. #f1NB2&s&*ߵo,׿[K{4K2w_i*1J8⾰x~?nm@h27!1\N"[N_/i{צ7 {6QKL|[{^Am";\vMyp);I+3tx;?i6?7Ra #V96ǚa:xEXRsM=PRz?9[Oωv-7<5*).ß&O'XM ܳw*0 M#8UPaGEiYyߩͅ E\L*~?u^կf֯ybc!۷*>ϩjJrq"0A2CPR_br/uhÅ.l5]lV3/Um}aN՚K=Cȝ^T PN}FIQ Ԩv6f#9Pǩ溧r̩BцzxxwJLw f >=mhZ]v},W1dRvL8]͜`rKIV KzRWZڿC|% ?Kآ3݉ $DIny~+|Y/b𦉩T[Iem/.&LI,5?[}QԦ8nWM8M3ƻk H}v 6\GsⷵKt1";~Q_ti?c?k'k:7W` [ζr 9$ FեlC|RR69=["|#}. GnY@UEe mU8irbh=ϦCHf,~'Yb]:[xlY")_>f#yhBFSnFkbx¾(7O{ojNؒ~'V]ʻJPSڿIJ/ WM4/,.T$%o=3tx OvuLM/Z~-ü!Gɱ [N+2|%g#yխgHa5+VQRzwvvOwo{MyOZ٣Y{K">[f0(As wdžgo sV/%.=YU[1öNJݒ1|+ҍy;ŸYYNF*sެo'm/xBO_S7A;ZFI#m$*8+K~?_m|M*qUjp]rN4]umm2Zɟ.6C>:O^+@->nϵsJs:INa15i:^nyuf 6'>5ՏyOiO='I'q8=1fT)KkL6k]NX*!ta{`OvYIm|cSZ?5CWYqk^f]1ư|h^;dѦx. dHVvQ+b]5~0З;k"Yzlڜ6(ھֲh^։ 5M:(U].B$ y9vǁYJF~gů/?~(>#{rY#<E72bEUq$~SxmxZYu±:xۢ H N6׫RZͽVg )uo'uZǬkQ[^VQ+z_6xεGe7 %p$*F7jqUI+vmÕrqRk|K(KW!4Zb=;Kp#*"mo!~ M_F2Epe_ ">b.( k)SzFMu>Y.Iv=?µOn|5o3iKqj,1BH72%RJw?FgSOM[Hͣ'_n񦓥j~gjߤME3b5{;_|y|Tl|yŤKkvL,,J)rBn0z5iTb]Ν:-ZetMkfX⨭%hD8?U60_T^Z[M2VHQ*ՕEZ-_#| h_>$Ѵk,[$e!>4}&TkcynEnna,rPrW'RUԗŽLxB"ҶuG¾!l~~Z_Ai^M>m$EdVye,|DC( ݒ>+7᥵?ՠ[mbA`d!˸98WtU:޾5Ԅ)7Qm,,!):9Z# xuA{j 'Ӯll &S?H?*  o/*ź-M8HP#R7a\2o;9b'n_G|G񷂧AY59+<2X-/(kPM5:Oua. ,`ᔶ*EtjS6F=6?u!ċ-&[Hmj]=-I8CB|=su. hnWO)RkөC ]4Z}O9aU0UFr'~8^(]D*VN8F{y_㿃ʴ63ErX+9\vx~B1Wm> '3u,3[h %4x*]6o};3EٱVQ@c?&)o5vZ䥡P OxRN< B82~HykqrN7Wx[ wcu U-u٦5;bq r;&({"Kq}ms1kZLj/Mo_^[ RL.BHI\9YmO1wM6ߐ̪XLss7-gp@x] M#8.ffo}ɷPJ/8޾mJTڒ4ݫnI4~M3Z:ϊK(-./;X#$Gn"$,rI=I %j> iqHEr6v'x?oGyJ WL0Jgb{`x&/K?~+Smu:)PH܏AGPi&ld~ط6#~$FouMurXˀ"`05NV>',ɽ*ķzu{ kڿ ,)ᅮZZyFefbjBGx>/%!՝%lC1t9!H~agMiUR bիf~̿~.0|GwqXh+$lcđF" s.g5Wfj~IwZ=X"Ih`OB8 0S8mqڴ|qxUkxpE{fZӳcpgwZekai0hx6Tŕ&e]95mm\+++h*XdV{xHfQ@p :~n'4>H۰ )o=Zo46kAiż!cݻh#vz|{wዯ iOvlnZ"͓Ӵf[BV~d/ZVzJ[f;#`*^_WּG_.:"XZJ*fo?V*Td~z.trT)’ZEY|;_~ɿT?|&,m g#nȄ"=X*aԼ=šSa=-pWYga6M}NSʭz/)чǦߋy[yF+X4EW*Vl{V|5@̨ž5$,A|lu)+}~G3M<6^軳hr>񦡧|)LOZk =R<<@ƻ*&gȏvv+1a^7W"9_dC2j6]K F-}3-VNk˅t^[KqDJ('+_ |Lew;]CI:CHX[7Vj0&s. 8xc+mSX[}rL*~ڢ5(~ ٟß K/%1E ZhF#x-# H Dqxkwgv_Z<lzn KFIg#qW8eh%ڲ43+{]'dZ7Qwo~ҼO#KyxRHǻ+6=|? _T,m"E' 5E|ٺiOu!|I|SZϵF1""^7ub}z_Ő=/=fEoGG{eE%@xU;Yzz9+78O@={⿃7xRKny5Y6Ce'|T/[$/GZ̿\N|`x ud@$| ^6LJ~$GphtUSxrFiV. q4}o~;տmoNj<ZL Eᤲ{$^n.Xn1‚'JU#{w:0&m_^wKd ۀJj=tAO\KL?} \P[SnIw> |8aZ|Gm:m2zMY0/#cx3wo?xI'P_h]ZLUZ;PwH5zúRZ=~eK(h>?S-喧z,a/ @J{W^-olDf@+nAȍ\HIQھUS +B{K?aa09Yۅ4t$8o|ct_Z;xB=f"эI) w{:o|EJxXmW6:4X<>mnKváUT\6ఱyJ-4,~娩ɿ'yY;߳+ۏDt}'Sx 3ROd,SXFӂvH qտA谈,tGR1Yɉdv9#` Q|:fk?F5+[\ 3+Z-NQ`)8w"7o]ŪA \CC{eocm77ߴg41wm|eXcasopTFm1/ cj4/xK%#Itu[̻0Cxa)UmFV{ZϢ;?4?xR]׷Vh\O*xP俲߂~#x x3@,9qviq=$3ـbI+`VZIޟ3FSKr̨Xc;@L ՗2p"֡Zߩ€}T e*NwtiR Ϲ91wI#m'^bgMbYWqiU-D?G͡'>h:wFdiB~ ̼ 4eTuwgyysV!Ye!V5QXu~'@ ?gOx? 5TY-dAGu.71@;Kyg5 F5!̯˩4c?dT-^S|io ~Κo{]7-hmU*2e8FFO?G qGwcuM8V')?~ω?<=B=Ba<څ">rTea%c8KcIv)L}D$nqii-dѕ䑷ԁaScUJ+L+ +D׼95/VrwFY'R$۸e?>M}T }vX|XVh` Mux,g׭ۓ鵬||q~.< |};PYܮ9Â|!P[ ~#3Su?|ðO.ʬQg%ƱvK[L[-;g/&2 y#NKĝfHFi-ohM D!Dž(^_zuRu-M?gM/?.|Ao\,RQ;.?23W R[?j< aqZ%֖+x"Did H>l GMZԃUp.z[~䞩G<-c[ϳDkrGggM(X~Iq_w/Gu@hOWZ֞;L-K@ZHF wXl+4%hǫ#\+*7윒]jejx^o^V Ų '̮C=ęc,)CvC |NNOj!m$tQ;_y+_-t.t?xkp.L"__$[ݸ"@|W|'WF<5qxmmy%F訪?z $ LMXТ94gԝ&X(E6%#h5_㯎o|#sk[k[kMZi<٣"uxY=0 Dg?o?i_SToW/$,߻ﻓ?d+mޓm.UogEI%Aܒ* +#¿i.yB"M!ϘH<fo/^ hT^)O]4J0BFq_=ܡb% Q?)cHU%.rRwOYjq=<[Lai8$A뎧ڹW:uυ/<5$q'B1\d遊59RIܹSڲomCr|O 5 2OӤTT3k? gXu»ukU):};pSL3_> ]~qLb>ë\۝{h@EN;x=SkÏݖ^FmF)$H~fXtD kXCΌ~3(GǪ̿T? _|!8?5?|zH ś#Z\i!6sm +P7/اA3#j 8XWS۔DV2d@˰J }$Rr˚R~3sWߎ~8|WŨi7j:ϓT:$:xB@n!"#,fctomom5$1uZQG]ѭ(9R 4v$(<,lp}HzjO _Z x7Σcn˳H =,zIWtیZ1u kwfk!>[ѳ޺g??FķNm7${@;0ShǠdY5l7a)ݷ%vğň-H_\|!#+2|ͅNJ, tK<r$+nޖ",]+UW_֦y^?cFiҽ~k7x߀J+I.6Go/,Io{xO rKo gYyewo-x綇⸒).L2(O#&oGmF̶7'nBA 0"i~$#Ie^I3gG4=*YD~,Y2m5HkEش8}\ 4 VVBj sX/T޴K%o,,ͥG226n 돛'cs]z$^*|mgRMzA#T+F_,elɞ 'S K~#[i h@Xqjfxr67?78s ?H9NPx# qr$T&A-sNsXRqNSW}?TOifɿ%csp4kx6-uOLq_U4BB-Txе,6A* LSw A7{[3Ql1KмO[ZxNT3`g I5q]*xţU&o `Dw8ivN$:zHطKAOTnҡC(0\'GZC|>$|i^,t[Z0o*u)yWMKr1kUUs=݊*AX瑎1ҽdm 羻K{Aeª՛>U/%[N+Na$ڞk+iZ]P®ˆHXV⿌l wzͦo MoaСe%Tp/'OM$/i)%~AQJO3OZ[ReiDȄȊIPͷcq+]^[M9M$HmF|d,@(Y+5_KOvKowϺI]T 9h'Ӽ q]( (9 g͌z^_RK}OςF×~!Pebw,l(]x;_8)%eZ맡̜bGT_3g푬tQU0cesl\]mgwǵʽ"ž!񎣭e5酣Evvhi!s9FaC.IwEwuy57cZnh4 T(dK > |ns⿈XloRY6$H^fH{Jry[sL*p6,F.~~ j7LN0[mjhT6BmD s#+ɌLcR|*r9bp\*kEE/?CG"l mKo5 dۀӯC⿆H!F]1 D#8|{aGBPKu\O卞]mo'$|./nNX[B]H: zτ?g񧅴/LVkمouôo-@ń@n>؊5Z-Z~\>)s˫oZx+~6+Km;CvCͲwp;,=Tzqݐ+ԩ̒ 1GI2XftO ƤИ=ٔt=jtmG7%>K |7tw3Mgn 1S9I8~*KΙͭj0xCTomNt8ɕ`>kHsYajFX/zyrQGЯύf;߄?OzՌw!֮E= l-+e\+KHE=*E6ceO^~kRRԩW4v6~]<6;QsT}?+u;(?_\ ,t{]cܿ1_Gn3,.SH R i@=+ľ#뺵7f]:iw`3,r95%ʥG+_*5OYW3-'_|s+ı܈,)]n F>8/W޽T>me%6o8uR`n 1B,*ꦫ4SZៈZ7~%Z zwn'Ar[q #>o*ͧǿgİxxMiđKBrՄj85)S+>egjg[6V@]cB0֛K#qo jxg]8ZۢIu`Ay؊UZOU;cö熥!Y& nJ\]4no/,F$`>u7\<֐%ܙ;O&xDŽR~-IJZkX@exkxVu?k7%f`rvQ}p=y=xM_Qk6|6F\A^wuJNm$NjĚ"Gw Ӧ+u?+|A_\+cf(y^:TWfՓn3$pX(Es"iEzݾpjז<1H$Xfd&!1^ߋ"GRY+YmHMCkU7k_{ɋiԢV}|%cN%RTf`d`8e,8#0~FԴ֝V#Kn^9܌%,gv7t~#a(&IWN1l?~ a!ncW4Rdхs?h_?|+`)8Hf2R~r^GgǏ^:/] Ԛg~i갖_.Hexn#2`Hy7pgJַ^!gdV< ܕb̈20žI c;A*ؚT=]莪8z8lO~ؿư&Y)$bһHKl^X NmE|GTBVs|Yijz!uy+o. qF7;X,.h. #?up_n2֔I#RZj+kZéIlnFOexxEͼ.戠tTd>z&rTL'$SS{x_⎒nO[x|%.#k ,@e ;uߥN_]BwпP >xKKyGu8;QL]b0P85?N_'O⧄4 vKi&w&% yU;Y JV|ewo-_LZNk+NV~ܟL}O58ima[iuɧFi!2a $p_kH2眪*QoRpYD`ajK;+t4?\($i#O.ǘ\xeŒ?ѐK8b  g8b_DTbMKߊ݇(.lRM"?i3ޏk( ~3דqszGx9]L tğWkOx`1C8㌝Ǔ YEO1c鴎p{VJN3]ёFudcfWFyGxs״ x^(RAvF[FVv@Xvw6w/~i3uy0Z,HT_Y$dR}5Q bg?VzwoF5; Z9ų @Fr7sO]庎ȾeT0eX*N8 WU7i6}fqYm*} s7^!ohbTv>ZJPiV2K 03:$FzXT] \kMFеm %+9(_mךΆM߬%/ R}v }k:UKOʣ-5>OxűŧCq.=;= ^:_E$"DV cWvV+mO|zZ][hv^,A@ ^E}jzv};FӮ5۵v82cߎ[m#5us\\0vWss 9M\}v#<%#_^/R\ySi~UOܑ*>,MVO5]Mg{v[3 I[ȒgЬ2`aiQVRKV6?>jy>>2xb3iVqZ)iZISp`[/5%o^O%G=cGWTjʛNTpNj&{g(>z4K&aF{i½2,f6~%u363+/~x{z..ǎR]?b@q$n ⷫj>ΤSwߩ<:SN,O>*?[ö{6٭SlOHӐ],jʤ&_N]si_< sH~b4P WNzE$OUf?Rx|a7wu6=2ZA{+9M'8ܠWZoCJ6wZ搷+am-z^kH_wB́(m*[:-6g]X6iPk:^jSnbX } {+ƺu|ۘrI}85Ϛ8Ҭ |kh 3(_ަU|/)?c?nU-I0^x]7zڜs>$NrN11 =*uĵʍYҞm?TM7iCsYvĝjg}" guImF!#X4p]-~ 1*58]Ms.W[k}?!'O |_㯏OWQm{)IiF/lD]Vu Sf:,sx;-K p$v#*NW&8Nzs]9n%WBXsχG%RW^|  "WL.4{58H18zYߌY[^8ō͉#zΤ尦~GO>*3]k> ѓ6yc<{*](>Wtom;ঽk{Yl]rͱ ͂8*D\3pAeڌ!Jr暸RU#iJ=/9h(ul[ϧKs>a "n2+&n5;4S˶;U~ BT=3E)qrTsU)E.Fm#FIoɂV3*[8=}Ŀ2ԵOF>]:ʶȿ*7$`Iv5m/o|VŸ f? [I}]կnF!%F`S-c׌yD#d]~Nn1|l\\Whc_&R(V5* #ߵ# ^mj *zOxKAcf 1h"ijt}ƫb F3? SrRH+6w~G.=M(=+6m_60:l9wHS@#*è5_|y-x c?څj~ MӵA T"BY3Oڛᯉ| sUŝq%$FpFA(aJu-?X~M#r^]^uTZ6G~5oxM Ҭ,,X ?MOYisMV%8}7'A1=crƁsz^?QKh^ʽPwq2RL1'ң{w~g^m<]?\ӴWW t S]ZVVwĄ^aKk{u_IQ, 1auﶼ.*)k8tjsQJJRonTƿJ~_O_e:8v_.~__J:T[@b}4>{q{0jQn>hYLJ|\nP UMRO GR'Zv8S\vYů %[xFii U`N:q_MAڎivh*¾b0ǩ&Eju]oG@LRxG=KABm}# ĬX`Bԍ4ilAqۨ_cV*E< )ʦE1:c#~j}:'sn|II{y ?*:jI~qO }wwq-7DY!A:HǗʃ*>Ś"[jS9XFͅVꎨÕRE;//Wgl4BV\C ȅf7%h AqX#7|-[i *Y'vJ0k4/TMMs\3sO5Zk PxCZ5K5ʃ?:j*4Kb/J/>)iR|8XLvpNmmc咬-~!|&|OĞ {+EִQĶDȅQ %y= 5{N2+vTvp3mBH n5}CcU2Z/5W+zݾkzm|ύP(8JqDX:\֘e!0^u8P]t>W) IEό>)iٚ,ZݮGO0p5疰ͪXXZg^9oWeUiӿ>W_k˦h{Y/Vzv{\?j7<h5 JMבOoq܎++ E}{qBKKF=v=AaSjQz4r9X.IM;4ѝ<#HC(@Ba'sׂ+FR H)8c,ymt9yޥxLԬ,c.R9Qv;$,IwNǰa˪DWlF2j6%=JPu-&vIV3 pp1nerWxZ]0K lmѬ!)'scZ(_WH_z]חV *$l~Qdҹ+ψ_/l!,%v|)mdG e\|:ɹiSu*YZ;'ōST583}/X.ɴ99qr"tMBhRg M8LF|+݆0jY\c[~Oso*s,SrI%'D]w̮g÷غ*F0x<8>l~Ii!8n#J[dT|RLy2mj8WʿNX7\\\SiVM2 qzS$3]0|7Ɓ|l͵ޡ}u,Eo ,JAB'v+M>,_}^Ɲ:QjqO R?I 2~՚I'N{>XY.R2%\^#@/ſ~k.HF!@4hf`~N+>Qej4O3q5"O݃Mo>v>oKoX@Y5KB¾O?kyr^ T |mgFO>'"-tK.n')'UF=HF8uF/ O[OU zWg>韠'?cz^𥎷㿉 {r~PUg/tFIțSq~O3^oN'cKucPWd @ϕNZ.~9Kn[߳Ox[Oߍ˪/#U5]ehm^8ro{38M|I?xaIoXtcm0kU)R$ !mr/}&OoC|T smy^Hok-6EdkmZx@CJXngًCXA}-ţWfmMf8Sʥ7]+[贈K(io3g~i|/~tɣ]J7*. <傱Fxu>k}{ÓkD2|1F0 ;ݵ_&qn :Vx{Y/4s4s΋s-VH+?7H5pR/>Ak[Gt# 3$Jʬǯ5|APϲ>z&~W(Eq5?57i[Q6܎CFØuھKO_Ɣ+ŸJ#[~.cLdץ<^*k}."4ozvO;:__8N 6??N,DX=Zxৌ+E7vsq_^cDs3`F|x q/V?-Ssv^dz6HcYY.|o }/ƵJx s\6(0JI(~m;mO~L|/~Gx-3@-淟J HdumS6ku Zi6Q,X3 0f8s&>,R6`IR/^7d{G C+nXՕݗ,/}ey|mlͻT*QkI-O|=>4xVhn&DH$fF8_Iּ!_xP]\iR޵$XԹPbE>CS*f䤒6m_є&'8ڞ)ARmrیT#k u^M Åji7$`6[zhCo~IO=<%?/8U>qpzuL [6ڏ4d߁_W ψ-S:Ρ]}]ė32df /p5Ge߇ MzSk!_ɵB0'wDg$Ɣ=KO)*rSo|IW 7WJb~غ51^1嬛n&W2do 8?gKߋ~xQbE|5$ƋumwGWSʕ<`~c;TtክRסܨb< OV9n߳]Tq@펕uh4o_Qpz4S+!kS:nU) oxVD?ZU.y&&#Ҿw9 #~Vd%Tȟξ RPcLkptq>!i%b#JOP|qЫ8<Bp_%ޠ-]`T6;XNzhGП?kOxݏ-eB* [47ndǘ1#~ɿ^xz/+KE@FBUrrCEXp2|Rq7o̦omIi.]tNMwwлNm#ql}oj-#"I$lK}Bpk/Q7Vya×+g.NwHFB_PZo/gcV`TWՃ%f8;uɼ}}Er/EhXA>P1]?.P-V% 7`|hRzuM?#o>3VF˱Tpq5?%t[^Y ljQ<2=YpX=R,452Q|v}[>6/iPj2EYJ0;Vl> xS%C`yq؝¨[wWj>1wMbiRw:o|X Ưwiq6֒=2$JрjFZHi ى"d*62rJŸrէ(F.qߚ;!:}O)X://cXc q++ %e$`y+Z sJLjD2Z 4o5jxiV(̕if*6LP*C!2_şڃR> x^jk70KZ3#;~PUxA]+jK_:j4י]tFZxY>u²ܬĎ2Ӵk'ܷ-#R]Y-dDb"}WͿ4-oGIđppK>ޭg 9'TrF࣯[hLʓܙy*g^/xXOѠE+o2 d$pȞX,ϪŠ]\Ғ¥[xn_CAz2\Y\k)//bO~ֹwIQP _;wT:w|x;Zg4:'c|G&HU1_9d/wffImվg}uz|Δ{ߕmǪSEOmoFl)Ҵ!EAvcsGG4[o xo参4N5fi)w`kG(aJ)rE+$ EwZc?žNy=:}߆Cc #(aD -s??mZW⇊xu-G؋yXonװ d*A+,NFG&8+]-Pogោ_>ezwOGJn6ml^kOvQ{~ў-υ_|mx#6Zo&սĒjDly҃ > T?OðO+=JTVc8-QnA,Qrzɷ߯;0d.!kM0Y䓟嬛qĿ ^[-(+.Z{mwa ˰9A딓x\*:(3xJUɲ=<I,l<|d }OY_ ׻%{θLJsN^ݖw_#O/-<-?؋Q1~5ZܵȲ ާASw]yKU~S~ٟ߆P+MwA6:4{&12Ieps_ԟ? ll k>]MN| ,2UqdԞJ|G8,ˇci?J,G;ό>{/SmCwxY.cxesHUT9 |N?ø|MXC%ź=6,=۝(OIq5} k{ɟ%tTz~ƚvgo(J I P;HGzOciw{qo R^ڴ_#YH˰<ӥo-)I"]FKQz>Z#_C⟆5u4^%f7=+_7_55@g@pp9CqO{˖Ca*8_>փGoYA.K)6ӂFG85ѬVq(¬h+=#w Odk+o UWUpjYKaַ_ɫ?NO~-?MPpBRFzCt?ڥ׆5nc<S }%\%JMe>*zݛ2j\,,é9?zÍgp,v]YNԭoDmu?SRtQ ֧ZNR_q[\ou(Ic֮hBXnU2{mu5;%9Z.BW^>j"._MF5r h¹4oξS-3tPJdt#9+WGNMFm=S2,/Ͳ|1SBy[2T[6}} W@Ǻ`p8h כ#/a?gQYt,yHi%r$N%ym9.^k,b@5b9!NE?(Wbsҥkv=o?|3{OpUR =>o)7l,,OK]"bZHԬrmaNy潌;eS}c~Zϗ^x :K*iouW¯^cѢoo%*6LQn,K V<_oYK.Tf9a>is>~\N\9lo{ UQIBu}:+"_Mjd{@4xUJK Vu x+X{ QeʞWQka8{;b0عЪe4jEp3$JyUprGA}%Osf0j*rG-s6/meZ)@#9Пxğ'Nj{(㹇HyzB Fy{&``FeQƥџ67ʊO>1i_'6쟨ڄS[S=i[ U!%X8~\h#xcEGU̷z-Wn6\8#9[Է-4B>׵-^D_isMkZ]VݕHn7 y5HT~|#}UX$Q[Y7!ǎ{5ԼKR 6`dx-1%caFb^AGSW3Pb67<=}-x/+? ٝ뚚ڌ{]kq6q,Ϋ| yYCk*Z֕AtHM6oN"fBɍNW OԿ#ק?v)s|o<[~5[ߵ]šM"]6_NEU>>`^c:)rk,7HF{GdfrY !UN)G^MJ?wqG)~<˭C$ړ^Y\:H;bi#ڬCz_g ,xASt84/ i>"sm-/t4e wg%n|(BN2O4[kZūT^bC:2>.PDd1F B&0H~b Q_> >mռYZ\_Zܗ`eH7npXҌy8|sDӃRZி7?+FD?dh@N(dc,T$⿓-zM*w/Jx}Ԋ7.tŤ)4goC_(w5&<%%$Yܰ \NWһIt}v+_g76S2w# _QOٷ\Pi#4y6O/nrB7}tuqui*jk3y65w_S |Ao_o~ѢkzLLI$FuINT<_o/?Mz?5X#ӵ,n7hOL X50հ8?I]\ U+SߩOMI 'Oºo;[P2jL4b'5?gգ׼;ML"9d!G*P#vSPm>??%֧ĖlQGzP7|+ /:ΛK BӦoﭦH)+V ҼmGo ~.4_:.Xkq6 zm-j͢A$O~LA$𥞰-'*iT"~߰56đY: :+kur *+&C;fo^Q57!wS^INyEo}yvisb6_ XMKz%ש[RlRBU[gMν8?/c"l1y z?OR??/QV|AֶⱺU]0':uhӥ?i4gc8]}'x|.m^I6yDHn{វ$ ⿖KcqIMh{|G4c̗-]Ӄ-,vIwtDk]Hq!Oُ =3G_ƿu_XyKG>UsKg/Ymc.0pzg |0~6|>0[>C[>uf]W'n~Vu˿|`WG!,:pCk߆?QO{Dv3|MΦK$e!H91qZZyc Q(o^iFH^?xeFo\8d|2~\x3]y."紼O2Wv?> ٍF;W`0qP\3q W+P4N\?ύ[/ R܉}jP2I- K |G?2 B8ӻtgTT> ]Ö^,>uƝ;Kn#s̓9Y{BǢ#Y73"y-ۊ\K2ԕo;'G|mYgXrĩ:oXɹ?Fs-~|I,⻃nIW^qi-ݜ̥Hff[M+ãGUIB!+rϕ㕡,zޭ؊RF=UCI0uƹrZI9NSTLR4EY&R֣kR2\Ϡ%.KDNSl6hr ;?ǨSe䓖D!99 fy+_ב|N/ƥ/+6Ş>x[{[Ή<38_wSNաt+y0ZjAR9Ꮈ<޽ `c_~zM߅-\y-nD;lC Nsx'D>Ƨோ_jZl҄r\2IϪV3k4&gj$//x|}sKykdnҧw'# K"w3zay I]\wI dvE Ϡ__KP֑s"ۻ0 `8\+|KkOBA*=v-bѲ H"jNWm ~QRTtKx~xwc$ [Ik~?=sko! uf?VKWG;|>hn|E%ٮc,$q-s횹Gh2ּ?Y4$xP:x6[1Z[6R\uHeXڤn;%Dzƛ I<]}=mc-"&QPA.+Gi&źƪwZHeHlk$}5L~ϭ[ cshlΟu?*P5%6n_5O}u;V ~;:ῇ ?h=A-㺲:Ys$5H`*a29#/jCh~,|S>%];-|-ݽs1x ea T}L/ k_PfS_V;MFK+mO?ehg dGaSnό7Mڏ)_-ՎI,a X&THJF1䪵eQޮPiW7K'׆M4,u%E]:Y/-6Y浂;՚ic;yNwcC/¿ |u{Xk:%z^vVE-TH$EU5 +W]3HE*/XH|xxw7 n&}'O6Aq(ByDIJ_:hy> i[++zyI(bS7PY*6iФ9 u=X++z03""x)ԥ<):)j=o/k?js j2+}SE[Ve{ aFyx3j[x_W]Siֳk1078x5!<:, N ;/!dg-G*ۼiub~--?6{uc Blnb7.G̺GY}'5xJlkhn5.m[P_>e ,fHs2k+SIe_G75'+?k5/<%kKkܺ*K!U`ZXQ͟mk_8WKB7vB퀤bz澮_2ܼCkcqn܎{pKh\Wiۃ:qWxH8mhUvǾAuz 0e׽|6\\e}ZY#3V䨣S%Oo V@s3_`l{R"(f*OQt|X?qiFb*mOm#nGnkvǷ_¼qn}U^XIi4ޭ&PdӼi᫉#rkVn?p?u+e\Kic!Xv# uDYF%B.~?,Ɨ7v۱ ~?KѰ#j U%N8zW_~GiW:$[N_# Qw lW+ԥVZ5kGvYS㰸&' 2LP7𕇍Kmc3ŶLwfoRC(>Rkp6’Ky0\`x2_PN<Ԫ#/CW&2iПgIZkN.s?O(V茺4D]Gb6ܳ9ܱד_uPOW|Fn#/޳U{3ex_,q'“ƼŞ|Ac.'Hgi\h6ye +֫ sziTU!'i8x -#wϽwp=Aוgak*%ޜl`9 b9+J 3s?8=IZQUoC560S' Ut]n(&Ӧ)`c_-*s^ՠq7]5ׯKiQB\ΩP\@ i_V :;1ɸMCuy/&HԞ~xcY;. bvv,0#uC~2G VrpߪoK'>Ŀ)kӲ̬Hh*x'#Jxo6]{Q(cf+U_$'BrIϧ23!Mw~E%1ckK<[:K^rƩ;̖%.\$#4[$eco}:8xfVK<^sx_0WQ?j1X]v>jQP Eouk4>lxou#=Sq]RIskw RM"Qծ[E 豉ҠB-&-݆P!ntd6EۻLFXvMawJ.Ovm8Ú|Ǚj: j>-zΫkm$hio\>k)Ѽ?qHh$f»5aP6I^IZJs׸(PaQ,u羛Mf#FHuQ#q6PigNqwJJp5%{~_y!|?!|r~_>|4_~[f; pP+bYt<,V$asK+6\]߂ߵnU&oz[Z[sܰD!KxYcU|ÃV8o.[uRVM6H񋟄'xgW1gWNZ[i"UX%_/! ü2<޻1xg sk]jw f1ǫ^g.-cḬ9,6W#JxfYY|X ѓYZ+?t/o߃>=t3Y躼Vڶ=ݸlT]Ƭf-qfH?|tv&Xøg;$y-ˉ?k jp|1ewico,"U\aO>}xKEζwe$=t5:3F)Gcpcuӳ7I,25y 'scuz(;/J|7'ts:~p:e:Jjcx#yYU_vG"Qr\ ^%'RgZwZ"=ʫ%cBCan%KcN)J/嶹 \c*Nʳ`JjW{eՍHN-Y~-5;/PƛNeUĥOyCZ>$iܾA[!̗FF0qͳǵuzq|\?CG.[֩bMմ_ hVn䇛۷wɯ:>"@м[TԵm#R TbI 1`&\o5lvbRrRw>7\k\,6Gqq!̋\Fdb)mAIS3gOM,5mbG0 d\0'''&_5U㽭m*-3!RZ;?8/n ;qy /YB<Ns'ˑYRiN^L5=gK#z\8SNշ2G dl쯩xoo}kx©ߢ?~,tu/F2OeAy_Ҵt1r:;\i[}4tgwo;ź+;F+54$Ax2oL6?w sukcԢ@X7,cWͳ҅՗Na㊯ YI}͞ 1/iyoS$^ەcӝ]~4YSZL1ؼIuifX2#4cw++|t iS\(OUGa`FA85|m)C( #K*#[p*]̍{01f%F:yK3ü%,aU5շFϢ< 6P[NxV_&a s8kCMI=SK⟏U[jvڬ>m1.@pm*vU-*R)7o{={l`W3A<~Ôe%Ҹg\߅Ta(4r W8|3$nHzc7 t1Erv?3@זún=坬"19VBvzl2oEvUm'Tl>C[4/ fKET,[~Pk+_j>)OsЬq$\L%8D@UUQo$~(~_Z澳l紊HrySFVi?t rmVK15ɷ,~5C|7Z_mQ Õqqv:W|$ᎵkmvVzİz )bhku*l);z46f3xJ2Oo?ρα>-JF-}3~'Xo m@0xٕĒF7<iO7gW%FWxKZ<>#Go(؉*F$KnP jRRI[|Nڽ;~>~ֵ 'W_Kƿyi46էR3)./.|1neW\cm5s`S|K<hv5i . sx on&3J2L!yx#.u%8߫տewk7+O\Qbg𿀯&vi3ܣȎȐLbI?eo 2eņ;.5+8]2;.#n38rR_ GEK8S]jOxji 8b`WQ)r{mKFs;顑E#B]Ff p=k7>tD0)'8횪vq`dմs#8d= xW,ķS:d3~s/n|t(Ai̿T3A_АMps&w=qY c8sՍzRR~G~_ֿ:EӤX5x V}2'ᇎtv:l1]U]M"*FAFS=zfTe=]95vw(dbPu(TKUq_n–w65,!:Ny ;cYdg#H`ԊvbMpS|rڥĺ#Z1Ѕ\g5Z-]_ŵp$n_lLwZm<⟈| _>')< Ec,QFE^2XZ̛ <E k4}"yzܛE΂\S̳W('JlsB$#j NT]x/ GO>6Q麵ͩ7_ͥy2yTEB8>#1X|-LL'ʯev޿CF.1qvI'yxO"6y5?^O-BمnF3yc+Di]:!eWު(K+1E9ێ+iىi/R3k" -.sJƢ>3I1ω_ʰfP!IeGm" A Ya4V%ʱbpRuj)JQRWi?FԵ {Y|#\YO" hJer]T_mL{BXɝ1sݮZ46pd*l 0s#, ˧7ֽW-h94;heyʼ<(U3^4I%ѡ"[a0x9N>r$n߷?(@ nH̑Z鲼w$6@psntb4u m65-,wb>_ :z"pIIVHq\Ϗ'٢㏕~V~`FJSĸ'~^G7;/3åNK g?+}z>"f=5M$N$P(8-0%[R-﷒?MahJmtE{>:G:ʬجvNjJF-{W =F<]wehZ  Sj26ˉ5ԾgI^yE<ś:~o^7?$ X.Džv N4%-]˩imxB HGm$%/–HS$W|ygZOL`Pb2]y Hb@ksOݜ^v6Ιڂ׫0U{h"hV * rCg/f&6k-7In 3<8mW=Uw[Vf/;hn~"j}WJW%w)B$2G0=?GqNNM=#MnNO`F+\pJIsX#x~œeImElvP(igiũ+W|1?wφ:͟,Amo [qwqmi|LlԷ?x~ÑY-$׬-ux$Դ"2V0m10 tSVlվ|m1JWwoV?;,> J|}}3E}Sm&G*]JpP3lJrk٫ A?_Gͻ]Ѯbqj'%uGa8s}=So%GMwpYAo_+٭u;L:8OaC?t66o5Բ YT,᱌S+dUt {hWlv` 9rp=u3Cь}2ʫc!NAr>*9oM*>=ԣӬ`,<ኀpxߦ+>)~ ^打`N6ȱdYd.&Vq 2UPYjhޑO#Z0#p{ sLy% s6x~EV6|?hUƩ6XRb~jZ=ջ4ɎBpJʅENn2Z?Fu!x?ymm֥lv^i2~xa^w-c. 7.Q%t|nmZ(T_y:PIJ {W']vȴͷpn$|-S55t%%qp(>RFq1=ge?_|IZԠԥdƤ #NVt32mORX@IUHM߻o +X᪤ܻJYWa['0],mݷ7 U'Ӽ9-ٮ#l 4#Y@Vz!GWYоk-x/Lqyk>eеmqFm aS0O :q<8`04s 5Ers+}AkwU<KmwNcd ;ݽw >) N {M~efF~Ҕ#(9aTHYc=;틫̺0 `ɫܱQ8 15/*e"t?&+9r9ϬNW?Mx}VO~?? Ǟ793*e*u_2Y]2 04RNڭ?C|FSTZqkNr+ONkm2xLeCھu3 nַR!`& EGnߑ寕SKs$ֱ8a֮E*̊c|UxJc%^zt4_%uo_|_>Zm.X( b]̅8;z'*&N.bDy>(nfq-jVSO[_<_',z{Wf+%*<Ё]^}. 'X[F#GrGQ2ӚqaZZI_s< YT\&c^]&t/-nAFrOa. ܣi,WZE;0nt늞-3EXKmػY#5け~z$Z_F4CHE%Z1S}Xq\S6DqQ".v  }.Y-u6V{ψm?.Waswq< ܐ;X hЇ?L~:.~z*оI)g1n5E*+qT(F%xe[OEMΟjȷ0$a$}K7`:dעmψ.&uhPծkWX0)col(Dc';W4߇!W|Gsx8TKX]{P :pgΜ.e㿱gim?ok\?/n9f#-ԓD%{oMK%}aqD~0_>&Hftz0qȎA+>|/-㷏àPijnOsԿoΟT|sIH"Ҳ?&6ݿv7 85^t|;O7CLo}>t?_ #Wck$%Gms_iC?>x/Ϗ>;V/ vsM1W#էmKc!U!<4iY9sk-S~_ hM?_+;zJZmY7y^JmMomc Jxsm7'5k2v+/J9䝣Б1'kC}4z\o !zIb#mwoEKcXooIchN|*~Z  RMu 1!}] d+lP2j(ªr$\("O+RFF<8O԰}Jۘ7_[($W @߯ojsoz3LY$; *'5/Jjm\47$WW/w;x].dgIy0UPڪP_ GCgFz~ G4i(ӊeJsd 8x-Ϋ㯈Lg\Y 8'ϊT|`7 /i@nͬA{_^*8ʚY6߯pT/CEj8S3PV҆mê&댓ϭv`7*iw2>"k?{>u} xz895y5D:^IV~ҫ;bNb/`&+%FƼ@/'VTz([WY?řsiwh5nD;IWdpG5音Ƹ4_jZOӜ~*OFs8׫9Aor`QGc;Np>Ƿz@Yp=+C0jO&Yiq|׵];_-;Ni": ݰ!#@;:Wge%V[(a#k;.(jagu:χߴ[ᾱ:76a&=9a Kq$|fe$;ТS+m{k4ĭ]G-]Ԣzh~ݟQ`vӑ{[f߉fo|_n|[7JK]Z[h I,Bq|gb!uur%O.[9R+9/Ü7AxƞռGFUu"IR> H~NP $Jr0 9W•![IvGn\~ 1 >YS-;7w1"~'qX?5ە$Z__:*F6 1.榇g3ї&:$D*67_ MMSO,cUTM0 /ĩ-9e>'8qvP˕zjNJ殾g矈<%GxwL:ėvŭ5дp @3 x|+-~*AhNڗ 'a956Q$K3<]ͰN[SSiJܼɽ"G?Β H-5e[o0y*AŻ!q6$8m=/׷vѫz?i~v ?ײkFIhۨHodU-K^OXpO~zz%JZw'f6Xj/D .ѲMVm$ '}3Pa KHOIuip:u&B;g Į9Q*҄Sm~h\[c 6.hL `3 {dVR_GAsg)ukZ{F xB-3.Jr+>,?xZ57\Ȋ^H]̓^D\985ΜЉ=߰ \jKcxur) ]͂+O|w&ˤ0nE$0˞"JP'o jz-/] {=ynُU4Ĵy^icH8*#Rs-ғMfnu.Y̖w9ްqZ?Sߡ>*.38 *2Az t%.d3iq̀3F J (#|"M7:nc0ϢE DFS\l4#7dPQVr ~=W|Wᯃ^!Z(ƋrH.TNP6sy?Ajbi>4oi$b:|6F:N2{Q(Aĕi- |I/4–QNڟ<;Em#4wHG"ln^! Ηw`tN܉|?L{y"yqy3SSPVZÇ<[E|$$Y1Ig yP9i#kۏ#5uWQC 65Vby'5T^7ʾ:n/O,Ne͌$MG#=+㿌`Mid]?Hhx\ߡy"l&*qk}<^.CM^jHmzD$nT`~xW=z>/ZMw;iVmܻ;.gI!$F>apഄi%~8nS۵&쒻oC-K⧅!i4yOӟ\s^޶Vg8|JcA z/~9ӵny@r=?*#7o[98^1\٦KNRSex:."*YKv(V[=1ȌaGwR[`rxXiʍ_{Elϐ~:;,Oq<-Ӻf_XY\j-A,jY񯻥FkCJN:y٦-πɳ3|ҾkWwզ]]t>}x_/#׷r],!*R/ z `࿀wD t$] ܻ{|1c.1},9myFOizT#O w5|Qm'78coVg.Hz)0_(gşi?x?alioz5&<;td'S.J?5WjUw|ר~=ĝQ#gFn2:ɳS 1vuU Ӓgiy+$`jʌ?ҿP?gKCy.rNJ@Qᔩ =9]~LpBRod}k,q mY +E|Gh:. U?o77R@$&[1mOǟ % y20}uX Xl  UF$뾂jN5cZ52| ]z焯z}H$Xd#$r1k\3[钴ZFg,OPts q_$8`Qe򫴔Ғ ~wg~%Y>=եoH̬ibAUL{bM:;NeMXAeDPH$rrp8V055| @[r'bYEvNHܧ{ q&w)ͷJx<=+ |ZM)>ZdiU uК!)1xlT8G d0nxĺx#՜iQ&+SI~Po4_J[΂(Oq&<]|ۏA\5n_;Z ]]>ǡ.wk\tLd5$`sYpx |_kye.;QV]$(g#?SK]nqIImtx[1?U dRcU#Krh| Go?e(WRJf1`I\uFxw_]/T./xTIL ufB$9cNj8g+uxk nҟ:rź.RaZV'2HppwC-|tgz'aKk\!a*21֋Fk=H)yլwK{f- ƸFͽ bv-g\/NA zNke+D5%:WwB~DכUJÆqW" 61O"T/?ӇL'^gK`gcă1nckkf$хSXMlǍۀ7FJ9}ޚi_ ڍycnmYN*J>\a14í"YO![k+RI $g1+jTjTR­ztTW탬h.GmƋfm,i0\7RFs9 VNTj֋>*qa,BuU Ң-M{qSʪ~G*Qv!ԮM4GX qVʃcoQ+C x$mqoo ޡ8' 6d `{m 3oRe+Gw]|.5FTDK>##>xs}~qƔ փoJG>WUL.Wq+($qYKd&|RZ3 ;LIm>"fn>sU|Oeyl_JQ,pOG%Mt:ǯ*l) ),p ?y9^qnalƚN~ymg_9V^]A;H ȹR`w8_ZxS̭6t>"g&6t2~;_)`譛z߲w-S>>fh!m gVf|njb`>>gC|CI.{w+L b1Njފ<1X\9hQ}4k>Q7=M2)L%u3~S(+RFV\\^Iϻ9$^p3k5'ov~%V˚F/>੢6mG7Gַ")[ʈ-m`JD]8gێ=+׽&ϨeI|sMrlǵ!PNsb#m]ıRz^0p)ޤ6y0h< cZ[v8\3g-[5:pQ܃ "мic]R,LJPs߿Ì.dzuU':ޭI.km;$e[ Cӿ tťh6(WIIgI 889;Jx5*r_OҥV.VpM>M}]mM*Bv,~Ss]77rZΊX`JcH%:~:trT=VO6j)H'in}_ ھ3!/ Ċq*y#*px$q~Zw? /,]U!7}ImMxS&&+A#y1Q̎w>ߍ|[Y{)?|K"Tm߰u@#VMrC㎮(h1H^I-[F:szWۿ_/JڇlYۀpL2xZ%Va_^{\oDOg<~߅gfՁ2ugܧr34d{!#M]n |C;_}xk!{yqFWO>fe1c+;3I+/BmJk>@!cN6Qc\Iv#͑يHݞ@:4<:<[s{?PHFP˹˰ +d2pS6IM{;}]XW(iWP ~\x"H#u^̷e؊HcfpT`1Cֺ:ZߙP!$pt9{TFAygv>?Rn!>~0/gǒ|3u89SsmInzIOf\]Hes/\`ϯv5̚9~x:>o[_AKZe_I4|?޶f:tb#9eT3:>-5>;YH\_;?/ #Vʵ[na*P=OFAzkL\jM Rcz ~>ewcU朻 ω{BW˽H82+~$[ae&T37xYMVK>/o_5wּmqkA<>ƽe,}kgNgQ$.-5Щ4)r_xul9Ti^OI,wys)>?MoG)(ے/c 6g^wףr|7M'N@T|k\jq6-s~;K j߃ҼEº5mf.Ť1oV7x$#:1W21O_quxĶk贔ì5:V>8x?313[^妜0ˀ~XS=ּ}Ue3ؘa㼚_#x~J-6/*`cWk֏9np ϯ־c u잇cQ㇦ݮ޾wǜՍS첫nG^w擫t]3W$ }DcХ[k_ *OV;zh1A+@^ Z⻍B >Sf c vux_f%NV|kpq]Ҕou_Oe?V?w~_7jX)e3\K"o-du$2W|=𕝎أB soh줰b@sѝ-̒?lG֧S-Yw|z>bv^xOeo`#$6$sֻ-?Q𞖭o#ôOl<t9R,ʬYEyNʮC=B\,0xIqO FcIuP۝!.{c]:UNiF] ߌ|&!~i%7OJ&':pT+ڴs_eu]oBxu#`'1I~}*| `oxI$c'$ ?/#Qq^bƚARrڐ;ca/p-w]'I''nd9<D\%9jeEѫ}嘅Vvg1| O)m +Zo6ci1چ9"G&LBw`8J@F; EYvwEx~O8-GN%#P$xC-ݜԓ[62n8STl!d㯥`47A`q 4GPN8S?g ^2/ƾVkv+bFn%bp3uʎ(|*ah_^X\"hz09RR+)P抬;~ SGCW_~1M~xY7xE)iXjq\Obaa 2#Bs:Tc{PmZɵgC 9^ WY} i}7_O`fܼPr@$f8N-:C/c#8EÖs*\j:ok<|]:o9jO?^k^H`JvU% 02/hT/xjM'ľ5muY[VyĞZơ:yK rk yLR8uZɫz^ާElҝ8S6_ N=w{۵Ox2<=h\I-FOe–oʰ39OE ?>TH?(Ąg*>94c|jЩ+Gx_xZ_6ZF*޽ufING NMςDNR 3e9˞O%'ݏR kzݼ闷7mw_MRi.9*srGJ_->P6 ߊcs7l7R3m(/h1aK]S Sy0|2%TGk!C bp25?-ϝp>Eֵ!$wNN=ϽyҳwUwrx>/y*[ L2V@jFj1*7 > 4&<[7>x$澚k5F,z\s^o_`OZgWSp-knVFC|HjR5!.l?uozԼ/vH!>F^eiZyofT%c')cA\ƥhQI1{׏ic{JS-/?b/ڣYqvz%^VXHhDpnG}v-$>t_иEk o=_5s? G,<`D~:?6U϶<I _ooy1ӏ59"ylZ2!g0F[ԅUm@@c64Rg:'_rCOV(L#RB?SYDBWcl?QD^u%"D?a)X@:}j_C^cTpZ| ~)$ eC׎ӕ%IAa3q NFO5NC=1DldqN%\c#)oRd-VCE$d0?0+; kĿV[I0qy!bz%']U^ZiD~.>ɞ%kźMRb-MqJB(,@Gy} Wis\)7MEt(H|W?|02ֱh^Uܿ24qr3ښ85*xſ>|+/,~ye#.Q8Gi$7$ u O_'mto4.eS:Ŗ*$9r[4}K<,R]ZO:PǩZUEm:'B>[:I)J`^+3gy|VfG{nvH76c )OgMwwI/-hgY1خoFQ]弝C h\\?<9n=?ysR@zw%w3'Qn>\E9vkp`Ug8A>f)$>s183G5tMǕ-a㶿9Kd,1ؽÍ'!7B#VNW8ǽMVFmy`,\@TA>h=S{q guV:5̴QMZUzo j-u E8AWK3^{' K&P mQDv1,p3SrveZgdrT*Ry&M[O"տ,mo(H3ۡ<HϚðY:bY?{)y=k9r6uhBҏ/üA3|.Wto孏aG+'wץAp6d`g|TmνSMm,:"ؼ2Eg r#_JV'mӴK10$Q+p3_[0ӊZ=z~8ڜ5bJ^w6>:OtU͌}Ot},0<aJUq?Y˲zĞg^ذ~^gx>7[ǧLR4lBDcM\QRWMhoI5{~ş[Ò}*G7f608xED+_!zb)Vh_V+ N"iԷZZsE|kx]4HJl ?4LB`}ScFEhmIacI.]pc^XkbђZw'}̩`pbB6~C%[Lq;H}}լ-vOKD_Tr6nJAXϡݒkɯ^δnPF6n~m2F6Ms6%608h<'Ľ@z"ExĹ`#$+OȯzP~S~ʴ/_2n! V Ŕn N=]{uio31`ÞiN O 1)#0-'}ob+Be .gK9Y`ofjV }(?7WN+O=ٸpʥ=n_ס|٣j=bb53mE<F AU{ot_ D+2K2 AgU|XG/7}$3WƼTx|%F߹~5c'D724>lF?urqu9 IR:`_־ݏ\Sp&RdCFB;~jgW) b) ݉ rs81l罔jB3s6 /с*޹xqONnuToZL`ѴJksAPdNF+X}~a TUZ-twoC> {m#gy ЉD%@(Ntqyb,Ƚ}8WXhMX+*!'u3iGy|$p9MӯQ8q$uͷ5=#PxͣZ4fG e-|amy'Ïx58G}_A6%ѕJ9c WWqSfTkQWM=}5㢞~`1S䤚JOW˧{?KE`I#H?q@%W%:|+o |T_WZdKMӞDi亓pr{U+IK^g/iⰴ2i :kni^_X> |; kK$wp2Bdo/WOԒvxP5nFڸf[[XXlu9$e:iI(J[Os !HQc ܑȩr Xxa RvH1`m +ШϕsV߳ g'a*Af:v'Aouyax$u^Z< 21[UblXJy,o٢ݠ֔Wґ>jRi's_Vyi-1 h̚8s?g?|@]/=O' QJ߯{So|/.ׄ-g3P*M-3[aJ]F2:g5'nh|;gO[p1|\fVݑ̲4՝]~ο?҄^c26 dz1+g9x?[Ic[Ip" :Ȭ3Ӟ+8Qϫ:+LMe)%̚#*i?/lYe,:'gI%DT#oG?O~3evNRA$±0qc*wxVϏ#f׃Y&vDwN9##9O_{^sMՅF#vs՚'cYYCXiGw$D_8ӌSz4M.xNW7o~2v[]qnO4]Ej/(gO⿋WpT4 0i7S@V~l|dD-hdwͧ> &2;}fIVk4s+CxapkYߦ, %ƳunqK?h#rۤrI=X"{O^i-nn#i倒]Tl795xl$|-*񟺣g{ラ󱇃|Mn;jSu'+rR%kOf5MJͣ!VW|p}?UwP:᜹l%I\?*52uI8ͷtMF,r95q%Dc yv=ZW2ʹSOXD   9ǽQ CR"N;7jwU+3[s>SbG^w涎IiVV ]qc03Xw"w9C41a~Qc*G9nahI :9|)܎QVKݢO 6r A=֭k朵VZJ4$ NݹG-[?&` q7(>򕕫^o?Z]3Ȁ0u&U푞j9vF>NeEx- =XF8> Rt<~ޠ*>EVQHNܚߌ )j f ush8;q^ݦZL䖈[8tR_lSѩpcۘ#AdtAӿj-,5FR RrO9$٫.xy{OiNyOMtV}OY++2NF950ҙqHܯobt {)JhU5ݵﱉ.1M<ɷ,#D_aߍWo~HQUYF5]*|;U7)eSNrm:? ͓N>&̥9'=|?]WGG1%@r}=m9h|?oev472Or!$ddD'JN kWe]؟A#5ׁL:Lrcѕo# pFxSivk'"!P "ǀ.IiRԊvoNY)jSrU͢Qdo7Q|my LF e!vb2xwo!!5N^~դY`kY-ʡfJ7f?g'bT׬)NQrMssyMN9>8O~jZ<3As;iG>6q8sEMPٴ/?GV&Acdy ̬Kn䓜at;NWVmUe] TTU9UNKMۣv8HFL9-<<oTu/82o#zqϥJݖ؊0NMNڮ]6MkM$};W9${֊Jo*@33x5gkJU%)E_qDLa sL ßN #)Izsr?ǘ/Im?4} qpP{+>9rÂvzD9rs_?bJٟP۽2S[&di,N˛rq5{(4xwn}>+qdWs:bc?:qjivZQ|=4WzfbײeFb6,5{-l 06Kq2fEuXi I*n,2qm%_V}vغ3>8;+Cy^וS񿃴KonOƷfHtI\Hc(DUb${h-|_g7>$_U><{kXZHZ wIu22N9c9ٹUMY4m\N&r\jz|gqu'{4m@$$W^ֳP!P!Jpx71^E9>G=׳1r?;u) ,2CGNztC[۴tr}+vU?J/_}n(ht+WwUZxgPeb'6FD#Oq=+o_|r/~fJ4tg`yw/ k֧*UT~^[jxGchbpiE}V?|__43Fѿ9ivKmmh J/=+Rh:ݍ֕TU{N<;:Xo#o]x ~*ڴ%FU %*wӱJ8m82RNw?. &9^$ cpuK_ `Qp7 8ʓo?!)f|_S?s52)p9i' jS_a$*،<}Byș87~~b9%Sp~Ӂ׵g_j>*0Mҕ>Vz{X+jgſ?(¿?h{?~)x acs-E%FcV ~DUDŽ:WM4B ~^U?m5SWw{w>Z5tkS,\SKI%Cwup~u'Q;]|O=S\^Y#Swg|o+1ȏ485'c QKQ׿5Ȋ@wUe=c3aI?]&=#eR4?OHu_ zot;k#F[[WNd8pgq^iA|ԃ*G"vW:F >TrՅ}t?-p:9EVoŻ4VQ-iynfb[hFI%8'֟y~ $k6b;y>~xGon.Qގ4#:|G)mۧ]?~_r2%yw;[7 U bDRO uΖ(`<+|UFN+(k'ylHlV0x@p7/O9A'nكhh[ztϦCTeVX8>XќBu(ɻ/'*rӓN]UTzSA\و烌׎ky45rX/_z~'?h]wjP^p-xlJćbFAU':t-ujGF࿄׿5 infI(Fı#$5jM?/5j- q<֒D@{nPī,@pzt_K-c _Lў#=Zab+E9e 'nM8Ϩ|%ZX5TM|6.ui4?*~%xoM{Z 5|Ir#m Fqa&w4 Nexoo0Z:@AGv*Fk̥iBNOn.|.9QŨFP(rSm7Sп^ vپ=:In9qRH$xkx,ic*nS&[߭zpǚ5\&'ˋH !"`BB899`WG񾷪X[i\DT#Ch8$f (Pu[sshq6. bJpI+GJ I[a׾xy$VF&Gd C;э{jSˑz[3Jg:w==GïZzEMxhD2wS.|{=|}>AޅC5cʟޡhF{j|" {6(l-#N0?kz\eXvogl󿘡d@@΃>?֍[|6#]\H)G'8k :BZΡܗuZ[6zbM~ld_Mx?~{~1-ė# AR{?83qn!tՙW׼I:9+|OVVę 1kqV{R赏@\dQׂ:~5P3*`H+iZlxF^X\" +"hhXB>\rIPOM+¥mӛdLa',ϸ(<j{YX>r7w?C5ڤʏ?ࡿ4xO=^]Ip[r4[nbs_72O2b]A! y.{g4)GH\ߩ1,o sy_oXx[@8Jp,7#vy5SImffSaI~JjtR;44q<T)?Љ{;VtS#.> d+^Nͩfg^=r*C[Ğ#sZZKsUl?/. yj>n-0E~"FFWbXwg+ʌYYV22p94gia${V~ |c⯌%gs.>\SX$J(`|dI\xKľ"u,%I#DAʜ}Zyj6{FcO'Pgx|[|-bU2M Vb6,q_`](TX#42lmpAW#=뛇jJ]I pԪfa+NIɮgkŽnj>;k11:Wt완*nkȊHKdnb0k|s'|]=d:u,K,^o*0wk 8br_Iʶ{\הcFOyO/k8g׮k^#MIy.q=^-pKz-mdq<:/L'i[Ma{E_竹fؘ6t=>m+~ l4i2>#ӁDm@G uZn,u-Nt=;Pі$O̲h3 U*?6k{fIKgFqƹ:wߒj.gbm7^7~\.}ց9vKltX}w.;=R+2gi#[S/URW0Kbis!=^OԈeu^"iW ɧ|.رalfE tt yxoƛ{lnu$-WFd9<.:Ui٧{% qIɻZ҂|s+~^,!q֬%.N>a}~Ws̤Im1  |o`ϱTnH⾣keaSلe֝~ \3[#u`ysJu̒\·}ƾjO'ui+ke+}u"7+(erN1*[) \32 nI?9]/q{n!Y1MJWzqyLOԔSHߖIgK> 'Gv涣 QŞQ Rw͐? <'~Ѭ|am?t W|~X?a);$^Kh!5&x-.'8] cp|w_ O |?Yb$Dn5V .1=TNֳ%V|Uhu*Y&~IeNN`1-sSh{YaB“nYMkT 'z[BhA$p9~0oxϣh)mܲ\6rDpU$,Q,zӊQG?,!jև^IkY_CU;R]>%e6(NkHЬgyF_] [G5g8iX=/_=W< n[ +Xgam0qE뮃jʼnp]Hr,DX.89'JCq HV?TW;c qOqQo2c|NO_.sJ&x5 ~_χGҵ'Bx.&W~I aZ]lc#@rĐ3ܜu~`puoWOxf =\C++%6H6vls.i[rEhN3c6k8BJ#6T|H4ʑP8{s{VW/$Q*y@H ri}HUn:o[OWpQGFG*V]YDiU!q彏_jaLKK]cű8#>sZ*u,[%Ӆށ .>f'y+E2Rk5_τ7wl 6hr_7P`vǭ1Zc=?|ag[?hh\I8b`1F9n׊>޽J=kq%ȧw{ȤOXn>߲~^5紕;˯~[cuees~ O%It 8(6s3\ϛ44Ы$JX;Щ uMFVwϣ/xwp[{.9v:%/*ɉ 9K~1f+sҾjN('j[WU;{i$,wbYstVM#+Ԫ+lЕէOS z:?,wIy6/ nտ_U}`,d_?zqˬ;q!M??(0<,1pk NeVX| kWɦ0gh)ߤ+v^: 6w9OUpo]=g}w ڨ 0Yb>GǗF_ۋ' OTZ|zag 0G:TXx7?Cz7+ Ni bg7o?K-rxȸ hivl;ksT^ki+EAxݼ<| #$?Ƹn'1tj^UíiX~05iӝuWz2-|gᏀ-\nXuNs feG&É_Ym? |&e_S^~fOZyso"W]J6C+e1(&)tpZkyA{itOjV;'$Wkǵ3RMl(EdS.tZ<66rPRJGIl$8]^i;dlҢe8\WzVWf_ϏOp8co¬Joᯯ?b~~κďt4kKF:mhMk um}k1TِFIÅ$ NS4%%$V>)b8NsVqIN]mV=?ṿ4j?4ۘχہ01x Qw*sxYM@G۝<6>cܧah1>]\Fת|l<ϚMնw]N uTnb:K Iw#ϽB?Eokq7@N4umJΧyVJ"dS_)* b@En^r~=u 9Ug&15jٞ郟(9 ּLʽMuVdKVw_6bY)_N[?wr2 LFnA5 uk쟤x6xx -?U;kii-3KV|Nq'gN|@>j?|w !kUKhB/UxБpGCX 7Wzn|&eΖfHS_+Vzt!|<ýrOx4)p-5K)mf;\*py+ΙN'7Wu)էjٮ̓i'8lH .:/jڗ}O?goAi'_^˫O4Ŋ܊g-d0'i)p6939fXzt)]+?wKj~cp,NcO09Yuw}u*MjPC!G  y߀j),UsH٭9>=Y]/ ¸6 TO?ZCOW5 `rN #g׊ OU|r|sהgv^D}E$F).Yl8+z?῀/~xYMܑ6 y&yfRH8ܣr sҌ:iEY__9Tg^ .~ry$=+>zמ}&[tC d`>?t]o*6_^,3xWN=Yv@X<\jl>FUYkiocGű b#e$>mSҿEi-Ј!cDar"1l k_)4[˾7Ҭ$cJ[KE|\U@5_-jr:^88fTGJ.MJIzTOkcʷ#Bp~l=V\CwU?ॾ6/؛3 ֫9;z/0RԚE?y/ok57b]$s#=?˔+H}ʫ\zzSuE|4G=~ ɪ+_2d;ݰHcmqpQL.?^G_߰GxOҖlו)o=~(ؤ<7ʸ9'r>_uA 0XǟAZq2:qI(/<5[8m6YtNWoaur-Ĥtx9@$RO~_b_Eg_%|\/͚#iѭq{,\hF|_$b1x]/˱gx_7H{%O dqWþVu~iڋ?u۷or{՝5m.t7\KX6`l"bKg9z _rxM|y@6j<[>\';rIu+=ccwo3hHBsz?z-.,ݴe$l̦դzaiG3iv{ʍ)Y+%ω< <2iqo\ӬY,YUAXOm?b%5ŷ;xD{[Qf]ُazWdӕ' ]_yXZIj~>JӼ?N/m&K a!5$bqpAy+٬2Ve;ٱM$ gWx:d)8;Y%w~o3Efz3dۚ~m'Ŀ]ZKJZ0 '_ބr+l,nq Ez}*ٽV;%\.r?vߵνx{>%Uim,̗V  iyvlqz>UM;֯Nzl|n*:N0M$[Ks2ΣՎpZ7Et#i6ѼHZo%< okZ&u4Bo͉2ȹ!238T*j<ޏ}\f/lnUvf}ukt5+KFXwYRC±GP2zk$?'vfOi4[82u'\z5?7SH1Q}{}ZßkzgWgM6$ c[l93g̰ gMs{3|<#tQVШRPw7'Ԯfk s֤K[ʪ `Ps^0zVNje^_|{mpė#vI#85L\ xyD6PgOEgZZ+ǝ]K@ȺtH.Gݒ H#;drN2qcO'zpjӷJt'_yRj?>7Xτus8H6mf-{t_vV^hU][ХыaI$=5y+mf~>\&.Rvz4u݆"Xziu>eErIz[?yc> ?м=e G kd12[ץAu;7ڶ*O c*zn-ZQK?3 JғMYx~=h="6)|'ʣ87]Zd8Q_G=1}+(cwxR᯼o~ 0YS# "\Aq3'-PyyOKlہ nqU= K >e}-{A`b99Q}*X:M|(}gc9[֤oϹ" u䓅?# *ܮS,PI$ʫct.gҧw}:,4>2cb$i"V`I,:cީ6&%Yȶβ8|.YƏ,d];}|!}F][?xe:?֙"Mn w%d.WʉʞvbT=*Zjz5}~F7$ok%"1${y;x8L3ݱJͤUy̷lv(F0A'W}׉5xhz>q4p[5VKT@#.C$UŊR7;)F]7nڙTK[ R4c7 zk5%-As x~F>" ss4MpHV؍8eeݹemH7:FN qrc:8^NUz!ޚt{9bzvR9',ge*hUpp:nq_Cem->icմ_Kd1+OI*9$\W?bU`~G&h*5?=~PYQꜿn|NG+R$i8* K$rGWu?}J?4৺7tw`֏Z]:n'V;  |zeI؁I\޵5'g~~?3BҲm͵˪iԍ$5mb{r](AP7$n`j5ke2cacܞWS%+Ԩf/O_?#KXF;)h۽O[ydm^\d=9Xt{IkV](ۢ''qW5=UuRq_AY|Z[3_gk c< ?Q'eI)A4ƖE[2yq$v(6vRzk^KSE^IG./> `apq+]Fj^*u>+q"EjYu6q€; *-& -ߴ4#rC`=w6 ĭ/E-ƫgg&"I2r%[pxm&k])9gmK9c08PGvj2QA'VՅK[v`túal`ج׺̑r~ҎV'Ԍp8=j_ bͯLi'ܮP}w caH~@., Àdy5iơ.f0.c%N<IJu*?qᤙal!ۡn[kI$ aNbVzy+4o7Ct( g5>{.ZX J+DQn˦ʚoሣgA>|+'"fܛK3æPo3|" m3sH|nqcA%w+9|^_s)Kwi[:5__ɗDR6H7Q_E_\\\bvygR&͟p->\K[cC]$~Sy~$ǃaJ.aNzsWNk8h]oZ^~2RxIs%~^&=Sόói} X#:JnYw2p#'z5!h v.+kT0偵?3g =jx05zq_(3LE|\]Oe[JϽq~wxC=*Soin+b/Z(qwn8|~b&FgUH\41Utjٯ8Ժ~ZwgVxi7Â$g93޾V\EqYt<]~&s)T^R=/ܛ]腡c Ocq׭|\~5FO*޿7GuGm:ڙM" XwW2H-|⍬vd,8)7\}O,>&6gZm_~Q͈Ya>km=uO$4^]uY%6nȫfee.O=~:N ʣ8SE{kv[jac5S4'k$+=:"5xwW"B-) ^dC09' B_ľ),I7 15AJtqtceJ=|sJƵHQPor^|:O2KTQ sY,%ubT\Dr q~\Vi8ZYMG#𤖱O?zG}w[SԾ |;{`cſ ǐq9$М ;9/1-Q#U j~cϭ|nB|ӨKI.?(MYToǑZ>dT#a䃝S${fo ~>:Vq1MoljzCJdZ{/yS?u֩|QzO LJ಻-ĵ8pךͺ_0@?k;}jpNWMt;UW ƽMlIwQ6^ѣpK ;ٮJ6 %.xeNz \`q1^TcҫSIr&Mګ=JlwJ"v瞴m ڛTI3@GzqFRZyǵ㫀M^2_bE]mjMn ?p08o6I#ipmVb# .##OC'FmI=qg djv,6>k5V s==hiC MS>1>i41XܧŇ{I ,P$ z|p6~Tю08ۙ\~N5WѬ5ۧ7KBЃcc녙ڹ0OEy~gM&d \"8cY`_vލrS rd7Qqx__tU8G'Y??r[ng2&X /M_eqq5-O?"p],J5%d>,z5/^]^ӣ>exGCmյ[c(5Gڭm%`z+cEaVV@ GqUHawڻbsTd5o>V` Yr~? |[Zpy->]7V2OI#\+ZEƣ |e.%Y dH$Bݸ Wx,f#*2-2kbU|5zjPioן#kd8|jGK. 3ʈϙ!rY Hѥ+)"p3;+^dZqmKN97n' '҉v؈8ӌSKskNrB.NܯlY<˘+ `*gPQ{e0 2N8dK9՗IM?f =1#z\sW.o-yO8}1TgMs7^] #GN ?0G$4wWԷV`8I?}rHAҴh7Ič vob >xx50i΍1a}Iի9ݽ[?<䏲s]NFW>m-8qً))!خ^FO^Wv2_gO 8~i_PK6iݞIimages/googleearth.gifUT pFTFUxVi\L>gsf?3V0%´gي;-,wTBrڔJF¤0 aw̴Bi!&"ϗ{=s r;,Qˣ"_-О[Ȕ7SGO9ݎ 4ut{:aԋ ,.]RBHK?DM}yC]CL~pH:e[:5dQ*{h},4kR=>;33mg7ͲIqNNLZʅߧ=z|Ϻ#]q{c gN5wi_O#FYcޔDovڷ5hN~Y]dmWeHomzŸZ{_ר3'y?37e|ޭh>4om2+;}R]ch]1^ii-H 40 ϸd$:{b4rfG["CZy]alR\yH[P^,K -;ur'"P^nW -mgW8Fmܬ t7UŹaޚ y1/]Kl&3O'48bK -\oX炝-3ɱ7%oBGԌ;/l6!<Bs!{ "nL!g* 6}T}[7om;B|Tu[8k?=yzWj$|=8aø8_کu8rpnKnUbnO0EM[ATjR{w`;ad=D>nmIZ XC@%cFMuR^2RҢ\O+Zq¤ƄtRxЖhu_\t=D 11Ny4~7=;iػD[})D7_ne:3Qu>ñM:1k,;r[ Ugh c(ohX$zRB =nƪm kxL73{gK4KBfOe+Q@<$tfrIdȘNfh0ԔN߃fi ]4^:+/-+=$x'p])È $ 2<rݙn8GMkM_6/ӌЋ5mFM)Gy:y; r`EA`ev>|Yty~Om3{q1t 0?rrfRudz䋆g^KC< ׵~[26 Y}U5Hl{v"t:$6zC0 vl%gH*!o{:a2f@/AUm6IfI ՞Eh.^2;RaQ#nvo5ƃu.aqoˤzPfHِ*/9"(LU$lzxC킞[f\džWbX z`NeuxY=Kֺ ceK83Rߺ0<*Ƽra}:&"X[r_5v[x"Z[캩etdhg^VP_uyJxZ;?k'=Xz-͵e:QEwg&~b16M\z赧?,G>jvqmd1z%4A\/)'N >K )<-*-BwG \ĥU\nBk>a+Cq,4C{NEP0nFJ( +zcuف;0p܉$N9gLGZÁD#X@!aɚ!律%pPj0Kex.bRIW1wJلjՂU/g8o!J+W K_@5e[+=q<(% @P Bk\ gI|b{ۀ:m dHHY*L6̥gv3Ԅ:E4)C~# {`+#M@K:x|^_/{B&4a~0Wǀ.jR~)4q2KaXofU,ɗSWa8^k"63 hpVMb]'dsƅG<<GDOAWx7; 9D|n.VyC2E#J`?f\@}*]5ZE{GeXQy{U̧[BNF$[Y(}RBuU|V,+=ff^ajG}?$/7%?Z57rMBPX0,2򄄡[9ԙKkƓdޓK}-BRr ЈCIP9$ }#G0˥Hh* PX j];:JB@azYn9T)"{J³АQ5y9cI?0BK0w-N8?pJ:@,!=Tbx$8Ҥ65T8i>PI3Tͯ.x=xg˥|p5oǸݽ9\ʭc\2Q Fo-X!| ;Z35qiBfBR8VA~| z>o}aA-(urWk PIa~"ms]!%Hꂕ5Yi*bA)8|XǸRwHO}w ҏ}i]  Y2wt4NOK #TJT6 Y\Zv~jny^}KP-^{|]48Wg-~(3t %n(Ԥ_Dȥ@mFG*`&L۪8[p9&g?-4^/L/z(17%+N٦|EӉcjrOoxTq;0R,41^e:& .y 2` ] u1mvM7_* U/5bY|oW7Z=?Cj71 xJ yto8B'`Sϖ`搒9)| l;6Ygl[Rx %G</թ?7RM|ѫ064q`gZD\;+XvU܆4~ɮz KmzFileTest.kmz normal #sn_camelbrown200 highlight #sh_camelbrown200 KmzFileTest 1 Untitled Placemark -122.0803072884066 37.42258649983752 0 227.3995606124065 2.462659727359999e-05 1.218597720655932e-10 relativeToGround #msn_camelbrown200 -122.0807216768044,37.42269042437039,0 Untitled Image Overlay files/camelblack200.png 0.75 37.42301892814347 37.42227291790284 -122.0789129013735 -122.0800115599202 Untitled Photo Overlay -122.079871206 37.421518339 26.10999999942277 -2.862499213317165e-14 85 3.730607123351585e-08 files/camelcolor200.png -25 25 -21.735 21.735 9.1385 relativeToGround -122.079871206,37.421518339,26.10999999942277 libkml-1.3.0/testdata/kmz/doc.kml000066400000000000000000000020721263603257100166570ustar00rootroot00000000000000 dummy.png dummy.png kmzfiles/dummy.kml#nosuchid ../kml/kmlsamples.kml libkml-1.3.0/testdata/kmz/doc.kmz000066400000000000000000000005141263603257100166740ustar00rootroot00000000000000PKDd:tR *a.kmlUT JJUx0 ILNM,ʶKMKͱm\PKzu8\b",doc.kmlUT G5GJUx0 ILNM,ʶKMKOͱl\PKDd:tR * a.kmlUTJUxPKzu8\b", Xdoc.kmlUTG5GUxPKlibkml-1.3.0/testdata/kmz/dummy.png000066400000000000000000000001531263603257100172440ustar00rootroot00000000000000This isn't really a png file. It's just here to act as a dummy file for our KMZ creation test code to use. libkml-1.3.0/testdata/kmz/dummy2.png000066400000000000000000000001531263603257100173260ustar00rootroot00000000000000This isn't really a png file. It's just here to act as a dummy file for our KMZ creation test code to use. libkml-1.3.0/testdata/kmz/files/000077500000000000000000000000001263603257100165065ustar00rootroot00000000000000libkml-1.3.0/testdata/kmz/files/camelblack200.png000066400000000000000000000411341263603257100215170ustar00rootroot00000000000000PNG  IHDR#8jgAMA7tEXtSoftwareAdobe ImageReadyqe<AIDATxb?(; 7 2 F@d< E C?36GGG3\|nY|9 .@/ ~ 3X]=``@1:CAÇ .]b`PQQA###777É'hy1dffFb@/?'1L 8n co0{֬Y :::L%Q] 1,[l4!蒒31AZTwKll,.w8~2:N3fMh9 W46Qy đj@ٳTs6B 2 b]YYYΜ93hq(M&''%+h* ,X-4  - 'q(S8nOOOm۶ >?>} o߂^zA}͗/_ tq@ ^ZT BDi|E`}%%%ϟ &EP@ǿXnիWEɼrJpjhhR`}EbH- @C"0 sJ|}}}n 㢹 sprqC:c^kAPTý4488=Ajm2LG[`s*HnQ4 < ͩC2c|àLz Xs4''aڵ|M Rd ꋜ 3-Z`nnΐEP#I Q ^ĴEyfH5?~A VN\sBÔ46k]P7 oE ^yʕ~Idd$.s)4hKFF RD~0syyy.^-޽7ɐ Gi\sjgXj  ]&Pp ` eFTS1ѝb.X 2| {ݳN#g!9:;;N[a9L@{r?@ ̡JOCD={6{9@ٝmmm>SaӦM4ZbM@PYYܞ@,G27|p3*??ƍw$(B: n s455u_ׯ*0.,s@^G%kD} h$-=tDDDȶ DTFdiA+ o5@R.\ ) O& :`kk;h3ȋ/Ǐ{:J- 18>AA0leeƸ@ *jjjU0S32%%-tnZp?hr07NDT]KKK#IP Ĭȗh-V0lAGȚKAtЀ6}piـx?[)G iO DB `4Q3֔&p=eeef2hBVW@#?A 2݃UPخ_! .@Az{{Kבs<ى9~' &6pDVWW3 ZP*n޼ ;褮;)?fЪP:: $uuu0 ,F@04P@Vqq5 jm pD_b hfG$h pr ۷߿\̈́\#ht A_4`{AR XCABE`8qD1h-sT+ 0@5 @RYPUU^AoA= |UA#HbBQkE) $E .#@Xaǎ3 CA@9@ j3MkehnEI@.Ak v PSZ0tڂh@2l D%8I4A ,2nG7#@6K{9vǑgYx@Kʂ+8 4&H]X&ټy3HW\ALb,Q2@t e}H%O4q2 L=|<"ARP'@I=ʐA3 O,9ESA kuz@Q("լ)C$2Av-,̜9|hht%xtR 2 ~k9y$h A(6ј@MPw3 UPG`Æ +A aA2@5NGDj^% @ 8#Rv#d\\LvKR lٲ]ȗac  8AZJ4P{s hoR *kATֺ1~*c 45L3h-x A]##<'!@vu-tA@{dhďfPG ~ A@ûI0 h,euցO_|5kPx{`6W2h XcvXIΟ?OaZ!&*4gc:kB1h?l"@%گ#3рh)oA)`ݚJ ؾ};z Yȃ\b Z &UKh ^A{A A@AihYh9zpDK~P?tz 9`w'2@ 1 ev\4 + ds΁D?7@i/XSk ӦM#)h@r@k A0mgg>CBB h^EFQ@6G[P!: tCvv6,/qA!w?Um4 ́n:ikׯD܁F[PqD5@+A@ &G sss> >222`9@ hA`m9$\i4g jP@@KoC7aԯiUsE-!Mib2 f(--Zm@4 SLaVP7>aKR\\\jjjЗu7:P-B* e#G~ 2 z# 1FPX&uчAmxz_)>T fr^Sԑ !K={ ::W!^мprR@$hHM+hc >@nrWB899amv9IDO&tB#b ^P9:?`- keyMzIHHO#ݣ!@[N Z9عWh z҃/(@d/5X [ SCꘃ6!@sU@9tW45UGB`Btxh['(N@= -31@O)@d5`/+@g eJ9 u {*@GWj t.@,fmюa6"LÿA8jkS@!(4$v'x4n@s-8Mh) .@deP t%1l .?9YY9^={ `FO! `d(ʄH, ~~a8s-ç Q)cN| & gF_`_齋 ?>#1ĄXqaW &%P&=~I :t$=o pV`0ta7Oag7h$?@`gx}~Ï[DrDj9o%H6#g@~A*V/3`nylE@LA̗AL? .˿l`Ȉo1j00͟?H遑#FP r@A@Kd 6F4W8e޼pcY# y9_߁'+ïle beDM2!!` ~b`m?0C[U 30lʤB`egcxpٳ V \ ~c`dfxs CEu*.8.p=ԷjDܘ f S(;@wҐ :6]A#a`l' vYev630/~}'^R3,CCK 1lZW.F*Y~՚V b^p$3f}}Q4rO>`ar{3;`k r?Oκ_ԨA BoV~mgU_ O,H/F??(L$e}e%uj J731xt!I @ R}I臅/ '3H0(dRâ?fC-ț t (s$ZX _ &%O$cpSQ`ث" tPo v5 \ wv" du}"*X ,5 5{kA@r )12R*+r!^ix߿af :8b&m^>V(;MP6+_d9!dNh.>?Igcc#YVojii!g%HjbwPjo 9Cj UC#0̀XYPswZ8hA&PaDM[r@aA@GL#O.J-&F`y9M P?+h#?wd>^ aaAjbq6%2b ;(_H!z ZB-@`k냎T{(s(Pee5+۠Hbby6 ?~4@r;>_y-@dR5|Ў:}<<<$@4:;)sVzP&Cvf'82d!G , C!CL "ak185@KhcV0c6 ޿ s8`t9 kײ 7C3{hoB-"ڴ$> dvvM&Q< Łס$,-#" Aex]굏Mb"IS]dٙsZ<{,嚪mIʉ;T[j7Lam0RetP}hhݬu{}٬c:&]BC3I섴t*mdcSAsq ]9E)? |;ۏ~2͇WA.56`gp'O1aߡ 7og$"R4- E]8Aupsܡ ,\ avd!0j▋AYAօz/oypo;ER  b.@3d>3f/ov?opa+~3 (Sq0s12(2i}e//`s &bxu+8I @bGa2rA@,~Gzz:x @m5RKLb ~ o0)F-_ ",L>:C^0Cܽs >130[20efH,Yy6`hpWH 34`}:Ï3q01p+8+12̙p32[bD7zp eFV^ pKLJH?.mfٸ5t=&6d$!+ PLL c`u+Aӳޟn"Qc;2xӵlʈYH~dVhsXM%?/X!k`aEZC6IVt9 m tu14djz%%(H9+cl~30#"♠5Ґ#hȖf^縈Ȟu&3Ï M** xZhk̈@ D4f 8PAXĂV1 !@8Pg"/01pqw|Amu%r26hs@Y.e`Gt65.p73J 'r9c?^d:::5@=ǯC)Ӊcd&"l XPr%KY z] \F a;@CQ /&y2K""1PWF @Cu:L $pP=ctÇJh'ڐ5.prUO ,dre ">sjT5(,(&Ԝ% Н' ,w;3 (R@1^/ ׀ 2iH}:ï//>?>F\ @T 0!^P n &,9oHA'g$#o@; t0soĂ<3;72<d A{>x?;]3#Z?_BN \چ́@ r}He ,,kN"ifIql 7n30\H8X$^LfVnK^99y |DORaDH(% Cp-o]D. r2~<#yM,^'H b2-+"ɠAc` 2QFI&ftod_8d&=N=^F6$ 2Q@yE9 @Q -2[ xx20i7/20ZJp,#։B<a~gx3ǫKi/A@+AҶrږ}([n?À6ˑ9@

c>@LBBBI#WOoR@M?z@%,Q` I {0,AJtgF鸃0H;3F=lpsτ`*Fҭw>4K  &)T %0 AT;L 0BJտBAq9|B1^ ڀ G(zHnlJkڵ4.%wICb Xha)l`a m{BE49{Hbfv@Z38&G0Q.c`-T".apҟpI{ V߹Jl*uܡNR%u]ۯ21P0=$R!,vk89(qt΁%(>#I3۰k9=pW[ž)1[Osy_Ldx{A~6 /?^ؔ,.GDõNpB˞PR`;(!fjx!dؖm#ۦ7ҐLct; kWh }T\i _F:j1;h5D!w S:S 2E?嵨AE[ ҡIL$& BB?,",""I$Ic]ZUD4>{T]n/{wsu.1(H VXb6@-0t%|WķSun0UK^#ABTAc)`ΠAPΛ3jD5Y(K: ͜uAbbbT3 :\G$y8:>a(QbpQ}Aݥ0 )Y` .AVE+t誵F`r,sHHH0tvvRbڿ@ 7F;` ~k^M0Ysl @XS@k rQ8v ώrvv-M @>R)s3 0ZA@#VTjZbBZ F(4j똃uYd , 5 [Aǣq3hd& 󆐛SKAMɓ'3BB^wa@CףiXв4  ++hⅰ̑ xAsq5 ā/0P:6'qPdK{#@l RRR O>KhZA,O(p@ۆ@n4]S "W[A X搕eؼy3, X"7 V R0Ի8)(cNAhЭ;ASư+""p%##@LK0y >&6a`Ntt A;{@ @ühbrlR@UOX`fagx!_t.bOD͘8q"6CYYǏGh:cV3`@%!f > mEo΁2*wkk ,ea,M\X1\ 97a Bėv3Z1 ^ N`kbP iiiYf1̙3> > R'1d vdZ~ 43<9v(H(hi?$% p ւOe$lćF G8 2 ,j!(j/6hnf@-Qa@8&;^YXXY :gh/#-3(Uv.]?ȚWKj"Z ¿fr ۷o4hNb֭ Mw(@wș6 8,r:vܤS @J29gΜZb={\ܽ{P&q ZJ }A硅}h ]o|A%:6VPP(I9ݻw ۶mcx.:%$9C ڍ$z*CUU… &xMdv*ڏ? ڶY9 ?=sPb (&A+AGЁ,V}j| >vr29]\\XOHsA65y*;;{t@,С8=h*41e: 4X^KnnUNo.^k0ԙɎ/))ɠ/e@P驮D&q x K333 @-C5C&uX-P344$Pc+8< Badt gaaae,5M@cHc@*e nNն0 hl䶹ȜD %nUɉ.}1h8l wJn}i `DV@뀸9 0 60"4$Rdӧ!gP5n0%IiЂ{'N;Fq `Sh| I: er >hgbXf x > ThxԾ1`ccXbh \a1h|OOu=h_~~>1h.kZoO" prH|4(=,g@Z  4|:@{{;xiH~s@9jjjFS; aC@{,=^$3̠6kX4 ڤ?gn K G䠥7(s/_<  4?4jdd=ݰZ Ԇ/((@ݓ@c ׷Q ـ֛(SF3 oܸf ﱍsaM$R5TV޼ys(Ќ>?BJ戀 VfMb:R)R%bU V V{n ʙ@Ka@ 2"giӦf*bBnXOE;DٰmCjg$@1Vкi H#Ve䙙 f ul P@4|AWе O`(І.4@ 8qҥ)J 4bt)#1|ЊT3uFAKI][ ް?h 0a 4+.MT)ԩFj32@N ;šeĮ͛7[2J8 B !A9КX992{P&A:t8Ge P2_0T囒2d8ϟKu(6w P2#z)t 3ACa$WC۷oR"2Q@: ZȠ3Z`/h]=a Г@͑M6z0Ta˟?-9 p8IfA)ߠT!R(Is ;)jw!p9{Gn@5""=@ 3א X-n:ݽRPf5ُ]]]{@2 0vzG]CH$kO C4}G4/=;G@1W߿Ϩ[XX0K\ɿ}Dɀ8 no^_j޽|PHܑ bbW G@1|\NBBx64:كr *1[ *"x m,5@@s Cܹ~x"Qd;OP.72 %Δe[[[p zD hDk-fz"AAG;+ȅ5@ ɀE?JIkLBɏܣv 0 h&Q@! CA%ЍFRL2e Bؾ=DG9DXhAGgz۠5 a,PgH*`DH Ԏjzt-u@1&+H/6p |3hɓ')J Jcbb@S hKvZM P&C,T5UaЖ֒AJJJ|SX;W6j^ C%Aw6T!S BR`LP )qAʹ$X-:"{P(V "4!* C{q !(( 29ښTҁ&-Ie$3@ VVbnݺu PPeZ|O F3:Eh rf(6* (5tDڕ +/49H/ӍvR'r޽{׃oG^Z@Wm%Qhh  TTTv2@QA@b P$@Gm@;hM@-4TUUe$qqq@ʤ&22-h ּ;y$G@> - |@;hidH@Th,ԫ133{iRZe9140A2A/7lּ%P(TEPKp؜VhVba ZA8bjjӠx +k#:h jJ)7`*@qڮ1IHa@J7Qb`9; h+s*(2$iAkߟYuGP-b'70H:IENDB`libkml-1.3.0/testdata/kmz/files/camelbrown200.png000066400000000000000000000402631263603257100215740ustar00rootroot00000000000000PNG  IHDR#8jgAMA7tEXtSoftwareAdobe ImageReadyqe<@EIDATxb?(; 2 Fn@d< F3(x@ +1ݻ o^=ٹ2D1(k-{7bh.N%@Z@, x-OȊ6z4JА ?~dx1g3\`qvN a Z4u۶56,piVVti1 . a' ^ĵP6ÿ &%3RА = &`v42s2~Vo`BϐSEwMi-cX819Хx"  ^ppq34Ofp MhH6uT2,NlH [7 v$XscFrhsQ/Y ~)) \U0 %A2222Ĭ?!cV6@+Ê}T4u▲7q(CK8BA /󛁉aƣ : T`Xp&ziZ LD@6 'Y4P_$ǰu>~2afN.[x2BT Ԁ_=nV Tÿy ߿}xּyݛWp>hEPDX}4d2HWUӑKkP oxP_0 +[&y/ 0u^!qܲz\䌪bc*{7d aPPc߶ getO~ ZdzXʌ:@pW XB`2L߿LL_߿P0y|$e ]9diup(39×O_Ν883ȁ,p^tav6hH`P?& {fG1;9 4ILeeccy<ärUp䌪ěh9`ف9!1PPp>.nnp8S dd$M6hP  ;7,GNq'0KcII`vZgNPW/gQ ^%' ` g ,@ա6'4Ly5FU@@|W޾v*p_'hhfS͜9`*M}(A5Z=ke @%I~ ϟ<`e?[!*\=2Ga `ءeg1MJ;ʹځ`t ekɌn)mU*e `.Y@o_>3i|g7/e [)8~ (>C,plve >@JbpA~Ztd eN0/āLL1kPPl>jqDP3 c j+CA4G1H"N/A  Yj#Zbv_hbnhh4b`GZc;L@pUgS ¢(kݻP4mZq1X@TfMaWVcU >;rXy@N~~ZqK{70٣ _?bM m@ yO2*Om+OCk /aaxB ʉpNg88?d Z2a փ:sܺz!?ړO)Ð-h\ׯ(,h w B PPXAHD tANI  ?}`rkXmƈP@Xՠf'x_bJj| 5F&524kn K2vb|d'0c0#gМ* @P1| $߶(˚#A$X HshXIl_PBQtx3rx+1 mqʹ Oc@ε `@EVYZ!A `ͰoZpg[W? @<>j>Ȕ@=߶%N0 dwx j`8e3̘Y0/ b]3h@ʹ ll( QDY; EN.s0ٴ\,)c fkO3\pyOh Z+@Kjn< JMpxf'"1뱏Z AYO]@  C0BA72@Ͱsp0T2ܹN=mc@;'aЮS[->sd;; r{s hS@2?cϋf c@Y"a9@kD gO#ouaD1Pm(NG.33C`wPil_|Figb eg3|y{03Z :;u̔?[H!@t{ȚoP~'d 2ȵ'P龤}vXmޤ.m؝޿y|hEx h'hWau(քbD^ dYP* 4LS*A4% <;;Yȃ\b͠0 @fr, 5]2hWuazpDwo\ah+#oû7P˷!Az&oAEЪ]9 6/%;/]2h5zfFTφø7=41lY9aY$:e,9 K5|ׯ Z@t ئ6 W` W7nboa`E,z4 Aue98*3$mFꠃ;h 3j2rdMfs` rB/=hkxPkXû閮@2>4XppqwgJe/ Iar/gO¢33ț7@g!e4KwwZ )ER'J3;''oC7a 0= M3Z޺j%F2Gv#A{ʒXv2rA* $B!D rtV7!/n c@ܹ!T0G~6h{X t6D n 9(xD*]߹ΐ0iE`~ A7Y ftGw2 z# n]Knkyh3b /BӥJ!an<$@4S#HM!# 82@%엀\?eh+`ȋr/v@g\xA" _> @4ق,Ah:|Ço { cADB,C&,O Z$ Q0x'D =E{'dx~ rA%ID Vp^ڣ{s>dh I q^+j&s; eP]z#Dj^ip %nH\ =%؎cv: AO.Z(g~(4Z*^İ TAGJ ŝ/?2,0ob+-?sl( @'%6C[{T@'$(&A5O@,a@j 2ob Zv6.b01B9B W'@;@yp -I!DV/`X:k"r4j t7@aL'lv703v X0`d`fa t#`f%oe @KMeAf=4lAXL92!%3@ANKD`B9@ *H}"/mo38! C,%ƥ3xklv"]JR,a[F$`ld8 .6t9 fs'2Lh(OCjMdJ:re٠{tG(KM\j@x' A7;N 949FN:(yI }HM*%m&c\#NLGBFw^e@amb}A o^=]f($z.-e{b ~$(R^Py%oC>@`6W1T0<] d88X{ddl\>FP_%M C@23J޿ LNQ o_?3񝁓]AMd8wh @v׏K9oE@&o>!!bKǾ|0yz$PV9XF߿È .$9`@K1>x A.''4(C\,_ :v0N@KAt08\@qIj rMștL`(~`hn> °dzxC1P6+O(+ ۀ2n]phF#{6Ѧ$,H-j&`1AIa b`cCwh-J'2|*rbp Ik_ƨo_۶zɈ x#=t EMpPzgv[plIZ? W`3@p<|(y tA?Dy; ݻIr|112D2c)%:o0\`Zpbn]Ԯ%ALS2:طu å3ǁ kX;1xŠ3:Դ zjP)-y<޺s3fF?HIN  `\W/!`Dd!=WdBfIAGM\ƐZ܀5s`j mcN< CX3څ2ؚy0VJ~x3$aڃ83:Hb-20LXg@ޡ ӀM=P| w(7 8؁s!޻7`8k+nнh:ɛ*d'~rJ3 #,*9ge&6ĈI0Tt9(k={@;>YXps=d%Lj" 3U6rT4o^9n{߿y`AXP&rMG@%xIdDo3pܕȠ iy`ͱ\CuTCȰ .߱n)x ѻׯMLKG̱;ݛV2>FŐh$=o@E'31?$@,Gvofz$*Z:.! + zG \MܯY8{9CӔsX{;7t`FgFp e82Լkrȣ{ ~vO/ǩT#ӣ{@P?w8 z6;@Z `AlOCֆ)p[VgH eػe0yk@&P'ȰpJ;V3\|XYYPk[s|AECa"}-sLn)eE+hp&;`2<59}|XOA>a>AsOļ$2PټqrМ/=_*@LiXT ra$pp-Yceؾv1xj3JHT}3ǧ/ ZFvi}*PS ̔=@wqQ4Y0b7'?mRWPt铀X/>\\d &H _>}' Bub耗OA\Jm+ iha0aV1I_T峦@2&޽fصqh&!lCX:@ga ~ %u _>D,t4ɔ؀'C-=LB4ć@00Zؓm@g[ @#O߿^"l#AvmHJ;Xä \؀%äe;T4|0GH_?gbb@g㯑 AN_1e2X3'a^q ZA~Â) -IXW++j1L^A؜AF"rLJ@Cez(f$e36?h^ey|VO#)Tl]4xewo_3p3.~ݷa٬~:)#xmm>}eh6mu]i^5/LǗACʁ@,z Dd$-rA[ -~pCg |( Q}M? u1 bR@6-hO&^rZ 3#Pk=15@uYo_/Se+$@%"(} >|g&lnyP䃗lb@pl1w$OJ ր /_Z-of } ?DCI\="@A)ZMk$!K@~@GߐcJp ǹ?Vc@e$ \5u5Uoi? F/cd!F_ a7nec kzFv^j/_2pp!߼Zn4AWbi@[ _?C@|2yޜ-@5 >}@20& .JAW*ꞹ ,b8~`Zv3Z1  C; \&++\/"ɋa Wgx3 3db;Nb 9j #4nC9&շo B" 3yp@A@ q.ខjOanêw~*ZyɖJ?Ѕ-xbq$ D@Aѽ|ZǴxE f;|$ :V6G APP *!=@ JGvG`v}H _27/]tp}^,#r'aY YAk"ZКfv6kD>A2set'0A޴c ]~3?pj= ?F PhPIYE Wp#KA`S A#u3%Qa@ ,pٹ8xᒠbI.OF@_0F#-3hQhu G`Kx؄%X%{km}v0<DLв xl.2 *̠ B 6@4EVH |ЀhЦM}9b+tZcC^ 89$h (N5(-mk"gقy 2@w Z? ec`Xxf 🤣>}x$޾Bl^;d̈@@8̓X:u[truieSRy!âf3l_ճ P" =t|9%5ٽfY9 tOh%vj`8X@1122fU9W YvjU JUrP7}RIDePaPk'/E[fk6yH m`M1@ Q@#у1BS@!zb0u%J#bt02ͼ{ O2||&/ :F/4a,a[8X'ҋ<EU@5,'q xb||( oAM0t@RtZ-1Aa )~fvX t7/4j[A`4Ӭ'( \<(c@Uf4Â8(mz]( tmq6G ¶~4q0;vAǠz.iFd# hS"2'oBkZҡk03!ALBu4œ :F>yh{:?z@P3<Xw <ݰB;!.b4Vr>b$!wif-~ J\| Kvgr3$_ O@Sˠ{h=LZZo K/vXȌZ 4?##\h-9@L:V!,1wHfo!h,4ւ։Cj$WbD?F4)`-y^˰le @7ƺ"0j$ )#:0sڃ z&V@L`LJl7Lz+ҷ.643< CFRamh x't@Ejb|0++_d_r XZ*4  ߿}egNMT w]7k@ P@1$R@ hbPЌAMp.he/5q5|DJ34eS <_\_Pb+nFj`,'w : +Aڃ2~@W΁}#3*[V; ?%.>CVX)Бb^|$?û9Q9- P2ȕs'mQ[U]̀z!9'޾zt<k#V< %prqCecN _0T囒җED20I 9/rkH8 B el]Dd J$W1XYY>;,KINq(Jw`p c+,Ag.#_0 z'qpr0ؾ49~TME@f&DE@{E JqyR(IDȰuՂ!clv * gʿj* jچ Q ߾}g%$HdZ": 9o_٣! Z" v( We22Wd>t;"-wds@ T ~􁡳2 G*$h&5@Ƿ/_FS5@dPA+ }>"d@_zx3@spVـ̓uCH闁N$v/.z G@@s߿6b\" KYP6h?;DM$|!;ifHӇT*Dj v'n1E[F@dݢ0Zmay?Ј1'"_\  ҋؑ0\4tfVg07yH,(!&,נؓ}J BM@} RRrY204l+9K@ΰzTO APDjCz!h" t$!/lb ]EhD 4.~%@P'Uɬ, ^eX1g P3yOzUӣk  y~ RN!;G2D+֩bgعa)С~nb1#a n h!lqIq: DNN!22юom6=`;۩@ǠFC", _fرnɐ ԷGN5D Zdž<){=iRVC;AzDh̰k2Nf\_lE利$5.V. &126;<Ȃ 7P{-8?+Gҗo0\HǷTME@L*TP|}hm,d@ 24:+~pdϖ!?CRI¯>2-x<@1t銼 ʦY H[>qn8@+`}vV_? Rm!^С @iа/GS5@A@mD\В OHo @BYl ob8s7N:/A5x25#FwR D+G(_J8N*5@q꬯?a/>kWȇNp1r>O-݄0Q 3/ ÷/x"= \O C;3 g j^}|2 ZMh j\6KVXq &r4E$1q!̀ ,\J"Vf"'Mg-1p+h4#NнCGu@A@0_jģT:a# 0prq1ۿ냳3P "8+u~P/ MTD6F_I41??2u|t @w^޴rP(rLFEt>"א*Z@Qg0F&Z߿GP -䔔;̠+tTz1W<#9 :Uu֟<|'I @M=m_5YA뷌,g X`5>/l*";*ud^Zp  h94r_f ͇Lm|&I*2 E>@&,*>)\mw2 g9@1Q9$>ARV fg)|M)HT5 Q)qA4h^Ȟ s' [[AsEjZ7rЄGߡP{QvKBQ@@ePs+$XY2aMP XG3󀔃#sz1x覬6.p3Rd GOE!QgaŌbgPn=g_h`[cN|6^`;'CQ7MjZŧߠ"H5& +éC~kV~.!pєM%@g6p"G OU6Nr+j#3_hVF̴` K~~'O3|= ,-qtZ??#~ OZБA9ud!s8xr\ r-ȗ59PS &]j.nn֒4h^zaυ AO?s# )@Ci`5 (@p-siȏ~K@gCK7p@EZ%~7T2b;t 6; | @?~03Βߟx72 AkBp(%aBCu81)EP.41ݟ ڷa8wCUz(ÇwsCzz:?C[k+"$ԿmI>ʀy'$G̀/Qt r9?&d:!oI~*P/Xڵ2=d@@ͬo0|I ti*h;s(r9Dt x"vՂ zGS: ( _0!?F51 I-G?ȰpJ;ӧ >|`@*ShAjX&EaD$ꭂ!//Ò= Mdb܈ š6zAK:7؃9{ׯ_ //Ϡ&/ >1>fP3'1I 7<I8:N> Fn`˖/=IENDB`libkml-1.3.0/testdata/kmz/files/camelcolor200.png000066400000000000000000000523701263603257100215650ustar00rootroot00000000000000PNG  IHDR#8jgAMA7tEXtSoftwareAdobe ImageReadyqe<TIDATxb?(; 2 Fn@d< Gev\LLL L +99? :& 2"_~kٵ\r 01vv6?(g`gPSc p\sSuG^^.f{!(g?aΓKF4377'e;ƖA88t e`./p~v`oX]<++3F?ZǰiˉuSo}͵9 d%(P!(,3׀df//7_8yBm3CsT}v#!s<|O^]-0 `aۤ~X3r0ܽuT|Ǐ_n&Ӂ823 \ ^maal<ן3fo흻`[ s-`a 4.5D?~m?7VO6 3"'0da6WhHe66V`?8T&:±^߇(#V,,> {Wu.K6ǾR/s0?X\ʼ߾x 䟷> w"džcax3 @?}<`n 5b .4<ġ%i-Aj`n#!.ltRw"֬9ˣfg~Na[ \tZLM^x ,d@(5` i)>-Ue DL301RU R9/\"69o;P|>}f7C怴2 ϟx2H `TVVVx p+  JzP ȼy#.&- b7 {C킁}LFFdA] <3(Tde!NNv6vvV~>nV`!.&$*%%l>y{kz X{ 2|;Ҽ;ɥ5#ۣxerjP$!*¹ ج*fA213c4JYIYME@WGVEIJL>;'03?6fѿރ/&zz2=@,āg\[u~v@o?nʀc*RUQJ*fxjyhYS sPY%Z_=s2(>A&Q2[k`m z Z`fQ{U@1 8驾m-K8( &>ƽ&ai wψS=r XbCv! I agrv4pe/_Y"` H< _h4F)!6ʥ(/4KN oP晛i%L(!!!(YE˒R޸P g%E)Esˏz=}HrQIE Y`sWJ@1 2dWY ߠfi 4 /:¹thG^ :2l" xyRWɉJ~ ܟ ?2 *" E}4}3kc'^Z4e@yq @.'!z:Jv%!͠~} 30+ȹC-@PD_WQԜFɘ"@NNcRlA [JwWi(-Ѱ@?+' "Z)>l$=p t372+t"Dts1L߾d u=po @fteWgȞŠ։n[&V:i)QN`Ӏ@ox+lu3lM]) -HuT T}tXX(#B3 x  %ne a^?@ 6БpÅ% H.%ɻ0  /ݻχ=fAi tVR{*lVr`dbd7`ۙw?~Oο|_?ygo}O_01L @b.1޳^JR4M/ d06Tuf hK: y3 01VU,/мTx> 7h %# h7;fgPI A)Pgkc ϟxݓ_^{Ս/lu)lРhb:I !)v7'߰qrqnr|Vj^]`<%=[2WVwv+P+ƊDó)q0,Y("TfP@:P؁ _׌RR:Z:6V:>Rϟ/\( K&{;YJLzP{/@iz$z697(99_ٛS@n ΙQׯ7 D4x m?yGРts16ɐa_` )(' kj@ u-H<ãpM aF,e9EyAU"6r4(2^j烚OA5l8J^NLh܅-8 s2tyΌ3JfgW[<`s <#i@&BPV $5AʠƺU65@7Ylu-;fei,p4SWqo4DSC\ӒԊh f zzJ?aSTf#W (afd<'k%;kt:)<>BH FϡFY`y?eD7}dђDw T 5Z> &  dfG-TU pqy{G tFL 4g`ӑID\}a8h)@A UI=7&͖TAM,+?% 8L |Ħ5e-T秗Nll, tPMA d@AlT[):dz[M+\篠fma^0F}4?ב] ϧ>k '@ X5 5YYڛMmZ qn$HOwbf&n>^.C A?F`عG_ =  bʊt!'j_jmUt;O߹t`gxR82h1%hk()`ێ3O'Y]4`MrƂl߿dlh0aom ?=b\yLL )\{~Cg_| QXYᣗO~I 4v(.Mx qͳnIֺBBl}bX1|aǑpc~s(Բu;.Ԯ~/r D YA]M`փ=dz'8ym+VQ|-M9޼)t͗]6_0P>jUNiΫ*єL?nIF||j6؇wpƃeO sB[A {jM[SBVFD ̄)u@[K^,jA6=0 + n 4g 9{5BC@߿gLcA.x~*Mi  @mvA{{bAJǏ_|P i>qQέT |yfв/_~0<}9>Pb@1ѐ՟bb\mpMІr[kTj`ǯ߾$ 6XYY8S~=jJϝ)t) Q,k74@ ` P @/8,64PVbfff7jq?1Px7%@J)i} @#\ `x^M3^A'[J+@Q9 fXY9N>+i$P:lUe NE; J!9yDjtsuv_h4W%,db'$'Ͽ~6ia yhjaW^{¡^x&H/.gxnA6vv%%X:S.45  qsl@6hs %qUk(Z@͆q %):'s-7;;af ˄DY~ff7 t+FP3Q930ދl 2{]P8}CPM*3dp܀?3 eF@dgD`(?7k4hG3fVVN=Pex 3( ~ ~AXJ 3;;0k^K ~w@-+י9؅~NeeTG_N?f k@ۛ v*4dMYG`AC ߟ YX\dPjt! j  ԜRH!e߹^e8z'ݷOqOT{+_?X8Ijlcf*3+w0` ]0 Bl ? H[/+^@~`Ԟ$enN ''5@,t+34(#%Qk#'/m l^~`XxG`3x`􂁋~/љgo<, 8AC+>?~dxM}@= _cf]Hi@t0Dy>2Xɿf0yp5G _FV &~~2v7`xϠb}&9 h 3''?KE@o]%[`c0/; $);>Y1s307{_NvG䛦2ԖfxT OM S`f`degClׂ ܜ TsH86Q~1v !G 1";[PaD.L,< xfh_^2:G̢㛉"`cB\J0=MNJAY}Y+P|U˚d,ÖsI3.#P"VwOtع&$Н,$^ {tӴ*>ݬ9(~d` \ &!3Xy$Ot/xUnk#٢8LFHע^Hɏkmgق%|-+> S>6 z}*͝se)D-X d5kbf˩1Z "q+/1|\RUdebceŠGI~~p{'ٿG~ ?-F~v!k&[.@H$i?!q ?8 k0$M[uD*.N 䨣X H?j*R-MS4ir^J D[q{}'moFEm>%=U8gohV*j+"K{̂0/y)B}dryv%s q&*B3B,!5=Rm -P41}B%`'O#*󘡑.`U0=bځՖ $y "E0Gk@F]lH)Qox,Cz!Z΄{̵Tqz2en&cy)%\sð, nZyI 3IBAF%BAnt؟5!C$HK!>$K2huYPB(v>~;3Oz/]^\L&>{0rjHt uHIWJIǿ!]\z, qUS?L [U4TuV2;&HXC+h7V耊ZF3H5-k 38RE;v%DCgHnpgY=,a;Es<VNPtIRd7a1yl]nb0ÚGRKG&pY q!ca6~_uH)_!:b;?k/Ă9 @0 % 6&@hHps;e/ 1QN? Pb8tf-d=h%6']9 _2Y:HmX  ;0+r C%9A.>!A^CAHط4#ε b $Y,OAÒވ>e` $y0\p9 rF lL \pM}cPyv1138>3~AW\ 5sM)q;aC ߾<F AC. 1`p9Cm;2Dbs DDEYѕ SOYa.y xԎ:/#sŠrݐRʄ[AD\`*! Ϭnҁ30^>9 DQDj5>|ZAKq Pb<ǹ"e΋02Gg~'<û6 | `}o7\?#dl̿~aXۂa!Nwsmn3I ;&3E~/'>-a5^!my5Ѹx0|BO$9%!FPFyCÌQS |pk|%hj[++I"^d&m" qaW.& S Etv=`X{A_&o_| 1H!' Be@_a7E9k\2[Wϔ@(}?J;CHX%<I5;Ï(A'"XB-A?d/ ?0,?'xCŒg?L .nA<|' R mq-#yx <~/'" $B|g Yz Dc,+ )G,@0ѷbđ@51CQ(+Cf!,;o JW P#M,T[ [>|vI;XٸL4r1#yzlA*N:+۞~}J@d|wχ14 IG,%Xl, zX1)3p3/A2/`aO@{,l_0f8rWaw#AT HW .}gP*BJN/>*Ig ׌ XC30 $$f͂^mS~?@k@v:i >/g00p!p޳9CX@a߿*uD!# o hס3`x\-+xgs>lƈlPC!%`#܆ca'ä6 ?3Cb =E03W?;~  LC*P6I *`-!p#{>  |& q+% 9O͠~̿~f $~02#W) UY]ݻOTޅ O~@ TO-js@+eu]kt +7nV '2= ) ,젳1͈*CL! L'N`siIGl~a"*7n+Q53bAHid$n)h=s~|@~` 02ȍ. # ߘg2po5%=Y@-3`:|aFDtH{_G߂~ +W]Ņ _-cX^XiYCrx~~ng{AK?A j:ATm395X$'2L9j/L9="?,؁~cgdc`eb1ҋt0,ؙذ!-wmť 3/PNd~h$hπA,rG|S_4J))G't7eVP a넂um<[îǯ9ʣE != ߣIᆯ8|G:TܨeڽN6*^)^ L?T\j~QdtܶS#d"Sgy5h1wDn{'ձD^2$5Y9R? -|y~ ڵ4 /1mł_xRA'QQ8E[ۃb bjC,aۙf0#(LXF֍u |xŜBօ\ޘb+@6f0YoTYgA Awmab\@y{I h"X)߮Σ}0 AUyȢbDn2Azڣe8!t"Ca*w8ɔp&rۏl/ނjw7w_}d?gȎ`}ەk?0\B=@L3`/z'6h NT9qsoWie@1v@VVvN6NAd~3Q0 ?~f4ufȼ7Z@M,a>I>>nPTܾ{Rc p]Py@K#(YqNí;Oo䫊Ga[|>k2 +- j4Zc;4t/۷=yhd 9%3i=?~<VKS@(D_OT4>/^{&.&ϟ 3cέp///iu}מ3kܛ 4@n I`c5@L[Fop1hF>|ۏ!(s\}\r̾;w̙)p9(t^vtTJÔaW_zJlAM>6kt uyMi3667@]dx)IU#e#4A%7{t?'O_?BzÛə}G]} \ǂ@;߃İoyrŒ[w !AP|?~ԺuW0PDR@3+dI ٲt ,vH Z0~~nКglKM?xy8G]f ^GQ6Uwʬ =~X@;A-9oE;t3bb篩%$+ W'LZ;?ǀjWMYd, TALv>s̹[ G{ Ggn޾ĆMGO:}%+06g5!gQ_;X0Ij_V\ߴp@}P&6a@,**<C6I}']0V~#@dՓ&_{(-ŧ 1 ش T+ !' '~Az{_ l0OK?126(w*%"]WGA "t$ JM:ءMb.ùxޛ/ܶԉ^ǯ߿\CD:ٛxjdb?hMw ءm\`@\wfl XvZ( 0WEgM,}1ֻy ()!$@Kf?d (IPQ}dӖcxYP0/'SxM@?|e}ه7fs'NLuz 5}`遀F'OqXXܧA, Xn~zO[]Ksc'LF2"S?if7蜥/dp-[w>uu8䅅M TD`c%r؁}ͧ/zo<|5M`y oЇMyyL lcD|8b~ѹ?gfb7%3ͯ~w^Y%;Oa]b0ebMPX%e??~5#B;M yq78ƝA+РKwO1 >}BIQB6/ 3 U+sȣ/O@ ,h=ytFsNˀ5u As;>|faU( ӌP6c|M[T0/hׁays|l2xsC`XFxx8xIZ^ MOYRlP-G0 JLh!LBW31|aڃ{m @ϟG4ddDLydq`\Q@t"w.eqt>|ymXg%C8._}p1Lrت.;#-נy6NBC<)AϹ cհC8>zy7~ w!VUi=f,!F\@`=MC5poz|}v-YԻAdzN: p}ɾ/@̿A/u%5iٮW=sоW훺js\ Wd+&w@}l@_AAXyTiu /ܱ9O|vMw֣uʙ}4@?o||G:(:_-l Z[ˊ&h@;?x9-KA+^Yp|+ ZԺx_@0h X>|.(v;xm@0Akr_ڄ7贍-N\١9Gܘѳj>w.il]ٛkѦ P ?VU7o߿*|>(ZspNe+VXs(e<В)7^h(&q@dKvZ޾2N_4v|H8^oڪ/?|ga~S|ڹfn wP _871(AGLb:.^]_11~b2۷o|t7d{X6 8^R :dS2hѤM@[ɚz 0]+..oq=!fv㦭Ǐ@tò ʈNENj.ypϞ0:Au@xO`},SDEA_@KP=FUEZtKwv"!7o o^Ǡ/1 C ;9h\Hg޾UR'fB41~ӱm4hFm5@MwIW[V+z*pL1 _o@s@ʊKHh47|ѫ \x5ɀ}10O{璗S2Dh"% G_{yqbԃP8=:~i/_|wNyYLA>}X7^]]2|7_sg`gc-kMƴD9w֊cǯ]b'*sn%&2s@#$f"<[bB'b%&Gy ؏Sgn&"jsv6 Gbe]my 7Ь,ĄHͧ죝t"t"b0R{{y'hĆеm'VGH׀ܠ `cX|雷w<` Dlckh!ֹb.'\B}IqA w8 h%<9~?~b8v`$fmb{Mz/6@\5_tgwnڛ@OIN_WMEK҂/PUH-x20s H[ ?xqT.<(2Ah֎5O-@C`lshhM?008 rC H{"ƪ;w=t][/gmbYw},+NDa.w_E~f2.k$$Z\|t<$4=*hD߽mz$hPD 7 XSk\xgW:t}0/pdYQ5|'€2Av[T]z|'pq3b %wׯ?60,zu?l ґ+}ͰG/A5$>f묬,8;yѤL@z0'Z(@W*z[l1rnu.?,lС~vC5YYX8%%dA*+ÉS7?yt o>:og=PWH#@߸ؒ_8J?18rb|fzlvPgXx{Վ(7?s kCo5^eaWcaaU[[\}_0ˋs{{Y{-w/o?_Ko`I9X@W q]Y7h yĿq`P'X0&eJ.5cgc&˷ m];@3KX@zd-u:2wp4f7F?7'0G;4DyΓ>} eDZda8t5^‚ejmÇ/_q5+++ 3hR  eϟ]ۻn5ؚuN<2k֖/D'[ݧ?~Ĉ-@#To~؍أF¼BI6 v Bl{AOL,͵qso_(?S}(Ǐ_z%0?uaӗoA03ʊ)3Ǣ  ܸha/J0)#Ź!j}I@LS]V t"!A ~>s "||xK9pu+O" qK MU;}';gM/)]YIg(z`~iQ</XTKq/@kø.Fvѣə Ax^ O031uLrmFo_bkVj߿04ŵ4/T̈/,CLM4p;pM4v8 X&ibwfA'UEX["qps ڢ_P)1Vy9qHgO/\Gtx2`ccw())H5'6Bɚz AXYpM'? >| ')%). ǯ ʊR3lPsZ TFԮ]Y1$жX@?+5,,,I: A%q^VhKO{ص4MACqJb&$C5"@%/r2"2IᡎMHl+Cc~Nt]TD@dggf"ʊ/_~0z[*Kx31 ~ lOre@31U bA^'''1AͰϟ1E;Gō&o@Q=E@{@@l\X` XffJU ),P`]9 1H)G W|M~J f`Ml h؜{A5Ȟdr Wd4SK~W!!>k9q)rm-d_-ldceoA.\[.]wXf&ff`3p22h;(p7 o?@ac1;BXX%֬?4(aj䳀̀‚뽠'}h2'#%A?&`IJ IK 3hGo?Џkl}@,$-$#%*__~ 0^}ǯo@AVΕ bl>lX@x@W\\P\JRD\POZJX<\ @՛߿rKWM q1!mqiqQAQQQ~>`F㐗d-f&`35.y"a~#-@%P 4+֌M:\Pv2Pio.bH=ԂTfajИ(b 4E r8 - P~ᅪҠf 1`lqk(>B"_( @H̀3EH[͈/HlX0B Vh!̀8f @"M*TIENDB`libkml-1.3.0/testdata/kmz/files/camera_mode.png000066400000000000000000000022261263603257100214520ustar00rootroot00000000000000PNG  IHDRٱ\]IDATx^}TYL\e=wV,DQFD(c[h)KDIlThEFS}imMM,- P>"HhClYT)2Y;ć֓wۮ4 $ eY18>O,.-hlؗf58__u8v$jj?ސn}C7&坰F}qFJ,,p{h#'y(e8b!55N.!E"Z,mAQR}~PK{k libkml-1.3.0/testdata/kmz/model-macky.kmz000066400000000000000000017070161263603257100203450ustar00rootroot00000000000000PKhv6| Xdoc.kmlUT gFgFUx՘r6z T炠DҔZۓDr@(JyX4i%d#]$aX|X<|U ,O(LEooM<~Ֆ<ɷDUp&rɃq+^UebD<j"ʑ^֨&PhT[gDՆ4|e}:^k]pNIp,qaSg:GDI@Un[]xNַ$l 3k1)ԉ6zķh[;%*72;)!%->Kr E"r'b`mKL ӔXfBoR i8 pЛE}5N\ ?z:g. nĞwēiL7qÓLˆR'~svƫwNkvD ] CwM n]b6pnʴO\b{K E]NOfޗ~K`zѪ})]<Қ ?Z$\cS5lO"Bt)|`w%]l9) 0v&M 6㰶J嚮$>WѦwmg6RzaE UxHF &]֦^֯E z}zsIє}bVK UJ$r{oy߆n?,YP=):ڃg,N9),57{L? vyga=D\(_o/G{WlM0W =qήrAիO^<7==Q76x7#_PK!Ո0Įgeometry/CU-Macky.daeUT \FUxے& Sqb Q[ͺ[cRif)XwWIXLRuH܁/z7zf˳Wo~7ճ>|{/ˋ__Ç]~w/yy}O<W߿|y{W(~ûwMF>;W޾퟾{u?//⛵s/~W|c.&|i3鿙@6P߾ޅKt7/gsvr]lϞw_z|ByKw/hϻٯpח_^߼ûw>y Bg5Kg_|q>w?iO/w-2}+_۫wGwTȜNvW]rT >|ߞj(G6Ϝj7Sh۷ey9A>_{|6s#߀)Q_omgرwf}kęRSࣁ(k[aa"OGfzl~+N3\~\is>Ǟd3)aI?S{mqիo}}gutxG~޲0hM؉6?8bpv>a t﬎f$si4ME8OqOQ?.-^׸{g|_V;툺w]ma<\;oםdtOww}2+pIƷy;<[ī-Kwul?nHnc-d}ܿn9{ıp {h{5^hyiT:<=BA `oO:y=}`w'}};ue }\o[j{Owoq?կS1~ëTy6ȟ߾FL{|>~um_7}o?jDI߰~WG){P Ag76A7xW_˩Nڹoϯ߼~Ŀ_V/`-c/޽;hɯNmĎ̽_^;lNYTb_>܉iIP|>V@/ae6H::-}7:rgryûo_~j2՘ȧ-n8#=`TtMp]+>Q_~^=*?lݣ4YXgvi2$чW5ޯo߾o\RgӜ4g,vHNh,0&[e4m؟yM5:j >4؟z|!9iN=ǝSwoS=<:3$0wNf4_؟|y<͔CJO3Ly"G;SB9jHs-O1J3̦3e4؟z=MCJOD{"G;v%~&ko&&ۃ~T>M5'8ݞkFO|4ߞηc'D<,()&ؽ>ܺ4ӌZc3ayL&ӧD:gD>3Hj:K3mT{[4؟dzx&!i2=GޙX{ӉO9KsNGE4؟z|!9iN=OpMuߏYyUuϟ'纮yaXk5vHi}oOQ۩oI'~qڜXtsQ>nBQ:O_~T74=Mu'r nȜin|004s&5 sHi|0O?|_>t_ ͓ =c}'tB,:4>͢'r h{i_~ז%Ӝ3o6 sHi|0O靖In|K)(*T*o5rHi|)Oqgʯ G?wvaV=zG`ϕ\[csɆ4)=MO={jG|xiO6N3LGH}vkOp=ِ!ii=M/^ϯXȭE_}xU4Mͥd&KyH% Jb>Dd-tf{.dɧ|1$2tYA83`W @P1y'uQcҽoVuA5$H9s_̺Lzؑ08@P8P7y f!m|b|Kk?mb;iD!r~{wwճznͳTty˞YS盖sBvpo-!6aXyzb/L`,{wQ]$R@TJNxf8{?h?VQOYJ{wP\قU|ҲxlngnUz|}!z:R84@k_?8uq{ S5DaIhH 2)xq֡Ȇ:m ކEXͦa_K0(maH|1O JchOՆrӮN.R;X6ϵΞlAv<,<J%G̭<;[svh;i*QZdKH|U3i#Qۀ%j0'.{C/DץqقQe {g)erFqty{M33_ - 9K~Ig]ZVBKV+Xf[9QYx'i3$[I11z{K S%*d]38;IaCɡmz0}a꼗(qT syܚ ˛:M%ƽf__=?Ͽgze`ϻ/;/?ٿ֐OQl:}{?y~W`t%woQs(d׿i&y/_@O &t?G F,Gee `\7L-cۯGʍY!S K`-_ C v`¼IҢ$IGn .s (K.%B2S7 )`HPP0$?a?,(@?r)(:Ӎ(%D`x% e%SȡdJQliqB`U·޽{a;d@ >cvsk9r鯅"Ʒ_5.T!Ta?w= WCs6`o-s G&Gu?^~X|(@)oxo-_]_hkwvJ(c_ڃ1\x@-GcQy;;]XTT"Q*ENE,QNaD0?x2-ʴ(CQM1ThPDi* Q$EE$fQޞQiZ.Lv `D0j2:]4@ $ %nH$)?7ܴrM+7ܴ-K `( VIC)8 H VIc(jʰ@)d^Qw#3B *S@'Y@(w*ئbm*T.LYJct 4@ M'*HӉ$Zgq8.aS 4Ͱ]h/%4a(Iᔂp.@PqgچUOEYgI9Qn6T7IT!h)˶Cy7, 9,ί :8 .TYAi>!֥P2-= lh6(K`S rZW4,7^|4]ѰC C=0\-T`<bµenIY1 5h'. abBFYXq8Ũ@/d _$ VtWj++p+Ȃ"pIvY {V4(˙K1u4%IHC`PJ7CBwƄ 4 3C$݉ !jkzyЛ-Z]&I+>?àVy:=ȉa1J­*@^Åإw;*/_$b(/J/K0 2dJY\ oKb+~!_a@+vџKwJd\D.]XXn6 tr{2!ٳw{_]Fj'T 3#3D5=Bê>aQ*AtuD0~I 2 ? <v rrRN9ѕ[me:Rd2GCOhLhjE (+^aަZs͗nnj^b\g3 bOv`E]/[v8X]z RNbƥ-t‹3YҚ/ ”l*fl%CttEI8vgN 65C>2)+ϫgKv`Yj; r-CUλuhֵW|ڪnd0 +D^9fSr̉%„疕wvlh;:]N 6 TBB2anXR-1 x#f׎~<Յ e)`\r!U}A0cȡi6?Qih$ fpwgfLj>d(`):_VK҄U{<7b ]j59^MtI7C3cčsz`O v]v}>{|Z[Z^7zӳ/|_P~̋g?8;7R|e%(Pp-.L=ϸ mxp=6!s<^ɟ(fP"Z9MDaoܞ*j8;ا]b뷋K=c;T:0gϽ`fCe vm||3< c ]KxZykWE"Y]+A.ؙt6('0t#* )E:TbQ9ՋO%O!{D1߀a:Cbm@+j8|-yK:VD%5sӆk> I'^2ҢZ|%m1qnnY:d5X=:[κ K&| X-`eAe[E[;vpKk)@Fۙ8J츴shaɫl叴3;Ƽχ {=ÚY8sMר0.8wHr_8%vc]ҘF[l.y?23xvYt~CiM-JM&°(6 g^}U֍rWiYX@ĨӺQm;5]uVm7?eyՊpp>+9ہ%L>э"9 ]ru$|oMF|U!x]$1M`Cm Cd8ףo\~2:ŦtgJPq6#&LajCf-̻ )5-P%e(E8ޖlb^R:ٗ[J$wUN[%j.!Ak#饱/ٖٗ+^ٓLG5tC-ieDs//QniM$3$?͡G3Lt!s[oR-Z-?$g0!|$Z ;I`,4;p"Rݗf-o%ji󸄚0$~)% d;Yj9.IK` tVl1Z['9>I.Cb/asKl%!WZk+O/Z[,/}kVSX3ˢ6g3]"ۦ5hfhvX3ܴf{Mc٩ZzտM L'gkjkFv{ٗtm~ 5?yTr}I˝OgiM ս+Ɏaj!zkmΚx[ҵڠ12L_ޖ8(#IG L/fy+Er+IoC Y欱.17ǝ 6eHea! er\=m16@slqdӽRZwJԭk wz{'0$LμD[5hz\b7ԾM2my C=;Zk3?C/DV"e3iL$KzZek2{9^7냉6?7%is>YӜdn[IҸ_߸u{E=_kkZsSI>L [ 2ç≲W'r ?koNl5u[uzM(rw%7L=Jy8ݙJ31>#Иn?dSɨ] 0F؎p8b?&V*OU"25 cTes8(TL, v̩hBIYkc JdYFVڙ2ğj* $iCG""bT$qq!* E84E"PѰpZ)(u,Bϲ((Dw+=-rln*z587'*16L8: UPh4_۫wہħc_ L q>"f!Hǔy.hYq~BCCD2Ge"E/D¡=Dv8{pD #EĨ@Ԟx| 0y:*pq"뢎  ڪ88/NFdWC:i| t=˒)]ϲ+**tiOrJeõɕĺJQGAS " y%TY[X(,Ӻ]#U!+*^1p\0'& K*[YnaPu sܦlԺ]۔MHyM5fV:r*!QqΐRH!f$q tٞ *n%q"񛤫RtInƉn:Gw=]a$U銕5c#;>H"yK#~|N*RfH«EE ,iTdE*|W =X\XTGJlXTG^"P ,J*#yTꑎEEz$s)E$2x R71GC6g5rQn͊W8M&S0%nЍPV!=]蜊a9-qƢzi1RZ :h)SaahZI{tҳ3ў{ߨHCTbo>tʆG\]z% =Q#{w=茈cxΩ'<74er%C9ɮ~3Z7sΑrvCNrl٧iHCXأ#D0g;ZC[ؑy?в.&8 QkP2ܜA>4;R(^P=a)\P\Y ˒u¡| /(dB7(BӲ%z󅃞1B+yekI,UؕMj ,kk!onO : "PjCQCPRx+.:, 9BuezGY8AnN)z7kTIJ-NpG>[tJa!i9.za::NpT*.GG.2c$߅1`jede9j%A}ݸ7}9}9:n'}O4;rt_8)ZP B,c*M>XPj ;jUAġ8dp0Q4{}} }!qgYckfO.{l7NgyI ǻʃP!k|vEG+aS|@F} Yh;tO:!G8>IJ&8[[RVB B=667GkLhY8/Uw|Fru\n.m͚VK,b"$No -UPGa\bqO)nfVc&j*=4$-¬-2>R#a*1,EcnZz"k8G J-r0Z`-ܘr+P 9ְN·ewCRw: d! ۰m݈R4/6R{PY4TUTAШ2d 26V9ӲuԶC@L=oΚO_NGppMݹP*1H-skPP]ǚ̡px bFe벎 *gҋXjMy+=4\otR˕T[ƫhE&WO4NExg< 28eĈ \2\~׊r\}N&o s ޝ?kSR0 gGGٲ%!\n{ )d͚AEP@eۛ/x u7 2ܿ\~F?e2I Ҡ򭸟`Ze<\dt*B}L(r$_ WɁrc=S }3k zH9 TDqfenq81XC aqe `-h:-DH:C/tSStʲP="JFjXHƬ~rq Ar{#O[ O5sA{ }=&gIENy| l3h; Sq—1ײdSvI&״l. >\ 5-9E%r ٫F['3 !O1##,^=z@C)E,UcC/ht}yc5"[ްA&9@W0Z:9lŚ|uq f6] ̴-z.L;R+ ߩ1O8'%khhAud^Cl@ CSPNk7r[i´ѯ dL^"9~Z>A;s蚗A9;949/8/[Ks0T y‡5s Vy' {l{ĂLY[t+(.HI'UaZX% ݃a<Ł=,t50i/e "UGNыNA/7!A޺ڦ!˸-xR >- 33FA[i8dZV=9cG/`,@@d-,e0Fxgtx;0tn];_Xu=vo;0ZpE;>[cI; (>+smDK9xfeB󮧯AfH Njo/PpRҲ2]T26EB1>r$(ϸi&f1N49Ɖwzkw䓬د#Σ-vrGV/X,+|2DK!?K xeEr =*awnD+ ҫW7= (ߞ$ ν\\^!VO3tt|LO4qLkqMNJɞ ɏw*yućJ2;wawٛwlwh57Uz6mY{q̹jWW2/#%t>*WR2_u\e>.spG-ꎘH)>Q7d50۶6g-'M{ׅK,~_8$67:/7 [вq\fc}YI= OOowΚV}7.9ō~Î댛3.xurF2{s›o?kn[I.QVb&1}^[ nKZS-]17$g R_[;oJx˾k=InZ>[vmw)O >$ë6%uÍSI30I{`>ollw;YWubZcV@3^Gl%.$:oKZT՞~}I} z{ƅl) ]КE䁨툻%vKҴpWv-bɷ%1/)emߗlܞcnH6Z %[ -z^{{8L7sݤUꩻߐK>Rw`KSK>}w 9^gL??ߞ~~[n颜y(_y/jEEA"$M':Ⱙ޲!m#(Hw!ȿj%'!xɟ2#qt󖈒-Wcr̜XŀS",ѡY0/)As愪1dײcf]PDbQL묖 "ix΁nXnK2Etb5p/A^sI^LZJ@JS%LwR1s"rR'b@Dfo蹰ɵ=z`f^A!VN#oi@Eˬca=6rX kqJGʃ a cUH86=lR],3!zH"Ibٞ@~S/:rzm: {P+9MLErD,P-5yÑ'aN;J,՛[ (<<4-ydckm1D4/aOCD}n":!vXAD1w9CQݒi:j'*LF!Cѡ14 bҊCD7Kt({3JixrMŎBR7BrfYnjY6 UT J3_g*3"]qcv唭 p%$S$;^%Z^qxY `3q0OeL+cٓ]KTm4]yQa=6kIJ`8>y(!{EkL^#$R)Og*3"urtN!]C.a޸db]uB]&:ɞ,]U {hc} LV1ePCǣ<^*أeV s8`){-:ќĵZ: ŃOjBX% E> i1mq7hi3Y*͞N9M]3&Yj4Goӻ_e=CyAvB8HuN{<ծKڪJQ3M^́bVQ/HWHizu|<۩5"N,D p4`q.JU/ TOCπ3ʘ9 dy \~`.nB&@ap&w܉7|}&D޸o*z㺣U]S۱mߌU+;4aк(hgDXr\Ox[571 qF"=sӦŰ,i75\:O2ȱ9KQN@[*%BuC-6){TO;Ei8UmuKJZ؍ay p,.#o6Q((*$Q-+=T$oTqR٠#'=kPՐcj 䋠zl5Bt'BTAMBK-yFӥH>&.5E(+]jw%Jץ@>+K;&7INz?M*<;vDG8v  1Yʞ٥ヅ%+cG,/Wۏ|~G~&;XZ SXplв/[}6Fke €t~G!ziF!Ũb[A;zxF&9xo6O?1r4~%}ހ!>l+'5[]S-ttb@W7R.B ~EGfD@ǖ5 Vjnx⡘wmS2U_ lPa5 .6Av[ BX|!/ :FXy RVLVltq^tECא,8]lƢBNXٝ׳N'DMc`}GL!*+q˓-jtn?_Ռ,R)>[̓=釙.vU^YEtZʌzQw:NjH-s޼tL؛#Ϟ*oNL4" z}G8n ?kKdo] HᎾ8X6 W'0Glj}&j̕&m? g!w/gŇ-S^)tnMn&&A7w[F/>S!;+~J4]3a$iJ"t):(\4"]rda2 Zu6oo}?n_+8vX,GTe9o EP=X +?cxEB]ѣ,ҼzSBCO.^ru9x{+S'bClc-x'}㵯o4 Q>#hz5R-e0bq8I!)?tg6e ~FBPGHBM `/0U}5;RSNn"]<҈|-0| #zeJ /ಬm$ qлzBx(O_8CB95*kpE:xBS)Bj6pK;<`Æ/NAb&R"^%n+&e|Y zmx r9J4e ,ۂ/t59ϒץݸ)%W#bXmg30 aXL; 1 bVIgΰBL:ÀvbĴ30 at1 +Ĥ3 igX!&a@L; 1 1_ΚWhk^r7-`o +ڀ "qhBm,arOZPיw;szm,>ۣ9v<;OD ?_z\LIOFoUo 'o}e`kS+:e܋" FD6jD긍g>Xssӳ:y6VՍ:,h~ZO$n|}z49BdU8 o0M8< Ht *̽8M<{ ] _0ϸ"O%nCԟIJ`m+i=4.ep TZ{ X JkAd{<0ms?eZ^'$^梲hp +/FV=.]\]a GbUD7zSƤd(`%ی; L6(  "r@9Gr\jMBu_$'(Y#N%qKq6m<Ź$Pʰ.7ZL`(*aMyRvJɧ*X2%ʧ3RJ=W.db&_{ϼGL2xV1M`3O1[GmVIO\ z o^${]p4|aoX<ô2UmS6m4M6m7V:Ú*Zs_gOa):%٢%*F{?,T0:x2ny%3:dW:֙-q?$>/~'=aNOt3t ͚Euť=ij}L^[Q&F- 6K$%juesn| 츂[K1A2r( zC!% OI4Xc9drre3'(:-A{\,T(qYIjy-݆kGKv3X;Zµ$vkGD\;Zµ%\;zJ-ѝkGKv ε3? e<-걖%gto sOt<>ۣG3ɉLMu+1l ACW]=嚍Í}Tb]'R$ D=zꡫ58K˕,n!t [B~c5ow²x'iB-n!T \>]|-Wz Wu*Jn.ÿ|e}sK؍9|53sj 8]0ilrգi/|E ogL0-?aFwi, ,m+[W!Neع+=TW!OQž+m/hrt틈0'O{7y9L`-IW=Pot11u{n4pX";:1GE O8E]"ŴNy1=IOi%ILҺ $Ai^$AiZ@%Bp(zcj =@i{Ji@1Ӡ=Pa(XkiQY (IIPY^J@s^ưNaH'4kHJ$+iRF3]VEeZiun#io\LO;^ipGA4I n E6mjedMDH4=_6Srh2Em$j6:?C.#PjcK=-yHM%9GR˜8ƠHk{IVAږn6#7^IC2 LfhG-kU;^Z!}ivk*o\z :Gw4%ǎԢRJStPb׊ԙKQshO=ܓhQVO%LZR['qFux"Z$DJ$ QOI&s2VeTЙm[C+E^GB2 *k$iqlı*w=c%=1!jzZ[ %%uTWLL1 J▬TPֺ|Hѭ!VQyEKFEOx.>.>n9tҡCJ.=(:P:?}ұcG.<:Vt؛ѱc_RǮ>ggّ^w7zIu]~u䢿U[)CoO/2'Ic={mӤ'Ӥ>ߺ>0NvuޕWκH:Wu3i}&<]&Msthǵю#8|Vr;txkttiq~Εæ{Dc]s_Q|j${o;RnܒmkgN]tNģGJnrp !!VyHJUwΪHӤN$q4q{q-~aGv^4zM;,#HM,=݂z9tNrEʡCG-^z9tZsuΡC>>9":rtI偷O  9G䋾w377w?!<3%N9|xoSnyFi,7gO{f֬ À::4! K N ~^v| n}\v˕-9#g|k<ߌs^:xY>Eqs0GF\<92zx::)l=e}< mY_֧7W֟/wֿOƗ'oķG̾t&nnn%unSko[czyS>DC댣O7<iv=G l+7[s'kWg6]zWs6oz-\h>lb:3N83:s3N8{:43N>˦(='p?:GE},Gez'rp(#U1 K-Q 3gBߐ/IJEL OdmwC\EWybvh{kȌLKL-vpU7BOoP~>~ ݁fe[f9Te -;N]W@&_$ Hf+*bKEE޵ =g#⊢K9ي",n(Z I"}D\Q>闧lH.)*bK(kc;$iX^ã@*'uQ/#˧p/a㙦W8{M6#f|C/DJʵdyk=2^nW<ī9a;n'L(Sůc;.$1,g|a Һ7<{|c=*|OO{rq=sWƧO*([k Xiihn2lV?S ONK@rVgsX,O,-~8[@]`CdNT]SuDՉ*2*\׺]#pkݮ9n׈ uuġH@-׺[u{nPyCY[u]( jk. tٞ5uٞeߡw|][QcĺU.t][uuqGq]kVݮ50. 5rۨUkp[Iv nk=Z1#ߝiѢBgewznyEKXשxQ"w`*^ȏ彚* )ԭVu.Ij(W$9^I:(u<7t[tPD6_Q77 Qhw^T-r[si;%UXN9=6 [p݂\ 5MU P˲Yp݂\؂'&lݖ?PMS y%NLŮEq paMi{9};ܧ>_YZ`Qs:u뺮cݞZ7h5 =?+]0o ]<;!Z,OQsV٤\%y|_,Mm&&GOD71ED uʔi+[<.폠["|ҟ> uWw>\D4/%[trZw[@nzrfT_95=5GG cĺ`Uⶀ2]2zv>zA,o~![tj4g"UĬ"vSIqڵd!"e-wPs،=3,ȏP\ -Z c(i@ G W,oR,%,lA&(;\)4{x1X*T*:WIebaoPEh9zF'G1ddYvNAg#PtvlCHD8f 0Yt*/w9ykO +"k'QAl7  /VcAB7f$GX6ta rA&ݪq%_aF-.Qc@@;D@ eiłMm@C|x'[=fKF !"QNEϩ8 ydYwm`ӳ0]0$rN L qEI<["Ҙe.3{vl\X36 %Ht琖6.?"_e-/ ;XjKz qHN1 %l 7z\wوHyi`mu &B y1 6@){kh :-Y;l!̬iSJ@ 4$U1.L9I,qf1@+-}uSc%Ⰸh?W@8aL{6rB oŲgSB4ɛ, @cH\*AՊKd@@ MjV[A|(n32B`H7UDl`V tcdGl^J\Vr #=/hu8):v!P]āC#GG~#`Q11˜C5 yXm#A'ñ{Y!`,2C ӈl.$ |G$#CS$Ui`*ד ZfFbV48mɑEj(, ގU!酶s /e HCǼ|+ǐx#{m&^j1kxЁ%.ǙH& X5*܁ٔl"%NgO^{dx̏Ͼ(-`,E00+Zq \3$Ck#Zqm1!Tؕ@,0OH4b`YHLE spX``ELa]~s#P\?!+ Q9,{Ncfe% ױZR9Ё 0-u e&f£#2 f3]K)s ,/)еpuM$x`7J,Hg#e ]V:zA_Zf#ɅB$"/nui8TR ||ck:zxPH ]Eܛ t@<]w~whwRw< crdT5-rNd1K4hE<3gPd&è5.X܊ky~q*!Aopׅ.BCJ{Uw,Q{N.<vF }]Odяʵ 6^Bڴd 5=xy<]e| q}ѮZ!o;,:,E>ԫRv^AI! :Uw+u W L&BlJ ic]a >HBd{QBc-WWD+dOVc~ lFb%UvLNC>/%9 XvlN2ǢuH`xIWm".tyob납.x| O"tQ] S &jX-&I0cI# Z# v]@eZw#aPtۀ$=ƌA?Ev099C\:G"-J!<SE)|~29h'~V|;"54Č (AFS٥B0AaT&>i`SMͰdu,HŢ$iK93U|G*Xb~,Vueoj[hwewίwn8*4XNH:K'MQG{~ q+ 9? [j+8js6_Md~<ٗC)jv9C?z>#|=&'#l0#8<%U_Ť'P11d!";Ke013Z2c3ѮX<@,7 `2kL4sW)Ho(-WKi`ŦazW^G-"edKW_Ҭ%bhyi:t/4l؊1dbZKⱸkvo홊Q5/V*5,]:=?[1Æ7؆ : O6M kζ6,:X?u֫-}Wƛ7o*;M3wL*7UpXO(o 7Z|c}k˖X_,g|98韆s4l7~xc?X(o O OuXo.zc9|a7<~o8,_:`Xo7<_q&+a#c9@yoxG<-kŕ5Rs,D0$0x1$ژ0x 0tٳbpO<0$3=Sp-JћXZ{.[Xa,X*VUm'[UKRZx[:khApD$MsIDړ-!I ywGyH/Ao[жV]'4:UyiF>ܭT̬uEڢuE҈R.h̬(\e?ժDw]-TyiT2DܭTCuE:6F%mEG̈́W3+W]hU׉, 't?_繧mEn[IeݮQ_]R]R)ʻ5VŬuF,ZkTNȢܭps­/Z׋u{֪]'Ntv,n؎Fr#&Ѭt#(2Rj|]NrG͂R"iԸYPjt|-(5n=>Xe/#VYV͂RтRW;VŸUu4@ԸYԸa@an$Oan% ,tJ BWDXet V[:njAqsbREUi4bn ,(5n%D,(5n%[anx7 TE2tx\{U4/JLEޖ]xQ¥'91 !~ԑ\Ql(I>P!K; xn ; xnxtT3y`:d4:+_jNJbl-ՕW4TsMTsMC*iu)r0ea9fu [p݂T[}j]Ķr͂\W݀8aH+ Arۤㄛ-nu -8N-3S)>8C.>eSIܶZM Xm]5!7\e hm;QwN}0sdz'#J-SP`ԉzt(Ͼ/lRKDJ+4)цR!tu`k%e;gbz3XIjXMHA.6 ~eί(v-" `u D.F᡼_\[x(\-*)!AjBR{VtB;V4 x ]\W#(=cE%gEC ɇZِHhu^L+ndϊNhNJ / ՆnHn x1Y7BvvhBDE& KBA}YonĈMIWHٌr{VTB{V4?)B )\aFxH\scDcD!)&)1#XyG/(Ď T6t>xʹTf%u#_[iӎ ,Gw-w9 *A@fEcFgftEl+&X|S^& e4:`v iwZ,]ELveա/J9XM_ F0;vv윙o(9Ã{8ӽH6zbϾx0gi.\ۧm4NuXX^#Y j- ޹[B2 ) V;㺹[Pc6+Vm/}mCQ92c}2.+.Ч}}ăetbÌ"-$i#D 9a [HV5=%7Ktẽa-cIH*mx]9^47'sk(huw毧"{,AzYRYq۳A=f`fJ_<x=_/NEx挪nOϻ?Ic .\fCM^5H1_+Vẽa͞면u{5H$<_ת\fC}$5n(s*#]y]O宛#Lf΃1tM3^I*nm(iz-oZdL[J.﨏8cJctsÊ_DZِ P.:X}y| *!=ɡ94OhRƵwO,Ya!;7.m_\>#|hz=ʇv]\gIv9Q UDFue~]]MV-7ǑI#M[-XJKZ[foz4O7{itq?IIٹ${t2mV'VFg ޘk߁lfZت;axoދOb5Ӣ3_knzs8.{/޵oL|O#{/ԪD%n&ϷiS1IjEe,~]\fcfԪDSZm?lYVd^ZZm?ndwdMH#dC]"O߼囯_=M PUT%F,6tMBƱ*ӖKRK|A] {EOXLO|ML t3-K'Qmz^~׫L& /DD#bŻz鹚iѾUh+ax:-,t'Zz{D%$~1iQ?IK4RDO"XH R1I E?BDO?ȕD{/3%-K']//cfD㣕hIKm";]X#V?g(f~EiKz}qn_UV[+eh3 zH!T<1Xؕ>`(3)$m@>bLF[3+3ܠA垕teh|W[U?;> ^1 {Qi FaooTHl4EB΢%Ӵ:fmiQQ6$fN]{9]|IŜNvQ17?-S|cWo@z߽Ud٢CvK#Nk<`f6}ym^XRyI?υԞyMDdiZ'1f0,Mp mhw NFTnSHsAF9cKJ7%`]s{6z Р  ߈C @Š\ ;`|dX3R]*%D oez96FzbC߮9,#"34+wJ9?B,B/@-BSb #ĦLC9>pb@;کKRYhv(_ 7Ⅾlٓ{Dhț`xZ@FVš ;CGуyt Ϛ[7Ynd&b ː !ŒCb$~3-}\Z\v1Er0DHlUSz ]p!/I .ϕu5L:|]AW"zW,N٬VaV j9@?f XRh`a@Y# UuT^& C&U%V՝=z[`>}1rZ{D,-}PF942RU*+{@g} c`s1b>fOKlZ l4Qg=p4X&Nb6l`9&$96!Ao6[yPsj"ٷ@`2 z428<ЭӐl^&f8\LBm*q\VP]x&kUV_?lxbMӱѕQs5BOG[\U>f6t>;f+9qO;|{֩qU wIB{AWw: _"!2ɗi@%{!)b1u c!Tz>>[^ k{QܾW*_{G.wjS*7D)鬤>8zU=DM4è7:v.N$#D ʸd_VJl")tm$)2nI>n"q_OJVdCM$y Μ剤dJZn%y1t-Չ6>؀)&ﲏg%by+%+$gkJZN$Ɨ8 +i"q9O1s>++٬oJr2i7SlTJl#鵼m vxC"W,o$n{vl!I,o$}4ގ2gƑv+3Ⱦkl(Z[̰C%t-|"2>D"+ђV"Jdմ/qםK{$sDV7$%ʭDVvд&I-I?D\6CiL$ !-I}#;)K$g0!]]v'=+!q 9fSD)Eu yDTGi-WQp5Fl(m {+2/a2fcHW;R}#=Y}~}ĩ}I #^*}1 u'`tz~{hɮ!y1|ɞi,  <+t_l 9RW(QBŸz'F1ү({5qbq*~'.P0DV(qXzݿVlrn؊/)Lۮ؊1OwklŢ)HlV\)fW@oxL)o-; 7^#bXS4!t&_񊴇+Lox"/hzjgC|x7/N D'E|hǿJ+D iPZP\2zLt e,jmV2VZ\ȊAImYSiEn&Bm{fhS( թm gKT dkz[ j##1' (֭kT\ݺJ%czq:J<+CѢ+Tף2#**|@G3hX,:w:E:zY?zӋrFdXmD.2:`uLbƈV&ITI!#*+|PU^,H*iJNԝ:A۷z&a*z*a-j58N QCAu=j56+Tף6cBu=j)nQGm_OZ4>3A:೸NIG!CaEWi a;Yl4Yc?9p&QǮSq|u|;ӮG䡝kckC qU#G O&|٠4hms z0j1 IYiHڠ@Ii!;KނmZ]\TVh߿W}}T^,xdWP1TJJQDʃÎz\PQ1q$Fz'U!ߎ!$ǎ4~OG dBBBgsx=hVX..&A Ur!9;\ۅۇ8tWȊ gK {Ƃ>!!c^,ިF6z2d}deA&!iH؃ 07#݆Vu1%lGR#$""31/ӄFNC6c#WcZ8T#~f KSVFHk%uM,xrq [7y^jzY ^ڽ52p8p]7)ddW.#F+.vYև׍TGX ]2eкl&װPx~Ƅ3W#ԅh -i.Ʈ躉&6 Ѻ !(3$Xe$}dxTȿmѦ@%`YYdwR.;Bff 86a ҁml\Â1לh2c#wH Ya c,E"GYꦙEaof3~h"!^<9CF#+)?~@2"؋x[1 [U;/xjaF}МCM*.gٕUM1:LȐ':M}ޘ)b1YB!&:WDlq1%% q*#"ҽ?3:3ePgd.Ƽ^E8CGq㦈TFjh{4}U$B4BB^h!>7C2"` uJF@%u*[++/5UtƻU*b"^%jndž*SD6@ C W~1@7G2+`ڟ#T }l\ ȸ2m 芰~'s]]Y`x}b!`)5"ZG0CqXsTRwHpXɸ*.1o1A 6<Њ+wYaR[= 1⑚+i{i;F@F ֧xQ51C6CuuWt9ZYCRCd˺ E'/*9de8]%[񡧐uB0BЉ6dn]e7L0hXHBN$4RWâC3'Nm:qoo)3^'HNq=O'GSSngl;mv !fhܖT[rCE[H8Sj-P?urCK5вOZ4/mfHk9ъjˑy4=QoFU]k4"OMgMe.(JkFOuEeQ]SU/VTF_Q ~Ee$WTFrUTF_Q UQ ~Ee$QʨTF .ۊv=^rnʧ굫R>U]nxG+zr+]:bHzozoz+*P5-lDݗoot*2ZHRF8 )r2k@ 6bYhAczw QW2Z2a3ZH'i6"ɟ$ٸDAAttKgԕ6|F]A:Dh)6F]ihԵ6F]kiԵ*Cua5D}CkԵ5Qb#IKԩƑH[$%(ڍHJPo R-aAPҖHF]knԵUx*Z—"kI ]JLHt& QWu")v】DyCpԕEh$%Ѧz9t QWpu Qڰu-9z9S5maޑjBt?MgB񣸐҆kmֆk5&#ɟ٘$dc2E&VN (^$CGӠ}$:“$GB$JcDQIJM[$,GJH0] ^E[XZJ=!9jh:F푤$ڍHRFz$: *GӠBy$: *CӠިAUUh5#IIߑ$ʍHtTXDAH :u#Iw!IHޖHi6ʡ&+jG-AN'>H]Su\mG=n4FyQZ31ݑu]<4tW $nADm)^'IjDH]O$5"-]B&u*DHXTHMOНH=?Қ[$zF#$iv [ $%AҺ-tZҚ4i!"f$I( $!)\mH=M!$I=M 4I)(I:RJtJJ%i\mIuuuFTH^Q"!RiCj-Sm)zlC һIwԩz,&!M%8T2Yݓ(~ *PB24()Y%V+QQB#6brhu*$%븦튵JU\JNI/^ϯu}o~ͽ_{_r^ jy bZlh*?|wߵ1%m|曯Z皾1?Uf~Ƿ臗n#'"‡޽{aM$__l5'pX+/ߨZ̚ b?Z5`?6`߀n> }ϯ^7z ϑ?F|8f(Y1;0^|7o߾Y;ПJMEwpa-5l,ö;~*d1#l yĻo= y\A,Yӻ{~;AeRvOpWҒ/p1)lzAEȎh~}t1iX~p!m| 4\ J'Y0ݴ|x=NvgZoNW>R'VO=[vWG[}]=??FǦ߼!?[C۩Y=[Y~M=C^.~r7 d+OoNnv[W>k#4m:'Kad[ {؟\xmrV6>un VG$oZaC_s?[^MWPK!g6Dphotos/bh-flowers.jpgUT  MF\FUxX\]- $X w'Npwwww`i~{O߾=y65cg:( z9~73&ee`p IH?eE% WV^LTEU~ @Pu쬿| ٿsS*1)nDmھM|7__/;[ۿaXXG a:[Ey7\wX_/v3wð7߰[y,p4`aa6rj=k۷0%lx9%5o] X`9Sv%Ϸ3de Yxb?ry`vs=[/(_>`&|`(r_Ю0<}"B FA G`1+;' ߊ 0(ԁ,S.p'm hޗq9u=s;w?NUKPHhإDԭt̨q gbYʼzƲ֪ڏu]dm]=}3,S3s Kkk[;{Ggg/_(?hwAp!aÑ"#QPb>Ģac&|LJNIMKO' $"IMC)OԼαͫ]s.n^>~ACaR#FePǢƿOMOaLN+(*a%̓TՖҖ5V4V5׈ײֵ7~lmlnR37:0>9,>2=6;1??-?nAsfjqwEjZѺ&VnϾaޑ1i9Eե5M=}C̣UA968Q7 EDB@@ a =#3c"4v"N"n2^*~ڛig$& %ϣӄB"ZCP1])}C9#7sś6TU g-3=wB45x }n]_E`Ez޴O_bM-¾!ySr4cRaJqZiV9W7T4ю5:ٺdz[/#)Y9EE".\_|UP0p-C ; 'ZBjIf?jBY@5)+/g_%~S7%h_tDWSaOc2o}RncvVy<ȸʺ˻s`rdzb~fuzv"wu58 ( 9@~("71% 0;@47J jj Z  V;w v5[yӿ~_䃴yEeU ܇/!<g?a`bp qq(3Cא.#Pħܤ*.EUk02"31u3곉q`rwz}wP~q4A BC1AiCEBA]ABkCBOàHÄÌ&.#}g{8a(x x. }zD$D W#GCjCBFAE@9F ACABC:*#(F&)f,G'XXؗ88xPxʄDxĵ$r$dd,8Vr= dJK*I!&;?}C0"sK )Wvb'7zfp1>~r)t!|HdWJHFZ7ifYrf. iJKgՏj26)Z={:Lzm4&If3JVivDNv΃@HCOU~| PܰhǸĝTtLﲏs;k RK4 \Ul5 u M-mL]=r}6C1#?ǚ'V̒//6oym^f^Q?X>վBp/r?zX7e| @y?,ovu9-wo>sY_L7XpoNep7mZ+sYpn؛bUp߿Xܱ w$$_6 _t|c׿ z Kwnwޘmv(qD} |,B z6NAq95OW2%&&jۃlb/OڊʿJmK]ٷ_KNDߘDT_}$\o ۚH~74bH}"g pyJkQ?ouJa7s5W{OoaW)@`0{l&7[|v2[ۻ6 j-@-3ϣ gs[iZT:&[(300=WkhuK ++ ņòr~}=;]GǟZ70ao?rb}Hǀ{7\8 [Yؚۓ~67 v7#c#eabb _ f½/(HАQP :*_wCED@DlP0PP0P$o?a` A4 4,zaj=0Șa8'gյE|OAIEMC#UDTL\BRAQIo`hdlbjg`prjzfvn~aqcsk{gwo_Po_o~A otwdp_ul0? |ɮ@ʟcN&g۠?_ױkCCàNsPNk&,Q=>oRl6Rg&`S:%?D d_Qɕ[٬ _լsG7D O8rO[|OWx{}=\V&E,¹]]ne-FmhZIyW6Ge-- %Xx-wJl/d۞*eRB3q,8$j+If.],,䙎3ԱG$ Gz!39_px]GwV7E4%yўhi֨A 0-rLt 2Bq?n2(}˜Lw21*P_\f D}yFٖL' X’YDRG iJgؖ{ܬmoqs+)5:/$Fjk;8J@89e C~{"' Ř/`†ԣ<`tнW=,7#(\[Ѫ C)2 s3rn*#E.At[?ߥR9#TPxWw T" ofVC)Nf?XD\WF(n@A>>mǷdMqo)\1 xsBKLmR>Y8" B@Hz[V5G!TI= ɆC#T̃'ֵM<ϯ!Lz/f |fh L\Qq$*5(] )7EIxC, XQb?4Weje3'ŷLbPQY+ZL.6⓳jUX7r6,34kI~ފL0p5MЯtZ,*eesaWDCH^mvf k j((-~kb+r%7ё4|IOIiX1~3 ۢ2 oR]i=?P_pIg4qڪB Zͅ:z;?|&k~'NdYb}ZrǿBenJExTQH3.>1wmT?8>C6M:7He fVBGKh1g#6ۂ( @]#ߑnEKy;`ݐBN }3ljv{;%*U3 # r6~KY`TM~?yQlrDfM FcI4'V_8^?gA髄(iu^i/hA !N<9B5݆j+z^2D4mz &l :6-ۉffi}- hgZ~s2kx +ҷJ;q mM%0KL=gzʃ:sIվY^8}gD>YasVYdz7`ރkqT[VC>]FiLVįNm\b~T/9>| 1Wqi.%F&b2Z{\2'awz --'%!Tè#p{1!>Lifp:%$KGfήfޅrhK%;ع%2uMVg"=/]Oj_CȢ~:<$Y3.;Iе=O^ -EXt;6*Ktu0nck}3UjF >} ]ue3s5a,7!I"zl&\(%޻olZ;-eiu}&D ՘7[!SuV;Xovp' ߇Yj+i4w:^ ]&At}}U7#M1t/=Oi+CS@ptXE@ |p\5"[e}n1;=ܠ$i4<ܖ<%w\Ga6E zhj?!UŒ·{*d^u) Ѽ=(JAFX$pL  lGk(A4s0%8p?(. o^ zȉ^gLw[lf.fmjc]H?ո9*`al{>H:KЏ0Y9“$΢&LHqe*_qsiu.!kj.j$~\(ev4 @/ϡ7V2mcNϽHIZSz/ݱ"rgs՟^j\az債 w[ՍDz #W>+ݧ( Y3Gtb|/<VEZE"C bFNlg䝍[/m ܰ#[d~rr u G6y%$kw+T.ߩMiÇ:-Z`gr \$92|cf!3{c dwE$]'ϘV')(M4h1Z~?m8~sz`P%H>qYD*#`U7X}bQ]FZ?!dWU Y׍%¾X\3rM;Ig>щQ$%k Ѱ]>_~ oRڂ[Ղ;y뜸*s o;&Sy "Y")+{#*i˚6TxSyG]HGg [޼)^mXµ.#h2K1p)Dp\D(=o݂ޛ 7(xr%<ٖomuy.Yv'R+lPt6w-4erNۿoi~T(Q'D~= T*^IaEl} g"/\L>+O# w{@ N hoHnWNiWlh Gr%X𻶌w 7$UZCLtm%"C+ˑCg3 W2< :uYMU՜2~4˔^6G$hwaCj@q2y0M2rrwy!WɣJp72` W_V:[bOV=j)hJ5O~jB.̅h9lɲDhl+=ڽ~54"riI5\9zi~mЋe%guE8YLi,%zY|-2H+!ZR;!;%'8}S틳-é%20&yQ،Uo_3sq((_鶔Nf˜~Q2эDc:N_̲*)|bAc+%p+ꀼf ۖjMJ'# s5sgp.L׫}~9 jֳܻB诏Ac3kY|g'u%WS"’鯯@=?6&VRF s(QL ##ٙQy7/NS=bّĹ4ᢶҎ^Xlt zEKyo%D<HYu">1)-5:/D R+Zn)ֶkQIנ2-\^uORNbҡT^RgS5ْ m'E״Xri}I""qd(;~  ^.P5)V:xi&7T,&D.| [;m< di"p!}0^ꑖqݖkD%7&@P9)T̳mxQǖ[.rmm~z.%UqD^}3C[ⷙAoDݝY,G@m,|B\i[Bۆ`b{wpΝKlĹ^RI$/]ʭnl+w69Q}"pQ~xnvىŶyνh9~w[ o݄?N"Ԕc6!>,ꢕ>ԞX1PKi˃( Ezm6M㩷̤م>^=L-qYb:~o]R)o`kfݾ ɱzk.$],)FOIմ5$lPүz+=7 Ebۯjj8q(u ,Fܜ3T3ҋβkncxfp]V8I ]_ʰKc5e#,N"7w_avmKddQ\}Xzn#W!Zr*D9ylgy'~A-݄q{Goq4\O/}MI"8}Zu#R ļz#w(/zr8䄔Ώ%[mz4?ᖎk.+vW)^p95>YdRO0\3pLĤ?al:6st% ##fb,$ vN]"8=j!tiAC}H/6 m>?UZ38}Bh͖V2 oISۭFxˆDϤ3*W+dzAFR_u Iދ]㞩/S*BWc\ۍ'ONi"G|Sg 4~;WV&hYZ{̭-ْ');6V І+amۼ )d_{Ԍ)IL^VY}K՜8p`rΑrv>Ke<l?/M٩'fF-ZtwGK`%!i̖}tZ|r(?-':88S ZDX~@tI?KȍB=ʡɽW=} 1 `QYSC#("@YS+,I.>Mw@=-'}5V׽i%Pw!S3޼9(=$L(/kch{vJh; 瓍hjB мA?qa.`ʒV,pK}q*{0*I4RƮVЀ EOs0ot[c yU|ۻnjRttԛNyb|_fP|%$o(o$S1;#i鼍 % #A?3qI F4^KSEE*:ٺ4Wm2I !O5~ŀ- ^Ὴ2W62REFAKl?TOqHXڶpc2N(8s#JMl]$K(g30=2p}HdB>}8ʌPZdM٬)gJ->Htni}kƝl娲EñyfS@wdG3 y )zlyyVo#gC oϢ/=:H,*62\ݺ.\ ǚUgI쏊wKEvKeKDZP["VjR5u '{#ZPicwBw,O8|9 v`)C]pG5vyGƎP<S- &A|RJ>RfhW0@qQ%6j]7؁PR 6ig:ljkL+Lq #ѧv d$$%?},?ĝF8H' [+>oGA-丵X4AҌvkxr/DMM 9J.pJ2sS e͉fr_ yѷKۺ >oNr|.jo|R`4N#lzX,rM^sPץF㤁U >n}6Z HёG.WvHvl+ CL:3x׫9V\)-)*w:3v T9nen9 z*i}]"e7CP;ZA[̵eҾY]Ύ[F.{ K()Ww"VoermK)G3fk#HtdFRmK2V;UԭiMO%C눎@{z(^ 7gw1\TmpD|g $u;nu5fYR:O1H[\*t[1e47[ .IO,3vMY$xaONdiC~M╬\v~yGZViҪ/уY`nT-s i*ȱ o%+9vV`ZQԣ"ZX 0&8$4fN~t<$[3*Yk^+1F܅ec՗i;~S`YQJZsR k̍w٘AzХf9{=sSC Kτg]ui=oO$/QS!NR ׭,^I[f\`GpSxkf8aǘ%cͬhVVLd}R%|K| i NOkˬ*mz}:(W[Z#E!ZC4ɖ3$o&$jE^} E䶖ZH7'"ǫ^@_7FCb'S,bj?9ѿG5ZN hT['qbVݠRFHerRmʠAOQ.P{KJu֘䶜6+ FB}EzMՇ;,3/3L /Yn+$Dݾ:m☘DF*namfRWPu7Y\=,k4ϜjNE87pY8ŷ64ټ) +hfbZD'I9KT ͺݟl̿iPJ}ON5Y;#9b?PqX pfv"b܈La%_&T9AfEm jxJJE Y(7fCQ(JXA\΂[ uynG,@*=r?(uKQxN]Q ̝/e2d-t"O5YMBhq[,1ncWbF3Mt Cp_lPf hY>` ~ȯүq[Y{[^ "y:@B̔*ܸ1t=_\H%snr 0%HeoB_K O(^)kC9?ص`mU3xʬ˵f1,J1-^nj':qBr;+eQ;:>CLm{lu\Sr-ls\S(IKyRҽlWBƼ˃b(*/G0 QY &P _M_K j]e`g mCc2O]I"(8GhFAb{`H0jiGJ7Wf7h,[඿+֙kw%aND%7<9 erl|'9 |ӿãj[:'ZZp9Oh e]z)~$=IҲ'H"C\ \.m(4m )*ɥ2BQxK\~M z<69;$h9&adLWGh_^t&8[f|N%ҋp~]"]RWv&TQ ?( a Āꌾɓz& Z3+kt"xv87y+J 4btG0ִ$){%_O\^̮\SNjxٮP.C-zr9jPU[~ .a-ߡt WUWW m<ў>!, ,Ww$1fWRm3xH+LQHx.D0StU{Um l7/\1Gd4COC< &(Թ *"Mms{~AxVW h)~Ȭ3ӕ`N"ddonK+.^˖?gY˒4=)d5 noG.F@OV,evo* IX7BP_~eIZk؍In8d!OI{YQmJD9qo[d6ܖqQ ^¦.HFSzZTȫ7( ÝTTnD$~;zWRֈ(mi:ʐXK路)8qML1" (YZ3/r![*sS?zۑkLEa osdnpK,b|4ڤ,Ӓ#*Qы|'|[,kQ2Q$JO9Q:lKtJX3X`ɠY]ŒZ3ϴ͊F聖塋#S(D ]CBkƗz𻷥G̰x>̈́ۮ3? x+YR2%HSxx* 0 {D%4"bYI PtD)EaNc2xB~p@H$䷥f7?^(K$"R#cΟ\MVklVwW'rδe“ F:HKX,%M<\wC"hQgD BQ6RE@ sDM&墡q$5+1 @0S|Vtכ'km/&r\vcg? 8i#\ B]T[k3?T.er ==xj3Yo°_Dp4B9?2ϷG̝SfhFn1SK&?ީz.R9ڭՇ{OVT6>7O!)73HK|pw{ I|2~2=x` 8eXݪOv.~|8XȂyg=5qȧժ\y={$%gf5'{l݈H>x?raI/k|'q"dX d:~k=˭82ofKB8r~m H }dw7%6S\{i3k)#X4cSt?9t(,TMV[XiOF€euSdvn&&&$:'{=OFhRwR,e&O6\Ӈ:6n e 8dmK=_>2yBx0M_ܔ'8B](;ƨ3HW0Fz0EF lT䩧qk*" T:p -+eʹ&fƕ _f"_yi`n~EA>HMʢ#r&DҮ͇qi{H&觷[s TT$hB"Wfeeiz1ՙ84z~Nw@OS8͹ު㳨\ ňȯ>]TlR ViS=_rC޶@## OêzyR@ߝd3E afؑ(aU}/4fΡJQ[ WEh> -ϳgz;7DM #x';M , u-/x~9D)@T?FݲlQPz3!jLe[LMUFxI}&R=Øt'rҖϩ-kܚTUz۲Lg̜nfHWG5ŵb"><㡅6Ӎ Grm8>ĜRV -WD䉿i !(\ 3lՎ'[|'| 0rz>kYH%Ʉ{/ X+hL>LIqZC^w9OT2p`GwRƣ;.GZ8|P'Zi޳*tx:v1 7sW<R͖ZZ"o<];A>> 5Xww#ƭD~h-6$LIX >ɮR%dq&A0>Ջnf3d ,#aԤrի o 퀡@LuV8/f+O)pf`y'LzK :\Rm#Z_3/.T tk:DY !$vSzd/>Es!L}8;kp'`O0mVA1Ӊ2Bb`u g'MbQǖH[#fӽIr ) `o=^m}N^MsoT^8fnXSgϯ_R~l<5 ^;U5u"LD4`,k²_O-< _CϾʑ2_,Րv4Cucͤҗx $22-ޮ1hZk{>)0ʝi3{K~d;W[~h4[r|ǭ `6K+-ݨLh~?sJ 6a;("9 -L+CaiF7~|] _/-˧*|j6 NT?0㝹KO_W@L7BtSJn0$R6QێʯRF2e*xxnMH ̋lYGQc+z M|-)zbuiV,l^21t(aZ~i;uRSk6\q&¼I|X5^-V YN1)3M׾+ۚh{_Ѕ Ŷ9&g7%҃E=DϺ*gy=w.0$_fDװTcp6)LJceeZgd;l}誷{[rh+ӯ_~q-͑R{Y1@;`gs{8?h<fs]g )+b Xixu%QwHNJfmO \! UN\ QR0r<ˤ4~B$rfeBW r<^k{gΪ;| H ݝW7D|"xx(rf7haOEyf=Xo-7}ҸSMvS}> ]ϥ2oAǵ\俙2Ak7y1e':m+X=ҹnvF f\/g]t&QrIgTSmCI5=Ͱ4U[Q+GqO6ΰS9aԻk7T^&w*(Cg-G=23Uޱu/[{x^iN79POI [7x_rV(Eo=asx74gԖ{;|yԵ#DI߰;?hۜC)M[4fz ;NkoJP>/wo^f.Zpf*p#C⸆artlby8𷭓 ViQ|F݊LW[^\elI_\#|1)&ȼwy$ (uN )ރw*~m?iD2S%Y6fhGv1o-f nmF@n#.dl$Rwyq{E˅6qG'jhH N}= B6Od$f٤~052O /u@ďlpA;U)%|`$?Z^Ag*;voW8{jB2v~'4M=%ˍ(U̜ĪNJ},ᵩǑq[5H~َ-!Da=tWR'"|QHofOIGD!A^.ΉhCaM|IE]@\mT0 [C.4/u[Z9`#o'!N^>>}0vF >ЊDt3=\XdPFYMUJW #hsȈꄔM:eͺk}ૉAZG{x&uWe4&o=)unݖ"+i}wHm+`|.^ffVW+}@pxmXRxtTf*_?Տ}G6s1a,bc$,:&XR-(ffyժ!K&-D/ܡ}ψV?pA:#%<9IMO9aJUxԫK%~ϼXh/QS*(oʿV0i %@vȣ]714V팊HDܩk܄>P"1G*K(hniIa1ZJYJx Gĸ:'j ;k'~KZxA^7L)f"Y$aο=-/Ѱn~9Jo.X@Q͞^`b.l\40s$*s{W"wGqbV [ )!\ﳝ5e$?Nr-fŔ%;#+|SƐ䘘zn/$,IG;۞ftH<KjKKYͩ9BԖ ͕ ϙH3WwO3I+3M gU {}ĺ÷Cy0he):OJi*Rcx _c)HͯbF˿Yb66M'*Er1y+mHNIwF${;i;mBbM2OϼȤ yk|J_DmoCL NV%&_)DwO:n)<< E+0Ho\>"\^Ť< wIrRnωFl_ir(qa"/mK{XpiI^j "ַ<=nu3ٝhi|3=CE ĢmIt* ֞YJS2._3wAQ鼄)T7L1-Mh?}_UScBK q MI~ ]ӈep^3o{ FIQ) 6& ;" 9ӌ(48[>mK}&pʰDv޵\"3Ak%|^hO8fZ1RhgDۖcf.b6Sr32Ξ2e$YgUSιO z*ôwE(s]-LL }7cb׹Խ=A,3Ըl9cz4x1'%a64_wab]`-ڮ>(+jeOFj\n 8;uLg]q{<,<7;3؁OI3=wO_I ,+PʍE@ZO]}Aկ&Z!@o|ovoq ~ݓL`RRIq{CݩmFmHaϾ+G]o QMoDGQ6ZiīzE6Չ}jYn.z?. Bpb4J.vM_tw5TLŀY6-*zXw_ 7W=a;2E0$ g BY8x \hAq )mW]+ mXR $U:md1~8NJL!;،ɚ9S&^GQ@0%rP=CD#vXմՌcܻJUM:xs=\VkeN1ZBtfB H2U)C`1 jf;X^l߁qʴufTXN&^G* ">ixD{C%?14|i>#5ۥLQ}?UJܺ2|iqyrpal :)Wך)i&dsW8=a|ZJs TߪX9FU&;ԣyR>@u{Sd:g= ['k!4g,;y-A m`2HMyy(6f?֔ [X2&ĥIPtb{L|EU vȓe}&j"2:d&4"&/9+i#g]¾;ɖZdi$ˀV+Y/wLE0P{e"jr}i1ր^fmN. ^[?] ;^:tGAEUK p4^x>w=]L6ra߾\z\#zHd2pWp3F+b\I6:H2\eZ(JiT5niܦ@Ɗdz ٜiu;D}7q@PJb=Zs-Wrlz|mmUν׷raJx~=^}cM3'Cc`۰9!7U8gݐcy$8~L %!@9x]Swurt(;ћKJrc3)Vp.ԓI"rPnak '| ~(W_5"DF4&' YbHVpԘh[x+8nK Ɇ^dVZ_ $vv'&`[5oC-_l5f#ʃZjfr|BqH_ ,u9_I-UO .Kg*2yA}S7.g[JԚgذ}`[LprbށccehYT7MUSYTsk1\]Z/yy!EU hJ [9 YCq jg~HOsQ!@oԥ-,my=77d:4I&Roؤ\YͪVط嵓.ǯԃC 3H`A ߢ9f,0nrlpgPOqi *DlzpSXV->ĩ?bA<zR}VE6RA1ɧW3[y2=8ll[> k߿I96"9SqCVlR~n7z뫨Hٹܻ;BFKDޔD'O=R>(X;wwR?Ѓ3GT ^(x]KQ9(.{[RO>Ko o14` BJfb,(MXR 'IE$f]9'^".[>3g $[_^YݚFm"t{+2rb)Ffm˖ -`g!fDjݵC8M{Bs.mtr.ZࣥjQ[T ̮^k(UN- $lK9ѽ9Y@eVMdm/yP<٧,u|-sq2%c1rdzĈ@|֌':4u.`iX. ,Y6<,˘Al' mƼaԽ+fG:q22gإc]n6DrL}d<LTiցX]Ep,3w;S;b X\Z ?ZDI6r ISQʪZlR(0;1na@39wO+ż p$pDbR1_v ĹFܗ#4;8,%i)-r:olofF?S{#l+&4>0T.xKKpS*eءK$<2fY>Vʹ艣ao\t[UySs0l @@!flK zeD34宲wOP-} n?\C+'qz=ljZ)HGdT}j*5 Z\:,6W_ba0(gZhKLU0Y "p^҈y*R業=w Jlh3I %F.LIJOO@}h'nmp3.I'aK-WKHY}/NMEMUnln:(p%3& )ќ:=>i1gCGRaX#7%:R&@m6H,r,2lkը\ .B 橞IV;/Z+j*ҶrkVy}1εn1gˋD~HJ5)0t-msbNō*В?c-W c#**+yKD!4 H0w lX_X]xrJ@3Gl|]Q{8x櫽C=p ?7dd]/IB])f!b#UJO|LJ)ȥ\k=ta&#`-R/»#r^W} QAn5{DȌHrC[=H AJ{"P4DjK c78`*CpX&X[n'^T!fZ1WЄ vu{?9'.2(ϋԡO@Fv<j_ѭ ]\̎(Sv$\=tzl; LW/0d\B戙[C櫪ڜ^ΕFr<~YCN'#0ӣ#?9G|S~B`ap+ȓP=mqOBFYK^=N3f,:d~PviO zpxfDthpn>m-eFgc(m9~H'B|ˑ$$,C@˼Ƹ8:b|/>n:Ƃ8b gk z|z ̚mjA ٢ݰ꨷hN UTص#!jg'*0Xf$ӌ|J/N 9j(Bcf(JG峜NULJ}B(S 8U?w'mZd4,&8tǐ-Bw<39[abX)PSǴS D/+ډǾ\NUjڪ._M20{z~,P&`;LkVj}l\DaݢOXT҉j ] [6;x*V.➴X.WOMXm3A?t'"^9.}}(6aۑ nh MѭB+b1yN(Qd> a!-9Шw'R/*fؤ]6GFTX>ԕt&k`U0@mc[J;3N7Ŗy0uozHl.V㰮* |kc^7q( Ȩ"U̅xl~N^)3: l^2o Hwnr{u A)>y#;W7ڙ5dtR t]%"Is4n1^ NCZM A10Tj8F{pRJh[[T]{x8\~Q6DhWn#5i::Gnۀ9Y dE  #TvX rr@xW&dJh#(Yhgړǖ)㾇f +Mh=ϐHaG* )F2qW=yN[M v_-][+NW'xOo}  0F+vOWKEo^}s^UQIu?g%d0iy&fg/ui%iW#j)" &EZ^jۂ,O<:Ց—))EV3GJ)XG4I5ScvYj^w%'{>TۧH#InEv|LMv{P@#x6G*BrKYRU04k;EmuiB%n?^7bSo^'G(q_MH6\[k~)Z%eB37Ea}b]UWiuD<uE%54n}m:muk`?EHZ+4O-;Aעx[?0'=f Q*܏~i;`S_ gI?+VY8M6E]?*DuRaJZŌ/!5NxfbFٻ+yZٜX ZiG7axJ$aV݊$` Aujm6-4q f5LR/Q6hf,N@^qbVxy2Zj WQҮPVx]Oz$#m5ձq>((4{hzYoN> eze5֧F[r1ָvP;K195Z;*:~)a2J4nvvΤZ%:5٫I͵:5fOo⟴G0ۑC־54X䓪k峜y/sS~4#Q|7DMiq6M}! +?S}{W ȹd ךᖹ%<3X;JRga5e >#5i^5 VC< [嗃>vH M1^myOBEyFr&Dvc?;ǕROE40.%gd A'%mB}ۚk:SMhhxsŖcGqs$6ӞھK&3wĨ1|Oc@gYchUbJ_YOI[S]n>x6߻zꁔ*Xx.B3s+ݣ>p+|?zs~&oO9Wbpu)[iLDe3X.41 r0 |lnTV޳&~ѳ¤kk܁jx@\|*U>C*j0w=Sއj2ȶ*k/ZEŒ?qX;VÔNsbo&XWV~U'cY^Qp%k>$mkKs,$vpך+d6S@}mOJh/WVf[k_jϯ5NQA1K-*ֳL ,Q#mUH|Qce!s&r+.uK+~;n5>sʞ9 ZGnV7f|tgKeIQƌr:ta]V,~s2m0O~+'K^𱔚v!yrO~kk}ʞ3ȠJ{iF3β|Dm0qһ#~BhN89$K6kgCOgr2dmi"!OS[:1)9h}i>)iE4Fx,sè6%wOVM -?Ŧ%7R"^Di>SǁU(kUPmz__~,.3DNDO_^j,|/ݫ/ڰ<{}J̉2KCb> W$xexPWqxi#k=R=9QFk kKxR`wG7:(\-i< ξSZ)5[raY>X*5k^ q+Z/ a.[>X%X ot=B}Ѥp/. 2eSNγQb( ~` &|jQ|ظFZ6f>ⶼm[{W,:W|Y;}WL0>_:O x'H/[ 3neszό/ڪ?wW9~cJv><#(F嚏OJrG@6k(B8ݏ¼M!2r[y.dgT۰os57l>,n d>XmQHdrxkiMcJxfr6ctԋs=Λ'5r3`cw\ELR/o_3 R⮱ mEj6w<1 8  _9bҴT}ӾA3eK6u" v8+.'&WT0:tMުo@Pis6XqTemΚFдDXP[엒xz?Im5a~uRe 08۳:ҽ"ḒJ1-<ͯCGAIl71`s]};j(#v?s~h,F#!8Lm^O_5Ř^LsI$~uJL J7u#["@EAIzYM?frysrSsikm[KF6l^}Y{Nz|ZXz%F9T5u5~QOO$vY8+3or:?NΙVѠ.AQf~Z:(N^;?oE4UIaq#:1̤|TW>Iұ- u<Qu)&?3TN>mϝ1@m3WkFF;kҮmHn<_h|)/ *)@95#D- >| {?F<>´y/&zN4nD~QǹiV=BVH8e>n5(2 S^%F`+嘚0g똌eҒ=M/o K9VPs^1 j:V52!oa++Z䦙j-z֧{qi6oV6 ɰx<>;10mJ1ySr^z;*$\N $^Rlbi7yF:U.mfa)b~cf;,_;FXg9Z3sa$"r@(s `\2lY'+˝6gaq;? 2vA%6]/RcF#*s_5i]v+t=zRӤ.MFl^8Z43 1b-(@n= ׵UDs\܋`O]sּ c, +爼-fL|`pYaZ"S夷fo z$/s$hlѡu⼪Ti4LUq_Fx2[<Ҿ1"raҽ,WNsque_}֎^yx \]2M4kl82@dNpyY5+g+޽9ьuj UnF`fhd<8<}8Kkqr6dbT`mQ>L#& ߡo>7K, \CWaZZ\ҮC]@8~V0+Ӄw+Y]#7FW8+^-=Y^O/\*O}<JT4SG.*x?Ht8S*# G^zsa&;[+v}gKy$b7)$՚_&YqҾ(n~qUnr)ԣޜ ԏ¾ ֭qW"ҿ^5/^K.'9k^<47s8glq_8r^]+g"<Z0ڗ+6oE˴UJʾ2y^=T8r#y?$' G^UjMSG[cA--kbubbTpkQwu@ieY~8ǽ[qůU[,2GpѪ.ztkɍUcHT*@>cUWDݻ8&%)9&|4iIu=Gb=cT]V9#j/CO(IxE  P+jJ.8GS]jNXæ[5:xSd}=xM nz_Vt\zFlBqyֱa=:Ubʶ}+heǖnJCs,;r\^c e;=+SzHSSh6uonU,^><} *9|8fqʑ ȱc^qKF,$,/xsö {mvӯ59~eC`x)ՊyylV) w˩##e8]ߙNyo;XtH(i2j=JŞh.cvc;1$S\MJA6G5v@nAUMPH9p.q*rސ' <ea>i P?Z|it_:V9mDvGҾm?T&8-۸##akN1}ƾXxzKWv; n4o:ׁ]?ėڅlTprq_@j}c)*w1.yּ7Ucw3A9dqߟJp5)T#-Lg{5<"y"Hn 뉜j6Hy<=>iKx5֬^ װ_Xvo\(~Rʒ.QZ~Jy9[i¨c؞Jv!pqO -mj+Knr!np;WlV10y+!o3im ꋴw!Qm \ޔ}Jiw7 {TU@\y{c&@oQTEVS6 `]JHx]3ZrxZ2|uuu^8bClrFOJ^؋ᴻ2l(:R0xj#/f{e^R[jۙL]g!k+2xF$}%3riHsǥdH]OM Wy+'LU{-E^M6㝿6FA^.kbU|gz\-i2y(xy.ңBvi[dWNں)vcy JMR7()%=GUC[:k | Ez|P[s^.XxeR_BM>622ߔr==+ӭ]|ON}+%Y*J-=dchAJkF&#bPFiR4#MUdǜ9wPnXHZ6&1vGjS wsX҂ fAeIřf^H$Ҿx#S4$Esn _:j6[|A("nh Zl4jUp}:/ _Oe8 9VMN7c96?"?=ڼSx2L"1?OC$.7ssݏ*/IukflqcLbחR|XX$9agKxg+FiGC+LHa#jz rϠWZv}ALg5{$Ko+`tֽZ-ȧs|{nDžA[4n7[+tgmUst;zy=Y/$gB~^CZ_eHz$2j8a[tp5guf>׉+t\\,(Q8>x\h].rNTrF |:K> ZX,ӡoᯇSZ <&r$PX_Z>̖S>Hzq^x|y6oxWg2R@Wjϭ,k'WCMYfI4Oj]zZET$v}@nW7RAx>;d\ a[]+(7tϏu̚ ݵw˪O5于yugshQ}Ty9-ھ, l=O־,:u]ω IГwPJ2qya h2lN3>vwo KcevqR8ce ָtn\$Kny~^@=k7Y渑AZ3kW9SQgPx8fN5}W׻:HK:}zVټ9 PpHKawmz,b6`J6*_ NAϥzjqNjR*u#iEoh#wd?.1ӊւBhA*mSvi3OLqϭ{`Q\Ҽ5NwS[lj5qYE({.[jO4Eu'h=i.UY't~#ntkc{w"3=E`/ffvH+bV ? ZlLjA٧we"Ab1VxmFtgܛ n\ ߥ5y~ZmtydF wgIm襘8p Ȩj 3 婈\[_k&-͒G' -Z!xNjβD0>rwuE1FT(6M}+w)b;ܯok,]mI ܽ qwq9+uvRd]ӊw<|KW'xFG -8[1'aź!ӍE̬y"67wd:t4] v᝘N C&KM#u*]zU>rYj7-hHln-vA0+_~}l(.p ܬMk* ־Y |Ki/#o0ǃ$q>l2W|֮:q/YԡH-α 2d5h@nwɯ2퍽ی>W3q?Zļhy_s|-Z. jUvlLwOqצY!P`dǭr< gkf}ҤC[[ٷ}?AfX{6qk1XD m }kŐ-ZVY/f)1kg>O{W4VW_pѲ*xיa>' ,V5t gxTg'=kBhVލߟzFȬI!Ur:vq.5䂌1jm߹ғLi\k᲌Ϋ*/#r,$b{˩+S+\ZA"aFs# _x!.'sq\2Nv[?BCH $pFXkߧҩpӯ QQп u'$]v^ɦҧɂK||ufm1+6QY_ۯ3FYzCd9lc[Gsj<ZL|-5I>7,zZω Xvyq^:#C-Tcm%mx'?λR&8U%D'}&iM>GѯԠn_bMoN_:>ӮZ1|n6`pw!S:CPR7([/O컆('9|]>c*jϱEņok>jc1xחi\:BIU $s:Ƒ"isX5&VRdkmb[9_aB)ASw>k{5hIy vG(Yo0<夡3޽7߇N0g9s9էJoc6NOip$bI)1ҽk&~h˃\thlB4#{^Q- j"m`_~eb1<񍏤˰UPjrA7ų e˷Nף\O%ħb3\ܑ-Hp'wUѝϛMkOqݷ6'k#eSZ'k M5L:g޼?S +R'QuL=qҝ)V-Yqem 6+"[Io)0#`[ UxE "25J[fƖڳ ])Gj%ՌV̊spuZr!/.$ڃp$H⹵'w@+>!> 7btףU'Ew0ZVzEMe!Xg.d|uwJAPNXñE#7H#. t 5H0k1s>JZ|_W=gda5K$3A,I^4ċpnv##m2xCm-[#$q*uf|8zW,źq-]6Xd]=.rUa,Ðqvhi#;v>S~grfִL|tfk:a_5"?5$zcko2 \J݇Wcgu7 LOQ^uM T.*A9Y/wCߴY"%TH  'V"~!M{yK-d *+tqhI5bp9+q+/J1t;s&|mMc$,Bs{Zvܢ ɦ|O26ѣG'ː>&iJO$G~sŴS]UL4i{е՗7g7q)"95# = $q8)_O[tREJo&Umכq>#_OGq 5RT̺x;ykuQ)ċd=zGD岱H+eIYiΧFjegiյxF( Fpz5'KpOaxk5OV_|-aY,UR]vLg 5,h3sתyieḫsUɷ5 F^9c0}*Go,~3 >[?U{?;MIn'rzwÐd'cjI76,WW{vCDR#s֭5*~gF,2{5U# :kʔʦ a/x jzd)1#t/u=/OgZF]|X c+ti2YG~NM O.˯q2*O5]U]se < ~]%4s2mS;W6iq3d^=ҭgf~.ن TVm^۰+3gq?5rxFGYd1vJњDD<`>ZĒ]`iJbyRQ'@If,RxJh{v8 +HY-H\z/-ek;idl1n9JHH{Vtoe܀|Wny6}V]UB裹fbpO[H% ~)\+LSzt{}kxlgZ10=A٬e[ >#d`W/d2{ uBY|9O-铌f2,T?A*ձ)K]'+dLѰ_PZ-yQ}>ROҹC9T.9,OOֺ8vx*m^"F&F o\ҕeg' 3 <⹽;RLB5,.-7?.ƧG#[;aVBM^vQx玥PctûʱZM>vv]ϪixV뫉XRC~!W`$en.AÙ>C^y^gιcS|(pqe@,@5fS\ O eOfgŖI"0{wX'Pp` yՔ8cơq^}&y%XA y 5)nM97ͭVjSndkd1ldpj~,x܁ Zo 7C~aTrM[)ׂܴVW1m&O0nHZ/1!HӢBsaК𯈾þ! pLs9|P ZÙAWzHjW@8ͅGgr#^r}jR7d b@?}0iQ68P8xg%v:0sQSOo|8ekp*OK'>Rl<4,;Zb*Rvv*99rmc2EZkSes2@?H`"[y栻#{S q`2 Єh8 l׺|9ftQ%=!{5xIdK9n$bI<e,9A躅lʑ.R[*:M|U:Fvv^fH嬩d7ND{r\#5KR4P.g? ׵Sq (8`ܐ3Ӛi|QR+[v-;Zɱ"R`kNyon/n T>b =k#B Js2lW@Jgu "fdg0FhN$X𯊼%qzC,w2B)ֻȡgP^Uݻ3_iආy%o{>"h׭`D)*}:\`g`c"jtz5fGuF[v8/CoR 65i}TydY$y4ӭͶnmdpv^::+޿_Yeo#֤& _#lrƾh{mJ2QF}_Ij/a{Gs]cifU^'ceK3&x#Nu9 Zv0'mIA,2K2(1'18hkYut)Y_y/pG=}g2IKUA`ԠLF!}KRDs#/P5vxWI! 5 cʡžq֕)4錩ZnS"@#`*ޞO#O'qoBqVΫ]fRzk)F'-m< :gLU'bԊtؚLR0so>%keY䉷CXws/yN-WNmRF;95O0ǪZ"ۘ<۱[ nmZx`~r^&-IK]"40XƾJ*,֦Du?="Vү$1gSXqlW5Ky# Y&d&3*$ȯS*{Ky NːZLJnLl.I$,/UFUEvRkބOo Ţ03pzq_OX{I1]γ?٬܌Kpq_)FA~.d8vhhmW[WS2d1c2<%o=>+|9p2z(erU$ӔtŶPar~b=uv[#XבmZ ^$˱ [y+H g錭n$kFkDE('jp ) @ àl ^O,lL|/|We˴\kwB2Gftc'Ix~խ\I"'cz.!q#k ߑ^Kl] ֱCPG8pEqWM+%$w ss X%J0I.3.$:˙{O1tiMY/$A#yn\h^3I'#~?1?ιMZ쮱Ha1Ա+#b鸷gߩ5`ʌlʒ`H0JcϰgvWZ6eHnf>S8vsN`>mKh,^F|דaQHm# pdcs-u0CpA'"f3]3r>R@"n #+ZRwL)S5]('ﯥ\Inut&Zafy;^*ui\tgP>zŢ@!h y',UԖ;1]}R]\ M;U1y/U$,]MtC}QM`Hv{ke !^3AtM%dy1TZR-[{miG5C,'q9kBYHIƷ|(M̹];:nn5i% -v&Poxr" ܴg(3Ϲ"I0SJ7TpB$@9vf-x._1gw t9|m8,BI$#o1WRI5dxƨK<ɨSSkomqU0 2PBJ夽tiT<gwGgVS,GׯKSNX%I<$ppyVYIQS2 񁞕q ڒ\ [$qSU$ >mǨ9+mhG: N0v# wZ[yw>h9 渋r*r3(9wF2Xs֧=+ OILZh[;NIpO#Wn{/ :)u$Λb *W-!wGUI'g+ϔڊٕ`iipd'F'忆o`{gbY2~P{MңIhl[GF?#p O<k/{xcE>a6zjpeS޻nI@] Tҹշk7 Y[*kEv1;4-'kUKv~c)R爲MKb(e 8_S^/k3#CNpwr\E5U0TzvyyǞՅѢnCZۓzw1i.'l.2yY;D,;k\17?'[K!M;[Grsw3#eŸ^i !/#7-=kd]F{V>Q?ymiNPwo\[Ȭ S>kKQ3pZ[3\L|C~'G{ۘO.[q_Jב>W>dЛ.]N,G9^jcU'1!bH=E^hv{Ylvik jLj$ml~psVKK}v'b _!]yL,n|2WXOytM-bIȺvϔϔNA?+[V^өN.qr^@)W}y w(Y^b?+9AtB0w6A=j q4=_AV*x*]Z-\T2F'?pSܜ1ϲ=42>XstLOK#مkKYWG @=.Bڬ9Gz2F^°j>$5IHyqyDpܧ;#9Ԛz3'FMbX s=Ow=$HpI5T 6vMF ;X\ɞp.O1j3qŋ7~pæxߛu R-b`Y,=kӭIA$&{%g#=kʣ5s_VMIE.[vڴ2FvB Ƿy<-'=Ȇm.$sאv>!aṚ+UvYSO6pi؃ߦkny&E6 Rrsk,V3m6NQT㥗c]5E^cԱ"khǨL-T"*i4J4|C^__q݊a%rڱLֳJ~Zڊ8mY#pxW)Trv(8c{IԧVm yzi;3Hj#VXhqڇJn|ۦwÀGZX )o#UWO6ce*\ֱ`\Ss!wd%_i8Br}R)xHQ\\1du~EMXFлN~k]${fuQՈ@~_N K Ir'tW; VRIK`z\x<4#I$zYI$\d3ȱLt*G<);x]~upx^osy}ǖ_8^]i 618#s`$[]&{o|I%ť|l 6s_6Ow e71g$u \]e 9$/lsrR7G*ArZ0ѡIFڝOic:\_V(lr3߰f7E$@` uI!C{Y=z}~3Ȱń(# +EgRG:n[玼 ->KUFtSQ*ɸԩ.X#F;q$xҾOFrF*-KOx`}s]%ZE<6N_'y*2Elq k@c] R^E+b&cۍ3;%+7oN^aDV99Vr.eyc r01x e-fe[vBvL 2O^ aQ69VsִTq+''WDTU f1F?U|Ft(A9>.Wfa[?q-gqX nN 9 o/r+WV 8Pr^y~R֮^t`''˟ק~ kMt9=3W~~,1 qWG5G .HI}3]l 9Q!s"J#dգ3=>k()Ծסk7c!|;>ugqoRH15Zwnd1b9VD^V>0r[ۭgQ)y*j}?$icFAs~ +سVP2$ʎkԴ#LhbxepF5o$rRG r>"BX9 *o_iԠ1nǕn!Bή|@Ą=빖+}uX~%R޸mj}>?:$M&w>\B_ies.:dҺ-N++x cǎFm+ok|AhwG Ť۞~q*x4YgfXXԌ{)uUe/$+sֺ|H@]æ]QT d_O~Œ D?yHm]rݹ\zׯÿGq*n:NJ~/znhB{⾤ O//2 ^^þ֯."yoq8ŷ:)nr.Ɖ HK:i>VW+՘+6s%(cew(6}k׾ jxkZv_>Iμ3\ua^ay'rКZmX涆Vsc?u#N1.LEjMғWnjOuK+B\V 6JΑ/O|WKi/4*,O㻙nK9lsȯ3IDxµN/cq5G͐@MwVƞd+d? i&F9Q}Q 1)~Pk=,aƥ(Ԇ_rR ,ГYgIy  V`,p7Zlt];z}yo#mҽ -*VcX\-)VMF+vݒ$Tz|hԕxn:W8Λ-]VX8^}zyoyj.l䵸.|_pOP $RŒgL~U3]mi~' 9]JK{rmvf%֡#$<+[{r5MId0 5A;W"FʿZ8k nq\^2o:HFvIZv]Ki1fffmQUP(?(fZ]ikw 3kqRV>jW(s_c9fxieh…#yάgMkq֗r#į-~nZ䚜H:kɭFV_C/bF~o22IOȧ~Lc Jqmo^iMh$y.eAʪ qV yG+_~OC]{Ԟx{!^dMzzFW>\(#Tg=+&kyMɅ7uGl\dr1]ŌR[$aqSih~ŌªGiYD2eJnk \+snWsyA[5ڬN=J)$M- 6AUhfp?"|z#&4yfmV73AfOӢ[vTy:UH8|6,3+6*fo1@i3]NMKy|Ka 'ƣGm"ߝeXn3mg8 ߴF*׊T+Oexez/ygn5Fo2E~~(ӻcrڸȥo,BNvW-yr'7grC}F}s<-JW 2}?o&6|eV=w=OP ֥crItr#8A^k\g {U)|@/UQQjzEKxQwHk2)ۮo/0"qmwus;JqkfgEV?6@0y]\׈ݼA O9_}1_1ؖ$gwJe8R1\3FJ3wu~5R}V!0y{srh她F9=Fjђ($Y ^J#1{? ARY&vg]kzWK W5?imFv9'o"lP:[SN?ZRJ][t6%f7o$ߺO)uꐪd"#^}gf%E)î5䚽~pyAi; * Ϟp-t3B 1)99>pDhJpkۡۊiLgT,[V1=[:hwdjAm,NO-CS(RHt*:#T=8άIulTW`NNsZtT@UbWc *0*$}cWt[~QB[Kƾ<19dm$׌ݾsE$>g*9wZ=ƑrHGRC_2xW1a,J18|GƲ/y~(,ثE *@S ֥u3R\k 1^p+c|FÒHA]Lx8q޳o![,2xr\)Oy1 77^vW:StuGm1lx]n/ue1F9OqwQ&\򙶩@~%eJm}M9$Y%2§/]s8O1\vxu_|۾Pֺw XAnI*a)jMCsW`Aemy;hZ(k:HQJ'%ֺ3⋫ʉ\3̎۝%/^ztsrlFiߟcx%Xga JܲQh a mz9G3Xt;}IeϵOOƪMBIIz&[_qG8XuD6kX:Yk' .pX~d)+nW>XK:tXt修G*GO[K=<L'JZ]R%*Wg4٭-[#Zdždge 157ERS~v<\iO-AKqOOyB[bFN?kuKN 'ݟy$WHvH2ɏ]V wu3RnN{-+1oUaD ;J[v7 FK,a|emdjpwM8v5ZWgX|Dmnt79Y?p` ijy_W7nˑ f^FIdrN++]t<,DT-{G& $q{Y紴#A$D#m>%Kr!G=k)F~NK^?\Y2A(ܭv+[9o#ƈIcvZ{G"7 ;Lj 7˲Mt#2tRsλ F;+HHKJ.*]٭Q4iU9m8^.4f5bDPY~U4}? -bZ Z*7Ѷ_z[[>Qcc5ZoUW“ݽ3\«k;~Yti^FByl{ۭn`azWG%[%g |Tl\zQ^-G<q㠯mr1OzڱKy@ۑАW5aÔqܭ{[5jp9ԩMkBuNv>> iWROMwqoTy=V h .| ~ϋ#t8c ?lit+>džמ<熔>QmmX~ֹƮ$AGB?.:U,#j F{xk[,`&̴_bi{)SW3.[xTgLIֺk2>ЪTefGֲ~Ŭuw"[?}iTk(ZO Fg4e0\'7:Væ,+d4cw`p vhVQowܕ g")$Wyrzׯfym(=)eyX4]LHDsc-bPznWWɘS.>U,澞:.deK1V<<1Un31֧CcR1dEDYg;銚*`IZ r/دmģ*eГ;=iQ|߱- zZ1&9 i;I&B擦Hg.kYHW^Zʮs׽lGTx#7$؇=AAdqbjӚ[Z<'*[XأyǭfH k)okdm@~_G(X2?>_[V%}[fI$`+,(tT>j5|ˀ3Vƍj\/¿MkR%Mhz7RuIQH'SӚnh_o26978+: JK_>}ҭ'R3 UO^w6Qmkos)̀F{q\{s[=[?j_xr7!iu'ҫ 6mIvSs}.QFppU:>e<ƪTv^[?snIZkfi<03)/̷WVp/]Dl37I+{(סRRZYoRH1a,pZ,33%bkvr vͮ l!Hxs^S.ee`˻W;;oMF5 kﱸzpΝ)YQO ̩K1z=>Qҭnb+fa(\c./Fm#n%'_s_!ե%&Y$$u:f-d-$nsֿ9TRgcW',^SgO+Zo2_1Tϵy.!}= 71H~\U-71UVֿ#O jX%nLBR:XJQKJ\~IMbg;_.L*X|yȌxgwjs[ s_zNeu̒m +VY͸rё9c7|uq::;`w^>\]Ҕt{#VHc920!|Nծ,X۴qz{W4K2m $#5yE%S~>5T̈́یuNva?fdr`.@㎢IX߆ 7kG$0Fی,RIAO=k\6iӍc+ʮ"nM޻'l ue88|f%s4rc5OzqC 1Kۏ\F̅9 Ϸ;b'ChcĿr&E -ZG[FZ&ֽUrX[<[I3;@=9%0XF=+^Q?q43f07EevYd _4}sV;Z5x'NkIUR98g'_;g\ *ϲ?F33xEɻ+}^*ner)crv܋tD^ >= `V7;6uy\010FURŝ3˱9mzJӦLi˲o?jZ6"I#clhpxN'Upxx9 O*>ہ3,ڶoK C%֜mQ}'V0rKe,2B7^hqlB7)=I=jXh@r~bHxEoSW db:bA֣bmz+[亲t#=+oKQ-ck 畂*O.l5' ?@98j>o~88>W`+(9rY,m Rҹֿtvy\ P!\yjC;Mv/X$%VrTNW2ۛMOL;hfC}stwʷ#[\BxUG̝Lӕ'Y߿%l(C$̲ZX<:V;!RPqW {{V$h{(Sz3RJ4APu+XPn u+]tb_eQ#|*/*۟f<<5Ǫch< 7wpj ;-};bvƝJqc_iʔjRߪ~xV&x|Vs#Ě-Ie 2s'̓?6'OXu{ҦMv\3ePk=rbH$<r4>Yu:jTc lv9R8vIT_c_Lju>R+:`Z֍.aq'ѶU־ Mj|n2ѫ_cIRmC-4js׽|,*'}Uj^m"a7.:zׇIJC I>'JnIM<V 1WDmP55S<GZDFI5/:ݟej4-QH">dj0ӧ!9`\m8t˟ˁUXvY2{q^Tjr3j3]O-ku;#;VUv,{TvșVC9o6/.sC~'ko(nqWNxX Yi =J~̤y5h(dJ&FH#8fMnnǂC}j(,qj^5(G ck-^kɵq&Vb@F:fP2'_ck"keFџj8=s)3g%Cٺi?4T,m ƶ ު!-JW9c[^ɥx 0<9$_5̑S5N ke#|-:9O֓烳w>iFίoͦ]DḎ^gmd"iSq_xx] #u$p 6l_,rI O>z8pTsF=m-M3a|c ˒[˛[$8"!mвGNΦvooP W2[H>u;ZTmGOJin 6lO42+B@|3j/FI&.W K{c"3#Ċ6Vo fd='N>evzt>Z젔ȄxbGfzw4Լ= sV9UfVpѺP>SҸ &r ɫՁ# 9> ԾGm\"q\K[Rm~zƞcB?tWD' +aۚ.7Wڷ"17Lu[(^Wgx". I@C9T>lU"olE6$2^YmwsgOm e 4'/&5z|}•qZV/rx [Vm}ݺܭi֖q*¡(8cW_};qxwJt"d@G 0(Ϋfy\eOJd.\3pH{O\^;,x&JT(ld澶:T6:LZy+P +acMo/lb*oJQWKO<U_:j7 h08xv΂$.7fxxmà[UJ _#iNtdC~MEEKVw(q c2ϨOOD$Əf 7Q59;= F+IjǾWÜ+AwvH$2}sֺ>Hvx;xu.bgĶ5a3Z2,=ϒ8yyC8jVD,y sj >՟q9l#q]3 JҍsN)of-q)YOzw3ysR^ 5GȤޗ/$z暴uGnSS!©'*]'P|JV2]X_Hh˥b $VLPUU|徵È&;M޽|-6DX8(PGӽw^+svɸ'-sE-h 趖6pF"x׊LkpG5HAڷ=|n Xh|߯g2DlSPAC 2 {Fd2)m8s^KujF2_P3æ-O#Ȟ( hچm>UTk"i./$ynֺb%(k~vG%dr3sYsEK;M]sk.4mPt20= yXxusG^v}ƴwZ3}S'FwܮjކUt)ۓX3%~7 uY${XfI6 f>@>f7W 2c$385խOq]yUfVVh=kypr8⵵KHcxwXrE,R@ W"fQxԯ]9ZV28 짐x$a#"Ozmn혬R2=+Յ)YbFW~.6ixYNx|u'{w~8æ +I<=4$I0$_pT iiB^FQ2qڸٗ0mw$qaQ-4,7,]c{Y>3ؼ10̲^OLWTĚ֫jJNml4$U!BIZ/u-%Ӽtwg~=]GS8+rm<_X86YeϦ+׬ OG!HZV۠Yl 6UzgFNl/\vD8 QYI#{X! JMݯeDy.>;Wh7r: C"[>A]JJ3"6^+h&Q;LvӠܧ#8"a ErעqGqzQGZKUQOO#HlDA}k݃ F0v +SOP{w<Œ[I'evݶեu#hrp}+jp}ea4ӓz׆~d',kq,SI2z^m[xi퐱V@SzPDY^}zvj)J/ըjKu3/¹[rk+c\>fIavכEex%0-fexۂvVǘcф3* cw+ + y WB% Ùܬz$:;9.cpsc8{ēe3Ўk~ݦAцFFbԧٵchtI]BQmwR[}>Od7Rcː6AJIqЏZ+-b3-'nJ4R52p&=Wk8_ZXLFk[EQ(MQZYSFyċ,M5_nRqڭ}v10,$- i՚sӁtb sw]$ ܜcֺgjdڹKr+TWLcY"/#u?״172Jp'aZ%fsLɅX õyx5*L8el5G =4Szsl =8^7p& Ӯ>E:B! +ԧ[Q)l̟H"67mR;Vz٤Us+_-W-ǝna\'aqR J݀>4D"dqxm0]ھ7/,E&bܻ|Λ?-ByבOr7joJEܛKPHO|G s2:TKUNKү# XagzψU4Ŋ7e-! ҽc^`Ci;!B^'jRr5*f=<BT^gHew ϻ+#*zv?p6Q/$tսiQ>A gUm=Y\+FRkDzXjg=p1VP3ya z5i BK[ko/_^%zdaUѼ0pk,SצY^A_־ n@w2N+\0"&*y~Q.nW5V,L֒H-+ VT ǣ09N( ָE،onxX{M5.6ϙ"}wGխE-xjXŜdq[~"4ffXc_ܯɇiz~/i&ex܂ayXm:Tnˬّ@~WKuHZvnV BTB%K?ҕ~ϧlTs} }nUqeuk7Vw_qo$v"o2$nmdQ235y6bGv09˧r[_a)BOt\f&j6)s^vɘ7vmN}x4ⱷ PY# YfF#]MI"¨I^nʲv~/sy{>YVڻ8oMn4xm Sb3Mq(./cޯ$}=Ρ4o`\ `dYe,% ҽL´i_ JSk^P<ؾ:Go#'qWӶ/r]s޺coI{7No(7+1 Mp:S,R38JF3kqU^-BUԭNۤd~/QW3^<>V N M]u}>CR:f< w;xkzKDHe"e>]ʖvVRx\֔f%8dU)SktͤUH .#VQn75n#n%|r+[#ĮhA,FXX卪zWG\iey\3[\]mP3۷AJ<Ӧ珌};t:Q@8#,(ZN9M2"fnJY($zg&s3EGG_λ'vi#;q jq٪x,l7.xԯZ IzdqrFB'-Qڎ8qoJ6y`d\˪+\5qpQl*帧+I[{??G8-,¥}yRV*K梵8V^K~,wNTcvGj^2Strv>[v[?hN0kנR%tzZu2L 5BOˊ WCyYO{+X;̧>V'<.=H%8Pݮ0HᎇޥwƜ)uJRz<)K1ѩ)TZr0cߡRt퓟E?+ml;NHDMU9FX '"VT-0{&< rz|uCU#PIo"D赭sߢw*^V*\9~jƬ MjkMmsvi?-,}+6X=c%@Ms^;e9̌ĸ|6QV{ KMZ`ܳ Z&Y. 7v=tCʯFzklK GPk=r(zu6yIItm'F_Zb̳ y\aU"y goicoBgiujEÈn2#=xq1K=V#'c־xHH @ ӼK{k X; syIt=<SR^e}JR$%TL@[5Ry*w)$m9֫BVf:k]')v;k+YQXXw{|CCT1ܲTX[҄B6yc_9i#-?UJzn{KFcө#^w=^3n1Y4CfC7jVyK)E %=RŨ| =Hpf  |#5;x?cÂ"/w&+{ Ѩ1o[<<>`ܧzMFY$dm=E!a^ԛP9 *n.1vД֑N>h 5*C&gq",$r ok<6<+ymn&Ϩ8_gZ=4?<5xyfUb|]·PД*0tҹx~~|T'] Ռ ʫT_]I.kc(N1J/aB;UZfG.B*i|$v=sK H ʶ9fY;^]g=+`/Z]+ŴcgB'm]v ;K֩ܤB!WBDžQ޼<C8 {\3*kWi~:_jzl\sAF#YiJİ=sxi JKH?נ"k +jhiuw#ٙeq>؅;+\tiVI¡XE0czԼWg %.u,=++Ce89ry_UXMJkgr֫@,*9nHo]FmW Jӊuy"](IUWs\ݦZi *ƘTv'T]<!kG5@B+5387Ajz5(Ӟx8^)ͯFݍ+yJN$ ֥-j?x52)k~-,Jk|i矑dͳJ(;:J] gGcCshFq@z`ӬHe߀qg dDDT``2Gׅ] |,mķ\`r:4جeer?Z Fd,~CeB>>(ٖ.TpW?2ŘglZTvrI9m_O^B+յ7IIj$[-lmk&Huxaۊpxĸ<4# %][s7@Ah^k4oc*槵!;Kol βJ;fP)'*7FWɌ,OJ֞4t gA( N}KdBw# קW:{ / qfKHH߻Xl#ۓ ޴<0 ]JKc͝ 8h_yobsϭd]7!hglfghc̻A<;Jtaɕn<ݢ a3Y\+2u0RF U0qMZCj ȼ0ZJڝ95+GٙFwr: dQUf2YbTt@$/kW.qʛ'tf=,z5{+;ᇖ~FOOjXե.gŻ݂:K;C2[< {bpRURpXDYޭq퉸 #[߻ֽ/³IWF1ْP) 9v%WF;8+xXǖw'ŻtQ,yyyTxtOj*6Xbsնo{<1 z^k]RjQ"#Iy?ue2XSnV{٦. Im<+Py5UR2<33uU]46, +g|{JJ).1XU:[{wshV1旓$$/,J_p,c]>%Wt3fuKnWz'^8%ׄ3VYW1@ bfhWk[\M5DJGJ,q,Tǩ.b;6 9 >.B A~~gAׂXDkuuz|u& q<7C,pF0P?-.w f̿(#$WOj.%IBeB990,oO^ E#ԯs=vNm;Myhw; 8ޝF_-K J<^`jmu3}ԓvpɺmo]s^"FU76srMbOu*#$t7&$iG#8= z~O $+/ۘ,owul|sG_˪ »3H+7931yYUFPA<" f&VR1۽hVGkƧcGb[Co>ÑQ[qR ƣ1[o5B)ڄd872PIԩ( yt9CWP'(>|{g>P1iHd&@iZ4b85cCt 09y>KC)jXVrK_Cm6BwFDz/6)qS]KVP.dFI8QmC6q4+up]ıq_QXl$"ψXVm~$g!l?^\༞ZCؽQL6Ҳ̒\I(ۺ(qZ_[eͶKbk gx a 5yV JĴGfiJKe}<=.IK˩/,$kִXc@;Jj7Q璁$ջx YЬ5Q_Y_VJnpQ}c+vÜ$x,[x^#,eXck؂zǵ}H?1I*3XOqk+A$#}L͞P1N+ڴ;[[Rgj&ʴ}>[aIWyͳn( Nw?Au J\վ{f kO{oͶ:1B&G -ͦŶ5,r~~5±KC'=sҖ#)svLۆ9wңMJKF^V>^i.QJ, 97~a A[]C:y6ד^8VE IrWݬ>0ob]Kխ-s]}'Fy !~H1kͼ2ͭhRO pC?J"M.j@t(;w-x1*y8o݋Zw~]|G쑾BF[Gs_$jQڨ-ǽ}~nQO|/FʿuY#bbNGtPH8s˅^EuI3t,8ϭmKNIx-z(9[oﰚy- c!R+!Ƿ5Y\G3lS1ҟV!̻sH;2iTUw,d#*v>[*;$qֻK<9 g5Ϫ"|n9X͸zUs|Vlϵ&Ipq\Ǐ1KgDD.=\I- B2cvjk.dc5Ai@+R&~wt8O3*Q2+d>WHmrFGzTʱG&rWr+tW8_vk4dE(##n ڟb%V=.xnBW=*K W0;1?)\7ֽJŒH$N8ǽpc+X*5*{WsiHs|W]-bkNqۊ<1h!yRd8y^3q/x-|KJ6N+Z]"^RWgeV>'~}}8&?f9s[eTpкdq-ih+g\Пgws{+Ĺ*cFPyag,wfV^l>i%g8*h\hqs-Z&dVj*g+Rux,O3f+9'Wˠ402+U/ʞl*ϵ'ƽTFaQ(~ۍIr~ C 9k{YY+:" .C"s*gYmn\TRx9\n\~vϭxx7g*fyPt!~NnQEV&R6ISŷ: *Oi:Ə]A ""2I޽;Y׬o49UkVURI͟啫qYQcJWgE=s a1%ܓOs5994}znvN)h#I m2(9]ŌK,yTOOθ; ze+#)ӝ7w5.mt{>t~]t4rd8}jURQ~ɞ]s՟:#F@]MJjUpjUU%ylά/4iUBv7vy̱b܎wKZj۶q9U{uj* wayo Z6KY$tAPڼ?wP IO-H2m׭{2ȋ$`F*I85~9^8g)q ,Fׁ:U}]/d-O Xjxu-#MXb~nR8)@Ao C]oP率oe9;ybUTf,B~?^}6rڔe-"2>a۩5z0IKmˑgj8u;R5\kOUT6uB> {tޒ~}c>szv 8 χg6Ĺ@N{2^~!G.Azcdv=b#(jѩF)+L.|Y%r{Mk}RYBHkF6|1|?x& O\ҭ RP3ρom^IR:dun[Z%Epsb/2'FCgYuZ"GSOZ|j`)B'&x=l8EF'Md'a$sqZcK-1&8c?}*6z$q9}Fc]#>E*}sۚgƚVW=xqp*כ+m7~o![]H8n=? \#k,>,\UM#~FN1D,,J^X&3"dx֪-RA}+1Qp pk}$x䟩Dh2 VV(t_nZ "0 :FqihȦI*z֙`sJa( kU6]&Ż ҾWL '"]ʙl};B}t(Y8~xW.OcxMӸ|xtI_K?lHhd_V S$IIXp$zŻQ9b5Y{3 ўno/,A\g_ yX2GLH)p#WԾ-t.$JL:Kg.KYT/!oG_ZZ@BAھ6 C!־W~jbw9y2KU}WxjUZ*حms=sbFm>8mm^y$L*rIn,'DRÏQ_CQ+0S^́Oe¶S$桝C}#VU aA#*𻱓}kjZecтpz^~&i=^y`pr|b -cU6=V"88 V%Ō\DcE8=JtcA4f AzבNN8VYM(ݣo"KG_Bz|%!'`!56$Uͷ5F`Z[HYn\ᇡ_VYh2,\9.i5o^vtn\M.Sk|EFI0RG߷jĀM|N>\t3EmCOL ^w bi!k¶,]%P~<[uyM[,>_;KgtTѤqp[YǞѴW{ *5JIwvW~z~[@m%JżRR]N-Rwsu~"H9s] (]NIԕn͍{r63=:j Xgx7D9H# =gJ,m+sv3 8o>.yγ(ihR&O=ꏋnHvƟ1^^ X JjV+]I'&C} 9+0l $DiYCt/Ҵ*AҤwu! ;;Iae엽k#3p^vn[~6d{è"qZ% 1'WuOSCyY~bV2+ X<;^+RGG "ؚ}GǒDo|\ 2.gk> k•ej', }ෞ,ChCU^޼^CЖoc:nĘV1BHy+g7;O~1Wm4@ZȼKM<)'#p8ӚrW<~'cp*8K1Xc֭ۤ-GC֪I 7%[p9ZFvprqW8nX?eUMݾUenUKAXiC;d HSMo]fhgS?tdKq8rJRsT'onlyEF<Gc5Jdp8w63WOA$z*{"vӵhupbbTH" mӱf|U&:Y Ctڌzwc̶ds 'wE$fFm"`s^ ~N3UJ:J,F(R?zEktiд;kp#B1bq]KZˢnb^(Fqa)U=2 k[tv\\jo-`0q§udw0im3V$h޸DĒ1#ֺ[0rA}cF#ƈM,F^#-[8Ȫd r9p^k2խ6UIv C],4gV).獝`8ʓ9z:o[ծ仸U $q[nn`Uw`\sf`2}<&WiW|zHh8kBTYRI`eg|*=+y'ͭƙm<, +̼S`uO'Į:޲dRd?!#gsH J<ʳj2?{4@#23oz| V0,JpCӭLVtE+YYW+ahM?G8Wcm864J8~uj=x5y1Btx+kԕZR}&J߉&K;~FڛQGٙaአ˳<327 OlS&P1WIf,dA^\w'K6,>RMPjD9BSqU[jo:\[(*8ҽ:pA"M$DA,N6R߹{=YC㮖WLWWєtwN?g_v6jwkY+/M{5ynotU'f;kƽ^{,<-{}XjH4eG_Hv["ڳyenZХʊFzl\E:Q9{ ͩ%pxbzWGo:.s }*M>5o53]V%y!~tb9+w91Xܓ\ߥxU&%`i5quؒLy0Fxx#k,r =kڲA 6HnIŻgU5k.\NQ8ysYqi |aT2|;q3 5 Q$Us%}gg^lO 0%F^9#z)}y&׈h¢$e!r+5<+ГB2#jت3ԣ:kә}[iӰ'cjD(r̭ ȂHn7ZӲ%m+ cB1ldγU뺔BY~ 긥x{ӧjN֝ 0F:WM^ȚlmsБxĺVE'?zc P#0DmMy8[JR>Ę(U%ipj i2i T`t=ky/ gw<>%#apx5 Uď_J8q٣ s6.:K?4zԚmciS뚥*#>!ݰ֘F;c ]ͥjH(qbR?Z甔U/Ǡ=-e ` ]7Va7}kKMg*z]Tq3fyخc,A4xޯ;GE;C ~5nq$Jeblksኀ2mjp!ĒGS_oS.J˞*%N-٥M%Ġ@34kF֦|nWVW̗t֟h U{&P)FnNm*@O?JбIYY$usW*%S/8 1Noki{=Dȥ ߹kt՝dG<+m$:2O>CGm,gC*\ *IyQሬH,o5Gv;R1~jtZr*+*tu{k24 ;$<7gu- 0OAUt#OV^`c#\WD)W5ZkP^}oD ?M\Ob'O: q k< 1ȮHe= M7v71.QH>Z3G'R*6zIq҄ARJkmk:Yio:K[+׷߂0"9\zL9MV#|KχIzbFOmsx'O#Af?N+VP~^%vn^ + j1vr&㜒3º?|τ=H! m]9rh?@~d 1:4l[$gS _+}JJP5CS:J-4Cӯ(qO[ .,ylsڬy34)ӚSm}Mg Փ#2dm`?1mwj| 'Zڱ Po$xP ӊIkNqwӇ0ؘϑ>HӑSYZ,6k$!,WVNt~\1\ֳ7> io&&9WN[G_Ju_r)>D`;-Rb5'5()sZ^*#&ז19*Ŗ}mF-J? S ?scCFw~m.mu<_k,p9ڼP@<4}Wk3+#x߉}#;~*${q~3|7n[i5V96+1ˍ@:R<ѱ2x6ULL.#?h#w#SZ/Gj7=_GYsD -4:_p|ץ}-"1$)Rs)WGދ=fkwvfJq'v|[$8+x3Ly.nEWωn~ '?x^W,6kVQZ<p^M+FM[Wzm/!?Z`2Y9A$@$X5 |fp`4 0ǥ}dʖXnJ+%k-[oM\[*&eNwqֻۭ/R[er7+x+oakR_%(cl{ջ]ȏK#2lu@M^چTT;h4]\mV,Y;OzYB:_;)QTGp*`m]p~#~T]3W0MFp",/_,Oťm 󏩮RswtmfN:kL&cUHEwח`o_ZR/qq{;9%?7$׈X}ԒmqX^kwEԮtYoє׏z:4Z>Cn*gck=ֶ}Swu$Z41FODCxpGOZIVB_sNG&O05 ]u<6C}Ke-#053KjeIGnr1_NjJd6to$[PNpIWK5{Y-u09&V5[[%29s13e{/]JI^^`d>ۜfFo0$p}aV88*u]_;Өxohd[''^Z[DX9K9GbxZص Ń<(NWݟU9L?2? =[otUV\߭QB F{c9tu$ךPnI|IPH.WtH!EȲYUIݺBNɌ`5QQ?tq޿BȲl#cos9;'uM_s"݌m qNFG=\V d|_S\ЍkqcStUK[rMˁ dj{$H]X p;ԲZmӣ٧*{d;ZC= v6[#B ;_ƺ? q^gοeh,dO]*:l! pk3>2cKs,|˒Z>^V:J?G{j$+9T<;,jϷCG3 ݜF%Xgp ƝG%ҕ<$#9s;/dԓ΢HBzj(޴i5m&U!N #4j>E{UIwn!<2pfYYFd 4Hv!Gpvl>$mjs7o֓k MY٘cBf#-6F@3֮hjf;wqo ^" r#^׺`}LS9R9zeR|t2/N+ ƩhZժ^ʒ8>֍s42*^i?[bG|ߖ5jIťs+JJש&\H"UU$N=)6^j)p8FF s"G 3H뽸m$O, = acN}־&{?_'Ú\T+ K }k~xyzvK;m?g|Uh Iwc-?Jık-Ipg z{VX%bP^8k}wRnc I>`WfΜKGo[G ch't#Td(&~pZf@>QFlkӮO]`6  zf4lw a:t0vgurn?:f81R}wQKksV9,oE]IpU5}gbQIO{ψ.fQu<%%>a!9_5xvY%aۏJRNR=˰KAN} үI$bdлL*7mzi"PhBmqkJZk+L+4m:tsN \'*1w}WM %ŴMᛁkH/ʺ(89#k=v4Ft=ǥ}I$$!)l0q;=ڽ4K[2r8o8s]V-乊()o;h_sKuc@ Wa :qj薯q5Vo&I(E5o'a?k#dyyJovEma`z?tHt,<"C`eǿ"4% 'n}zUU:^S;cNM^o|u*zŖv Gj` PƯp$pqV&c9V-<˾i ڴ-=4%P_^nXEO8YK>:O(߭ߩxm]+ǂKry}խ[(ycIchkȎrz8SF2eqyhU-6y/ռo0bԟDC6]U]+"2™pr1םcY| >vzDC4$|H\TZ){Eqz~5"TcZb4O|kXhQɨr҂3ϵ5ƷY e 5N_Ղgwcr<…Hάyc7uhzu/Zj1$V$p|u]`i%Y$?xd9bhmH_0 2O}kԊ4`qbf0R^|gQjOmB<\dl5 x1VzKeSۼuwMWǰ\ά `>{oksO4$Sy>} l*Ixc, ɻ{6ylݧn5tTK1#pu##ҩܼ7 ozxԑ^LIFicڷlSWH>pX,~js e<=W2.gxCս,7unẙ?/Zv7O-pc㯽hjZ<]"*^Y|LQW8ZwIk'o?vD7z\wd23}k#'`n n}Ɵ<#x7(fOym"ˍ1}fw)+J/HEhoT\oxGsuHV[y P2_a!~ꧨZΫ;;2y:AP1gn3qF*:ߠd/c>a2w<־DR%pOn9 nw|{(䎾># &u]J*'S ?A[ko=/cF.&oz36XfxBͅpۀq54A|9=+UUZFwV]c<3%?"ݵ/!sgһ]6)[IL/Ps^9++(sNkᳮJ+G> Y8ke#xKUFI' yx! :׬y)bKVY#28;MyvfGgPRrws^OYs<{BaQiEemWw2^Ekp]I}Q%hWhcɭyGʹ\țF\ƺ3nz;Zڲp.iV260vYHI?vb89}{sDBv󬕚=tv6t1v $fH51Gn&xpz5kc±\UN|۟d'*_gVTYSS栗Qp4v?U5g PÌ:ZIle#?ZauyN=NJ3KXS.VMr:TS3(+#( ODklfVSB t`?|T#+#x)n1m]je6sִ+#1`U+ fU$؉֯LIHe}7̒¾L,Sx@׿5x.ey"%\1淵Q%:\G0w6rZvE2* _ᢣK#ONt8ԛ}|kyqdduۜ ֭4 9WӭsH@;h{V,swEݍǓ+3nx#zqsgfuaRI2{Pdr(:cZ,Xn"lNT>;d[8I  b:xH^x<¶ b[-=}ἢrqq^:_A3 ?|.(mrwkO_}b@6 |UD4u(ԖG!VchӠ[,}&gD`duO;9WI24g0$ɝ);f\`a'6NK qcbć+nU<$  QI9;&~eq}iU8YإjZQ ܡ$r+٤C!nO㧿8VE_w3Ͷ8X$M#1v95Jm𵱕*ovίZmڳ_9<#&<KpJG8>M>ͦ'|6~+ uw1_է^Hpz[U[ v#.OC]k[m O)u[H{5—+ oiYhf յ=X-H:m#CS%MQ_yb[;hM>rKvw>ZT~5QEy+TPqO5x7Qтʻ\ {֏V;6I0 ^tS1p;7XIqhWV[K*!'wr \lUK ,\^ w`VskxMr~ UWMmKuּHjկ;q-ఈ0;u)]a`vMsl⛔_~fG_zѳKT)oaz ʕ;ZESig{y(k'VK|dƪ3!M흣j_X2JQ?xTNP& NGO\עx2/aGg̣)ad~q ]OI/ϮH4hʟ*m'q^_*x|H;^먧$E6hO$o9c5S2kܱd8YdtQZp[^[Tw_3F? kV&dr.o$o%on%[[m A 5_Ce;mق ~MQkI6+NT^V8ON ׊۸r}azW{bp9.RS=1@yW=SQ[\1Rͭ=j03tݒ.bK{&M7CMchGD|@/zWqxeVW 'jyaC$x~63ueݭ[GqW 1̢{jv*}##%6$^w$Gj+HD>һk p-4FDK<ֹfhȻ|f$ҿZXhsscr- }IwZwwSsa ɷ=B:( n8n}bYD&hʀy{fhH0~ny'G&h֌gȧ^z#΅ϙc?ýwc,N{O1xyf썡לhV}ȑʀ5'gdtq'MF[[+tks[dWH_;^~/ف%D]'qjM?3!8Nyfy, `r>oQ]ڼR m7˶z}Io")m/HJn;k@=zO&;(Y"Gּ冨3¼}/- L8f) pM{5O x8*7Xu>I"@eq=y r(Cn'WWURMC>td>aN*8ƖFRHA9Fp}v#컹sֹqRW[Y% by=y,ы~<1O2ژ=/y|ק+@Qzx&f@x_zy27*ҏ9szg޻U]3m5k,Br991$9^k*s9h;r{sfe%ڮu}JT̑bx n1_nT$cYWOn!GQ"D\p C`dgߎ L/Uܩ?5eº-G\{{ؗdܬce2;9 "z}sZ%V #*9V}*{xy{=qKBQ>ym~c Y4x%a*Wk$H20>qZ+»Q 2]aVg7')FӳW/AKu=Ua%ٸ4˴dA& 8֌Ҙ4tj9#NAHZG޹̍WG]:$sxk'XE7zyW y5T]ܵs ksr+\NB^VSJsh}oaVgHk G'1nOz55>ŭ4s,?޼s ]i8r3߭71(@>_cx6'㲬RjMGÚVѯW>_Zc[4IalOK٥{r呸'5]5ṟ\Wc'xft{y)]}:Dcw̎q5[\x;At.r >o5v3Ħ-67Ҿ/.[wG9 C,)N|>;k~tHM;]{`מC+0ā#;^9|)ՔcWڼu˓'5UVZsWjqח]N 2:#ɒfFx[VEHIWC =k9nP(HSޯZHEfHf87kߧ9tվ_|>h|FѤ8kӼqk4ʳO~#~ٕ- A}_@3#xӝƝKhr\1y z2n |k>kOq#Ap3^A`c(W,ַ,˝$F$A㞾18iA"  ԝwI} ;2TtUTWJ>+Ǽ%U/-RbAd^>S<׳\[{H9sLYO_ /yi-ftԩ>c)i:;>c+)%@n}s+V SBԄ=G||'Y8\qӀ{du'pі y]B8!iHHG?iNrp̯qUL l*{u=A8'){ߥ^[K#6m[`g޻-j-CH{yJN z8oCfs+>9sUv7w lX}d md?.R kTϐ)W٭:f7*Ml(:.3'̃ 1LK9'KOʬgI@>vVѮI'yü|p=q]W[͛H%;fL I -Wz[@$۟0ԃۊ* Xd~gR.R7M52RHux%`oí"7*>d~~¼ʳ|qN=#IG;ݟ|!R<\htnq\Z"9'^e69 NQW^ Ub~5Ťb{ɫ' BqԾhTqjAp0㚃SHES$;JyIi"@I;cڦmT}?ڌ o?ֵtJrA?+&Vn<jXo @ɶyI {^Qyь(==zeّ:ظ[Twt"FycqeǷ5&?l.GYG! sK~3o9 ;sY+iXppˀOC2HNWlx(XC];o;y =k\^4#@r u tWh[BS1횩ftl mGLc#s{ׯHP.c{y3 M'~3FU"k>U‚ Nݮ!$! wwVn՟UCnd(1žzvZyo"ݾc= !2gg6kcmϹpr8d՚I7z%u- FFvaz{rW }1nLW.wǃ^+J2m#4)Y-s&໴t>Wi|2*9,pp]gbi"1-o>i e\AO"9Ow}M} ֖F<:cɧ4ފ%(=yW=hǻ>άO{ 6g5Df?1w 4&p:W Wys#&#?u5=~GqyYo 4M_<Ă%򬒡:澫0>4q  ?/ּ c㉥r (9kg*jʍEfC|/`+ӕKշ,H伊eLA:89@?:ͷh rC _~іI ÔQ3޾rM47|i][6(pWs\n\BE$^3:˹ u_~YWd00kϱ93<;LNy-ۡNk>#Hsu';Չu=ϵo#fq*v$lpś?;(95n`)8k{.kȤL>ULp+)7>LW1a{~ƒDbxeۃ-,vf1u8R:μ&qG%oeKhGs ^g54E+B8l6IryOx6< 6yVf,#`?\~9JϪnZlo䄛ɁY(=rk4/vwQ<3;׉C!iF2_; ]#(' 皺}LDpX ;o0,vc`? WGg fUrMIuW_ku )<܍۩j˴[nTӫdR2Gk I@d}|IJt9%etV6jxsY?/̦8YDnrTOST֐)@s@1N\K ]r9TmKZMʻIyOn\* 8fIT/ o!FrWdX|0*ų]:-$,>v@++Aqetfj˹PK'g6gWOSphotos/cg-bottle.jpgUT MF\FUx\\- 6&KA;wwwww$!h5{ !ߟ3w޼|N]UklHHK``?;3 [TZ¦3TRQ6(@>:()v;wl`o_$fRN/~Itvv뀯g|Ÿɿ_bS+cW]T^q~,boE@:~łf殦kfjjcXf{{tә:}˿|$ee621?eW*̻ W v`E?h^~A #v,N8<;~#aQq ;yE./M}C)h)2_\<`f]xvCDnST~K,a[qII)'9yExjU5u_F&Mf;{Vxv]'gN.n7w^}|B`Ba?Å#|A 9;j$Z:#3+Mv 1(9$=,=:}TvLn\as"zRiJyZeg&nVuNm^}BҢֲU5u_$6 7ȷr&ۦ;fԻ{V%G6Ƕ'vLgN5W.׮7nwy[|^^yJXLsRxD?$Kd51ԏh@L|, 6[:\nyuG($j<.נoA߿EE}F$ƥ%$B +RRK*[3Z3FLeon\_VUUWlܪ]jllhlNok jobpT&3TTVjϏ)UU!Z[_:;E^ugqxWzUrrc1U3Ugf55 %e4=цq ɖ)(ږ1_T*<Ց?* _%6!--y_-y ZkGM˙*-aX* ߫v/:"/H8ń«~(M+1k,h.,XY _gmc+rlo/"Z69D ᯘzG05, V ##z 0DW@  F ff V6 N. ^A!  Q1q I  3 /#J'*jj#&Z0:.>8F(&1f77oa_z  XB@MIp>P1 I 92yE%U,:{-R:1bzQlMO/Lz?氅}`|ĵ˝ă[ŗ͟ U0PSYNZꓕgh4bF!U $U5nuU 'MVΕP_0ƨxLۢhda(&EPz&>Æ7|}9b* 1 MUMˬA_\Y]TI\WT~Ѹ SǭlPf$bi|jcipqpfmWĦvٮ>ٻkû?5ZwXAa1t\2¦aEc+CW~#!F#.!Q## !7T£֢u;a0`DacaVba`9bͿ~큽#Sm\W<wv.o>0߿/!!' : "! 'U&=$ '!pħl2Fq%F/Jc`c`A匵-'GιWzfZi |$;t$+q%y$u#++/Ϫ l⭚V>AWAY?Špń,ռ܊&vΞA1i߅mȃk؇w8' kb{Zx< •jI!8;08Դ\R:&6.>!رS3IV7oC vDOߟ[\f^;<ֿ/r?zxWe|Ly?,fn׿yu9@po>+e󿹬/&,_8? 7??k-7gېlDp7?͋ppKXܵD%4_6W-/.{2v_No}y vnwg^m{(}DwtqZp~ny!upvuz=y6N{ڇ'S3绗? UхLNMr3ƛMpPy}͕& 818)m |:>Vj(9)k߽b'sqWQTQsHsfƟd_1ѫH"X)>,@  v 008oo+Zbf/jZn Z`l C\k,<y5XJYX^kG4z&yg` //gwdqseX3?k` }v4w}sfO>,bmiF&dgN&hfH&`Hޟa Ր_ * :*22:櫡vO׶((O'f6  @z` :' uo0pppC*V-86R Oe꜊%>=5 -=GN.n^OR2jZ:fV6n^>¿|ILJNI/(,*.Y[W?084<=3;7?8}/h?/W`6<9+"2[ `d\.Jvs<)wT7/g9guZаpد}w0uUĦTme97iRhj Ͻz@RT][&M@k>jک5.(ADJx)"bFD()׷ wIK&qLUTs=r 4j`kZإZ+',W14/iH-Wߜ]Y^݆{ F/f>a`UrV͢%/0"UCJGT T Ql4iڟ$︅-qCU2Ш]J*ܥ~W)m'şMxR8_wW3<%n"nZ|*"UQyuݴ{=/fzMw0R=0h!ٯ7 J<կL0S [^ }vTX'}lIfve'fEwv>ݟ mhd'#Eef~i j%1M92TE6W+hupC9VK4G;X 4HoSq6'{y0_FRbE& wݨ?waȣJw l;CٳѸ H^5E ]`׹DTH# K@5 +0*AH}i8zA[[ՔurV=2+,A!Ȼ`"X1aܖ7JIY(Ct& y-'j){Du-$G ` A(W[ZE,E2Ƭqے<\6>V>a:Uizg-G$"Ob|bnM~htp"# :>L}K<`@}c/ܝϠnzz4{CRAl niOb #aΦDܻ)MOl'i/wgF@NH1/ӆW=\ʔ2je)6%bv@x\! I!oAZ{yX:nFKTs~yug i bV*=kA;8յ%@얢hۓVoߝy%VF>CuiFHV_.+^js}꿜,MFmèyD1IegMrXwH=ZEL`(49LHh,:HG5F|ު_$ 9L*FJn:ch7?Ewj}^9P"mOdls\9U#ĩ ~P@~Z4l:iCw *9 ~4mf %e;]POkQܝq2SiF AFcI\K**R-q'UGh->84R{)^._@ T'u啧i`Qw랍$<e{ %-K[N@z<ۃ ?Nx_{lp U?{t"q|p5*oLZBH G%/5Jڸ_^ԟY'cg#˝|vf*g! t4\H^Bi h0l4 hlfD8pvJo,%,M|vW FUٟh7.O+2$d:^"fಘW)tc?GzEsߍ/,*9m;0k=>/3h~/֔__dkv ڌaz>k1 l@h`*17w=gY#yӺkyeLm]Qa++m{F؀|Ϙ=h3>MD QHuB*?y4fׂ/)՛}H o\I"(]xW3,IJ/2\MyW լ pQAHxdN:'.m:&3LӳǽrM0"~m ' 8oh$e6mF a7' tiFF'71]D\f7PsĞ ,syd] 黐͹+%F݈#N O9ej-v8ZcB]37KzX{xOL3Ȣ94Vc is"9q\c|Mp[oSweQf'(3[`'w tƃ_Y#!JaJ,2i CT{a0z?W'nhJ=Azf b<$ZUP1%wja H"Lfv6}nqhzDb` 8mἡP߮N 0\l]aa5[=fyQ8h{UV%C@G(~UK6!Barz`.Q@^RSsT&vgs8Cm15]nˎU$ BՐqfM{Anmu/Ltsθ|P.ZDg(Zߤ})\o\;$Pmnre\\)YWB\eJnW(p99&LCJ?}_2glh pSknk/ z~=I,1`AҬJZ(ajI!5ic hvĭ.sRt#A9x;c3ĦρI,&:2h䨈^BL/#6eS{S߶*K\y.Y졧6EoVdWۋQc$Թi oBDM #EC8BX!ewkVܚgwQ{q 2TUGEi0',ux媠 ]k.WE&ߖçfItg)PkCLKx( KN.`L/ٛ1ew?jZ492l":_.ٰ8ӥ(<}N1"]UX7v_[>hKۚN,٩),XuJ:d?R"9TmWQС[-LJ]*+E&4_Zzq00xjy)pq摒o$ӞDDwsɁ=uTtu?-LF4e84t ܻ.IΥd(/iÈKω$Å4N!57T'ԣ, y̨xܤvQޫw4mjyx<%,ky8S:MTP&G"e%Ňڿ9_5 p6<~/A8sɮ뱈2WyE7W25"3^C> Hc?4,UI!n 9t)[޳]L\H_Saz! +VS8Ig<6tV|8[;xEC4`"?%4GˈD>W@>DcS)-٥}~FGF'O?R9*S9ofm7/^IB7;M Aq#KQhήʁn^w<(:8TAQ3nkrHv~iym]*FUIEtXu|\hXcLNS|+0ᕓeWN ޴Of?dv$H'`$9c+S%ؿDB9sdH)jAXEBW7DAteL.Ԣ R5iTQ[IKN_ϩ5Xj.;Cy7R>X6MQ)€qLHJlMj=!V8 F6)LDGJzUXrӪac[v3aϺ@Vl<0<7LsUo&4T8s4){Y-:w ,ؑObԽVqfjN?,&JN-<"~2@5ٱ=54nVXԇzhxSW傢} U"?h4Ϊ}Z4y\gZ&/ q vi)Z;7"~7jA&鴚],=>kUcjl}G}1vDq U܌*r"s:=Xktրge[Z"qX}h;R'8͂ZOd!G5r+۝O; |p6( 6v`&{n 7q[4Sati \u2 2s6#MN}^|R\F٫ۛtH"ahR)۰m vӷS#D>2cg;~43YtZ$fL^_)_[$*e:K*sfXR[& sʹ@{U&ifm$Wq9تRC *8o?L`%?6;SUSaBRU^Tړ\A3jIEH@INU8S3ݎT K#C.}Q}e7<:~v !xٕRZl1!3.My+<8AEӵC/=X¤ `y`✐3o*xMEoT>▂$5];9@K#D;f]oN T/Pw(뢴s7B2!V_J/=\kNda[uGmЌKuupav>78xmQ~R7d6<h{y+OJ"l(/,ur^Gmj)"Jk/4`x:'~ g=z(r@>x}@7jEIȂ5q/ң2IF5gd֒he$ŀ|jI&a|wGym3ӺT FTTzR4svIf\P;kQOPg. nfB7h09:i۵Wy固k4ҁ'M6#J~:hY z*Jl iH,kBqXݍ{*%|{[A9- J"D\uݯ&\E*v7g͖fsM+7 `DۓDe4yuoꎍ^]I(G:|۰թi`D|z4`f-!pa䇤p.yp}nxCfE_7ib|̔r7t8i ·?ʰG-}~-g In[*V0C CIЃnC<,vlQļ_#cLrtYX='r6dp%^$s|ٵX j}7NET4f4-N9vHb:.EhŽ qpv4HWƅ{{+ ^b?]H_^ RV+MWIk{GAnJH[M('.}9đ[sȌ_ Ơ;7o {vSE´{a9]V0XP 9u7ݒTVBw)֝"C ׼PuiFp6eHU(5nKkl?Ly1upZJʨlSHKJKCwFq;*,'󧴬a(#Y4Z%u[],zOyv'u4,fF7U4g Y|PH(8+ wd$d1 dіsBeל6nК8E]FXE- ,SѺO eޅ^L}*拀^J5/E>ӼfLр^0 xL$bRwL&&.RrÄ 8[ÉyCLL>(6fԾ5x&uWBJ"3ȀDՅ?ri;7"SQ3Y;:2x$,N-Xiu"׸M9-uPhGG;\͊σdtfO_u,ـ£d0_Ao$$ xQgGpB0Q{)I~cuW< =@T.P5K!"b4%< 5DUtZC˵تle5+Wqy E%XKZCka(`7/&rq=}] 3g8mRKY#~$&Wyo=QA>~wpڑϷ>ʐ=&^ӷXo@gcxUUhL LjzJjYTSM"f֌g˵fUH;zO.S M~Qy?)t{Lm=Jc9O%8faA, }ĝ+[ (DZ HtV1;o<5UQqew\3@5ߩ1ʔ}U3})w%ؐڰc~ׁ-wĀܝ%s-.4{׌T7%x.gZ%('Fauen -%ԍ`fhBZ<:Yl,x9+C_; 9 !Or TYKvdϪ94PgbU 'jvypH2+YtXnPc3 fNKUt/y`д)ɔބ1Z1w[ ˆ[#U=b3oX5I`8$WR@]VW#.RŚ b SQ6WKv]:%]!h !a~2~GFW`5ha'p&̈́l|lH#?<82TK"Rd&8rlͰbM7wj]Ic6$"mj@BHeIFd4][(.~Tw'8~0/DV,+-e|  d \ɜ[<1hoR_!TFN,ȷ/j Km]<:-8)-q)Q*X m Ȇ\{wݳ ads y.K *:LB", bJyVNriM+R:bu8=LP)|΍& 01l!lS7"Jc1K὜ 2ՌKEiearYc =La4d4ʳb6c*1[0(f*dkiNfØz jk<ɫn-*x†-|ȳ'lniNŎٴ\&[/_9/?;JLa章 DkuDV[3rz䣆EP 7R~ǝtczS)O5WXZ~ 0e?2y}0xՄ+gyκg:%W&38&)甼EͩߠpxݕFsz[rwv!a8B l>v|bĽDrvZ.Oo4n6j`0/lyXV-K4FC?I `tY1h Knq0y~z6Zyc@2@` zc[HJ~=I~t8u!56 It,a^3LPҊc롻._PQra%ke'`eVG+:U`*rU1ujta,nݬxC_Wbzbh M~=?z ۸1j'&g&#)*fO8^c0vץ XL!8Z BVaƾU  V/^S0y/ d/ 4 as-!_|͔J$iTrn5ł4̝6g4YNl#sEOEECf?pViRrDb(K8t&K07uEd Zɏn521X; < 7j?_< U34  7Wě\dQLMxjX);4Q/AXQ:o+)8 t/7&8j$hH~oJp5Z2Ԣ@MqkFu6kh \ 'U5c@\,)FtCN G zgۑ>~[)3*#dp 쮭ʼn9jތbLo+u,}"nAi5D]_=f?pauy!T WdKݳ^z)h,?\He#Xdbf]IP|N MW>ݞ5F:I 5T_!"kދP}K TΘ |#KUt;ׂĢ-qjOp;@>:VՁ{|UwvxD8N\> KBDkNfK2WoKgkh!5?"~xp#J_avb"Jr>=biҮ[3Y,h$Se|l*+h̀ӒZ㎪cE[q83hZoP>HL$=9J`"E=6N5)wHc/GBMimpI!UQTx5H!T%=¥үxb{}E k_[QAvTP0ܕE>~Ffnz܎A[m1&chgLN׀Eh9|4飑h"K_|jsd(ev 9G~5w~c39S4L8y@%Ң>V(,,$H(RKR9O(k&ce#Bvr|T_o-&BD>Zd)&P'CJe=,,N?ĥﶺR"GѸDaS߇da񭉸Dˬ1:Ҫzv<&+6A.4P F~ a]@8"k{]2&MD'z,3!"&jwuN?ĩ3tT\| S<ۊ7d5AΑDޖ2Hh  ew>^*Ըyo+[ex覿Zy? :.]'m"Fgq,P:1d [yRa̓m/zMe9%n@[AX9U$}/oŽuM_ E_$x} 2ĩU`nKHQQ'Մpy:LhÁhSè5fG#н-pb&9J.l𲤘Dn 2T gYа2lSWHx'#K]$M ;u Wdh4= FYS,ŴFO6s,*?OnF&HvR '󠏟="g?o| zyq-M nhBA_}J!.ROV.j$[kaN(mı{ݞ~tQ1(~Nt_6qpo5 z$彗̔-Ī`="SOȉoIAd*Դ4qTw^:2qu^Rqu΂!Jfp샸PO[[ҬG\ax@OCkRG([@!+>s]@'M+xh]ꅅp"z]. ѵ€"#c}D敫\{uh=ث(]Sao;'̤?gZϭOK^p#WsЈ\ln*&Ϯ=cE7M!oi `RdX,1?+ij p7CNZޥe,x@Ѧ`JF=.DajS_>dns٪파4rf<Л>,QuB m -FIjF5eo=ԉCm2Kײ~OQ=7zq|af|Íj7w9Z9H YSޖR7IODP>wq܌7|^K6tlH#%tG:`[y~;} H61&/ )œ֕ 4v8@(5`0T$hطHm[[px9hzu]S&E>Aw[i#ibEF0ׂZ[ nVwiU&rf{x4g_^f \9ROluv-Ty蔞Uا'F"[䴊:\xd.5>#(@D!5_Eۋs*_ZB);F t'UUFd?pO։D"\mj綴MAYr:[9Y aӄ ;QncS/S${, oֹ xTnq 2f>{E=w*JbM`{<"R#3u!cqY?zG}b cuZ_Vv`+2DN꠯q_й隺u<#e딃qZ~}`" gN+-u_`)cv̜VȫC!XB|*Ry](hM,_ȜUТ5w|խѱt ԷݕT YdЀLQ/X S(4g Er:zlF¶39Mge[Qqc!w荏ej=nal F=W+m?6#YCi1":6ƇG>#ZⴗF+Ia촸qIwjcC뫎!% (jΈ"؏db>ѴVPƫgSA(G+`.!F\k#VIgIƂYT)|=BQAgX~8^?bTf+q|N! ` o iΓLkң9p,QՄ$`Kӳ"-ʳ)Xmh]fa lEp/n:fIiNfvA8?O7*l+f6NWv-왝Zܮ[H<'V͂A44jDOK6kCk3pxX]ci4yP#+s7t}bR8G@Ph,xAjCƮL*V)k!Cr$% ɦC OQD9Cu Ŀ+eaԍ');*lz#WI-xZ %x3WQ8 B8gAwq, " םq;p3:F=Gm~g:ǯr&p ժ C'Ctw}WpFTc_ďЃ4PNY?}7pA)Q 橐U#u-, kK{~wd;&Ît8ݸ b39 BhQ?%hJ֬_OuXQ9靖D\2~s~T^R * Ya@*́TqRVo/:K8͵-ا>;PA5L>MR!E`FJ3?4ZJvz]ܩRɿcK!4 X4,#>_O[Ij*=6!؀u.T|7Gepo?GM7y_"7Z=@ݙr}@#SEwĶ+vg4]q4L.fNqvL)e8yZh Q0ѰshhWKW'vrAW''qְe;S7m{6=J^܂Ճ?Nz譮"2mw+.7V<)hG >1OzϏp5Q-`1WZ|@w}|-d4@E>Tc`ECb˩I4LnF:ZzE4닥E͓Qf&D 3uG\»+ &¶mHeJp $؂mF_D0Պ0 LJG/ыQqHč?0{>} (ݫg;-(Mjqih-_\7}ճ cQPb`tSb]ݐX_Lސr~CL;RQJ+2ghWMWǎg c+;(% -F6ldD3:~Dwuk$y>ހ&?dfE(^[̈́lW9KJ?.rDPE3*Q/jfupZݯd2N 1T45(I1sӖ7L'P݂yfSwPTa-tuB/uOFz%e2W{~ <ݤ1s)>.qEr9\R>Í9ʙ+ǘ4 2ֹdvvvRwk=eֆ)ĦBKwUHR5fVveGRRvq8hIJ?{[Lg}lk!YIoZYJk`x u9ԆE3Q&+uՀGߊ0d.qvQ{b2Ɯ: 8"`rn6KhPh y5~f}#+ڦIj\9~Wp==Eh.(NX0AmhjiY%-bF /<59]:Ppc8)o7A :3/0T_ _0~'\bv\W@AUVzZE> z gට9.8MO缈Q>B' CD]Cst\MTAjjp|F}b-;f3{6P|]$S^"pB!c 2e -|sJouI\870Td@2""K0C#Ds;-paHz]rLp셎fbB &2vS2}[AL֢C~*d@㠥N[& $aÁ3g^_sBU& ͈` xOCM,=ZD<'K{&?Ͷz'ǽ Y#qkk{}Ksq$;\w)HV:G"j3[>,~Zp-|!."tnjs5xU~6E,5.=u-Dzk)MeodS[6#P$2|sSV =)R3^ Rxq+A'-ϐfpl\Wpf|2F劫0J|\YbSEgZwvRjLX\$I՘16*H"v86{tB9]NpGrP][X$_1Xaq@=G!;yָٶ[Uwu8]Wh%gE0ԢUJÝgKh_f?õD"%8 @nhhشi:_s֘IraSGJsp-\t9"t*[jªq4@I~om҆=!JAkR2#O*VaYvrGby:bh@˩ /^ VJt>QOC5xCf!6 $ok]ߖ`5KE] ]Ip?rZy!vvKJhJ`\Zqo%o,Pd+[*DU AhD$u?o^X6]IDc idcZ-RC7ÑyYgG8l\-eYŶ4'^, x\㰫B_m^1@T4 lj*8ioѯZXZG@j¯"zk%Q$tD{%MyRl1T7!D\ Ezc ,yw1)0gb{;kڤ?(k:nׂI5{RFDqT_\+7tF35+ɄηFEÑrQmοRCj.y`Vj@x8 ;?0'cBD5G緣}ugfx}, Udȱ It֯5%e}Pn"*Kɽ()".d%\ jXv 2t69#Á.nhO`xB.6Qݎvxr7d>,+4j%}&2 _o,ޱƋkQőpE M0~I=q>u,'2| L,_ܚ'xg}|=xyږ>\iN4m*=ozȗdRA:^Ȉě5&^][/- BNk>iR6\OJ`bL^yR=LpNj ERĠ8!hEe!|/d$s:A(/vJy:jă&{KR&2p\$ewfs3YWWʖp8PF4~F]W ێmB%"(US L:3X,N BW,̗C^#y:``'\o@[N@!ZFO Fv'](sIM/]Q*-һEKsϠ"{- Hy>*>*y"@ B"JsrSS曷MD>㇣j$clOAGjܙ묹Jڷ.,dtȲ%ʡ dL-b:E  ]=MPǐ颮 H-c{pDtaB%VT(N@S.\⑺KlݬȬȩ/RI[Vw+ޫ(F۽hX*^(D-5e)j{,*M9 yU\D V x35!4oc\(ix|"P%V|R%'I_J*9ܺQ7Z پQga7G!1#Tfzӥқ+`B>d5.9kc7-ݴpn`h|1D[YZ8:4&\a R:v qoZwۑ$؅ۋ1%{%}6iZc*u꨼wԡ\ʷK2Ɍ赇7:V*dcU/ox)ɜ~4J22xtŖl,¸SCPH8M1r T֦5 s:#a}@."{tT= d2i ƪqdysn9HmMs5ʆd %"yiTn1_fN^߰|EA3I}B hNHbwg[ h8rk|f qɃsa8g۰%2@=7gpTgh:jS-C=ݽ4 Jƨt :ʱ/o#jOXs6%:Xp^q-j42XMcpxOQa$29'mCd(< >e VΨyS[.p]F҅=3ymYۓ8!_KY 7 ,8p>!C8Msv94UȨ;D`MWk3M?dsE IyNj$czf qC$OrkЯ=~]]T`~TQ@Y7*6fFYoN=O7`~è_)^{[6-e! /B C(Oj_&E9z!Y6A-So2<2+ij(ṛ̌L@!$ƉHy#6~݌㊲SvG~}$3!Ǟuhtn;]ᤘxPs I]Gz<},a674sΡ}|ŷ-?mGZ{R 䥯’m3"̞vs@đd$.=Q "2v5dHVoCBeGszァbD;4!Ӽ+b ^hfA(bW8ԄtnBZz$$>-ԗ|j u9g J/O_GF^&  w4D0UTW!F(EIF凱4)._̈~6Gt  ~XE~q>18֖82ÔL>54>ި}kMhVJ;,r\;YLdFy%q{3h&:fLFYF\$SɃ;Du6؆@(  P %UMNF5֫bFue]LF8e(UcUXMΧkloiROdC4"|  Ӓh`Kc\ϕ~)1gIH>^Bpp7[Mcot(^]YYv<* q-L)(ݭ-=.n3 t3=ꛑؐd׉#OHX18鵔{MjMh<"vm['M7A1y*ȳܴĝ:l$U'`3U":l':DwCז&~̙+7a5V2 tyBP㑉==YvmevmBE9?mC=bV)* n[7=~3R? mbMրr9@3;na'MFR7n#lԜ PoTow=,'0s.JP5kn71A3? 8 .P/xTf")]3b7%<7cVٟ/k~%-gO%R#to<0zg&oJLؼںhvlgɇBՋBиg۰YA>%w`vX o 3%gMo׻-ِtQʑCҧOX$'s/kDޯBft.Z$< C\+KqީFCүo|jmLMz2C|X6r(Djg,Q#^uk(wA)!1Ke7aA4|Nѧ@୓@p^ X͉"WHUjvDEKQLANHrZ\\%=`UgI]j"ְL}/QC D$ܫ|cpe:opv2(8h=uF8< -\| ظ>2, &+~I^1[TBprɺG73)8@c>.#~C}gީ|~uQ*=V`[H˅pf=}򄜓l\Aa$QA)WsnvcL^'P7xB'^XixW^=Akgy2J~V B8huӄ# @4ȝ{?ODȗUG12MBYv/y4;( 77iu}u2 CP]A7o*"Tt WV0c #Nj0~m: {c}ck>6v8A^#h?? c'$*@ؿE1KѼM>. %s"F'q{rGv)c#D/9Fw۵mFS23ESț{!ػQ8% L,P=(!RXkdŜq3Mŕ/7 =KP9o :,qHAmt_7WlOq,?#51Ljjc/ɫ W9Lc|/!e:,ta&^KZYku=?c=A`=_BauYAj۔>-it ZacE񖽁̯@ v)_[/0Oo2BwtڮOerN75 %0Е1Vf&B$JxՎQmI5ޝcoYxVJd^𱩉#-uK uh %40ƬLc q{L`U}p ՘N J}9s(2=7|1*/vWA n}t FV9UFQꞐs` .cϸ#AS1.=3F]_E,$hFYɹON|!Z9uɆv†6{ 9()g5goLq~ !}SIBXEg/D5%˅aEWn9RЉ"M,th<ıv?hAc>/bw{]}SjIrG+~`|il/ٱ!Y1(%Ȕ]olm={*Rr>>qv^y4Qe]KoC=h& ۊ$k$N,x{ @hc)S] z$upUI(um-s\}圜J{,:k\vFOM#- <),޶FzLgUy{I <<ѲMdOsZr٧/gpnzg'\\j^+pI@%3o@9ߌ~d$6S!z4UsJa1ƞVNrpfmR|[=(ֻY›DXD F#Ɠ<:7ֹ1{7c<峇f2oVk߿[,^O 0I'V=c q^[3wܬS}|q~ E޴<|+F=JDI }c_.?LKد}ű#M7} 7):( v8pA6q #S`ʣfa6C<HĎe]An}Ac VxA{ĭj3P"Od%5)O@8{"RhHWR}}0.N/.)0V~NzT4p'Q)}מ#?8`IyYaTЀL4_:}TsrEɧ<%pܹ=/-{{ ZԸ0_F6KrGFFt"5w}Aӛt_\"8`so^! ӺHZ}ar# PNOɬfd1tx9[8enm'MAJj Ц'h~P#TeaflR:|26JսÌٳxJjS([s?gy2: A^ fEqtw( }쪾a)l~ƢuGWc?{G^܀­6oNƼ)4Ew)[^m33s.ڏk{.3+Pq/ʨ l i370)%\)@k ȎI?g8{yú:دauPۻ,}>#Os,2SR>)҅!tV;Շz$XWKKo=-NB:^6ֿm1%Nˇ#diѳ=lt{#/" yD >~E^݋涿Rc3hEW0eG/)E9-.8ȾI}'B{HQIX6hW(Sۼr͆WT`.⳽eGQn1aj(%E@: 7OپrVبB G5ILyR;;[ZGo7{h4ՙBJq$ZTf(G)q/ h&Fv=y/r]Pkʼn/.!`oنW!Ey! k%i_vFwESI%:\ҘߨS7!nT,ĥ!up}ps)X #xUjCKQcξmtB}߼i L6-7M7B˜I%p0 0&;;R^fO wwQ,a_ uF^4`K@an2mMph%QX%hEQ峧eMKT?=)eڤ"94u*|¾WF"{T*E߯8)k "Af׈3dخc2ᓎcJ]K_I)û{-E gT\cָ\;#8=VΑ0%}qD]9:=jC&eaoO~etFvvAbFOP#qxΛ2Aہ9%]Jp?6Έb`HWۚ>b(['QOs q~Oңe>K6цx'?*QkCKTD2JJ3籬 ߻\1lg`=AE-4rH)T"N5:NNHQv4Zh H>f!x [xRU/&.y6I5L{ӵurQeG[y$xx#8ksFja,IZɕ+e9ϭtSw9kNMnWV<;zVl1,C"㖫7,C&d;n2 8TtZ}G+"ev$ݫ2%>d' m,!Qڹ 2gثX5w}+ivΧ["A@+{T1yrT qq%(LYEU nAuXt]ثN5ZNփ琒v,ǁӥbî wݏp;VNFq 09VcTNfMv|6y/RMщ+6J:sY*/AЄa>ioVv R5d !˂%lsV#gk|G9+%cy"bWq'~qd ?w桑[K y8j1",ܪ=s.kR۷f%Fh {}iqҦB+e1]KZ[u}wšvdֽ$ihm">ߍxQFgo4BvF=kj:a4rytnHFpNps[IdsW9NwWG_ꙶخtQE;׹J#*FUf<rWU2a=bF2v2c?o1Ī;}+N)YloVwEpsWJf"2:SZ8NE3 `є}nʊ ILY.܂($^miy)9G_ZxEۜ⦚Foi7$~'rbU5)M^/Rm ;I3ߥ[E10'e\8$Y$<|yVVA8#qk[O= )pAjEu4K0pHѧ! rүFm{u]fzi\@ˀr}*F#z>u `sF"UO'^LI_֧wKטIa>a 6 ᇿfGFV#-y_M鼮zy5l5xڤ7;!K[[6ewn+lw,…׌^mp.kRJ=W=kEig$OCY2U`QՠUPp9&v%2>I_FpTq[R / btf9N {Zv WZQ{(E"1 ;aԣuP}(XCc IkeS( ӂ+D;;k/Ku<)-;~φA}ks/ cZYU\W7r7ʻw}k4s7{P??U1\%@s3«(9 ivxɞ4,F@껚2Sm:\r]x>] na 3\Y|% v ȮT0MAY={>n wnqd"RaD#~<$.X3j/`О3Ikю8ғLڒvv:)m`+#vPaNIۚ7SvФ7LVԚZ7eݼ:W(dL`PC52,Ln֛!(zHF #z{RM"qfuOw֠zKHD[| T,n[E$ >Z5&/-,GoKjw8Bg[#)'sz`JX@8"<ҫ=c6ĖUWw]zvwM# A\q tz{3[aۥNWEbq)*|Rov24;( ?)'֭xaҵ|h  HYɉCF: ǭs>,i!k+y`]zk_l5ܩjٖ8<O]}@d]g r qVry}/8]u4YHBWf  'Sj,rߧNma %l#A!y֌ N7u ~u@+ȊWhRs:xY'_+z1$c(j:Ev.kxžxcb<}汮#X z1+[]8mF,0BYIjۓ I׊7J>G&=U\_Y0|5 2ؙYX櫧|Qǽ>y%$(r3ޮVQ{K;?-ue;DsMTN18#<Px5>hWdT\mɿ#i2/HiwW km459#p{U pfrpWki5ˡƴ)[[k+,SM+X0ibv1ij1m)1ig裎@`}wa* lzt9#PJ"O`WSNp8xC{<4j2z# 3]m3鱫Jr `P!x'4)nucd˯_ԝ[c9w>->^/-[֕Ke1g>s rc"<@H QET״־E}\<ΫVC=sW-u6%}Y+iha`r:Gf a^xQ+>`ɖ'b nK1w(1@FuC1w*K]MO롅ڇy$ZcSv/kҢTϓrF>o´>B26?\֑Sjv~Gym+b/unyVO =+UIH[fG5 8a-Mݽ:׍i=~~udL-֚兓s=Aʑ12;6@c4|nF~,v;pRVFҥ$g, 3(DrE>J1j$qe)iҳ;KB( 5^bR2 1ʞzC6mbq,^L6%ʗ^@=ԈQq,C 㹪;$ ՈlH$7XTG\+Ɣjig;֢FDDqzRd1b?z=dXt&XNѸ#5T0UuGFMY[X*#<իm:KQ,ã{jhЎ{/&MOfeʶU[۽wCGRaMisKE+˟(yһdT123TŎќg#1]prS~^gt*.[馝zuA6aeԑ cӞJHx'Wv~54x^1.p8?JǕdB>0zuoI+\м^Aqx W(GֶcA%162/=ɬLA˗bfrGmBw0Ov~vrs$gVW12sU&)8Ufٔ#=kX9~^_y HVm#ңTCm#dIqɧHsicbUR63[FVu\R۫ӷ{?2~ ffd8+d !vy =qR,ǐFW{`:ڈ,6ዑ!:G_þHّ"r?p:PIr"9Jfs+l̨Y8fK}I$K(wДvFa*[hTiJ0‚8{g]"y[zx=vCq7& jrJQ۷~0 'a<,}pB|5-FhnaWݔ%X$iHz$T$bc=i#$2 ƒƪuf~m|',kL&U섯-'W74j(2m"BPNdqfDv_zT;[**d_?_dp S;Ng=c7ˀo8r5A)J8C)I<%=?Ÿw#R3z]}3iBwr}i-Ut}ק^{UKPQ>_pʗaXxF$JqE4{c>^k;_M];pJei${Zuw\FyHU-eh~e{}-Ub*AkJ<+U+)I_/-AEQ" ~Z$fF19wdҮhrz a<: NJW_~61& ۜyRۻo뜯s E@;TJ#@خy9^C\KܷVOIm/|H98}Zzp} ~,LFB|#f2ĆiUzuaN߉?}zwZ$qK,H^;)K!6`mUM ~kipK|׊*Jpå>2@󢪑#aǩ4$!fEeKdנ榏0;׭lŒV_-r?ZʰVXFC¦:5͍IN|+\%d #|k(Njט9H[g׾jȖ5r6#EVEI`kI'=?ceg/4'i"Tg:i[F2nb~Ue\Q}S c甒qKm_Qpks[}h ${֙%C|07c9e׉OS>^a%~D#8c׶j$@y~`@3Z,@V^p¬NW=pСy-ugTȹd2qXq yyrXgZi%6əIV92j{gBqq_MK ]v9iwy%}h sUV/#K`zZԴmU匲)ȑ^=y&zۿzsELmU%h qp9[6FңF;@?2#"s``峟z䯆[3Ч>i5ݦb&3 x'xnkQLd3Ő |㯵svb 7`۟Z6;eF瓁ϥxX1ItzvhqIgq4O#6G\r+*YknBdۜrn# &?;<11cg_/41_izyL;pj}{L#r bKPd=zR]]ܯ9c]6 Xj>GL EF+2B7 G!_Tktx9W$7άyq[qZs4c8;F0GHA$ny*L y䜜zo*C9e'ߚ+[ʯl#I=Ğp+Z5CK&+U 8PW&5X ͌Jq0bfۉ6;yD"lOl m q}3V9b9u{iU(Ǣ8k0S8c|צ] >. (OnzZ:Xx]7;:woָ*d?>+ԒA4$U+s\eĻ;@AϽ{j&>~9(~[ 2#9ֹ{ TʎO |apPCH{H#y{} [n ֎7[pd2 َpkAr<@98AH3߮k5Dbn?5yi1i:Y#T $<)_nir ̑rk9v@`XTLS^)JPwOf2|a 5I-+!G.zR47k 48b**emEZ.+CQTt5ŒdT!~)F#1W[2gݕI sPLëmax58aU:I6F_8ù>c[$k*ʲK# +/#q\.T^+Jpߔ9s_v<3$*LpS8'$VLx]O;RH-o l qZ%b0qimFVy鿗ܛ\ %ЀN~QI%*Hyr1==_Z26#'So1I6Bfv[G}\=Wyu2x•6>sUQyY_n#l]4!=y# b&WIpsJtmG (BW^}=܆% (灜djR1A8W=$p׭T}8AYAM T:#J1N:}>VO(A00@;m<' y浚bF w;pFN=jX#HAdM_Z;{+$.YNRU(ڥiSGWv_o\jW6^C~k?|&~"z"Y-CR3p1+=:挣{$zJrߧ} 2MǖBy'h i֮$ 2I.I&4Vd4xۚw^0_QcrWlFXISH4'$tZhE^1+9=L~ah,$R+\ɜTih&ܲG?jFb8uQ2 }yN@ 8x2V=Vj.n-i ^C;G-ka3)'9VKyhvpGZʀF0UT( S (~)Y\iY bi%Dyƒ*B7ѝf@X=0sY[φ#v8'kvF8S,Xr}5É,]:pTKw:X,)$c f<:mj7-`֬4hK|$}A$?BE1IT fd p> el~iB~MyaX  q+@4:ܜ}J.P1c sW:|[$I䁀9 g2A,vUNI yx%B12zAߚpd^̋ (d9d8 XÞ:-o#6iY%5+cS&:8JҝܪdBǰ8ɬg!Xw_6)rpY~Lzcʆܲ+gگ% ){U3qH$曚7ݐ e GTJ~C~]y$r~|J0 Gȭs6-smː]}aQ䓟ΰh@2`1UOzo䈧)r6qֻ(&p$_[\dke9|.$O26l+dIxH,8+Exǯ]'|@N۾XC74خ,CyoWUݼQsGiNZ39Q#$\ pSMM!ܥseXfEL ]n*fh/O3e0Nx & $q8Wu0v01~9^o;c|f12 Jx>[A8]FFc ϸmܬ 7 !_ʶwA]n&;EV4rM&'vG{Q1ʯw} %u? 9>ب5-* QN7 dvR쌴eCv_ֺ4ќSK]5;jx}11s0,o>o))<)9)eX[;N;VgRwR[qPAp͸ {n+NPI8ܜyIՁ8]r4Sf9`y5n_'f y!;IPƀO4#7LU VݟX(JI(|łq[MU*j,d/+K^"xp9Rs54ro YLEs#f"H;IV0;m~cUi5{KA]-4WoW~\D2 >v2ڢ])~ Y9#'? h~H8ۿQֶSI3V`u2WhY7rAmvO1*\1 ^c$q= e"@9}TɩZ)h]/};æW$1I41`u ɊW(&\`VB IFKt;:r]h`[ :{JHyiT|K%wkiZuYD;rv_Ƌ?r,$jbJH# FJF r8fgR)_-#v3ϸw!Ru u p{wGrON=E0'VH:n2{[^OcF1,Lq/N9<՛6tI"vm;J=ܬr$G2_9}OAE x0F#T׊z'L͹G#;{Uݢ(њ@1aʜ1JrŮ ~Gz8Ve5u$mm>x($arF8$s+ "8,ѻZE7RgO@UJȨ]m%BIw8?βZɽOBy*|7v߷RhvE`N19ǩKLNz4^!P=jD0d5)ЪE߿ЂGȇ<ᚵ*[DHA>}{Tef!;dM UΉd)a.ѩRL?ғ̸j$eF sS!I =iwm*1ǯ=+ +h&4N$cG y^sVE|CqCcm ` #.8YJ\;0nQ̶}v`ĹYTt۳'ksα@ÒVϙ ZA {s_)ڳ0OD!tY$Nd1[l tni-[3-]8jW ZE1WWV<$8 [LtYepS s҃z+*/,* 3$+nb ۋv;Y[&j̷Zs(V=3OLfC"1uL{:~HaBВhm̹?efiՑ[p.'&liyJt\$d;{}q[5kxGNR%?:/LϘ=kj3IJRn;E܆>@lgb"1HujI"Y"F*9bHd"s zn5Uj>+1˧>wv+nf ZI,T}?F^1֔d1ZJtlљ#%S#J]]*TrVCO`82Jբ8 'rx< _c/(>UW}{O(Q;$ry3HX wg+㞕kfܺ$x犭(A"qfJG9Rotu_bZ \nyӭI4K US3L)dغ I;D\kdiPiowQ:Oq52T99UY=j"9"4qzq/v$h=@#h>V|^ >nh”Щ[8i)tjՕI(6ٮod"96,A >221ޤ,]4 x'"dUP{H9U #Үrrs4+sƒI%{o><[6#67n֚80 R29's#ǂA'DF0r{Qi6۵G߭fd  ՘ǥ]X^7,qQ mTeqUʰ 9hSocZs]cP |zRʋJ,1שJY$dGz$0{ԑ;A[<vfHc%KoOBslr=̈́)e]Mf #)q#TH؏^se2¸1kE>K_{vvwz cDa.|{Y@'ۊ_5^H Y ?v꿭wUEg 5Vf-&*Dx>wt3ZJʢ60J|D \"O'*kE֢vFoPł{cӽ^hʜ{L7\!\^겾ÒG|5ڑۄK9ZwfHu; dsP+Ȼsy2ʥpҫϾslhxOsw'qAGNrmB2OOKߧ$xfe2}<~0C̘{F=ZUIf+ey~ĕ%CNF^7VgVl b-HO8!Z!HFݠ,Г#b ׯ.)o=l z-4"*1g^6@;Ν|c&9)hj^yi.c$zƸ^ Z jIܤʎz΃.X28=~_%%JgFO08 Z,#4`R-.0FҼU<ٱnU6Ɍ|[=9TʌlC6mF$f3\ps^k: n6͊˱]O"*BI,tʧZv(C=IyeJUJ"1Ydя-T%GUہ|k16<=oC_ ֳ$uVU ?CZb$ 8=#IERAn|Y3S輊/! zԅH>oym.c azW?y[oےq޺|#8@A$$'~^:ge [Cpū]k,_3'*rNRLyJN9^3ګ˦+(9AX쉶tJw\*w?Qn<*~r>y"sҳt \ ۔cmGQ\3y-98{jV*"nʀPzy8yh A<?av$n淧bvֿEoǘA=26ݣ;VK Ý~DK+ 5 $aI B}Qo) #r<{N=i2ndw9VtVHHuspI+By=/´Q|ÅrӠ=ceE,T[iʐAȪGPRY"T jy99 t}C NBMNJ\_s/d,R!`62j9rvH\t欐f$ڮ3`vuC䲓?TKc9S)J[~m/.[k?4⣶fʼnsVxc&0X8zUdQ gte@8dX+*R;'mPݠ|e7xz-nw )Fa9įHF܃fȏ4˅J&hʢNu*Up6rxܑBt_zԛ2n`PG }jyvY=:QY.<+N.S qA"?((I}Իr]z:q5g Dele0S~t;V+w{-ݴEf_&௚1MUV] arĎ5xFd,\ >\4ΑhԖ2 p}is7%c/[~ P>" ˻ ¤i#VD w/zRGfMpRpzuyyHN*/ʟ4⒒ܿ%f!ZO{Ux dRrz aV&!I$G4#?F>g|҃N~9&Zgl4%yR$MfL\oIsYBw~'dfH" qۚd,fPB?J:ݑ\[v(ɍ'py5:gu(hB /}y<-¨=M%),.d=X p9+ou9;ÕQ pj$F _ OW,la"BG wnlrzSm߹KiSɔE*TH201ʞ.ցq~Ib>4d1NVRN[(K"Ykj:>SCiҴi+8Vup1j!NI uX"TX+x^$BPp cF<`I= 3i#"m:mu߹R, uVo Ʌ!XFr _<{O8,q5RwD3ǯ҂sIّ#,v`13UiH5reY\~5wb+8+̈#@AOE E~m.I+~[Ye,s;Q#K)b2w8Mi~I"Ք7}+r3\N3t=O] oLrUyּnzZ[M v{Eͬ˿mv32s[k5c\}k槉qפ묬 yϽfCnA993NB{f\JNsJ#>Vnb43@Wzm3#2(^G=Ns[՘ɕ.-)6@r2-vd*&e;G m8]ݜؙ&_!Uކc'V}"Bɵ-HŁV^vy87 /44%v%sצ=9X\)5n4Tw1`x5Us1җ"WF}PWcPMY'tCޥKQǶ=+/P8q'?\~8ns7aQڹk &4VޟҵO=rd[ZkN(TuZRzkȸ0!Ak>O,il)TE NwQz_cQVɖ*WWhvEFMSBҒ5An]pcaҔҵZPRSz]f?0>^Ƒ2DC(@aCzx~  ֻㄫ*[/}1B]6 *zvQC2QtӹXl48mo +rC%)&>sQ忟nl 96^4 \]C< FGWtm3`=j)Ujnmy:NPYЦc0!HOkI:)+jr 7 ڪ $@ {L12йҥ$6ѥ{Jϸ(yY}p=3S0cesk>DIdRU3s!$|'#ԥpBP^<5:d[P%ܯgkD1sjx}۷+ݣU<So.aIhtd #EK%,xc-YaJ=Jy(H8Vw%t|L%I+IY۾v+nlUb+ q6VMlSpxך $Cf58YEhpURۿ{)0#?Zo-YwҬar5haI 1dBʣps]qBdFӷkVׅ^drP{LHlǖ F횴^CwgׁT>$f >YxAի-[-Sw$^iLow`-3;8BųWfB9 8OzgQTފ(sӨ?yNjzs'}5+.pnj$ZڻϷRAhX[8pr9Z6%`TÌ9+Ek˗˿]m-g(ǻ@ث3NWhRA*J> j"$@$sέt]P[_?KVsu# Gf>H U G*mއ89%QIjv{'u_֣?\adn0jaƘK ٘ s'k.]_%{u[ qJJ.\ '֪Kq]H*٨AdHfGBsHb]8_2ٶـJ=1Ҫı6;Fy#\0zQaU'2Y985mvknWv70sn 0jayd"5`JGړcaz1o7a(ū< onc(gUPVE`ь#Y%||rƥD"g /w`s,[Y$ kg%U8`==:H0*οŊ1Oz |ʤ>Er0b(M#} -ۦ: v"x A:<*~lsҭ'Aʲ$}j#X|;rv]DKP*yyd@="*9'N[9&A$H!sj9o@t~d%OJHcnP8`+|M6h=քz&vj |wo8?N}I R'=;Aa߾F[SȮ湽)O-/'18Jdh[8R34BCƑ*>oIzʥHθF2ڎU7@TdM$ ;V?acc"\&NzU y7ָkM\U'fzk1ѹnI9?]47Kn%@pܕ^ZGH^@Sf+[l- hV{oևJ/#I\Ǯ:VlaC)^O|Z̺wq>9e`@sq](,`^@a!FwH #XpJ%y^ӳu;,*Zځ߂i; B%x$a,R9)_q >]M[~rʸ['}+GԷyE6}ɩf))PoS1n)jK]ʣ)6Bm|pFq˽HlI# ,*Ĕqep$P{zWvTnq΁5i^ v6zV 4<ӹsjյh !=qZs%eyj^qKҚ>#XqT7T$=kxE2֞M<4r:kxn7WpkEјżT UG bVB[Hj!2:dЫ8,RI/6٘"ŕ4ȯZ3Z#?.f;X9)+@)[yn<\3ۋ6^#WsΝ_mˉm:qQgE\,ǁ:Xnsת5L \eMq CymJzf8q`Tg\հ@U՗ 3,e >?֥gek_WZ($`1;Wuf yxVvob=i !L`m=ۧ%L`gk_B\_-lrĵ2Ĩ 09#I rFC;qdP%G$f)ԨN[7'ꗞx-;4t\fϧ/'A?̨cWg[=8ZƑLmWj*)XzRSvVzt"2nS h!c'RIJUB򫎠TrCc'k]ьaew~} J2۸I1$1_ `^ k9@#lRӡ*OOѿmRWԒ DF7†<X',[6U ;DtvҚe_ɌtD%SIJ@פ1أ 2qTZ苄0o{Y-庮P~eŸo%T6/ CO:`JIeەؼ|yL.~cq֩kzW̚KoVyKB=*1;m {qb"s0RsWLNLEe"o.(#8q%$36pzc 7u ~S'k4Qy"q+^".N>ͽA5Ψ v .sL+n P*Vjo"Xb9I.Q(ۻhc -l]+)HJ =UF*ʞfd<бV쮁 ^:u>6M4Yk!O* Ґ 'h"Io2J z{bi hؖ2@PR7جa`{ 9 nGS=+i HƣhT>m J P⫶QS$¢ Mc#C!]TeYb Y- \ Qj㞤ҵsw ՊA!M#c|nXi\)ONkY)0M.5%aU9nH>sU.9 UҫJoN* KŸUs###YW U#aWY66\>1} QQd yNރ'.dөGEyhCb@Ȫɝ2ZqYIH7Ei%V;y}<$w2̫+b#J4k\ʚO7RL{W9fYBr8ϭ^w W9w(i!IݓwFcc֏s6ш9Opwl|Ѫ Oj'hq.nJ}שYSM%[@9U:d2nl*rјԞL %H`z{U罈<:\QSO+WeQ,v t?Z4خ$@=Ѧē9?\WnznyT_;WMFzUww;WU%1ugݷ 9ϭgXF9[q<ɢQmhe&ҿ o1t|ɞAFZ6('&]ƗC>R`c+R4"2Gy8C ʶf2d?{#NE1vx89*K{($Klg S]X8ӻ95ʴVУI_w8v&\hnL班VӭjgSJbsPkٜu<M׷o5f2=PHXcn "J \皎bEm-=}+/P5I UMt*66iLϙ3>NS{?Ix}ʈ~f+کZ\T Xʻ~tB7lʢ)hȽfR"@ۀqVh'GNk [lϒZ! jW$g}+:%vU,CZ3IAo=JGƨd)8*>Z6ݼx=?ճZEOYEx50ӃӱКrihk"#'%JW?+=I#⑀PǵmE4 ߳Q҈swKD3Jݟ!IbpqMcN'X*nŝGF`s$#o'nݡW%Zpy+JL&RVoߊ9wxYr 8?!Im d˷fouz {E!Q+_EKNQz'W+ƪ_r'׭L]IcҶ`pɽv=EI ň9 q$eMY=:p[Qh@#Y=^,.o36"eWwQq27;7gJM5.|(?SF»U Z20:1 Ӧ9'dLa«;0@({OJ]5o?/Ji7oCz/tweDs95- 'IY?(s[E*܍>]_&Xyݸ|(fs+@de Ңhtʧ czSO(h?r_c\ȫPg7wϽ@%PN%H'Uօ]dlǡֹkS׺-wg ,#\f)T\5\Xy̧b$.FHi7ei..kw3O$CqU E$||Z@u{+u )S$KM0 Hq})grYG ydXq8>C$o_sZ&5RRM(Kƙƍv+h?y3Ip@*X9r g,G0!VW4ZocxE}$AjT2:aDԝR/QHUCY6,?u F)uЎ'0–9>h#<`4SԂOJk~0 RsNrw `8<{=Vylc~H˼ 8嘎,eR]~@rquK!ˊXyɚJ\ɴu?+pju7(J#dkG*AݷF њ{hck#2yFBVpp%OHX @+##qZ6P+1ҺCR{C 2rqȤd,ʼn,vVuNyDb@AnJIt-fX|~n01TAYIٓMY\ʅX(2Vd@5F/żD#vl$]B5*&᫤bcgfT$ckԥ]3i #zf6jC "HO8:Vd,# {$feRPvNJ+ѣ,$gHa5:~8Չ/dUtN&9bh#wc+X95u AlG!yAYiqy݀HAȴmت eoYO{lNgGm} 4pA`ȅ ƞvi@zJ$qNd,V[w$^PKi{[]6ą0rA[7-J1m󍬨+TQWU"khy\eW4X[3pF ;c&]đ־kzJw{~뢫akS;uRLs?Q k$lcc֭ R! ) QGב%@}k7Ȓ97w⴮V҅w VtK@&֪.qv(Xݙ"CNֲIb˶؉q؎qWq%vdpWU8eX,X=1+*Bq^E$1Gx(ہ~9+RADr'8R~z&los zR_ݪ+3HuT#/wnVpY屜L{WF#\L$|7c5J19f^G cdny8FKD¢ ZCJEX %,07_WY8򭼴evyI !x'gڸ`(K7{|쇦sm*H[Md\7~un]/TbYm&0y :z׉NUj hd뵛qQOʣJIHxz.99&ctd*6[NzU1 ?(IY驆eo_q%]~p9=i̒U܁BsnkP}m `\)+Wc[D>j_9s+ۥ}"6 $@K.ܶw,|HF3яUe$ [a%-.eݶ(&C8ٙZ&%[$ +?m18nWyVkBIҜ+ki]"%Xd'V1DY\Z'(T5% ZQ bK }A9N V- dV"></;m{C0 N<`{T@cU'?iUQRp\)Y=_Ϣ*Gj;TB !jkX6G"#Urp{\|\v6mKtV3 #YX>jAa$FHu,1FC5R0RAb:ku*~R֌'O)ʎWUQ<G[%%#Ci=yfEVbCh LZՎ,ß,Q4.s⌱_ݩX1c֟hI#upG^` <~`#93V%T).u*/63;J U9$=* +pŔ1c, ))eAnOr}ѡ|by`^ K%Hՙ@sUT[:}ڵcEM` i,ŕ$#ֽ:qqZ3U)w{lA, ʆNv|H_RCuBOL4K M\֯S*P߶ړ+ r2p7r89橕@vtjNZSn3=9{M]n-0N6kӂIB73^ЂH9s}T Q5.GgՆ\"ͰG3Opk.e ]ԶI]RpbUڪܭ޹#'=%5wB^F.A\Th,9q뮴Vbd>cV4QwSҺe(G<# ϸb~=>C9P8%⬘9vIXwZHգ%U(o`7YUH֨U e6zFZ(fVv$p#aN['r֨owb8XcoV3.S,OJ9Ӧc pzUGʄ\Umu;"պ}nyo f#fMl x=[ں);  :Ϲ% <+N=I+hsRa0S*hfP99[ nePA9%#,SO$[b/πvM V/9NIk{SJo_I; CY0Q1lsk]gr*e_XuS4"l=X DbJzt~\h0CJ'4Ao=nm_"%1ˠ(qTzHԡM ISϭ<$d Q 3UJRznɭi%e J7s]Hxmǧ,#D{7jڷTkǀ85QJ2pI$"P0g_Yy%B}+FnW7kdDJ0 \q/IFS^G[5MRIu9ϽI)P ` cfa 1sq R:A,Up斯sԌ' Vk~M{x\u>bl3Ԛ$!8ld`^Z>X S.G"R9DJewD2 8N+j %bI`W|шP<́J+>s8[ 1x ..9 rNPdGU LKp"ejF͍0胿_YVJJc|;)[br#Aȫx߆嗓*P1uWS!<_4}>E`ŷ;zmGtѶ1;1)* ydDX*$ڨ,,jNy:W(ZqqZ*ᐐOY`,Jݧ9a#;xێ*mި3HQD:AH C,#KRa,z*Wh%yǯhݵH9~"VicI*hi|\ aP[,O=+v^-.ӟCfvn[]L9$ݷf޲mΈǸ XS$~Y#n2y=KS^"Fv2)?1kP>bzw^{ޢmia]A Ò[q3^$ݹdʎY1Z #ϙ?wNJ%O%&eՃm2©:E<.ŷ)4t['Evryܣcd;iYXʇ/^ E$u)f#h9 qԩ9;7B MP̑Pr>Qp+-M.YF1KI'>t!R.AΜ}7ՎB1I5Js ێ8,Xb}rt}^']3Fq7i[6Aw[˜~5Z9kdorVc)s֯38sL+q Lҭ/ªhyK9W1u5ev 7sq11r䔛kNHE_ެ { x8<4FV TUk C`N*(EZ"h|r00?l.1bpr8jaكc,[GxXƯ9l$_ .p#~tۀF}jxUcy*JYD%p@JOfϠ޻%ͺ,ayYcتd`ut,IU$rinn#`c!PϐZYt:y}hR2̬/__$NStdIYI jFGb7+ ޸J2v6D#u\j[G,IPmCc1Pj|Tm݈ ߂3#;1 8)>WܻggT]=m|M!Mܖ' %PT *W]|XOz~g}( yIAT'2. ~P _fYbtJNqۥ|gnWMIاv@=° _JEGCǣV#ELtS.E+(:~S~<viI#j#\vnDiX"G'jDGK 13m jd*,Op:J|+4UGSClUS :$u}Ypmۑen,x4p*0;f]X-AWUnQ v3iUJ-/[ꏱ䐍?)Cj2KіdV\1f:OQ2o+]?Zn4)[EV EPjũ| `=kyC\2mn*к|8YJUK'+G[6Ѥ@y޼.>p } höHl8.1Ӟ![ki2,KpǨ5umbeѶm+M62#6vQc4\4j ~ꪓ՞п%kuK@#]@;AyU,UՉ ,E!G8ݜ<^VࡓXϭ],b㩍|R.GMÒ0lQPB3?ҙR@ ӌzԒ8*XA#<ھo_VmՆ2a*($`[f(ys׮sޮFm`,1(VvFa;r29SWY$P8r^J؊پ`*0F2I?Jgvvc)`ey=}2+x$Ue8yE&Jؤ*C4lK#i=O$ɐ x 0qȪ2-κTV?zGL{UP<$]?!:5wdYJ/̼RG&WmsɯS (5ʤ`^;~e O1вZ "EU2fqNG+:IqW]V9&7Wf lT1.ǯ&|Đ:o=tvH C+$9ב\򠦅NN2ss]Rx}O˕NA?㊆D'b6['h?ȇDzT)3IW*mzFL#$E w 0^TyrXBs ܂@ȫqm1'8޼a1jRGVd{>XGbv5u6y2q9Bjm+gH=j,mg[N6 &V~2 Y=85YtOO>Ղy,#M3UENUQmlAQ XG'(E8N;t3;E`ϗ dG8z5597u{$mZ7A}~a=/AUF䓞j!vSfӞ14֧ZM٭˩19t?,EDej2NƜjrrⵌrKehb%`UMœ+Xe qx, 5$TwR&t ;<銰<.7L?5:tFw*CK3l%K=*#c ֑"B0x==B2m}+vI۩A6VbY3rݫR2"(02è6%eb891I=~l6H+ o7wB3ef@?2W7wp[Ij<!sՍ$S?RJqUFLI#Pqp00޳lBP;%]nR(1~MYވ9U<־IGVTZ|2%w!7 ǯjmp0}YFP1U+-[ܨ$Q)a&OFn;R\ DG\zEEt(p?9تA:sq={ruvLj sTet{2qm__Oj!ՉF܂̽xsRzbTBrVfYQwazͦ E3;pßֵ"g,yRjKb8O*Awj^t(78$o%rJ'Wg![<.3uo68#I<^tPJYP0pk̚]N:2$M! r@㹪ٙ&I c~;דqU9"d,c 0וR_`+rG7|Rko۳L6aF]Źñ#+KQzʢC &Odq'%N9#Tú,7?Jۑ%r |JkUDZz3l6mCƼ?枌<%#P+'=pjKe$pj9%<9IOsUYʲyށ_ajVjʪp@8 tZ$ Hr𤍓巐>b~ST쮿2U &.'1 fѐ*w5D'hnzbRXr ©\My4CrZ.g I59g[c! ,u-2* )H^ _!;*uNqU&h>(mC[)=?ƴ5j{ at9O5DŽ^B܆^)$z֕y8v̡3 i\J$vTO?hfQ0K9m9#HԬIPN2;VOΥE= ̦/]Ì>izܥ C8i~Xw枬#a9V;ڳ*Wv'ꩯxdA1 umuY:ȮKFQ$ݝ*ˌ(suk3N6z 1?5{S qp'$WI zͦ4=6s^7q^>s0N\ѝ|BOE?db$85F]DlKW;I֯99+ڧR|ɟ9EWFe dnHYREFN^PX=Nے55хԑ GmTn>S# R9,95i I 1mܲPKyugNr\%ӹDȎ]Ij?1$n1&_ J[+S򏽁RUSc 8<Uf*94P繺I@KWcT ؔ+"`B7*N@D܂KccGNV23F HʎF=2>Q|m%MɝVlBܓ+ƌ! |o5+kZ9'v.0 ۏ-mڪJLx^mSH os뱇>{?2r+A YEې3ڻ+C fVp;߀u8 a^mv;M濾JAhen\P>e .DyUy{VY ~bk+ʖxF_m#Ggb$t\V5Na$d$^{e4jb  9;\.w͵]!v9bTwǘB\#*e$ae8$r3>If@ .:z˖T7}ϰ51mb_#+SXr[%cҡ(:2ϯҚa$.36\U=\=u7tZ[w7e|ScݤeaYq޶mTON3בQ8Cp39yesIE-I0ۭi-n,;A}**r7g;-E3%PZR۰z?^BL6%Ĥ⪼$C$y xi^fݰ|(zμE"6ey8lʜ#ޱVF*6ϯ!V`͕`׊Pf}T) bRA ,@%e?aRRnrٙ8<“1߭0bg8:,?$u֪Myg<ܦJ4Y'^HL-\(A dcqX.x;+~h%aS%II}ּu=(Qwv3 K9եm1z&?1)$Gixg`>̀M_#wmK嶕Tܪ2N[J;Jǥ$ #˩9㚣u.Db8$O^&)2ODG$#%CqxAvD<ǖTK-B}6r~h d`3׷J[()Ē;J9M08yYC3=ǩE+t;h`w5#C }$4{ܸ zU*.sxǥlEf_ ڥr9YS%Qq1ИB+*7NX0!Xһi"(u`+~2>ĄrX}z;ˮnG2&' MX7,O@Tpzj쐬k,X~p sX2]0~lӟc^v+'{lz8|,Tἧ|*XǷ׊t*[.&~ZNѻ+ʌ^ygH 鎝̥6 )I#_!/32+Oh8d?6qTҭ7yO,ʳ㟭G{ZEdQ8Vb@-Vm+Ufx.w[bm)Z;lVQ~uah,e#;?x 鑒*{7̾~GJj4Rye1)#4۾`̣h' ډdv($=*B$ c־ I7tBOd vd"0Vlm2bs7wvwzKݱRޤ7s'9eN`$2売#*p~vܲܫe7ݸ ZI1_ԯP$8 g?QX" ,9!@Zʼߚfm{Tpnj|͝4N[vvW"~rpVV2kԏq\}iO/jmJ  ֲVh,$^-C98T$9"-Hz3}Mvh dT(=K]-3ll#xB bӕdPXnpsW Gvvu>c~^>m)]B"1WO:աTif4:{Wuo|LIA#IɂpOLҸiDw1 {{Wc$sՔt5%2#?W#x<ݫяF$o'e99rdmbT~>wg= eI9M0$}*t*~bY7*+Q47fS+$+#r+[C6eBˣ {18wqO/0ۤQZC Yp3ac ԥYcAָjTzjo c:I"+ 0}3Lp$T0;SgIl!7SP*pYfBr0*;T lQ<,C$"ӽA),!Qnց"{21 gɪ7fc%[on=}+W|Jp\^f+#5N1ocRM/V^(R3'CQF.:|,ITB]C zW5wi$VyVso9d"I[s$pyڵ,k5+Y/A;%#X䏛׭Y鄁|Žq#*p*hg*YfQ H0-nsϵk G,y[F䌱!؊/ 9S m޼6sݥ kb [yo{MX`Tinz xzmɂ~Rq6WS!T *n yVI no`y1IX ,s(ݒـݻ`dfi&ެ_ޙX$%ټ{$fċ F}pmaafG=r#f$班9HB<^)W3=GxMr ־ B .htVG?eq܅+yϽbYyШB039~kR4)D!}%&=QWKp!YF1Ӽd]m si21Ԟey 1Fi'΂tZ\ܫn3H.$29 !!1i= 5wD]7bF?<ӡiz})J ԍ1:>5_ Ҽt;hb)IJbfc`>#`d+<fyGjuvÅj1FUط@5فww0Rq%\;+yV69[C2Z0BK*#Wt2J;8] 2TRܬr0z_k4ȣzG~w+MJd7z~j' Gr7cߎ4ڍw T^uzM+O/M''-Qwl&YppO޹{|Y81ƇqPx1fyl8+%jo @9rХR25Fa&O)_@nV1n ٺh.T䏑Nt\܊ϳ!1'k8=g]*[Mʅz`= Xp j9 \@ '3]!{Te}jMVc2 sxifrzd70"B،lw`n.?ٌIrIgoGoBrAXNn|VUpcʐy縮?QYc#fH(y+QNsqSuz-|-N<znzg9[pfD3װr|O`xO_ƱieuwFS9{W{ib%$Q˽7Kc''6H'ӭWyUk%pP61➓O8޽j0d_SHu`c'x&rp8UHN刺h>۴|-F^G4YHl PY*!Ubx#uX,WiU*uUrq)@,y-W)ܓ&猖ۃG~*nٱ 8`$T+`;tzcŶ,@dgzWCךh+(%S.z7ʊUU9Nq!b#5bߧDh=ͨ],2#Z_-\uh.IdBA 질+l௕CtktmBo*$Y ps^Weo.#v6w~I=xw4kA95F+ oiIf#f$kFy+?PH#e.1$e8I|,9U<޵ђڵ %JJd*NFcM]~Ebu<5;vI?6zEkPBFA} kMJ='R3ՎLYURId#C O?9=yGE2wW W-ܠ nCbj2S8Ubǯ^k:7Bp(oo#Iz[&G!{5JtH~V8n5y^&M[OM_RyTcc2x4A>3Ͽ5gUUjC`׮OJ!Tv|(ղ]NaI'9ҵc䪀f8rk$:rHI czn7}=3^c.HrK\t.Dk@|ޝ̲#3O elrlІEH3j4J͝Vf ide.Aηzܫ]vUdqYCX|ֺJ`I'h$(K>ÚqM?Sԣ&KGo" Wy<ӓWIpNx 3*Rv.@JBA=;UD㩣V̹+Pozyv*3!^y"PW!c^:NSr2]gݷtBs"_aF+>댑E! @f9^;s^zx0ID{gq{֕w^0OդY6ݞuו,{p^3UAf1=eHz'?ʭ{0W F:~5M$x?_ֹ}9KOBx##-n9ǡ^`9T9kBPN ^pj1bU8aO|qc\Zg>\|g$lcg9}Ba{6# /X.rxc;GQGĒ걓VL )Uw9c#(1\¥tҰdQ8pM2M<^ 3%89=g)ܤ)~0rF1O4ͷsI"Ԃwq,7{%G<5{Y9LjsĨ'}n1NǏ[<+2;,yjq3Z^57'o:tM1B@@I$:^~9WeдmnO[ W8JܵR;yI>ϒRo!` o⍘F3 uc)9ӌ=zN VfTxǷ5d58*3N߭yns+#}$h3vi9Y'Ub3d g %ZJ CgxD(,?j,#˗]UYyWb@-LV彳ٺYT,Hs_3P~{xh|*Ksb5+ir2FgЎ*ijϸqW=Dth!s_G?i$ږYz՚8a;q\.(7K3ߧGs,Ry,pOQ^f<$2OpbhBj{8JR=/Axm>ZǩԠeGђva?|5hh3 ,qZ[3$oB1&] +~Yj{ A>F6!`?\.%ib`n,ưCW5XH܊;\׊i a$? mjuGQ磏ʘؑԇؠsYR">P80*f6H8W?zMw#=Y}]W:P1RCgGuzkG2&,=Z[KVyQ~is "pv-ǹ¥j.7G[N{ћyRe ./:vt5"j\nR"&RV\ _W˼ .[hU~tUVPBvoQ^fT,FbN33A+5r޽VCrTJmfWf9!:CdlT@yq1lsqGu{ QIFzm<}괏6HHIBNi.+;Nǽf\SfvLm75[D[2_ ˑ[PI(jfg7~G\MB'%S9 דT%y2\Q(U.D-I7uY\F[i+Ι>sy;jFp3T}ː~`I$玵.dݟVk_yir UCqbGyGU!RyұkW8kjTXO\0Ze}Ѕ;eWvZ!6< ԃ[0e,PvuO\EsO2E.HpO''BO)sK*H%/18?/Q+ $dtfq j]&)&J6N27u\RR{tB2)3^z95+A gަ2Bn>y]O@`W֪mҒI݌ g=iƜuԲԎ-S z]&-$o"v# gG+y!ʣ9 q»1Lfe'rxGu49+һgwZ`xc3^@"FW|=/mf 5~fWyzlebG?0|acqU}8MJdm”\מ^ S2H!A$/rP>^U[wO,eKKn_/i#RZhsǕq$+/;皤"*Yy i)r/0O|$.l$8^ _yJ]Ow[ lpwD^(Xë&ϔ#.@>EBKc >h) '+__q H~ը# "ܶxQOk. 8ycAq?hܳm̡|k(֌ծT5i63K&@r=j96n#l`{=jOn l>ZIYVt!UCpkQVr7֗y|\d4<ճ*1RHYdu$)5xI+. WQMҽG-76$xˀHRTp?Z5RPۊduo87b%9je` ~bF25F9M%y go6Uza8AL2'$c9.I7bH LRDxvR>s=NOZRFt^kDMeYX^keWo5 }y5@ZV<]$s]*E8+Gӭ)ӔWB-5ofɻ\<$[k 湨 6Ia1;,WSOkmʗK<19,*O {ga]#) 34[/?Bįvak@5w0sqeȘ|”ϟJ>dBr|x5]O hyn&^iP v}U5 '4.yṁi,OC+`_ImV#=3=1[w#BZTFyXwR6_5]q\8z2GNtݜI{gpG`I'mϷiۄao$t/cjF:s ;U~Hʶ/-!NB8qXB< lK8.z-^!p cҾn-1I? < H8f}6p)q3wA<`w&\>\8Va c{qk>7tk6$9<ض /p**aӌsּGKiGf% w:WYk8_1hzd{f,B}䘫T\/+PK$g6>Bphotos/jk-jack.jpgUT MF\FUxe\\O 6FqB`-!w =H {ϞsLYpZu׷^g6KFBZ@J.,niyxx?.6?հFO]U$E(u(hT  ̿ۖdHqo? 3j<i_Zput}Ֆ}Lj*o;m_nb2coje jS355u1{ ,kXt&ίu_ۿ_C֍Ȳ4V4%_*3W[e gk`l{ȟ$ET8U_B !1)9 %5-=M HJIKONDONM+`*}USǙO\P]T[RF-mYsEkUgxކަV.nɁ!aɑʼn)iw3sۋ5?~:^^5\;߸ܺqܻܵ|zz˟?ŀ7_d" ǡƗ#H#% 9!%$H@hi/l;1 ѳ=דoR@A_"#ULS[AUL>Ejڂvΰ>GEo!S|3As- <^ ;\{F1GK'_fQ5S;o8l_ ?&@ `OfaQ!ё1q iPhbVRbrjJzjYZizMFYfڬ쮜ɼEk%Ge?+/.j.kם5466mkmkmL #Џ0=8>44<:9N2gbui*jZgËzňԨث[DˡMO:ƌR2֫g̩Ϋ-/ij Uz$xǖQ1?QbA/>e=]͋y#/uN9%`&`A%i{ B܄?nRT-\8 ϫ:@#ԫNOS(Ҝ"Ò7wk:a[;1G綗?nt]}"'hd@ث5xݫ^Q7 oaH6)9ń } {׆/E@EEDDGM3 9Z7KXBXEk88/x.xWw@o"bb a4\"rL1F%t9 %%k+hXTc#P #*!Q9A"}*_@؍QP D4t 98y>KHJI˨khji똘[XZY{xzy| JLJNIMK,(,*.)-+hhljnimk_X\pxt|ryFI:/Xxx8x[GX -O_߇fWo~ߩ3&;*5ņ~vP\@tK͒L [29pUPVR)/-UbW{oJcPh^ZwTv&X,[lY#_iRī~Doߐݦ,ʋLc>V*͒wޮpstIBz)$Z=/Yef#Gqy_]%uG[z +SL6ǔ/Hk˖nH)z<'c'hin2, Ih̓Ӕ Ϊ7]. _W|)~zRQ:r_fwzfYaTVXYG.S2 jY]0h7&Hmsij1;_nEy\Q@ݐB8Z} Wux^kM~,i0 lܧ8'"|6 l ¨&^@:͋b6s1h9:`vazrݣ(r7;&;38w.۳^jM6>7}# ;BvBlټ?NmL1v:|f2 A#dOeISX( kaOOui_ee0*ewU˂n }-UJn)ߠUMcj^j30!'Iuݢ{[pt;6[&(I ?}d߰"sP 6}ź.dL3^;' Jka %=5H`2`uRbqmX8vRv:7ɠDZviͥм S6n!8HQ4WrFiΠؘNEySP8x}+U̚XBˢ|н(wSWF,mX:d֡&|I1Gqn܄ m*5bwBVoi$z$\>sOz u56evNM]MD W ]+Ih3gIQϕM-Nz_IKDj3+e2kz`q "XQX3OM$c1e":a8R/ӈq8q)u'0w*Re` :0l>Z"k+^[!%(|fkbu8z z<2{2- &c+iF9|p~Ԯ5 V^X潉؍{mW2 gX+KkjKOx4O.tGu^Pd"{xbU {{{TU@f',TuZ# 5bK{8(9ihɎ&[?'<ŋ w^ѯ`]Ym4s@-=6|3IR"4F&ŢlOv-F`I ;Ƴ[Љ>O2ѥ"*_&E%=B*4đK70Mv1Nhi6%M$S$^R% Qн~ Y(v[k+yiJBa x4ׅ= e`0C T­0wsiO]TZvI蚓GqZ+crf8$$jx(>\#-F5%Sޱm{԰%~T( % ۹8,RYA#}*DL1yeFǸ=SBT `24RVNtBfE^d!?Yc=_\Q+?fL~}X3/*}=G0O!HVXf\ B o;9)&M6kڑrѕZhıJ{+?767ޢglH_lqcǙ- $YRGB/:kjv^'}#2}l$:FZ}f'RBQyj1ϕ]J&{TLMI;H 8Uòހ[srm0LSe8@/asQ(ksa℧B6L>1mZ96Ûyk_qn%-p Yy\Iy Zr%8j̅iz1J@GgdV֑"iiJ]bQUcxˠhE; \~dCpkuIu˿%EڑmǦ}=慹Tk3td$ɰ9}r^ݑJf]b^&wr!eǛ5zeOws.JdDJ>7)fLN6J;b}}:>ƴ:q9ٛB1%0C4m7jBy01LDp_؟4:ބXv4F M[*Oj:0MO]_ĭM*@v7ֽs=6zGr!W (}fC[ujJʀ.27Lr1*I:u\ H`H2Bin'[h8oM-ҏGz/ШwDL&aLܘlxaMდo?d"⭘Q*A)'W#=l^){eC6ǙOMj9) >rvi^A#c%cVn=~mGx^pd;% LKGY.2H=l(TS]Rz)*_FtR:bx֫*BZK`4mwj "Ƭ,L5 oҧ*?%>}ssf 3bua]d)mxaV[t/Sˎ(49/{GA[{?kQ!3 bIZ&#mD\P(f%)?znFWA.kY?qGZ[ q qi}uV97\L&>C|` , H~Mb3aJz/0 gG?z{vW8m; { Ca.CʩtS{qx=+ފy8lG>N@Y~VXmDݷ-w꡵v}j-zfq & i))h^{ce{?\v- /?kOM@lU&ʴ~8ft -%yNjc=DE 6Fx}[2p@2qra|3=+5m.\4'w1D%Ic($WV4zMޱ!>pBo/X- .B4vD?Q`դ;Rvk@Gꨨ~ɒͶEF_@$NЃ9>3}z\z[>lќ}9ގgۛM yu'*'Z0y`&@vql+PCIwf#xaotrzT`5gwDD;^IRз+ ;ࠤio'-Dӯڤšpi1xPuH̼)kNY&W<l^w6v ?*"E 1 !zmhi\Zp6FɔŸ 6P%%Lt^[ctZS*['ei0-Y $mje΁"RLjjҖ45}Hޮw+8|qpQJx+V[ F@ݐoq)ԸSdo044˪6\a6ۮ)-29fZ/hY0! kBWw< aOGQ7*RK&_[ŕ~F ;8rJm'i #Pҹn;j$![3f@wg^t&:U3@1LFيqY{ʍ-N5_{8ՋxwtK{L͐N")\vv1E}Dw:1VՉK} $&?L|W4>jmZT4n#SmۋZWN/T'ى(Bn?i:Q&8^ՏsE迷xT~N!e7o=I(vZm$ </ KiFxW"#QÂ/{#.޼7p"`!D^U])ᓽGou+(O(|˸>DUARJ"h/D$gj?kߍU، jYo~6'gTtwra+,˻zp2" &*gsڸw" i VF8Tx ѿI- ٶ:dq2`\{qׇYa{ R?;|;1-J3>售,N Rup+p9jUL= +uz؛B}a§y"TҨv*ꔻi Rᾠ b.ߗ;iAN r;j1xشM5'FA@0JטҒhQ$ GF5 7kG-/JhۿIg++(l5M #uP2͘vX\KL\!ufJ~ SjVGȌ]hƳ([04(>)|jEADt <clw9Ƨsķ c`atpkZ&+U1($Kŀ| ԪХʹ uJg^E;Ƈ'j(-SMjHNv!IWb0$k 8+ү("ELg}wf3<@$ =NjlJ$€* ^8ER`e5߶^rE)9Bs;kԭowrͥVgMf8 k:@]k5[~Dg@ߝ Ga"͵.7Q;֗`Eo9ReieH~i׊v?§.iߏga+Q{?>b ǫV0iISEα@bYJb~9_c 6VhG;EŭW^X΢'1qz-Qe[ .uR*x旒E_gdzIF>pC6?|u q RqG 5IuL45%Mf eϐ=u(Uc:Yr<'0<&Ŕc;I$veP,&@ l-7j[!7C(|mEXt$ Dh[).j5}H|?Li"@wo?@q(G\C+~d NAl_垱`SKgm 3{uaCid`߮}7{QTwMEYw:xwѱV^1㡥|2EO%VRaICX7vHHIS!w92$G͸؆"ِ(ZoǾφgW]*IϼmzD9_{tEXUl:CЃdjL ҷ!BF& c,+⇝uQ t>$a7Fz>8JNsi;D'}O* ;s4g5^px++\0w{UERI1ԫ¶ɉȦCl'r-Ca%YsUWk٫Dp>)0抺Kbp-5]/֗Nex ~Rq1+gFEp=oV6غqb!xݾg˧e V+irdQ8q~[ 1V b9sR,^ϙuV&=exr`ZuWZ/ GHz!/7RnPg6 ~ɻ9*m)iO-8,bرQ=*[;!: uןݥS|6m"Z`7g׌ie|hB\1 nmHBRHƮ0k̒9c`%AYy 3&S~nٔh V\'BVkܫiFfx϶vI \:G]#suPHMvjFѦuc2&/ceăkϭ?}́f>GdK-t8#EȤ fRLfg٭T)9Y09LK0S09KIĝ#*^F5XT)̴ʶ(\l\|'uQvSoOVgL!$nCŢ8=F~:s,,Aq2[Ѧ}jLmX`rp T&֟3IRe9CzP4c>.ĵ}ӄۼ6mv5Xz |7.0:h QPч)o{~ ~ " LZ-ꗳrDaU^ǧҗ#7ƬڼmPrP}} ;dD<84h4x+U] @ ~0>2.i7 "E1k0 ̺%9 [iS [/ATo*Ŗ& fdHOqaULhƹސLEҟgKaT1v!2\75.DBO?.3$>@?!k-$fى-e92/5~S*jAl*W 9qm<#`XJs}F'XӦX}4-o׽Ό@=*]BT\v뱃ĘC@J ߰,a^5-܀i1Cv} c.[Ӊw$ l!'ډktjv?s Y}dq((^ju[VL/"X+]鶲QW`a*^~7wvrU[7' S,KnIWB7 +Lu͵jC_2]n8$g^f=Z|fhGV9eGxYm-aXpA =ptH5u ]wCP[^(:q*ڿ|NeE"t=eL8`3 4rvbwU0uaos>\F:cďNCq I6up[Q4Y mL$Y'QNuoޥH)ȤO>(yk5{Mn7CZqVH|OQ\pbej{= ڟȔ!kx׆|90c<Ȏf ;P0Ji׀ЁnP۸󹧣,n!8^\Nd,Y\%U0"#hXɶg-N:a9)JiƌmQ8@bH$/jFhvLԍ=y A =ڥ?p}l CvE`?GB'T{Y Ǐ?U~͈1m \}(.d@2N 'P_۳jlx1=PA&dchdHˈJC>l ^1w%vī߽~ג leI@Y!z7#eG|O) Kx-Pa=p 0Ɇ OG3*mì`6Gu1e+ ?7^Er&!@*|9=p/HRɹ~ KH ZP(NBr˧ ?xF>[8?i^Dnݡ/1= \F[rkZnky"s|>e-ƿw @# O %4ߌB-W9)?=D``z (-eJ!m'*x1+3wl8@OǢq8fV8RQ`#:|PukU:kxytYp൉R &3)!"ZZB]QlGn<Ӱ&hry+L:\9SlűEjۛx =Qf"F_alIABfgxEe¿0YL+ w2kzWͣD8Zxh޵4l]cb(YUwX-2{*mu!;p|zR"!}8rKJY4OAx@sR\k{Cdq%VW$zȥs;fÏH嵿:սr}~Dh_QS:_ kٸ[ǝQU5Tߧ7T<;1Ml)+X-G:&O+|;Td:Ւ6Ã\| vL xE^ 2(ܦ%ydzNCu!.,3"mmp&;W*8+$qss8-%lPd"NrNX.m"~3 X:VJ25K4=;Bw@]p_%x* e#wň9a"xŒzn1څ` 6-}iH1ˢmdZߣ۪ aޕ%Ȭa}aPW{kUAy[[#Y<1h%xIrk4 \[3(XǶBG9"~pQa> "K٬|7xA;Љ- WQބ[Ogn|~KC(ib׾yN)ŃL+%aÃmE+F$-(ބkO6:Ry0}41NČVHHMM,T&%;S5sD'(L(P )܆^2S߹0\:i›n&4Pr9*_8U:Rrw-"O0MDM/8bo=fUWP$,hu71d{v;9fE%|BJiÜ$R>jR8=b % %d 4Bo8#gq o6YQbmPHjOdi+ԙZ[569Ilks5?@9>\(inj˷G11Df!2uH6ќ+"&#BgUB ;R?ZEq!mmF N15xtGDڠK͘@,3FdM8S/Z+k-׆%vKT 524Js ޺Q.pT196|nnUe=v+zZ[qg3ф2q&Q_GNÌblm܏gh zIq@uxh}ީ[%.?w;5ٶ3b`oSL(Ȩa#y $ɼOT셀▿M {CE?|vژmHڪn轿GfyA7q!ہkVWU\8vf6}6.X咟: _OUHPmxHsRd:Ym膕c=^ yH^H5H5s-<M]`^*F;ikkEڷMzI3zj*Y1FN ptT\ۅ3- ? ǥQv$JЁ«30j+# e2ǕV" inJ4h5tr,e d\"tT! d?r1j-G`)[H졓W )|9/7%LwVa,RSa`,kTkEpvlZzCYMY -ǘ&i tLo;F3bJIZ5!|3r?a[6xeKٮD³sTRd&13^u]7)7ۋ xaw%1 s͊($em $hj4~Խ{0*5Y4j2CY;h8>/zC&y.G:6~/TfBCjDk4S7|)ZXp( %`}^}Hne%n`TܬnrtpWx1(!GEȐir`/W/peTY"bHẲCTGJ>)iRq^,9S~hǺwe}*maN<ɱ \QBOdNV8 o`=B8h\􆚐ԁR}ǒ.)(_b?WF LzE'ʝ]ZWNpsAsE3܈1MWԍK,4 ]ى|˹./و'F4xjY@voLF?E}IeMIcJ>\d݈RFiۣXP}G9LۚOch~H&y &m7Vcvn{hVJȌ8X=dbކ_$@,CM޲&+{M%iSAל~z : -kDŽk: oV$$F3@0ϒ:3Z<0 7 o`+o*E!#5Y2)g8 uRQ|3 X$kC:uA﯐)m &bS!Kw;`K?vwHC65(_D>7 $ 3sVi`%Œ"ޭI̝gB4i9U$U.[ [l{!ή'G}̖N}!Xpk1=(헒Sn[)S\"ߥ%(uwĻKB0u҇ FDjN}9_F$O 9#ˋcFt_l~o ш?+L[T J3EaHqHtzc- o3ԋ,SJ8ah]䱶k9<ǻ;2tB+$xn걯ƮDۦQ9YcӢT |x#-+;. 4q|DL V݌ \fw0u-: SjwqR{AE'L6sy>rn+,hmz1̞k]P7VxYit_}'r.+(idZt=D\EsIȱ$c SE%Q E_2\[6k˪1RՉmp|yQ79/ZC+f6/r{&> 9KL2ָĴ mOSsK_;4:ͨl srO^j$roA'viS!7#%vcZaF{q`G;X!cn)e;3ʼn4ftӁcTzێ F!)t0֧DB.Q%IVX!Mɭ7Q90|KQ|y;.,/ņYԱH2Ѡk,~?F-x$zڔ _)!p{W{Z #La0D# LΓ E& I"(@{ ]ʦD[t;@/ݺ@pRȮdL~Ԗpϓ1Epq#zh]1.+b N-5COSka)xAtqq%jn/0r%k7'R1;Zhε P\\K+"k#$30t 'SH_#D>m/$ZŚ'K@?Bq`TPآ&A}Fv,n#iSKlXr7!V= :C\kGӛ 3PM*+{L[1BYEBm YFՖߡX;YwFKNcʞjV FNdvƫ}Cz= ~E8 BWʊzg=2ѷ>ʕ;t2c4O|2a$n@S훲4[e p{ZgE)֡FʆM`YzxM^sFp2TEG zP+JSؽw UfbдTؔnśZdd<\;)nژĔd`b%}X|'c޸ bDE5%}k֖EI* 戀"GW);)%p Y*e_g.=ٙu1:Yu9(%hY:O0(dIc^]bn,kW?$iBTcT0{37!hWqRƩEj~Ӓ$?۵Ѕ LT+?W|k2]]b]L7xP kma{HNtYjh=*! $L ̈![k壐1"m4^3Q7 ,}?֦#y ߜJMX6XQd=^1=.Suv$0V_>,ȾZÐF|hKlHWq>]l䟠T}fIFt]Ea<~hBc iE)b,KT1>\N¢4Z yi 1FUKI^~)<YVD=Y{#urUϦ3Ə1${K'ŧ1[3oDl7AUx|Zgl51 $騼HCp,d@h `rVpi-#PQūu$& eD)Mx9g/.S^Ma]2Ir[Rվ"_6gќ0~_lT"1z3}\ 1n`P͒SKFU`Zm|M|/iԀ@ #Mv cЁ۷>|lRga\iC|RdMz*.n!⑋j0lǐ3c`]{u%$PR0\ɹF*NJ$Y&B4k'L_fL{׍\LX%8Ubd;9'_쨘#r-8+sU;|$'T|[Iqh-M"}T}^ D^0R~)<؋<2/sM0Lg4a}80v!*E.\y3D@1&)q aEFBK=j8S~#xsH,NJ6|AsTR]v Oi.Dc\=L[ڣam H.($o,؁H17/Sl+ij,i=lOdž.YennojY7hƿHmT{ %J7kX@~}UҺe.G,a{41oRĹ)uļdN7`:%}7i9Bଝ8Jy(&&u)82q͑(!lwpC7=Su hSoC>1U8rjG?Eߗ]z|J7{Fi=SERBg ?db>4oHC&%Ԗ=4?Ҏ7zEm2:yn~"@j. S R!l 7y7:fSA*9kP̬fĵqK "!=?te;0 fu >eNvyJٿqgjֿqB13n_n<3E N`ұHTD:z~0Y؄K4nGj:ȤϠځe%D} *UV=C7-;4&;q^Ra~AR\ W=W˔J$݊6 wMТ|$c{1p ?fZz.om?4 QZp0$+hZ*Rq`oT$tffi- P^5 _:2V f[0iytBdt5S>3a*./$%?gG*X:;e^]KnҢۧ(W">OQE?;%f?Wf"bL_ϝ%N]Huŝn1 FW'gkNzi}_b~oA`zK ' y]mzSICE/glL{@*}NP 1=W,TxC 6Ư8IH"GѾp|VM G ssT0 y(]}9?Yy^CtxLe&1{ݏzh@w%z,W^Xo|b(&Gװl/x;b{]&lVaG꘸g`I섧˄09Hh3I16H\v}@?'m2Ha-h ],'9sUnz1 ]X#{趭X RUߥXKqX=].s0DZމq'T0}?NYM# h+19HNo|s ?E OtW 3o,Bg,(k)CC'l}BV'?ӀXfc 4"'`9 +Rhخ)il^V^|05k .ӣY 8mhѺ9%nW9g)θV~M;Tdޥ ;|onCh|R@xZRc;GF$~$Ae^*"Qp\1`FcgK3e/IL0+pUߌAz{;kk ZoJIp=5Hsm~]ű̯_K[se)!0anV&-y1UhE8D[mN'fؔZbjW /1Ŋ]֙:^Rf^Q=ZK}^& DLz +bLRۄ|r (ۊF PSEMPM{R>S ?#ջ#u΋qcJds9ߕ6:N'00n ȨA-]}C^]vގV.ʱG[Վ9 a,DN/O\ m0[oڱyTPn2u \dtDžN6,%$y8 RQ-gXkze$NJ/4ɠ"/BAX4&Qp־:16$i!eu%nD#+&CPĶN8 !p#Ry$EWrkF8$m)s|s/&Ч"t,7V D^5KQK>0 2WD^QRW343t4į&2_p)ė6<DٱSG-kV̥!&ie癣pzD#Q$w[Rwx`.o}mm拘n`v:yW W[F&8tLb}Tl\N o<ZR Op럾|מQ]f›G&P:$?dʛ\Щ%A^i459ՁĔWy3Ώ@Χ̜G ~c*@!狵 u5gAm^[[-|߂@A*2 %Xp1v~+#綀 kRg$fJBywp0Q|#$p|0a'NX9d6^#Q<.@e;aQJb9xOs;|I 9Θl@BmD9g?rnPߝ+~_ӘBԯ&}s30w2ǣOť-c0-/\T~*QE fI=}X[0 MDMbXGlԔ$nJ $3~T]VoU[bk+'R办5:q>0Ytƈ} ^}QA\FʤI-ƨobm.J)¼YԽ/מl.՚zm{[g{s7jl%8A u~"gKn<Հ5Y5@owg]sx";Oȴ ܡ|2GAR><ĵA& +# o7;}c4uf *[{& C1 S5^Wac̞2iei^"G҅}7g64eV_K"{'@;G3{ .@(Yףwm8hGlC>-({v?J:/w}@0i#!M +D_뫑`]b8ai< m\YIvĢG~hվO={2-A~[-Y9B&1L)aal6߶5X%SiZ;/,`y6FRέ&XRkaXn"(fښo" ɉPfAЃΤD1sKxqÐ⛤q(_ո\7"cf!doBIMIa6hF4V\%}όS:Ftd5 5ӣT2M3Iڃ猉osF6NAc,]v^a*Dt d'ImQ" FDNj{'Q#JUQn &www,_-0f Q' (s&0 ɡ^ibFG _XJ*:H$x,nђy|)IJXvdbC_^%R PR> )˼B\TN+erxnL:j C+/0׌WAE"[U ucԷ0Drw$bO^HcZ`w35٭8 u$0n{(39nn9;1:1~Ǫ%+0Ósؖ_ ̮kC)g"+g5$} s=j^6Ӌॽ"΍VHY\s_0`3{yo_/=dA9-~%E*τ"v lfbnp*D\܋%{ӝk!pBQ!3e$}Дt07 kr4>r_ⅠS<|b}Vl7( +>6aJȤo'nݱ|v˾Fm PCjB90C5&,FU Du!)gevDz;;d;[B ӎRH zkID h9⁗l`׏.TwM6*k1HɄĢ4<%&11wQ28QRЊXa܏^w%|=QW׉!Qu!RD$c̋ HD/5)F)Y8GJUoMaY6^W6 SEe`eYy4@9ŕE æS#f-mMm05^ a,}ihD הGyBͅbՕZD?`vwД.  30b@GS+GvRf-<eJ|.˙j7%c'Οgv@aI6NQZ\yL)R^pDfhrSl*{1=7ֆ9¦-#4\_Lui1[ڭՆF:},CV}0B~\^vE5IqNmxXbkaSdRf(-V`!TguܮH ~ E8D9lG/ˍE` 6NSR˒2tŲټu,bH9Wy4ډf..sHy axG4ʙUh#ڡ eeķssp\ 3-_@psQqw79(9 ;qW4ގ,wg\P5I#wW~S*Uq.n|,$ꚍz7Mw{O7q@=}@&8x[1GqKqIK4i 'ƞԛG iyɘ< 2򹩂w0IXGd6/skk|S-l ,yJ> II;E{G>H( Weh=sWӴKXQ>46JLLk*c#[ /9Ԭ@{-OU?|T?E_p(mtk kMRT+!9"R^[,"VBSV~K.eL,s )J-|1G湚$;d 7}_YCx`ݧ?t/Ozt\hrX tnu vFe a E _2,JȈ?}+Zwm3ęa&}<΍h&lYGQjaRGJh焻h~) AۈˉXmg-DӘ{5R0CdV @m}E :hAHlKt,`q$ U3뎫 TS3j}UoLVZi{&2 npMB^Pƻ5p0`'&BZޕEwY D)^ȼ]tP_)tj!omQ7`*ۂkGrկ%Y䎓oEHX +eG)u ?Ҋ->"kD,8-qftﳗi 1̐ țZ] d?TN}"-wҝKbs.k~uҧyړiwKJ~esuhBBan2+[tp8 F6i#jIlfT]jfTA(1ĀGD]@fr4 2ӽWKFM3M ΢4Af1Һ.Z\V ^ uƥIZ~Q9ڋZzj01D .f/ ,%VYL0e !¿`x˔nnL3ݐ4 qO] 1¤Zfm@@^""S}=,'xu]3)ԆI%z}WVXr@?:e)cK'9xsb//\خa^P S G7@O=\ V{(9' Ň-Dz5Zi6_x-s(#9,Q& ֝z ^kb5G@xXFVfaҤ0LZ,07;ʂmr ZJGUhr csBg>|_ oyU2!DBʄaӡsV=x)+ܺ.);SaPpIf^'/iZZ8TKU8@( ȏ yN]88vL*uMfL&LMH*.5E/H8)]t;[%+mz f{t3l-g; KqX y;j,&+*0\,Ga;JΚXk=.MbP5B{] %b#}ո f,X?d]@poob^"?љqѿIŪ+޶ljox_V^3EJF{ZR]3UK*5X&gâOSblS;SfJ>?-u" ^`ɁoIIh(lJ,;;x͢f^[y}jܠCg9}*&2F}7cwiH<`+<L!EY Egc|Mrĵ%.H: wDVf\5' TG_{F 2?jgI≔xyKȿc+Or q:*q27 P84ް*?=BԎ<1 6Պ+c\07mc,6#e$$pV)U=coj!yrat/³a5 c --t7c0_b^\dlY rTu ~!6 ,o脩9|Ξ: \Hrly.:)K:3-HD2v}Q1[|Ael8'y)`٘2&pdHssJkj(WNJ^{gT|+" ɩP RtHЛB][g>E]%a"L'2GҊoAA֍8t_U0^ENM;S^j9j^hƽ@;˖ܨ?8Dk~^h~5zϫ+߆sYY"+q1\scPwOE?~jbGs_+V+OH֏gQ>1LJX$#bZyࡽ2mW>4JAD>0Y! c3u+"}N;[q*Zsro3=+7P"] j=ϦJ,e`d{AC=,Զ-0R@o1vR8"XU͕Xml u~ ElL΅T@\5CW=*d{k*OJԍGs[Ռ[K*=zMZJ׾O\Տ ͓J{c!xH)+.6Tr&N=3TQC}YdCs?$IP V94zT%GJpwx,ď,mO2u5S0ޮ$PIF58?ٿkEԓi[:%yFM?;pGR3yʧP8 YhwAPOܵX98#b3|zOj։c$'Ұq_c-xNkh;ٞ5EHٶQ(\lj,g4gL Fx5J Rc}zUrg?/WE;ԕB{j;Vda?1{gYHφJdWgE^IJ̏r) Σs BULGBrHwƠeJAh+O ]T|}qM^ID#A[XC!Q|г Gg?5rG1yRLW zb$[I=kHІUtޕ #;ֶILm!T';TWFRd},Hz5plv(u\Lwz'?F@#g,(=HOO C,Oj3n۱`ghR7s7ҴrmjDefes+"E7ό`2/z&4{W ijO;U T$nIޣ+IazjX#2BUn@$t͹dm+'_r`:pw.\23ZKAI/qUAܺh?H/>`UB"'|`t*2-hW(YG$)&]CtSvz]1jsq-C Xh˄ ֭i `fn`ΎW s#">Gꛭ8f +DHe (Mb<֬O(IA 3` q92Ҵ_li&&x$M#  bmsNET:Z "JpW.pF5RE@;N:TNI"e[pbg,U}zZ,8v™G(J0OAV^Kœw#rEsT].XXsⴠxpp6'joS3fIcV*:{u<ՋF\Hce`[H[^[~K,!$@-좑Oh8!^nl6P?_oj.φhe vdA2Lc?5er;y Ւ0C4A'Jĭ twgBHh(ֳFv䎼 sWUKUsқ.Ym>Q&3L۸mýM.2 = nJbL$N:i{w^qćyW \Z, hchWf, jCqM4r'I-۳3tk& S&..V6Y<H%$,X߭G7iIsEJ'GWi>b$:g' ~ȃZIl&x\`jĈ$a<.[ݕvQ`֒ sqO{-X1$g׭VP`n?ZhiYH9$q =37!I߻p nюol,枬 'd|k*mXZ M֤,𝀂JҠ6}zP*FEFQZD$z^@FhN8pNzӶ60 7w+wpO5V7ת;$b2mV'qcҤU@~byҺ= #~|<Œdr q\vťY+DaHBJ|adʥ0qy>%9ʒx_Zև5N^TdΩ1%BIEbrt`cƲl4jF@Nx>)=}7dx.͖]I ?Zq,z&H%qS]lsq%V a~n}%3V`Ʃ=e'm_OƧhVB$Uj1y ~o,g *n.['VR B܌"?"Rփ!ٔO2\ըkvҿr9wGʞޕ-pAWMx J{S=ݐLIYX1x-c,-AI_/Gֻ'$BInTb㜊C }9"9gfWّc+SvV9ۉF!p+~m;`rPO4\9!+mK$"K9QV)+*϶Efv@I6oC h[,+|_jż#HZBܸQR%Libi>9voC5irDي7P\Y+=DG؋baWըAr9?|z-Cd2LB}q-jmf\r8jSTgjN<޻MM*8fp߼~{Q*_eVA`?'ޚZJ;QXӣk @=[aGǸ=v} f:BOl{.vZߙS=? JDܤ u|AYq#F]JWIDxF[Co#9ˣt [RK]3D "3D1$@ORjAJC$m;G`*k*d`O;HʌosIu(|~0o{?ݬlwwFV_<6.:q)UDҥ\ȱJ#emyTz}*@!eN?=ȭ6qȻYfwk [Q1a֭O-UF+?̟gc$KzYkMd΂2jubb" r9w\UQ ,$gV NrAғ[\,`I;, kB9kX("y·dQG&eFxn?Ye*cqߗַLɷ}刭u,%*H1@csYbR'8ԏKltL aaZF)I_i'h|Lb::=jْK}U@N80k>I : ,;V,o3mve<}y%}F.ЋX`t ǦGK+pǎjtkVe(i@+m%Jjd06@ 5 &Md@ &;CHH߭k?!7E\3)+&?2~^Hx y@]Je b+5ikdQ=ȪB#9~Ds `’v Ye?#hog1`3$|E=EToVsj0H$P'po/w9)IV5d2FRwǥA+fmE`4,xٻF*=yIZ+ iO;BcN8n0L(8}iDLX6H*rpyQʖNͽRv3#=U**3| 5Rd3&K;OApֲ)((՛*Yo!'  _NxnyH[q_3ku&֎Ly){V>g4O2CbC~"d![*WW;v иXcUfOZYC؊iљQY2a5:J>մgmֳ 2Mq,(mjі'ؿ1q\@p.d̹Gz) ճlɐfu}$-=ݍ$婇wqu+gm0yvocX7o^alnd Fc?Q*K$SA4>aۤ*.m]k.i)q0H%CsM[)dX 5"[{lHNDLD}6indQkT[1c $dV=4(LQb79{q,(w:J$k{ZBhnr؞'-1??qGmIn ÑrU"ˬlf!6y#RgKh yYIBtz;+ Q8Ua9ޥq'SxH ڛ| kIHu'P7M+YE-mB4&gg9R}+!8oqWtȀݑZD cIʖfvZ%E4jGBkA ABg`q=Or;:T@}ѰBx;V(n.~DX[zc9I7AܹK3IFfXy` IaxVݔ0Af[- Ҕe\B1Q>k▗.p̥QquAR::#.HxFGwn`IEy$=@ =.LV&2" ѳOVd]XȺ-hM:UsI>SЗoMM#hjq5QN ~GLJPT =MY]20zibaovvPqQ,$m ӌU_jQ̯h۷5&M"_;nލ:G^Gz UU#ro=Uc3G_upjԲ*ݪ!wl]QV2r[E(#I'w`aj'kYEWT N[#*ln<&Dn7Z9-ˬ8u9ys[Ss'97|MЩr#|AuM[%,}F^ LsJeTP =2z|-G6PpSoTٓO91,0`)8)wcayhpz4KRRUՎ9T>͌O0g/ (R"nAUQa9vg?֧ v=CJA8?5JY䑴R]B&UH2̿ŃYJK" TdWNQBn r29tirrǙ6v5LL1V]K}QNynpj=.i! P?՘0$~_ ˷?ֳV"sF*gHI.cu6cUj/l@BAXh_$jj|߰3Oz6KGXj2*>rͻS-H#=}*" rpuRցuԸʡI;>$q 5 {㿭$w+-(9SF_ևE6֢. l&Q0=H펔F4 l@>@ֹjGFt|@DX$ȯ<}e-DN>8}t5ʛvH#9yOlM߇&B8P2k܏ѵ>ĵ>v*ݓq[04e2$`Hrqǩi o ތykU^w< xҶ|FֵmDB#~{B8Ƒz~5)gD0wG(彀YkA(,+ 9wcSE#ȈF~A>Rf$=FR?( +F`mIѴf7RY彇N`2rHEHy_a z2`KB︐ YQܚcKYq4p8P$ClDQk۔!ir Gb;$DRCa<9J*y qw2\Bfc <峿YDdHzjqVڭl`2෺ҲVU~e^o[o4p/y&2W=s#Nӈr14FOv S&Nq )sǹk rq2- EP$n 7,yK`q/{TJ"3'q  $4Kz#0Qmr}Zs'l0#Q "@M~dvst P%',púAѿ1)5bb~̹SÞ\F'(9zrb6gϓq)f9#FeG q/HkndQOMڴJFc;C1$@=ڥ3[m1WS8 &t螛V>\7i ˕0}E\S{=1##F;}޲ntm9 z{ |ܱi$呂WwՄӳΣ#G@=f#XYIZ|lǢ]qAعXȸ}Mr?g{m$pGTw\X5Ȁaw>Rpz]s/b["8GKyGR{ lKyJ[ly#{tI$e\;d1S4$F3+Ett۵?w'.e?gZ@'׊&8YD-Pߞ8pAxcx涌u Dm1fF+匾>>VWVf v?N*H0c%mpsc0[G~R ҢWQy{n6m)UVn};VD)le@#ڵ.eyH-dGF=kF%Yj:ך5ecNث]r9?J'vUt 6ZIifܤMu S6[?0,-(1,*6?!'|8smY]!*rAݗ^G.Ac a?7׭97Ԓ=Ձ2(~Z{4>FqԹ@# 4;eN1oVᲿ{ғiE`N5Zu7HYRuڝ$\vT vT}[14!622a-.ܰruW<ی'N!twd28ZG"Ͻp lVV;AcuxnWŕ$I>Dtڶ&Kn*/ r*d/ s^Bʙ QMW@)@A$dwu{1S+F63rZŹKx1y!ϥur ?>>Ձ|xϱ5V6W4n}fTCb{}:ҊWV8rͳUd 2'ִbr9#sZG);ˑH*2y ֭HYd d8T"Ơ8휟RE$'lۍ[Gw]lO"7ڋQʲݘ⸙Gn?wYWTZ|bI;H-%r˟j -:'Kmt1v.$yD5mK 2n[ץc\$,eD߹34>m^U i^c 7s WSʖ&-=F8v. <Dܷ º)fH̝p~ҬP!5UWX4+R1 煒h+z}i.66p>;fC oJ;O| Ӛ6#h$ki2݉#/CJo5['tl z槐 P13=(;E_6TZ< &A ;*VJ#nHXͻI4C8^y"2ǧ]+E~cI=g]YG9#dzt`ճ [4E r#9⪚瞝^hH@O3O\u$W$1~\?RH D)zenHE mnwEWR+NJ-K \H~Px#<NsQ};J$X@'BfߓGV ΪS# c\M+#H_L5˄eX<|9r;t\AI.÷#cC7*++ (d F޹7N_23f?J҂Du.ucۅI@08"N'qnH۝{SK/~U |1UX#SD<%XϭOol0wFOzk{\U6H㧵W}w-Vg/d8~aUUB܂06J쭆 sT!b9sR#uO\J۷,Z+| ު^[ΩjhԖAv8|0*CUۡNumG7QЊEpLz$F# Q|l-"n$),2?*cdLlp$WwA$;]6Ta28U!@TԓckȪNa !Ms3oyyws66n֣tR6F]VE,T ''t4ٯeoWc~[<?9Z!jlWuK$D3zfۓӧH"ݨUuR5pX-QjhЀ+t?6YU]~qZ<ϰH>89k>|$F܀rrkgeD~R ګʢfn}H& #pTN%CN2Iue&mMi찫-E#e #iѰi ۵U6.F`9Քc"G1;r߈,$o!7:}*#B1URIvLxdsSXPdtǵ`禋b*,Ȥ_A\1]%ӻ=7 yMq Y_:^@@'fӚ>p;X2|܀{WAc9?x2FGvBImek|;kQa@rpqֹ25BXoִadXdVF/s}l4 PG?^pnpH[qOTB2=ꛑ,oRk'[A}h5AVն>2 62<t[AV$jE7<J@KjYC?(<ӧDբd>Ɵ+BB q@=>jIIτ"Nr9B0H ~ڦe!`ER{}#y#ګ3 f5D?6}I̻Z|WMcR(U|c>[$p@݈zi"kXIÉqOZX;|$^Fi#@_zUwɅG~n/<I+cC̄|{ KFT$3݅}>mv%O_=:kdN6̇Q!@d.|pozViKQF$ID ޸8=bP!]Oj;lC$DIsYRca9gc+RMV"fU?eQaQ`XV&M܈0Zspߎt;b'OO'4 x{TR<B둅>&KCe=¢G+BKwOJĊ)Թ* oAjS -=Jr41bvbH9+@y I .TeREhbT=Zv /9^O`=*EI2Pls+%0F&f# [;C:m9W#MQ$b|l1{}R5fSW>D``Rʽaa# yy ¬lX'vnO\Oj~  ݉ϧD[}Ҭ7t#F<pr0XPjh!1ݞ*ĸ,IrI^xz2m6а.$,y#j7A-IrfrFpKHYN1޷^r+I yCЩ4`+Od",# IQNqkR& lшDzӏVKH9qXa3GcsW(9d`N BΊ_)ë>p݀f|;hK[Vژ*WG_=iv3!1<#U#Fǒxӊ#$nOdMeMGbq댘znG9=85kB[0n==朳cZv>p@}+6V{~&c0 @j˸ЗV%#?J<~lN([F7˸<ک(I*1=Vdl޹?1< O-+cLVWGŹjUVݲBqՙUbڟ0R$ :嚹T`ԩRҕ٤*֙oʼz$uWƳzgD9NI)*pGjba`?/=j`*c8"9'$M ؠMyXnrhG1 81P6fF'/G<&8Swݻ.c`[ Ud>[) H^HPTF9m1oΉzdqV_Z`k.Y$N*Yp-=![DŔ`j0 U,JZ"Ct" ;O#h<}jؓqzRnVaZcHB3uV8"EQ*AlDڀqM84i"rL\QL샅-Qګ \z(egU`A{ MX,nW5Z<8zTn؝>aVrB㊙rNBE"S#֦xUpwgZ:bp9 RYROzvI(7: VZ<ȧIQysH$fHӫcO-#Gr<:U9bʱ#_ېyIR>YAVU\2\)%~]܄aVQ'=}1#*۲Vl4yjN܄*eʌ *AGyUd9"LwX&Oa] K4lerIo*/*:L~t;D/NxMj6'+D2\28pu+AnIBTQd!Pa=ϽiC m'Q=a\M4:l>X5]4*.X{jA'q>W R\PBzȺ`$; ~dǓͽ==To:ѥvF>†!;kRE ' q+*I8Z],w"@GdxvBY5].GVW0(;KK$>j)kDc£y#U2*ґ^J-u]D!"}[M- 1Vd2v'o~ !l<ȇ>hneq̍>{{֊C|蝢|BjK$Au>g3'a_kv{{nJ& CHF/.aV,c>XGr޿c)D\oتJj~EVLFJH=bF UcPq ;!TbrI#(Ī.qZ#ȐAEb<5mI Ew};VRg* z^zhoh@G.n 2d48e 29 }~^7Í1~`ā~?=MboZQr6쎙5o%>XF7spX)$B8@zcLG8e~a~4r+_r*7Vw싸>Vn?8QH7{v2]U*TT7;s>"?L_&.iz<(]TǼu5I!Cl|-$1:;.}?|J"0bEVwf{m6:QE'~e gڣ(Mή)L^k'i[Bא^//vNJҡU}ӥbll%zNڄzEe:nrQnU'#v>fUˏ0!nIq+$:rw:iUN?tWd?0nqޜi{V櫺wBJp9y|V6'q)j FU3ݞ^r~Υw\jOKb +gu5}Q5_jNGpkFH/:Ys .'Y {rAnUqcfʆɓNqr,['PId#qNyf-OqkWm>E5{V彅>цXYܳH>cz&Ԣ@ά3M6Tv4l>iq~Kgʲ]AژG¬7 Oz{vKC"{uf831iǥFl<$˜8)oԟZ$ge+:A]"/z b^<ָ.ƙ3gAzl쎲J)lܴ·p \&Og2q# l 概fH&i¨JP.?gǹCXS5<{XݼćvjySː%A/hR!eid`\r= V*ÏŞP|dMCfb ѱ<(Se.JKtv82ꌈ:Lc{ի Gkq9b 8ǠZcA7/h]CĠD%,V?zBc_R}gw4}.<˃.P#B~T,I_a5 q0 )8A:X2#y>PwKrg 5{u̦ @!WePǏq=땸uI]̭ *Տu^&o*;P븯Tr5̒0U;^q•MU HU̪T0ϩ5} x/ޑ?OlzV~s RxQ6_fc+bK_*i[ܦU#2 G O?`F^?>sti%yT纎Ha9 V$Ff4Tq5k ֩ۖerz5(v>s3>k% fIq 3Qz+n7'@W;`O|0# 3(py9W.ebH#ʢدDSP2lg|Nm3NxE^#-'x #yHOZget%=q`rw7g%UY]q[*``P҅٩ Ue ~ճo?od:du5V9?3oۃvg$4bXepJ HmW>baoDoxfPZ?%8T湺a;VUIg `VqOLds2vCi>߻좳mH//#xJבg1Kw`/֨oC.R?5R(˭k;r>Rz*/5 ?mxB78Jf@-w 1ݍfLV#iuk9kvFtEjn9}]֌T{3`lc2]{U˴B̮R|ETa5[)VW$n?{ RFx&BR'V %&|̃jYI>!dp28ޮ lxRmFɕ5]K3@O_s]_.bqހW-u0P ;oe7tOuGyrE9Ox"&U}1RI3Ir 20ϵRv;>niJHGck.Eu^#%Sv*-sX#GR3L0eW `8?@ǔn"7F@#𪆲Ԕ,YضvFKcǸIC/`y_ǵW)`0라z H\kxF|wl| e >ƥ}2ʞ~@LmNqMJ$e${κ#;j5`IbV2wG3KFI\=FMD$ C|O?; ZB[*Z3@6d+yS Aϱl>ZaҕܶM\y0̸LqUEi>ߍGuQhL,D"`08kꠀU`{V˨jG0GQJ"tҚRP u駐E *k*FUEg;jvxgGޕ*9#uSCyvZ RFϥaD''jD*UK09>N5¬^~\RpivV%w >X(IaGݟҩ)\Ojr _L pqoCU/<8R,U|Y&t} p@lp tD$eiA Ue\b`-ך4B`xR).Wt{\^1\|1JYo}22\ sִAmNsn?Ҧv*Y+7`o2PTmmNF U?|1jZK-7l6y$sv"*b03ʊҵd\F*sczЈ lOzMٛW wϽ;{4qUsU i8$hQ#1jc%y R!ijjěUp+4U`(Էex1*'ǩ4ӱaPnFL俹5)vi$:(A s?6oEj*Ҥ ~Ke<ƪ-=w ī< w>v1Gq `sf;m3V5qՁu窜$_Qncy$#3\ϢUZsnr>H~4+"P3ڠ|dnhWjH$0 P9'QKط-Ĥ/ V4=aM~\ s)V=T:J/-Ndp>H}J]-l[̓yoaTmKw݇SŽVZȦe677eH9).nWo?\iO PûG<璧*aS[wRH.G<`Ut,K>gT. l搹X#eG5 juYQaEEKoSX֝cnmjVe,$2zIDI "5beCsƠkA9&"ÌwcXN26.$%c\>>ڴ<3me`%l~i%Y6Jy#*熢l@J9MM̥ΞNϬ\F?3ojǑ$vD|A%S+b|JLzsY5 s2:=+ټobH1mM"5dF?x+"/ h @cMJ2 '?i{-Ff'L) 98C "؛4<`;e2T=Xޮ\*/[7n`E"Y+&u9\a&Km#O*$"diU*H<>VcQt1*鎟PyR,pp{UI|3/\RRԭ2 `gUYL!Uzm!]28q.@JDžqF臸kf%%WpˎpInCp^63+Bl A}:F3npW %v\kzn"Evz"F@n\6r@;V,H V# B|ea?OaV<Z?*oP6oOƭE؋/g;5Wlţ]@p_zORr! dJǁ*B?WXq OOs43eO?@d 4P>iX| TՏja%njFUlGG4[~S~_oqeY2yGKn_dĖ;}NHR },©|{Shf۫B:-\okEn\5܂OMǷS! rt GS+RFn?( |#Qk8mx@_/[R @ (PԎz 2Ż>ZlK v$FI?*_#0R2 pzzwuN2,`qZH1w88aR=G'B@E!GpڢM5ML/ jjg^ 3@GoHbPs!'9gŕڳ'bŹ;Y~쏗Zp<6:HHLoCIךqj*,I uLiU9FjTFC``B8X8ՉmB|UA rs}xmcq76򾽈ҟ o~*veRȄ̓ 6#,lC)=fb S9y"]Ƕ}ٶfj.n7pz߯#6F6zb*PQ6lT8;ZFɂ3m6zS"0;v09T!줋1ӏ\T 4/SJRCr#vF,a9ǵ^hTF\Y:}k=4"As[C 2ʛ\d0VSL`0XA3֫+_ZqI:bծ %u##(WjqO-XOQVLKw`OTa3rI 8*0H A޴+GL@s!o,5x)2)4G9II+rX:Fd*6U^QǺԓdm~:R|5+;T;3M +c!6j.D׺GU H N  wҳ۔8=r@WmYV5yWoҡYJ(84ؘ@R As']>^1?Z5fkسm\s|Hm=GV_(R[}EQ>a-8eӥLǺaf*yUޝ%.T3(c+n GC! HIFHa"cr (!N0= 6"6ܕf!$tWr[r|zTPCmBc9 H<ߗ+()#V,ՙH{f o\՛{`$]s o%gTIg^s&oV3cBVtuPITr:f3$߼8l9l ɑO@)CnK[NiDks-c) r D{pd$(,2/$#ƫ.0[JaU #*Yܞ*-b9Ef`9ڤd,HG;SPzt vI=**UIQŸWfj%C!Qb0OXb)#*gcڭk}Γ2c 5BG(qvKS(Ugr8G5"$aFL}TlE.YTp)sǽe3||ݟv#v ;g~gcS@o4Efl8G5: I^v?2LaJʂM߻zj5qs7fsڲFuV 3=QR O#=j]=rbN&'(aŻS%ub0'akdSvth 9 ?p[@b $ɎIR ͹Q{{\e-u7q< n% ܚQ ỌqU-#.$Ua#}=VOJadxz V6$ER"Q$xU Nz|E$~ְxM; w>եi$ 2&*y=i{v2eeqjCʧ~0)n,.p=;kynn.v(gl?iV-bOsX^\69''օGjjVW ;i&Z'%,XDZ}N>NǩT\7٘]V& $'eX pzu4ؙc`oGO!YEۀ73XW{nl sm)w`D8N(#r6<5P+szJ''_ʧw2GwBVr vq*u\rFVl4{UIcmąfe<O8kXReeia@E9{gVeb-㔝G 8%GzLj0rpzivb\T#nJ*:m؏Ze Q JGү Er۾vn Vm[aaAV7f$+.I|u@|Bl7%N3\7@  G̣U9ĩ,?! ;e$ucX]HF6ުY2Mt#Q@%8R#zytK̯@b߷gҘ^1#md`,eKܠtɪlU4y]iHv SvOjI+u7RԮ&6gp˩ƹn'DzVE'$m>s\܏rI$KWM|\L/?/VI 0;®yn2=DlVc9WH-70:0o\ ̧㬤3]M0LoOʺ'Qه@ ?N-5ruп]9iCto,6,s78y,sdlerC3O½dib_Lq]Z/%I(z`XʍO^aUe cݸ.?².?}VwLɌړNZh3 \HA@+e7~@#Vm{sp=WQ0U$;j^Dus2}䲿'YB=o1rbEU%[=mnA"3ƒϯҳƄ;P~P V#TgnTrO@=lMse. _n좧(+lsݍe۾mAMEҼP0AڴqHOSLYuiHV=z K7!ߛ TSRil;o}}Ho].$Pǔ8}*GVHvB9HT%EV?=wa"ަS!.#"įGS(q \7;a"Ud |E8u(dɈhLs5R<=.6eQQEđȭ3Ə;2J^ w5x9%2(˨?CQԮ̹?j$EyNC@+֭ljtAݘs ^B0X-'(lkOZd{8b7 ۯ׹˅FPX܈wA[ #1(e`*?cT.EdF =sJ=s-++us[s?&;+chsLjrRz{/:8`l}*F(A s#tĈDG{B+ݴ1W 9ݔVۻpyusnaTSs|}JXĊ;y_\zݘ88ݚ[hr2 :qǽ,n۱gQg:d-? wyI,I:2y[FrlUٟH`F~,L)$,+O;k9>t Sf cֈysqy滲܍֥1r󩲞BCrw{e2 hd2=Z4_=^$1p6u>ULzX#c@G8XMv3XL?:=WүLDqT&:dg9XڰU$*WrN}jW dUo޳x;\sJk-1H\1<gzT.R@jVVfEeb{OX;.\*AYs ZW5Ւ@X$(^a4ͱ NP6 =+H\[&ra,q~7A=q\C;9.z\- s֩&wP<'}Cu^iÌWO>LhBZMF?N7dJ5>k$sSH<;n|%y9=|d>z-7`)+8ҾZrMeP>S,OWWhނ .‰W+GS:)l Č>GZ) j9(uՂQvo *%Tc[v #FLLkk_ք~KBs6+|}OTYSiOP{ZV7SC3*6M0ex󝽀AFrS՘r"%ݔIyyOf\BeYĸUT5vqy'ܰqٹ$$DczRt4uWTQaT5ϭsL@-`)l#gkSPRCB_(Ìf߻8žw XDEc+rVKkswz} ݨ;So<[f|ϝُ^i6Wn]ŢmMrwb8Ѕeӎ ̇v:U.,dx>ՔU!y+-ǜz ;*E"?:+yل6@붦GebMU9A-M)‑*x5AL%cxTJQǗJct83tIjeN7MdQ#` I/YHW''Ӟ*k0YzYd!C1ajCk\}D`)zI3*;[K'hUXT*0I,^qӵd)Gܕw dr8{U09.댞cUv[d\cp~|F zs`qҟ, *DPD~\=z#h F \]4.$񍄱|1d72Ƙ(gץ@*P x#e@ c?C[FͽLteFwuF# :gTCd9#x=EZCjArv#B+@IFj);wtjY1U X08|XctS\DCɊyUalaVg&a:3Ґ_)͎Hta h^wމ"܎F{%C#C63ON9 G0c֦PeANSk>ZFb@#9\;ʰBt `2Mr6i#hܢ r1ӒjMW'JLc?nd@7M[d6Jlù>8]fGzmLjT8jO,C+<ƵդdZ^tʶ6`ITyxvګs$q|ܤdqI-ƚa*tM##(YnqS+}>dlyxr@ +qמb| ܞqYWBbܾJ:9G}4yTڑ ~oa\/`Isc֒T?2F63XV]<}sWzݚ|1b6VڙT:ךQ2:+"݌Fojq'˙$ 5_O]Ȼ@pM?m-vei& x *=3~fǵeW^O,nr2=2DgeLc&WUk#2xV{fiق, ;uV풁®FV88 S8QjьӱjBIf>}Y&Bŷ!=1*b-Ϲfvmḑ n [-`A.EU%\BV5 eRylWБ/}*ҳЉ-.[RZ7'ϜVdVs?|z T/ER?^juyģkOL}zU5DV0Sj+Fcd}XUWC*?xS{6@? ,OSVE(_*\U۸AՏj$iݴǘ+c 6X<´b<‘#*QRQn:N~͝^9 6dG5VGD"ީSl%\r{(>,Hۖov[]hsr؎˝ |7GpA _sZ~DvYae}ީS(͹#lּ 6eÒC0-Y?#JfE#]ȇ : 5'1qz]-]Dl0j5!l'Кsуq!bF>PXӯN umĜ~5\Yn۱Oc tW%YWTAZñ)\e]-oc=1W=϶q ϯzI3Gr{xM%n^FLabGZd&:bC)QnF+ӽs+$YgQCsP0I`2[9& aHC37'U\3QNsǯ\[5m ҃gl T@~u'}Iwv&@ϸwDҘټ1OAfiY\9[c}k'kTN1FqI"dޑē?LmVeC|^;KUKrF39h2d_ZXq9X?^Y$hězd}N+,SJyaGRE$.6<==ŧ\OmԜ]rلHv!Nvsq(bN SsqۙUY؋?KWr&оc,'|[pk)"Rd7^+tnFiI|rWj@L9U 3$ *!ih_Ȳc1X؞ QC ny%}\."L SG5Ԗr%eO,1 `ybqb Xo=i$rf>Ei6+w6GJɞf08\[گ3;ɼa=U8g#:]E9MHHOLԓvp7+V)#[  qU92u>޵"!2.?Ҵ H 'Tdsӧ8.>rr[}bpQHsAϽbG WqI?{[G8V-Rc%s[v>kqž_€6 ~Zʤ@~(ۮw@NXYyb? C"WMH6wNRVw*݈%~D=ZT da@*%kGcˆBr*oZt2`YTq%U4%y xQM0dY> ԚzؘԊi-duQ]2f~v([,2##;&_CR(Bc>VKK %UM@k6Xyyq֖Eh+NEr>j3r3AWcFt}.6\>Y#ܬ;G;8Zd?kKLMZ+c&m$mҗn BAVmHػ7|RvSW5)TW%D]0qzo hWHu%k`_LMRV+$r#ڹ V9 A,Gt=Z&7(vެk2gPB۰H'͈艄n ]m>Ծ|M>k6]|\;WK4$@9Z^tbIq B ORȀ+֭t`'Nwioem{zTԇ590ͼׂ?Ѻ~[7sl=mz/)f,$ z\J:ԡ(Y-J|0ȪTXAޮbĮA$Tr,tTV'=-mI; hʠ8EDf\\5?(g<#]QC9W%F[smv[9MSHHSu22% @U-ǯ5h*w1|vzQ3@܍ڬ.߳&'y{bl S6 u?ʜYPbL5eznQ_FNc=2pAO爼@`' 檄>i1"gۙ6n>Cjor0zγhp #Yq';w+p|11nyymF?ri= `zI$lHbX|﹘5ٓ;28sZ6"24XLu5+ ["#~Y2<#1j`rp=Ei'/Lem|? *Yc*r#֣2#V05ǾB8E+>"!~OzͻG:+0_JPgh' .eD V9y.tQ'%9w Ķqzĺ G~s(Ksۀl1ߎs(P 8`8Yʧ5"`$,6I+nv{qoJd۫ƹ][|P5v[d]Ȅ8a \^}1lӭt7"?3r6qׁҸ۝G&Eb~;B%$֝)"U&> RjUgVV%VpGSOjӖQݷy\ļGjGm qppOVW,=oiFsqMM걛I[pψ ڱap#ʩ1`BգnK#7nA죹 S-I46RΙA=LsoICNYv*2a*$qkj݌lC;-4drŠchԃ/ҭibDQTަF unO Z+ " '޴W}3|#a}@QFʭ D9sH}* 7QӟUA$X >g>QwHm{ŔkDs0bVEWbT}j$g3G6A8X tCZ$ǼmI ղTnd*Ҕ&~X̂PXsYϹ).W SIt,561e+G'ҩKwah6G es mgnњuGH ʩRܺn"Weڥ=qUdDǖO,rfAloQ*11E͒˟mu/". r@a#,}MsK bv33]2\ܠ4);㸖] Xv?Fz}kmu L73** E "4D(=@5m mnö+͂']ͷck9_6csFeoVv݌U.8$}VTwEݠ)^z,'i[s1ӹ[@$7 e>t6FIRQ\eѤ!5C&]룕[OmZs1VܫsΟ 8y71Sy6++9g0A@<*ͨ?w?Pj#V9^?-v2p}긔  q׽g}u4JGC&0pimQԯ=ERbpߐnm\Tda}4 ]&Pjt>*dIR0lw04n zҤfF4mɫIF'Γ/%\^zղ9$ps61?0n}di_2 94?w&99M(6B`?\siLbiJdnΉdwuUJЛkuͲbrNO##vyBc<>Zңft }{} 6wny 0|}3[WqnpDmVn>l7^8,s1gb0dtcA32K Ud++_3+H s>h3D#61qT0ew:,Aת[]\vBm!G$,d9ݒTOL@s-x'n1gg `¤\aJnGVCK RUmqgQO#^=k(EtNII**񊦲eyݴzqVT*;nj]WuXܔc؃S(بISƁoS&쓞*t;rIS޴dڰF*Y@<&JyRs?zQo[þ#~cՀ}[p<]&-$88},e'XRu4@qT|a`|?ZUcܡ؜~ޔ,bRr\u'xץCcAFS6֡Yl+FK4}p}̂d%89G' dnj#@ aZNqֳRNϨZP qr qTvdۯˎxsVpJ$: d $v+nv@ 2NEVa5 2r[ql`ލh2Pn+%1IzzoUfeGwb%;s$1p C"jUh88+ϮKKic`}@ONuZ;ó`#㧵dG2.T"`q[V{21WU(Z$+mcZ7 ?zjn#UpqZ(gLt֏k+8v[xj;b_xנd,Barx<G|i"?һQep,sG<\'ʭ<*J+If((+:2] AVEhՖO#BSNEf-^.F{sZ֌'vfGcDrv2 ޤȰ@o$vKb$Κ$<6 Oj֍SE 3orܬľKg$+RblI=Qw|甦yhmHYH6pOa[FM#%DXQpr?hfUrA4֌K#;g99Y*$\1̮r_K8@`VISV7"mȬˑ@@W-+W^E?$#C̞Sg'; @?qGToI$OAWTE˻.ӂ EG?;y|真GR32) պU@ 2;|=M[󔵰lS3XmmQy_i)&qs%Ч,l= ,>iV$lD"/ @xJdg!P={|!&X_0T~[H顃i[U> op_/vr}kAdv* |˞Q$lVNNEi˳)n2D5QwXrIsV[,KwuE2T6}~KQqpw9 rkPq,Z&s>ಘV23dIvD沭PfL$fnWpA$:gsJ*cuh$eG$=3ȭ v\c''yʐEQON.ѭ9g)n}-2'* c}렼F}QxlLrTk;+-dR(w=MZYk,D I9Y J\I U@D$} v¢q1WKK:<&uoit̑=Is֦EszD\ZMbD_b.YxNZHPRY$R!i/~_NEPʻ'ߟZG]y5Ȓ6ڤyx'=R2py%}TUE.d~U Cm$rOA$v O$!2.@Rp@zٚO)prmxy %þ}fU dAJ-|V$ ܝZU#dX~8v&ڻ3 1&J,:=Mk-¤yN|TP e'Uԑ$ `?v5w8n0\u?AVTDW zh6-ѹb"ϠOWq>sֳˤĆ6V6"O@Vyu,bܢ~fE(ʼ s+iԡxJa~W*6y<׵i[/Q16!R`bKggӳ7&mW1g>K ͌s]Z+-qZg.U!Q8A!Q$j[;EЀ2H >vWW&0 `Nv>[IpF/.r~9J6I]/f>k `9-Lc{+PlLs6׀3ZuU;7ЖlX9JѾ.n  2x} Uy]Lǩ榻@@GU@uąa޼z#S) rW=z֜܀uP+bUzHXG#B,r0@Ni&ֆ{o/ÃSܓ孺`S:WeSIϭ'jBY.9hr\P޻1*[z$͟$wjy YK۶:`O'MS D|V[|m6:玴|e`A1g[ hF1 }Od xr^V*ƌXkm8ު "8;hL9YH1{.Z-iQMG#sio4 LුO;7}8^I%0~l\9 ҂Wb1vSw3ZܝNvv{ge3+3k3I/,I,^mU4hvhw.qP=i]!Y6u\`L94(2@<'C0#9 YFNE8>! rcFHEe|>ծkci.[#dk%*r31N?5@ 2A Bc4.I+7wqm+̔2؟1|URr7bI(֎ۊÐRw`"Wܦge"&'op޽MgKp$,E֮J-ԡ6S5kaeʑ$nNe%ԫq!XXrQ8;[Z'u)L68??Lw(rlzk9m]]IʰJp}y[l,择!So..Y~tUS `v5tii{g-$!vBRݘuQdu*:cvۡQKpeP6Ҽ޵Vtin#%>\6 vv횂yX8f"_1 8yZl!J9lˑ<U- `0z?:k4cs2k~Hcd2kK\¸>Uy6f󑜂:v+ǭgX;P c|5 m ߅C2`(O^>Y_9ݫ}WmnA(8kX9e2@>-\ x k) #ߥvs,;dfLto&v?PK%g6WߡoY#!F!E#Ǽx5-=#3+ ;'F%L' $"&yKGOY@XPTT\RZ}\R^Q*&v!)%-#+IS~2CFGaqDʔ L9yyȂ΢2rWC՜5u M͂7,ivvl:U;8q՝plmp+Awcȓӧ?rTT{4]LXLؤ8$/I TII_MRP RdҎ#%<YY]غ98exYbYR)CZhhiittt3@0+mj̕,xؚsrqaqpF+ m+O V_SE񵃜R0(J9Y%GRCyC+adXg4k|eJj&in&Ţ5m]#s˰G7/$jVNF!Fƴ MOyIJίPWLR<*6UKeE/ɧ~Aaܑ1剸)/~#_׿n}ڭٷN}??'|}9$_@@EFxЇpȊ1q I )i Y㋆?Q^$2٠uca cc`b`Zcaay`Mab'bb.~Y燷H@C!x"&<%r":"v!$!% "C KxU>!e8UM -#= '55s,,#k7[G.]nZs>^03=D"D %$$ied.e/^+\)+(#Kjhhjk9k6M6"42Q742~s`nm`mgÁ)yѕM=̏;`<>8)(X`di~t{q9I)_Pl\|/ O?gUT[ך+4 7rst2w32qH * k<'SgzlY*Y:!ۓ=?8={2z Gsx/#>s/'TS4sa?y?m|=SiuY/e1<{fa;aXk/owwFVM榣y"aoI[7wx ;J9ʿl^jX:{f_No kn矙|:f>A=?+;atzyuv={|~{w3^ӯI?=F==ʗ1.^4o9^>_X>kKA9WYkcG _}m -w}}?[ck_{w5!VjmW5ye%%E4ȯ2Rbu"''W@wV?3 z\yr1gp^vrwpycNrd _l/^ </h/t lLtt, 44L\L,lgC|៮}Qpq۟~b8 {ED$(k|n^z2 |Z-KT:OBp!l@>+Ht bRW L,B"@:zF6vN>~AcA32KJ+*[Z;:> m|?DV^_0.g9guchD<$Vܜ\8bqr=RzZK۷yaS綪m@r,Sl=IAau5}-m m쑕0J ,="=CΎWo7᪡z5WN L,~梯λbLZ1voIi}!kj &- ޝ_(QB;J,: =5T6$)yGnoDOv1_\ Ngp@ʦȀ $#x{Դ/-{C#\cM(zt?4k.kpG_CA[@Iw=q\_[ @ MDn͏gsʫk(C (b=lĄ=eV HSK/2/1 >R0re[DS2,T^=ͬox 8誧P_NDggE0Y Cx eBc_e/{w@eOgEYfqm&cMqe_dRA^nQ}~"Hw*8o9Y4ѥJL%*P{U=QGp5FWoӓ?XG{ [v0?hxV6;S^Gw>2d5[S=2'Uk'&|X.lWjse㽑jQ/2i+֓ᅋy}8yeǶ;s拯6UjN3C +3'ˑ]9T)m;r9|$hEY xrdD<A_Kw&Rx&]j~R/`-T 3WH:ۓɊ{elC=-WB-pZxBߺK%BM dىUvphtX%Jo'$CTGR 5H~z-Bՠ&PU|y{q)IdWu6E';kª5tXU]gK+;kgIA~e /A{tQTmڻ`ېg9aqvƜ0VF9c[QI"#ljrԣ/U`bi˖X,嬳쒏0"dqwƹN#rF}KfϐvA4EKgT՝aBp!I~l`f*_(l sz^1n )ӨzS_z:,N^z<_@kJtcH5MT ,;%xv oז^<^*qj"f~>8[W●Uaw} t4 ,qTuBM2}l?4uu:3 ОUm4؁$RApT s,eFs2`}7idJt>X 9[>48t 1[>14Zztxb/;Z'.XVp@Gkb t(,tz#"49aH0,cwUc5S W͙킥="n#UZqZ h({EU[,-63{nJùf{^DȽSS9R ъӹf( \]3۷ؗdOԏn'c_9=ZԞdn-Lxf);^2=9mYvݓgmR ]-;Uu-uy=^8u8'CseNݹP0]y@DJ\c8~l Zw\aǴ?Z9yDgwTk-K5ߺϣ̄Ek*3mFN(Ā3|Zz:`wIL{_~}$zG#v ~zy,{RVr^BBꆢ/93Lx1&VZcmC쟆JTf"0eƵuKX#,C-A)^ HzsK@U)d"CQPklT=armUPKe(RMReuG$^gԊT=A8G촁h$~/@7TWPǿK\w @3$mXKxδZʮۦ졽muvBs=2x,}Yo[No&-T{ʰȰ¬RfȫձEUQ$oc,~g/ESIPLm%vƒƷr(zW(<L'=L Kr[jd顽eg=2"1͚T?2#(bK1צ1Ssx;OP4;/=3έ%i&u3Fbw)E)uB/BC~BN[KGMKVTR{ S6EKL? UJV>ÒJ|=fPS~_:kKF@}+olcIyf7*32lBaЂPBFD蓝FzHzVtmlҋ? ( Sa)I#lS8P]kz$xCGuGq Ydn4ЛkNhӿS^ȹ'.>N8NE"?˳Cܣ%?иZ4,6bF܁óOlhDoĩEL*+7Fzκݗ]w] S,KYv7GxU9|7e"(Nn 2tz['g Agb|=^ug]tx<vP>+uK * O3,Nׇ! Mc ~;&M$u,l^܀7P;$1_i^ cWC$DoB*md{pB%[޳v5Yww OTtD[4"!} {;w;}>tW *x$/W=컦/ߒNײxd^ڇ꼾1%,zG`[loS{ x-elɝU*&>OX& /؄AmtyG`߆m. \>Rf$UDהaǧZ&&K}(4m ޼ǷTW5Ý{q`1hV4&d~b1aԮH9uF۲Z++ۉZknHX(P0VT j;_TabXNƒ5^1u; ___zTdvx 7FQ1wr]4x%`z^p<^*vBm@9 RjYX>CMH#{CCѫH0MWlv]pX}lDǦȨiZ;hPМ9`Zp\]C1oS5/p*` MAxŵ4N(9 <;OG]rQ܏&Ewaf̝ќX7ZANj!6jQFפsJ><ǙkCuo{g4  &L,# A%^ 魛ۚuw td--/] '-:/5M;Q5`Goh5V%_Ӆ+WU>sƾ)NѴ 5GqPI1殁 |9|1sYKΡ`3_fO֧zg fLNQi)1&0W}Zg#ú4+Yy)D oFn'?ݭ|S>oev =F[vV-?毳6\)_*HZeQYdžΐW Qc)P;{z6% ul@- 7۴kȣt nçE/N{L^-\釤g(;$\E})a$V\'87$)f%^D%C>R;"sT >t&+ogxpIAx܈t, ڴDX^%k_h=rm\2iiyj4$H8UۻD0BAܵ.o\)}?`:d.Cé47Jq]~Ů^%{6(סPch%bT@Kt~PwNz<F]Z/0#]Mx܉Ɖ>R~I-~u]`N!2H˄f15zT,B?ݪ$b~Xyl> /s'9- _ΘLk;^s(+Ot_17J>5ۯnuX^a Rs+-r+[NuD%FU찌 ZՅful#\\w&*dE8%{*w~{ңN`B]s̘𚣝5U`1g7V 0[tPk%4 5Lc<Wm5ͽZK*-gZp FS"ȭ>X-UzwnEw@O)ǃy#M)c2mfVtٰ g [HBL85-AJD*\jeDjEtqj8gfzyV:I3Dg-!-yulNN~99B[T,Rsb Va >7>WPP\,Єu1$np$}msM vKU+3"U(>e W2YjeYJ6Γ8XSk"MGwC±y7ZmC8Q?,MDLO]K $xtBsC2JcMWgUZNp.ئ0e3Ǜ/^^ C\πC]gU|o;XcwɨY40]&dpKıZcScctH7<0F)j:*-42I21N˻wGmZ4rW paTp54nz8W?RsN xΔL!Nm'_\.j,- AM{Y}RUdkltp(rVj~?hQ&W-"Wc|G~}'k2VO4Vy@+Ejȕ[̜] )ǾPnj>kI}xzƋցIzM-$.}·N$rWSd4 h;/Ev-Z.M \$xދ(4ҝvs(=陂qtѻ^0jDī7Q>*wlqͷߕ6 5~lu`}ą/NB/W;θ}E˪2]{*C8 zLl5(3&(aȅȞ F@ mՒQ$+\q`Bf9ScTyr$]iBVr`xN|m6~'+;hNYI;W~ }V-{JKM0bgcabE&vsҡX ўTO QAu>}0^b>M <=Քjf<1aGgq#H?:<3+UDr_ !bqJBIk{2FNS̻ycJղ#BRհ350ʲ@IQ6'BᲈX) NY+cw4>-(T(mWbpw;uxpc_29`Lxّ.N ucuE~vSI#on$56튭= < ?,GlLSZEUǻ/RϴEyڨ9I3IpKՃQ7QQ|Ӹ`d jN*;}od#Avr],8|CF/zow{IJkmNgY6;6Q!ZNaV<,dnԫ8v}²k5oǎ=ic1{ڞt^NCj=gzхa<^Z0V 1 `hq3#r%*jKA1ԉ]WvAwjwf¿jDqeńo"-{"Il,|._Bi=s@=VUTaKHuu8olοhTXpWL<~CJ n@ڹ}M;ݳ.$`O_Wxt{7(akөD 5̝X"l>۾2Fمp͎!>-o W8+Z-6Vհ63h\.}q_bw0d4l{#$/:qЖđ~ߊTSLHo23!I7]O0wᅣn*<;VhC9#=oTA=y99X((>e5rrgMz_Uou.7Uu5oe\h1'TGt_lk2S9yJ\Uo>:epB#r}}2&DhEKwz6q_mM* dջUx,[цACT<74PJ;} 0VV3gwKәT)C# IQ EEx {U/U#6I{9=B}Sz=gN cՂ)CZUhmmb=zNhU.7x {sP"\uvgUp | w2MORjkrȨS aN MCXiזϩ## ;KąjZ%SzM?QmJboP;y1 MaC5SaQq!\/7nPitĐ@['^ bQZJ$G-myyu3RMꖭG("(O7%: X.VSf<ԞA0 -X)\Arݾr,ONw`7m.ddgx;*d1/<[v t` AtgEǫ\$%NWGK}qtwUjR*(M* S`뗮b9݌SdV-F.\ VA_N{5hį;lzyϚ|@} i;Z|ʜ981' kc)Âp?zr9@@&ϱ3ո<5:ɗ]4$]cQm Rv2êd{cXVcHdmp'][='|N(k<-yHcxSEoF"xI*kyv oHUM%(~وӖZˤ$IZIA%!i[tыս-`稱oՉ̢OWWFA-"z] {R*tc%,5x%CVG>$ U TL^@4!{2ݐ}ٓPd!Qg!Om*&d5LW\jDdC^kgbcY+Ҷ=( ūnRW"¼B1@OM;j;Gƞ һwsͦna QP>g9; 0Н1Dw5!RT!AqM| GWéo5d)+NJ4z')קJ+m>u.=|+(5X Tښ[ *jH8/s->[2avO3ʩGY'ހ7 w+I~GqӶAxnw,wh@]S,д_s9ΏI:e|ѡ=iLdj7~$V sz&u>wnd9I5%NbzR yip* *srRS0 u9;"l^W,";Ltv8_ל z0S:K+Q8d=ًe܊frY{<ggo#=t]s0=][^&v_ M0ˡ i%87A;S0ˠ|7U;ԑ$(b0w.'Pl*_b #i+A]P܎mK!7E̟V5H6bҶ7, k>l>'ειnuەk|h#q޹EhLgL6'X<Mf>-!h{/V")͓ZV_js鸟DhU)#)2BﮧeC ZjN{>;;.AW$;ql Ծh4~ׁdHZk,شPf4Rڋ*~]zi$:x)^D6vPN=Qz^$t捓a// ^SPJLHLM6gc;.Q3ܝ/8E<1dGuU3,Taʯ˂`$\ ˊdPjj z<32eUB/QLޕ\M/YcjXh5+ȦLArȫsz<ͪHשSg5GTQA S:€((RX3fS渔lnA@'kF@VÇ<_=BZ)˫V.ꂌz5H[4.ES%z;y𣚹df|}#4&} =y{1 !g eG9յcIxru=jQ6#A 9rFhN#4e op6jeݥ[ R 47rT p3a(.N&?~J3wͺ{AYH6J΍5hv;[Ωtn wֶo|d; YcoB@e(58}t:J8|kag* >┪:݉$$8~MD#o:Vhi=`t:x U%VΉ_&jKeDS#6<ZKlԌ 0#45˩dB/G$JsҤߟuQTv%gDR=iw(#d ٵUȨA7˝S7mᑠ# ]e/q'#|4VnTϜo}0/r [:mL`]iKN)dc߲¸ŃS4 ;;|MЌl"(d>Bc3?AcԔ՗F+q 2?'ѥZRy-<0r=n>(s3r)"q՝;1X?ag`,W7JVGŶV97-SX7d[rBptVO;y9F0=@D`@ឯ~dH~¥b:,eM'7U?jK_}l:ծrCRlҜC@e*,铒y%u<{VEvvo8->h-x\PFl|N6bbCBg@#[W, x?s@,&h3fiRΆqJM'&!QiVIHRmto \Ȉav:N=1ݩ+hK' `bН朆t׀\[GuKtM% )juQԍ7lݛ'q*ݚp$PS%¿ T?w m3 w=tGxRwTg̏R+^P3? ,' :,v wby<CENkY o+ qZU  )r$:\? L[Z# ش8F_jeSP ϐnC꒑A2 IAaQM|bo(a9E {B1n)P!2itk?}c5ܥݲ's6h_cKoZz4k(6h@ P;4bjpzU2IV|t3#H!摂 t2#?F-WJuDŽԫpj;_<=6B98\3=JY|adR!@FI>,;DY.nb_ya?(KFaru> 9 KmlHߝ vHVkm8G^q*5#Oa+ؽdQhЁkQg2c0\~}CWE_R8"tYfq+a=^%Smi K.ErJ3gO?@xپ\BM75nS&jf51f RzC@zSu)/{>Mw|Q@;*TJySdRAᕼ 9i <+6-GY曍?fr %,{LSCb ˽Mz1Q /yf)j1:.L@XÚ)a4W g<h}/_VUȞ̍ TZ5l`}G`ژLՒ}9x7`j8JY-_&e- XVTLO^t8{ʼn)wr&`t,MDXGL{OV%Kz ^c9cٍNT9A9ܟy)ׯ& H2<+Tؔ~Ȩ堏g9:WUc磅\T䣁m6=*?M8j,皎@)R᭼A۽3%$ր߬}%ēmMu+k#?d274YuǾ[۫ANg=9ݐE)GO})v 7J3ЛJ[G[ʻq#]ѸrėkNcK; dPR7r`P\/@B)ԵpUmiV*yU~q[C3,sZ̝ݣWgJZtM_9R!¥ΩA/gfî )g}4Do\\|~ސotP~~n =ޫ3$hHqFtF4&i=WãuqEtjw*C!Qn \D'cQf * 4W{ӽŒL]-9x K-!78qCN-d_KDhkvT*xHMZ[ꁳ-߿EzL.4JT4lUHJ_inSgcF5 ./dzyLnIj-9["@Ɯ m?+ zq>q3 P~꫍AxFS"bO֊ R՗vbͱ|&# 邪NV:R~B+!AJӿ?ʁ҉@x;(ĴIsFIXk  m|ZxS2eC4Ә%j:6Dt@g-Ъo@-+߲s KGseٴt@i6JtGս0jdQXZK7^qjGjVƬ|,w@Mof!}@ܠ^lmUGFjvkoP7Ⱥ {pP# gl I󦂓Ym_lou'OHSʹrE:=v'm[pէ^ڎ) 5vDξhFMhƒnwv"!, XPv-d_(c\ ZkݗwѢwx$Cp rxUv4z4z NjN%4fI_,xAX#ә7_0҂;(X 7)B'/*i?7(Te v^}X"|mhak(zMer-',T=-I1OvL^S밶Rݜ 5^xiqUdТ7S|M1/XOD^Yv?rNvfBck.5KHFo}h%(d½ e=WxżRfKT\=BҴ&Lusv*#/.)X?(8tF:]tvo&TWhVB _urlL8DԡA;.PD^SBާ%_5tNoUAVt!zK!b/d~6% t7D7rT݊UT(S5hζ_@lXv Ա:&硩k{bD?s&ae<~%&,zFG_ߦJ5 ΰgCs!0`*[xމiq [61֝GultɥN̦;N"*.Skn/QJ* O?Z(X'k_+[#ᯯ-,%o*X6QvsRo+׿|iL|>YR(Ӊ".Ul_cك,*;2UQoouEo𡑇RhIgl-§li-a\ź:GvYݤą}:wt @E0Eڄo^>ei*L$XUz12"rMu3T[*Qx ==|:#Yq"lIEn%Z*cH^~upϺ<%҄K'ݤ(@;V~".pBc ոSXa8H E ޮ.=;q|dۄ?(fggOat,-)Ȑ!ڑž"zuny&Lkxw@EZY+ A7uf*wKv&I{~b}ĴP=^`N\ᙫR[b .u-s:qxSgjr҉=[Ht ΂s_iEw3䷬nC\&*zz LNEz fCJ䦄n(څ "WPV-D* %%$q 5TUօԂaQ U"#m?RW:^rhzz#j;[!'_9}ٴ!@aeH.)Bw+D|QfD$"/ z%Ě7 t# OwAoZGo"k* oY\ǪS&m-H~q}mW[;]gϐ7q#>^і"D[N/IikdG;G$+M3ZIS*ҤOw3YV{Fx5ջ)a6"6+]?aHCeƃXӁaנPyh@elSjo2ܠ9zN)q#g c |?_|x=ɮ';SZc|Cserv7\(^H|\Qafjow,]JҒߵ4L٭4},Iv$] \&lɷJ &Z.T- 5[rL%`B!d]LM|& Yٗ=(7=e}\#[LVhoU8[+ny8{耆␀%bP nY7%-~wjZ'TV<ٵtLAcMNq?T4~\)eap .FUcRkfU.>|ߡÄ G|9ε^qfq 8,tSaI6 Jmf]B:I_ֆϗ޷+oÝ-~Г6|1& Un:l~F%7XG];OQ q+VPSePVyi,2yQR(Mj ջ=]2M^A+0a]" NI+ڽ@u-99ͭ=ģLS*QK9ASt٦x}">/?g!~22|u\qjVXeG]|([wa ZGعFL`ue JxjnS+^\W>3ncUԀѩlI0T ;DuT ӿ- )nR-M.ݩx}JNYKǭIE.F)Q+>rJB {~@EJ6FHIE2xeY/? *1 UPM5hiINQ/`ȯ%U5gZADˬ#DP8_k2Dž\H?fcQvG sr|C+?ud|`$.|h5+ͱ@s$R2>ݶؑ!xUβ/KG Vv6>ӝ'̦ȹ7kVLX4FK}Ɵn^~T£^lFd1͐k'm zR_KQ:jHXn/Y߈ 'E|Gʱ1+ q@Bd0AߋVë^s)K.PlAPh,NDd:ta{/a(ELsz\):ɾEՍ`/3roWoEb_~G8LMlDoTKpxj_'4|-7xԜ熧~%yN:˴; cUԠa+rZ \PR.MUBZn73Scړ_D4ž?^*6yr}Dٯ$ýU1aq\{@T@@6/lޓ7R :`aQOYnh6aj sВ}+IQ>yU8Ve%Ə|w}+Mo&k\'L)eJƟGܥ"Rב/%pwVUC<7|r_ SK^\MH/makY%^j&PxH&sx*ib/"qd[v۩ړ'p]Ɓx 8赆š\7[xc9J]t**VZlj'/u U8&-fցnfⵄx^NewnmS`8hԥεn1cwRK_mTxލdwF.,nKͻ}ГwF)n~?sjkO,;X­7GNGŅ`ƭ$^%ۨKT[LxɃev}~faѣDlM^&JNwutB: f\|I7+e=첡 s89Hб:@)*ljzv| a0@4/_0UF!Qi7Cr1սԕ6a%7BM hKiK9~np~cq&h+RY[@]{i5 OO(~3[XŒiKK%߳K 򄫅olemiR: e;:nao)\AmaΞ^j !/:;=KaZB/A3ue#G.F-; +EI%`M-l6T5'0XF{j@(\Kwr#ٕ|3x [ .Vg_\ÅRU @=kh"{/H+;Uq$eE eu&v$H@z}5Z:OUyc@|kְ -;;+Zd,4L . DH0Ϲ0\h*SUC4=i c[PyRIkD.M3cfiOƊSFx|fʂY gyMiؿu%~EjeWU;s=fH'N?3ɂy6!4M_ޯ[UbN-Ԋۯ*5‘j'} ]c \B(j@ZEWRKj/O}_StGf֝M> !H&Z8P7+BI)=[!h:~6,uƑ;-XqnGZ t( (!dn]̲8*dʽ2?4rnRhֿkImDE0[+ns^nk¼^չ"E]r#~ꉩq.7iy;Z}6kdı2!-]D?`( 9esrGfKѺ~& x˥ w(e0{!/k_l69˳m!ZS4{V*a=ԝ*^ѥ8):lAU'$v 6@-VxX%g]yL3>Vk`d*x|,76fe{.h:6uq\3_ܤa}m FVZ|zgKܾ>׃M<|R(ovtExʍƑd +M1UE4t8lm-#&c `0U" Qz%E:K!]+yɉ^ѧ{:;A]T՚= @Q𴘾Oc/ޠ OOpLJ%]wᆷ_yz񄃻_;WWdÚS%pr-5, h!Tsfk%l̸<ON\rsˌ9kʝk}п<ޟ &3^&{OMx3 Zn)IwFAy% YYA/j4@8=uÄhzg~Mp͆j(n-s];EI8LKx/1oꑆjW ܊OZ"+V ]$}% IU{5Jk"Z\#_>ɏOӗqWLZ:0qCʱvwvHy"Rk?ma]#t6dh^q,d8"洎I1Ôldu}8 0j{oQ^X݂PcipC%"y[+5})awyץj Y"leoXs.] i3[s>iaV qSS]Cpce8OYEvhe<g4RXwPRI){W<aӕQ󁓊%+`H1ZRmq^,a'wV^wNirZc k Y0y2Dwܯ¡Vsn͜&Y/'͏$c>$r;y rX!Yd l3]~G[f&Y'hR3U6 y!I䝢!ad0>Zc>Tj/:n̨1˾GG3 \ֶ^ 1yOݶܐ=k-aq1&1g[B;{VRٛ-#~Vȷ7*ڬ CaXSsg#[]?:,:,5Pݺ]$YXL/,a[IDh،w:4/ڰ81:TntQw'一̐yD+i@^11}Qx[I^MlRhg3|OS_Y*CԺ..雯z'o{{<'T󎦱3_ۏ-N3ɧX |6?qޕ};R{cֽ7%k-ϚPt1IEoL@' W}w1ڟ/cڱq)[s9K['Ў5†u>{eKsڱlo!h #ȇFzc a_jV2wp_-RzZ=XFa.DOƬ4cS8KɞH|R=v,kɍ8tDCl;?ޱfk˫&iaeipH(Y]x]RZe[YVcL}=k2PܛkCp#9SNzm[ $ $yc$P% TaVE`]0Vk{u*Xfg)"gMj}4gݦ, 0Ca{cqu ࣶ =ǡʳΰ<'Ky̯9$e$$ҿ- ̀I{WAn"i.%Hӎ^ʲ![1kC fiFNJWJ#ܹH6VU 3\ƥwio,9 Ư4{ /phݦiWI<2j\MY/r+JV@g}ܶq\HB̤7ܻ&=1SNm+TVe_:$3$c >֪Gj)Sz}]K|ʥyE>NHqKMvoBޛ"o9'vӭ-áIdOPO[MK#HصT3 tTawgKvD.(ߕx'<1ZpbXI]\$31 {1hmCeXmwr|XFXb'3OO֡x,y?f'y+@ϵs]rInlI{ *4g-*i=ֈb3A4k֭l.HVw)2lf//OO֬E$qEI >dW5n;f+} 9#nÏ֩ZG.Fǥfy +-W3wVZU[[ˉu Zqpk*:}͝ #>fӃI5tml6y<{\D dD gGq{-D%fw2 i[:H$3JvZRDv$xeY,^$C->.&! 9?dˌzRM#U5;"VV5=x(ÌsQl]Z'p8]ةї;'J_Cn-%%G?D|;vݜ4u*97\Տ&T덣ck6NoTte,A@=+CmgQ 61D,;iZ J*&%YLbe<X꒵O M-| ` jڼ16RXOZ1-4E1o-۲ਓ8d2JeU2)pMDEZ_ȭTKv;I-nhrx` s֢V3G=qU$쒪7G'xJZ6zBVI 1JrI85^9QĂ9 >Z kK;easQ59RYKsfVpr\CT<;%]54a @O]GnjE;$$|p kGk#ixwpY$[td7EsJ/p QIG>ROҧ)5'Q-ڋ *uHQoDnDC KyeӞ -븖NZOcN-n"6-mPW`Vi;"aX{ƞbajDav3ti-cI̴laM\t+$Ch7.0BS u~5k|} ˝V(Kt31 "H-}/^.nf=Q)1ƳulZ 튛d=.˸26ښLVX;'JF 'dg|V[i@S)֍c̨0o.jH=d #ݞOҮ\[c`ǭ)7\ɳ6X`xPd]m: &-9Q_uQ)#Zۖ;Im"9Si++n`;ZE|y>I-]5[iRtԿ3j֭s;I}dϋ:i h%`GTդe >V[#ݢ8{oj4t?f.D͸ {r'ϧj،qC,2 3׹.7mEs_K-y.mv;qYA(Kl܀qGF1# d$#? -5KC3O-. 9v;I c)iQHZȊx Nu^̗^5W2=$`dkYŭhino%k(Fo!~ƣh{^Z:H.ÀjKmgr;OcXo-yxDN*眐+) V2_PBy![AZvuRhg\=fCv8$soy<5zl+M5/yd3 @ k1R*L|;k s?1r7ՔJ7aYǕqץLk =R;nqG\bQ*0ϦN+:ƂM$2Hcp;<{W=4ebwwIXԼfԷK3תW obda8(.JTYhQPǪZ6ci18z{; z?#?:n&ݪsҬ[ڈ-VG_ΡE;?&j!A;M[I /8mwFe`ф|ǥM-sBmp t6Vk%yV~{Rl\{Y^ 9V=^].h&Vdwo=RIgj n.c |\l$Փ*õF8P9Z(q%mf?V2%1;*̲8r)F̻uhm(da `~-ݲ*r`}O5_[]d[ m"C|Va9Yɞ'5۬Wv30;U9arO'zTs$&~\GbYV$W?"D^fWDA׭6%NV>oy;~5i" /C֙=ȓ ϥA?:Inݟo E*p35M]>+Ijq[9՟P+prGd]&qUnv) afiB˷|F,eФHgL}>9 RyI# 櫫F/]J2+hPm.x)[['y)9QчR5\m;G4X<3Q52.ەyیRu6JRVqsVD@'4`k"D9QpzzLi$%flA5{dN^.h\/صQ5.>Zh. *S? $Z5(R˃ u,2EAlgDc$SVQ\. 8q?lJu("aޏ]%ŤUn8櫛Z8%H<8T[K[x.7`-x<-ŝQXduVs<2$OV}oEcޝjuJ]kg$w'+>.)Wӯdn3f2_2qXs^W%{h4hdTfjc%<8'/yPJ)a0I,FqU a ]r7u늙tZ{\~3,IܑZ,[)Wi7G'zj|j4~%xsy d];[pK+9|Ƕ dR6k>-Bpޘg:Ғo"a{s&wҬZ+9SjİȒr8:ڜLpfu?"35PO&5,֐j"T$}sf١ JpWw_Jұ 1m|c#?ηgm6E#]2A5V2%dfiRkKc±9`OyiuGqS+cYcHHrs0jM彖YݕTOv&::d֟KcsugKu1$9R3Ȑn*Sn k-#{]a| G=kyEߒ mv5O]E4d[kiX(vCT&#Ry@ޥJ*O]ET7WqE#pS涳m(s&wUǒ_ T=ėr0~X sKAw3*ە=89=)Ҥqq:zTir-{RօJ#M9nؿy?#4tdsWS9oO}zDy'pmB2:aXS\4<3ہN~[[h,}02G<˸ֱo 딙OI9o5{ 8Zi}*M$&?q.+dE-;d,ca+HF jo>?k ЬbxdUaDiζ$$G&NɡFPW7OK3d-Y_C{Y"1,݉-%s/OΟg>~ BS! b9%cSMJOK+'TE9N0p8nKo>r)e~T&v4)"¨oIieLnϽ^8~ʋzgigHs횞W9"])lVmgOcˎ8֬jw&Ժuᗎ5G<{Fle2P'>]KTA8jͲ-f?2#5QZ@ >dYg5t# \oalMk~IlZΞ9W[p3U{{;h.Y%e^1߱z"tjC$w2J v8o"929Jm[łGV+ҺUH; QFR廲Եmwh׷b[iI+~yA,i&= ֒ql۶::ռn.18qϧE@r i!Y%92qZ2=U~b>:4F?͖r5DMN&HYN6lVN+N Κɖ=sB#Ms71٥e"KyA}{b̲mT)3,o67#0w-4֤ڂ\֣K\K,?ZmxoTD[;Zת/k_8xZĶΑ%ռpaCg 䟨3 êD漱,ͥ33k9{'Th!%ӭ?=щ:|[ f~7#y$~4Ves;RhՕ&{ׁԑFU*qmL9Lip䃏ZR"d3Hld`/M uYyE  vBS aޱYH>|2jAT%]dѼ|RF{V@JR^5%."\ls 8?3xI=s!qWbJT(ɨ!xvxP'IlV$|ǓyzVnMtL"cS˥#|t>McC1ثK. \3#R7JͺwvC*MoClxi$DV}F)KT[nr;Ԥr3554Os:bB KKF3Êq!xHP܍9۰]9l͛:9zN6>z <2I-}n[egY]_k"8vf=9O-ߺRD#'DYODPYTls֪|tY˨o<%BP #ul-DIuvٙ<j -ʘAZܙ-Jry{,ѴQ zq鶉rd6?5#67j&Tm8;Q4D!n `Z4 P\̌†塘\dڶWJX+3$1srrB+ NҞ=VO.JJN*%vfNW망*WҚE|SPY[з2g6kVs$Y2wS/m~Ȯ@H@rxi[W)^-eܳ\C$2lkj3ab^Uc2< )mf12;{6ѳ#>YsP=X g*X3 9 O]kxЇbe89ٌJCmaEA5#D2xNߝP4􈋇dϭ5+ϕ^ʆQczJE6 ۺ! ⼺9Iwe!J9 0I; c+Jw&p[/tӖ33ɮ5|FIZԠ- Jgӯ5iZWM9ǾEB5M 3-[ί`ܵYw.)HY#kdYYP.icncIa+{z~u N2e)*i47p&E@Cǽ:裩ilP[qKܼZ^)X᠇@&.fvP8%s`I9%v.{If/>He!j3W&F{T-9՟iv\X<#hK[x u6;^ViY&kci ?Lgyd\@A=ȭ꼞hD*dZqϗu-JoCf[hེIr-c=8+kFįp.%'a; @r`U[4Ԟt.BoviVhۓEYL\qg95RuV6<5XBN>f'mH@503>!Ka0 (;8|Je$HPZV9 %$GByn4<)Y RnWV4n\o%|cnfKCmG4,Ak[Zic܁F-qkFp;0ιۜ& -3w#i">vxϭj-臸WĞ5k!ઝ WO2۶zEFlZȂK2%nWdڱ+*2흹>K%f\g}jY- 3q${K))J:"[8B|ƘQqKO-'40{ۯXAf ׿betbhyo"~RK}x-vxW}7o AlS|Rg( >K=wC8[$fxJwXa*1{{U iBD'p'a̾k8 ":UT]#w Jn#^;e86F?>*[b*Fc95S1#g;8kV mMYM6&$~uUȶayfM6wˁ2¢J]y΂Oa%yT_d}G5Z@&`W&%Rgn2> kvm0i3IuP>f38iBV`ǂN k͡\EEp͟Ǹ`IX2pjz4QnK,֑-i\+{Erc~k1"ΡF3POШ#Id~TƗw`Lh/'+p,{$r7WFb'e%3!vaГۡb L y-zUFzܨ KvXYb}\iQ=6F%rN3jHeƶnbB*Tz 3<*(,72[o#ކ7Ao }H89{D˒K(eY6NO+7li-؟yj=ֲyPz<9rP.[\hLn] ݒXH0 NH&2zlPb6@ݏjÙ;#HNW4܌@b2FMVQv7ڷB01}kky- iqYOo$>k4*'=k Ka%p>(*c zlODr;?e\;ϑH l<*rrh;֒y}q(P3, @QlIK&OEOy8dIHBɜJ'ߡ$֓w@Vi'UH*-Im_*md͜yjkv͸4:Q7ƒzȱN{in.i`TӞ.a1܊que\; ֟_ ]k۸IJ8 d'Jg3=%U+9%$/iR[aGOk[0 )Qv'O-sǗ(rgTW7i'SpoĻWĚYO>En11 ar~>lنNQF='hKb8x _ 1V;M-ՐGrX g.?3 <ԲDWUfŹ0FW>QLW1y}kL.IV5hVЬ-[Pb}O^mYbQx~ϪGim`)ijҶZ/~h%m(__Vh-;[}3,35e :{fzmeA"*Dy pwcRV}q[X 9⟪i[,3&(]G9}Bk+i\c{4m;Ve?mzRn;m2,ΩC7ӓ]NV Ġy})@iR@R37n!m1V;)!BKۯjnRI[+[S+Q&&w9!*jbԋ3ۓ›ouX_#c4 f\Z:Z$2gi9ܲ+A9Ԡ/̅NV{[GhǗ3*Mll?4fXɋL<5&u{H`Vo!ݦLIgRj1h }+ot}mD7$ [b\ze7ʗ cs*s*XfYmD SM.mWdJ8n3ޡfs|M)6۲Y^~N$T0CdOjGI>Zb$2sZZꑫ@E ( *JvaτY0@#0,fcv =G5C˷]Bve  r9Pf0_)q19Mݍ+K뛫xmjT~ss}Lli 23{AiMռ W5%WԵDFv&J#?ҮQIߠ6doim,\8de3bA4ҽֱD"ϩru(/HJPzs+%)%t^\I+Y}zʺ7~#S{[[*R!jO,>d0HQQkpڽxJmyZC}LܤfǯmgY$I)u)$c?e\cƬ[H #9楊O{yP,~DW6Dhbᥜ1-ăE퇛Qj!E>j\4Yե=7? /vŸj1,sÞi.XAn vs Yn v;HDrXv3e&Pph }jݤub-щs:+Eoi"Pr)CX|`prv*~YIDs,*H'OV8{"Ŷ`| Xyq|ܨySϰ\,[d͠ݭmI羹?]_}jA!zjmu=Ë[z G1Wu,I]8~BI|D]ǟ3r3FpRj(&(eXoz#̊~9݌Vܨ)fvq \I*1 ,EBLKwV ՜F.*wlMs $F0LN?gf=͔LKvcٱ l?_Z<]Cje W=*nbhęVL\7Ok^L5Ri.m)EZB KvzL{ sW')e ԩoN(*yy ~ɭ{c|o%ȩQ487M%$8jXi󻀹=)!fa$leEj˹on-. dWn`WNYZܕ+ky qOɞx߷5⛙\yy#֕d{_2<2K%Ak{y @(j-+3JZb@B{qֲjKw?3wVI2F+Ko|EB(8"{m:8Ⳛ8BkJpO[rJҽŽtԵqr| sFm O.82gFq(2(1'oZl_0R U$vQiu kKlP52Ҭ\RHV-nm8E_o۸Vf4ԜK5>+evuཱ TsGjE?ȧ|V@ͳ'aީq,KpUTu4^i?o h^AT'2~%WlZ,nXӌ~=[ˁᛛtft|O>tUMZ[qw%rc1+.+'FfU8tK,\d~2?` p/3rV[fA%Z g GOQ{WIRJ~+wNvslޖIbp z۞iɏϼhmF\Hß\w|qF]Tf0L˧ksFPIlZʹӕݴ!?/k2~5ИmmE;y} L֗QA*gw*ޕm"uջ6;M(ԙAHW󴲷1Jᘞ㚠馯w9 =ٮ_P3jF%QNd%3nU9=BHDabM# [CQ\JLs n1D& uE;VĄPzqTUZ-kԂU3\CavF9}Q|bYRİ%ϯgϧ$; 9%zԖjF~5 (EE+9<)ޱ naUu G>Jڒ.-%u`#/L_kcKfdXqSm:9#"H$N[DSN^^ 4teA"F=qSe&M̨r:ӃWzsqw!P#pDn'A[2b K+*G7p S$%Lbڈ=b9K$E.G;~{ԒI=EUZG\VӢfgӞvЧcILvSm\GVĞ`pV<Ϳ\}jR*/KY)`xkiEݪmd?tA~jQ$_:n1PD1Z2lDlu̶\"yc4. gW= E%Ԫ3'5ilҐNpEgxܶԴ k{wKxr4\4g$LI䓃~!Bab- bMFۊ)Eo9g XSaoc'Pȍ<1*zCb6­·͢EBWR7yU/ķ.1!S:ўD]̍<={h{#hlUgY1I$ )I M^F:_23HVui+3H&F@Ʈ#[}3Ճg醕tRIqopqzyQ1ʹh[@v*fU*Oǭ]yݡCʨ9#hQڷTѦP.3=(R%gpJ,2L\<'VxLɪdP nⱵfq3ulp9|y!%xzչ,aT/;Þ=XDYVkR /R]ndLafS4p$)$IQjHtV1 g)m(>G ,rG񨍼E1s͂92$/b+xޘܪ`GL?ʦ9nXJ!6wć0SO714m !#Wn3KUozV7{J)"J֙Gs;Ud麈SA?|nұ{}Z610?ZԚWЇF6H-O3/w(`0#lqret%U#iN$?)-5(@}cY0Haު] @D!gʊN &7}EP4h%ؖ8O34)ٔ~#prYI" byw5]c]*wf,#{v+c䂢Qi-RYc*׉5 -J Lpxݜ$3d ڏ1nGFD-8P b5S< tX-t5$}+bX#{rW$kk$Q7{#k69Lq} `l%E.zwA@˓սs]|b ]Kj+WOt71 A1jhgdrebKĂ9휣.VQN)G]JqƓ_9bBcXLY~Pmn +yrjH> Ԋ&2N(g9.#HevWB IXa׍U=-!2~'S& 1ۚKmpREo%TqR&W9Kt;,#8tYo/{f.@vÓڎ[#d3BEViQ]jcu[|4r +)-ޟ4H~1֬J3i"W Hj8T5)r|q4$n\[ۋ6'}@06}I#?#dNj՞;Xg$7L{Z^XP)?t2zIvUg`d:niwhatrAܜ{W&apji9+%Վs[nQʹWZc`$GC*I-̂1! um򬐸03i/"FR`3WOZ'*k옼3Ii_!Vd#\گZ k&Wo)q-Ʊ)H"@҅11ޔg7rg]H.l'hVeQV2'aB=n ۀP#{T7\C[ FISz[4`].hg;X,Ih۲=~$H&{z;4lC^K*G<YbT-3O4#NZFG7<ԽbnmLWxkҪȯd F)=xVv4pʬ`8&qQ͔t–p"|7rrTte HcUܣ^S4peK=Dc %i]dyC?(UY4[xH4[c7'ک= ;۱:VMKVؙC]àchGܸ,T.,kiψ{TU7nh=+96L+;E ڟ;T;k+DrԷh]ڲyFvmXʶv nnU7WOݤI I#1[\-dceF8[Bt1:Vo{ qȸyˆ[ws)% - ,֬Vl#0@Rfya+7sLO3$N+nt"-dj,-]0V^UӮ53w{iԀQᮚ&o\MlH үѡi $կ]Gp7м*T!lpx$ 40Hvsvh0;rsj72",_U()uHw9NAFv,W}=Nvqi"ơ/jD~Xg9>Iq䇈'}kgVbsϡOVӢv{v.0j謋\ܾ.XL#\kޓS/GW1*[m,xDxQ>"W!w~޽ܤ++Z!>A-sX7kym " SVjGcT5dv\M$wjo/aqlf+,I9Ex'šY`XԭPٮHk54n$y>1v0P^+I."T~f 3‘yl~f|+]q̸"5c+XhldƩOִTE[{naEPPz R}[yG%Й9 S4,ϟܐ{f'ӯu xI&*Q\]$n72hEm8x..-s jM\[EpA#h?0R7o$yTM{>k+RYYAEZko"ʦF u5,W:e![Րm MtZf $v\:mWZMB{`k+׶̶\6pʉ5Kei $llXa֫I$sOjo-j1DKNJQ \ULw%G8EXu*ךsH;t -  8#ޤGل݅fk(ƯqoR8 mګ3)s6qQ-V…3!m`;[ (@uis^n}0pj3*2g̒ŝ53Ģe fn!BÐighܢ:c#VKY-K(lsi%ݔމ #1 <1Vmm $G8!2q$ԑnMhO̥OZ=y&!ɥĐ.+wU22NzY&bf+G=j {.T;x2ǖ})X#kqϽG3vѓLr$l]9q9[+@Cw4.#Bqsk6,Ȫ*}> !SRDoa.ev2<U:Õw8*>pW;=ԭtc;OՙbDx#XɰyQ d.*T%sZw#L5$F"ɬ[fWX VcEOq}*eMju^%FRUίlҬ1,: l3H[E`O'ޯ\\$Q[6]oSoݿsNZ\BDp'CM^r[=dA=Z[,EdPo-g-2Yd.pdv[+_Ot\7F+!T $kk ]Drj01m͈sǽM4Tjcm]4Wo, :ϭekypsԀV& hvv&9GEZA3)4#jht#>lTڕݻ *q=1\ͽŽp]Nl4jJUv{Jdqy120b-ɑJiZ˶9sҶST2iAoIp3p`$7% LZWfpڳGCmĮi!.$|ĮM:ĵ߲2BTrBl^\\۰aN u2mo/|5QF `Vx x!A*M2vh1ѕqU$yicޟ%/Uf̹bN&wpWfn[b\?U,EK)|.{ɘyBwLTGWwܷ.2nC8evrC9dXETc A 6((BSTS/MedF(oGN^ Mw`U<&lg4l \g5lnPy/ ѽ\,M*A #tJ庚 go|ϗ~U}*KX )p/SZ:ekpBj4zs3.BPWl\3F:eYČ*25 e"SNj<[ /Vft4\̹Mns!ϥMcVq!d@Rfy7%=Fi:% RmI]CȇISG_9zI#Dn EkcHe$/&`35BAwm^~Q5pHsna`r2zJJCh]^H#k(D^ViWmCc8*W*A,Dg G'LR4W؝W|eE8:,ljrH8^l\ۣVqԞ*m ]h:*7UjII&Id:" 2Hȑ2gGjU%t͡,,׍~Dexq+$*[:Al q"7jj ]\@ǣFjI:@;~5Ty J<7"G*ެNX.T˖Ȋc6 Xn " I[bNjݫMgz#,:l`JrK]ˌ4܀J&DZۖzS-$;3nw3yx ÂcIU~f,\ d&zPD"Pn0= M,RCNmA) XTlr]Ywg!j)dmFYϖ@Ͻ\I$RkyPy41x _X5+6혙#q/AesT@t='5+ysý{rz^Ʃ;n^dVROLUyL:l@DCss^^=QVny-|-TNB._ג"mWOi-B MO)|~Z_K^ЅaڦHMy^@$5evNWTy-Zf~DT12 n]͜3U($8Ee<$#`?uЛIYEK!n Znnm]2B߻@oX[.,_#wڪ3iۡfo8D\nIYڎ#ӕcu`5Al.l!PLG#MBu,N0+K~5V"/8\߲&$9Eρ.siܗfTI D{&,~]^fh34۽* 홑xp*ܴ'+M-)W,ʧҥy'uh݉8խ},C%>$4-e [W/9j>mti<9fZ@<a Բ+@mbnEFg#"~^OX,v 2Fcܾ ewڳ|}{U=%u0SݯZKGcFװ3s6 StQuĔ R޼KF?B|ۃ*zF755͹q >f6y-\ 0Gm퀝j1bL6޿Xp%RP 3um7e]+"aI5s JyAC1nFOoz0F,vZ|I5{c߼t/4,&9җHlMĊWw'ɴ1؇U}C{ًH@by~¹# vvh]:=>whu=omeP!8Wf0ito0~1T'k[aO%ރzd$ /wF)ja H[u&V-E^r hfl##95I,Y+$g +JlH9d|sOSzdpe[?1 ڍa;3fR "p <I#-[`8#FfӭdGfe " ג3MPt_q́vʒ 8yї6Ƞg/[F!'v`WBs_]>n/v!e2S=NO(۔%/z|(W@ʼn _^#ixR?$ 6F99^kKmaS ;sJ )Jɖ#7$Clux";y]N@?{ftfS@$yZon<ʼ4ҝ6IY-fheH>ƹuH>\ 譧O:rc9R5^2=Y.^l_w;n#P-Rgok`'?>r=R!vKF:iD zՋmTU~HӮDp&pܷ#M.żH&%qXWi%h\2Y$q2V-S_^Feo*MH\Z\Z)#u8?Ju,z{S4qo|RM; 6mm{wHю2*KX-.n\IR~i= U+9GejIZ9Dϓq!8M-vȽwhKeȹ&)@ \@@*wSIHLgp#Ӕ$qYu݊]jT7W 3N&͕B0\}jȺW Ƨ, 5ܵM>Urʠ!}iE`3\=M-Y\0ڮ-SD@.[o7S&hP鐹3G -'0;O$Bwg<@2[̭'sִXQ4k';ҌZܦ)$$~a\tlT"ʿV? qes4YW',}(Ѷ63h̫HjH͹?0{Eh&h&!V>q\ëe}B=n8SRSeucoROs#Dxa=$Q#Sa dV5WR?:z'`F95nkA$w28*GQT.J\̨ӐFQ|@l5뼰ЏQ**zb x$yW=]4sBi&,C;zDW 72 ?Iʥ6sYhyFݮg"=8E_!FZ֦+@HkBKx͆L8~g-ww+5rG)hX?ʖSR/BHبy~ bnpD xͦަZZ= %XfPA f#9Z:&EI@szV)|1 ѤblQLG@9kU.%܍ M?#hZXC9)TW\]wVfF -Tc;X5oh[]c18WQB UQ]n%R1i"'!@J1ʚ[}bwc]eVK6Ij͇GV$V@p!d؉;;69o#ɵA0۽p~"k4r(c@y\=+D ?JUC!RBnA5I$FyRMl6A4$ZI|KN=UpӻHAwz1'n3[2p,}>woHSq ؚKMkxp9|dImoq2јFj ؽc-@ (OLڮ 1DӧR{w6e{V08cNei3a .sWJ)JOǤ8)]f (!A0 U]"#&$!X |Yb~i+]Ys_#I&iSI=+[NZhʐ/7I$<]ZG5Oq)Q}T&]RpXJW :XfMOsUov(<Nϔb4j=Oy|(FmR" ].}l>nۈXYE=tU<~55$ֺ4w\n5z|Imv?|K{Ww{\K9lХ){U5 FyVUH8ci͢To{o< dsޔRQIf_*9v~FY.JXm/SH;ZB(Ԧaf}Gh'2~Am2x;I# V,rG # tKQۙ]-iH9e{Vю[tt=>mck0#.ޮwhI OMn\L>k4SG4##ۜgi/>v<-- cmyҰyw YTy< -ʖI UAt4S\9+Wt34 .#ut#u~d#]-v# r#`yԡC92+ 6BKEtk\O!!,1yǮj (ѓM5hX3'ud6k&|@~f2*RbX1|[C#ʿyO'Yv2Z672)#ϵo}xIq#v*&5}$OaqpwM:+'VK4m;Dx2Z\VWszݶIɏzicdތD*bE9'Ҡ tkdE՛"*df /* }*Nf-롔e,NI*1o[<("y%NЫަ䵴{ a9uPIg2[Q;$Yp y4;rKޙU[iAW'.# _}^D ե\ɤm3"vEcu$԰]p6YɤӻmFKi`&~ʖ8-U/;rA XRYDQMtwƟC$RoB&lPaɑe  :VH;jŽR_y%HKӧV y*Chmj7 ɗLLG)JǕ6jK$y%6,xvM,9UUHᓀyJK$/>;d if#9wZͶmlWrwVPjf}IROqG&!n#{)r%HsZI|Wֈ1iH*+Ң ¤JX'xcYos|z|oTO5}䌥yr 34 '9crA8K[*d ڤKlD֪W ;sL AJfaӺ[,v7;2EYΊ2.2Gp}G I R}B4xi6ypsHbl.~xF=F璀qVmZx\ iT}*'#m4Q!i˨4FE#C_z O60X`KݳGappòܤVog;bs{V|R+re 971 #+SӣKYGY,R6N@{vaʕ9h*]1N?'{>V2"[>ـ׎8a' `Ջ6TI#d,w>\ԃ҄[CuDnjXamHTd|tcMpQU8k #,)ld[`t8R²NaXGeatX#@0 @3b)d`SNI氜W:Ekf7[wR3m0fN3D8z.Tq_ʯܴs衠)$72#Vrlt%yEkgݹ0G~UTM63a~,n '$*7\IVC}f6sˌ7-nnbJ|N}qH %Xcpp=i±iQ"@B5#\ZeYo7W+'~X\Hn!q^+~ v*lۀ5g&̸?~6%Žng~Z^U]ZLFO^Y$mB6V9>Tyr~qqфCd+4LsTnSK$;VͽZZ75͇w^=M%ե3+ۗNQnξ]^qB<o#Z]$3AJQd#1AO='KlD%2)%| h#.pia~KBN&ێ՛-{-$ie‰.yX&(jo=ÙUojkof)A_9[W72[KoyxS^:[:"@P69s$LSJv,5;weXic7> ieH̬ӺHQrVDJ9̣n ?JW˱<]a**+ 2Z[K={mzY%4n$Zk[ȷJoʶdZA7rd+H 2n!NIs֩]kyddi+5K !'J^PVlA%-P GL528݉+ Ғ*ng\tmm xQPY Zкep69rXm.w>GN(9RF4=RtXUg;lq,y%O?Ae[41/QYPo:Y%vIZovSh.Y4y~sL&+XHo"iwnlO^1Pr <YeZonH<Ꮅ oA Osi[>%XljyjΫa ; ZnL%c 9f $f{0f_;[7vvn{{:W?uҬdSݺ [Jcx4w2^z4+J*m8]{4CW. Ii;ꛛ3zi2s !ARdՊXiqJ rc4`HP1ڶU[;!H Yޘ(AžP[biC2{I[A=sw$;z:wͷdB0܂}[Z1̿|~ֱEe8n1W[(xM_&2qw)$X"pzlRC&3X18lwRO*Fx[;RVrI>s<Jn`)ñm-'WH8dswҝ"MN0}v].ԹƲqZ&E %l*H>jU=-Y7pq}Qb8縉|r3ҩ <$zI$̸ٴ.lcGO<ޣG[7 ʸb I)e*qæ*6ԦnGFwwK<Af`8\8H$do/p=xYs1ڥū4Ψkk{7(psҪ0ʥGRzSʋM6H][-5 vsⰨ)Fqq8a\mvAgbKA@qVmb/?J]\ $²Bjh1,M-VT{pF[ڤGGs0mNQN IH#J&s;y.U[:%kjF>dcK|xK^YqI }jۯ;@8?xgҵ -Bv.1⡙bXrsktz򔜬2$XYZ[fڣ,cYosEi!H䌗rTWWoY\YKqu뢻6_ZLRDscp#k؝DޖϜ,2Z]# t:6ko"SpO8үg-8s ;CROGn\KhAVqN*>oo A8ڮZX" T* - J)Ş(EkV0#PDr;ٿ[4f7h"9\[cqRyS+=MJVX!Wsc}uwc,I. F/qrF2A;}躰FUFgU'%})'nYM ƚYإV݀}/,PL.XqTZunQX%KŹ@ rMv۵.! :d-3HtJ~5x~(Ыj;e0@>6N3|[}0YYE`u%Oh`Tm $rB1,Jrq՜mre{/@m'bQ̘&^ +O!jBIwG׽-lw1i﹗yiHWD*jʶђkY I\ZپXG1RǦduaX¦OCX:=XHnqZ fٚUݐ*:9 o^i%'z'# SM 2w|8#*qLSExd[x%O5n_"fF*K^iOWe+$n| >j_cLn9$\ |.CvjUon#0I#꽚NQ"Y(#@yz T͒|[V&] xgFaK4TbչEڽ͜ l8n*iBWێN?ȥZqJ1 28u$3vyn:`o!Zڲ;Yyycv[vwD"luROT#b/LG29v)Fɾa$- cN H 9oޯ-Gc&@Ęd䐀XI+% my~=UkY.-e@ebUCvk%{=:ύ12`u Bvѫ$0"x9gN I a"#KʘU,8#.m!<99lS&8FXy d` R vl֍M >U:5ճAy$raVJ1j6ٺyn$'dd2kE qF n=1H11稢ÌHγdb`f<{Vm4R zSTDbphZu)خBx Et VX퍗1٦䝻pO|Ծuܒ|JqJ.`2K8HךiEєolFȈfVt͵u A'9r{fI߼SچЙ.t7wqL_v"t$ Q6^'2xbWT z #ec, c…ݷ)=Zp#ΨlJSP1TQCG:&Q ֎K"PO Unr"Qf6X͉d1ʱ|y8ɫ#ȿ#r֦[4,$ jfkWfnNsDa%GGO-},Ksjך|дrDZ_O&),ʆhUj|i Xg:N#q23\ُy29&zNJhTSP 9Yn7N+mM>y,b1v+"*.05%aC\ТiKDօT%06<´nKlmG3jJiP!hgos9[\4f83r; ɣuIhokxR4L7bqQ}F]v?LeX# }ߥ,w2d }3\V۝TS2$~& nv[hG tʮeC&8|Us #*.}K@K LJKHX qrKۘ*vҮʰ,chz{U 6^8Ȉ,{Οa+=2\U]˫<'җJ8$qVI#1*sW-|\.Mf`tp2`lU9'ye٢O4m\jKRP~Q\u$a6'km*:2]4dIf#|nfYԻ1L¶γn1Z2Mhϝ}3SniQ(_kJ~%2es}s̊8lg95rRqqNB)i 6N:+(vRW1}m,21;OYdy%92\fieBC/5jqMܞY43Յ&Y3ǥahӭ܄z=[Y5(%h©|j5IQyhmKnbPIOT35CfV *9 ?~ѺSp5%.$21?)>pҼPhm{}j+cѠ. A9,֫IIY%+[ay?Z$f_5]ST ye2OLַy6̜}?m'yy~DRi'smdM~Xx,.@1!|o@9rJi-Cy9@pjv{mk7^$$7ŵ}Y̑ͦG"Hݾv | q,ŗf6F>ZK(9c*"O8il/avI` kUM7WdI&)Ȋ;, AV*>~̗7 e%&P%h .+4>W{!Bj+8c52 'a9& xB Z۰odO,O£jr<#jlQ۩̻$mVy ~uĘ xRy%lF@nrG?Z݌I$pbh$˰ZQ4>Jr$Y"^Tsٓ>8YlHK+*e6rB<Q X֯CdB8VXIU~o5rٌ`"rf+]VF;hn;NkBd*R8ÀsF&pH&E:87ϳP0;V5jޥ`7 aSJQO8#j_ @Pj{2dNPw2.`PR6B tHZIXdvƶ2;ɬg9BO [f;FHHpp:U ـTR0+vux42 <͸ ?ZƙbXzgVuʓ~gvb`X*ymnFp|kQ(#x(C`q^ťB³rA~S|KgvG0c$$mcK,d*jLm6w*Ge5+3폼:~ ˔(!_5$ޣ}d=sM2$ 9NnLHў3kHԾl:W+}DHNޮJ.%]_cάʆNX S=Rl%xzQk%hcG;H=-ƣ#"Ev\-vա!Nز ;;TkqE+Y"CHjF# Uf&K{o.kh\Iu;vN:Oza(WMwwa6V4/*Te\>[Utג]ȭlƣ}Lߴ2kefp X@[W(2|Vir,]I o>{MY?6<*ܒ~DJm[\,/XqPOf(LI<En\#/6fz(ԉL`FX6\]_1IU}kh3"Y ˞əM\W3]#*qFoYP7jݤ[FN37j]>am\Y %3hw2!bmڪ W!b+.@ ^m#y y& M:U7$9ROrQ-bBQe Z i  IFrWuwo 5lzg5Iw1JCd:cxer^}j!zB|bV7wL(FjVnDo1cԷ=\$T(Q%Ɏa<{s8ز:8Kw㎄4eӵ~EKSkHnfݴH|!A5I$?~hCcM R8LhOUXcypHݦ؎ LyJC(5IGx`_G4^iE\c>'0Njm<" |1 l^N@ 'VͲ}M]1 FySv#[xh1>Y$P/G({FfTIRW`w$?J|T]Fn1QmH%!On}.8_5y H61nA{H2$Gnsԩ-B;Af ڝy#[ +ުM$p؅-cHʩAPT>Uз4dבmWێA ٗ|}*Xs)ڹWޫ\6/iB.ZJ4^E>ߘ"DeFj{޻@W< IB?>G/}mX\ۯq*XŜ׮֫nlk[f[mA(X}V'[ *'v=,bW<ܲl2*"ܡ `Z,s33QP~aԹkrZִ-# Z 4=\2FbSn:C3I=i)7b۸݆9aH$T BP 2 v"sU3,^E7wB o[Khl=72p08BYs2n-&Z'V'U?*}jlԹEJ|0ўxY p?N*}#-8ݸpG;阇g$nJRbչ__2L"vsSdi!`)O υeH>2w-I$Tt`3pxFlDRL"uS>RqTm 7T )F2vkpy>@⯋ FYDrrO?Zm DžTĪD%k8A/: 951eYBG(Y[f;NHbn l~LQN=gc&~aӊͷpTN3tWI'd2\>U&Wa7$XlYp{2ZA&ӜvKuitt;zUb2L|Iǽe4r$z-Yԣm.gBdr9$1kB%#9*0 );i{D~IMuzMk$J˜!ڀQ8KhB%IUY-ʿ^:6z4sYf͎A1U1c4$Uq[*N:V|0g3QstvEc;!x_S֯k+&6x<:/z gi-w .Z>nW7mQ48mbIOjybH8ʧ(ɍ7e[܆ *뜀>ɰIc;ҵ@֑*; ޫfKw!>))[]M00xcw"6 w}q4pĕJ1wpϥXA,Cji.- GkhJ}MQDntiC4phyE޲@2$Dm>c ұ<t7H׊pjưy,ʹ>S4MeXV5f@nwS[RR [)sMl׌X‚ }ȱPn ~ay{|ֺ+X T㷽^b#p$1N֡wPN{;as/#m"3g)]@ai}Qf:M7(U;I]fynn7drT00§ֱv'f^F"'`_ J*j:[Z<7 7!A~cH6~o3Sm>f\SeI@U(Iv 5r>]آ=AM;7LgP+(*=[ιF%#p^T v=*T%I'yWUf`댰 oBlHy#'5DCE9n ;fYĄ6s~J:(_ʷwIptIyx9~Ť͘r,۟du$s&J#xVFDfPqg$z l T:d3C׭b^̪ܺ03i\2% e{&y8 ռR07`f._:Gnz g_L.XUeY58FFI$Ck"mЇ8y?a8Qt |x#pk]:5PHCsY7 .bG?j֎=Ќ~upIF.%$2N+եCu4 <:U KߵF&c}j5EIJ:K$%IK=*( ;(.)D$S? pMtТjې4Mpyn&Lo5$i-L:jcO~um`Q\V(Belj՛n=*}2?z;Ԝ<9W#֛V4:2s@s#)u$I'`#-Pxe䜩^s⧝5d+ 1#;*V-o?,NwUW9<ƫp&E8!ʟN)F6Zgز:~5y@ g55&HI=Ӭ@*Ž#?΢ikﰆ `7c=,[X9AcfcXmo< 'Q{5kBw72賦՞\.geD;e#n纍QarI,Ih+v|)-u#D±9nh9*:qJTu'ֱIW1WR-٣i+Vؼlʟ0 W/1-Kco7ڝ*2Xdu(g޹t@'r3U3N.|~6OjԎ飳gR6Cz1J9N;fuGIBe=spG=89aKU=W(hdiYNztlK+XRTnq7փmtzIȃXa=:fcBYN?ƚk\cQU"TtԚtvA; 24 AYylnI8>u[c#'![88Qeb6`FzCv<>I 2y^xmRvCj" 84ѶsXqK/#Ì^WɨKkhf iojc³h."hodc[Eُ6W2/@z槟|2sG׭gtrOC>.|f\Ey BP~o#G1B:}jpȮH?2Id)FM?xڗ6]YO4x uV!HC 2m?y*+VۓGDtl SZnkx]B~g.3FyP?'}+}lK|= >N*=Y1iFŸx?wF<)x+!Y^ܵlE [Oy="\ߑi악V8h>jz[{m1<' (=Uk"~Q$+u>wOinW0ȟ0ɒmf=j՚I5)G•X*jQ$o,ֱۢ2Wg$=q\ 7v LpveMbAfz>tdiI478?K+!]T 1 nƒ7&˅b#G.-j 2*բH) U:;X>Ku̼`/˸ys׬!g؊=sM*_bfʍ/Z1\\!@-Cz}BhFZQRe#>V巖Ua p]~u>\r;ȏkK k Ʃ{3\҆u؀k"<'%VyeKVVb!E~͑YZhU )nI=dl7 UHnF^YF|2}nro̬8/ԯ͓k:6YcO*L.j)fBb=Z " Kܠ5I2D !ޠqi )ПZ괅[hd&1 w⫙]iq:Mj3yjOO'U^M4 > jjhł^zՔyC8ݜ kPvslW\qO|02jk[0 &asq ;~/rJnItq}a=2  'ߊ݅d[?{:!:rK*^ΙF=QRInSP"2 5 ̋! r>Py2$ lY$9#Z0Z*vyxdwz$6Ʀ&(DQe[Of&|)3i0]>yd@ϯ[FsiYjOoe W J{s4adn Z[-묄fR1n+ ;%ttG)* 9^;Ik 76r4&&*q8Cacv9mDQې8WM&-lQׇu =}oM7rX}ô҉rN}%rI@G4tE]hPR`͌Zi66:wmk+>dRF8c^k6%6{|[}3T͹%dA&Xxϥ[Hd(1JΆhV)9=/bYE;8mwUmҲDK)+R FKa1>6sU&%siQYFY:鏡J9^HGM9$ϧZ^q99MLc&I<5fKu!fV9#ޡ;ZJօ' tbx;3yMCvqkY->r"l\Al$V\a(8oc$ UBDstaq`{ɹI_Y#6j>l`pM2o'E'#4,Dd\nc8jD 0_LcB$ӳg[a)n70?:Iqe`j&Q DVLN1ӌ武3"v:hE"6{efeeFGN=}NQv0e9zqxZ%xA;HI=.GĮIK a`:teyL,ca`B:UƎ7"vIfҴE{5I5)+:Va8P\"Vd\㠩iL1|"(VGdvڹأx"ϕ{=_&E:ʗα6<?Y>lv9:cfOfDl#8J 1L1޵e wuTK/ 3_A*\t|\]wUz ke*y]H*=uV)1IRVs0&7FU*=x7h#H=ޒXF([~2?e2FqVb\瞣 LҕioWUm rT/_EU<}+F9p$n;RbSGy OM}ܫy֫*8\Knk8.ZS3Nt-M[Dos5 7/$Y"q9ۚ9F-#[N}p^jvCj@߽M-jwKsQ0sMI.tQ@@QTrC' eT"IZ%(4d\5L>w_NBaP!:g顐1is5ym¤dڢT摜c!MFPZ 6spHq:Lfk!'UUb~cj6&B/oZF7^ass s0ebR~=k+%L [/#oM$ۑ<ϭL)9kJWB & '#@> ͽ둜֭-yBn!\c 1@^֒mnc;g^x p~u4vfL"㨭dq_ƨIi4zn>\9'KQͣ-,򠸒f3n9 SZc{rE# s+y },Gyj9U#onWq{嫹yH22 C@ϽQu!)>YvmOڬJ^y=_6yn-yC*OSHktFz$<«{U$Mgq(рI$h[ƽ*aܾǾjպ]0Fs$Zq(e;ٙTR#e 9x]c>pE8Azynl0SO^M8.vOb$~_+}g u<ֳ tvR[@=` hy>v\Nne%+!Q2l֒yVpDl$5vYsmmnc-7Vf?,zsVe!TLDʼnVFk7Rm)1.rNqUH[peT zҺ_M4`d]G,r:Z%myͪ,Kgv\v7tBpZ΍4CpI<]eKǸ3m,eN;?-$rBqޣ*^Rr9z,iLf,Ďul-'ͷ +]8)41ٖYD^~Ns֦ :mNF3Z3G u=H"A#rzZ庅(I*3=Csh,$PR&+ z;/x)Hӯdޅ-mJpr3r&Ra]={k}E&>s+ ֪KB/6س$RCs2B%iO9U {R%#'i͛ePI׶j%o Q#;٥9]v,ں$CɖQc7.pppaͶi 0z{Ԋ Z3*;>j+3'8rELb-zV0*x$͗3O0ȑcg=fۛ12GSO54vhѤIT?f{SapHս:'{Fդeպ}MLˀv8,9?Q^'q7C֙k[&IUa9դ 6Ze)pN;j[ ۹0323|>fmV"B205YI-Ȼf2b j8fiuBpdr}@0¯:1't!q+0e,OOΈl*}V?)2+7kilv'Zz# -oqۣ(34l'NhV=ZK Dk$jH#{S.%NNNtm 밎#:X(Y$捎 t9沤˷Y! ~exsWES; !援)(wU1sZLR\ThnYjs=ԡ-x By q׭5'2N¨ ??@ǿ(w= |9`8:_>~~HA(!hz?c| U7/u~A"a"Q2qGttT?irh}~1N0gYCJ-r|ZnDĒĻ$$Ӥd*)V:Q95 ӞEԫ_6X1\5Z3^74k4YlYn[|ckK`ipxt|rzv~qyu}s4 ! 13h!Qbcqp^''$ NIE2'uM.m/|·ELR2wU՜5kx=xZ[ۄڞ;D:Eĺ{$z{?IK HUS2:677>19G8<^^]zjFnaIj 32ߦcj^Ѿ́QٱÉYչ˅UݵǍ׭=}ߓSc ###XjI`d|EEMCK->!+qIa]I"JhÈZ|STQ}QqU͘TҘ֜J Et}chx$۔t ~b۱_T*Ց`@寒|GKcpbq%D)UK~n& QR2EKjq$%xQvEG$QWzI)x>dݒr* M|[`'vz4B*ۣ[y$f@+ P `F_GU^ <^ ''p68@ Tn v[u!^"I!!##K#g#o裴P?9u7``ac,`c:`y%* V6%*N#W3<~׼^_X2YГx\N*MzN܏҆j:&v.^ &c[L@\s5gV}6wv{8~rpfy͗ uWd &}uᣤ'htBAeS5u >Mu-'pvos}baCKf?fDޖ%6*vbNݮnq^tގ>-~%/'0/:GLD&FſKHKvMfC '?(4"CDIi+Q[Ix[/v_ɀp(o9e XɶCc“ g%$0Dw@" gw7OFFPD "BTFLD\BBF@A@F^@GqGFC5Gm@@G+CGD7D@0h$t}|K#,(N..^kq] lψ܈}HH o޼)"iQPQRQS3P8Ѷљcw280R2N$lfcbfmgN3n {z~[  S"!Jؗܖ:ޗW RPVVVQSUVOרZ?Sw6H551A3e7hfny&vƞA1[WArOW!Z(`OxaQ$EKLMJLd}ӕWZ^lV_.UWm3}vNn^~A-SϳBV$[;A7'goo9?b=" 2>|BG<_q~Ca_nx_N+\*o. ɿsϼZY6e.~o \7ŝpHh_.Oel\ mW?dj{ٶ{oP~Xʜ1Ώ.~_V_%]k\|c۾| ~|}x+_K89P)H|I{;y0d^ߖ.Rj//`,\%,d5NMXQ^ʿq߼G[|\w5LklCZ8hC?M>ȿ`D(4 `pؽ\.k˝ ROZWK;[/-Rozzcw;Z?{:ž#ћ_#{1.KEgY7=""'"780"@HQ QQ 4vPY%g?׵,3l`8rbs{ƀߠr'ptvF%dgA%hfB%`B  2"KAABBD~ ^P^h00QQ110_a4 \l,ܿ$p }HJIʩkhjut-,>Z۸{xzy~ kD\|BbRrJjϜܼ_EU5u M]=}CS3s PΟݽӳ˫ۻ{6S? e_(."52*k`T|N4Z.S tBX_;g_̗%vzTlBBY- 8oqJ1\gpwo\K&mQdeRW67կ&%6N^U#!Y=) \#D!b2U;/ϳ. /Jaͼp$3AjiB $<9%͛R%~AڱYwɤ ίr'ńlٚ,1v@vv Sws t0آ4A>' qH>Z&]J(ptD?[x'`l91$N\㵊·|~)L&i=HѺ퐴c<\+MvT%Q 6v'M.>x}h24+>wU!F$vxƦ$1ь4%fpN@J+9IW>.+p&͘[0b$@Evi\RG?F`[2A"7)lO΀-3 }`8bkケT50_3c\iW(߭M,O ITag{yxnc:Rַt)4b[ӮieNt m;0 GdU0AYD攥#;i- c4U@{kDι>#+'UMjC?aS8̈بiD-E_YO|%->Wj _8›g6Wp'+WQy_uK;yǟ'!iUn+AwLւ'\4.]8a+o*otQty",{GNu{jx_(:;Dì$`g|˧Uj4QuѬN z ƾg[&-˦ecn8  `~ޟ#or xh/"iAPJ#Sl)zÂc t E\<HYqn?9λ zd-B&Y6o<jڤnp4"5یm"TЙN`fQ3o?S pr}(B||{n  6^8߿3Ԉ&f(jVGA (K[+dW1Մ|_6ʎQ R=,@{9t|lqb PFqiêj\VEQ4W}U]S-MqٜC«KSU^uf+ͻ/nUc(VuUZYoԓIޯ(7#D k(W6Ҵge8~2&JLoy63h)\3 l_(Opo~%ȠJ^f1yˤ0Lljjy0FTo5H˞mYy& SݠG&Aʕ~ʡ# %/;Gfoŷ_S̓+e` KmFOKqdqOtA޾2%;}H(C|-\ksD&WJj$Y>$f=X\q9$ G>xM[clLγg^ܺFlCK92_5īxo;2lmtOU͝Y1YB?ƭ<&+IwQb!1-xX ^y;*x?󳽕RU;o]ݹg@"Ud$6Zyѿh#5{J7-zG]-Aw*Z;{ Tn 1-\QlCPNB/]VAtaN#t1_(8C2(htuNM|ʠ4Yꬫ;mp$iǸ8REǟcnV4:{i';q ҝ8;`VƐĝ;`iqmFg<_"D8[R6۞5ZK{pAJ Yok m60"!]`;%>5aWFjrJolVW`u7gc8}@!ޮ FTVBi!-F:U9h% _^qE{Mi"{<)k/o(-h}Lw9[] c? Kz\D  z*S^?Vژ(m-]6d]^oᙰ^> Hnpdcsӭ6Ljymz;l|6g鵴v9i76wG boIDm6؈jW}UBt=u0,PTcPa߻!PD?4>X 9??7Q jyS/̳m\++B䍊J[I*'4W=T \,@ י;lHJ4'B\PO5-ۅ(|#yGNZsaZ?ObXh6Y%Za>.aج^[7S]Ō& Ml\P+3U6㒩5R4i3T`:Ǟ#'\b_p3n^2hm1LmOٖb3}UV칥ydxT_gDPvZξ2daҀf'M >tT Q)x@"m่ȺT&ǜ)Duk]mc*Gٍ4kRKS%x)Jۯ!9־c )7eKG ^o̕^~ʼn}'YG7Ep׵<㩉bt|>a\Z}s'';|X~@HI&gWɟmL$x5~^hWw b<2_Eb0->}u*F^u0i]s>l=Gji;j,fon& 2$Wm+ 9ge07\'՗;{ta]COiV) P^>g]0bѶ('C?wDME*/_ˣjP|nu/T_T+9I E Qt;QZE߁z}B_:$  P=20 ʻ}_Ћ|ˢx2J﷼S5T*&D}2G_^I ީGl*]4&}"wH3@$(mb@LJ?m._ DeHb˨2Npt] gS-NlTKجR !o~SԪj׬Ќ1x>+/cfwwbZ+/i|Jdh~II 8p;W?%\hk)DТ^XnZՉdF$?ŪEt'=25S6jfnI9ߩO)xDy~ϼjR`5}ɀ5!A!/Ӣ9}&–O<8j\VDĵO;2}5hOtTCOP|ݍ eF6+-EI}q=QMǺ/99*)M5`'YAq%Ѿ; \(3_h&g@.ܕgqÀN+cVhr πYWdH>ٽV]y,u6)d#!89&oy:Гd6C %%{=9w [YHI&GܒtFazUJA.!I@ t\zӾ Ёl\]b~ u`,M6'>mL=fq[5}UZ=ڿR+.w[,ʻdDUX5?ʿY3^K呁]}sH ud?v+U:6=zI 25f?c<ɢmjHBjF'8 ޶/[KR?xCEQf8=y.- H0PN>t}*$+3c[e@K)ǍX1vܶ?`ڑd fҹ~a7qt3'n6_KGAϦ>X5ls[7Cˏ--eP` n.|eI LZ!|k2sTe<>*J(;<`qWIYnKdnbBY2؝M-k4{1yjW]Jm*86^j.qrKcӷq#s`ByC!DmbcHwd,Kʓk;N)NJ" S,A0u!`FR@&x(@+@,olnC$\7FE 1~UC9o嶝e\ Sd  f|bS/134i^C6O`DhHzpSʳXViRd&#R!=#K÷r} f<Yd֣ Hx܅](=2]0kT~U~hS#/rIwPP٨iRbA|(6d14>IC49|5rIvۂmtnW39Aq’澧`aӭF:2ߘw9`Q~<ATXx˶Ƨ8&cO$'|+T n4N 9]yA.xkLC#=f=Lg`jw'qt-|zm윋Sr#h*)-I,ooL*" F-j &kYg`ïߦBװg bѿhp+[AH̢u M\u̎T-g8# R0;Y>GGj{s$&@ㄕ=ZဢBM?9"&aD='z$m)_ߔ'O^<$c PoxRڇtТoU7B^Qa"52~z,3] e e$ <׬F }/qΆ7ս^ԾNZ{hROZleI~^_R5m1B9.v g87U\Z62){m੬c]jHP %J|#wVۂmapk/vW$aXB*glmNvy!e8\6ysg8HT{'9D8ζ6VnDǵєyѓa*\o&>p4h [ W=3Q+56ض.~GH R _z [*ݚDh^S 4 F&mђc#:^OFyrπb5EKKOr4dS2$~; B[ )CdzɊ-]Wy,o$XL!#~/ ZpzYʓi8RS/1Z䏟!v]u0ASdA B|$u)+ 7*`$TVp-=DX)S!q"(M  HS_HU9=BF9ĵi_ԻT Yc0Ѫ7rejZIbG]Jds-1BF8 >&%g&V,߿N.V{0zLD(rF|)O|U[^yT"r,s»'VCuLMb,5&f!C@}N\{O+7;bibi14߭#š:Hə Ͳh>ϘhEiĠ`fyTR=E^Ј-N|:edCA,hT[2c%?R{jKkSho0)Hrsh|7z rgu-h !\RA%b3{<wRtC'73;>xF’*3~ h,>#LLԵ5>s(E_YwV||b)eᣍGHf22V}wc '~rbxsnn씓t2Ee [1NV{yZy-&_>ҸgUYCK #exa:l4 i<,F|"#*,pNMBsZl%yҾjqPkV3_^qU*/S%ذZBÁl~j <ٸ kLp%!g'JdJ9WhU m]9>ۿQɾqw3-@3}:صGl+\}g7-x@2"q'.d̫y7h@\/b)j cj*F mx1F]'FIJ]҅Ę Cd.]y%bp8lɥ縅f$10P,],}9fe PqBc^o*{_$.^RXY~8ށ_4UOٻ3ɉR/h[ S)HFJ`{Lb $na5aa<ŌOz19S5-hBZZ(ay?e2sIt&u:ѫNH6Grd+^JGd4%DUi539L+,X˵,[ G8Ѡh 2۱|<4)  #>x򌜎n<оQ6%)熷JCI'Ӭ"W%' Ggd۵Eg|՚&9wU $'(!rQ$ީ G]džG 9;yDU|s`g]0O{#Ð􍱄 SGeh2au`$Ogs}"TC$m0Y술N4UY҆pb*l&#"zٖFC80#o8H%%5Q-?|pͨi4 <ј k^;2а'!ZHid] `ӎ~ۊV#;hg%3ܞq+%jf%|½aC3P=F{X5 M2{qoo`z#|'& Voej}O@YE"ډ 2M}ͫxoKl!W6]x;Q AP=+z,*>/NqYݮaV~Y|GK`~"CQ%kv(qSv`̡PEqOSWSX8-w[}}ڼelShym1mN!~r XGN=?^tV';w H?! ffq vb 0hhY3_Ch7C kS• G0NܬHoꎦ5:CX/p1ZKcBM?Ƅ:]y9Eƀ!ȷC?j6v0݇BI{`W$.>ꉚ_~#/e}dZ;'U9=<{O [{("睹ڼ/: y]?0ŽnVk"4^Hcs ^Tr __'~\n1ńLs1K$R6J4r,֨>lk+ЗP[IX*i\DN48-#z@@{1l*X]foG`2M8Pͷ8Y6mwuy'B-J -Zs\wҁ͢:tQG0r'ߩv9#zЫc%.Em3,,.:qbėW%)گkWaMTl@=- |V۔ڮZ騥}l7 5.t0q'SFH5rR01 j#{e3Y2 _kQ]Z~KhFgMK,Ĺ6'30F!X? tٲK饄2Lku 42SYj \ {ElTW$ihk$aJyS`shp~!B Z b^d2_<9*s-3'i9<o(6mՆPQlqϜD_Q'Q&"0?sYm `IƘw7^IdkD]磿nwQͼi 1b.s-K&~@ ҥƔkp,8O>׌X-"ΈUL!oOi`0OSth)rp>H~hm|l\9(낂(v"#ÆE/Z!'![ %9'[FUD >DيwGP%nd, >q1K(PڙYX.dqAۄV;$qWj[Hk3 rk]xjoUz-ԄL0b~ u9*Q0`rd$G,4f nJkHؘ/?N6Ϗ6-U%dmRԎT↙w#䌾5;4[c$ncC|(1h y<9mπK&6|,,'R1y#mTp}5olcz|j{KDXO2@0V3~!X-)FtQF(bu9)ACϾLx)5O-3܈\p3i xV B'iTՕK,,[XC!M3Iisf]/Ye7&$MO$J=_NahПU˗_DBkC]:dtR8J|x c5ǯdIkjK}AZKS*טW0wpg33O4c]oK$͕?JA?Bc^QkrKXk dQ@y:vy Qr]0= vX4 yC #Xݟx 7IPU>%!dbm7+X/oPÉb~fЎDTJuaD'ׂc!Ļk/}"X πXM2Cu4ңή"Z' c8ZE(t$TDU )5@t)5p\.%CwQ"Z_vA`X+rF cL d`^e@<E )5!o 2C;@/YH~k[Z+2Pťr*I `b?1 i'# ~p*_y>ܺYDAmbWn罕\R|>zKo%Jȏ5D00X-_ex gC`]/O<Y{-sgNT_j7f-鳺+Qq9ictٜjkgH@X%?hwbR D¡vlK֍C2|&kkkI! I˝m{n ~m(7>' d'BZpǿ|8>nFwUWlMDp6C|zdiN~''ݪB"Kݎd=*lv=Zn[.5?ז8ioW?/Sͣ@+|\=I7x $MOdm !7%RQY0tirr^2K@AEHd_~-T[4[Iԝ) zRHMe6`rQ>HqUleZo*֧X*T2 wfҭ\~;!iXЇB.Elq\R}fxn=ߒ6a.'//DL;5ErЃ _NÎ6v_3&+kf,Ts-9A |VjD+CӴ~M'Y/ 4_IFO"tqw\-o$Bj0o_e %_9ӹ*zIEQb<hѝ 2_q ᬩkЛ7[J"x}<,>D'lK!dE98@*ٿ& 8Ző1f.3фD1O.[| mr0y}M;^mt>Y='S*ߋ#pofH"]h%.K>:s)/j<1oVԧ.2]|[:zEeue{*lHTEN֥6;xubgęE(*B>!_縉%""ǝԊ%F ;yM؞3wxO l3+|ECp;3ZRkmst3~>DW) m6܃,#l[! q40_Jfя\Q5P.DxqdF2Jp(>΂6~sp>6u0Rjv <JIf<M%QpA%F!Џ `SlLB;ma RncPa;kPb%?X'ΘU)}5J%kip<#k0fƖgrZb"d,9Ep.3ǤۜPL8yL|5bbOrɹ| V 4PM݉ryd U#cƸ!}HDb-L{F&tڂ}`%CBbHzP?Bܸ8E-szOY2M<ߡ>&eW4B o $kd~2cB/Sum'+71~0ňSm%Vg)<4AROQEe]5]0x ݚjsk_2UK)_QY7˜n>6s+xԌ~K?p𒴽o Hs 8Q<+4 Ky`*ZdזJH&~ v);O?mDʕꨀ U\ ڌq (wcsWCgK(qp@|K8X|'vڱ3󙤫=݄q>\+VoiO l擓_+f҆C| $EEqK͑^亗co3Fܱo szY j?ʔON-sCF5ո%a8+O7kiϟ(:'K x[@RC&荈ǤWk_f3N~* B+iK0~b<ZO(7E8 P\OMʘ,%OA*y}\hݻ0gHOS&C|4Cp6Hm5C!Z&; u{ #ߨs5MH=Z2}jOMπԳ{8ֵ_t巷~sAs;îjX֓<0 kgx;'3#(٤ e PZ,Nf]+2i9٬%zx2pɌhy-B ׾iv2_G?U5vgkݼš.d>ݰHoAdX3rqž˩;LEAC ?~IvU)aƚBqޝfЎRF%g a9[Pg/$inB Y#΀6qw>j-?QE C%88Ad߉)>0LZү' \<02okC8]QU4]ZLFucyaxEo+kd:aO,' xR9}AHRׄݴ(Y1meԁu_qb"!210Gɢ.FK c u{CzpE/+n֝䋾0 骠eȮTH^dw^ҰiDYGNXsY²i7Vd<2"]2Q&ӟv.Q=1_U(E^ҏ~2t$߻H07/zNRhs@U.E(C,<AoDW,Іi6·,p1X]Ϋ؁ oZ, xiTBboX j܆R546ٟ3qjTyDs~o#* L EJY-BfB>jyUzߜU)q+vxNDP65d G'f8kMۊxYU|+1<O!ټX .&-Wuۃ'ipOsekTTɃ+giNڏ@_],R*Z69ڦMXV BβQo9ޕS]8 _NU %BT؅ ^޵[ He\7OANͶ$,nPąP{,{e(QDy~sI'p1厹 !] 'Py3:=֛5ӑqIX]Y֣e e)Ln5%'RJȣWOWUL4|Z?R'}x״5uMKKD R(d\1y/fpN //WL"&O#SOed$谷ʋ% yc/ʣJOf[W;撰uo,Y7],dd?͊VR:D17NWENIFW7UKүz3wxF'eg6Oqemakdm݅\CR3[nmWMz (E<>B ;pINc{ angL(|\*o, YYMj> S%a?v%9Ohhd~hĜAj*»UMqo*[4) S&=S.OcE!Pma~.@ .!LXMh/ 76F3| z_O3-\ 1RSMzUj<c g<]涬X60VĆ͹G!m zNJ 5bz|Ӷ7W~Y(nv⮌DgbN?\,8·zWI#߻}bB:#svU?mg~(Ԗ-fry\Rfn:CU?ћG"#om}-SpTF b~ nuj5ϡ@4eBIWezֺ2|}Bo"!c?.+)OQ@ga>vC~5%F='?hI'zY }r>2ryD Y7Y˴pvHQj~ :lT 1kۏN##{*r%Y+ ~>D?fZ|# x gV7 4vmuA<yPC;ŻV3mS'z6ؑH2m?).2ɇ/ 8[r.b艼2RK&P U_~0Ui`=J4\R &/>To~刑¶</KOb4x7vv/2Y#}dYC͔^yG̈6-V̬?`>yR`Z)Is8rc`:e+OݝHK)EF(vP~4!&\Lj|WK'2_a(&U Yl&^vBv6"TMd:Hk`Sut{T3|4]PhP'N0l䠊6{#wЬ6 nqt?:6Zр8]eV[PTSlALp3+}mYY nK7J*p|& 2rQ?kDAt $j'Hbs{VSwUW&ԫJR^ y p3(X2NW_lwHJRGLDȉ;*1Ѥ5o/5>dqGa^[ Ίn 9~ Xb|h'M;(GNS±u2v9}=]F\P>rE4W1;@<欺 rq7TX=fn0\pd4b870dZM\#YxL"2p)݊ )oV<.=M]FuY: :Q { i {=SM?>F*< \l\ RѨa8&cy^5;z m!:JZv~r I fR!Am+m(3q A2mqhe}B^ Sp,q%<\e " 4&vE<د?vdI{KsJÎ77"_kh<_-P?AΧ'!#Q1~iw`{멉[]^=BQxQ0OoN[_Ԥwj޼9]YM+]4N-{_Gƪq!qC*hAܯynlێPbMiKG4äSx>8+]ڼEs1AF,5L#6>}`ORhv72) (䠞Et5c9?zľ|P7Z3 q˂J#Dz4kf1~&'+T\f{ 8ӹ64T!m.wx .?\Zb"ַ~V?…?[j  Yx٥nM& c Ȑ\13憒wk7RΞ[/- 3I,fӜ ]oA ;Co[>ɣb8zx~ 1R^3)M!|Omĉn*AMUsu2,?Ё;Z;!W]5GX5q^ gy7ȝll䛂f.$[.=E.l+cZv'}ǧT0BEmCI,,jM8v5XzL[ ;y_eDs,9eJ+^еFz54-{D =AЩ^$[Xcg #jZ΅͂-HYټDfJ#8e B/;qN{ 'QڈZ⶟,ϰ\z|Į)cG^3|xszϳ^yj)MD +Y9J z~o6ϯ$#E NF67d]kbt8Nʷ ?G'sldZoa|A3I87s_6sN(%6.\+X#2VO'Lg {/ZHo+!VxZmYaM.PGؘKĝTπӦY8֡/o&;Oĝ,o?#DwU<?s|dGݙ,wm|~';\-ɕ~ ZzCndy.4;|krwoՎbƐB^?'!!Ym6ĭ`O1m:RBs*0zwN}Q)E:#>}r4b y:217xWh(@? OTfa^܀9"7SP Rȍ+ĸIG0vT1 A;U⭽3#wR0 G,Ez1ðSW rVgϨ%jvucPhd"xwf/FaM4,bh;i2guBҊz6> 9E|owi+J/UQ8(4·ZKkX҃~$ BWǰA[~H,ީ7M~m5ѼëHF9+iWjH|"2t5~wG&ރpk{0EFTS2δuP#ׂWf/Uv啋}-):,#3aF"wԅ~~m Ff);*ah~a} BjƐYCe 5 {>eSEdEWS6)qIkVeWf;}j \E .?l6l^2@ +K`rQPBrpUfj`-[`@$PL _4ִiX&.Mopݮybsz h5 VwH f8w@\07ND}U.Rt%FYRrN=S*bWv呮dw:g@^NkP&J| J-N&z)nƭ T&\1`2kFfAO.N>>6xΪe6t+1ue&r+DtWH4威@&6e7o,cxr+ԕ*ir>tgOچ2:Q_55To#4+Y}/TRzTAn>PFj Gb޹\\$(`,Ӏ 8 9lf'm\ #YuUN%KE,g&0h iXhY,jwb&4|*@!tzÀ;6@`?f4QU'VQ:O7ۥv~0PE ʞbQƆरl"ҿ&&T܏.˱:ܝLצjxGSUTcá~lp+sJ$tGg;")2kUQs>El+mOO6)Yi `pТ}Qq S&jWJ_sSu߹i?ĴǸ#o(a<pAcd~i^hI;ŏJf*VQ̋c?ֹ QrJs><8~kC©~;lEr/G4Ñ-[zFq}#Iy_.:)[X!ywkӏd7VAXh:3\sPs>|HoS=;k31wj_B=ʋzx !PHIAO &""7ֶKۻԓݢ2N;/߃)hxIU÷QFOԱjh].ˇ 핤 E:.3&vf 0L_p;A2}<2[\Mo] `O*6qCmz$gFMM݊48~Z. /$JKπԻu ƱGNPw0ΐdp7F^^7ar&1?~eX!P s|;_G`VJw 0P/|d^Df<nP½jrSR=: 6e֡ݮޙUK~C$r+&Y)Mҟ;1\hxY2lE0B6SF"9pZQm<KP^oY%a(Ɉ-AyEk'c gR@^nI6"h#';GxFӼ$IDtEYJr&\U,մTh"f+(#Yo&@ ~A>  q?CBw eBP'sAˁr#NTwW@b^ >"Y'Dn帪ezQKӸlA0u1qvswH 9rSR1w ZjM_s*ָRxچ~1N[NY,c6-ϝDmn+yw ΁f3h}kc% Uއ[!@k|AS%6jNO-fFY CdKF*& G >S|H (ϻwFYwXNx11cDz WRCR{)׷-rrlL")MA9?. LRW4NV#cB̺\#ID|&)Ni>E_[Z'b~` 'Fyce2B !`·qD\j5YJmf:7rLT'L^kX5UǍۀϚo LϧYjA ˌhY*a 5@+ y#J,B\FFEghʌWP'^j$P~6~j,@6؊+瓫b] =f9i-,̥\!o>p%u`8UI0 Orf\UkcꖤS')81J8yvky?P8K?QnfraO|#A(+#ɞ"sP \yANe[|Ҡ;m>3  $|)TJDY…F&+P6XM0w_{"kNѤ~[Q^M}2˯H@b½2GfõbCf:LeU>Ӌ,6A-wϻ~RC'W'JFJwk4=tGto/tYGt}Z}tgHn6ksAI߬l.E6dąxqhht2-.k[@ִɖ'v U?_}=X*X-u,ueun0C@9 HP~ݡFԠŸqj6hv#k&)VZ%9^ƨ;5 Gf%wڸyi.c +Rb50BGjߎ@6՜f[a dV;&55]?fJo|3ס}FJd`S1{. ^D er71n}DдV/V4INqC񖭮F7OP+xփNElkirZa()m'siܣI*/!kN؟˜zt;y$W\ra:BQSii?ޢFI?88io}@r *ͳO6 ԽJO1EĚD9?E~e{Ca|/%Z22iE[s6;$5>JgHG.a>bOŜ p WN@dZĪp  XM$yv,#C<準fyhֵU?Ǻ+-[},)}8ϣc^dwXRaǴ9SiI9 _5;. |E=EʠRzi,: ͵׺.Gop; Y3)ddq}7 5G`p^͸Q/ |kUV&&^Ӓ:ʷuZCubwlmdYCUl :׮j?H2h.ù#]a`W+6k1;ݴRW uI{/p8?MmOyc6tveSC엻JoP]vTk-vʚ Z{Qq +ȏ@NCdJ~?O1նd SJ{Xb*:~Pri p,u=kr& u+MkwMv!h3&p8`DZ~lQB@ {OသJH#YH+/䇃(UH.SԱ vb}Sba'9pQ>Sxv˙6Swy>"k&'Nc3%+Wֺ垞DŽg~z٢'2 s3ѰaLNKKFVӴډ0G91p# ō[^C*g\~X G'+ԨYl}*vv'8$:ڪB }\jmY_tE.'eflǸgdϐ U'DEW*$uVsإI剘~J[Ƭi=4k]YgW+8S'OVQ+g%c$Jh!e*x-Dr]wgoEܝH^GJ.1esֲ'2c18aN5]TO֠#crsPZҥ7_18cuUY8 ⢕dڒ>P2 ɹ\s̙m̮þ@yc*]=L81TAKqTROj͘#ƥPngS書L"W)qxTѦ)X   n:⯬M51 95 3Ϊ]w'VʊY"{Tźk.痈Ϡ~&ipJ9#s_wYX0Bl:W# K\68r2W-ʾc"*QKZ{?3,Lv`GT~/]r ȮV&*[l1O KĒL*ԃW|'$ ~~5J,m_< 9bV)<.ZJ&w U8_cz 7cF<{vCHA*p~`)'Q{WfOςꑕZ6Y.jᢃn f*IϚvgꘪjTG_mL'f1BpW_@xO7Pۣya_5|a&(8QF9eM>\v*MOOG9]<\G^ Ѿ"Mp'~ +ݼ,s+|(`@P+c7w;5Oj_΄RF FƜ`RjE(UvCzqҩxLX9 r8Zf'cQrGzQq`>a-O'ս*| m ܉ft.dUhk}+_{[D1{埍md|(ZZGӲf8$Վ!|U{<HbIT#s8j" |PU9VQ\`iۆrXOqQ(_/$daYy\Tϴ'#s`O>wAtଜ~⩷bbjދ$x*:c_L+]wҝ$]Oǹl]OE;?&4ʖZͻQvOyJ=[*W ѓL9R}F~6.PM9c*cq<ՈؾF0@MI/yJXY*@3ڬp?BC,jFw?JRi=z>T%0[3"'`r Ȫ3ȩѕvџLq+'o1șd R:o.CSܻv?E1fGm9Kkk*V4J BI.XY`+e*<4v?j7,(o/r3iBecs*GNz sP7#w# )J+H 757"y%ˏZ13v9NpQnr22 r RF#rz2Gnnq>̶~ɗ1V5Nƒ{zgjM"JXNf=ki@B:}+ʾy/|7,$*r7JbsJ} hd[xw6*[ R?;൹NILFw#.r 'yW$˓>SY~y,ƒ5oϸ*nR@ȣ/Ym&%{DV*ԯ<~5$(ccp xǥeUhxK+ ,kʸ'Y6~5no9T4uP \g$>gFku|)Fw+K;rŰpqO H?1^z)to~ϵ+' Y(J6(JY~ZY9-䲜 0|~ZH\(ù#w,ĕEFx:sya&Ӱ˘[ ,V#˸p͆yE"88ges,d)#55 |v*F>h [n1ֱ-nK2 $vसeaMGI:E'+|ѳt jD1cN)43~c,hQC=hCf)  Oڢf\$VkZ4p0  qQRWm2H19~yo2D+-sygPqךQcp3 =|mxuMnϏLհQz۩o44 V5o +^%[$P׋HDeOK 㠯?<}r/4! rxx;ڄu_؇zᮮdYvYTK\E|oC |oeD a!,[O}dò`5 "Ppz^jqvQKc>!S>c3yWetU`x#tm;K|HA_rl#{OҹAf}QS>22)\(8ݜts_[BF$ ~|d<q>>P Nyץ0C"8-tvQ*?k戞; ywlq^}a4?4mJ *~9GPǕqH'8UnO@)iLz񓞟Ξ-JݹK &~-ߏJz㙃:25qt8m+c '+laWt34aS Iʅ*SSros8*I?0HFv:'w l=O >0#I #ۊ1ҏ+?WTr+>Xl* QɮEcsn HZ"|֏\5_|ppT r=1t!-]_cWV K/O rI=p,u:?E^k="SI!BFz־mE 1.qگJ!(Udiޭg{:l;I=^ֻ*O8q%Ք&2}^qm+ZI*QW_?e7 5}J?= %a, Pyȿ k=b{ercffCz~uG{_',Iץiݻw>s7K'v@h17A]c nXȸb? Y#{҄m?WcJip=2qB`z%A|Hԟ+rw̚C‡O*)r*<2<,5e7?9E%yfIa 'RFp֡q!9UaH<qQZ֩xŗJYW&"O*xFG|A)~%r{W,ߺѓe` OjF߁&+H KS!f]3lJ /n1n]nbzRkf 2##juW,zYVC0')?/9Q"+,@opPVR@w8f>{Ewg>ߕFH ǯ1w|y5sT'VИJۀq{nf 7BGާ.e}Ҥ1ɼ+2r1Ir䊘Cm(# qԡDq'w=*fYG#bV: >$@RXg)FQ3++r>#`&(\54%K}#=s*I~SZm={>]^v>Fyl:󚯵b2y*xpAO9ڣ ^]]k~u:#7rN+w)Qv知H۔+Ӏ{[s:Fg #ZS>)4^~F?X$A,(YO.Hq*ʻƒԎD)f!LNGz^iI^Zx03}1Q)} 3H&УGaZcq/xJ=J( F.ڲ{9"S2v1_t|)-h" ScĖFb k﯅v흂 <G\ctKUX:am{1hldwL9 JH.B`xfseSV\`qnz5M}Jba(=W۟rQF;𦙙5ass{1#LJ̊9A%~U# #Q~eIq޿2Mrl1?¿G5@b qG ھYke-[_ʻ0˱8UȋD2ɕA9_>K ĐJc81qȯ )4aۖc~* -Tr}nhCyYnZ, "&>T@r|. Tp7l _ټg+)#cs:^m^)FB~s]ϝ[Ѻ̦GV'?¸2v=A'/),NלWv)Mi_# }5*2cOje܎WҾ]wܴ]F۝s⾬k>$1`D{h+wSs0'0Ϝj.Q;ni5π/z#ݼkwu*eLGcn7,TqV1i6 ;jYҖ?SI(¹-ςmVᇚ{g_mn ͐?jľsR8%w)D@<?3ZR*e8>[(.mv~AOC׮G֟*ߥ]p כ AY{ /EwFQ#g9a-R^HK89{e-<[v3Ҿ-Gʅލ_|.׾9 ACK7ZJqB O#[[3dHB .x|=4/UZJyOʹًH{6?Z O'YFg7Mf`GC+(L+^I"ĝJ 7%UB'vIǦLpS7C>ԾXr8jV e;9qֳtlCV"dpU ϨjHTp{SRekhIZ2blĄHk09SmbutZzNsZaUb  x4(xD`$[1!@9T  wnivɽy\jFqS^" GWQ䜚{8Rt50C@f@57ͨJo脬NĵxD+d9㎢#+#MlW'Ҫ8r%-Yu;yx$眏D9 N#߿Y @}دAyIl*Q L/MP'>[d uU;6ᅲ_zTca|Sbsր0Jpfr,Dx#=Oҟ+YW8VF9 }{m-ݺG}ܑ[ldj癜"0NW y]=$b=sǑ>̫ȓ )zWյk5~N,ýfTPccéTYL8򭙜w IIb"T1|XW58_#f-evsޕ}"5mZgˌ/1Gj9\}FSp?w'[k۸ >JYd㈻ LVsw/]MDS) 0~4Qޮ1hUnd%]or3T$F(s*[$Њ]H7 dnA =s]xuI"+UQO e] lYE(B/VF{<d}2* ^o2;1nF=?r4D*hncJg %pr ҿ;< w.<622?f@霓JSsE|8B6xW̵L,$+ӂbwhV_-|'q;×L;k*VHP(pNz{` ʴ)+;cr ev6k=_+cѡYcx1ѡx#ύٟ^R#pgۯ5'rLR@y@n8͏^<| %St񿄮#Bw2āW޹~T6)s rT{~vjS5D dc2~|օˡbE=k/#B|rN}W^a:~T(9`~k7b)9${3tDjm`pA5m]2r35kR|eyB \m%gxF:~_$Gtx}`x(nqWڼ_> i,{p$~i/QiA2`W_e:Īb2sۊ;uqK I>/-@=94rh;z|?#~A|pJ?Z0s^=*e)JxgFd{,RƓ'̧9C)4 G +}Җ,#=jשj);0x1|:m#.UB:֫ߊm{-YBy)7U}6&ns.0;#ԑ\+p[F*X.i`@OTK =ؑU#{Te͢G]Ȋœcv/IrIbvïL Fӭhկ.ګlHHOK/8'{bSˏPjf*FP*T{_L#qNˏ0|piI <ұ""<="^pp|N*I]"&}7M2I7vf#]XGJARrzV$>] h8`!g֞#&1!g@zq2jqފA.[+'E8и*Ԩ rxSHbqH$T3lԏ7=rO;M)T~m네֬ʦLOʚӬ@ɜ 8Tk}nq{sR4ӎZu#dIMVB덥Swe[UdT/݌ldvǽ\5XRNoy~c ] ⲗW`\h u®uabfϚ0SU{f^  ym;Ouբ{+kc"Yoc8Xdܒ(aF9s^g񨋨.Pqv T] N[U㘫18IWKSlfm_;[N0 _? /P8WK4keW?(G Ngi-3Z6'#ZJUNZG˫{wNgk>"۬zxYq,8ֽGᆡ.9Q\ěEKgG1Xw ppOqbEb'wzNU5VG s": ]T?ZdqƳ`vqکQ*[dMu6p>4u;'mYL@c+~5 wcrr> ɞ,y5o/ \,7[?Vi;? TO{mA{0R%Pp'pEA&Nj'xՆ]NK7|:; ֕fg(B -fl1֦IF r@9晷gP:Z˲0R^ӨU#NW*F@Lkp჎OJjþzvN]NFI9\H] B0R~kk 8Tc/5aBʁ*& c랔&2H)ʲPrOM48w+^yޙGs0:ܣ#9xI*s|\h4l*G^"cl_LM+#LP tF]7te؋%b<i(|HjrT1:S/ȄH≸tbMtm?XxQy.Q)LrC|Y=cm(I;U9n1D4j>O8?@1֜FS"JĂG'$3qܟFϕ1!AkZ# m:4k'09g+RbUt+򒸮}V)*qc~+4\+ uUp@UXXIi^DN ~U*ePv5Qp3^ټ Hg֨\Z"DIu(=J%&_&2b$ ~FY J 1}q7 oCIRUvL#N V.Ae f=*fςUsjU}T?8BmXqSIgb]qH.gf "|ÌRDlr(^]tVOS2~}};VEԳ-@h̿&IqnJϙQF=p?JTW}F`yPf*y3ښv0sDs F ^Mdj.@?JjJ4%fRȉVےOz*s @lPܡvJ*,Rԡ聵do^-i k:WzDSL8ӏRψaUNpN9rW6Ą;|Qk׼@x[ug ~`3]|αxBb|Aj9+*씖?60L zӷ^p#,Č'+oR|[q$*==۵ 0RPZirr'˦qYNQE>oSpI+B<󿔛F w rux`߿:ʾ곕YX\\uyԊI4|ӽjwzaYvp0s+Q?B˩ral^#yȨpKuҿEYS1_s1_s&wVϻ9_bC(Y~f(7w:_8i+ٞ>"U6x_ ]*ąrQn=;WAa4F,H5-ehv'9T}9F ̆DHL0R̤ss_4rG*,`;' AՕ!̄Gz?V9^uJ=uf|MN){mxe8q->$[n|+3rp8j `~,-ǍDlY7`GMsђumt\N\)|rG{W|<`|c s]6yF pQ :1Qi]>Zox n 8:93]oB?|.)IT;n#\˄''!UbM1q@8473}놤fvϚ*Wd:S,exb59䊋PzZϥНcIMOL}b#9uPCq?mw^:2K殇 r )v1WtPz7V 0 ro؛Iӓr]o.f>O ^;{Uݥ=]P|j a*ڻx+GrRG~zSTvl3]|e'+ F'9ҵtnܠgޱeY2#?(s\5jF^:3e(;qYooqe)OR?kFqSN{͖UT%W,q5⬖R"0XmFI5;fE!eXzb0$0\U $ !8px_wUcuY4<p?/J+(zdr=3J#|Űy&{U+i5} 3*ܹfCV\EvI*&d1ʎfɰ:y+'ARo^k@11lO;JƳ]#bcfE1\z>cG"VrJJΑ{јpq\rI5 &dp@dd 6qCͻg+B̀5 dU`>QJ ~Ԃv(Ij Qb㧯ji4Q'"Hx]@G-8[fS v#{ǭi[ irm9rG^jDy [DkZ*=`sqλW81U9b> v`Y$Ww;/6U$־Wo;DH(q׻|Bտ(Ydޕ8yMY|ϧBKERqZGnke*m7d%gfd©89׈#3*âMzL%. Y|*<8Eʣlu8?>~*Uʛ<`z׉I!(lErwreu)!|ə2ߕz8ZNPJ??xP+s:_|@8}8k{GQ$jq$6r2?M<2c_ T 6('ypJ'[9B܂y86>:*c׊OW*0#$pWjj'o5θ)/siGޚ'f'GB(W÷Si$h'yxh$Yy$ u׌YZ~7? \AdyݩMvv?*%ԏst뽺Q"yV3OSZMI`W1{^UX~ͬ#QonÖrN:} YC=zޛѢ}E|N$em@W[Wk z0iZ1;XÒʻ3 ~e|k؊HT唱CXFݎƪ$191 ar:*=8U%\VbzSm)V 9##ڔ2zy 1!abt<nx㚊Ua(' |8D 1n )+ZNWw)`;qg7iFwd% ֳD?˂kq*4ѾսalUd#x,W [d}_8)?XfYFHks\ w lͪ<<ݮ~|'[O QG8港D8\;y|W:M?lO EgraZ_;!^40AjFH8Q־7[>6CmR:_ Bn `JJ}p7 R%{Ѵ*(ɟq-U,O?H/`aҏʲ_zm͘[`q޽W%iidD۵K}ȌKp2czz{ױ5j1HO?pH̨z¿L<-mc1𵑼A]Cv~hMJ|UO!BĹWJJ]Y$ `O|vW >If`3_Yp#p<{Y::|OӂHmNC Ӻ RGz3Uw&#~5\J(*\~¾'n#32T'Gf~4xKƗ%cݗt5r1e.M8)F1]II;_?0U 9(C\x(88rOH z튓ZR#`x<P47Ta:qYJWW{̓V.3OZh;?E&ʘ9U ;vrwm$y[H< 朠`0rJPv:Q%N0F@DGҚonR gc"7sSR#㟭%$&T>^NN9 :T*p=*8 VT)s[qQtVoA d5~FI-S?}@q*ɍF6ZLuԋiW:1c@e\4I$U$66sJXnڷlԪ18 㩩@?v Ө(\N?jHa1FQ9LqT]6T0;~mA8JTC:=X%0HT)ޗ4uqww"´9  8#+)Ufe#sǂ1QS8^N{~#QIS&|p =+@<l 52yw!=&̕P\s_kpNjkx𖺣 -&nrW՞wEdH\cV1*TQߥf\,?Fk|Ȼ3{$Hrr3Ӧ}XܨI*}djH6-VsK3*WHbz :⣞UdrWctU>JwWzhcŗ~O+֩ƾ}%6gvpAKiUwbxpj YD"xN# `sYOzZ򻉷 #}AP8.Ct8IZϸw(HԡdBb33|Rjumdf溩=ʰqـ@AМ,{ ׊ЖE' Y`XH8u{[fgkE3(|6}}f"(.GDj\Wh7nV7]LRfHd;HN:fΩm>TttkάGuK*pҪN]|4J g2$^VGw&=i=~SgIc%er=-kwuv?9,75Ylk }d6ǻ^s?*ڣ}Js2XSrKw}u=5W:O#OkwH> =dW@W$⺽ecV"05Άh z(Aj-ꯂGw( nu2+? ! Z.P(cgO>p n#}Y>H; uM9NY1쿽cwv?Be1c~ JB _P !V+h30ױJ|RGU$z¸ \j,~ h>Pw1/v~gwpW?7r?~Q`( Ӛ㈠WIclLfF[sNH >_|I2ȯ3NBc|Hsvyu5Kl[t*6˹Rw}E $2K`|5 _q쑔y!q G׽yyZsN?JGo|%IX )k4:fcc&2u,L{r8+͐~ҿ5Z"UBUTVx$[X7}*Lk~[xPB%GrZ2F@ܪA&L@LdМN_>9|$FOǘCT@g)aVc:Wښ g@:,2%,k6!(stoNϐYc @wqrx֣PT| P*7/C[~ܺdfW){q7c,SPTlף|)EhjH6zUyM_&ie=gD'h cێkutx˅PgQ^?P|-N+uTx]7e{b,b#)>|_hAVSp(.~ pv)W!GlYz4ȇ I [UqKޒsyLScꕻm8P},-:&2 ;ΌUIVnϫZ:ޡ_oNeվ.kspJ! jḋ ~ncWU@ ƺ杴=gF(bLfHҨ<* UΔ#v[-Ugz@@<zTiJ+Ush}t$LO5$@2 Fz{ՈT0)ќlb(Z~[v>_n @bڔtO#S@$dm$O"̘l@hVsӭJl`m+;ʫz-?$TdpdA3< m=>[>3pzsTQ6($ *Iyc&8,WD$}v7̺ʮqTdvM"*]_U9?/N +Ƭco\\9#iqr/z'Kdq JGN:֑ !pHa?Vg!>\zdv01\ѳU|EHh~AV[v<.x4aB.܀Tdb x<Z#ްFЩ#BW{梁&raU@S.~n=;w 6 sӑ(D{$IFB*F#TKtiάYoGo뱬n37(#R@3X͛|/q]JghQ޹Gvd9<=k{Uho3ƌż2IvU .QNŖ ?Jۂ$;%4AxNkQ23"w.@MwC# ntʠHa;~>_2 pzӡry WY\ξS \Zn Lvr6XNv=莋c>|r - 1~+3*i UV@V 5Y9{搽da;K ~*lxBI587/{梔IAz>^e̷Ц3B|s}JIO s ]4{$<Xlx ۏҟ,˞.V_K)n#!y~|m I"W!W-7d$)O0*뻽iJtW\0|n}O5B[&HӇ=XH>1IPX q;H4#HF8? wgF]]3]A{)b ̅MR ml(#ELX1$dŎwRG٭KE39^*TC'&[gŌJCO)<fkEYUN>i!lw3 vg2o.Sjq7rO:I:.vcXF9Nb υ%'=3m^y;wtVF,N3y\嶝j} 𕕼EDqO¿Eag` xwDeO?5-e Uc0Ԃ@漺8)*:["/!3e*Gsl]Ϙ)OS_NgCA\|z$b̬vI=ԒۡGxZǻQ2HŔd b=l_6Em?)Vɾro zlܟwV@\sXb8ՄqFORF- 3dߋnIbD.J1Oxz "ǵNAI/.PM72 qiJMUm?S g&%uqTd%ff5+ʞ Z&Q[#Hј)\pqNh5תEvgCm,zaEa3D)`3_ʺ??б9r_՗Hy7n3wJjI~cWd7oX9vAU8G#y|>j\K**:]kؑ6rjT951퇓ӯ Z.3^gd(pq`FҼYy",b.p<\x{T~;9ӹ!&U%q;sTBV/1Jf-dPevzWO4V<[ޜ$ަ5'q5d Q^\հ;z=>@;F5'.YYism%Oj mi9 XfӋ9| DSĈx'}!ӓfXX\{5(ϱqvy= ]fPiYFh0z=ƖAi$l+_b8k)ֿpN7+6TP;Բ*,w/1kq~[@ж013P`#qG1K\_ S ݵq(3ҘNz dɨ:o$.POm `[Q YKXzWemnZGU~@r=jpŀT㌅`V`wU*roEiK' qR]' ϦQ" 27R(-@T\ jJ˂CK'GI^v4;p1iwsW#ҴtݜhѠ%٧7:b2n/ U1'{`(`8SDB\<#*_//N,Fv zko-FY%)fLdqOڢLo9' i^z[3g+"Usȃ;~ /,Qۘ+!W';: ۵8$c󫋍(7^%Z&Hw68vYh*ʺ4q}9JMe-co7dggVJIaĘq7a FAO<~S_eWꞋ.y$Q+2Gsv6 tnXpm@?ʦc#'vY9]6#VOvtX"81s=dDDFs֨\Or$XxQTTw`U25;f Lpfl:t| >N5,#v*\v.HqFחl~ra%\lTʻaԞ-mdfc qi3`]0sx,HB8֫$Cݸ8piPf{ob& 8_ҦR&9>]uqF6S#,$^QI1prj-D I] ёGSD@w#Ȯ~I.Yk&Dr9baq`Ջ|r0}FT>=F+EiE6lrUi ߴP#edn|Um'|3hoɹLG'}IHy$xYa$,0ZTշ}Qrɾ>{mxR=Ѷ|1^!@ImÔ.bߏj;¨gO? Eq |Pj ~-9>*cx`q'>jkUcw#mR _=&+(9jkk f2wbkrRKVZs蜏1q])6BG *PAxYe"nA sҴ00X2mlѮѷ~YkύB5MJ(߸=f#V(܇@8+ֺbYWJ:ppUs9C7iJ)5{ -K)k4seTPT.~^y?|5T(2?ʾ}X8Qj ~Oũz O\JItȯ ^qz'{_A|W̞/dm ߎrH53-xv8mm⑟cΫjl 8ov,c&8ҾFYmd6ڇnTZr[e-rßιB5vx6ku SIqOڰ/D 7 l`1_f YLb5݇<6ω ˨d?ƌ,_${<<-1h~JFI>ƌnbdP>?啼Ei(R;sW^6r>6xy$~h B7~KmB򤍙d}ӣO jyGr8_mG^:L~v=sxvm~mc. 2 |E2GHfzN1AR{^?C3ul,ѭJW7 {vngνMCg ak53~$[q%R]B1lU,n!y۰.:JU,~eTV^+Χ$s/ᘅ8y̌G=j].?ˍ<>N1{M[~?TT\yC5:LU8!_u tOHpr]}{RIF^sztMUvڹ c'41f2p,q֦yp UG^MJ=s{7_]S Y\da$uLce&WT9Aظ<jz)%pS ۋ}~ՙt"}UBT d"$R,bM!' ?ǎdIaӧUMBoe"ĮiN)-<,󜊕#Gl298۟QDW sɧ*On֨P}F6~j %JGÞ9?ZI$nX4BM6 qcr:~*!F.A!WhB9WE>:3ՖfD1?G@:40Y6y\ʂːH,}A`es޾Jk[~~G-"by~k1 34~Ϧ+]X2 ЀN81BH=8TUrmh/!MX1ث6Ap1?J2I=I,ReITˆ *XÚ*mJ*`rcHB>|=(Y.JW%`۵fʅAP;scQG5fW"qBK(#TMB&V=?ȭWTBBŵ09u07;cj޹Rnµ eyHzcgǵ)poFWU}@Un2r4P|T`Ty $aLִ^-Do?ʰ%rA^S(G{j)nE'NHSa}}jXā1JW1 vq~Sg=*%SVwZTg ѫHZ= 4a^4E'G[ jiʇWHrƹkWI7[Hf%叕)K8_#Uᄪ`Fk_* I=x֏-I5{?R?7>5jb7,:}v%k92= #|O$078_,Nzj|/ew"/Ӗ9,wqZ~,Ih?XqF >5Uf*|/<׋|j?7I {irƱ Wd&-G9Ͽ ] bv\XYI&<` Кe`1áR[ƚղt TZ0*|ʴ4g۟ ,Jf,c;X4 7i  zg-(ۅ]Ks3^mF\8ּ,b~%|W7%X{dc5K^mH+ A41$oe,rWGUfm:%Pk_OmPp{p?}[foU eA| b^( ft?5~$87viy#Nޣ9Ey%XO$׫Oㄉfgp8y5(d,lʬ41aM}Ft#]Ө?vXPrEwzb):Hױ2ñ'^f"Iz :ku(xN*-:9U۰U 㟥kٰۻ õ%˪6oPgN)=Hi ӹO_ΖGIv 6޴>V~nkl44tp oLU X\m$} 5hIJ9J=ړHrX v7zup3 @uC ݴqsekl7vaϥ)PTη}4Җǡx\O'p>W:[X%Hl#_;cBJt<?n,ngê+{_x@ An~j_8E2: 7x w'ߊ#һݯp}SS|GyhʥXm,Fs"jY;N~n>W<1; c7Z#v*0CӭY*NZF }ӄzRwcSo8nnw⣄F_u=p1={Vs捵fL `W]U#N:FUmP4JtRw:mK (FCp#?ʞ$ 3ӥU[beDGJdȇoAUIAG1" q<)hQHR[BDF(wx0:z Y1"s=+5>_rV]}-y 7~% a2.Hsc"apݷsvt5&#) 3Rڀ= #xkmt`8a63Tf1QYHJ/[事lPQ9dVi ?7v# 09bx0Jm*FOB3FL q]1ӮOKOnk9h8V$P^FIȭbw\#h\NGyQqOݩQ+G 43`r+6x*UJh$u9n 5,1m㏭rNW\tz",ۙR~8TݘUI,s?ZmAY'+&9$yJF)+_6i!o%h<C"}/ $i N.Mq_8 mE6稯CԵ>̧` x8Ty:xlS%k&%^zRhmaf6i27~37 .7^2ӣA#WeeJ5 hv4HR7 ֯Y`}HW+$ Gbx͋1J=9ˆXN2|AxX#$~X{W~GG7a%X`~Ѽr\ xuIc]k”`k>sZo"t4ʽ9ø5xo?6˹;6ĮZBs֩rFE# ϛ5V-42JW9qbn>֤Z(0 }kټ_3r>NqU:nU<+Zq~e=̳k[S[} [M+O -ޑ$*.W W졜2Qzm%o4{ (\('uqxl}J-+Ry#1'#r: N?_IMKw_2 l 2k9]b""bp}kqR[okF|`i$`1_})_Ed 1sYֆ $`}~v T%{g=9 qͶ6?bԮSw|>b$ :A=kgU?bX1}G7+ViWzy5y),eJ{ n4Vndn/2K@NxֽY?} $u >e֓gJҕXE\ &EmȑaPiiFd j(A,}FX\ֻDe ~#\Usy~Ǫ=rĀg=Nk~=tҺnԎ2kc!:B?N"0J<ۡf92sN֒b2<+ǼCX_/Q׭}WZ$X9b9ȯ~%.:4cd;Q'ֵmVO-vNx#޺W73:Tek4AmǾ7(oOlxJt/K1ivr~7ȹWi9OԪk-1-=bLzzΩ#_o3{?4-S ϵ|q }V;i'9 O;Qyt,$cPi U'!A2n' g(ڱ\Ny88iA9Bv[_Or_*afet<T'/!-ޕ;N=ic\L6v.`ҕvÓ4ݴ S#tDE4 Δ3}iNGvbU|.,d8uvE7 L4ث.9U#l3#,:*pY ȭi4إ;"T`d`FVEx>Qwp8U4T [ `*Q/zu5G:FKVqܱ֊Cscȩ4l oPxzUuGxT(9v8Z㓳Tq֦%rWH2oqѨTl,Il9^k@̰h&}:q*h,=sR(d"ew iKڻՊr %$2䝣֧R͙(vƫQJɂI@FdjR`9f8r9ⲨZ_ߗtCM1+~I= u*IOֹ$ظkeEbUdp2BU6B#`IづfV(Uz\ciH2N#5 t/%Юw/sXfEت Et6) OrU˝=t=2RbAЎWKmB;dg|_jMpH%wp9ֿFaÞ H,$Qc=2q^3r~99G AݶaxvBFc ?~05α˝-cw/-q!Mx4  zQC W/i%e~vOK"<>eU{-,҉گ݌ҲOȣ*Vl'䔒W]3Eib|7VkֻjT[OO,¥{Pc 5eڊ@@ExyEf?vOL6RESҳWk{ ͤOJeغton9KF5ĄHN=+n62p,O«B1[8Q(`Wq=?Ohؑ{ӏ;ƍe.xNFwd_Ҷ>dyY_yWvDK mDBx"NZ?n)Zl%~u$0d`x##.x=ʌcn9IR8-q}+Z qT\ QjA'5C Jws᛺=BpH!MC} W ̼坑LwzciLsc?RF2i+Y(Pv~#ދ1( 3>2|I,PJ\l(=W[$)'i$Nk@0wHfݸ89>NOm<>-6*!$m \ԍS$F\NNzjF9xAB*9U_5dVqo:C SI/ċK#`v!%CxjnJ.F20A'xu@SnTہ- +q_DhF^Hx /75C4hd,X'H3E;pz^[1ln[xDޖ1`8ym8=a[8$ݴMp_z%9dmK@8(8׮}wR Ah{K.ҶsUi?ĩD#rd ">ֶ|58f4LQ8,O^=+ F݂ 9V"=U(N ׵q˛۶CҧsߊďĖfor3q~B=eq'c,2}6g5SGZ\ 噃v?"W\i :=?:eC쏾xfwr2R3lȫ.UsV "R[p{ EMHgνMdSBK(AV,2 p*y-jKⳕ)٭7H[C r)I=ÂP8A!6@˟UL'ycSB\_snBd 1=2 Gh@*v>WcŽ&+"yaO~~0vVqFB~br ӊ9Rv1 ,)-wԉ!|`MU.{Ѕ,SXDr+ .I݂HbӭW rrx(<5_2YWvϖ&7?Jʓ̍nEnd$61n=xT~wUo,/͝܌J¤\ӿa -DK 7`[cdW$$0^zZ2TX:{>\r2~ӭ'J2Zo/TRxW`Y!15^bgfңh,ItsZSinD51RFʸ`H':l]+TVd,$$'i=Tn$JH?|aǖ*M˥V|n?\w.I4bvŮfXV;Yzm᫶ԼOlmq W2PGU ,1Vd9^X )Zos>xЕ_= cG*[޽+ǶW^դ2HkOC&bI 8{=(O,8yxi?].kWsWIs,8.C1$۾vƲ WzΧ[\Ȉ`g툯#zJz.GKX/Y"ެM\_Ict@ketX$c^K)4#3ƀ ,2jt3lɽD*<֐ H'H?W[F)Mr%8!N>yhϏciZmCF y!G}[xəΉӸ |>^"d덬21XF籴3lŤ4_'.l‘FU!"5\2xD;q3U-QQ'ʓ634Œb2JU!t7,G͕k-L|FUIkVPn#uZSEE\2z6ϒ~E9)yc@A  Oj >(EJ\i澢'^I~GZݖV!Oʤ`uP4̷f<<[)dh9񜌎s&mo5:u5B궋^H%޲o5vG#9Um=ifn>uඝ,1[QF=>lhNLI_FAwE9jnF+TSw>p/CqEŷj'A #sky.9`qsfKX2y򨤩{Fܯf&x?)TH۰]ĹQom$|¯8W Z%G9[W"3Ӟ^6ZrmMIGnr l OobchU!F{0*RPZܛ 37QstW$f<+wfhpK/%erpv<[3+m#yԡ0w*˜TAJE<v홶o)Y3 Z"?w\&>Pgl*y<GhJM3}8rTqS5$T;o- pT|sX\ .5kgPxfI5K#~w,Bc֪uk5kjW$S¾? ]W ϵxΙi:1n,_ײhZe8{:U]ϟ+Wt w4A-}㵶x"> 9W[8Nv XGZXyy{3GzꩈI{>[8H [y\!ˏOjN&r!^? ¢6|I_jƝ*u40|Ҽ;#Hd1,k;5|vR*P1O_ƻ+ Xgc+|E⏲8R@>U-{loH E^x*sU̢B6G=־/IH]HM*1\8Kŭv"in;FJ+ǐ|Xc*̌Hڿw_+e3oLΟ>.$kZE?A5o6OK;z~x'. '+mؑrc19_pk.Y9lx\L$|OW3{լ<[k?U;ĥæ"AQ 8#x5(*62Onh%V& 8VNq䔶?nDO p 'vv+O8.'~.>SҔ䓍= $&BF LjŽ?{QҁfS0".rq)Jr~)JKBnl#'A5"2șqRyxSXtcpx#{mh2X[0ngl-zsVw@X>S;P4+rRݚ+H%vG,Dc̵F( ۹p0~^@Ф d!N1ӊ%`2Ny%.$g)+&kB/Nڤt)JɎ"3 8v d*0(>DiJG֠rl7& :`c5/dfQZB]Qc|=\qe< nH8 C@w'+KRMҿ~9Q_:׎;r$,;2A~kʠ0Ԋ]h/ p߼,gLfCxz 4#vc 1;}G#vz|U9b,ºZ;2 ~ԍE.耿7HuˏݸcU S?N1/ӰN0>5pZ.!h2?ѳ2,2A~u@mO^u[TTFvv6~]?ֹ!kE^+7^V>K|O'Dz?}f =tn;em*ı}1aT/-Yx|yo[L-rkmp1dvel^y.j<$6AniqܬNpOԨ_;!vIˇ9  ^$1vP;V>H WI+xZq<ޥBDr0ϩviҳZ='.FTSBDLNG=9l[Dۛ1m9q9_a)!'s3[]d%{=:|d9y?J{X؟/('^YȀʓn:;POzT󏺏,bmKJ`Er3Dm8r'Ӯ261ֽFֲ@9y]aݬ9渊i!].+RL2HoLsrrcg }yx@.F G=1:׆xl>!ijɍa+ݝ,ҼfOoa9,9~{sU3uTp+3^c\6tͦ= E:Wb.MIRcIcnu\z/;A=qڷ W>|{}GkK;/pN@?J|5t9>kb ;27Wqҳ,cLs}k7w'nVt|Ӫ{PX A?xuY * )ֿF) ƚ a!F~ C7 !ŰshRҢǷټkn#Ѿ JFh4|Ln?\Ŷlr:_m6/`i07D{UG ԄߦDZXZ0+352wV~Xe1s(0zg'*8pkrbMLZP^ʤh|2T.Hbh1i#4za[m7W1 nMwͻxVXmˎϯ5wt)+M"+zVJ]W+Mr,L.ү 33/K&,pkC[[}d`1u✭dS,4(sp#,;E[H1nlq ;[ c]\v2(nG։Fvm,+>i&k,f2űذxď}Kv 8%ܯUfS1R4re?)]ݦWmZ4?yii߉NLX~ixYk*-9Nކ":2O~xڥҢG?'k 4mc~`q ?`sb)rvɽN:a0@gSTƏ"A9<9VӃq6ӯ&bO=V9Wh#"!֦Pp?ӿ76_%}IhƻFtV~Fb۾v#ޗtRǖ=^i H{qT)K޿1i-A$ c8Ԅ7쁂n*|"&>=PHPe:ܩݫi!0capzRʒds;Nqߥ,bSde26q֘&]2A#t%Z hеFe.v|826`3┖4,0}ԙVQYC 8զfV76bbr1CRl@+ tR6y4g ~Z/adsʌb(z>SۭIksϵd Nw \Α6Idރ ^2+رOoJUlۿ$.sTbrlwRJ x;|ņ2p! (wb 68k*r[yؙ]^Ǹl9d]Mw1G8^` $pw?VS[Ip9<˅UnVlsi#2(Hz3UYd܅&s…@2 W`x<¹e NJPvZNnpbj\qU]>S]dH#W{?{y_y9k:Y&c u}kZEG =bq?tK3$G6\rN~y$[HSw4HQa2#$pQ5j6qwbRJJLKF ~FAmڭ׷׶gz0ms{W5 <1XѻS35soHWl>ͽv]CR2HDtnVO<U V<-uby]Vo7d_px _zt{yta-1Ca{_|MԶ2ǒ971<=T%olu)4~G,B8%QQ^?6F7gMP9G:ו:xRpxO2Kpcт<&ɣ[-Ƈ]MU ;;0}>;[8fʱn}B_.S%_r$r3_J|"]RC>H<2+熥T?E_ vSDԒ vM.H0Tכxĭq dW&no~/:~tpD>{^d69dԌs\W~'yo+aԜl^)kXI/&>Uɰܝ"M.xv5x}"U2=+~4B>zc,@Qלi QZĿ"VG_:]8izT+E?t~ +c?@+ί{mOFpӭu;J.DEeQ~UVqi-5켎?e)-6s5:s:{q]%bWc7pjK?iqۺ_ΥYZ;=DA%Nw+?²ؤ] , Ԛж6O^+υi$ꟗoS߫*pz 3i @%q^KbF%x t5,g N1Zܿfh'Q=T\4۾kuc.׷uGo2ٖ!cOi;_o2:qQREhșU:2[ߛ(tSt8]6wkyݺ5uE89'#+DAE z㎕cʉ!VI2<= !W4a(^/c&}sEUH;GIkd߳amQ˅Wg; WmOA7ĸc8i䍌 WUuw]z2ͽm: _u,n 4X{^Ү4EBq椖];1$yY/ `dۀ٥Sکkmbq6_ T1O9'=%)-Z3rr }uY_LF~O,̣?ji֖6NF:xNPNS=\EQPJ>} ZiX9?(C?k:ν5¼E<}' Gmd~=k/4p|v!8?tRJdl%FYSPCr>Q[?9 O5%Hr =k2 ,p1ޜkgCes>l x+=Uag=\WyWxr$\7r>;Vxq8+gEqNcXY_|8(R Xv '-&YIqۼnABc2x*iq8PABRZ9ͫ)|m6M)*X#| ㏅f& 1kԖ-U^P1-gEw-eqz: ŦS$:ﴻ&ĕVIdM*t>mҕ|,A :V#O."5+.ne<`\p=+o҉!̘rr+oFs(< IJ_wAR<cO~_T~"s3ۛ[78=?>]b 7 ə0LIҹI/Ac=kcNmC:n-=F.V_Qv"YHO*40@a$@0*&N5Juy^ё8 J`ސudPLzR'2~e^ '%ZMS7`q֎xEE[fM{z$>٣-UIb5TґaxjTe+&/S*[m17jrk?k_Wb $ (9JRx3RHg 2>YKyJ =:U^EQӿZ fVi/!O A ?2QC \G G5j2R\F,_#sVt)IA;G#̅0N9#MKv/p9!t`3N:ԑ~"D I7NGэaTI&dS3' *QodzҚ'vN !I9#i])f9*N=O4i#YDA9ϦEFQU'ݒJ̸D(Yт:{OijK'o*rAz6>D}sUb, >j64a}|Y_O|Tڞg,@oo\^*}S֑RʊHSWær R;>/ij?>s5:qRO3P%(#8өtՂx~nrշ2ZwL"_M%`$]J`|F~=OZ]ѩ|X#7$e9 {X3|QS$QN݌WmᏃ-yC<A“τ0i92۬Rc*T;Ӟ JMiOz̲xWJ-{ {MK H-΅8Ϋ+xm|~ʌE!85ĺtI1fVRNry7/,rZ}7Pn6.m 50A ֎ V{XV i+~ןm2rH#wZܰ{w}QŶH\zot!q*?+$֝ -O*8S-rfxt3׻~|)rSGkK+Yv8jb -Ljܓg|)" @9cK$y*SyzY~:IuNwLT;/CJ ְjh卤*F0=kW \j"shr4 5rʩʤy]<*JR+2C%q[6_bΛ#D5r"uM*@>TefC[Kl샂0}Іס!v~+Hz}+5,W̠y$sҾ?Ao\~#]ZʛʍPd Wu.q+P[ ={|Mqq/帋3DHڹЯ/>Z)n܃GZ/noKR N+<ܳJ~gFpA6sřw䞸6q^Ww]F;BwqӒ\gGPO gISЛޝrR<':/8IlvW^jtIk߃Lg߷n xfO0HFs\Ʈz/*a ե,O5P} ZSܺJIR=;_&\,^^ej3[Ja-wcדvB/o?1N \K^]s&J7"Tc:t93Wź喡kt<&]p v? ۥEdo|99>#NloKbL=L3OvIts=z!Kh 3@1\qǾMqf*\#,F>!)m$krI^BԚr֮ޘ'K14De?k#u1kU{wV>`S'2pSVZ|;ɞ" ac2HmsU|vW F|'#^frɷgӦ3\<Ѫ8۽W? N:6WX,ܽ|7!ui@\!=[N|?ҿM~&[ Vex_2 vAMwQN~v_N<WeN }=+!Y<Cw:,e!xTV!~]#/&G*M.OOyY,r+PF0Hc|ErT?EI.bV=dQPx{Ikݥ̻2$NF[^jS R6;x[IJR5{w'!eDc sTY҉e?ぜsuN7M!^ȚgNJ8XF H?Ќޣۣ(<{QZN?xHfxJm{;W~}Z]uؘhnLf:w0iJI\$@7˟ozsLl[6&(9$=iȩWMB ѧphotos/jk-jack.jpgUTMFUxPK%g6 outside.kml libkml-1.3.0/testdata/kmz/overflow_bad_offset.kmz000066400000000000000000000201711263603257100221470ustar00rootroot00000000000000PKEP;~akmlsamples.kmlUT JJUx\ms8_nVYALɜ2&xnnkjj kԐTﯿRdQ-e{@~r2ɳ=Gg|dWgE5o7ɉǥ8ynfU56\Ufϓrx}'xq*P1 *xjQҙB;vɟJg΢mR͜яI\h8zQh89p{VjEnoo\gWI9tet^/BS2hWyo3(7:NhhRl&I]dN~R3._ΘL>%՝A5Ct:w)]cmѰ]cuj$͞E~fg(@wPRn0+4&4Afq* Ľ`0ϮFC#yخ޵ 7+կRaQOPIoLosLY䍆b)QUgE% yz8O"өNTJ<کnݨ}4ٝN fY;U͒y}>t =B;-1Nm5OK(L}Гhqzwt~߹'WKzf0[AX fF=xC|3@tFv2)8DRP>GUfK$q < ]!=qoVN/W3G"(zjYHVpR9œRJGuJ*s}σ;; h9f˄hp9Vfv?)Zi^UxI*E68o ^\aӻz֜*u:u⊊zY՘ ua|JEdm<ɪ5yŚl;Nmr)cqf&ӳLn3La3Li3Le3Lf[z3U ~7M>kgq2qi~| [8M̩ۍ\˧:.Y;̍rǩ5v㼘iE՗%ƕCWؖ3ډNL)gVV%ֳ !QaμĬ&eiF4^'E?Y^̒< 9<~iȏ]y=_^kX\8)Ʃ=RmJ/iK01X[k:IU[3udB;@6k X@Q"1(uߦfT< |Ù -%+cɱVXE̖.ʩ-܈DRVf)Mژf Km*-L[a"1n`ft<>+2%%F)O5e3Ƃj iN:17=o w0ԦO ̊9s)X-[S$MɒMMǁ*Mb!z vkFf,016n5)j 7)%RhVgnM|Պ qJ%%`1^bߞGl {.8S2/ӌcQ1myh,oE79b1'XIՄKW/JګaUdej,t[vhM՝b]?mrhk 0\%W -4 ~d:e1'>::Ad_vMhwI㻎v.tHPs/vݴQ9+ݷµ%[S$wk7bh)gm鼃"bGyU,`5WSs]^L\O Xl=)P2?o G{T2p,J% t}ֽr x x}v!15hiNm7r\ᐅ`@m|הXs2 Ӧ=wY2v%j*'e^U [6jwLJ뇡֗qhq>fRh ?ꪚib4hEhl{;pAeS0xypY~0~ɘaШv)<ڵj\ b𢾕B:N R&kEKlc!q<&a!3syL,isr6ЅmpՈ<|uWo糞;=9w9O#۳iѮձa|iiWupk\|ާuq+z\s.oǰ(+įIǜذ.xm/80*O6zKYQ&Ž`"O_D.o"F‘ 0yh-xRWV*2JO E6BjCS _R:-vZ9a1&+Obtaj ekӴ3p4}_Z@W,u&D_;:D/j9h}.oj\U2#<z/5txa_mlX?joo\v݂^z|0b =p'}C8=]nxR!\|R|0pqfVAUH 0!]W+}vkqŽW3Eëvg2q?.>*|3q]:+=v |{~o~Ia=G~l^ⶼdJ'nk_rhTK0f2TqH[KzdqyJ.vtؗgDŐ|fn`l4k7Eyl- {>`8 a \#VL bvC`L4uIx|!xpWt>C9:͢#(׳/|Rz\d!V  ^Lxy2}2uI.D >jV [P#r4칈[MIŌ cn !1 r? Ì%8=j׀$+C SF2BqqצQ1m=cb=\KُNbG%Ȳ;nG"pSx$8It$ zHua[>h|Ưޙe~ f;]?3c^$H~=2zu3w:r|^h|]=9a#2 @P s{ }0v1K8= sHfE/'2C"E1[>jPHwB~-! Uh]3,'df]0b CwDg_I Ά@_[X"fNSw 4F#:DByh? w "Ex;uGCra}]#cB:YG?;xqK%t^#X0%Op9";]P@x>DW߀rA14bB.=8oi_xJʁa9KoɂG]+ =Zb2͂ma]!V\: A+j0CvkD|ZYq:1N|,-eM$@mRX慦>p^$Oqk.Ij:H8XbS`J$[W @vXqƎ- '6Bp|kGѠ]^Gb$A,tqNͽ%h6&טZ6oH{c N8:;(`bd~n1}.3ڷn9*J#BCȅp%=ep=,2%&¡sr۲\"4wQݿn9%PToޖ-?>]Ms5+oU\8RSl.\ɳxGM0qfFRCgA@M.,W)rWů"O&g ުǔ(\>4#4'Nd{?ltcLK`d"-ޗH3Bs:NWf?Xue$2ǬJXVԘiSR T=gumS`)@ʲ*b*UOdEW8MIg`;vʢqJ=. %6h0`pyh=gsWҽAk9uX- FZ?/,߆obOKom(/5L ]˞NXiU%l/#Ica˳ۧӗ~_$IV,Q X=ZAfʗ7 l7cbV>Ț2|&~rN@jI<'~ @as(E 虪;OԬWaK]ޡM/PKEP;~a kmlsamples.kmlUTJUxPKI libkml-1.3.0/testdata/kmz/overflow_corrupted_stack.kmz000066400000000000000000000201711263603257100232470ustar00rootroot00000000000000PKEP;~akmlsamples.kmlUT JJUx\ms8_nVYALɜ2&xnnkjj kԐTﯿRdQ-e{@~r2ɳ=Gg|dWgE5o7ɉǥ8ynfU56\Ufϓrx}'xq*P1 *xjQҙB;vɟJg΢mR͜яI\h8zQh89p{VjEnoo\gWI9tet^/BS2hWyo3(7:NhhRl&I]dN~R3._ΘL>%՝A5Ct:w)]cmѰ]cuj$͞E~fg(@wPRn0+4&4Afq* Ľ`0ϮFC#yخ޵ 7+կRaQOPIoLosLY䍆b)QUgE% yz8O"өNTJ<کnݨ}4ٝN fY;U͒y}>t =B;-1Nm5OK(L}Гhqzwt~߹'WKzf0[AX fF=xC|3@tFv2)8DRP>GUfK$q < ]!=qoVN/W3G"(zjYHVpR9œRJGuJ*s}σ;; h9f˄hp9Vfv?)Zi^UxI*E68o ^\aӻz֜*u:u⊊zY՘ ua|JEdm<ɪ5yŚl;Nmr)cqf&ӳLn3La3Li3Le3Lf[z3U ~7M>kgq2qi~| [8M̩ۍ\˧:.Y;̍rǩ5v㼘iE՗%ƕCWؖ3ډNL)gVV%ֳ !QaμĬ&eiF4^'E?Y^̒< 9<~iȏ]y=_^kX\8)Ʃ=RmJ/iK01X[k:IU[3udB;@6k X@Q"1(uߦfT< |Ù -%+cɱVXE̖.ʩ-܈DRVf)Mژf Km*-L[a"1n`ft<>+2%%F)O5e3Ƃj iN:17=o w0ԦO ̊9s)X-[S$MɒMMǁ*Mb!z vkFf,016n5)j 7)%RhVgnM|Պ qJ%%`1^bߞGl {.8S2/ӌcQ1myh,oE79b1'XIՄKW/JګaUdej,t[vhM՝b]?mrhk 0\%W -4 ~d:e1'>::Ad_vMhwI㻎v.tHPs/vݴQ9+ݷµ%[S$wk7bh)gm鼃"bGyU,`5WSs]^L\O Xl=)P2?o G{T2p,J% t}ֽr x x}v!15hiNm7r\ᐅ`@m|הXs2 Ӧ=wY2v%j*'e^U [6jwLJ뇡֗qhq>fRh ?ꪚib4hEhl{;pAeS0xypY~0~ɘaШv)<ڵj\ b𢾕B:N R&kEKlc!q<&a!3syL,isr6ЅmpՈ<|uWo糞;=9w9O#۳iѮձa|iiWupk\|ާuq+z\s.oǰ(+įIǜذ.xm/80*O6zKYQ&Ž`"O_D.o"F‘ 0yh-xRWV*2JO E6BjCS _R:-vZ9a1&+Obtaj ekӴ3p4}_Z@W,u&D_;:D/j9h}.oj\U2#<z/5txa_mlX?joo\v݂^z|0b =p'}C8=]nxR!\|R|0pqfVAUH 0!]W+}vkqŽW3Eëvg2q?.>*|3q]:+=v |{~o~Ia=G~l^ⶼdJ'nk_rhTK0f2TqH[KzdqyJ.vtؗgDŐ|fn`l4k7Eyl- {>`8 a \#VL bvC`L4uIx|!xpWt>C9:͢#(׳/|Rz\d!V  ^Lxy2}2uI.D >jV [P#r4칈[MIŌ cn !1 r? Ì%8=j׀$+C SF2BqqצQ1m=cb=\KُNbG%Ȳ;nG"pSx$8It$ zHua[>h|Ưޙe~ f;]?3c^$H~=2zu3w:r|^h|]=9a#2 @P s{ }0v1K8= sHfE/'2C"E1[>jPHwB~-! Uh]3,'df]0b CwDg_I Ά@_[X"fNSw 4F#:DByh? w "Ex;uGCra}]#cB:YG?;xqK%t^#X0%Op9";]P@x>DW߀rA14bB.=8oi_xJʁa9KoɂG]+ =Zb2͂ma]!V\: A+j0CvkD|ZYq:1N|,-eM$@mRX慦>p^$Oqk.Ij:H8XbS`J$[W @vXqƎ- '6Bp|kGѠ]^Gb$A,tqNͽ%h6&טZ6oH{c N8:;(`bd~n1}.3ڷn9*J#BCȅp%=ep=,2%&¡sr۲\"4wQݿn9%PToޖ-?>]Ms5+oU\8RSl.\ɳxGM0qfFRCgA@M.,W)rWů"O&g ުǔ(\>4#4'Nd{?ltcLK`d"-ޗH3Bs:NWf?Xue$2ǬJXVԘiSR T=gumS`)@ʲ*b*UOdEW8MIg`;vʢqJ=. %6h0`pyh=gsWҽAk9uX- FZ?/,߆obOKom(/5L ]˞NXiU%l/#Ica˳ۧӗ~_$IV,Q X=ZAfʗ7 l7cbV>Ț2|&~rN@jI<'~ @as(E 虪;OԬWaK]ޡM/PKEP;~a kmlsamples.kmlUTJUxPKI libkml-1.3.0/testdata/kmz/overflow_unzOpenCurrentFile.kmz000066400000000000000000000201711263603257100236540ustar00rootroot00000000000000PKEP;~akmlsamples.kmlUT JJUx\ms8_nVYALɜ2&xnnkjj kԐTﯿRdQ-e{@~r2ɳ=Gg|dWgE5o7ɉǥ8ynfU56\Ufϓrx}'xq*P1 *xjQҙB;vɟJg΢mR͜яI\h8zQh89p{VjEnoo\gWI9tet^/BS2hWyo3(7:NhhRl&I]dN~R3._ΘL>%՝A5Ct:w)]cmѰ]cuj$͞E~fg(@wPRn0+4&4Afq* Ľ`0ϮFC#yخ޵ 7+կRaQOPIoLosLY䍆b)QUgE% yz8O"өNTJ<کnݨ}4ٝN fY;U͒y}>t =B;-1Nm5OK(L}Гhqzwt~߹'WKzf0[AX fF=xC|3@tFv2)8DRP>GUfK$q < ]!=qoVN/W3G"(zjYHVpR9œRJGuJ*s}σ;; h9f˄hp9Vfv?)Zi^UxI*E68o ^\aӻz֜*u:u⊊zY՘ ua|JEdm<ɪ5yŚl;Nmr)cqf&ӳLn3La3Li3Le3Lf[z3U ~7M>kgq2qi~| [8M̩ۍ\˧:.Y;̍rǩ5v㼘iE՗%ƕCWؖ3ډNL)gVV%ֳ !QaμĬ&eiF4^'E?Y^̒< 9<~iȏ]y=_^kX\8)Ʃ=RmJ/iK01X[k:IU[3udB;@6k X@Q"1(uߦfT< |Ù -%+cɱVXE̖.ʩ-܈DRVf)Mژf Km*-L[a"1n`ft<>+2%%F)O5e3Ƃj iN:17=o w0ԦO ̊9s)X-[S$MɒMMǁ*Mb!z vkFf,016n5)j 7)%RhVgnM|Պ qJ%%`1^bߞGl {.8S2/ӌcQ1myh,oE79b1'XIՄKW/JګaUdej,t[vhM՝b]?mrhk 0\%W -4 ~d:e1'>::Ad_vMhwI㻎v.tHPs/vݴQ9+ݷµ%[S$wk7bh)gm鼃"bGyU,`5WSs]^L\O Xl=)P2?o G{T2p,J% t}ֽr x x}v!15hiNm7r\ᐅ`@m|הXs2 Ӧ=wY2v%j*'e^U [6jwLJ뇡֗qhq>fRh ?ꪚib4hEhl{;pAeS0xypY~0~ɘaШv)<ڵj\ b𢾕B:N R&kEKlc!q<&a!3syL,isr6ЅmpՈ<|uWo糞;=9w9O#۳iѮձa|iiWupk\|ާuq+z\s.oǰ(+įIǜذ.xm/80*O6zKYQ&Ž`"O_D.o"F‘ 0yh-xRWV*2JO E6BjCS _R:-vZ9a1&+Obtaj ekӴ3p4}_Z@W,u&D_;:D/j9h}.oj\U2#<z/5txa_mlX?joo\v݂^z|0b =p'}C8=]nxR!\|R|0pqfVAUH 0!]W+}vkqŽW3Eëvg2q?.>*|3q]:+=v |{~o~Ia=G~l^ⶼdJ'nk_rhTK0f2TqH[KzdqyJ.vtؗgDŐ|fn`l4k7Eyl- {>`8 a \#VL bvC`L4uIx|!xpWt>C9:͢#(׳/|Rz\d!V  ^Lxy2}2uI.D >jV [P#r4칈[MIŌ cn !1 r? Ì%8=j׀$+C SF2BqqצQ1m=cb=\KُNbG%Ȳ;nG"pSx$8It$ zHua[>h|Ưޙe~ f;]?3c^$H~=2zu3w:r|^h|]=9a#2 @P s{ }0v1K8= sHfE/'2C"E1[>jPHwB~-! Uh]3,'df]0b CwDg_I Ά@_[X"fNSw 4F#:DByh? w "Ex;uGCra}]#cB:YG?;xqK%t^#X0%Op9";]P@x>DW߀rA14bB.=8oi_xJʁa9KoɂG]+ =Zb2͂ma]!V\: A+j0CvkD|ZYq:1N|,-eM$@mRX慦>p^$Oqk.Ij:H8XbS`J$[W @vXqƎ- '6Bp|kGѠ]^Gb$A,tqNͽ%h6&טZ6oH{c N8:;(`bd~n1}.3ڷn9*J#BCȅp%=ep=,2%&¡sr۲\"4wQݿn9%PToޖ-?>]Ms5+oU\8RSl.\ɳxGM0qfFRCgA@M.,W)rWů"O&g ުǔ(\>4#4'Nd{?ltcLK`d"-ޗH3Bs:NWf?Xue$2ǬJXVԘiSR T=gumS`)@ʲ*b*UOdEW8MIg`;vʢqJ=. %6h0`pyh=gsWҽAk9uX- FZ?/,߆obOKom(/5L ]˞NXiU%l/#Ica˳ۧӗ~_$IV,Q X=ZAfʗ7 l7cbV>Ț2|&~rN@jI<'~ @as(E 虪;OԬWaK]ޡM/PKEP;~a @kmlsamples.kmlUTJUxPKI libkml-1.3.0/testdata/kmz/overflow_unzReadCurrentFile.kmz000066400000000000000000000201711263603257100236260ustar00rootroot00000000000000PKEP;~a@kmlsamples.kmlUT JJUx\ms8_nVYALɜ2&xnnkjj kԐTﯿRdQ-e{@~r2ɳ=Gg|dWgE5o7ɉǥ8ynfU56\Ufϓrx}'xq*P1 *xjQҙB;vɟJg΢mR͜яI\h8zQh89p{VjEnoo\gWI9tet^/BS2hWyo3(7:NhhRl&I]dN~R3._ΘL>%՝A5Ct:w)]cmѰ]cuj$͞E~fg(@wPRn0+4&4Afq* Ľ`0ϮFC#yخ޵ 7+կRaQOPIoLosLY䍆b)QUgE% yz8O"өNTJ<کnݨ}4ٝN fY;U͒y}>t =B;-1Nm5OK(L}Гhqzwt~߹'WKzf0[AX fF=xC|3@tFv2)8DRP>GUfK$q < ]!=qoVN/W3G"(zjYHVpR9œRJGuJ*s}σ;; h9f˄hp9Vfv?)Zi^UxI*E68o ^\aӻz֜*u:u⊊zY՘ ua|JEdm<ɪ5yŚl;Nmr)cqf&ӳLn3La3Li3Le3Lf[z3U ~7M>kgq2qi~| [8M̩ۍ\˧:.Y;̍rǩ5v㼘iE՗%ƕCWؖ3ډNL)gVV%ֳ !QaμĬ&eiF4^'E?Y^̒< 9<~iȏ]y=_^kX\8)Ʃ=RmJ/iK01X[k:IU[3udB;@6k X@Q"1(uߦfT< |Ù -%+cɱVXE̖.ʩ-܈DRVf)Mژf Km*-L[a"1n`ft<>+2%%F)O5e3Ƃj iN:17=o w0ԦO ̊9s)X-[S$MɒMMǁ*Mb!z vkFf,016n5)j 7)%RhVgnM|Պ qJ%%`1^bߞGl {.8S2/ӌcQ1myh,oE79b1'XIՄKW/JګaUdej,t[vhM՝b]?mrhk 0\%W -4 ~d:e1'>::Ad_vMhwI㻎v.tHPs/vݴQ9+ݷµ%[S$wk7bh)gm鼃"bGyU,`5WSs]^L\O Xl=)P2?o G{T2p,J% t}ֽr x x}v!15hiNm7r\ᐅ`@m|הXs2 Ӧ=wY2v%j*'e^U [6jwLJ뇡֗qhq>fRh ?ꪚib4hEhl{;pAeS0xypY~0~ɘaШv)<ڵj\ b𢾕B:N R&kEKlc!q<&a!3syL,isr6ЅmpՈ<|uWo糞;=9w9O#۳iѮձa|iiWupk\|ާuq+z\s.oǰ(+įIǜذ.xm/80*O6zKYQ&Ž`"O_D.o"F‘ 0yh-xRWV*2JO E6BjCS _R:-vZ9a1&+Obtaj ekӴ3p4}_Z@W,u&D_;:D/j9h}.oj\U2#<z/5txa_mlX?joo\v݂^z|0b =p'}C8=]nxR!\|R|0pqfVAUH 0!]W+}vkqŽW3Eëvg2q?.>*|3q]:+=v |{~o~Ia=G~l^ⶼdJ'nk_rhTK0f2TqH[KzdqyJ.vtؗgDŐ|fn`l4k7Eyl- {>`8 a \#VL bvC`L4uIx|!xpWt>C9:͢#(׳/|Rz\d!V  ^Lxy2}2uI.D >jV [P#r4칈[MIŌ cn !1 r? Ì%8=j׀$+C SF2BqqצQ1m=cb=\KُNbG%Ȳ;nG"pSx$8It$ zHua[>h|Ưޙe~ f;]?3c^$H~=2zu3w:r|^h|]=9a#2 @P s{ }0v1K8= sHfE/'2C"E1[>jPHwB~-! Uh]3,'df]0b CwDg_I Ά@_[X"fNSw 4F#:DByh? w "Ex;uGCra}]#cB:YG?;xqK%t^#X0%Op9";]P@x>DW߀rA14bB.=8oi_xJʁa9KoɂG]+ =Zb2͂ma]!V\: A+j0CvkD|ZYq:1N|,-eM$@mRX慦>p^$Oqk.Ij:H8XbS`J$[W @vXqƎ- '6Bp|kGѠ]^Gb$A,tqNͽ%h6&טZ6oH{c N8:;(`bd~n1}.3ڷn9*J#BCȅp%=ep=,2%&¡sr۲\"4wQݿn9%PToޖ-?>]Ms5+oU\8RSl.\ɳxGM0qfFRCgA@M.,W)rWů"O&g ުǔ(\>4#4'Nd{?ltcLK`d"-ޗH3Bs:NWf?Xue$2ǬJXVԘiSR T=gumS`)@ʲ*b*UOdEW8MIg`;vʢqJ=. %6h0`pyh=gsWҽAk9uX- FZ?/,߆obOKom(/5L ]˞NXiU%l/#Ica˳ۧӗ~_$IV,Q X=ZAfʗ7 l7cbV>Ț2|&~rN@jI<'~ @as(E 虪;OԬWaK]ޡM/PKEP;~a kmlsamples.kmlUTJUxPKI libkml-1.3.0/testdata/kmz/radar-animation.kmz000066400000000000000000000070051263603257100211770ustar00rootroot00000000000000PK89˻mudoc.kmlUA 1"y?,˘Ha ^]].|x=I9cFTU#H h&< R[ 2* -XݕJM+|3ts8;}d PK89 |level01/01.kmlRN0 ;qjM&ǂ~`6Ĩ͖~>n*66qNs'ٻY/)kBXU,w5Za%d65{Bjڒڲт\`Wz63ݡlܤ5-{% jd{3 \Zd$RVd RZT U#HHѳg&dʱ磄L_ iQ ,dE%&!$O-5;Wޑa?=GedN+~_o;|PK89m[yGflevel03/0130.kmlRmK0+˥v LD&kʚdzlAy\ie%7ZMӐ& 4%g})FIuVl-?cw0T\ Fn(=G]#&\+k2kފb.@g[~ tEܬZ^ Q6_Pb;wH9Qi2#e5sSS?A_B>X/zEml_p!`O.y&*[\pG*CB?G$ nه$/iGW$J7pwDy1ݶPK89z%glevel03/0131.kmlRmK0+%}Yq&@&mjޤݻ =VU7t3֨:҅ưpd ƌ66u4^%-mK2J |3z6Z+.`Оڴ:_}ʺ_Ztw4B89GCOk')(dRQU{NC(n,ϮaQėY,X') 8Lufu?PK89)=_level03/0103.kmlRN0 wL!BPXCWI4'I׭'">q^VWTV˛m[&DbJ3XO<nZ [-qAL ;mPR05ΦB@^W0xEõJ޹DU3_|,s.>Fɚ۵Va+j먒PZPvOcimu㮐ӛ^ݑK"Ji?A_h=iZW{E0Fa*07?4^kg;#)%/D(˯ A![O=Zx:f(18%|1Mi2N#1 +}PK89k[level03/0102.kmlRJ0~sinl(d Ʈɍ4ӧ7i׭SP@p˫.M5h~4 kF6>8O9JZe9Q^*! bѦ8Fj%xu4IB=xxQyAF2Z\TYP|.>>DZtK2A`*穒qA%4im4&:_㶬g-\)DVʣDޓSERmջY٬l47Akk՛` )U8ϣ m*BW׵>{Y28kGdY2M@ep^Ȱ PK89Yblevel02/010.kmlRj0 YnVTC1%jb[#q|'Iwu[m*uR; *Had^4TvsI@TWޟ YЖ\l!"NsmoD얪‚ M9 {5:4N"Ѥ(]v  =.Xeq@*GYHrO=EcϧPfj./LZf0(BLsC~KǎN~2~M1we~'d_cL#\PK89:L level00/0.kml]PN0 wL&m^[5Q-|Ttؾa]76-7)%V*װClU8R ZP0· riX"d?)& 8hIW7u@߅[%+ dƚ7 &H=krdu0f^228YBFTdaw>dGr]*1!x(4~ y?#kY7PK89plevel02/013.kmlRn0;<%ӪPKV: x;Zz2úkp྆,I xr UmD\+{ B+Oh*M2Id2Euwek7e#D]hGRf\oo`RVdQG+OCTMc1!F~<X'W3_|n⩧C9ln=q[W{>k8loPN|Ch33xqI95,7Ȭ$1EnݼEb\(y?~{#gqdˊ7n9Ωck1$B1,%.hX-Ku6|c,9`qW<w8=W~qyXcOǟz ڭ>۽bĐH)|7#Ā%l6idK54m0H#X]^+gNRN}?w{)rtt*uY2:<@]Y[[!@!F2 <K["2qح)T!A)+b*x1f^X"N>}TZ~;C/޽Ma< /KuMz%0ƜO<8$=^O6ΟRu_D y΍7btd,H!PW1%0M"]&Z5`9G0$HQptI]v` E3yꇯ'" kCƙ=710Tu 1k"sx H8Hվ+d:u \햬Oljko</?}ʪ5u')`eoTU$5cr B]u0|FU!73?Ku0]Z HŻ C#|W{ sQߐ)c$鳳@:E)'Bk<`낷gh4366֙:SSboo3!}~1^Cc 211mivAe}u3) 1>>c?J[*'aBL yUSV3gNbknyu/D:pfy'~,9>09y<(v7_cc,`o00;;Mp$uc%W}3>uV<|)~7ɈU]cxhLŗ^Ѱ?8`ǟ|~RvpΜL=E;ҥG<w?b PXGG殐,,!&*?Nf244!B. 4-oS@Ѱ@<`v_?KX[_g{kpao5uDJ6K`tts3LMM277{ܹDUTU)17w]/gad>h2:P]667~3ӧyë?}1<#c".H!lo=7=8Plnn`LNlh4eE]8j;}sINYYʲgpxxkBu&q8w8_?ufyx(.k⽣o+CeK,߿`#4Gfrɡc{cY{ٙ [ <,.-:wNk`h48}fg>$gg0/g>mRu,,,rcvӰssw*ݿg?ï:5ޤDYʪbxxk=)t.@ĩ3̜=&M_ٙӤp\|nĽ~k+"~ $gXk.&F-lfb| fdg(*(㙧Fշ)ҟo#4aL. 꺦wwtrvi43VF]"{]wx/@H-,)ZuV{{!Kʂ,3p5k3?"7xk ǝ.ۻ<*{ۜ=f,8oeޥ*OHakwegҗ9Eoa"g2w1BMh`}FU@ ԐNNXchex9>ڥ*鵵u~^]{Gx1&PcHYs1o41P/-j5V׊3|+m>qNNvln61`!kfTB&eUAJt ; \:og.omog=g)%H2F D =eELC"Pv0q䝐66_Zp"`Mnk-ZZ&K wc Hawwd:mګol<џ|"w[cȋds81XeUXg)bO*#OYn]l򋷮:ĩqb*qo)QH>ab"<)uܹsmf-g)A2$8o &uUCM#o24nQ~{NQOR"%CJ;NƀMl|.)p!%lsg'?zmܣ|?u&%ټ{LUw.1Txע ,K;yq[wnaSg&:lsHhb%'r\1CJd>g-./qv4;}loEl#|as|>zGD1{"ĘSV5{BUZmH7?57/ack``ȼ:C3Z-ueM<3q4[lnlu m1D)uMI!=z@xz]ge>c;lln:]PQ%1&%*5cيq;xg8w23Wxlw"+@4*;f :Uel C❷]|/O#c"F|F n萝u>OcM}3g&u`wcCC: <$, o:bo7߸/~A00Eaow3u⍷o:,.,sab}cg?g&7d͓Roy9:]6wy]2^3'G| #z,K+- |5 ~@eS]1)YR,YY9RP/u"kOLNBZCw.#@UPܻ~<~jkȇXcKʲ 8gpRC˚$*n߽|^ם"j:'wZo CH~Ʊ@)y^~5,;9'bw[7h>3{~PTQ/'SJcu>u]aeA0y {;ܸv>/z鋽]D~M6@Yܼ1Os3St:9ft( o NpRk_5kkۻ"3groiӜnlxGG|7xF晝=GUEifΰ.##xu)oXu"t:]O3{"O>$;?`kc4}n\t4^-"ɗ^b`5z*)58zK e$CCt*3SXc[WceYqttEH.)̜ź6u(տ\yzEd/]nqܹ -67יtBzEdOON16>SxF]4M򼠿MGG>\yȶmxiFF1~N7/g y瀵{/rE>Jlv<,e|fYZM^lﱿ[w!^+" OJ-.^9EŹIKUܼu׵zoidg:.=FȘjUUGu["5z%`M" ⬥(V{koV\IJR]bHX[^}-|| 16:ĩ R8,DB,YY]qD>#/sw,Khd*$ {z|ݝ]} EN]>2uUvcuoyZwh-Sg/r-H!ny Qկ㜥,kp4cgl4Y_]^ȋ^)"7nUsݫdYUNϿ^)"jg O #ϽSO^ʋ4ZU]w~QD~CWO<=4O?qcf( Q^("){/^~aE}iⳬ<IENDB`libkml-1.3.0/testdata/kmz/rumsey/imagery/01_8.png000066400000000000000000000163041263603257100215460ustar00rootroot00000000000000PNG  IHDR\rfIDATxW%W~ &"W2Ibda 0 z`Â_ap,Ò%ٖQ"7q9-K ;V ~֋,Hrc7V9B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!__U %7n.q{qknpmrt؟OH}gX[_!@AU5]Wʍ,.B8.sR?|3&֠EiҍFÑo?\{zww$IUyaoo}n/;IIc0?V&ayy 4{!zz]b8ɋی]W6XZZ+wuEhR@BfR)] 1Q^,/.-uǮ ÿLSxiꚵMwi\ܼ2MrBGm\ηoMp5;;;I??(C=A4JLOMf<4`aY2KzQx_uvvz G#WY^]cccp#L,]DP zw5Ix6{f&XnZfkg7vRdV1B5k ;ਫަ`g4:1B?dmu*9vtm4334z!MD-&@$57f$ٳt'⠷_5M\&z{~5n/ۧ=+,-c4㌍O 'F٤,KbN0h$y?bvvSN`egwn'gzfaey *6?~9| ~y榹=GH=k ~YϠ4>/>v'^<̅c_>Fp?33S cHR˙{ΐ9CUqQy;1d /0;3M[pmN:.Y~k4α$KD4iVPWY^PdGI25ZN>AUdy&c]&gAG?: !G_{y|LM4 MpƇOtY__gnnM&a{k{N;6NU݌4+PƠ$ YQt2.8B^pLRd)#ׯfjj?ߓA!&莍q'8w<1B$/|W׸p$YV"r\=BŀL `ayiq:EA{{s}^`o_V9ByEQ06;>[w^z!bc}5CpHw˨BTXc1E=w/AEN45 UYfX$@kQ18|hPFo3ʥcҗ>rgla,ɺܑcYJe\"NΓO<͑I]ݸ^'|nw=~4E`r|'Oarj euepHmMҚjT-J,'I~Bk*(e"G([X 4ԣ/\3,kkw${iQ/]|? cS3$iNgdev/^d~ncloB`g{kgfgffYfg(Ҝ$Ă,iW6I FDiE9Lɓ96$cް;c!X\{;T/LOl vt'IS$TuMUUTgkk=6I>wbwo{;333,envJi {\>O=Wgqi3ewwv_gTW<Xb~Ld4]103;3K3ᕗ}'/f77]!p SLLMA1)c47dYBJy:cXc0ZS@]'`zf'\C%M4FC4(Zc$"5%ZЊڶ'zRTUW9}4Yw9[ora+~ӟ`sil9ES5kCth@&4QVFPw1Ɛ Z Fb+51Va%M3@MW 01E)VڄDb#?95ǿp.`ON`ll,KQ1\"(<*N(@BJ#.x\bC8QdY]kO Z,*xFvɑ#GU|h'>4i/4aTּ[G䳏|/rʍV;?ީ kMӐ5D4KcŕQxyJSUM Mlo1~x3B).]8KO2쳹XA@$P\[י茡hpׄ0BEM?d}} IbP~@77o>ÏOa*]A7!䭷GYVxPJoL 6I)y^4gbrSuAȱ6__>u"/ag*]ÎM}d~ni(}ҼwhkvHX|`%DpGAC`)VLhIiF*(bLJ$khjj5״=JW6?wiwXK9N!.֤ MDI41뎡jt xơmJjBTCm^ Yǂy*׃IojcRN i6M4RY8+?lGG" (DʪsT~> DG Y^@ZAUIH*VԵ'HgF >d}Q 1H4upC}d0ޣS7O__BӧO#I-$jX9j+2TuC55&:#@b#H3PDEv68ָaM]{nܼ.`Lh4dT|ⓟ8o_?+EwK$S@=.8FcRДT;GFnňCCViC$4.PU#oд5p>K+| ewg`[W"_v9 qWI)$!K 4%Ĉhk7 3M*њ;F^C}p*RU%;lu 8˒bK]8qMEU;E8>xkm?'Ͻ[9F!N,G,--3;3G!R& NG fЍ[K$iJcBkͨiˌm,"'I cݜbv4͘0Yba?٧mQJ[vWΞx qRo\\Y^9ll3&)hՄE7!e;,K|XN1F}C]W diBMppN2c,ڷ(G#N>6>N&$y4;w!=|<}GNN&*цĦ;~'Ok JG޷G~g9Y4o!$MHEiKT tε +Ln>hl{퐒'~~pS#B !(Ir)fhgeyՀ}xpIB|8zd%&&eo#ӖH]7xGj *}lpĹ!<).}Z@)~pMS x7>ί3n( F&&Z_"xOS7SBD) Hi* ϲNKR{O]@'mAbA<zEw#o{W_(6IBDՎ#6j|p("Zihmf!nZla&@9**`uwM &)AIS\}?>켄HI0=IO 4C?r$1A ?7di;jFc"B 4(~!16HRCQhtP((pU45/O}}!2h=lӖjMhh $(к  ws8GWT+֤I*4Vlxk= E X|xK_ 퓿Ʒx`C,Gv.YV#œڭè!PA@3`"iJ@Ў#F>wܺı*>/cag$G8EXF.IENDB`libkml-1.3.0/testdata/kmz/rumsey/kml/000077500000000000000000000000001263603257100175135ustar00rootroot00000000000000libkml-1.3.0/testdata/kmz/rumsey/kml/010.kmz000066400000000000000000000012621263603257100205370ustar00rootroot00000000000000PK\o75i?khvol/temp/Rummy/North_America/Lewis_and_Clark_1814/kml/010.kmlUT FFUxL_O0 륅9fј?1lȸ22hMan-cM]|sm;m*z廓TɱKPNUd>?]CL8|n\);+˷St9#RIdr0`q.rpz=b%ϳBjɈRD0 PKP>cÁ?PKրQQ~ʘO`a-kMDۿT!]aVBekVg4TvǮY/\*=r(GQ$հVHz#7vx2=ĶE˷Zu3kdrX_5[Pn湙Nޱ7Z޼[Y:Z94mL6|B ͣsByIOk90lYU(i-/PK\o75i? khvol/temp/Rummy/North_America/Lewis_and_Clark_1814/kml/010.kmlUTFUxPKz"libkml-1.3.0/testdata/kmz/rumsey/kml/012.kmz000066400000000000000000000012641263603257100205430ustar00rootroot00000000000000PK]o7&?khvol/temp/Rummy/North_America/Lewis_and_Clark_1814/kml/012.kmlUT FFUxL]O0 롌mt51Yڐq2hMan`cx-W=y9m7Y{G'RLmJb!DDSbKNO(0PEL")Bf-jsbWrP#=|,(fR\ťTԳ`F.ePIƐ˕!qvJ2 }PP2(%_?qZJ:dX%BӜSgQj[iľKF= 4|=kD,w6dJm# XO;|2.5Z] _Kd}2(K{Op=Wy|'CRTswL R| ⍒+>V|PMaڷ H B8MD{:ՈCQ}2-4ֿon}PK]o7&? khvol/temp/Rummy/North_America/Lewis_and_Clark_1814/kml/012.kmlUTFUxPKz$libkml-1.3.0/testdata/kmz/rumsey/kml/lc01.kmz000066400000000000000000000033421263603257100207770ustar00rootroot00000000000000PK {9khvol/UT  1H-2HUx*DPK {9 khvol/temp/UT !1H-2HUx*DPK {9khvol/temp/Rumsey/UT  1H-2HUx*DPK {9 khvol/temp/Rumsey/North_America/UT  1H-2HUx*DPK {95khvol/temp/Rumsey/North_America/Lewis_and_Clark_1814/UT  1H-2HUx*DPK {99khvol/temp/Rumsey/North_America/Lewis_and_Clark_1814/kml/UT 31H-2HUx*DPK{9 y ?khvol/temp/Rumsey/North_America/Lewis_and_Clark_1814/kml/01.kmlUT 21H21HUx*D]o0+Pd\m:MbTmSDNCDbWN(t~!_P47y8jGyԦı(*Jd<ҨRS{Q0łJ)Hj jP frhYX̔|ԦJTf.S2qh(*U r2elU`bx2R9lSu}e}gMU]񙊚Dk4zFnQo+JfZ,˝L nGUKӆws\O=y}g>`LCہ[ڐ5B}ɖ,Q]zLp}gP~vs71={.Ii<Td^I%B%˔1Hh`Y 7er;)#>s&F+JMsNy:Tu-)xH+㥊n)%7 E70ApL3>o% I{!F-ˎxJk!IݪZ9c*?qH{Br|6$ʩm? &׻iNW.5[̼ c}.*&My*6,BXºZ=d!|8|-@KGXt7С2u@r1⌵VCZxXFOWJTz yBh!~yE=0*1zrf! Ff36E)iFuak@i:q }\} K)wn4iIo}cŜ Iږ:ޅը%FA gt`7 ϓ@T`; W ޘյzf==iY?R(#wA 60j khZ-p~ExoSm67c4PK 86wdGpngs/africa.pngUT rF$FUx sb``p b``28؀䓭A 0kP%ב2"|d _ } BR*.30`A䱥9^Oǐ[I?!8!!I)ЀMcE&A- , R n5$2(4q7*Ri$<+c| $>/ 1" 'k,I;[M}D3% o=.{8l ?ː? H*ѝ ~&H f=?{G&"zESSAd~lxeZ._ڢ[&J_L{ ɾr ( a7="38&p00u(kUK|S󡦘⍥nl2w;!>Md`zU NA(z'Q0 3 #^IOW?uN MPK376x R9pngs/europe.pngUT F$FUx sb``p b``28؀䓭A 0kP%ב2"|d _ } BR*.30`A䱥9zOǐ[I?!8!!I)ЀMcE&A- , R n5$2(4q7*$e~'t|NC#a1PabT``4 011jcu+_u1/H"ܚDn)ْqt Cτ6˴}ܸ~Vh VϜeĶ%nϖlߦ2lx=|/oLxm^uXd6g9衾[ئ ,K4yo?uM%O; =b1+:fLL`KjSkPIM"h-6Ĺ?@d8AL0۷'Jwy-ne){E+v#ȆM[71[ƈ?JxDx T@bqQĸ c̈́p$$'NhyM >\xwai0b^Jyl#h^(J^:Q[qL@iR3qK_ =, +cώk{Dڔ9i7Ö8kGY0\:wQ̙ ݅ wOy| *5@pr1V:F1O .)|rٍP^xsH-S )~/ ۱@PƣJIP̰6[N$ftsYPK]76Vwpngs/north-america.pngUT "F]FUxVkPW$C&Vta"h"|U6B8ՁdLDQIщXv@,JMmۻ8L;` VҮ㌞a %yo/]wNJaI19/|k9ϗGao )1eD"7~) v"kO=wU]sjA(,](%zd:V`L,ZBCm OarltF)%(FM,Sb?QVG#JUuf>4|6YS|I,1]uPv AY3BɫxW5c{Z9PihW֋1ҩ[R=_$+L (&`0qs;Pb3v"̡ܰ{#PSd)4p?I|iQRTJ+?D ^K@HW<-zdX N'# ./.xXlaÊZSJQ-zF L󲹕S#(U{f<Œ 4yK-8CNdA1YK:=K7cp^eܫH\+}F@{JfB-U|45<5QuwmHs}]ͥϲ'-KZIw:?YXK6azV&yKW\V+g)D6@~w~qSd=~WX!ڪSͬ]s(sH8 a ].{Z_=;f :w:U#&cr.HJ2\,)KyRR=eO&WuP!4"?IYFNS%bsg=K| \]95_S+P(ciK&n4##\{!@>+'Nh AYGX{Al N]K}lԱ>O\h0jhpS 5d«-~:1MH8ky7wÑԄ䥙"ǐA&'8yũxG~{SL=NM_Ts.lFvr Ok? #[|+z*je~|XoNGWmB5_rZ PKn76*jlpngs/south-america.pngUT ?F$FUxV}TSeedNDØF $Q <PĄbhЦPzf$UX`t~G֡%shnSL0-Zn | ;YHaEJɁk()gexO@Cg_(dG`A6lUEtdƕ3X;ݖ`?l޸p'A/~񘲄O"@+rTOB߽zE^lO0D&hSСL[3INJ;bcTmLLˋS\!^yGƈnA3+?3ܷd0<0M_r; xiCZt) *6ٹ`be޼SC+i>J3~[_[-^;ݣDOC'&מ=~+`b] 2om>#^Wam9ti)1j v}%~i:&. |ܲ627bCk0)V a>pɏ9Jv qd3ˑlɞҏYKgFLtSje$%Zڪ֨lF]T\ #1B)~)eVq=UmڡKy؆DƂOcz!׭Ν)4h\}'^ q6`KQY>,d1Ɲu6'n[zUeZ =2ҩlgn֯]GGV%-)jL6b+HHV79++'֚FKy fMd<`%mnK'r<󛴮qܟ{D0a{h<3w{lց&_fW8/5ܗ&5̚ʴ{SSڏZmwK?%DEѼLV[ޛx"JFmTv.&dO44WK4Ne^/\6E#az}F) a*"{b1›73)c/ռe)n C7"RoQR) 8:!`,.x) Y1uGxToz xy%dVrWLQoZ^)}Jר0DR?ŀ`{T&3q_KI]0RNҜ"<[6GblF' V ?F' t{ÜGp}.> U/*kq(CRGjzғЈy&!-zE?jz%'/UbWjGjPK66 doc.kmlUT$FUxPK 86wdG pngs/africa.pngUTrFUxPK376x R9 pngs/europe.pngUTFUxPK]76Vw U pngs/north-america.pngUT"FUxPKn76*jl pngs/south-america.pngUT?FUxPKx8libkml-1.3.0/testdata/kmz/zermatt-photo-bad.kmz000066400000000000000000000041331263603257100214710ustar00rootroot00000000000000PK!iֱ!doc.kmlUT WYHUxeT =oC6q\V+J:v3&iӯcix3O] f3đ2jSn|?ș@*M+ϔܺVrcTT; 7JW;vQ`3-h Q_ct'4v)IY z!4w=_l|xcʁ\lE4 #eJБJzP%tD4{%'l5g{ˌykc;>̈z"LͪZu 6S5%湰+׺s5gUT-#й) 2QTւ&#6F\~٤&BUy;:B4X$0fB/ :Fc&l;G~ƶZ~}hT{G9x*O34aK e* Zz໓,2 UNj\ }"/⨶.-ݾO1}L-|jd0+rPK H]8files/UT WYH0WYHUxPK !hh`files/camera_mode.pngUT WYHUxPNG  IHDRٱ\]IDATx^}TYL\e=wV,DQFD(c[h)KDIlThEFS}imMM,- P>"HhClYT)2Y;ć֓wۮ4 $ eY18>O,.-hlؗf58__u8v$jj?ސn}C7&坰F}qFJ,,p{h#'y(e8b!55N.!E"Z,mAQ̈z"LͪZu 6S5%湰+׺s5gUT-#й) 2QTւ&#6F\~٤&BUy;:B4X$0fB/ :Fc&l;G~ƶZ~}hT{G9x*O34aK e* Zz໓,2 UNj\ }"/⨶.-ݾO1}L-|jd0+rPKJ9@@files/zermatt.jpgJFIFPhotoshop 3.08BIM(ICC_PROFILEapplmntrRGB XYZ   acspAPPL-applr6<9u]cEhqrXYZ,gXYZ@bXYZTwtpthchad|,rTRCgTRCbTRCvcgtndin>desc,ddscm.mmod(cprt-XYZ [4KXYZ w(MXYZ #aXYZ Rsf32 B&lcurvcurvcurvvcgt$z||~ D ho u!"#%{&')~*+-./1235679:;=>?ABCEFGIJKMNOPQRTUVWXZ[\]^_`b cdefghiklmnopqrstuvwxyz{|})Ղ  !"#$%''()*l,-/0112456v78:;<<=?@ABCńEFGII ˋKLNϏPQRӒSTUחWXZۛ\\]ߟ_`!bcd%fgh)jkl-nop1rst5vxyy:{|=#|gT C 4 ' ' &(8L^s6g !#$=%q&')(*l+-.A/02)346*7p8:;x<>?o@B$C{DFGxHIK1LeMNPQGRxSTV W@XqYZ[]^O_z`abde?fXg~hijkmn+oDphq|rstuvwxz{| },~5@KO[`eltrş̠ѡӢӣӤۥڵѶɷm[K<*ŴƓrS6̴͊Z#г}EԠj3ؓ])ۺ܂Kߩs;^'Jl5[$|Go9[#Ixz;}?F J OT\ !"#$%&'()*i*+,-./012345678x89:;<=>~>?@ABCDEEFGHIJKL LMNOPQQRSTUVWWXYZ[\\]^_`ab!bcdefg&ghijkl,lmnopqrstuvwxy8yz{|}~ɊJ  !c#$&&'()*,-./01123457789;;<>>?@ABCEFFGHIKv"NPPQ}*VW؂/Z܆3߉5d;ijloZRndin6+VS+'_P T9=pJ=.BYs KxG=!YFG\9 : o -   n E afQ:7_i+f%wG$|j ! !"""##$%U&&'(C()B**+,-\.3/ /0123d4G5,667899:;<=>?w@qAlBiChDhEkFnGtH{IJKLMNOPRST8USVpWXYZ\]>^f_`acdGeyfijPklnoApqstKux$yoz| }Z~T\qэ_Ɠ/sSŞ%-DѸaBtƬJˊ-vp&ߊ?dV_ )?Xu0_*_M O iC%ud \  ^ c  p * L o@vF sjltz9VQ !&!"n##$c% %&n''()B)*+|,=,-./T0!0123j4D556789:g;W<==/>!?@AABCDEFGHJKLM1N>OOPRQkRySTUVWYZ/[N\q]^_a b0chdefh)iejkmnUopr(svtvwsxz#{|~Yȁ65ΐe7嘞jU)¥c\F84.-(%(0?HQlqˑ͠ϼ=d܋޺Bf(nBY KxG=YFG\ T -  n dafs7_fNGP ! !"Q##$&&'(v)B*+,-\.3/ 0123d4G66789:<=>?w@qBiChDhEkFnH{IJKLMNOPRST8USWXYZ\]>^f_`acdGeyfgijPlnoApqstKuvx$yoz| }Z~T\qь2_Ɠ/sSŝ9%-DѸa񻃽BtƬJˊ͖vpְ׆v&kDߊ?bkI(VgH* TB'desc Color LCDmluc itITfrFRBnbNO&esES8fiFIJptPTZzhTWrjaJPnlNLdeDEruRU$koKR enUSsvSEdaDKzhCN "LCD coloricran cristaux liquides couleurFarge-LCDLCD colorVri-LCDLCD colorido_irmfvoy:Vh000 LCDKleuren-LCDFarb-LCD&25B=>9 -48A?;59 LCDColor LCDFrg-LCDLCD-farveskrm_ir LCDmmodW{textCopyright Apple Computer, Inc., 2005CC  }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?3V n7|ûtr[{4^eY3dZ릛Z-kҚm]U=?wU ܜezSo_(=.T@p>Դר饻L$Rk hϭǤ!I8X>eQ涻J˿a-pnsZ(Jڵ뱃FrI<i{ose$ջl̖E1\~X̌w~Uwqw5|ѷza~BA,A}zNI+??(QP[=2̠' wk>ywRz?{!׹j+vEZ-O!\at_x˶5A9Rck_5w~dge22c?z{_?3wQ{:QaOluU}zռK)I?ɩyoot߼ "glvd,/뿟.uSV+g+G5iYXqn_=ISv~n5.w*Yks|nݵw?άʭ쿯Ԓ28qvLp_~^fqoA%Y0 ^֗JQmׯ,=qḬ#}п7S/w}*M=18$ケnԎE_nUx|}5ߙ qz{i%?J:no׸[60O"3HJWOmߍ[:еNo8˞wiwc#9a?:iM&}V16>s:_wQn6DeHRr @Oiҽ23go*'cxo{}DnK(,O9oQϯU]IWGvOx# u]:wԗ w6Ocw:-Pos۷ØҌ\}6WrJf]=&(]qcU;MB_ש{-}mevkW ;R#ʹ nhWtDJ޺MrO{ūGeN׮heq3g8o&ԛOzwnɶT$߯y]74k'k9%sU ֢N2]W}m'\XxG׮kVtn>X$>^?e$?:_ ܤstw_%}bRj urT<+U857'Qsy^d1V/#O?] ?yyL~0K?zFZٜ;$>B7(}m9ԝP=^zuᷝ:ڒzרF.0 |K5/+I(;]| 7p?_=i9BI)7_טP,xWlʟ,_閗i*OLOeۛn-jzQ -_^lF;e߻9y*N*NB#<|oTo~$;ϮEiF;_J׸ͻw<p続iRkӱ!o1A)dz{BImuؽzW,VQ-g磑I=%Rq\w{LUr j緧KÚӚoKm#r'8 GMO/еv6~ZƤSw} rT׸rTs@|MSӷTreϹ*ػón]_r>V3Q(/4Dy;yVp$u@d#p vZQ篝ߟ2u_{|NF U?^vG,)TWoG@ەݏzNTz 9fV%.sX?bv&6^2;-ZJ:]/K/=}MUQv_߮(@w5)v:sYzgobsN\Kk}ltSi_ERoNqG֥{>,);mk!jCӯ-T`^)tQ|&vyqO+Og}l]/ 8? цfa ~ߗvI׽hT̀0z~=je/1s|{M:t,08'ڱ{[˷]JX+_);pKt[nWCyE*I 6da7fou9j>[O&L:1v:YƚiOࣶXEwo2#qZ-oz?v]IY_%}lM ?s^[}*mFXrm V+F7Z#P[9=x}kGe<ƨA,F3=nV-u.T9`Pzc1ֳpi}ֿMղ亿K${L( 0Qn?xZ)?uzy\HV>a$Ooܟ֛+^'jfAIO/בmwx)|aie^eNq~;xֳnNZ!d}>֮~_NJ۵ 'շ>^*VTjN脮q/ Y.:[N^uJ/obR .ǝR65kD'[[ OGqu W>JcvrImwwG"e|{]nۨXses)s?/ĕxZ<ʅ[9_w˻AvR]ߒuՎme`E]iZ֩+֌b9#= mFR]z> ~G#]5֢sJQ_fo?^4LPr|?Ӎ=;}Mj 4[뵟]{K n+iR]W,g!<ֱiiI?y~d7sFzKeU_}vҦ_Ē Oͻ%w:rM _9M,9#,-;M]//]Knv"6R'oju,.$ 9%Չܨ_oG?ә߮y1{79ۏM.f}5{z ::v*>4[[.:߫"$7=:эT%+[iqe9!N3g{ﱼe:Kwݿ;*dK e/;A]tuL#Rw|`8^/5K{h2=xŎO?}N˲xI(uOA,>_k߽ae{ЅW(MM۰;E~Vv'\ֻr;/S0q_fy-n~:u8Q`:N_wJeJ=HxA'ZN籍:Qo~y)zs%8]ߗd8Fs'ނUVޗW_@&v699b~4O;#mco=:֖rIߧ%PF3[<Զ\{Xb;*wz}i;5OJWh-]>~G/4k1߸`2Ak{_}a,@+'ivsi:~mzH(k I+c??j*1"l0^[rŭ?_:|FF0>má`M_)F6EbT88ϻ?օ+_^U~G B?Cg r~%wn,[vߧqꮒn~ЫhvFIG}QBݎ_ [o[Ǿ)l7vCwO;x;(;wu>1H |vsB%k;wݿkǻ~8 mϧw|۾kEJqviQI^r8ݫQ'(JK~'~IOwesYۓkQ=ʸ}9^o#m7q rrL^qqY%ecJ#aA}[[;#Uw m g9yH8Yk'ꅑQQz/sު7f5&OQ<ʃmszn*:?N`Yx˓Cul}YM9Y7~ԖE]@E,07}O5oʴ~Ɍ@rO[8/%suv*2l˕7,>I$}{[ܣR6B  mw}^լRJ1UNZtjz+*ndp??e%{Y>Վuc~rd =uW9*.y7 S͹}Nm57.OG'>_=oGI|_.j1V# `qk|&qsUVJ߆XisUS=ZW;߸I79yY|YEM],6S W Kleio[9]1emYF ۝_{M\KZ.^Ԇ(0|$󷝾Fv[_=.fҠ.7<.7~%+3YKX}w۱np O{fϯ#2 foE)UXd ׽IAyoVfSyhp{sR^w_;1dd4VrE+mv

PWʱ>GW4b|3igtru#79ϿeNX7O{~<wᔒ|κ3g~xSmv^Z%_gc[;Ԡdc-+ө.o&+ /;w/h3eSG慄:+{٬F<=I^cV>[K3)鷜6Xvuta?iIj_vv=\>S_7M){?'x{d jjNU縲 ~e'|suS]SqyM-;?ԶB"`Þsw ] *J>ut);-$Å1`IRxOSm ۻ܎EpNqIgi5N%Sk2 wuQjo_c[nT63/wSow9('+8oۆީÕhv~13u?{ _cnڮMZGo/2 -`yZ2?x{?ɞH_sG}z*'G ] /֏` >t?9s_ݕ0_I߸lm</Fhi^VmӶo=A&7U|T\pwR)զ}[׷ʬp3##k/M~:Qs{XN18p~__V<vn]b=N>㸞8?֪pOr^}zc1˳m-lwektY;sϸ>ӌA#?/Gw"uWzwnP{ q]zƎG}II߸vpAzORJ~^%0bAV-l_ʿsQw{CIecېwFR8o_Mk~Fm]~~ Qs-o+mk?Umf a :SqkvLW9$9 G?{Rt\O^̍ŵHc9oڛs)?O]wѹF'y }י_n/0 d 6NOc˿9o],ar1ݯU6Vq}oLn \6яٿG}xpi[̘vU+򜷿f~։)nz~oc^r~>'"p6_w el/*C*RQՀ(2x=JKwu[0+Ӗ5 jm'__5IXns\}?w]ʭNK;6בQOku j/_2& ۊ+ul¤ߺyy CrX7?jn__*NZ{^>w-4r.4`Xpps[}}}}d߹ڿ--~ēTcjs֪1nԝ7qXF~f;^}iJ_z~;fh'Ӛo^n\뗧nymUs/qʟRGƪ? l;רpU<8+O4WdC 5]yޅTpIn2Uwk7}J%ЄnW&H">ICz񟗎~j=NȚkD@fT͕?|/}j/Jv]|>nbC ܞZRMF0NwPVqgoDp]?QLc_js[Ϡ1$t䨪AbA 읿"si+߯e+z P/OZ~?4U'q@N}㕵ן_cs'g붉k c@xPwsJb^Kߥ֟m ͕8`zޭ\SiEIFJ7|Vm4;ŷGb;x]sfST=~ߧp*qnG3cnFoǯnVtq)E?{3:(qο({Uuә?;G9\de[#gy~KM鿞m_ޞ 0P /z4T۾8Vm}ocj#p9I=o;)j?~I$p?CRKn{m޳HwPI돽Fwo=UJӽ,@l+A?{QȻ~sS˙_{p)P:[U ^_u:q5s7 F$ zqn}Qn~FH$/,%~e#i>U:rFO_?! ֩S/{kynAtG;?߭6Y|6}vdC3y8?5N?Wk싑“}9sU_Mwfv۷aH\m'Wއ}96V ͅ` 9׭PFWn~PP*6[ށBSWFʐU He)GS:)n~̐,q ylZC]]ZΖooQ/+B7gW)Hs=?L2k_Ԫ{J2(ݞ~=\yco|96˳BXp:>[~bFϚ[D o7w+Q_'jE$d?yMm^g>37 v!/V _u֎' ӻW1q .> O+գ}!^M~p͜|nytm9ES~\ :fv:O^GۯS$BF{gqZAZկuzW m ~o}x{a[89d*_^(weԮ|am{9;}~=i'|NZOoA Gk^GМMN{؛b?3dp[]X0/y_R\V{]Z=<#gTICN0rۯ\o̾p+`/?wPqd*t.v'$*6C{ݞOvVe"B|(}n߷rs>@>vz4|+/kWhC+'5aO.z 'Τ8bPGoy3CMniV;ܒBfUaq-5ۓJJ'ӧ=MbSKG 2INK^yJ~!Y]H8 /7|^ МTptel XޛI!^7zq.X~~=-{wDw/w!v@P0K^֯VJq8eP)XԪ6wbqQk$0L9\Y<i+gM>}Uӿ0׌#ZrĎ i~zwz{+Ok;u8{_=5}Tվt*?N?i=k(ބ~RN>onM/]%_={#7o53/ܯonk{t$€s~o&n\TV>n"av#9 }gւ]?B_pT^ڷTȜ׻ӮatAqp!Xgq?J\!S8)3(;_eʔ'g1g~l__z ڔn}O  }iY'{)ngos?ǚvWD,mnNùB^~U{)64Ua{:k'E$(2GauZ~^}uF-tV攪G^mqRaڪ4˕W mY[o7 *Aeqmi/w;]oᅳCB $|J-{aoy #;X#?:˩r_owC?x{$:J*ni%R2G$_+좟R7"]\ 1`+|_֩49xJl&epG W+m[pw aY}Ldpz?~^]TFst?ӧ}hƬԑNTg`,qTs+&5*1]/X2iM"]|>^?5M''5wn$L/槒=eiGW] QT?x}\#܄)vOۻZEݚrM4w_q ;u~?4($wgUJq]km؆2ʳaxݨ.5YW1uvvTX:m)X㉅)oMaVm8Wi/˛Ov +;o]?JI^rN]RICjUXI1;Kwٟg{k Ejm9YNu, =NsOzE?'nU*nk_֤%Xsۉ7_uBN>39VJiFZߎz4DNNW6Onkdrjy~?07.`0gZף^d`{OZӞ=dSCNͣrTrAݓʯj9Z~N4iIj_@P+*<;O?jt濯Sv"Fʬcsomz][ ?qmQc1v-sڦoFoV*+6c *_tF/{LsYJ7~xgU_[ݡLL2 s9GT֏ B@ߘ*-;FV@]흼ܿĿ+'nM=?Ry]k^W0UZ{TT HyvuzϯOr'QIw}`*Rn^o?Q,Fz*r_ַ%XrA0ǶWpۍMvoet޿<ٜ2_z7N^ߨ‡bH`7_?Ԕ~ b |'={u/y“v?}AʪIpާSs=#}~%Gۿ/_+2O8裦_z~tk׷k 8ۿ~;][m^jE}׹Hc,B?Ͽjw{ksoeݓ*@=OX]G3\?~B~P!ׯ$<י>GO˧ࣖ*0zӜwGIFѢ ]m{nsQi˚N}{鯨P0H$'CWދt6צ[&Nz ?UB1O;uqZwۭ_NW,=P)J[ #cnHo׮GNoUc۲}ҏ.BB[$c?/~nִgk_ڜV(l?1QtI=_lh\RY#gxtm_=Innkk}qeG s=bIʜ?ϭhbsR/].QGͻz?]g:zO^A[#r}nu^ϭ9SQVbev:͹ǽE=,[ E-4FomzVߚwM.dQeUFi)߭*qW٭}me (?xOfZZ_hz5۲_n{1 .N9{|~oz_yo,߲_%6{n GJ+z_+n*6.vCdcVNDp 9qֿNzUg{w2>QsMcȯҮ޶=Dh!C`)_/,~N~1|`66ߺIt=/u~Q y$~onJr~T?WaR*GW2_0U-߯6lw朹t {?d_'(_qժE_F;r:?=3W n_;<s_%یzyڻo񬦛_u;SN}_ },sվo9%_fvR!Jl%{(uOoǞ] Ul^p7nowoCJ)ANsw_os# w .+5kQVMo/N @mXgwkGߏbfl_Nqx?&NW#(m~ZoJQZoۉ~gzZfmoN˪&XrvTնֵ`u[K88vܙKZHO>/^iGAYo^ȕ0_iݔۿȪ1rwZwmԟ 7u$)wn_9Q;˯uTU~zAIWn{5.WZ{_LR:^~v*8u?oANWFJrIַi1.E;'Qjw ;߻.$/p^sRN|~b}ݬr|ymރ:Xofv}K/מqG֡_SG}_ HN1# ;]tߧMYʤGnƽA'9oyc7gjdܛOv^m O`a r:?٠Z6w$d }_~RNz|!ʬZk!1l0u;VEFW~%`B0r _Nw:8>];Ula19N:|Z/ϭŗh*Ss@=uQvT|)i[rirJyPwsaoV..3~:P];lh1acW;yfNyO s|=:']|3Tu?Z&s9B55.RA:>oT۷~EHlls˻+7EMPiZJ{m wfUKY?M"1;zhqN/kI7_y,jG ЯֳM?-Z jy? Arݟ~sbs?m$Op,>c|*q>׾HUb9Bꨳ_bCy_oV*w}?z٭4Nߟ_q1Wv~_.v^XytG23а'ީ{W_M`;*DZ)7s +M]>zj 獼O,-[\^q{G]2vgn?m)oCO[>Ǭl]pJ?Zfd+]!V|c6OJW57 C;1_cw?Dm}7_Rrdgw$7{=x$q!M9+t|7.vWwj61޽Sc0#ϷBuo;2N3O U'JQE9ƓzWVH3u?Jmm{~ vl1V^֤9Ex҇xBy$ T9%5o{pa0K;~v5+h;|&Vߍ:iu%[^gd\euon@`tn >U-~]j e??}?zmS;ÏW+vjؙK܃򑑞^>}>N 1ry6?ǿ.O'&&A |pꝟ)e}{>MĞm{СN빴[]߯r e''o_^RVY:dni# hzc;k9I~z9;z~U\u^2O^=iJvM߮:Ź][}rv7?چmqh/T G3 I4woB,^[l%[i1Q*|S痑m-~`^AI-WSK?4op*U 6ۯO%{E`$`YwuRU=zy*ϷG*Kn}JKQ" T$w 9ޒ )?O˯mלFy.hq~No㋿{{@v'o;ϯZC?oo$'k[HK6 s?fw_lmoor HaF3~o}+T6O?Z<+l|%zokkM:ק+h7[_~?ҲNm*YgzN|mͮ{YYvݿODe}X }5TazSҩ0Zyw0l)`~l4r;|%WW0PpǟoE9E/7o?\zվoOߡ5߿ Nnq<j$ońnc;UycW77{6=*VbxNG5"dK{m7v@rXm__I]{'N1_;.C*jI - އ'G߯Yng9.w{{W_=~%T;;xnE q!$ȭԝeX ^zSw^?;ʳQ!1O{ߵ%=߸F)Q~_53{Y~DTxU~c}Q.̦2ϒyO]fvS;m-q@##<5a_,_]WRO3*wv*r27m^v=zҴDٿpx*~bF66M I}v"o޳ܿ1Hi)?֔f=w4U=W=p*vu/R0!پlonrٿ ),p a׏ք/MK~Q]Wn'pf}nٸYJ+3N0;Ƌr쯮ߏqʸ~H%tع?68-sWN_R_}F(۸m#'D;n 1 tJ.VGե;y+:_a*ҩ;߮ g#qg?Nu:w{@@#)п;r=zk{isw_|rg۹.ªr1~oknW,[w~AUqィn[xk2(EoՌvT/e?wTN}Bm_{|Ƴ- N7կ''}{z˥ϿVR)3@N gz}ӵU_]-ޟq&Ls?/w4W7wi^b@@^9Ƿֳ'>y%ȯl%Hu?[Vz|n5K2@3KeZF8xlT*⛾s_? Ppp1z{6HP@pI7Z}dGY7$x clud^uԘIֿv2w0< {M$_Uy)r[_`eNn0sǽhtsIo<Fm v'vG;ҭr[Vz//=K \mq?.ߗ}y`UURcb ze{wo͡hua9ۯV ߈P  5+c0#ow|ڑnz'ѷ:(|é&۱鵭OgvW?~>M_sR6>"])pOssk.YgNtRN߮6E|F~VZ/O{[J;tʆ8o=)hj"z?N})٭ծוǐCc9}Ym^K}Fr>s*,*I?>ΆQm&ܼ˻qCӧ*Gh50-suq_ݷ洨m_E(Bgq .Kg=YRJ:W澿K l ytRg{NV{?k2*v9Ց)%& ])ry w;޼jm~7gRӠUryG~gk#M16:c:^㊓qt?w ݗ@An`S)[r:z܌OF?w4uz/@ tP6Jun |>}>Vn loNeXr1d:٫5c+^ޚy[[kud!X.r?+wVyȕ.קaz``(?JN(Nz}rC'kş4;?N{u+ A'n|˻msUKᅲ]Yw! | }o[~E'ze^ݓ۸ߣqk9I?Շ7u}>eh+z,8֑ZK$Ԕf+.&psi~ . V ,;Nޤ>o_֪QI-uV<6VӮ9I06 'm[_MT\h}_N<Ȫx {Z?~ݥ[ʣ,:ר<ϥ3jTm[Cca$M/o+񿗟*]Σ#=󞍦3j}"8ʂQ8;aV|9 mr*2得N _.Ê1gjz?;~{ӒșPN199=n4W^rÓ%]~tW橈Uۭߡebxwko<4UwR&O[`~PrXF?*Ϳb+/wϮddۋmR@>~SIZ0rKFDpw#a<@t_ 8?"vW]Yzu•\n`:{MZ¼X5?mY󍥲?h[cRNֽda;_qZyvq7nr2dQd7f_ҵo®"}l0) Hwe2QWx-NW.]unD8t۔|*\dw̖"\۶{N\neaI6)fnyÝ[/{~U_%r2mp+svijsN.oZvbx?ZQO}JVs ٿ(]^-j[in©ˆAgV^攱z211$@ߨҳw6ǻ}ou+8 9aM|ȽB29MYTt{&:Ȍڌ9v#u_u8k4FB`͓sl7#?\mfh|YJ7OKs5v}?|^1FToƹݹ⬟6o5"iYvr~eV?+og9#uboMu{kFwIBw9e/Ӯ0RM;KןͯR!*9#'zmZ^-qUm֛~]+)ޜC{?ҵ5_IFrWZ22pv*tlbE;HnI~lvP],ui[ѐ\;6T&T1tkJq1-F:;nDGv6ݿ{O5n %t'麟wrp~c?s̙sS^~{hRea26ӓ(Un?#ݵؒ>E+6:=K_cXD19b1SMB<zo×nX7e 7_։/Oٷ_~5]c N@#nu~>uŞU{cur)oօØ7(;64.qp?_2M=z;<8*g?uI+ߝ+Hm͑t#@S5~=Գf?ҫﮯz_u|MOW&t]~㝔]W;Ay-_=sFΤ}_# ~׻߿{;7Fu0V 9ӵ Ie5Qqmb3>ަʛޟԐ+/d嗻{RoJ=u#+ۻ .~_~΋[M6g^$7Rª/ߗs~?IsFw1fۻuօԺ]ݷY\ ;@?^zzS^|]e%\nm'w6~u߉(7n]nsgFSo0v$•GU>r.ub}[oYF|w潾_Sn}m*gⲝMv4Ҧ_1l[w5qcJi(/; A3g?'j[IK toJ!sK=o}?̀f#(#=~[U}7<){N_鮺.Ҫ+8vٽN_v\$w[)m#8{|SkdSHIlⵊI)?^)o沆n1Pg*tٜIyV7f`;Osڃ?hw ܁}*i=ݿK|Ɣm$ >\;xvԟvՒGC?60|xsYnǚnw \(?Ff~ELv꿧Rtdܔ2=y;|{J<]&gߣ"?3va ov=[jZ7ݻeQ~^u]6q8ҥj͔▋7 H>jy`Faٕ\UsۿV+^;_5mmUUA:WOTO J ;{VR|i;ۗg^}G1BP0?6^ujZy2V)+gv~Z6q?i[ؘ"`q/w )KO׳?bgO}=>ւG9<vwQw}uK|ɊY5;-o|M|4Cl!]ǡj7[|yӗ=cGcגR}Sh.\WR_Bu_vkʜ̉K.1_ζ +[ow$8+gk_ܪ7kvoKmFrQr"l;[;O+uq[aSiߨ8ᶆm86riꕟ^&rc`->*\9_:8i rUW[3:wdwJmBPdzcn3}~=%x_?1jyWk M{s4KK{7[_p9<c@+=5Z;E$Ͱv{c$շڱ4}'ڥPf!r1yc]5}ҁ_ 'w?˺j_sb6H\m6ڎnEu5k}#_sTO]3iy 'xqc/^i?GXPK<{=ϨkίXPW,?[s u縥 sܬ9{_}|=p ~?/SގEտ:VR; N!;ꮢ}?=#'MߙozV#yQ)0*wzot{E-odY+0 u;վ\ROfdݝg3eW\$X c_֡gкPI>f{^˓v9m׽'4m<8忇*խsqqiV(T:n~R*#omOB{ ۀ0 q*ے7X^1Jr1ßeU}{Lƥeukf N5̱O_{U;a~oi9%RzizpɓIӽ%$AEEe.1є2/?~je>v1\ RHMiL(m{ҿ;Wc)K)$ 瞵i\Ƴ%hǪӮ'hasvݕNT4ZjP2W0??V/3O=_*,k0zsYk-t.n9b}xғZ&'_^Jy֑We&6UFP)' g+"+Z '~m yǚM]UJ{_qcj GJ*4mѨ h s9Sw~*Wz_{k_PrrsThy߇L1wqW?۝Y*m;~NoJjrYOr.c[H>vrTk%o5& ul[3%ߕuqRw|}zwRRR6'I~V{>_U}̥;[1DWjw~>_֎iw*Q\W~vWv/O7}{+?;rH?y Y4^}8(%F\r=v4&]]69>*T$iߴ`pKׯ^5kՕUs'tDtw֩E?r~fT;r}1f/])SW^" 5ʵGUsl/ڥ]45'w>d)F ;y/?gZ˗Nm?mδ_;\vՕA~`2#4]oc'Ξ߇_#;s摭)$ln$kE4VC TrJ 2jӺy$[w%Xn==?ֳs_=NZݖMą0HvN_cwy ;A9M27=[xgx%HvJϝt_{8s[w~Df|6y 9OtM_;bV~%UK|p:9qgGZw+?!-oE[m:osͨۧnzW9gZzyQeQ"I^KЦYÎ[mY[__oĦ4ԮK0l?ϵjeӿU')lSO%ؕ2d0bIuTJ:i_?~4jr`q=0z^ۄӲ~=Rv,l(t,3?UmX=[p@ ?7;.{v֌˿ Q;rxn__z ]m؟w?xobΝ"wAylr8q*Rܭ|Be-O&C#87s|ߍD:(Ts}C RЂ=GN<eZ{IWa~}h]Tj)$#) L _uRݍ[,yPYh!޿zm{J=6UQ}o_Չ F?I5+knDs+N868\|V⹕५(p[$0tkS;JD4nF9Iϭo n[/r(ޞ{!6џ9֛G3Nm89'>ƑQWBdA.amwOz5m:ԡЀqM5ת(/h_H A˻wQRO͜5Fm xRJ+^Pѭ}^ڌF>YŻڃF"ʒ9w[YpRqzoRpNۀ?ibU?*\b~ЪſHRI{OJMdTi/v~u !~e#] &<g,z9ܿtJV{?N0kwGLs|̥ӾGw)ƞ;߯pPoSoV56CrW#{~5W^r˚Wӷ_UBr2{/e+_O/Ԙ^3}QrrW"zf䔵~t[T B'+~W,?*kMk~?̉ϖK)گO_[oCU%q滽wYٛ4u87NX_hݽB/L5d'Hv8rp@#OvTi;%rB>~,cy\wq֪+O/㓓{z*sm~orK{:hP9Ucԯ:7?%Θ+".I*rG<UktÄ2~"R30';wn ݿ}\x$9;W>W(ŧo=['r|JU&挔ZcyT۷딭&ݞir׾w!R7.uN}JFk]7V_bXo_+)SXK݌~WV&Lc*6waO RPI[U7濭fԍ@K9S?OBkDz 䎱Z>c|w#HWV~>k nS'd56?/u++*9e?(+ynߦ/T>U]{ hi:\/f.nݟunȏrڤ E$m{=m*ן+q2j\L_Odp!+t4[쎥)Vvg#q:/P*v~_ֶ;1UPlm7Lᘩ9tv{sēv(mo4KcY䕿"`wmTbȁO~fn+n}jz$cOU;Z};~%pG#=~o\Ғkoz F s|qd(2A]^>rZ+J5u[}{1Knֺo;?K~)z귤n}g?nj/h(ؤ 0V, i i8SEIn>20cgV./] <[iuZxǙ|1 lg;3{w֦R嶗k~o-?X1+MI=UZJmy\|Lŏm"vm]?R]>dR2*3ޞJuߡ+)k~ ?u7+^b89  1k]xL%s$aҲ*nj>9;sthu\UgJǙƬ?3`g[;ū0Dw+qs~pߗ'>^zV7sFkp&r~w[zCz~h[3W鿟20s m~#}pP`GB}՜Z^lޏ|?!X݂ < DʕM_egM͎Bs a&[p֧+Gҭٞ mݝi=_͏rp۷6??j˚lUyӤ}܍F1Fy?[MnMt>c @{?wm~y||69E=}n޿D&Sױ&@b899\3|Ч鮾~ /].>z:U%%Rᕗm7ni$X.qi+R]V=WC͓G|o>Rk?S/yZ$EO2m:J)+tk&0뎝o.fa@ +;p~u1}s{y8q?*+W拗˯}_A @lD{;~[Q|ۓ죿}կMu`0;SԆZst_yqi}~LcU;Ѝ<د(ݫ{9%kjniJ]᭕ A;ŷW5-#ܬS]x?ǯWw㊊i}?]1fK 8Byp9kWV5UmOW;<㏯_')ZsJ2~Z߷Dm A#wv<{Jb;\P[ H-֕"m.5|.?HR _?79Z6k'$qBv~kGyOSڸ7׷_]/j"F…[I?{oh&2K޿X?JΜ,6͵Zt^iԓnM#HӖe (|֞hkE.pS#m̿\Ge)Fp~kuOdobG_Bz*͸Ϲ*"<>^>ZN`I(ߧOKkqʾX`T|#? ]XtR$ky9=O+kh ݝQJԮ ?ɢϳiPoԌ8\pH99S_ӧq~ @yNzs{?rr|ԏeNvl9\!}*dz`(mPqo~fI 9?gCyyw A%?5ۿrRO=;~ )ame_TWeu woٸ54u [0 oaKu'^︃!,nr??j+k~hpR1y] N~ܮ8.#)WvΘ@#9YjyW^zK^dm%@`[k9J>PBAFc#h”v^#f?j%k[Q_K.e8oQMB=gUJIooywJHRpo֣[~3Wx4=Tey`W??Z/S2itwcGA$Oc5.{|*בZjwCV7 d&`UQxFQZ}|̉#P(f]rަI~eF\=T Xm?7,y >4e:~J6$!7fC^y I!CMA]<)4ݟ"(]fp?4K6y XwBۻw|={Dt)ڵk>|YTla\Q~JQPOee q=3yok[[s5umD,6 9Yʿ.~oރ7''d:ƹV|c{~Zr ޝ'[ɳVv\F6{Y'{;[1CE`3[oQQI/.t"_wN?mڢ ;_Tg+輼۴<>ޝo16ן0PwH?k7uSN] ]_JJӫwlU dF?T3sn+!9_~oZ{'~Ywc< X?89ogG%mI0#X`٘thsnwF, !Tۏ~ZԋJ߁4ڛ%}h_Ʋrl"4mk>žEڜd <>BtgOz 1ue"ׯQ ;8;S-{I%_O\O#b[fV8_Oڕg b(M̘ NI+zvj]}#Sm{ Tfp/f{S_-!'e7c,.HnDzsS?] p6=&UR6[܊j֝_~vY'?Ο,aOo_2cRs^߂ETϹዏJθis?r G$}~v=DGlzs;!Jdn@} 8~w`gkHCPhrKpz{m RWO7Wa+Zikm_8N;7=^#+; r3jdW]}~⤔SqzoqrNx~ޥ(n4jsɩ=ۿn6lO#}jRz+>yv+`j?7zYv5Nrrdž>IU"~4s{}AqJҿ}{ X$cOKuEHNSsUo=IBxwUE]-4T?r2O9*?޴(һwa|/5.)"\:~JĂ7c ~5.ןriSk{;6 `=~;W&UNYAlnnz^ߟִݟiAs-o/a[0[?ohWzrW_Թ99N_JĎyw ,˞KRI>m[2y1'~6W5$>u!%_u[*r[uꌛM߿ר;9ss'E7{|g>l}߻A~mߵln?{?vҪonF9#h <O3$;<첞ѷF{ֈɷgNt]mI:PWFߛoΦRI]I#BUU1oU:a^k_I_]}eO_sޅ%愊0 6o4I|v??T0 ;P}s{gsJOMqVS/dfB@ 6!=A?{NfՋ>|=gS׭qq޿u_cD},sҴWSr:+}?Q 6[>zPoxWA C#p1H-R?|o]?ỢRQ@gG >oƲ;0wryyLceHʶI;lmmmms>]}De&Jj| c[B릿̐ 18_tBQ.{kCmS$Zޤeg\bn8 |qJ>~OxB '3߉5d|?:YU2C||wKۮ1A+o1bۙX~skm۾%RJWIzUBY|"̿7u嶫kk2FG;Wgɭ/uonvozylwNwVQoFPW=r~n}8q,_q- y+'PڊzW:)Qy/^ʍ)oWo}i&nes4\Z2/9<TyV0FTwx1m}۳8Z ݞL$*&YPzxZ#MI~{<[XXi ٻgdN^gU*tDw.O:6We.~oo.CdA<p9!qMW<i{u}Jɼn}ܕ~5~g =Ʈ%GɝǟCqwM5Rӷ}?Qqe;E4~Rz?,yl1l*F@~\[fuki2 RpW>~c7_v/'~{ղo-ߖ\ܿ>٩:y;y^&5celd$[& -:.|u`1Om7g:JM]Eht6MI۩2ԯuzT>2d "^vJQ/']{-;K/~.Z5G$f>{|U ˏde{gmw  8{vw3ľ%6RpϻJ͆GH~d)cB*ionWgI'~FmZjzܣ.wM1']/:ngw^o#w<0|}k9sC~"G M2m[u)ǵ2Co׳Md͸g?{> ݿ:O+ݻh_1] I܇/ϯg\Tpyx˻z4Q_w_1cGsnp?zM6M8z$]1Wv瑷|ߏsR1W7~}R5rH rj=;t[{/r>lڧ(O d_]%N0A4K#g%k~mpy\?^ 1u"߁(,`q}ɻvޔnQ\1p_֎yySi_#؅gۻj 8d~_̓nx# GO4TV5]HXH['u-7pN3J:n < pG /龀x^9=q,v_Ʈ\/ק"H2A2۷v<$뾖k1RRo7>Q)I%I;_ʕFkzwي'-o{R珯ə2XMR1ʱjMO+ugu* b*r BOE3OzYhi(ssZר/m$~<<{O/~(c(.T!+|nhc6?Xs3cqڿZo[ȗ> c$㎟~+7$SXG<_eyo~oɭ~j'}nW}NTlݍd^Nx ?n-Z{{Km4e)[6q_~ⴝڋYXH`8/(/ƷvB'R9'twW$dzv&׷Oq˖]aEKQPǑ\)4*Ḍ7oqFrG:f^DU?t@|{Z$_fqKo1\w}̀8 % ??9Esc7@$ vYyϧ֩J6IO>gh[[ooTb ?7ۭL}?|SZRqVr }߯´I)|W?0hXRo͑?}j=SI߳ɚp/5I\%SrmaKn89䏯=iG~9'e>PŰ#z~oDz~zo>[FUo:nvuZ^-ok^PU]ܶ7g?wZRvu_w$q%I]xZRq[ޠڽ2[o<=׊Q L$;4gd){5i~P.1d_i}OcۿE?#rpLqTxhVw4# }z~ywܛn⫀CvE-usH ,~2w/zVImܪt}+7n$g;p>e۽֦W*->G6#?7&^WsҌܵ?ms'rs|vJ4_s*f~o1W mrno? Dַ)%x?~J|U3%*ͽzq8[O++ 6,{_]|ܭܿCSRm|~ʪ1;v;~^Mfkfj曻{!Ttǰ{҂qzКo۩Ѕ\Q$9PN/_n*Fi-I%3OH7R6Zqq_$mn<@0`a99W?n&tɥ߯2H*UB>?/=XJȊMi?BqKC+qw?SWmj*_2 lb6~nR_/sO (ҹo~騽u%7yu)RfGo=Ί2n06HpHgo?֕}LIo~m/9L*R-r@%‚rq^ңvOhsGMN`!$60?ڏi}gN.[_o{#H$(lnPN1\}]4g6&W|VUB&?X _«_^{yPB]'A#8֦5*=ﯞx A@듷zD^TݓT/0< nڳWo}ʊsWV^ew\8;>\~f!%O^FV'n,UWr йY7mSVoׯG` Xr1<<FN{ߏ}Ǫ\@ǷNϩЪ=ZYS+_/Ĺl!-geqUdeg#Z~ñdT w{<ӗ,^f1+#~blY?1stzjɵ}u.3rdLϹ?&۾ͺVԫ6 9A1Ϫ~_+jG PJғq.i߶#ZIE%~vnӨVm V%+5ke)۝ݿRp1q?¿zJ{. ;7rp1ʤW"#0oD}ut箶oԊFp@ʣt%$4Qnn-u˼ h-z[~vkmRpJu]νU/͟Ƙzh\*b$j=4k߹*smvN~]l[MXۆ{ji՟hFom>UB QjpǾ {!XpW~L咳}`̒J5Qۧ_?3y_eo_wK[TRq8 _x26jSR{QlМ?֭hre̯0X7Ҝ't".[ѭg*z삹ݏI*/}jێ;q~)-X&ᝀ9Ԧ$`ٓ3Ig2)RoW^Vp=GNYsOdwrZTNy?zەZ{ҝ+2Upy̿ڱ:]D߯^؅NO*|)8Z2&@( V]qIſng_?' Ï7Zj6Mh+u:v^2\1=xeS-JW_Yv2"l럽 q߿FNivkL!U+܊[vݻ[k9^tN>~UNnyoYsNmh8C|No?ⴋV }~`9:AF=iIk?ep1fP1wy^μ_"~U9^Ʋ:W+[m}4o'FюHcΚ}Ēb[-גĞX'9o4\@98xov9;Uf8$wކjk?=qFǩ[?>WO[g^jm!nv |@_u(M~7p( ,gigRq_ 捕Ts7RO5h_ӯoAwcio=2jfB-RH`v=G5[۞׼~H/ vk/#Ӌ~*0%;YߩkoZ׌,+3J ]=[Vzy%v$m$*?rwV;}}_EW#~oz~up2n󒴧龾v+_֭8fwJSv _qvOKkNOxNX}>8Z8ݹf^:kW;=~-1;{vU]^~SnouJ0'g/a+WzA]WvB,R󻏼/9^$v7ۖ)%<>WD6_Vy9VϛuRqB #Kꎸ6O?{# ;y+?'Spwom=:um*Fz7n7>^?8Wt2G><4y8%>Vo=9"G1@QsJ'|Oֽ_孢_Ϩs0=K|E^]pݼ iܜukDM9&쵿uR~5ӽm57u{ RF[q3.oqQWNU`,.rw}_G2U|nRp#),08c9ٽF-_b)zW"3X`w}n_^:VnaF6z&\q1sXk'ݳң}oW[l'mm()O+ B6X ?ѫ}ɗB>uǯ]2H|9?{gknUqs^/&C4g#?9c9+N\o$ nFFx g9R 2?.r?`VLIyyv_mii._:%u%~koYeNx9ۏiۻSu_Jt-K`D oGYfi/E:N]:$g+?[KwI]>1Hu/Ֆo h/1I\)_0tg?yP6ps>ӔϩMAon"qݴroƦ~zy cw<~pZ_ssu5_n"۳/̤|j_ܚu7{̨mܕ<\mn͜?_2F8 @ʁ:J_gmB6?x[ۥhw CIE2 NG@u*|hY?~dj$; }ҿ~Ir=:?;uk*\`mn~>E_q,0~Wī?ČVߩ/ӮBm )-!*ۏ77[ɡr[{z gprsʞvoϥ\b_ye'.y]G0ݍyvwe^$oT9=e9$ՑTf㤟 `*OQ'"KE{hvaN N~Rߟ?NW%~k0&.HC9]I܏nBK?/s;[PRiM[ /r~=jOsb#o! [iTse{SJM7%t2TmoݸJ^3ss+oFn^?`۹?_á{vܾHWre˾I[⬗s{ r?$GϿ!$|s'=~5o L~''[cU6}7wʑ0G Z~{__$Xdg%'.[.ki0N׿}_nLCX8y }qOtuJm%[ߣ߿bgܬӑ?mȩi~c!@랄/j}Dq aP;N_h34[űݘI[qMu~:mϿɮcw{4[ʛ~z%sli /Д))9ByuvvΘi^o𾣀b(?{zw׵isE)J7!)\RrNXZi3eBV]믗-t,XّRoޞ}"vI9^y;_M(NIڪ=vMTmcR;*8x-}Uv 7g^{ѩͿR6D}2v_|f>Vuz$r;G)>S}i}~gM&#BݯQxk=MTy4mջ߰2#tRsGwOۜw|ۯKNkoHguu?YqQXt"m?P*M/8!nr;7>0-QTҕUљҒRђ:FAF?:K:p۸;֗i|?v߅Ɯ_˯1Ķ2>VwM7hEV <?s\'(rNۿ̗p +I]ҧ_v[[FV__o6nŽ_v*[mݑqdIVS<|4+yAK/_#|=q`W'<̘o]_ޮN@f+^k^&z%wno᜚ vynX&3)`N쓕%o9i'ת9s{DƱldd{F*<;ߡ E0^ðt5w~Q[׸AAQܣ7W+zKի>u ?=k=e_7o-?̍l1q}|=eLΤ%%77F=fxk&˿Ț-3'?ùϥ\%w[|]3 0 չ78b}m}}ԓ*p먊gkvt)I?mue\soh_qJ=_aȋ X`lmYMo5#)+i6BpyÞptN~o~m*0t([Vק0ps;;~2^+NwWۧK5DW_֜4ONLZRR0Pƪ>x-k?#: ۋ$9~o߯|ӳ{&֝F9bF_&~~}ڨ}{]싕~m~Vկk_~k'$v^,,OWp}~f/y_{[q-σ4J_%S?A =ߗ\_o_V2yR~]h{d1?|7^ݬgn]#)pwmSm|]-_oriԚwn ˝+qpkv_ǤZAF`#{nMF/z|rYq w}F ~nҨGDp<:_?itO5/~ИbF9S̠z߹iJ[oO9\m߽@k UBQ]Rv4{~?>o_(6>sn)r}>޷ _7q޿0og$]{֏Ϫi~~DYv#;Xm?)&4?^(0eb6~n;+?'sjJLXd/B"ݾm9ku߿`p0T1,F7nܻ-/4xu򾿗;'duqݿrUXDȒ10]oɭ'iv-* Ivxm:Ijozo$66#]tZ6լ niwɻP+a[ϵ-ޟJ YumƤTտ?Ӱѕ`N8^WܫeESK= 6SGL2{4F 7}wmv̿;TW-7o湟[[Tq'~O\95ku5il h ۭL~!F?n1QC~y=qVm_ѨrLb ;qg$ZEM*啣y'29=j{_qK7%t=1aFF@{?_LuucKpAwOMf;{6[{oMةId1Ta. 8Wo˿RI_Be׿q_k< Y$.Ii!hdgs?9ٜ_R\a\@;?O(Kjm*?1: 6CwIɶg*{ݽ[ie6s}7445>Qs'ߗҔ5wߍNkb| O\[wZNiMi˕ g$;w6;KSko7QN'$Ŀ瞢eJzG8lApzww7}WH݆1 }z'W]KqZ [i,3cJT_ dtgPt }*ܞAy=9jV߿oᱏ FA{ѿh*y=e׫z4(`#x9?hVm.Y6PW|ۛ5n nZcc$ }T櫝FVvIM_/qXg|{NKywV?{ eXۛjm;CM=Bk~1Pm<-?kf얿Ց`3gȫJRWrtI!%`T% ݳjwZ_co>ڏmI\ `ք|zH餯U恀Xc#}[-)Өq_9NA1דMzKuHZUKyɏq#w9A\$,H1CW;{~UH7ϯ12Oc tDOEw3MD^G\&wgS~ӯ miw}ONJ wӷ{y3gny,y?~}ړ[3zZY[WXPN \.s瞔j/+J@kX˛שK?<8Ύ_K6X.RS=~/ZԬK~Co0n? tk0Nvg;IWӧ\%/ϛI%sj%+=/Ve=bmPT䐿SRٗ\ԧRa o\Tu&W_.vOv=ǭ[~3 V}!'?.Cw}?>;7kGlA8-[vBii{݄i/_܊HpAq/̻M{C6oX#l`\Gwƥ۳!*p =?_ʚW}|KYɤ/x|qV=͂ێR\}a2{~$lrǗ# >VC-:tܟO[ C' q[р8{gJ)+;=~}Y2#$GuqW+hˍe07(;I[պmSnIET\'9 Do.7w| /޳Rkg Qn:$eA*VV|_zV-~+ދݰOSx꥗*yZҧv1ρ#v~n);~ !w8l/w5_c TEq@ʓp=ƀ E~H2ajkwD3RIVH9l7_sK^]5+]K%|cT9sioQOVx|.kH1_fW!mu/=e*o*X7#ުB?}W'#qd-NjҷV5'Su}0e%Sh\㎙\du{6oR}q}h4Mwߩ7υ c,wt彾e5׷3YTq뭭W8;B۰ŏ޵J/sV|^y4q6Yz}vYͭ5:ETkyX*9>n['5$}mu뾧=E$R4pI`l.i˗(od#@fQwc]#ѝt ͝sRV̹mO_K~1EO_~Ǖ. pI9Wٿ.ԍ8=͟*Te]Bwc#s>u~ctdm8rۿjɩN w{AB3ۿ~amj+tu2(8'mc~o^ڒJ5>mXobrP?#g{6{z^_fHdQ??kxz_Bdn^]%*B)R>l>RkwmF˷<㜁aO #k߰BKmoΓM?DV_X ;sۯsMEf2~]zl}stZev5*Mic._p}zR1;v}x*n+X'i]w_ǯu=Ok)ZMSu^!//Ɍ16ݿi%oՓZ]@ kn1rμ[H##h37<}gRt¥^n ӾqM5PoZVqrw̹<J]o)<לd{={M6;+dۂ= %]=*ܜ;n;H9k={暷Woʳi^h5r#=J6W_; 9o{&1$t^3:\jwv}uK~c\Fߘ9g0+j[cg0_?cD/֟ȸ֩%~u7w 1O}?1_պToam˖Sާ:*=/K|qn+b2bE_0򴛵]M#MIvv+ 3BgR|Nh;avnnKoqSw۲[9,Ê"}M"+ 9þ޿zm󴗞9^.Zza,8]އoBY?_W1,BV c{;Rgy_MӺ4}#~`ă6 ~^FiujWsdI@e_OsDc~?e8Y^9tsu]޴JqvzRfB1F+yǙ{kOOR6(V+PYft?Z߷NJ./{A1ߧ_QŁ#|;˯`-}zv.suk2*\nߞ~r0O䌎wnORQwUkɊ~T$7U|>SuoiyEP3et_ʺSInݿ]99_ݽD NFuGw|6^6U+JỺ,s=<=:Re.?]7m\(N6oUZIi7_0H~\Y4$G r[/U$2G#O|&߾נV:;y=޿7kGg%I^c"CI_wG,{}g;]>J ϯi&ޭ%UHrpOW!eaͷ*1y&84U NId&9_M͡NMޟ.FP22Nx%?޿G+jM=N[_zP<Go֧Jmk͌Y` r5k}cY;>Wb8y&N5s~fxwMJv#}7'qnuԮ% EbHa>Z4jrs=t^gx m$L}(t}r^ƠqnAЌ~vZ7"bۋVNA?sɷ_J{wSmf}{]E3J u}y{Q5etmklY{qDb;+RvzB` ASZZ>Ϫzܥ]N>!|ob6֮koN{V\Z}De؀vg$^-:meWa 7#~ӂ7wk|O]|$lbUx#,Ojߟ{NnWS7yb.wH!F0?>OZ˲ZF{>cw%wzT'oFXh;KOͷ2aIL@`qbkgMrWǧ#4s9N.O_J WE,[+5%wsU_yCvqsjT[_~H^ 9G]J)n-aMTwaT;5__:}}\O|qⰔ[=f=wuJ~?Mj׭2Gkn~Rk 涣=G] W\?ƒm= *^s7  ls{M]/ɔ)j܉Sg۹Gjz}Zў}׿OAV+ZQOMuITk~#Q\9!7m[oR߯ϠywCs_z73uN-Ko+ϨR ׿?/kw5QwIߧ,<9%~o~>֔uSSMwD6[':So_OAlH:ۻk>mݍISV}|Ic:rrv.kNђJN첷nz}}f:s+uÌxEUb9 osk>Mo.tNc6.Jn9`Ƣnw{~HjTc}orUPT<A?1{iEMn={Lk%GnzU]oG|tYFǩ=9syk6d1g9t?}j/6->R d~nAނc wݷ]s 30+ߕ[[;y")Ã'>r~ ݿ<– ާnvl޽Zѧ6Snv_>Idwsmj{mwf>NM?d$gj&G1~_+F &{qAXhl7 }: aE5~ow'89Pp>_aκtD0-cO~wWcR  JB9-NvәQbHG:lsrn9~?ş_ʦ˱J/4Eʍ y(TZwǹ5 2[;[\O;~%_L)0zo,Vqr5T,x9 rw1~jF i~u~+ :΂)rOw؋bw1pw}yLjB-߯^]zJWws{z~o_Z%1_13XFrNI?M)[_twQ-HFI =󦢖40D9 鑞4{hHW__-> 0p[f.{ggM?{]I$Ğ?>Vq{z28K}ѨeG <ݷsƔ\kW?1f۽W|mob*W{?K Bwfm(濭ʥ:Wz2lk[+ȜO+=~xRB@MrOAZ_ߧN/[z2X[ :eHῇN ?5̫F6K^z:3CLc_N)TM>U.ԪU_߉*Rێ2m*3?*~&UKC,ff_*Օ}vW1u#^Asb߮ʔew'nuڪ@'}wmv]ZɫYzC!RU~We ԓJ<0S;__˚I&W/.:mc\n wfunI+Zo&%v cwމ& lϯ\A5$OU֦ϳqSoWAܪsf[|_3eR3קR8.?wک-Zu׸\%,Cz>ndosu0HR~^}yg wB6wߩ"uB>kaڤn1G1Rpz~oWDHTWFYc)5w_ >n[;f)OZ]<*gkO_tOfw[*PywNk3i6bKd08~<A`ޗ]@qw+7s?rHZfۻT$|77?[Nޣ@O]Oֲr~EUq;OȅyaK(~P>oez.t~vo-z#D{TbOo ރogk?[mP'$lAQn_RSM'r}UPbn ss֜G /H9lÏ?_zI>mmjTe\]_w99G׮s(\.>ltZNWQZ~%@V DcxC~~[`{2dN1 I[~ob77[?.A*?0? g]:D}˸l*3>Qw>Wc;znۛ9 >f?U8go]nkN֟5Q ^9ʠiwvScvq<9Vwϸ;n! d(c*ԭ}I\v{_֤Dh9dy#9y_:jARlWܬ2Hbr:zz%ecU_Lc f WtQIj?븢+ ٷqnWe#I=]á%H3/˷K]ͩQIi G'RiFU]}ʘPrYzzMɽȬӷuۦ_x 8$w H-цܜMi<K|PK#^73niQO i-A37v1N{k(PT1quw(;mlzq$qcqqz_wa旽ݓi e6Zͫ^J#}PmŎǡK=Zw\z3<窯?tݓgBꞿsx0-˜;7uV:ŭ?NyWHğR{m֮~vj MiP6guoֈ}]"oݿ${vv_ٿͯ͌nߏZFV[JnO_ԑU~??:ci].Ɛ7^X_I4KG_0e߀둍Ğ J6mݻ_1ovr}յgc8Vv q{ܞA.㵿HF.wWW/#f37έ>]0w6ܺԵo#xsW7ִv;WVo)xCa8w[?ImoM}w7Y0=WgZo0~J±ڹnt7mXAI;[TB S/˵JJI ؘ9_xޒSOW?QOcp,r^wߡ֔$~o|8'vye)4tOVe6'ɹ޿ZZV[S&[oN랿{%Vߨ@P -"F痑F/Y6{WnI0{4.kiQRDɹuV]ץT:S\є^~{ !J,o>7+5un2XOv.9,@[_%T[ nyN-;_2"ԍdBfN=z5^_t}_w-?5U:|AO[WlR Xؑjk5vlAld?޽OhK_ 99.]ITdąGYx_XY8;Wn+}'r>@lG_j8mNj[1%l~ ޶vW{2~v[^o_+DCdzp2Q)~tV~ן"m~_~4cUc(2+IS¹;W:PsUӺV\p1~{k KGS?Bt ܶgDz4db2mIn:|y-f˷^/{~mʜe&Gp8Y]?ߞvn~nrG,Sqn=<$Xw/U(ۮxiwE !UI>=dh?30 wsmo·t:[Jc1?2 }҆5}E4',yhnڲ= CVnPnm8_ݯ;_}̈p@ewׯѸ8f_ۙ)#i1|>ohP\_鿡.NlR6~:͔n_p)`v[w2O}~^WT(u>.bf^7tOsPD6U K9N:_k~2得$`-3{>[6\e}_1ȿ4qF0Hϡr3*1:s띻_G(ٹFZʨ(mzt#^5Zn M֣dFߴ+8ۀ3nK(J=[Kn|}I0by$|T$ưNtu}/>\lj~'Ymߧ_r =gӟƴ]:u%'g Oݲn1wjۚݴ~75b׿̑`,J#9o3} OHd[/qo?Ϋ[ϰb?;?]ح չǷsG:{t򔕚œ`HfgN1NG:Ҝtyww</{WC)9oN1V.?;R`i~!<$gg4i~ z`wiOzX#uLH  zJdOE^f 9}ݪ~g$=65۝)q{UT| 8A2Lq}T usV{ÝAy׾}N9#}:w݊Tế TߜA;߶[KEsFGacWnwe[ת"e˩$p:9}ɨFv{4vmS'(r'q|N? lW+߾w}  G"d{{zԄ]5r2.OMrZ(9jh$[,ܹo*]u )ȊI'x}zVjzݮ[n޿{u? &ݻu~IB3ݜc9K|5{3|O;sM$wFS\oQdPr1͞j{m(MGu~3nXlߛ&6U Y_FACTm %$|Tz.ԉUF/˜nSE]Ofu'̖UIN vcogkZvHAxuv6uW-J޺k,{X"~_wϻ/g2>;vJ|}J徛e}z2)! u?|/z6?S*ğ߫FHBnp?F%Vp{y{yj˝ܓLOZJ?r)z/caqhrJS?Eiq79RpNH?xoZ]I>/T$?/[} }{RjV7S[_?s3H𜍠n{̴~?ሔ]}};*Y![}zֿ o6Ī=<|. ~#䬔)]w);>ܬnN]V_>䩣ӿ{m䑞=k)JϡN\bv픳ѾV۟ڈ_M4j7yT˒ v$޿3MlnH8 N?k$uDE̍1}ҭ)ֵܓ=Nx]JRd.KoI ??McV*1]㪕iG;oG ;Nr3͟J|HENutM"A` aAOxNڳIOqg8/kv_''hJ qnzvׯR¢$ SoJ_:zRmc|\}#spL=,M=/ĵ/QV6_NnZ0n ɸ)ϡ]{n~N}JXy7~DbowaӍ8f5#}߯[1T++6`~Zo4N߾<'y'+A?FNRo}ʧSOK]oVva?7~Mf⛿OVvw|#qyqNU,{%{_̄=vn?/?[R1%0$@Vɩ0RV(qFo*WjJ\׷V;F~Q=RHVVky$G6fI~_]75ukUs8֫ˡ\+?Rwmö nq 6gՆvGX Hn8sitzTh?Fa1ͨm9y*Ro[ 9)щ֭{k먥GRFN{4 3^}ߧ/ Iܑ}JM] }+m܄U;I-={&IRקW|@ w>P0Hb>t?Y+;so)e oj9f~eZѷ%;W%ϑ۝~Zw%tܤ0eQ8;O^nnS>͙U;x]#-Ҝ߽~o?u{c#TRIg`Cu y۵yKW]/ 3z%ĨJv+k32؂D! loRk Z.|qܤ79g9zj.Iڸksy_A 1]ʫt:q;]_n XrÅZ%.oI $űDG*tyec  iF\Ƶ`r{yy#Ö/9O>Ro[~*@݃8#om>Vbߝvyg~J r TF[ד|vww20򲟗wN1X~])To˸\ 6_v߶(_-0r3~]*i-$@]Ou,o_mdw"}bYN/w߿F%M%e!氓b'svZqMo 0朜O@pXaӠ_Թߧߩ/I^W_LoAӟb%ҕkOV1A nOoAm]*[,Xnc֩4rm6[.Rrq~8wmR-nG8}?IӔ^?;=B~ p3TzԘpvw2-9[{UGv%%>H쭯]l1UBŝ;{{o#g?rO}_'?#9Sb[s}LaMY7鮯DLwG3iSQ'v??%m~^~*|[1r~n ~ktMJo$}G\I=ٴoM{й:gړo>u{č; -Hog`yQo䉻' ϯYۻ)Tu.oȁP2?wʭ<~ {ܥx[_]EEW!^?&JϾyҔ߯U<.01[{%Sqvnra'$\O[ֲqnuvKK `1嶂k1?5QrTKEmKVwd/ v%9)Zv`>m=o~"_IͽU]6s+"Hl 7::+TbNUrƴ]!xBS6ߗ9~4JVPm//vOK }~ WFʄmM" <3DޖXt^ӯ'ϵHbp^; Km/ VKL<qYԂ/-[ӫQo_rcb_wNvtӯJ3pzo~Fg'iԩ.r2wŷ}KG IW~_9S BO-B/k +?.ԟ[?%X3`+7~y=7UFi+;V'vcUW%NcqOt(Ғw{bJF0,q]~m=Oޝ6KoKu{}"L*e-vanޘדXOI=>iF)+ݑ `@b ych/wrv{?2r[#JM$c*JaHzJnmʠw&=| ̓ޔԢo_vs2i瑩$%`{YIo.K#)7EN(\;~\ 0948]z̸Ռ'{aO`o!Yj-9u7qgT_]-Le߅f䑑6}.ɻm׾8JS/|cvݏy~?bܬ|O-y.~m5.N[;r /\#UC3m;,sٗ6ȡIko:ib'{/;XH;\պoҊM^~=48 X!x wj|ɦoԎ0B@߸_ njW5>w35'd7eo),>mƸ^w"$9 ޛO}*eƴ-6Nys_n?Kmk}<Ӕ~6zcb|d/=?y{';ݗ ɜ.~}_~Jk3I1lp'7nܿcM>ov_s( GL7cI%A(vjwjo]\nP~1_o忥Y? ]BHy6o)6uhk_n䋴 qsLmv:Oeeۭ|/~Uۃ3_r-΅[z{pA;[+]J}k{hC)o l+8}ki-݇2 dpO>=ggoĨxmu() c=N9^$ kz}J~2q.$[Ycc};6*'&nFK.jN06H jBbVϯArkd>nͷUW-_O^.P~*y~zjδc߂Ӹ2??'wq(V,=W{[ebpe?.Iߔ\yi*ݗ/I>fNn[k+A~uFv~'!ʧ8C*u}]}q@'p`V^F쏿mfkQr:8ӊ޻]'([~AaW59rio=4J*Fys[+VLwp[ڡHq2sYI7gO:%N2w`Y@+Oi>Ve 0Roﵴe/}But07ι|[p-t#{}k+F^= Si_ÿ^Bl6ohw%W®7aX[/~n>yV}ȭ1-Sp@8IFT귯VKEQaOɵʉ[?Cwre'&Du^/f; }|%o)J5_) ;U$[0h#m͐~ohmo!]0U#o$v4ҳnϻ3.?"F ?_Pݵgm-m!UfO,O{ӝ[b8tC,qb]*[]mN/WnQJb 8,ɲT;^s%6?nߦ0b pI9{_J;XQQ{[yYlE/ǟzM(9=Wh;y;b<A+MsR{vM|r ,쟹sn;$wUK/jwʼnUn?ƪȍ'7+ۧrp@=08?.k^d2I}7~߭Tc}vgSK?C0M `s?ʓVm |Ż_+rRCOLd{ZDզO/э NN չs=쿭SҔzi|Jo`_ޛV_"{t~s;?>zkGNNGIvIevrzd?Z9'pY7U-=?+d Zu79 p Q']a<9]}~]{mbʱfn0T/ӷz+>RRۿ5”m~_)t~7ܺҋת#Hf%w[{[_yJ*Zk羚F,BzW4muۯvUY?[[]&033c;_֍ol73w{kwOD/%0GcޢR^7|Z.-7k[W}n;$|6oE?J\U9׳Ɂ ?/C_]3Nz;`}v069o|j,~:NgeO8`:㻾_ ~6_6*wum6ץe{DS_rXӸ`H=Fp ~jqmݾfwO_ϧTq~r)KW~EEPH#OL=T^.1m,wݗm$_Ei~߫cxAalYRm\` ӸeE4<k!/[׏jyNr_w_v ٳ#?~Y^NSZw_7$,Ďߘ{m$'fnF.w?|۷z[vWNNTs>?7?3[O OyPկ]|\xnBݻC_~->N'p @]jZy`C+.2n>洣d_-ԓotV$U!}p;FU9oϾݶ6/gyJXabc;m/JrJU9;onTf, 8Rhf8wOcEz#8p |䜺ݽN5DwuG.ym{k_kJr|g$q`>nֵ.U}WaU>"+̅VwXeq|RmsT)_qmccpfRF=kC)V S6i-o"YMק|dnn֩nۻ}ξ[F~B!(v;s_ϢqROuo? ?soOhVrMY\ACKjOOO^4Z2\ӗ`d+dnwgo4,zoߙ!)=zuO7^x;Tyi^)o$b6!6č>R\i{﹅(nOӹ(B>LN;qְM~|kۿ<~U=wvinJr__ЁH<g8*6*h꼼ǪTʷ$wyݶBsNNׯIWv H`:AsWz<[XgjЌ.yڵO0\_Ƶa8QHͷg+a_קw0 o;SIф~׸) fڧ˭e)9`8@'޽۽RK~^<sGX~ysI=_m\V0 ;}2g3X_0+ A ~?O4SMYh|,l`xbg<7?~lnߏc t+{M˿oEy iK|J?ԍE?7)k-T_-m+ucJkm[Γ(_*2r~EGZQ}m֐IKG}7?M}3QsWJv& b@>` 3k")A {N'grakz"ڧn3Kt[/_^j=cwb$|Nڥm4a~INY:}ޗĹ|z؍C@ ׵keo{[uΡ̹N@ yc}:ҍoM۩eܤ7',?}iAr;2/hUV$S1w[ɵfqʛo{>BdGL_oWNt}=ߚJ+s'gi 㧧c*Y[s`_#}oғox?Q"|0C`۷?ɥ}wٍUwxz 6v U:]}/3jQq^~Y?'rn!ꅙÐT#k5i?wQy,#9v=:m|Q_~|3--~d)Mz! >0s@5*z_֢4G gw/JT(2WjOxpiQ5Yko>}Ӟ/sZ}cc~M/^RվP  #n_ʈɻoZ~;n@9#w9Rӯ]r:䬡CN#?`M%KFK^>lխӪ^-݆9 \\E$ kWu+9t/SM]J+߾J9ħt?ZJǟ/v bۜޠ۞6kLǵFA 9 }If۾קt+]Wp=.Mk3?O'E) F[{ʽg='tWH,ːmN_R}{Fk-{D_eq7"i(}_ר#2Fxm;4gRQkWkj 䑴'a>]?ޫu;/I7OF^@,wq?Ǵ9suO1Qjcc1 Αrt窍v܋kǮߔ` |gWF=9Vf.w%={ <Pki%_˯a|O [gx5M9;[i璔;_wk(BKa >_o3Cլ JW<͌/{T8ntkm:o}=7gIk~$ԭuޏ8T%_u[jmL7:{jovFz/NQ_3[k7nULKMz}ʔi]r'ӪJKW߯O_,$6s8)Z˪w29m=^ddgy#}~nkwk=Wɛmzo7jJbGqdۿ̔z>EeX+snWQ&ky Jz64+ sqi_Wv$gv[ozTFN/O$WWBr1?YI6mzmRhϑZWƦr٤=ȭ`NcA$]9PzmQ֋ve*Rq{UY~G=?m;稠S+v2]Վs2n38Te >cf+T%\zݟ[Ao{_hjw1*;-9rr I-?Ln`Uonn>UA(uz{یs>kdSwg4"%?_Eѓ*$8^q`a;}#dۓe=4 $ofſq_r)9۷YЙM%Fʔ\br?/ ɾgctez)'7#Q}[+~}߱RwwYssMOM;.|C`98?7܊'oEP? z4Gy"^ŋ< /˲쎈rK-C?~=i=V TWmlV3?_ZҚw}[jbm/[#,Y.I_?RoI>ݻ>ȡpWrzZ6I>,dezmG?Z5o_^C_b0+Am{iwbE~vJk.ӝFckIEjrj߯QI2jeeF[;_ҡŭq޽_2)" wWF~nqym1qVv㤏hʁG mCY7w{X$QVk#c,>VNQ嶷RR}r (Rˆb7=8Yq:5j?$_-N@'%]^nof/O氋nߩ&T+DVuiO i;w~mu.揺Oc#R7* iPy_u?­ɵx_7+rN6]|ʏ|_I-wm;7~wLH/RN6wZ(˪_}#a?ݥu}2z+` szTKe{HgydSg܆1W=g2j} 7aʜt?։zk^7;T+qˁ3{?)sߖ:I^̮#PqjmrB*mn"FK`߼?*w_ƫr=:Sҧkz91|nͷQ{?W~*S7%c0T'8]''/̊X~2Wi7|Uy[W9,wG0sdztY4䕿Y[|ۉ޴籴U-rSe#sUk5OߋsTBO=>_?q*Oj7QҿO#F0?spQZ=_\1V!x?y)Aյ7z|[766 [xk5mi(;ך Y3_\R%K$+H%=zk"SIo{} co$q8mEWHSʚ!訄n-#W]w|/z6ݺ?~L `:co[{Ҕ{/St۵ՏKuf,Qw㿭Jzs ?ZyuC^;`o$w/z|:} 8 nOu_ݎSڹik{!J!R~3?zJ{z|W,J~mmIu_we~n9U*㜱ۛz>M:~=ǚuBٟn@gy~}Oiv^M%9#o#?f.M)*۷*qҶ"o~zʣO_K%:?}'}S8=վoU'GMԉ$+y__ hϘNs5JPk\N-ſKyC۾^{qQv_~v9F_~vU.J^^̰9ڠc9w')'_Қn_R0`vs֏h%U?G )Q {ӞiOW/ęBF oZo]vԴ_Vy_ʤNc?v6tpdNy-p@xݏUNL 6LS.CoҰ3R}# q*]M9#]޿JnOG_\֊Iy^[޷/in2۹<Zi^*2O鯿,{T.@>;\fz]OFM4G-qMLen9R~Flff37-۵is_MiFoq%PHf21J';v??iovWr;z/"a| 9ۻy߹:Nr_m%)dzֳuD7tSzk%wm۹Z$ޗO)wi?$]̸'o?\Ҝ\5Ljn8-ï댯~P9N2z[ؓ]7zSKm~w+^\[VPې{S\r+ݷ^K\dp'$|h{7.#TAݹ5g}o꜡k5]t+!ld=gmc~8%$3l`~_y5]N^q^?! d<1gkVInb4fuBUFQŒnO=YIjU9ϿNPKp\?aY~psMy~r6W*pI_jҍ-N'*w=̄Q\{Zszku~֦ћpHPT$k*O8/qz}=^͹~+$YO)[60ynu)9G]>~OSSK+WoNy/^?bbXzm/BHߟB܊ҷ/צ{=)w2ZqQTt x^)[՚Қn$ ?oƳľ64գ5߸E,1ZϚK{wNZbr_pK,8'TC RwսA0A~_R_[hւA7?[/^I)jt֋ BG}8mڝ.[yawT.6浽cP_6$|YYW+SU62@2I`I<ҳ7ItGnv4wA*/T?+1 6.zRf޺:HXw(={߯ͪ)5zg9g^5}+ܹ~{u_ d d$!q:zE.glyop~_rw۽~#m~.hQ-,ϯJٵ/:9NG{=?wk&ݚBu1<6{ޑ~Vje$`7׿?Z'?r_^׹ H?)Mih_Vq9#omo2dvᵲ=vWCj=QMo_?O"`sOunOo՛)*nw|f2| rOeRjRn}˲!܀ +ҷ^ktێe`<ђv?dƠ~"Ts#ߟႀ=W?:;+[2t2@l,'?w/։5t\oo̍Ƿ_Wv0Q_>e@>VvoTtWi7f8N(}_L}Ww+vr<1pNGRr1iZ񿕯$cO=6֫_Tږ}$䞽/}4OF_DT>O@~asm"_ǒW}|Ӽn$q{*U~쮫['-xt_^oyqQ^~hK@ݖn'_:$f=[~ƅu%r͒Oy Oit}z<=V.I_UoQD&0O,XG\uAY^Rvqbϸ/q T uril2EUZ{d^X]$=~ioi=^pݐ=쾆rKvbԿXy<Fq>2i}1bD,ç'h}Fӿ{.z ?4{"▻W4V1 \X/~םO{^r2E2]u/]%c >` ZӚ/ߧ8|;|j1Q$(OnwY_7G?kizXd_6Yw(RqwO`謹nl\zҫy~$Uv:8Kst?S)s[Mp]}6Pqk孎jxR19;W}H֗+Z/^݈;p{}[߿Q3@v;Nݹ_Y[/~ӤMF#>H8qZdٚ־]iVQu^fWF6{;yrl À6sZEhwHa'd =ZQ仞~"HǯvzEq6>k9Jڥ?3 oy}#pU[v3?UQ>{aZs5i@r>^wkK3/ns&rG-ߗꧽK;#ȕQ(x#}ޜiTRZKc09$p~RIlc*JQaԷ~o};ftw{&{~DzA<PuIǭXG,WG?]QAvyxwOmi5}~u$~dlnmQ׿sҔ+啍Y9 g?a'$ӧ3ѧmoWFHM[}ǵi'&qʤc&~wkD ݐ?<Z[oI6X68"~ֶSIl_o[F9[h9%s Ԩm?!J1dgK]n+8{ϯ7/3_i9E1q$qñNzq.+g6֪6DhrݿBn9?6>7͟i΅R]ԅe$; p;uU3zR})uOV8=_%zOvԵLV*]ԩ cd_ޢ OoOr7F~S0[\ZWׯc\ԬׯqcXM=oKJG82Gwt=eS1#վy>I `$c<|_C SJs>aowև e}P`A ¿?玴FZ/701A}~ Hm-`uBdۧLehy=Fcvx?/+?'s>IvW }_OҵT_JIOV:]a:j G$l}$d_?coVo+;Wk>I!:wքomT}~vW#@՝W{'> %w!0;m~Z2澛ȥH$n6wu~uԢ}=-YTc۞wi;F6۲׽)?sc.G}k}FrWƔen9m4%{ny-1UV5%߷_ FK   gǵYԛZtceTp '-k>m~ *zB?!iy/?BPq^ ]J޹wk&o?]BGP, #}~޵5WzP)F>f7V/_ӭ?;`(s_ b)0$,2@ [w,ȜZvykN:m迮drrA9e?ܹeOmy FFI'ךs|ѿ_~6|۰:w;͵k>y|-{0ðS(?_ZqV^oT)l?/E gnKP~}?ST^-zm6I_cmݧS~df% ƬK(ګUwmc bC>6 |?F݄i9jܕ+7z{T3o-HHUrvщ~2**n&l 'n-?nikVz?_u67jWf-w=P,0~_/;)MF;cH#*}?*?̖ Q>M+|YGk PcPYNI /OcZE%gk_~wI0rA*wg<|կQJNw_M`DpFjrӫ/iv1Bw\z2澛ݿ-A'ҺFw.Bgw~eS$v M=5zuoܑFO$2!J|SIY_ۧrU#'%{RyiJ6wv#diR[N9m[Uovۿ!Hw=.{hM=F~ϯCc%wG ׃늙4}Q7{kz<:Ti^ww#1.e6~uN]*Rwc("䓒x?7Dj);/A)5FSq;،V4lD̡Rm~]qTZZReoS sЖci>5ޣppovSuk/WɱHRi2wnߺyjtV[v*V|q<\9GQԴvh?B80V*B_716Մ ]oϮ}.uMdkJڸ(7/pn/:i!mMZ!1.AomTdoRQ~wn?*p~9"+|;ofX勅K>_QC`ۂ8ʷ__+V\35g9sۖaek(8-=ZJimWw:5*.wC"qwq].hX_^a#pN~]WҔZMQ߲$#) Ay,k4ڿ3g>Z^O2f,S$XC|qhW5iyM&_0Bb urOE'V."}ÀF Z*&]a[w/UrY]^=*6-(ȮѲ2G=[嗼?5Ɯߨn>םMO;ۛ_)P5Jm$jnN[mgR rߗ=I{^E4Ps9{x*Ν>G]zh.vS4R]6rؒ umVSi+o3*giksQ7᷹-][*-R_CFIP;WWVWo_nVdeurb\g8QgVOhk^.Op =t髾ӷw̹=G_{vk.IyQoќ(.R}:ԙ X-?̪˙z3v*K ߙ4֕M^}ߨ63Cܫ?{5~;eklߢȊ@)ۻ\;M{yD3p|w?{TVFZW(o_tF~﷙]  m^?韯4hXX2@ *5[voP^SjeN[^W"T~g|SK=/)}WdDd /.6ͿM=~D~ͭޠ*?[rG̕)Q#9ھnoWJɦ]3T7̃9ZFI%w9Bw~-Vn6x[?jIA?~^xۜ6{TMקW&zv}|etտQ)5q]Ov’lT|`AT8n=i^i %/x+s2,_}f0H`xݐNrU}/nĆ03(ہmw~;:iE-l"W$Ɍx;;zsΩ.yXW6]Z^և.ZL)a'i -WlD#; ?z֊zk*)eaL`H_~cܔKkK/ܑ>v(C TxIgG۸Wԕ׺zw׹$,ۛs}?g J_S9ҥ_꿭,#v[EۙN-{:]}k>Nfi)蹼~DF#*v։W}N~YI.]oGv#{ҳouªI$ﭺE1'`P1y'֋.|T5߽B6x!\v zWrV|^k @@IVYK|vk-g pEU]CmgzUF ~46!P]y n#YVw~e7eo~N7smwݿNV_?/@m~#]BYW^8E)~o\oIbs o:ji_V\(AFߗ:tU?nUۧR%+i~̙7~^Z%W2I9vzvy~oϿЕv߁.xFr1ߛYM?/18Ӌzty!M'=%w2ݝ9r~oڳ~fJkW%095U'v׳nntBK~qrNVI7 YdT)~|{fZmјS~O뾛zp[ݳ%.X߹*NK<|\,JQzj_I{~g$=r>>U=Ɣc'݋[23nLZqJVouK!x_zTyP1;XxۿI5Izw~F ;$q=wj96EF.͓PӓD?_ю@} wc'5fѵ)}~_(un~V?7N*u{ZTzߛoΠI]b&w)Gݿ-9_gM |ʟ?ROݶ wǁ*j>oiBOש) Hs׾Rig]FB˹wZ5k?_yaq 2y|릾zѽ6wX@wF_=i+6#?0' 7O_֑آk†F8|>HKv` Gs؀:F27|T8Z+>va8l+g]\wM,soc@ Ig۱n*z7̪-m!`T)a^p]_36d v`6ݬ ='|4Aр J֧9TMy] 229#7PvSq~dhz@9?wjw֮j֣^]twKm r#ڳu#)mmB%H;zr8 m?jew8NF:(#bwSR6O/.HRd/givB\n0. }ydr orp0H6w1qޑܔe;|̚Teyj1 ;օ8f)?wYc,8˙EKܪo?bƻ=?խ_>ZO#&v`p}N_ޅ~"-y)]wnu=n~_h"4[܅Pl?Pg웕 @!yV\ͯWʝ%_F,j;c`miw懾%jܕc#iSm6^F,lw֎iG_^<_~DYvsв~U(_Vs7WޟWmϯWbPHH_"m.uRcﻷvc'w?zuy ۉ7|}jmV>:#!۾bWk JI{4eE[2[ijIfz5#k݃*R[O]̜Sw`s)rWnpw7_ʶr_GEd#*Է rIzË+jox*sQW{ko#.U\ 9_ދ% {~?܇ Lp?zթ5%)s=<%8;{Z2m\_?q+J@S?^+U/ySR|~"z޿/:Ufդ^6rur ''A z Txއ~O>W+~"n{~>l# )#H;+Lp?^Rӛ*֏A!rq^89'}?BT7q鶃rnPmܓ_*6{q+kȄyl}q֭#&ko&1d 19Szusݾߍ$#@mykߦs|߻3_9nմ^osێ-M=ܑb bd~nUח_꣢Nn6krW?O_JI^6Zioa˶'\ݸ!I>e=_Z vwO-NX ힽjZJ um5#ەT/+NOdEW$[nOck29-tﭯX–#x+~o_~JM.]:|،w;Ru-4k_/q;=o>z$L7|<?U)93$VͮW1cHMmzr Pݷ?e"am߿J20`in2[%v{O9}[^k=T`3*2[·k3u%EZ &ݷUZ;[/dG;X֞v|_@ ;/9o_Dn(Nuܑ׍"ycێa++9}މ_fu׭D`7p1?T.d+q9.1eEPv;5I/fߦrFN1v&9/8 s+u_5~a^SG˯vBAn525ت/^?>ê2͟Q'MIYzwE%s7 ܜ.X o~E]gf~` rdD[k SrscgzT-SyUBCw|~o^[ׯ;yvI+#ԁ6ۻ:!(ٹ[o" Qv rɫ|k/ynm?}0 m?Mf\ylbN!|ÜoBn}o稣N2{}ԍ:{V7{t5X^74.MݿN2W O݋`aמ{^.gܩPIk +"۲pv.2EU-m'7ֽފ~JPl8zRz_ko#yE+YYkqpI(psA5rKO=Bve'AO]f4p?|վE) {AKOGpw3guqij:3t|?oaGPTM/sz55uoV;ʽACvIu 9._&ZZC>_=̯gLciaO ?ew}!BKe~`7pz*i9Aޯs[E[W»N %v߭K޺=LmNᄋ 8w_")tbo;v ozH_;"ĥ' ylߏҳ]ܡNuN^Zd'ys|6*J[$^QW)7 ֌ ;]v[wy[ϝ?u;,IyqBZ[Q/y^'H{I _ӽ`'-^zuG"pvs?׿'e.'pu5o]5e*u\ c#ǞDak7ۧFUQHZ=zO%;}_0epz/7R Xlqʕg{?MN?ΒsϾW,8mǎV;6-n]^ի_axr'6=|WO׿k j~}z1'~ˆ]VsP{tW6?yy1] ,6vAr{r>%+;3bRd68On۸< 뷛F4-V"vP1\?.z˚li=Gh {To{ȱUTe@.2vMnsԌO#H`6p e]BVIu`"E|70ڣʹV*be7OOoԍķ+ m~ZEl3h]'=zP)y+nʟ>"T1m+#w׵ $ܟk[|2Hbr~5J+{[֟/oߺܓá+Y go_ޤ?=o^.yAs6v9WIY4Y+$kw%'o|篭z۷c9'e 񏔷#+ nv9:.<)|pßP i;?p$tF>KK|=mЉB/F|^Fҧ ,$02+/f;+Zӧ5fd<©/+v)+?K+Gb(P ֺӯRվG.X2 o'Xv{Z/o'v 9޿rXLSqz{Z y[篗UfH$QY_}ZH<ub?ɨMJSM'Nr61U#vF1SJ{~g[۪3n o9 |N*n ko~)%B}A{{}ΪM1nH\7_] a,:ӿ;NzԪZ+: gj' 0>Nmz8xEGe{_!e(ヴ?W՞zMh6ғyy0pv9^~PWDdߩ)o~B7ҔܷAEz2 "i;Gm^T$8]&QNN:|zn`8?u]{13j\M?tJKkw:>^Hd{~}FV:]$~Kv]pNvĈ*U$97kӿEC@Mjc'ߪ~G ܶkm~ZBu9ge$adP=Ýr.^vao&mmt8;I??-m6y q=sK^Lpw?$*dO 8Rw׿S`T``uԹS*:[W{]+, zmioֳ|o/MOrn99ݝ\sw-Yw6&?L^= 6$6?/ kݣϖ#[] 2swHͣk^ll'9%y_(_e:^GߩO0s7^QZ}Nfwؕ''*[y%O׹r9.Y7o;.ܲps*[O=tK$iy~^srBo~m9}*cܚiO⬟p n8#vuskybz&lI%9\MJ7o*z#+!;זsJ-Z:k#juQC翯֥FKf|k|u|׭⛽_35OO.K~Rz'd[=˿rnԩ8ܩ6mYB~o~ 1RpvkWkY`IAS/sHا-,e=*eo-o=P 9#u*j5u9M%*|I=>njY=6oBP,~bF>eV=h=_M ,ϿSdw ./O?L%J^It?fb'2d/z7rEdPoܿ({s}߭Q,_ֽڿC8;dW*m?62~ѥgko߹> [Xw?t>+?=uVWj<$|~~7)-0VC u>?Bm;I+{u؋jXč+ۻ]od9'xn}nhT+ rr'_ٽHkn8|Brco˵jTN|Ő*68'iv" ՒYSʞ^~lX0@ءB4i$[z|$UA#$h} *ƝWta[1n9.r.7ޝȗH[<6}J//HéP2δis7i<ӓz;bA<#8~oSzHK4 ?i*O-?k@SeĿu[S<~rt6Lw(TdCnW9oҳ|_:2_V< I%UsǿPc>ɣ=:p^Vʿ)u%'oT)/ק_?8W"eEc]oxz~o(jmonʪT7SN3n?ujKir:[j}O?6zڴ|-u8SoH@;~c~ߟ-\N*E٦̫E+߳g:pFIz|[}}8fUR8fln~fګݛ޹ovv_De!Txa>\:RkEty!d8#p>\-ݿ=ĊR*OMSuq'ilҦOWuaR7Dedrwr[RnIԹ*2O/7ZQMI'IV6N4B;FWلمf~_".lչwgS87̴[ 9; ~E+TvV/FŞ?K痑$/KI`]J>Lݬ PK[9Bff[>ТTR1ֵyocZr;zt׷G&L2mw{ÙѢӾ H#+5xxsx6W|&)ъ^ˮDC H\g|#RQ{[#91qa?wi~ZyV\Jm˖>jFyd乞]F!wVZeTnt_>2XcYM=._~fþ㼵#qQ<9˙۔m1Ѿ\`}ۏFMw)= ?}?dzdVS澻}~Z]w-z~[^K:u]|Z-sN=>Z3i[d%Z=vGr`$:oenfzko @_RS}EN_C]1vJ;WRZuu" pAw3A:?%_t V0nMn8<@+CP;_LTn?{j$?mJNq6]B:I=ԒMXٳpN{/ƭI]_wsq`v9$y.}o8W'M W'@k躛q 3<чF{OKlDbs,H?5Z.J:_˯Mq=qX9wfbwۮP.@fvyQ)939q{(]C`viYkzRߣHWJG?\?&umI Su Ug}\%BH?x}Hwo=G_?ɓUs"K=:g?5\A_W00f`I-= zI(nזKM/л7 $`I Cv?{ʢ]wП4\ע)]?\׿SUҋpO#nۿ J)^׹^qwJנwHsVmwyMm"l7n>_ITvZWM)Nwc9֑U]2F 2T3ySM&ϩӷ}|6?7Nf}N{kߍcϯ8zg4+tAUC"AkpXsϭo4X+]O;|adb|=cyI9.VTgߛ=[Τڿ.:[ʌL}ZpAF3oߩ> NN첞{ǚ~'lUΟ_׷n>QcQiG~˿bs'ޠYJ^{v]ԗ(AS8n>$ +ZVKϯlT7ض;U̬*w_AT] aKqVrO{ws G=0{dE싺^xO%AW:z٘UkEݺWxsjߟz݊l%ڼq'qzGQG#n{{v=[թ{ZuzrA3TKiskoSN? HBWsg )mޟRg==c+0rǜQT?7w{׸yDn98\w)G=a;K?B~_78oy<4^ץi 2A'*-ѵ:| 3 ϼϜ2ݹ6ƴQoc:W}o1en;I]>hv_jpm&H|  O^qQ;_^]a_Mߓ9iN w]t]爁揙~l)F*׽VE4;Oz{箚.f_1e`>sq[SVFT`;ZiNnjG{}ޭAs;q>qW_$M7޷_q0qd&yz?שN7^cې'VߧS)3!As{h2 =:ewv?O# q7{#E.W?ݿh|܌  ԜǾ׿zFwͫ \vmg*|sdSwb+h߇ w~vj˖=2nrO#{73%y1Kmz|i^]c?pnʪq%;XqI_u!cbˎ,jҾ*~V2'nA7W>NuAm?{%osש57UhOլ>!NO?7}}q?A'!=|qtʐr2ek+7}gkZԑœ:*>ofO"i];uvu?I}fy&v_P(FmG8F*v_",K2oN>ߚ^n36N7?9ȦLe0}O|6WPhҿu;|ۺև_9MǞ߯laR>z/~Ҕf]wdv)f#{oʣ; Fܶӕrn9?{n3z`Nv^7~~/_۹/]7}F#0PUH۝?yx_^`#FSi@ ~SG1J#R[7[܉动;mDm~0׽=1${}?օ+9WY/< s1^N:&$e߯oХpvH˲29]9V]Ʋ/M$5o 0Hwn IfRTG0܄cqojgS%+Aw{R[JQ9"%NNи5@Hpϩ+ .o 5S\_OWoNTO3N|}{=/j~pT$p~_?7sR++_өyt-qc7l,Z4[G_/w rF>徝hnɳX]7׫|Řy8{|)e/ 9$cC9++Ԩ߷ZLC˸ӟmEw{3Ju]}moԌLp.zno)_ʜ23}?h&US~̾E6HOv"D0hcjd ߵ M]LU>: CO[]N2 ?4*?]Fmrnw\{-Yyݷq as{'?%tR nA}#tO^mT(*n}6{o/_?Րr\oR 0 Y`?sBVnrXm_ު1r_|_}vB +S憏U?_3Z^ z*Yj~Ӕ+5o=XaRAi?ϧڽ>mtHm?R}ɡO__#Z z=&TR_169oٿ~:TkA$,䏔.|[;eף$cC1ڦ-߻i{ÈW'w=ǯJMݦh%_̌|.xBIk"|-{箤!v #<yO4);mi.kz[}O!0 JT&:<8AW ~V#jr~o,= 5/4ԧ̉L9#hCH^?_Np}̗mLJX9n@s:j\[Y՛CB 1–c^z5޿HT%Iܹ\y&ME5.iw)uqt.3KԊ_qS' F\9;VoBM&̜߯۝}ûO_׽Dm-TR~evM ds,/ۚ^v'yn:}w}U:zm} ۻh?w66zKIߦߍU_r20moK%;%MPIW9_].y뚴Ҳk[Ȓ֮8AR)|~]+b@ ?dRRӣ'JIْN+ wߙ9;oKᄒ_.W m}9<'+t>cYWn<~؎zSih]oK^۾L&ݠbAǯǽZ_reYlyH ɫ9C 02~\YI;3h?{; &0 7{)qvlE(E\6#^^/Fr{iF/~zw*_>^w}~uZr~>_4m( uvO׫jܕoN~\g^*or8Iݝz齗8OBm oU]4?/W,3v-گO;3Ynm9i?w)9k< q|ז[uB[~W +O7kou-̥Jr#CSvF:m./-.0Fl-nzN^Op}\Ò_k=F_$1/_VM;2ݎXշXaq_]*)w a?ֈ˛Mg5_F~s'TgnO{|FW ܍>oqqE+zkwG`O\_xSi ;]~Zc`[[Ӛǖu*{?MϨ|ڤsV}oo-ʅwS_}m}CnN7pO Fo~ϧWa0۳*8*2 z͞Қmlr÷]~$6`-mg[yHۍuu̚dLsK}_zؚ5MYC$L=W6U6"C}º|%H9=oRӫ$ UuwoO롽ӻO1yl=?z}gOm?>Ī-Gaw7nұ^ ?̌96USwFowP0{?]`F۾m߅Jvw:'U\/.q+ǦF&7&ﭑ3RR|ߧ U+Z-hh妻~HтɁ?X5)Z ӷ!*]- iwpJPw__+|@Y1jF?D `s/oozIyrv/Qʪv>]7֫_G[}E]6wnQ^̙S^[[qY˳5k-=oW*I%ݏgmʻ"ߟ.\09*3w-Q(_֦qvo|BYyvu뛌lOG M4qi= 3}˷ym1=D|;mǩ_ڤQM駪rA;r=!կu_> , ]n:Ҝ}V|ɥS۵{V9*FQv7{Vm46r缛]oU֨^4vԂT*T%H]2wo91{Nhw~;RcPmI(QX|p6(4td7%u_ңY;}u1ܔ~M2le}֦ߚ}4 T'hkS*IׯOⓐvʕ_f?gJF:5K߰0 l'l}~zSz۷cI6]G_p[h 5v̸ث3ʫ|=r>N;ZwF\y ziR5+\uoT83!5}"|պ'?:rg<. m%r;zw_֡&WMwP$_{9f:>̬ӿ"$>Uu??I=(''.q򤤛7qK .ە{曨yt9.>d LuvXw.J|+߹Q:~]d+q=OZi6VtwR 9 7ݻ՞:]~]FXǐ*_~F)V"d%vKNK_v>'ۿΦtΌ-IIs%.ȥB>V łp=ުWvneU}:{"Hwqgv9v}8RQ{oFw )G=泺V[^]}ߗ@'NߕU^']F1Ju~?}Q$Z RM{̨pq.6Թ$]N=}5~cp /̣VJKϧm˕KcT X*~ouv@ f,0 rק_1Ʈߛ@9az/t9ދ^C[mnφ`Oʤ9xW׻~kn=0O>j ߿3I/m]ʲG8<z/ע34{&x.qn~_9v:Qq=v_ڵKM׭(['d:nuk8=mJ1ZoG* 7ewkdz֒OݍZt_P2` r~Vi=jb n1٢3;xU;Yt̩JKwBXQnmw_ZW{yY"7Șa՛w|ֵxь}б<??7qVwa]H!?MycvFd0^ QR-oN"+M9nFFI_r/9r^˫#w~oNsDTm{or\f?HN/wY R:^wl@r?o VǝV Vwz >ʑ!2qs|?2_~}hSړ1,H8'}{T؜Cv;]| {oO=gwӺb,i%QrE9' 9'agMk-*WTc!?UkmsVnwq11) _7qTCk \`ͻ?ww<4Nri|~G?2g_w*bܺ?掛׷O>cn\gר=j%_s?i?NKQnb7{i} j}ߨ R$mS=ةU%߯?C?;.0eTGFovZ??Kٮu^` n[;嶷U6{f#Tdn{Q(_^$%};%V\/8h/F{kw8yIU-~T(I|?ڝHy~oө0HTb+۰~nߟ&6OChե'eL| @8=Cs1POORR[?p͹,7NF|7ҮJoW1Zw_ǿMo!¨AO<}:rQow 褖 n]vһ;SSo]7l!܀(f:?6{^~uJ_̚}>݈i=?T{J{^zl>Ri=N$ڿÌwR ?_&rOnK&sCíe3^zƢj?ʲw^?~|}Ç,e.֟ J0!p>MttFiFY~.(%]_k27lm曼vNmNWqλ(z*eE^OO-P2݆ [oԭm}[f1rG[i%9)߷} ‚1?Nְ e~[2>YI;I9?Jv$#Y{HӼ];Fm埔}ߛ%/18Ys?A_M<,W\\ܽޚM:#վO^1W 3ӞoR[bR2\}P[\6 RnrO(| Sߧ֯~?>O1Gw6[l? rCg„rinwx%*OQ;M]J!VHt ӿ̿zԛ(7{]eʑ3~_}(6Jϕym`[wSM_KoRQkKKnwqB?{eb$?7󌞜ӯ&20JOi6w%2mYsv/zT۽rRNvz_O=7#;rv=I$?_&啾v0%G ;XSU9m:qn@qud|oGm {{+~5'M8-FT'=c1~\;}ﮣ* !y_Y9uH^>̍/+| ~ᖷ^397{_;$9 zS+5ÚÑh_=aGYBw?֚zw#߃>]3XB Go~_.2*o7Lwt4_2\ ;p;c~Ϸ5Rio}H8yac_Ƶ]Nݼ Y~d~Sަ v;v׺G mAbd?RkfV1w p}_fo{D?ךsW]nE)]z3du~`uvBXcoozk}]7Wwؓ %vZF]-MYm߾UަoKw,i9ד 3F#|KZsQ[*py3O)ntA&Zi,He#/Ez4ۻj4EUTO9鷖קJGa8 jq_{G<D}9UJe ;neL.O_]2yb ۸RkMuOh, 9?/jړ^U&]7G2˓yM?ysx{=Ϊ) -޵~.g-]c*<_&Q嶷$:7Pʏ0sJ?jFV=#=?_(˄V}R?+H /Vg%J'׹,C m~bF9Jq-oٕU[wo}iF-uCN-hԈIg>ZWzz_fտMq~ΡK~o0SXPwY_sDc}or{ջ2hٰ2Ty\jNqIO .vį2>=iwye[28T|7VwK]|{>G}FF>f''}ߛ~JM?/fsMU/)o]:Z[Ok!RW88v^SJT,K׸V*UO`9,˟)IԏSQ$dҁ¢R6p&1Pۿ5O̗YO=#bl''OH^yPJj~!"BABł7OR?/kj^y`RP>7C+k}N_;2le~kaۂ0TuVdrb 2NwiU~"vU@sr~&N{~uUY ax#aPIyש4`/!sO]?}8AY~#rq~\8#ͪTQKU޽nr8ϡ[+2M?֝o?z+`C ug?M#[+<㓏WoKOqv_s@qu;OբO/7e*l2pG@oƭgmo^CKO@Wݿ՜*k`~8u~X~nj$* 0Od}P}{.jskﶬ䑎NsV׬vF_ȼ )!XҾB+R/Nne#'ԁ?}9ܥR)o 1‚Td-7߾RM/ƪ#o_OQ^AwX%~SmUT-co/C-?I龃II=u<<(!npA~?km;^@9g#'8 T֍)uLy^`+XqJC/~Xf+뭵9^}}T2+)yl d1{Pk ߎv$n`J܀;g݋?5kGu X-3WiݾerrrRov;?2W!>qzzfq|_AVy~cufNr[/jz?vH}ếQ g*FqG*WLy?oZT:#/֙g}\R# \W|җpHUp_>w~]4Jݯ~#¬=}~y~?tta؀pNg?.?SKޝB7 J0_|ϹSW_F4Dd>V󿲟7hԏ,owaP8Qgp[eky/T'z~}X/hd@z-evgY0x?L1?IUжywva Rdap*7_>`s~gE]4[rrmn{h(a27qnZ>dO*d鏽fHR??p8`ӷV~Щսgg,<eТq=dll9b \K׫ۯ8qBId)V9U-0(-JKub7}lE>_FvqcT)ƢKOQ NFr;õ>}II%g?!UXɏ`|˵~}+&շ׻Um_$uͿ]N/ޯq?ߣ#r2O*͑T7wrE_ןߠ}ܮF `p[|֑W_=[n ñlwNqAӯ_@9*@I+܉.cg>կP/}p')/GЎ^q`7?z?Lo}d@U0noD#;[Uۻm\$c*=_ޒi=uE*q[|wy|s1ѿ﬩;:^"Rm_J$exP?~\gI;4O^9ÀZ?g_8z_+)=I }li(w/$ߪ;D͂  ?^1^nw|Ӕmi|TFe5sP['$F \|9 \qZ͓+}uNl"]v?nQUݦCxpZZt?V0dINO$_Qj[w[;N~ \ߚ"ǿ+G^mou\&7kł~??:Vu0q~vH@;#Pn4Ҳ׷B(-նf@_Α'Rh]\ ~Q?7Pt(8ftNc;|;B;.7M/ӸM d2ޝ_5VU`[I8[FVO&9*EZ.J7an.;cX'.dć Nw0wm;~m[>뢓W^^n~zy#X+Ȭfo%y~Kjʶ fJ7}r%EK9S;YouQuƕ߻j)g{Z"4˿pŋ0 pp1?4M͜[ycny$w{wd:4! A<۳w{'uWɒ)Y/ZFZoV:񲪆 ~?roRU' J.l7U؂̤|M˱RWZl}س088-\#rjVF5!ڛ~}u}۸?]wLj_5*rNT}^Mi~T_;J^VԐ ʰ'YJSٷgu]x?q`?QY}k:zMkN@WnX~^mƶR?F\X|B_9gp2!y#֒V~Ny=>皔zNvOǮf28ۜ00.1C(яw0*\2c~6):ZwWu!F Fw4_=|T>U1eާ_osI~UE,pJ3z4~AĠ<<.^je.ki)s~Cc `>`oÝ[*r-/a*ܮe?B4{_~gW1FHe9qD_[4e{od'G?@~P?֥MoNO4.2y ŗkte*~]m7 n p:qIW]+NwN*k P9gVz swKb /,9?/ȻU}?I٤T`OGBp ;F9'IBZ-yەxA V^v kdby8;}{zѧT]3{Wo=u_ԑSnW%w`<~u :a)knf x>Ԍ'og܊ #l=^}?N6"(0LJLݟ{ujo܉av&s0e榧Om]>#h 0؟ef߇s+;txcc[ܷ 521J0 *ńN2YAj;+|,4Wu"x&sӒ~֩5{?}ReW|ȶ9=p&rkK?Ro)9;1wkZmCg]gBmnx'ب:9f}vdnQmFJ2I^~`( )iP}.5PAahq__ދ;˒?K?X?&r\޵2~C>Gvխxno}ss+̥9p1>PW;QRn3M=U7)m-i^qo\e m{<Ϊ7]rN0z߽4ɿz]?/RMdR5zyj[;.(nɿhM]-?bHH ߨ3TM_fiAۗ~˸!.̂=v{}~O]ZO?j KaIݜ?X7vsZpj^#rۉ 3~f^So+%zwnl nRw{K6J/2G9|?Td{RoߧW4FT0pCnwA}m]TGl>[xݬv?6ΟL䕬 Z*wˁAԮGt3i-čJQ?Ύe-,4OF( -OsJ0:h= }Oo3ro]0ݜ[ ~~ |ouƧD]nc~Z_*Ǖ]0U0wv{RI-|~Q7L)ɻ]wfN .'7hr<{{}̹}Z%a̭}/빪i>fE+.x/+=(ɵw{߼:,c{PvGPrUwMFﱥ(ZZ~VsvsҚኗ?yW@x$oz*g7'}:+$cjy9m~[+(|:n@}Hoy}iʛoW ۱Pf;SSWݯ_9ݗk6Xy?;MȞXEñ7.p) ׏J|# F?|i_] CowoHݫԌݟ^{zjw1S]K^g"ے]}_Ѷߕ~2`1vڿ^uҢ^bKNJӄWoYHN'n"H=hi=K}L8pr #y韨[Y_n (=u5W}:2mi̕b1cc'kwa]k{ymn86g 9_ғ]ΏhV}:O(*a̼~7>ހ#1TU$u Rzo1YO |+>ywiElOԈ& ?{֑ןS7'L|a Tw Mѧ+(M?rk{}̱಑ߩ泗?[ߩ'xmH D6G'f?95NonǂX)cŽ1=?66-{ymG?{')Z箻GDep3|ۿ$(kuz՗*Ƭy܊6v?\ܕJI^)P(l{F\b+R}7}a,=OC\#R1ݿ^*Xq?sM=dvlLv <ͷw([]﹤Zyb@d1 8ihM#+õ$=IR92?ﮜz-_c.U1TqIrFLjǫo;"D]?=V_?_Ro_/;D7q~Yvu.h+KDd;.?ɦ}o=~ۀGԎeV|oW)d1/ג)toSu~vޟ+Onͬ xoLU7~]NX6֮})6d n?^{N]WO+O16Rͻn>~4Z\W׶`8t*IT t`:2 crzը$I]J͜I?{{1&~7'ݻJ)@ ؠghT0Qj~mLyfQӁ|_O]E9B3ۭBԊ >+{B|z:x; é92nM>+<[Zy/  wca箇U9C];tO(bw [R뽼5W|̵dۏNXny997FkzytF́rI}ժMnN"vr8|p޽ HpOC?%;ˮn[hk&e8)'#?__֤Rn7^_;o\P_o?փ:s%d%N?_A8;^3œ_=|ÁќJʿwzV#QojH YO9󚙶ﭽ;S\}f[q7N=&0s?y[j2*y i*>V?Kw&H`{zAϯd^_%آC~V]yMSVF#@>llOJM^u_vEo_u H${0i}?H `uUǭ\Tj=7n&A#SReoNv矛YDhq8 wkF%۹*9~o?Y8|:"v3U#9sr޵qoS4=J.z Nz=ȬFʚ́QĜ){{voVVkK.rZIջ﨩4}૰#88?x{֠sKzw/]'\ӋM=w/aBDm'ПE׻_)P@>}nޱs6WOm^:U?[4ߗg2޿DLj z%6'*+8-?_$oLe6 0PWZm;RI|cf,skNb%/ԟ9 䜅l5ex;Ɲ_}) =?lwO}{*!Vܨ!$ 8 ֟45@ko49Gw-8Y?Ͽ$w&fm[<<Ek}HNQ)sI˕oo_y[~>B"@1_vb/ItvM)Oi'װrT _7A~ʗ} [k"#\~*Vi6kY%mz2h]}I*6{!˱C;75I_crTvnIvw^~}#U\ v7m8'VR] vc^S/_p<2NOoo n!*%Z<߮*~~0)!A8Qp2rNomJO Hf]8>ߟ+ZGe$~YJ;A*9Ʀ*-y'f&1wsZIlJ2o-ԀT [OܢӲ_Cуq7BRoEu~"m;(l ߪI}!9KȄ{Hcn?j\ߩ-5"BId|pNvg5{0U9*7 2TocF6}mu#q9ٻ;O+^j {sm+[G4l6F7 :'Pwo~>,˟ǝ[}jaw|v#Xy$sb~n?to1Ts"єb[5SQ~~#*8?x؆JOgo:hGY{ yʳqI{Mro]ap29?|? 94>HA#iY,?/'#G{d{;j$.?MB#;YN?Ҧm'\6|@{)%OH rywդԞ9FVw}1cm8R y }~Y[S:Qqɍ1w Ǿϟ]uK]kl^N;}_~5M޿HRM1V7-cgRӛT[O~E ۉpG?_ʚEV{ 軾Cu%?/?΢2K}ݪ5m~]v-{wI]߯^5>l['oy~'e)tѷFsmߗ&I7eMjwbT͵k=z^%e)x-9zD[z}4VKd۷'_}M/#)5Tir+֠hblHI?=ՕIŽ_lIB;p~_۽gHǮ?1W nV\:sr]S<x=>iQJ6^26rm3Iy.]Ö,¿^+MwymR#R |~i%*55ⶳ64Fzn,~luyoBi";JTʲRig|n>rixc?iew]vNjRw_ۨ BT[6}}f/]dmߺ!T|OU~cvF'=~nI=Euv .^΅E-oFA*#ww;[֒oG7ɫO[t%U ,r [ޑ/_}A#dcqLRrW̌d. w'+lg*}68_~_g(ɷۦLJRj?1%vI$oo҈O˳rKgQrrOR2>ǯZ6r*]n.\݇z\sU^]R>\W}?_נXNU^}zjQkKop#@d׽AH|*it[?n>RA$O9Mw6UΞ=By x >:Pz[r#BoOG~d<5Q>ሇW{UՕ.O,/).mdq)f<ԩYEң~RALr}3~wpkg#Nһ,V?>Rk3"n''-߮j!/4\ ĥg-]e_ۣÓ͞?:Rn:mw}ƸfaKmw}=K*Ϣ鶻aBW[-ɵe gߨo})y_Ӗ x󜟗{vmlֳ ܈ BXB*_HΎr~[r;z=hj0}͠}I%w=މ_1ԣ⻭@%/\܈ޓ׭OoǿZ[_tbdv2m[9Ҵ쿭l+dM=ju$&n\)JVQW0AR99!Tg9r5˶N3Y3ncQIHnRz1ܥ8C.]ZHɍ;tJfUSGc8l;Rm-ݿ?0ROKmWFy@`$g%T_Ι`_w ?Y.9@%t'A^qoȌC `n{֟4 %꺱Q~Bn!ۂHGKq WoA{L\GQS?mAwW(LrB1\Ͼi$m'{/h=c?ՇWg_S8+j8 \your Ob-_5MJ D)Ì(f%{~_& 6ª_'}^m{\;_6=b_,F}e:.VϷiN#)5ӃHIP1}FCmݚF2]| 99+i+*rv5={fM6Q̋~_C]UOD@SvCە9W2RRIuOԅ9^o2[SUW/t_[3 =O̻~}%m_ꊋDag;J }Rky.9THvϯQ|2CMSw*m[?_g.;i__{ӯ%Bv۶ҳeG;+dq~'-}:vZ]nIB2q!Ni&{q#ͷhn;kIFeui ۂ)pIPe9.Wxձ 1*h:ܣ>6\@\G,=|惆E"篓,j8%vZ|]z/+k(~~Aq W\T%o՞䖲KYsd#b~n:S2zv#T'qb$9 [vW8"wdl˩U9jkL(BR_ۻ\uN+1WZX]\[9Ǜz*uՑe n"Q&oUx뾋ervsӨ?w9\|yj×bmʎn #}~U*jש^M|:_c[OzҜl~FcD{pӸpx#m~S}z_А¨߯MQ~[˯_˯9gmiVvrF~Sw uMZ1jjܠ{o8?֮m;Y&U~"rp*sʮyX]n뮢do[H  r0Vw~RoSac(/͓~_yO@-[=biS[yw_}H*FHAr{팩i+^~@]'=3x#*%3nXa IjH/̍@U t1o}C=(9!wx^UZZMjO}3XBI__RfإTV;r޿{ӭf]|ΨԌwԍ$e [q1,/zi_$v 'QrH۷*%_rlzzrh9d!w߭SԣRJ)-߿L8 8RV_?2=I{ߋv-Wqhn_֢4iӚ{yy߽ƴ}\r8_?j)7ni)s=__xc۴s{ZnQ{ ]hbL ~f?_4yfBIgiug[~x?youR *6=mi(E$C>k]*S_-ŏ;?{ݽ)V~O~mEqka˄ÌsvvniIs_ױI+Uǹ̯ÿq?֭#d߹F[w#Tѓ^uFIS@N\*8z)UKs{.v#jc.4it~kҹԪ[w"Y?.3S]SPA?!ʢPwwz?qޜ~1.Km)F{|_J~_2ж'[ɭ"9J.[.6+(paO{M_ƊNyԟfg+Ӗ0v뿟m~ZT, N_5wo_'%o쉔0sDwFRK>H@_R/zT縪;m3`~o_0s8{AmYy=j%S5Q?I|okU-J>+|euן_;;Z;(+Wˮ]x>c)ڥ&C5Z+~8 lO۽7)_)SUՙ3n8k{.^3GY|ֺ_Ƌ F֜-?yoFd) 8ޫ|&m--±O}ZԐ|8$gswo>hP@'$i͟>ԝNN)Oԓ U9tNo)I5/_=kq~ST+۲z_+;mרՉ[*v!tOtZWoSrI_ _nsW~] vM{vF3_k?+ouS/{uGvy/GDT믞n*ێN6T>gs8Fr̉pyX3duj˩)޾Z:~l9A9[?γ㴞+F!IBvુIߙ?Ԩ4;hG0?Zw4ӓ|/Xc~9}w7錟K~N_-~c&3ۿJkNIj[u_ַ=H!%.2wWzyΗ5KU#I(Pg=Yc )]W!H (^>_VoJ?LR^w~C`$sv/?C?rE}Vrse~|Cz=gFJxonr/frq /<۳,Dzm i'߼å]I83:.$eTx =.m9o߯sj2_m 䍧#gK7en_Y3Z9#urY(3GȘBUNh%N OoVSGnߡP}E0iI^&ݞ? dgerJO# p\YK/)q`[qNOŒ{wV_;lc;vpj QY?ǽ nwkrf޾8;5|!q NKg0tmmU##y;/]7ͻ4[7il/C/=[Y.w'6Y+8U%~o7T+K?:k5wMH8bݗW~ KO_/ ywn_oJ ኌW? OÞŽu|.B`2m?.W^9^y_4 Vk>}Eع!?&+隮Ue_(Tp ߏ?744US0YW AӸ6}5nS{tנh$%GyvǪv}4nJ*K_]E|dYrE:iJ2M[%icߠM۱5kTZdAp1dmՉ[iVKJ~]ۛ7R8σ<*mIY?K߽5VpV-C"Kq-Ww]E7~tJtFgs?Jrm]U5+n]889NȭY{]m&??ЏBI`~)/}?T5]Rm]ATA=Of8o>jmsJ-tqOs`}o~iƜ_^/u_J޵~ Ӫ$XTszv5yv؊ MG a e/5JҤKt}ErA8<2JoST͟]7i~)`x})=<)!J*W~f׼e`" _wgkFNrT?/R^y┹ϲ~_Ç.t괹9[{۰Ё!rӧ-FDGe$c9Lӂ^ܑV9듓UW?D_+Zju:Y qۻw pXk߭++uS~ߛ>!(U ǿZJ] J2wӯO 0ot͗.UZ?EOzt>n:ֱ֯R_]8*BxJϡJi5g}{ e>` ^;m#3;n`zzL[!VM*F€x#*SW?Q`_ UASòB^}撫N+";tn?K^}2[[c F-kv)+nrNFHcycU$/wע1Uw}=5\zqR7{_9ٶz㿯_~i7M?y]a\mp쎍r>m~_4ĿU޿7|ꨊzqG~84{8`Rcwקs>0IY_m^0)WOu}A^01O9?{eUݧ2$6~J{knI7b3v1Lu[w\GF>3vV|* Q~yLv`:/"p~m/Pv뿕bCm\!~_-#NUb܏*6U[믞HF{[2sP:4擷oW #,#p8?Z69˽TblcuƯ)w_ܿ@ǧ(@1{UF<4_W~.Cgqf-[9s=7 2A-oilt?%w(˧nU 8,??NJˠ>[*sԜ|J\bջ߯n!>Rm9kH4ֽ_i#dvK9o1z2qw2kkӮU>{7DӞ5gmϯ]~ʠ(T#rܷ߯_օ{k7.oco'A VOq:~|OݟcvFO9&ѻz݊Wg?{޴*^l0@zyǿ NGj>5 /938N}: ~1,\͖Ԗv8=G/Κ&U|<#75#rC1T)KY~}һ&pG9V<}?Ƒ\R-R3$u7enN[Nz`vp7>sW.9kչ#g ~n[Z3mv7Ax`O=t.1iݎ`F'QȼrKq8*wnϡ[^jgk5'wb.U\C R{K~#\W|6I?-7j#:qt߮m^OA'$1oڜggN..Kkp G|_5p~ЬsmR>R[;~i##1ܻͻwSVJWg5H/otjNHgw ߟJRK/yYjIϯ^BuZ_b@ >Vt Qnq&nʅ_ utǸSk.=>`@uݷHznV?ZJwo;(=Aǩ2oZ~kΙƜḱc^A^|ng$שGS:kͮ cI! 3?]94nAFUy  G\,Q뚘T_ֿc[KK+zO9  *^ִI6SPz'rTvJ猠ԓ?dl,Q_ߦƒQ8|PP~\go—ӻ^Sn+U^0r}G?kE.weBN.̔=FI}r֠\,J9owk_C~?1 .Hlnv>o\愛zœ$?W븂8l79 {դIkvסּJ7jwS=ڳվ(?>@qk(iΨSO6ʪc ~oZA|T/v]o~sk 2U6pvZ$Nm|nGTݓoPoCIԧ+ snOUROK?oI=@9G}߽76մf!oy/p1 3\kUh?}oga{O//$t+_KsO-i׮,|FI$Wv;g_ɑm['t{ѫGo&sl??1M:30Sޅ}5*}Tq*^׏^ksGVo?"R2-cY^Lj[ -?ړ[0~zoq fot?wߛ&KD쿮R&I98HsOLSIY*Rߩxn@.\ַеM-]{E#$uwۣsTӽ^: 1|Թ6m]:\Ϧ9Pn8=·֩TU~-}d^$:+h=k{@W.ܨZֽ? MIVH$d?J9䮿;_yu_Ձ J.HQj:jou%no_Gmo*7}ƈ$>Nj:__?;x36Nܜ( i~bIf%c?tzwiJ<}{w/5f+& 2>mzJW i4 xɌ.r>anNεWzRAV99=ߍi5'޻sjQ% #knߍ]o 18mZU2~_憶2è9a/z+ T18 S׬n?py|`RdV,ޅܶQ6z밬3d r:Ѵ{06Tw\u?%޺];h>O?0Ч'߹SjȌ#36ַ֔Xǒ^Dx 9?i?2 # ϷJ ]ЎX忙_ӌƔOMvWKO &H$J۲=*$}G2go;wF\ci}rWr-[Rw9<0q3w$#0ܜ?/?L<`y_/n *ygTfg{_K~_;R0ւnOv&ү(3j2pU,$\mHcwQ'gvE5 ^'9\z_׽Ym?gx~~׽Թ-_[ʒpN:]e)]o7mW]NKF I'%Wlq1??Te+Gᖝz~N۶4;'=3挗-zm ڻצ5I/WH/!OvMC~^[eT~B]*2Aẜ6s7V!"6! 7_y=kDѣ/iů_q'*I}~_˟͙TS ]x/]=Pvl131_=WuQN/sBo=z[|e;J-r6{z{ )f<Unzfitݯ^!D?Eow~g-$I߯+!o{VB\m^#yj3p awuݻښWv:ǖKo( lc sCMnK}Fqs=~ԟwbx._ X7w2$v$AS6҃gV0wA|IA+/[g$+yeZ\ю^CbR Ƿ_zWkMj߮"rwrdkO]RQI~2'-bOaktg+d;xI?.*(NO+kok \> շnE~{Çu|qq?|WNkYobg[Hٻ=ާ'?<]Lw 󂪹+]ڳnכv꿯OKm0[y/INZʭ*\կ;W9*e~\>I($ZTf8뻞nAAtG$j9PJ>_;oЯ"jM]+_N$9DvBtфw]Q"ps~v~Ůmnzqq\ziGVX8]͌ܞjcںṢ5&ک]7'!VۻsN4M[wЋ [hV\zϯ֦tU_N-ZDxr?9it{Ry~DOrvz֪ROO׺{:1HDdd# Zڽn]J:^/UׯO>D#gI$|Ē?9d<mz@FQ}Ọk6B_cֿsFT c|B>ߗw?Σmt]~k\c,y֜պ߹ju{ hm s\ji'n)_c6z26NG} o}~]2p9?֜ؿmo]:ik >U93w?05˾,Zo]N d]??\ ;_a rv?[֭ѽ:e?^dR#9w_W'e:1o_݂Er;ך7[yZMf^T]t*F!vog)-ׯ_Cɥoh6NQBK?YJ=v)k{hWo1aYX8(1').ݟ܊m)GRtsF? yaHBNݻK^֦@`#'a}Ґa5v&:9~ͻw85~ٓ_B(V#h&~n?Zɦ3RS9P/E[.ni˿߿i*M.Nk7v{պ?霪,_EP\< DU'=Uڶ+_wRAdp@zUwgUJW{|<*.O~\J2ZP%^}c5eC+O^~n&ҿƒRiweDD T``F0[sI(۳1R1Q,;ַR[z IcnO:nreW+h{v}I"(B}zӥeWGjt`??oqw:W?#*z/F] tq8_\wROc>WmM(Xd\OS͵hqOtU(sky}h0pn n_Krן"Mp WT;}m6n}/[~fME?NY_o5{տi()n#U]ʿ(f<[c׷Z%N*ui] d\+pFq[\5N7]lVXϔ  #=>m/sǕW~wd~.mtӯΞH^~; Vl8{MSz_?̊T 3wA߻U/[] C^m_wwr&qxPw>qջ[ϯU덹<~^b=L 4ԛo2Qӯ_rU`cU$+E?DuU#mp dzJVݯm؍&!?7% Y߽^抣ߣG' ek[,j9Y5E.O<`{=EfJc&tkȊ-}A*"+?F9DvCzN+W{w,cN|7oӞ得\2w]uE`#?? ܙRclep܎2iy%vwO9Uy}Rav2NA@@-[Nk~v{o?1+av սN|JjOÝu# { gnH9?7m'gRRW6q7!B3m5ϯLI+u/!F  S]oy│|jw%k8MLcRi_od-ܰUAekӽ:!WKqowszVo{}{2nDher'o!I R2sKۚ&ߝ/#Q[}>cnv9FH996s-&))c'sCw?0,cSgձTַK_vbMR Hf?nfOGsERJKOK*>Qx{oZ.[?ϪtjI pA.߭ N^W髙2r29ʷ%V1S߮ݖ⍪9 9+.gBM]97 cPH#=^X?s8)/~:-0*H)`{"|_{d^ .2wn}mݏ޲r썔[J7%@8*}?_4gMqj־  BZ_N|EW{}vh3EWxߏQ;|w~NJK[t_w،ǵ'~ ugִ/ ƮqBX?wkTݻ]̯ԯ}vyט-~ s?){O/Vך]F(rp{0ݖߺI.~WbrBڬ q}Ͻ y.-Hקa' {x[E8FY10~}e;5 R\۷<`) Iſ/{K׹pm_^H?ס7jW].<M汼mgT!ss?'ҙR}'X7pT7#w|}= Dv?w"w`p0 /*悛){+ cYۣtޮwB,p3s[i7{}!%KNoߞY?}zJ;JWG$T`ɋp+8K1R^ݑmܧ_U:|CGyK_Frn'~_LRn߇}ۻyߺs@^MN9micܧ9Ixs5n/V* 7!7&͖!+2@w9s7?wwN+]6sR5˶+ % ?=}}թ9Բ5KmBFNvW=uORvݭWɆM19ͭvkRT㤿˶@!$+ꞏnSB6|ֽzHA\YC|{> vÅ>bsl$wF#޷1Vq-mR[}N޻[׸ 9'-ӧM|n}~Ήs-9-K*?MK+&$U NrǷ߯igOpw\;Fo|*G[OiտxbFr@_Wf2vH9Q'qA*WT]%WӦ«]#$uk`̸cu2j- J]]ԕc#uwzyλ4zn=p~4UnP1ՀUgkko&@9';v_9ڛ]:v0Fy9)N O_q\-Ij{oHnosIƃX~PXnz/|FF.UH¹U {+B7o5[8cxB"קW|@2w@&_Ӱ`9ygSߋ36~?7E?ysMRcUEw  G>­^zԥmߚvN@{Isb^_w\z(pmݯ]HAtJNLI& epv܁R߹ So]D"z1*swOkfiZO% cNAA` 4v-+l\#{ꪌ9Juw2@$LhGj͢mo 1Dojmˏ}q_U ^t[bp\ZZ~˚jO[y 89Q{sD廵.2Qz>O_r!W+ܖͧGY_^deqՀ{99^쿯1-Ė!A'߾UqsTڻ^_0>R}~__O]~:M/w^?_͒,gi% ceD#&}~?=ŒASZF{V&*9FsJM4MKk[VTڡIv 6[=O㊣%VQR$8ۓ?sS)5ku{X;o3!$cvZ|};|ȷ/gʙOI[v3UͳvOɏٹ t+yMT%-#*˧kY}^cr<sYITՔuD*> nJWgc3QvK1z`}oo᭔Ijfw=B<EfR~9$!rI?J64~6֣" ~2_N5;j=5t}"Fv}kݷDg%j2nۨrNQҜkzZZ|{PSokC<-_7׭8k. /أ}>*[_A[,H1}n~9'}7J@c:s߽!?knb]^/__?Ifw1;9C` 8{Vs8I5goߩ*G H&swvzzԢN2yMͷ]+yi[dD;zmgR_Lj1wo^|v97%moM~by`P_:&j7Rw]zh.Xq۷Keyzn_)rb%YmҔFݓc6HˌjiY~ܻZmxnOC?/>zwE-7꼄dQyvʷmuQm]DTo-6X)?{ZZ3iKkK뾚߾D#9`'ypϽg[n+E}7)$|өmqݟ)YM_O@o*%.ce^d`NztfWQJa?/]7֭Gvm>´kebG 9l`1=+6ݝN^wi UAmzG<}ݿ!\A=5U[2>w{Zz`pX]sY[κq]uder3=]ܟTZ[ۮ;s[L~ʯt~wtDAĮ៛ZWٽX[9 qܹ}sPv̉ӎߧϾGdss6z(Ŷߥf` @97=蔒 [LMKݻ|q >x;vE6׭SR~aav_Tiw8VyY O]Ìg<N߹x-wc 9?!PpR~b%?h ?_i \}7gZy{Kz]G9̙.~/shnڲ!Nqw}շz?'$;KM͑P~@ $DZ<99u:X*>YsH?LcE޿1ῄv^IQRXl$+k' zNhZ~*N'*֚^~;vԌWI#ۏzձsFK}dBS8.7ҩmT4{##ob`w9-\ueRͥ Ć^0zvS׾F|טylyŸґ|?ߺ)) vCz+wi2{~#moo?/wJ2t*@= ׌_y &#n# ?Јɍ=>hOCծٱmerTuK#I(aq99>ӟ+dm )w_P!k^ e'vX89Q/ZM^]~CaP8,N2O>V*>߻o.W!v  `6i˛޾:ejVow@Hzޝo)UrO^>HG%I#?W=8Q[/]{|ŕ`ӝ;([J[_2ąH;>zΛNZuyd༶k lefR`UU.Wi|SC FkIo։6W =c ʆ;F_?AFRoBm\`8~sNMN~oPha`\<UFNW-;ȣR&1X/kiM50N}{i63T1 8#P:H(xǫ>I/M~iF7wW>|!N 7OP *|X< dփJڍwCec ~ԥ~vW9h1vwkmP8;w<ϯzwW#WR1~k!`r[E^O U%܋I+;GI>}lOOG_^^bSa0ޞNvbi%,;s ~u)^.T|uoQ>YݷZTQI|@W=v뤝'eR|˒2~x *>_=_MJcDnp;9evoB}z. I,H?m_PX?Mִw[<>d6y;-MnwRS.^drccGMY|]tW:A5{? iۑ ?f#;@`o73[4(\_J={#9-o!̛v ǞǮޝlw-alߟotRJ˟7"u9lI+760r[rm3+^{u+ӟ<ݾrA;~`ǨûwLm/rpzʞ f,AÏ{9泔Ƽ]ou&v;~\3S%'w>=$ڿo_H]$cy'^}i6mYÙ&K{y'A$U9_Vif}wag~]B4߻v8<̭Zqif3ﭼԁ*PYRO^uH.z/?g#jj*]u+h͹տ)z֜am 9]8ܸ>r:kw_#*B"XT̨-Wzn~O#V2vOQy$ ԒKcH}ר:݀<3}ͷ*c&S_=߿ޅdV#!I#~:mroewݐ1 û+^u%ɿ߯6ɷEw,w>R:>m?2$pl6{z']?ע{ ͌o~-}HT@/?^;|~Z5vlKg ִ9UEň!@޿LRiiS+Đ{SrkP$2 z%{/ ֛Pѧሼ ' ۂ7oma*mߦx.P8ݏi̊Qk}V,gh9$z_GljMEgI߅+q'^&wѲx}E_[̇ͫiP1-wez__˚_0PyS+(ϿzKwEO[]I0A`ceO?֡MM-Z1$s~e٬ݯåR2O/#1.@$GuW~9[TJO+B)O7;zu=uVA&ש+I#vr1ۧY5sJSZ,+q,F@\~o4oz+oGpOùo;)B0M.><6ncS[o2Qw_+~?{ 6 _Sj-y)=4{r0rO[96ۛPN?1mG€GO?3moK{SIm'F9ǏQ)&_yrw$yVfn\Ny}0 ;גN@l49{~z [?q~= ;=qu^zI ]dݾ4#cHVJ:9bZɿgHёm ׿}ƪrE9Fٵ+駩1\mW':_6Iqjܺi6sv!I]-udqMY^r;'vO8o vp1oJwf4yVnz $;Xyn r[8멥E72{xtr}5oˢRk}ҥ5WO w_/qZeluCmNUB뼲'w׫q}sVK_Ҡ.n#'n[$ {rV~F-=Wo8 cpێ8?_nik+cY$x'[?_քvv׹bm[e#)7c`Oznjvn֭~#,NwdÀ{cizmks7NKl C0~dn(8˭W~U(v^TnkUvQz8 n~^nIoqx/v;[!݂w?7w4kݻ|f S) m{:sb5嶿;B؇x{^:칭m;vlwyvzu5m0!q `omM4{_3. N6wiA'se_mplU6=w|h[3~|10r$>T wT[ wUyrch~UX2W?Oƅ[=I$Cf7GJ?E4,!N0pq6}wTn0W 'N߼͎wdoRM'<#(4I7#?/A;OT{~'=yr=~[mMn! Bmͷyu&|KX? 2s9<ٿ+:U'~_1@Ð|`r~.f$ֻ$A6gq[~3It1Go~_3oNO#1&?5U{ݘۑ>UgPqG~?JF?$ڒ~ymSG'w[' rCʄO~~_Q烺WbF (?{G5njۓ͋$`13hڒ|)\u /چ k'Ir7{EaSo?ο7j)J{vW^n  ZT{Npc~?AЕYwmE IgARmbDoP9|Jjm;_8Fie?{.koSthw^F]0 `Xln#Mo.Wqwԕbf'ߏ='WT5y?Ϫco蔛o0&wo}0O;jM53FJ1X#89v9sI*O]h?.>V[uYQS аӜ}_wm}!ƻ|?ªGק^oh /q= 'cjRmt e]/Gt^bs.4< u YpI=L䜗-㥺׭1`;9_ b.6NnseXsځSM 1ǿ^]Sn((U[dq}ͼN>u_ݼ\lm?hnu۹2rJjܶA,?j˓֔G]7`}:ʶ{ʩ;-A݂H m_uΚ=ZYmǂ?^)5ۓ^@xBZIZ_)'֌oh1?ʈ˘檒vl%`c#3wzuCROa33؞s}vғke"%R/ g(ޗ: ֯g, ?0NJקX6_ c~ҎO2%$,Qz;G?\;Ks{_v#UrBl?.qӵ*r^_}HTˆ | G[߻g/cw֜#5=|qsr~;u--7}<#h$s{IYX(? eqv9k.o @'>eoJ}W%[[FϴdgRU޽E'TprĂs7;Z_:pѷğ_^,IJFzi_c%{%qX8$sSn/q|@,ww[WyKTurO ,sG8&MkKRzQ i7]_Yۖ o cfUa>lg[%8קQ~bU@98/0B([~`7m9*cYFi_=ԙa㓐jTc^[̵be%n8w?5JIܥOEf=?N=Gʻw+RM> п3Z[ Rk57}רJJ|ؤl{g )ϦhQmGH[۹G6T*z ۞j<-[k "VUc'i;6GT4݄ 9$*MjR%_HcE;AY)Å>G{Zwbr`n㚶7!^];Go]dE$wgsb;sTG}_ۮ$HTvܒV^zV<?5m7B1/~ 1\BN/*>`w~Ү<|;}w5n ğ$ZR^]#1c*w1vz'~(}owfݑӏ?6+5;VbE;z=$cϭSJܻ_j2s1ߕeePK>l'PԜ߿uΧ$lwO"DRFqw;sR[ozxd/zzrZ_hGv`>O+D_U'9?u^O01m o?xւ]7%+k5.;@o4m9Q2/̸>siimߧи8/qE@s `8.ꃱU,OzsU%g?p<=|a[8u'MK׿rc*88z:&_S9*r 󜟯ʛ?3XGDUӨZq5zvrF@,{zԑ)(*q:vw #+?zr5P#VRy>0I;_HoGQ7M]ߕ|w5)Jf.WRïo~ZZ_vE'˗QAF;W~Ľ[n˸^Q_kOv>{'gqHn JR|ֵݯ}N_z ?_Φ?LC ;,r1r>oVv^~`ݵcbg!B~aӯ`Z/pOˉO?6nk*Vk"1^@'=S_b/Хpb`{"MA[a$1y`(Tvl9Vր"1nRO+7MsTۿ5WmDnFcBKx+۟CW{v÷̀'hߧSOfC:oTko[)܅ /\`*ۛׯY{c~eio1/+tzy ađrWWBsK/woӸN9SoۿU([])OǨmW9;{qЁg_V{|XX 6.8'?÷:ַ yO͟XD0 ˁ߭Xؤ9lzewƒ9Cw/Vyg'`h8BZo{P0a<zrjI$;2\gփaoȠU՟}"~!pA 惞RQo˿o#6b~x93|uj9? ߧ9c<u'bksKPC3gisQr(_׫P*I9s_L(>Ѡ1U N+w'{7{w{&Xm8^kw[s+*w9{P_y~qȝݽb˒eǿ_xj'K6 Įqoէ?M"ܽ[_q"pw3l'5TdnEJN53~c@ s:Lhggn^MON[~qnqK1ݽo~lv_]07@r9ܿTv~d7Yxˌ3`ܥW徾{ܷ4+j:8nm|{gךvrRO[A\޹fQzZQ?2|dº[qWk/|h܅J<߭ 7Rn#X˹.Y9$>jr{u3o}oLw@>NKN.ZwƺF@=p _imy__y,\3~mRiR ''hb{Ttg:Rw=GR2 vҜyuצNjsuރ?-/7ZK' 1Te!ے8t'FrKU6E9`gV>볒_YJjUӷqӌ~lw)f.~fV'F@#'9{^j|0s 1bX#pG_~jIbyYH:|ܯI<>֚y%rQܣ~:a7ѽL/8kw+┤F'M~Q$>Tp}ݿ/={je+>WncƉ03ʹݕ*"̪RuVRF,Ó)v:]8o맮d"qS季&o?Fn{p2Fvkɦ7riry_?puPͷΠi62Lc+Ns[\wh꣫ݧlrmu{_SOGu;* gT|jy;>PpX7Zҷ*V[rQ{#mnwT' 2@y ;J61 dd\wT[n־n8b8}*Vqi'}_/&û۾\zzҽkN{+|z bBF6 ۩G7^ګw'$I>q~נI@O:ܒ(/7QFB9pݿϽ.x+no_2"PJ㟙j9]uX( 秿~Os#vԹmԮ~c.;nLtJWwnnySl+wtJRk[iEէ Fv7z +8o O^ P7dSo+uW(ݹQpG ;riV-}{Kd@e.߿tԜ얿GܓfˀzM߯։>^}7Ԫu]ۂ8oSBo抔߱>q_=7gSߚQ8VJcik#yofҶϧ 1?tWo]y a5}6Өy!,~lmּWoR)=7_;ȡ'/ |‡/դw$1d}6t>(m2eRU/)[oS n m۲>qϭ#'9j߭5̒_-_,mvwH]kk_߹FU[o~'em/Qt_t7=IDyrpͻ;_iYA63JR;^y[A\ɶٽ: *wlGp\s\Փ[<^P.X.^[{6ߕ~\mҔOo2%FTrVۻcnwtW3 5'xw݉O ˜s_{NQq߯ ɭ%^۽Q$o`U -~d*= E>VcFֲvoV>Q&d`;I^_m3LHy_ΔE]O{Jp$yoV8w?"vr^x'8&FiEm[/"0'͞rԹc~L>uiuߘͮW88Ogٓ(_GƎŜ1lbP[ޒMz6hPۻ~KJV3u.mox€wzQyAA_9 ݻUp? Myj^tヒӨAd2 v8ORycs`7??zY|Uqc4-.╥'/W{5IbI,rG9;|Tߪn 72stmcO%.[:bޠ d( m,05$s*|9_M[]n>rž?}j;߷G߿u\~K3S?8^_xeۥ0999)2j6[v],+O9zo?h/>w8+.TA$w|YWJ?|;rN?'֯g{_W}N >7xM3|!9-}&տ#Rc37ʻH\0_Ε4[_{Vj2wzڭmͷi+bzRn#}ׯFQI p>qc#).4rw9AtnRoMƜ#ݭm\a~|;/4rWku^IT*c]2ھbվk۸QXm}Pn&=kɍTӟۯM;;AQ%|yq}EnKwqr3wwnz>_s1rHcy6єF __9{;޿HorO/l7\?*sj:Tcp2ēp:m.}sj"v߿)UqEw|swնڧ:8d/rqӟIOno]Vn9P=~#5"+o4ee qvwR_[FXW?:r5ދ^Q@I݂x+B^roqƏ.^jUpx!+_z9r魺}mC^XQ_EN2wO]bx 8?0~9F^v{6rWZW]%'ݺٿ]6!Frs3)'E_꿭Z႓r߿n{&Ӻ%8{c7Q3׿*TZRvFǟ~oߊ](= g}9?5V~T«^M3ۆpA_ieKٴo/xh#'ӵSGІR|*Zvؔ؏ap:Fe95+i眬mm+ \ [ssYK[ª{;w{==zn֜dy&ʢ7t>|R:%xB6]X#?uTbM7vݻv$$(F ~`w̹ozSGW?˷Ib*̎c>V^۸ٹ=ooмDS}o[pÚR{g*#, ;k|RnL\m_NI4'*N6%$ M?{鋼uս͍zrY{ZMzyE;Ogk_ߠ0WwORs|'u~mI>]:>r9=~y'*)l6Nyokiw5I-fBQpd'w\4<¨b;7Ο$o=QAnsrI=/tGXH@_ή g<G}vӵFmv<_J[w:'>fzqr OwzH!˜ۀ~_=io_=K]lc'qD%|;׮HWCQʏw6]ꬣwR_-nw׵ ]C~!#ۻ8~nML&շ׷ݸ *pOsu.]9[ѨߧcB~\嘃|m,^n0ŗi=1}h1s_=l,X*[i&p\ovIg_ǯ5O^CHES[?p2r2g *a9Yb<䎣|z91O֎tݯi$^wzr{=(|ƜR`c!HR-)˜G~Szz{_Kħ%,[pOoop;]] mW8M JS?67vOI[>lF9#U;˯ވR._oC)X{}b-͹ן.gw 3zig=_{^8)z_փ dg8Dk9~}NYsG|ۿ16Kw:oᭆ<3jz_c.+"A'm?45g}ziO_N;zd9] jq,dg-1R7?_Jn~yt}t'o@1ǡZp[z]zZM$:W~AfUʒN{No{pȧN쾽OvF.t}HTь󴍿6n~_9rqk}z1VȖ_wg6c֔]k_` JTzoYG(0?{)Bѻ׶m|FOO^W_tEC[O^vK.~?{io)E)oo_ZŔA$_?*9-wR>BA9ʜ1:a*(nEQ(?@7+~ݹ<i#in\NT4߽`˒T-gn۽zZ?oۻnjHP`?r/ӧOtd8-}NI=Wssv;J浾]69 -נwS`Bp2rEsD~5iy "`˳9eow6ۍ{87hy|YU]3~J +8~?6Ü v_6Vzi|lj.ryGԹ󹚲}_$7ӏߨ|&iZIuM]`݀n'ϭi%t2yo߮! h22:{/6sT j/`xՈ8;I}swUXQֻ_:2X`yզ :*]vh^ɻ_)֋1XIg 1?ޛj=7K*qq?zfSM5Gwӿm21?p(uךk܎޶ӯƒJns;; Ip7FC~7g: WbRŎr[~:Хz_sNovǯG1*/Z(tS';+NrN1oɯ]͹GP@68ojVWo*1r.^*xcӂOQz{]͚Wem[dup96B]e,FYFAM=k=L:Wݹc#Jw罿«QOM砛wg u?͸7}M\yu3%*QYJ)vJQ\+N>JWQ,&NqzE_u_PnINK-/|D-sy֦oz(󿓿;,XqSOۿD sm\FXv;|.jOs/KOϨ ;9_O\=okZկdp }}\UBA?e]y[aIF9{>{ vR"*~F$douD5v;1;Fme V-+_vƮ &3z@Icw.\l"'{_/;S1N0$ĪϮ 6Iz zҪI_E-{oRf!95vCЅudXan@Č@_ݍw~~} US5[nx!dB'/\j+g&0RTߨA+Q2O!2>l~^;փ-~].Xq۹Q|[S@Tee-v [pqBͻ?='uq֋5./$z|~mgN5v;!rݵeƢ~wlf-J5-gT pKǹr6{ޙMlջbn'$P?@$ϭcv<_mwD ϽtB/_{]UrI-q}Uva`qP[## ~sKEeo͘^ _OčNYЯ)u+YE%}tu9}ӳoAq}Ƴ6Ok濧rF|R~[^/Kv?\~ֺ379AtFI3 }=~=y8ѿϽfo쩤?/g߯z*$~NIQ޽e~R28\w~J\6[[?nGHOeorY~a>Q Kn 9us?Di‰K/NQN_{G4oB]Rx;Ź۷^;GFk Y)+k)7lV0~l_|&{/n@׆1})%ޣM>_n6A<y9TZ;|e,?2sbXªvn>lupzۿqF7m:`~ߝ9ϗo)BQZ*I8 v`yj,.x*Jh9GCG2pn>Wkzzmdll|wngޅx]^oW2uצwc! 8%&]{u~wb2`J?>4ՓԾofu%I1DӚUo2UE#/7C}ӻDen4|7'n9;yթE;9_m1 ܐrNsOKZtQ8wԈA {=={ƯZ~f =q77;=o̤Ӎ;o]> s zO?6}>i-Uf'+Z]W{ϧ^_){D]53t(XܖmW<|ׯ (I~ނe8n_w˷Qu7 A0!gZ_zRk]6+(9$>ߕ=>#Q}49U|Lm2s?ϚәZ?P[_`3?H Ec?+9(;uʕ_zAT+u]mܬJ6{Tiu~1߯OϮzK.W{;0W_$̡{aWưni+mk}}J6}޿wn 4a7#n܌ߞ{s-O/#Dwlc n=cR^ [3ǿoSi;ׯ9I'{*8`~m6=%rFp4]{3;g{D}oӔ;wݒ%h痑%k߰ͤQ\|}ͤ1vWy,?Osww"_9.[# sÝs\9_gg5)(KK~/ϯ mÎy?Rˬ-~\F .([Z$"4Vz dĄmnqU?wn>֣۹0wJqJ^A(jgyO's撋߮KmmDv d?_-;wا[/8 =i(ofR7/믢;xV? zImz"2Pd)~c]hn~&t/*ibG8S%gR)ֳm1E?1z_JqQk:%:_>UR0Hɴ_֧]ޯ4nr:猟hNWӽpS?͑llrˑwkn{_MGܕ}ll6yZn_O)PXy7u5'~FCu\g 37QS-{?!9}{[AUP|̧9^=:+mߩ1Vy8I\lar+3 5j+ImDkmG+~o6~1rF^Ek;rO7>~Jn_ċ F]ۏj%&N|߇Bܛ20͏uW2_];;u*QI]?>RK$9P~ Y8Žt/N!ߌAf~KvaNn-Ȥ˿0<^-yzpw[u[2\:WjM{?B8Sl``NGWVv0ڴw d?0֋]SRB=矛4/*vu#Qxz__rWq_$\&2A6yӌ'g8T[u$|A^ܹ\#yJn;ϜoTrK;ۭr>ΜTbo^s ԜՓ~_oA6p!u֎c_RI@Rr>ۅk7Rj]Vvy~@f1Y_Zi pn%Xp??jrU['K7T}?/\{|q|}ig~o:ܮoJ/Wt#F䞫} zՙFK߿&U18f_?zQQMzwbB n>f\TK/V_gtƘ+36\]%-#omTW~%wL}ߗM^;rMCns\G__si-ʅɿ}*Xl;zxn7|UJIUIs{۫w_Q%Ա9=yPuI>w}׹ I$ꣾA?'};g_|S-^Wdq6r0}GjM?_ rm7߷ϸҲ*8 2 ͷy\ְKv5Vm~.U߸ /=dVwDtI8'#$؛{6^W 8!~mkm"oUu!`) c['us%*bK1JM?̺JnH!J*{ݿwnש>bPylF3{nޛWtœd)6O$n,EG6,E*;H'wh1rZkzoq $yBKro! Owv:iۢ~+>k}_/R?,UAO?7ʟ;]~~lmbQ~Τ)=UK2n}=Ϲ5qK٫}+pK/%}_5pMmcּE;|*6ȕ+ZԠTUIr\L:SwНtU'ќ:' v\~[-o{9i=.(I$8EP?g4{1)o2H{yBy[^Pvǐ>oҟ2nɵh(w}='x?3.ͿZ6>>m?x)'o{$~[E[]8p~lKmx{{TMۑOUu_R}7NA[zΔW5{W}u*oJu{_6ePN$V_|+MmT2~*IuL1LJ9VWOPoQCUOT0E7$:'' OFHav̽O^)rvB$/O8IԵx>~nv\m[s{ߒ4JuwhqV',͜\C=?KB~?*J4f! mT. 3{QȅA#$|nLa{cn\w1uJn!Xm+LgnzOX֤7tk)O/Gx FcuSu׿TePmprqFCww-h+# G9>ޱz=>k)EM==UNQ_{K?;RV\s皤C<69x|sM'8ZJ+h;z b\}:m6 ]+dU߽AL`~Ikb>#f(U5֩IIo1vy K_ʦ_i;@ UH2r[g)>TЙsTgw:춶lr/w%^<͹%=ma>Zg\h( (2{Xݵcsy .n#w]zޱ^Uʽ~~>~Q <'>\?+nj'_q˧uܰ29-N2[w_Cu}˾|[~n\?_Ԛou߶V8SWee;~pnߗ׸9FU̧qݹ[+;fҧUߧ]V<_O]ȃҒWM"NLkU+l**V6#(^sM6כ8J)Ko !S|)s>W{ ~l3wJ\+zV"*Z?pːNp?F%J _F ($zߝLeލz5ぜ0 N;5_j)krgh[#D_- dq͟__]$WQTO?Q,6 d^nQvo9wd(mX/;S[44Ԯ?)}Uqv3m~Jszm^ڡܔ wsqDFw}; 8'{] q=.p/W .}zs.KRv9P29'tK*Ob99.皮ywK_۷pu;@rJͻӂmZw& [$)fqKmR;h&no4KhtA/z=6_0vܬ2So~u65k?/64h??=Yi8Y^9R{b<(wrfegHpߪmBl-}?ϯZ%{߁*|p6+|9/^?3G3zjr~_Ւ,Ax &]Ψr;ן$D%NH |ӄ~Rr{B|62튗&9|^0 B[J1^鯯+8?ɿ׏Λ_ t}-G Iʍ IͪB-kolD9]r<꓍'nko}0f`YݻM)m_YI:y|/Ƞdw0>Aq蟫Y(pN\osy'/ȑHv~79ϯܯ +{v+ǿR7_$uܡln=o3h++_Crog_SO[߷H:|rsS%sl)d ۚf<њ˯rwHدO֓in˦;+|}Hb@?.s/jӲ׽rFqObwߐ&_7 lm>Zߐ'ېrI4)+3%J/TЪHO?_oQYW۸׿]}o,dV8o8ۏz֧n(~@$9%op6 !Trg: nQϦT{{oq$ێ{}h2j}0 I[e?O.AXgoΩms?仡< 'ٷ}*DErI?˹0\mB?_ץdv6R߯֏nIllیj?N-Q0vǂ@9 }{ݭӽ Mlׯ LXrO։Yl^Bm[NJѲci#w}Q̟_\[Ͽ5T“㞻jԜ]wn+^DK BWb6܏~V?/=躽:J^[l "B{x;=ܙt.|$G۝iAn:H83ߒ֚vw4qs{[[x-'=⑔˨~\ wutƳ=Ɉw3N (_?M烈YJoW2H`7CFvTy* *}TҽK] HЌשh:#I%.7TO+ݟEW;k(@/~Tô}R6B@w=(N*q{[1[!f0{M8+&Xwg+9<ԍe{wkz{~U!v_9;ۻk_O֛9.}yuI$!n[7j;T#v?90)`C{ǿIuv6l2Wo;b6w۲qt.Kt@V WDcn(B ݍnP;;n .Fw_zAEJ2䁂C~o^}_֠^B1i5g4ŽGf`vvw3K'߿DC x=9nrrr}˿c FwTFVfO:(H'xnxj*Tw:iS}>>Wk ܹaw&$tfǿS֨Τn: p;/}]8pJpsmٯenDeH#D_](,T(ݜ͟ cR7~.COG=N\ywq6nܬ ! rz]) ā.Հ&I;o[ArkcqcgG4{?x^7nsʀNw(p#-m45c?["ˀ@r;v/ƪRRsʛ7yEQH[*[mfOWs +` sHU(Ri&k& _{+G5)EO"pMoCJڍw~"=ǜ{^̥mNz\9lBoДS25e}Ípۂ.?ny9{dm\ )9!Üvn}Ů܀|ܱl] &omHc̙S<¢9˪GW9Az__޾B3rЯͷ-t%hs%0?]}(ݳ?ˑSY=qO%b'^=zsT5Oߖvӧ!b2IYZ[?^wf䶿̍ m 㟞>i߯Kے#GʹiԽwG7.]F'5ӻ܉I=n m#/'i&29y_3M$2<>_k7_{jsѯmR%C3b${|*Ǫy[I{]/WxM~]Qʥ :V]G÷"'pFwssUΓZC|FOsziߛW'˧/O:4bprz}(׾ߎsEֽ.cʇ >¦2 h?0p|/{|g5$gHrY7SetocN߯k QA?7_7t2-c'. ;@?=rez֢m9VSnpG==E2N߮!"0'Q鹯7o4@ 9 /ӽSinu &䖯^G ;׮O̸_f~/UH _z/vV0ќ`0߯m~U=I"HF;˷](:oo̙^[~$pzgsڨJ)mku]wlph5/pMp9Qr?D)8k9+3i}u't:Tsvo \ sׂ׊Mu;0X9%F ƩIk+Lt=zցY+6׽5Q_U53hXA7)n)^V]ѭ5qZkr:s~wto}Qͩk[kż 2OOۜSöղ@,W~׭w%?^CJtz[Px|烼^_3E5chm$}ݑןȣY=U[|78*S=xZVRrsNoMۡ>I ~oۿϩ0myIÎu遐A7\}iwnrѿZ*jGۻ;V[j{_ŀHYv[=wM;9eNWvnW2v,X2#ǚԘGF; p-߅SPMB~f`rXrGWY]^֕niKo{!+Fwkqw]zzs>X=H/ T秺L+)m}{jPG.~7}U}dJWmHf`qx/j\}= m6oX%q7c6?Kcsv`9G}?֦ K7 Y(E{v'XЩ\<L_cZpr1|gyިS}<W+93>uMI"u?z}Q]x뷾~"FԮ}.ucm}ݎƝ_o$','qSyչZJ O[};RW0;<k;{;q|#C0!k~mfeN1FB<iۢ~եӷ˧OxI0L/_1oi4#(ʀ)'o{) GBNpFHmojTwיz|xzwA.*R}|!u!m6?5\Ԉiݿ_7_$a977k`Mfpwg->x&qk]k/{#wccpNi\`?enYzsn6ޑQK#R3N}VIuV^Mm?J:o};k!|. goֵ|_mmk9e6禤f7]QԂ`w}ݿu \fl`+B{~}oeJ2q3Z[&Vw ֜E4Vw`Qz6l.߼jQQO: ٕ́ooUmKGYo܍1oև2?Ǖ,2}?{3QIu>(<ӌzM޿6|smjUWBdצ?mLn.I`FByv?)/.C ' ӻ[=~<0@n[9}ߗ-{f|%lny?T9'y`FJc'zumVO.FCr=_J׮fmC 3ϓS;o[({EߧǺ|r :҅hyU5_]w"zmi)I][*7'Pe~i*WwgwTnuI_Nդ$j1sMޮR(Stt~Oʸ]F}i'u~xq[^~"nfCvn!&}3Xf5BSh=?7ޢ^ՉMTmЋRI>~X^w}v~#z_i*23Yݦ4vuƄ}iIi?TowM*@ϧ_YJm.{|gmG0lwVME^ouQK6 ᙹeh[݋?9^KN'b(0{Kv.X?o8mk9~uE>w9nFߘ =m<^oV[or6]vwbO<}}sޚWoRvDw1gO4wۜI;I~0h1~l7I-8Z}<;&Nm U[o̗}LB9+?7V۵6\NDžݐ7p 97|}6MM~fY~{i&xcSMzΉM%~96>ԏl H͹8(k?TW b2#8ufʜ-?_dOSw]L_Wn=+k=rskb}oݑF c #yoOk}R02˓3n#(~o=4ꜗ#9!p+p;إvHc🽷4W>QmMEYABswݴoGc0 bvTWtu:|C|;-}n#Fp(8OҌ{[[Ug?Bg 6v*%}]irElM$eߓu9I]w༽u߮d0$+`r>oS=$WՐ(#8}׻jc%{oSIzXZ+."H ?6z&U"ދ_Ɣi];RvF3Yi9(6O^y#}-ɽ=? ҧx4a2v1cinN?P=oѿh{_U*%EZ>('#o_K};'۸>~Ͽ[ )c{ ͻ*m*20g+=L~%(TmǑRMjLQH=_26Ψ.}oo]>c<sS6ߗ/OD'hÆb1xn.L _]v'69j)FO!w~S۾Uz>V3窷h8݃?#y_)iK}*Nn{-a)NOD%+yք7;FJIAۃ>]qYՃ.]Չ,'붃zQMsOv' ֒wWUH$#$5]3w4N%JwoJmR}mzUGS ;W9%P-}:w{ӄ9nMRbG|n{*]DV׿X$Bc;zT-4P,]܆'\1,?V8=;]F@v^/QUSJ:4FHaP y\\-~c))%gm %@$1덟vR}oiɷʭ%}Hg[o'q[hf އJU[_ ]$uQNii~߫G<$kgJr f#"[YU5ר+6nXpSg53#nlƼOסvT8"6~֤G`s9ZwE={~\~{3#{*U$foz[m\v-K3nOn:=ߧoQ3̍=ni-;{M]컲Dx*~44iYW`spz6/5~w1m'v xmr~I3[]G 17O۩@GLz66ϝ÷?曵ݶ:OOkD ~|MI7OKמI|d|rHRz%yi}Z!S3t5}h]r}~"#9/pv9˜/Z}|Bcv|w}ݑpynCUwcww^NI!l%P{/̾Dcg}~չwWqY,ο+IZŨt:Rk}~_1$N0d|շҩ٧+CGר6T!Tm۾mVu0^]ɗ[w>SJrtGE;+ۿHÂRիtu\w۪HAw%{;^[ &6+FK1|i&۸B-zdQ nm|^x~c%Z}?cq@t'p8˖^+~G0>f6`.֤ҜV5 /#^?j+X2f?)|1fZ;]TOӯqC `At]|)_}}n#|@\N[^֫9e~wF H9{]b|c[34ݭuB0OMO y;w|oi'/~:ۧg2N}s]52QC>dR ;՞l?" Nu?7W;'J\o$h62s<`QurǗw~C0m#޿{wgNRr0w`aswqִyoU7MM޷d^P{wͯSz3ԏ}OE]eu wqߧҿ.i^[>H 8lv֒5.wn#9c'LiҒf{r2ףSn45㼶m3gi%HgU(o^y܉ف^ޫ+_3ԔdoǨfAn?6n{u47%g{cdR 2sa]>>`р̠N9foֶ¾%R~ͭS\.0w ?DZӾBr Ӿb*g[/YŻ32O(yI{N[۷>8сBm'b=|j\u_=lkGЅb?&yjM|)>ʥ&v׾ݾĕ#L)MĚ[}w;RHwnk]XP+w{דAu_@`9=y?Zwk2r@b~;{gv}ZĪ%կdݻt?BK]=gCH!,2 ^NMJvGqwzz2ըwɽQ ђ}QzykJ0~;08 aYj-Q=du&s >(oi {L.NOkzE/^BiJvFJvWX?֭Ic+>?O0ʸB\Z8W2i7Rq?&{>uv;_x6twMbN:69 ,?tRjV۩'pv@'#5k2?Rj}]ﶦnITz1*qӒ;c5m<Ћ|>m_J3W2=>`Bd?)ZfS嵻ݕ*r<v_W̹]̍e+嘝<hRm~ܖkKcAnCp6kM&ބѯUtQn9W gwU_7ʾ[{ۯ97 nuZ'9tsHE^˯Q d<ڿ~Zx߯JN)]k_?TaT 6{IQe}_~)H,#{E\F9`}ڳ_eRWv0U3ž? =ظK-^ywon9z)s~S_>whz$O.q=j*tׯۜ'{gީZ6M[Ԗ;i y?֚Vm;}?]Ghr[c9w>Ӄ] +}]XdmA_w6}vwr4`azN2_3Tz]… $=vz<`g{2;mj*jս Z2T9-tЫs3}@z7皸vzEm$g۷u\0_%T uǺ5\{kJV_~a۷~}NsM/?r\M~B8,2G򵒏5v3gwkj;`,@R:mLƮ/6uwmxԶv /*|槟cu#/^W"0rq}}u^.? yrx|QmYͭy̽j rFNyw~}vbPd n?7Z)?םw%23j| znےϵ3^VwD?0n *]˾ߐ퀀ň$cSLm;澭~x@ 98{jӅMmm}@p3۷{sL.ӧhcA?y̩ZjWbe*G9!<9*)ߘ|<r9_nhe?TiȬ}Xdgat>/Aƫt{)2;5&9Gq39Sdg8?Zm'tWS~͋s\VKwwX{8_ןΛM-^z/]IT֡,A3+x>1NzK)9i6ƆF ?7ޑ_RjRr[BnP9*JI2iï̙ b>Q^B}˭O+/S%+sir=q$s>V=}_ԉ-c}v5>e~_Z.ʤe3.ފ{z7g2Moo}_ݹx'6ɧ$4+ A9{P{2cܑQoϮ*}ZIfpA*Oˎyr/jr﷢)Mܐ-:Pi>oQ_@Aw}n&ʡ=fN{uS5W^ag !9niV~[}ʜ2U??~ q['|NS{ۗ{`nPˁdmVGO=p[tկ1[rX϶io~=S?.FN:~5+UD^^9w;UVb׽[ԓOpCz\*=[i=9~9n2濗ԷuUHmǯi M+?Qza^6w"21з?RibB6sNww~?Ygn* ʒ3?Z'}QpK7U V8񣗗X$o2&f7[w*p3s^etkQmwW}<<ەrLT~GW?#TgʀӒhNI8_N\ r1K[SOdݩcJe'7_ 0 t TWߟk4뿩Ϙ[.ݻs:|NÆ>z?O玵nwJ澶rMC>?P[3nk>Yn)qgtʝ5o-zl|ßtT%\eAdl6sޔ`RMuU`2W~ֈ[/ ;wrJ6co{;YnzI^~r6>俯nʤ}}ݽFGIryAZJV?=ShKz1vm,-beOKou`{ŷߓMͭjz5 cvs-ugkBNTwTxG$T;jM=[k_̈͹4&DUc%YSOfTR[w߫1̀m`zJR]7_NŁ w5R-ˣ8 a7s?ǚn+M>ݐʛa lî?kX[]"U%o=o5@*s{*$mĥMJѬk,psķ'ֱM~-6^?Oj7}L\]za,O l})%0{߻}ߑ #y+mN QznBNWq=7JZ~^^~Um_ cKiUZ&L0nW!8QKX^_yF2v6YCٸo.yw#.Jˌ >BU/?p\~mt \17M;4qVꞟn,Jϱz/Fw`8 ӔVOEnȥV۔ߎn˻s҄s*mtAHvϺՂTԞ4$%r=p~oW8JM}qчJzor&]ȣ9U*\U4ⴏsKg~o49o[qkVFrI\p6zN̜YX줽2Di Yx_Ê? 6 #1Ҧ1[܉TrorAPq.oIͦOlAc;00gާT_>H_.S/8Zrj}_+rt#{Ŧ,H@\à\M?ho rnw^Rz[?yuCT_  9 FOv'޿ɧ +mz{n0N ӟjmo_51rrǎ2O^V[c{Il{o+DIo=sS_繣*nZ=7;g#ܠ_֨愓ݺk̜(Rpy> ֱ߯_s mM8m{_ƴVZ뾿gDW_Q1~^_os>k=<}ȗ-]8]k$}w8jtm$9*O!z|ݾmՉ*Kup@pq=zSHbF>cz7u\gwE6tnUr6)|t.>e*G㓐>|'ʾ<jk]cdR[h'皨˚lMK{l%p8ZJVcȭ V m??AM]޷pIpĜɏVb9 ɻ>q,dn[9 ^2m+~J4.(wzǽ*Yolq'F~~??~oq惢3KwvDvr7^1ٸWZF*zW)I{ے|u$&2濗PY @cjM'ym5wlݝt/ r<4Eq1O`7_Ufa 0#o/ۨ1U[|cO$ <<ҏ3+i9{oFzrbť} zo0#98@}jMU+_PJ~[bz6XaJn x_TYf멝Zjw-o!KO~pzۿ*ꞭFAnp~3~_>RJ -ƿB f[/Y}a94Ւ# c }_~4O-s-m_=1/Ž/4|RSko> ( T8 U}}BY9'X);jWyqsKoZ*[-b?)l]V¶ /ѮFudebvN@]7~ѯrŽ[7 ꓍3R[ns`t4)+jHrn)A04z_3p=XԌ$n 8OsoO;;h/>=>d loYJ0r+b' ۯE]6?ϥnfA;_ UFӰuN?R_uO!eYs$ |߽5(Ufӷ$b69{z皗6ޚ]{u{v "( 1~{}?$k_7mɊQp/WߟQ|m$$@Ϯiߗ[ci{翐>]#SMy`$Zy_rmUcum7o{Vm^K]z))}yAI˗b,nPW8)/o~m^u0Vɸp=cm_+' i.YHF F}zIYzv6FY jOcڿcv0O~֪IR.?#m ye';}}y'wϯ[I?>oVS([覥%{߰IP3Tۭ(WUzj+ cOO/XwFfHa`8R.mԩ4?/ AWWy~oSRe)^nBH[p~[} 2'IBK-h\0G_ǹ5;#Nmr ~^yہhPo[e9ƞ]pwt+q|}}pj~?T깿ӷP,Pz,0s}v+1j ko x޴qo?;Õ:^E IaQq}~{)=u[NNz=:Z%ʯg~)>dr@ n`2d%u?"VOop?Μ+WƲ ypsۿUM;|w 1%gw{-'ukA*16bN#}ݸ9$L5d~"*),Ğ1ޱ"_߯_$`3&K rv?&=[F:&vS~Osdߛ´Z %K_;9fs:E'T橮FvF;;ZK'FA{nfW3?*DqP~_}:U~aծmq-d()?XwYw~"H|݌Y'w qN-s_}ȝxMiח?w k^v56k"BJm}キ$wG>*oQ>SսIVT_׳َlŗwnV#m_߯W4j\2nw}}[%ea9z5 z)5j15H2G'q>ӧ1ri+4ye1ۏ_jwW}*|p~w?߯S2^v~$LB3mҬzrNwE/o1Uf_'[~g4#}ߎ|ϽHX~%I_FH~PIq[k|ja>}Y!b#o'(#IՄՓ}=;,n X7NrMk~ *OUαI2Vcxpyz֍n稹]~*I sӿ_҆Rm/U 9b8$Rw{[Zu^4*C}ESN̘E4˸m.>^H οƻO]/>5ӶikuwRv*?2%^S2A ?/>T) `tI">+€*3ʉE:kUW'i'o_T]w`_֣Jnrg-vMm̛cH`9BAHr[#Б3u7O^ϷϞRz;=sԂ:ѕJ͟JRoF0Qi pĶ>}֪)4_72k;[p A?ZBGݸwݻۂ*JGۯ]MhN1zS`s.en7r^;; >7{<ݾjT9_|CT7ek\*'7рMc~rvZI=TXU;F̮V=9 qRwwcUQޠljONŦW>3_M][ԵQ?vO_w KnN!^Q/v/_ÿ6ە!<_ï4u#__]w. Gwj4khO:G#*`˹O˭e/n)%~Gq1$u}RVvսQYq(;|#%'i/+/MsʯzeII5W= 䞪1V|u)Joo`d˰I*;~R7ŻToS3:Pqwy#g?֦rV*yB/vQ;#7۷+mxqӷn#2^'+YycоvՓ+)=?>y)~\N8<1v{ԪEGJ7C~V~ ?TGt4iz`q߅?ju~y= ^׺4o%p~b^7zf1VW^_ԙW~?<) ?{֡Vw_N8p݀r1~9ZtNz xPUW%lm8O*%Jz\ |akylpVoKDep]c)N]~c]HO; ?)9KGnwǺnP*F~9ǪS׾%Ups<{.'#;xBq#.my"r3zt?\IYi*w}7:( G֑t対n1*è4RkO/m,l cvo9.>^&,mj;3zM= J?:Yw*;OL{InxܡnGGq]Z[{|}qP?ۆ63ro2F>S6 mm:mǢk9ԋ__QF<~Q֒Mfw_rp1ʁ]#4@@!Nw9vs4kk<&71onY>ѷ##H#~4ueO" Q˳K|??]Z󹊮[~7t^Q=~l({빭Z^?Vdf-zZr};io rO] B`goU_NMZw-w,  gSU%zվf\yAl6AxVVՊe++m~uQKe%0t^I;xO䝛|Om;FVstiڡۚ $߿qǠ}j[ovߨTn[_E0 ˻-u/OWU}*^OpxH;U9uN+٫vw]>VlW%%+Zw"2cw|?PzۿqʥC2?ob\Lg%H66ݻߪRKD7yxw,;*v{Ӛ_Uil9c қw~DNJCopWv{깩ȃ(9r:}>ƼWFSHu_o=#HXkrop#8O[¯v'z;]X#;N1잟JMMJݾ~n$1_^KwMg̓ H[{p *8̧nǿ֪)I4}ISVjx$gЪUKnm#gk3G5ug7Q}ڧ>:PqR=ِ =s\oj$~o X븷G+l'k >Nq%YneXdpG=\$7h;'o/ zӚKrsOϯ/#{Ceʧ+t?98O8٬JKu܆8 OϿ%.kiR 765q+sm*cq+?7\P+} edf3?7Q$V;@ǯ+M'r'VrAn y5U)/jGKuQtV]$FI^1Dy.2m}{_<{ dFѝrإ&Wb[#$A':5,KMr]~pU$xdi*pR^}V1+Еq|5ms-_1q{igϯX 8'ښ{c+Ԑ<;SSa~Ҥ@<ߟgל`O U Nsֵod6z*=-9+6mw6U>oճr_{d. |$n2q+Ei_iG}$t H=EW4o{FN8V-zMok_r'}zffVEڹ~c_gDnK7ONw}U(&V!TW#ŝ`Rhwn>go;leZkro\b3 UZ$6|FnK~FTah_=h};/]-ى8#ſ=*]wf'$ϷQFNH~;wR6_SekY;Yew {4wjdS[+dd䞙qJRR-5r_MK|?=7~}v%Km˷2t ?ѾOn~jU{n^טs3矿^vwf<ҨrjWt(A@G^kVi([ܓ w_2iOeoPd` 'KOdv݄mpXrM\VkE;ožW>qL~sݽ;P.IWIho[^ y_GӺ,Իz pV^kw$P cmy;wM(׭۔n?/wGUTRl؉Ws߾tg~tk$6-F76C Ā>U%aH Gv!R{=/3vcw:VROxo_ZͶbbmH#9nߧ=x-{}D*8ӭʱʳ?>QUKmFRۉQA8qm_@Q8M|3I4f1 ` w>jI]$N12~o{ӓm I=؅ybp;Q}}t%S+ RAYvFXg,}yU/ E19كOҿ?'MZCgBjDmgo}snܕ}3nnWOKIHT271w/_P%ԧ~~^-8#8;91vM!h8|h26̛ X!N SOFڟׯAH;~wO^[鵷P!/CnT֥e(R 7OwCլi)Fo#*0p|*\~iu~|lsJB_=>gyEϻ\'`~oc.k鱌N1T|zR {V޿s4{{FNv-~_OY*iYG?ݡI s +[Sx?eǿh6"?3_NV_6R}h\`c/+G<E(SzAT7 CJֿףץ髽ˮb'K(6=}sZ9GNz}'U۝i~Qs7NRTPIۿwm~WJd?('C6}^+[.Zіca?;q}?:Rm->J+\8;z{b*7^" W̭;M)U=yJo'i#{V,t>}wៗ9^-Nx# uVd[O$;3'?ʵROXHf_{is|ݿ箎1WĺenWGG 3qҜneS^vk Sq}s׿=*z~6- ݻt7esֶ+dIH>u%˥۲U` n' T^!MWa8[zW>39I*w4.xs{?kuk[^1%)ۙig捰A:F*0w܌.3;=4MGE/>}EE'M6(^W"DR6۞Nsӭ(*jO?ޗTmlIak}jNm; c*+Z ӻ!PCp^6Y7mz({1!ۏ^?V ~ikM[~lUy Q:լ}H >8mPpU-]ߨ]F'-*|5l]O#[4NʟyO|'rGeo;SO}F$@d ?_ƉKr/spU(w5 M^{K??ʻzu-mvme{ȶryUun-/ONn?zy(8 y q~k+4R~}{+*7tLګMip`K'l׫~_Oѡ'cgwMT*QKZ/_;ihO]9187,)O#ЦٿMB_qTAqo(\o9-/Y#`r[U$m1WD*~{o׸d?=ߏ-FOC&cmze4ﺵSmzzyߩ" ӾS>?(Z{" :ju}g.eo]~KQ^6`F}󬓳iKKyzĻIX0B|7=[E'wb7{ct 3 z{z;dHQ6e 9?yOᱽ)s/}k]k* ʟzOeSk|r^컾Z/i 7 fBF?Pԛ+=C~\o˷Mu%JkvG<pvl~z+{ܕJIw#*X܎HOOz˲q0Io O36۵BB`S8[\)_;-\p#oRmnKn3u'mVDPGCz sJ?}%KU/12$˒ ̯ʫ{}7tk&Xe~r;,J6_שooNsGcϮzZMS~KQ8bCdv}0]Y䜒Ea eݴGC9?ƥJwqSrW72 ,Fќvxƪ]02wV"ŁFݺԻnߏ?o}}H[8 {_y ԟ˯]@SN?{fv>H?unh挶]1>і1ݎFB5GGDw ß)I=]cyoA0(BA?6~oUI.W@cGUZBjWM/ N[,rPw 6wo_ o,:?e?] eeC}b)\1*N8?.u4>Iw~BK]>~!dRHnkG8rƔk}^̒O@O3&=3s8ٷgAU܁?|}LJ%z=JWiyIlUۊvwAKJ'Դé]-=>ufr!迆թ5Ɲ'tt3nܥ)Ifg6/ 'Kt_ Y֓>}DD6o^+ziyot%;U=:8<{Yʭ֏ʕ(eA,j&H ç'QMϻo=o8Қ~!hVrcp~[kG'vד<ژk-j` cXnkg~xΤ%eG?doCrrտF2APJd]Teg^y.Ing?__Mg_V̍Mm;[N2qz-=SW@Ln /o:ꦺKs(K;ju%1UTgmߟmEr?RM*!ڪ Nٝo++  Sso={qϗUDmo;v.}YG_?ɚMv{#My.y:֒sУvKdq[o[_z_ǹq|׃:w"C2l)N1̿7w{߿RzZ@@1Oק.}Wzcg=j+{H,;tmDg~]ޟ!&5ت6~{V/N]z܌.#vFrTQJ}w_g JoV6a~]0_֦/޽KVZ|~fUS,v?|fe5m^t%TVRʞr1>z'߾gvo3tݗn 1 ЫwSSw_%k|°ܬN$+;gznz|X|F;NӁv6j[Qȟjݹ#.` Gy5\ܺ3&?N7z0C.;3+sꭖ=kM=7%P~}ʣ;s \ u~ U3oR_ϯsE/wg݋fb s1_߿s״H%&Z`aI99?8;}L[w(5K*ւ]zLpUR |Pǿ_; Wo}m9^2? U9b;r_|?S׀R.\+Q3?> )j;bK6FP~\⃢QJƲ`$U\nwu3Cc x'_ZMnqݒ $dzB-X?8UOտhݰ T 㝿½sǿc> z_߿z5}tcJ|{u/w2O{VNi;om/woH$dA䟛EifJi+4{@bя2N߯Is'uB*nR{q(0')[_!PBd*~ޣގ]|;u?>|7p GpiDo&1.޷j3p1˖Ts\]V6Ac@V~Ͽ֛iRq]17 9{dj)oiy2npvkoeS-MG |} 7S90d OmWQ|X6s?gSI-FZaL\лN1~m?({?Fq/T9=7QvB#ko0-voRU`p97mY)=hܳ1#?mh3_֛$f8/oDz~QW_W믯58#>^ŷ޴{j;pIO.?֧y~%]^ WCr~w㧾5Qgjb\ Qww[d޽ԪkUk׿IL}w)B*>Lcw6Z_3IEZ7׿]Wrr9?ZqrRFUܠ3dQ{j{OB5WPt;rO^AR{ Z^w8=O{zs'y~{D+Tm';OoZnmv%Q(-Cl{;pO \:j!G]uۿٹJe9y6ktie,9s++meoM.W;7ۨvm’2r1O=hS]tL'zoWN֤6;xjSz+5UI㧯J0,@֤ƫN\m[|R#f L6rW |.>i̛EF1؜GϵIoN+oM9\vݝT|~B01dvk+K8^_ðS,1v߯R~O2Jn}9=k9E5nڷ|FA8݂X?j{kOY%o$ai=>mi|wcY z4%[|"5$C䏽U}X~2o%]mп>j\kDnwQzmhؐGCת?gUp+?1v8,Ao}oz;Ɋ(B7\jX~]2E|>ﯨw1kz!A$= {~<D_ʠĨnp{qRW^>o =!9ƪ2~]t8  ۰8+i>ezAlgIr3 A.IoÉ`)w(W|mߢ^Jr*_Oi[[Jf_# dxr4.m~ɷ_Ir~fO_PoT/y Ud%GRlm7n[?wӌu{RhI6jxۻ:✼v)Sv0G<@^4$n x7,Ɔ~8.?_q7?& 0Of2/{?|o9Ԕ?m"EB qD~NڽABR9Sш 3|Ԙ4o]BIb{ "۳޺o@nAz}AZucBn_L,+uփE-z3 I,0[҃hEk}Ց)&^~c?7qZ(3){]pHL[)JoSq}~beN Rڣ.k鱕'3w~9Q)]4a gmomz44D~v(~^t^n~i_4jXeoy{S?v^:MG_O"ssS֔jk׻Yӷ~v2Fs=Zf+ݗJY>Q3^BM-L{mz"Xe݀vԒF{M=>S(v $m~w7 n.μIkwbҬRJj#&YRHOCM6(8@8bOju/R4w 򝶜͹y<yw4۶L-?#(-ğ_jk¤[5f 1+~Tz_yE̷ d6Nxzʟxԯ_׿TszQ{6qvWtx4iɽ2 3_OxzRTh +i^jZI;[Ie#9_v?Ҍvy:q~[%}FNv6q+}sW&v2)VkF7e3qCBZ_SnH[?5H JqrS޽P}Ih?K /Rz>$l7q;Xm/,}#tׯC@baO)Vn~VTzs_qoW$1~lpYEZ׽[]6{vL9#߾_Xl'q| ^0ӿ\z q_ڂF.-?#)i $lkh9ܽ",8ʌw%m5Ӿ(ɦwaI`pOs_Ju-7N}w`SKUw k2ipx*}y+vo\"K},q/֣y_3WwIUs.nhḨ |3ne-JOu>VQـmİͻoVʭ #%IqyoTiS${7uosQ}owk0y,\lT8˳">:(v'oՏSmsJ1__.$|YhwORKaQ_Ϳƴ9VrP8Ͼ [^Bo+`b20AoǯJm+^.6]5C)T_!M89-o{}.7%u*>#'?Æ?3;Nխ_hNKe9^0~˱.v/.[ץ˵iBs7]5IcXU!?۪R]٭Xo^Ӿju8o{BfxAP6rIЇ|:q{~"uz($8 :sju~=r{h do%u?BM/* A#X~tYH&{&RéO]hVOo?s#6Ecc~>;N=o,csnܮWguWd<+7}O5PI5j*;A$7 *p/k(ztRz}ȟ+l$p?Q59%'~owUzٿ(P[?;GRN!P(˜9aR'%[_&5R2;c*3&=zn ,N8پ> oN߿wLg+ >(5ot1u89ͷwqPsԒm~2(a$sSMn}S9?ϧq$QppG8mh_mRvZ;]w[?q2rO';ֈEhHkIng;@;~\{ZR 09'w?MTe}/sR^F @ <|gB03׿7?RO,`y#?NlI_~>CZ/` 6wEjd {ݍe8ԕJ2{& ?oE@h;x ?_ΈK39>F]BUہ˕SlMi+_vs W'ݺצe]7`PN6ߛ \hmoӑ/~/O#v|}ZE-?=727wg'_֎hyd}S?VikszjEaC0g yeveR1[E7v6}Imi1gH37N_pU{y;~8O͕o?Le}6:H3 F8uE)'_AYF>l?xvANeҽ}i 2Ae`ֲ[єb[g͸3-_Z)b[o”o;TlNvYy>;3IYc;pNp[|.[[@N?.{T0w6?_Q ~*\ |B?h:l{i |r{͖;}Lme{#1)U@x,U$9Y t҄kڵK=DFnKև&0Q叾{߈@m!x=>g|Irͻt$l!eIkI߯n&a :c~%Uir_yjK  h_ L){Mf7߾( `J8|鮦冊GNG__wr罵_ք!l.r[sI֍~H'%AN[>"=KչK~IOWisg<|_ӼyNB:#}tjg?$y'(l|vy:mGw \q?q :uc$vo<7 ڟ'^V24b78Jq5R|68%߯_:u}9CEmV!a\ bߩ_]W?_SHRWObA9==}zϭRBf!A,@wUSvW01kzy5;w)Rk}ڢjOğaAfWw?2ty}nf ŀ9cku~v޽Q08ޕnT~@ryeiebZ#Ldx9GWR6*:|I A\)ۑxkN[/PxTW{s~{g'_P]w wBwppqZ(5ߧo!fr2?$rgs׿dλ1c<}Ͻ(&Ӝy7eh9R0Z~?UgxZWl]8#+?ocmO?!VFg9<\ڍ꽻/F~S_ML[j_Mj׍%hЇb>S]p*p[kך\_:ΨE5zln*0v܅œJZZ~+8;n{4[_%uD+m}?.‡OG$4ZF]ejv({?:%S? ,SUVk^4/~6m %l^s +ܺNI_YPpą;sùo٨r7qJ{sJ-/:sClO?V.'0r(k:Io}nMi7hNA9%IN}}߮K+Z,dlb8鏼~ Y%n97N|2ĭ/Y>_թ43r٫.+R`c Iݿ^hMvaFOӳl}mtS~o ?Ƨ5ӿܺzCcUqqQZmu3ei;v"U 9/1mS74]定Z pJ돿>=*5f[z!Ud֧ Mn%I '}j1CᅰO>2 gwa}?z1IuvV@WJn>~9Kvf՛@7d`?^̿/j!{kO)ꭿ#e8I>n=UҬUn1#Vbn'}(nڳ(MWBp>|s<НEJnk'iz${P'.U{ko=@廒nm˛=z#L6`9҇&׾)AX_.yA8;y<&ҽ[씾-495|qnWB-Z:?/œ"adT 0T](_f _* ۛ/M*M<8S!9E _gz~<{)\1!'/3xK~99S真M|ֿ̥E&w7ʿ^dӮߖBҾI\ѕ ͐6Sb{)+UzLE`z@+~u/__M(ыWoĻ`s.F{?M?xuA_˂~^ly~? 8Ǖ(Hhy]Xu꿯> v$A#~o~Q߸I6@qaqH}[ H'iUbq}o XEmc/͂8Dܢ~;w_ F;Au#v5Gz(˚[UBr·'wo)vtk\)Oo D3_}wn։9uiy,=ߏ0$n v5oGݻz%ٸ #A>fR&D <3]~;5˭vƣ ݿ{w;W7_u +#/.M6vV&(H8~o=_iOOd޻ws}u2Ms?:.}$Az{ws-+cABqoZu;I?=Ksp7=W))Zp~gnsx֠-؁  ?馵c)9ho2$P}v4 ^a9G~|7-/LT%+CgH }9;OUΞx?ʥ.0{ݻמ"˲UT>y]Ā;KZ}:I>kr0:6o!ӟ3o?2Td Xt_֛ěpKy#|~oӚEFmֺQU|#$79 }6[>%G;m !Ko WZNIwlG󓷀`q^i߭! 6`:[ _rRm_*0Q?-P7~?Sޓ{B t˷֜ZWm/M]3 ר2Y(,9c NI0X3<_IYXғ_-|n7Sճ9=QT[2H@{?Vėc\x#9_h3 ˧BSAa<߽@8~V'zy8m\d{FHmp{w);mC n9?y_znnv]d|s@JRK[ٸvGC}ߛ}#.(ۛs|Ϧ^i:W뮺19 \yi^-^BKg(?/|۾7mugD{tCfX30#bvOkzcJq _ʫv׿?R_M"]:19m6f1@%X۴U&wI3]?aO\M=ič }&y#! v_i)&ɜ.?M 3Zye[ĂH%=JO"[ϱ]7Ӷ9WfI$/ێQKx[Nx7ޭTR7:-Z| y~Q_YҒ5n 9P9c8ߏִJ[0Z+H?ă;~ooή2cjZC[pۈUw_VrO^H_CFIת2R(\rr*ݶh>t+i6=_ m9T.c9˙fиd_|]7u>#;?u?+hURdus׌uh9ؾT};w5Z|I^L{H2N܌eDd IEwotoM=vf~}cpsʡ'qwhi ;X1o^[*?zz`ƪvU+w2ЋSK]ͻ÷^eN=w<?f~jvNQN~ddAT1Ve] }䴏$bѠAS*7J ``#z?Gz\PQwPqz.rvf, 6Gq?nhRvH*j2%0L;VhwG4WK)+}As->_oeҝZy/] -\u_].Wo^j>7:|ۿϿZQv{_+s?u?yTVP$w_EZ$R%g4K86Mh*7k^FCyпYGf>эnw +^^]鷬Su"Cn#Z[?r?i[[t4=W'9'/򡴷fWwx%I|wvī2NVk]'Qn0.qqO1/o<6xn_Wqm_~ǩ0+#&|$M7No5pNst?8=ߪDq^Qg{^nJOuwٙ(]?>䇜噈dq/+,ikשGa{B+CsIw x ð!]>ok:>:m1&T ꤁~Bkw742{` 8!<ֶi=iTkKO}Xu!YQi9h]T `Rݭ>M3H{"{|7w=5x@roK/4խ߫fLs|>ZqO9z|c`{ÛI_HBXs o>O2UVVܻ4sIϑ_q2goG:j{ T^@?kwsuM3"H8 7͟n}y~? Ib*UK w?]ҹqm8;w7PwJ2vk:Ii?]R_ v'qwz|iN{&[tt8vݖ>d_mzНHo?ֶW2JP2AR9'( >HS>n/itkb.U?*~~Vԟ)SϿ5-}w5ïg}cEkS?-hM=eLj*1Q)Ro&5W2>͵~W=R/*5\Vxr~uL1?Нw^eN͊N :?u]}s1^Q!j}Sw_O/# c}s98롃W$A(ACqYekktI_OMLy'?ݦ[f^b x*T゚ԉIs]VCpH c{=? Ln^UY0A]yM MZ+26SSvA ~M=0[o~w.G'Knd)dc$g-MU&J}l @^O͌m-ΓRW{Uw2܂o{3TUap:u}sON q?2!;o> kr1>__I+_rk/}[*A{۶TVRqs#(.0}4h,:ݷmtje9:oG]{_JN\ΨT^W}z2H8|7|esԩ(?cv'c~ o{7X ЏAVcX^tlpOnu0v ?A܏`$ڹ>Pa)9;EPeq7^P(=W:{=WsZuVvw89O/ĤPQ w{y>nwV9*2qmrovBRo$pO^h%/D 'nVךοy6ݤn`H¿7}xL#y(+1-;[]:q =b O^?6zԹ%:iUo7~LrXa#4ԝnެƥ Ӗ4tW ӓw:M"`ؤ=NMnh]= 4J$2z s/Ӯ}}LST}/QB2px{֑uקSGQI;~~~ Aq*O]U&2xRknKZ|Ӷ[q'1Od[3d4NNݡIO4gHﯟbMBNO~NƜj;: [ۧv+);lnM{?OTbC`sȧ(ۭk ͥݯWŎ2qwƎiw=2%'QaFw /7vuϭ_ʜy~+dB '}7hR:]~cڮA ٔ⾹D㼾ȸ)^Z[݈aR2AƉNksI_8n+z~2QZ̮#XBm= "3~w.!Um?QQ+O}ٌm`.[n1N%soū; حgdtе~C%$dwzʒm>768P?~4LJri/WHN1o~՜b߫7(Ajޛ`ʬH9,~[V*[u;{$m-ؠ~fsu$. /2eΤ>ԑ4j@ߟo?Y'ylo9˒Ӻ#1=qd?֚IwL]?$p ʜ ~o|YC_F[NI]{W (^Io@I_ :ە[[~;rx_1W8#z:Uw/ ۚ?Ϫ"68qzUj{ +pvLv\r޿ 5m$}P UW?7$q|=84|sDim'`㵛~Vei']T*Cgyt_?d7rFo ?瞸4m*|NW׷5@}/Rmlvan$mVD)oM=wqܱ}bv/aӳ%~VDyrzr5oUmA8{I TiE~??;uUx^|fMʮv'TNN}yʷz_#wtji2Buۻ}3|>e?!`V}G1s~C #[$j|uptO+/wz֯y~?HÕZ~D,7 1wT7~zo7Cwh[=PkO=K.ߗs^)6BA :'|z?eR.^Wz[.F8ە8zjeͧ7op׶ߩf3>-kug[Y+?'ezNzwrֽ* PA?N =}Teep!o˞1nϩ*M"U8>pr -{?2hPk,|eߌc65(Zܷ;uwKR,#3rĒ~^oZZsJ2qzۧoiB ٤n~6ufߨ^Ccǯ^ytOqYd?" .w)[޽Ͻ[vՐs7[7 2q\w kՎ>]r:n_Bޚ DY>_{mכ=_=0FwugnfZ?UeΩ幼6} eP+݀xʅw빌gkm+T6x6 ѿbqwk_FDٜz=in1]5n3;cnI'ndGwHY8<US0Sc w9;\*.ڿ!d`)zn. PETmm؁ 8->M2_%U89 W<7?4in3?g?rzb=iTik~~С[qcM{h6Iw?qY,CIF:n;|毝f.nzylJ,Uԓԋ% ( N?3v:ߺ#X9Sq}w|wyAJ"wnD˵bG>l2whҒF|AݼaVF_{a)|[~={ 2'֦JAF à e}/sWzaFTGW79T:RkH{sN2{&9!^pVZb=psuy8Jm[Na$e 2I8;ƥ{|֦nߝ"c{gww37[E>wSo[;v?R[Jf7Uy6F?x(Uv7T5=uw=n_Qn~qJĀF OuSYVo=޾8%m͟R{gm9msF?&N/w૪oۑ* [%WzB#Wt$8OsQ~o;NQr"r1#nId ~j4~`<+ vg3i{a] 6sݍ*Jm|OfDI?)#v [^-Lƣwq5,2py) ;O\"<럼xRwO& cсv>]m;45NÐ"Is_t?7[M螿/J/O}a]&2'?{ V_?c:3B}>E8mo~_D曪oȻm4>H^?7y߭wהaO tN> WVqvWd5-Y6]z5^ Ew~LE&{/H+_n??w}ګ_z^SWjW'>\w@Skume9?˟U?}?׽u4{$jΩypHgpVqrr֧N_n95Ч5/u{=<cza5wR_b1n0KޏїkUU'濦rԤ ?DF[v['ea⡣o^_e%Uyl-ͺ?+8[ofl1p;{Y9rI^7r~V7%uw0@6:${朕nHyp>w\}BM ~m 'h+~=TOɮkÿ!< ('ϵR}tv8l9 9~_9)EI/>owO4{E?H*!1vIu3s{y?^o%s׾>^I9%e}z5 Ks?Z[E??W}HpU[#w~wr~u%G͜wto9-ޫ,?Hs>OY=}_)pAl9zz+2RVm_۶D`9=>Zӯ~$Biyi 3h{Ko$+:3oT]+ܪ/~]͸yc93|̩A{zh9j`+57_R|Yj ߕI;T~?Zm&!+-(d}}?Ʋv| T*N*?瞿SÖϖw&rH'\>Qɽ*׷_2O/nn|rn瞴'8w@c%EURy8ez5cN 7ӾY9#s(>{NVPIv~ڈv#g}NT=ƂrrۧCg;0>uNIn!I$>`0[>oݴ7Н5tʌ?]Vn͍Ð~c~ ۣ~ rO} ̤yHSӒ@|G4븥S^Ok# ~PsT6dվ^yw߮ lw gg\w~¨W!lq?u~٥:q7߯9÷uMo:%qvz="~x'm{y1B[>10)[G^oVOwdJQĽ3zߟ'9s.ۛQ~c ےzcН柮!U|_Ap*9c>VU{TV_=D]!@2_{glyt>]szwБ…2c~VJIΊ~^hO%2[s_~9%9)S痽hBmUݝJŏ˖ߒש^vM?CG`ox1;R .<jTRg:Z&f9_G1ך';h_%1x/ɨvTuR!v`@w>Qnr&{9#`b =G*ܢr[ GW^`A\zu8|ɫbRj% <z>Ӻ JoȐ.d;~zͷSϕoyadp:~ʧwGI9=Wv1{W޿j|+z1h`?t9igIkq:yaI>eN{|˓Ho֓_*=o! I[Z[\6|twO>Ng̚ߺԓl%r{ɨ&%_7*I*8rץN~``>a?`֩eA$?0%ulw?x/>~"\|8)#;O:ބ{hw,oM4V#::/#r!I'OWO%ZiYi]Gb?>?Ǹӳ3KԜNCߧ_jS}c$G3|A9gwwG7+T[Qo۸5JKhݾ~( 9ucU |Ǵ 16߻|;{Jqɤ?{|d2s~߾&3og*&ܞX=xw=U)]vkA*Zw}""ޤڈϿ˶uUK,nr L ֕%G?VG}l;,2snk_u?O,_,s*mk/^*qnA29A7lI6ьOONr`?7?ާ)6M7̺1ݛ_j xsϿ\i'gp>Ov.Zt}1xsY\kῇ;IeaG}*_ԝq ?_6qiJ%S_맛,hJ7qh_xW)|k_JO%.ky\ΤyeH6:] sZ߷W*g~h⹯˻aXU㓆O<>ɯ3v=I^Gqd&m--uAP. 3=\eo;M} -X_]SQwsF% 6rrͅVos|ԩ޾6؉F }ϽZ/cxCׯ^̉ɆI=r]_ϩ/y?ђ>VJۀދMOu.U}W̌cp9rwUfӯsΤ" 庎qOW=}Q$^V3@o'e?9﮿;%хܑqR5;rv :JZ<e\r/Q^95JM)v{o0xq1?ߚnW荤m禾Og|u_?ZÜ#/5gwz8u~Z.ON?lܷ-fihrWnF򥱻|+~3NJ+h\n<~o˚GCWk B@2/X ߽9]l˱ʩKo׷C9п֪2ݱϙ%ohߗ_~+sɾu9 c/1S ǧ_|N)l?:i;c$mU?{Rkg37A=psOTemz/"% bW?J<̯Q=5˜uhJ9TrIA[]z~?T A#g;z?jn__NI$޳Q_ΧSZW[Tfpyr۹SzP˭G&|+s?zWktN\s K֪cQ_~=?0s|6+)?;I0\)*0f~_\}F.œ3^˲)kׯQ|H b3wk9kko#QO;| e0X LԶIC{~]uPgk[$ڿk?|pqkq416PQۛ֡_u&hm#'i/u(e}i}(Wns=^qz',k_[$HCzwek%$uhro^+IJެme+;P zi=hqӿQL``NGF?JnTm^1'Oݹ"Voh ulCdXa+~~]? k?K (>a'dwwnc[v J;q?~ ,0Tӯ'${N/ZIac#oG:M|tRy;mlaG\ 8^ރmb*FC?K-_vM/2x'y?6dך~Ho~^Ƅh>rX? %tު/rG 'V,~9:~_iw؇8Hfhs<:599#qx(157( Va+~5n_.-%41ԟHsҜl)#=~[VF|cշ>3{˵~_/mvۿ^Yhaz~x=~IY֍IGF}Z\:;/_w6r\/;z}yn8c-[㏥8Zn_S6r8-1QR[.Oٻz_9an7)7˷.=WM=2Xe;/Ƣ>ەT/K99;׭+L;QXn8 +&ݙsu g+#h]u&Z.w*7$oc|wp_Άf\I|{AK`PwwmNr\mvnzܕS&ߙtzܑ\p? M6n[s# 0r9_>u}dg=|1~W.汚QսGʣl}j-ٓn-_)ߏ.-f5*ou"$94_K0C~cA=W?^*e&Uc^2Hrpsn93M'r!?キ4ݭE r}+o~>F߫Ռug7 nO?ޡ+l%}e1{}6\ӷS-]B'ﭽs] QK_/6=bNr[ZIɖd#v`B/_ {W3oTq`m Wօ&nθWy@# 7?短&mlS#O9nD$ӿȖ_;ON1W&X)MoDz aqI;sQ&m]YYr ەU$m#9k?٫UZͮ׳8!CWݯGӸ@C)v<軱Y0[漇4N͆2?^0Ԍ nq~nwR{/g [.IURWn96ӯF\z}W8 e@snojͧ7ϡ)×~}q VN48?$.GA٦v]7S}uojۘ=@AkqesvF=|>w.MiM^dRҤH'=Q)k$onǬ;I,Ǯ oOΕ$ܞ-k `ƭ˕zF?j֨r0e=/`{#|6?wU)}QFBPJ_|Te}?^Ԥio;bRCΨ1pmyq ų0}[i-I-ܭdL*a0GOλ~TFoU d޽0FA,I Yϧ=MTFV3pw__ӯqV0 7Yhw4Wod7Iv?"v}o{)TonFW /-,]^8Ne}W>vXtpF64ի $w`dA1>!T u>ME_"z}6a(Tn睧8anzK7T-.k Uq /5QUGUoAJTn y 876?yGaAT+Km[]w@Ip %+.vuo5{PHAWCev뻚wkf(HK(,8>oh[[WExNՔjrVg\ֺa|ׁ՗+uvg ҃ۯb_ּfkdE1Srnn[Zz>(Jj`c m^f166(@m{|ߟQKu%5 }Jl!Z=?P_?oOs{5FߋnHbif TJuRӽ#WC^=nJwoiݽ>oUv]x[j=j/YVFX3pXu<ޭ}KUcD/׫yp~m7m[-xېcwR3Ԩ(뮶J}7}*,9n?ɡ%6IJ޵~!Auzzs_=%a9V>[rOdoI8_J/mͨɭϾ_OS7{X?__)Jެ缛۷[mœoBKBߒ7So6Z͓G<|W UZO&_Wק̌F~SBoi'(Kk{~mdmP>]_}Ӿ 8|#R2Z_WU\B9OݫO *(ӕ-~'l$%NO?/shW#VJ7oN~\ɻ۟zGW)KFz}sZ.{zyUܧq!I!x6>X́crܿ1~֭m{_8eΧ}Ûhs3r#>"Tߋ}zVw=q__Z~_}{+.@z)sI=&ƒs?I__ԙ5d7뿟^<0[v)nOz9պO3B/Tu],x T~ }oɻg{@c8"Q).X@+o֭k>;fֽG0QzoiCm}2I_]^uƸ0H (|m)5 x#>y=Ocڬ2+7 #a'WFS6=Tb B^zAڽݐ@?/ڂ}NܟcI2Bș56K7?+sUe(m__]œ|Fy_A[FXPu`ʤ(ѻ}|-otQ7[\FbĹ9f_/Ɋ[ۅTojmm{ʔm 1 ,y^*95%}:Z9 Ky7ʻhOᎈ}|sR6ϭCr^Ch8E;b2pI9#fwf1qw# O3:0aZ)'1k[] .nbߚfnJ׶5$۞7foi9%ݦ;}3NyvA=g7wn߭[zԏ1;@ӝ皷,lߛQw-x̃q$s7/[_*'ɧ}<<JON~vb 붭МF0wڟ<Z'N_z|z}r{oڿ?zKIF*WNoP88e$z_ڳQw'5՘ϻۈu+}.jRGתݩ*f ;O#{.jgm?%ݽC>aniʱiKukd2˷\:SS$@;x?;Kw 򵭧?h!d'E`OR]Zz O]nIYW<a|ƔSZ?O:(M-޿W`A?ʏJ:^w+=T'8D]Vzzt]ΊN߻Z7e{q6nHc(@Jw.w6Qmס'tUmN sT6IPH8M=H-/mnR8fڪBĮ~o~_΢k]W3jo.+Fߞy\/l_% R1n=99~UsPc!m{>9j^S୷}2F9;'u*z}ןyoȓdda]ۿbVeqNϿpn]jG 0n@ke._s K[nz_Rd\YTĝ?{L쭢-QXVmo 9~^m;UT&(WzOM%uIy_רИv;O^ߍSn^sE{8NݬF:?Vk(ǚm4^;6SRV,)-=;>f[|Skg~ڊHpN}zzҴeF|縞[)}:e7go_A:2x\߭W<pq|XbUݓg_~ywVO$: ?S~_kh26:['+?/I97fu!{j}}ʝώ21N1R\OK7~Fl3QqԵfДyo}FWFѥʽuqJGu۷oM?w G>mzzs(**3=w|Mj_4ȐO$0'|wJ#٦7neqX})+䂲{ 6 9c=4Rb=DEN8u-]רÌ)7}Iי(R@DVj#~iI?5W{w3w= s yMI_B8ֱMSME?噉Gf mT9m?/ /.v*#>X_02qjɫ[:u駖4dw{zk_ΚR7??+zvQSsVĂ=?v7fj)C`#v4oADaL1f> ͣw}h7nݒ{poqR^[Bsy9("Mƪ 8_=m&4_21zK[QJNvfr'I7_;}5V݆1?+}흱UMtm/Uiʸ#$mlOꜢFkvoH2?pV^ gw /ֳ6-Bpۼ gP77}_s릓oC?͎ 2$_xs{[TW R8L֦QR빭6qX'*3zDS_Ny^c[$1y3Z[wLgrN9i{^b%?v{{! w{㼼gǵ'$eFol~_,K>Í͂y*z F˔Zu߭We8#?{LةFϿm=a]w_ywѮ\SF?ZbMAu#1Q ?h8=tudJNlr[㎲mzڧzoݩ*ܚkzEqoA~iYv_pROWځ; [O49Y_4ƻ  ؖ"TR_vqXyg4g%}AŜs&T S~mD~FǸFcD߯uյ߸@, ]5zF|y?yE-wb(5rļsӿrwo[ӌ$K}-gF?^SWu4b~9'o óA9~7*s>wܾ|&z~~DC'_oxъOw뿨*rgWo=1B;~j&kd*##,ORDg׼|vA`vûUd_$'=GOԒ&~XP3ө?Q1lnM8zX63"?﮻9?렡v#9ߟ҃KU~pom1ռZ~=Wv 7sR[; io[NU ln拾dN*ǔS8yԕ)B|w+B|l MoRIiU[Df1 J|O6;L֗࿦e쯳;~yAAٟYBw_VfެiQ[EQ8QL#+?'p;FNIzznM']Ü@8޿qMK[4*D19aX zsV~LԵ}6+uH>Mm_Myxa8is׽Teo;y{=ϿG0 t[74ߗgMm~;W Cs܏}8)5/OI=.GbŶ1>sTWI "T$n=c.[{jս?RH-is_MJj[V_?먻sۧqxTk&&Le9zZ7ZS{}}HPpCIݻ7.BPNz/};c#N%eF2AV]ܖ`[oB?/G ViM}Z&Xw ;yXG}ij6ܾwג%[?ݧYׯhcvx?)KyS6zrҮ񋶾ϧ댤MOD$N?ʔ_ n͵1mLzi)sۦ U6G*yy}DE*/ykWwVoҞ/{Gy?]6Ny U8FOFtFM*EY~;F=pZӮF :Mo>” 2sVD`_qG -iKѿQZ0Z<ͿýWc\Og[sݯ{};F94O_21WL}sTCw,,TwsQ6~d[!MAn_Z<^})Ӓ^kwY0qiwfm'dRR|5$27eꬽIͷi'~='6tש Fz_ӯM;>oux+#1mͥ_]C~|Ph[ Q^A좓{9_(͸ ,?e%F=ܾkFI\`W޿jhﶟѱPO'H;zz~5禷> s}Rm-t*T ׽2'W]E4BsʎJ~o9JO+>~_q%\n<}>]oW<|es?OU;_ϯU.i#"d Jv1ϽMvA`,A`?>:-EA#'m_u9iGMZ !\0F8o{;}.]-߯sѳ򻶿ڸu<ùo~ߣw2Kkש. 1~^^ƭ7w X-u_ݙmf/此SRO<6BމFw5V{փU@-*n]g%Y_w!K#]4ӳM+/;G\O.}NRͥ修@8PۏAۻZO.'7nd NFA03yRgOe !/|cu}U?-AFJrH㏽k.yw5nR={ϭliB0 /ʿ*J /yY@I|9˻=)]2{G@-NyyOֳ?[omSRׯ]?`ƨNI??=zVGd0Z ct|4gMH=+^}kU+_vF46֏OŅ, n{SЌZkyPyfsqJ vEV lpJ݄Zg{y<]Mw0#i'rt]U>xI<(|˹PkQ|c^֎I+}e=n G'9P{ۓ~_$_7኶v?1uUtʪ.Z * uC. =[=l `~_xS'E5xɴsI+ZI= i}{@ ܳcG3EF7PTHakDm?>3u8zZ}#z(8~ni6{^g+o(4'{O__2\q*^Jk.HO_R?[ܺb)#8 dP{v<;[2S?;ha9'hQzٽ5My]v9r -K_7,o˅ Sp}ק}*<=3_ տyh1[ۑ@</ ]כhhNpp8}^ܞo~}GI)9\gwrRifΚq^|r/'P0Xqw~V~Vf^]bl<$s^_mUJm#`)}rǷmJo(PXd} MI|-m>T DȠ^oOjv\ls+}Xەa~?{}! G y2UA˚6}M߮rQBݺVQktbt 0:F?DܓG9b'V%’vX9jlȊI{>ZPۘ:d yR۾6B==vJ*}<.sdye+=JMtnG`1f-)31=o}m|rO* 9wߋ_}Gl${wokЊJ^H@}7?~}TR^d`1om)s;u؆39ʱ#?H֝&^$|N%nAUnF>BH_o_$j F?w^j\%v5t|w~omCRZቨܶO9+K +k~!^+G8LSvIBv:i@Wku{)N0j /JdžTo/f_RRmqSueQ=ף1VR[o\Ov?.~j͸tOB\\ַ}?^'cX2 ݝSgT1=7!۰ 7>m<_HP k12=6 /m97覆ixk,H,Y_מU̿&rM ~bwB}T=i.w=(U{wfާi'[b? r Ebҧ'_økyE&J Alӽi|&􎿟FK& 7wK4M/OA|~sAJqQ?R ,Ge6ubջvLUfנ~` "[KRu-?˩ \@Hw珯;w~֌ Kv9nʟ~afd[ĒPK0-m>SImצ4ri-vݟ/%)5wׯ{4)+8Vt߽XmGf!F~f*w_=mXqOOA?oP>wRտK~r () rO67=ZA(u׿r%7KVOk 7{~|!U+o砘epp00o]<@FmKUq|ܘf,1~QyߚVPKo:eQOF"I ]߯^Kw47u_%B  `gSͷ;[؆\Aڸð]~gnnTz^) Tut|5+?rJ:9{EvIwvJ02Jn[=?3-5_=yrBۈxO{}_J7۸w0$1.T99]ʥ M5[anwnzНFR4[|.C7sz}}?ZomIUCd,BW?Z&ۺ{ﮫAH*sLwA"169Qyw/]}~7=~}l@;n=zzMT\R~o)N_u,_\܌woIδ8 7ȿֺkЗ$+^_3y}ޝWv3:{M>/3I_wYXՀyLqC}}=jTvW:ݗye6 ;GeϩnڳFۯdNn%i*JwRr׷umN2OCJI3YGEeȌT |woև4 aUsϷITg:=dMrԎ_Ʊ?ר5~]{wE!,S?ҵ*iozV{߽ V:ٝlgow{8niSeTvֿ]EH.XQn}iVo-Z Cy\Rs'j9'_[F1߯r5mQY%?ִoϷϡKϯ~`_}YZEzί.՞:F_uz$8]v{u+i`P~x{]K}Oת Tvg~9UwOrJ0Wr7h 0ރ?ɹŻts*-mw1KṕFvzRQWo.]_1)#~wsYFv7f?W;K:xpp{jL'RQqafے>\7EiOnU׾ `d>O̩[4ֺveApҊ׷6X!Ip oڪR嶗_9qIiyvzR涛oyɜu>sZtޟȜ:7lHUA8^?OOm9&ׯ[T{c*T;mm=?yvLw|{k+v-̼$'?l7)9Bۯurvlt|5%N__5v;zt_)'7ٯǷt6mi)[K}9lmzv&Ah\g|Y+j;R8nC7?79.e:$Qs 2 ^Vν.,Ϩ'8 >IoѾVo`Uaצ}?'k{yj%rO!I ?_2ʒZbm9N܂T cߟI_S!@'M/m|6'2svWa}jBt~"aٱ:~mMH%k-oEA'?œROio;ʫ8^v?|%f,dg95Rie$B2I'GOӷRuW kBC @=h2[z;3p@|z @Fzs3@1#%68WޯF' ϽK|?u$ݻȢRp}|-w^moo(mo[u#$ i?+Hg?;ͻ# 2z?7c6`[ǿ^Kw*u\]KP\2NӒ:u9ʲL5++O$/qܔ'9R'ou_ZkMFNWeSf37_5GWfѥ\n)_EMPw}ƈ2F~;k{$T1i/Br-x-?Zr_,Y r:}CJ~^_nAcr09?Er[vHʒx5mI茢֏@FC;ʑb֜C3F:IS ;&zy!6AOךK^NN+k?Q2IQrOo֣=3x)F{#|ˌw_Zz_5圞qI;޺BPkW#'$s}TnEXG=L?zrj%+I=}: wn)o?RO~f;ǝ, p`~Ojkf u=P `}2O2mJ{4׿AD%Գ 'rմz]ΘPկ~i`I<Mb=A$𻙳zcӿQTr]E3ds/g))]wר8-qy~? yl #da9<3QodD%PGvOcȘv~5!'$Uq?*r6қjvMN]^z$jYIVIlUR忙#ÐUJ9۾^?Y:_SOoQigvw\0뺔7w0RK[_[+Í1o۷ iǛWt*_(Eko{uAnW,l`ϽWʎTJ Z<~{\{k%7}u.3m{ p0Xu8'e"(^cU0Ng?Z%ekyn2n_o=6c'$cI]VjnvQW=(Pzmo;Mt4bB cչ<gMuo8GT߯|sS6ӧk)='y{AإݾW| 6c?oV~!94wT \3sշν֚X#hTy~dV[1 OAkͥׯ~w$<=xSƲjO]iߥ#}wߗS-[z ~cI-x/oǻ2‚NXOf'8qIq`cO+SUj o{u~Dm9 ~:_ֱO͕M(}<_R]ϒs6:4;haq~rׯOD45OO:gkqQ<7O!\X1{{Z+d6b'<ޟ_nڳjt}|8$|tTR{}"d~ˍ{y_s# p]z+( F[01uZo=:m*+#$Ow]o};Xt}>V0OC9??_׭cg&OG]\D#6;?>RohNG*q꽿Z{_^ i6/[TJ15<{ ̞}|/6 7^8?ʱ6ԭ/A\m6{.NՋ y ;}32*ק_-"1݁w_"񔞿nBA ??օ)-*Pu 38~RKȟ}Dؠs\ӗ7OHCF'DIQ'j9m~bjj?o[p#+-}3Z~D,rJzg2YKFgר/n͜}J5~̸z׿^y\g#;G8'nڲV7u119 3:AoFBD~x;UTiTWlp~fyK794:*} 06Dz|k hkA 1g<9#_MDB|eFFӁ-ދ7lTAvݐ{e}Cv)*06Ziq{w`TӔ3J5|e*pV_TMT6T$1?z 4*2ﭧҪkv_s7M'k1dE 'nFrJ_C|vuZpH[qJ\>@R:ujbwO[)G<0_&Kd]?3 TDz;=pAkMuWإRPZmQW *I!s ꣒_?ЌFCr?ÀB[3G~{#YK ǂ6ώ~ek^xF9>OJNPoTᙽ9Yj}|7z9V?%߯ Pr O9K/~Lu ?T{O-~ VMulK*r8=ZҝE(8Ut6ƥ2ޫv'4Y߾{PS-7w}72q]̧vG+.iw6s?Y@TB9 Pg|Rk s@@9 =_}O֚ &Br0ʌ|WoMNg&f^~d9yGG*Rvׯߡ@2:VM/~^4"x>oΦSoȺrZ2HX)3ǯXfe?W3k޲3 2qz+{ʩ'uj̍WOy?>2-ԞW׿spGh_OӜnjzIh~;H`p9z}1[m%+[q<,rqߎm{psGG'תeYn ?0j&ӵ -]{N?{vV_Yv#F.~m>o$7z˱&0BA۝Ǧߚ^ ־dˆ+?xsznݜEv}j3UrbM`H%mv~ֆhsg+^Z qd|o՜Rʹ;pN>Ҕ(޿/=8 9Pq}~BoG#*J[*`oosD⋳O><8`GN)*?N\g9+M;^}tq^uT9<+^?RC!%gU/vy]~;zB8Z6W6~)0dnu8Uׯ>&*F9Lvۛz[2P{A9e968r+4Zzz6ۿ-'fq3C|,Xm,kIOoԘ~`| \Va)8cb~ J-k̛ݿ稌)rQu{__鄬ʽl[,W gYiIioeGyA;AZ/ϯ_2g xw %aO+-RS%_"`s_Ͽm/]sw hI1j2VקٕZO>1=w3jۓ v~B,#_\5խvz{bA$m{uECsI'Hso8m~MMnר'!ˁ?xZFumG۵ XЃd +i4{J>oXrsz)rw׷_v!10r>P17__l{3 q{  cߧLNwZ-(*c+ٻ~96]{X 0Skb_S(8EGƊ@ Cc}Oh~Zc˸Ǐ' ?49$]L#_z„\ R3gy$*6<]=zj[Ϫ}}j-w1'Uˏ_D79K~# ==3kuJNݺ^)Cn25 J,9Lzmݜ(]H`矗jRKaο>^<A8yJRi?Qw$1sƅ$_SzzOѮQCg|ܵ\d}3S[7{iqD S<_Kֿ_)4Ce|+3{Jb&sr# <?w}`՞]??j->iw߹ FX\8?_љԺǪ @rNk.9;5B/1?t6ASbwn"#dx`O95 IbMG@CuFc{o̍Fe03yT5+˙+k\[*$p]͎E6v}wFj|!U~R{Fr{z꼆'zE}@V ZqoO5Qh&3V\fQo;5}mHV&ݴ˻=ߛv?)-Զ}tim1%$%*tVs>rccWY߼۷@FR%W)>\oďh;Ut;۟J^ڻkZ|q/~_^9KXM__Y+d?֢ǿi8s7b'mC93/w^qi'wsYx6J/om]r4[HpsNmm~o}ИZ߿y9N?'wBq}ߧGGrY~__jc{8 c, SG~e#w+ZvN_gGT֎hcI)IZ;۸rrO_f.'&[<{>T}_};Ef9u#ivv?֣9{u}?chc j\"bxZ ڡe cv|sWrOo1AR@ÁG~o4y-yR=?QvRr@#n8.?IEGc7VݎX Ð9oB{տ'}Oshs[>rFUlmIM}ζnVm̉U ?X7Ub 6Wir%bJQqֿ!h?'}t*J2{ﵾ$u-l}ڠiu]7o;Dg[QW<JKXy$;Rz]74xo/_O!;s˚l/K۳zi5AYv8#Wo9)}Y{ه#nguռɧUEo_]?9l3mm?7pI꿯NVNQw&qZ0,$~7;_Y=K|ۛnڻw.G?/cE`}JnoC_ԍ!<6);ZLqdUe `Mq#MO_}4¨^vqY7Ek-6a`ުQM&ݷz($}c^W>n/c&ݤ{w8< w߯_x5O[/ݮ˨Ɱac8__I_V#hykԈ#wu)yò%)d1VQǀ}m'7_ՍbwDŽ6eNOƚM oi_oPv 98kZne-4Q齿? sov8 9f5};k&ח}P xn mO~{nM_283򢷧DkzarQ7vj]'%+7[|ǤJՏ;5N mՙy5vՅyѓW[3 ׂowPbBIzo{#0>nHc_>a7믑 2|sO  j>p@wqn"ӬZݴ?ϰФ9$gY9J۲Ī$ V'$Dhd ˷矗jyb]݉gvF7{?Q|G^&Uِ;~C{o{5쵖>&pT:|óֳI$hU(>~e=a `G͜\?ݩ{O#tI`p ?w_ßE@H6s#8)]k>T}c))]+uȧ}-omC;FOtjۻW2M]{l?>bq˿^RK^ar,J:puϢ/wV_;Ì0'o$(|G%[r. ޝ@>Uk}@W+Y{jש4ۿ_Șl91NNT7ǜ3f$Q"טw1lgi 1_m5T|&E 7dϪnR}_ \N9cqxzV9E鯯 PB@n,0i_˹X$kG$=Ns={t2F 0f+}?ɇ&{1,Uݧ^yJ"Ff,se]-_:!)Y/]?Ẋbnr=\5U.v^l؏3GS*Fvl"o|ùcvc2oJ]ʜb륉#Y TխqQR_1;w9z~wGҩq~;5?Ug +W_/7 F3ލQֵ[o׿8~oq~H?h4+TvmM<o#˧繌1DxMzPaE(n)c_WBy伟w=`ˀIսߧr&vv\z;_D{߯qA9u?zWswG,y}˸+ 6Yzwo rw`\nVJ ?Q gCgߧJ+gueQemPmSAj }~baJ^01?ÝڔmI^dpFsOqJ6mr?1_\V4N/ єSǿ6ݎPt樂>>'i%A{j%+|ůPS'(^Ooڽk+Yn-q*O;k6 o׿ȓn8o__j,^.}_#O9 :vod٢~L]G^qz&O}X3珘 F2ߥt嫌/<~ۿ{\7׭)'s@JKO׾<grN6R}(:cV1H-`}ߛoNIo}G8|K_,`v Ce)Kv1 un?s}#Poo+ ь8~K8rYz|DX 8,NN{oq n[UH9##B}Z%fd*oi3t^0W#8ǽٿ3hl)bʍsU|6i%# 1w+ӟ^kcQmT2ǒ6*߯ܚIonwe?&7g*kM[*NZ-VGe'@vSKyӾc9MW_y(N ;}ݹ:sJ~vOjjQKd)y?mAg~]I @Hc T3sߞrbUE'QķX'V.IHh%6UN{njNMmB1ŧj(Vݜ3p0t~t'nUG9=O#GM9AKYK~>WMT?>lڜ(k;HOoWo9Nya#=VGk]_'Ķg$s^{_.f2pI9gwkHKN|DRVK~ԝ}j=S~UU5m; sIk/[ }xUi^?דToz=kMdӦ-^_'=y d01vu), w=#YZy u1}}8DSD C|Mf?~znϼ1_s]A_wepsjϛk]GQ5߭]A?M^wkC{?y9|瞃F}8" Tcdc9ɻ_Kt?ZrGRW^,3=OO{ͫ6Ol+oӻ!2T޽3hjr.ŏab{cGw8&W8vzc<~5~zn&ܒy/ӿK򿖯o_('L1k"c/* }~OZ M[[Uagzd䞴%d<*I$tu_U[wU䴻_(5ZᆪvdPj_=u؁K5-o>{9FVO-Wn= qww:7w5qRI, dWi__=LTI98\ T]=*9N_ΆߛfU6l;/x2?­UiիՈ\!* b8wJJbjԼtKƨb ө6ֶ/g-9I̷{Nclc-F~o\w&99囷-uЈMf_1YKd'a}{AI*D`b>eZ5\wTvO98Oi{O/k9,y9*A_}Ng\{F `:簪 m唆ןCT^bj-XO|իCwyR~ vIZtuWT?B!I9$^7T!_™9_ӹW$qy+cճ?_UtWIuWǚRzz~Ƨ9>Y{{~={ + [A7iFV[m|Dappsv?zMimƩ@*Ǔsէ/6MJ(Ut;qs;lRzFSk yE#0tGX5㜞.}>o[Rwzh2w7 r6^y?S(uSXUQ]_wX{/~Q~DIn/Y(ikoVrX6;6sڭ4d21Ƀ7S6լ3>DUydn1qwax߭X6?ƏioP^|>b6g# rڒi*I[|KUwh7yO[m+|?~Lw=l?Z'n{{>2j-ԐC?|Ũr]GHcpqnzҡK}5E."" gNy]߯4%O%4N>m\9_a_kVTTSKra'?3g#쭷#*n-kAFbjSvCHBWGyd b͑p?Uw=Oc'hӯ>=k׹iom{:w 7nh>T_qʀrs}1FE{,q}6uΘO_]zM9q`yo*m_-/վc~H8\6N}#U}&~~_cw<2~gY}Be݆$A6.dT1xۻրUoFb?{oV7էgp_\]XsaS;^}Cww5qw 1>/˶iFPwA֩N~$g#B0h%Ρg{^ <W?ԜTwI% <n{T%=< k .6}:YPέ|8gpۯ^{γ?N;u 1a2?uz>1`sq<4Z?F27>=~^Z~L1q0}>ZI4%O{pFG m=h&Uvt!Hv pJ#?._MeFq_%Ǵԓw_5ֽ_#-wǿrdڴM=䯷) A9$mԥ~?"H@0I3t?>M-NSo_+n-wRz3jBb%0$cQ?Sin̥I7uݓ"d3yl|S֓7~~qU#e:AEBd7By?mt:e(+~Ȍ' g֭߷]K hXo9\˻^zoZ|ƺ1$`X%zuIUro}ݒz7{46ba)'yuھŖ?<+s$Rq$GFy`@??[RnX 1zJtBpvG󁸌9 Vi:4һۯAZ%,p,_?ы>Qİajglɳ3|ۯ~cr œ.6ZI~i߮ H$rI_w|)W_˿.ZFڹ=q7ˍ+y޵c }Z-.u->c<__LSOgb{T>SϩvΊQ>L|rF8%ԹIt8 9;[w}sgjŽ_ݧ~ 1ݻqwMk)XM7=0W!u띿ӿR:_:w+*`m9?g^[#vݼo߅ m= 9S{]?oo"؃Uw2eMfvNeRr[o?U#[/O sr?UR[A@6 nrƈ*UWPA!03^:fտ(ϨzvG޿Oj['4Ϟl 0]ܝ;-%=2v37(M߮C19ۑw9#9zc*rMŧkAʤ` j*8k3ƒ_q;|{7}v(\7ywT.F϶T7u3nڱ%۸ry'<>n*=9k?ONTpUګN!ozV v=XӔՓ߯[BgœO^-is7ggm]?yQHs~OvҸR ' G'?POwem%zʁ{U#:~}}}nW9+Z s{8g'E~ )EZ_̌)6Ikzmʴcn6+mܯׯ;ɫ?S "$  |ʦi$w{^{ЪeUp8?:Jm+֋});H9=I?2MTVju6ug8m.Uy{ |w_yuLwNĮ"܆ϧ>޻\yu+/>7n$oEZM@.H8?5o֢vӾm.ekR7e;~bIhӾs*#ϽʯXZ(}&(xcc1tCMe60F>`|iH/δ]z)?)C{|2=}Y]qU8oz9m+o{>3GAd>si-w9PY>m8O}sDe/Uޝ!ة7mJ['[]IsZ+__Q?ϮGl+Gw}]s9sZiu}v=MW-M{_]bOc~vz_rJ{cLjdrS[V2QװghޓO=֤!o^Bw6Wh\:W~9\Mn !@-޿-"_ySgq#Uv' 5"5Ncg? /{ihVDlI^zr*~D t? ZB@x#??__՜ԝڻ+Ar[v9^gtX¥[ NrvV`zenN˷=WYׯi&.io^*U~_AiZx@rH댕+q*'&n_$l Jz_Z5{u'My^^b6ÿՃqs&ի_Ѝ'O1\@䅑2;w{M(wY#|l9wiZRGu9kI#wɓG_ýfw\Tmo1,y^2movߩ:nv}uKu$; # -ݽsZCksEM~ks??{{[EsI+ۯ F#wR*tsN_Ш 88#{FݿMZ R=1sւsmr!1y#+rw?.^*U{۵7- m`7YRr]o$'N+~?Fvwqt\sI^n`͒d8F??7GJ*UKӯ ~-n?ΕwZ|{?)8"iq10*km}KWj="`&\ۿfǛNNX\uʂN{ֳgkoQ<+7{|oF>ª$x!H!?_Z5trV) t-9ǶrIlNqOR=NW=?N [A{G. |k^7(~]U+6l\ Q%=Ax{J4ӿddQI'{ǧpz&7oS$t{oO+DI\7\k|/_ZA{Kgym]=`rH=?։lfc=WwŒu5QM%SY5f݀s~Q7S8vo {<ߏ\^/n-o͂E>^ǯv9sWj7{8Rߡ_.)D-o>sӧoԑJaa8۳R]dWpl8%wz٦4iP/,IU)_ge,] gi?j#).gR3_t9='~u<{ 6RrG}iNMZԘOoaV6ʎtU&O3IhoMb<_/Xqo{ywh1I}G s -g8 c9n9]+OwO]6-ܥzQY78K{z=^ߨcc?/ԛZZBs#Oʧi'~3H8%+oo-nӁTlgu皴ԛ_+{3|ˏӬs]4isԚSqV\)*T6@ۆ97⹵OOqI!OHU+~>p6ϦmJ2m/˿K9|_O_Ʈ~_{K/p# 3x{=~ cqN?ϭQ ?7Z/3b,c>~o_γMSR{\ f$ݷn?Z{J֍|ېHRp>k7׾4U(_W)q{!*|nw68{--Ϸd_=G c{~!6V Jvw\c4^}zQ9;](7: ӟU(_>׫&2^z催|t$_/g)IN:;m'=ONގywp$￯# NN&ݝTmϽ P,wP}v9ld1\{_$öaflٌmoss-$|t1F޵9e}LխTTqϿ?֢\Uot%2ǗTzIZD$g#'\̗OgwW;vzwn;70!T{RiS-*A1**mm|W݄ \~>v1<1mle JJ}:Ɗ'͕axy7'gOPcMr] :gۏq֬ӖȐFPh[1UX&Ԏu7v7UBp0}ϥI;+qqQ8I>e~2jC;O?1сw=}GQ)%ޗeF\_wI8 Aa>Q<NV}E}:V-/]ռ1 T;~cJ7w?̤ƉHR:O?/#{0Tp@`p~S{;s^8(,A$n}w繣qz3ېX r۽B*+?m3o Mq5Uۻ')}PDHaJrBAN/ֈ; qO6Y}&PN7yC?Z8zԨPOSgJI^e.ki$Alݵfq~px'dg}]Ҕ^~W"ar32]cnێ?l^*.k| OkURA_P|2Ecy{۞ZI٦m'k'Ʈ<ܜ^?Srӿ~쑾Ubz:foy&ӒI>au=F;(FN#A|cFF];VK;mA 0A?-Ogse7d{moЕ?ց(?>8?6q="qN7ﮨgw|s>m{Aͬ_vM4`L@8I=o_ D^0F#)'$wo3CR6T&E1r9#~Sq"M'tdV{As_hqbrg@_o߉8-(O~oױM7NkU[ v8%@ }?t0w|jo_?oN߻׊jIyz&]o+Wq?Szzk%k[LWkeNTsRڍDÉ َasBtΚT5T󶔣gcY]iyt=[KGo}.Kg=*^g~@г1Q /Z36^]݄P8o~uovKZ_$8_}=ϽZ«z;>Z1B8!y##6NVOoWCO8#nzQI/ő:nS}˻r!\IRۏQ9=o_d{cZ6\m8=?G_?͔M`Xy `y5DFR;$|횛f7tAb ߀IJ+dl @cC8'?{Ti߾w.wm,CĶI~?{٪~JNv6eFB#rmk5Wž|֎R7n=,y?Z{g*gav;I$ߩޭo4ڃ*w1  L|Զ^]uU_%: Xr9%9}ߗCy bֽ}^]di@y FI/_֖}ˍS 3?d{on4 =2BԮ۾֪M76UJт6u] ,wߦ-0-݂C6_?m-حͧq<$1z}O]h-_[ʇ.tJ@ z?7 ӯXG_/k)r;]2']Nd]y '4ۅkP^FFqqnM{i7m,{c4KwME~Byg3oS)Zosz0inzepOʭw1.Y>$ 9zw9NQ嶷7@Ja$cn'M+^a$R[?oj%?#Iݦ-8x:mw"W~o!%tpk[[o\egEYť=?Q rW\}:%+.Xxw|1|@n>Y:z&G#{j^ϖ WNil^^烈-I|  &|{N I]' %kۻ#;g w<9__=?tLۈ ~*+-n vp9 }_Μ׫X)J}|kxA 6f8g^W~t4ᅠg#YKӕ c~]vWc Gw?! 3*p 7zT_oCz}>y\q^}1^  =5\}~?0zO-]w W+k/;bQ[]ocL;URӮ3:o_~"u'p}֦S_$\8/U)8nrŎNN~o~K`M;k tɚr`*T99緭7,-^oԘUÝǿ~u?Nˢ>ZKޘ#zTn#ӻeCOw.M{/Ր'ݎ~}?_ek/Up~6#T\20C1YIަs(4g=Fg<ҏW1%GݟO]>Rmo˹ \yQ ?N6wL+6w-%p+iJyJv뽷_{=qu;w=\ݵz29uXr{uhWߏL]&3"2xG.#.Y_oXԪpO'otRӮ줔l_Nrۉ,HzVf%ZQIN!N_v݇)(+w!Tn<jڌmv9eVm<?.Li_OQR)H'V|iUXdnLUF\ag{\i 9f՗4䓜Wo7ӅB1 }?Zi9__ڃQ^bt#+߫r%rTW~{mzag׊&_Z}u b `I-%Yr_w969uOZgLRM+ GN~bzmϿҀbӳLGQ|Pߵ#pl֝wҽDJ*O_/sڟ}e8FooN=_Q6σ 2_'-mde-u~kkF\ڹ8< }:(v&IE+8?t1\?zz)^Oo3W}>H-P)o\M?PݻX00=iwV_;Úsr{] wF~G2Z*ٻ; c{O=ߛb}?ZGBIRC<@j=m hCo;iۜ mCwn{H^>pߥv{4O[Z}/h<`?{ymvc(k/)rn}n/FK~Rv=lኰ瞼5J0ߨ)HzCY;$.NIb?(Q;k_=M#${wqݑg#6i)kn[wu]Z׿T3 OTRoԍXCݜ6pWR'[ȅВT-|\_~rri.UN,p9~^~^Η5[[]R}1?z/݇+z;|\lI>* ;ݘΤ\9/wTn'%3H{>)]? "9@Ntԏ2t@w.6:'}9(<ߧM̑ `lϿ4+_~}"}v VPGv- tk!h '9>jm+i|yջo=n3+?׽|:Dɹv_tӓv~dy`A}7Z+=rky?#rUP( mi973[ѓT 7NM7u}{ÙsEqʏ[kcy+f5`ͬ=wmR9zyL q *ӛW~ੀp!FGKe{|F7cNw2{uXϛdi0O=E61l`_im[TQn0Aw{Ҕnvc$KBpq9W?G<Z&byJ@;H_[o~_(Qu>\֦2m_qBT}͟Zk~֣>! -*2ѯTHy-;W3iϿPxL=~j} V;u*#K6;[wzV(_篗]7v3!NG9`F6_3Q[]w_y9koOęGOOY5{Evvu>ÊA~\y$Zv^1WK8 '$w6G`m$s_9w~_[h|:m)s6?Rp}I"$I {>nչ5?Òd;7?흖G^"]p,Hv *2?_-ۯjֽ ާi ?ǿֵj‹zܝ]MQ\|_J;=($pW_5V{%(w4)e~sz7_~4=ww$*r\Z:wwyy9\瞤>|h_~"^7)듃vOZ@c';۷_qr4;.~޵mZ=^˯]IS^ 7?qm# c{4%3+?2xwq9ޜγpv4d[ ';T;ꂤ,*.zc1ATe~oⲁXm~uޫӦ[O_~Ƃm/0dzW.Ur wִI|Oq}5ԱX 1 0?Y%{j_")9I#6娥ͣY[ K7u~rmj=P6#n<'gs9C?N+C\ۻCṃq}_t_1^\d`s;w#f_~CBtRN95so(?ӷ\_RMs}J Y N%8xJ;59[~#0c U?ʘr-DH?(?us7IvKٻErx-~lsר=𷑷8* mG^?YwwUu9P}z{zQmCٹ߲#DF:p}~=)1N]vY{@?9&^M!N"Ԑ8 xK/R~c~?Бgkro/87 Mg;wgcI{hl'#Gl9fqʺ_-F@u?wm+;uz|UB IZ_[|l39鷟R~]?-8~ -rÎ4wbocDdh8$^+BHGi)Z:pI>uc}sǽMM_>~AEJ]5{Uyp빤mo1T$A;^y/_^pz?"]H;rw7NvYٺp>`N \~oەvG<.gmT3I'8] ); uLwێ +޿/.#*0apH'?_i9S~}.EmʍII [7c] }UgZxS26e}*m1Q?!Y#$t94z;]:o NrKd;:M-Iq4\}ǯ{P~* b;䎭jfz'~*L1$=i|q_=]w\AJRSoo1>޽ϯ_ZQ_b{߆Bq~Q+c^+z7'~Kqw{5;[4A@a^ m`X<7t{~t&n3k|/{m# :!nvl6^{p^d'֬o˿qajeY n?y@9Vkn]u(uk&sB+`aA^"r,QYO#zz=ȜnF6>7O&[{^wu?Y&rrpr~V979z^w5h#uIn:֦R*1w.AQ}:SWV9YW׮/11 u[m)&?Q-1|{wz9R_vT"o@BkB=uF zv{SCh I_P9#ןǃ3WVz8'-l̥g3H޿_,x!NIvՏ~uG-I=W~zn9I*:z^H.q^r2@_RۚoUZo&P 0<6cI>d/c+^5o-naʪw1R?:WFpJW{LGPR9$8km*Q7OE({yi<\⪌jEz."N {)kv$H;X?Q)}%qw.;/Qo_ߝߎ̍b,~^:?MJQVz;b}RMwc?̭ yNT/_·-{ߩVRRo_rņ;u>˚N)oF6߈Ԯ19?OWoRE ۸'w5HSzw1Tq{{Jm9:z7%9.H֨;[M98wdzMU)4m稈I ךMG#&8z~}B~>z# w?΃F>R80x$gn#;=&M5x=A<(m٫O;\A3xiW! ?%HKw~v~MAl}ߛuGJ#1c Ӑ7{7\ZqY@n9k·IFU=?W'`homU(R235%JJE>ޓWV5Ȟ˽ɐ2\7֊m+Qw?$)!qNJvw"u9u^Bᴎdz|ҽ-wwvWELpFJ@w_ɳZumv tcJM:6>x<{&lD9~}F9o4ܴ-anN> -o r+:,˧?ԉsKsB?>VMv9ޏ^:dPHfnnӗiq=;K_3T[۸/9bqQ{Z RrVDU  zwX&Ӻ5p]Bcq,@sMu̜ѻ_!" co#/: }ʑr:q?.y*Soܪ>'mr#T_$翭*F3]}m܍d"A}iw߯QNO%{mx]$zBRI?*#9d _;bI9v7Q_~hWs.TҔ8I%{z~7"<'8 IFO\svKU}F299fOiۭ94Mlp7ٿrIFٯqZ,+b>om֥>T5էkr (&@Hm3Z8qf*Hop_wCUmiּ=?[jJ.[N=_;%N3i}|D89oqUv~ҭԿw_#7F1vWӮ*8QzO/U Z=;l8 y8#?Z{3>MDžOP89=hjTo^{su~jbTN'<2o\!E]91Nߟ%}k[qqJM%~o_t-ocvOyMu'L?_60 ck꤯?&N/R=p$99+_5VMEz}E;WI8拧ߟG'vܖWm]<̄Wl'7欙Fvۀ38.?d}݆\}~+_ouTn'9=Go֛M=L%b˕ ǖ<777mY+~ U%;x:(ߥwB}͇q*3?_Z~Ok"Ð29ϡ 7;pBj.k{ݓv `l/ߟ +*VV5rrIjQO9궛_Oo28$h oϯҩT*o]{ r }~r1ӿZ'}Q#^(;?iAԞz\lH;T'r__͹~[wQWr;cDJ/wk}/ЎD'g^W0So^>H*8u5WkfPt*Fg8'o~tw5-|oS+47mYjw|@0G8(SQw܏Fcwoj-UE('*,ej@S %ˏHϻʚn_1BVZ7"1f$Eswke4_扩?yv1lz=sOSj\o[l p1n­k3nV׼>62ܿgv+2ye %?4z:j.~aN2+Ԍipֻk/,˓?}X.k~;oqr`@) Yw7*m{nrڭ i\c&X-!Ṥ]IV=`!I 'ZM_=N?"?+N<WM[Kg%/OoΏi"=]2cϲ9;^~ 1PUwuQܭoro,`py}^ׯuUsp_ԨY4)-ݼ_@Blɦ1b$|%rD Ps{[;?Ŋc#8~Cvw1% r?*Ҵdo7nU_oO'K.79#?|_o*mfˏ]ΑpQ׻dU < ?ǰ=}XѵKJ0\n'*muLO}o$jFR9v-iͧ5rFWKw3 siEv6?/?(䝣n۾1W Og_ Ӓ/ymqv߫+NW3]<ݯ1$LBk[&wOf!qjwͥ[dA ;y8|#e_\<}Ѫw.29YsW*숞0@'8ݻQ^/܍Gp]fve9SE,O\䝼Rz7Ե-ov[(_l}P1 n'w(Y~zmcA}G jY>m'M._}mD+;F9)J:~g+G_?6nW;Iہ'(܍8p۝%wZv~*B[7*}Qz).Oe۷[[wGw߆[mץj\=OkA >?w5疦vaac8%vs~f_2bޖO ܝy:wW^=ѿ]&q@d^Nɡ+vt[ |Ul<`94sǿe8J0^w FH'Nk);c&_7`€ӧ?wjnVoK"o9)'դ{_Gyy%6鸯sϯo41);&RHb;sk=d٬"-~~?v0JOƑ7vб#hR~`qo$֯^樤N˯*F޻/?^bZk;E;k2]Aǿ_be)'zo,B3P/sS=6}]0~Ry?7i:+;KW۲%JHsR2q5h/v+d{}+*MDO\rOBwwMuWfU#86_ r G9vI٫}2V+F? b_NI:xRrƴg~ivW'l޵?3FoMUUʶ7-~ϪӦW:iьqmI\OX)±c&}۾'I4kn`ju%#(0s~?ϯM=u#G({?1$7cԓk?_ÿ5Ü;nŏJ5:/͟^mVo [ϯZ!S?U7oV5kO2A(O&/wr>4ew8ݖ99ϥhz/sJ&_>q瓻vLtSz7}D@l7{޳_Yu}ŹϏ>Scoz\940'<9lsFihHcFg_9BZ\=>S%9]-u~MŻ5w cjMF }{s>(w5翙Gώ7Ov]?TǷ%><c#+]m>b=פ>۵(Fpsߗji>OCp|KzO{|۷zi6PRI]Iyf'#f֛{p__?Al. =ԶO6ߝ֢X{d}Jߕ~[Y܈SI{}wӨ4)v #1]up_T~̗U Ϧ3{tr]_W<$'=o׽SrLTS~n/rB됾o_T\~];1q d֓Iu.d_~0 Ir8cyw4T7nx烟sK)i{o؋FOS>I_dON9co'9/_ڌ]+{)sKJqi_ַ}ڗ4{y@}AFw;F6 a}M;_c[.}~h $$>o~6/'##z_ơɽҾؑAݲOFI^7-{m|i@/:wşʓM*io߻ߩ19A)8bWm[U(.9ORE@r?Fs7TIݶM)^<{y]bwpϿR)J)7~ݻby,w_N9ml̥oo,96kGlF6继A{S漟=C :sպnooϿkzSuݭ$e,O'Bgdy">_?ˠ@zsɌ-;`6=kʖcp:ue+t.yOq}9=zT+~=H~pFYy ]oM_#8ofm^b;gC˟+߯K:/" tU'ww9e?W}pUIa'}Rhݟ~$rpY+Y7cnAq##5ugco[vlRk [[z`z>QXgϸsI$it۾ƌy$" rk_"E㌂A>o7;/uޫ{11N>S?{Gm}M+SchVXdylnϭ76մfܲ}?dqHFVVd_^_oIioc m$Fq񫃵|iY%n*FH'qۿA슜< e%t=.1cnI$By?˽:)Jw$ Ks('⥽΄~߅ƪ,0>`T=/4Ҷ7 bG\wr}~oIS_b'bHl^⮧OgZړrwkn:\p=1Oh;]DMm]9lO[󨢭w11I*I#;f2qcMKQ$p{]IrQӾߢrA9?AQ*srsm/٨ߥ|ʱ$G!V;y=>_ȲpX1>J|׿|p]>5ga,3igs*jhtQR~[F#,s?AeCu&݈@l~VSPn^_2 ʿx?&m۳d*1tR v k#`A$esRMtLj{euS^we~_~^~w5z%$}>kFZZY |up?YO+o_QTnhzcHP{##|+s6pU.k|#8Y=AqN2JL*(Zڿ] >-ݷꋌUn|Fɐø'w?#QqvrHԪ0x=y#8ރeYWy7jo*KuoRW_)ZW_m~HU89+&g}u۹pskE4ZO|Jol|7|%^?3&YIݑԜ;o;RG`["eMUUv˟EMW3iIgqۉG'\_RSZ?¬Y+C@uO#kFq ~^pNIǖ_W# ߿_L't:aQ_qԓ<ԛI]]iN/9.~AvF9-^{?ZϤ/ B2I13:Q;~$߻ݼǬM3]N8 ~Pzul¬}:NSSr/Ȉӻ\/1TUJڽz]8˳߯Uϫc*8!r>m](n2ݿOnxu  p?52qJɿW׿2צo##9[WwN;]pUߧ^B0A|\\؟)E=&zw^{ݲ1,Ğ23|ZFZEJSgq7y|Gwֳw.G|]mΏůX=7i.EH Ӛ*t: ѸVfЌ1p91_>J]7~1s=O=sI-ro][ 6rrsԸ] {R\tnXMudb$1q>ӽ.uى8ɶ?o H`mOoޮ\k=-ղFR@ǽ+X˖~| ?{#{M!e}wR~ ch zjä]@^3o2w}禚?DvHqqy7/bsȬԹ~v7j6ѫ)~*;ZIr)y t=AZeA;pR L _#?c\%s܏ߖJnimv ?99?jjj+~wt1T#dܕ"V`b9MM5_ '; X(0I?w}٤Uň"}Ćm0:_o^_(3幡JOdZHkud-0o'?~42bޗtBy9OgG prq҂%^"Pê拽"V$G?sKtI-}Vv!B;'wW1нIS<6HN .FO /^y4_u7ؗ'wo9E=5|r6F1ZR~yhS 3O٤{_R;yInGO?3x+79^xЇ [D|w?^Toq}^+{QA*3Af,ŔG빶j f= JQA cγRGm p߫VhRןz)ES׾W1lyUrKSo gwrz_ /ӮFa 8cׯA#~ `{䑟uL&Ov p e#8$gw^6EnInoۏE;ioU)OB1))9OО=k9~Sw26`;ޤΛ%!e!q,ߔz-|_צ*n[z.C .:gsg5))Q_>c|6m^.y=ogʩ|g!U&󾿎Gm!{i k{LPng.G[4;t_mnmn :vhNC({_5yEeUW Wty~mϹR{[rdO? [?Um\]kl ?w}}DϪ_,o Q}Z9^;];j54Fz'}ߘ|Ymv C)㌟mjwIC嬁IS;O_OZ%ի_mbaax?wWu<\ac]z=]T]o+`#=vW4__Oufޒ œm]dK~aT`s<bzt^z {HczU<=Zٿ;>~L^WFP{?7J91qkXk d d' %&WUjk.!쎿{ /覣8Wn8=s7;->eZQM[*矯ZNɿrK=]PT(H^޿YȹݳDhبەqOj}c)6o[ǡ;wg- }[4jTۮdmP 6H!}pyc}Z &ﯗeUGP>\jݷ~nn(hwqiI'֋{e#qV sDyz_}J;8R$;=G8Z$WyL e)`q[)9G Ouor&L}IWq?4}o=Ȝ_{9cRB20wp?ħsBj=|s'mFhR73T8)r_ elnu ^]ۿ3_vw$MR9NKukjHq3תA_jp;ikk8+"]oZ#UG.2W'߻}?L&})zPSsLibA#gݻXYӖ~oc9Ojot#*PXf=sQmowmGս# N8ǯќ[a $gۚ)o[W[$ϯϯ4k7[i(oÇ Km%\w54rMK}Hr@$|:ۙw_y.Wp_7c.owߩ1*W< 7$|/ioY>`  s?t#h1c[#&#`ʁwZm#=)Bڧ*FNNw-SV^g:n2ؗRAw=۵վ騔Wq9[ڛ{OSwz'}>?sI>޺_zp:ORIJ&ݻ$~?Coqu,y*?ɽ\v2&1ڊqܿ?7?x~v՗uk0V';rM]X$'j_m+(ǖ֟[Aaf\1S_{'?/ރ5&#Xvqgoқn)3RZwcPN;=zgoG֥$ߛ0ݎGEδ[#C"?I$='k^ߕUo7V96ݹSj( +|{uRu&RpB@¯=_һ)*k@;#gީE[[8f6n/~;ww҈+m[u8 {8bO%+Wӯ/p=ʩnVR,[v__SN +ZK#h^sC~_O}.OҮB͞[:/_G2•q"0o c*1oS~$sIkֿmK|xޙp?56Ii cF¾9&aJOQ_>~EXRF}>z%?e]=7'mwʫ]\ݒ<1S%~\u 9Tz~c6I2$`~VNz$e'-վ${k߯5.w`7SO| ۻ oIa-wI=5z(*#S/v{ԞݻW$ZtsT6Z"m]PW*T5}leǩ#5uk~+s+_#N,:rB_d9]l)\t-ܟ>_4NX~_̌qHNp:n?EHH$8_RvwZ'ߧp^ dcsܚmݚrk} M cԮ~RzBtT=71;NNv}9Vt&):_c`r}7~Go[N鿟5XlsRq:}ѐcx=t%vp$9ty:ߘ2(%IWgAc߷^]A$H0w&?/s֦ⴻvHV;ϯZi%0Q~}}1 ugdʒ@P G}[ZAw_rɵw[ #U#;d/\kԚſwc67͹2H99#=k~k}w"4ja~oqs_Iy.!6WOu&ߝ IrI'aAwX]r:cw?שiŽ_ݯ1X)?1twIPs^h4߮5dbʛ9onsT* 96\{w/nvOW%^Ļ6 =|T}zuM6Nw=-ߍL˺iI.s [UnNi>`j OL`tIʒu w 7Zk)> -gw^}T#~>Āmr3^zRqMR.U{|řqjS?c2?uSSZm'q=?I8:;[by` 9뎣K{1=wG4'sݞ?4+v?QY' B:Φ2V=[hӊVwU  s){Ȉz/c {J6nh|#|N?6Zs%I8>mS} YT:z7g&w,dNckv| Q{1UF6i?77<v7ouUA w}yJrS>I^v7TgU'_R1Ur01n67fnXvU \p)M{|їw6pIlVm&ۿ:cp?8FFIu?DROf,*͜s=sSjV*_G{Z1+i۸TsNWwFvXU'%pU=wta[*'E־z~_i_̑qO?דϭJmlgM8]ך1),rOO]o[?c$|{Zs鶿К5$U8O*9\gn 2L]9=|;vgv}MuW3?'1c?1[[/Qԑc[aOkwrlj3ovA٣[>C*_>'$cwezesFhb]˜,pskd/\[ ŶQ7_2BЌ7}w^*߽ ]|rɐ<ϷZr*s?k_/l.9Kc?4˧/mR@9w$}7zqכtEi[~4A0UF#>Qh;[nh: ? (9$.7Aޣ_#e^ӳ9%'>Kz^{IswQѷp?Y/\(Rxz`vBw[61$c4^BU%31G?4K{>wX,ӟ+}}(RwO#q_wփ4و8Fz}v0=GSz7>b89= + ķ?փdgIb@n~h3n䪸A< :~^2Wk[om Ysy?ӀXV杬{y0RzWu9mA\_Ȍ֋G絿5V` Mxߝ-gNi[T_)'kXз[vF?O0LnP2T7c=_IT]ΨޚW;>YvҚij)??D#@\/MW"seu.8$gp7|ߧrtc*@mjVooSfW܍q9`6>m65n~G/kv' .x A)-~?T7v9ku(&Iw9#$ggPem}|b" n߯TԔo~d?9&S^]Al}ojN}TR[!?δN?r*)5vGy~ϛs3xmTBjTC` Τ%fz}ﯽR^h䨮F0վRrop;s{ۚGU}'`0sg=K+U$l= #P,>@NFq֠n)lpAA79ϥKRI]y@9 ߛ?zJ4ӽF$ꣷޚLgNi}6*I=I%3WRVoG[}Z3\KO˷?s>NS?-o8G{rҗ<{ 빈 ݞվlִyFɌ_tΚm?^~:qI<w]>d_Ϩ^@<z4Of5#p#ձ?)oz(]_*, 9(7OM|>~d7c8?ݺvW7qVM{60wǭ3Pv\ǿCϷ3U/_zc,zzl')X}ztĂzw)V{|Pۨ9in&OP*/׿?օ$I81$^3(w__q;0q7ignNnYؘFJ8#nՌ՝piGEk ьrO7 ˾ITvI/ϱ'>Mt'yZ)>q!ʿ7V( $ {J1 pwzWW;t@=1S/:1Rm?\n=}9}c?]M%{K}+ 9^d@8ב|߮sQzk/רj+{j7yէ)Q/W_$9;-T\:d;^ק~"$7nwwVSFZukg *nߧny$wAnOӨOVzփЅEݗnod1`{~{JI4uՊ$pF}ߗZmV%#z |I4eF[[uik*yQQR>oI9_ҕe۹Ioai'u{XiYX=$zLKMo{ 2g=? Rq6/~|珥|WPGw9?Ï_΃iOĨHmדO>ro__}ǜI_E*2Qkw$ x{u>AԠo}Pq We>9j^qOBN=MB7Oa)IaNWwscҁJI컰J{j ^nI'r?ǚvüP03r3RW摊t#yG[|Rwׯ@^y냴q?/Q[ބ_V azG_4sK''}~{dpp7qϿ֤4[; N 7[sǿ8T䧣&`сq睿&^o ]FxԀ?@ϽT믟('_HąO_oSeQlH :V~E׿Kyj.~S:J\n9}_n0|8<=h1UW6MzͻJs}-}RC3w8=?cY_[sBMp۱f~sGM%{_~^Z%Ny>c6wo=c<>:n6o7oԇ_RzzmA,HPqkte`'98?|R)KnOЁrT9h2qMrI$thHM*͓_Mfܑz_ϫ6H*~o-[T{&]qx'#qyc*oײ#ո8-jmyy t{''_Դ¤kZbI O?Hu#e\O?Z=!8<]i%Skh?D*N>Rǖ>.α =P:;m%̴~ ޾_Grs0?ۣƪM?0Ă<Bml8oy,AA[$Z7}4ZɧMkuxm`@杜sdk #~nI_5?<냞O)/4ZQ6R=߭KM=A+vt& O]})m{lnW#}깥{^[ Jk/xۑ 6ַ]m(+G~Z_/ g 9JOE'pаH?61??MfJj+^6s`g[ߏVˣ_#)A+ߜckpH8?*~Ϛ7ۿnNK85?_Mq=k=~9w?N9ʐ_]I=*ǻ'Ne+WCgyo_,G,({寮$n_+?\ދ꿯fihBdr8^0UJM5]?ko_Q*䟗>7NQS[U_˿շ/ͅa?{jIV}{kԆ܉ ~R`w}i꼌}0[?,:͹om;I`~6<8}*Z0 jp珽.zw4k.|̔ס3g-V'N{ÛJ3{{oHr7_{TJi{zPE{_^בkne 3|NWm_ 6m_=j)liojE0}^j /˿[a9[;Iݿ(+{Wp׌qRLj)-~[lC >2?Veh_V#| e'do '~lT qw;UuvWZZ4Fdl?*?mw shujFc˾e_ߏ_/^-[MmrCрxPBLz^'Sinֻ܌CB-mŖM_oimmo23,HŒ>1MaRko^Wv,x?yvEw6[6u!GlG?7y{sGk.p~@ !Uޒ롅|ON(#XՓԕbأ8TUSYw_y|ɦ<. ~mI%,x^ "UIo߾N$9?93JNջ{Ybǰ_Cz|\ZZF5u-ۭmąqw[|qEs+M_aВ:q}T2aM­k˦bY _, T֬ovJPM'~uy\eB/Escǀw󫲍ߟk9+UR5禾b;lpOSӟ=COvIoGG侵J뿯{7FN,m5{7$'ѹs|ʻUvV/:JIk8  Uf]ݷӜ2ut^^JvrqiK]3S]"H9_=3i)8h m]+nʦeV^~'Ҧ)%գjQ]zp'}{ғMխ o^3)[RwO'T\RWclh%To=Nw2pI?{SXp$6_Q#^wddxnU'v嶤*J4#r25Rz+;L |~n)s*).y 19m{9=׏ou~q[ fUw`8徿+_yrTe*~aOtb{қK1 _JiYX*O. 9 #u;$q~_󞴵z[t9{oՐHİFwݷH&}072ś?7'8ޭi1npP'kc2a89;/R Fُ7#+?'suw\sX w{4s˹n;' ~o_9/=瓳֌!h8#vk -%?b2 aw{&O*VH% չ-_oRybÎϭ M|Wq^TZNmʲ;E{֜}W 8USrB?7xO[avw/~^N_^7orR3a wtArJ-릯ag#9t}h0p?AӠ?l{?RTD$zT{!YP L:5_k|=Ȗ7a wuk5󾿑#'o/ܰ@U umIԤ㥗g$(1?7S_5L?{jS)]_W*O[[nKmO_o}}W[K|o!asQ4[mytm#K0#ל]kTޞzhɭnRX²Îaw_-ܪTy!ݧ7*NyS%gB$M<A#?{jkpqm[}vEuuLs.]9~{JN)5y֩:g??p#y*@͸r?5|B&̏;wqt?g<G4RW]mϻEa~Rzg[ȭ/g{M/A<^?Ojhn|Ea:<c޴q0%|r>Ud<&z~&ӗt$upqq>m"N m?-cN%B[*I:*sG׿8UqN3לsOSHnl{zk@5!+}t__΃T7o/1aY;ݫ|h߻x;X^^ܿK7NUv@OT 5}{O#9RwfsI#g?mt4^߰ʨ>wրݠz :B=ޤugQէ}G`N:}߽y+i f9Q{u0V[[ߧANv~}[p$'~)Y˹)E︢6ABȔ\^Fy?7ΚA9[NϓKo{yi,:;s*˞^Z(B׷[A69!?ZϲfJ*;0N6<JRkx{C/_ +H t?ƯD#9I]}N̜_' g_פ)ey:5m[Ka;ЬYNXZY-Ƨik$ar1$}Ri A_"x9k5_jY~"h.Ns[vR_Ŏ(rGRwb/#h>O^ry֦ޗO>\!o{^Y1q??Y&]*ww-FK#9?ϟΩԖ_?QzϮm =GwoQ/__8ioFp r3=N'T]Fa7'*ҍ;sU\]8O_ݩTuf)v> 7$H<9c"F~SߧbEv[O~FkjHTa;usk Sj]wՌ*PncU)^ۮ.<'!PHIʑpoή1*U.{po{wϿJjI&tZ"㏧׾jf[urKϵ,4c;$ߟI*|nd1V; ,sФ̚ރ՗ϯQw>=O_Z8qs]urA9~J+Vv տ]G|yPhA?oBі,Tqz>=kHRi>o@ʂzc?_j ޼2`GXӭ%{kMl_;`K0㜮:B6__̶[olM(7p??zSqV?]{2ci뽈v?䚨$h#c<_[T)('y/_Qμ# C{C0|o>s>yy騴o2w6IOrExIib9-qxW_RMKUrtӻOk٭WA0<*6}z\g-d%ud^ߡ\׷mI_pl+`?8ݽ{¥K1l_?~BO;`s;-bѬW D)eW av篵j&P^/q;~?; GOyyO~?ԔĬ.ݽ1=>+=i+J>~BѨO@yZFM_sJI۱pdjvtPר5U8^O=:gfmJ_;,yO PЙ`߻kt ɵ}n~փrջ| AoR{OzzJ2~cmMT*4R+׿$\1 v_Tz+|\fݤ3sLc}vs94m??O铯##Al/,{4yo^6u~A-ƼCq9%O[RBI ,=ǿҴPo9긽o_2ƪW-z*AӯiMuTݷJ+/;$Q9}}j>v虥Em\F }iR}d?,0#9浔cJ家1L@v:}hFiK1'$s<ֲ鷯OQ6CNw@4uzF1# r {qJw44Z縞^uKy_27}H;c1ɪi6I}sJ:evtAm:jdxݴiIwzo*[u+96X|o rN:۟N>:JZ_N#}=RkebM'ʯ~̳`ps=|+rЙA88sYNLp׮1d:'{R?@caN)r}zstk.T0r 02޼S4ӷ5#{]zNJ:G/qFVk_?7$' vNJi 0(88=<^.ߨ\qc9_~[H2W /X-?SϪ6^?̐eebqdg;{9DOGSjZjxz`]yvߟtĐn#nJA3֮ +cRI?S;\J{swvzzt▲[sx'R69[N߇Q(r#+ךFs.7BGrGxұ+UEu/-@v0=ssڶ+z&?X}d99=O~[<ĥ}?p'ЮKe,2[>h//c6g=J>^iA{4z~kĨy,sWWfRoQTck}}wW-ok#(qwaviyM(?fÐF3{dWμ.H\{V_ ;Q2?6>ah35{ arqqNy?/;n+㏕pzg'OIӜ$׫:!ws"{/=Rk7l7=yz{}5SZ k$M(Sǟ_”emcVk{};* 9'&~z?Ǧ3 T;I>w)o1"SwC%NW:۰pOL?֗|NYIme@PS}:3I[n!C 0@ OVouV"T-_xr7rsیc*Ro̪q~~{ f# u<;֥z|I$ TRr맡(NX~{{t.vВkGb[q~^Q%OÔ_~=RĒFG<{f3]=OAR`}_S_i8\(v}M+?N@+qvVIƓz??(s/\fn]q8dczg(-]/^N~n.U{QY0H;X?ns%ft#`(5޶^n64 ܏O'f&VרCdzy \V99o ~|PTnd :'9EQrJ^~agh3י{N}zP0[mywz|ϓR]+I+uÊ /S}OJ~a^~ǍwO=:uARnASqǺuM9%~EJC ?z%z28֪1K/p~q?ӚKm{a\NNq@T޿8)\u{Z|}ƪr}FqQ嶷2_*F0Tz I9SQWت'p y>j,SM,R(qYY:/fW;pF_\{s QF$ ӧkT(?/qD28NGLg?+zSpOFiʞ~jNՎ/Nȕ6pT9NhȂ$ !rP>~gz?֣omo19_72NRmX0G9,x6sgћR_e@_מk6k)J}H2Ǿ{Pb#T Oݷt[s?ӫ,UC6~o^e{R/}->p7q?7] -tSRsޟw1ܛÜtkj.vwo̙֓zT؂2[TwbG9F0r{{=?.77.UPd$[v~LԔA]+G:ŻjgJ)Їܑt5T~aDSGfxןPӽ75w]m19ےdkִMuqQf:!9~mje7}>z1}?w}ZwW4-;(]ql}9Ϯ߻2e%SFOUm-O@zmvvTh׿Ϸm+n%:^sQ{?0MF},!Bq'TNߞ*&?)&5?+.TῈDdWq/75b"ۄOsOGMk"eoAC߿^٢& T6N! 9V/קTJIo]|إ>vcvݻ?L%QFEH{Qw-5m]ߖ/O_縝Hz߶k_-|?iV^/W 9Eד\(SuRP[zuF ~ПϽ7O )s[UB?8 '$^ɦtJIyr=9s'(#)z~#vtNrsg?u~$A 7m?Үbkus$_E믘HO.[o"yoiccp?=su+K|#xI䞣?:!SbW_)W'!zN]>^_?O1J2 c:Ƃ?Lvqw|Bi{oċ1;.O{^h9j_܆28*w,ON?o9 sFY/Kz(H8'ɻjY*-~Q!cj3Ju/ʼnq8f;@?}tޏ$d3mOC!+_[v5)snc'ܱ @]?T7y%{Eݱ'+Bw{%zRNN_W?ʦv'{^VSjPb@2w&[ :#}~5~FX:GsU| ~q8s=8<8b s׬dLC+6T%s- 8F[ڿ{ƔFJqMMm?4y-uCU/Ԉ\~Vw 9>mޟtOYY6qp=4ݷs{{1yKGMYW )*p39+~>X륽?Lu|(ITm1|d}?zNO]-4(F5iu H8b3>^m/8֌a/-[=wqMIhԢzyoqFrΌ|x_ǧBm=5drWF;b6l(6*TAw6ڠ'}~Mro41pwo&gZV?oKRۛӧA49OA|zm)R[,*pvN)^$Ȝo_L %z?Z2zWok~Mm5:ŵ[ >}pYI%wͻ[Gֽ:Wi _Fޚ\YZm 1鷒דԹ7d͆e8#~9[~+kwxRgkxr7rɼ!Fyn[(u7&\1#ozEټ=|R}#e7_{JUYT6 /l/}ȏk%ە_U1M׾!2Бۯ[mZ˙e #s$8Wny?1R߿oy6_~69w}hm-q~Ivv*m0~o02M)uMWKu#xrf 'RWC"l}c+縝(48 @ Xc8>w}?+6{o;+0sǿn__gRr6bO4z(?Џc6ܱ#wӷjRWo>qU*}[^mŹ w}Tt)Si5u\b͕,IWo@\Zjq ]7o{`xwnxKw{XQ[]t .[9bs֑Hw9u9.AmT޷ߡ^dm!AW'ޮ;_;Z?"ܖZC _krG*os|Pi˳ M="}R0Kd|]hz~eJ G_aN|F?Wkn?Iŭ6P10,so9[΋h{F,p=?Kw8J/wDۜ\wg_JIoT_%0碂gI.Qz|:\ׯ!x;+[wiޞE\` G 9)+;=~}͆ȻTPCq_9}CrG4`*8ӑ^:Pm/Ͽo7\7SJSznS3E'Um2}/s9{Mjۿ o%sco\z%t{8R2@O F&koacqz_sJ*2vwvCv-{#ןzt]/4eb{{[ۖR ?Qx౥̟Tg;{uoԕT>YYcvI?qNsWG [|{\w/O;9~o?ÓPç?o}zh!?x}ɽu7/fWvA'sx~kV_ `wd`.>_?ƅV׿S^|10I1su<^/<~?_ 715GL~ n3ӧRi)8W4] _wrn]7z]X=1J&箿n1 Ha9moJk}vՍ0bN@m8}*D#(Ҽ; xZͷ'^2@\p=v]KN_?VǮ6ߚXIY u+Oid]o5BOMrT6ۻ"4Z{z=qg)roV~v;x9PGo~Y)*܎?֭ղo,?4y{~6ܙae`I2z%6*r[K:b`NF:߷5PZ_sͯ)J %VC;Aj>nE*N$S 1JW²}jjE^#9-p1ˊʕ44}嵚d$?ß}}ƒ.^1ܝgqZiEc噆3@={j_LgisI{JAXt_Vs75w :JϠ\g{/?7Vǖ+~>Dv^Cm`.~kHNNk vOAAvO~x=zzPKvݿ,X<_A3xxzד˯}D76w ~[|*Vy H+߅؜?KmI_Y!f!y' G_߭ vO+oCj"p[;<ֳ)Ku?xOC)6w9R侚bA |/\em[ Noq '$2:};noTRV}v?yϭZKoo_g'w|rJ\cPm=PФ >i?K}e%n`>x=eyտ6HǮ?4`99o?‰+~$­mrO\nOUw9ѺKӿr0XQt`^ս_3n[m,68#?j턥{)nS۫q$m9B~J0GXx=?c3k^S/ex] zIҌ߭ꊮ3 G:Sw}}_ n?8sj[ ]$z!-t# }O=>_+7&2z??h O/Vΐ+'$(T#0 '|ރӻeūZ-?6F̓֟4(*POPNJ^&D}쾃1'uIn5"u,ܓ2\I>Z1z߶)C{+k:Jߟ˚(~{5ʞ֍%wg?~cxCk3zUE^ꭼ)t@M^o߉0I,? ;žv`ʱߟ_Rlͷj0FwWPc*mwQ_2`#<*Jnpz8ZMv`' TF~nTVoꍣ\Ĩ8p3߿*rr $To4~\sCKZu߮ v% ][}|Bi{c9l{oNKt˻@{1pO~rA cg9jRROOiWoe!s@ķ>kGnU&Ӻ.t/yW$AK2@Oʛj1p~^~Ger >GIRNI?R\''nێl7qQM\E.޿Ə%3ӏB{u';OE͍Xs?7=OZ?Ow&2NFW-\a; ŗαzz6rN/Ĕǝdjg#$Q*[܉ -1G޴SO}=娤&zt鯟qV7*\\aqzMlҍ9_{ 9PnڕG{IZ_JJr?O]]>/XI+{u#Xݻq䪕{sw"RW{u A:gq4 '+-<ַP F7g}߮)+_>c6guo o]_"^ ~v1*I z% . ' u_?c+I% @;Xgw/T%v'.w8@{]?U}w``Y+{-|vbfl ~9_Z)'sgN[ I$z_sXJ0Ǔ}p0z{}ɵ6%jq܎ǯ_A<{c8<Ͼ =Z_Uel08~m|6y(M  ?tϽMN?кI>'n;f7yY$N2]_=޴Z9wO^+B7ͽ{_YrUG˸{ʵU*v_=TWp6VrߒҒ/VD"~uj*ۻ!A7qP7-á֡+_;ZooKIIT_';rFgӯO/Ppzf!%rx= ⾼F:oSNrnTПSS.do/Y;ϜURӧDڊ;-17Zm/smZ[pYI g=k=d_w=U1(9$zu;˖|~rOCh}56Jz݌@$GN]ڬ/;:6rA~vG~_7F N1WmĂ9$u<gi%R<%]0TvujRfoy7N1ϑr8??5$;K)8n~oz*R_W Xצ{urv>2NW1W{ϯ+TݕΫK;u{*v(X02?_L{--nÂU ^:/\SWt:hoyOBw"6 Cu0J҆i{7{} <un.F^R8_osN_1SBmco;W c6$dˌ{w5+zPc}چz4+d w=׏;g,Oc_A<ڿ/<~o'|ҁƔӻǨG}>-I%e}=R Z_7ng=rKߏe;+tvDFSpvu?u_U#|popwZ7 !`XcE ^?k nZx*3rǷ~oև_8A0 ewg#g雓o·(}~=J<0  k u׾qBT]Uvyj]uB?7r_JrVW?E@?/۷[6o_5nCu4]VA2>Pr?Rv7d`b13=%m鿝}_|}TceZ~@y>Qn}.bV^Fy{~|~SN߭W;jK@Ap2O|N\ܗK>+V?{A&Ӻ7pi_& ֫Kf2J?/c9l }~?{~1WRHrK|۹ts5~?¤5EqܸC s׊i-W0\6۹R2N̹_}\+o3N_xT^r9#wJV_ٿuY[}$k?2z.}ͯw7aWr8'}s(wdrF~b k~?JQ=XKg$)JV=[oV*ݓs۳zu41xJyN|$ܓNqZN2+olF`P^8y'~_]wPUnvpϭT&^\5]%w֓m˧}ׯwsd{u?wQ95nEFI9>2rțt߯tmVdgTm qƔ!HwߵrR[Hʆ9F}A`?֛V꟣'tOݧ(3^ס+wu_1瀿y6㢗kuTjZ˽Q?1=qշ֔ewx 2Gwq=9ޑ_;B&]ȡncs1ӭCz*WcW8c'fuN_j+aOx}6yƧ,÷~_ga{Č'p9 g>z&NdKq8l.󹏿M̗k8Gԩݭ~~4ym NRϾ?36wsNyT}~沃I^!0Gr O͞ԪJnBrwe{i4. |Æ9Llyg_ {8Tj|0qO><~4J\!6 A<w9SO.P{d~e_iQjԋf 9Pi~Q5- ;R_Mg5k~ F-<IEB.d@qշ>=M>Dԫ)loWn22~_\rI6~BpRXQyTJVיsFa<9fo?&9F,dg}O$93y"xnp#Mt_!GK AЎ91NP|4j@$eۿƛq{Ҭ֏$lJQH`8<8]}{A+=qsM7g9M8Gwx_Sx8}}8wQX-R[n $ۿRWwUok[߅\mvĀcqeٳSM;7ZtWjALv`76x˳sa:6fRcr~=}5? ޟ+~=-@ UpOM꼯ToQUA+>^z}7V=ni?M9] ^/qȨԝ k+P 6pIo}۷ծ~Rf1aNИ }[G2(G-w\bz};qM;d1oԛ(g`d#(~>۾{}:&TUkӷkzl`OcsVO˨m~^C< q [:*Jz~vzͻi)j~>+DnsO*I3)&}>v2ۿ?wu_䏹JdI>_/~eyoNR==7Zz>Wܨw{o$3BM^ם­ICd~BѺvQ?SMMu_q(E?Fr >Q<q]nZAڣI\޾Vקe̚{mow6ʯR0[UZKmon{/l+ 6Z'mYYkAAKg-v(˛~=[$2Ir?y橴y$7mƕr.?ݏ򮻯Υ6ޫ~:mT 2WvlZ$m#T3a\U-914]~_#0Jx?7Lv.+ S~.e{__멬ڽ U\)]0~oz{FOV铮^vgVrVz+y5P ;$`֓tKO~<>o4it8B}?Xcs >m_4'׷شJXdHGcԧZ.o mzީE'5Jn={ۮ=#ִa_HɕTr%H?ֲMtlA'wF09rv?;+Z,o?BF8\c-蒴w#V۟oڣ+>߯KdVpvkzzНt/?n72J1d;h{'t]9#x'xTK?#i սyh%_6nbqӽM{K;I/z{VkDÌ<eQwF\4ҋov1zT3c.z>X,r{|47wfN.dPQWty{isw--ZOï-Vv~7?<.wrG'$O%S+jGIN=;@{!@8w^]h+[]N0QygPn =ELm/qʔ﫿oo/}3u5إKooo>Rx$IRߧO_ZsSۧ_`8ps}?:V՗܀Goc@׼$9bE%@@Fo]!]hݿWw沣_V4{}Ni3[Z1V=rğlU6g/8ݤt ymDX8$rf+O^m,ao׭JݬMZ1Jn7nz:7}7Fy@oU)]-Hu*HGF-?7RwE){?D 2=A_?쟗WW2˧~~y a@{[1|kk&Tʍ'mFW_uRp7sF; \NUy\ZY^{eU]9SO \#+>qnл;5oYqo~[iҖf49cf̜)#a)Eïď,2G#w5GIwzM/68\x*\x>*m)$5d/ȣpJc#+_Vիۯil_2Sp?J.ffNF7j΅nپU$fh)EoGg*y ko~N {'=I*}\E#\es~^'}Q7`>f#0 ӻƑ'1)9#z rN3W26 ׯ_zQWk0C)-|x_$~+T$ٺ%u2O/n8<[o}|l'qަ.z8m^@ ^t~=dp1}_?]8~f:W 8{֚~^اC6,r ϧ$TdnI}*A5{\t?Cnv5M%׾ Ŏ9 Iս*e;uy;H9,xczIJo +ۿO'h$OOpygZ~5+r?,rNyG49r^N׹I4o>a)/nRz6~<ƈsUvc[qvDkqƜo) ?Q7Rӳ:3;'~_iܹM5e}{#?}bROVHq9#kߓ׭Cլv/u+g$]݇=~+yN1_>քNv0Gִj'M{OǧWq]'uiSvow8ԓ[#ׂF㌏IϽYZ_aX:tSRhY߮uǂN)=IkkkT CAJsi~b,:FܞI6ߩ0ӕ~_}%*J g Ϩws-t˯F>my}Dc~}Bz6;qM>/7R^1;C?#j{[u/6@ϯ?ֳo3\nܔ!efi=>_]S泄Z[ѷP~f>G=HrݿaŀsՏCrI* {q𥙾cӡSׅ9զCJI;Hgu_u)4ߧr!wkdnN3cs]=$I4$n$vɴ\L0w#5FUirU巛԰l^泔m#Jj-{^{9cӌosOu{bH>F\D"P ]21mQ8;+o NOs׌G҃r9]|]mFW'ӑ}0/g^0 a??/=K}0ݿ&#r0pz?Xoݻ"1l盛~SRm_Hc˜~ͩ;wNہ,1z<8{K/~3¸pܯ=};E7ovM_͠=3dB m~=/y_~of*I* }x̋h9lwzPs׺w9PARO'-J Z[HMq=G_׏k|>egQpW^׷ ,Gr`?ƛ/_#/^]~r5)TQo[PĀ9?٧?*8ЪKn8_G*ME{pvUsj =:?NTc˷?UVnzw:y~? K7Wִ%\~)3s}5⛿ޘЁ7>O˓ϭ>iwB9%]E+RI u*[ܺ^ %~ɤuu*ʹC}jKݗ{) #=*\}-sd '(X:_犦ݭ4)o[שMZ} g|Ez#7mm{ww>_ZZ40u)$H?4u't}@Fz=i;˯AcnA:(9}!p3nAК{?4vi򿘢 z[׽'$Ӧ_>}<p3v?֥y_יoa"pCg `u7A'޵_&A@nzvYz; xK9$s\; d F᎘GM]{apv9#Of}hʑnt?΀I-x@]0Υ5mDX Mc?F8~!I$ s:}zmGK D_;1Λ8~).dLc9?ڭ[!SJ\ۿO"J~ugbqy]տӥD99v~<2.cD' o ִ_%JW^oq 7@GsS'WwAUBsۑ<m}S;~cG2}[ϓ=}w*GrA9$Mv_ߡ-lS#ǟt/{o $?68{^~B<(=q=xrſOE#D~s$/O>+ni;6G'I;;$շlC09#U{ӾjRwܗnoqX7wadA?4{`ՒoKFH-X~皦e8 #~kR1FT?UF]9=ud,OM;~os_I=wVzdsCinM}AR}zc).Ssjۭ[j?m>˟ϭf%R?t"nH gWi9^N^l_@wtc‡%my̓o!l(~֋(y/u{]}Xvf$=8#cKk~w0B^`rQ}57gGƌ9'rWTdHFNz޽}4bo=;n3,{I5 W.21TL΢tҶ}qBgh*Go~m('=\u[L=NI%F~~_s6R}mKZk $imr2wWV]sj :OsNU9}g17^%mDY_w"/(|?_^hS!}߈NB=f?7{way׽AҢ/#s$>˜=a+=~}ΘTPvܪcsQ=NmrI~Ƶ86DSͷQ4ݭи+"r@;CqVVclN@JzZO!>oq_nJ:~FbH`@??5jMld.͍Tڽrc;?&irj]H(dUrTdV{_*}5]IV0~b1?u^sXNM4:J/xu|txcΚvXKGumٍJ2P|d T*j a~?~ΥWyZHQR2-wqVKwpcQ-= pGQӝEAv+.͟\>}k[FVyҊmt_UOG5_ҕoX* wIM_܎ZKk HSr3Q)jٜҼfݵ_<RoFo#FɸݜXЮAURNI>Z/;9] /ry<ӊBW.G~G>v~Oem] maנy֞C˻z.RrG˓OW [ϯc{sHSSvjs˧iW?L:#${w_1?hFʊu *FF>L,7}VnT/_d9׾ݿ{bKwB˰IF}aShWa3@y=J;tOr/ȐTv *?~֢Rڿڜo]nt riu~"3lg<`c>o?U3%JۻGf'9<ցJVmZY@sm=,n ta<ݒ@#k5.vzIF8° ,1~ά+9}߿_^|eF*rO#8v*KwqSdwkdwZgopcBje{i,ukWtGw zcwqD)]~~_9^Ywzz {_4AR0 e?uVN? R BqT\6!=[?cNi~m7߯n [(+W+_n.[{!vo+?䞕^BJ;|A 2_ǭ.wu 16~S>޿5[; IKْ**IuI$ӳvYپ @\f]t?{7KQz_qߠ+`f;U *\3J>~[~r#'>뚮}.l).v^HA(bx | ~_2'(?vߨ_ d㍾3i^ 8@U`8Oߟu5Tڋ}"TW,?̯ϮH $>4J^CR+ӭZ^kg^/ Rp9[_` `|?*IFVk0mb$wvۛ]o`k/uz@$c9qO˻Oo}@Nq-jMlRb mcO~G+ޭl_P`77Nkc'_)H 9_"Ri~&AA_z&dX #հ?{RMs[fce`KI!+}se>oGcU?ejdK?*-Zr}l$vބi)43zN:=_a3p:~XW0H$s`v5']{n2Dd99=hJ{*K^Z?G!7Iz`֍~u$_ @?9sIh{0 o[d}юJ?ֲ9dtocYT`x⫖Myt Pm;m}CWsyM'ۚ+EӶ8$sך֯jI.[i#Fq?ިRok/<6T0x>ީJYirX#.z G0` 9{}/ N/ 휹}z;OˀI#<kEW pB{:sWdG}`s'sJLͧUz|3JJ3׮=A( Զߖ {dp?7Bm= +* SU6 ,LTM-}7Q. O_R2Own?UGy3!x#IdBo 6kAG}kÑA&߾1s[gnr7($En}4=Ht_~tގvlvnz$;~mއ~ӧKܥs瞕_t5fЍ8bA1RW_2_;_gO+о{[vm󶫮#uF[*Wp8{n&wbEw4_%_1ijv΅([t&Ѹ};{Г[(=_2B#:uVJ5Ѕ篯~}3VoUE 'w?~h")769b\O6ݷk kWYxJFN {QvlүZ=V{g`esUImF^EdOT='_pwgЍ^O޲;SӿϾې#s:;hO>T{zԎFzu|ʄ%@qG7?q.w%02Kݿ[4gz/G2#*I݌Pu9F I,N:q´mnDW;Z|ǤyF7Cxm7_kFrkO)1 7.yp{NmNCD~Y3|ßƮSmg^~册O,gKKvAbr d+\p}P/"x܌6A׿z˖^5h+ n(㌕,Nwen3m)I(c08|z]zv_ĩ9R>^9¯MրI;y꯾N[q#$W}e)JjuzAzu{5nZQKW×]w=o֊J_s6v5kk9<ŷ~.fN Sz'/>q$ifǖ}Ɣ=O-O2饿Azpg&.0 ~\܁9N\oq'u]G3 NyN3ߧ]z^b:+F{#xdG^N9BvwsUo0NÌ\zpwՁz~ٿd/)V=O?J\oxGni=[RT9\ԏ?LT]>Ne_kqkXn/ױe=ClF9?QJ־6Ӆdvlir_Mkmz/͜d{dn- r{ZAE_}Uޤ;~_1GQ?ӻ!9ܞzMIM5u鿞?{=9?Mɿ$jj.c}}Ƥ+E'yUs'Qo'cvs?.k_@vq%xO=?ȫ׾ߎӲ坡></_H^2A?{֡k~wQ1{jzu+l3aRzc#'j+ݯRi?UNKry'~<ܺooq{sK_-.6={Ҝ~={S F9?qRwQ]^y$`v'tkο_#/f֩UP\y։|毸qF2:r?RNo} 㓟_w`%[)npn bw+5ȌF |+i<d}dzzK߫2HEl{O4{ge{"x<zk1ߟ79?/CNKjݾc>(~);ykc9S-U'?~7wpT~"ǀyj6^OԅO]  qNsFV/'vR lzU:%+[Jj(1lSޟ$H9\'[sr+h+*%u$@.76F3ķJeM˯]m,0%\cs*TٝT:0*z뚋)]>m5n\?{CT9ߢg m.9 \):\#IACN~wq=~j\+zkHϭLo;&vשsٿ&?kG)>H4MDW,0G'w_繫#z- $#is•by9#$oGt?4EIOvg|_/?1v'Ҝᄑz{nrfľ6wG\?[5}9J{~8pqx?o|u>jo῕ 81$p{_{i]>ާLWM?aqܓ֊)NgqF<p{*z\\krϠylQS)))ǬY@G^}qޓ?;>e08ueⓓjT劽_)pr38~\Ф"Iwv$zvz. T޽}yZKQݓjE.Ԉmٯ۵:}ܹՍk_׺DюpϾS޶W뿑̯b$mPsۊM4 7wO/玄g\}1Λw_A w݂:_漿| N>q?]}I,0x8βտ7+jݿ?#ٷ;WwZKM9%1g,: tw*N~?E1vT}= >x߯Tc /]ڠ9rGsL|h$͌U1S׹nȌhgo5gA=.3N>=#unl}D}jZ3U]%ud0:Mm?Rr%O#'^_ʚMGG0֛qV_5(R}c<m1մwV8yz;Ͻ9y}NIi?7##jp0Oz M_{~U 69cqZ%ANIzoۭhYŒzTo%{km`Tv @$n^7fi&=;۫9f={_'t9eN|~{vFYθT'n)}7f{w1Jdl}Ni5_^ ;S<^޿JI/7n*ty= Iͻ0O}>njUNSGJjlaԝO%IU]{?!V-g=i78~=TX#(&=;o'_~xs˘Q맙@J 9lmz[wDIxupwROG_Su罇m ǡoztմz]Ή;&>aqs\Pmn܌`>8M8F~\mݱ֛ݶ%Wa$rrkEy8}ߗ?zә?}֟yt_J.72rNq'$NudR~֣ 1y,nXq&a-޷H c_ℚԹ7gxo~ ?_֦gNk[!vn'%#8Mͨ_ۉ#9^ך DS@y<@_-yg ց%Hp?|}Ge NB?v{.m]kF6 TJ Q69ٿϯ+`FP'뷫7MS};!nӴ$cgnG?wi_NiJMxRayZFKgFcjZ~gDFߞ?'FĂ;1-==zԤopG~ w[i/%᳽L{.IRn=jSwkm}ΎGv9?ӎ[ÿ+7}'yv$w7]?i.3~w1cbH [&n/]zmW%`sk^k9>fcgE0vcwiwRJOO1UTsz~52M(l?88+fqQ6jh~22AoRj/_Ÿ[,lcܜg|uNotAIo>c$;ws}jzt`vbPCaGQ\ϕ_I'bl99d/+wuQ8UbI#<ޥ7NyFKף#۫ 8*OϥRנN^w~aJxP]BW^q8A^Rk՝6|y,Kc$_O^BnQ (!@S?ySQz?}Ef+I?;uZRr|?ǘ$99JQК~~oM4dBb#7Bn:m}83HsouMMxjrI8!__R>F/Y%* _CVK h#??j^ja*N:/Flqe__z+yl)Pd]ֽT0$3aJݭd~X\ӻu mcw_5jG^2[}軽ߩ[jԌÐ (_{jキﯠ{$|hr>f _֒?ru p-Z?֭+_𹄯K~68Zn ;a.hn>U6*Hhr粷?O2Ի^J O*y>LR嶗؜b_lnsggoƜa{[^}d 9f ;})o-_OԌ/vd{+Mo}7l=o֑d}o~3a`J*H?}^X/`KpGAOXcޒmkrT; L2>sgߨ~?;识> ϡTGn۽ O*x\֠?W@mSλgDi;ݿO6Hmku~w]־{ޫ!Cgx_ojuv[Z!['>Vz[Z}ćbSF:ZmG-"l1'=NF{֑nzi?͡vqd=UOK~ܤe?N[o{z{T<6W|Xn tHכ 2OM%k_S{] 7zqI^݀yz}h,c!` 3=>o&ޞu"NgjDɌm?3?un}?Ӣӽc ANwn}p|j+$\௷Ͽ>;~or4s[>B?+8']{u$.UoUE]žlc8)뷾6v^=1YyR]Lh_wr/rY0o_fѮs{ܿ% ӻ,nBJ?f2Va*K=3Tڿ# FFjw|<;z9;^{K}ƩV@8[e'4[9W[_Z3~-[.Њ79G|B+TY~ gxIfuW4eWGRH?+I ߛqp~oʳSwSWQ%OÑ"ma2 ~QUT i][x$>Vg|TWO^ lAc?{6o-k)~,$Ue*C|u3I=<َhն|9n{5Q~?✕Eu?NEb;?J$*m{z{~lz8j_'77ڣw]gj+n}*A<wt*m=lmfR;/𪍖&.v{08IJ2JBwW[`2ŏP_R}ʠhOO'linZɸZg_,(ӯbO=R~ë=Ar VFI{+$N^v"Y#ooUw#zNu#ezȫv*jמE(Ԫz[aNO1" Gz6xnWEX;Qۯ~Eg;On1ȤUV;XUvCn$>I~LGo-)8yro%'h;?/Sjt{8C|I,pT1s<_7PyϥQ^ϒz./d ޕ}M%0 3?w~NiVv8\0=1O_kкnr7LA#=c|0ݞ ;\ek_WܐCk2_%1˯7HyS5 /#6)c N1R˂Oӯ)pOӟʑᣳPr:nΚ{k$68$G]։${\kbt]F̞F9Do>ͩS}{~S\Ts˿j}<dȭ+]]zѕ99[o>uzTC9>l@rO/'f~`^FyYm;wwS]_srJOvɒy=͒?WFH=+ke|?Z;+[9rn}V6;E*p>o|Oɋ(YOԘ)'>ΨNQZ;"m /$:{{i);~E\ q~W2K1E928=qZk^cp3{՟w9K_@pSmu{Ӕny@O=zNhj3~7F0oBrq4t&_㼰NFs?OfSea@_>nN[T̾Qzo&̰]埘PS{V~^ps9Q9+o[t^\}ow)Y'ڥI&5"'{I0ͻT;/A#~K]翱y84?a8 2 W\{4m/wnEF2<:-N{~ ><QL sm-٤/%o7`͕œpr_L^2ۮv̒9Ræ1_w{uC^xuȠB-^M>}Q< _fΨF r'[#1o$1oU_:/};(\WOgr]'/ԍ'(i^_g@7s:_1Vt4ZNom=~dGvSmHtnۿ;;IR99+ݵv)Ɲ^MB}R+:pmE N9 9?7nMcn ?}1-KgFMe%&FIbzuпq߹Dծzl=/}ʥMN0OL8Df۳o,:@TIߟs{U9h7܌ 9s^69# p0q;]@vm~et߇?6{u{:@ cp^23M~tJ'grj^OzwWn:cޔf;zߨ 99iYwR-I I'U'~=[tǔ '&7fx88#?JW$un9^_&)[8O<|ׯ Q80hw[uPrQWoEl&!1p-$|͌Y/nǁ=9E)]YQ qԜ?ƦRO{vPc {stϕm4c [ ːpݽ;.woNn''x~tӊO.6O9}e+y^$jW'=?N5<}_ש^'ea2'GL w v%q/? \~O,}Nwc?]ޥ'QI_o{px`{`CjqI ˸TN:(ݿ[O^!q޹O]uO#}y& gݻy^^NyUI۷O_ -9Q=q[PRnQooMLjR9<Z.BO+nSu}殚y]ߩ!yu֛Qz?F{E’ 991ޟ48?!yl1Y˛N_ߨ;qӧw=׼~яz`ɜQZ;_s*Q$1c?~?"& ca?uzPLTK*_`d‚nMzdӝ?΃).[k<'9AiϠ 0rxzWNi4V(8=F:U-4PwnWN].om'.wtoTqߊ+'ogp:gAO7 Fn}hEnfc`o4M_~|(͐󍿞33oTߗON>cHltMsnĎDۯ犸4_$֕,@`8ϸI̩SzSHU$1ѿ/.WoV-~~m|p\n{T}}.'Njwk8 8P01kBUqq~֯Q}o׷¾}AW,Uc^NM:u[>~ dd>`O|[w7and!u~I$CcZm?}:ˆF?G_ mKׯr1d@NZ7סּ"298d^;|uUZnMeiܵۧO';\)>qWj㎣ԚyP3?h*1kz dI?~=EZDS~#P6:zjZ?2~?G$ܜ'BviM߸ ʝ`{p_k'AII?><,NS8 ׿_r 9OǥG3z]m`aw>Rھ,K=I׊|U*qo,/P:~z*$߷X9$`??M(k[__V lu9?>uL&c'v?hs)&/NG+׬dt$(>ci:ִN=_]ExO ?ޠrx'OSnKy8Z۷ x~Qx'z9fTi^ZhBCmMڜe#z}x7ۑivz_6e t  $on?:\3WuË[0w~4aszr4ovD|p\NFs_+ZM_qSbGߟ&ѿB׽߫<`q=&m 4P}_)ݜ'ޱj%daf.i=qt_k{%w~*a$󎣧\5{u2RQusA@}~rk=ȌLs?ϟnڳp[b(U*I2m%nGGA'';xn^kJw}؈ŧd ?0*s?ӌ͔ޗD00r0}}y_5j )uoWw͌rTcƑih=p09ݿw4Y-Owׯ?1^Gvž{_ѳr1ð$?r@YCKϧN>s;WޤIT޿yd p ^Pvo4Ҽޯo" H'v{ -_D{*Wk s YinWs0Tx?S]sJ w L}i)5IGmԋ`Vzt[֞?LqV8 2rFX$b9?/t"+p<ϷV{37׺m}% S?-R珟_F=upۛ++襤~oɉ*e'w}w:?.D9$w#^}}*9^^}G*Ho֛ͧyo)2m~s^K?c^RVZא/p-=yZm0W}\|qm]̧$T=3R~ge7_-q+dgG_Fݫ8,p\睾2RӚ|X˒x:~9xh}==QoM wȸ8'Տ_bW6iV œ~TcwQyIuS*ל p9 qHT.c.n@2~9-}?:mIO$ȄXv!s@=}w*i^9yb~~^_mb`'sbv?^?Z}6_ڿ݇G>Bo{{r'C^<#,qOU)43}, %qG2I_P墊}x|8B pQ[I[sH! C7N_ϱ N_ su7p-\п*;1iO[q~OR}ʎU~DP6s9zt5M?Ən0x$_Vwkn*:æG1qG^{}O$=i=?ˣ7Ko>' py-'a擕W>m02(qş?O_}\կk>=iEw16x y\[f>orKctT򾾛Bn@+E7=b~Pk޿|@H%?(#gp11s^VE$e)+cOSp+*ikaB~MujuK̏$+4^EJec tg/R{OVqI#yjҽM;CA'_Q67#FS~}5a(Qk!t78,-;_4ܒ0yrB.~=z_Z$WV󹲨|2&Lqc94&N/ehOdzL?6Q63M};eӺ-.XS.Ar2AAOo_!1Y[l3Kr29~=p381t'w39UFUszmlΙmhO7֟218Hy/ֆݘ^D#ʼz.-u~w)II#:nrI([~w774KyՓL'nAqϭhlw߯Shv?{~D𣃃S+#X'/|-?R(0p@w_\ߩ_}~C|灴q}zzn߫DMr[a.0Fm@˻멜?ЙBzw-??fvqڻOC|/Y4,|,Tn>~K_28>o}ߎsPߗ.qiwor6W%HP7s?sV AF~[{z$:k'977ןqA8$|_UN )Ma9^{ ~?YVoo;Q9}zV~zx]|08ԑkLŸW{mݰT r>e<3/d$M]К8ȍFz;1o3TWu I8+$yҒWk}|"0b{8 >.o^ьw5 dGͻ~e|~o +G >wu'w;'ν$5bh v;wg{5͑K׾ޣJwjT4U4Ͽ7?n9EBm)oVOS?zp ԃnmu}#Eɵv'}^2t?^0 '_Jfф'ȕvC1lnʶO+ɻ/?/%GnNp[?.mdmc I/f~ _ę/,jyie2ߙ;[u 53Z-A{܈DdW<=_r8q۟Qھ[]̽m;_|rj,F0OU3zr5fՌ'>ʩ3=H“A?M6MFFS(zi֐wVNk ;>}k4z$§w].gU5^so9c pϵ)M.ng ^V~?>?ziZѶZ#X =.H?89'?~T k߿Q:kg2rsۘuV~~hR~0k_/#| 㿷ss2~nP}pp3wPSZLj7{sM&ݔӌ~~Dk rY\:SMvwrS2A}߽:&oGinr{~k ng\]奿_dϻPtJju몰SqPq{Tk7eqrqO@O`={TbROɊxb;j-)㠧2ۯ^r.p>oI%,~޺$O gt4މ)'U]rymyQ?]uKzU8pXpm4ҽҠpq?ΈWޚ{D;r:g/zJN3" 9>=5$ޏ*4Mv~V?p@7>c='d1Tz _{ w2OU*j奴;>68=?>i)|yzZ&F79hC~;AXXVRhcJ^?ϥ$zKH,;ߏj4rU(oęcl`O=je$ӳ4cu?kߥh.B@=35&gBuci# AA=%I7ɝKOCv~m[)&0h@ H۱]?m90ۭ"aWݤaS,3 0 _D:SS Bg#BO*3{_n!g;?O8=A7{1eGP3<ӌz㹍JKm @9-MkhD=SQ_?y/L|Ϟ B"7prOS=ݻiSQWӳ$tw~;8}{wu㜓u~v +rYݎ*G4oz +[^S8FZԉSt$w_2,o⤐ps:9~d5kmyx!*z^O/V&'x#<ZcIZnMT9&;eUAm߯a_0cu 2y?{?Ji8ImysFPx_-I7_szjD>b}I>_m%{mt'cG ӌK^~L-[2U .~=}&ӵq冒h|?/Oj/%ܧ87~_$Dry?ue}?Vv%=3Ͻ$ɔ2ݞ>dwnyw-{|v:~9ۯ)Ie"+Y#)MF*;cz7(vVJgw˟Cf*u-y%A>jy֝5~yc0H+DI1O_NyUOBmFqv[pxj9v/R1{kc$Ǫy돯z6_7H/|~li9In ‚H}e{ iEm./R1Vwb21lmi&eQmӰyp 洼]mݵ`7mqV6Hp?ÏjJiuWݽ}1\,{J\?4K6oqs7c,}M~?亗_q pq1?"Pv/#P5^kk[ws7B5u.!*GNB4rջo^yNxsun4}u؄FHb]9wzsY$y($Wy߂{R՝K{۹"!pkHm87x/z<*jMle-bŜcy=µ珚sCW_=Eh=֏hMw<aa;_ڧKjvBWN\sVgtM]W[*`A#97+}yם[] :iEz`I+ӠZ7}vMw؍!?0 uZ9%1zq798^3#/#csntiMs/zu[@;PnukO˸p8!?>{׍}>o篘2X`'D'You_BUO7.W?;+$wFJMt~p+ޑ+_džV Wv?U)ˆ;OWo_i )+]߯bŹ'jߎ ݿmdp8^~Ԝ5{~cOen_lPy?96_1޾ӻ6@J_է*曵ƪ6J.6?9]*qwJm'vsҎh6Mk_ X xenK}+k9cu |$Xd[6{uؿ>3}}}9%FV_wn8 wt0F9_Q`jZ~WN?W~{[Qv>@arG5*MyXAK^Wz_4 da2z^{թ߿>9KTLj=?%?롵7El{JWJ;フTܶ'޸%r .IoSJM䴻˭a^}oW3Qpٰ2x9| 47K S'pO>tZEר;Ew)8t_v7 dcR멟/;KB_L@|eQ-SB݅8\dcvUq\?QTw|6X DٜnG`܃x?󨔚~ vZO]^#$C>]h~==_ЭO8#oZ%N:n;R&AB|?w?֛騢oç\M?yX*c'd~7S^7lw(x{|z7M7:T}<&HJ}g@Ï@{wy)JZ=zwl=IUAo~ M.geX2~L?ʷ'SBN_x]yߟK3zXۗӶ뷡qăsߔ=noKw6g$W_/)psoqYg{:&{kr?/ 0s+;Iv_YzN~_$oǻ_}ydG~>Iky# Gkoc`'HON+_CY 5R~ +s}ޢy98ǯ8txI f8ޢuvT |\O4ԓٍ˖ܶ&ݩ9'?O|i_JPzozȕX2 Inڳ rV1Z6PG*A˵$ٗ;]~=_ߚRwvz|aon_w$rp>noމϾRW|2pp$^֠ҭM4wu d+<ǷiF~i~w{f_Bs=z{暊^l8_GzDI/:~;}j6$K( ck&IA>WwD룜VMz#;r3Zۯ8DUn'fΙWr8ߌ{軿~В[.Oǝ$#5;O{A&r_h玘{֪?ΒAyޢ2VֽoFΜmB=8#ks5^եqտM=wcO`u~UwmlCji>Sg L=ۏӹ2]~V;_e/ TR{(PRGE=hswvzz[~}Ljp99d}ߨisKrƔ*@y̚oЋ\/;X˘N0~!q۸ѻW_(w"R 'O:-.7k FO# =d¤}ﰋ 79##F+QoӸ8Ru;/Nkj /!珽jyJ-K P88{VvN>یTr[?Aֲrc+5O%>,pJ}ggIE5ߧRI#R1y):{=,5O뾄&l䑌oǯWN9gv{~tFO*kn"d2~ݸ7s;9?-[<3H>Nrzt뿯O8Pǿ;hnڰ|J~]*ŌF}?9{ne_+.x?27`bzA _S ԣVon25u93VLk]Zwc[}GoWzIwmveG=suLߗ~4TW}~#ee\sҵN9I&wx=}҆27)~z0hv=y'$f oo_[8>.Qjj_/R>T.O.O+?ϯU7toUn: ^4( @~^mV݃68qϽ"e6Zyw'6A?0#nl|oGNM5c앤f[^Qu NwVB_{X5T۽5k6uz}Gl#6K'I$ \1#_[܇9>׮&=}MI_o 3ޙk7W{Zh 8G;{smoM?ʣoՑ:1Aē϶˺ɩ _|n7fv.0|km xʷ6ϖZBy8'#L_ 0o^C`dw9);ݷy]Zﵶ\H#I_~6a;:Oо)VbH̿_W]aTrW_~v<ZWr\I_U˾b,Wq+zu?ڪQV֯W?1sgc56ѵK+yn8(9wc O}̓+X_qN]2Iʧ%/LS9!qt]P4Vo^*պc)_VyR>=FĠ/_c朝_㹥4 H> ϭJJnN]5c~U~Cͻ[3W. Nz}(7~ #VO2"2JTc8 wo^ے[_ߠ%S:nz;JM'yĒT)Rx=cZ+qvIcN9w_ҁ&1lcց5{ ۝8Ǩ's;GwG 2k^uB]XiAo{hzi磸rroѦn:~JM|UlO7v_ K}ƕ۵z)\PW4{drN_{Pt. Rj;EYOßڛv՜҂}~R7 2 l 9뷷§4}$1Q9O~Eӽi,,I+֪wZ|\&?S@kFzS~>FyDyn|֭m4AӾ:ww翦j9ܺK[/XpT.Iyv?K|}e?Ʃ8˿ޯϝEf~f0=G;>3IZM(TmZkt^lq '~?tRk jVFye/Ф׹D~,5e{?5PN:p_ۮ ӧ85mWzrRJMr7\ݛ% FL)*z1^;ϸ&~C?1\ӃNÃ|*3.{4{ywQZV~~$R~׀oҵZmԩ&=??8ɶl~-\g'7Z;ڂwZLb:/ z)6M_^=1$1!i}!P;[i?w__Q7ʽ|eÂiAݼm[﹟w ob8#ךN\~ahwE!@\sݏUcP['s}G3~e[ҡI._IjY_o $TH r??6ϛz\֑j4r^Od{2w'kmw0䔟3w >Ai{|H؉Np9,?7gA 0?QFI{w}?Zۚ/e8]w*zǽ,eSm{-#`\KcשZBZI;idsAWs_ |iQ:|?7w7I'/&hFiPq?{)ǿ!Npwk=~`aW зRVi']MOs?/D[k_ٶ}A`$fÃ^o OLްF|-\p@hR]M DxS^>]vz-}HpVos;uOVR{c‘?k~ߩ3o_oq2qs.YUmuiEʇ3z|{h]#W{oy>oT|}q?[ʫK>.ݿk~kx1g{o(B yuٙ1$#,>JJWf5"Ҽ̘<9e*r[Kñ9Iݏ`?MdFV~]I\ cj3&J 4ޟ7`6?=qɴ es1 3?U#~?vm' yjߎ!vO$]u?J2NPHڧO[|RUvlZ$6JiW> An)!87o9?ך +z<TI\%e?/.DRA~d oS۞jE_vܙa~[$J7(<.Tg=O\qgtdl>9+0{1>Ͻ'$ft8__ždS}n'׿1 #=sԩ'g1|P0uz~Ѿ׮·:fq:c>j2U}?/w3M#4Vm n#s$rju9$ #?Jd9)1ȣa'i[mTww0^)ǰ7߿_rW-fO5{]򌒙#pw74(:.}>F}HԢ9n|3:q6_Փ߮ߩ~>0## 4`Ԣwn4u.zZ>]7$~O{ܔ0xݟ kokݝ1$9'_&QEJ=Go:#7eCV.ľ^020 [ Xd=]ϕ9]|uA9ALw5pzۿYG;@mĖy>SҟQ~co>׎$_[N֣ p2?(5N++1YO,:_Z ytW%Lu~ќe~!-I9i9rzz?N?P{0tLbǀr9 {g?$^:h!Tgɠm8?︋ꜛV("R}1Ld|vVk_sHԔtocf% {/(;A _oOzmI<?Zaw}w06=rv4qSK؜wc|ß$ٞ(/^DJs<18ǿi6u|JT`?EWћ[^Dʉ|5&8moC O?=@m=Gan1Jʜe߾0d^{TsJ [-c쟼=V9IS~$t9g>moʭ8.œl0p.?JAIF~v{Nd~7Vo9=8ߟ"ܡU??/(9yxy=ig_F~wk18Ǻi.Gl޿u5!Gayj 29d@HVGAe%.oT$(?V@T}bz8}h(pNoKo]# _~} YAZ?wt`=9s\9u.Np1'n4\?!]ǿMY_?fTv_o2_/nrlc>5{Ο*[1=pA[u|Y)qy;[ӧu^{\ƌ~~y,kdĜ$;շi= rxgv(rz_yJ%hԀ2ށqׯ^9SW1N0F{:nwBH}Ϛv}F?_}sI>[Y-{C9->?}nI_|x$r秿|ђW_ ʼr="J2{iӧ069&>k|K!85V|~h]?}FKz=JS9Y_K>HOLY?-o,-H'(#Uw;w$eP|suܿ&ݾc7H?V[-[8R[rN|~B0`1N=)&nR],LjǸCU9izտ|$A*,?wkv8E%[h7f';UJW{Z2 Ax5;:[~c~m$Zht̺>}0wn^;r[?L%v_Gۯ4@p9vt|٧$}_(ѷ>?Z&\w~-/l~uվQZmF{Aʞ6Oݷғ_:tWi" ?4ٓm}վ/##>+7)Km>}.b2Hc?XzP4WO7_=rİ;GMLRqyO<>kfʊmbi1F~Ծ.?Tv\%|ƴg?"-13nޜuӺ~oo*`?"1v9s(6M{ocCcUr7Won?Ɏ+ۧ88}EHE;[_~`699ӻƜ} {_+#_ɀQ=?ɠ2#m1em=wyj9^v$+<?@Czԅc7#?Zi֋9G}k);=c:]ɩi͔y(w~cV N 9#R25)+_}%?S Bg{~7/%BumouX{x}u99eܟbKc#9_]:9ռዕp?yRd /Ls]_vB)oR>lcjzZ0r_L{W'??S{k{yq pHJv^$s?@4{ZZ.;sW[ϯ~"8nÂ9'5-4NZ-mvרsA O5)%zKEêdE8OޭRZ_3-vr\)z8ry$k_uʪIi~vcI8 W/F^ߏNT}%'n{#6F~^GL IGX ˌxc2&|޿=APgsdc~Nmޚm41/<ݟu.-B%u+p$029?{T-^]C%? +_p>A]ܓӷ֥KgocUM.$z#iľ2得_u~c 98~:M̗;~xՍg;ޜS*M۷ęc dGΡ&M%b=44RTp_l:$:SN|}o㼲s6{A܋~uߩ d?. =>Tך9jBqwԌGO\p|ճvՑ|&=+xON}CA; _Wm-T]*I9q/}+H5_3{`0{cSJK'Mq|9`֒VK]v].A1<ǔpN2³ľ:Tc?忼q{]c8VwwHvgmbUk0 Gg_*;fu(~wi~/s~V2M8x^\׷tQy9Iz2; ]w䏺z] a7ߧ?EpOoͷ(n Y {ޑn^pz RT{^hFr>n3?3W7PM]?=~o}G;:ۯohR (Nyuqo{Unasb_ qQ&ei7p/H?w*ˮQN[_5Pq^?Pkos )*r nF>\z׊oӡ̓F95~~$'u}}VOU<g.6wz[ߨ2F+vGZϦor"g?'Uwz3y/@qK"(ťmߢ~d\A>h[̪.Ӯ#cwsiS{m~^Hqdy*<~qX $g=?V|Lۋ^FTdb~Rh=+CM_ܒ n|=)>n8rۚ+[fI+sZ$_~S;ߞ}_!  \w?3*[]Bww>T?ݿĮ9"?{9YY6Q3d>֜˺RMu̇ rZ} 'zuKP]<z߭*?/r?7\?e/B:қޟ%dݻr?V|^/AVRoN#FFӞß@5ȯozz7ao^5'v࿐#^? r 'D8"I7oOz omFQm+Ͽ_Q0E=;g[XO߯M:`q8#Z6?QTwO* 9y}_.Lx?fںf=7u9itK?ׯ;:7 =G)>nڱ`c,sghswc3asӛNw2qn^O Ԏ~:RV߾(]W8o'Cj/I˯?5F rnуߢ^R-?f{_C“Ó|Giۭc:궾)\ٿftOB0NHNC:sLɱYHEu9}٧^l朣}}z=۟xc~j{+`<}?/Z={|o'94{O/&6's0_q/K~/9ދO^Hr3zqTLQM:ﶤ{0$AϯDVtQ)!\yz Z7G_`t#wV]b |Igi[sko䜀nv (@oot}3M=_ȇVb*1 \7O/#?&:eq?5hg'&־U m۷ÌQF*Wׯgk&ۉH?F}8)%#H#}~~Kݽv9׷Ǻl vCYFwmEJV/v3<w\֡_+};ߪDT2mS6mvI%&wG񜜷=)M_\6ShQ?ک6>Od23G.’9n}]E)*9{w6:"ޏإ h"\ϾOq[wCsV IYj0TeI ]sEO] /g~_>cB HS9s?4'{| r2vrXn>lhu~L?z~#@O~OQ<)\=>_րWoFO\9O`󦝝IOD;lFHZ{E?军wOVK6p߯fn[ÿr@ I~]}*ԒK~)3c3[_և)'&UߍX'uhuEFBJW}vџ_ԓeΒ_B6pm:7x}d:Z/~m&rX;8eDI][[X(7 n?߯Z6T߯$)$Ყ'h.vvluF.J?֎uo>޼G}՚G=;Z.)tYdi)'_fINݠ?=y܉u7F<.q3T|=ۿK=2sW?^J?rSR\z}&ۏzu>)7N%N1?~a}r=%ͧ/oSS%憘6TNzqM^jg?Wri밢0Ēt m'˻{>0Qr>ȁ!qQ|?Μe$o_-檹d:!vǿc(}Io ޜϯכ4ݛ>Ķ$9Fpp0x /u-Pn^(9xA'Ș. N*/ʨ,}N~׿4]_oΤ!M}?5ߏ[y8<`p}QFX=1Ϋ⓿ݯ&+d[0rG׏j/UBW,~g,FCgoOvYO/l; ,rަR涛o]|}FJ!N3p9k2ZZ^bے9mg=Rq;%}ߑߙwn]޿/m}wer0ҬîAǿϽJu^Zn=։k1V}t︍c WQ ]t k~!hXU:p͹qw?O+眞43Uۑh#%;āerr>cn^Q! ;yG\}V]f)}vGP0n*}j(4m^}A$1A ϯ5%׮~*''}H`\ӞO WKwc( ·_sK98kQl?מ5{4P_ 1c>w?J7sNGϣ1Q>o4_O&J|W{ڼKd~oVfRV}&7a$|͆$c?{m۸|t>SijwpPFxw)<2F H8$j&?_ FW'>nZm[MnC^YH<烻z6&vT wnm۔zzO*w[/}< ?7ԲvzTdͯ' ݒ1YR}#ƝoOI ?zE~U^tB8'?6yOעvS)22+灻JWWzS8Ǿ}AkFҕ=LU^x=~=z Ogj5\2O6رW \qӷ-^5;"#v_zZ*o3QiM? |}6լ;[4WS?^mPwoc#WFi[( J' ѹ;5|%[|S/y[jW`GӺv%(K2M8$|oB?<,?5Yz0r gxsrw7x!9hSa$o hvW8GΗ}̧JϚ/ۧLS-k3U4Sn;\F&c6y8#/TݻM̉<9݀{q?9{FͲM[+|X?xy9P]d%ekxc~?7S_J#OsGy_~{ U#Œz\Hzt?=s)ҿL gOuRݹomq7v>wnjdZ|ٔ`\_xm$$`Pek\0ϻQv\$_Ϟ;Twr{P0@lOnO'ӭi5_ǿuO/nGjKwy6H 2r[K]o v|ߧǴ(z)s?UHr%;.1 ` nwtg A}1תNh\ ϿCin}}ళ0X,7><0NM5鯯aVa)9)T^/RI#(']ۆj`']D^dAH`N kZ׷[|??)[R6L7`H?/qzV5m.ɋw 8~z6^@wnk]y6ѳ5ݜb}~?׾jmW&SW>'t6%%ybݸ(6y]5|yEw?rD8p?=:Nn~=SjT:@V,{朤ɕx7yxpĜ!aNC>ߍ4W>Vri^]7Xm |sn4o4G>)dk?Q@pG?Bww2Qv~_7jKS/__ .z_Owut?]'&z3y&է:V.'^~{$Чw}t} h{O/ܔ]<wfzsNjQV_߾" F8nOoԶNmw9Tns?6n oKZο(#=G~;/q~~=*GqުN/m ɻI[}llrwmD`X㎼<p隿ig{n>:UάgǬlᛜ .A:҅O+Z3h\.=?\S~ܝ"I沝/g%{p-а8]1Ntۂ9NJ_{!z<֮imN2?wH<ܯg#0@-sz)̧O_w$z9ք;;ݜN w]3E;gjW {җ6[}>"`1`y}h:<קba89Pb^V\ 8})VIFzo^ Ddn9kE;/w}{ߨ*9['r'qSS"祴byl)OlgY(uw8 t,r:{3uWc  ԛO|w r鵿G#<~a?79=9v5:N"H=:߯?YZ>Wj ~\ ï_oj*-]YuI6#_cYڧxyN7i&ޏɧ__vv~N_RW*_[2`In{h==7+}t% lc?n]<:2rXF:P1ب3V:ی*EEo馾}FI'~ϏΥbNϕ~H#+tt俭d>>^aSawc'{˜_toFK]iRqrg?ZmmJvwwc*NWKk1=qNlڽ;_@RFG4AS{{ħ$yz3pH#sջvv"]čvI#NzSʿ͓MrK{=޷@c|=zhI[w~}2C <uYM͚Ǚo'y"+YV<tvVʥޯ~GygydzGw_N맧iRʻ~L![P_娛Q=1?NIM䤞-mޟƏhk[Ҍ]p\ A_Z+6R/ _8?Z+_]~ru/(\8 Jm}t.%LHǶy>- /p3x)J?p}qr:ϭO=ЙY=ռcw '9ޛIϭ8۟{ǯGV 7SVd?{w5baO?x܏g(=_Ϩ' 1?rnJ͍Tt}(2䗧+A(l5~@%O O+۷~Ԛ!|׿o?rHnZ{\qVOSŇ̀,r}1ԏ' ֕}BT▋o p*^ۮ[C呃mGAis?v:=o2#q9U2\)F?ijB=z*9T[ z'9FNw0XwNU?4F6{y@9-KHE%5׽K pW䃷ڿZ9^U#n;}Iŭ4'9# ׭ݫ)@U;J_׊wHȤ[]wb rv;7_>^vcv>Ac$~1W<{`ڷÒX?7?Jɿ/5h߶2 R3aҵN99|~kl8ussOZjWNjAdrt$\3_ԑa![ Ҕkۿ N)EDPq?uH)+wKOI1lz`Mh:ܗUI7 G|.:s[ͥo~m@ Ͻdl0>U_]s^_ 9f9轍i)8WqѼݷy@'.uٝ. P>1'+=tt$R0G{?zjj]{4nr#+/sR{nur]3?`ts-vEvF1u:鹌㼯l0 I<sy?Jo TvL5%f[[}^Ӑ2'և&~*,}ﵗqv0vyS׫?㔝ԍA*FH4U_^7dnqR˭{~b}>#*)=?<FRn]zl8%橔w_jI'y' \j\S[ox9'_/rkiG/~B1T!AYO:.>F^5n8rrq*o(=_bT%xU`zܻ~(rnVzv}6CJȼ2FO|{tw7JPZmooђy{njM;_-N-^ dq?63_7$Is߿Z5~+o&ѓ0@j.䃳wǴdvrz/u92>^/^רToW5󏗯Y6mu{ H:=Oq?4]sTQ3w zi[zdg?jm|Wm߷*'swwSkbGۉBOU+j~Zx?n{1_1D`37֑#{zg8{Eji-/}ƲrĒ@zU{N0rIgm?& rw7NmGNտ~d[3OV ATl>j}v_5֭߿*NJ_7咵M}"o>x-A*Jz U)MZLO,@A{>TT^2 r@^mtه-oÿloqr7SW9Nϖ>{̬P09$(zqMinq8稚oe鷟Fi_o[Ex$_~BN;:TԴM}|q皧9z^wnÙSi$ÿ? ul~~I[6dU?ۨ2i`;߯O_?͚G ~u?7Tsv21=:r[$)!FG-z: ]zoX3n g:+կwK^ Dr}>o{}{ft_̫J?FwqTN_2V s\1ª{m1|$rx'.jsi/$!@_p}z9/&~ߕ=:{k vcF99?52$6׮Nbp$6~]o 9 3kX=6ۯ})OBI\=SV\ߩfZ_n6K t3f/RMl箠 p-}?{wVuӽo/ S{3u$nkE6?SۙnQ˻NZ@ʍ)'S?f{sU$ pNH<fmkr_ #6ӆ!gZV͂Sӷp@r^⩻tosiBr~DF] |DC <ǫE7V]Hʆ '9$_U9H;׊=bT ,HҺ-WRx v9{JrױM+;/V:u n??]Fܯ'p|SkFrC} Te8Ԟ:w}ΦR8r[S`%5OrO]ޒo>7t߭QBpW^sP8o#]OcKcH%g¬l~@VvN~7Q[=qs{p4z.1aUGflD%O/hRwKՏ ;[_wRrgE$?~yp?xN +*r!/}xL){:)p_ֽq ;6c}?ۗu)FON>_1FwנjҼAqsvm>O{ q@TZvF{?4&`xףse7=DN^{)8CI=8?{UKmqsq]63ӿoWs8=>>n=7a޿wթ%^#xtpzʹfTuvDz;;NIcv5jJ):QNߨFr cd{Rih +[ې0?@kҽ&q[?y@6;O\ׯr/wW <{~}nj.eLfrd/duSJ֠_x #E)4L4zR:~Jtzw󞣐3* !}t2O,2rORACTJvvj\7}lEy sq5 f}J!r:ONzޗ_,)8jIzv |%{:4*û朤nۑ+|_?ĘBNWp>T9GFj)4.׫'+_տBf2s0YR:V x9zeRN1Z?nد͞QKWVnÜg?VQRe4r,ۃ8{ւ-vH>P9$|9pNW<{bA'sӿ?Δ't1$O˜c qp>IԨ9bA#@?|Mpw݋z8]}R7{vށ.F?.3ˌ÷Aq7?W_,) G8nZwv'7M-9^߅#ۗ N@ִ۷#${=CMnj }nኀ3r{ޑ/]y0QGsz?[PNuNI?_3Amť_0#qK|d` dT{+-s֒mlwӗmvpV)n:<\}~Ǩq_*Ty$㞧woZ6ws?\}h:ceQ$?L~zahAe^ $wsAU4w~v =qӿ_Nyz&Zc%ya52D(J׻*a{2濗:q.{%I'GjKw{)J>4E:w19F^?#`N;AP4$2~u\z@JVě:`}8?″z_X)l{Ƞw5sF}A Ew<;?fJݯ~$K Iǃ?<le{Dm8R0q}h3~WkoSVoh^&~Ÿ ^?_mt$ 1 O_{SmOI\1ԛ]}.9`I1z~cinH/w/_O/sԏqA4ԄFsz {̛a .6:ix횞eu{òoq??J9;ׯQX;?y jق#=M'$7 W ӟUwO8#r: K׭[&g8 {ztMlw_hx^9#{R1O_qbd1Nx'h6Zvv߸Ɖ$צ\ד  y8?ئNΕ(H9*oe=rNy#ow4.a:km T.0I#A*ޏNoϠg'JZ?ç~̑~o_J;6+k~ڌ&Y%|Ji;jɍ&~_#D*2רg{U }#N%gw#ێr@?m~{˫IDY#9z_uNlW?N!;%s:oԗZ<Hb۸\޸R9ѿҢ\rJO]:$pI<{~uJw:%>uk}h:g9t(wS]F8=35]}7{\+:NF=gɛXAS~_)s[M\ٿwoy=;:z]{z7d}IS4SWo> z^To28no_.01Ӯ~_~J量w]ƴ#r 'wlBwW;->? @c r}2^/ЮJv3}wݞ=G>\*/_{m$סRgw }Ƿނ4ZOo['%Xr?RJ_3 Ehϡ8sInk^VE m$<5k{ynh欝'8-R2Ir3cq>owzP 5n1j-ۯ"wj߈͛yLV9GkB9c9?ZS^5f꼂y<` w{_寖?Х8&o1Cq@NrQ Oޕ$u}uDnxNORoWlmݿ1N@˷~ M\[-۸(:#<{O/9׿? s~2~KQ}_?9 3=I-"+q3sUV7f݃iU?<>zZ%ʮ* L6~[`=ߖz&_!X)+V/İR}NByuD%57@9>}+#U =uk*Ao{NZitַӿhb0@ɭ#S]t}&åorVzhs;Ż2p0X7R0A_) xßv2wenim{k~ӧQ"z?R?s+)8?']~-t˯'% +iþ*$2@Mk=Poc=>l|7<)6V=/b\Z]R*Ϡ 3˜|u|~ۥ|V_א[,`>_i{v}<eORj)Wlvێ$r9#(f;p]Jx۾7'4\u@T&9?Pir %d( Sw^aO#8[_ES{7 92'j=>W$)€:qAiVuIw 16~$Erm;L tgW;}~~h8.7rXgn ztjlnB(v}tߊ#)5}J}`O99fq|$9։O~Ji]}-) YsOC{:)kwS~nzqNQ SzV{|W'9'ہ{|Z|[@d*}RdҕQ23lymJ kƨFA8~bw7΂a4実;bHzo( D.~X`n=?QPH\:Rk8/ aQ'sip\˗bL2d|2)7mmM8 _D2/$)[~jnS)OV_V]}HPE{_;ys;_Nm6OЈU'oP/}U$u:k;PrOLdfܺI#'=^STn 3jaF'nߖN&jIy38XG=o]{6 gzpN$Tל.W*4$~V zc Q5KJ>_D@\Ò*ʫvF(+#m_QvohgwPFzvzsQ{;Mk]_[ X#uW)32tvi'Qt}Iy~~֢H rKd`z>=4!aT?^0m+][:Òy{q[{['-t="1yǧROge8]~쉕Iz}}* j˖\5ԓT?փxA8wgr" 0Fp{3k_Gstd_bry?^jejGQ%OÏ F29=zjÃ^z;9 zt]ߨ"߼wX*{w?֐ՙ+M7~CV&Vc.cWJ8PwdݞI<:WO܍7׸|a@Vg4ߝw^Fy^_goTzB1\ V߯NƘ8?zw5cv0FO޲痐*jWy#!R~P M>צjJ `J$cϯz++s7ӮDO-gxƆJ?d ;#?~Ҍm}orfMm! \];<~?*i+J/ѷdT0 [D {oF鹙xۗ9)2ܶ~]0`ǜn}m&IBUz?0 3ycJPnr&n߼tƠ|\|DZ=}N*)j=҆6Ny?-_O'{0qR@_}֊cfߐqn\RieߥgpoNRRs4[o!+-Y4nO,\vD6I'NkM"hJueQpFOG'?=r137m\ު~<$ٚ9.WN >Hej%>Wnu{yοg~s$ ];mzQ޷Od[6o# z_֟&iik]8#1 |s EQԪxu!gך/ߧDdϧk={ԯmN]!x\˩F_~lL:Wyg?F /b w}:ty~oֽ58gx~)/__נ;^v_Sv[F7޵S]9ۋm}{s?=[|۽O<2Z.,g֥gJk޿zjO;$cB0_f~~]r8ϯrӗ>{.y?7{O4Z^OʒNOQoK{ R~ߥ_GG@K}эH7}tbPr1V:i-{N0 +ٜ9$HJ:Ӿ{Y+N\.+׺%˧7Гp13?oh~,c3c|?&W_ rmj'`l>o&WV5ޟ˻g__]SM=BN2ߘ?x8ryc8 #f5QU8n9#xAovBF^3r>csMyZO},$Hqlr׊ӝvf1̞t^&nV*wtٿr7O#h'V]mu #?t *>SrƠGA_҂5{Ik؛@'yRVHA~Rje+|ȧ Uz?%cbsU*; )7cく8T۵rsr}ǿ~jheERN01zWkKr 1?kON=?;[/׾o&8^f>bpG5*o._FPsguMI?= >k zn{q_3%w\M+$iΣ|ezD[p`7q:vJ;;Zp|^W! c}UM)_]bq'zwh2Wq|'ny SX8w_{7)NK߿"Ǹ0{cc8N/~ޔߓ{z;~՚z76?z1ikO?먤߀Bww>yI'PMr_q#OLT ={}Deџ9{$K97&md1鷳){J)/r/,G-8EE[zF7灓{9~:iZd!Ќm{mO-rvI<{v⛋[4Z+Kj1Rz;ٽ}Д# 35^ӭY=%[l#{P.5}5Gˁ,yҊ&N}c{ݙ 9?7sکǓU{Ù7=:JS}1kK~>`"N{?ϽT[?^(6ZS QU1w;bkhQ?v ㎻ZitFqӚvm'v&W"n_}OrzoZNIuIkor_'!t￑yWnE6Lթ~ ƚj~?7b[-k$| c}MyINΤ~!fB7Zjv~? T[qۅ)嗧C~kOQI1[R8y~lTgwgu9iO@ yl,SwCyQW_'zsOִ()^y ={;qL.c4rDךQs%;T/]rw_o隩Iə~}߯UXTXJ*m}|1Z ~=9?6n޿%j3$?:ngOo]ɂF %ea1gTJ9x?=kI}h=xi6.V?Q2zzS;?}F"Ǧs۶|?L9808\z6]?z;|l`_>xu/ćKw}6dv8Y%wb:kFrveXB=?ns\}~bcqb<^w>.vׯV8oz{YO/&IJҖky1~;w {צj( ~%oy~o:UGM[n^ϸ͹ ]CF?Cww.0[z$z:_z^y~?7{;; 8e#^ޫ[Y|ݩ[OTx:_](;s]]%5U!`r1sתm-ٚ$<# e.㊊~ ?{⛿Lя)ǧr~߯M?SEmw`"©t"ǴHN={ߚ}-ucC#;{Rշ߁P^̽8`P՞2~?U,$7Zovj*{iM򟽸go+E$֯^'k{]bT`g>ߟۚFfJ{?;5ՐԓO=یo#*moSN9'f՞J_{*}@! ^^[dOۈ܅m+sv!!nq_J2o~{\n |?j6e/>m[o#S?\e}=;uydy99j?+Vm]F Tj}upi}ue9be^Ts?{2w{[e~_=Iڷ* ym5Jr^~'zk痯_"FܱIm٢O?xI[ӿHCL{=yQ96Uap6~vM-;dߗ'>rov5d.9Wu?_R*vW $2q}Ϩ~Tg$zwձʓ{Z_?͓5mR #9;H;y?yhzSwOITАq}yةTVEF~b:sk^x_0 >o_O+‘1yP妯B;j/\y[]QQ P98sfu_/ҪH98Чwk/p@?NRj}Q߮ `prwS<̟]}v].(yrF9^z_s7bOn1s-/*Woi )IO_NjEgj(QیdԹqj#D9hwpjmm{uϿ7d/v>xqޡ]qvw֍rHR1[MQ }?M66M=1H:S#DJ=hw{U ?wwsA)?hm67{A).MP68_h*/m5|@ Kq=Wvь~~̕bpoumw:)Soec [yA'y0&:x?_}&U%//G=;֋94/ KmL~U.?2mhݶ$ ux}pےœdJ[u{ f hqupJ2_~~}:HRQkи/I(J:|4%_\ML>__*m;5߶/Nս[6t%+knhL@9KcFdGC\ֈw6X屌_ze~P~gwBEI8o^9]Z̵|2^YwnC:?皑W{_x =~#Ҝ~"Xg89s҅G}㻶 :7OV}/̓i8 8:q_Cm̠v?6 :և&gC\zA's6wik۷3[Fn4GSZsǿ=~iB=N?((緖NNI+^릾@wmaS|38>l!"%~pHL嵟J~4,SO}ſ:6;_།qgfe+|5ZϙV^֤$s_aT!#$rr kJr^̪b}DQv +ܓ׾O=C&do\->(6b=○߉ ŏX}:i6B]mwՎٳhrrBi&t9%?Re}ݥ)%#({z[NO3ROcn*Hcnϧ^9mTiIuيr>`>cYJ֛sÈz#8~9_H3ľa˜c't_͈gs#dg4 1_ƌ9鞿_jZDm~{_1~V3I>m{]39N{Ψ_h '{󩔬7ʐ<ӽ5R)LTF}}`N{i;1stR%R  @ R{RsoM|"cׯׯ4a1`A>tAnG Ynxu?Wqj֗88=OXݭ:MqNzց١gO\ǿ=s^{B'm]FVvܐǐ@'i$O^_SS<q9c 1MW<{g<)8j'~wvv{?^ݶ%g_HbrO\ d|wb_̊nPw۫[ 1 <)?։[o'*oĻm<NRۗ~;b9<ܟ79_uF4ƼNwnWUy8]k3n]lB c٪'5ko-:Q0 cuoTw& ӕOFӹ0F8$6 ;_mb q#rij Bw/Ew ܷ֜R.UNh'p=CHS{8SsϯJVF@9o{eNQSo}tNPrV{~]oߡaw]6 NOc0wJ8Xs~E{P~b[6zf4{N־8pA~tNwlf'vӞ}y7neq 6=NIo_Kv7\ܗ;r゚Q20.:ݿ\T康̎Z˜p{ kgN [-v3Ew~ O])Fw&Z~v^bIIl屃ϭ%UKNM_n0 MP:`/j֢mEO]_M}H֭9*޼_e1YAF+ޔodWq(T6g?L>ʦvz]dǝ+_$9 쿝RV?jSmۿes$:N*CI=?0d g;3]O<=O@͵k Fѻ'>]-{ւd%F3}TG \럛%뿗z6ܖlg;ZEmkgSQޫ}A#r~nZݒ5_{]b`1'̿?snI?#Iy뭼v;#Lh{tO's߯ךםvdY^/Uu# 3?2}:RLsM{wP>$֚vw5j|޾[Ɲ ǂy#J89\eaT9?ޣ_z+`)ENB`Ar?ƺ#n$c +~~h3/E[^ѱyv8=M;>1Z[8*q.Hlun+}F"~z>m&EQk]D)r7gsiϹe)jss?R[1Ty>kLpr;]>G5uNH]h\lc8x]hݞ)dg$㊏iEN10)lR*n %Qy!;'gAbsyOsCeOcݳ8]׹Hpu珟_F~k+@,H%R_FNy[_瞕NJ[𓌹_~Ց!@[N?眝ϯsI=yNCM6~F}< 6ڢAcjbtשE_+LWx-Z9%MI{h$sr}%}:g;v<|۶5J0w1:{QI-]DC)Pvl|o˷މK~$S>a#9~k/q{ WUX G}7eSUBmK1o?9JI[,׮ G֩ZMo<#Bz;]3}$BN (mog8I-Kjq $AG㎝[3VkDXQOnv.x2?OUe~ǦK?ȣ=9|Z5Ԇ_6 JK /z՜~klvGQ{@<.íS|beqA<߮h;VlhocFvs?{?ZϩI%=זV7G#߯AHu~~vԛar~Rӯ_Jͭ&2V4G.OyOڛ[(_>2'8g9ɷϷu9auvCdFxU+Yo"Panz@L1r&]` ARr|;7 |?{sS)5kue$y~)HcIQ8<=s~<ۃWm;O\옶uo&;V<#+'&]w:=jϗel:pnֵ+1]Gy{Icg9'+76?vwRugusPvAi~ƈppX c>~^_שm稞G;r[#?sT]^ߏ?"qXpO?k}ҵ{}H~fsO_j}0Q?wcpJmvSIJz/RrxkRSnqgjFTW?{q|zNs$[0‚ Gˎq/&Ԡwdl*Hwg-}3ZJVf JRV]tB wd@kα;/]ߨҿ0;7Oi9;]w7B}Vv4'y{?.ԊRי&ͭې:r_4qkt9TdQܖ'Dd}ӻ[69kFϸ1/@NimO~f [cKEZ]gE:|ڿmm{512׮Fst U~o?_5uc.~YzutINWxϠ?*T,}tȊ -׊88Y?u*0$BIL&׼aC\c׿OOIθOo|1^oY%tFFьc؞{qF _/]I aAzeSÌe8<rK:э׵ߗDޭ=kKz~&th8]z_ `wOMA%vD:z#)nտ]RM|[8 covX=F0pNFݜ:4׾p~=j˦w۷2=9_F\"Qr}/'A8b:Ͼ1u鿕߯,gpZW~>SWR!NݓjܜX?NX9QS{k{y_x nxcojOߠYv^;9ʐHZ;e%@?(244!['t/%$]-|ɶmqje&~U2Gj9'~PrrXu?߶h3A6eNoI+_kӮ"ĪWh'ho0oV׫)o^J?c{ ^OCvՕ >Kny,0O\?Jn_3gF0ߨԈdc;A`:7mYM`98͏k&[ofE^0FNF8'ӏ_։YXћWB3]=]}{3 Azw_xrnAa["~qe{aR猞]~?'1[m ;t/_"M)?oOXm%Ӛ|!ƕChw$n@C&ng=___zn*uޤ;?5Mh~ME);Kk-H-H+U7=ȝ_M5A8˒x_U?_PaX0}WsE̤}x n;uK=2Γ@Pq鎿J/?rq=W]s뚙o3(4G' ~PGiï9TWy'`+ 4hϚ*]>"ı*G^w4n13{P'_N׿1•9'?|?SQV&H, $J\/!B~ Ip8\҄4@}8kVi9tQsLd׸(W[9#˷?2re.oᒸ#p{ɡ'm|ͩ?AAPNI zm6j[ 62=N=?Ys˸"6+>$N2zZsǿ"欿P/i 7q?<9Fkdn3n\( uϿ׿JaMۣ~q \qOMBޟ4Fx$q/ޓ[9_,A}zϭ3OX rG~փ]ͽOo_A6nz֡JgrK *W׿cʆP0FG=}?te&卻a2ܿNNӓO_E9%G2osi֮ϧ<D(1ձs}#+N-dC3߸o9w~_7gHc#?֒Im賾+Mpyӯv4ek.Z7c[q.z7T=G~Dkǜ'W9Oʡ'woçܾw p~.<_sK9'v}Tԥ)? Jr9嵟 nq~_a2 Ai};-o39]wq,p2{9SMnMk^摻kkvƏ c>Ǒs7ek{oBO'8,j ;z_2hAF~4rrMcX#vJ WV8+(·'g~f'`򕘏t׾_SBMRV? |c M9o[ 7U٫f.VLd6r2@?ֱ:'f_5DA{F0I /5O7~_9yeS@Ny_ߜ+߇,`mJ{G4t,q:Z.u)/rJӲݑlO~Tg<[r>]_djY=tvGv A^3k?_h;].gP# d9t,?_TLn6a-:[ Zq:1QuϨ}k'(?m(ZjG+y yZnQ=F.:?dֿxV[sWQzJqȁs'>w~{ܺ 4{_{u#ϧu)*&{ /@=SrjE1|8_ӥhc*׍}?F#%8%W'[?7?7=֢mY*H?;{9M=iw~g*pC~v蟮FV+&&Il(F?Z..Y-m1<ԞF;t'>xu/iopW9qמ?蔜u|(E-_ݯ4n?Qݯ>{?ODێs~Q|uo襇r9#dJo˯*rOFgW֐IuO05gLO^1Ʀ}>GG.km:iu r81ZcƗƴ?/9 ?GOxE;tE;Bg>+>߰\ z8˕~#F;3' Tcku1 g_hymTe/":mʃF w׸VjwG܉aۂqo4ٍ*\kq3uI.͊0>azt}h4N[i[2Rjd~=K w翧NfⒽޟa ?~\zgD)}?̌F8'ôn"(|V`S/f~SUJ꿯RLp9ǯ^ɻ_7#ISs7ѿRmݎT?.9=;yN{ߧ_=x@lή %{B鿻}b9=rOs5i9Nz^ߏ][?Pd^Cn''cyw}ySmot;ۗPVj Ob0\y$YW{y擶cJMs]jm ѽ^i䌪no;;nF۸`8'NOE]OЈ8!>[Jѷ}[|ʌT~i/I.;9LqekъQH?>G\O]5?>n&K98?қv;ENЀ'G͟?TO/p 9@yeiUwm9{sZ $5XF1)u9#*JϿΊ^WVp2W9_yߩ5N[!*!U#pU~\jk}}5Z&iE۷TA'w~{Z׿1czp?wsGN/{[>lZ9?/@,V+@h>~\$ُ3n=q+e%-Q%~ȖsOs'QjMC[cY n' ~Ms-nTi~|GIQo k9vlo%צ}~c nCA꿏si7Lgw]Vsrg}Iot+(/^(ù0?sk?&s{4ޗG93_y%_B%N1>Sz] ? %??}ꕛmJ:^ʠ yw_΢Pz_J4iUG˒3?qDT~es˿{ebr0nNСg{^yߒGF2;mn{U9]?#vsAgM_?}W]1&A# sޣ_&ܥqw^ ;_yQ_4{6XG;^w5O_'vL^!Nj1]WВmW$Gc>'jk{Lo'+?+FҌϿ]=~VO𞃶qKGJi^{P!\ ͷg:Wz E% LϯZu\QY>bX|Bߺ(Kp}O]҃NWdEaA?,Spy&o~0!#Ie)=J㌕Pr;|/?h%o'knbrۃ{&vWcFY[%@?/U4쿭ȝqMowW 2o~{\K cޘ>^_g̽ 3ӧN*;Ȼhտ_"f Ӯ}?f6ۻ8+Hg~?c$O,NrGN? ei~/3?tc}y^nQV{qvd+]QI_'${\o.{ K{Av9.ivJV{+9PĞ:3U7k+5RמͥOK]O \# r~w7qw ӜoU[SzȚK[}9֪ԈO[rZqFWg?r^Oz\oHsrcH;h#ASz/iҔdE8<翽)KSP{]>ۑ̓w~?4QKTzdX(&Ѯӵ[/GИBRZ'|z(߮O,8l8}yhRkfaR~? <.<}i˿h-_NU~&M؄ OE?gU٦jO#uu/¨>}|@;y'Q}sjz%{WBm=o~72!6%K|zOusT9|oNZ]wO$n-O9μF W; +G9~Rj}ƟK9zҲ{vb789ޘnwZ~?}rw e?T!~PGN/L4.kգK_#8;7߯(Sk$q$܀0I-贈8NnOSߣ1K6^D7i\*zuO+w0~[yu]OQOj싧U٦m_1X#~_q92KJ. ge\z-8%{Hʌm)9%cVb=(JO/Fsc֗:־w?>1 n߰9':>SOm_.^Κv~?H]ޟ.p-X'zRs}>.ߊ0U@ |/M;Y;oz+zg?RVV/ݟ}>trTN:r{i_3D)‚|oL_ȨS_w,̾qPts-~_/V,[g-_?m9WK~_/FX۷9<Թ6Wk6 ?QQWo%*]?рCd^K_M2:>o_֡-^1FyN;⑷??L`|*ӑ%vscU<~Ů;~yL~rpyz^{O/#~?n;3֟2Gz>׿?#~^?_43o׮#?繬.oXnV#cm^u'|+t X98!x?ԹiP%̿}Wiʷ}c/ͪPV޺j@ vOUV}S2wc6|wkc.oMJ?c>b'֮)o v{?N,÷?Վwk:a9r~dK33<z:/R_/\?_C|ΉACNv=E0vA==wdJR/)c?{Zh)Pd7n{Z?%4ى~I޳mꠛðd'{Қݡ6o_ ArrF>[q^rAH\a9'e?FX8:; ~\ml}Z)߮8/o;z(wR3.?'wW7/4L0^zcw3nQk_iwI ӯ$sZ׿~߭'1pp9\2mrSi=ׂ:7@zs y{Or##o_ޭM_Jo}#y$?^}ﯦPO-~B0 @8n.ok]_㼦s\Пڟ<}e`T`~cۧRcYy;FqNoJ 98jnBO߸`~i-NJ)E5=7.WOz^*F p:mJͣ=SmQcGwߊ9z|Se0N2r77ԓϧ̵Iz_|܎I?m;^Nm^}zH8Ρ͵3Jp}~~[d_AO_jcQ_K߮򇕾_Q%y}>s]5WM6vu&T;I$f-dkof$;g?Uӵ5%;l:o'F4ge}]yXBMe8M5\`ǚrWO)I T'_)Z'.׿^~<:usMI&{ !s}N=?&.2#~RW &oHOfVFV󹼡뿧vE >]rWs( U~kנ%={?S5'z\wL6y4}ֿr4d%pp?]WOG%򱒡{Q.dbTOR}_ _v2>^GG?̛RJKod~V 2A9w^Z2/Hlu4{O/M]1$@qɣy~?[_/w|u3Eww0qz/`Fx'y⫝yJNp@ʌޥ[ 9'85_߿|g_zԹ7QW_"2o;gӯpmKG0%a7eЏ7Ss$Qv9>n?ZJŪmƲF3~3$[wQz~{̹鷞c]/f9#o_L8Ȫ^yZVײq~z:}lSצ3Yߧߩ^뮟ֽCkG}_/4W4y%rG'8:J)Y7oby2^A'<ғMחMw!Dr~\;vAԕF>Kda_0gfm~塚6̍c;q>Ԯ]멄 Qԙ _¦l%ukG,;H9A+jtIv_{ 1$v*9׭j[06zn '8ZrM+%۾?ήjz~ 2,;u?w}M'$;?Qq_J? lҕTsFє/OOp';V*Zyg8'#{֖}E'wgnC4R ׷m݂J@H:?LDbZ4vK/b;K ˚y~c#A>~&ʤ98vCVvsW~_(VG'6q-]XvBIޫg ߽h?˿y]1ջgm9;4[`8{~&r7].̮bx9'>g-oqFԼ+z`Ry{#I84ņ\OG\,jQ6+꠾FOd A?tv?J ׽EQnߝ#)4Ռe=A$d~'NJvW_S&ݷ3;p1u^zz}ג\nNq^z -$cS,X2G?Vka~m~O68Q>-'w撥o^\H8538w_*.Uvߟ׽Du'g~JtH$;U|}yB&ߧhjg$ڷ̈w[n8z=~KgHynȭ6O Fw}o_]7F(w#NsEz]{N>k0S#=3ʆݿ0pI]-z1AC8HjI?/VE8Ϡ\ۊɻ*Mq'L?ϭTlrj]B.g>{}ݟԉ{_nDI m)G. ?LeZyoA=c+>Uj`Xy=?~tJVaIJpw_oC-xI9?ϽDd/\ ~Mᄒhnl`s}ݑ YA`܌z=_J#1 $zwOgspp}? 5 k[=H8qIG:ݭ:}P ;O{󛜽?;z~A#l1Ԛz]]7$ݱ'?kK2p!FPCn])g{\B6T9#/Ϊm;Y r旧16mr:@z{ަ˔/;3g7aNO#+_&%?f͓:nr[um H0 9 lj{kO?~rvNU>u{21U\cGj[[+mS r?7.yIhQ?YRRzՋKߦ)MA0wO_Lo;r]}fOBN~?5i[i-߻߷E>g?:f.ɻjd ~_8c?Z˟V??ST[y/]zK8 9ZRo'$<-m{گ[>ۆoLcm.WspERSKG#OL`zZrݾ^ȣ!8 `umw^ Qkc6A6yNM+u@*! q}h42_;M(W=9{P\⣫o >փǛܵ˜N^nO]8K^?~%A>b{}Ÿ3&u]m*0H\.r|-I*[ݻ rN. ++]j+Oi?뽼11sUu7}z}欽wbHǧ?:6Qm]C<oLcϯnR}_ƞO~?먆<)s5= Mt߷dol{wO>yw쩻;|Lj!yI#wͭo.9P~`01M9Z_נҌ{;sROɚBik~}h #3es׿YV~O~㟼+t»X;ִVvG-=?—]Sݪ bQ|sT/t۷5b$2y=HMj+BD8!_5:d{Å O=e(Ξto>yg8|]/]z.? ~gb-#' ]ww#TņX+__Nhw鿘SO[Nd7?OM]~:nHK|F0N?֢y7m9%oy銖ݝR{~AvHmFaw޽#H%FOvߏ*a&yhԀ$g砨7i4{*+ ߚjFB?*g?/M !TǦ2{gkhQro2n P3_?\{鰞XdRrN 8-g4t؁痑)_t`}8(ۧZu)J?w]kh]Fg-jI:p7, ʂ .k7˷5(Z]?̉`B>a_~I_Y8S~bavG=<g''e4VEg^?/ƥptR]w@cÌ瑌O(RjS_{t_7>_?t_~ƇLig׭vs;;i~/"KmZ2Kgkw[)=uVG(ڤ @>mN";o\N9_8'7Ѕu\F4t9'wz*dOr{׭37; ˩mەm^7MmOnwE$)aSm~ѺïޟDǷE9 ֜ZN~&U*MOE躽lS5\媿o"ɒn~%5(ِİxrKWMu߾ߙ ,+ O}{}ow8%WuH9z}zB م_z8N5Y'dJ6uF!Nϧ?wS]w?S)?u+|{*C!?{?1m{z_zhcݐs#OҴ¾9Ms^/%0$}ΨN+m|[xm+ un7kmz_yV?-Z(]Qsr7~PUf_ab$s7NRj\AaW6[:iG_uKI??ݓz9Td?h]1:wjկ(Y[1[fiVI;Z_FS~ tڷwg緟`ww\TV:6wZ|:g :Өr}Q6]?~I#Σ-h)jpRW}ߛRz~qWۻz[|apiLu?i4Q gte?ԭ2'?'A`|ßOֳMW~֦Ú>]E9'rjmw}/ 7S=6W{f6{-1y' J2z{994Wm-q$>'9%14H}OMn wٓA1N{I4o?'&y8?\z)4_%8cX7^~ۙ]"V=~_zͥ 8U娺 e}qzRv.T=- '~ozd*+@9_$8GZ᪽_{&=T7mXw1 =)C]7SN_r#}߯4̤] @$3r˯[~0(ĝ>-ݧ@w9Q~JME-oLF?k:-nn0. 䜑(3#-P1iǿ5u{u,gA`w?)s?oNKU8 9/s3X$H$`}ǽ8˛שH~6m<(gU IuS lgw 5_o'r1Z+]3vJI Rx:gӿ}:v1t<Nt-^;A䏧j$H1}sYsR_r 1|^Rp_^;_)XʹW__'{;owC}}phs}׊|ܺn7kahRs=({yw/,dz/;X~|R4{N^-᷿A*\uKP\sp8N~fSw]|y"#nrW$c=?\F^ >t'6[|n?1.iut({%~b6aT`eͅW}ս?~[/ͤ䃏9*IͷgջN0ރFj2߷^IܟCin]~by,Iu?G泔}"^F@ ΪA-tݭ9HU@M_>]G''<߅ QW#1#;{Ow{`i?{FFFx<ׯ?CIFo z=h8vߣܳ埘r3<)I_;ةqg?/Һ\V2i?BǔvN|OO^{ߧ@82:nӽ_/~Va %5sZz~#q#yrm(nڰկu}Ùgy?e#J䖗] ߣuW|!v=xwzpܨ=8g.2濗|z;ׯ6r JM=K7"Nj#&ޯ]@iLc{u?z%%DXpG9#Z$ْ:6yH*?TZ#I$7ni8[_#BJb嗴PӯOt8;?Mh$I#oֱ{.=ck_̉K/$cƵJOM16q9?ßf+%o\g֩YXr\& $rzp?JV^]-aYS~ohE5(|~"2c8<{S!7]Fܑ 2K~Xh!M]RU=; O׹"ǐH%yJ K.qMK_HkUq= N蹨گP@83Թ%RCo1%'%ʟ_>y?t㎣wAcpe`{ ytgqԺVi F8s{LŤWN _S;OqZ.Iޣ+F_>{"Q3{;^F^M!VLt<ַSگ FW]^(b #=:rWo]~j5$8$}YsIGl`H8G#V-_,d '=N?oނ\tk?7?99ng |ש.tGgz`Bē0#3_O_Q2A'u`IsAwkfȰX1ۻ٫|Vn}?1_V9s?^mZ"~{'\dusIh;׃rxRۓ#'tky=W{u9<I'_?y prxQI_ W.c@U-]Mu5VN~G͜8 Wi_qoO6OQq4eqLdBx'"Wo=Ғw T%H?jMl"[俫||Us~Y6o{"Rp}p䂽M;B^m( 78Sr/ȮE8^ߠ#+yi_ @Pc{3泜ދ~_oһ;=@+^QSZ.*dwZ=MnV{pI0?I֯~ߨcq.:l5gp%P\ߘg?ڎywB0z{_OQL;ӯKۭnm*<_?O2!>I篧?қ:r?FU aOB֪ ^~,QO''9`1~o߾T}m<<>ɻ_=uyiI)J޻Dɜ|A?sVØ7ur6D=9;qr J69oǭ%$_.ѵkgs>k#d FTGL{W7W[$pwj$޷FlBSq:}i ՘UQZ `gk;'F_4. N>.Un*KoWƌn_ǫkk{o=X9ݓ_皣W8h_~.0F8{* gy_wƲ3hI)wy"'2߯>ֺF8񃟽s/j *n8E'ŶM_%wc|xz?}߮}uc;E׾^ŦFFAw@>,ڢmh@#*Ò?Z8FUx }ծ^Hs+1~\`$:V2o}?#xѵ#wIGVfܜIOQ<A-o"}ho7_gH$9^G]_ZKwI^-0FN8(*_Si{=sUWztN ;a0$t/ڿ q מ>6.A+;[qq__OQMk sh]Xrsϭ/N^N7`%3ǯ2OBT)rv9b;۟cU-^,g:߯^i͙KU6 k8}2i˹roOr52/4ߟ$8$[WZ Qwo/ROA=yϭRo?Wkb00|sNZ׮JWm=4cp8~oZEJI}ɑK#qU$hb$922rp~jMc/2l'1}*O>ISAfWw_-K+~Z [ЄI#<E/w/܌ \LekXm˶P1̻!G>Sߙ|7qRމ[䓌}^FPf~fn $p;~_ݿ[b],C}3"m? #q94JQil\FrAb ?9RfnZ/Ϗa1gI̞o+X4NRN\?RM_}rLu'=QWo0uo+4ٲ2q}=~o'("{o5$|6?|M;ꈪ? cӃC>.v}}Iw_sބHk;Oz2Ǔ{˚_BOFߢ7g==U浗o\rG}ߦ{_/oQ7@y'g ڔە_Nߡ7z}?ϧ4R6|nkAvsVek\㊃??lԷwsNH_!~]{*~Dur<+M|Ew7T[/c}wsTҷO_ͥ Y[q Վ3?\T%%~$':./^z4m!Alg늵6oA,}I8>I4du۵mʕdi'gsM[_Q# U=;g7? t*yAȞ_ c ڟM3h:ot nTL4ɧOݿno|?n^|,6q;9nߩk.Anޘ=Ȳd^zVQށ5%~T"p2 Z N1Z.ܒe$3V۷*'.~FqQm8(70Fk=DwR)5}נХ zcJ_2UE x_mSd/ۻݲ&IP:ZE֧-Eݗ׶׸$?7.7Fep?LzCmDܞO~&&7e~-VWp_ofm;*I>Q~q?չ7)ҔZӽ~ ctz2zߟJsou-5 VbA!yh1z#U'C0n45r{O{O]]HŧYk*>rK59U9Dg# ϯY_sQ<7t?҇9>\~< 猟Eu{7drH֓[qҵZ:y9?:>~-V_d"y\_ }kWp9/_嚙k ZmcB'hŇ@shs߯F1{$'8`Y)IuI4bH<|s"\oV79i%uz|^!-/7 1蝹T'-9_{t~C@n$^Z?O2Gݳm=}5[{RMMD$}RB\kmTb͑L~ojPQrF8yz.)7>+J?֤}/'߹ h{Z/-5߸᜜N?Gy@A#Ð_&ts_b)y8SsfF;~N3@qz|\Ӕ~DƓ_v.FX)kV|ֿn_12 ?}MP=ռݺ}cDMczq?ܥ~~\wuv$*/yW#-A*dN; 2O~qh4gp Nw /ƚvw}RWv'('jMuEi"\1a*JRn~*I/oOR#U%O]^JIWȐ) nX}`v13$J03|;+[Tw/ߜ_ʾP9Z pB>79iU뮯ƺ_~˯UNJۓhN,v#1n}qW{_xI ܏Y=[>{?ZugE~t릾V0x#*6#X>gۧ4mGqys˿IڡXq\\Ԃ}/&'d# gMzfܥ-yAv<Skoߺw~BF@qyoj%._Iw ;nZQI0^=w+I?ݨ238$3rzw?|ܮ\&7 ҩVM4gR[_eq?ßy=>_{qETzI }]k>d޽5T5cǩWM|jvh3{g<,=}=@ֆm/]}| B~oyΤ7˳d$|>{|̤խQuH~sDd{[ׅyO9{ϭiy﮻}DeN@$r }ҚijKM"B# ?ٚI+wo}X19<~QI/7nDTf2^]#÷8Ʈ 6cLVh;ko]?!6zp?YӺ2n+Kz|8Qqh.d̹o=wz?Or駵y9W>#xϹme&@#NO'z\Paμ{,f{O4{ejMqD\q95g~o0w|8(_68ϩr抽R1X 9sGr2mrݿ]?Rerpz~=j'$gO/{Zpy?ɫow}w@TתO{?]E:n.^xC Ns#T'}P9G,ES׫zRwѿ5fhaHa9=>_8qKfujeV3N[uoG˷9wg|N, רgs{.wVu:)rS^^x2pA ziZApF t^̝c W^F2ZW_Pxv;}]|*M+Hlg~u27ȚM'?^|9@?zsIB5o1Kg#&ݞ1Kٯϧ[_Qʄg7sztMЄNy8R~?$RWG_jTٛU>/1< 篯wCU0T|}|/9kQv'te~ohroS77m?ا:{w{߿RZ~Fdcs֯O?r-+~` ]܎ⴾp4G%d}+zVU'emv:!Cmn!rBObjnXA=? >S|QwzL&?oVw"# ?~jVs?bo^_2O$ n5|&QI_WZK d~?Ӛj^~wZ-l $s9h{4މtc%ʳlGDo︻ryrV{L' ФtEE,xʃ&&&.1|R}^̘Ĥey韛f段[_"f0 .yfgm9jSwo''q$ ?|ӗ-<\&9#Rte`zBSNۻ?ґ-wRI :w.UϠReԑP:~z){wSjIinTܮ NwmQ?zA 2O=KjҽI` T G1W$=P1x 9$y4 ڟKy{]G:;Us˿_k!cמK󹤣ʽߕ1R94iII= 'k_qBI HL*aBQGlg_Wӹקq1H֪!ID*vc_?Ғo*s(>z y*fO=prRzi_'hNyקdvQ/]}:>bRy:?惧ic `AǮvA^~Ѓ\ĢNV\:Xqד?w/Qȶ׾zbI*S8<M+]u省@r9k6w(cFt?w:_w^?3*ԹUҿnگ5b%Lg:R_4~^1Gc?Y޷՗'_=X8 zԦ̈Ǜ+sqI-SרVFG^ŢME/aC+$-U?PDo 9'<{K}ʍ>e>ǺpzY)I_$h࠴~yh#~HMɶ!L0ANQ_շX/׸e&~CX'q^h?r߫{y#pF@{|<9<`_HZptʂ8ۓtj5Mw^c6c,W8$t.1z'[UUzc{}ϵ'&femR2 6'YoO)|9OPgsN9N7N|iZ;mjFrH=sۿSOkL{+zt : {ϽnM/ }rh-Y|du=O=O=+tmE>|G:gLKNt}pH7(wW2tܝv}Eg68m?uƅméQ{hմUb]~` N ?iFOm~/Ե=i(xOuFr>׭Ǭl0BϭC{B.7"4`#8SkMvDh!p{=SQ#X 7~?W~Bk  /f"Z_^߯o0X@cN;u8E۝k5c:cλ2t߯b?~PB{3J[AA$cwKQTߗ(:/X`3oS׸ݯЖ߯$RrWeM7/{!)U?y?^gM'~]c?>T%uG 8OOֆ4Mͮmw'I=_zjmF:;]u"u$Fc}R[; w$}ףc;󞾕F.-$7$#_=ΆN>}~]1g mk A[O }KGn5b_=#!H׿?j$׽gM8%}>o!@$`?^<| %ʺoAQtn0}vɦ'5xF~_>}B'+IcpׯvS[#$sm=~%gµ;7=2xL/Z>~U->dD,Tl.Zo+…c^̄Ōƴs}}n샓Ǯ1ϵH " Hcܑ8ַy׷2/lgzQWU~'?06s=:M/l*п{7t<?Q!o0Nn/to:Q~m18 ls|ǿe?]F\c8`97{_y8Y_])³2-䊮x4bńRq;q? 9fj2~ycߧink90Ir `Ǐ|nߦMJNK]?EBN A?֓i=YΩ-p 9?^]ks~|?^Td;[ ێI+ߎV-_~~F\ rq??3v'|!qǨ8?7rcd89@O*{y?﮸ =wIJ7u?ƢRk*jo2rOCRJI1<S)7ԏ ݀cè}S߯9Ǿ^h rȊ*p+E>N]WM:kpMft'u~ƽsFNNPk׿=s߯wx[oGE`@%N6#ÑGx>P*W|T6HޣOi(6)'!Q߽R`Gv?~rՄٴ gsG2}1E[{~=P?{{ܦŗ$9IG9ɻ-.A7JRi:Fy[Wb0Bf?MrKIj~9=O 9?닋~_ș~VH#ߟ}j{uܚ[~Eـ7pG_oϠȩz>Q͑K`|M!.rTp^ucBHA r=d֪i=UgG?޳k7m3E8I~0cH vZmu/N8kf/B=ߟGO895KCGbx_oo2BѾ~p@-/5k2纾,r _&E3Z껽{d.[]8{"Z-ew`?0ХտSwKWGBpyv9$)vY@_]"py?7X ]{܌! \c9fqwmo0c.tk}Wҧx.{庁n޳mJidۨ֌ij(j^ߡr{t+1Vy~'*~׷O/Q쬠 HGkg{{S]~}Mà${W(4Z7Q^10Xsq̈Cdzw'rTuk%t0T覆uc9TssԚ5DS=xQm}'959-9jސ]CVkoտ 7J/I'v?.hPCnsvVo/qFVÑ4{ 0<rO*BR/^׷aȽ -n:ovo?;~z'=_ʮ [wΛt#d>dU()j][e?('zmk(d߭:N%?JϚ]d{"hSǷ_Zqj/oV]9_jݶz\Κw-ف~Ziw=3J׻V:h sT R]o멧=R]wtݑ}+[H#zg2?_IΟ?]F x>YP+[M?[]F6S@\ޜ[_}ф¾R2=hEY[V@7^;#}GNX/q=zU%I^ϩ'8S>ֳso鮩'`32wm\euM_$3(lc6׳P~3(՜[ׯ_!vN's-*8rZٱN2hRQ?Oi?1|?ǏLVdϛH3o6նK_P}01l?!P$jN@$} ?wSϦOhb9߿{+'QIx_) l{kߨK A#'Vm_T^sW/#ZH0x-O<~ +/P:=׎^vgvwbU~} .Fہ~PM)s?NݵcO1^OD'ίu9^_4*z_Q#h3i>B2qŸ~{փ''\o?l$ n=+/z\Ѿ׮jVn7؏޿֖oz}?ݷ֑ԥ5=bÌ7ko͙h^`яzBi;ZG>)E]ꈧFi/ϻ >͍1i=~ۚNZ[_ֶ,EG~lsk9ouЧԉ ?^O9kX֫W ugy>[]GLϭfE:q]=?OUe%G_ҔcmwrpxIICE/Ϸ%%{k&⤀2O8?19_P7~_nԋhnJ: SFьn^u_L4>SGJqk_B47,d8ϡ=꓾Izzw{+RZxKpxAz茯u!*Gw}:TLu{Sg9wsҀoyRm';#HboeGrzuyiw}Sjm]m8c&ᄑ?Q՚j[ٌp;rxs[9 n[hྪ=c*9PA52^_s۷Px/O}woJ~+'ASpGR?zR[~?^߃ZC4o6mc_{'}>9}Xu?7.e*|~܍Fw/F0$7)i]9'g^?R.n[}Mɰ _ghߛ#\<}Yf,ǿW<{ t\kle7g!zc^ۈ.F9?Z?hﶟv8' dp8OMcnf_5GmVp9jRiV UB9?jԓɻce?*M3YEYk0|N>lI<ۓV]_xPX'?M1ROUz=|o/-y!:~oxCU Nv>i'"^w{u8={{՛]"ZvsA<?w}荗:Wn~,3iQ7vG(#_'7 YݷMᄒ{N1{?*Tٓh7 1x="1}{9֎yz6i ~m88/̓oFrpqV|m!i }177o_>dןߟ<잏EHs_Q.:ּVy~C b{>|kܻ}):3;O<}ywM[K|u d8(?B?/݌[SOfr $0H~NI֍'7_ݑ_ǁF~ΜK&'ǟֳwjsB'"t巟}I|IǜxQ\oȼ}y38S]&֤XNTwsЄcM~Z&(I#9v'OHmEp8P9ן$[굾뿨q1CS+Iɶt_Uu>o"iw:/[c;qT֏uC |p{~_ӊמ=3{^~bN 7u?zm-_RR/wsO‹ֿnLݺ9:~aJ}}~?i?"Tq)9Rg{/Me++m~+V M!B)ko\&2H9}^+SP[kmo_۾iI7niFS}k:3?޹ԓz]?=EO=]"(9lc3gz9\/m<= ?C1_- Jߗ1G\1/q8 $䜜w~^GW4jj/$Ƿ[3VAxgYs+]H# W<]}~6ޤyj}֫7p\[֢N-f}تH# 7׭#.k!E2H#9xis39|_今k{c}9T}޷~}w2e 䞹?_Ƨ]VV-/fs{#?:`27Yi^זJz~`xLcQiq]Ny<-i I=5_&20~nAv.\}A\qtg?/kμ6׷0A=Oy~? '-1vW'N+0/g~~}ǘz5~/Bc,r9 @yן9'7Jv:VFӶ~D`;I?RV}m4DI<~g+[~?a.d~9`wu&p??Z #{+݉Ğ^܂rׂ?>6_Uu˿b#8'Qz~ukEZ_{[;vZŻƷGԏnqzkّfMK1מ=/e'2z3y=d4u>\ۑ>ϧ>tw5Je%d* n܏!@oC>OkTC;py,:?7m?X83_Z=uŠ y'[=z'w#*7ש\_-vSש_IF릢ǯnZ=uvzl8ݎz{)'v+FI<1_?T_\W%Nztޢ1jֻG=w.¹F9c쿏ҭ4^Z߯N{d/Pg. ? hԞG5j.F<eJ [w^c8xWu;1lA8=93KTܺ/1q9?~Tn^~36:nBэ@nzEW8 r_zJ!QH rd?tE(b>z5njdzxRO|ƈppB^>^hi4צ7Aq[Z~bA ;yrIٗUGGD{3sz}ϥQ㶷$s{Ts?iM6'}zЌߍ4Ժmů;}b2 0TDa//?Q |h>5_GR>W^W#;12IIXR?ct|M8"ܝcqww-ߣlddןփ'Vt3=^o10seA8ȥz6BU.W~6Deq1$잺&jrw16Nn͠մz; 9m _jן۳VcyldvXjwMF~nG_XAs^_zVOc6grm^}?)٦LrQJb=H:(Ekc* sh3OTRdR{;o5T{ zfFW^kѻ=y{89_Djmo⁐w1t?1Ϯje+y#S{Z XOfW?/[_9BN}LQΓ2߽޿'-ӎ\t[w]֕FӅnѻ$:+lKmo˿`vOT䣻j2o>G"m߼z׿\սׯO.G}R!'֎OW R_ s߻}Z7&LκZN3U^篨`+=~((mI%I8f=zթYmu5)ys#4lաoq Rʼn'q^+9vT>w$+I%v:YM=os{*lkpU*߿˷U\$˟e?7o󫔻==GAJѹnIoϿJJJ*o_Q>t/A01yT]Ԣn]1qJ*yMW/6~/evkMLz98=23_LRwWz_3q~=蜗]tis=ző:2x?֢]=m C+N6?u ʓ,ϭTN0%>^[ #n  <}?L{zuJdF6`JHMK?;}XJO_NrO8~$?KRշߠB?wOsw9T?a)# P.s{שN|З`9\`{dκQ|O9'ΟQr*JMlwZVWobAy?{^IګwdBߗƂVTe7\kÖ06wͫ~&aozW[wc`yVGl?}XN>`29>zqR2C,ʒ2?ZK9MɽZ9cMK)'=_ 0\{ִMՌj85ʣh <}zxRjItO-IMIۯsѽ%ᘞI9o9$wANJ_'G*3>T {r[>Z?x+~ޟjM&4W_7ObAC4&M6ۅ}|O]iIyjWm©~Mnk:/^L9ʂT0g?Z5ooO̙s%߯wDٜNldSv7Jc _󪻒o~yƒK/Xqwm?7<I_ Q8Qw}z29_X]H<܊p}}~N%{kлc}̿]wyM?aZ-2i_[ruciSAT\~܅ #_QfvT@A,7g;BmͫZ5SXBow+2p~f8n޾{Þtu}aGF1ΔZN_Ҫ(E?_a<:C2\һ[6f޿חG#;o\g-o16l'>#S&_Myz|+GMi&Ӻ-¿DY#{ۑ99 I;06?}?\"eI'k@ 2cz\zU)_q3I]Osߚ#x=·(#^Lvbzt4RM_L #s}.}z#3j\_짯U w0Hѷ޾մLb'.g~#Lm0*3Ao^/멏$|u&,0c?oi7mYJW&ןyR^&gdo;9IEd2:y~fi-y n>N%${“qө'R擶cWc8?Nݓf-4c?ӕ*s*9.9W-,vO}z߆aQ?('< .wJ-6O INyޜo5 ]o߯ ǟS.._;~^Vs[opC9%I^~ok[['}ߧNXqg[ov_2ۜӻ?:mn}[Ej_-<જqұsI^qʅӡ8"mƩ).oO}F,q$o-Yjg<ۻ]?>F#AxR~«[mrEI[9yA*_)Quט*n,=zث)_/ s9z҇4{5c鷯mMW5{{uラU[< ݻM#׾ =H+?_7롆5^>h~%XPq79h7SOя?_JyI4' }G7+NѿG_?͑󟔖=Zy~?Wi={~Dׯֳ/7m+^{wkCV?̏a!A#}}9}kV%8{hJ{|N{TG5Kߛ%qp?>47~~{vby_/ ~oZ^1I8>~do(8^ӳjmCOzX'T}oΊOxۮUF?VmXl FBiOqZ .w1_@3m-mE8\CdtwFq~۸>MsrF2uFFq4J3w۷ru]NOsAئ׶ #$?Z,}Mv'1;椤Ϋ_A'_LȞ1NrySA9F)'9'ݿ[zfԹoQΤ|{ʲnV[@lwJeb '.7di}vR^pO'ABb_WC<9})s+ܧ֟Иl`Azv&v{-=hcGmγs˜cvzvՏT^9?_ni;jƤ8ƿ7ܩr3~Oi\ÒD8=>sKyT5k~xFz.3}jyUJ*7o_o?ЈǴ2ͻ֯=qG9=y Iu(^G8ǭLE4}~#G1ǨU#Y;pYH+e uʉJj8~dќtzS]tשrvqܷ#uZ|1F;w}Gp(u=>ŏ֎x &#y9OǟZ%%myQwD9ݍOY6rNw}H<Ř #'o_ڶHy>1ʀg{4-Ceʶk+ p0`tx)r258_ӭ?im.˯23??)S֡6ѲQc =ҦWi{Ajɒrrݺp?_v5sVxT+n2*({_=]~@z} u_ n\{цF8?~?9j!v``9=Fq#&uknDW`FW<G)rKܪSKG^y`gĜsO/n1MϷZ2zoRyWr*{hKu_J5R3mbl\;7COnZOf5^̉ێ~|^բT,}N78? ?{=[_+6wo_?:Hok4Erğӵ48)S~|Qdų8?\Ύw+2jmKOq3CR?>B}k6O[UmmFN>U)sw 9#$6G_r]9'_FZRN]_}棘o$={sS~ݟ/Ѕs8z$S7*# >g4qwP A"IQ%6$nXsJ4]iԈE%q'#ڢICHI7vkbas}{r{i+TpGjN#ڣ~ors*]_wØ)ME6 7x9މo@b2H7yӷje;=?/O^pc߮}Cz{'.Wkm!ܟ?55$b_llF99GSm-T? \G;Nxw<1˚:Yo} 39zރis0%GyY鞃=\sI?eͪzk~꛶Qm;17;#;wY}ˌooyJ~{9]W=h;]M!JOu}ޜRS__&MdIrOSxYRۯԐFH9_ۺJRt=w,EN9Sϯ'^d4vGK1n9&5^cMF~E `n?jh>œ`c=isǿg_$ @;w~NwΈ5o>=6~?5%{M708QwjdvoUO_uA,)㑞ǧZm߯jXU=q~8jկubӻ^v3`ns/;18^xr9/'滐d'sZu~4d=\>Ԕv}*8>T 6_ ߟYGp?>>-_ 2{&&ތW۞7Uu\#mqB~^3x?O˜\k&gܞ9GバpiGS|sOnڳz< ~k͚O" t;۟4uX)^2C1].p2rsvRkfgR =o*pÌc9iyi]7ݫ߯Ѝ6G9?xt-|ug8uyCzƧ7ߞҲ[S*~nN9F)Yfru?&2I^=믟+rNsi/??zvprG$X''^g(]u(?SH?on#&d}lq9Q*.Q['<:֡馜sRr {?N朋Do az}*FwoPT g8?ӒW(!nNsy{~f)]Q3ЛNNqudq. F {T'ʜav/_( 8cy;$~OȕfqMɽ.}_؅[$ m{h[6'wQN:~T6S߹!To}/߇EWu}u㏯ o)5Ϻ&'ONÙ g%xbB>Q s;?yuTݍ ^zRh.]mojwssϧOΜąwdm?1 G]g5m[쐍t09?UMY5u0E7)=?Kwm5J<@`#|}_ˆ0##:7Iwgש"Ac%>Rmj+E~Qۣmoϥ }]8%#Q=qM>W?Ji깽W kpv?oýDemtP~רw vo֭۾U#:庀)~_=jڔUԛۨS߯ I^ܷZp g>Kw_x*jS=ק?7_MPIA_QR#{/n a~_An/?]ԟVR^/j'N@z~4۶N{~bېsJJWf"?osme(Dc pT:g5[M|-:_[}t989<rj\r3n~P^#:ΥMWVTI)I=pm-֍N#Ϲ*~}{ 1::vaS٭]? z{#APQ}> gnA||#+/ۧJI5PH$ y!^_{r5^ZtxŅrFA s.4~W|䲜{t=7Z$GaK[VkOiO+zͭvD`|1 [:?zw}ʲL* =?|#(=€ 3;T)'sI+)sO/kw(zGBNr,{%kn-n;|uDhmÏ_ߧb$o9#7?{YJƣi{]%A=8ӓKb]8; {֐L%Q;xlq/RoD$ϳ2"3>_~Nz_^ͨނLqM>o3rz^׾1Z=pS۩__ҌKuLo߸qY~qH>T)I-n߹,`7QJM4ed[~~eUR(MﯟmnLm̓#wOOǎg/+m7۩'3ւ9mkF3_Dԥ\}/Ѩ\s_Ou>4V~w˻oށ)ym"Bߚ.k?pI$[y&g4e8=O` |͓~R{&ʫ'{[|wom-BٴSRմ1W+''9JFVk +#O_ވ]tZ7;r9U3zH`~ֺ/ ~q-MۿB \7CŮF8T{*oM$ x;SSitcRO?Ej=Tq>JˡJVl/n9JW'6}:{8vw/^a#<klU36۩r/ wLvOJqi4Og;zm1 zc_|ej[~l~x#wUYpKM`W?Zo_"O/rGl~Z6pwu$sEsz[Rl/*܈҃Wol&FA{Ӛ=1ƕߛo}7%`Yzww>ݕ/ `tP}ƐFțABW_?M꿭;,x#jM4kF_w'N>8{|R⬼* >a;.2zv? #Х$\$R6@299֑nW>g;QO^x+;$pxuUViw_v_7F)@_iK_f8K/)A.ۧ zc8'?5V[tBQ]uՎ FҷVMqK ^?jjI.ߖԪvW_wFʫgWoUUE_Gu޿hR0rO9?oz h8;p[5 ~憯A+&]QT0*\pV֫;~_tvp !I_j%kk΅7$w2.Ac}H%ݮc*$o1 ϮD^V#y5ͻWua{Y[7B ׯr '=A>5{n _~tsriz-ϨݪT˖=Z3v79I?֒wʣmZ6+ן}*Kx|yԛo[RkM9/.z8鏻ߟԩ& ҽH6ܨ?i^ɛj/^]|Zܢn<}M۲]{G]Zm7 Tߕ^c/c`s=>+ho 1]?xa'98qQuF__Xmb918ߙ[+_v`EsR&r]ɑ*8}?=֪JmƔZ+׭L{~rO=y'~4۩|B%BK |_JӞ=LnގFIA';W5LmR_''בNۯ7esXA=.n9;'9Fm]Wny<δVgnF~?:ˀnq~cPڷÝn#C˵O׏tFV~DNZygX18 ʣny[&u\d8,G#ToPfz"e$׷֨REdf#pl .I>iT{1H}kff4~#|y?w_gVP1 s}O]KzZOW~D^KNqUw~3ҳ3pA{q{S-M%bb-9WŨIk*`sϧMy_יCUb{YvvͱqTdӭׯ1;'zbrKw3'yY~p\׽g)߭Κpqk߯_QF##@5ӷwn''@W=k>Ly%7{})\WoNօ.k:=5ʓ$V#n}z~rzm?{*^Gk~}IDqr?J ҿ/=y\Zw}MJ.7.3xqJDEt&û=rӚyFj}?D099<J/|H d8_?΂iK'acyo(z?7_QYo"D8'?7ΓinŶ%0I\N0s_ 7_B!7r:W>JR8C~~78)s\}wIIΥ(#H8<ՙF+[".sќu}n&A&۷V=n gh6k/?IgrA R{~?Gyo Aʝjy5JQbϿsߏj;XT?'sAi',{ZS.chFߨS?u~/RM1O_Y)5y[?@nʎX󞕣oWF\-3G?ӿSin̽;Kw*qo={Vr~]m:O{{o̔#`=8j .}a^xbrs}4YicGuP'{i!bz7IKʷ ߐxPCm߮:1R9wFOo_D!;62x>}qZs9Qw].K1=~foSH1[j9ŒbD.XO"DWq9 硩]to KO$qz޽ORWHG_Ifђ'F9B[S]#$sg'Miu V1ų'<};4&̅EϷ߯۸?[]Bq6@~oSwE>o;4+~^_5_sϕm Y4ڲ}aPO8r}yseӢ_5^Z&0=Ӟ=3BJ F4{z_~nP]' 6wnjVϭw9iC[Ii~@V Yr:F1+wda'^n_~'c׏_CW%{~?J_9Aޖ܏iy$@?zKEv껙{Kinq2B=B;O;.)Ҳoݍ?(#8um]?%@B,y?ɬJ6w d9ޛmӣy^:?Q 89?P߯?U}|>^= K^Vj8F@߯OS.2md4Xbp1߯~ΎywxǨqJqT__N BAa?.(n-u\Q]oRIO3֜[n?>m޽N oqU)[-yG#8{eⲔ{?4UBo`GC`nsUkOp7v ӌs>yzoN.JQN?':'ͿoQrv綿y I->^TJNL1wL9roK#'ly mqcF_RoV3i_I@goS}Fi;z?۳0Nh5P7yn $<ϭ6_JE߷c, n11r=? J/Ϊtt;8?Ӿ빻M=BE4'gfVރΨCK_n$hԝq1W4!2{&y=pǻsJ[PGBHŒ3ETZ^L(E淪cUĞ8;y~?F)󶺶4<z73K?#1`ю=PCMn. u~Nl؅Tq$suzw]dulϧ.Ys#u82̤_2En7['{R: [qe'9wzcg,2{1W4N:ϿV3Iq‡&՟9V'kc<_I%~n쥿˧rpry?TvvB g.b!p򝿝9Nmm驭Ag^=䎽v*֒[3m-W,T1s_(O 'n;t:x:~:j0_5D;I#_^ <ܺ[#ng@ukn2{@~[pqrf9rw LGOw F[=w7\YXdt~t 9z=~8r/y|޿[y*=k|u7N$g\ROf[zMu*@?"g_;zoi^A#קփ{{ 8zh.6Zr߶V@$W_;#怌p+d60y?^}sAJj;%OL_טz/75ec$' S~?g(IߪkGAnyTC$~ _s9=8M\~*_{s fr:]F$zƮ2Im*m-Gǿ~ts_z^QD,?9G Gu;ǾztoT.3f2p??;0y;r@c?W;%md;}OU%dc `7Cz?h>{~*{19ǷZ0JüZy~&Mzlʪ{YzzuB99@s^j9-/~a |܎_m-Nmiuz A##SVoP 0Ji&ߐ™c'ɧ.u0c=ySM/-~1vA_⠉[?޹pxی )FI Aqw)u{ɿװ2 )Z^Z7ߺzϹ8#{V/^O;y'eͲ2q{q8 Zi98@?:qj}E ʒyAIl?˓ݿ~ӋoQLAHO984:OT[?dnP9?ޫogGar9\Y?rEo1<~ŦVu߯UssE+I]Ot;e*OE TT1n0i_ d{ rqTmffڒOg~v!v._߱EeA\rĎ@⚚__ v~6vT'?xz*gᱤ ?s+-}Px~pZ:UHo}Lc8?hՎg JN֟|=I?_\_"ELg _?yii0,v%B\fMWyE]we>Fx=wv/:V}61aIl~hZrYΩ;7gZу?6޳r-߹|IJ(u[B =B`_j`m# 0$?^~gʍm>4FC@yd@Ocx9#I?փIE/w~_^# !F}x篧[痑4~11W2տz~.qe{'<(a۞:Iɛ&M=2Oޤ#(=91XE;r;h9玿ןz ===ӟ_ԃ~wЈy$q9eobrywGpr8#\f۳hd}A6''nsJnI S7[6cnFxoSSV)IIٯN>@$.pvn<#5MiNW!;|I*''[v|<`dV_"S>}p_֠۔ CJ}%QAZv-~2(6X;;v0w["IFN>E+n_K=̀'x?.i^זW^}0u g?i:aZ!8 nJMZ&S~wdd3uo_gE>GDX 8'm4={}zG_s?={R3 n_=ϭW<{f28y;?C w'Fi/_[Hi'Oi@HT0=N8W9o`Qmu__wb ~ϯ_~:ZHd6p:([ZR !y%q#dh_ƘxG|h`s=qB(/]Զrp}w 27wg>9F<ݾ~O4`l?wӌմR[m@ʒ3{g˚loqiyLeGI>9?렆<.NHIS}~;gp|.9l ⓒVQk!Y=Z9?xzTFۈ;Oӧ3xRm *O 2[FͥBWoImmuo߷B/ۿߩ*Jz˧̇`BkE.kiͿtOOu"=T忭A8}Fvy`GZ$˚WaB Tvq*$w'_vP.~^0JZ:v,ʜC|ݿK~?hҨOq`8?֎w#%zhÐwCn9ziOMGN'箽7/cnǧa֩9urO7g uH~OrKZFP$9O_}E'x>R 'kd^Q)]]#*\_ߨEk(=Nr3vcпϡ}o=̒DgUQ>׽4TOîM08/z̙֜qW~2 wSO'_}WֽAW; tJ\ۯI^IOv:=7~k4}Zu2Z_ Y*zU*o~`zAQ$ یOLvVIuFsʌe/w`=ykt+]tR%ݻA'e=R]H i;y02=iNO8O'OϮ=jnTߨ*xc)7俭)Nw?H2q/'56öW/{s~S'OzHgn:>^2nV Ҋ~ݍdݑtFJ+o?\rǀJqVj,#>w5{_{aHgL~qշ,mr;}{~eu4tR7?]wZ9vFq?gpN_+Gy ý 1澻$j{(_g+SvJG(n*_­-٤ܜSK]}7_ c*۰G4o뱃RS^S溵f[ÑJc -D?[lpzn9]LoרFIfvOgU֗4o|>6z$hjH>ߟ^}[j3GWP~}Q즛O_oP":x8~O̙G<%\_|)9ss^v/Sտ#lTF6T_4'>S1LTR G3gƜfW؋fIbsڑ๶]?,pw?:W]u[J3+}I?޾UM[W]y++27B9ݞsIkE&{C[}̍9?皨.׹*\[T>h|*Q?{7?F_뮟s  ryٿßZwWL5֟=}<3?uI;)9%H7~_\Ф(}zx#:{NfQ:x]n~wSMY_^B|?zg\_u :؉#s5}~[ww$ ˜/W_)a>G}}hU}?_4FN]o܊ݦd&s;sQ)s iY?^B}'|NK]VJ8JOSݜOSc.[{ ?v[$0?yo|4J+qcz Ҋz{pڋ6s_z ;ň>PJ⯞_z* SBeߞ+4عSjMom{P1y}\&Qrzb o%Znr +~H9$l}uo |\֏$eO}ZJ^Z͝靿Mv_'w%8<xΩM?[4pr^ ddmOx=)_0 ɿ[Hgn΃E&+\mms:Z0=J19rr҄,k}e*93d~Eu$ 2#_ᾔ]w_yN-}~CG׾0w[߯RZA\?^>WhpG??/?mo]_,*L1ϯS)[m/SХKo" }x{\;ҽ'$Vw}_t>'Z*!# 28A|AQo蟽K^8RvA_;s;Z׮B0rSz*e~RNot(BޜmG_xQN(+ק X1?R;맚Wl5gxF1+LjH?>h珚qY&֯ELwdjgk߿MW}\:c|Rm  s֎qי9 g4N޿]q?h4aR_ }}hFIFye ]Bo%.^/̗933ɡ;}Sy;|ϸی=p?QNswsIku[Cӆy-S9yuI"SuZq2+jA9^J%>{ߏ߸?0qUqW8y';5wwܵې0I=)ZSwMׯ]AN '8ߚ~]V!{[9?>\16lKv@c#w=>Yv$)=w~tKpKʫHϯ g_hsx8jnMwׯ~YO8CcFI^&ރ$ђ3}jQZ|:mbFrH88^qfOO_-W19>?49{_ֆu5^滏ߛ$zwvbyϯbn*Z6c0TaH+~hMthm9$#?Eٳϳm#3ᣚ]it}D2vt#OW<<Q<jnw+c lϵ[N.oz>C #i{soh}BWvAӏ > EB^ aճ޶m-.:1T9wo ps׿ٿzh;]*i{/W9ϮAz)M4ֿ7RA#8sZJ #*'=;Ϲ]ȃvy:u?4sK~m+896=*gpOnm3(ߥOnQc պo98!rq8չZ#Ne$#p[#ޥ;;L8+7︅FqR?&)GEgƴg#'kӋIݯ0tƬy3߃'壒]o1KȕbPvܤ(E?ukqGy,pF~^[Y?&o{۪1FHN2JHp_C*9<4BV_Q6k#h,C`xI_Rߛ_8^Ӳw%Xr=҇/T_~&J]^TO[Gy P=[h۲1q޿֞vw9㇔^orUn$wXʦ?34"3Wɍ1vn^1|Z4g w]?שm9j9IRUs>ֲvsZ0un7r:dgפj$ۿ~D^Xq$~?moѶ1&~\FXs-wjrQNd4ן+m;wױ*9'?eͽ_I>29c?{PF-@ yN<4ovߩ0|P(=v>9?_ _FC'd(_)C۸)2Nwc<{O-~4't_|99?gDVk^[vyr|0Ec߅Sn_ט-1/j =03GN?5Jo?O~_Fi#UW_puX -{뚸ͷgԙ_o qSwiwLEV禗OSz_UqX?)'y>w<ҽ-jZZoSԅև&dZ~[ =y&WSZrwwu< ]#R2se+'kݿQ|g=Gވ]4\ZcyW3kvjD !ܿ6z_(p}_ƩIۯsUwDсd֩Mk^H--߈I$#9?%SYk*W{1j\W5MymA/5]sZ` I?Zg\Rm_}{ ^͇iJ;t{?&t<Թ8ߥuRjr= RzȐŦu?ywMA_?ORt?zfy'vOէLRwY\'w>)"5't}@)nO+mR.ݗu&I 8 q'L)i_I?\nmo'l9%_/19_CSSHQkP1d0uh~&n3_7 DZ._wĖ089\p:sN}{b 99~֮Rߩ՛_[xr+Q:TN?ctt}b BO?փZ2Ca~PO?tkX$>bg_Ѝcے1FI;sޭj{_BC\ƍ59GNަSkMQ#8݌uyKyG:m}̈&2x?&nӿݽlޞbb=H9Si_𿟓gQ;s4~vct9' |d9? )|vMO#v+{9R syW{_,K$:uMk;!t>UE]TVZX pNIϹ?^JV W}1Qk%yJ;ۯ5j_f[}o[g9?zN}ߨ8[Ko__A^0H=}ؕ&}h.gm]_,Zv׫ܠuPϧ4&̹r+.o2?#nG:s/b@`cB?ϱⓜ_{_;oAaÑדM$o62&A8x?hZ_5pX1Ԓx:r~B>{~d$qy3L!k"=𪌚{稧]-ua r~sۮϽhyʛv%]wnoԞܒnN{? *A$#fi mA.l{F}ߣTm2#3Py}>m{j1opIOSǽe)4FߍƄCA\|\߂Otd&^8߸_Q"[((zu7Q_~h ݯ렞^s9׷5wL"q -tU/=4T[Zȝ3?~ZTzbn {gw"dmIw<}cͯ74tI/D!]ap7{/εkӷӊvw~Ah8 .m*BBQ)s[FVoNF !ssmu]uBKK qzw.̝}?c)<|+RU '~-ݯo;??qt>zEV?l3(@'=:F}x9ֿsN?74YL֟5 #ʓm֣F/O+ 㞣~~ߕr[z;]`J[ go{F Gzw{gʗ_~ 1ǦN?UyCN`ҩ. ?n*c+=uʜckmu[Dhdׯ>jz{J./UaV0:\})[m_R[?NvO9'k ぷ$qg)z~&ҍ OV˺_fzGN=W=җ<{ Ry7>;u}5HIYyX_o^,<{ 4t[dNO)c=r4+`Kvɭ Pm^}yNFxPa9n =x>_]-q9<Nqן_j rrJ{7vjnvi|>փD-;=?Ͽ֓inީۭ僞=imYmWn8܏hRmu?v$Ǐ4+~?h=~NR֣o]]OCƫm*o¼ba~^r?Os- vO~{3?2~g8v) 7?i'sJNZ19po']ydj]ﶩ$$v#>-Rf8¸F0q~_i<xӊ\կn#8A޳1I70lFi<GKz_a`?!p߯I{"mwצFہ:g9Yu J붝^͛s7_/*FyrKvtSt2E#=zК{1Kܦl!F;0qW)E&^pnvk]v&%=3Z2*K]wߧcƨ/_O0e1aqQ߼eA=cBzd^=깒5T`]|ȉ OOzSSofL)]=xVAm&V, VM(OKjIlyʏM7TVby;t#3(M=#M|0 )Vne)Ӷ[er9]W:s?39qrF=TyϽK]6߮E*p]_GFN?jѻ+L%?ج7g9/k8u.Rjvw0 m]:s?iOW{n ߎOk;4.o^U?϶1;9{0 q?s@wiL #=v!֠T1qzWh%}=}֞iN1c+{.~c+spG'ןǚ5F7ӷ䌐K,H=r׊$\{k/6 /\W?┥}#bF"zur{pzu?խʭv,d9>=gc8S]#=qRݕ͠I^}HS88$%^7nm.rs}zסݽoQq{eHǹ?J rK͑۹Tcq㾵Nr}Jin6Fo*SE!۴GqFGŻȴwoMƈcPpnAκ/^<WQަRɓR_#V1 :\_.fJ./;|@39}swPz_Ԃob(80:zV[NU" {Z|K=z>JON_pE{źI)e{\79[춿m@Ss^~3o{$1 2m:^Zޝ:.` 8O~?g1^=:NSmm?èOny?~ED|C*Mݭ;JA%'8=-Zש9ߜ>gI4^}ᝤeQc$Eר]T:g3{}oҜ2o# `?Vgl`1>w?{/O֒iR/NȍϾH{ZFI^Tދ[[U\Nߞw8_^{QμMn8Ƿ89Q. s$y?4s˿V0t {O_)=vHN8c瘔Q+YE1`snZ4c%kߨ>v䷿_U2jI?dv^(6q}jN+"x B;zTn+iFjc.ܨFN,{}*^/7oY$86TԺT/^]v޸<#֒|C:|68#~DfWOi9i6S.`}7gϽO2Vk_<{c oΚzc$ qf{0pn ZS}Z{k6 =/ #$s z})6$8ŧ{cL8ϳww 5}Q#%2?ںgj9z~tPzp'syZɥ~ێ3a?ϧS)[摍+TF\ dI?JN?$O__J|F=~C|rӟLSr^~#|`rr:{کO#8Qw_}< n*Me{X{uGl;}G ۶~=z߯BݭJj*M~+H=朕1=NoQ#B͓Ҕj+0IϿ@[=} 7eNI=d" ?jPWbHarדyr_q {I'.kN;7a޹Ӗݓf]'%1̸%U~c#ɥ9^Դ\R[20ᱏ$uo_nuI_k  WnzSOIJK}zyy| #ni94w=~8Ğ3׽Yw XX60 ?d曆Nt}W^_X/_:%W*ZQ=Qߠ?U0i^ۣ9{|3M?bqFO8|3ROf:q徖̙߯#Hy9Iݤ3eKd5byA=_$q]|]m(~ ?V[0u[I֥.Ԥ+%v?fK`_G;y۲o^O~>_UKm_NC=MNKVߘyaONFs'Umr#/gA҃w*-VHd:r?}O/Rm][|ؓU-JNioi$q#cmNzz1}]ɷwN˻4k*mFoJ0sU\__Q*ߏ?Պܞq_})I5}k#uO!@dN ^_BUovZ|ǁ犷$t9j7rx*=Ϸt"| OZnk4e 5z#=G95-IgDc)P&s׿FJ[2#%Nr:}kNhoc;~?9 H"hQm__pAynInU$קP0X7\b}FL03^>yw_5m۸w=G<䌖=|>rFx3R}_F[RC }xߚ9ܵM=M6;?ڤj?]du c#eQMfhx4SWV$q2I_}jbe{^t?S% =O5=zowW8?x=}m٧q: O>E8EׯG7`GN09?~t:ֿrNo.̫`1ZwGJqo7N@U/#ME^BݟywTJ_]/WO+{RVvz?1哶޿֣L<۳iFV[?U}ksnSk5q'b.U}F?/#=zQE76߫6A=߮~9 ۷sWU~&|J߷<<CUJ |{=zsȪ[inDwp@ӟ?:9x^w5tZ~^j-&o\c9 s؁ʓVzgD' !QxҚ~'لFr)?>ߎyL`??9I_sm岖o8w;w`/#y=z~53votm˰9?z e-=O?M6I9'{zMgFKPxdq~USi7ticۮ7m?{ҢmY#57rM-~?zͶf'$o{qŔqG~(~AI?QP H]zvӽ19#~>d׫M~?`YNi[_3n>{O_SׯZ2Iyz[@Kgөw_KA%w:DroB^~ֿyU}?Q>p_A$[3'>;<|x'?^׮)BwOԐFrIcn\)BkתEA`5~a}BA'oLSHSIO#3O5[5+No1%@zrwmW'kZ?/Sn{nW{7N/_?d8#Uws:}uDplH3ͧ7P{oÌr<=SmۣʨonR@w>?mkM(Wuu}uFc<֜gm߉o[y19sj~_9SN<=BiE?F|b'srK͑ Vz'4dT~ ^uO#ϳr OoO=3d&wKC^?5.ȸQoS |1]fk8+|?֟=|l@n3}j+_ K#v}3_i!R.yOu#=5Zn/}lNIRO=?z}Wޏ4x?OڃQr&C2I뷨~=yNIZ1#qn[[M<%C99#0q'{{6RN12`Nz\T)5*^6.H\OvW9T9jk{{p8x?X3z۷bYI y۞=f W<ݎI?ơGJ׽<6yْ^~vcy\e/ԊeM#W##9JWʄ!Rbd@ϯ4(Vovvp>n??um;z4;zr2s~Mͭ[._qk;q %#+>u5 m.O r0Q}_0iV,8ns'}y[w$$Qk ID0*翩{iSWk|?PA9_=̎UIKuߨ `,?߽=p1=T m%J}<{_)+Kc&#'+{1%_v|~ۻvb2a~W'9.^V]#G =_ZMʂg};ts:Mto* +;jg#b[W,m#hu|/IKla(+{a.Ӝ})&jQK-~~֢}.8?7\?*ov8A_]o~`nls:M3of3m?>ߩ.> w?Κ8%ߟOp%mև6M!I=dFтpH#-T䕮 w}-߻AʸqXB6vzێwh}9's(pi~ȼI295nGx瑷hQ( c1z`(]}|ǰ {_g{m#nzWۖ/Uת6/oJ2wI׫3h4?N(s$WQ x>UUrvקoGm'$};{G|QZr _hI#5>܍ r nGϑ魿qY3z~Kv;_} ]1'җ<{ gz\Cӷ֩6lCgm}|$`[H9o⺿R%VSd|ݎA3JM76k-_~2?,9ݷ<g%}Oϭ M+_ש'>o>'Uyz?ϫs}4ITtDXR楶f<[q0s!(/{ѻ}Dz8+^RHŧ[F['{ǯZ]=>KVaW@8 ~|u(߯Q3=;=ݵcP}_x…^K`w4 ޟ] X+өyA:q[[=#$g=SM_G0ŀc={PK{_oY@`\W6ݘN߯cU8x=s 4qir[FdWV=iԏ#}m ^GRFpH﷾~4īݎy?CUsKu:r}?=rq =:קtYmǭ_;ϖ7M%9s/k, '^j[mݒ`)?t?6є鶯k>~=DU$}0O=[m6&Z&_[[>zN/.]yu4&XrH翹?EK8_}Gylc=[$u>{7dBNATΈIoyMOQ^9kQ^ַ !=Nm>Dr{;`mrzg)ԷMU~gp 8ϧu .Jarq_^Ji?qgu"' cdFw&mZR#\wv Ҍߩ8Tw#0yuQ1Y~O]u# m?OֽNx]~w}vI< R=z}x_[D̻_}| t88J\ÂpLo9?ɩ4r/V.Os@E;oc d z|E|;@Xp33i))'cr6LglݟMzwr1BG\>Sm2T{/v?{?5_J+LZ+ywz$]l9p2>o F9=u{5gkzu4x'__8`㏔r~\TOBck)NS6Kc|ьkV*M/ș>f+s s_Oo!< g3kzNJzȼcM5(+,A,xPeͫR_D T_?qB*m]>Fg9?Ҏyw_&Ӓ=p84y/q|ų6I%y/[@m?6x6zrdA)KEn~OG8:>ש"//7gIq9LM~~bNK nliߏ9ӾLaKdyN[N|3=rW}5;O񓏽y0?E m= q}tnڳҔ&o,A%q?s\;j7=:j}꿯~/Y+<@8>Rsrg ] [8@zow^ךJMy7-b}ڈWX`3$/=1Z)'>rI<.mvcVmÑb uy_?sgfk1bc{Tgi1cb$pCt?ϭ%{?ֶa` <1_=.6R"w~~_25E8co,PgE;_O~羲eHRZOy~'4Eۈks=(ǖ `=w}0&gATcv0~n[b֪/^~z~`眎4{vuY\gi&+NߏGa,{+~7Qm<<_2mw ԓ\|g54NM[{oP8;G^1`?aP#~um**C?ރE+zk@ 0T>Qnd7d~Oi2Fnq0?u{__96B6sQ}g9([_(]ێ6D9=$.V>|?T<c7liFm|tm?/THl/;FN1߲e&*Fӟ\Egy~wwnIGQߜwz$aO ׯM~3NsGY%?q}~4s˿Oa;x>_~iάo K FC~֨t-ü>l&_gdm0G|7&]?4][ @ GuDE_!W ?z_77[̝>GRL Gpx9}Dy~?"1z?_TI$wѥ4~{8e+whsnDk0 ^j2ߙ~'$:my?z|h?R)6Ez~# g=}/6N*֕ąڡ3})42e 4{ڇ$q?|Z'!ISѧ,c<pqg3}E}l#?6fr{УpP;qު~_.X Gyk94{IEAYDh|{?u|oBe]0__ef޷_팽O.H8؝"ߏ^N $mjwOD6_VIr1ӷ_oNJ_L0um=Ǹ9Ͼ(S|A3#= BկRb9\z?OzKR_D6N*_{~\:ߝ8Ϫ׿FΚ*eqMTs%&=*GNzzm~Lk>;KgAW]f2cvxI\ ?NToנo^y{-zoSe},iTwO]+C g#II7o^gOJӵoc rA{?֥ϵ_Ȅy_V\ >A{ ''/?Zw=3=9[{~sOBu)5v$#֫>kqqWQ}@clNy/3{1ϯUu'$2>V$d~Ikȗӡ'?_]O:(;{_1Upy?Ohs]5a?pA#_yw:稌{}wiDTr#2rwn:wTtx)vZ?P>՚rn__ \ 9f8yܫ{ۦK #71fkWIsZ|DoE,n_ϡ.SUN%҄zm #+^vG5Jrsi_%n;yi{O/Om;|SSdN1x.̔]pFI-.zV\6QRwmD1;zsC7ӿ9otq6O~=iNm]֍%O~/̧:~RJq}/18?N+?'swqdOQ.%Ƣzh=}8_ϯ!8s9ek\R b9=\%ɶ/xSsyu<ͧu*4t_4Ö9-F:>iFIn}M稥 O[]B5Mc~wToW}M^o1d''g8#5|}~?35No*g#g+$VNR}~z }ԞҤ7z jS ]'${?)v~G*|w!$ ?R'~9jA [~~C$In'+=}4~:[}yOii+h ^⯚;'N2O[?OĘH.y+O:\]?1XPs*e>V׿3ǾsХ_ 4z#ݻA<׍NI_Bow)8=z7&%5o9+Ws}~SzK{^=V0pHdzt)IvjLJ9>?^z\0i-@ۏj?2ۃ_ hAsO>-kR[E,A$>>oϊKl9)%a|HdK/o g~k܅)8$VѓKkm'=?>c<I<}sOy7qŸm<] ;yu[2 $I]952ؕV}kW8R \syRUM#gJ$SKkb@IO_rKbyM#G?ʗ2O{?w_[ ~Q_99u$S-B|[ؕc 3y>NoK4SWY$nG^GQ_mwPQW>?@9xcosVݕUoNÊl`?ZQ0)Kh;J}GoҨP6#ǂX)>d5O7tgd8sx jqƬy'*.VrQ䑌vtmݕÿϯq#ZF7МC@Џj87njCmN޷aَ8<zӔʊqV69oǯ?YMZM[zoQp\u}hN)Y~ 㼾?z! ]&ZXЃ=?N>bw:BsgO!M_Jig븬^ #Ǒ;UY=cDR69i]{X~>?{'..2k7}Fya8=?%&9ӯ^?R(rosk] 98<}>Dr$إCIl;zzs'_ܿ;y ӧh{:47^MGӑr|_M'ʷVgsLe3G:i[϶DA$>{V{3E'~.A:z^JMlԬt_Kّf?t{GrKvts+ݿ=H3`NO9GI8&#tǿ_oƣy~&~w߷q6ݲ~Bn_ϨC1'>=zI4dRVӭ4 #jԚsIJ]?db1<}1Vkӹ(U0zuInw]{/#c_I=Jگo-{rW.0>{"})]dߟWb4y^_ƑӒ_X U)s wt#$9#3v_7o5G';z~ mߏaB ޽=i<zR-ۺɽ͓zh`A 34ZH u/ywʝ;ihh@_t^1zBvw2 }zӞ=d+Kq y$__ 'Pt_-:c8%uǺw2(4S ;'W<{ Τ>wu~_ʳwylz-&&2Be~54{d'4[؋ˆN{)(w|nO$no*~dI`099[֯=3t7~rc׮ipjVk}D+w c\ۯç)&vN12qsgP[:R+OzFۡOfUcȒaI~N;_Λin]&mJF{OkMQ:҂$~|/IqA7m d P~Sǿna_]%F `NOU5&ےUOx9nxϭw~gDaiKQ1-jM^{J=w_9?tM^Z?_שTMt=l? wdAL-q_Z|#i_Ϸ?uw_jlZ[ނs8m>ifZ?lcS9#9ݯ)'̾w#s펼~Tܛ2]Ÿq-9?=i%wbeOvm? O3n*,}9m1<^7]oZ}V0ђpsndos8{O}žfgvO5U(|$?t{gW}H csq r _VLSkE{LQ䝹9ܛmzu{Wl:uJy_֒[2eEwE ʹ|IZˣ?%:,m1GcOZ'Bwۿ ;1?~R%K.k>] n{p=^N}mMG{|kdbpqz?!R'_oQ<*ܣJK;BoGFM-NPv?^#9b.:zﹾn}jRs[շfI0Ol҇$fQ\uyA'qod'_Oqwer98cCwJO3mw^x C%)jH?((9Iת׸1 #I];'Uoٿeq/k0I$lcRgm|5T$ph橻jΘ;Nr/(9)Q[ҕu(JprZR7]NrdE>pp$rxw?L#m}~k I88s9#;_ѝ=OL`wҮ3oĊ}?*0Xu9z49Eާ-߫BCw#{ui+[aI'ucv9=[ O8$מ{t[$l7AiwxN-G9ݵvPUdԖtD֞^֤{6~|3Rnt^,dw?MJgWc,Ns茹oUHcS_ɫS56w}ۓ<ך;_.[Z|]be?N5ToϿ׷^xWLT_&'o Ӹi-zk)]u'{R{MҶ<g#ǿST-D`u.7#jk.qC$o7? ;O9ןzd/yӯMրdpy_M6f0}Kc `$}1RپL(G_z]XIu-=[H+ui#~o;;ʕXX⣞=tSRKc,G+O^rF2cZ2ͻ' ū?_銨 2{q?PnLN~G1Dlq_Āg}ɤ溻g7+[_&Ol.opn;z'n'8ݞOLzKw"xg5t5F~RTF{w_g;E=5SSiͷm7ߩ!FN[}OwT॥^L_(;ON2[*y}]Q|$sh}u-BzKi9H8}iSnOGJ]b˸b|7^N3M[LXps t/vp{_9H*o_.͹}{r. #$jY>Tz{ŕG8Y{K=/g|($}~FnA>e3Ljz[w{ٌ{wc6̕7H qS.InW'y g ۢ~GI.kk~#G$n>ON9%6MKDA쓌wKמ䑯LZMO{Rz+q^ z?cx5jm=_Z' QW?W4'v2O(O8CZ-ee]c v4Vme9w_VM$PiSM$eUSUݷ3R"J-maxI,WҲvݯ2SÚiΟq܈P&"Ȫ >WX\&>N8zj];}6:3>܏C9[{yL!q?oһG$pviǓ*)%{K_˳vaÌuoNZ)_q:|[J:}+-ߚNܩ_6 nA y:>y~?,;rsbex>OWμQwk [I8''9~OI9,ar9#Os[zko g9?yEys-sMI=Ms-5T ~cQQ)4~V~u#`JIxߧ^[GJ˦;B9:g9{ߪV%\?>;T!$DD,2{9/קt-|9QwU4Gr?o_շwsEiU?7sPՍcNM}ȐF6y76U85gޭg܁ygZߙw9fo.TNx%KV;yc׻3Ow&Ğs棙6~Fw~}ȈvJʬ<M%1+F9>|rK͝TAk4Ǿx󏽑^}(oڕ(S צdcK]ߪ8>~Էտ%hy˽cy'߻h Gk'a1uzzK B/[X:tJ -$9𠺔wʯ7o2H=4w~J|H<?H=_Ҋaێ}~_=~?])%"KduRʢ0B_~51ʃ_U~&RJ߯B<9noD+P]u~|N::ʈ~gfg9JROIULo@y8Pm oR& qZ{O/5Z=#ۓGnwqISӯ"+k9_Z9oO/Os9$u_gooXrC1?S:N V_m^.?NҪo{:p^w5$,qMm߿ Y_j܆Ϩ< 猜?3V^Z}lQ8+? XS+ry';|?!ei/͊GB239 ݷpQBё981}uu9A\}_h/$\~?>iF 9,_=nq^\׏$. ?ɬٿ{~oױ A`u}ew$ gI?i*w[cvwSM=[JޅX[zJ|uw{4'Ycs)TA}}޽{ry9OJ;o/q ۩}juC殟d!݀Ay~~֤{5kIkCGBO jw ۗ8E:y{7I7n!tnOI}1`nÿEu2wF0Fvyx>Ɨ:['@M{Zdy6|_ m sZ/]/}Ww,E:::rNE8{=-/<0۩֣7OҋWƘ?皩;ts8[|O>yq׿lVqm沤{7}|Aby"E/_[4EʜGZVJ{k6DX9ZNio;_'v q{{t⋾77d䎃GC{Ձs8R4חGUȄ2krpGϯI'~uM޺Tip2^vio_ֽ5)[8^7|:JMl#jo Oҽ-8ݿ.v=_ZsGa(^,[?m!NS~_+=px:>?|:'F*7_mkD1W)[gJ/~w}~_{ݪ}꿯Q[tc ku^HqےjYO3Q'J dGt4?h/uװM\dg}iG{ݹ̩b;u?wݱ*yן7Tߢ89>N2NM%tF FN=9U472vwq(v@u:R߉m}>}obI9}ǯ岫}l1÷'_GȐEBr۽>_~5Z0t40XwprGy_*dӋ}:M=V =q?y&̋ rGCR~3GERvZB5g|f1b;Il㓎{5nKR~Ɲt`͚ͦ]M%߾Wr =M_cG8_~At5=w{sJEo>}~^`͜~99&4ؕcU'׌9w6t\K?! {X(? oԹAž_KF˳!O\oZ曳Mo3_]}F;kMbz}2G>v?=?R)wOTٓ(oBz=ϯLɹI_0/,>c9gր\~}ɞ5۴)9ݿjÚ]ur{b)Nr.G9#ei{~~}ty!#'wYk7i("T<{tv4g3Srۧ~!stcc=;NInͦKN[J`I98֪5Z?u|''/O=*HzV=>|aW+Gw7_!D=O~?8.ӟOm'1_ #5/v3ݞyJ6q_{r88V=Nyn}))^ߋ2)R9}_it/ƭ;|.z|c9=)6_QЍ+|@ >ԇ$]o2tuq<9SOk$rx J8c~W'ͽZǘ92MTdnD9 z'?>u|)'2 Tm6\m;k.U u䑐s=\VB(\M}sۚϿn0G 뚯j֍{L!$~-r׌|w? oHQǧ$; m@OL}9ToDwP렏S]ӛw离R"oӪ+y$է<*Z_0xw|?眦ݔn{/@XN q_Զk]zuc3/|J-_o;n̉ٓԜN5*]y3'_u}ʌW'bRnkB/,?ԃO]bݖ?5\W#r[N &ݎ^x*wWǭTfY9oV'N9?fɽ٤9`w~b4BAS,:B[2goko:DP>ӡPb{:AI9ԗ?=^> '_Ve()^񀤓ԁ^6j)P^5t=asDխŸL~b B~'.UR'?_μDler{۳[++]v8k~h~ۓ!>Ur?wOgpMw$HI+bhv6wCQ9'_$1I_Ϧ_qp Aw.RMyZDS+}JrFG{fv}3#_7?^Ejw&ܞG˞1qio/&1H;Z\=%fϚ)mn'ukU~$ԥvzwfdG~o)E?u S2E'$r1~~Чm$;39-׽fm8v{uFssɠ&կq@##'fQO~e{w9mۯ=Nr1֓in%dI' 8?֙[vR}:r>^=iKqeavʀ{pߏ?Ȫs{׿-['%{?_ti^]Ȃsy)9o}{oܹ <_Nk96M_wD˜s< 3]GG?w56*'pOL~sK5KKY>౎9vn>\sP}ZllؗfN Iܵ~~wpaF39ϙZ%.ͼuݫM /4uV=e~B$91G~~=1Nm+sFwo~E(ߓsjD=Su )?տDH 3??c $ssAץQV,d_ƃHSJzG߹!' jmSW7ۿqZrfy$ܝ '?NE^w# s*·{y﹜"cn=_˵(g)E;Imy\;ӊnIn6_WbFI=?Ld*[?#݃#>)}AӺy#zǨmLR]5Y+)L$3'*%6eNN㼰pè#xYRRk$UvP1?WT?4TGyXy'S~yڢS魈tk~Iϭ&_""v> i zriIIhbN*._1zz$Hۦ{i|6$vӤul y\FOci_=oz)#swsZ{ÐjH9~wrZkqB\y3MJfP7_}rH2r1wz ?{#_W. =ȕ#NN98IɽPm5!7r@()ipX8_> R涛y]=y6K[Hqר팅h{sY\"_;AuKd1EqCy_CmgG>+[r}IuiyNsϭYSo򷮣8Th&u_A7mie}u}֧s~rk}l`NW[&־}zuxp#}y#ZQ엣}:!R;x<_(˚lZjGKcqߕz2mym}~@n8j7}^cYEE{q {dF]D/o.{6H!A?7sxiR%TWԖMg)4FW?sԓ3y~!*q(B-?_‰T55+FZzCH=}s|/S)_gM'i75|>x?N}ze%=w,8a=9Znrcq?AyURi:?>z~6$Xe bssCվzeF6{$9{~)m as?6D+͡KOyk}ENy?O4ٸeyls {4;ht T9r!k{Z,yvבAjK:EW4m{C9}Wӹ<1 (#.ו=O帆;{/ٱFT|$3XJKn?wԜ~~g\=Ͱ(8M%=' jz6c5 D)dGNAe1TNʜ/Sr=5{[M_Ær5{Koդ7_]u$6qϥr:XdeӮ[j=z2~Om>zz1N1ҝٲy\s9Tn4n?s '>ԝFwo \q7w#19<Ϛך/dɫ?0?0kwwM֩TQ{JyKen"ǂTwdqqS~QVuw?קvnr?$|*lMߧMlJ8 >o^N-n}Tֿ?+Oy_2eO~oMBsQ_~U8/Fq|GFGN_:wt1VH=>G>W;]co_ ^~4{G_:ina=6>kt۷*`럗Ϟ]iӅw$t :?>wN믭EqNfH?Γ/_6B2Myk}!O^yǿG>:T)e-8א7u=03OnQμ͝8mq6=H?֔St7~dfnJF>Qߏ'pC[xުƢ߹t߸lۖ\gzk))/8y|82?Q g$O$R1Fq[⯥W0 vފu_j/OuǐA~sEÑ Z^tHnIl g\#{C|g(97j0H9G=O?ΚoGA߭gd٫s5 ^ԗ<2IGRt'z30?t~TCllb?/| w{?Isߧߩ܂N޸j'1=w%=y|cy7_ Q_uaT=H 4=.4[}Hg][۽ӠZ캂Ytje.ki`~qDFx Nr:nK[5nƼeͷd h>f$?FRz~W a~x?^;[|wn9I?/U.m1ԗ{9nyw'g/QVkH5׭1E~m%Xro^OTW}=z~c<nW2}~`&g1zp?Ne}ԣ_k.?2O,3߯=GE(-^ƈSp8UZ4ɭ5;#>ЧwkN{>*=iN]~3 dܣϿ(RI-dԃ<H\Ij?7=ǟB~^bnjcZ<}#?ojZ\v}Ƽj@ 23UsK#(U{9`?/웶Qm}|n#iK_]E #'\)s RKg-uInC&޻] wۡVwk$΢kucΖߥOq#~8 O}.'~^5{c (>_mټb^ߎר _V{|MF՚zA?}| ݁=KͳT{_)Jq)h6$2M## 7PvTOʛzfߗ0A=G_lFV󹯳[]6c!H۟p?jz{ii'~_%{>NWIwKy%Xp3O_oJZ'r# gx:i=xʃ ?7LUpi^r |oUr߯֫yش/- <는>K߈l]9c>w{ 6XqFFI)_M{mѽ?j/g+Gע/ szэ)Z֌О3ӟN!J<_+s_9^IlENy=zTm/s9Rm=Ϲxw׸ut0wQ|^zqtu{6{q sN)sǿmw29"%K0?y#+i8'i\k>=O&4NM;o܉p==*.>aU->VߥpI'S^~`w{ü ,}ϯD!IGO_Pe\/AyoWR*Xcr޽Z3FxOS:{ǿT]Zul8yatQ.}cr1?ҳw K{r;y9=jr]o\K{j * 8bz}yK 0no5p]̉Q`pğG<{f)Mm۴spÖ I3D#ل=NO<}"y}8A ~ Lg4Ro[WFqnÝSKDooU LcG~Kv:pPwUL6\lpq׿RN];W.^}vApHԑM7mSN_n{Ilv?rK{['Zﶿʬ9|r*3dsE&ݷf[tɷ,Hg'vO:]y|dm7 0Gw5\VS3Ͽ4-T\`翯=T3(sE[oM{FFV?}?ݓk_qroȕPldqYsK/_dg'%I~n}PZlI2F_Թ7PiYd!#>|ߟ]83Y/|ȶv  gE'kns /)<~F*WW'!t[0qk~f=O#s}ٳ 9'k>_T~o3ihaBA>61OoO8?X<ҿ.~WK̹G?㟯W;ORpֺluČ⸤]IVou ٸP/_RFqpsթG?scԶۻf>Xw7|ZFN0.s 9y_ט8vz_ ~N?/iR0UP0Il߽|]oz #$\ѿk.굾Tgi#}jl~̩˿?A^99Ђiλ3IE._oȉSrZ?vvnROgU{N<eҩk߷[u@{?MjT&mNR^}Luk4xSzmvԩ&\m)]2}BInh>k|w!)  ™^]YAy$u/: ۛ]߰~lΜzzש)oҒ_N5O"2( (b%1ȼpIfm9c}WCn=I쿗VK)]ؗ, q3^޿fwE4H<5Qs9K5l0$?.8S__& +VO?+U"0GC *&ɢ܋c N)r[o?b)=׿M1H njd~N z+$uv{ƦNtbz-"'ڭ0OhğN6koӰ )QM;(nl3O#zksjT$^o To/S6b;s$m_$m*rK_=,#q<Ӻ{;N/m3e9m89Jqum_ 2so -]͘9nG^;Ф̨Ek}-׿_/m+2E?( ЎBs{"TO/H9pGYN~>8ݑ<Isu?Gsqz|L_(0#lqtkC 'nQF8<r4/mew?ar#N! lu#?ҳM}~,FI8*6#kNo_ezqv>Ԣ~5^y)i?kfՏ(CchS8?⧚]_R_?ۆ?iZ hA1=>מjfSZ߿`~:?z]_N^_~ ln{is˿_|ө?RwL {TCɡ6̥JQW˭טI҂w%1:#[|tʓcA*ϷGz>XPTH9~}O<ӓFF`m#g?ZƢ_>3;mrD?6H\>< io}}; Ƀ ݸ{_UW_eΖߧdH˵AML]u*NQ|Ӹxc sZ߿(T涛$rz~쵿T)-vq2qi3 /oH9䟻_78̪pRV`0NIZy~?-+sEt鸻GԔDdӟK]\ _[{syI'33~# |I |/i|.{^ u?֗_: o~_Р z|ɽ7[m +NR{M0/O_g*=4՚~vݨm9 wcu|zZU<xœ]'w 뚣%KGnԏ<99'J[koC~_?4߸J("bӕoF ~ J>]  &$1o!8\gVMk|MwܿQJmrw9iϽJ3WL%mA HZ.NzBjRO+ih#SΤzPn}uEʝA__Ϸ[yvd=?=r"rrwrFq*JU\ᦷh@w}G96ﯮu[CC[X/TocGSzJ.p]Å8,zzN u_>e붫#01>zC Ž-훀#Q+s-wA|*wvF7{1td=36D΍ݯ1X]dp?~:iG[7{a l_ւguw`cF?'$`^ϯ$䓜g]*~6˼T]ޯ,{I={sSJ~9ҋI.Oԓ2@8;gT}4kщg<և;o'yz/[2qkw$o7QSi3.0yS?sREȯ r3hsK0ދtfxGLḩI'o=o9\q?zmك׃Z\3:v{( I?SrK&JOe'89yw I ~_Z͵hkw_r c?ޔ|iNq[p^ҡ%{:J 믮cyCsA|qITfv1S:d^_Fj9NC{VܛVVҤ.Cgwok75}uዌT޶E~ntumLeU{_>]B㑜⹡M{ߡJޛZqѾoӯR}_+ױ"Eu>[ӧ$lg!ӃM8ղ=/T~_UFw{cw_n?ȸм[ZBX `@bAG?6҉Սnֽxj2sI'Ku}Qᱼ_sRmǔ!eIy.t2W ~O۸ tyqiQӕUGkn}Ŧ4iWW-SZΗ vܷ~Um}"r'7Kon~g7NH#eSЬ6S̪-$#7ֹdzmU=u9?kUSVkn:siF]?}-淪 jTn?'Mͷ^\/##n[=92&ލ|zǯW_멯#.  /wV%oyys{Rqѯsd! ds{)sݭ[yÄʶz~7}_Q9<U)++5-i?ױ}Q%M|_ Z QF{~^9~$n"9 r}>)u/")I>W`n>ռI5uG(6)I錓?wM]~ Ai}﻾=: #{w֍^ڵOߏϸ݅6"\ q?fo4d)#izj.kpW{n `yR8犙8/-a.d~} 9l<JRm~ksJk . v]~)G_ Oߕ>u|tK,GbxsҎuTb_Aο}&X oT;pZ:uٿU_U>^zso[{7)WZzirSU<|_r_Koܓp-ߝG3Z4a y )}vTog$#r 3q}O@19uٓ8mտWpI?O;Au'$^m,psۯ9uѦq7?Jn}tF?Q6Ã@ҥɲ-UW$uJm='үy~'+,Y,2>PLK5_9I^KVFpNs??iZnҨG]ǎ:MI7LY g8J}5tۆ{!9#ᔠI^kD>T_?ppsrzjTz?/ĥNbx:??_޴snֺ&" dJ[eQ8T5q:v@ҴS]tfOUzx=\r4sǿeyDpTv9fq 9_Zi{FI_=#z+QV5}~,SkA'>ש*-$ٗҲ]^b]B9pmߒ6K܄W6x>|0ᣍy =2>?: }~:v[IMSk_˹˧kUrAÞ JIߥmYnDxב2O|չ7N)4ٻH1 %+z#֌`mۅ:*Q~߶Ba 'N{Gs Sߙ;Ar? ߏiR#K>O$F9?nTw_y8]O?F9ӟ~ZjR#9^0Q{tw1mlI'hem~~H~26T]ѤwuSa~a=i6ۻ+ǒ[kB 3y~yt&Ӻ0q<9:T烈smFnWhmg}o IAjn2%N*O[ #:H9ZNuOH ?ްrosZ+[ׯV7r$j_ޚ_M*)tym{ԌĠt~)65#a9+Ne} ~]>5,*$dsK}) %©qu\hv«|gӮ¬}_8l jK;*0i;%F#WY`W+x<4JJ}Goװ03O[:,M$?b!%.O W3{srtѿO!Z-Ā?UG:O}~T{wKՌ0>|g4>[eS#{\6^ߺ4{{v0sV<}'{^VE䃎x?޴Mt`gpX8y#)7P'{?{\)`wyltFG9'x;~l_\{Em>3۶Oߨ/n}P6{Z2Xu^OB[5r=s Nx[E;-L/Ld<'O M*ň$`7zMM6!Kg&n0Ƿ?II?&a4w?6 7*0! 'sA^,@=Rm-ټdܕwJ#L~?ةڿ2/i'q=Z'usy_`b : {9INZޤFWo^c~~ KA1b;dñWSO?=-]''۽QA9rkxu/EO#hH$9o'Ϲo d'T_z'-om/ִSO3qtz|#8$gp$u'Q~fjMl1 ~3RVI[\_ϳDzTgXckmhwc#@O󫔓VRY#9 jo+r:i}/?119;vWos9e{j7`m/s5.630:T?.Tt~m ` q}KvTbL0n`g{_VQǭiؐŀ+>'{빳^>YP{[qI"pwQ?Uu}m]XDrNG @C[!C]]K垾g__K=h7aO#9@__|Q&9dǯ}iEwFe߯q3OngJQ2GAf^U$U)~:o_̍;i\G[MzO݁ycs NG:hIA];}bԩ{ք5;_0:rFO~row3@D]uK,ޤk3olJڿKBrgi6ߟRv}=H SX76G~k ׿FJ_]²Q?ݽHJeG91nr̹ $?5.qיIJ^޿F* h\svM4f+uI3~8{~4|&)i#7Ms;~?Q#h02x8C_֮2mf.zl 2FOluQ6Q Ǐ.iwx5\?kIA)(ÌSG\{4(߿UHu;}WP/Oncb ?8j6FOᲿ[K N9>&2~!A]۳t?/if,_r?(<;^=zWC>mmmW_P$sBkx^~O[zcV#Kt{<>W>ݭ Sq})_q5}69Srq߿JMZo;E= {SW:GH=ۿUZtؘו9=}ԓw69RRv0*=Aoujik|UOߩ*!I_9&ӷky^ͻ?I}?)Z{B$k2zF8ϽoÖKk]u{ҌoT?ݜU<VKw$EVQҧ/7k3XqpH˱e%?T8u$* UvX8*=(r/r(C uߥH Ke-B3?_sO]}؞H,%o>yw z01Lg<8nF_vOkfi*I ٌ;?.í iKWg[~V` l:M=Sob~_~!H~I;!E7.O{@b߂M9+CUgd-gT?K8An<˴q߭Le{kRk{`kYTw޻ثyK8q딓_^Gy?7e?_^ʟ7Ul8z^wylj'?{{ܞNio]LjOR3DZk.y_MbUr1Y~v_s֫se,$ sG<{fͥT8''9u}\kG1y9.箬nQy$rG=ڔ玏_#F2XᾘDe{kiuo/pٻ<ϡ[:?n(pH>b.Og1q=OQ5Qz\Ku_VJH#r:u6ޭ 5}]ߑqGlIj]KFcl^OIa(WO$Y}r=o*/0^3Ǿ>n8·#|^fp1>hWkg}:}|ׯ_[;tTӷǸ-gZesIo;| Fy@?:y܊W7^ϯ<$1שU%tՓVՍ Aޗ;}~~'7zOOO]lM2EN|;Z9GDiua8zW:9O2ֿyQOaz@_ϩpϯ$|u繢IGwy\y{ p 럯O~?c:.on;aNFO?Q4Xe~-~_12Xv+7$ޭ]$<~`{~iK}ɜ/_p8e#iW.kd}[^׫d0qn?77[*Qmߠ`}IaOzMݗweN׿${9T=5VZ+yX=Xv$s˿N.Nߣ}w;p~_):n7kp8wF^V4e)@%%~oE$g>_qμΘV7 :g1{YDyh +t1t_e$a{`+zw5\e*H޺c<6 *% U55߲MXIwv#Wɭ%]wM6%%*r49ڍB zzc}ʚ3o]:SfRI!q2}§^ߏN(nvFl~5~ә?{drt78&ӑ=r֎䎤5d~%\]1bC`գio1jxrK'F ֪k4-{>QǐĎI7ƛ|a_v?@!smTz1<LTO/t\d]>}x>|/4chI~!G!8~s]_}I q{]=~&1$QOOPZui}ڧ(I䜜|O/ROhEr܂r1tD_3ha+=/ 1ZJmo_ԗMA?]/)_w}|ЦR&cǰ7n$<sߗPlx^~{O/QNݿq("R}g~v|6i_ ?皞uٙwY1rJ9f֤&uǨN}ZPp{?0Č󞿆_W7v4A>~˿F??4E^5m^c)Rkoկspje61;E>ě ,qCiAғ}6>RAsz5G~Eq"n i2gda r0y?׵[)^~jG%a[>A_ZQ_߆oOEݒx߫t/z7ۀUfzʵ8H\QcO֔ۧ᝵^l1X9zWO[ёRO_MVF",p=yV旟Oy$0 WO~_տw/ȇE?ק%PcmZzuSr]A ~Νu+'nr8g$B7xBׯ~sǿe&UUois˹cʶj݌spFqOZ)}9yz[$?9^^*9:!GK_o_@Sϭt)Z0=aT9^{!11pU>k(+z}>.I‘u~fݵgR둯GѺԪեh6']=?CRߙ<{w8:H'NޟZ'}QM} oQjV0tMWA6dq@8˷1K8Qy YsԷ:^O榵hGO^^ߥ9KsӋwS 9$7twE M?̷Fr {}E*{z&7~?$zǨ1ps}~4ujG{{K}70^}/O!M=>z"yZiw9}Sw&,Q9:*%m_̗^}~34ԊOՊaF\s)Iu{*m^+/ HsOqǏZ%5nQҡޮݬ|wn6_´\As[6ۻ2n*I;I>ne:jv` 'u=:)r^_O#;O@:NoƟA_%CFFHu?Tʫ[G ]%Ͽ3 OSGr꟭Vr:gQ19zFRWZ_(}ky~? aGvoף֬<GL:=׹т1~@׭hJRI#N}KvcnI;omn^O> u/*} ?_Z/}o1QV_m>s_/۽޾b%}r:QOfs$<t&m4_ HUsBdv5!X9?zjgi\C! 1sgMD;׷ztԕ0(=H^zsKT_wQ^%e;/h(FI_cדDek"T_?ɍh=\֊iz7דfr{{Ô8ݭwbQ'x`y^GCV8*8ǽRu騧m 1\ړ(9!rzt\Jw6j58Lzm%hVFb2_|N\#ڿ(9N?͙Fn{_!G TE766dAx$鍨-Qc$?籤[37Ic?}ǟƧ7͔owˌ>RNiyS^Y,N}jn?穌FOm^m϶j9f+߿Hɫ,LQv[ly=%;;/̨]VHy~N[Lw5,gySTT:8U[3g<CU);)PI$r0;I72br!>Ku*5&~sevJ?ΜRz4M$y _?Ffs;􎽴~Ʀ_:XysvE*@6.&fH[fx<ZZt7OݴC/qM:iIΫ:\y΃V}_jzlwfl|zE%4{eg"n<}%ƜV|ߑ_e%{Ӟ˖󾫮{)FI^!In,qԟ'4);=4M5=9 ?woUﭿƤk, &]{ȩA+I$Fa iv\*BoE{1uq~;u+ݿ?0 JEN{/@Bs~nUjk:1{~<F5d^O}OˀzOSoq߯=߽OMZߨǏh'<4)K_^?0 }}qi'n:m$˨wu8'y=hrKvjޏ߯|*2;g/Og5[ ƈCA/_:r{{Cro瓩z| v=H*_Ͽ9b,N 8矯9[H^{ `1}~y{3bv]?ǯ4wDvCXyy]P}}>?_9Pע~[0@ݐ3^߭_Z-e-c?_J;ꆥus9: ޥ'\OOOF^~Qxb1{?t]>G9zdEy ֏h|U7}]} ՝ik̛n=o?LW9$ܮ9dS}uq׆ӧPI sJ-ȼ$r;yE?*Rh;PGPÿ?ךN#J/VׯF\1RwWz|$m7l.yByLlݺ۷ sS_rNxסOM'gv?>y!ښ 蝾_|e #iߙ2oϨ* e،NNß?}:~S攝^H<9ǫO)I5 qU;I p98¤l~[|1zu8?}NC>iGM!e{msz2rPw ߙ'Q#~9j~uSXA6?VWIg~ۤoo`$a֦4"FdL_Q59 #և>4zEܦ8FW1qO>J1VQBm<#N}?~i8zO+($8?jT$Z~ #:O_NIۥxhK$Uo"5j$I@I|wWz] Wߏ$\go _j]jŘDFyOlj`>_7b ~/5Avf~/Q±;Fzݿ< Tn)=5$ m<<] ]8I{1v:W4:7\^L4ܗoċ|!ۂ#wXש^I?)szzM4֢ٙo}M62}_׽2a+{ȑYr'>~_mzwK96p@p߯(*M[ZzӓA_B8ۜ7ҺE9c%A yEuw>H20{r?>~rw׫l@199U<9RNZ&w Oާ֗<{ D]ﲶĞ^0U>]SIA_]7`COL1~4{O/^1vKP 2|w>{Ц/ԧzj{WWvT9Gͻ_ִnڳ ZLQ;~oR{]oo:k0O'l^gB]?[qA "4d7ky7&<{fi[Mv>,I8 KvfA0?׸}tc~_TO8ZJJk^:-ŸE0FOֶu9UN)QmOʠm9g>nIoX_OmA~4̈́gӦĈ IhrorIdup(O#\:5wϯ)~O89ORkcNYIo1 `dǿU]Sww}#2$⣞]i7v0qݒr^'&fwOup[j8Dۍ{[ |{i4⪟ zg]eu}'h/.$sǿʍ){wݵc'v =:Ʃk{~f¯?`' `r>տWJrnLq``uziԵCgo*sΡ-p}_I9թ5JXuZ6% 0x9O_̿C/[^zzU9Ui%M5y]wn xgRӼ%kZt|SXq5흯#E|w?O߈W(r%kߪ?h %̭45ߟ]?/[IgKKqcrs^KtrIކdk'~X }O~ >߱{ZUw|7ޭ;Un\NJ=jn拖v~۷Q, Ƿjydic-O_q ;s穭cQ/};Υ9SZ/}={bnA' 7w[2oQ=Wfp@Ww~]Qɭ_ɖ2v O皇$a̯/~`@^r'JVkJHRutsǿθCODd'3]ݖ̋i9m~ׯq8WWw$ z㎽>_:JRKzc>yd}WfW'+jFF3qm̯v2Zy=Kk̹P&?A}~ouBIZǬATq\~|OJ8?z[?LS)v]zɽ0Ԍns~J}k('{#N]?!0p98M[yӒ~]mrTtg0;~Cg9v~GaI<ӯk34 [ OQ>h.R#(pF1׷=t[rDžl{}}zPoe~AOOy_ۧ3at^uD2Qz=}:{{Ñ:1Ց{cZno 5i1#O^?y8]~@r29?R}b-\3_2qLmG>y4z_<1ov9MŽ/?1" zrzRs;_}I xŽW?7:ߦ^0ycp?o֙3Z_WnGރ(Z2z=:IgS{ȚJ.[ϪƘݴy\u<$~JZ|,0$ coyVvzrq=S9wjͨ|$t.i^זJ< ` ׵'&fn<}ߟQss!VZ"~PRx{|ۿ?iR<>W~_L{B'}iKh~OW\x'p߯Ӛ9(ۮ :}y֎yw=~b,Y'߿ sr!ON ='ssY*uk&_K>ֿh=8:_JI~k23 JIh˧o`I_׭#;+?LjBM6ר/+*\ܸ+m63 0#~|R~5Pp{}70{8 -'=s?5 Ml:}nw؇`RXCc痑כL[wkNzǞ׵.yw75nW}SzoBzڠ 6@qد N4aPWw^z|^KKrd{mz yǯOڮ}~$;J?)H{uZxڊ}=^&cugj|˺T%~i/[kcNF?^{^[ji??aGVUu^%Rrnv[?GlU `99ϯ͟Χ]͕E`o?yI"MS@?Z-{E'ӯרXxsq9*o->ҲZz4sW5+-w2u.nhz}wߞzR=Jq[k?PƜo;O!-nqiY[ 0=?_J9*$#y~? I_em_/ƴ9_,U7"#9?zÝ3^Q]Íh=Ky~?ͷ}?0aCm'ߜoǭ5S]Sob_+it|kErɍ1m>{m~d}~g98Ɵk~T\_6(*0# ?SٿTunzI$#dNiZ6߯T=8(5m. Iz3?JvoJ泿РG<i/y=x's4:M=SWFdrE8ϭ%.k"+-^漿hL7nFs9aȻC ${#U.~mvN=B֜ʚzl>or8^{gѻ@A@kG/Q!`Ĝ҅M}zwߩuU[1|3ׯksҮR涛Ij 'ReZ|ӮEx|'jӝ=___QpInLϯ)3Oy5 7%zݞ7֟ׯOޖzQww=r^|lPzvO_:g\֐gvo3 ӕ[#<B3:Fj/=I3G9$}/o=ʧGx$1?7_N77J0~i릠;ӚM*"rZk^c%B@;ݨNZw}=KP\~?x?_4tRQsVr$}(Mtłï<tOfglftl;Rmlʨw^6;A{7_{۽# ~ $zG@9u"$/k9YoOQS7¾'$Togdi*N3U"~_>p㎼*fa5nPO Ԥ۽mf)0' @NsoK>}!g˾4x/SWem_F"|u8~K{'sFM__.7"8? jvцYnb]>Ov-;c#Ӎ0TmZ{7{jko?Vo߃ӕGmuzGnyxn-ᧁM?}¦^' >8VY&tnTw3M_ +:ׯ [=/"Zwt[}J܅t]7BԵimY^**By9:5rѫwwb% Es7Y~WE /^:ЬѼmJIJ"VnWT}wןPߌxz;,o#ϙݿϹ9F$#yO&]wUQmi)4[~c9h0vN]6wWo^H6Cl}m\F? bjƟvk~祃bs `&m^_}Ϥ@N|O}iz6C40Xάt,dr:ۼs?!Iᰲ:|ѵX/~Vi;_W~¼AB5q!:jvZ۶_#ʾ$7zՑ?q+ɧ*eFfb-̧}? q3 zۤw^N<;װ4I?{[ycA9;_ƾo[{h~hE6[=uW/,֑mnsJ\|ۇ~z4(F969_\թ7b.TN?7_މO~ =Wp9>Q5Nww>lrq}e[k{1 G'/לz(!=lPy6 ?_P8Snӿ7qL{Oim/_E*+tOyL?ǵI7׮8${_?T^oo4W96&Z+?̍#$W%Uݭ}ZW>"] $zqךGD,arFG'I'_s3;1HFg#\rMo^NQ9oA{Xs[=;.Eic$/_O WDd}~"珽}JNLEz-`CwrI8^Q}~t{k-w9g-&D`³ewFK{]Fc#h?JqooMƴg0̣u}K^"h'c޿hw9'ӯ):_q~~10̹o9~z@ջmz{`t3Ӿ+ϺQ61$}NG_We.f#'~{U)YqJݼis{TW]BW]^@APW$O"[oqZ e4T~5oϮ8֏?)]ϖ%zp?\S9mnM/?>sav~C o~8uq[)Fk_$w?:/::)SnRO+=yaYJo S.kپJB/Z9k~=Mpo}CV7nO x#'$>Zu /uM;Wnyo^Dd֯NqE]%H?߶k1N?Ϫ#x#s[7W zTdg=9c㚡B3}ue1:g^i-?󓟯49%r[_"3=:>4.E}nb>]{tI^םΊp۾#EFߗ9?֟բdu"ld㍽ UoGn*}-"Fy$M}OWwO-q>MM?[ v~.b9?_wrt҂6/|ܰp G&ߦߨH$ן|{G%J iW|ȼ^9?[v;n~_{y~&̕xrOuUן̐88A]ZÝ~?tT+ϯ+dcpx685}uw? G -M75Ky~?ݯ$~U*wkj)&]ߠF [#8Pօ$_$w 8^S)KkY`+y]Bh=qNKF}~d4~~xp}s_qzn"P`i.-#G$P$~,o|Wx~$XH.&M`{[{<6Vo`s#75UR qWҕh S{}W[wzOҿEUdkjSRRR4^uy`#NR+]릯D @'g1$pFN?}sQ"B@`==$5(4c=%J +4JH>mFTm/*GN>nJO/ߗ?@sWҴr9Ko"l'#`ޥO]Uʤ9ɯpS~)kwK/o^#ی ö ^?/z8chQ[_ק̉rJx?jRN88_PkN KUnJ"QSׯ9ߎ4H;3_\++ƪm$yzwW?NF7?aA#{g #{kԉJ-8)6'8wc#?k)Of lUTsr;~?Z=gRuyv߿E}WY1QV_< NO\g.Uk?GMvk7 21W[uwөׯ߫w^ksbM6w;WZH_FUFVq՞ Oy[h$q>vǷ_/sUÕկCXSF)o};<]cmϪj"{ i2 n.Qu+KY>;uУ=!o?MRs>x t{Mf8x^c]Iv $WE]A.;..wkKHhKymty}^_Y 1dݻ]z9.)Un'og]xOg?O}wO;n: [[uH8]_w! \*'8.yyUue*1VZ}m4[[Y쮠O*hV*־RΔ~_q.' 9F7JtԪ2Hd?y]_߿_t q߯J4RoI;rA}J9ߗfsȯONgϯ9luA7wc nb6;ۯ;{~Z29?G:n*_qY{I1T_~ +z{cNHg?<թȾE݈8b~TʥwdkXHu$wZS&|l׀{gZ)>9ors϶}w|(Rj+w^{Ìu~_ƓmJOh{Fs{TԚVJ}}A;g7B%ßyǸU< =H~zc#^ՙV_q0X=\KMoHkF[8\? M&]ׯ޷`dO{S}᭿_:`Due9/Bq^}ji+.TGOLe/NT=O5D8$_qLg+3~΅4tz] _?iUֿ`FrA7}Hws=ߗg4ߵh <YzuLy9~Zq2UvK 6X:?{K쿭$Vqs߷S}Rk^Tc3xw~I%w=x@s?%Zob2A;Ϧnx1sq9+}Jrw0FG}?Z7oPٻ﮽{ "gӯ9ޯy~"p_ Bul9&;#ۿ_0ez}hno5"gyzw+9$g=:hշ>pO_{Wז5+n|wz߉0u~d~KdIc:sZioԙR[;96v!ߏn6YzW >.1Q|#=痑qֻrK{e[/V9÷ߠ9{mݞ>SִSIhLUߗ_ GO~I :i߿b '#ߩ)]A#8˿je{WۜO:Z)F.WѧХ??&֫sHTקqV#9A^Zi}^*GqUߒ~[ XPH'I49>!9qqRSQ)%Έ.de[}U!֡%Zy~z+Bq>|:\AA=wۯAz7=xo?Xզ[ Ͽ皙Jw7]߿N1z-;"5)hypq!O>t_v擒[oh#85וCï"qr:gg։OgW;Xa9n?w>/# PN|@3z~7}&QY<{_\}ȊRnwG@Kݿ/=dROl?<}~?3zJ)޻>Qw0z?Lm+ix!){NWO7ޫN ;FcrZEkkuژԋK~}1Aު3I3Aw_So\W^W(  J%>F[[ǹNO9ԩ5 !.y?w0qm_/?ש Gqny?~4&Nj}rS8;gC[ /y^?y.ϩXI!0~}ޓOor?[~71<6oJIhJvu'HҺ'A{!V3骶T-p1(C6g*W} o m^?Qd(ޣ=.Dlzt?D('mlR~h#j?֛_NEkqǟ{"}{'IIn rFz_kdcU6rT+}ߙI|K}Lj rsO^#Oec *=z)%I/Z"W#Wλg=J.KO==Q, zs]2)P}N_V8Qq?=pj=tΆZy,R9$BWf>p<9xED=ME4oׯCydw=G_{r;R9oˢ]/ gׯM{_yn~[z~J֭M7mu0Szۺu@ A}>(o%Z/PlG}(U^|Ec?5nNڷo2Te " 3j#;ҍFQA'i3*rE.>`W81E;J*kG^s6!Sk_??Ǯ{v];pI7q}I~NR{~z8)wCR]>󂼏i?. ux}_>EŽߙ*95_ mߵA##vz=ER>zߨU* Hn]{8{vCV ?7<}{SܿqQMҠ:{SVJ\Lgz9<曨'S*q??=җB׷H;$.Fv^Z$Wz^8YJ\$򿫾x둟_𪌷ߨKݏNlQ8=Oo[W~y%nw…6y_oF׶{`?jӺOܕMI_$du9;ݗJ ';w! 9kNh9IE[DUے1HsvBa/ys/b98Tq9=B:*%hޫq3޽?tU;2Ae^>as~]ttԄl{}Y'9,qW5˥}c > n '<}i)k3ft."kz翭.hqk2:ת{p'HGJ *M~oq-d\O!f GJMCvShД5n}turTAuhFMkQΜ%3먛FHQds۾o‘dZ|ƴ{p0O-ߠ=iֿJ鷦:䙣%iePCfi$fD_w)9J̺td{V|_ӽq|@΅yYk{cQ;Zg o;}ɸwEi#vW&w9a2ʵWc28}bRiRV_ jG_,~se.݁h}vG4WưeΩ|^xڒtv?r,=(a(Ei׍<++_&̗b-Ԣ`|ΫD6\UYE[]|;K8CNh;%7/Pς'&kҧՈ<=` LǹFϒ<zw^UF%ת}Lox^ t [xR"5ǟ}gۥ{q#~GrԢe~m4&'k̡:kI)쯷{ךXE<+wVܫ$2~5,hr+L)PbjZ_+-v^~M<#kXp>*z$zU,U).kRj=vxx7h. [lsf7*F챾~[ٌcRJ{&?_?L>Ygc[Jo}{Zh  E†QMׂEʑaMOֿ'Z{Y~>4KZh5mK²4бS+6#'̒OzWcexU sZ5\=KrTV.{V]n4h# VebU}k#)ifjuޔc;z]?x!ernkFeHֽS9d{ Ff8TZEmvH΄O_s˿97Ƥ qOhR]MN);'=z9]u9'#q'x(?}{ x=y?ZFJWh g9tkȜׯyM?_|6ۻvb>u"M7 e<'қM=M#ȗyvЈuaz?.SI%A掝|hy;?w'.yyRmח1a$sCh)KM>ӿ[XpybpN:g:ꞟJKMC89x'>5סԹ_0F7h]?G-'nqn?΢M, ={t`V.[=wyoQ%A=Af޳iqԾvl-N[׶j~?+__lI9>~F=K00sO]վ_F$<u!}D\R{ӟP^mzߡ(LǺɻ&;5M1f8Zf5._ւ gK[tҊ߯WR!Iʁ?ֶof!cg??30u/?!烎HsߵJg밝;?H`cGNq֎nK_C uޤc9?]9jAjX տ4o"]~Bg zz~>_!;y?ރNe/wVx?8tn޿(0׌zsK B=>G ǧ֡I4cV<] 򀽎q-~jkb/m 5O^}x8 P{z P[T GOsYG}~%_ ][7~o>u8ouFB@qi%WrJzwNkotuoF!O$V~5>_z1߯1V8!;:i%wml N;_\~]iŶⵣ/ݲ5ݰt8{5mlUǣݽuIn>ѷXiRI>#A0rn5>|;:K^o>Bw@iz{h#y\g?_w8'5q6s)KEY? ?>օ7~)+B@<۟iRi+ZP `n/zɽY][/{wOssk_}ɝm믧amcSink}/Re]91ޥ.ۗN"Sc#=,|nrrXؓ^*ݽ/Ԉђw{]_Գ[ “c:ucwЇ)F Nu[,D]ֱxװwn]ͺFOk1{i̿c+N۪{km7ǘ?6>}?Kmݗq>cu ??[b~1Frrq?\k΋[GAnH8?YMv/7c^pmUG#KO_#6o8#o.ԯn޽Lo2W9'Qq{|7r]0W\}Msm9cRnN9˅%0u`0/ǭZIbapԎ?^|}~?3)A&c-v#Ow49GI~!6$ ~n.c=i_}23XԳ[߯[O'3y%/~֤Sߧ*gv0O?wzTm{_uSOַU9wŽߟ+G4{c?f}Hd?QZsGrʏ$U\?{53A[c $n&C7=ӔztI>7kM{v98?^?)TIius8S5OTDrq?^V_{,3U65@+Yt:vׯqv@ vjF$aaMϚk s~PFAƐ4HB䎘{Cݒ*9''_s9Ӻ'#grs;%.` k} . qГk|kO_kE>:qɪ^~WK/u5fHCad`g-}jDiݵ~%2_9*9쿯jVNX'Ӛ;ySYR\?UۛJ Dߗ~5F^a߯'}j\wrזŪP]/;r=>sR}'f'q' 3ʬ2GDZ^ gmgxN]י\?WJQ }A^]__h:|ge+A{c~#hdDؓM#?~q[VNfџapc RzZjt{ZN}k 5C4WѰv4<䅿y'ά/]ϴ>K+h_M/CG.?5[Kuf˧7sC4$HVI<Jvzo9QQMs'o_6%=^yX\Rh7h)mfO-IZqReO_[)TJ-V;.﬷zσ{}Rkf_ٿ;on/&9I~_V{~m F l`Iɨɻ2:?|T!mw-:cw7 $Ќ_{K~~>^,drXr?O֛%{k@K{w?;2O^aXp2>FPxԹw4Vתc .PPqwpH'䃓 :>E0xϵz]vXKn0G2H'{%PiMkp4 JYȍK6ϯ\5jUto{x\xF4t 5(CmCPMUJJ#krmg_:?:u=v$4쯶>o|]'=Bu{;Fΐ[-4ĻW;]$>M5)Tvrm&ԖwQGWƺ6\d_o_s[lKuZxGQѼl[:$۟{Lo8Jr~i_f$S dl?"q>X6/] 4_eKiE ݿy='NT9Kx/|LN4͹̙jArXJiųVyҀ:R[ElPRm[iNv=t[$×,sm',vf,",㌮eUgmv'تMi?Nd<gS5?jrä_Zxi[he6}+~$eoή^OO{-os%>k;=wK]?z|l-ctdw}p m:.Oi_[Mn~9nu9TSѾs,ToQЃ{ߝ{>_~?8SQwV^TqǯJJMymnE1@r}:?R}~G]"yc{nMJ?בwȓNH:zջ?͛{%k_oq.;{)ߏ0{%5F?wf_=<H;,~_ҲR]wuh\^jԝ:kmc\`=+>hS\߯~~q:&4[N:x(,s.ucIϭ'̉SIw_ujI<{V9>p^~QG8_rlr'"9=3I_F+_Mc>ΛOQJ^#[m[QOi~cE{[_Wb:<п\sR[0|Zz~JrpO^y>ywNG`1?z[k7F19C}W~XP_Oӽ5QT_W~"4a7ƚ[Li}G')zszݺQ_j%.ef]>]qw} FW̜%;[m0ٸq~)kW v{`[[kビ9W߮ü*ydR7NGcЦ~KڵQ"4`v|gBl'\ǨIo?ag Sz9}t}ZUhcCdvu$(t>~Q P+G(#t]J`AϨg=)Iw=HH#=V_z|˺GNi_?V5RZ?ֽ>c u֣Ͽa%oA *廭_Iry}S_-Y[O_]blgǧ'%.45Vi8II?&Up<?ϥQ 2OEƷ1МJ5R~_*S~ mV?O_Zߧߩ%?w6:}V_)>uo}ˌ%-ŐxǾ*>yH8}3kGSDT=_{D sv~OS+ryc_׽_:gA'wS 9-WǞR_eAm;b?/<r&m~5 dc$}=R~W?z]EGANsrkNT\NlEÄc,3ǟSw(ů{w1 |?,j3lrO^G=*{krM"#>ʗaZ=sU_4my=x矽sR;b 77V:2x?R%?d=֟1O\\T?=kKzÙN__6H~ߍ5U?̥BP_ߘBqއ{蜓7}6 Js0?RQQz+_'zg{bQ 'So2//nHC}Zj?G?q޿!N9?)4sv["9T/NR~_*--W[$sO#I%{5vWc}zQ._)(O|I]fϙ-5>@ Stu^o˰ '_<*kU[DN SW9Z֠o^L‹}xy\:ws~Ù׫rx_s4FqM;_1uzO-}\O_Pwmw-Ts?TKO=4F3վ֥-ْjvy\sBNNOQߟi)Jjo?>?ީ˫f*c Gq~Sw΃OoRAvɽV{ӯaK6t<{Զۖ/^_߭4Ey{ғ[V%V<ϿT~F_?ϨpbO?ןךW l_6rt'iJJ?&:0{gֳVr;-M$& N_ ]Bq^Iן5xv}&PG3Wy_18tq1sydro!Lw?Δd[̗Fe]Ǭ9 : FNOzO/F"x~PF0?}.k鰪QZ:QrG'[ioɮo?~5Ha|?sW3?gok|g< ޜd׭6K6HA ?aX>쑾hu vI5MJvM߯Qr*ȧ7 N0%׮Av>qZږ%籷l9\G}8tt1nKɻ&~~0gGV[mvmlcwA<'qnyg{5i3yVȫ =SY;Ӝs 9I)„)jMvk4MZOJ\&Źf/,)f͉[%åNϢծ._Ox[Kյ}#~ aƃ/C}s0;36ޓ|ltJ/]GTo|V6V1#|f]B0KIou4r7wF\J|ܚ~dquvvϾnQ~:veulCn[ '~͗f\}RW~n NS&FNI[k09ֽOkm|^={JVgOzUC6gqq?OrЫJLթG(oCI#<J^N_\mS+7sϮ9sZ۷so(1E ot\T #;}轺&_6=}{?@9玽j6z?Z + @w.9u9۟GZuT՟nDD<98^ytா;&iu<~=bМgc3_8E{-z܅9R1nRw59jٱI# G?/R4oCu gxWB߻Ĩ~|6AtMu%-~1#lrZՊ_֟쓧UMG̻NO4{fj2R_z`~ۏ)+Jeg3Gm6f1Zt=Pr=N\].n ;>l =Yr6ۻq~l|= FDd*Ãs?*U58O_ڀӟ 䑞3ߥTek.cmzQ  dq}꽣~? t y;\UsGD;~_L [ztߏ:2ӷJ .i{O/Z^yHpw_k<B~{mti"W7I_PwBV؀DXN%RM{`+26qlo}0Q$x{4NJ(\|g?̮>V}}))&U3n0UlϽ/[$ ,ĝs4R)}_oQʜk.;rzsJ~ߍ_U[28<smUb-u1cK98^>c}j&K6Tu{r_ -vNF[zVگ#ض }8}sפnY#7`'1>&Ӻ;YנٻiG'ҶNvZ4a`[<=۟{ϭ~{ysY^?Qt ֊=F om/#tzC) }Ӄ?-ſ5)ܙA>H|d$><ּ;ׯV?a; jO)Ҋmޘ:n q 3>|ӌ~UG[v~kr1N٪%Jv~׫c~4:Q^&˜^}ݿ?U+*?R_?Qr9(4V? k9ak۟m AHksӕ?%o]_{w  /ҤTwu$rOW/#BRO";~f#=Ȥhy.NH?wC{:N!3=3HR\O/n%Τ-~WϸlB jF|o+}=>c9o֤Pz9#Mzs:t^Q|$x?{J܍=__:D0qA'U!$֞|ǬgkcrIn:pOu}qDe@;<`X_h|ˍ 3#p;?֫;dz-#aq#qQ<(5ʬ|ssH/*ɹo=t{IM35eqR2;uSYwm=1q#'Oi{O/5}ԾUf^ʹ͟QӽJ 9X7k.2?,<~s΋tkJ|#j/ڞ7-kQY['/-t:ֿ|1ʝF z7߇U:|Zo}$w$Tfz:b}∲ByuQ)KncQ gW:ݷvEEwXƏl?Pኸ?}̪%k~] sOn\=_P~ d'Ou_0 ;Npy=q<~ͷ^Jо?nM!NQ+.'9 H}giu 2J-;ko1Tlg}jX:sAi);?ZJ׏Q:N~>cw]Jn_~W[[ogd\{}hIv1ۿϷ/NBdu֥Q;]/ԩaݴOB=_zɩEouPm<=d2:zin3+J!'z}}j]Dobt=OoM(˘RVzuϭb)#8< %+y(ۯhcogzQemmLj#ܿ~.w=4m0GPIQ"8ڣ'w<Zs+^@૓=Ys˿Jh`iq'?Ύyw88+~w_,38zȅM]?Տع}3,:]~}WA4܈v#=F3x֭e=fܐ1)s9F7VwZfC s&`Sn]Yɇt;Cʎߑs>[?!өG'7AJJM-o믂+'QK;fFbokWDOvwwMkjj9TmkuB9 0z[Mm/Opǩj5<˝B[6aLM#JsiS}sލ8В#mKu4~/_udof0][ #tgb?Ⱦ^!XW5_I~Gm3S]#L42%:#y~d%ʎgc+_5GSw;G+{ǽc/m|@cfCծ5֣D8mz-#I1\&QOukM^Z<._'Vom%~v~'R2Lm.^qMi%MZcȷ1M#ϨbW"NvVgqvE[uymG{ݻ SϦ+=|<~sJ2jkMϷd9@vIn4^ZUcvݿ^OI0Ovy= vϻT97oݿ+[`1gw{.(_~|).1tuKa6?^SOo"䗐򣞣=?/Y)4{4$u{[M7u1hw8SuE'wxtj]F*Qɿ<99ttnWF w5^'J$dqt)_qj6zPrN=u]oV1#I>y_JϷ^T[Yٝ{}}p?o}OS.s_;/.קs i}~]zAҕ;o]ok.H뎟WMЊk~kq6V sWλ2)S^$1 zw _qR1瞝UZwy E+NӟǷSrQI]_½T}RyS_SIZcv`uǟL?zݙe=InzϮ;)9JJьs;Og4(ŵügSENI%u?)N6=|u<__Pvi`u=y .Cg`Og<{]u#dpzt9pԙӓZ?__鋷9z*.}n$g';[~&|M<델T)&((+F9r8[1P{|؛ 2Kd#.cA$ֺ6O=Ji-z^H>X%z5-OZ)ɤgM>;\/ s_ZV?6l ?_gY C Fڻ~[:?Eu-FM:ŤH,4]dGcJaw#顇vퟁ&imdM1Tk7 demȬ5iMӄ}o[yGJMZXUUXu_h>ּn&2~^vkuwkkGqOpU{"Ve1qpt',K{Er ]mlYwȨ x&ݟTfVWM"cgm6>u1Qs5[rnHUf5o.[M֎wMì|l6mG'}Po#+5b*y,[nހ1/e!oE2%XeUYi6h6-I+RhlOci?3}hvg$"gշn7ͷ@^C.0UM|˳l5KN̨˖^a} e⺖WI<5v6RG?rQ[tTD>G?Tӧ𞅥떐\hɥG%J*̋"#G;wycqgGv}TsN^]?gX_x2hwH-϶6Y +RmYi??/ >G2L-[ԣIkv/kϖE7S[Z|?ƍ%C#G"qّ}]`^ʭo[ߙf3NU%$wٷs{=?^KKgk)qM)=t׾ C;#<"gM^G{Ft_KT1XTzt]~?0qt=?ɪoik_c0᱀{mtKSt뭿?$7uO?4]~/ߎ(5W7@+ZU>ϯzAXG\=i4"Ğq7mY*]?븬8swRM7k+^eI'IvWm@0#qҳw{;|uF/MɁU$;G_}l\O\eO|d^dRs`GU;Ke*Ij|B_N~I+_ya 0;?O^=sǿOv_[G%?4] ƒg>97hg瞞G<{ AuB3#֪{;wP#R~p$dq \(+?׮Fzvnu}p 'gyW{`G^o'6PZzO̓sϿGtFW{z6!i< ;p֯jWQJ嶝EhݎHgש_j/gg˽c1ϯ)Ƥ_Dvq}}^}F}KT<3MVW߀G߷^hV=~˞i_DGsѹ;j 4yYrOz#R+̝ =E3\'R.U*K_;X+u֧%+ ߯O\tkSNY5 ҵAZk]ר~_'7Oĵ~~#YA<~s/̝4K}"_?Rpn/F\0${҈W!/~gX1%z&yꗓB2x9י3Vӿb@nrquJ^]_FuמDٍ6{Fx9?)J?qM]Y#FFO'OIyJ3xc=(R*@$p>OerG8$a ~_vpG5'8$Yy~? l09#׿KF}uW#0$p=ggn빌'eb:~Kȅ __{ђI~oޙ鯟:H#bO<7"1msGHA?ET޶]FۜA&VVDFHcx}Rk{56}|׮y^˜4Ϧ7=qWK-*0ʓ/ϭVKMzݑ0oKgnNc{/W>9=h_>M5!!FA aCoĈCko`p|)M2&Un|QmDmwrg+=vRnuP0<N06 [تqs~v$| p?+zuҦ񶻉$*@v8cz?25k٥wцyoǯ&Igc& s`?O\ժ39o"r '8yy˿N/^֣:l#$?ZK}[^z\k+w܃Nt¤\լo'@Woǧ{-[;Tog宽o`䃻j}7pz/߯qZ7={Λ3^YvcDdvsן5S% }*p<_Fmڷ'ouk H1w=("iFJZ+(sOO43E˧͑`d /^TsJקOde9 {?Oz 9O>z' }On'?tP,{G9=4%uu]6;!OMߌ CAD nr__4_եkݯ9c׎/#J1M{DOZiwyKo~L`' czӕO6|ۜZ2ͦݵ+x7{yF#;^w@>y.KlG$XpoW jF$ׯ#~֪u}fm/4Xrv=G~h6oW{NO~oGHP] w$M/{O/YU_^]X ;oCo֕>UB }QԧR ᄏGm'xO9xλ2#Mm~K=8ϯ?S"yT]׭ROrq ;w{y~?hǜO.41x?7O9ь_ߩ\N#isCWs}z܃8zUJvϹ*Ro=u1k`,`V+&cOr&K: UM/?#Tm6U\xKdZH~{m6w}kCbi+Ӆ)T$:K6[磔ʒm;F K:xV4ۭmVF)<~HPErS_V޾cri㱮a+Eǚvkm4[kUH-kƫp$e:\M+|4%:Ҩz=^O'IjFݵ ΝX5ͦ,,dVKX#l$mF#}J\{sѩ mOޛGм7weڬ˨n!2*θz}ϖ8c~k8RMo}.m;6o7>Gڿoʜ]=DZi0dw8@us[iJI4n$D;GcRbdkQѿSu[?k?^!u V[\jlt>cZG#,ϻgI-c9G^/SqOZNO˫lmykgj]\Cy+g5mV7H<\ښpOڿžiZ1۫;Kxb}#W&בhL $&.t-#Ms%RN59 /vԹ7ӧNɫ{*KO𮏢Oz0ɬ^[ט/ڡfFDHJ88N~&xJYaUqj֫˗/sTPӿ>`xMmgLG ͮEȚ8ٺyhm6C쑣+ԍ\:%Rpz_OkuGMV|ٝct/~ Qӟ2{~b/u~~oj,a֭DMHI=2_]ɺKd]bn-#?^*Rݯm_$_xW<+ 'Gi_'K$vG˄ؑ<1#}:*PV}k?3u;.x_RA YڔdTڦmL_hVH~wGOGvM*'?f}mؼi(T֍|iڥ~_𦱠Lm 9RV.1:m>\m_3:hs&9AƤ}Ҽ^[9 breBA9>uNs+W9Ym z8jRkٯ>WZ]n_O_'<H|m?޴Ub\u_ oz:e6~ןrs쿗>vNUmo_/nG=Zw[g9}|ݷ"1PݷdFݳRWYhI9ߟhrUM;f\IݽtD[NX/1zg*Nw 1]t#ڭy15__|p:9<qXq+wޏij+ƛF'1qGM;+=;=Ḃ ~TpooՄeCA?MϩQro(nVh^WÐȻqr3;$nU\Uݽ? _kFI1~$}7CN8g?즔SDeV㎃Te܈ |p^ioOdcO~AUz_FH ^SilF,j0s=jENI~/kG8瀣)us9C/^ݽ^2Iad\:wKO?PۧNg攧Q쿯1<q׏Tlo_F쏔#9-x)˿ѭ x\`sxoO֜ߗ~2yhÜqv~~)g*W[X%OL)Epy+l7/o~7mYPIn?m j9י"ݿK5iE>#L4z=yj8HxAm 6h8Y[̺!XDo_qz|/ p,EXw_ˣxIş񘵫?%w#B$̋|Rov~ɩdw}S~hHo(uBxHaڳ;MR~}]PRoϷM'Lfe$R&k%_9liګ׋^M]߷TyXR_}wϓ>;ܟGGk7$mg sZFѫy,I# O:;;I5~wyOjQxOMol^OjXVK;H3#,#Ϳl'>08zӝͿD릟7ߒ[ <-ji4Wz~]fa@\ -xѾ/Gcwr8yBZR|Cµ2sQ5)ڵl_[&h\{WgJz;I䃜{o.(~2T?ySY{^mzRmu7׾v:|עtB+~2's4-|E½u?9{z?fU8]>_8<Ҍn).zuPݕpG_Bֶ7+ <5<Җzoo):tOƇ)>cd/~k;FbV?59'{85!3zԺdپY/Ϩr9')>[{z"Sz.{Gl#sZ~_ Ӌ_;e 'XzhwH!=@޷_a_ܘG G:jc*A ^ԣ>z?K*W]j\c_-S=?QȊI\w<Mͭ[æns$|}H?_ _߿^ۚԢ⮗o㱸o?ҽ_qo5a<毝yRDILs'$ PӃwv~ǟs_۽Im5䌌dxrmYAR]RWo?_ M?p忖;mpq?/RO?M~/"}~}kpNI#և[´_cy% Ǒ{jdc*WvryRko_O(M۸bOL|MK._>GSr8'>7>^_u ٵ*}>W3J/m;[WvG̿ގxg1|}>_ji%} c׏(o4@Icg9?<*n-?_6 6\S.Dk~}n{GN9{(SM<ݯm%G;K J}?EB{;$"ӵek7M7zm'*YjIzu59<,*F杺uܛׅJ1^۫F|MGWּFѹѓJӡ Th~*g2JYg9\o78~mB1K{=.w|:/mV E iΐ5M^BUVwʨiOu}4W_yw+k8"|Eo9]^hh᷉[r|K܋ݻ~'Eh0GJj;6q[v^fZ Ir;M+u%꺯Sާ*egnPTی|V~+nrIuk%MNY[0Er>pGW&tqjz]~_wߙRBT5{]6}Q|(񖻦XxG\u{;}JWpvd߳o5lq57(nF}M&'R]w KӮmn,c.'%[-d~~.aGiFYmFG2yrT?+vzuf;zT_SxyRө l=O_N\__SEKcZ8G|ᴂ@j^!ыƴ_.Tt'?{^n5n}e:.zv^瑞{=7~9+ֿ6ޏ7g=8BI}/ߩ>NIzp7GY{>͵/h tg쿻/?h+]a$zE?g-:ע܎N_\a gQ痯&mtƕ< N^uO"*t\O$_nWzEA/BF ?z~wl'M>۷ :?7JE/i_&m$CcUs˿Tڽ׻Bx^8ǯ_Iii1_ g'$oE{%nמ3{]7^{$߼o< tN?ﴟJ kkrČ=1\Imr˦(\9Q_t9k{_w^RoNA9o?ީk)y~>ÏU9fzX=9'ۻZ|V?/=qMI=/WU͐Hc==^hgJ9@9?T&_;ݻp1y:x=?f.ug3f{dexo[9f#<cֵm-KUt]9On?>wk*juWד?_˺Ȝo zTJ@?=~kɱ0~AqIC}AʛJIh(,"V}m:KevdUeOgWpֺ~X&kMn;_m~/ݝ<#sq +F4p&S˷2{ϓ"We)vQiB K+;wK: |<az4C mG>G~F϶:sT=þӶ,c, /-Ul7ʿ'V]w.F"hd[3 )wIdPxYmQZȊcv{336?ꏸ'EwZ 9D,rI4Ml3F'a7lmZroיbh|5ie,^E$~ܬvO/vNnO^z(jr)%m;_'kG7 +M^ ˋZ2Ӆ>DesHIVo(贕^ZyJɭCvql*ylwWw#keh-FO-o +đGrU 3r7˟_s?@^Gn݋ go5wNe]B=FI`q=b29$w$ziZE~/wm4AqU]@04mM-5fdY A_2oտWVo: xU1rȐI,*|GMIlka)F/+ON^%(׃n~-m}_WR g_k~}ycs1keѭik'~ݟ nu&ծjO_x7Z֩}_[o}>gK`ڳǏ1VE\neϕ{Ķ3a)R>۾.G$#J>FRכ҃Z_1ӷn&,;O2?,ƞ}?䍧6mv\I<``]K]o騽^B$<{~FWU"}I<)˫bMi?^q_8y[cA\#z<;o 2To$ޏ37 ƔSqE)53Q{/V1^>chS}ةEr7?O_K{K{`c9M;?q^9?TOMTz,`1'7yhe w~[A'$cs|98㚵.oE'}F8e?LoOJa$Q'@p?ͽY֓[O,P2q?Ժ~ΘIY4#O}i}LS]7}[<@rq2GCw:)ӽܿ/^x$I~Rߛw"pu_∔ ϯt3{߷ @w _}6v[Ùy$)s/*wzBs9s5vN@+Tԋ>`Wcz{>xu/ėޫ_d18~n:_4wۘJ^r $}?ZuٛF2Zc E^=ߍ74*vE GL>5MV:pQwk׮+99A&qsǿ+@9'<Z9&1LmH~=*9dt(;hNr~sUwmڻEHʇ>.+t;S=H9Z\6Tm~z 㞟Ju٘;'o$(V S=\n5}moI< R_@pfB~^~?an^.s94~_?1^MW먍ӀsϷMo]|g(8nD$FNNzt zSI?Isk? A<#=_*S~n0Ƿn#'r?εRO/~zA6(Jzvb7{Uu;C?\}hf#<i~!(([,`և5_PJW{LGzqSEݯ%F/m?/"yl7sݟhuv3I Ppqҩ7/G^ZH;O?ޥ.# cWwG<{gCZo{l3\9֯73Tֿu&݇_y)~vNߧqppz{7?֏i_2-E{_QFv󷴯J#װ/lW4]?+wu<#IPZ;}2B[nNZ9ez?oiC~T~i (qRm+zG\mug*Mu`VNn=?M!p6;c_5u~]ԓ~??QAwU6q!6[ S?&n+CvrgqU̻ 8Wqӯ=i)߭'y~} )zux}?rw3ӧ.w0BOӽ'V߭gu}bpݖd?ΩT4b/-PW?Q{{s*3oomq<9 (]ۭI`q<'%UE˝-}' ^q??&8^^ׯ c =lyTk]_ '8:?ᬥZ$SE\{[ieFخNnm>J))6|a:ϯ%;X==9ׯ֚ϛL~}[kw:<办9IԽajEmzn5NI8=RׯtO2qN1}Ww~Xgq/{J[_XPSS~,X9=[n_N5WW5xT/Ϧ}l3#fx_[~~Sh]o飓*Ej*߼qݧJIP0@-ͻoӞ%8_uvwM~rW p~H[ xJ}_!u0S*Q}S)Z﮷N96(nti\Rnִm-m>lO}C%6V~%|M{u޽)!i$p ;ᶆ5$縲NTIkg9-'}Vn;_/jC%[[mi~Oj|"|~l97UF춽|*1B43Vm2åi5DvjjfI+ob_gלN;[~G9>_J)qJ^ms4|7ӞMsOnHz<b<6wG}=SK^ I_yۭ[$9w^_N#$ڦ7l-?HjsQ"O,H7׿B5=Iɥxm~UzoE }B jVA$p迼5ڭXy委͏|}.S|E̪UfghW;W4N4'T{KceVDoe):zM$>WAKZƛkxWs>}n{+m;MZ~_.Inu%G_R.\_>;%$V|.?SeĿ/ HeNl$eav3Bb ң8ʥk/}|VwQ+[?vM2_4;M復g&k²-3@:|[Gqy>TT)Rm'Ozti'o!.5xn-~ wq2nl;khaDD5v'F38V4w$uu/{Be]-~Z52?GĦis>wvֻw{^g_#úLJt4մ{MV#팖^ {J;1"ox_y$ȞkR[_Ak7{%֟mjd-"kkKX^Hc<퉱uS^w6< {5gMim$p[de,3$'Zܭ+׿^I?y㫟>4L/Ɲ) c-ڪ6y B'D)NPpvnTu[Zw{i?uKatO mBAryry6tcGH~tȑz' w=)im~#k4+hJ+XW-̭[̏0qu}m[;!W_g }<7wyaԊnV`i}y}+]Hʚ]j/yk~kmn><pt[K"Kk 4kuy t)'3h_1*ھpQѻ;kLɫ[kpCqۂH8cϷ~o4Q+[[EmVүv׾|Ϟ=[FŽ+,32 0fyj.'ڕ$b=퓒קp6 1zrW~jþ]/}>~,gx."xeBTgpXvo˫(TڣZ=v&9RIc<_~t_G~F" LϚUg~dS_\oǓܞ?HR?#-=F~h枮_ne~W~W~?r^wcX:ֲ{[~YIۣﯙ {'o nGdVʶ:~+1{7ק¨$)Z!ec1xz~W<{ N ;Q>O۸~oS<()W Hx ?z~uO"%{O$ uy?y;[2*>-"GNjۨQ\^wo_*d᝾H/'.=5i^*Tva$x1#ng/)ֿ5Ջl``h}W{i2'@v璽:fM__#9hӾb'Lyu4O7o" yZ$pO?1H?Vj&@JSWk+vDNN |Dis>[mW8#˖^'/i:4nнyϡ˞r{BU~l:~|ߩ"n迺F+ Ԟ0s/_J9MM^NN}U<6oO1 9$8s*.cN^Eޏ{F>`wې7_ڈw>L9a<=jRV:ZOǾͅI@?瞕*q}~4O n8dޚiT{:܉I,}CqTJ:_ꆈؔߛޓ}̩Sw]hns펿zU)A{]7kɑ{/F{Ϳ{e# pRum}XykvsN>ŻmVe]}wյӯc*qJO}4>@N+=ч2kx[_\1ʗ-W_O34_~ѭW>'YZ<ֳMַۑ|niŲ ;N>]Ϻ.骕7]ynkhh|]&N}/4S")ma$UI̦cȏ:s߯< n->mzݦχ?g<67 #$u+]TgOj\;MjrsܼS_~ԶZ߄)kjieK9on-lw4p}?~bW%jvgbݹcv1ּmr^m/K%}#P5WWkMk BU>twhND0n׾JQ9~7?xOSԴO>sެcw,+|Mq#{:XnZ'zN4^_šKHsǿR(=v猜/__Қ{2*Q}6oo;ܡ9׫uZ P|L~>~^C7z'=I3WG\/sӿ?4:\a2`Ԟ?Z1#hrq?&~;k(/w,~l·4K? =zjMY;r߸32;^Wq='|ug|Ku'#':^O^޻~#،G<'emm8^ibAslJKj.㓒rr;~>7[|w{;ɕ >m?ywT߸`;>? 9D<nx)MݵnUG)EG_־foxjɿ< .5B[ZפaSIl ùU.$ٿeZ*~oCK?o]/Cqo[ƹMmIoa'Ѯ#_ϩJT0WTz/@2%RHOwh%i%ߦ-̛Wz߯tռ%h&l):a&skhKy&ݛˑ^Y5Fg}Sw1Qr==:=MkG/\E.iix2o!Ia4x]oVyRߢ_եnG)}_/#ؼsZ}Yضs4q[Cq'^o:zrƶ[]|zaȰn5)R~kos=S[ߤi(m]Ra`>7ɷOb_]Uk>j9T'~>su=x63+$rnXEG{~g5ԧ%%w]ϟ2vP_z\z~ne}=CdsINh)%o;-~bl=u'K/"8yt?ʐBG?櫝G[?N}6!6pH|i:K3)QZ^_54R(8w<ʢjTUQ/jBvF5Hȶe2nfdͰjkvm[=Y>&)5NQ5T[w>{,UR>V:iՌy[wK_WRJ'*n1+G?z։0p}ռQ~~Jnm}z MZLj}{s:GM}F`sВ61=洄oone:jZ=ЛX;Gv=}iI~nvIzr2zpO}qf]N9_RW)Ec}\Y>?ε~(v.I;1I AaKvfQ&ܓNoJqN};HMag8/S?M5_`nOR3N>1IϨӋRN~,xF8ssIl_)MSI~E~KV9۷wNLKodiYZiC"4Lʪ]_}J1yVgݧxo_ތy0$M|^&vz?\˨Fmhy' Ş|Iyr_4TQs±&!<'R>֧Ki'oϽwu{$ j֐wc]], }XO?6|^6&:|yׯ=_ɮii:4&[ulkrZE|դݞwεx"ͷ+qgdsՒ="?"e4v7J?jZ b mo-ŋe6empHߍ&IinWf@m1ĨQ6.ﻷoy܃ƼeڵbO[*rnk8Qc}uyW߮}bOil,Ŧ?-Ga=ye]w83)+N=NW5$ӖW(ʩhkLIO߻?α4J{k-٘ n L"g@dF }=֕}7y=IgcR۽L E"9-+"6[z~<((0 %F[.e_>D╬w_.O<VU^q,!CvgwF1ú-wmCxJd zE(*вS`e};Y.W ;yje =#N,QTZݍVk{oLb[ז#[gy,[}ϑUeտ}K_V- {{}3GXԥHwL;]2|=uaU(Nk/5))$v+M6`Df,Io\NoN|o~]]u>zQ*S.[~J.ykUU}+Z|=SWtϹ?M]W'~w" 0rFF* Gl {<*)><0j$f.Z-9F0I`st9%84~AIE}EZryby9c'{w`1c'ڎyz4tӯ{8w=O֯>kG]/_7p8<>7$`ﮞz?p# ?\lq@r?i97Q}_d>wׯޚ_F~1@ۃ@^O?Z9FJ``?>qJKuO_W r =l?6WA6VvG_;[*8$Oje4%N .;zsQ))_0rqcu[&oKGc8?֧~?h&z}w~?e <:{V<{/Qrpr>q4ןyZo^׏sg֗_q1Xuf~jI=/wb݂N0zrKݝ~Qv8=H}"T_?ދ&֚0 pG89UTt-A[1m`zzw_/kNM߫W蟟q3ԃ>~ %}M`XpyQ_|I^isǿZ{FkT7p^_`er~׭JN2]/騭0סTZ]M]#e' SuwoBʵ_KÜ'Tr&/c7ߪl {qd~9isu:]5:{ge[E~m}yi-~k'縞VAz^/gɥ~@#ی99q*r~o#mmn;Z8>_6bSF9VA룝u+Mk׵27=S_sI~.OsAM^םɍ8^3ksgSzJ.?KmzqZ~&~[oqP sGN _W P0H9s!̏ݸqNWW"T~փ|nHC=dw#;??G<{ Ӓ[O5w?O/:-I=J^]~=q_Kv8Fkj51Q=_϶Z%>.?^?OcZiݺ1xLw̎Fֿs(O_SNMLiY^ַ9Bי鷺\_nyyȗᓃ1Oy~&s}SO"Umʆ?k#Dx㿯Cn?N5.׳2Q^m]U响4sB4X'W<{ nokw̐FIGL)$_ֽFm ;_WSR caǹk(RU)?'rzu>P7oQD)#_OUs:17#h8#׸暟{B==~?_/ y Wu}F^x+ӞZv-ʆ<_qP[e:n/s?/TSmiw1_=G֎x_4u;븅Jあ}i'Uaʾ{wFNxoMMCD[`b9 3ҽ/¥G_zz[) 7MI;ߧ4Wo{|̈ r=?֮^/_'ܑc#|O:U9Y]ɀ@6ts_ϚQM|_DZ뎝zZ]{t 89Gs˿ vDcBHPr1r?k 1c 1Uλ2%q}Tz]}YP T9!)Ki7yg|9𵷋IlodWrۈ:h՛m'Ϗig<_fn/G_񄟺kCjׅ|cQVhu\'6gX||P1sTWz7- JiY羺KDt?to./ۗ) iɷYm^ݿO^Z=~ֻ躞=^:A߾϶/6?Ad+j1Xb2DѾ)eºtרcuW|ﭟ$wwmnMþBBۮlf}Ba73m՟ÿJ15fOe?>ߛ_w_ [W/U'4Iim67>MH}ImFwxd?6y~"r*WMk}^u8)(E|1&//lrb~կO2gjbB?ENNM6r/AYozqx 6ӂᆵV_KK|+o^,f>n~m]쿧~ǵBzۭm5 KQx{[h[K{5tp5Law٢~sqtݡRN}} G[}vI(tI"f_&i?:,WU}g2m^]w>YSu7-e>> {~{G-cWVJ5$p̈Iod~/XhS懽ݧU'V;ߪ_UO[߭*"7{KºCG!cxc m3LŶlJ/랅5k{:0yN;޹qyn,vzOz=z_O*@2s2rR8ux9)MFWƟGKH/jZiqY/أO-8\ΉI$?3exJ_k ʹz+}z_F-xs^^"Y^5kxeSt*l؁<#yW{NV ]%zG||1D^%[KHki6y FfW(B:kn_v3Z^I}Zb7VJo.k7Hv<Ͷ6:Cy{#ٿ梢Vӧfr|;O j6sw\Z6v]y,UZefyfqG0Cⰵ'J %kӮԭ"```r*Ri]*u-[&/FޫNnEm^b@ƣw]'k#Dv;׾%Ro_^ͨ_]Ȭc2@'?Ol]^ߏ?pJ o!BϽwVu%B7c[2ܜiFV~O~R媹/Q=T{}JB+GSoE[>Q67,{zm+Y~:7ͽ|3zgXwDՍ܏oz9Sw׻ve$d|6[9u,^}Κx)մ{lێ0:±=;?zEnԫEu(k|ǭ܅V!Ua7޼z< W^f1,ᇭ/8uȼ)⻤Y<7[4M$U%[U{~eYZ񐜗뮯zʱ tk%kk];>\Q[U%e<p贈)NK;_7u k:Z%$M-,0rUdkaB_m{N8IJ{m.O5o ~+ծnYotFLeM3Ԏ?UK׊zʦ߭CNQ\Mk?Kt"/ S.ϝ67ͳ Τ%RQ~_kj]׻S'UMѩZUmk]':iZck61oCm;qWc~ug6k}L/ Sjj{x-q?_I$ "|g͹?ܯ|yҫ[ݹ&2y9S=4D-7;kl9nlտƺqYZPB~du\մWH"T_[n(Ŷ$fa=[.7}1]8RV\koZ>0tZcI"VWKpiԥoU3QRWOtի/]qkV~DBu[־/0ت]{z]>w71SbiS?F;FzA9ϩ{ּ3qq{i]m'#pǾ`ߧ=j}%}7ﮋ+=~s(sZRnu[W?_~~﷭?Ptki_9A9=ZW}N3˪~vu H'ʎ.nORM(>9/V~*66v?{=K-T~/h^WOOoӼ7mV,F7mFgک+{K٧oz]~ߏ]ּsK{[$*\k3[٣bȆM{":Xyߙ=]^oɸ4p=~3[SKMri)Ԧ,s..ߔo'ֿnu~pT#6Z^_^ya?1O~!j]/58%UڷPGq3yo_!؎ 7= J.:}uoz_ůxVB}k""$+W>e0?xfJW;7]wx{ ky?ԷZh纞KUXOo 5-"|+FZ>[^vbiZ Wgy!|H}r{4 iKuYv}j0"$$=D(9kVYU}]};į_ƞ!6ԐA_Fen՛%{EwY#xR=v=wϣQ{S wPҼm h+2ǹm_'3>ϗ$_f/(Vl9۝=ۯxw%[ʌT:IV֯n83kM?462Tգnn ~8>/^n{`~} bNs*@?Jm?7߷Fꋻ'={T6\ݻ/K_ qQ]^pj|nܰzQ̣瓑ֲO__fߠ,]s{t9?]^򟜌c5urp?#<)~_Ϋ}_%Ҝ{ݤ{ΛJݒ8T&+NƠ*NHJUc)a]s_2e GR^{򽞝u?>n}JSw޿=~_ep3x;sԝ1KoQ#Ԁsӯvi9%)Ӌwg*>\c:V:rxs.I_( yZٷ抚0Ia?}){Dުߏ'M5{ r;Ki?w&ؿ{'@zϝGDiF=ց1# ^)Jϡ.qA{ןQ -~:ی~o^xFی6~0ow*s__Ny_%}qDl8 y#?=m{ଠ9}9Ҕ}!Rq:O sg?,ަrJIrEU98>=>^ßS)6nqq݅T2y>~摍ϙHO^R]=tc@i랹Dqƕ_Ϳ6cvvyo}GB?ķEK~~F68.;Q-G8ݞ=NW{M}<&r;pp3^o7߫nߨmfZk.[׿̗MAJzzmw-٭PVqۙכ!Mg~ K]++*tk&GӵDtQ ƻtY61'<1)h=Oָwye(]>h1&[ mR4_A m6mw髧ϖ7tvؑR4b\ӊmb}Ɗ#[߷{% =YO⯶[ܯ8fckypmUL)?=t&u_}3u|L3 Yèk_ n֗l7>q3GDV(GTÿ>`g^aGorb6Mw1+ɹ/˱&!mM=~_ߩ#f׮~ˮ$ϴ6K(6 պ̈́Y>?]`I}nc9;n-|3W-kN kYo}gG3I Y<^ tOHz5ME7?N$~8|eaj"{ WUFvtᤵeW8 4)7;eO+l!4=qơ=ׂ4bgY&f0fgv|$yP6_p)J{_ \jܷЬ͝Q[M F q=zW>bZLb˟FK[]g0)AodaJz##`,i"?4ߒV5Лo%z?[̏nHUűE'5,ۜ[G}Ei+pgms|:ϭ<1%<_^ M?A[iz5o2ƶ6]Y۟s׉Sj [j\JUϷ?tk_x|+u{Ia`͵n$[1 va8:񊍓Io8kpRJr~}r  ej]糃j[,:ɾmD}{ʼyIE=v]// V{|_v-Gs-k+Z)kWXSw%6;\1E8]N}Bogw^#֏i"o{hNFeM q_:efDۍvuR8S6{٫gg9g*t[/'ѕ$~Va+ZM'uO}%J5y-{G! IRO3S+_<'RhZwQ-_.3 z;TK-SRm7{sII? ._c|''=zΩk{~b?pǿJ[܏e>ߟO8߾+9O~*MFڸ:3ofb*g9N#Jg~f*o_PۃܟnS< e{W֏i/[OWrxÜǯG{ȏc`q8u[=fNgkw,aW琠s8^wnݾ_5_"t_3믆_<:XZG-Hj[fݵc.ψÚ.-2VmZ륿Ǣp'kJ2.Kk[ui=D?vOl^#/ޯ߯s#-y"軯~kC&iv6Igw&S62nW9?hg!-,]jpTZSߩvz/WxÒ^xY\Y%؍R5$vgo]&&)+6~aa~夒S>Mԭ˸Jʍ~58Lm,]ԋ뻳3?3eW} L1ƻUhʩMB%y|,`9?S_0POeǞxv?O̯a~à=]w_yqkzz[@d4EGV c y=Uyխvvӭ<]ƓO^|Mej0M<~pf[wwus{s2Omw~l;8z8xcJ_}~cW>6? iz/f\GCuo3\$+ w'00\z?>Sc~g)oj$<|>,:6浸msC*ttI>tTĥnmrݯ>pYg^ {泱i;,{j}6ҦouWvyŧ_KRf!fyog8UfUR$yB?kVJ)Z;uq5Gcw3*r7͵WDtzЃvY$2O=@ 3dPATuz#iYΩ.^^K/tOGG*v>T=}) NlM=m_ѯdw/U)s^I^j6gK+[@2H&YUVo>bԈcXPomuCI$Qn2>v-8SV9bHD1YC}$;)--{1mc I,'}Z QrcjSL[Ouۯ?ɽCA$ZϪ­»EY)]u:Z /usTI5^|f]̻9zs?# pֺjN׵v/9 TQbn_Kkk2" B̠yR|6~Q>ϺSGq z :`u?~{O/$]cy~>)ۣejv;ۧ4JO>ÿ 4J}?p 9?ן3էq|9?G:c)kom;?Q̼dt=ޟYgrN2鯛Z@'ӞsP}.z?ҟYZ#:=*pG=><#e89#/x5Wg߾#9QO$89sTg*.e?_/m=;6 fGCOOw"_ydeE{˿/ e$vN:񹓃va#$^jܥA5] #1N;GZZ8^KZdzd$?ގywGn 6FJls˿'?G_AJr?y~%q_O^{O/ĥWq'BRs}4ASȍy;)R+M=ztg~_S_$O<cQ*4oA?9^_{G2~5.M*zk}{ 1z~x5JvṾ[ PO׿_nvt}zӌ3pvcJ=y~#tuy<:\29e}c#<ݳ~s/=7L{rsdc?Kn/ yW層cnmMͿ>Ug$p?R?M~La`>犧9z^w2w~wV dz?֠r/u^7A>n{[?|wL:k'~W)YyJBsT]5M/iϿo=hKi?ĩRJ49:s+ԇF9 '/Ogr@ӧp[󣙮RGMW?v3sw5*ḮW 3O_.%A<{NJn+F<9=?ȪS}m51BcrWs@{ Hݞ_TWdoWWKjO&X^sOmټc}vz_+BFC{;ۨ֏hI#__%IWz8Ñ/ϟ|˟elGON:}VZRU'e'}n=( ǾV?T]}~C[N/b0~Y<5Q%{lz=:4ff}{TA\xO;kƘ9lq\g߫ E־_0S}޴יͲ1FqqW{zl ۧS__&sO֗@.9 '̸֪Ij]0Ij_8z`'>n;/b`1C"ٴq| Ti*z]8Ҋ@9$Hؚi22:nr~^ƚKpT~`ޣ֣y_2Zr[cG9Ϯh^Υ.Wy_SO9sȫ3i?R{?7{~\u<:Rخxs֊ik|yaou~[*TJ=GN{w#!8;:[I&B6{ϟ56W]gn G߭Lg߸*IꯧH0_ᦝ̚n$nGnO=JVÚƕޮm88zY:łHq~K⾾3aj;J!19u}Z#'^Kv1%F;qӟΦ=m7M+^{A'<?Ӛ9wrKM].G$t35Io3'Q8x6 4௨\"oޓ4ܼ5q^_NW֫ӄzu{$~~$<=o x{PTkjzmjfb˳'xP16J{?K9iz_6} xG]E%]amXc9<;M߻SAU<}ֿeng[:5t6o&bI Rh6;G;yՒvz 1]V1w)mfڃpM Xt2m/M BWN]UޅJqrw}yU]iu=J1HbwbDG~ETIޚw<7כSCI;z$[ՎY$EEo=ZI<|艸R1J?-{oShL2*qV[Uǥx5t;6zE/|-.Pbm4ȥfo}s~ +Ƨ79-_^í7LnaY-e4뫕6C'FeiMN]5ԾU{77λ}B]S-c[224̒;5R2.e~f~?-ZFFjjID0hFX*TΡZ"\E黿Ne_['U{:0iu[tuUzKKRɷo%].y֪*i#^ ,UJuWٸzp VKe߿5+軞N#_. ˸XV>Yr^#f/gm_ӫciuie /a3+/͵w)MZR?>/qJ:Ζ]*wEsyz|l΢5i3mY<Ͱ];~Lyν:uc޿/ϫ GOK%k|V6?tڝv) IL']k`TwKM]잷]ӕ4]w|y¿_Il:!IDw7Vnn%VM7}qɯqt)V*Y]+6ݻɞ~S(vuߵgi&~'=M_oY{Q%ivBy%?I'\ :NvIfvަYy}V ֬w-}|='ǟ~%x{^1ՕԤy\ZG;Wf7aa'UpMV0zRURbqQwoq1UJlDQZuxG_)Ag2Mӥ]NxZv–4lp?>[x-Gwxu `JMSIkg[۩\3õUb3N-y!f}{6{5߀|GM.R\xӵtdi8c]>t}ǿ5U\W֩>Wy϶?S*p[%[}џG3'XtkkWVI\B)ޟq$ܟ9*(&GGbYy>E߈aZl4oͬ3H߻KKɮ=D}Ҿ*u#m:QY?:ԆVWﮣxf٣ G#y!̏;cNP!gS籸 WOC;ž7<1NK%̓[gQI]m_%.&HSe~GՃ7 h߯uఒ%xA{4 _JO&߬?z5z<:|C }k F)tӤ_KiK[>-qtn#wK}ѳ#A4o:]np>$VwK]E4a~DumwVX:i}o~'Om=cOWQ;Fyg*Ѿs.~i}lj - dEqܚΩq-cn{$O&ٗsR&MU_R}ֆu#=~e7ӴkXn#;Zțf_FC'AXMz}~W]9fҌ)|[w}w=6𾇠xLѡ h>d~u:mKPoI&-B-y8i}JF\:;_W#_C,;oJ0۵6ʶZtM/k겾"sO4'Mwf9c8kIFem>c;&)32wwo^TXQ9Ǟɸ9k<2SI*r]5uk+oAOQy{>Zxt/ᬯm{o_n܂8Cd~|⛟6z:gfHxpO^鷚jvVgMO]zyz(+tד9d\(_o/IOi[g3õ޿/z6={;#SZ=߸sd?͟|]=/" ak297x]wzF>²c({VS3jV{^w |sVKDcB9>a{*|ӄ7wԲ\=y$[_kt_5Y J&/h&}V=7YMRI;ܴ862[%mmo/R8&IŽc^_Qj3Kz-hZ|;oi.įk~6j':xwF&|gOm \J\Kb|Y!8g7n^ymhY_6c{YId~_XriZjLz23[7q{hRwG|9\qX Z|;YJ*WoR]OTBƹ8U4bXI~UUiͷ2DB2&0 i3}SlK̫N8Ii+ݷ??_TB-Lm-%v_İM&g9̌~lR?ZIu9dhws3L֭jc 97mW>e־3et|GK-ݿ hY76h?Ȏs篢dL$~YFE/>rrUe:۷<no%/^]e"M4Y|FS6W^6 BM>u>Jߓ{85=ϾOxJxcMI}BnuXգwrѭ??52:sO=<.n[ AF˯go>_x2OZqyZ fc_3?囻feVMrnz~ >y*w_?t}c[LזwnZ;Y!zW<9%;|C2?zs{_>~+xBMGWU47K& N#lHlO˙\1÷xG{M,.q h4۷VWePxcO.YnnK{ 6y?1 ׁa"5%}[Vk#^8ll&KȒs-ݹ>_1R_:秭] ? \,r|2˳F g4O{vK=xb)UeӡkfV \irc謟3y'[_dCO1zIj]/*QcwX?᫵km7x g~^9O}lgﮟ'qg޷&C6y*x3Tl[#< 2q>l[u~ []/ $$c:.BLXgcJ3^}}}: ’Tw;ng좬wn%G qiJOWm h@if*N1~fWgZﯖQ\m/=OQMF [prgZ].]kq)AWCI=9yϽg}I_6SG#{s/TR7.0-`Gwt9zCDc#9'-O׫uEF~Ŷܟq1q}h[̙ҔzcG>>j3tV Kds&C]`˜|gG\yOC9WZNr18ΤOMM\i]])lH~yU wF ֝6UZ(C>۝${F?Vimqii/5 tu{y!Vf˶H- =>^;'W/wӊ_'=ᇈo\Eh.͝BI\{3 rmoܘcw}s7AҴ]2QŽؽ[fp4{&xSobU,D^zS4q5k8E6i"7T6x.6 o}՗2o귵̫]π7%oAtUVsgi3Mqklo*&\ϿWui+]Z֌lmjf};K #S7_ZK2MuykmW >ikϱZOXYZgMX+7Zmז]!o{[741H͵Ҹ*V{?ǞxÞ#O?м'uc}=.a/mchҸdd<<6ړRKX|?yjݯgM+C&5֋X{ }+^u(wM7n6O1&&iIS\}z2ӋdG{ݲ狗GsmFZlY%q|R#y|֔o߯3iK/奶O=΋$5rYj=* "[&M|,Y}R+XǟQO}YLaϏ,5jwVr]I\ѳyjlPIoξg(6}޻bH۟m'pZM3@.8%ToM"mȐ˽a+r$/eGEq6'_s SE:W[?k=)u ˀUXy﬋ݯs_kOJN>k+EW.45D>Zvղ=հ5)jno憺[FGr{g'oLps^j]NShܴ`tgvϯ*_z6WWyy ӽl{3ضz/*R{'׷_jpp =~yGok~{7=zw+0[oE~~Iwǵ r]o\P229 Jih}G,jsi}h_8M/1:~};K4ҕg齾oGI{nK{1uQ7Oɞ{R_;*eeBy_}'mgEY5 ]cD $VymBף9_RNi܅Kޥe(yIBhʶ$0ud*۾O \$s5:oX|Z߈d~?=18g|1<ۭv,cr[^hSArP}sʔm={39?_z OE~_%}t^h"T~vzI`qJn_R hlx#o׭k6'o^_Bg8DT}JT_{(w/?O{&W}G,GOst)'ppZ$?/PIn3}&Si~%A2Av{^.tl/IBaC|ߒ]ߗ{O/ތ%z;t$u=ZnVlQWiԍ8tJKW_o=/b#je}䴞א ##_Jk?[2୴_ɶmR9{gsY5M(oؕ~`9H~_j.[{ѽ3;`g9io_:֙aePm$v3aFQQӺ[}_jԓP6o.-Hd-EyemDfwg5m*?]E<_&? ވoOgl~3L.h=ieT0J>ΚM}u UGڒZYh[۵4pqլo_M^D?OM:jsw=S~MB,jCR9'wdF͈}TWշ+9 Q[ Z=ռGK]{Qδhd-¯n4D͏ش'o;4_ik¶[jvX|=]K*<7l靈s-5Ss>&> xQ<"3_Yjw56mFi4#N*/{߯Mwߊ:.}> ;+A&vbHc0ooM__?RR|3&^2,zMݷo-y2F|q5YE|}J-msnjfZ7Ycsw0O?娥ߵ~f䟛vVе׿߷sY/Cr:|RGl؜{;߳~}R}=:wC(uBM{X|K.8KHG7~Df;_'ھ[_V`~ 1i~ԯ,%c.d調wnGRZ;#ԤfMĞcH[6?y>tO->} 985$kc|xt!%}ڷHpWczz8U7/KwۮXp Biކupx?оU,ww97O~ߟΥ&˅׾qaqBN Ĩy?\s>f~d*K``?T rO| v'vvO._7 s|躿7͓(ITuVerCz~,D$ڗU\A~]Dg?/o޾~gWo=~ x#Lt\},Is^g5O7;~:9rC?_B_rp~`OQ=W;샑?Ǩp;~~NY4.KЌzw6m*.-4ˈ溏k0yv~o~tڽmaMՎ"QYk~GV>6fUs-DcSgzR*=t#*pJw5JϭYXbLZ7^L&g:!ntq!wOg[7nhGx?Sr~I 8<1[ra=&dڲZl_nLw|;7&ƿIXmUYD-&t'ͪr^}z6|qCNM+J׭'x]6(eYo~J5"RJ$SftjJ֩鿓V>=k~uٜ_9_1VM"x~lR}3{+SP>a„WW}3:5m_MW^j/6deoݴ{^?'8v^o\%IƦ&wi}7vhq˥w fKtk庅M?˺W8Muw뭺^tT $7s/Vֿk[K[J;/KXvɍtw[ɛ9aK޽=,[xoOAyk.}.i539MwjVM* BS-#zMd{F?ݯαLU˚]4bY7lu u9 v;Y8aTfR??҈ޯ%緞.",4u'YYfyQZFcmcevm]Lo)i_=HiZMַAyJХE뼢?lᨪWqocc=åx{h]\jv;]?n7'nh9DXDR$,OvmWuXZW AmK C&nv/egAC[f@NfYq}ngmmoOJi+m77*z~#[DB[i\Ʋ^Jn>_2OaGN(m%|ܹ&G#߳mh!ޤTapqb$iO \dTd^ۗ]H]~L~q]ypTMn<Ğ5Ms j:@EJH~n{}C^o- 6mr^viD F Bͺ7.=+`; mR- H| w{ ;>x7 V;}_jwh|bx_7&26ܪN>ZtEk~߭Ϧm.^G2 llZ? ֢i[̩lcxvxSn3PGHfAoWVwy{ԸY^ta_ޭƵan>$HUPSk|3G?.VMo?͉˕-u6uf*4R+*]}2q]Vl l!=.G納 7neow>zuAZK.qӖ>E {:i}6!8bRXٛaoM}}Mԣ5EVkG}t|kCM 6Ug76wS[J,!WX|m:񌩻:k߹'*QU)ݯ2{?]MoSΕ^;~# g$q/?NvD{Sr3> r1PSM}~?05֣<ޥֹuW8dz_`3aO֟<{ RWM[>PO.g(00{i{O/n~z;c˜rs9?S|bɥ}z"zOz>7NzkycoS?GTVNqN?y~? tf5\ocg.ͥaOZsǿ[%b|^{35&?R{?׏֥t4P]]p[ 5{8=GG! Kze]9=o_Ƴrosv78lצ5M6A<PQ8UaϏnIݽt`sGBy%޿V{yts˿Q=3=39FW'Ӎ>S}{>ml{0qsߑ_46*J[_1䓜G_k:6Z~d0x=s{f߭WHIA+]wzzgqWg5&~|wSI?NkW͠c =GONs97=? [&;g}.ꚶ}O\`}?U"U}g.83ϻssUIKz2 zpFLZQgVȌG {f>(R$g?O汧oqv8"OMoz 0'w?U ĴԌ$?_SO5_9&ӣ@GaI팜?qJ忘O;f瑓y~? .n/M:{XR{֏iO8Ӕ;y{I'H:)պ/b4Vy8'l^9鯮m /#~T+|Lw5-[}z~ S'%17}ɥ/ԗEduS۽?h|Q?$1Ojy_cv}/ wݯM,9Oy~?F+Jo_` '#Qn*Poݏо^zz1x毫c6p{?4&ˁIV۷0F{w?szh&ۿ|+>zmc95F<:18OzGr"`0I=<ϭ\geͷeJJ2@&18ϧ?W%z?U gF?=Z%ew-s/Fvݿ,/LVov{{t7vnѓO~?s*?[0Oz9ߗb߻wB'5μ^"*AOoy(Gݜ g6k~#T{sq0{N2w_K99rK s s'=.bSw9O=?9'2GL3}̘Rop9xg.*VV=zQSz⭢ns?ֆ|xwx'.[o6j򱑎p;`X<)}Ek)yn)9V;[;OnO4km_}xw֩Զ٧^~# pwy鹿. _#4Ҥeym__V5x6ȷMr=ݤIq Z*2t/0VJ9mzr~KOJsoWӷSμy;Hw^6ts[mã&Oݴ}/&y>I)AԜ+i6ٟ}РbK{u}(|9Ѣmc7P[] ;YBX#gۏx}%;ߍ͍- 4qJ<λȹgaV! sS1G<03ě[Yn=VסBo=__2+ImJkvi[޴J0G p9b?7־Z]^e k:gMn p&?zYqvERewg4nh[(x3፭X%K wjHh F#nwXsEiTRwO's_0{4Yd{(cU{m̍H̛ӝyoǷynj {{snK0i F8ٖIM̰]'Wu$R߷EJ[ous~%|H𽥏§$Ӿ$ˠ*4mk]mam #8Mu{Y~]Nu붨W],{}8^Zv}|Ϙ< Su:צf)$s,zVg:g$޾ζ? .o}>3,&"YNeU]ro܂ѾMmk_<1Ö:%ķ0]I!tB̋44cf,SVo=<ݲ+eN2wWo~᭵{gxUKsٮmYIgӺ:3&8~מ:v[{z{BGNa;t{˫oN.=r駹=Ac=F#_f\r)V]=x0it ?yT>'*>~ >P4>)d$]Csp::owþP)ٴQ7V{}˹&/?啧pi֠ӳջ'=?.OLWYY\ݴV~xY;?y$23y\M$4ee~_ܔaF`߫ؼuZ|ַj[mjnk?٫߃ Û-:iMWz{$CVnai!t*LJw'6cjrFq:_ mKN5*9Uk9{is4^_Sş?wo|#Ve]-fMC~d:=]yҭ˙t# mџ`RqhZzmZ͜:UӴVj!UU!ڞtmvτ ;K뮽ݝ*F]mjiS=^K ChO&vEg~gt^wO}ڡTqns >++iז2nI6DeU״ SD_ZۭWv[PH]}Ҽc_k(eoS4)|KbhZEФXmʶv,+oߟָ.3TpMMb!V߰`~>vftQm9G^.򭭭oof+9}Xcm0$߳V]I;?/&4_+R%ӏ4l5hnɒfcM'ϧJnO͠g,tK$.NVd=~c+۬;QsFʬ]y|ZNiNuq6:CڶiG/uwH|_xPY$՞MrZ\ZN-˳~gmɫ5o=<shF'}.m~Ch }hQ|ɭl|3ejTOMחƦK{%v⎏g@Z>&Y?̵hOQ2[ #qRo~(i(ku3J}-ݿo="/(_x8|[!P֬#SXd5 JFJU)6>ylRK[.0糗>eL|?-ig& yu04?"eyM7+WMiCo_ߗ>{2y>)[)kbƟSk5ZJo_TtB2_J>rݖ≅f)WK,ḽ]^]pRREM93< ^akhC¼APFOjCD:E*C5>'RЬokw,_*Npo߿{^RkX\$2čw/k_cP撧 ]o?.~XZ'*py?R{o,VKӫh z <ڻ[6G$gw:w}9Dַ~}"kB舤I ~jo?R*Rwzdڠ3q9v@b*OinڿcظqJ7ezU*z}}lC&pv3棝Fmo5ofiby_1ٸUCl?aQvW˒s*;tyo j^%nndO&k$Go>;ͼ}.Oz9jNQoKIu}VN9״ ZyGD}cSVs\kߥ54I%myɗi?vuZ|Nܭoo~~ٍ%u)z'i?(Sh:[M%q˶{x?|&~}խaw~\5SW%dHX/'ynfRycfd2MwnTتJJ+~37 UyF2rkGWަ=ƞhhvu*f|vֻ"}=}uꏕs'4g帅,fF2|w\59. wTwmɞmf[j{g]ӭtE)դU-Z4{ϓfX”W{],6Nvޮ߭3}J/j6!<7o4v?21stcȟfڲj|;it>Yi}|n헢xJ ӵgnukf9hf؎MyqDzت*mm7:};aI?yU+]c?g??loԏ5;?a]%đ/~ͱ>J\F+TjV“-2|fمL5G T|+߹sNh,+ܹEΝimŻIm?3'ּjak_;^Jw}\ޚ;ooy oi|Gu^[$ԓGOeohWG}fS77_]߿CK>e[Cxx~H툆KkMU7^5G6¤ʿXh'3_uۛ ^A-Iku-ʵĺt;|ww7*g}5y1Rqo>%tʊ{ ?7˸?]Ng[XNVM{wGN::j.Y'[lt~k 'ԭ$6F/ToUgYd_̫0'(%.Nߘq7Kr)SkUv]|Zyerr3>k.e]Ia+J5#g{Z[HZ,?~ hr[^)7)7e~2$>_h.^G,ooy`a{އQwo*6.qOT_qYo߻G@yRAFIlN}5NuY)~?8x ǿg܍UFgz; -;O8q__Ӏ}uti?~`A9ys {?_A#hh5VG߷u=POףgSru?OKHwbG]SS߶jUG^U=JIE-zj+r!bGǒ~G1̮>v>-oiN*us xi „9\i__5>![|=Y57[u[%3ejo1cgҜsIӪWEsZ0U-/XCš^^ĺq#κ̏v~)oKW&ޝzh*V]W=ky"[;K;$QU]ꑬO?Tu_zUڣίueh4&B.x j1z_vkH4]^DI'UI ߾μ\V~]?Oֿ=NԴT'TuaN2G$}ۤt6 j沝m};k K/ԍX4^ZwJ})$u |rƧ+Q˿V>-)_\bV$XУXf[y&wXno cNf;=.[_~~-W_İ@qL/nr13If[2L6Y"rV1vqo5OG?l:ޯ^ ]EĚ^'6Gowͱ/;KUMw~һ{6;<+ia)%ѯИV!C:::o&ғSZ>ꑍ6G:=Y]284sw!]m%goq"ygYQ؎b%vPJt{L42׺SzYW0i}N'82[ozej"37d{QnM8?gԧ%u_o_#S\bCL6xUZS ow^ZJmo+{oz4ں믛~;|DkV}=V;<9vk.vCƫy]7cRsc{#xAJ4RZ,Kwqf02$~M$}ɱcOi;߾O}=;U+ԅM /6/t]w¶,P[iBƭedHO $~ewWՅ5S|KmݞJT8]%]γ>y$,UZ|,$}unQ[~-zYzSNSݧףܪwV<_wc@!&A_ \K'Ԍ4Zu.F|h:o{h5?{Ү/|MLD6iVh푾˙D'j59iVͧ^浸c sҶw*ZwMl<59^@,5>kY3|C4;k=#0C/WOU5o=oyx_F0yh[<=8xPZVL\yM[b8 /-zEQg4*}c7|-nt$I|GƑIvmmbrF#yk Ij:Iת仿~V='`Vˢշin5SmjVk&!ivhs#L]>;Wމ9Vs*FI>6mSk'ڧsa98}ρPf֝6j;a%?xwf+=VG-?.IBHwDfT jg^o;O.^ NqWc2Aj^h=|=d>Xmt_ӿL6s/zcjXIi/Pg8?xz߫&+>֓j kXW2I;r2wwkVM7:~n8Y~ʹJ}4})Oٳ]=G`XgFf:nU+#Gz 巴oO~vZJ8h5MWsٓL othmG=̾>LKFc[Q|eNk僴#}"9aQr7Oj].𿙷$~Wo?yx?mu`,6q+pw1F!u6GT9׭is(W_mnoAsj6HHaYc. U\>/_w;#Sk_>!OŪX7VBK:eFzHcܙx]|ڮ ^պߢ-:eWӫ<+V : kfEmxOi'^>*QEuu__/QZoyM瀮}\s 嵕dXF41HDO7Mx$ir{S¯2gw{hsxf7:"ܲC"TWdzxL҆/ynu%|,g(~u)wSppѫ^z=~nz;g۟E~&翖X}ބ3u,4ۀ@篭:۷5w*vg~{ O\f~ͧy'ޣ~?iߘnpSn{AuWc$n{QS>L3̶^l+mcfEqyy\W=;}K/1IR]}_؞-$6: HPIȭYOe]m)Gi[vb2|])^zWOQcJfxm&bB## _vz>;F./#}oۿ˭:? 3OMhQxd,6V ǖcpHZEٳt~gܯm,߯ynOC E*mo}՞Px>wd f qK[yyj2B7^m Z;Onz1ЎCoknǶڥޣ}c68NKt9YVywG'Yr}\g(儗0%v9vU]ǙG'x4+<&MqO{ҡ|fki'":lmQv3|]Gӵ]^z>&+\5Mtw:M2C6fVuNvy9KfpzFsMZ~k2Ѭ0ڨIn5?+6ˆ*I'Wb;w=<=۾[W>zfu᷻[heY˾cdi$rl?]lCH>{֧h~t[&U6,R ֆI7mzI)'\o$#so?? 7N:ON΋_F-u#;6S~w_HΗaZiFNqr{Y?q6Rg)4BjZxd&Frv7B{2%RVoӯ}OVjַJInAu)$6Vݹϗµ[i?֦<y~rYYFBʱ {UDžU=FKvnK{Nnc˱{'towO䶖R`u4 )4m쳌osNSo}=7 %SWk6«'ܐUnYƫoK|9ߗe/ kZv'Gi.M ,-[&]onں|!EK837dXu"Mg}ۖ4Ugo} Su/f}2,“wiՕ! )0lhU$mߺ?3]zJO߭E_ShӻWw?fCWe :;QWSEi)e[z' ſv#Ju:e}|YGEO!kcw ƛ$1\o"|[G'eSVO]I=gjfCk|CF~.\ϥ#Z!vQyM3,?dæ_?WOp>kUXhw(4 H3(>ӽc]4k۲.OlƟG2̺mLƯ$-tM'ͺE"w]_IqZU-j=3B}!oɟI>m0k#34/݌lٱ:V/_Tb]*&ޱӡPA0h|^>~o9{35i_ٞUG u<&Ʋԭn+C8^ѳ? G+Csr8.>{o#Xf3j==];^dsWt[ig_x'0!DEqoh_ikf4Jz<$࿯#t&YKj Y2Ivvu[|: |~)q]^k_6E^[ߩ7uM6~ӯR 0sN.n_Ou]#Pnm2]U\sA˳ZXQ3KXkmfy4u\ۻ忕nXKi&Im|_ag7x-rW6ӏٞL8@{|0جeE'.eս$[[ytzZ\]YdHpsn}yiJVgK!)\;zo׿~?ͻK[[\*wʱFO[o]OoVZ,4_;lmK:)P4m巖<;;UFߧu[_.4m&hYPti7@l7/MU8FW/6"4|AcHbI%Ծ&[uUi%H$b~ץbۓGZ^[-o]n"hD??2yy2//EFM_`=veHKiKY㕗j˳a~sϙ;[bk-cO+  --pHn,'aଶ }u:KJzdAڴilc's-~NwRm~?Sdԗzׂol]iC U=dVڍHM6KKqkX!w3eշZͶݿNzSҡ7WpGLeiE}>OJ9IZ2ku:Gt-nk{-=%Űxb]߻~U}9E?Jy^G<1&ji>]G5>ZIl-Q!ؐQ 6*鴮{wbF$?: r^< rz:Yv4eƤtvi,܏-+ӚIw_;/`խUW3*Gw˵w>J{7ofO,6ʖ6oM*7̏&^GX/\+O*UVo5?Z¤;_U"Kv[ ԑ>Tʒݓrb$,ZdK"˓lExv}}:s:Ab»#ʫUW;W*iȬEnF;҂J xcs&66ܠ tސ\@ͳXݓQ6{ woGTBq".77m痐Mlܷʩ1܊ɸ0ʀǷdљ}_GRh/mנ(mӘٮ#vݲU>gõ6z}ߙň'̵>};)zUzms])}$-xѪe߻ui/hϋ2'EToֶ<ǵr1޾(^2Oy޻ό:QW'Jr A[[-㇓2˨݀x#$SWQW}Fl8c<R^#_dԍքzתs.T,yWۿRrI Tz V\^* ry#>jKww_"l>{:PA{Ժ?Pğ~,}?MI?&*{/G^E97_~ u_73'v4^-]88듎;~֩mՒwj:^KM6k˅pXׯ\4&Rs;k2"W׭ۍ.lQqo̾_~r B\|[u pySjSy5c5;.ܭ $^ m,JR>dZo+&+,_孿_/l7lPo[%MG$Ǐk<^drdO=Sqz#W?L{sG<{ .[8>և4Ѝ_Ͽv9>]JWLF?Su皵.o`HD@B$W4{c]_A,x9?')Nk~?yn_ǡ v?>zNm=W˯T`Ȍ}^٫ѮԮ^cOn~__h8ǟ9<*w%P21x)몷Ԣ_>^`QTݓaA=I~^fOx޿pzu4s1 [:8y*9D:|׿ G?_]T=|_>c׮zp?ގi'4?]$q>T`_SG9'fka:+؛qrmoـ\"]/&kG@9Z9@##Q~}|V_q8 ԜӜr9Fɵ{"Y^w7wrx?}!4n7gy?{qڂz OWqod5ga6AMͽi/q2XiI?_֠4ފ2=RO)Ps뱡YJ$Ql+zبaVW]nsСT syjtnޤd9n 7??J$#{;78zQ'Q{VV[usϥfIBFFC/_t=K2~w]I?˽tgvÉ _?hﶟMgdpμO[s.rrp=.?ϹSw_{ 9sKĢ+$޸?ޓRnzǿ֡^78SRU8E\C8gx'5I_w6TnQw據驚Il)^pO;޳N殜e_,x>a3܅EuuW i*zYWrs?K[_`㧧__zh^ILqR=4ۯP0|kn qOaȘѻmeP?W:¥os0?<W}W:~];o#z?ԓreha ́Y֭K)}]C ^^Κk_޿3tφ7W6]^DF%ͶoV׿x^j>NXwRktYy>u5;=ͷo*z? s<𵟻uvin]c=nY8ݿ׽y^_^ށ]ǿU{O/I>͸=:yШ_qi?^# I}UTe}65wV qJ?sGA+_D*idJ=Z}p}bgwϟyq8֌Ro b1u?sA|Իyjv ]]Z2&Qlezwa5.ۻ;+6_=U;#;N2#λ-/8KKK^|1^{~?)<֞3tqey]C7vuSM﮼na7$MMR/,Xvw/'U5>jR\v45Vp-z _?p"V$f|M_8`߯G<{ N}ppF}qmٝDwl1 u!#=zi4l#=?KPio >sGw%ҾŸ{MʕWOMAG^~>Nppk~(k+ c=NOa$—;\[4!֗<{''~V_* n99noKwМO=(S~<6ֿ{(|=1ͷUEk?Ƌ'<SmCO'$ _XuݸO8痑N=1ט&߿O͈l9ܷ +p֩1wR|#3yc~zd(+j,;8Tɴm}#'9?Z|<>JEV?9W[k~;_MM xc]Yιw i3,~Z͹Kɷ|;~5'Y}ߧY>KWV<м[uw6~ .tkTF'qo:FY}}ӵ~]*I}=WO*x:1N }/1iȃQԮDo4/L,-y6|77΍+ mU?ק:MsGo_Et2FvnOg oKw[xN((n w_~K7sFce Wk߅xՏK˩'A3ɟFo)i($P%ںZԵ-E׎m5qtg7<9#}P$]Ry_ۧΕs)t{m[{l쏦MMZ~i+um1x[^Ѽɥvq^k65dhV?8~r0T'^Vkvo_F }nK5ۧOlX{muHLy!IjUb2+o(S˙k%Uz_JPvuv릿}oJΦPPy-H]ݡ8[ts[: ~dX1p{ޗzG^XZ]4/?_3xCq;M5=@οfE3so ˻}>U>Z*k={ڣ_ [Hiiif󙿉6+xɿ[Yϱ7tӧzևa*dY#r$mWwN3CJK+$7~nCNyu[{XerZ[w￟}+ҷV]:yχ%[:+8 M6֗u"M/Wo.9;&wsiV^jqjݕwke5\4N혭 ]y*bm Zhє{jĞm yBk_۪vߺ|,_ٽOH}ja FF_eey)䓟3̯/4*}_:]-uiø[o}?_{!Oi!b˿8o>b!js~7َ.#|ˮ=rJimmߝ(x??%xsDf%ݪ˵d|缚?.8([>γRxz6jݖ7>C5ϲܱ)v;n/l׎,;]:o/Q3L{}=#Y~<%*~4myigho4T:5*B khrs-?5{=E׶3qtvy46wdF~*u)`ҟ7gT\EX?{mo?A~~?7oc\JWݾzmo x eO3y?"ZGH:ɿcגh獧ϩތ=3H[W[?3?=I2{'@nFWkv=c5fU~=z&c >c*fud^t~|5}OVdگG:]|:aY~I#̟O2O)f7N=-R(RtZu@_ԼU}[Dٸug:|*gM>yyi^}hZ#Xi>? ϤٍZhq;leU𴎭olg$Kt7[-oU&2hiwȭmY¹cT>x<5:# f7+n߿%v5^9dw[fN;(u8 Nƃd-3׍߹k)o߻YAicbb2FnI$};~;x uq^󷮶.3N+~;[}[|b|foFhZoh!a沍ZODg+1nfM߼TKAӷwm c/_o/fK{+keڭ $do7[lw>f(k[n 1aݭtӻSkw?oo)Eo6fo HWof75K/:PbQVj(Τ[z?7_|]*]Ԭ{{!MJFn/%W_IY ~1}ݵocT(IBn>WW^Aۭ"9u?2;d<#IyᯖBKӳ^VUJy'>ޟ;ƚV|0jz&IXUHo{ȿ~7^:RdU:};/|3~{X4]Ws}kH$i#Kv/|1dxRO6u{ܾNⷯWyW: jKTӵ;XWM%K۸WKYv[+坈=~621S8S WO~3 W7lu%ޙ}H.Φ9# wF|ďXhM_eW%~o~ ֛n&p Ƿܻ$e OUIJIOM_Ζׇ=> |~ѭ<ϩi@nlѷJ̽H81B/E[ϐ8[JUbt;--r>vf 7?뢒<ux|ULԄ},JnDڒ4$z[b˽9#i>~XjտT7n =˓ٻ?qI}ӏR4U&ܝt!0X sNv&*3N/౻7(!N00y;ZuG:p`<uIcTQުW<@;92NZnIn˧U-3iV<|GSz4&t{.89=(#?"RLnwkg\o^6$ݍ<}s:MU9өE$Zi"T[iIiz\+'~R7GD$rIG9`G_Ne?{s4OWR{_ޝܴ )n~h|ݱɳ?szo?ZУ+G{s\; NWV\zoMϹN:[j}|05'V==Jn#eF'ΌG\Ao4.DֿݺVS}OvЭa]խ\TkAd[L]M?WZr~:_Z_#F7قK6*.W&}y+ȱMb#g}Ǚ9u{^]ΏB4֗5y"N%|s,-yVhRo"nm롦WÝmqNEr$&d]i/rlϧ&GIskt|o:;.nGYYg)sJ?<>? jk׭=R4G|?țD{?&SzA-~w~#i-ic-RDCo1mO•*-zm= ~O.K+ʇi7Ƚq534Un"4׳Q]WHg,$J|q2ڻ6ksۓJ6>= xsq6ڞI[-=M%|+~Z.+qo/ II_3IMeZM}_Iah-u{ 6RAΫpGmG'$7,%ߒNxk$~!Kh/lYd<Sg'?v$ͫ;}z͜,n/.ǺKU|M6lerԋoG{~7>'|#׉4_:}kt'Ӥ1ƫg$3yȿOߘTpz_;6w"Դ-\j>t:kj3{G;~wzXlEJUK֫{T-l au^jvwSqQ3'{$M̩TJNQu3|/ mJj~KZo\EbΛy~=ƞGך)uHS|O@ lKGb׶˯˦4 Kz yu1y4/t6,mdeNN#+z׷S(Xi-pY[KTHuae>gRr]ߧkNv>ƝV]je[Y&َ#7\jJ˙~~eAol? $AcM>r\YLqEVHc'i&GGXVRV[f|ǟW]UB5u]4>\3*ohãDg˄_/_~F~/> zĩ]CQCkso@n_3.|š޿^Q:¯ x A#Gubн%o2̬7YclEM~+me{t}F}CR쥓O..l?sn>"m=/'^-[oc}&DvO-v7dp\^!m L#؟*JM%'ߋaY7zߩW$wsIF s'ȧ#?8LRhZ ]E.eē›Vݤګݶ|B49}K_sMX͞k{uek'{lp'̬w\)ew-K6w&a̚QJ[᤹e64lJ{oMLe~wz2rw$[k7_֮QO=+I6l:\Kݿ]ܤq7A,U쨿Y RokCY-޵c{t.cl''D,ɻ?n]ljuU[ht>Gyh,hv/[wkzJ|Y.چ]GU.ɸ啒9ˍwy˷ݽkMMviGGӯ<7,6zvk"#OȏGM畞ۿ__~__i>O&<;a ӣXkImI?ڦFF?y5|/-}{GgSoோ)0\۾a5XyrmG$ݺ4˦-]~Gn Z펵 =~eROsnw$M?]XROo_ï?YTZnig-~l {fZ9>YUg/z졍)A]]}pjJ:UwӮ VX淉ml9CܑYWٿVp+aU!)B3tjQ4ѿ=3j@?US(vkFޗ}m?:uӪ]-+6OX隄Wv q9Ef7I3vURj-蟕UO ESK6v⛉Z}ݥϖGFͱw̉'ȼ2\xъj[tsz*ibFo$$a;w_Z6tzdwzE[ ]~wuc,+c/vhx_yy1AbRDD&~_ގuUJsIסMYuukq꺳hזG3+ "1"+K ս/sSLvN u}oՍOyԌ2VݭAj;aK N0J ޲[o|Z}"YY[ŁA Ƨ?^lmzKcvM}`ם:O9GWsxa-yI..Vټŏsl߶?1{ aw݂Kω>0FotUvEffTx]_2O-~gQuׯ]=s}⯆vP-$6g ZŮy>Lo!cCJ={[]rKG>YiSe-7}ͻI!I;9<ԩ.o;fbq]$n .yrHۙsLXXgM^Sw67n<>r7B2 o{0O__=}|e ݮ;Ւ9G4.vޟCUrsVƫ浽}ɣ4y^rs3IZWn.?ְn}~]tӦIGo+g7|F5}Jtz ڼpYAu^+{zw1a_6< 85ћG8Y泗_:y|#(|Ӗ߾˩vw/x?K/|e|[i5) J+6.j7y#(Ǖ4ߺn}'mBTnZN%$WU:/Vݷ?qviv.*{~o~_< x؍CF(L BvU?y40$ZVt߹|=d06Hʱm ,.1\yry'.#??rJj7ܾ'.Ϙt߁`l6%_KùɞOcITb{ׯ>Z"6MޠYa6i-ÿ8U'(ƋEAmm@ b#EWwr_c_A+ -=̓ 3 dq;K}GgY鏙|UFXjB[o*Ȭ?Y)Kv5&~@ &_A fޓ%Ŝr4p7YJ1]o溛-z?N]^Ǭho:@#yfW̍3lk=t E[ bQ ȾP3vVbv`ck EeY w3oN[$F=CQ7vB$ݷo?+R66_ o:Xk>mQZ'6u{as2(+yR{g{܁goD@ J2nS3ᬤgF {m-3ӈ\ ,QƤCF_Is_T{~,rvamP.ݡ606n)om\,dAӟqW_!tpZGP®|VnRZ&IG5yZ!vGI$]Fox5*>tIo] M6z~(iZ_Imlk˫LLGfžoskpax-7-?)ԫTwo:RMê*.Hc}feݴpZ=^J(5g|3xZ_LiJr4>/{"?vw潌wC׼~/>_r:n⠩k02{s9kN Bn?7|LTF'9=};>[fpq}ƂyT_l.9 >I4Z޺{9}t(k_[.^_G'u Omw` 9ZJ.oV[^ר _O]ۗmwpmm$_j3+Oh˻&53J8T9억v;6ӿA<-%8^]}ďs*XUTH_fձdKmm}{ybW[qW jZ_cxCKoc4W햪2s*}\kw[zQ.7۹O^ /`|W%׉K?>`|̞do',r+p(KM?mwy춎*?O;>dԼ?2^IoC%bC.d+>lnW zy_|fea =mNaմıgo* zЭ:/GקwDi3RHdwoZs NK_Vp!*{]}pbow?2}k8p7^MރťwJ ]YH6U/9*a*Qvm׮{rA?q]{nrvzv#~S<.E}ٴz\։T.HM#l{o RA+miFTǟ9'}60gߟi%#M~bS?*yϧȓk03SNjseJ <ussOe~cJI<1}Gmkk?]۷ Mf|/ 83k.yw6|p''}{srS ;t~iFO$gg=9ǿlsLͦpA-z%$ޏ4QW}QwpNm7x s'2e.aXߜZ2得_>~;mA:y9_]~ = ןi1w0 '=} }_e~_8nV{&IfGB\<׽'4rK`/nM#E7ׯ!E${F_`_k<{t:;yy~zxk7&|uPc=Ѽ7kY,qY61ԍc(/KU}ov3e/J|j_.NӣXx#-֬;[O62CGvzS )ޞ^hTp5jB4u}ge;VPbFf`7uוKs}5i1omO k2ic)1,ume9*Zl}ƿqZ4{~7vWi W\:itT}{w_|t5ݧfd4qN}_?70ڴ#)A{EKAHe7y޿)ZLo7tb\>W;˅kb:8ۚt4o>Ŗ;K377@?YվV1X=T*v:gi|=OCqgmyw>>h]nJ6[M;_ONO>+)}e۫ZKA*m|Jn]zkﻭ#o7ғB-!i=̌6edUmյ,exI*r?-~ *(U#[D54&4$-랝q~Jתx2l5IYB~_]r?'?3|W5,9߷ݿpCMuoo[{R{[]QaE. ;6ݻsW>(<{}?͘JRv[<-kn4H;6V=kGrRSQ]gM;%~kZ<^4vUkg,X1ea?>IT|Vm|cܒsM=3tBrLVDv^'3ыq+invyX\VT]z|<[h5[r{mgƫ'&95oViN-r_/rscPA\pC$6MϡIZwjPU>h{^G\ͨw5⫻_'5G*8Wg|7N5Z1zm.3$w q}~e E*qv}ߑ'SڜUFUyܓ}VPoWC(I_ߏG9?<zfy"t_7RCs%C1׆B?3Q'K9ڱ@jɬgi|CZyuIO}oA vhn]>#\}S+-yԉrQgە'Vm/ևkzv>^5 22G#ժK"%?w}Yqcq{}*<[FcGhۺFEU%|Y,$]CK޶{_ĸ%uv_]N^+ n4l{9T4S#o>^kC6}}'`{>zmoV;9.tu6HL}BOx{5znt}+}v)Nn_S F<{l#D0HvEVr_-Vmz=Ko=WNOumws ~#}KLxԒ#&WiI8ɹn{p9J~͵{[m~4qԝ,˫.7\[IU+G~T+Ӄ;}?9uܱNI<}>nTWx.*z1'c)'#O/}89=_WGB*8Qsy'{lgOHoou~ X1X.J|[g|"\GldVzߺExWQe+<,U$n۟:1N}Μ Ⱝ8.x+Wͪ3ER͓U/co潇Z1\ʣ;yu>y`*n83a|?fE6 q-o;IM[|ue؇\r0o_zP.B*][1&YXcko˪hVWԿf^' Rq?[rNOJ{WO!9R(w¯nDeo;{1Abs=I9|r`'e)MX'~v=%@O?6|-|eAMӽZV@8r3zkWQncaoIZH3W' >k/C>yBv+8S_޵g/ՠ;.NI jvV}ֿ=wa59?ßh"X{۷A}z|0]XÒ %A#=1J =vSĞ&м&ZeR̫q:*fXUͻ뢝 _5' j%oOv<~qM"ŶpjZH MKhۋw>i,NZu+w[=|Judk~;P<';? hY_Ie b|&/FJEew|続[-Ui+m|kJ/nB6[ەi>Wm]S5\]NxeX\=OӍ޻'yr Л˰0k66k~}wS.gc%'exG^S|Ktȭ۬Ӿ퐤.6?yOcGb䵿䴟~ \Fӭ74-{n\jj*-nLDG)t,eiMN 쓵Z֟$_]O|?KY%D'^o[_[+ľmm`[gPfGo%sRtKwjDkyܻճ߈4bh u<ѬP͑"%[g?I'GN:N]?hԺn~s/w;$.ѭ:uבr6㺅oMУܗqX EJJ8yC^,ThM)FjozEO|]]Guhfd]Cݼ;O8|_fnݯjy nR}[?|Q|\s4!ӵo{i<;ۉϓeu(jзw>=ucS5Xe^c_>ey[ix((vUUs䘩~XzU'$u~֫Ϡ7C-0Ark$m~۸~=7}e۷S؍(GMWzScV5MF×wm@eΏwfӪtGAaԦWz4F{:m{序;6YR$5ْvi]iKUY6\ O#1ua|y4^\Z^Zy}xSeۿ䟶7uI7ڵl-bӭe[[}>_\W} _?_ApcJT)T[68<<ԖN Ioכ]~g{GyIhJqkVno<{],m >yW pLe,^eZ%vaZzs?[3 oXGaVos]}˴o?:4km{b5mgVksLFyf߱VuaS*\Zu?6f58VNNnM|imwgtv:\>yLW&g=oec$HJd0$O)Ӝ#VVn}"{.~_2\v[l<ϾeOWoxųk:'){mLMj9Otv461[̈$;}GO8˜?z4ג)[ p*ՃQNm=vSPŤc+M+Lf5]>Mq"Chm8_xwn[ѡP:ZF)-}-gYtxx]x^Ű]fOmfwM}"M7S̶)m_ٝYI]/Wi&5{-sG[NZO|ho>O,C18ӄJ3VgOCSȺcihdlr:?uU](&ݼ[u}Wg~xA5嵗[C0\[Ŭm\ɵv5~6C^yѺI_֯Ъ3[ER[j~wRK&h{_XlVi<twD.wNmOg\RwO'~+$.h,Ŗq宣3'4-_/w4ɇWR+so[Z987y|V|"~KW:/aj'LXIq#,[vVo.8??8{'R[z}޾^G/~]d$#e7H^Fm>{HUvURP_ft]Z^w\HŴ'&mBwa2/4_/2ߙ~'|:igVk-*gkkOEl55gHYm>Sz!XEw[0uӚ|~j\Ai:]532t]w !x&o&Amno'y=2צFn'UJ P|,g}|xsÚw4? Z_;OS4wGڦ} ߻zNW2у/_oTG+צhu?I+ R~ksPKmnٷaj]I6't0u=G:TZz}]xXf[h,n` dmʭzqF{/M?M;ns"Kkty#ܰ,O?ruoknvk?g[д)c_j dyHw~wʳui'>OE}G׾:-k5O5ffFTf sv_G"Ww;){^]u[~i~2>,|Huf7Wb\h63jWK{|JlGI>ِ?VpE麾e:%m½&/&dDfk"X#fIؐ ȱUe(k릚-κ.}κ\tOx :l=χc/r5pBwi-wGGy>wmu뫵z5߅uSd ծ4Vt@syvi!Y6Iæ֎H3fu(\w_e Mۦuwou x]lxD mO&mЪ~f~MN[Y>xu5_?񇁤y{_ejɦkxlynB|#?sONk֋9Y;7駑SkV*E}NgktB;PY}NXla#YE^l0'}YƳFq9Aݫ$Xɪo 7Smc7RYjUݜ@,2,.2mXc€sdjm+~{ܪTfUFXq?io{4]wD~ ߟ ߝ~?r;1$@0rO`7A4GO}?>Ap$x Z>k (x6ϭ~q K}O'Sel4NOwV3G~36=g)u8:%q#]+sj;~G7{)՗%v;y皾нj&-xn:%"ӤY=5̴yvLr [x'ΝT:򶧧GumϿ{_" {J+U E ~u,[Dǝ6ח':md_sƦ3hEhf&&zuy[]-t Nm|h_m"+>p8~tk7=Cӧ]GwvonHg*vl~'m| Qݻi:7\)|{ǔnw}Փgo_͙:|!5Эqx-<1,qȞbM=D&ҾH|;&i~'t)2yyFm6Os D"w|˝Ϳz>gԴ,Fs&ۭ'V ~_OQ}/?[Rqu]t>x[ƖxFV467p?dw̎]>GG>5Uo{4׋.|xgh'izm qm~ZQk_Qn{}ş*T\YK|mull#/w68wȓCoQ֬ݕޚOC؅Dz֋^xO]ew][PkIjtFs8IxͷgnRvwnv?*/ `bqjy]qvΟ,5R_Uo]*7^kzVz\c ȿ>Gˈdv$.J#OXYy*J}ϧ!76s>DEw-u2*,;M虞8Ͳ=U)Q_/͞v.)M%HY[$rN|Ri74Bd(ۿ;Idu_"|r]uM_wo_FjVӵXc[o\Gc3>}T+cxkc_()41,mn_;8G*iM[׽ysjJ+__{6im\Gw fxdh2UxIeMgo[} Y9uze]of+27州}jYzտQ~"m<,çV6Z_-dvUv'Ͻ{渪KZ$m'ϥV9xLƺij^:O-U_nT2w_שk~^^w~B|O66ofcDV89~Oߦk%--}}o4!KžfTX9&̥̊mN}KgMȝv_շ~}^1|[[:h QUf.m#4M'}Kg9m^aEn|e_w>|A_67|?x`\I7}I6,0˅#|;s |=(srmڵ?+E:aB4K}sI|I^g>h7uqr ܑϿ~w̺nO׊O6"vOt/.#oMb{eڭ#gYaoyd];gβeUeTܛ}O*Iɫ1j}>g^,w6a#ۅeeh]Wc?r9_.yEN.q nrOu-++ꕷJ2oguwF'Lf[9raO2L߾m_8ޯs/cq [Gk%qL̲I*#mq#} ]۸TZm|Um-sC$-t8kx"~gDkUzۿ^-_|ՈWJ攞ܞnab6זLڄ;]ڪLw.4R{J={zT-oջOoᤱlnE4. lhno49w#;y85m~yNIwPoOn-<]?Ckk <瓞߯(mIdSrm4PdJ=5ѿ_!qC^^`on4}|jyw^MDHPl{499n]88zw{sq;T6fO,x`}q#^f-//|'G4nݩ\$k377?ۮviCFrZLCy=䧻KWo>ӣ[tGSHRZHvݰ5 >ē{o<:cu}ъeMߩöI^ަ\@oc R$P2ƪ/{|P4즮nz^z,3텯o.fRȟ,CK[}sqz'^|aWiMdew4o}oȯd7ϙT~^ s~?Q-f+VX3.u]P~_~2>.մjV>ܯؼĞk>նfȰ:~,7iv^'Y>-c=b~ 7fhٗne:?]MƒW&p߯:-5Nͷtm~mo{PW$ u#Q[hd8gkgvJ`[{ KHioU2~O `O~ޟ{w^Il_<3̯TAvU3t4Fmes-̖ 587^Gj4#ݾ|+ѭ45;ZںC\澺ܱèG+$l"\?\ueq}xŗkZb5vID_4l\\F̋C~H/}8} ]?S[Gfi3_M?ZᅲOvt.do0YWݻnyEv]m̃4Y\ٳQ*Sy8߯}>: 77Pe2Ȯ>'+VUi+{zߩj4ֽ-~cY,[z_;{evx(";_,*,hM9-s˿^FiSe*啗n^[wA.>FׁeЮ-FEsw:|gHm=-=zz6ffcm2ZjS~]>XX{OߏNl--,$oY}Ͼ:b׿o.^u:MYF/3Ѡp.p x'W]=hQ;|gޟy nb=o^R5檬?ZERhpdTAͺ5&ze_ݾPކ:qvO[[C[Vm;RO-K8T<}JC&omIuzq_/FE4--uԵ,iw}mnSY϶O3Et&Ҽ1 iWڷ#Bh̍]/KbIk?QO-E`8Ss3|"?^&Rrfulj-<'l{w/͆EU'0o5K#@(?w}jMv'޶fJw- Q__?hef&2}s@31[ /.ۍ=q_~zm5֋g}i?hۥtyM뉖Hehat؟6 75ӽk}u9>*rɦGisldS8"C2l]6cdJzmk4gMvSk4J4j2Q6,:ҧQY TZZ'guM=۩+ēMrwA F]_z7,F$/~m`%FOoνm>?{kyn ?u;}ƍO8?ʢU9~.u_pʬ_w;m7SR:}o$z.~Zף}jAw9d֌yO~ЩqŹ+wmwhKvhRNʭoί&Ji/y_׹c#;ֶvk_8V9^V2qn'22ԹSu5 4O7Q䟛 nWIJVmOZ_xJнdJ*wn]f>?W앹Z{Z^2yÚ⛫{-uW.UL;v"۟tar<9k`im]Am~rkaۻ)e#ݹUwn[Jq|ҕwG/7?_uW$ͥy`wYs:myWJS}Sxjm|7yUdC4H.*]dvQֽJw]|SƯЭ9s_To?ڦmN@"oegI՛U /ˏ/z.o*rm[Op:qng'  B[=tG_f=[/|/?5}Gl!<Dg#a*AIK7ߞ:mIn\ae{||w?uvN =i/p}1=?Ͻ;Z/lc'9tdﮯGo9ʌ r_sIw>kwcpտ.q{R0xg-ѿ =X?VDi8Y?_|52j%{c9h׹=<3*E*W~#OQ$o0o'<hy=l/z/O5K 1>YQԸMw*~~\i(jvʌ[fyC2Cd?UIsYcaR ֭I7;mCsiu_q3ϠI-Z/bv@O<wB[z^jmo?4Ă-.',"}W*(}}/W_,#Rq!{==/kϫKvelHn/6XI#6(nY3$X^?~oC?Jl66b;o_]/fUVo~eaԒ}:}]|GI;8|d__קϰ#qFWn[|yOh(]o~w}=Kdvu֗͝kϮZC t2HV5*ӥ5^}M gnWnVwm۩0̰!Y?ܛUVt*R^ǿ} 'yWnw:7Qi;(;.r?>_=y6:>[y+Fl&64m'yo&O2Gy_?DvGi[SZoHLVD괊_j襏Te|Φ_Bk{GGAಾmR `6!0 3r$Q4X{F_֞oϿ@eq»[}6 TzT]Y.خuIJ_z$Eume86w:y(~ͻbGMwtRwI#zβ1':̫sHѷy{gfDPRI^~S{]] B ڪƒ[͕tm>_3oQE]oW^} je̖ ⅖ʗz݅Yd,,۾l+ J/=5z}2E2F˗F_\Tԃ\^]:eN8 ?WiH,Ƌȫ.Z#9bly΍:igj1ѯY?z5]߾eVW޽Nx|ϵ:fOlh0/=7Je)t$q< ] v6^%.ݻ-vkΆ!Nئ[+g{ۦ΅f_|ey\]Ӫ3Ws*Hԭ`u!z~5emGԊ~kKM'$In7 54sVOL8'=f9a+smww|mKG#ױXixT{R2~]mުrO:ۭ<]e:pHB:j 7 Zҕ㻷N=Ԧ\C/ -&FeUmU9Qӏ[_=gc}2`F,NY7ͷǟƳxo5P [Ok{IVuܨǓqM_E1.uJ߻}Κek?Uᵟ";Ybw 'Yv?wmBWZ.ߥԕ*May2A"in!]壑u2Ƨtc_O*PkMmme=Ļ[}/ר-aN !nf|V [C ^h_l^ pr+Oeֺ87sSeNiJ޺o~=L]lYGkgO1ZL#Fe"q笩gQ[_O-;yn=WQM~2yej+e$os k>o;w:9_dkG N Ր;ȑgo\4Uٛ敕zOt-\|7m)riޕ R{`\f>oeoY2-zrI'8~م[M% 2Ư*[>Zfڿ.{W} J~˭_:AeUGmﶺ^4Gky Ǥ4P=\4*;7׍իQY$o{3|uI9.^Io$-MUj;_NUq:9Ѵmy_lfo+zp?ZR;}{>tn'Ex!ew|6$)i/5z˄NJ}|w_3ЭCbq#DlB~fhտ鷠?V쯷ϷSާh(xΟGѧJvTųWYx~,V.%ٻSڡA{_dkf5[Co"+_-ɴySUgqji~6w5->u-It~go '+Ymo~XJӚ1{n{wa&q:D,Dqƛw1o5TOXʷ%ͫWߩ4sJ:uojzF-V5)1(ԫ3)mo}"g%$ݓyy؈Ty/==?.t 3"#m˗Z|P[~xJ7]/14UK+h]F $Eqi.>,FgIJvmu}7=Re5ܼ^L Wԍym%6:yj~m7#A9;tCpcZ97_O=_/Yʣٲz?}np)_w=JwI6~xFo}a};ò_%ҴE,V9|>sw> _ *"/ɪĨ<ﯕ}m aHhIuZ~y,'gcoo>Q˩J5?o3{C%THbS*޹Ҧyۣ"a/q:dLtnvH+|7Jޞ*K]l÷]=j|7Oޮߣ#lȞ嬌&oۓQ>^v։_N{uN_ċ&޷]O׿LJ_YEẄ́ϭ_-xɍٱ;+c'Nnj+|&B knz7wg{~)R< iFQܲis}c uҾss K௚"IjNWz|}6鯧_3ek3^cn5X@Ig72_/ddYE T=/xvL%(vo{|{+xi9 I$e8 ¿{";{W}$۵߱Yӭ巁D%ۥ*"Դ.KOxUa:tv34jn&hr4Yuas> m7QR̟/3HNQwo)I>yi W}zV1i6.o7Z\ImBow}Yi&Izer[/ucH]KYol>饎CѲ.hy27J+]~ڂv蟩%_ö5ukkFLỺB*$+ڏy ƊG{}&GqRuikeSTgvapRqNk>͵f>+J&񥎔3]|Y KsIW{nk;]]'̈ %f"<~Պb^JWѯMBr\]Wwc==MxZ+ᖼ:U<ƎȻkdo']m0+ӥFQu]Օvwwdx8,;ZSTb~g᎜i>c2y:jϸ }ao’F5I?S1*Trm7lN#edJ%|F>=WW>+mp51s/igyYcGG;g߯ \6l{/fi[;1ͯ꺜ζpٳG$631DGoӯN%MƋ,ml|Kɥ$vS$,A۽ww~0N|%|K}+ɦi psl@HֻU T韙{Ӝyd 0Mwܩ?|S^K4M3GR_[mۤ) oiw>Nr]Dݽ[R+-%[A-΀mwԃ̸UֲZז6fx~U瘕 $,cvA:Mϕ>0E/MoK[ɥç7~!][j03M%WCm :4_ge%7%t+Hmᶁ4mln;us/j2[#%n˱SRU5odn_u켑u9ΊvO^_W kMInuOn>_ǽ}Ӝ1[=mcawU[ף>>|q?L,%7F{oXhRMH"{RHn#RV˨SBj7V^~g!%өV ۼmߏ ~Z vixR5{)ʕoyvmdY,S04}4gUof;4?| biu_ N .iY.v-;C/ M߽:(UiɨvӦ=ozmgY^!|9qꓮ͹n#P>Ȍl?$~uW~[SQ2K-!ukHM{eoo yTS'oSY~60>)j~&%^n~ϑ[Lp,4ph7Bʲ2!YM8.kGo5ߧz{N4=JMIbN[yakY|jb3~MSQlIr璘zLJz^FlB,˺ZoT7ڹ*^2ѿeE&zBx~."B;KcrۤydcSϞOtw{}isKJҗ#j3|{tr_EuikqC Mf $6߽}II۶Եe}Nj'`hlammՙi?y儥6^[,7 [ySnm?WO0Ik|k1C{lSԮ1ĊwYe s#gl{׭J?9\ݜ^#5i'7Q"|ˣ$0v?i7mf۷*SZ-wFQW<)? $`ӚMDݴlk#Ei"gcƱ筪R4^v_.,Գc:|𾪚]࿋Hvt$kqy䫤vctOIbP|~SqkU碵s{^毡xD'ffK^qimiU >H|˚UU{]9P娽mUwOb/'yVGy0x7ۻ)Eݗ=1_s_B|+{eq!&h{3vc_KVk&f'?tGfz4043Hϳ>cWͿ>L迗$StoACԭtzFTO)st+u4%ۥ}_4J7{7^8_sM5~bӴ=aڶ7C-#o1q~Jx[cҥQ υ|+$GxNQ͡pNIww">ϦSS'Sd}ϓ{_ǻ=;\¾>"ԮtbS [)\4776>Q>J槆jtmg3ɾ-|N4 ._[_Pԣxu6%KK^WxFکa Go~G5Y^rϑ8ϭ_dZ0w5X&F~ /ҼGs,OĖz I4p4ړŽ|xɇ8A75˻_j֞|$Ѽ5h.ž!\bӬ4[dP Xi#l7{fr?gmgXz*jRߟh9'|=hO?i6o]^9,tOXgk}z&y}`לAM>krMۿ:VXf-imۥ(o?xP&[5am1yl,wp͐cjr즜)>ZN}bSմTyz-mtiC -䚆-6<}f =m>͉7#K'%Wjz캾Ǵc'm۲CB3h:W]Pċ,mnmn!hᾇM/&o1?ɾkp>tR87Rۦ؏aNr.I4j}|U<b=MfQψ晭Bʪ>$ghGm"L*¤'BQ:qZS+NuR5*N߽絽ߟx/'֣x9a^DAٗDO.-G7.TV} qӷR#޾|<^TҭJI!&k8d_:eVdfG.O.Fb?BR.[W:tV[>Ãω6F}BMH v0IwCjl}{~祉{zq1>x LE։]^?7 $[ٿoz:599^_W=|KwiïCcj-1m>ޏ y24og?2O^I{Zب[N~iw h>+xfme##f)|O\sz[VܺSJTjX> &_=ޛKLv_j4Y!mupՕU&DtwE9hy꺧-{4-FmmJhc숫wޛ+)Y͞(/gw+V|'>YM]gM;i.Xdm"{jҩD-k~+-HӼ.ųimVVdFI?wgE_]?u)B%u^=kYMzºikڴVV'K{ClS^ۧ++[ԡ N 5[[x<}g[/|1ܼ{yW)4_hey>Dѐlz'PLfa/ky߯x̺WiЄ=zr|./z$6Kp>gۖ?꙯jI%*e}OD|703*Sܕ;muO8V6|Z`Yl#mͼsU 6eu~^Q\ij'm9t~|R/B2$E$l_k}{Ts*8iTzF+1T!Ω7A>v̆gzWWZl~egzyn \wq=j~^߯̌ߐ.yz{֝ӹ $x߯u2?-T|ßsIt"чF lg$];m>O(=yW_j8oVsZ{G_:Mu/}[Zu{[KIc(I.[oimT Iv?t]W[mQ<0/bs\ _N?3cOhPӏ1]5}TDN_CD:Nazv;s8ȭmly+.^ZZ//" jZ奴k,PI<b˶3bۭ%&Q׿zǪZsC#&%!3&P}}2z$cxb,A#%Xk*\PrVyV\x³ؙuxncPg$2}^Tv'ww֜f3Zt^k$RKw<-s"3;\\IO{HL>-_~Fs+CuN1-^5Moc 28d&xw NSc-_37-^^1i[ȵ__NX16+ɉ;_9$xSxxʼN_?&rM}(5?s١I•\_ ԠOn{;B>-'^Kmב]=_qZ6⛸5*8VMWfrm~7o xAvt' .̴GmZ6ܲI l'ߍrʬ$Wֿy[Kog`'[m>hg7L%ŵռ"G3,qL8? p(ֽogw/> 񶕫xzU;KFy5]Ԑ#42BΟ:ovϟ暴&hu8Jֻ} #Z$~5P,d5Iܢld+geޟ|Cn\,Lo|w.ӳ'}&;]7FΩ[ּgxRO|6K{i,&)\m̆m|,WI0):R~]}; :&ˆ_$t8afV]sFf8͈?3Ko骔]y뺾 hv YshnۋōwFfh~Ռ&֟3{D?'ɾ7zxw4}Z_j4bQ_v}O;X׆ uXAm86:OwG'%TU?cyEjQ隖{j#Nũ[)̶WwbGkq۳9/i"|Em{ZgeǗsHLK.[nz>gEMeƿix坌nym#4/DTٕ%.ky\*I+y},(oh5&I)}k#41X7㳚eJ15Moo[zhSPS<9u^&is"6ctc[}G"| /oU0nq&\wf6OZe UΧ-_^S)ZN~o:wޘʩOs%m[35|29-x=VwPOo=_=v2X w=&}ZMoH>wsܺԖ˶fIdMlOzyn6q}Uc0Qppߺ~+{ZYF">ۧ>h݆hdU;ӧ̛{xBVqAklnL2oۼ3.":u}c/5VMz|UFvoWKߣ(~Xo4N]B jG2/6WK4]zy=W;=<9ı8<s^'h粷btiF 7CL8?Hx&ݙ1}yvO۩󟎯 _xcNo3[A.Ow,HG"#+otqSIWcPw_ iniZy^eR آe?x^bLmٱu-_+inK~,҇{/-o&mmwRvz}oO2?yzZZЬP]_@0Я[w,iF_,^$n}:stݟu ?ks1{iMJm27#;{VřM#U?5_JRkf5FmX؟w|BW1澻-Gj*BN`ۇ~}{|V[wOiNK+~4m&IƢ19-y}CFc|`m?/}o=#crs򍾿1=_`]Oy]ܶKg?U99-~WOPWAVV--ckٻzimkZ?Ÿ[DpY鶁U-8a|~g>J')=7)-ߩߍNvߟ3:zHP?-xV>t>fV'9-kM7 EZWׯ(mʽu6xg59|Wu-|C:^M {9kxaS1#_&s45ϓߒ+=zbK?=uNMua,k%HɎY[{-$c\Dh>%<_]3SK䰆kke`}SeLoz.Q?n =%h|`ywmZU=g=c+1B @weuږzkS;I=CgB2~?OYv&nɢ[][%[iK"'UIo}GfM5"vXFVIwiRߴtm)BA>:Z?=Kɫ^ʗsC5ɽ&2/^ϥ+\ϱ8KO{O9;]|5{3s4b +E܆`t#֭j6P2rg$Җ=R_;[m#DŅch!ӕd+A'Xv.\U"_!S-cӤ֥ 2CdRlr#*4b|9;%"u忕⟀uh?J9\._ٻXy=^z_3/Zk7FNkz^q<2ƫw| r艽O1]wL닺O{!.abi..w3Lr;*>gGH.~ϩ)vv<c~w)x2Z ĐG̬۸ܟަa;˯cEʝ?R9-.٦:oܿ6]joǛ-^ߡomo2X9j1ڛ|i ʂUn = 駛Oa\DIi'ĺ'a%M<+4iFG#n~FަoKw,k?o-Mks\WZ^e3M%FgCo$lc~Q_.nVzx_w4'U񾩭[[Oj28!fUvI-ow{dO8fԷ~F5jIwtx'3xQdzMͽ^l+J^4oRyp$wJ쥅IiƧ}<{2߃π4XuG~jw KYnV?5>]Gty?2R rIinڝ>m[[}9ڞ;udɒVoi:+[mim,ƇGM$rymLLmmm|cԥ.ǯ[]BMđjiܦyr}ߝZR<81/XUPo_&ݭ./+fG~n>oۻ5HVi O]K?xS`u'D(6y%>_Ffmۿҡճ寘Z]I%ϙ@>}'lϱeҽ_p+1kgRѫ|_:3:kN,62r?4{W霍忔Ģ#~R{[ jZz^%݊m#.$v_<[ȿI?|&2Q5m gsVv}D&pƗO'opۻ6]cd>D*MJ+;kMܼROIO[52,Ro]kQ秩m{b[<ɷd3fi>m7nօ;+[&q>IZ\<~}eEOwϿT Zmͥ x!R2c ng_.ޕoIJ}#"6V?ߊ]PAbY$;vyl۶'РVs5hӭf91Eߚ8܎7TմEp?.sm ceWm##ϭLRߗdEumkX+yRU|Iw8H43*֤=-lN`3cympwGndf?7LZK0-kzOxrݯ浶3owu$>\6r(gR3>_O/;!zg{Z[U5.ohI=M}C-nѫnڐñs~zosw>7ӵ ySh.e aú;w Fߥ87n=R ; Z+W"1e/Z69Az>æBd=2eUU/>ߓ篪ȳR-?xٞ׋j>on3ԆGT܏7U's_OhA5 oou}5>{Tsk߹:'ëa9[ŷS;?v8kOzjf->GPRӾ/ʺ[Cd87;~~^6#Zm-^!F.׏{KŶLӯARm";w^/MNw~]] MY~7\_ùɥ^e)I]79=\=ovyt=2kpK&Y7/5rXw-u8K%G[s 5ž8=̪HY~O|QS[ߥt<%7tyu;uOmBslbcyfN٤xW/3ɐ7ͷuk=:t_8 mssk/4AN M 3C#;ʊ챏GiE $hv_>.u/z.{ o`?mݼ1rH3<<#|Ww23kO͟nKE44 ;IX-buXKU痺:]:!^ԫw: z>cgos \+HiNNl|)uoQXju&KhnmZo26y }EQ~>Nh/m; [2_pN2[m׮beS@;e/5͏yʉfrʅQn(;Lfo X^CX\t<3Lowzq)Z?39R-υ2-lg}XLs}wkTzm~'5<_ŽGFFv}˳[kme۟6}z0q1j;K,myO9߅}-N|ܪ$cUg.O^kԡ2Is^O[<oo@"knufM>q&mOni>/$t.O9O/νm=ϞOپIu鯫2y%.aF/~7i9oK_,<'ʿ]_gL` ~wW^zږ>{$bh"G;je_h܋g#eGsq'˾Rw_OɐFع!~rJnr^[}ƴpU'5Fu~l_ x5 ZgX͔7Iy6rTOߧ>pRl~Q#EH+D+#hcnWlez_wMbsO'O Tvy.^ af*K߼z[V1of~͝:ݔ&eWYmǗI h55~=}O:porKsϑMq 7 ҉O5e)e+1R^v{>{sR֝K)ے@|Ռ-bu>v BV?ewkK~$UmM?쿧J36e`' 1oU^Gn*JQvo_{|ih5 E&ܥMm]3dSu~6>/(JR;v^Vj.a${1l^흶*z񢹣'o=7[Y_y=ox[qhJEv\Ⱦc/B0׭:pmk;L3Oq VHS$֓7Я4զ~)Q%Z5߯ou"^ocx_QuqEpf').c;M2y<*CJqKe~}<z}Ou^m:n@/qZe-2H|ٟy\\va՝{UZxkiZ\jw$1G,Ĭ?ǗUI9j_S|߫}OU46A k721#oI!oݯ'Weq}VjOM|\d#R^׷sؾhO7t=H;\|t{YdmYr>=_ף;AveyY/g? V,PZʳl3냿+^ɌY7OWoZ(,ʬeHz4=Io+du9VFkY!Ue*7s](K^nop*^ۿ~;? 9Y]^kwWno|6os<~|&ϖs;"J^K_OERiRti.|̊sg؟ni{{zq]T)FN)vWg7֑oש/[W?C8P Ήsq__ue]lgkw{BG14*{&nOЫnܟq87I'R" ]l׽duτI-՝_d{20$Kmu 067|r+S}_zuZwQM׵}W$xm&oqg#nHnO߽+ҧJ~eu[zs!E6T{EH[W[ϵ$$2!X΍X[F)-kmmq["j|vl%,O!ܟhPN󷩵+zǗO:2O]wOd;iPYMyJ$U߳ +15\3n~K}0X=y+~o~_KōśF.S(3C{N/'zy=Wtw/_scd𵌷אhRK72~:sA]J?ֽ6w{]>z~SS]r).h'3$U.V21ZSg)6=`k*鶻>7M٤fܮn-%g_L=YҒJHV[,OgRRJ2o*j)6;r7I̒\/-VID xveoףR2Is7[hԔ]/_\<9s]š宙-ܳ)FOkGnUrU2~턟m_G#m "Dۙv=v+m_G1iqAr{#/w^tѨ]}m~3Svx|X"\jvpɪ/,N?uc̿,tMץuUnVtG:Iljnړwyf$xW#'/J^IuN̝.܍j}KMceP"[ˏEb%Q{ۭ[Wmw;kk ugeM[u~Da5/gh׶ʺ2n_fUk7d+]hb6ڤW1H^8n]űVJU Kϒ|QrQ,ZMZؙVU}BG${bfPiy~>f8HԪg{6w6F[Ku+Funw#6'01z#L5%G݋}~FLjo> >!\eBne*lwUםK*^d譊-ʽzvޮmkqiٕh?Ay2|7jV ֕8}OS _N洷[[c^L[${d14|?P9_O_=6.LuƝ.!߱ev2R5E2o3uW1yeWVts@7]喽JM[SI } ~H̱YKew|7Į.vQͅ1Es  n>rF˻v{jKI+?غOmڼJ[2C4y?|w;zPko- U߯{ojPO7G4}GMrcw:Pv;yWZym{9mBk5=GNP9I~ƻF?׿S]M40iN9 'c,4a~Sk7yl7^,Oޕ_^:?Α5O1cYQjs{zko M]ku"6eܻ[T_8ITw]ACF]^4;aYod߱+:NR*a&-ע^g /^nSyJl$/aFEiM!Oi*wj/ȵ{OïN2ȓm寗Mfk*_ZkM~ͥ%?g<ɼ~?DZrIFIݿS9NRQR^)xAI+!.dXcSkٳ+._ԩ]Q聯m]Z^?:]^Mjk_S>"ǯX!Imh֊eih\M$1 Նɝ䅤<>[NnO⌚}έL:*n*13z/YÍ1tZV$oMX[̱ԓHIEdtr<JԜܹ K].e*XX0,6~$4&g̉M;EkM7$}sC(Sqg?GcVͿ;D~0o >Hum~dms3DS?o۳}imߡ3(ׯW_3{>( \mk%C#,wU؟I>O'\TWz\l:o]u};7ޓyzM4RIuqC90Ȳ|6~_ݩ{[N9mz~<_tA{-7ԟ"~U·5P9;gY8__?kMOWԭϓt[ӟX|Vyx^MfRt}b& ZGTGttG}Ɵ>} tK5_??-UZh/ZQKkW:upyqI7Hnf*Ϲ\PZ-z4ߕֺ_3/ڀaw5f ]LYIhL)cbQv_z*].mjzft_-ccoMw>"joZmoMg'(RI.^^s\׹ }c]ٲomojw?aسDmt[+ư>Βm ʲcΣ*iSq㌕K]tLF.L.Q6ge{^=~_ Oזӷed{6Ǚu2˾ga؟>\\=r\$pIUr'o奾STj$\Wu=^Ok+kzm5'̾okrIqG46#.6|RJWUks$\ud9[ZK SXRW}iwᆕwm:|2^^tFYZC;dM6s09R8J5(O5n^O(VNnUqvtGs/w^Iv筼Z ͮ_^C+:9C Fr85qu7'wO^_[|F*rG>n>I_#j .[X[U 3,nKVOo?OݯO>v^<Ieox_,%c$vp[ۤYrlE~b#iru];W7UWVM|7|MmzGu;Y5k9ǚyu9?wpO +>OYWI[.7=jS[w߯Dk^gm{D}>עV]zm{%6ڬ*gKv23nHomt$ qkκkڣ^jzR]Zyxo {!yUܰ7|~ǥ:Z^yz] k]VItK}˴~t $ɷ{?ia~=:.(heͭYɷg,rmӹRiijaj/wm<5k[?/o |G6ݳ;ɲHJIOOssMk Ŀjkx=e䗷ʰq<{I6<#H+֫U;g﮽:ɫRZ6׭]~O-/HmxPWIk/n(d4(|>Q{W;{?v4]wo$Q<`4 .\(mo{W=NuzvֿM}Mjr[7[_.hn6ƭEhM:0s|_fg 9fԮR}X(]34Bh]w&>=~J}c-dٻ[Z-`;%o/h]?&tGV<5WJc'_[uG]mӥOh\> Xofh^[^kXT`ݿoַRyɳc,f; nn_q9 _4$'|}rk#v^" NUɒ6mVk69I_P|k+{7ߩؾ,6a{h-|K>$HV5Dl7M篭x/#8iE{ׇ{u{累y:S<ο,?n]!di]޽zvYFRT7?6y󜱏z?f/5򹩥|a Umi:޼%e+o Dbɱ|<>\{ҼL~{aaJ nnH[Ukm{pY+MR{Cׂ/Zou M?ڴ =>8dXV%j˲DApٜ5*|IW)4]e')%oM/FCYORk}6ͮdL5gf6h olq$;f>Ÿ0JהVk~;iE]jߟNM|og㸼W+էI[k:|o&5HnVI!gHbx,?$Uſ&{Ԡ5ﴻZ{OǾ f>NmYGyoYi!'=M.veS[v[=n][}{9#evX~TcQr}7se5uu{߹>#oi+\[ (Z_1j~wq' TjVWv^[YmmC3u_xU?L.P+{mSĒ\Bm㺏U1 !}?}$3~aƒYw.i9t駭K}mgko>u]uŰӧo,hżCnqq$sy09!}wDqQ擟>w?RЅ(($+mᯄNj^/Fu}>)#f7o4G.;B.w~^#<%~6t65ֺ|Zn X||{٣Wޛ|_IF1vW>;15I&GR*ҵ~"~+x'iא͡V:4Ios9upqo69G 'XR=߶l)•}u]KZ|,5chWDS>nV utߗh)Wv~oy>Վ 6"4tt5ua:ԓr[䧙}Rmw NQ~noC>x.IorE,9slg޲;G!8~H֭ Ua([߉g[x[.4m:Wminmٿ?ǭdh{yU01zo<;lG$*cm)~ު2.Y뾿+w=>nZFn4Էʗ(@ݻ]ocW0[9mO==N~G&wusyRRԯdH76XHkJGZg}zkAIFVg.6ۧhno x8O+"L}n}>uG%XMy'o8kpu ~9v^[4"Q ^fݻ]Jhj;]}.x؎(C{}O}U;SeZV-̀N3F:}Q<n>W֏h#'nsק}j+>: G[]VU;?zU6O|[>#+Rl#C ,g4_gLɿ"_Ε[E=e=KZo>ޯOWg7qfi7#;տylfm]<8%Uݏ}z=^.񮟦ZX\olZBl|WIc[&4Zߩ+[в*^ m"EU|"mm*w^WQjiOjv']GKQmO9#[XfFrJwY$>}˥y!^kM?Qσ- #nl y ]M戮0ϙ߹QOb[&%i5'vVvG)OS\p;/&e<m[RmT%24*iO2>q5Yu?Mf |_3>H־%]>#@Wf GmtْK;Ďhd؟gObT^gQ!Oӎ-);<:,?kw?V/l(.ohC۱h~G_qk+=|ET*mwO4j_YQ%zqwkO.FV2ʻw/e=ӻk}Zvw3?ľ#'me=B2\ HjVRt/_ݤ&#A%y/B^KRt=Wƺεim{t]躸cfketgϟT`I?/w? h//?ijqǮX\C1! %ż-Dl,JϽqoO[|siځTѥԯ2?Uڈϳ7$hǕV;){=g Okږ^\M,nm| *ʷ>JҜd΢v~%njZN<_Kٴo5IF9c~b\xsW^o^.|]eǘfXyPs+Ȼxw飏#V~{Z?_|zɞ{;P)[/,dMUmq#3g>ɜ'feߛ{yIKq[]Q.&{6؝ۼ;fFh{߳aMPuv5 m}g&emcqaN3oٝq>k'(?N/G]-oϯ/3wqvI,#Zd41XaGhYeؗ3G}4)^y6~Gض"kmkKn>:'͑Hm}!wڿD|ZumȞ<^$SV$mnm#߹Lp6I?ySnq|ÿnu{Ogf[[,1JU$?)o%c (MV|rU,#lKck;vFd8_y̛:SI}aGe~׹xvH&*~dY?cG$ϘN1YGXxdhuݽa5ufHOO24K7טK˙?}:/>oA5^}f\B~%~m>Ͽe:Ԩzo5W﫾3}sF+(,I#h/M rx7|oq1̠M]AbM{k@=.J9>/̓Z$qrO27ٰ8ZRd֫|'ֵ0ZWҵ V0fklCub^X&)k4x6zHdm+߇x{Yo}oziCɵ|vs4jdƔy>Yu|j?]|_M|> SEs#-/ j*̶wLo$!6;/^ R><\fY 8x~c\5KGX\}omZd۴UX|vP;[S]l>0ZyD7[vyu:Ќ=u߿utEZkWH\202=ۗF>]xk_[+hܣem"Ýb8hky.g[xEwnfN~a4IUw}?{Wr__42^iiafHS.+ҭa!E7=6oS<5Y8:vޚOxGI日,S]kzjUU$+Wi&ڲlDtw;噯qU`~O; 0QM_O쿯ƿ'{{l\iR8yoϱ<.!1Rn;idxJu__O<bZ1zmVDl_1o&^&3=3=/eFTioKZx}vIx%ז[V%*HpL $+{//uN\͙Y*KgvT wF/4mZ~Ϳ#9-!޺{ (u 9dm25xo؎ypRܸ-o5_^ [MmFAgfiv7f9<Qz~ ԯ$]4ƢfiYwqc$?7uܗ ??rWM[]#"=cNF4rK;kZͶ6ڮn>z(뷞=<[g˧J#5HฎE2-mGobt?^8ޓ~rԋIieri>%ċ_˩jp,PoG$ܗÿz}\i#ҋ[~m^QK{0"?OOYq/׵DzoLɦ3me'˔>UFnq-NR涛:9Lܹ ׂ?_zPwz57X"4g\ddz?2VI?3r@ \H/3Bic!ۂ ,3zToCHګy{.wTOΟ$~+ɩ"ԥF8_U&e\>NpX^ sQiŜ.9<J;[qzYX*sه+?ʘr-+f?nqo#ȳ|.đd?/+ןI[9mW||Kbo}#AY/]}Bhuȱqe[W=O@5nwk-=L(2GYaGi<1UFlu"_6pu?Lm%6,Ȇ-F6~[д}f~t◯ūtjNkhyg0bIW_'YG߮iOd烈sm\ս%彭&;u$o.z:?Ϲԗ)Zjgm^, 7:iFȖE%]嚫;~FiRRKm>Βֹ}qu{X`wuncY9UI/{}[6|;H{3psk7SLV7q /L[үgi^ǭ2%kk(dõiSDY|:+]B!q-$I1\un?ܮEݝ#eT{V<;?_ym'I5 @Zm q]>_g]}0{T1!i_/lga^d -'ϓGzڸ6_ufku]"M{{ vY4;|&XngG;3ezTqJqI޾oݏ>˽Tؘ'S,lݷݑsӾ޽kT{_f_W|j@9lu{Mg_nť(`V_!mMauzssb<=ٿ}[?Ҽ굹]:!o|9Li<"mykb=-g_rc/h_w!?|+!o']~ZdzhƄon߹Rye>9Ңw_r>񝇀<+M²k^+NյL+\x~y;dV "|Ћ^YS=+ksOZq5/\ze]mʶeI#b=sK(MoMw=FRV}wx&x1i!$G/ ܭrL/k5mE>i8w*}gwk7^!Bc2a|gi=JO]X )sni%)~kM\_s)$NVWhuHaɵVF,Wnڽ>k̻vBլ"ʦ;c]#E(Fl?Tq޲ݛ,[㻔CpMwގOt}sN3qe8l9l|]ʅ5$Hh~Jn[ O(S{zEleC\;c̟Wu'hY.1oc.y,Y]{cq͸yrJd_|e&'SIfmxc*6x8o. :trEWw_-o|ϑs&%uwop9]o_>w+ ?I6P۳b谟-W?\ҽ_qa}N)|3 &yP$?gy?߮YsK5~Z}i>o<+w}kiz f+3l`%xb9GlGYoTs@rk%-Wv&suy?ʶ2.5)wA.YBŻq١E-w`iiV bIg͹]grDinMrRĢDz4*:T -6AĎNn9_{Kb9ן3ZKd29篿sT_g\Z`IGVܪz~ZGLn8oDfӭ㺳#*$>_VNl*]wCbX$֪ʫϹ]g΢Z׶ bFy|XyiM-j?|_gyKKET3$f_l?ކJimǶrT}~gOxO,cZufR$ ߙb mgfgf̣#YZikP\YC΍eU7yIMdlz:Sy6$|G6[jj:uzc^Nn)O+E9/[v&Ih %ϾHO9E9~O$rGUx&sGȀ*ϗfB]<_$ڼ߿5޶i8xLw:@,l$,qgiDݙ$Hwo~g^Z&Jkɒf>GK?3kK?3⯋z?u4v=팅ώVMզ㮚T%/goԇ;;Z|6t=:=-&yo߷#;, ǵwb?[i˪~qw[^~UIJ,EmȻVn7z#-a+O{axu.4oD]k$i OW]zmsߡ'ZGUxxYS%g+VYӴ)弴ExoWbJ߹h_6BN^Ӿԩ>~|C5fմ K˶͌|v"2e~H=wJW3޽gK] NR.#PLm[jsjdZ}ksB1L&ހ[2=nH2܍OMѥ_/;8j"t)̅Qѻ/J̥m68O6[\˙-܍n|__WDެU-ܓyCiL K,ry͛|zKO3h+iV3,4WG͊imո[rw΅Y#tZW3{~zC۬^}Xr}5ޱ4lNɶ:|f2 ד[wV[In#JKF?$goxlZܟ2:n'5''7JWV3u nQk$)qmwY6*ͷ|OrI<><do*)rnyIq orHm߼MoԙGs:4 >VC+}7zⴌ%9-24 Ym ^ffܱvY6mY S77 5ZMS,־_66^~wVOޓםO]& -{e>iucR퀓]UborRk w{?E^he lq*ɽeVv_oνQRZ^t~f3˳:[mz`fr q ˷ڥ]~{|5ڷFƒ\ɂ0#em7Z[{?h_.`j:ơyd]XC w+ W]j7OԟlK%И-n]UU4^Ja9wW?2_?6t2-<;zѽ3a3nr}i>uᅳjztƦUw}cvᆕ 6r+ f5EmϵyusʉS>FMd[>E,3w_zҎ{QZ{Xݬk9|'=Mri MvW}<o9R2[lKY-zfPo9vn?֟CkMͫibnEvd$F۷4_(Y7ſߴzogf/=֕z=>4W{5 [qnڲGlm'Q5k:am[7mM}yUג;$'Uo_%v3*'vz=G5[0^B!dī;LL˻YARKo뷙l N> C*{)a{h.Z?̻yle)'?O(O(m)=ë&̻d߻rGj>|/,%8JNwB0YC=e3yf~mʿ:[}o9;OxoKAvҤH..'M"x𩫌Z?תtC +8~~^gAEgO\-ѓ+ 6hlqEI_*7#^Ucg=m>'t[i~ꎯ["|;y\T^Vf_|9H! ]ߛ?z\PKi֕O7mY(-^+}񛋗۹cc54w#)4wsU72]EpI%Z屾UHXw3~vwu+Kk J*Rf톭+[BmXyZne5**-{W_Ԗx/.VbʫUYY[u^51:mvFOw/Sqd'nH~9yZmw"uW2P`vIv~=Vԡ8Ik2kZwu󿊥>N!{+$Ѭ"lKēI%MUTqL8$дEVx|;_ksZug6,<VQ0:_3);tR4o7wNO _O֦zL XsEUEf}[;j_~ JKGj+-?GY̏rɩ YYV6wV){OO_3_?Ճ}7֚X~g,d㷭 2M_CS]~jzFuIrSTO37pLqr20&,ǯ>^γn={˭B[_-xm#:{K=SڎvZ3|yB'|j>^~u~͊^?A&5W.4,!!=\pv]<͛;˖/ф3:IgI'|9>5GwiOwRuK_ )x~]vj}_;M/I}4iyed;񘘥Qջ>/>\Vs%e3Fbqqsd+?vem#7*o#^>y-RIme}$}vlD;ĜlBZNf.}ׯEQxmH!/pΫ?4=a[Xz)-I1oI\#v.BLUc}oٴ*3{[}%ʵoHgO;Qts=ԑocmY74?q"4e&~kbj-g$i;sgXQ֖W_vM͚Z_ַ| x7_woL? [sysnmSDD5:JTZn<\Em~j 8H{m6 -$dF|д^oٽr=s.U7׺E:No[X!ѼjI+SL͖؏h`}~i_W ࿋*6big>EO6|;5+'F!yr=|eO̵߯'ɵGsxԯcXcWϘ]tjWEBPWuۻ9JϯoꌿZmkeާsu6]!g!IY,;u6:ԣ=/[ǿ$ҥ`bəۜKm㇡YS=>wþ"/4:m.65Ulq~zVuiů'gmYNF{6o[FT俗}|/VNNtO͜M-|˻h-.?d|e՗lsڒ|ו^ԷizrOQԣ99E h]}eytԯ~k^Gx-^͆ DoVeÕ_C^J֖?;~n*< {׈4}2whRf]A#U#&0 .:劉2NRP;{>YXXh:$FH&ebc}V҅I.=\:5GxM<&h*}mhYw}4Μ^^Ϡr}W߯Y>Sk\~ec2I$y?Uo{N#c-w2|eQƪ?~8LĵJ.ImpWSSs_v_~=ŭn=屼$r$X丒4cW?$t_/¼>YB<ѧy+f9|=ݤM~m]zª_[C.$3A>qnV$w{gɏ˸ :Л*jKuU)(.Mw{z>x> ;^`=>PҠu=.Kn6'{i:<βrrK>>" nrHbb̀4j3oM!e6t6N},G"3kSm`ܼeG׍|ə [ ~_mOI L$$ӥ9[{Ym6Io"lO[ R?zZjo}>߷C[ [B|9os6$7]H\ѤhmG#tCF*4տcӭѦOsݾ~>,ڝɖ WėF bBd{h_lowGiB:>/nNz*{|7 iMik%Ťhm&Dw;lK XķǨ]验Mylх3QEoէWݫxÚ`!볋=]b{MC6ծt6o+I#Ԗ΋56'189>)N"U}[rhh cEK+{FxnR~eUjG& ȋ-6oyN~ig{tvRMo~;:ԡ`֞"R@ U2B{ >nsk?9[n#\-_G)t_2Y"$KE_Iyu1x՗|(&ҺjЍKg%Qy =᷆Ud tϬɺ y5^o{w^u\EZkAsZ齟~ AXK۫@j<̲2HaO&[/w/&O_֧jV[=:r { 2UY~[Wy>M6vk\ʫ^N ;SxOFԛMm.䶲r$qi:>t֒?`뮶]&RV~w tC/XZ^6ׯ53$iU ͱ6Z3`wdk6omw<`^or鲼ϹxΖxcv5 / NīrO&)єݒ|]M/Nk]_Ѵ*kgPo$-!XZb$2ym4-H|v? 9Swu9^R}|~~ϊ,,OI\5{smfc+ok\u-ΎwZZ-yc-N~زNFۓtm6?=LcW)'%c][D^ ~[iܤm[e8M$#I=l&nJZj゚ֺ'RkoI]i})}ۯsV mI%d'}??k:V|[so[}kaxGhdo3P6,1a3ϾV(kþ\NQ?*l朰E8Ovvvݷ|ﮡ7!ma,kc˽faiʮ&vW=J]?cq<ͻs/_sO2G,K 6>M̊=i$hmV̏ .َ;*SBOj2m|z&~+)ҫ?-c}o]}w_3K4]KǗ6gɝݧ tZv kk~?2,5:oM4>'ExGVkm~βm}3˛~v:(7.KYm%*[7t?B|H|.eJ|a}wL7W>!խb=ZkH'F:MG~=)ovu)ž"Ht?Dz+Ciylo#?\juswbMIm_x/,vXXy1o7nZEU]Zk#)m'~$WGQ%;4-g;#z*rK?;OCV1oH$ܑDz3<9;}t>"+T34 5 n١>%}i]Vs9;[/gCU4D/[{q4 1I&Փco1kl߻G/k]\ yehﳭªI$(g}d~iZj~7]>;3Il5@5xUڥQwutܚ_٤9_ XXkM7Z+u{]5eVW_d>T1z?Cq,LofMӶ̟v{-3]x˷w^}y׊u7ky -knTo.H.hʶϟg$ܯN{8sߡSS@[u/imiWݺ5?d~^kJP߽a9z5=|5L4)iTy$6WgGzy=4s5?/K>#o'Ӭ.. Ƙcin&mAmXHt%rgGwowo鳙SSM.Dm?뙼O%kgb-*'[ʿs7oFn^SބTb쿯=S:lMz1ٮ|fH6jwo!wNVZ7}O#]KO|\6c\3Gq7d6[UgotDux'ݷ׻rcukQ;}kIBlv,4(2]yϹv}٤I6o~uRͨ?vUsOͬXGi֨ЏK]BȻfikqOOhr9m!U)ǚ__^(Լ7.5%t)Kl_vG<Ҋ;_GծM?*vutyj"Yn-Vqmov#rTlݽųg^%_Jn]R[}+U^Bʗo-3W}} !u&/yik/駭Wc~J-mړy1[ άaZI$gF+}>ꚍ5er{[A h ^W<#@m}jdd+ZogB_4}t?/5i^ϙo-Z茟^m_d. LgYk[diWduqJ_z<\eHPg;>OMϋ_lfo*7D0m)*{i=#*^ۍk]Z=s&3]ߵնe$8JM2IgܯBWQ齿1_]˩\JcJyS,h1۷]˹g^]7=ױU)^~n{jueK)qEo3y¬m_]E}=  4KwZ-ω,4GR,K]f)c\"n_eg_sW+E.Y.߮+5-c}=u|b񎋩iuM~Oӭ}#M Go6- :'Ͱm:W(63譧gb3){D*~o&zƋqaiv;˟ggcu6nڿMϭ^ӣClx._|GtԃK2;˓f=ǝ%sy1g&ON<{c9Y-[|fӼCP??^Ҵ++c]][GL+ɳ˕7 [?_*=?'w>u 4+)RSԤ./Kk3̻J)2<;E9TQƴO>__mO PM<Լ'i\۬ך%žq6}GyΏ7Fp~sFӪ^G mm<hx)3xMv˚tv+2<l6؟9WOӿc~\Ɵ<-5(Hc{i&I nmM3mGsW(Qn:q./87_i6YY\MCVTMI'ٕU)$arPFķnGueƳT8nGoXGK^%6YGMg8yZv4Ю%]x8.$4-JƐ,2/n$_Ἵd-}2(5L߈oy#HEoƐ<0̭qx"+GHߺ{~\oZR|ϫRVa<יxsY35hxc4KfUi<SoMC ]? "@Ӆy -)VR.ogINH\o/tmf,Yc.?ZB.7;6մf-֨%ܨcUz4B_sqr38.pvٿ-MʺӢ:eb>s!@c^Uw}ﺾZ5o)(Ͷ[cyc.-yV䵙XUnCZԧڷo}wrԤ%vE׍_ڭֵowwco8dDaHd=cFd ϼy2'ϳ.˖]oe۫3E^W{Zs|'SXMS6A3*Ig}׻MϳV?f[*d?87~ >A%.|*ywV{xIJw:<r:L.ʹQy^Z__p}k_k7:<]]VO i).ux7ͼ-X|ٿt~khE[][ NoiL{\ |ˋmC%ɒ6yk{ٯ+m_3ؼ{k:~$Zdvjhafb|=:na֌c]'#<3ãNjE#I[C$3[mo|2/"G2:m7_qAMz쯡էm`46/oy;1 Oh"H\[|ƭڮ;.ѯx åxQT%I9٤ő%& c\u9~9tjz5is(UvF3ɿﴓ&ߡjݿ5܃OZ\[[-r[um>E6:gD;Fm۷G7ĭwFփ_[Zi6L4qf{uk[Y&Ѽbo3GՓ*No"3J~Q_|M3ķ ώn^Tm"<2dеky4(HY$Z.W-??C|.OOw7>`DŽ[P&m#HcwuXMtWvEEFWM>^ If_KJڍrHWRLFJ6lFXDV}v[#|π'4=GZn8')P/믛".]ܷ-G$[IowVo-n&XXnr$r&þ֕vw91W{iDU-1 mD_.hdF_tu }z~,<Sojl/4IX3w}?>+v),DW÷1%Ÿڦj!Kۓ4W/?dffVYHD#+iJNK~_ˬ,ʚΥd'.#Yi#ˏMbi˒w4φ ׶iej1GyY\]+}eH̯ aZ:WDՕK:t4>|CXwOC-֭mxǨ>/Vo;O-mJ1M_޾Z9?jcMoO[YdݺB]rl7GHE}ޏoiv~o<Ɵ 7K鏯隇 m9U#V ^wyJR_bEO:F5xy4ZQ%,m2yΑOJ-]:ߩN2~L~̳O/n{ElW04VS_csGun<;˓{g}NjЍo|OjK+m7Uqksdcdx7U2:?sWKw޽c^7}5}Uڍ.Zhj c p\\+ڬ<m|DZM5༻^.nV:+ώ:[+.Ś(RT[y!lpk"5mxL"]&ÐoM?^yD+T 0;VVMeʛ~wOoy:ۿ5])%i7:lj<-%텊7O&g;,bFwyU^G}~>jWR/KiSaOmg0ޮ"߱z*Õ-}:oo:Ewv:C+lR["GfOn{}fw˱[CtMH,+;*T(nxܥ_~~>_ƶX_^=Wjx>m9M&B5y}t}.,\bfiWt)qYW}oE!ѵ?~%hq^x GN=q G`IWP޽~oF_k7_R C'Nuqoڍʶ2FʶaeOlD]KsUǑ;S>h֟.qO&Q}=m%1˓Oc4(:;ÿ:+ikghsƢ߫-Yk ~y˦Y4\I*[+FHB:#6 qԌv~}YO~})r6L?|sJSЃٿϹ^:Íp~XQ{ *q#ǷbotO8*U/_ʺ-ɞ|tž,ޟmi mI4x~=1o4~cL2sF^%o}otҌt7OS AYC cREs/ݾwOs$|jmEqCApZǒu-N͌yMt-"tOoe.oyﵝV$H hcg[- ])|yHqy>|/Mϊoե̍o3Nt=Bt[9<3luC34;M*|vۿ[~ڕ&ksM深[$E_:)*˟|>n^ئ7^gqkq\Crqio:"aRm-#>kI붝3wS友px.|;è[,h1iE=HuG]y$t17S?i>'<;kVTͩj/[X?Ikr [gEDh[tSni pV~8H}]5)vKN[ i~C>½4sM7_^'cpeӯE.{MR\i$sEh߱LM7K_*|e(gcŋ&T7DOi Mk$ȯ$-$;W̬nԥgk߹kHn${ܴ9QڧjooMYؔOg+nݷ˹Y^ם53e];,vEdsYOek~ߎk;[hQ&HSrV!S"6."<US<le]sG$_ԥ}MNb-fXria7?G͉A=̈x7W#2gctm?ΡՋn;,shik3!nsw5H}:Vfi:9Bfۼ9o7?tq6zR[Em jHwܧRI7ı trLbp?r$s}{g8Rsn&Gؐg^ws}{[M_J)<+mflkmR߹> tB;E._LDp55g~^E,t 5 ^WغVUHk{em.D|yլ&/tSJ˯<#6ֶVY=VmNm3iwTQ/S_flji]v3/9∴iemYn&I.-ZHwǶem[ɿgM5N6~} G{~߯S =.?jhLҋCܭHٖEdѲ2\{6m*d֯{{svme{m]dc#v+ec7_X)'羷_cmdKk?wt#_ܟ0"S=2߳49MWKu]h P^[ljdk&UOTΫz']>yx=3^i S<7-̌GUܒoc4[b}8qtRWN[/ߙ߇,5K(`KJ̒˵?rZ}~O3NuXQCsߗvk+~hpܵ'[͋_&qۖ96]G!TMor>jVMjXFޖwenY|VXfotݒo9 2ò[PKw4}?O[\ƾ[2r*M 'v6Ph'm 5|IWHY|M.ϙ9$;.3Ow}M;˙`OKXn?WwB&{{ }M_NJ;kZ//4'-AojadW}ocIa}R\i'l.I؋)vv4d2HtG|ש-o]C/oN*k#kŬ5ի47pG#Ʋ$C2rV}4uD>V qb,_e_79nH~ἻwhO3ow? :ȴubEԡ %.Ʌ&/o.?\Nk O}ΨԖߩzjţxpXGsb`[K'HcgV_}|՛~̣ҭt <,i~|zU^6JMk(fH._Xeo s@}>VōQ ŕv۾PK}>=Kde~#١1C4k=h^'4AM[K VMImM{;5fdL鴣ƿ4\Z 5zi<[YxZHnd6"?觑evXZpvTw}tGz曧Ho$uDv|fW|M|5qV^o%4} <գX e=xQ>?rIٵ:*_/9w|][ {U(XܡpZI$ims:K֏2w].Kj7YOKsε4~FroW23ݤ+Idz苓CxyBLf $\l bˋq4Zm#*Ot}nYp_yCiŶUvYɸHōCMn(o\:,l0 #o;gʇ4WP,l呐 $gkm~ʎx_"125/BdQ}z^e/-Ķxw#n۹wsWW-]8>x:pTNc'fUZ?Q.]9~{Y%n|oMFnu"R|m;OFYˏ:=0 _]Vvz&Zm7ºʭsmI{jW;G"3GïԐjPtܣ}/V˥gioigx fϙ#3m;?s;_KsS| y]f5+rcݵw*QNLit *lyVeev̍{ۇλ3)G[(E^3!٤fu~DentICO?/XO𮃨+Ir{;ht"8>t!_lO{:!_?#3n}Oh漾6Vlݍo巓|yEJw˭S-ߞ-ž^ >"uJմ-kkZ#qgnݾK[V='3R,:A$w"$D8c6j }$03q}ec讴eZHm0pYGqg~pm<1I![|#Wݿu A7!Ro5m۬I$fՔﯥ~x܏OdZSQԖ;4Khd,qLqn쬛yq!rL}k K^8V;%k[jisS/#?ɑg[Sb1xkrg,1W"+yoY.|̾oOޗqGORouoKjc4,ڶJ/edS- Ѿ`ݿ}6LyGx hҏ+E[UTn鳮i{9It=r3{}OO/e+;ܰ\6w3(jz/=?C];HMm_oWVo4d.GR2,ɯ~s:yY'Ar !ao#r tcc~,?=GKucO xIa6ZVo_&gY. 3'V?1?I 10i1 qV 4J|I?Ky~? z:v6C D{'˝ҡd:mбy Q$o͟=)7J-`WYyѮm}Nyn@%YУ̿eB={QS^_.[/"Ԯqs1hJyϻYָ~h]ϱ3kym}YGk]O1Y{!kk۷fvo*Kov\_?9I;ܜ䏘s_]_sKJnܰ/!y})kw}"'xesye!]?vX+_T |_jVmK$-NVl-kotm੍wU6/kc|ɴҵ.w4c2Yd>g|ҵh-v߾|{~t7v00vՆ?%L8O;}?:o__=櫕GH3&v>ǨyqKUY^] Ig:r~]utzFZ[41\vfHCT*".ߛDV*&[Ma:i0ussEԵ!XLcUlr:xUzK;k֟34^\ЋFp|_:BKlp}4kȻeD=7-sjlce Ul4's{;1Jlp~Լ- Bm;TgH%-Gmo2ev~dQGih+2 ŷ6^Vn١e}&+G]Q6Mv{]>mJ4 c3\[qx6Lɹ~y~d+M%o/7}u_[y/u#ԷF#\H4q}+֧ZN-G'S_گ]zX.e֤X-eM~feoN[j9AݯzZf/%n є[u4WNkz]3j0+Vo?kU'mݴs%'6xj:gYZcx;Z[A>^>_dF?{ō)8᎛xRT״mS^wRݣ?{cݻt{f%ޛncR${3c÷Z]{n}P/ 岴l%םTDܴ{_8)ǖߛ?o )o.c4zd_噟r3I͝yƏb1J +su}|5#V&`[\Mo*&o6W*oWkkN*I<~<3[\:$ehm#y/^.Ÿ#uEMZ/}?vZ~sO=) ?.0z4?wfώ W$m=_lB~Iu_ Zeij=#26VWY>tN[?JMd_W"у};bɷ~znQWn/ݾdJ#wx-R'_${~/̈́q s37w10A.糁5KI`I`efY$gHF^|M6ӷ~@MIqi׋#4{ymmLWY&%ii,S4S`\pV{΄1u7JD[;,!mpQqZ]zokTG閚`}&]+O˲rbY32o|vW^kIveח~^} OhZP֬-JIm>$m|mGnDGS떾&U۷Sztc%y/gY=ȳ)kŚN[rr5C1+Brm+i奾/F}$x]ykƧYI#XٟjȉS_AGIF;{<'o85IAOdj*4IHEo"mNoٿvmnBp]m̋/CZX{wffڿ2ycZj>ץVmߺߧM4.4-$|Y=w2߳˯I}{Thz~ mYNM[e_}aY8\oˌ֎}43g–t{*Vg!fIv{nXy߿OQOfo0Ѯ<=cw%kbȌm noÙ>_Y[U׮'?-=4(Vg goʙW]>'WU(El˯Z]/WUg$zfΊoDw+F3"޽JU)+)|S_G ¾ u d[6ټnl͈OK+[d^c|R,TKvP'[1VܲW-l$Q_w7wO+F!7d'{k_~nCo,[>k_W4͉6RԶ̻Z6b_ZMӒp>&rMK^G(oKRtu2[s4il~iV}*;vўyd+=6~NWUwrUd>$CK}ZȁdvFXej|ɻj}9.o2w}5zO9ܵ=C𞴋G=A3_ɿoxߏW,15M> sե]xUD_cɽLȳ0YbW,cG&Ϸ~Oٞ?C~eI]/>]&s]/uh/oWVd$v7 I+s/N=AF1N0K7Wof{yfE?iJKJW擲z+>Y[;4 Uf3g_Ta;]]z6n?SZj֖zm*\6GXչXѷO,BoPKe87i6F /uue{j1 S4BCnMp: woGI Y.-*RP}'?8`W_Yk;͓ n],˿Z#wɣXvt&{-#32M#;'|Z*zNݶ۹J SLDW#dIdm>78HaWv$O"'ϳˬZkt3fnsދyxV`:ƨw<<:|yg|߫vjwK|΋Wg-iMBxH] IEEQ{YrTzLrOE|S_Gy{vfh&ms^ZIϹ~B}z<ʦ~:Z%I.e׹⚇|niut>CwqqyI?LsǷkber^16_x^}JZ6yVm"oܷ$n9M]-yˢ|g״ VQj3jRZXy$˕ jsL3|*|\Ӣ~fO^/+⏈e~"xz?Hg5i gfu-wC,DuOs/.]3ؾ>uxu;[UUI:yvqHUG'yxO4&zO[s]xHU²Id&t;™r_]⿍?m,^۠k "ݢ Vܫq\\2-̭Lf?㨧EXӯg7%ˣMW㮕,ЬI%ݮonlzl'qF2[J n#N#Z헂%siAyk?jY!.fX"dtaIi5}wU9Iwmu|*=#Z V&̽|Bz)͖ĆI7LygJ %ty{JV~|V [s|DUquȱJ\,\}mubovM TFi>aR8>tֿ^⇎|A*SoV+YPo쉼ɥemteD$e5\U1÷R:/^BV*▏}5}eg/ P\ӣ&qyubgfPkk&IuޟȨOoꇳz^ ZRԼ;j:oC+(55X ښmBi6̩$-;q\aʡ̿k3uvo]k4&tK;H|r]1r$[v)?w\IIY}:&O%ZŲI4*/J9#ۿ˸xd)#"lN֎[-Y#}j\`Ui!5 o&Ki$ ) )bWR<” mSck߲浜N]-ߟ~h?/#Ӿ x[^ iaЯeԼUYgs{ɳ^ᬋ)c0UVW׭ӹ9G BoE'=mi}.fz_& K|O%%׮4Cv"D6v~ry=k4;)L4ҝ`ޖ~▽\?1Ug_1%6znKUuw_O_5_Xjʷ^8gREkrfU-JȿH\;7891jm(5EZ;>AE$-[ztb]_~2j#MNH`-mZk Ҵx^+oz4 FPUlf+bmc,G>eZoGշ迫rs_wys>]o>5I$f?&#/*mﮚh9vsIAr6OA.jmEl|9IdmlO%dͼiO[k=;9+w˩w^Ꮙ?xNSPѥb}q崐I$U[LG$igISs_ߥz_߳.|$ޏ\[qF$eVɛYC$]y݋1[>3=ң{[ (#_]AtP~m]\\2,pͺfkplx^fSj}\SR/Y;ZƝu63h#_kMoMϚյK_K/;0P}-n|A~&uyS[v9$lRm$ḧ́?iy"d)Q(w{lLTiX=iZu$w+%enwԹޫ $~W]=ΣΚm`׉\Kron".Q?NtMo/Tu}ϡ|- P%楯ѶjZp4sknc:~ͿbW^;>g} bT/K-/oO63_xV^M֏#YmPi&gt̀}j8Q7hyPB(5]{kOi:}zl#׵Z.4vme6V鱒d̋"|OW'J ”\өw=m{ww Wb}֕;_7e-]+<ɿ\߿%Br= {[Ku7͞K/!C?g]_uI}EiaKydk4Ͽd/1f4;>/jm5_齖NkwFu|c׵wUKeoxCLQu8c ֻ?M%;cI,'𿶧G vwUY뵞~RZQݓCHXYx+H>!8oI7,pHZKŷ.+׭KjR_g/i}z+=-zO|X Mݴ4z坼(:|-&~Y/5R;M䯥FWʭ{ZIkϏqT>vmR}sPI= zu#| ;H<I#h]<Qu^SʵmO]^t?1'|cծOj~!}i8GFopUn[~9_eu>ԣS=S:uyKn/4o$M&_Ö0jIkkmGuu ΍q 6!NZJUe؊[udҜz{]~ j' L6~_cּJͽGTǿ.ɽKLM ԃշwlV2ԥwnYjj1>Z/F[^ymRWR%FַO^aO~I Ͽc|I"_}ajr8yl۾PUS{yk0v䝕{\dm}Yw:'>!-UڃmU܊n꛿fqikf-s*<eu敿O:&jxIUtIcA>qQtJP#NOݏNM٣s_M_x?ÞMZX<ۀmcPյioIgywy띟k֞2Z\VѼwsN&+I4v)%|P.|gMx/N6,qy-mu {\y.(yg؈QJ>LYkcj6_wmuq,k&OB(uNjUg^QrolkdiN+޽.|WmJ༲L.$IUhYU}{{g?C?ƺޕs54G=RFUY]˖I1T-F+  q?#x#l&xb0q#}FEgY kaڽ N/ε<[Ƌɨ&iq%Ԑ2[xa$V'ߏchih{oo-jiݿ՞â&CK-97wPn ʟ›dw#>Քsw{֐{oיw_y\kql[6?_5+d%QVs_ZF:&JSԞڥ}߯(_ݯjg ONhL6/*x~4s;͕|&x>iZx"YP1;H?qm~^Υ=>z[!-M" +<:$pP/8fiFf{ו[!ƒ]}{NcWWvK}. 2'mUd;7ܻj'S}~*v}Z҅}tx7SFyG!HcmX+n[y./6oj+ orbQEvwxUFGHneTww "|"o w~nmIHy5yLAqʯs^ ow0n~g|3OV\\J4qG2yjmɽ7~]|k?>tRyk:1%M M̌̊Ϣ{ukuy5iZ]OI _i,ql< dU?7tXg5͎0* |;򛻷U%SzϘ[v_['Lw.ݫq |t;>NTe5߯wբaSUm_/o xGNQ#Ƨg _7³+e_/R]9o=RKO];gNM#Zo›,x]֗tl$p64mGuQ5s׭mtc*/^ws \Xir5㳋;8>O~tD};ފ޴=kۧ}kܧ;/${)~ 89F$XD$o||m?]_}ϒ_כ7wCTKgƿxoY\:MDhoWlͫIm:uOզʘ]"zr*F>yMoWqi15ݥ]{vysmI-$F*^^%)KUr_5=J -jh_^,mCZ\6WlwO$ZȞwd|$ׯQBL?C{W6Ҩ`侺_3}oWfc<[ӞۦV6u3|/_+Exj_C5 :omtΎՒOlϴm|}dNOH:to#8J}lph^i[Zdžu<9ghRsA ˷79_nS:TRֵN/}WyTHK# #-m,%z;k?oNmo/WlK_67+) ʲeos^eZQJr{;ΐZGK\ݹd|a7WV餛o_t}gk.<+e/iWwbKXeZᅤ6Dvi-$݇Jko盕Hϕ~3?X ž7em^A갴Zi?~IGYXrk{7ꔦ}+l<~ *HYMcU]'6|~hMMkK]ĺUHάU|gC6f9;6ջQn^^oi6 ~{ȣ3Z}GvՎ/<3{H#UJO<s}juofNĊ+˛K;[id2]I 1,~fTfn?Տ \j8cUmfFsߧ^~Ң'&xˤZOa;k׶iyȒ*53F{RQ:MG$N{|ω~xľ9f5%.%eŢۤQkɿ#lk4B1N yF}z>-4-GI-|;p#k$yOf '4 }u4ܟR~:M滥S5 "լR<"ܢhGL|NuyZ_oO^Ղ5n'~WǦӝ4{CL]KAy[3,s²Y媣דY^ P|?֋=<6<_#6>YlB@.q-|c[x屏yKm;+˭U[}S+8Zߺ3~tQud,hi״VY9w~dzMc?<;oݓ7o=މ5w0TX&Yw}'kSw>e3O*P._>e_#34aJѴt-ZZm ;hV4*?u*>_ɔ3~6|jgkik'?$PB};Wm2h(bǽӚqJjOG|eP ÑAZA%t~tDGy~m\~etSyJ66 ^<M¿i\iRMAOI.Hݷmt}?y!S=;o/SФl_?0n56 c2»e}|Щ_~+g(χ}e.[éd5K,o"O[޲r̗_N<՟F/+Q_ x^h~ׯ4ҵr$wJH_4?;e)[K6Iʮ-]O~ %ţtyث2I/6jy<{}y1hCM_[P#χ9"k4q}vaΚFvW{>Zvo՚KG] {;-2/=+a}W4I&xSjDY>+8٫]uFzyۮͿ|kQ1i̷3i1,5[s* [C6LsoOO.­U̺F:cڞuSG &+/S l\<?]7&>nロmoD4FF&l䣬 Fܽ??zŻ+~_k:"o9AڬUAe[_ՅN?idž[JȌV5_/|5V.6/s[K ltfuED+ӦY6| [|͜4hKKH@bAO#?y#G|*_S諾_YFI_0Fx*ʳ|˷gRݻiٷ-,U$m n=1[W[_u6-βE2$;!C^v߻'֮e};FVÞ}"bb]žm}뚢jO5MBDl':]b{wMI `G6<2%i #LۣRO1ܽs֐z2ݿ[BQ1}]%֭ |"޽x$ݿVz#_Ԓ1Qꟛk7t7m/ks\V /V\ei&RY G=I8?Sջ}Yw:x;_o_ 乹̗qkvkeuY<ΉE?}?6a~Gxno.,7nvq|nGme?͈gT-\ ʾLa7!L' x~(xvmZIktװx 4l4m &MO5߯7fIZXZU,D(8lUt#OHFm^/wgyZ$KǧXi[٭ⱰK1ɆeY<ٲ(jW%|nA[ *6͹6>zΨg{E=]>n74;}:.diO2D;)̒Glru~o^M(N kyw=Ě>x)U 6W[_ zlur:}1.o:WBU*ZRsռo-IJxGmN~-,7?hk]X,Ц3?>.6#[oOW:tbi#wÿ.uv]jZLĭ-ڙ41<؞ZŌ8U-Jۯ}vJ?6w_| uN֑ VŮ&XdV]Gbyr&+xO`{NG^m;w+cD45KZi$ehn#UgHmgG)ԓ]/~zO{Ě}ߎ48n5K\VXVOvfo1Y>m~$Ww2]uA<17cmwAriڭQ" "+uok}ߗÝ+^vl?m?zsW]Sųö88QwȻw|3q;sީJIi}~kcN B,xf ?%9ɌC(>Bۇcm۾OzDޗL Wzů;[v ]͹}*m6N^vD}**;[9EL[?Kcfi"ۿ[gyO'Q5UBuUu <#m Ǟ4Gl~udiIpsM ҃7o}R\q? <1m {=;RcK.k9egfHhS/ϝII^..}8%Ye&{m73b}w3]+Y;ǻ&3"|ۓ~IT.x÷:-CKvxIؗ0H|O;F2;&I;ݿO|K>5"hW\Z6-m]h08:5=Jߎ{ku!R~?/{w? iOyh3i&5_'+OVz5;GѡS3^[BnnܬӷͻwM^JmŽzYj=?o>5ǻ:EIiSy$,IUS~zlJ.m1n߭ Mq~ ԵS˂ :8Vm~v/ {]v"W4V?]3;;ϩs 54˫euUYcknf 4l$s^vOŷm?~~|^m,gg=6MU5&itvu>Dž>}6z]us[[urb)Jos [O6;k;SekmQ-nDs; b =)rŻ/{Vko^> _օ+.TYdYI,5?u~<8?5MˮA<߹5c Gko,q(ڭ+ߎ~cgzsOx?UOAXχi|K5-:dCwsŭ<[wGO>OCxʾ_u8TkY t_`F69RVKn丸8o1gDk`px6ol& %jJUt?G<C_RuVeV~\6cjJNlDPW;]J4$h[kڤn=퍄JFrc nmίdڵA{cE_Nho`VLk}p<U]>TIkf,_l-#ns>ٝfXv'E_Һ,[HլahoςUheU}ЪFQڲ]l+65TIJ$7gnZݥy ,[FemM:TFGŌeޛMqdl4cwo;YVq[_Q4xI j6_ Co{*9w]Zg*wmͩFF 7ʡn?v;xV|J MlwoTJ?ºL {c#EE ;r|WsmeWaxxR_NچimcjZc%uhB6((t?']~ 5e-ZvDp.63:.ݨ>M'J++麗cH$Ӵ`k}J^I1o)yoewu8__kN_i֫+mүWP{cHF:j(uX697eڟ<&K/z~?J3>!5}reuq5[@+U^?9>mN6to$੦ ŰWq}Zk}CaGxbz~-^W*q}?_Woep^}.ii72YI5_jKVO9?suSw@=ZŞOm.|Gkk> /7?fU˷㷏#yo/>+;|7oSqQkŎq1`Y&[#|_3TvO|&θ'-w .~2[6z6w $&FIu7+${'u-.^d=:=M>'-kx&ΡreڗM3.?֡= y:t(Drpf~y'u+^2ߩ"Vit)bi|H+3g6'O)KF?ReN-mKm'bc\@M.q7g}O8~}z.r2}EysᅏL-ݦZ4YK<:@ٹ3N*rwvŨ\Is$l@|d)˵mo}&}QQrk_־/o>,C3]3}:yt]M@(*Ź~³U%}_̯,'0+.0?k5nܯ$8llUmW# [>J+~8- m~[rW}!OS5;y低ϲ^ȱﶅFKvZgj?L*1Nׯ^To]?+L4R&̫FY<ϼ"4jJT{ϫ:9W/*ƺ]]%ŭ̲Y2g[qV/޽RTv&^hEk oԱ]kZg{o\ZgGj%Uho"w?Nܭ&,ּEiuY$]*wH˳zoL{䮪Y(כzZ6=A׭uHkQ.27ZWWOn\g.GKK; 3gvI EF.wz*).o]ts>*/Z=W6w!a ߼XeOvym6wx>x$ &;2s>zn[?SI_ԓ͙ vXu}+d`pH%u'<)j-eV,x#Wvtrvȿ?J^߯ukʚo"]=F宵]j2PqG7ⷅUw)b*{E{^K0n~m}q=?ךC4%|2_O WoF#$m27Q= rmz%ľuܬrcOsXVN.)o܎U`sWpwex m-im6IY[2~>*u*kwyAeeX~]۷rY&Sgd y<ZF.2O{;۔/<[U_f51,2"e$nأ$⮴JzZjSS{`U?~N򦯣?.ƊMu3sce4 >j#&Z8Uټ ՂMT﫶["^imhKlַ7ˣR\(m%][z<߰/yzJ7N/ݿ]_0~]%~&hoi(R ?n~V*mD^}ZЖ~7_C?ֈ]'#UGߍ.+Tm7V7|5nq&dCN[?0ڱIIo˸w|:j]UܙI]whx?xZi;ag(VRnXr"-u.35}]m9(VzPZymc1s$?P'$r?ݣ=<;=s_PC-JP+-(*HdRĿq>MJ,sYÞ]oyGS{MK[vsFo_/4~Y%yyKGz}u=N$VEo^i~LiAmq{onȐi>_ͷzON N=|½bvzTߪ5KI$ IOv=iU8/u?|ʌצڻjׇQ.3XvKem~טr+FkȭM6W}tyk~'srx%9IUr~_?|:W8+M$}* \I#Dy{I$Ynf=;[m??К*9?i-ՖiMvX.s' ̩frAG2z3iekY߆vGw<k=$d ^:tmu}2QGb|:ŵ{WӤ}+muX:ƮCϝNMUז}N?u6%0X%z~Z{Xŭn`ɩJn<[s1U_n|ޘMn1[o^'4kLu}rwY79Yk#O¾fޟ:GϚ Jq\ףy# 0կկiyX_ͪאܰ]$ùXc\&+ɸӊ~}ocYsM>vZ ԥ7]aZ<ݓb~DQ=fѣ{ֽ GÚTգ7m!YU6naM:Hyʬ(oٙ8{OzO_N^d^+ͤ:n7mU88y"|rg\84sZ]MW} '߾Z]=Ɵ;8/"Ȋ|蝆&Um|Rq[~JjQ]>3wm{峀0|wf-{V:[khobU\_4mws l=~}Ph'KT{&-vվ~Yz5ZZVaB#J?/Q'&>Hjru@u>}%{u,Si6ͻ&y䱘IAn߮k|J*t,Vw{k6e֯]7u9wo+cif 8[ڒ,˻+ЅsBZ{5*+~;_s|=j|Ox;In]x&4ݬS{ƒ[{ d}$lTO^oe&_{[}זh~m<-(mtHD\QO,-͟Lzt$]O> x'UqX܆xm [n?ojN}OVi[_OmS4Aw+JK',dL7mz F=6gӿŒ_Қ5İH0l0cBZVm:-o:5-I+HVxMy*T t);=ovZmLcizU܊XƤl$n5F'.w7ʿy}oJ)=7r꼯5_Ύ!IѦ*?͗MO xrKtȵF8;>]*jww޴u:_onZ~|>6tv[XX]]Zi'VٻcHQ.cjjܘSW}4ß/֖D^;xe`ߖ,\&͛eU}Ժ饯2|WnZ]M{i}Ggiu 6WMlo&yӽ#ӯr m~~{x7ߪЛ ϭ5ׇ' x?f_:7]/(˵VW]vRZQ_|9]osi;k/.$oZ5iI7RWe:Km{Seߧmw#ß h1ݍωPC:o<3< 5֬rqgO|sɒ>wq]wV&dKXa2 Яs|թUK?駛_S~o}WDxY|9/G=֨SXcVöHi7i$VFu(UPi_T9+Yuo_ӹĭ_\7}o:XP{ ~ͮ .;~yx<Џ-9k{~gՄvﮩoBg__/ž= BWmwPI> lmmV8Ok9&-ay[>Dh'FME{WGdf7cCRo@Qg-BpxN,f5 JvF\f>JSU"^{ߕES|ϥ,l?eiM{jky6 fO\|n|CM(5{v=+vS/;Ě4 OṸdѩ_H#fYϱ&~U[]4Po8ˏ٣2!ٟZΕ47sp{uYY,voηrϾK7_~ŧxr>ǂ D=>,kmiog1*m6¿uWb;84IﶺqrEik}8j7Mޯ FIlKAl䴑ѣ.R_{Nfֲᆭ[گ')3xsjOy=(NUfݛz*p4䟞|};8߅7w^!,W-A%~XUi<{nk߱?J ;"eͻ2d=64Kqx紎K=FKjERhR5ț/xvRZ/~??Tv_#3>i"<gnon$X)>ӭKf?vכQN+צivtA{Sؼye+qi3OC$xSÏ;^x_IbޏMI4=:^~'à4攟Ml$ֵkvv$?ry0oꔮȺ|)zZ,(|l#LMn%̶Mqk7Dިdz8֫MiZjO_ <-:7"YZ5:I&wd|>ѳ}J*]o<׋R|徾o|y^0mh }H^[^< m5լ*M%\~JT)tjRJik}x-2k-%$W³7"Gy"ưk_%Ws]~}rٹ+߈U GWGդ5=&o-wuv9y)t3ۼAIs%, ɖMt[z;ϕNqZQm}_+>ӭ];OD᠉!UZ]omj՟yyoR+]2xGI.!i<VN6~wHF_֥>%|='\Zam51l/eZ?1'Vk(.G}ͩ-m߮4t=3oujsKc5dۣc:Ē? j4}^SO_3ɥ[M=bPwUǍ);[9UWNSȑ-3m~oϵa4u}Z03bFcYc?6[һ_rNN˧[=AhKo_WxIWy~hb&OhO&u:oηAm͔Z}֨RO5ԡl2Fhȿܷtz_?rI*LVHΫ.ꨭ"I%b,{t,'ɾEW&ӥ'?viU+}Pf.Nd]>-ټU8o]28]W~E7}Mx\z[Km ڥ[$vd }D\6#F]7]^xA,U[[MRі6¿+1_F\?Ο*A^1Uc{Su|9QZ[ZF"N\2iQn<3SĝnRft;qE²6s.~D~S Q{(7e+h[~>,u)ѫwmmh?ٻv:VumX2*&OH 'v?겟=/珄pxkB0o[LmoZ|i<5OГGkKOG[­lOI$ɱ<*yCKg}S4:nzOOU)ylj6&kUky5I,:#z~|\};$%^-E\V);Ky[3uzljC}$cf҅I{I+B~w]Nv 9Z3MZr~mF?3k6_> xfYR[S}Iy!P#ݿQS{Ɏ?_' xz3,#)C84{=6{xyqUt.w+/xCK| fi}J*?S.= Hay!~[Ru~<1Zu[j=~ɞ<u ]`evo{dGx?2=s~?rɷZݺ}}ݢKW5:4*#kkm2kY.hck4#ޏ'͕уw_9VV9kxVv#|/Kkf鮵e5ke򡅤Rsچ1״[V&=1w};>sCsD零ϰi א-֥j͹aFfoGyewlF)ԝ?]7[zz _ CT񎧧ZxZ.[+hi,&h*fM9R5j׿IJ|_o7* j u{?5ƥ#4m^KV7_>JQI>Xʢcm/ut;Y[i''tύ@YSY&.?ΎK='OUK8mz""&c|o;Ug >JQ\&﷭X\+kOT+,7>vi[Wmq$tE䬒I H7YnaCړӄ}m燜n}. ΰL0hw5 'y8jNOUM"sS]!xwž+--4i7wÛY5Y7~[FitIߘ%}S0T>W [i֭fw叽 *k)M^kȷzyJ?b߅'~5:=/^9_Dn?.kxmtTѕO]&V xfWa(i;ٯK2q\6ruqWC喭s^A1Z+kiX$f35ۂWu:O>+:ucR5*^}տh[\]uȀ~oUm|s%RrV|o%ڝI(ѕ6h+5~κl>!^5FkrG4co.kiZM̏XaŬLc߷/*t\9suUoE6?Ьj:Q}nHI7YG#̛2IHsUd}ҿ߷sԍU_=g^eWֱ_hvau $mBVcc2DG7ϱI&#g+Ut}=zN1i^ONǤ3o<5aCC,t־Icz߼ 䯭Ekyң)?wVQC_ÿPzr227Q$1qmO̰3wYd1rOOߖJ}{ϩ?.i:z궞 C<;0 yK/{pci3n4W|RUܝwnJ.'PX^#Dn~,lO2o-ki"=g[QЅ$龝uuREFjOoc`EGoAZ-j,>^݉ݾrK%mرjG[H5ֶhGM[uǹ39sI]:m:QTץB}>[g&oGm3^Ac˝G;עc'uGL ݸ-;[}ƇF]R{<"ORfifw;&O0r`y\&#ZkN5 Lx^_k.]owF%:{6c}ߛ泒iIlXn|0+~kDՖW_2kfSӼ&|K-īosr`VW|$V#ey#o獸8ݗ]:iJ.Z៙^015]2}c>׭e0Ǵdo*_v5;'4O vk*餑,~O%XXݣo{#95ZVrSK-|[u;kSf4{H6>pF?~tO\|+#{;hâkХݍחy U#ވwC )GJ~ҿo3o?KYI$`74>^7Cc I? ӳ`_uD5S.DI6h'o»}c6,M.Y^_E?Fz_C58-|Q@K8-_-߈o%|J4o1/C ^_!ъ+^s GaȗIn,rی(voo|u_ߺy#RRw'𾹨jց㋍[o%ŜDV?y^"lOKsb: )m4;缷k]iWdŶo9;^K?j |q+iMmͿ]*|^'by}t8__Ek>ҩ}}n^úe=7Alv#[j7VB]Fcg;hD|ws{|:+9KR;.`M"pyvʷ IwQ?]G/_8oڧ|[׷ͻ:X3B@i7"6i!(ÚIysxx*&ݬ/<?ƽO]Df"h7NuKHWl+}5ŎOwΌɰoQWck-^ϱA5;-IOg>7K<1ca.[¥ZY7:ǿnﱗ5ÉJ>^_Z|#֙g AtN}I4hWm4ɒv;6~H:y2osV&zW~G>83xkP^h [(mͭi,6&Nϗs[ Uuk6vS5$zZNn3h!mq;ʻ߻6%V#߹ل~wijڌ[o;93ox+ *VF۵>/V=5>)ZxZkxUjGG)/eehON3g+Zq!.zS3"ύ.=S:z^%';I->~XxvHn.;ٷ[Zȟ,q}|\ekI5-vޯxtM>o߇-lI|[G^[˾FIؕRmT{H4;7}oh'YѹY7GK2\G:\4f͛+Ohե KRU;>Zvn4RE7imaa_2MA|{xOٝGMqgs | ^X][^$Z-,gfɷ>!MtHroR]>6]oƧ?м cܬr3Iu2ګ}ifdgx߽I:i~(s}m~ <%ooKHcswǦF,r_G$T,SI׵ٸ˶f^ }kX]ffd>in̷o4к%yg;*EUeN1輪}N@ӮK;pD=nGWV\(ge~ϓ*\;.-*O]O<[] PxP4]jD{xЮ=Wu$lxx,SJۻZޤ_?3F%_hZɅoϗWﮜ}I/wN^ޟ^)S^ZG-sR]YtK+-Cc' )Mj&_j!l55,Ze͔qClt}M$woUBv$ȉvQQO_^ڜʝm}߆4>lm4im#k|o|Mk~7%}iɦ({Qw(}~uΛ[3'?sż[L KgtēQ]~>V)Tzdڶ˽>/~$ h >k#%m5f&o$=\'O%:KW^vR^=u~hi󴻝GMҮK&ӯ{sZt?y$.˱rC˸u/uC֥~^lfЮ5M?,y'晿s &'i^G>,OƳYhw*{Xm$Z3m yqp|;yinZk:`Q=tzܗ_ C4uO mmM|Y] ; tɷi?yy'4HTGDtIMJX.{bjE߫~Z|EGuSQ}hO4+6'g4.[Z_C ts] ;Nn5?;yG|6{%o<5jqH|5aBRuJB oYxϓ'W6' ^VNzm'}l1Yx#It5^[-R]ϝk$?jh]??.HdrV_Iߓ}U^TnJ1ߴ_oԭc]iֵR˥iդҾX^F-h>LG7[W+],rovd C?{rb*$qwvGyGL-- +!r1 庪Ozs򋕭wxHѵ4>8oM&ffl}f$=z8jַ~iNJ[; BL[}=;<9OIyKeGw,:#,{~dو:J7o}xHtM$%.jmhi?Qv۸Ww&2mfե&~VSlUnv4x˷vIY[WV8m9Fifv. lffnQ}۶iMۧ{Q[*.P cwckSN,^\|9(a]mZܭʒG$Ww\,-%)ߝtOs}i W{ZWғ׺լAꗍRGLe>rqxH5w7:][A-͹6ɒշƪtKZc6Wu>'~^2|4^E{4 uIy,qG;ҌiiSeB3s Q4I?$aD&>Fv ǝE5${o3X鳷 [U-u>_[KCkA%=VmZE b=$m?я(`uhKu~&*2W?c/-l5O<5$<'Z|&om?lQ}YQ|z/#ß/+F5ՌQ['EX%M wlJ1لkTsz>ɢxgѮ%oG3mƟ7+ǝYM7o롬ik8W­nXV\X]5̰;IM3'aw&hb%E?^Ht-e7YIƏ[A=qOlw26|ŏrȯҶ2u4OO?4/g/8spJ.M[͍i7o<],nog_{tB E4PO2am3:CYĬCi&vFKO6<=hVCww{iւV tmݹgΏ1iTխ㑠1[S\Hf؟'YO5PVk_&4.Ciznop/.sn夂(.᷸i.Du f!?YBDgnM;Ӯ#ԮmS7 nUy{kW4~!+3onU5%5o K=38=ߡrDQ'n`ă߯QߙР޷x~4HżVm>osT律~]~D^6WlJscO<0]'CJmxUUVM@.k9i-iq|sAGE P*:=>n/S(;{l!Cտkg^M7$-緾R4RxVe&ɽ7ggf[{zјk XG]fX÷wfMl3X}\j{;O{{Yl'WWjq{u];N{{vAstD Q!Xy'g|az^__=wu+{Ky7qqѶ]Y>m)jڴi_nݺ&_Rum_ƭ蚥ޥ.xMjT1ߚoٝ<#^v;]?sXkC2$+u~i!kIXΣ;MbcI}OZt_{~ o2qϡsz޲i=@ɏEn/EtpL#@rЫmkjU Lej(\д];I+^qȾMm$c͑gd7)_zqj==5x{w~|A|]i5ܚ[q|ifO6od޶ٿ]d)K(AyZ?z/c 'JuҬ 7y f;~i_}nO2#^e'!V[tgU_f汩VSMy (In^~of[|(ܤ:cw_o||1'i~5ԼumNKp[.۫G2޻6}Osj2>w{Zuam/( Dv_漌F*yrepA wqK_5N}Ј'Ӛ`-fKEwD0:YUg?s gӈ2$`?9uc؎M_j:Dc|ee~WcjKq+NTeoo_??3h+Մ7c͜1 #+?5hi&bMq+,K>e7m˿˾Km:y ݺxZMͺ5«9UKyl*)BWzԥ' yǹK'&}}cQ{)5[N]:PB~K̲7fo7Di(wFA]d wsorΎٶ1*&͛ge9jkp|?m7O85s'-mj?gz1>-[l6wPx~ȱȿ7/ݛ+̒Qj˾DivP\mr-%ܐV8Bo|s_[+tOum~q[.rMLڤG*~ֿ=+֡W[,M0գyjj&6T8u?g)Ey^]SG0.hydxO<=T)[]ܨڽ?0ig&F$V\břͭUY.nx-Q{畍sʳ}s^"m4-Hŵ̱y.63$"bܭRv?´U_.|<|Qè[M<3-a(߻o2N8ɫk[BmobDR%.OֹNSSkgxE3o$y}8;;o{3^9H\Fzِ$RUf0r.#W3np=zQNR5طm42 -+tV6ߙUTO*~_@Kp͗s OP46sny2@X+_66%ue]jTQmK7de{ xܑry;Yɹs:tOo^e1+spZ\¾\pȟM9oi\2rvi۶ݍw3|W૏=GWGevȾt4ˆG-!uk&eϲDr֣ue5858- qYfVuȎv}9A'xoEhRVV7>m̱:ۑ?v>JJƜZ+@u{>`sE9zwOV0 [$X&}V%w;ܚHBJGk*h%*𒼍nO9bqO ,C$گ~? %lmG6OOsq1a?皔w@UŵJKLp T/7^$K~ң†<ϩ?(Ŵ۶mGeT X3nj}??%-M"Bv*^9t赲wQX:m";YVEUoDwY;WDjZڻ{[7cRoj|;= y 1O1ܻ6lVcge9Rr<9uV; xwֺ$6~)-J)'qiy:RmhiWqpqKRm}Szo5ƟO"DQ6'EM蛻ijMסZ2J|b^mm$jW{H&KEV+h>s/oe`]5sEWWj5k+=AeD?=EYykɜ^.l% e5}˻#)gT3 {}pԻ{mHzQ曲Z:9wJzMMkaj+vQrGf|'؛bu~v_y 5~pڜ1Y,UcBxh%{k_C)Pw̵zOGG:ϧOf@-io&پG$? mhMZ_^wJv;JGhE}k][s|+eY39䖯Yi#Ry~hNOMKb[&HU1?7]Ql;3_WYb`hg}.$}Ţzy=__KrJsb*K2ݩ߯»)QZ$}w8>am]ck%̾|I/w\\Ml~PPvz֦SfԵOoQ̺}3Gspt~`Ы*,ieWIMI&^}RP*c^=;CH.dQ*k-v]; .aeaqq2?xmGu5{駭wŽ.vlb树"FuTo<חOumoN74$xς8I deoY^uXX.o&oo:eex4~DT!|[~ƥfG.kY&yVəY7)Bq}~_p6~7 [+ jw%ͽdž!ڥFfs5b<4c]+k%u*{'onm-)FWQՉ5|#Yd/GEάrRUW[AHJUP7s ?4_xD]gKM5ߩ%~oNN<(ޤ` Eo\*mo9O_sִqgop0&rD%֑̫릕TO?pZi^_꺚 w7чZٶoQ,8x(߿yu1|yߢ}ψ̨Սӧ<o/׽=fU+umnnuyn/~D}xRc>f_'%mG5MFm8ne2).'lGt~.~hZ=lg?^zݞiڽ[xB8E䰞Xٷ4vw̟p׉vۯ/_6[wcxoO>3Ta'vn~vV/Y]ΊP_1hB<ϿbVRKӠ>cXtmIl8aĭkxY3awoJ֕HͦɩNE^"Ec :Ώ_Ov_[IZ<}=RZO] S}'uVg4 _W]9.V[h/2q%7߻zWVn[m4\u~}Ί[%fk#ccr(}5A2鴋U!n%S[Gwm+uk߾jQmXуX}Yj\?uJhp~',f[]>-H[K2|Wҿ~u;_#c$j./k {UZ?埜~czr4ko<4,|w3FcXe»Y±ͿlD5r%,Kݦ5W/,SO6V6u宔Zwjݼӓ$<>͞agđQtUzHYȫMWد^kss;/eW<szw=V@3 V/tm:lG;VYܻc&߯ .].=XiƖhoO{miơgϧmk#BBY*E$>}I|[ Rwk~{vwҺf:^-śZ-L2Jⲷ்(]uGk=dOı,YF 0r+c'ן*T9+tNQzWuGl%loQ]jLH#4&4m.MM^~}۪)W잯vns#е,[ueS%$yP!n?|VM,P] wkgIs🁵2Ǧ,/uiuZ|4kpŽ]uqîTtxQrz3 iJ3!pW{2jjM^РA[[^LE̍TG ݎO~Yb&׮9=&+vLL|!miLz~rKwQgav#,?(M¿y#_1t{];xSPϊyO^+(㑠1l{v༡\A:}ޝWvwv{ݾz,'l|YOUU纓uO^fͥ_|K]OþHd}?QԖ|ەmhmMǗ}e){]K܆WƍOe5鷩2:M>ӹ^$o ëay4jIxՓz[0BBj2I}k-}dJ5u/~nwm Kwr'O¬6"h_|{:Z^VosUr:0:ZivA^]13|$7{d}^Zgx㷄Os }H.,b;(V[ϳ )rzy{;IF}|q~Zkvz/|;y$[ bծ9=m9#}ihO+ޣKsΫ)691xi|=M*ej yz-L!.&ɇޟ#J쥖 6~S:߆SK֥x{OkC}&m.v5 ɾfvY!G 42vc0~%:Sn--}}O%OVki[xf>7L~?FnOٱ/Qs~_q5M[}W~Vcm?|KmqGQ짷YO&C %rduL̯nWI%>E۬vym*vw{Wot~,W?\7/klxn.8cfӣG7<\G4r%rVEӧQ޵7l(OY.v{[s2xQT1hjBDmdhⳂ=nps8Ɖxz#Z7}=zhvNiVn[9_|Yoy,4 Q+Ūc'㙿Z}zhd4I~WMK-5?WA֭3sŪ\b}Ԓ4hCt%d<[18*J5d}ߧSWܽ~ٷ^WxVY$WAR+SNl+Z>!h.ݦm~}A|t+Ih?x>7u^ 0/W祼ШΦ~~_mʶ*4ydO:i-/AּRFʜ5uI?[ibmiH6WFdq8hN|cdsWKƝw|O_w!4_/}ʏTUۯ{5~d_^6ő]6 㑗newtS7vvBoN״ 4ӧXY$[,#oS|fvkJwMۿǟY#!]Ih#$}msoq v\yҪnmG$~f͟K j2oe#%'_/#j.mjʸ㑖9/ rJ*T(^謵]x~hOC˩[Iayq!6v\wW/񟸾o]^^38(sngmRz%=.)5,]$mx&#FI<S2F'5Eon.bcy/:kOxv>?/4Ҥo'y/2٫Q,-W̬ݩ<߯_I/|DOuoa[jkn{$\뷒\Nڥ<06'# lk(r׶o~d}?s~'Y|%ap:z-^YpVV|>Gw~ %hab4¿5P[侶;X>](I ՚<[5:V6slV9|,Εv} OZ=3o:Nj"X!i6zC[y%*m3y>su*r-Wc7Jmw?^(t}mDVPdY.;1~gGwɈ %{~<2n)kq=_W2S,rAlO/5RWܛDOٱyKGt)s/Nϵ.5#,w",GU"_ zl7zIze׋Ϳ-DUe&UO/O~GB 2Wt*m~73.[^!8(IM63,%nlߏ1HI[઒ֈRK4# ¢Jbuo}6NwY%o-Ez4MBmm{ۈ -'5fzT`æM6|Cռ'ÖVWA&rsmi$r#I3IM߻NvokRjQr_u,j/mO<Ҽv#{?tҹ.'o?O_xgܺƕZEu$ɩ]H̺aO9<7ҕevrӫ ox KXm.'MêA"ȍ&ϓ{^N&}1ӶuMPCOucmj7\E 5+F|&X9; 5kf״M2oéO2gVd2I[|kz4mzڿxI> ImWijZyqHDFmo4 cZs>Sm+kIs|)_| S}n.c.9(є[޵r￯uu-5Iм5>)jֶ+2C<^rIyy ̯7g代m+*rqRPmON/ xS4^K_=[ŷ)6gf/v&ȎzMըx&w^(^{|~+gOKqof%z- r.ŷ՗3srحJpSyu8,O.ky5Ǐwk4ж͏i>Dq>NT0ܰMJ_w_/7Ҕtn]mu3wuo Yh~/iߊO;lo\^ x+-TIu<ڋ{nc9J),ϏLsG\D[/ΆHhdq y>o3؈%˯w~N^_;_ xNPФ]+B? ؒu Ů8tw:Ma,qj ;.UyVIXOXxW;DihoHdmEs%mc}o-iSun?/(ķ`4dZMhP;6> se~C M`7~g6qN!Kv>v#qs>"^IoU<'__ZƗV2Zor;>L):xSI'zmtV}:^ݔw#G<:|IKjnio/k{kdwqJ37.k%=JRzG{ƣs>o;;\ix8m4^!~+mxg $].n#o(¤ez]~|XGcA}f] +ȞH9|~}7/OK/(SGm=Tv}SN]o_ (xs?֣Yk-_y$voY[tD$"Wm-Z^q4QTOK_zn_xg]4/| wp>,"BGwטS'_8N*^w>_Rb ;}V&k{y-UWw#~m.}p|}mKS:u:jQƫx-di!+&c2|k}+,wz|Ϟoa}jrک2W6[l߯%zpmN*'ʨrX[ |k:njei{dktG;v_;sC r#DžǗ#uikRjF ;&^^,[[RΙu ʪV7Ht舍͛n*dwm:5|?u۴WRlu -jbcUl$~Kƿ<.I$}t~W;]e8%m=Cm4ldX./ZY%bKd#}fWa{-|ĝʲxMA4;2lcdp%W4ujֽq)b6O-?{")|6ݜl#?}/MvS7߾Ƥvz[>~jמ=Mz}qok FLrY-DZKC|j(__aHQFZ;U̩ ~UۿdnU<"Uڷw=CY; _zDg\44)mnom&4fHqti(??}=L]W|J?v.4HrXվVm/?w#}bO<Yңկͳ? 2XG<9ٽ_jۮGngqg\ykȓ">ߓ䷊5x?wg]?gGVN~h-&U5lf}y8DI_z؛E^[K 7"E7ZƩq%Kwp1i[>Ͽ? NINP~}^/w< U>gI46o zcxPo6[VHfM,)GtPVwĩ2/K~&*qo;|lln 25d۽[b":g5gw*Xjֿ vgY&V oio2kߺ7]OW)<9(~ygß[ڃڼKo9m"m͹gh]mޯ v8SС 7ߍ/*"5_Qѯ,MޤRu{9~|2M&4+]=<3|pgm`ծlFfNWiHx~Bв3#;v/GW_|ES@-%~KK1ao:OddmΞs,~c]4M)Ef#ghǾamcWm^;h}Տ呾kl ?uON8B][:*SQW_uU~]GZՔz}d'zuVwב<<--sߡ x8ɍUʨ?1lg}O'}~_#񭣎\d`vt\z/;̙|]l&enpG=qT?;_+1o%}]"Euv0>l^nK|-1%𶮭麁%-ݤcWo53D|.4_ Jt'[ٵ>AEX9>v!67hfH ޓm["Ak_,[J 6?h8d.-wo?Lzۖ)tEoaY謯นcD?+Vl~ͩ%'ulyt߆5 KXxMIoocΙqkpInLnt2O3量i_ݿϥg5&^zh? fΕsF-QV֚_#fE9!hFV؟깑zpr=t|ORZi^XӴ$1ok +WͿZq95k?o#5w$RR|0}u+|y/;|3;Evktp^ƾ '[A3],Z[HVmɷgz/:&2Z)6o|^5?Acc51Cs$V*/vQKo:!m-_ͽoo<-㴆{cM9FVv v^_֑W?1 ΩXl' 흾SK1ȳh.q&v:2B;6#Ru4Iu#6ǚtW %suvo߶o3"9 7ן`vy_u/ ,嬮VEoD!fݕ${:<|TNz[]w=_LNj:>LM)>6YnInm[[W4BՂ(2*fm٩&_=O /hmwk }ŝ-к>TIӕݧ笹o?J'Gﯿ ⏆ھ"|@%ֲm-+1dDWe̅s̒%{X<\fx_p88|*ݞ`.AX\[a fR1Y$jO'w<u1)MVwYN_ZNTJ4uU;[o -E ̎7ߵ14oӢ{]=4Ћz>Hl4Z[{{e8t?,23MrlٺXo:?"Ro_st[_-~|4h˦sZ_>Vյ2VƷ{1g|Ƭ7^ܹTQS߉>;ux{$\itVگ%Ƒ 9mZ]ѦsJNDgk{%]xVMT&qq|cM<3M$3:»ɥ׵3"$>\嵺ڵգkn-H~VF_>?~(¤_e?3h(O?xOYl%JL-dmq%m41cfS$&%4`֗'ncVk# A}mU:w:<676R~{lWhdOHMC&ikg:~WskoB-6{ms4RMOA>}Xr_5E{e}_Sk>^"YD/!j]73kXI$q~g6Gԧ?_ }sx5-[O l}n=I64rMHʱn$Dܱ=-ZSo^/fCJKk:i㿖 @B~o-wGGHVi<:qP&;_3FqZۯ~-mb[- -J[k ,?6!+! 2|RUW뿑yiNGAv"vi hb.a7b>aZ9e)[]4-G!eb??+}*}-l"'sI*w s)%&rtY!oݷ tw6% c/$9CH?&Yho;0wd#o|PM [[.o* kqyI~l{?ۮWzcIE5?0>!hkZ^iSNƙ2e_v42$_uǯ*{;_6j76'Tٷ{<ò==F۽[[ hu%YZ!#ʵfm,o-^[s-;%'&_}Hm.3pk|7ccMKVo3nɳ_io%ޝ^_:c͑5v="j?AyO|cxa/^-cnYo+HW ]W}w=:*nڵpmO-'%ui%kw=O4 cݬ&?[|n_{dwfwgږ'B[[~]/e'ӌ&\en 3Y?ۮ V[e}61/Mm>jvSw45ʪ{9W_bEY.| wa.UmGhטS[6 .)A廱2NiNzַC6FWXd4mwZr[[Րݵdp,\FIߏִ9zH%rI+[pzۿ*m|C}zl^-Zz2qm5ӳLsgM^ELĺx7R]e[7:!D2~:[_7SMj&ֿf1-4{WEΗ~:$kn[9ky2&w$_ZQdM?kZįG=$ 㺔yɵ~o.=ykhw׷q~ƃ;ϡ,ִCVI6}/nۂ7!#ֹ*Aۧ_QZ :T̫ej0,nfD̾gɱѵ_׉t gd 퍕ɒo~%uY i+1]rUn{u;F{?NGUyy:VM?.F(b^ L_F9֑K&q&__y5~.),8t&,oC} tn\d>t|:~==KE|,D:d>:E$k[Zǐ '9V[|?-q|Q؛vȑe妷N˺S&ܧ#u{ѕOݙVhQs}ěGgu=oOVzo>H>~:-M*.գr$dciSoT=t7{3־^ Ǟ;QZ ՚GƵ5WKdG|7}lUNϯwWmhŭ]1ucP|9bꪢLѥ29&wC&6xԴ]#[!#++>(DV+FcُљΤm5q:,wM yIVmͷ)ozN%SY]`mHo(ɻj/?i=iIG-A]fv|]&&ܧ Pk3Hz$㍸OmMNP:uޛ qXHt #ܿwWɚR/3&WJj9efdMFW)xIhÿ.}KkrH$nX,P пno'=*҉GnE+;d,O<}?^Qif[^w1]~EU;_NK䏚>Y!!t=K^4.եfḙT_;s*l?sOD.Y6_~ܟzB$ObX]͹|mqۯ1ÖO_nYMI)7.繵VݴIڻI=^r˱|? φ"Z]s33 Cp8Vl=DH+qȬMSm@˸H+(ی&JZ*#Jp~_5#z~7ɗ7K]z"dޱ=fJR[~_4ݷ~,},j JWo_4/]ʦp=h\vW  $ncXw;|/ϜumÞ/l/|Syl-m&m.6g[;&Ն?ϑ6ZC m|6o]=3H俸9oF.ɻjF{;0&8uy,  #9SVZ",<$,X}=q9%mc@ZDCܽHziRL.d17m{)ug빔w O4J7r0\]{[|Jb4V.1HV/.İ" ֫y~ :hU enpF:֬sc$<BnVcFؙ3nWyAJwuifw-4Hѩfݷg؜@ DmKX8$2ʭ2ܱ??]u4u"_;''=6'B9<6\Ip?Ε ?yi/뽾s{g5/i9֯ q6dqo;/n{~ѻ;Vnzmfo]|S;E>w<#iQ]ˆF6-DzϖK{9%>=7BM Zi5U?tV}?V>gPQ-6wzߡ~. Zk(;e$?mhwuf*l'uw4v3H&w_/fjR}z|Nw]H"Z^SR>%Axakx̸O5}Δc>օQ}/h}uZo,Vܘ6jJ|kU]Fۣ>Gu_3[GK}Lekk_> kֺ%wR5=LG"6\tS ^z;o穇V¯]i𖥫,H[}c[wcyj{M6n浅{c$M>Tϩ{?ǯ{Hw}uYed.ZM5mёWgvG޵sm]Ϥ\iW6O 9l̩w-(4֤Ji;uϙ[k˫^<3 W1.WZ6FyO%oN}rֳmW^CP]/N94{٤Ύ$˿ZV+`NR{"ǁx]?O6$DHnhI\潪IJuyX_Ƴ]3Ƞ1̑T?tM}D|mh`iqvMVN%8`V[_&M˭ח7tF+b i Lud{eFsʓO3 .og8;][s|wU؜XpI8?ϵv_qi$ZuD98ni~U6fV BO=?o9o-2) "ig/W6_Jw1,s]1ggz9i]WŨZսG:dA,1~r?[F_~ۯ4-&o$ks:iwQq Ԋ0 mw|LW\R;x+}.\]uqIf٣VoE#Yw[.3Wvl|~.]8^OwYݴYd6XiFbOo6V~z֥=;@߆o2Eh'Y#򤷸WstReQo-cbc6|KFͻ?ҝח2S]؂ȤPsws./~_ZHpdv܇w ̻zAd-2sߙz[$( pʿ)'dG92AeqP 28@ۻ)ݜS[ [ K 'p*#)$s:jȜM*U#+hZ-][3mvDK.5ZFtߖy]*UW5jvVm׾}/qH-$P|ܿmUM,1UeU˷/ל:V~akyA⋑xkķ:%ԁ/+;V@Gl_>~5JVR^~gjG~5muR,n2vV_.Myw}>]uL5DԴg_wV:|Vϡz!HX#Ny'i#uݱֽv:X:qFyPêlUo}i"Y;ex[Ga] CNLA,oqieUޛgr"::xw}ĴϷ[U\h5ok7}εsieT_'*Ξ1+Gm 7d7Pۯc$q$Nv~Uy޴w'sHWX2c9vQS J;ZG \I0fܩe~;.Eɭ.Jڮ乇O[+ku)yok2Ϲ}Q6gFI->ONOIm_o^Ii&5[y:yu~uiX^6ojU%;kfҦ-?>ס?b6q{ic- O-p"p,V6U_ia$W>~]>dxRsQ :4vHc_3w3/El >f7'~cN~4Fy٬?17˷v~VM]c̤KROK59I,73Jfz^n6+5Cncݵ?#RݯևKrk.%LyM"oߺ26nF\vnf)7c÷ױx8&T7RG=ܽ>JKrh}'/s?.+/>QH3Oܒȷ&?Veoݒ/ >/ҏʌe_SF~z>5ʙI ~ { WRR-+$+_8.iIծ" *I`ZioOvo}lU MG{/zegINsIt}WM}5<j-w]F5|7$j?vq_l18l=,kV]ZV߿S\EJ򅮓[}mȤ%iI v|s}kg(;=/yŸoŦ\[˨rWCʻ3mV5ܒ}I$xٕ#+4's;;ur썧h?O4o^~nڣ/4 +-ĆR tS[q^ ΓkoSof}ޣ:Ƕkɵ]:! <_7R%7e/)&_eY|)^D+]O`+4SjfrIr5H^c?nD.{X V]sZK ViHaOd L։TL]|A>1,-隈snaݷiz#~mE}FoKk:>&&'Xg֣7ZW[j9MqroWwk~xցxomNHV;=Ei?|#m/v}tuܿ|3 ֋jߣ.KO z}/~1ch1ysqxޱ-;Z}*wjW5uOon8^KK&[};ZM>kwukK$iq R #HiGDޛ8t(ٽ]>gYNJэ'x__ØNlmS:%;Bk ~K4ڻgٷ0R{ny84N~}~wam&Onoofo>{1ܬ>D/ceR uZyeg%w6~lbZ]k᮫g}0)0xk_3M-d4 og>MdOd᥯E˭]m߭[Z. Z-hcq\O82Y-xݔ%3.>=|eɷ_+Ke׿ 撗\j7˩%5 S233=:"&G̛+HSZK]/C|wvmOntO:ڒiHW6"E?%Ȝ'"o~^xҗk|ˣ9Eߊ~?stV5|Os¯oy;Ou^nZDIٱOtgBi7s!c\-rM}="M rob*5~y߷3jv䇯O t} é ۼK{'c[f#mݳMo6oxrۥriyjy߉? 1n| WԢ]8;;xcY[OX ~8]} UNu?wEwRjOk筏(i7WW/sRM\G:;6|Icb j0nW߾l1xiQ]>Uo6h䳚]In$msnO7ܼ?"f6bnm쬺^O}z-,ujYuw-y;nOK3O V~?] wɯje<34r4n xIRV+FO=c`]*NڤY'uI"оw_KgO>y$?{ԲEReg{ݷzcn*+GB3xM:NmC,l)t7\B3n\IvziN$_.?N|UWeUhX5OܿӪn<ϞU[v|fg?gY\vn񛫈F[umHȬ7ȟom9IrRn|㏉]%{)tR9(&DHwm fd6>ϓBM|skozO>54QߌI*Y؍I+L˶Amf} '˞tt~dƲ}. m3{=ݸhVm l鄛*aEݟMWkw[OKysټMjO~/w~|ώuoAϳZi~ Y%m6˴ͤ9#~xEI7z֊~ 3(NO['uۋVO<y;I軤|6!([V뿪ҕH+vFh)4Α"}(~ďlm廢s(A Se宺^?M4դ״#zXMUH晋r~t;xw9{_w=<4!rM5Ȳ {_>=KNѬd#c/ﭡD~fnIz砩B_w_ kkKu "ͤ$$|d& :XܨOǢ߇쬯Gt-wGծ5߈Wn:݆8/k}7k#7u؈y{/^.sfkM_麍.@F+].n^FAd^HiG<?(ԗ6| ݭ~guOgz75[XtqGiqRhQL^_At+ >i^:_tYC5}2uk4%O=O:fuǝ똄iҕ߅z߷nd4u_]M+8l,E̻GG%7~7NIo_ץa;>Ե?T.NM0Vfo ?s#;7sLҵ-JRmM%1_;o/}S_J6^l pOZ絾M6++LBԵ"w7㸗Ά=< =߱ zt$K#]smgnM7 42'lۡIw?y#PRxKV.)^ܯ|G4QL}6mkdwJKގ^9wFd rhbn~DUٷY>tF-d.,(pP3F[twM<66v] We\%f6,3QV[[k(1 T[hӷ^wϗ|^vAA嬲\i~Ӗ9n|G4 }04C!fC<ǑgTZ񇋵 {X<]+l`4K5Tڤ̭nM"i ;vIOQ%6^mӢՃw_vZƋ:tm]RKI-eXm gdhwo_-{ؔNqrV]:w1c}?ܞIx=zJ!{5˥Zr\527#m *'F+%k~畊J/}~]h^?<6|2&$tžլ4#닋?EXgym ҇ٗWkWRWv|m:ھG]ikww2oZƿhk{yl[!w}r%xJPzĖo{kKG w__3t ľ M=/S-/Kj̯jM旼~g-rNW<gkxMևJ!6֯dЪM6^gKZz߿}ݻNxGߋ#7xw[?;frwö{ˑ5of_v ?Q=mZߩ5|E>)ǩCy[[aPZo:(mnt,:<퉳 Ӫ7I6!5[[̩~<Ӌ?|%gqWplt晤Oƛ?r ID2R_kI7~_󇉿kƭ1]3쭩In$WhU<ʢO'a8m Χ+i6<VM_O?]Ɵn5xy<jgt.\G[ūW!ɹ>h$ѥ^+Tn3]yt1ח>jm9ٻ9%pw{w_sԎYMImס 4]xOþ'5!w)֭fo5D~sqI";وQcc.':c8Sb߷wL<g^[,Y5ׄmI&_;PM̛<^I<=g7^ƣyg}Vn| iǚ]_snxfN8/M:[\O63B˛&HS;q$5єbmx}V8.*L| мrW/4c]\Դi1oB,ۗtdf sG寘y3Jtm۷UUMTVOi亿 -!m42s{r81&-oSO;?څ$}Z#|AĶΟuŎKUVfawy;y{.G~߇sbc6߲Z{z&w5X_\ًUC4֋4B 'ʳ=ѣOym,:U 7iӂpݿ>Mx#'dEhkvC9phU4w>珋rMk}cTuw:MWfi\rAom#\3_OO㮊j)4Ӛ\q6OAyG9]ųMY4s22l_>L%'/g5x|sǍ|ce9n|Q\6M_+LZO-[b&wGF]y{9xߞ_> m!59Lxcvdo''˽f'WC R;_e2NPzg^Qo˫x\Ú]$Sf7/ [yI|N{3n["1|}OWIpZ%.o4?WώKy/{-Vy!ѿw漌f0~:Eu~#f{+{b w1M=ݺkˈxm;썣ZkͣMF|ӆ_#סQ%'_Ǯ/NjӮVkvJY 9O}{xg)ҫN0徝OӧVeQ˛A[՝OxgZޱdךu4}缯#y'6Ͽ`s+5eo>=oz}&֧kOs3v ڻ 4`I%k(W`c?j)j{Ic3˝{\}R5lC5f0H;u~m1kJMگ}͕CxL\taM<[ˊ6Lb(O#퟇*Ѵm ռ6A.ƶK&˷[oiWՒz_Nq7}_{E |k _Z=ֳZGGة9>޿EԩU߷zͧxv{jv%^k}iguI$3\>{F5wׯSޚ*I.iv=H,l$[ e g We~?B_<ҽl\L@u/LWU.KKA+ί||҄&7:=k#:%_pmgq͵m(I#۹ܻ}͛ա n>߯GN -V/؃xnWѵ"+]kۋ-M$F ZI&[X] rC{ӃwkgEG쥪}мEmw_6sO X\ng̹kml؜DRdݯ81i{?-ωI jkKuMD^Id5Fc[I |@d;)#:nSmY&׮}0]*Yh?}RD,c]>ín4?sO'C6t{H>T!Q2JvVNMw{i-LӥҴ%gԴQC ¶2m?壾3~1= 4#$QꭾLi)O[mM^>k,XZm{^=J+'w|sqt趠sUcB* _5n]> htՌ@ţ_3y}t\GO6U5g+g$>Y;_ϡ|cWo[CT\Zjvڞi$h6o-?Y>Y9"%vwSݔwٜ ,h0VYY\^ĉ ZIsmX䙶*}}$o6d/Otʬ9Tb#μIj6~#֧x͍~fif6ܛ6":m$H:mJN[u ;+_;\xo~V\Oiҥռw:|峓e{GD0 >JM.fے1v~{=ῄR STu[ihao L#/ȏql^믟ϻ*8KO;[\U 5̲U/qf!GMb=7ọeR=>Q:V>|3C2ۤ#u5-te)Dؠ/ffo~\:Ѷ0Ԓ^}wcþy坶LOqpwF&ՇjM2?~J^M:~:7oC}/%OmQju-ysF̎&|y\v:o-2&3}ܪŗ+U*M&̣6z:;ħbzcS˞tv_JO՝ZݺǨI$ hVUC?Qb{\m7(wuU#Vjg0/ݥ9͟w`CIy߁|9=Kpz5SO̱͋[ۯi7d\Z&W^oϽpt=fMc"ʌE.<|mwy{{sݭb%)%}w<-7w7LntƗQi]Y*џ.8ݶo+4U~糔|S$xSsD{xww">]nm5l6~ǙHh]nw;a5_WEu;=3 XINЫ4*k >K4~c]N2;rߎƎQKOsc!&Y. Y?-쫴#hҼVZiqn޼[G]Рڵ+Ai<w]M,-"Gf|ٮft=R60|xWoܛ _%M!#6yo3푳/BمRo/~wɳ!/׷.׶𥎗hMM Du;IΒ6[䏕ۻG$ēoׯVtƯykk }b?l/Gk}I}4P4I"Eyپc/}eWVK]woṢ{+oVKW>eiʼsG6y.|tG*[Sq?o5bVώAۻ**Hw.[\w_VЯYu7} 2<nXde"9ɇDwOa%z/T 5GÖ5[5##.>Y>OgJ_/^8%~ hrMmlj൸7涙sCqM?w'鉩A)E7uYokZkw?MWi,*dkAY#7_KEFniNMK[95\-g2E<j3L5ռ·6<{KsU̯ܿgO/žԼLr&[2Q8E͋Gp}}d*l4J¥~we>ʪ=>|u?G Wԅ喇Y̓ #LI9-OOٱ}W $MK/&DMXE^k̺XeMmo96 Pw~zw~^ۜ&}Di[t{]^XV ||q #Уf{ͺSRoԜ!ʝ﮼_*Z=zAg?&YmI7ț$=MƖ][G{[:Rtߡx]&~#5|k{Ÿ<kfE17'?4Ώg[=&s[xcxl5[cckw?Hw/ɳUJVW]εd,/G?iwuԴt˺dxo%i-##4) Y|/ezl'4׽zU/7V}?Fg^Λ;˜o.ul2B$;vNk22[= xif} 3⦃_k_i4k5mjG";2{s2K~9_GÍ]dwm;[Ӯe64w6C?*?תN2{M?s| JlD!ҭcbmkoV5%uױ;.o'>._:M힕UmcRi<淅o^U#Xw}ݯX-ϯkyAs6;B+DZFefoW6X9I+ݟcS~B_灊VE+UǛkC;9Mx_6':'<¢SVN\y8R G*Y^{.h4q̏ʼ?$>Y+?Ӫ9v{|X{k*;yW/6if lwO6UduuT!G3OϬ6Kc=Au٬dr2/<ۼϴgV)Szm~쪔:m}Ev<=aZcx$ܭ#"u>ݎG&g}qK;/м[IմP2_[?-ɹU7}ٲsz_N亘TʵOOf yFg9l'?{wɗ:ջz,dޟwq*Ӡէ -圷j(ۻrS3}ZLk~},<ڂi-4RHjˆh-Uw5k' mkwb~hZ>⫏[[]g&edO+F=/QmLӴPᮮ.7S" ng??*Z$I6ʮǎ?G#RB{)5EݔY$.C:g_ҶN"D6a%bwfoIIw@`*?ߍ'I'릿++;]i8Y??2>q4y/&t1>qzgޚ+)ٵodr֢g7ʫ>O/'w5+Ш#͐nq{zSBR,Zi)l6|"cVVkuIrOMBa1ӬqOUf};׏<\1dW6j\)Kƹ(NsK?⟴]SȉY\[Iep+ӞzR}{QNA'5B;7 7 P;~ OsⱚQ^l~k[&vVwV6vw9T{=s]]\]Rd3U|ٶ+wm-m[{yêƏ 9tr H?fkk.Zַo.7s41Op5!#kcw?'Jg\en>XG#܌?X}bR_3d{u|ɻ˸kU`en,wA},|?*zںk%w;Դ&fjKmU+mQ}=kJMiQ0Vk׳E>U}U[t+*<|nrN?'$Z6u\=ׄ/WV]<,p_kVvI46/!;9-:S7>0`ݕCřVdG$7j:}ݯQ\v/ܷ-̷r_kW.`H24pHh\EIoC?OU:w(a[ o<٦]N$AuU]{z_ZὺD,<(̿6&ٽן]5]>eө~Ov)\&U=k̟M;7,rUguVe  `v}\n#$ 8 VԷ)&_Ҋ~HNg꿝f[yrU=C[/FA}ׯޥu_p3tˋj[vkPn%>khwǺ;)y H锤ҷzψ^MFudUE=u#,sH>Xs^:leFΊt%;uקOլ|>!KKvdeXE-G)|Yp^U^_**΢}F~|u&ƝVkԼ76i8oKwo42B&̾u'S[mtP;w?C[>k$}/.OlgVдvH~'^+6ܛjW/Wv>NWƳu7-%7[slo{?]/;@rׯ}r?Ognnh.7N֥g^hZ-ŕ7O2MN6Y>USў?1ˏľ7]bY-,ؑ4p,ͷ<NTds[~x[Dה]k"o:q%QݯLc}]NGUº=ŝS?" h9[ɿE>xr[QVr^t0̰EhñDWrnW{*~5g!ǷPWbo$-UO*>OU^]#m-Φ߉L6Zl̫9Zi#}'5~̈́u/[B< שݷ3kRfr;w2ё|4,5#_b{KWхʼn| 12ʭJ?ҩQA(hӯ{t]cKcZyxާ;v]YM|_UN6rf[[{o>ar43ەǯ\鵳6-IsV1y5hIthYsWi_.H𱓠u&M#ī&~qy Æ~yaWD}<*t]][*n35gXXb{h |'e_Hݶ~ry2}Wݾ;۴O,ow2~o+;[g8o'h%ߺz卾{yssZB}gS(ANqܟ?Zgk.Ӵqwy9 /^>e*ח~JW]|`-X/BQ ,XbݹcO-|k;*rQm˨_Cdv׈^Eh{*}+:TR7{kzSi4ۯSF's=ytݟtQ}Y֯"{v.iY6(yZWݹFo<|F&QwgPIiiɽ8ynVo^Q6׃8]ߟqJT5f|e[5'C'"Mn~_ҭT~APVX!Nw)'|Mktw!1E$;iD'<`m~o[9n茖h$R[zm#n~y7;{.$͖ &a"xV㝵se;履C2 Y-a3ZfU弙7|?zF:(VW'ךZ_~G66uZnl/x^tY6hZEy6\{#+e5RO}ui|3 ?yii;ǣL߉{kՆ}WU_M#e5(Mvߣ_ ^ϚU{~O!Ҡ-"rߗ޼VXw(/[vkztkF?6og4PO#fE]nYSsK䝵;G}-fnMF<!_&.\NJU2n <>VZZw45+H~{.Cm~Ks]a򱐥eo E rVYQ^2Ii;9vѮg 摾h=0rI3{qiɨ:YXApYd<]kGo?\8|Z:luߋvwj; D||_.[_,=##_;0ΑBH̿v$ L:M)/Ɍĺ6=gK">C.7GߛoZZ{!Incߘ|5MVm)h7]co?Kvng>?ʲYIDʮy}fgkeiZ CۥL;nd~ify$gͼ+ՔnH_w. |d#+>6ʿjRW^}̓w|8fu$ .}֧m',~@UZRr<+_ԫ7 b0|dc/W:J=V"TnumzآLctv~PNZޝ77:-o%֯L<1!nw;7}Sֽ8ZmU}^ nm]Z.Ɯ Zϫ^X24w34y&7Gy~]jVW!ngvn2no#(^>y嗉.ɮQdg!6u}+˩Cٿy>鄹sVem7^{7,YE_ᄼCi|l'FeN7s]<;ZgRq)-ܥFд/Yԯ"Uvɳ$|S_IU=Itoކ8g_mgDIn,$V13+lmwo߳g<(Iԋ=uR[]|벍^JӯƤzyy.mcSx:Zfm.ݬЫ~5}w]01)Y}F]5R"ܿ[ozM' |g+io˪L_Jd6Z#IyݵcH6&婮y/Z>4¶`Ryc,I4s|N5xL^>gP]ǯڵIJ |+eyNvGG{pnO{#] Uecڲojir ,MJF9&U՗oը߯`CcOs5+Ml#hccVm+ldO4 TtXJ`wg|ͻsI_1jo&nmʔ+>al`&2IO }OO-R+$Z5ؙ.YroqZNvM'ꖱJq A Y|fOM-?NNoO?#)Fw9MOIIO.``+pY~es]U3ys׺>b`"щ% x6}?}{^7hg5I[{_K[íE亱ףЭcLkŸV|x㸰ew$i.3(FuOL u^m|+K6.afZ&u=^&֩g#G 1 z'˒?z1э˶?7>R׽~S_^&u {h[d_'z"y3I,}DŽԬfFg?^2\i~o kkNHn&6qB&.OH|׹$% ߥUQխ5x~hĒjWo%D߽%ӝC㳶{$է"k ]6nI߿ϧnXLW躊e^A ?2\*2̑F7}=S۝Cu/3ƞ /|-loRC{WGHVI#%߬g6..7YL>/xY. j~R9$k7.wG'c^>h:}gg௃V9'N HSv {55ċ^ڻ.͏"&?,S +[?a?|uOxm6B5? ư_5~\3;+]=ofHm} R5:_n)^֧C ?<YӴoYd .L+,>c#|y{Kg#NPOKr׿S:.j%]{|^"t4^5HVmP_6Lдɲ5ދk[%d=}Sz|z|o˧?)Ƈ "]gW x>$uΡ6K8Y^qN]^F֗tyXY|M.\x[PYԓΓfD9O>OkgUV߿Ҕg??NƏY|iya+K i&\IpèIIquٟff!jׯWk(oEb=--S5Ԟúk_wv7Riz:ެP$k)#.9IvW :d*8O_|=y>^t8 i~jv hDe3G#<6$o9W.O}ІWo/BѠƑsyxOt$ 3}?lI&$aDp5Z8ת%GGwmz_oXo-hC5ߴ"<2w*2j;}ubMȞY^Oi Z-߻}8aZml9υWi/$W WDz5fhci!.!b|^*p+^ѭ)TQK}O~DX Qѯq6,Zi>W26-~vF Rsz^Z{/w^*x׊l-A` g 3.Z3;ݦ*>uoGon:԰־SMm5%f[{Gмwý6l?;>IW ivG]j46e^}^ϏhuMRhK$Mݥkg|4w'M]ؼݹ'Ux/i+>^; 隿ŸY[VjeZkbI9...2{Io|?1Qsm~)ҌZ[@|G[_/+>*Kk/*;#5_.Ei5Ϙ{$r=;7 )ϞrN گ_s[\Ӽ=K^jꚽYi<X^=>{7=W(_ _:Jt]4pmh{Y*eW9H1\׿=s\Iimx:ĺ?bVK{r$̝#YZ7Hw}xzL(O_k3x7V'_'_Z4 V]C{i6룳{wDO2xogFk;.͆?nݟp~9Z-BІIhr5XY#јn!z|xRUVz:~vɮj-%o:u%kuemD72_MkؾQi^_gcqhSYkZ7,koMzggk#:pc߾;.,wMWgN[>BGmQ.-cmnedM\]\y"{oŸ->z3{=<7{;m7œY~-֛4Z-Gs3n?c˯%,B-~_/ $WxLK~{X-vys;M?sc-y]'I[X7?=tm+O ݵ-㗞ER͑mf7+O~y\n>%+&n6 4q3]ܝConS.YT(Mi&UF\RpKV??:)~~+ֵ)yXv:-u{²CݻJ')qcd8ߝ]^o]8nQ^׫[9.|ctj0l3+}5IwH,_^o윳7Q^ka,bU/g߯juGλ -x,R,4v34FʌKtۚH|xU"i6k˽JV$}S{ -s3_j=V[y-y&mI$+پ8Eih&'7߁<[ywk^Ookk#Qmfemwyٷ̓)WN|]Om+kQcssI庻y«l]Ѣ?:'~ntvJ:9eHR&q[4>N~O%smWX{=2zpnHPj+.g5qm$(B*I7|tS};]lO:~gj7miodsq ݨ--_>tjygJUzn)^σ1."IJ/7~GmCǾ*< Lk>$)q{u&eeΚ[-<2BǾGDsM .^48% te?TbeZK*Ӛ}~:'~}3Kirh$ۼM8)rK2ISQmٻiwߣFr޿щWƷvzg.4@a]G7'ai$dy3y0߳oJxXFJ{尿sѣi_~ڧ -o׉eZmwZ*B{y)$t&R*t᤬i{!Nj{?_?Zx3L5 T,!]z{#3O//7%IJmؾwd9&.)ׄ!Rp*R];[~g~=||>^=iau5leǗͱ$Gf02XS+sAKOc#Iҳtilh:Msi'Gly<?3cM%(.kvN &KWO7Y[xs:ůYjSbDOVeXc"4ڬ>LpLQ.$IseZ5*xui'^}>FT)9F˕/禿}6|2/ᏇּYi8I6Ls~颇jy)-?,Ɵ~oR/4^j=-(^.ii?>$I,u(,]Uo"{s% n丹w(v}WJf׫ɭQSoOM;.q<3V&$[]&wg *ooy;$96I+NZ~:3%eϪ:'~!'Ӡe8u t9w$geJSV*qoHߡp:kC~'ruֹkkEΑ{6uikmu .גbƉ oK­-G/=wvRqmu}RXSEྥAh^(GM]yFjo#G7ol1VԤ+kOmwE7wO=3isgu-=ƞkci ,78}&" _DZU%}4 h8<%kRMAӵ-[Y&ik(s\"BVoWT<_)}KFҼg>} R FO[ˈ2=ͳ͚iI"i]&W> P%{CMo^ix:n%ݭƥ=ۿأy>4o9$:7T{hӻZ>^Hv^]=GҼ7{_Ioqv6 WFlY3㹹8fw̑$yu:ppI8+~xB*|KwYxVYzƗYoG3F jGGDBr鞖9xյk#){xdZs[L]Fg7y?~f߽umnw{]-xy6 vᵹ+?~١.-Ek;;6_2gŵϙo3f4Jt%ѵo{ߎwo🌵 +Xռm"+ 1-w*vqMsokugCI>߇޾fFPO_k&k@,=Nj]"M2=O \VQʯ3kۤnyeW/*wv{_u?D;|Ua4.mfφT఺~o#}L6?_3*3$ņ~˦0gJ 3溲n)j:<)h Hy5eŲr+>D#E\_N>0TW>u_>96^eR^__kv)f]QH6|Hyڻp;ɧwfO+ŝ[hV~tiGoxz2BߢmhdGn^T+]\M]_V-'}/nV~GS8[Yqı:xandBVG1#+C$̄7ȉff?>ʄ4~xRJ~{_Ρkx[Y`ѵ[5wIl;[yˑ_:ky!ZH}'r(U9+[>,|L4o 'q" gs5idf(u#Y!xcY_d?QeC*<[޿waJ6^7+d:FD2ZsuI/$ʍtGQ7CV8 *;|?-E)NOok ׵=_Rҵo64mMfKa=,QN#N\iFq翮?¬j=ߋWXuqZR[]f{yf-|;[#ld5y%\5K*T׿>ՠҬY)ahy5FN~wf6T[u=8TW7^7c &=3u\[F7=Z֠K,Kw32jq]Bfק~mۧϡ):Gk1kg0R1=$V;reӽ4L$6@2 ʫ'|VľÚš_^c핞׸%X ߿5Oȹ(~Lum DX̒IZN_]3UC5Yt QZ=V_ qJv`+u%wA7UwMvgKyς<ϥiY,ֶcmyw+DM_NJҒvm7%z|^-ycLkHY[i$Tm&DdjJ:j]mߗСCO[_S01]-Ÿxr}~zٷwrj z6c۵w>Lg5][4EXK +寔R3I ;Xܑq~MPeR]߮k0Ek'C(oL-+0myykzCxVQls=}eN;GxZ]Tm-}Ojū;Ao{`ʄٹL̻ww֚L2L|EkjVZɧ%Yn,d*RIMwDٳgB-'w׭Z7uS̒.̲+|7Gu YX5g<c\/7m?—v+~!1F̆7*'ٟOgw٭Ӄ_%p*QM~V96x+@Mƣ5Ս껤mOD-c_ț;toO'c 48ןK'o>3Wu7[X+nem"6yOy$߯NȺFm*Odf6agYkYW"Dk~ݏ/|\iI#]I4}wrfgYicdi~S~?|=q40hwĺ\724\I owi]<%I6o=,-xSzݞSWӅ o]G͟ oSśHwsjV\'$JgUmiɐ/z} y8Og*V'_o~]SYg? $֧֮ldQt,靈uڲ-ܰyS?y;b+˙.龿&{5Ji_ߴGߎ>$߁dּ/"$p꺥ƚmY3H~og0PW-?rr}zs}rIԓo(9K~e&-U&X -:ykm7$!;Rw1GݺzWJ1$pk?gi-:I4Fw&c*iI˧akڭ/(gUդfI6Z?3-o,kkFO?#mwץݺG 3jt%t+tQVZufVT}ݒGɪP^^~碣%?>F;y*,ᦷ9ܾgA"|#<u8ͧoi/{3?Ffʖ~fUm~oJf:Om>晉g(Y>_,oX6S.k'yxțh9L`Vws*8R_-%~o]]tC'Nv%k/TGzcoDO^|ZŦwsg]G$2I6}dWO_cE3]ysm H|cq<-Bu?7?%c?] m~bQӵ.qo$w8y/-[}V5#^1q&/b7;MCP[>6^4څ$sM$lq-O\v&+A[yx_~_-,Y_u osCv?7 J_-{~&qݵR֍x;NόIq55KKko6Iyu:&FkV;rU{_ ui-徥YXz hp͹Slӌ*E%ߏ_{=ɵE.4=6RM:`v7IWkj^ߟm/m >jzq!uƍ&RXdgskN;?&rw(E_NO|$K]:v}WQUTO&aˆS#|bԲ{/81i{=#mw(kKۓo[ eY,ZF Y^FΚi>Pac z7#jY!mCua6]>pgQTJ-6bjRrk|ٓ៎ 5apR]ɲ3a舛Q/末ܚ^5Q/H:ϊ_%e. ֺW|oeFO-rsJF\z(]^g< xCwm$܋mBGZ,׍ :|GDM:׌{tTWC,`xnMIGI3-/ڒ;ؚaaVm'gY|nT<'k! C$hi۝,oy7uisׯ+gn<3mcv,!kԝeeEhc?Ğ_'w'[}{k~G|3-|uZP/ O&9$ho7i"ktyǡF"Wz.5-&-/C:2D-G luXv&>oG+V~r"*Gw_8[ _XW63[ir,7k ~wn2].qW?|Aykh4'1ೕLyH;:f.G%k>2e[k{#U]VuvUŌG$c;qz 4]A5v޿ǜnϊ> ӭΫjik$#ɼiV9$ytD˓^ ܧk'oT kۻ7~ m{W$Ƈod@ I?r'wG|׏oڷ<~c|Qjiޕyu&Qum{YWtmc[ikQ*haRWmuyv75^RNYJwkSmۣ9'./w@,1YT[W?Ἰw)9ǿ~MW'zVѕub 6G~\Ƴ-_{i$ @ʓ2|ʛ<'?t:;Ӗ9=+JvS_pJdr:*;i_5Zu{s礥^mrD,IT}￞:Rޝvzo\9{-q[gqVek\烈mY9Zk3Z1pNے=e|w6Q}| lJPrɑc=Dۺ[T;wn[ YNVsEM] 2^?zJ{?؉ YVWu#F8PfmcwSd62AO=2,yw@ qs_zWLUb{󞽿ޔ m ygs'koa,@W獸}5>$Xq8ik{-KT\| ӧ>GnEGdo[Ş1qO?k&eĚօmxw['{4۫g=$o6lv~/nk~^{>1oQ%Ӽ3[D.Y,9d<;g oG^rZ/o\|;>i:6g{;?g-fdY]ߑNsT2pI^?J< gYp"nL\ؘw|W _{)ӭnwW ̌v ++eܮfqӇTKnb!Cwxߎ~8xK%K ͬ,l"0ش12okt>FO/g:jM޺FW>N?ϊuOŜ)6 5):RhD@ogdo_R?s<ÿ>.xZD___iWɈ$k 4v}TO;{&p\]ۣHҕMu:wOω'~FG]Mn[I=?t}Qm4ןn[x!olz|ݷzy:͋m]'+HGT86痑uHpʾ(o~IY6CH_r?#{Թ$i_WE[EwNg^񵶷l~~7s{ַq_l|Od'ӌʻ$Ex[UfWU~%wsr{_6^Ҽ=%ե==ƧX$Ek|ϱ}|e}F]i77.*NʡwBϛ<>O5ʷm=߶n7(:Vp^=޿$:C\[g3D_gDyߺ3[=}'Ro_?=J*[~z;oN'5+ :jcMG廳Vk8HѶG߲hd̓Jui^OKTf}m5soE"mq Ar;YzڽŝБ.ǎEmY>WEFW\b#~myoԓmRXE58N֍'\hcp&9D?7zJN"Jm}*Nk~04{cd(rۓo*RyҮ>wp_=.+&xϟ|)5 /_<V֯YfhftYsb<~Vu.T==vw``;sB)M#B?Il%g+.U֖g4Ne|%"7>FS1s{֯_=_s^:wMeagpxsúSI)&eoo6ɮRFUdxw'踯'cMno~+ŚiwڀZ;6ֶmeFHxI3󏞔SI_˙+wzywv9b}=87]oEߧ`>,UNFJB/89We sF_-[M M\)~cy洕%qoH1&(}k˒8+UֶrLZIK]nLs+kζhV84Y|ƄF47gY:g]Z5שQj[0i^B5n]i&Esw~|%(b*(:E=>?e5:o^^:%o-{P+׶[HyiMw8q_Q= i^Ӯ%.̽35FEfSf9IshSWNo3ӬQoƩo5̹!F0̿hct߻{_ҒO |QRncLV3meF9 8deٽ]uaRz|"[w7ڞ|5'wAs1 3nnTr!؞dl~iE9E+Zsׇ4I_Zm_c",Kpfeyy?/|g}hA68$.!8RtVcyj(&^=ԑa>gv-Ǚ+A~mA"`K6[}ڿfﭿ6Jvw2>oMK7A5d[Xϳ[&~VU"?o;.-ED2#ɴv>j [~4@p۔5uk~_YpH}>eqǷo.߳7;rkԤd287/\z0Pߝ{ۿJvપooORd@Hyۉm=͵52#Q!o a,r=+E5_O9 GD5kkY&|>o"Gido/ó77$on%=gX}&i|ukIw;4s,ʱ$>_'dly'w{R&Աx/ƺelmZYcX'uyyp.+)ֻ#7J?־g#^>ˢ%\D'vV鱐ܻUۿO2y+ݽ6 rVjg?O]@m umʭ"Eٟ(%/{<:~ߙZŬܦ5~i>|SC|f#uhnšZߥD+KvֲΒH}慙ofJyou|U(ws$/ŭD6M>(FFݛ59u.I[c6huM67A{f8#GYǻl~8_~~fkf]95 ѭH#֍LFeT-e>~5V￯sm&_uXۜG&xԭ/*[xuCys89]inSud/iTP!gBb+W> >YW2j7V[:k$]Ե +Gmem\ݷt澊:QMkz#~.}z;XE=ܲyFi7/̭lg׉:p_y|D|=fSwkDd(F[W{Bp{}Gzь&?V^*񇁯)i ?66OFG'7R 7VS+w=HncU"޲ymۻ¾'Ef:_xn7Z97/D1BqjV`wNwL=8Vsְ2S_uuZF\9^]eU1(.]8t{k孷41o[&o4“ⶩE5wyƮG:F$uRU͸/ _yvMtZwugMX⾯"Ոg0tHۆb/eyL3T׳~}~}\fWW[=jz>z۴ KEwJ3̗ml~3 59ۖ~OCí׊<%/ 6qJSKkw::Yn1>ݘmᱮYُ ?,fQ5Ҵ+9o-k+I$fG|:󥁆Yo[kwZw t#D [ɹ¼N&2/oN5j:k%Df';=>oq\ї-'ZhYʷ'.۝^+R_9k׿O+^];OBcx&2Kqg7dXVOڧ[}|yFߦkԥg XxŚo$m[X"5mEf#Mg7>Wxj_r_*\kgx0iZ^9[V؁s +I#ʹ_I75U6]5eUݧȊi,*9?ީ++[!qu4`D f+v񮄬0y6Q ~_VRW4,7w2>x@ځU]oݮkk[=(>EHaXM꼯ic|8wsWZ:Ds@y 橡w-ՊTԯI/4p!6vrO=C 6Vi4j|v:eE;VQP.MBD}h|U#Y$[;zO3jRVW]}{u8O x7PkvZhV |hUy'JޮYQ~9V&OKgc_xH綒&uX ۗ_-c!ˈ˨4-nQΜy뫱{J%#Nn`PSo JU&MͽVԡ :Im~ Vu>'w޻~Ia$3!F/"Or'wҡ*^iJU7[Ǭj~2io%_dWXV\rciuϹ 7-UN\5{߸sT wEgW[]6? ֖F-icY%Uٿ;{VקZzhr_xFsYiӵF4iX$e[YO:mM7ev#OGmm~{6gkpJwG$4nc˶|諄5[}ݷ^NwZ'w^/5 i&{4|ZIkX6r,4wmMKUF<76|`o?vF{g_1|TUoUϙ5kM4nɳsTJD&G%>ϯ47{TPc}]V57W-7{<LRvoEM[\mMWSԗiՍmg9MϩoOԭD 9Q mϘCMnS|\tԞ82*cOi,muT^SWrWM[8x1.os;~V{f}gi  ˝ /tf &)JO^U+{/_3f]CKGujpNa mŸ\&ye}y~^]T4K9VxhO<o5rͯ\> F9!o\4ڜ_6Dk4^m}t{5I{y}>gΟ'cKk՞"Y/RHld?2;TIȈ\>'Z[MgH[CGYYY#IV$f*1 llٲ)o(DzgxI +H-"GoVT'F'DF!.?m+k/y=?|.H4_4Q X =4ek[;XmڮO%!Dqin7IW}DxcT.][.G-2}{YsḄ'zky=nM:knDZM5J-ellLuqkk;{y!ynl?(-{^R_4o|KZ+knV; e;CQ%䏟%6'WM*0^ș}}w3'MLjCXY O\Jomc6߻GGXZPp}oo+hbJws?Z&RE{? Y]+iZ\V8KY>u/%fy d0I˂'Q65o4uO_>gW:/tm#PbcF%֤kOK^j%M\[)ZpUt{5ϩ8^/u Sh,ZM.o UgZe߶KҺ/R^]Mͤx>|/hZ˽UM͍՛ld-'voww׺5ޞ^πm/?z.%,z5o0̷fC 0ywv[U[c[gI}|57umjZj/-{mٞ-Go;\\=4m]NzZV2:ܙc2hdfTVm5(5*9_am#f>,=;)f06CGپ}/p$t8x K@JBǩ:Z&Id0Vqp$'w[F7Jw8zG~JݢMsY[g5ҭ#; y*Zȝ^^gm|Qjۻi_L,sjѭ4ňϾ;y`t(K|V_xﯮ 3 CZe>=h_i eR45r$7!<?WdXlTb&!A'-y9x#ny_V>|&w쑦4<%.mt K571+5ճI4#*-˼1?1׍_4_}E{~su Z_#wpM2vDSkG[x#{>{וR>Vs=w6z-7+OkZͼsq2G|Se%k>jhytv!>ɨ_\$֖1D1h$q4#}Nw=\My-p7mY #Zu i^Yi,8O2DnfDfRDXi뭗߭ʿsiCZƑiڋGeeE؎bItB9N;Ysr|>ƞ?ş^zaUͨ[G,Ѵ7Zt_ bϑlb?.41R?uy׷k>?7ěWOޥ<_b4m4L8ʼтoc2{+_i6oky-~"7VX4}B_ #5hqkv~eY"S!Fo3=6s~w_w:c%hw[य़W><Ѵ9c{֮tYk|{y}y)~}fUvgfauOu^/xoQMWZb.ƙ{Xb$f|$ywܟɞ!ҧw~}5w⿴%v5ť½ԗ4ttۤR57"b_붆8ҕĽ?S1OͤY -$z;;vi p6'&kS98+tyG ?/$}-,S+M:c%Ƨk԰4K 墫"|N>tsmV{-'c߈Qk.iԌ9ݷ|G_78Mw:K7{OM|%[߹=OĞt R}^ȦOԚ?qkDщX"y#X OoI׾ʜkϦg˿FIu52PD$qU Hn~vU?ýnM}Nj7oi^bh"0~V7YNjٲm;nBP?ެ~\%kǻxdi2_w~Ϸywei-,#2H:;?^8e9K j_ߏ͜G8Ou LJ,--Okr,ZçۼRgi1Jt佣QqV'3 fReӻUn> x\^uݽZ&ѵ#L`6?w\›c?ٿ}\EjszsIo.J4D%m|u"𽘷zf#<[v'1OE:v z; +}NbFnwhH[;XFUq7ǵ&އ%jnNGPZe[ aj$"C}Ug:vsx*]{}mwBӾ(kI.efI;oHy6}XxhOqFwWȪxxH՝^{mk>}695KW~:λKY}>/]>o:6&hM-۽ѿV+bX{]Bέgo}.xQ{޽M|uħ>.|fԼYKA_PIu(cO[rkcl-jeyzNHeSZʢS+V};0#k]=9o2k(ᶕ0k[\+x[8mVv]C4I/bFGqFZJ^xJ*T-ni}}~e/ xb=KJtt2Ehdi?ypȦIg3ytlR'}wwt'.~[}_ Io.⏊\].GYVL◅6Ko5sqݿ AGViס_ <7zgt? -nM:M>mBISk73w>pY=RQ?uyu:+5׿s;mj^m#mwqL&ӼiVwWڙ]ScOxBHi8qϥ:_ |m[K"+Y yblO'_8Rg.ʅ$]4-7{ui*Ԥu~g_\'|xq<7i=-5֋I,G#^mCk3̖1'6޶6%Sb~?v ?,u=jy=ݓ [TVd󙼖h[Bv>'VN;iߢs~2~&oß_^C7tҾ6*PmA㳆[wQI0IJH>w/*تtov{rSy?_~TZxp]k8d|M?`$&[=.oi 3y0IWJ1|MxHCy;+5|WsMgOOjR x#H[Q2l{[VkI>t3n3T*KH{ڷ5'er哣 k&~_3޾#džԴk Y~*Ԯu}4nb]6FXI:\g m/o}#FKS xKěv<5⫥K[.f?Uں'D ;uօ[=nK:]Nu7"M ;9{F.+_w]KLzxCh }Z '^-fkj)z?ٿ˒줣m%on= srZ^ߍ|gLZ}#Þ ti?ķF>mͭ7yl, Ϝ4l&t0RM%}O_7P7({{y-}p|M97/[j7XWI"Io|ʗBH`}qoG.Vv{^~}u/7<'7oifAdHeXgiam3M$~o P1μyA]? E*)M9t}@ T忈'[L-4X5.c$0ojtnɽgo.O1+jyN:[sSWͯ5xuh P[nFXm.,k[t-Ͳ9C 5 Yh׸?z|Lis)7?^I4{-Z\zTq#xkZ< 4/mK .}o1~俈z+O]QgWo'|CH^_ b-~tS١I ݿ𞍠xO43k'N΋pl- V[Cpw'ʞdo3 {{'M_N׾·暵pnk7<+5VA(`3I5g/߷t0,eNom-o| %:sV{wQo{K⋡?ɯ6kyHY=;g$6qKЋ^ZoEW..ZDi:W­i,ķyki,ԦYY$9rϞMeTOU?pts+i[_oM4 4;^Iy}xK}fjW-I;45q-$s̈i>AKQOzև7xvkzWey:.B.&Y7G/7k̯R-_yqsMOxRlľ#D;H59Z{uuYaǙU7^-lOn\[k4~w{nz[a{{HPt8ACM'߾\5k^K^E4ZA}o94k^JP5yle|ƆTM8.1i';#IW}u}V x+/ԭfQֿfE!{?tT*ۻw۱26  }ϧXǙ\B73ys/v6~[s^&"<_S:n{[#q-ߛoO+{?W>$hp̹VG~*a]RU[}z6'9v?cEt*0Ksoi?> s~^U'J'/Es1^T{7|eWm6:ֿf̷:myU[gcxپ$:|+sӿv:~45BErUw&ۻUΊ{-4k_:ФpGsX1;+=s^~oN8`O=bL 2cmȭ/]_k*{?qi6I-[[Fٶ}//w?;|\m{vN)5ӹ~ WPP\Fo]A$(U~Y~e'*j*ŻVuWwwQ[4yѳS4)++ۻG&1I~^{sī" N֗*H7H{Uܛ[V~QPW|K#!Xi'r* 9ܜJ[[>IW2~*}>|Li-%/_DWOύHnSpmC2Tx⒧9Zz<]~_׵ FO xg[DŽ LLdhIq%."WfR,?~8>G N_#ݞ/| ៈ62B?ⶴKY&dNnMC5gRSտ_&[[u{[>Ї?ai; $ZǩsqN!X&i7͖hyqcyu^fC\UHA/}%֍s_NYYam|y2[\G;߼eGy?-$J¥m/۫޿Q~e?_ ~~x ׈mTHLi5Lܙ>_./gx^j}K}XU$`}~_cYoT^h~i-if*Ȍ2&ORSz%kM^7߯U?ZI.&m r3Tܯ${~{+jRoH8Ifߚ;o=PVͫ49nk;X }_ݔ>OfƋm+w:e4Kk(|W,Vzvgy$kˠ\]C(9~չw2/(3.$Η6}4>oa}F MSĖm͆OW&yvMt}Ԛ֝m4{(y2_kuvo'4%vݻwdw )Hsf!|_]|9ML2}@3'{d]}z92O^ֿ5Faզhybƫ+?/\nLn+3jz}[{M9l!Bdݲ|:V"MPW{<ſ&Ҏξvߑ6ZPソmN.hj{ QӬ,gݕFu Oy,S<+HdDTOtr|oz窟{'Uh+?#_G7ýwĚs+xÐ6i$zW4a"I;y?uG$ xJ.\ǭ9*tS^Wo{|w|75_Z<ڼw7}tb $.iƦ UNI-;jrOh:C\xW]5z\:Y}2O4%&y#`ftZ8MUr}<3juU?_>º"y/t.Em:XʹG=r[mQ;_im5mn\6xs/1*I~ϓW*.Z="5־dFVI𹸂ifVTکYp֋ۯ3&Rq^_ڝ46HҮ0}4|LhlIfahO;{ Rӣjrz/j ~ib{o:+m5<^dY6&ϴ?؝kJ:[=gѮ\iZ[:fǧ۲mƳG${gOi'Yu qB$յW'7glji`V6F:̩/o>Mf{iw=,=8(9In^ex_Yo?Wk7صg[ګ eI<ѷߎAb:/IZ}icWϒ+[qW7񗌼;|CKʶZ{ bel2_̾Jtw̓8j44saJ^Ҭk.zwpѢLj~(xDE mgϱ4̋5gb[owrUT~<csG$_&k}.O;ηxs 0o^ ?9mNݏ /i[Knė.h٤rdc?3|OGAA;?}ny QiԚwZ~WNjv#ЭM˅3^n_/v{Hۮֵ)屎i~2ilݝ[wW~c6@tbds=a6T,țV9'}Ww:kf.jVi KO;-ԛ+q34vǺ8ce$eA4NBV9$Ts֘2 '?o@`3̫oڳ{_5von <ϑRՉ{vú"Ha,QK_o:k_//]y$gqld-S߆mդ]5nhYDBW sҟmNQ@鵷>͌.w6壚/ߧfcmx$gcy]ǟ9{RsȭUޤ+e[!!dMqI#cY>?ˍ;3O뵿Rf W4OG;7w 4Ɵ6չ2C3#Qot_֚~>4WgؗIGAGvֹ*B$kq7q0Ӻb|)qk9oȒ[AnK3I6նmlٔX=5-M_o>}&N5 kIt{[UVy&ę#E$_~GJO>Ko=/Ot;m!goƚHcF#vϳo4[w?{&Mio#;,2uhћo>wi> }}_gw|NӴ-:=QBjkM5&_ $ $H;@+}_JMͣ&wOg~Y։ok77ooc-Ȳ3G>Vn*?}r刚|1㏈-Ν}uc˶˵f3ggǮ8EUǙ4zy:տ{o |` kɦ-KcP}U㵏n63>Fruݾ}q{+lt UInSOg$4up6&}ޱ`BZtNRwmH)Iooj0ªs^Dʷ4ݧv8'7vA$ nq0l~[Ìy?{t[ִS '`?&N9:dx:htlvc׿uZG >I=_ i=oi9pyqFJNy.5Kmpq${zPbr:edI a+nzRK ^]B1;E{oo)?݀ v%y%mU(>mZX߿pz|fǿ<iAќ|vrC@6_@_<2ZݯRu *G<{ ¤h@*^sʦ{{4w} 'zgeMho(MlJrAt&1*b FOQQ߯4wh@dNN:.O4⻖E psu?_zZỖݟGnr_ܯ"z8?AY(r2?կZI=^Z+MH=?AVK{yV8'׭Lo;bzn󓟮k7^++1ZQo o{5Akmݶ% 2ߴ[ɻl_};+?O߉ <=t+Iou6&[H-ż4nd[MboWH|]~nMֿ8 du__TiemᡍA ry#/lޫc)Χsսz>3Tּs)|' ?mmJSyjSj+$F B W?.=WK ~qߝۮU M9}ϩ>?MDK;[q{qy.dz`E%ėB¯ ˦˳E ~ѻ^S{iKkmm(•So9g-<9c.1wF\}"#B?cIה$5_# Mn}v:ҹ)aq_"U%-%Js7~+PTO/_]ARnz]O(k֒xٓvNUq5IOmwƵO ͈"MEqPMyOzqvi0&趠H:*N&L6}뚯~]7GAbV73Dma36ݪWֹܺ͢?旇Af#%Ԡ5Iy,+J~}?tƭv7VNu~u6q4$;$o"MϷڇ^-խ4 xr_p-e$΋^XG6I?/$9qDg^ Z_ECXJO͹9!uoȟ_0NEд˛8u-@\]d6o.=~:;m$?_4ǟ XxSZ[?:OhtK9hO:%ޛ^Ok$ QAin/Tqk_sKՙ&39=Βlv^KGKܠ,J<+gs"=cEm#qbeگ&ܿ*μ">Us5 ͔El|t9yewь:&.o;YIQ˻=il/ r[~wiikkxcd*F$]쟙jovߩw6BFF??BWvS!Ӝۑޭ]?s,:뼩=0f_1v2ͽ7|UB6~mKr ?_j9oZmIpcl8)v_q1߿]N,92y#T̈́!93*OػLz O"oŭ_w-9{)JwKcXML~dq#)ۚMWV3&uզоo};dޝe-ilfo&8;7ܺYOUeM?ovߩ?dJoׯ4>niX~XAZuwZ_fmMJ/cgwܲԚEVgGx;=Yǽ>h.:oz脞d4m .2zi%?Kw+.9=;vUIrK53d֩S #~?p!E,P^L yw*nBWr̟3}z+lv^'Wk/ _]3}wҦRo /.[n?1$ hxEXYlѯltߗ!䔹_MSNEԵYa[Nnyq/ʯ~ֱSm߮~)چǐ)r_^Zy #VSwvبikGxdHkZ>wOngǹ7[;3+ɵޯos>7z?~ 4 ->,jDi&5b|ǃ5m_Ե$ۘ.vX,> eXIv!197iA|N7'eY o+@fo.8h~ kt˳`OYдYtO/ƻᵗg_m]0Wqi3\[o^p ٶ>heQvJ9g]*٬ k <]ϵv<wr*0Woߺ:)EuW+gx5}*k7b-I6n_=>~ɩӯ~~Yv2KH&$ 3ve;}8AEBwg"H¦,,ˏ]O?47uLmv<Fbɐ?peYvuM6~Sz(d[/DI0hG9>Q&ǿVs{_fu(;wK|c ~|#=2Y}KDv y;6n+Q4m~h_rf^ Iw_mkCk-X嫨rYWmo˹Gj wG4߯o,u[k!9mk,h gvxt{L^kR[_۞ۦ#mVmwZ>& ܿ.6yOe{]-I=ֿ~/k/^v7~-Պ4[ۙ6ź5GB~hs)6w(_3V yU>Tf_Fr龼w}lt6tz5 9nkTNi(6s/mNѲʫs۾](+&_PpRկWsȼKmkė%z}( Z(}OhoO8aM< /$WcmE6Ս~Y?wROZcva+BX:~דu{nO${~/ʢ3nHPDž_nmz>iZ)3\^|UDzpUO !Cq$qo%䑾O_\UWWt{.e[~ .xQӮ/4ėU('UX"&Ǚ"՗GMJ}%#+vוYG':MT[ދ㟲P./#1]I#,,\mj|h0x<6l;|n/G'dvZc|'%~#Ϡk7-ŷ,ڄivͬ5_xgëqk7Y<ۭ{?1btWSrG&{ +W_T׭(FOV% \3:mF6 +\C"xWFce]TV޾+>e}7-4umJA TJ1<ͱMZ?Ԧݷoxwz<Y?ڗ/y?6yb~=ٿO~[T-qJ䷙tmgyzt5ҩ^7wS [߿N/EVuY4o-^xɞM4q߼}?WN5ejЗQ׺N?j?tEK =&_ jU$Uo{[8o$RgMrz-ZXƍQviV]Gn:j[? t?^$J"xϾ6kb@>r5ŭc<(򬮜*F" $Ֆݦ[t֋} 뺍nd][]oy,o97߿0攷sGRF]usÐ|M^=?Y`dp_gD|U ttG_}E(]g~̞o2$޾5} ?hx`Mk6GfXŹ8]nJK:[hZxl5Fm,i^~י+W< —?RGт-yu&[.ywt4iglm͕#(?Oj%>=v}cY#_AXֶp|SB5J?'^TYm3ЧGi|߭'UלּgKzĶ<vf35ď4bowB#K:-K%?w~ ڦYiOsuaOzom{i$Ic壓 &}lL)7K]ݭ^߉)Jt]#Uxw0ׯKHEXUծ#̻d3#ww=Wq6AɛLJqxY+s{}BKUm(<Tuh}yu|1oCJZO>5!KrG$Lyhfrl7iNNrN;6O7SjrmFI+OX.`* o|%^ִ+ ,^Okͫir=ݿbB#I-d3 Ɩ]Ռd:U7ikWG9CkӦZԮjЉnҼ5h%~LYGo:FE=w~'`D_MWƵOx'zN}O p}mwW^My$py9;4z*VmiWףNJ__/F[x9oMԢ4{tϥ!XE뿒l-g1'쩵ӣgBIsm}]:׹V~aME4% GH4j<{fO.'_źuOr"K}:->:mC4;XmG`XjwI;N%RJ)lNjK#`yRku8?^kk3Wi#wX"T"=7f]|\},u \4(=i>*3dĞd/\5g:O:-ԧڐhmܞmYwa3v/yg l}B5rkpK]t lNýbeE֩L(q&w7ڎNmww=վ5yY{o<9k}k6pVV7FJO"_;t/:TseeocI^ާߏI<'+&;>x.{zW_{.7K NUdz&yk^5 5k=Sm>Oolj'tѨxsFi5H`YZEn!F̯C YnSj՟.^tϙ،^"j˙s_vj}(gi4mSWLMJ;Xt|YGk?sȒ/5Ϫz߽{#MS.-t;QF"m<6~Zk IIo+~{ӯ̵4+u)ka8W?>ߗWO qWdߡVڶO Z!w,7nC CF#+$Mɴ'߯qRkgmK`O$}¿e4"*G[:<7WJ*?}.";{^@˦B5iⵆ?t/ʍ~WЋsM=S/?5k_w*=Ϫ_je7,}%x񺺾GGv_#F#^%/= ٭y[<|2SWZ3vs'm$m |SLIY$ /.y/ cQG]bߪT'uOS'L _M?p>vн {_.hTٳ/X׃_o]#=5it ~Ⱦ!յ7Te"?%Ud#,7hI?s w8~o̱Xjw]fhӤmzix[N 5i&(3,д-5q$nQg-O^Tܩ].n~K>;>(|YxoRPVGn?jn5%4-DI&O ~yJu*YR>tJ=|B0NZӑC媾.| ]{Gk[;\Cy姙?4L'yty}ZtN3_]G~&B azkuqse} Ɔx ɭ=#?zA'SaMV&~|Y`uՔoj^3ZOX_([m8USs՝_۝Uĸ{Mo.sY-|=.s2&^giv ˪o4fVwqz~EY<Ͼ3|#KYsw4m?KTQfE͟<ϳ'ݍG{y~eZnO݋EGM:j3~U&gy^jh<ϕdr莬cMs2RtҦBN߲]z''/Ş1cOu-55]B65~ݮ$]7Dvo+իb)V$Zw|_}z`ʤNZ>/O3?gν5%i>ѧ˲i6yM?J':WtFVJwj8S"KѲ[o;kn/o_r|9u!;k1j̱1ٵw[.#K}2GY $?='LORɩjbMr;o]7;y+Ma\~ys^ֳ컿|g~1 _m}΍MM_~"H/$v5)IHy)< T^)S#)r.UΊHrURv|oU[k_z< izY3I ? Zg-K99uu2O[dF7* ^NEvOb'R5wm..۾~4aK w&5=Hj MKn!?k#vۼ{.$Vjҍ]OptiݿwsԾAt0MN 4nQ!2Iܓ|sm8VYd2WեQB.no^__mW|]|E6> mjz6_.|$2]I q6]4ϱ5ۧ%̪Er^}ާbNգ~|*#I2[=g\rѴwSi[&y?s30^o\gaR.Cg6>Z-նgỏDږVrvշI-]>wrW%{]<{ԡm~k?o^f_욄>L7Uatf.dѡRRY[Jz+zaJ%>I[KϒoeߊO> ,5-o}zж$ͱ +2Z{Dag*){Ez]Z 78N>[|Ӵ;&ƧQ1YUNnskn]>K}bˇ{UTqU/N=_ؙ`!%x]]mvq|j2MuZkv&K{ Ui$WfY}43$wɾQ-屚;7Ok/P.SMjpx4E Ҵ>]w$JysI\$. ^~잰n_/C*yI[m׿.*#Gο{|^Ezg_:Z&Γ\ѴvwgޕRgZ̗n_{V'jV^]=N'_i_Ϭ{wq"z'*FnvaEӯiyFzW߇߳<9:xoWCrkY߳_罾ęfw~zquKoO;k۹{;JMu?N{s/>м/w6цx#=hb4߻]~Z kVGv-O!O2Imsri16O)QwY{y^7%~>Cqn_Z֣L7ÙwOq{gԦ?ts*B ϳxe}/ ]8U]UUbiVu"o6gY{z}xbYa&kos,wgGs2}2Erʤy%Q+Ӕ}oz}4?xOQGe=cj#m_κfY;XʭJɿOSYߩT "i)Z=DolYvZpmﹴ*׫8mYAd8 lv?Mu_>fu*J{.#/🆢VUc%kˉXm!4}ѱɿRoSSwz]v|`χ~(KI5&C~6?nv.Ϲ~xnG:ՠO7jwQùr5~|9gjwI-̺ۖFK]5w$2}ϺxE.w~dQϙӲ_i:[(X P_M7H!1mJ"lO>zJm=:]WۿLgkm"%U4}߻z^p{ߪZ+m'}{[ϗ &#s|[keF+?}`>1iڍes~m/o]T]5[ܙBYzvsβNգXҕ_;?C F8 j͇uOXxOw6hn$lC -Q|OuŏbC..QӮZgEx?fwOc^[D}χ|qPlTf<;{w8ّcMJMw˲w<7 JMIz6E0i8ע1iwT kxe]_;O-W߫=Lf>/HXҮiwsk2 sywȻC>wE(=/ש.kW]<=/^c⻩zW{"\WYʳ|kY!ܪy3>aI熚muFu|7{7,,x$r[#I $c'My!4oWFH upҭ},fvfs;_^ilUa׾gOX&zlo}LF[ۣ9&fގMO%k<*N7k+ó7~ icƶz.d^ loդO'To3xS<q7*0|^WS:Qqwome^VKCN),JBQKN߾ r${_N+SWkچr-5Q,\GY6ie\Ź~лn,ݛ6>jue;7;^^_մS?5c6ZCNF6[OIshS5VRQN37}Wږ_ Roj'w/A74;(aOj5Iy.|r&y+cҋc߫kr|6Wfچ5όKDLѥyq5HhdVmG.I$DX]J׫1=i+~7_so_;ğ5hEc408f/Y]vN($C'kj|l'mWƾ1Mg2+9$y?o=dyeGVXLi本ק}OTJ1wv4>tE3Ql#t2\-UecDO(7t]Z='&3zB4,mRxVpڪ~\w:}ܓZxVh8rYEMͻ~μ>iݵ_|RP5Я;KY/asm$Uf3I *Ҿ߁4yo' h>}Էw:/6ԨVif5H\FF "ߩJI5߻ӽ'3L;#4Zڶ>cGGoqLH=yq>[(e7ڎyk&mBY5_]Yo/1MXݿ{hG؎ҋ?_SW%~ b Y\xJYuh$vc4s5Mɿky+mׯ*7_fv;xk )7vdwmҷڭfe̳Cf#?W-~zt}߮GjMNNk8խ` XEk_:i䡇u+8kO}=V-n{xK/q⋽rY"5&LedI-O3o2O1>l7Z-]N~HοƓh6&"‰?y F:'׋Rw˲"MMW*'<o]mt[VK-BM2I;x[h>tT3:ɛ2jSMr?X{ WI_$x\&y陒?VC x^ܞ\:o'_v5 d{׻Gi%𗁮.ޝiqOjڶϮGs4Mqq4 ܳ.R&Oӱ^:OÐˬNc+#Ns d;Yh6w< ޓ8ҕW΋?{wϩ" _˩q? 5ͺI,w"knl]=5V>{0r{8:-KXmo&hwP>g<33BH!6>s&ʋ0u&n4oBDsh^D6mC<ƭ/[̉њH> ?!iƋU׆bLcѤpQ3F/yhd?' om;L oÛ,~ *}&嶚hidg_WXV6t m\^{-{.6f٥i} ;z74O nχm'׼%;eU-cyy>ͷͳg+b/'Jo{oS8wK}!j>{=WF/ wokkE),}sa#R6m|8ݾ_h1/w {ɬZ5hV@8޹0pyv\v;?+s^sV] O>o!t#Ui~hvW#/d]rUU"v;iTn_KkO|S&[}N弻Xd9MTXԼ׷D:W~kz? h6moIuHRHU wNd̛gjƺT#k]ot޶߯E xOw>$ĶvWZ:>|ABEHmFڊ:?D>} 矴qꟿg"JW_p9nGZ{XIln5jrL$HnyGDDxӥoKm(y۟\i~;Դ;@mS=Ζ#,g,{c ˿]_Gߧz~g[Ǧ+19K{?S#mkZVa#8lRefk~k?ZH)$| m!}~fE2e+zU5 @1`ۓ>rKf]u{ܳ=0I+uWl񽊳Iŭѭݽo3v# ʤw w'Hϒ]fP[ ȍ:6[_vbė-&߳G Dž:vX˳ YhkyYq]?~\R'-d\jsrqQqbu0m-y6 /c{*%I>Cm7慖;Q?ϱ9[=(vJV&r.<ђ UߵOg3OhGѾN{Wͣ [-W[{Imqt̷YC${7)r?t$Z~9߉Zee=N}Q ܫ%3ln#%o~aajI=7Vӹp%{oxJ{Mz[hk6kddoڬaHYkW3#F'K-e'?ѧym[9L+ {Pʫ²mݵ{???/7&/E>NWVZ}ņzNObyߗf3]u!x"q>Q{յzВz率>`2y}C5k{yn=`N<9lRzU${sQovߨ֮lX8'sOɧun H(68''ҵTO?qnOoՙ+K^\pke/|}5aӮZy`W2a6].Tzo?jipeyw}Ur2.}xbǜjE}5iC%e|nV98_u[Kvf) ƛ H[k7&HcGj_w }]J ]*?#@5מ:#U'Rk BI " ϿTJ?܁Z$qqN;"R,/ԂHnzLzo)OoĻ93ך}辫u0B Po}=w, ` F1}j\ܥRPs@'8̲VN?禦0rGw%_\>j cj7:>:oKԯ,~пjf7,ϳ.Jyj+[]nD6ϋl%gKVitܮ mmo2i#g;вuO t7j]m+Sng鏁|8pVy iOV$6t9 Q~o-뫾s'M|s;3#[}4{_/Lo=OV>1|/{@nb gKm6vnd'߷N}F[՟ڷO/~)ii#~H qIjZl+3/t>wI1,>_ׄ4UiF{;~8UpCx_t?hZCZ\㱹|fDtԕJkGZ,=+ImVwX̤:խ]Dn%UcfI 4_7wto4/ೱC[Uӣ}B6l!dSkE7~cX)VcI#E&ސ y_cӋ:O ºo^>[ Q o.vdY7|Ϲq&Fa][8f[SIR#0'2ە]m%&6F? |wx/p׺6,25|sY&؏dobʧ4R?|Լ_i>'ף,,cԆo"ڵƪo؎=*"1Iֿws[Κ^6ƣc_iLf]"y$eD;X/I7'O2 M.}RKW|\ʭJvv[>uv㷁mM:Y N$k9fʦ.1ުO]~>l29JNϿn4WqyndS%S|+/ZֲJu߷s+mᐩĥ_e}+M6 R_evDʃnVLs5"7#❗v6F@*n^kK]Wc252pvdn~V^_7f62"ە`y{ZS|\ﻹVC[~_K` U6d/OKy 7ﺿ%L$}Z-JE\]'{ͻb"oGI$`rZqwa9]N񯏵]j]'Rӆ\FLP˚6Yw޽ROLAN}S'>&Mcf2\̑:tFۼ?}7ͿGqtw}I$ 3~-c0d}s\sOO]|Þ=3cH2Kqm ;UxJy}=r$ݻo~c}roU]}IsVŧ=լOuwxu&6ɵ5byU?eޖ}ͩJۭgkI{KXj.fq$+mW<ϒ_3V2o'W1YyM!p;T8j¯~=CK]{/R{8peifKKHٖ7vDzgU BUϨWX}L+fm m ?>hZ*Ov9kc_+Vv:6ofUq*L;߻m.\C+Kݮ;{4k4!̵ԓK9 )Zh+Io']AjO2M៌o4_`?[$Vi<̨r&͉؝;jߢ~ې{ QDW1.-OVF_+i;$k [ϯv~U̶ֆ}-KmuUxY>eEEa U(k|Jm;/6o %HAw~%1Gu2ѫwBwQ%5+m}ׯ}8^? -`75ٟv۴N͓ydڱU97w._OCucia}4vOœIeo/EOG~Tl.nNWg2QwQӷ,Wr~LmQ˾k'ϾF/Eir/Ӯ{rٿ{CO VZ 'VY }T)]/:$?~k Gfw}yyepe72̾c~"l8O.抋{yyߣbTw;]]졶TMVW$-ݒ؛?X9%2ںFѼzZ|?Y?.wG:Y_<_JV7kyZ\C3yp U.ZE go47;2ͺE}s߬x=޿ >AɀK˹rowz8>Rfe >\7/-vu~9qGeˆms}/>SW_$$6a[ZI0m,Ittд[IZvIdۑ7eMnv>/u-֥uwLd츑wI"۶gt>}Ž6YZye kWCs [#~F?dz?vjg(ۯU^O;k=Y.(.?%De~9>}qտ7bZ}۞gd ^"󔛈nI%UbUٿ6+͔7Xg _2IfM#*ss7z=ߎFJ:rMͱ[waw%gjd?4KuBby7G"g3}{.G#ur[VP!]ʻ١o_|aR1ӽtิ6-=7&f\[;3.cVyNJѯ|=n~|CUJPYOr4YoHmmźݑݛO]tfg;k7J.>dGo|@8ƂStY je0wUE5(fůg|4u^[ZZ> G¶EkmdcNvݾlq߳y_fY DV&q]-z*nZX{s/ywzUv0|#mxD-̗7ڍM;|2.1rVo׹Tgszo%}v<tfRm7&~gЮ]>Asn8]OocH/}fw߹w׹NT⢽4moODM΁평u]xSF3.摷nO?wׁ5J_Gzh}?޻]-픰 ɩ߽ybv~eEWW>wW=?JK8D{7,vH˻:*/WΈ=- >}n$n%ٶƯH%a)رmK^j&[[?uoem%,]=BWo;|_D)ʣӯITK 7 Ԛ]7QK{ .mռە6.!l~䯡岒q]qCgi(tMEYm(V\iwHts'x5ۉ_5Rk8Unn=zi}aͭOc٢ΒfU1&Ӛ>ʯ&U>eN}ޖu<75u&K v7 ~ϟ}ż.ѿ#к̭iQܣyilCԣu7t?h>'K:E,V2&W;cmo}޵ωpJ>;_饈_V+*񅦃i)d-ŔG $=<5 UoK٦EJTa8mondVyj>}ӏ{>Ohݾz͞bT&GķfVgurOm-3zt[]vŻt G @"A3$ӑ%F>NS|%h_ZE=Aqqae% c7FU|t05([]u~Xa|k>$Ȳӭģv.Y?wwBϻ)۷9 ׎58'KHGlUݳU8Nn/OTGoi ypMS3%RcԼe<]u ̿4-2IN_Wjʮ׮߭ۗ57|#ā-qzC$km|ʜs[fl0Z[\ϔ'&)=ѻj?4{->CF.7r&';S3]p-V>${[o/[G{{}>ԉ;dΪa,ƓϽzp{f2Zy$I|So{>SƩg;xZo./!yG,G+UM ]7Г5<5G kH.uP|ąa ={Y—{|DF:i˪[~]55Jm<ś'½3SOcuT;ݗɑniK{xRE1Aά"qnU} dw~rZ<~lV_JX54ףn+]ZugOQMkn]ftnzmcߋ5/xRthv:}pIq|C9vijIAu}#Gm_Tm4FOfHdy$l~g)2J:綾gV*'m:DwK{o]o3mGˏJ))oFvh]^u~f,7{jiƣbd+oq#C;wٽJw cy%o4ᾏ{TƑ/XGJI5Ž3?Ώy \I^Nﮧ[6vS7^ Y^GoeU4+mE[l$)d9'+Y|FtA[r?SccDNm wqqpѤk*I>i&œMoҕiR^OsEr[|H-/Ki4흁7mfXS#۱Gw̑|:ʡ.E MREӦW"Wꦛ-n?@5 GÓ܀-itdX`=ʮ.xMM]{Sԣ4ziM,ǐhLfcs$Z}ߒhauH]?Zld0L-o ߹[zg6Ojm<} =Οjm\];9-v._~6|QxRivZmA$[yk%R2׾Qr$מ+kjx'׵M&7d0fw.]#Vt;$}'OKSWO2<K3*CuiЬ,,$ֵ47g i)d_MiNiӅ[Hrۛys~ߋnc[/%乗Q4-fۦf6WNQU/hyaUA&^w,[M?iۣR(%>eݎO *5Ԑ'ͣ\$_7!Oݱ\0U]_:RO㾰9}B[#{9-wݱlQo9uV9rGS5ok7Otm] ȶ~s[rc\Կ"^wxG~7Uӥqch:M $Wh*ۮ} n>en[}i.>C__yUK_3xAp\5ݼ-uogug#F-'d?t1qVZ.mm}vC|+q7B,6;-(S;u:}upq &~7kTgYۯ[m$+.UyUUXg0c$>l l\ɥmpey7ޟcy}N"I5~&>nV̶.J m*7GFH^?/{ޖ>YR[(_mzv=ODgj̲- -Fco.fd3 o)(ͳZ9__ktޗ{>S#*[K/^ǯi:u yvR魥l{Kx[kq$XH藗/U{o\wzznڌcˢ{މ'}Okz/ħ :]=H6u?>|߹&D>g2_Ueտ\ C^nޤ֓RjZT-2kxd7HUy߳| oO)ם ~ou=[پ}~0Y{k˿ :~ՆjS]'3Z4If+C 2kӥ+9BpWiZ^o6ᛦ}g]hCeXmROݯТC7惡O.?->eOƊPmmmǶ_Qkm+Q-KR;xH~Y ]?ܛLΛa牜l?_:K'9?cϤ;$ڈ_dKuܯږrlv?ze^U&n}{=֯}dktKS25C̏'<-+]fI>cQEh#y3H7Y7H7|'+Z7oۮ.M^Tz=ޝφ>>r^WËo|gzNm,62$g]R ly^-$/K^|t90^V;s|X>uB?XOMu}_+a6%V Ԭ iֺI5@F13˯3(=.6o{_`YUCPZ5O{W't[ Yt^]3LImZky,6I Tt=~RlmZr{VqFišJ־켢/|my|mZx`YCuu$h7=o,2/N{ur4moPM3Z܍˧Mi,7 ,zLll3ycQ)ZHϻuJRM_SqFMUu{B qkXĊ{vC 3TbucSG|#hMi:Ʒn&./d._?l_ee#W;4|]綶Yu&ҍ.X? ˨zUɶUhJia\]]IiWw^"]aSE$Wm>n'NU!yԒ}u>1x ^7ĥN{Zn5(F5 js 7R-3NeRXl2>%N_`X 7~n|_d{{qu J͒TL&IhF"<.v嵪"p%wݵkMv3bPq{_ѭsowǃ5< k4RxZյ[x^N&e[ۉ'm{oxsOiU jkirTVRriխ"QGuA5 }/_o.6XdΆ.eo$MG1xY4Nk2]u?Jὤ49TEӷoY]GOK={Úei{.otwV\ "y;?#%ʴڷk롆XY.k=O㞿usxSS쭛3qi3s]Q 4s7DtMX7W$HJoD{?wgM6?}^kڞ[MA5 u͕k{[ˋ7I74Gؕ'F8h/vNy8eۿ?^Ҿ`ok [:4#I],KK1v^/JⶋK/C?OScaV\yѬWL>Ik֟v_]W_suUVק|F~ nxoZ'KI}cUM<9 ߻Ծ֣gMJCsso{|-y5y>MoO+ iJkV{zm~h^%Y^px~Go $>uȷ.dXd4׋">j[;_^_w\!:][ON~~GGLS𾗣[jV7}gVKcL̗ kJ5079V4Sq߽5{?7{mmsڐo|)Rүu,LufYfEfDގ?w[OaisSw߶}MN)ϰxC͜}.n--nko,> Khv!6IUqg={H9b"S26G 1QME{vQO#5}_*HXof} uF-=]Ljٻk:[=O׽m Ir{_0mgk; #Ϋ۽v ҽ?>~V3Y-,5<[<"d|A}k'g5{Mq*Nzϟ|Ͻur.uWϽN[}/>FqWߩ\x-,W$SP&[ Y>q6;Vʛ߽9k5N/iE9?u߅<)|X6{t+KyK$޷y;M/>a*rO]vF%zy7|7sTKN$&ua ivwsFuf1V5k.K>SrV-ϋUk='O[KWfW+ӕWSԗ;]oh.[_3_y${c b>U k_GsSmF]5&C_.U/y i/g[+d}ȗ|!kjP+cF<To7*MQ~3,F.˿C6oO&|rpooW -~ȥ't}kOO=ܱo8Kqpʪʭo3o-|^n?f*i_85V4{HfKe~HXv}K]6-pJ^ô=LVXe~F{嵋{ D$I׭-4'i߹tyދuw|E6ѶYdFOτ?|Q-βU lCFWf%׆V#gP,0K/iQCG5wusŔ\gf0L<7\k:@%[1eU|Hݶ,\y1X)ދX?Pă׉_ƾ ԭoCʃOHa淸[;.HEZ;WRiABi]}BV/ivo>xn"v˘,m|?w%f⸺k}>I6)WXÕ~;SZ1ǗF6{W+gK9$ּEZXtz=4mGISw^wcx_wo}o> o?伎T rL6ՆOߺeV:UXUJ䯱s;I~ɾ#kU߄ok$.ci"2HI$)r%(E}#F{ޙ_KC'-:Pc [fO!.(hsvL Xe㒸8mhG,Qg/T υu[nu#c ʐr|ozނ}?u龗s_8WP֬, }K[=bQL7M#OOov׿\.'jZViVYnFeKaE1ɲ6TwGs|7}71^gIƖz֥k5^+;TN&uI62-wfg ^;)q)KRz>q3=amYψ8R ?6G**7}>} knRBwm|ɿwGĉ^V!;&x𧏮,u9IiE.Z=:ʐE;ɱw';~SH)Xi=ђ{i'DSΒF6#MndtYI7|IJ79þ"Oj2ymkrDlhn G3[JoW쮮cg.ۻϚ5hwYY[we[A5֪חVKCynfI!TGųgٞS5mkcվ[3^u;tQ=*_}iXUY<ЅT=UI?WڂSH?͡hǨ<ʰssۭgu!A]<+xm-b.D¯#278'tߦOOv|/|~uuSz=B窲ק#q3_پ KE<]hxQ2CCxd6/[F{AӧJkN~g5?lj|)g ̞{W:bm2Y,qYݎ_O~g n{ot2|\t>. xbOV[M:>LF3;EgꥉzRo'؏ƺK}wCmRo]nq3.KXzk1;]4qroN~ȟyzݧ"­& =g\ų'յZī _Yq<|lTҨk m]?> LkeXm6ڷ|ʱ4m[)51/U{&xKkge%5Uh.VجxLēC K-s*KtEj⸹֮9yZk$ef,k%Wv}yiKۻJ[߮o3G*MJvxmTK\4LZs~(~W2ZTszg-6H3Z]D;A 7y4˴6︞w3+wjo4os֬-?P^ Mۛ- NI57k :]K;wD5y}kU9乛n}i^>%j6zkVtZ,nu?-$C4˅NEk_qU|qе+?v ;ƿ%58RZ976|džsGHAOե'']QVo_W-ZVEz%Iou4hhv̛\ƿsCN(NmJN5Mߊ| O5 Z}TTz|y̳#ɏ{Om|]+%"TƃOþ5Pڅjt{O2HYt{tw59OU+~%}nt ?kxϊxW&I'u5w[2Gg36/_TGӖŹՒX͔Z;FJ.q慊6߿┣ho\O>$xSu{kSOD,7GmY!i!i?o~חMON$_sNI^?c]> x),Hn m!9&[Xn71d #Jj5n~Ji\xgNtw-mդs |αzmOtc|>sGtn|tE<6]=,69PJ3?DhQԾ]=~k3XIs}aΚ٭J=ٚtUI%i6殝ޞ^KZ=sl#tL іuo%e:q[ɵ2i?Y#+hV;$ܿzxfޜ\y7Ksk5)12Ms5Y>_N|/ p]vKb-}5+-kO hlT5~[_ ~ˢ tKrQ]/o"vZzo^w_g~_ ?J<7eki#$iV$7~sXםJFI$>eP3Ӝ湹td}Ø\di6H>лo_"F**YZl~:hMewa{n):u.?1dO73's:҅=o~ 8|?uُ7V#JW[Ɔghʶt}r?b5_>d;xK޲oϒÍXwۤXSwӪⴷv Ommyw EUOmiZk:<2gi6+Dsnmg ݿweqswdߗ9M7!ph!M"fiOܮ([^Z1p|U/t? cusg;v7 >ϽW"Y߷]Cټ9ᯇ/McS[Y'apqu5}wM.*%)rӿﶞD6&[GO|8Njz<'}^?I}{KѶ3y>Ƕ]p*8ly*en^ *>_~SVz_}3e[DZo6ߛw+|m[S[~[9mw$u|xrmȓz8["&!qv֥&ނ7ӣ/d瞞6S2jwp ?ڵ]%)uD%s腹u~~"BD.IXo0\=_A@]w&`2g7?Ӛ]?|cA['gr6֩zufŏ<+$+g )WIХ?Mm:ҩ?0OMnV~})Wmn_Aó˲xr%f+k ]؁(&>5."03Nv:w u(W$gd?ҷVȔ[w_3)bN:sZr>E|vGȑ`¢1$qjXҷo-7'9znM#Gћ$ FOa?w9tX)9z=Eݒ,т$;r'NkKGlk@"E#'8޾9 hϴr~ `qs}Q1sgק?_Ҁ&Vlyހ"RJ?Z~_bٟp?/*z{d\Fz|,fqOS 봬Gg;zp <Fϯ4ߵ'/_zy爼\<''L63eG&i<۷dGr?3Lov8Rg/~6ĺCZh8uSBGy$ϱӮ2T_?O6m6YWtKU~Ґn?Ö~^^~ohᑊeFp?w3Da}[/f\x`.Nj2¬}vwIHlx>mhD Vv$Q*_XosA6dWzB|y߈v_/º} uI" k_4Lyw8n0Q}; ^ǙxTO-׿/6mnYl5Y[]MwxGmg$1']Zro1]GG+?xG'iigmxTg5:=;U_s$h<%Gl:"}{</<[Yx4'ŴVeoxZ8湞d 8-fWw~w6\^A "kif|TDw_4;vܝo=2D>*x[Y5%UD[Ʊ/@4HZo|6z+oxWUWԮt<=-o>ëD34zu|IGv7aKw\.7}<(bUyz;+C?iۙ> ԑ >wsؿqT!IsmK}||})ޛ?]O ϫitSC]S[hcFm㼱Fiv6םkg/~IaQ|Ww*FMt}R_m$Zό Ť%xLI!Wc-Ǔ Lc[x|OD_}?ƓOT}5spPKO._?Lı p$1Ƭ~ _'ٽѝwr~}5ܣqqm#O~ K0pm=~nZ_?2Zi6*{5d{Ϟ]tiLAki-vyvJK*'g}Kom sTneU8dܭĘRAb|n^!kv3 eD'!_ֶa^c"9]CHוSo Ka2[+?wn;ufKGn;+RQie9c%ĭjۛ=>i<7㷌\H靈6XT?+?/>t /Ҝc)U&RM[KxO5l- ukɾI$m +5B#i9ٴa;Zo?R]ݼiiiTV"=: 5+M#GLnwzU82B=7zMEj5~: .u++U۴o9+)Kldbjz})5˿\3%mu&3St\ ݷcRiᩃ.icߦuxDr#΍aY$ :Zm:!'k}\U-0>Uv?SiS#ѴPu}m9C0UخȾmݻ$[y5}Jda%bEGn&&U>M MR{?y_~y[i>t5ٸ\vmcڣuna*v^x>1\Yj1u-d.?-B 7KlgGGYq59rſ]H_'^G7Щ:kuw¶> ӭe:34-" ~.ؙ4o?_SP-ө߁6>{qēl='E S[<ɷvg6daf=ʑm=Emѯ&߹I]yyי<-i 1unfH2#mUdy&6җ#ܦq '0@彧s$c"4?7q ;߲Y?vJ蘭:oe< L6Z pdpBɅܲ7f͟ yKnz yUg>;_j3;,\ oo,դl1|T0oE~y|\>7+{ylS(M1XǵT9-'y~&uVKKȡXG?1Eolݿs"Ғ}'$ȑG_7~ZVV.-'挫>v= rf[um؟rҔ}٫WV5iGu:W [??]? F^]o]v IԊ>[vVo{:咳;DKqu5*Ҳ}Q}JzzΧOxaQH}rS=_d0L# mȒFrJp}3.fM/4NR8&kdVVeV/NҧOwZOǂ_ Ŷ#yj7p",hG2$lmUGϓoH%d9>wdTѬu;}OV 6p]E{5jտy$/vIˏf.qZ_זwqǯ!P)'Vc0Xx-r?둶Gs4hh8й߳يSݻgfV˯Ott7i#oHW<F}*t[Oh ME}kF'{1f~]ܲ>>hR;49+ EřiX׿yPmp YtΗsh֓Ťb-eUv3n .IvW)[}KėϱdV 4($mMQ?^i'}Pe7ijMBDpkCn:썺BMIk>$3XA0Utzƹ|B_z󿙕[dCt(m_}*t kյ^LU,MYVVt=wYu[ YmaEo8aSs"mٿq{jr_֝ɭYҋuϩz$A Rl}w$}o1Md"K_o˻u~}+?^r͆gucsiIU_:Fq?>*a-t~~Ʌfݯzw}|[~x.n32ӜGNv}3QC :#o|V}zzu>^OeSF2]$=̱p38\,({^vs)4>CAiMc{:HleVf#yxݳ޾R_W Td)c)դ]n ⧄<-;Opn2K$ K%f~yۑ}Y\/bp4#'eo}726:Ww;ro]Ngo/?5[@mE ʰ#ڛ׷Ęt)iQ^_r8zIN5KFbk<mM[jm""=?+&Muv>l6=~YUynwW`a)+Wek="pͧ^\?,kQׅۘ:Oǡ4ӹhqxdbZCpjw~m7,ʿ7窪j~]{O3#Z868i w6U.ڊjֿM}[4ג J:Ơ :z'EI-%tM3OU2[iu*3WMFVt+;º\now$ﲾ849!%[O_7Vr| ]5Ks&ն+&a8xʵikw}oЃCu\4B yS{զ.e }{rBu.7{5o}m~'iگ4ɭjZ]:<[~XFZ!7=Tr*Ԝ}/՞ͣ%Vk}|>LơgWWԮCGm:8.9?CoON3X.K7wϫG5|X^z_?f];1犭iUvkӧo/#HE'|m)~1Z"HdEoi{_/3M'BM&uc/_|cM~?Oax|ak{~Uol,|?sQ]|ԉ>~|CW4}>K}X=7.;n|:u*4ڿ]7߯oNk54~<]~f捦o/^Gt}_On'5íry27/ݺ+yvҹۿɓ֕(+ۿS9__M.屓>Nm"Ego|G ߞ|N& NfZzm=EX#KbXϚYzmo?W^|G{gN'}ݞgG1 *$`͑3\GL`oi60z+ܕ h4i6=O ici6g5̙w6ms؇{rkxE5;b!dm9-ՙWnuNJZ3opj6~m,.P?3~tUz4M6{<̠h߉|#__K4t;VrkjF6[J<˒?2i7pUj>X.]L_,KH; };WZMu=zBa33o$(aHI5Gm;[nU￧>lal]"٦,b][fڣ;Oo|G}ohdDKLo|_7wA?oeVIZi\{ripJۙ3|9Z Vp~&]4mZ$h sHw6>]ы{+S_k&54Z'-q۬XϛX{*߂^e(>~'xC!yg/| o4ta>4w7?fM x,F*T{֞w810/&z)y~xW5_zƒq e5RF\sB' k"?1iSZ}C2rmoRMKǂ>?JյO:p_hV1>5KO-4dh;vXa[;*qh;?)RNz7G?5 Vt|=E*n&zMҪhxW($(<[qxh4}ǣӥMG}zk1/oj{-!Z̗Zqh9c 6w%(5h Z^j6?9R8ŷ$mm葯}u9$޻{u}\6<-Q<]YI6oA4vdmG݆+ҶzZݵ{_}Y5%į Ǧ;Q [d'wsCo,I O<NtJP~wDy՜㭵}ёkOx637HVmBKSiXVi$)L|Ϋw ?.~i^}ms wr )VN?>堜iO;Ю⏁;?|{m÷6 𿆾-Dɬ,3M%!̏"$UJrm-8}zώ Ö4fV"[kinSɤCuMzlu'|y#K|>uۛO&ZOEC5X$O#M6IQp1JWԊJ\ז|k}g)杬x}Zė:A6vJaɷYs'cQ+SRymu=tXiڏZ^yv Ws}ߖ6_hXQZ|⯄׭}߆+3.ϴ-,m"ѿoy?#te Ǒ[-?{o{WhϫiOQIWe8>tyeh$n~GvPp$ԷV+aWQ]y-IEBAG+C݁ɽx ]5yh۶޷wGX4[rFo_[b!??/ $Fj\Z}ԯ̓lCrgGޫERM{RKalQ$ο>0MZW`.dyqa~FK#M{lyv[mI4y~ȉ M7n&v(kV.h6r! Fۦ]HwAzTޗ}A|E񎡩Ofa xok,7p̿7O5>Dy%6{ZW5W&4i%υO 0I -kHQUyaicO5bsw>V;[קiƷ^oo-dϛ.dVEo;˶m :?$ޏXXTTu뮶_3-CJ6ZTJiG/̎fO²,;xC}SmsVKs*񎁢i:67WvxgLu Jf;5mpd߾hRӒUW'<1j 7~g=ҚQe%wlW}dh]$x:'$}z?>4\ֺwuxIm%}o2uK{;馚Id}/Ico^i>24~hdEhbggΙ|kMb:o;N/rL\M&K9ᑷ%ջmSdKo#e _J3k}W9ğ -Ě6{DX|5fy9vkԅjW^=/+ 2Sq|Ծ'nȗS$6[TCIϒa k{~ jA6uԓWj_436:[^[.kak5ٮ8n6lj&'pR{|^d5}-3> )Ҵ4yi=\dS.5:coHQXdUW:QoO-:'2M=N@[C]xgPݻ˄7}R]sHmI&\D l~c|Yһ!mz??z-3W_7e>qoF#m?m)-K]~'NKs>NtiV[*Ym\rlT?c9Ioo}=BOoO?2*j l4pEK޶b}+nT璶RߩÍJrM?3[-6[;US-[1isIUHb&?vuxZﮱki.wvvS_ \iL.I ү"aou grIT7|-|UZo~_}Ϡ0[M:r[dow:4ww$vk^cW+ַ7̬٧-wu3\m߯}Z7%Ԣk?鈳j7YmF3}]}fOØ3t)ތ,Wd{si`zxw(ţ>.OxW[]öp[ 3$y6~Jy}͎VieqVݮOſޔn?@gxoUf;K? izZuBLמt;L%y2V/t߽֯\\c_/=GYkZem,v4Ǻ6;3**xN<J._yx_W=ZohvVtI[fUBm#MI*s>iD*.J#te]TRQ9?]L~y&;F慼d)$>J|¿rEz.HRb\#~r8UoʚCk6O~ |0wT;Ě8]u_*j]tzܖNWos𥧁-ek^"U{W)5_[ݤMgmuOTNmt|w՜b'tׯjgWk :f;o }!?';}~gSJk]nu,Bg9{5|Q⭧­BCU;g ky>Xn'[l0?˯ҲN汧8R[t}_;fJ>O;}<oVy/<;v| RZ3iwRO:ed|ݽ}ْGGFN+i={⸖8Ti~zkrz%"g֮vMۛ?3I$3Wӧx%E:}F5(lcjʱ_/r7y{|qF,5EW 9SK/ Wu0hɧzzyof-_ZQWw:4IR3 g1eS MU'-5{''nv[xk B18Yi ߻moVRw$Kb<ėYX>Iw$I1ìXNjqpre};|Se KM{gom?0.)=RI%o,C">Nc*;߱>ZT)BRu U{sJ7kjb}m?^e0;ž,"-"{O,jK2}aey}284G?8bq8>m]w#5F5tiw4}>Oob~YYOi m#\[Mi|$I?'RR{h.U?/e&<,8\hWe %ޏdjndiϾt<#EƪiSM{f՟?j~9,W֠߅|5w%fuWCGmg ?Os V0쵲>~sMhU/ċk>H{cKk5r}3P6rAIo-YHPnvO8l^ne[Gou-g5>ZW95g;DVr#țdl?>YPR +m{S͞<=f([-zC^ѵ-妳~e9OfI,4O&;H65$^zlIMwSӧRl]-e?gM7@z3Py0A2IC]!:*o9)bd߳t>JJ_{3$ͷwc]\O[9yH3 w ivCmKm#(QSU!5t?tk}}mF6uF׵>x%lZkz:i.-ՋT֜}4Z[]Jko=zF?i#.tx~#u]xGGZmgygx.Ifd$y?|v"NN>[o-Z*Q5uW;u|izf{{sRMֽp-q4q:jۓ]tz.j^s:M;|R*?M*/܉E.g ynvljnc7r>OFuLK^}Y/~Һ)RQ迫v~xtXY|5>"ffi_^ڵwdJjIݽ~j)ӕWtÒJ~sɼ_q,,];OIB*>(_3|-]cD CsqFm~${7[+yԔ_s΍i+6?#J[ in./h++t{㧭tCT[iKw.S}ש^Ķ,6`B!;JMܧ[BRRRJI?{O_ Awu&SXowf7;;v2BmxkU;kV"SO1n4~گßs͵myWMo$jdvä;]_9;Ox~QS17p3ri1ڼass_kᾷugN_㴷SI7K4O= R w”R??hb?N#_I[6wyd?m-TWhcu#yo}ϰQy:䕴a MYbvp|YR]5I=J^}kIK-4moˆ :O:ՑviAtaw6mBR3[׸sLI>d5si~\Z4ZI4>ggD7Oeu=;Z^Okv4GMMKe9>g}ZQ{ksIT{j~|S<;QכMkwFQR*YC"ۺ;M#HLU.h.Ǿ-]`}Vv<':|ooC_ջkQYǖ?'mg3OCBh06o]7~O2>vy5a;yO⏿(t-4SKϻ0ͷLw؉u՛kkb5/nu#_|Xsmu<11dWϥG_?ɂmlmRHP1>fy洔y_f%v,7 u9;e'vz#̕sϴ߽uCIR( k?!j{l/fDUR2Ȟb&&̍LJZw_Bqownh>|EGi/=Fq%#ln؎'W[tB+=[J=Uȡ8St0*g~Ͻf+Um:Vۭ+^:ƛ5Z"{r[YI$$Y?rHwXR_iϛ#nd,'4`񾣣[Z5H#5]%UPb$#B'%:VP2k~29Twϗ9MU[jz0%+x$#m5^I7=|}=]-0bݛ.CQךtrO6ݫnѪn_v>NZP߂_*ޟݽJS̺ѠϷ{3}2oki8]?+wߧm̻_x+Keaz$ #-o.ʪoٽB|13o59~XjXn<żd.6 :ݧg虩]sv^Oq}x[[U On{ixė1›6;#nei4+[i:5r]?rpbhFY|^NTG/ -CèêN"VFk[{_28dΑ_Q>G+א'5M;Цk"-i>=獬#Ek dԯⴖ˵hK [nRzJwz-nWÞƞ!BQfcj5_M?exH{ysl^]<~tWJhZyѕ;ٮ|c_gk/-W=cIB8|-$⦵Ngt7Ru{=Z9&ť8bXby+7lm-i킨 C*$So9 oVH%H퍤 %o/ wyi]^Jw{=~Ǒx c{{"H5ԏ&V%-6|&ݟ3Vyeݽ{hZkլ^}2FQJM]7׺wy|$b9_wV|JڟP WZ˭}Vi4ۏHOnSkLj߿}zvXol,4~&եrF]IK{:}i#|0rܪEJ-K>K<F&WU/^_G/o5?y,xi.ⵙ_Ύ6{-Yd]M+`a^-rՎ[چ&PW^;|}Q~~_>.[ۘ|{i&r#,F/D~7e~-7=jXKT{֎ڭ8:GKSo.ImUYttRȕ?/>S6[xpj7KCyдۖ8Qc?oF24~._;~v>;{㇉tiWQ5=Z̗IysCo ᵳ/ˣ7Ow`2jk;?O_> Kߓ2_(#j0Sʽ>__%EVt"E` OKsҮ{KRѼMsnJI?_ }~5߯ N{PN?闺ձ]gAEFaqZ.&Y"fF?;VOC?+ZU^wv{߹B"+kVU4✓O(,|>lk1"gw+'7u{},kR4Yix}IYݷbdK`ڴ/Քw)˷޵J wےz2teFZ6mG?+0m?QӃ9E{{ۂCO_Y7wןBD9b99S_޿Yצ|=ؼ.6p\۳R ]:ϳoz,s0u8;p:}oW=}77:^H.1YjY+Iw;^}@sǿuSv ?҅O"SKS\{FM亾kW+X$a7վ>G~?Bo\;9빹?h}E̤(4Y쯭n&W|D+/{yZ~&NN[zUÖAӬCsam +.2osV8- ?v(7OR(~a}}랬[o[~OoѴgx 5ru YE<=lYjFo52fE6[]OYk=E\X kgvArmfGϽ>WU7ȷ7Ú$6]:+ ewt˽fWSr73},SOO\>::lhghgAuXvl/~Tm}~Z8y{zGx2kk]KNu}JhgeͶlU𬒺|䯥 Vh5/-,8xY?v1`Kp[w}>bm[KmٯwzFO=V܍]7[&̙Gz˛A}:'1S)b_Qsm)YR<%xӣ@Ẋc)st ,_fʤ67Ocy m:*ZB6Of(.P?f k+ 6H9;zYse HKg`$v=(qkt]jք=t#gk+Jgi sݬZ@'\7P7]$~kpΎ%fBJ}[].A0xd{Xf٣m"FQvn'SwN2rsH7wrޣin ԗ 6TC~U7^m&$]Q=k; *5՞]I,+oy4rQ+.N0j"S_3o [Nu-+z]%lCuȱkq'<Ͽ~o2GEH? 7֌\M6ѾϤKm 7C6$o%34 !'>&TzNgPt7xz{ 6Aun[vi\ȈYv\f'_]skgkZMmq K$5d7G۹.MzG[cjԅWk՛l[[to&,cr[^VQx/4:k}omh D$m$&??(Tt+4ӽy t>~xI+9l h.dRԛYfY$!ٹM>Y>q-{$D*ttׁ֟i)fynM$뙾wٱ>U xX[=mKnJ«ܭqy?ι\+2n-VED[Wsn]۶hn15ع Ժ0wm~]۾R嶗aWVH|/2g4M] 3>{|.inOzp̆ 7 %NO]v16_lxR.'{@4EQHby7GWM#1Vpr>l'{{G~?K4g[UL4_͟*kLz ޛ8s2nVۏ?ֳprZ|}b}O]}WP62E 8O|>~"پ;m z-~cO7 {8"G1*kg.i]VҳV[I,,N0Yxwgyk9Tio~6g ooy ,}ʳz?3_KW*M%ؐgUrsE~/ZGPW*Sm/яPv k~4|^idڕ̲Y2do&i#|/o'߱R5?>RRPY5it(/$&Y-9X|TDIYSK][^֊=U,gK:[Zq u۳{mXsS)5ky֝?o6mPyeu{ ˹w{Q6]E[L=yy?;P{wB?w\mЌMUYxM:1[Kq&U~Gw[Iɶd\^#R|Awe Z$2\;\2; '~Z]Y5yo}$ڌw7)o>t=@_Ⱥ}5*Ko+T*}m8j4Ulp5 |)^_#T%E\E˅.&;<퐼;{u&WϦcCO%\<? 6Dݴ!yRGS_M=LK5&7m3)8a[ j:^ W74oOͻ.֔_;{=iuْKԢJdݵ~~v`7:XH' ,"z gomLsYGo4ď[UoցfKQ.D/ f:zCWrW^ms;m"2,odr_>j͠QWlilȅF_m($tUm}:iV6309>G8-~?zfմY4kkxȸXzL:!߄3J׿SSm4Y/=J̻K[][i7-p|d>ZN~h)+-v;"ܳ3[rjv3]Qg4ןCxJko,/PőkV"nv=Hە__vsuۼzwqMlI ci|쉝򏞱PhH&F[̷h܋2ct7owt)qΉz{:N.[X&F$o. %,|ۡ_~6y B^21 eeݴxV-wcmO5ýy<Ϻ1yg8__c/R&OH.!1e` Y|*jͣCͭ5]F)F8⍞\גmcs$[$@D~q> 5/PKgۺf>瑼I]HC@i CC(Ik+gO}3XJ6~O1 vsi\̲Mי- ߣ;JkPisunoː7Fidן<=Zyաg(~a Km<ͫaU^v7'u[Q{Ʃuy2;HY37WooΧ$niv^p/I֛haf4d[2i4m@t9h߻m?vu}!Kq宛v^K%fݙzSǚ衋Ig:kŧ>n]?|1I',p}Ѥ;w_qg)EFk_ϖͲzriەGi<[ ׊5Ѵ5i㲚D^|ͻ۱#cl3:Xaܹ|蛿SL&V!߾; 4Y{mZ39#k8jZI>4|y7bW%Ji|yWY?|^vܤ*ffۦ>+S_wV~cN)4G譮t^Hw2n~?yM~w8YóVKn"V so \JϺ&HDyYi+e~uFUUnwVy"h{F'@;ݦ #Fɶ|Ҿ^9I ϋ/aZ$^d۴Nr[iY_oetӦ[^_cq^/]|AQG״57*,o4Ky-|+>iMry'>Fs7e9mWZE[LD^ZT߳ <ҾS0OmR}5O}#谾Q~Z3ՓN-yg/U#;}Ee]#l3_V] ZiE=öF+Uz1^65G%M=\2J7ӯ gt h59$-*3;r *j{m޿//2օMo<;\M,.t&Yviz|y%6&vl_Q,%4G_>ԪϚ~ogj7Ʒv9eK[?vsϾwxZ\[?OQ[O]/U#4?,VA0[O?X}m4ɹe\t^"WdUԓ德{}Nq<]j<|w7O0XY9$e`}ka{4z[_78M.v#%MZAx/dƚk%wW5/^j]62jZr7#qi  2k;Dd{rʘ:toά؅){{??3O.U:G[.qss..Feg!߹ɽteJƥZv}W믝fuY_vs~WDc[i$[Dj}vM:m>{8BK]߶6'bq RQm7R鶽x[h|a!Qp^oGwﲾ+ut%}}~%30<=V};4kß h_upJ̻q|{ 7/_f^KsxZt |?|'q|m;HQ&[VϿfviZߪ3Q}Է{^^G-qp$6̻Wm_sLڽWZNR]c}PIRi}HtKѤ^׮ [we~VWKw\_7v|Zsia %nyGnҞ 7%e:=j^$3;7 - k|sƽ8R5{/Ͽ߿czo~M?N%ʀbCݶƫR{|t.z]Slem ywr8wH0Ar1Q[}4RO~i[:=c0FۤʩO^"S{/3קOm]Kھ_5_3oH#nۻ?WoMm`H2|m%H e2d_ž_> kՉɽ ~]3v:RMsFM~knϻEΝfn]6 [mCifXWtd>]'ޮS>F-k󧎾;[M|FG'I"MfYG;s5ܾGiR'{ַ<x>k] .4M7\l.nhaP|b_\#ץ .U-#uu=3kV{)44ۉk$ -U-4pTv6]7*W6滷տ5v>*wK%c/jSGw}Y]?;:~o<1 J61\3AO$l+Pi.Tc܅TN,[}|V^xN|?vdVvNXDhZ?#uI#ybB0jƦ/=;h~N]]w{,5i~1vZlCv./, ZjBfO9; o/YUV}ֻ?Gίq&yx?]dҭR-]̩$o4K~Œ8Lי`;w_;?iOz;~BgohޯfrMz*$lM,շwˏy%Nwe)(hoMc~ 4B)ƚqscc$kı\ľΉ4/Y#I*ij]תgQoouFXH7ZAknqf^]7h>XJ®)K}{~;OZOgE BQjK~]ԧ$nxex}SGc>JKoG#تLmiy+JiBS[}ۨM+7׿#T-?ĖOm s%kxu-Im|L}.[]6Kew>'~:F">yUֺ%G>5KY/7\Huo:"Lyu:|KIK+'NWu[Wbu K2&z,G3ݴ32A#Gq(cy}ua}}Ǔx ϧM%ռ̃V vtV6+$pI$sMݞkҜ5kO=gg?~MB JWź[޼73YrK.cY8Kg6w#|TR%ޣP]JIl/d]QZ|UR8?yuܬF<}]ΕJ-.{AyqX/śRY5-$xYY5H՛̸Ft|Mӊ龿k 8^j ՗<)!|[<%&QiXGIfQecJ inK96r~6ZiWc+q'G4cZO3;+MI/I{<ǯeo%oo ˫Yiai:;#f۲VYZI?|˺O-DUcwOKj[kOza<`.k;i^CwmkκVEM?#tyqթ{9mޚ뷗]w}z:˘LfV73XL^(w!X䵚nI6j6i}}K&i4xZNPڪyF$ڿsbLo];Rڅ`ԧC]ec_B-Ux_g-n3kWʾou;d?v;ގroM>S$eʔܧߗ`r~)h k$؃fm~q]T]~1C1[]Y~UG,4-o3_voiݾqZ*W6Q.ϓ-#I z:,^6deVtko멜T~_xj-/$KhUxLv-wif`bҥ:k%OxYV6} &;r}fSqoݣ1Ny뮬[ r ;Ub'OʋxV&VVuڂ|]j7[oW9|#2/;yQM_4Zεk|3^)Ѣյ[N55kʭcf$f˓jd)޾ Ԥkꝓ^_y(]ӭ/H,>h;Iye-lNu#6KG/&/t]"<;ix:Ζmޛo 3"^odH?wG?^0~vz9ףgݿ fv߁WZCyq& t1ͻ|w $xIbg4akmwk|uҤoh7ķ:]6#UUY&l!1yjɽ]**+]2[ۨo5 HljYw,{UM7~RN?s7i_Z\ctm=g&n껫&PT8{kwti:|gMNMyh.B.'f䮘qz?K3_7> rv{e%SQxO |\j/+Oɸ9 tְۮ<#,ۣ>w^;ni^}?~g>X}~e I L-C*A ak->Ua;v٤EP~W~O 4z۾g<oӧ]nx^cj{|ʯO^g^~$7b9LġvFxM~թRwsCjM%=KmUKzOsaߋ2-;zh<^j8v`ꑵsJm>W#k_W~ۻk !a7αAj3M&|v';]fԄvk5K_vm{y}IeFs\}Km6;Hnyz:|&BPɲX*-)Gqv8N_=)q&⛟^[G$v-a1mL=C4:t\p+ 1jo)V_ϩ_"xt- it6FGߙO/1pU}^mqY4>[}Ϣ4M~Bx<4eYI4I?y3e߹6o 9М_4uicBo rR3H>}kU}puZj~2JJ,0ƪKUm=z涍]mRO/9[ 顑JMy>_L[r0mGL~egC澍%L=*by!R YJ6dS:ƱOb[Y,5]34 c;b?Z ˚wNzZod.5~ϿD+6^ [+lr}YVbo)֧FT敮Wʗ~"jin:ŽZvӴ=6I  K[:{2G6>D?kxVkΤ=De;5?O+g9kΛݞ齼:00/u??S|?Z|zl"˖CORZ,noN~~t>Bcsq^Xˤ.oK>)j 4-[{Fy̋41odY>}⸇ 5%3oAxo%msM?x>RN!e[ۻuR72ww>_9C:ʝ:iIx_*Y?k%FoX|9d:5V kg>i Y&%aY!܊>GVYqIyZ4jo^7ß W6+gʰCk.2zMK#! }NGW1)R:˞?]U5ҺvZzI΢Jm-̭?}I7I?0gPJ|4wJ~{MWdO|uccY]f6!̶-γ[)$;in5a V&^ۮ6z9O &uRON]mÏ1JJ}2@5+[owkkp{@GwMg$g׿WRr-4Gt^3-sLբ G']SKն5®o!u[ y*-4{^;ݛ5xO=MBR[CZZC_y7f MG޻R{KoN+jpV5Q8ofފסg7LòM|:W#T*Z>|i຿.#[O/ۛrY-}IzX|F_D(k sylO/ 2'5גbcaܶ_/N: {u>|uMhYQ_Rkxbo.BaxzgгN}}r:Ow^~M֯qY۵DmӮ/%?-{"K~G?)˹G'CiZ5znI4$"vlȈ?wo_2/ywx$]VNO9[ip]$Ml~9^^Uk^N|G$߼j{?|9 <7ceq"ƏԵ /[ػ|'S\5gV攧+*Ӧ>pfʿ6sRۙ OݭX{_џ:O!34q`*~ڷBk:u~8ꖛgIb2K7J4Sqӗ}?&[}7σ=4p}yw]].o\䔹YxNnOӤ7rY( "ffEo#:'3>&}o;ӷ}O/a6kX-UθY"*5-=/a)=~X u LqqvܨVWX#DwD|rc5!{䞻(Jw}Uii4KG4۝F{i}6<7q#B*M2Z"2TZi~_KI7&sjNY/di mCb!޽eI{8tӯ[yjfES׬/4ԯ?m$6^sTX޹ ݭ{fo.?ԟ+yw7mim`s>nמ$x֎$ `dO=jvLZkMHX/XgK;vl7m;~V_9֎=?R,{uglT?Υ-5}/N̒L.I,"?Ϊ1kK~>dg?եƯqn M4hX?b/_{MX&_ˤUWe[g"3^;noI ooOW)_t(Nmt隺.Uh-nZK]̍+§BouF<ٌRK^ lj_\^M>@DW lX~!hdLsϯ˲U}7^2xSD_d{_|Z 7Sz~ajG#'˳{~N_Fm֫H+MNcW_8,< KV2M:]NE%깍ckéի'h]/Vu.տ"iW!#M.zYGzJ6a<~H{j&o}u7Q[Guϫ-:Ԛd֗빕Tq}_M${SvwK/;ޤ{?Ws߇ =-b5-m$ZF˒5vtٽ9$sUϦn57jt(  +vIT'su%=%'~= g/ozD9V+ӀN?΃7j{U;>?ֵ,ާ<'t3n|-l[{?NY E:;s@&tb$&2|\P`m4 .YBϷcs3m^}w馾f;&Lm.7Pcz1VkI=̩kT8S <6V7|?$Zd~q[rnɽ|DN1xz]WzF[⶷u ʌM .#H-׮:N)_W?CC_sĖnl~yƯ3<29U%? KoG\rz۲[*m/>{U:<Ѿfouԧo;[9؏ϳ{rJn} 9ozyǃ>x[oR,7g-tsH+!>GپO31W뾷;!AW]~^(fm3mz)xUV7eS|ޝ>]_S4w;tkfe6Z?w}ʇ)osTݳ%׾5k7k_Y]KxK[[QqdȌE)=2Gg/_>}x,/Ogjè˲kU_\gGyq_ԣum{?%\\O|Z=߇Tt]I LG噾ܻyyQٴ-ۮVQk˽ FuTKm>ZMjT{x*J5]z=t:b}ϊ~|c%Z'enmS@]"MIUw}R=~_o4^_>tO |?z)zmiu֧/?rAmOaO۫QFQZ%W_3σٮݼHҫ]XNd|Y>\|qm6ב9>c!#t ko έ:mq'o9Nn_]^I/뮬yxmC;[B/_I udGYKdf~clt8'ycmu[}]r¾":>C\xSu -,<|אC}'2mr#V h&':-~=c׸?>хR~E|enXھ >L bմu 6i-lyvVC' G Q |^x_P>ei-J7^-ěGBd$z*8jw=[]/'usoq,nIlsEk<-$3} y?v?:J|l9d[BFhcu_ǷWF[U=JY5%{ 8]͎TR]Z-oϮ3p~G?τ#'w5._B,Xil|eզjnob:pҾ)BN[vy8$m+u^O&hz^}GCf챯Ib"%vbN|5lչۧ=zERu[{F.|u.k}*qY͠Ȫo[E4CtkqoޞzҜq}t5 JZMӟ ūCTo\7CkXfiʛ#fٽ:pcBFS EjRZ?m~q?!guC%ޫ568&|ti{;W=5F)n%{餷+. ~tfxVrܬw)UO]uK͘cyꀞ[z4>{rIs;_m{{k @zWzV2Spo~h$ѵ϶kSfVmVG;S*nI5)5=߯1x'@c:.UfXfo%qDuOᬩ9RzU\/wyMi}Vp+"7nn۸޻_zW Ld Ϳ=ݭӍNlDnG۷>?kάӖ$3o-ebB;[h?s\I)tȕ p>ޕ*|梼gGcIO>Ҫ]wd\E t)i}=7۲H%UśJŸGfP&muc$^t76gp{ ]!s^uΜU~׭gо!SOլ|t#71ts#%ʮi u* JߋW:n˯}| xy?U?UkW7bGYyQO/a,Ӝes֮4uW֛';q܎_gfۧ[ƦU 5d Gߍޭ!iVG6 FISqwƊi}QRX#iׯ?{߽W,G'y~%<3Z_<*,R8oսM/7uj)d?;}~-<9#gމSQV|o/Vxž2b;o$;wYfQ,8ç?3>]S/|Sͱׄ!Tm䷗.OMGjJM],y1+Ii}_ o.{ 7&z}H|M+nSI~dy+&%Y%Ub~5˩wWnwmdcYՔ7Oֶ=öl5Ln eӭC2I+ϹxwPUJyƩY*8eq=[[,~q2D[̐ {~֫r&'O5 9ݙϓw'5k}? Ka>esZv |9|;k~7&WwVͼ0FFw}mwϽc)[t8>ųb>!%$NJK^ï-Gy20CO}׋Lp27s;̥̖6 Cs8'\o%Kic(i<*pDr.Ƕsm;.Iicon'] J +6ݯMNήS}[w/k5LL~6xz+m9@w¤Z 7#tkO>݀ٻaUobJ-Q屟d|п]{sjש$|߫"yVivcnWgDi9lswo=3Կx̑H.|-O'5=Im֦.R62tѬ,y~aOSz֌~@__t'eiZmt]o[_E[&m#"y3yo/'ػI> $Zqwo|=ţzzG]ܬ{55o:O<"l=%MYYY;>܍ˍUȏৃP.9myu+<{ ew3RQ[Pӭ[6Zm[FhrяG?ğ؍کX"6dld2 NQg9-H^v S˻;K=PѴ=V;Y*S'~<@y|/uƹ4±\i6wm5Gsqf>Z)E-޿5?^ĺ+[L Im.!;v5dhFZ9?YI-Śv[H~$ӤvZ<˷I1郂Ǿn}xw֯xft2HK$_2EfNeo}ӝNm?fUoEn^NӫNrrX}u o3ߍi+鷮[9ĹPK09~VKv#vf>mZ4˘m^wXդeU?<:}K>9~$/$/'MKi-gYL#IoG|1r{u54/}_&',~& P@u-İ[Jnlk鯙$yaϙq{EE[Î~c6ԯ.I\gDboWfҲW8ql,n$bi$ۻTѪwWWGn^b4Ž.vtۗc)鬖ש.w[X]%ԺnnkHzO~_M_oJ {/ 7vgwܩKn?;$$ _!\0G_g񹜧_3UP!/-RoMr*deFR8 }TTSNmGy`Dn"WUe[ˌnOuJ=26qI..H?{rϻwrߢ$+GY`}575[?ˤzZ~"u,ouOiFNa9Fv)_U<+oi0un7p2Ck}u"ʪzu{3i) |K.yr:C~^WhΏ"!!9ms^Iyig:Jz?qZ7.'HUKXnmvsRio#Zk~}g[vG1tOŊ,)7 ]KXDI-Lu59Q$b=?ȪMCᅓ[VgkT{ oh=n&^L'dz"7&6<_WeqȻ ʻٍwRSj7n/"L^^XivAEٿ㼛͆m.zWˑDaNf|;MJkm KxtXY2yiu+MǮo5]Dl.-e|VWfd]#3kIg5QIS֬t9-D 5MLi0mG 1xON60Oyo$QU[Es;k1i_F˘vw2,}hcq 7۽;,*OKƺ{j1JK},3F4#vS$>+eih.|BW3jZ\p z`FlU۷{!C[j(_Ds{i#w&yu+h2/tgm ϟ̷6l/ZΤSmo /%k?i{w7'wF|~>dt٭?Fh__YԚidAwxx6In }+έNI6n?kveޝoΥF&F_2x'b}u_lv6Z 3Tos^*۩vO挭D\YzпmqPl޷&E3EٿM']N'P\]\/dK>oxi#mo3Jr]o\XYfI5)bW6-V%o/q_+|7Ri5mY5^|K>~Uc?+7纅>MJ]!R,H[ƍ3*_?Tkgxg>_7n&FUVܻƥ OynR&VAcUO?y3]<~[1z.%X|fdYw9%%绵hXPnF~o il(wG. -E9W_ZB7fr{흶ۋK,*nߛ+|k[qk:SݭӪ\qλ^U,|̯=EtJM;_swĺFa#C+,d32_nU3ZR2\ZUVB)/N $ֲ2\*]}r(Ӭt8jbEﯓo$O ᆱU>|ۉ/.&I[jcQ(S֝yZR43syt5|Kuu۝?F`Y/wyF?]>B1->~ù&S<|9ht_>n57 J [[Kǔum$hZƔmpwL4IV#m˿w}Oaxb+{L5VJ+M_gاJJ7T}l¶禔7Fm}t_.o;v:m]ղRO򨥤ף~*dݬ?Տ|#Ҵ #Mխnt5.uX$rsI2.?e,N*U(8SUmݓ_..uoź\]c kKa/F$ltC.|I2#^ms>^'徿6lš<#{էG~W\8O-v=JROk_KMo6_kqFU#\O p+?]#f8N9ݛZ{&߆ FeGO鷟[>*YճYx+ gK_aLx{lTe-__7s19!B4mOsX+=[McoD+ |Ѫ:LUxU7{?wU妚tϠFPQVZ^uqݦu)x(GEUm?c8$O_q:=ξh;Cyk-Uv~{ʝ8SQvף_ykԼ>{?9EZu}GQc'ϵ\4kMn?;/JQu'h5m7J3s{]O/y%ޣlvZ$|Ww~d24l7oo;?wuT:Mʢ-+_3k9T=u(iSgf:; |ѳmkzaB>ʶ=jK*ܞ|\z-B+[ADds3y}%M"|?%$EGF妟}_„Wv;nHtJ((y{WbɂRB.\.ʼz~gy4[&KK-e嵭mfsI4}^|jʴ]#Mr#_.<9-:NiX_0/5Č4s6[Zy:;AKޕ뾋ʕGo~ߙwFV$NpLʫqȕ6=VSN?stK+X$G#V;}=_;\Xi\C4L*om]e-W~ ?sFZ߿sT}4XnY섾ti[ wmh݂}߿gˊiV-_8ܛ6ttΟ;Үɮ7s6[f۷JUʅ7=oku:]+D4&)†]W5S|AO=vFOq{4hCݜοqU)>_}<OTcZ܉3Dq fVʪ^MunWOS~_w7Ж#W^償6qf>O,{~ga>^d-i-xYƪdzm'{=mntXV4SXػ}yqX]ٙc?QzNe⛿jYijpԾv#eXMo?_uG׍6i|l|˙y+,r[.)7o2(sØV_~u g^3cow-Ԗ2}a˳O.6r'ϱϟ -y;};gGb38.[ttL4mfoMdVˑ;c'Uro[5XڕoC5]_O ZmF U]ך\R#]41)wLu[~Ӷv}.^4 {8,`Hl"5H[xEEIQW)F{u7N m+oֳӴ[6-9ͤyZMWVW/6U~oO}&//fx UxOzܥ񖤭kxzoۮn>zwCn/3_ \!N.4c(_xYhti>NvŸ_~%|NV/MC%geq+7$P,4ۛ|#d<2L0 t1s^օ9k}l~7٦67'weZtZeo/g}k7Kes^~c㓚9SӥFCwӦVi*kV_^k X↵gZ^% :fK[Q~-2"ȫjʝm8:o?[u~o>_"xK#zח3\j..//{Sml٤) Ov{h֭WQ]o+Y_翟W)F4:gW4g𦥨j:Z.gq9d0ya[6TDwMѰGNJ5>%O྿/}NQO?kH>]BgJIi<#c ~r}hWVkϦN6)x.>b oxOvt"ٚ=R;UKT7 y$#yӳJƮZ~tO|FO%Y<:eo.dd/od"=|"Q맪^_3HR>}x~7_tbmLju>v|ӧUrn{"iCotx I%֣DUivkm,k /$m6VnRz_<{ m{54Gi&NNLm<6\\:ǽG?夞eo <59I_Z|@F} -M6uIq]4o&Oo"|Ci;{wo;wR׿~x񦏥x]~";iz&qp77,._I${-Ҿ)ԕE%ikKߛ<)FѫS~~Ͽ /^a=ƛy1# &y<弞M},־[5\uSw[}{ғTVׯۧ]OD<= E֙5.L˵2򩯞yO3ۧQ[Nix?_? c۹o v'; i2ni$?|͑"zt|}|NU ~=ῇ,چg#/ks pdM?#mG'Q۸[܅F?j~>q}Ꮗ>n4~ZuƧ+]FOSy^A]8x*_k8پX׵υ5Ѽ?IPvY &edx[kXlDUdY?ulN4料o{|9^Z~u|<#]T1PK_@U-ʉz8Mz^K m]s? < 2i$v 6xX؋B1SrٳdoV_XmZO_>K_ ﯓ:eۤ];[*5UWj**ҲW۫'ǗZu!XH`M&5i$_H tqJT{Tc4{r1i3'x!Əc{{иfWii;qz|N ~0Bt C\eIY2 hfX!5bv[_ϗ}BW]OoB7mYso5u{$[Umaf۵fU?O1>q'o멢wI[-{~[p䷎;{{v-Kx;ُi_?Ɍ`#]Nz^l/S62yqoɵ|Or͛xF }N[w{9䍤Yi<|cI:aJ뵺}uһQމYUAjk[]I? "<ȟ,gg:Vm|([z=VX&B]ǔ-9IY]ug~;#jސ&Zj qfѽ٤iluH+(6|k}=m) uFKk6>!2oɏZSxh&ӵIۣkM~ff[?l(Fq3?sǷ7=Nw-|Jӯ|Ia%?.,J;\؅#u)-,/$,uHZlV-++y?̧ngƟ <s`~y..]un"6d/sͲ~87 V_6N^~W_7-h ukNAy+R?H?^m95k&Ikw<(J/v_3r{'wwۭG~ 猣D[x1]HkC=^) 99<ϑokR=5mMХV_;=nx rU]6A*[[tז06r7sqom{ ;iW?B<m/Zz62=23[q4hɆdgeyqrrz-:i:ki+zy9Yƹ. Lpv'Ӱ#G)c7@lN.^-%Ҁp[owsEoјIu9ޣrX0˿#oO6t*zvQ97jZ}j,ͲB9OiYʿ~~j4Wr̳i7ok336W}L}[2kܷ`N'Q˰%iO2si^1rniʭY/|9{k(kO?,W,JW~ oE\][:MMwr1,8ۖo''T}~fPE{4O@*F۲7L߻_up_bgվ:+k:,,cgUm\qP7'-Zxwĭ}Lr~b]WIߔN9gZ=?gT)_W_޲Υx%@"ǝ=" ,#HhE_bc_+ZtSFZ/SuRZoWΟ".^W2Hy B7}6Teoh'kjrt_"]zgL &8c NOpu&s8D0Qۧ}{/2V{ im)&Z m7B'hYu fv۱7z2fBeyKݎo<..R߮ˮ, Z-z7^t5$Wy?2M"nLF$ڭU tﺗ]±XVyUr9G޿Eml?O'?O YᡞOx{OΒjRHn/ H{ =-ۂܻ7ө{CNwskV;X7'[*& $ x󭉭Zۿ>mu?Rha)%B*I/Wewtڝ޵jqKϴgx/^U9^fwO'r+4J6^vJ v:{YQ5 i݆fy#DQڿI$/\w%smi0myu^nhк}+0kknLe'.o/^9xⷈ tbmCzd Ƕ9et^"M7Y7ɨa!:-SbVMEIjZkハBoهPO^"K"9CaZk{#V[C|fœ':%ɨꞫ[[mIwcҏ}z"V9u-VMgR_ h#y߹Ib2lڱw0{߽B*3pU6],/ow&fӳ ~eɽWˑ8MƤ|:Nٻǚ7 ]:ޣ6ϩ n$jΑO/c(Mߖ]NסO շs)KDmy~!h.VNBFo2B˷_-?6*pt~[ ۯj ~=={3څ U%GR+oH&g^2wUknĹ7 =6}O~#Nmݶ UE2go:ƾ`dDu|V0Z)MßOUdMzP%4rA{y!~q7HqgO*[^ ׿o#Uoߥ:=S?Wi7Rqs[iI$qCoi="<.Z?1j:vn̗GWZj#/Ev}M#u}z|d|ת"1^(.'c>7,+4i[=N0sO:'E6^zigļNu;O9Kݮ"w wJOlH|Ot<;J%9O RӼk NvyHWr%nA4;>+*IZ^}ooȣ}~g=#TY;,p3y\YKV BMNU3:QV!OƸ{S[7>&yRE ao2/bM3D`e0~iMrrꌽc׏|Uis?*–}u{ 5k' f9I?%taуQ:}JsvuzGe+? 'u]:&}3G*0fV}g_'ÍǒRRWנ̺OӾ:E'V,AZBVȻ?::#~ҭ5Q3S~-Gn3q$1nڟ'޽,5H;í;yzp/ W^3^aJHY?f7mgo>dʘu]WʨsKgOx wBlotoPLlලho̒g?<3y?r  k ~gGkgl1) t˘o4deGXGUIE[o9T׿+[?6o_R׮ Q?ZծpIq>ĸy~|yn*u۷|5Yss-V2^ѻ5#G'ײz[sKπi ;N/O|)\Em,GK&nhի^G!OUw}z:Mdm޽NZjVnbvY7~{}>fPKgy|+u{iGf*|{'WJԊu/:!YGf-5ʛ+aP8UvYΫlECGrqzNMb[-Iӿ>b{Z7vʃ3)n}s/y~? {FVpďϳ4iw+>׭\:S)w<C]>!Y$lvL ays'ț5}X# %mOUT/&4kxnSs"Ew=4;[O3cD<2MU y2nǶ4k=-axDpʻWb?֬߯y/N+7dgˬ;57ƲlSM;;;{_k^yekVjZ{{m䷑&MItmoGƤdnՊ4}O0V \Z˪j:s24DgιiYVO._cm_3o:)ǚ;̣u&|F xw7-$=}'˟&O1|27}J*O_pm'vC7]D3ϨA5śfe}=#}0]/{"<}yWݯ]mFX;Ku$:2#Xn|Qtf$|jQ϶s+v|?dK=sw7?囮ߓsKkfy gR^ Re/ MFHaUZ=cqNvV}ٻϞS͞ee e][,vrZɧšq ҶguVoH>qSQU}i3:z_ !L5/Zk;j4K5[1$q֬]7Myy{!Dt_ש/ߕ GYʯ%G$'e{XfUfs6\P'49S|-|A7]oö'_5okk1Z7FcuiW#Ob_4;tr6}"kzZ¢w~xK֟yZHUўnyǏy5:Po)oww=+SǧxkU}J5?AoFdCMHfsalJ1OSGA)oVQ,-?/ҡ0jl=(;/_^WehIK릻i''8-?rwKVg2]Al֭*-m|Z~UUTTk>kgԣewFC.\FۖKv6Fg?$?ќƏ_aAldH.e^u2]7|FQ֋3UGK/ŋ\xӬ-"m 뇆;6-oy${4ʅ.WzOok\~m| ԝ!UڭޟvE<g2e7XCܿ:c撕Z}NCgNk'JinhxdM$rmh_*6훣S*ܲOzt[>6ٞnTMW#yHY[-;$:Jwҟ5t2[Cn׹O5c{Yjq$w +Io"% SEv]z/Pqz[>2'jVڷQҼO,R<"c^Y3u.a0.1Kh8S~k}/Mjw5J~>PxSi3]yQj[%:;}C+O ')^:?_w'G^[O} +¾'sa:y5y/f_3ZɧLC&m?.cr(x~K_P&Nڟggnƞ]ثc&d[sH|/ȟg3篟M=^_++',RjOyAivI&ndmr[3*Imr#YFz?}gS;>[7W$IJb -d[ͱG!ܿhW357'{?_CgR6};GS`|1kk.|vnJƤ$;gx~> 薺U7ek=3OHu_khQ96o.J*+KktO>Ǔj~"|1hiff_ǣ·٬߹kh_$OwMKߊ)m]6N5,mf;ݤɆ9h~Gh#"s֕_azw]ZoISߌ,b[_Z>Y2kڌ$v>XYtgi9!{d_8.Wz\Ƶ77믗sxo5'Ʋ37ޏ=]>FLϿKH~prQot{?? w.Fh>@SH}_j D˺a<׏׮?{PO͎zr.{kQ;Pp8L)uqחEI>qչz*1]oNwߨyYR_XDr۲~PW?7gMݜn?p}H=m~,* J~yM/gTe-qhskϮ6_|}Gou x ='Wզ+yn&f_{"'Mo>:Wfm#XLԯuzU(8SGZgڈm$?(g;eEd QGҦi#W6}Y&v{_L$&-u mn mwZ*s5wnOW {YNvƹq'{t 8+nGm̽zǒ]/(cd ~S]o/q4*[b'*?Du|2 M3dgw}َ9aזV~&Eq$.nǾ@˚l YXջ{H Sj{3rK&a w2-4)6f\"5ÏON^kU$ w_BSD~sZ-~f3+ݿvDfE*FveKM!v}Y/Y<ĕp6{PoBktg=q e1F2,sO^dS?J}^[@JNHHxe[[f »N>l_%!;7u={O/ZhC_v v5.MTZWq-g$Y;7)gim?yi+U3@ V .1/[oNh+]\^5@srM5=2s/܍ |˹9G77[wMu3ñZ%K9&7ߺU/sw[{F\(,|\6_oi5uxŽNWm)?GԨY?)BXy1Te!?2ݞzZN)o{ٴ{YD&77~L3[;_|?g'weE] Xjljtii5} XB]>\ֲI$pM,}-[Kzu7ime}DZIO05hd͡[)"hVoGYvoK@4B/dw9$(?sO-k?S?g$}&V';튞1ړ?fR>F(̫w.Yw{X,+.._}O!|J<.$Xh+memd?,nڰ[I9'>ݽuM. {11(~y *KL eNe_֗F70[kϏtrVN}=ѷ\NjHbSg75-bbK{h5[hB܅ʫu=ɬy%_4ԶFrT䓎:Si߮+yY]]Ȱ^N 7JW9' U:nFڧ}prm{Z1ş4;=YI_XYwZ#_-e9f}o*|BܿϿqz7:?Yc/֊3xnsReiB3!qU$ h!b'85WVUin_|U[g,gXjo} /HO_"X<EibEj|ooy?G iar'>2~qt|<1t?j!,Nۅ}" 6kGRw4r[S\e֓dӚWͿ_!._j<ǼEFVi 2HtNr.tiUSya1ƿw<{R[in%Ьayf-X~ijqsWz<]e쬑Š$*ڪFοwBvݝv+N]OXE<ВYljۛrݿ$կ;]BӽtXd)-+G2~NM?=/þ(pT4QV7ncyoz$ ܉u<~g]&ZR˿s$@;m!++c2T瞿@ktd3yijab1h4ͥ]il6Dc_'>qn͉-g"ڞ$fkWI#en>=u[˖տ%.2L]mWƫtN\1 ͩ.|4[i䍶6,ճ|d#x4_Z6Gs4@$[]d`G&~Ym|e(os׼miQjBkKۛmmQZ)h32ʍ$3gls/gͥRml귶:>h\$$yȞfXO.O:?? :˿ixE K\E:C&ݭYqFOym(;wsi٦r1ס􋄕Defh!FlyK"U.R%hi}9O궗v%w/ܙ~>kOM79g^ ;v]zv3KW2`¨l[[mѮY+4B+KB0?1\O$3,Itj_>G-|Դٜ#Pœk1-dI%Ufe|1؏#I]0ַ禺"ӿZt_4vw}ƞ+vlmeHUwO:>֓ԄӳqAU7:jM2Y~Ї#ڞboYԯE;W4;K)yl)<;w,|u^RyWZG޷#* \~FX9qJ 7esŽ9Wsf7m-q/ opȭ a'5RiZnMsWxyX|dZTԤ^~9c)U|32M, VQmFb!]nVMӮ~vo_=)=]mU&7 \gSOf60dnͽD.ce^1kzj6s{8kE։;Z^X4is-x6eKp"F|z :t]IӲVwfw9ZQ[K鶷A4pws$j̫v]쪛׋6JM/p."[;RI,#y7+]U.rϳ^iq &iU[3nٵZ=m<%m q-ݝo̭Ϳ NIM_uROlnla4 'Jn/>C׿_oS =#N7pIH Ȯɿ=$iJ\}Go=8kMk+8ڮj^=w B Fi5ڷx" o~5\$/KM*aIS灬%Emu8*ڋU1+ޑX4 _-uk~zKXV,kshR[~ixF5545uk-.=&4HX+m2IeN;4{:q8xԊb>mm5f]:G Hޯ(Vsgfث'^ P]OSwv鱑ڏzO Kkr#K'gv *|osFJj_6c,2f+m{ŷq>!GR$w֯Hyjlk2MGGBۄ~wO*`T\;jm<}y;1k A(Z+hM2ɈnQiS2(>Im_;`#FiԧΟ^/8ov}GJ{h95$hտu7xx]8 E5!BX4T'xSuxTk`<=Ci$:~N>$@+Ԭ8 qN[z6>z}*Gmmk׷$%4 'o\7ZҦȭ4!ψ!=,w^۽]֧|IPYl"o2YTq&m`ᜪ>~ <ni N8O|VvkNB?B" !ѰlSy>Oj:MwZ}Q6Tez5~F؉ݦ܌aw$!~_v__/U#Qs)^>5c.V奞c˽FQcKwmc(_&8>o-oW̕'m}įRN#W_%dԴGQ5k/٢I$7,ɨVϻ}6pPO7_kW|Q$pZBcq}~MXl$|Tt[W}&Vm:M?AMCO'[]7[+Mm[Ve|mkio]O#JYU:W}|ֻ=G~U,Zfw/Wwݱϳgׅ'QZ=&zy7:<$Vv{߽^eQkMSI-i^5ܚ9fk摶}m,법x)Z-Y??MN_r7NHԄGjzy+Zf5>fܭMI J7oEμ{۵zj0Xt{+]>7p41:^,gMGy-EeHO-Ṡfv qWz~5mg>jͥTAyI]ĚQ_ܴ3C4?6r$rSC(˛U!Ԋ||x;þ=o:7+qk$"|X qo6?3rG=9ǙZg:k=@o4OZ*ѥ6| 6eiUci2*9oB~l[uOxoP햛2i^ ޙE \Ʋ7Ӽ*ȶf~ZԤk{t^_)Iߚ+ڢy !~]8kI4dM/zjdhzZēj> KҴѴ֐o%5};ϻuR_܇)_SW;#}o:ey~Um#ZsU#RQ\-uRNn_o?S-N/\=l']|:=EAlDw}a.|R#}y{Oo?"_FuqxG~-&&]KWa#-޿o^|+WK)[sV>F==PF44>gM8yG.R-ůi)ҋ]lEuT8=U\\'g螧 Gׄ?g_|3Z Mc=ݮḎ8/C$rmSb*M+n{o}.~G,PdݷWm>g3xjJExYUM[n1Ņd|H᯸cѡ.h|0l_3SJﺋ~_ yK#6~7{]sHd.ۮ/7 w‡ə?yRjs3i kܽ.:0^}Ou>-m, 4;HƎrG't)a5䨬mS]s+]-:m 5ŰDVKkm>?Icӯ ۮ;&{ymOmϘDG=7[|:P_|{yD +uVGech5);y.7M4Mu$k 6h#tzY^)?Ǔf*r|w_ >"Aþ JsWUOtiDpȻ}.9_{gu~[o^z.~c |Mq{ĐIp}'ڤ@÷e!WǿcN*\~:%FS__Ȏ;<xúWn/u/kO\\,Hh9!̎Uf;?5i7HRRJ^jkY$'x_]/ i^̂@.|Q_ږ[i?5w+q\6;1"fKcDfy:i•?4mt=]? 9֭Qs;'-ׁ|aSb4Zֳ5׈]Cgt ,2F3Ʋ|6Wcg*oY.ڭޫ~zCfveߎ?7 -kMmķ7-Y}Uii/,dސ">gO_ww}O|4|BUVmi kӠ>Y#gG$"WNOZ}ϝ.~)s_O˗8_% Z彻4p#^#M֨U~*q[]{2ub̹h=E6$tYE!~I^ioɑ-cޕ|Yy9羧|4Vu!TZP9|ۋ-.$i!;9w~f[i']omfSVu0ǧ,YhmowwQJj~~?3EZ6}ocG^Y>캨Fho-Y䷉yg_ٵ29g^ҧ4y[=pm~ɓ_9+Zw&]R 7H .5;}zZ{m,h('ܮYg}sC5!;%}@dؙU[V5c1$)?O+Ԕ^{ͣ/pb4qjk}qp#{DZq/W,|}߃=N}'7}ihZ E q3yʒo;f>/zom>~׾"x6@߄A\joJkMCtG>a'"BR%V8>Jҝ7{Z]LKweu :ľ;I`Qy<;ЫmE[g3՟3U]^ NJj_^kEtɣxU_yksxwG jI%ȬɷTpꄦ5rY1ut_-r܄ p;˦h~ `im}{wcoi)/y}=òxi(yF3&ϓ?blc/ʌ${/6X\-i!S4ȖQW'UN?.]tosni7{o%e|Pdq5+mjvVv7W0C ͕@;YYmUpk]ّǨGh4/u\a-s=ֲ.nha_Om)my^ʉ?}-7I-Q&mhwLqƭ[O3ߗ83{  Gū+U>֤L7M,4RYdK{X~#ZWuI;o8+@z-xOKUar,^yk5f=\Ȳy"y)'>**pJ^Rw/=Mw|HZ^[z],>e}o5K˳"\1wkZqۺcmlrv+f{}H52bݵS#.P4YPfлJǖ]y+DWg mK/W|q|;lc~tledc]2ď*'2MҪk-_|ۢ us]V$]~jK^|ɩR1oMm+o=Y\ʍ7EUr+mW%ޙMC|# ako.=3Ҫקkԙf~~g'?څŧK f$U1P<,ȟlݻz[}¾\&Rq_|HN\˯QƺV?z$56Ep\,{I3*'/&*)뽕[CIEc!{}JWH} [;?}uS~[z~ $f8Z9!\.=͵UU?=V^ ;Zt:Qiu"o}]'5rb΋Y5A-븭m!X[i<>~aN k;T g~ֺ[DK^B BdM7uV Owj\)z~gox7U-J 3y7I_lnkRvk4ZZmXP'|=^k:Lv\2ȿމ=ʯv?;KI>|Z3 xoFt;Yw,Ѳ,7tޕLRKOo-Qz[ xf3k$ l^q`%mۮ*m!>U#7=?n:K*J*N(*_v3 ߪ3Swo"(uMnvO7v-$S}7p5$9*bvOs]7 Qix^)#~wmvιǔykZٖ2Jp'$[+;to9*)w}QA3m b6?xAՍ>HmRIZko8?ጳpTZ_P[+l=_V/jqO^]u?`> |&| -T,.O/o_?k|N&5vy{[鿗ױO7%cswzԹ(Ϳ}o=H˘|CsMP5-_ɉ̞wUfXȓ1'd/$֒V{z|ɄiEK۳^_ѿ[_m ^lZ16c r2\K=:+b7.`OKU/iZ[m_9ul%>gF0Kikm<{C4?~_k֖Kik+i@u }7Kho9w!MlNmt׭Qt}=V3*?U~Fz[w ]wws4k-4McDit"I&VD3G||9v|}s*=o}Ojl%5 {=^xSIs_Xx¶c&EWGzCa']F+XGoizM/BMBYnykYB?9z%k i ItLy1r7IF+gӡN3{hԡQɯ$)]IͬIkt5_K {yu[mu5cGxjۤ-sCe^}3TYZRo|Mo8ͨA ߅,5[ 5%]mHmHtP[^7OjY?|8AuI;ǩosHlu+VKM''ޛVZf={"u?G  -<9<Z]6\5+.ǘEyN$qUUjMΥ'̜?}ݷ_{>lh^iVt1۬N˟pJ暓^Sy|C T@zϵU*z'shJ:kkcI}>֯l`-v'h̊9?=ۙ~UAՙ֨W.+]坱弐̑ןEeW8ZM5ʆ(niwD~,$"߫F^K:n}irjiQ$RHy!O?۫^/}z9+1|;{WU爮t!fdo-!c .Yv&JeFI OWZFlu&PK$˱dg]}{r?j[]ΚJu}u4?ٷ:ھ~e,u%^,3:gw)Zb7勽ﮟ{RE鿟_xc/\go/t?MCƐ6m>Jkf仿Uuw8SK~9;2hzֳo\\aXfO3Dýfo&K;䶼#FDuD7| {)TJS>*C:<|s5ڵK$7hI4s.bnXqzӡ+W^]6[:HV_]"YOqjZ.潽րk*Y̩k|&gvՄqO뭺'cSջ_3<}MC>mL//6yN2ͮ?嬐elDo}XS=8tNn/;~L{O j~1iSҴ%Qo0yZ7e2y[ƅ*q5](^Mw>Ǜ^*UcwȯKk:7xg˫v#[*ė? \7l4FɅkx|897s|_J5uS˷uL!(Jkv{yÏ7^c)RIB3*D6v~g&)NtGkJsJ_\pWׯs<#};Nþ 5lB##sU^eI_wGoq'rC/N~juT\W~o<+׵?]j"4=78DWP˙VFJQ,JܯnϨe> v~}6z_?eOwxL.u=ðv[k{BfyZfG>Iy)Nq_/GA?-?ÿMgѠдUEXŴs:Fv[9QjOoCʭW\7wd9`qԔX<#_׵RVWz_#UdH۹o%4a:ݬ‘p[9?<9VO~sM☚R(Y?iȣzi-2I'/#(-zptE7r$3Adkypv_[&vՕNMtzդVdo.G2v[h?dy%km !QHqק5)JϡzS= m19ϷwЫhUkN7۷bgdw3-5&FhbW#}>~xn1/QeӥKmD[QQvF>^>iၓqqkv5KQFyLg.:-ytw-bx_H,rncgܫoo#fj9En'g>oW?mu i.kK?wYBi6R%b|Zyeo{w0˳3-ʹjy|9$Tzk|3<2I:sztgk|?ǰx\jW_oK#io~Cky 06p+\tMAI\w/h~ /dv|WM43mO&'N8ԅw:iF-٭?Si]E Zd%چypF5i,mh|hd$o^]H-~{\h# m &jIio_1哩iƒ~ͭBR&RM;?Ϲ_4O4m&J{&g)misq i#ʟ&HotOMO׹9&-SV;~)6.n5y#6o lgGyi+lCNگ#jxާ^\/[V]ͅmX!dkc2|L~Dt-5xmwUmXEwg$qȷV3$wVnZ7IzoF߮0Wzuu68_/c[FKh!le}=KZ$VFI0Ͳh]/'WZ>f[4sV۞wg /h|Ωڧ4=gڧ[V$;ohlH$&pkN*ujݯ8d>0Eo&j֑;_8H x{S-3C$L̈CxJmyȜ2훩kZN]wvO Zğ|7Io'/l|/,xfo]38SjKA%tC.|D|?_Eƭ{[;iM4I4"i3E5I<M.f? qu^u |g]O@7_kl4+/k$4qͨY4~:o_2=(b(]'{׹9ƗV?t k3biLƝQI y՞&~]ߢˍ]*Sַ{vG߆u{M'Xlluq-P1o" ռ3#o.?7Lj,7+ѽmy^O?S(k/=Gz63xf8X425[M$p’x#x7[ (ӵߞᰵ!Zv>uj9FY o,5=46mխ[WG_{$iI26n^*t\V-[}>)h:oZSw gwȾfdt?gMlhr{'s#|IVChWdʳdS"0dfg<_\]¥6-M?u2Љ-cV T+,  ֹ d#դ !Y&H&ξ_0qԨo'L`z[rvWAزx2  |W +Idcfo>ƲHdˇ`1r>N}<ʤokJ|a~϶zH-nO=rGn-&k\w<*fh("\M[Oj߁W4 Pk|%qhzkxH\v%g4r^[&m|}GQkɅ _ Zog"Mm]XGj"m\[jI3٦E{㵮ta.x>oOWOm~%xf#Νoss; V^8c_&03M,\Ջ[VP\oυ|+*h[>=f;Yoq##xDm."jV0;bzm4h֖p_kgFi.-%Cp9K?:AJnmO/Re:]]n4AYm|lcfh[ 3BVHfkЋ~hONߩǧJqܖ'OҴH[j%N㧦Yz \큶 (yٿrKrһnՂʠ0NFdmo³Ud&ſᙕ0171_攪ۦ][o.$h@>λwϾ~]מ)ux7'Y6H>o1Y_QQ*]_ВSJ3Q.Z(DrpVXG~ ~*=" Fr(Pu?n/V{] m(B̻%rNZiOjƋpcgyu}oQS*qߍ_O3XImۮٴ"i> _OӶϵ;~ς+;.qEg@fU+w?܇SiY-,Jfү4}vo:Vٽw4itrQ%-b#iv9FR~j箢Auo,s!ޘʷ;ּ˺i^˥yX6$>Ql}k[{= i$dʒ2x?U*WjF׶x9P#c?ŷwOzt俧s^4 !hw3~nGD"ZY/pqtH-aXvG qqTU]s?Zޣ}s%;;54]=s~nE k11?ҚmlЖh9֐mΧOc]k%D9'E|=?_Nff[wsx!?_pi^]<#û?/\׮;nA +G>Xڭ1[MZ ss"㳜y4*wk)t (%c}<<2@_NI=O6O:,Kk>;n6qi.Gf(y?+FS\?.i.vRHڨ<ݺ6gk?i//θҍNntzυ4m>IV vvݼ%Ssʿ}9UBJ/o[]ZeM[kNv3F|\@,{} bqR5dž Zh]nkeU_9mosE-&o-# 3y?+QPF4`3Ͻ>ywt5eG 9cJ5[ WR32?Tmh~H*)7- /}vuo|y-YϒY'lN9gM$[I.FT$usO_Y~+eeQQO}1ivpgI^@*nostwsy})"TE)sb1n?ZWo.{zi孌q(R)*̑)V_SWu-vjZ[_.^[5dt1_[fT wqJN.ȧJHԬSo~2M'zi=Clɓ~l/OZ˰ۋkt^\cppTws}ŎK̒ب'know*ր$S䛁i6i&Fþoƫso}A5֕pKs 5\&mѫo"FۜPB+KeQ__);;W(,F|^9=Jw88ݛq4mV}+6_΅&gG 4:/%ժ][o1=ȻWz³yrtj:SZ/mnw e_uϓF)ua6~xǾ<1i_tnemeoȶ"O;(廳ZGs_ :kg+iYĆ8ɵ6mۢ%t6oy} #_z5jz߳Y[@l?I qLy{ѤW#U8ciϠYi1&%k} FT؎BqozSQMd`;Ϋ/)CKb[XikvOݺ|w{m_wBݐnκF Xj;N/r:'(M0~&yO+_K:K9U$ŏM3|gץvFc߭N:=7RxeIZx}V=FñfQO-׻$#^bX(c&&?&M^gYiD0`F[~|f9?͝Ih6[p1= zs\sA-Ͻb2PrS|&Q#]>|ctU1VN9u0kyonj:n $5݋u?1XFXor5԰Eof~W_;GYMYE{oؤ4qmyUi7 |cUu%&ߊ]g}9s/7]muNMͮm!Hm7h'9g>cms3X,v:|6$M q H G.$qGHk-m{{[-Z~7=oKuoFctKx ;VYRo.oޝ(]a4 w ֭<+xB\o4&Tmw:۴/,R?u؛J ml]{Ƃ#Ko&ҸVhՙ~UM̍kܴѱ/\d?[2%6fO(J*R op=Aɰ$!G99럗_~Ӛ=c? -ѫ9*\~*=?[|ɓM|]VV;LmzCo7gm~5J-L&n|Yx~P 'cojdHtL7+1Iݿu3mvzø#|Ჶ4[6݋C a~֗N?e3Ḭ~mmWwtѕך&^)=9mEyUxݔmfP&}h^$Z o{9VE o?碯^wғO+CE]MuOg|eQаfK[ZhdEhYt̍9Tc)5^>"}⫝_GA4T]諹yyey{ORZpvԈRۯvp?9 ֠FcioڶfEQi̩'Y݇K)kٻ~cE/!o(NODM46ح7{ov_~?W{sΚ7m?,״7:5]WmPO.9ɒk{9n~w;::u(_ }-h6:\>jxSMHo+۶Gڨ;>FߙKIiv.z*jNX+jV1G}1p7Roݬ?yO)F/u:Vuy5gp >iYvgwt5o?"Qm|ѼMc&KşuMO$q23[9$2$.2U2=X& ĦH y=_s[7[iE ߑ?};9_q4>`5Ydgʸ,۾ib|~d2MŽ=- jeHBmn)eDBfcVTMoNU:}Wv⯈_ |Ywc{ys}\G:3p\*ݧ ,J<> J2j5oC˝Y]uVGaU7ȭ_¶I+Ÿt__r=[߅+m#UnmdķME :ϑ߮72_}e4h[&F fTedGx| jeoe7w;k^ש%|5g ӣ6RFPW&mLnU>~FMZjgZQj/M:ۭ{[,,'u6F7K.<7n˙y!oޅ M\ ۻ=L%yM.}|jils hYkyܛ 9ݫZ]S)v_rs|Mk V5mB9dKȊ38O RtϳCO%R)9k7ėN5#}V:qc+ȭmh_w4;%wyXYOUԔҚo^?3oS$Mυ|ggjvS,#[_1S޿?u;_d+ RR/i ?uFm{{ ƥX%Z<;J$_c?Z|&m5kjl2,ȫy&?g&-uϽ6blrG^Y,n n[$iַ ;,c~, ꯭[H}_v~K[y=oHUӓK. {w|œzëM6}/Uiu:k絅(!.WsIFm_ M7ߨoG~]u5&B.'jơ(fg_fz9EouyF:M?´{GLkKڴ ܭq2Y&e伞r?ҾPog>&5ݧM^`05/>%TCﴵFLl^XSV=zn+ ?h%6Zmv[Ś=.\ Cl Vh#99r!ݙWc᫉*OޅoHSΛ3uG֛MZ{+4^\G4Pz&ޒ/͙鯚J48+ѫ]ю.Ji)=Os2OLi) El,Ly~qW輟o r[~꺦 Q+,"{U>c3q>D{9➩T_D\|]UӴ&{-Tڛ٭eo&5t?<o[e:ʕUόAQSK޴N|yTEg6!ȿ4UHcn$?}`RuzXρGf{C|q4i^$ 73Ʊ"oDo ʪٸ?+w^XwK^{K֭fWnwVM 7d_6v{~akH6OFϔ0بy~OukIH],K e+,wNvקR p{_cȧJ|SoyxZG6y52!Hf|$2]_/rTjKi ^jc3 ;OV>N}B+╎kyeq"E=adC}dV|NeR.$볿޾ag}'z~jKfK5.mtmȪ3nM ú4l֚ovOr]jH-4ҐWPʿ._l˻ct~W߬(S|ܿ>joYog<T/k,_&IgU-"$1};|kYZʛ|w77}h+~iws6t(Mw"VVM\Z >g&K/,k@I8Yd[ˍf3y^s n3*e?Yٷǧޛ<1Z(# oǫogt)=>]D^mq}<~E];ac]yczߧ6ZM_ItsPM6SgmwVKc/6|cg]kԉ˵w:X>q=:>8xIiR5o9{y',ۨ*{tvʧ`k-3Ei _C^5)#?{ֿE:Z^>쩾}6_O3_,4o\ksyiov~m.fU^mI$QF_w2U)&{3NRռ5ˋ֜ 0fwyZF_/ȋ5UM֣{{sZ͇/_|D/Qy!ZjƖ"}ۖ+{[XLS{̭Ӕޝ r*5]O/w<_#ZxL< bwimy̿lӴcXEq4qoo_Aº擷f޺}C̯+Ek+S#amGOVri4_xSi-.uWΎ;,fѯrGxjr|,t>vfK0|_ڞz~.egO,-3_BM;4G48qyMl=)^աI7_]ݯ\]xI񯈴4}Xִۈk{;pr^$\p:yzPmSM[=]~[WˍO]R9fKMgjy;C%䷙aI}{ۧ[_g-v{%|6eJ6fwmo&I7FΉ FIkUzogdh_^~Og闶kMGUΒΚO-ad#>w^TZ+w^ݷVu<[7 A={ö:>EqW=JNUE=WMZuw&6y~,\h? g6/MOOm?,\٬3[H&Oi%6%mʣ/f+k~;ncFQl^noV.m# cVZj3߆0y)%-Ή8d%myPM;rF?]:֕~jI%=NF1xWUIl.z]CMJ/'R7})I͞v(vM+TmyWkt[?JK%k{MCY"{[VmJKCu{q pXsCqq QmyG}$m88|248o}w8:/i]m}1ÞдioxIӮg&R S+K9aImyhK4ٱ&#MvwN<{ߧX~OrJmncuxV4K=}_}OtYfi rEzrG ҵݯk;V0WODy<.җ0|WEc>um;T-l\$NCCur~Mq,\u}kkzsͯ-m}&O? QQx{ɴ1|ϲǗrGgmE5|58ի-ߗ6u*Wו_^榅}x'X𖓶n{#BDvq,f]dwtM7]I|b~>z89Sz~o3蟆~}CB ˨xs 6בt#X[*Dm/޶0_5.X7-쿫3ף=W-h1*Ūi/@n!ŬZMѫ=_.SǚtzV59}ִ&ݯLR.U.F_.ݮefD)WK~mz^lבww> |sn|?,j0ϫim渍dng^p??FW۲{o^ۺ/>xXq .NRF43j,i (h~wMNmYt 6ӻcu/ꩪ꺶& f#j:+}]HeW찦?yϑy[;=u8jO&jj#V uy6{dt6=H%Sz?^&?ZBwٴܶfZ;qNJ^fYIf>}Hl~뗶xox͇U{{M6oF~ƻ$G}7H}kg*MrjBvM5]2]'BtH<7oqk~җIn6RXYHz9{k:t_v>ExZN|Lԕ xAԴ \{^A[DΙ+|~O&DXcy9?יQ8wZ/3h˚lq&dm 47$߼-շr ӊɨg翕G6-KJR95i[/.QFbH2F2CjwӯSZsN~ks +=Sᖘ/5߇ڝޙ Hܴ5͹^y67 oaYJ^u}-zK%rl{敬_݆v<̯BSWZ󻵣W+|-zvou;(ktKffˎOmS}qf۴Qz~v7W2X(G@§*$Eu~kf̽[r$~?h ]عlZӿB+s3w]+Ss,KIp$M44W>b'ֶm)90&{B˺(cim ?]B4E e}Q׈S1]49mzk2Pi ][ɏ;}-?#]znVUWe=ᚷ'-EvIgfFb^ah}ͿC͓mC. Oomy!xM~!q_'}6eg(]i:4#mo M9tƜ(hw9z?OoW%ZoOO߮k9jUNOm?n}'3_ÚB5GH5)`b1>\1ʼFS^x6;&>}?xs{V5 փm&رy\/DIF!z01%7QΉm\_ݎ4V_-VX/?3\.V{Coxb9^..ǛygI}[qTp~ON7wߴg5 o5h c$xk 뉚M$lfOp|2^OQ9{W+pTiҊks=wVgO /q5ޣtӤluܗ[[{5l2s_obs}IMRj7”l߻_={UiZtVvmϥϷeӚ+&L|Gʿ~zZ?L6_Nb[}L]YZI vUذoe~=5O#xda!Wowu)I;5Zms$cwD\_is> u:oN=o.?16o5*k~ tl^ww/x^ZxG jW֖7Z2?.8om~ѳc$q%F>}֛+_U3{tsåKKi)o"t (,K[~HwȾ^5RNvgva.nST$vv]e]>]2nI&~O%?.ίNWp}#L\k5/O669sɾ$7\|.߃:#e{N4ŢXc8v32LltF=+wݲ]O_Eo9jt#zͤl\s|Br؎u?VnTi׾x:roiz\Wt.;G >dpO.(^c0uuUp}Z|]N/'Iӏ7<0<;]MiK{%śy%Ē=;$ftPy;:U/y=4{8f']^ 4Fu|.<;WO{{ɦVH72GvG7ޓ?&aTՖ%{EQZMۮ=ԭn+2Ykr3i!co* x䉒iInVŤ{F|&}߷rK{ }}j #D[f߳yke)-o5wfgW57z&-٬jr* vs~+XM[_g 5꺳}R;n[C%㵼2Ȑfln~W 0ҩ$wzi僳[^_I{%/qgMm秮kdUk( ب]?^>gϺ{{԰sO!ͥoOieZl_^kIZw{tHa'+(^moԵm35N:f֧nhնkk|6",~Oܿ*htն έDҿgtkS%Y4[H#vY?wiD'kS_MJ)}nv߳o,mS{!SF_VYfkunzVkӷ_2?#YPk6ЬCipV6?9䑑W#zRjziYF-4xNh/mt EK$l6ާ՛W}w1Xzj[/ fKZJc[ROUI _Muwgsݓ~IGxKE/DDi` ZH;eWV_ٲE>gU,N~fUqt/˫ؾinvԣ2c~dٖ_fjۿ7Gx*o4lZ6Oնiմծcv}k7 |۷Wz~OsXᯫoɼIìze.[{Zk{K 7ViDwEFi#DʽJ1SwqoVgynjh^SK RO۝NBuyqb|dzF]Xc%Nom^N͞M\u 5ۨoGįۣVgӴ=5tKOjmFۦ;3x6.ޏ:G'ҕJRqݢlss' 4\jE _0]bot*Hoյdi.5K1۳6?$0':c2]դ.J?WPj!IJjIsYoO+NJi]#{4HR.WPd8VslG{MIO[*m)C< aRN;=J 64Ws(}F饒O2K>-PvԆ4>\~[wNzӧ)*u~Z5-vz>rNjΥxO܍SO#lז[兛c)g$YbC^s龷:1V׫۬O6tۯ<Unm* mB/-|Ÿm=<εӍufGxDoI#9a7S>j?q,E5UE]]oK"ohJ%mfrH=SPŜreᶗc$nV5:>B$bӱg|w#ɖ()V!Mhd<.!HUyx[oyPWRps.Z?SJq%۵z~g%_'GCm_m9 j udg_1%iz7<뾶y SX4>{&z/ oxkZnT{ז67lQcfDWΫ(t O~oR%~WxgGjׅ^m:?H>o+̭^i5Ru߹Pv<W]f_ 6ul?I[:o渓X)0sIX⡃SFu.zO/|WӬ%5k(Z|M$G7v35Z.֌k.OxN 6&yoB+wGI-{^ӖׯU'oW >@8>*IU0ba9_F_oσ֣KMEoc)]>GK~eQ]8#G *K]Մ#&W[]Kڇݭs~G,{~bteu伌M߽I5'st# E>aZsWN~ΎNM?MK q\o% \eu󹼖qdۿ?7cVJN/뾞&[Kk|$)$T+UU}|\=B֟?3~h} A/"HvSopq'VnIo}M%p_uy5Do,+S/KJ27gΊOU (6{ Z謹_-I5e$ZEvJ1n_uҶݿm^NoLL=?=.JtX\'uⳔs7uy|__4" Mt74 ѳG)S{/˭Gd!˯R:t KGیFyqen8.!$G$w%Go?աO17Px a$&Ի]ڤU" Oy$:#'~ns?mMYԮ\յ1iYi.#6ѵCx]#Gmom{^ݾ0-O~#5?[ЃK-IkV[k[#Ɓxy]v~uJ<{kxK-"{{Mi'mq%G"y>K~/碒zo>)z|IxXGiH1feWY6%ιuX࿈4}:4֡b-ѮomŎ|6sI ߻Y;6G*M[U%mw[Ϊqvz|K־2MKBRiȻk5Yx^;(_j3?$x#Lot]O:5Gksżix$[Vj)iZrDd\jyu&9}3[yG6dd}~d)ߚF?c?SRkU%niR=>ˎ=U>_{*"%k}μxkVIsX!<xEԴ O[WPT#mZSY 6;xđ|ԤMouO}nxc_x w?5 -.mRU}>gk[9?2]Ceأx*tycmƔ`m[߹z^_ڶumkiqgxsYTšܭ$ͧjo$m$?fޖo3Iyf%R/NJRӷ_Cw>Yx~}N_ >AZVy$pG-ͼ( -Z"Ubc:yv5sJ}j>:v:lzƙ&∮Nj|mi լs]M7Q~t)rlw”a('xnߣ'um{]z3?4Uܺz|/>|} ֵ A=c[izŬ|a!,<|Rn齶mN6wNf ]Ѿ#|)eummy4*ƍofW˾~d~ѩF{4O]۽6:c_kw?l_7{kZL:i6;ڎI kC,y7y[3[|K?_dW;}bXItZ?eFUlMMOb륾X+u쿭J~PѼ jCweq [z|ɵW|>z\I7|>9oG_~$]zmcht {)%\yqn$M-Z7g,)}d^S ^}JTZѧowgiIkV#o.-q۽Οy -p\C43CpF3}$}࢚ItъO8  =4C᷵4}$iFu3Pe7]Ms&ym=mo/cTk>7゚yҧu~D  t; *xOv]ۼb_° g#zWT碴Kzw8eV~'Ϻ)|?h!Ohm톱hѷk5ӼnOˑǦ,ӹqz޷Q[mڝ?Uò躠[tMb.K.f]|T$2&+OiM?5:n O6Z9E_:ޑ!iwf.~DxgH=}^=>[JM?̿߄`gUxksdebѤi>I?p޼UIr~箄Iekx7-? jC~k6t-ͽԉڬdɒhc9&x~}yiz*Uf/~ew;\j˅Icma[xY!6K&OvN8oj'?Z_߷=iMcCź|!z5_ޝO Oxfdym$_.>s^ M|[SxE~ButsV&?gFBMISr,pûsI}舭'"oO IΫQ-ne:6~'ZW?Gt+ jzM隴wQȾZ|QgvM r&~t4~ M|;&k%xN4{pe]B84k Iq\O2OwQ?kעfU{篙eψdž~Z|E? =4 /ڭRmCTXἱFt7O.pg%oNG'{yNWF,ogcx1Z跌m#I{G}cג唣 ttR\g.Ww3׬>|7^-_.[V 1kH5UK6mn-גY=7;<oV2fR+tmz>7𞕥yڻMg.ҭ4+a 6sܪ>J{%j^8:* [_軣⏃) ϊ--QE bd[gkYd#كtz$M_u>4oyk=sB]w vmh^'rNfj;z*meq1>f$osWO_MN}|rđWCKRP}]m$]kG4gէ!!g*y|XFϓfPzmkip[~ZW7}w ,AK wdeK:+/׹c,]_$ʹ]<m4n^+[=/6 vܷ&2!/cU8LiNV~ooę&ę<yW} t9馏JpLp@Ͽ Tiۿzo 6t,[ڕT^ڔmϹ闺lSi#H㹅[ ŭFMm[|r{WShic]ګf-?W,EĆ(OoM9%+;]YĺR..>sgk2If;ЭʨG/wܓkG_?ɁIu T"3,ȱUVRn?cD'tI[nI g[γwOjX66у+c d?M5 1}{V\w_y$iN:=9ifK,i$S>`vԕ;J5۸bXpL_33l_u=INϿsNXG^_שn4OH4:G%-+v%mP{rkΞH4 H"jE(X5ؽjeuA>%I#S~R]Qm_A5u7w-Ś6Ӵ."W&M#?6'ٺ?y}7/emaq)8cmL,w{lDϹDߧn{tFn֚[mcwz麺;HM¹,fo&߼"r}䷈6)C67v_jkL[|c YJI] Lw: /=&{4c~_N}v"N2ZyL$,Iʜ?_vA-O߯;3᭄iuB we"f~YuVOGo_`SXi{#`:]\&%i%y=:7Weq˵D?~<RW󹙧7L5Ԓ<9,WmV\S[tg۴|ew?w/a~ 쭞P[ی_6ႶcR0_>kXBwWܯ"r_j$3o٠wY&8ϩB"NK3+zvq&zrS=+t8fi?J>{oB5̛mZ5Um_dvd캥GxJ[y >h]gViyV١iUl6wn]ujcu/>W7j\"r6{U+;2iu$x{V\rȧ>PJg>wqޏL4;ؒAV%Y/lmi% "vxi60HKgpHk;b,H@#z\OE_?:CVaLL mj;ُ߮I~6c'w?X=.JGox&e736BM[z[4#7#exϖYYr>&k惢Y[ZUn7"nHoج{ۿM΅ʾvڽu+ gkkcxf{pʬ66$/i6!W/u_ H洒^-,6UaUtD/#F|?gY2Lk\j4m#C$04ey(܎}5kd6k<"eoY7ǪRkg;&/=w5orXվG22xUٱ֑Zx_S.I6KoYXȊJ.q|oQOm.5 rxMaVq%c-ҿoވ4B4 :߯]s^0x 0t[k;U!-H\\]B]}gD}l&D8ᦚŶe|55X/nGYk[;|媲~oQ>ivvF+ "B͸RRnWnmWgZMբ_9bXIr_3oUk׿OGPvq\D,JB)0U~^nf[5[Ϩ[jZ};ͬ36Rff d>+X_=4ZJ}%p?(VfʷܢQp;6[2$7b2n5k[Xkm4](^2_[ؽ).%_:{oewDL폿ZC"Q~]_`DNh^ۧwhF;6ʐ}+TOn:ߺ>7.Cy/ wZj?h=Y?:|ޢ+:MtX*;=]ϞkKX.dp~\<7;QDwtfM.eZ*mm?M3-W}o{Vj?h4hR6O'yp̓|]d2|x0roSWmeWĺw^u3Ɛcno|>I9sEz~\+]$>h~$N^[Cݼ{dʫ|#uʥeT%7c֤xGMoiZMgML߯jXu&W}>t_תߢ}_˹Zܗ]$̯x2¾'׈W:*ڤku &ٚX??zlJ֝zuVWr֧˭Ϟ! ^[}L<(Zıw+Eݿ{W\67M 2rr}N!-wtTۼ@FXd[6ߓ0WVÕЕHk}V}>}6K[\֫}Xb#U97IlQz7&ZU)Tbۭ6ЇHv41|V؏i4oⱳ7Nһ뵵Zk>4kl/5L[ >\+$sy$l|~io-{s.WSkȖ@[,l)vshiڜw7<ZFDL"y ߿"=Zr]z}/34oNy]!jukL<7Gly̏ dNݝCbN#, ܤ[Mexgh۶]OK_]L*zK9[^,٢еxbfȎEK>JddͮmBivK|Fqծ3xK\񅕏[߳:+F0&cՙ;z?[xvZߟϩưѩGk>}1ix>kHYxv*}Ϳx|0MԩYoo?QO.kAE~_}⭺I;{hS4=k-y ezyvq(~άտMׇҝ%Np@tI;eӤI?rU;N+7MQwG%Ѵ~k~'&~:}ƦdmEO>3q"nf mo3ea)SRק^ח2ʣ_c T鵤V_OuAqVڤ.--F"J=1*;?tv(J){[hkkf5h1IdFpī孴 ;IϹ^6aQTsKWm-teN+_OYqe ZnShmhEYnְ~ɽg܇2& Q+&oWeߥ_J/-Mws^=)omzuηi4'ofr_m3FN?&tE(~k_3+ewӪ[DWFCceO?yrG{?w^NlSJ-G*nm4K8!xf--v[z'Om߹T-?#<min 4ʖwILZ1[fb h;yzԩj֯kj!:,1ioU/IIov]r ww/Nغ5'z>+Bjj ٙdPIͶIf-λ*ԅ.}863մO3DfFeMЃՙٿ=+ϫN/m ={;|.f0ҕLMnu]|Ͽs}nMsaNߗ)XC>jfi]]N?ʬۛsVoM/U[+]=OiO ^cL~l$koȱa&ĭY?&XjSh xIZ{ֲGԡd̬%ԒF쪟vyo "gZ觅's5_怜S3«xfᠲ&wTqqx"ǻrȂ8w>yPWO"Hӿ_w=?Oh~ _?ؒ2dh.$_m oMO5.z )nzGU>Yk-5|%9~h zv+g՚QtɕZ;r^^;%+r}[MG=E:r}~g|ZƧj:xZhèk "|h߻}.۳fʜ/燵k4v:]+.6;egt /,۲YNJ~}ZvJwaYh5. B'cUd6uJć?"gE em^8ӆNuxjb| "JH?/ &!euosө}1wÿ_u?.uOMm *MMKP 12F#&GܟE?xZؚDj~wk|d)G5mݾ繶Ѽe=-^I[-#4qǺ6V]rMK|>}t()aq~-]};{;*N],o>?<{|U>2}UxEGFͺOMVN"۽>-{osPm/{[[_/gZ : z֛fcҴ6%ҬnGgID$Zvf_Oz(w<]~vEq2pGu men9RE̛fGRwS]~w|7~4]T)(}FIT[3%j~#`60])<]'G(V*<}uj᯶/[Ák5jwxVIUѽ֥ {")ñդn (bQwo.WcʩҧJ/Vtϫ>z%|JxO[{K<3)Mյky0JKTGUFsoDa2 tݺn}rll##? tM?Qm鋩\s_k=;IPItHYRyx->tγlb ?f۳_}Z>_{?`^Z߅$@'ȵ&ƲnH..|!~gO Jjwm[gk-m~'$nEuwoRg7ZQp[c9#fgfH?>ɲ,f)r7D#ZwOosx j=4<-8u3V$]1m峷6wgD_ܭ \}%O>S_'߭2i/-/K-U6R=Rl'lX!G46ʒiy<5u!.i=]_<#++ooǯzVְ[X:DwK{ KmyjڄLH,m{6;\NޯzF)tk] :glč%V|4v ~B}H$G~zuVy_{-ʜ]9u_{N3otŠjw> ~ K8֎y3Ae[[o~fp:s?Ju]luX/3hmkΩ]i:_m֧H!ec&Q̉~borPӵ???4SvW+[ZQ𖕭ͦxy{ 1Z۪jO3q$,df#&{vfx[Zωukj5Yɫ&k%mZEݷ'٣߻DTc~"~_Zm]BWPew3ov)ݷuonTocgH"Km=[DѾihhs&c6]>Ք׷mMɯ{ZvxcB!E]cIֺyIW};嫖\ɯhݵgZš<eNӭc-ͭE v vF[Y±5u5_TW[{qy5XXdmٔY$YV5.U#{?A8d5޽eXZitQ#6CREڛHCO?m}O[ݻ'7y6w龇[?RA;}5U1 ;̛_ݤUS(ӄ={iyu"y@k-ͬG j-Lyyq4U]ɿ5yrj*[n̤Կ[3 x[-坜ō4^ev6 6{dPqy-^OS>!v.Nh>|0hv3I$ȟ`FSdUsJ'XW q]Hǝ/Z Eok>;Eºd5p$2ir65rr2Dz8SgW!Isԧ;IuTm.]ǧ}osm8E2[/S]o$I$hRgf2I8.{. )םG>ou'?=YoM³;xMlEXdΟ뿸g7E_}SZ^c+)5G/~$E-k9!j$qȘo߷zʭ5Se:&T".1®V5gs*#IZ*oKwq?[jx&(9ES"6'쭩[MguoxoUOM (u.efH\clC·ϿoU}Eno]U<;rnм3=6٭cio.etHDE^:"S)yrƤ-7߫ϩ>Q_>}/NR|Q$x/]omFآ}iY?ï%9?~ӱFe%9E+@Ww_eN+SMnyߍ~%q,iE6O&~_y"*ﭝk_wU 7M u <^Aeov|&_LFmRO Ve/"CYqX*v&u4]rmmZ1Iޙgch#r>ѻ\gKWt$k$6LH%߼7z% ]'{H7OKc]|}wwcu/u<3\|I}ֹ ݙ|~_:o2Ozi8-W]LE-YJ4+ m^?m&?2?k;nkۿK}3[%4-neʿl,~w1->zXݻ1qRkϦV_.;{Wd!~]mV>W i}*o.?3/u~Zfc۷2|>]NGV$Q_Xty_ykvaVݾβd?ʿ/c,=+N2MRtR6>c} n[ȿt:'5sJ\%bNRwivOYmq`F±iv}\J,pONrihFk*?;__#=^׽xo髧?20Ws;[Ƶ&}2pn>~Ձ}o3Z_ oiڎcibWLII ^H7n?DM)Un !fu>uy~'˽>ò[hr?Ȗ[qᑣo%gWrJO h]7kĪu_4ݿ쫧Mj_I?#6%=&tq*)~,f6RJ7ӯߵ||-xGݻ&h.ky0۴|>du:Jx%'}mW 7eKݮy81ɳ̾UUsO T'].M\Wfr?>!cঀ&ݵ'@hfT|eN#2R)j+wOg_O N3oXk_[|qc~ۗ~̶v$5SGiU_*\6|>^gZN[}/齗`2.K?V ]_G4RxXαm>_3,ݿ_ w*4_gBaʣ$*"w||ژ:stS}K;K[r [@_6v/yd[g(wYN˘ՊX#oZYzf(6@ffMm/W9zvDfx8M˺.$UfUQ[}i;_N~_68i-nc1k&H-ᤋ$W_ҕ⏆ .KYltncѴ:V}Zok6Mdg/ڎ餛MJORoHwoh[ԗ7vS难Y[n!U65!tc?넠>e;}^"6^Oݡ:O<5o))8Ξ{5iwM&1qP^߾סZ_޵߽vZ ,l.5+VPдwYdWFV ;2yt*^z[?ϑmm~enbg%m: iz֧_;9}! )ԏ5ݼ~;V_Ͼ;r kڥjp&kޖdEm;wo1%y"Fg*b{(ޏ=MnZ׈ ѴmJ= X~Y/#8㇈#~.i*17oF{^8i<=k|A 5jfafe̸XjlKmUj%]oG ՞~)Mi|w}孬k7%+41(JpV6ySMq`2Fq5弓ṄOxТ"uR䮯Cg4{ei_u?G +aoa3XzvCs$}$sG }ϙ|s|^y'ֺo'[kTkf=pǧi}$i$ڻ]ֱV]cNem~v8-#yڤ~44جwג,v${b' +}Jm$TtZ|u}|P^$Op]#Q&k6YEq%ƒy">FoDOv4a")RsX뾟)˚^ 羽|?|t<-֫m5$-76s41xmqzPΨ1գ_=zs'$}/S?_ m/o?"k s'&ficfaC&SlU>Z|gB_$t_5<'n>%."I8(ikrU}j[FRq][v'#~MkƐ$wkڌiwCog \ysM/!oۺx_Ҕy*Qev7 texE>Z_3O'<66|E.nc֭u Z8YU`m S̏7g+{Jw_W'{~w#/{ ūױ붐yMUIos˱Y!En${(J,:sriY=,W^~8^l']|EuӴH-/#3qHOg-19x 6[jNU=t_7D6%^"sho]C"y6/<1\"WEi&Hl'э)%h5_yt]oRu=F Y?ex}ѷ_% N1mk{?~yjQRrS ϻ8M#Ho?x+ZUcJ 2®GqH޼ϱga:+Vt,Z%u0uqNӄvy]w~~_-S|KKx),Pޛ$5̗1DZ,sy7;bsqEJnimm}MO:uq-O._W=?0ڶ eJ׺֟k ZIE߾Kw -Es)Jqik{۽?J*K^~=Yzơᆁ/5}2L_hq+i-ڳCf7Cw|G ^Q*X˚kʶ~B[46xV$-5νXo5ϴ'o% )l~{7eZo[ۯuaZrƍ3ƒ[__|'ߊ'Ut.{_N՚m6-3F>?.+ 6KuE¨#*Ni9I38Є_èS=/-F[ӿsJ EIvVv&̲ ҴjK%NF[ݻ߭tCs GI3- ȑ]x ׊7}=M%FT]YǘNߘHRyDڛz̈n~iC2W^ |}s֭J?ܯd %5*@,3W?R9Ci]}gS@7.c31<)=¤?የQ̄'+wMT>ޯsWJGEJP*Yry=_bN(ѧCWlW<>%+Rň7NIDi=ڿDۖ~s .X8Q߽׫j\^moe 3#G}{Q'r|Mվjėm,kk@,sM#~^L&Imor)ӕiZ<ȓեӮ>N]_5 f["Ifjo#gۻ乚7Ysyuuӳjr{Ik'תm}~w2BHi7zfujqO9mc̍/?s\y%]m1us`|gxKkKmKp$2Gy>̘M9t_=tTJWi^zdRj mRE0Eq2Ėۚ8micWYr+v|z%ݼp7y!C[˒;ydEpo ӄ^_w[Ck5nmc[8MY%b 7.օU١e]6N_9 E5_5[X!\ɺ{2|o"\i_NֹkdzZKU+6. r'1#yw:M)4mcPAiἻ#f?#gyq_+[?ho˫~#_|&[yt7ڏ>!hV⫛O D#GԼI4h.ZyP|tSZ?ȡw_t_ >3Iյ~{ thd2dVw}َGl)*Ni'&a?5k6jݣrI%2G"[ܵ۽ͳo'HT%MgB 5%k}SG,x-~kR۝_MO|hS̏r3%BW1)rӽ<^0*pg~x=X m[zſ]W쑋fg%ԑ G$v+Go+IZ$Ս:oZ_Z^_-sE6'̟^њׇ_ MZ[]YY_Eo#M1gXgO1$?a:k*{gYΧ*?[-zzLY+WkkjZƟsP xᇌ#>FV1C4k涼UgxnMZ;,Dq2uk>;wV>Co>;tۈo4ehwye73Bo'eO5Ouu F=~Rே_ό6]>n< ׭U,nu7cwkIE ƅOfNۿ߾.2\w~F~/Os xm:}sآtXcSu:'pd|ѾBNvO;4ΆoxW:پMIkWf- }GG;y>mzsC z?]fxOڭ-|O+H-.$d[[y~̖Iq'ͮ2ͥ뾁u%5o-q q+;V^NkuL|({%mu[[!q2#}Vc4ݛە7gC˪z^?NCxa4VԚ;Y_+9G4msC Glnv^U-ӿK2͉JnۚB-i7}nʂ;-:C[i#m6kڸޯrjOm=? sHΓ%nD^;7n"sFU%'{|h$PFѭRZA#4LH8ZF"ONWmWjeQ/3c>}PwAi~ Hu"hxv{=247 $7gYf?)NFl:|ˏ:.+QacMMI,eO Y%i/MxtIjmkwwɷuv>]v>e>:&\emLn4fDtdƿ#׹a^&j1W}ukKqӧ)Ez]wOft|S75ST4 *;-\i?[o7۳xͿԷ_֐gsOny7dhmci72|莾,c%-_&=oh6 n3=ۯtmNGi1qqg'&IB璋}M · -^Cpt#s ơ5-4T~iSuwU4^?kI4oZ|$?Xxb rդF|奚RHQ&wZkKgK̖? ?xVwk&k~GM9/|^6|?}%N4/::oJ^m|k?/D>)[FͼkZèH Cnmᵅ6y+)JyHʷ[}?/xGό-&&[;Zk}-lfDymk'&Nm篨s~tZßxrǢo\Zm\<ۦgV9$m8\"=EF--Z>+jlm n{>^V/ s:_&v]o浺y,ۤ~b4+պʛ33}ͧO} z<hVm rGɾ8fIs y?i=HV(痳o-}c˝X]->}*Ǐx>^7Tii,K'r:>ޭ^nm/f5)߿o[gr-$Q{eՉȹə9Mtl|׺'Hݥ.;}[kyXGYG g2SCMra'MҴrp˽#O;T~!~VwZd+ѿɶOݐk.݈OUr&6w_ _ZXrVc%vN7֚U& IGVy># pqߥw/!n"+w? Ŵj"uO"" $WuDm22WOKsH~N[nyp}o_+8_ħ$g׏,99o]}_-ٳm-ҫfVl>U)Y7ԞympK+ 2UoՒGB\q32%=[xV`cEVbhS}gR<3ǵ?uM;@ƋǫOε%Fvf]eyG“ tgFX-0J"%a̲G'E*z/$6͝LQw. ƥ7 Ӓ2?Rro nw@C+cw?}& 'EmmTlS.L_+:up׷D] \I&d^gZ8y\{u%wa5/_BZ]D 2|w`4$\?*^^N+m|u9ܛ~{_[&qğn# 4}>]>zz\_zXt Hq@!PFr2@ wUvTF[l\VLZ/]yAvqǻˏP)1UwtO}C%˜.{4 I=Iz yob\W~)jRk.[%H3|[쵷ϯa[m yJ33ݏ_uyc-ng{[[fh̍ 4ʏy\{vB }l?F99廷i.5=Gn>m9_'ureGYNt&D11Xdi7?m ^K=#)o_,k?ʟM&x}t׶pJ_Uo.i$Ac5ist._ykOyڏQ,F孭A>\+}6O5ӂE׹FGHxO_[J]7Ǒt5/5lVGme=(.;wvz4tgx2x^YPdj4or2ȿs{4r/enzU= Z,7:lPmhgWfMW:izː(snGse/s4y^U{Oݳ|_?t{_q{3E_2$FHa[$B3 [I=y&& ZGlFԓʒYQV%6;ӯ~[Yg %Hb7Q?}vkqr~~VWgS+]j(W~piƖ[32ŔR-Nbn 3:no4}>iWANYkVK5RGe[qs?ݻM2R_û|)"ކIƖ՚9oYYD?w+\:\ZWgYGXnh2 yw?N$IfɟTK:h;';d^dYvjn~]R׎!|.V3[DUrwϿgI=Y˱5Ү-l5K+}OTM.[9$游HF<ɾw~Ok;f?gxRfcel3X¿fw:">(]|T~ٱ}ᆗNXsıꈬIyZYU/*SkfQC|!D–Iۼd@香M'˳gD%_@>'f˗76v]~_s}]V&_ܙm?4>0^xz>)|7yagsL~>jxaC&v%u Yem4:?ci!e2'{(EN]]݆=Z1 ;t{obWS )5wվSڽ_2O\\,/S:\26sE<^|²ʲnE{^:=;Y^>ZKxZkhW홴(C(~u\,7 kMG־~j['ӯQQZ}z>xŞ еԴ;}J RErI#o'z|ys0)T%k=]K;oOh4[fUe04B|S˩ӗ;~}Qʢv2u]6 NH,|*oo;̑cefٿgW*1]DV.}Ou꯬ˍ2K I#ld_2=\)^s-9}Y!RtEkgx O[|Ex;ThH4myʲ|?:WYR{3er]K:+-2K[RAl$o$j#ըFQmw& tMLnߴ:dmJD68T]^,vKy6lrm?x;O1ko;x+ƾ2 RQ[]{w$nc;@?cO?/sOnkfݵ_tRnӿ~<7z/}X^I%ɦIpr*2FmWf9JM]{uiɭ;><\h?5{KiM%䲾|_3ϵ?m{4l-$oգO[O;PXtZQy 7hjM,zu3}H_.[ P7QO4 r{x,ۖۗ>Dk.jw۽no} FJ/ퟆwEQ4[Mi5V[tc}Ǒ:~?9V;j}:Tc}~g}3O4`l0<}}דIrzZ̥'|Uៈ-nwW6fk$qY?B}>;oJlZb$r[Y*JkMɩp,obU FRKy]WwDOSA+)]Yr^v'OCZj^k5'ZwWuַhnË́̒.,7zMN~NoI{wcj޽[^*Auka FY9rwhU¬_}s/)2;>X&.涝$޷u«)9Xپ?:0R6nѩꭳkty5QN[$J{+}uĚM6q4y^mDsf|j:Mͥ7BvU.ZuܖMq[8ecE,{8nm;Vwj3zt"uSn|kux':&֟G"ӰO&l闑eVtOh0zk-z_'dߺRΌ:RV{).lRGȭGotxejq_YOk~g-]KO>pmaVB۴sTf^d5p*3MEWg]H[:o>%sKnE2U!nYOI~v|c ]&o{%zݝ4}iK Tԭ{ծx||_<ϒy4𓼕漗tsHm'5|sY7]iʌ^q$SswwΏ3;f_=';c4V+mRYGs)fUVqcrop?:-"£ڸho8faCFsC(]n&ygJu)KNvW68wvB9%^cmms{4G ̟wtxU7tJA>gӽ>gW.~ 7Դ;o_x崳i..fj>c$sbZ$J毷cjՌiTn/ߕχӵ;;}\¯lp"D $'mrvWu/(/_;FS_w|ycĿпDX-yMWN.+_!Ԍ4 dUj#M7IYwʷ[β3ɿd* rVRN 4=G=s*YOhKuV<HtEG~ a5jzxAIu({6:iXyTjNkIۿSݷ}<÷ږ[MR'V ,r}[ɟtnJ;aI_['k__q?? %@K/ hcQeKh`XyHUd3&+˫uSJo_?5Ά^uVk&x-#Mʱ0>f<6q/_G[R?χ/t>*JW_crswm6Moœދ!te77qK[{9d *oxQ!gG焔hsq~~}[>$j(Ӵ#Y,Ok#mK NwYɾ,Rߟd[i>=ݎ{?rͭxrv42BQ.rQ*K_OsIN6ݟ,xVO&Ѵ>) \ 9ո5U _]_B4c8;!'t^5 ˫jJFM"+YUH!θmWd)lha0([{IO^y'_jv}Ii3i}s5dfY5{VncF]I4/ NpywkT-ק{[CӾh>#!a.|16~,i\ZHΰmy+'ȇӄyY!Kwo^4ߎ/5;GNujRuY5Wy.hDfHe$Hvӝe&o⩈m}-<_>㧃xWC=_2Hdwc[ƻ ^M7˥}>s diׅ ҥ_z=LV[VHkYf)5d]u#kq]k]/KYI4[wKGk<2gD1\vF?~ϭmu8ps=Uյ=' Z.$5+կ$o5M+&#m' $iJUIH-ɟCyd泷]5<ğ7:O9̺o$ *9fM>FcOTetIb&pC(Μ՗'WWGt_CUCw'Іkk} $I/:J˃amrFgw9?sQcoy6X ւMvϪ}GXIm=9]i>>̯oBgcӯ /eo:`)>mt<Ŵau8R4F&U/ozOuދңekߧ~?㏋ jH?m|+YZ4n Icˎ.Ȓ;2yy!UF-6~>^涇Y>"kڭ [Hj'Y"DO٫Hfx]h)JcnצzykYxb-KXV8[|?]!{̋*Z{i=΄'>JY_/u^5W2ExY}~-6yѷ_'% $ܣٶ˽U+^-ٵ_ºggxWF&*Iͩ@VK旛?/lo:|ϲ=ؼDQ%_?n=-A.{쯣W]ivq_ jUvh!|EkZ ׈Yk .Dӧݭn.#1cdd5e~!ĸ9Sv٭߯XMBrJge{V}} 'ڇj ;|dr%4 "m1޵H__-u}n=%x:ck~!itmSQN$3[Y.t[K&I/'ƻDOʏ%N*mX]b̔wH!KA 6o.8N庙3|DŽ&>i Z6]W.[[G7yw{32O_k?E+W_5Z5Zm@[QH1kV%wDT'l׭[Υkq[_[t魻 {YE 7Ӿ968 22Dt:*]Y*~Uѝj:>^_/A xO$wƑtԡYnuhmؿy~KϝVEGHtf}}ϲLInUE/ҭ\H)읺?"կ]wķ~w40-dڀV\f23"߱J6G"W%2a5͢k{jO {WNr0ܿ~=9WԹOq!?|plOS[ymR~KUjm:g|a1|^񽾝{4}> RFU|"'dЗ/ŭOZI5M;{MmHM?XʾrF%:'9kcSSOЫ]>LtcoQGU>_3VzӍoDm5{٦TKD3*76Sn;rGmkՈQyn3Z6݄v#ohe_ivW--4_}k:m]6wH61Z_Gf⚒)Fڭf乐Y6m?{j?W'2>3n3|A7n#GdyGo.oNk te7g}m GYeα_!Vi>u܍2V'ݭk^$wkckppO!_:嗈UWos najuk{_x-5-$Fɏ1d5}v7NV)W<'›^mf\ݻ3c~oSzct_j7щٞe܇wt&_ϽsQW}A9uûKK}2NqsMfO'ٛ?p|:7_B<_{|G?xSρ< ::[_kѬ:]I ׋j̓[}ɓ- O2o8T:z0??swo"I+fj^9WnfG"eMsG~IxB|mk{N..sJՒ➟/}otS?Ɖ>)ХגI!KܾeY lWVI#>J:zSrVۻnUS_^JWR&|-&uN-ms-fᦒ5\٣ls{jg{sZi7Zt1uV #[;(!WF%RmuݻhcٻQ%aB_G;{d:Zw}/m~۳>԰OVeQ={te},$P[ِ.&%E]?wz5yyƫwͻOiWK (xkIGeܫp*X渽+E Xund,1ܹByѶM;4'&W_w8^w|yռ;Fis$R!ecg{wU> n];?ֹK+iϡr/vk-2 ECo&9=r:|?m-Ͷub/:ς#k={~CmO"I$w{7s9_u{G[tweO6Tmak jOyk놙b߿o+7esgwXx;ÖެhO4՚I}̓'[]ۖ~y]S~)yFF]Ԯmiĉiƛ[+G'5`01//׮)w]φ ~~9%i~<gq+E:"ٖk۫tG~)SJU}oo׺<gywż6v |S{^W/ .+7yO/_J%:<"d&.׽O_Yl }4VWVZͭRGytٚo,г&md2yl_Ut__=ה4=Gl|Om;N|I o'|g }2/Y7g %I#^5%N,w*4۵\ _=5/]믭ݴW:|_jKDŽ߽&%DE7}2 UBjWN[KO.4W!]0<6oi($ZmZ_sawʝY{ /[[&Z[-xkuy${ؤ6OM74Gm8gz8bj(Х;M~1fxZR5mwk~w뽯^<{-o2Waoh7;*II{?߯r˲XѢ;i%_s,ӊqVi~M(ߣtik[;6ӯܴo}/>jU=.?-jh> uIOѴdhV6)o/ˏ^<ӈpY5RmRoS2ܲm=%ou?i|/Ӽ?5覼B;յf;{%ic7Gn$f('p^KWW*亝Kil;~KsZA1"<)m4%[m,F}Qgwsj眾._~~gKkmN|ՁZƾ ul?k祥kզls3ĆgO-9nK*<kUԬ;ܚ_mO ŚwÈOy\Aiw{ˉY$WkV?vQ"=u(EDZhzC3֒~0n ul$v%V? |7W<R*s{-HЕ黥~~{4<[i[-ƋEsmmuhZ)6;:?Ɂp-r犽^QZәnM5sF/ k*5sT ]Ip41$I,[o؈хJcvﭴp!'n%n)u8mK]YJ%f{7Os  IЊ]ٻ/=_M+ԺwZ?Z>~? pi>w~ _[Q׵KGyq}teemGDw8{VomR[[_C`Nɥ}/]ckجeh1s{+_3Ѝ(E迭ȿݜ?#Yr=?2{˸;UR__oos9MO{k&z~߻V+@H;]9tQVc n2ߎ+vVp/[ZT I_zjnwMԓoi$Q0˄Y_Ȋ=˻Wzr_'[ j9 /8:NzegV|׷s1Xp2x8vw<,~FeaݺyRMR[G[e]\Kt <]~nfrI4m;;;khU]ɽɕ]'̰*3*Pկc6ܺ XK肈{}|m(rgEbNg}H.NN}KlvIrjMo38nl.f/ x^(^%%+2,G$nYnk)l42mOe $vV4]IE]Ws'z"n}mgխu4xEůK'ocKs nO1ݣU-n!6L/hI^3;_N/>%Pmoh˨iK&hknt4m~H:WfӚ/֬i^_O%.46,XitrnI#ͱ6oy<ϹWRK;UqZk}?mOy@d- ͺHdD_gSvs圧^_ΗSҕUvz'mZfFcVx;oe7}yVO7msR#i2.CnfUUk.'{rM<~Qx{L:]wMncVܰfS=n&c_+Zxr~.񶿤kkQM&u,ײI#n$m#"Gr4wN){ Yx.L|G]%sl_IhYw䟒.?]qqWQw}z=f<5q dk21ܪ&ަ#n{ҽw+,w4׋TӤ{eg|ˋFM"KDZdܬgӮJEkZ]OUjmkSngoe>ZNb*Uݳ/>wWfa%'[uWv#mnҶQKden[=?>sxѓN aVSW{maiLR*r"课s%-;-ցP͡9"Goq 7jXtyH!N?-w8*EߋvR6i3ّwQi,aHFid_9%S{_Ǯ.".ҹҽĿ|wxsP Ǿ-5]:GEXŏm ;GqñaK夛3^q[}>ִ>I5&)R]6eXfHa4?*%I#zo=G%geS㎯GNoDi9"ƫ ~[CiGs2ܦܲ||(6_m_d3|:׌o|Kp`23hB5I䪻7cyrl؛=4Q}[A5KjZ:~E -IIi#_$7I 'ɲUXe?ֶW_9igj37:EA,23[[ 0f򏙽3旽?Cs[WF/"[Dz}k̗u˚fv%1ZSMLsJ]~{ۤvoViۨE^Xl_:V*Rdzo;ʣӫ_ >Lps9|bXBm"5;Ff/mev<,o_N[w^_#5oߑG}a|UQ9q`cqqn^(U4Ob2?_Vݕw]_U/_$p:>|NW7~55~0wo[sn[xOԠԴ{5ueMZ6:>?gφ{,̰i@˝>M heV7SKдhxsz{çZ1HKky>Gd!_{#Jf-IgFJ\z4 FR/7Zޛcc $sa/9r'8CG|GxQ.5S2kkݾfwޔ.ׯ}˹-&\-قiI4S*a3ۏ{t?^M6>OnWGXo pɺ_'?ds$o3_ CWܚ9ៗ-Juy<ݰoxQYowވ)WשȞKS7ZOC=. jL|B?$QI7Ε;+[;ohO4CúܪʡVMͻ/{oϨ[in̙YG懁5o$KCxwŗ~֢/٭}ˆ=˲iD9#D_A|$>vhΛk7>(]Vm?K(-Fe|ɤEY7ͽ> Ҹ'E &~_|'xv[:_2Muiwo}}B;:M/6mnosb;5 Ǘ:l֕9Jiy&9~Ǧ{_(K ^=z/RoH÷+Q9|6`R/޸]Ry}wC4 6 ~i,u曡åA}m}Le-jHbM Md~sؼU\]Iro8וY]ۧ{NZMև7m|_.b9gm?8?g+5/_3NOiX@֢=%#EHlfWG&7ü̓%)M;[~?Srw_>65Gƛ_g_xmپqux^ǚo'{ץBt7y˧]aF~7 Q}h~$|t'h'o#OωV~ v֞5nᅞV7/w"o5*ҚIVO9m_|ej^#lË|-//<$Ѧ=6;{6_X+5彄ϽCVrOwc&m~m_J՜x E<'/^5'ۦuI#a;ʾg&GNB4isW}}t};τ|sMWvVz_McMyqdiL%,'#ų:|rʪG|>>@E't[)u["RHM>uo~ZPNMgR]}=s &E}2ѕypo˾gwwܞcƈZoe4d7W{Aĺ6?,t>Oa(.4+{̏ñ&X\%9Nuߩ sMݛ_o?gϊ:عl&ԧH!k![y;ǎ4)|yw?:WT.}S=)n^}סk\2B֚o5czG"nN}4(4M.~?(s~%?$wuw瑙Wϗu;+9?>M=g['t[}><‚Y߻߻s%drMܫW=S4PA}g3cyOE}C36[}il̳4yzNݥN?1oӽ9϶ߙzl[Pk|4hdew.鿶jҶG4ճ"Pq7m+ndחs]Zn rWpW}{֚IwL5hw)ۆdzy=/_빫WV8[2@mKnrѕ?oO]9uBP3[Ve4kY9sm|[jܱ$&'GCZTedeo?߮ZpݽM!>"{ kk:]?Syn>q$7̉$2&xc:Wow&ׯٌPݟ*@fbBʷלU?t|?SJZ+lfE4VeXMO,{~fѕ֯S:K?0oG%p$7 `u?V[Vy\H;ܫЧO]^m[dc4*͝]:qM[Z|Ȕ˶ݤ_[P>K)q}%ʺ~yA9c{ haU*Yw}qN}KlC?SO{͹`w*ɵ+kK{_g-yٱIZD(lg-_sC4-n{Vy ȈR vcnVd']и^~[LmS)}p^j62f>ހ9˘%9pq[t|C(6 B֜!&ރ.mD/P,pw6ﻞK] YogѬ;)FrTK^[k]ߩN+ꎶ'{?mޛwRwmŷ*>3#d|wo~Sy?[|P}_yQ6ih <.m{ߙ^}ơ7<5`Y{qnm>ߕ_o<ʊOO,%PҴ:ơ5q>E*akyr}XK;$>(ԓK^ K_Ɇn7/GSHٷ\(Djsto_q}_84+Hmf2nyOt3oatS}e:˯Ծ2YDSP=4cy(-7JI7o^ds5}mf͖k n~g 'GR̿43#mkئ_~޾dJ߻iڔP/,hcŸv5zO- koVoO+zBqTe<ʖܟ+ֿkJ|Al|Tӊ_hۡ[ybSn-nw|6w?Roᖙ/xWU{'v}=XMړ}$+,N2y{BwWujiA|9ܒ!<$"|dTvJdTM5? |.FQ$uz#+ʰ7"G!u$2PJ~Fs?-5"[V[*O^745:Go6<2]Dvw|>N^ןBy:;ZhSP$}\֥gF#„.\Y̭nU'%CNңBLW!V=?ZC$3D#A-qoּ=mj?\\* *@8\^Zkwkߋ1vO[ r?3{s~EY(ΥO{֬/lF-),gLwDUU6"TN;=œnm.PGމ7m5iW"RkYͷHG7sPf񤸍4Mz ' 3Ѱ :J:pd)H'r~gm.c=(-jrhvzIqZNJ-f1c})_^#[]Jm_$Jl\r^w6gf|k~:?Zީ0mPfKHc.'$kQjw_3Og5RhbS4qH4ɾ6_ꘔ]?|7g|YJ UKFxgMo[o&&w]o{orZh괿=-46ef_s{ҕ$5M':WS.Βmi+:T_vS]tN3~ aWM3@"x#u۽6ǖu߇t.lGkU=ISg~}^_]^KGFK "Eh_O@7-mˋE6̑O,ffi>XI_DGگ|+^SMV]Fݴ MljWlѫjK]/?]O 4{Hmm&eZ6v'_^V'vmzkkqU{^?/>1;Q5+|=V "VkXEOYw/[d/>UW&)fpT>z+to}nx8'կUo/mbi!t8XEaΪD+~UQUN3-9r(_m~?&_=.ŮYi)ZLZC$snD$}ǃ8r=٭x\K9k.5hn6K\\~`|ͲHy{_o+ӌ)ޚӗsΠ}n?]OIeŜ׉tIhb24rZF4ooOdQ+ˡ9sYϺzIrk龛s<' ]_V [&rGeZEfFNeGU9BJjz}բj^ \؟iFKS k6;7ӬSvr߯+AA)8ez|B5;xYOHdo3oyXs?|U_%s(_.+MկFjceveVhٛxfeM6?k25Ӧ^ww좂NI<i&fhe]"_OJ}կץݾ>hkz`[YHcw"93rC9Ʒ˶O_3*^˗~鯑t|-}y%毦ޘB˶2G H"폱 _bqskNo}ݞ㮧h70Ovc:2@|mܭĈ_?Q:n3ՌT\b׮j^"9u(ޞw!E*۾WbʏorZ2O)K毦WT9.E; UrͮjW|6h3C& +1VrQ+U_ +Os8jq?wy={܇> =PŪ7a{Iᷖ=̲nY#wp0ꐒhǍ¤4vm^v]A.{etK#mG Y#Js7JkѥZV_7<*Swvi^zZT~RXnċrLeۚ6~DG+NM=l=L=ov{6.nWM\䄦_c}Ǎ_x oy<Ȁm}Ϡ+)ʩE߶r5RI>׹-ɨiZΑ}{C7R9$u]7eO߃sR;Ӟ}>[YJ1G;Wo]OH>%X n= <_lpozmj8OIjz]2BK )ޢ[+) G/u G%XxLltJR+vy*}6ϛ'scMž(O2+۰E|Bx篵xULJxjijoX[kmOƗ5uljVKY˫{eGf9#ؕNҚ)i3o'{~ _#5={Y:Niv47H0˿xv$qn4?6Qv߾JO?vB^~[nwƧېm z {~Q=pb03{onB9M/q?<%gu]-D\}XcFw߿J^VOW׾~]Jyt}''{ŭi^YL4}R=%^nVRq>]'ȗO*;d^WoOE{Q] t7ȷлn4+G?(T5%nR}??cgVӭ<[Ki/ME.|E go9VK~^5ltWS6kN)_ﵾ-cdVo * mU9&n ޟkz[˱kos]|?R/C%wqysY| 6ptd{!5\li^.#;;}6mntvյK e87DyqMv:bںv?1E5ji>o83$v|/޵QՌhFNnI/gnfIWؼM "u\N[dp?h׍R/B,n^&iIco:ys7\*)%(R}S8]w*nӯk3ô-z$4CV;ɼSMq.'8|2+;;:0%hӌw>w,w&]v_Vw~_Aaci%n ZO&O1[ʛ'޿zoRms]{o}~z~+ͫz_~|C{?|SS_M״åNt+xQaimY̷){g?ݼnU<}Z>.~fݵ8KVOO.t=NZ4m7L͜:~C$,6vC$H舟z%ST'4 rzl3QxbJ&td}>d̻ 3L:&b?w#}h؊kZz'\aTǐx&eذ rmmCzT]o[lyO&e=&oZmR#2Mu}l4k$s?>>Bvߏr<] Gh*%qJSݵսu&i!{f{q7}8(Jٮ=ގ3K޽]~_>º ƺ%t\K}2@60&Qѹ:UbS>^{Z׷f0Qp~)>4xX!ɤhdֱƚ;X|'Lyq<#<4| M{~Ѿ[h<q ]OQKm2?-k-WwD3o_}!Nj t)roӿOscº]jz-޹C^jwNC;&~]|#I-{}~{w:fbߴOn^(tO:mm3ž#|DZ^-wwhY^hFDy'M:UQYkztx8PuӶ(Cue@Mވ>N6io6[DZyöOIooFDaU6߭=jk%Q_Uw^=L0 ii|zvB\̓Yc[Zߒe! ْmGg3ƹ>'ե宩:4iUjk_ه_ͨMqjWzV铭ւ9.YtI4ȏ ,pG+-}-~vm} J2󎾗}}>xe|Mx+Cxs_ݟ6I-ck?UvFwOҷ~Uj*_o]NXb_ǧꗾm5m˶KhLoシPNF[s'T2۽yM߉ oxc[TvQ|K]yIM .o-vWN^^JJ~]?3HEM+y%^ߌi:p J;4k-mT[QxR?3M!ڣr)UKl{W5 Y. K"Ԯ[1l2QWSo=-5 pr 9 5'k N1[/t #MgcB6Emmao46l>d6VI*w!QWO}Γ95$]6[wf./ݍ&?<.;HOx*"r]^z|#z6[x57PL-ٛƒg,$:SHSvn]zGok"cO692uV"3O6ߟ|F֋ZS.ktxlc{i|ұ:EU-;?|I+uooxG5Mdޯ᣽ yf;Օfٷ]؏ ._NRmwO[̯oXQQq[Eouo յ륐CN~i#oId}qlv)PRCRisYoK.^,/iZw浹Fv4too?~?I ֔5G.XGI+|s >Au?U&҈Yܭ,*wt?n#JZo}3SwN架qmᴍukV̆Oe]knʱǴw}7/NRzA~M߽=wį+5i-ɡ=JmVhɎEge۫zz_E?e]xZ=FYgc?0Soy%J7S$Ng Y.o38R7}}ѵ^)x;I\L15,hhkdۤ$ڂksy7.{ &Hmχ]&[Ѭ+SVIu-n7[ml˗5źɶ}s[ 3^74 } ͅ[u˳޻w6lZ:Qq-z.i;OcӼJ}+hfVM :ߕkʼn#OFFJqG9v&4*mBk|3;2n++O}NTWvP?~D={vmΓU%$F <{1k^}ȝ? 6xWi9WS;c5ܻUyiF5S^7}NzZ}44qK}]3GIm| H+'߻:ؾgh_q9 Ŷ>zk ^q7s" ]gȟǙN_Z [c|[MxK)xt] .R#) ^9-,C׭`Cmſ{w'mݭs$p[Gؠb>a۟]-5u|׮ζhc{[ ~>MĬsh}p5g{:8ǷY7O';%waލ?HO]5g;x %_,y"mD'9d|ou=b6}[3yX}ZI8 i㳃mcitW-)[n۳~ŵM]C⇎4U4|C~"1'h--Tl$,۝~t5nަ_'_1xɻ]+= k_%;mB~o&96|#},=:w{<8+/mwQ~^~G1ZVEm`®E۪毌S7 š~ggᯇk:֡`-oIqw~ձ#W+_=zO_[ǰd+g=vobڝp̭mZCqM/̏< u e6κxngouog_ocVbxF ZehFFGh][ǍrF|=_V=mo>_ÿ|UY4sokp%cXB 7} 6w2vGǞ)u -'HB+$߻cgir?"M oZ /u4r_Ue;-/!.ﮛ^mة#8mڍ.hޢףׯuZ?uoKhӴ:Y2OͫcI:e7gÒ-֡u$s-w.3dm?~:y6J߫=R ۇ :,Ei{|S矈 V֚Sy1aq4ͷwlWcIE)ɻt >{Ț+#y"pCoU*ߟog ƿR.ImU>m8F3MnP dDΟ4m$[?woԹn׷kfEu5^Ao4e۷Ժ&?` CTM6]>9w_%6wq ˿VykQmӿnsҭ__CUYuXYK$Tn8^it+d&#>AΤ9}a=|OK{5t,zs[|%ԉ=KW+=?9m^xOk7 k}O/YT0Ķx۷~#1J/;o{uMm_Ӷ,x]-`aRb`\mWd瑧{̏ـpKSZo}F|:a BAӢe|E$ze-Wr'LG|gac/ⷲ-j[UY7O_c𷃾űhWP֧bKm>xi<=Y^KˈdylW6&֦&M^ۧ3 VS\hڵ3&x+:ouqi τOu Т姘ȉv_bgRw>gSl<]?VojlP]ArD۫3Fͻ ڍ:]{ѯh~zy:y5 f4 +k24ڭ撚D߱%z|_<.{K/ x~kᱴZhydK.Dn7~ܡ%6zKz_SɯT v}͏|WO-o-Ym+>=ϗw OΎ+cc<%gIFZ|ub#^x)¥%{os{\ ܗUӎn5B;!kR;yiS|_~;km5>g>CVjc!.hc{yY!&z縮;xFv OC+0nH<+N߭8u;A i:_{hm@ᶎDL+gM][#GiD7W"yMZ'-TN[nUVp pmo3*gc_n[ƑQ~$aHz*4枽?߽G 5xSuׅΝ8H"O"u$-2:]>61o"8drם|7>5l 7FSoVu]BQn$אܴ -4RUNR{?oFz/k^9Vi\ V*Yf ސ1D}Y.4}:hnjjm 1-/:GqƫyqGnWS1tǘ+8C0F7_־^g7}AUryzj.*۫G 9*awcP~sf ]lp\2{"˧_^=G1~zF{i_7:+TTrGI65\g^{O/+cio5ԅ]n w1_z׿Ϟ_֟Ro߹Ų"3_-:r{$7uS ռ)AZn7[L5 mWm2`wUӡk$mƙ4mzwk_9捃u=^Cg! }i2#CouJzP^}/3 jͩk~!.~ϠŨGi!Zoo|s$?̭gHM=Ƣ g=ƸBpzWo|7 .^ey16RkMK7e\۽zS9o7$,B[gp>m[֦^;9KE-xni56qϲ4LaxŏkUOEgUݴ$kk :+|w#DVSdfk1_s5"v &F `[y3!1djZDZ #m p3@ʳծDI.y?:&~׎k2z5}m}w[݋ .UEVXv~gc<ׯ~?;,x΢t?NӼœC\64mH_~czqߖ0ӝi&ۥÝx@OHp8Y伸r[v摝9zy~$i|/N<w~VZe>gvUd562Zۮ߻gHvoڿ)Pvjg~ z姉M`aGkXa?͗?3y_býƫtrYtLq-EݫOy$m?ܗ7wz弑H~f|dT#W%nk;_>)Y~:[i6f`VMwd|'H6)H[8\\'4孿ǘ~4˹6 Y rG?󼚥fk~69<ׯ˥挩u5חZYm*ºq[7zIK\mu+ a.G7_="ymuYjխ5{,lUue<͛YUVvߎΒM>ݷ~)~mǃ/SXO33ɎGݿ$yg~/e o?=[a4[ IgxSV6s6vb6MwevK׶[P*R;=o>>i|FMUukM?ZDuI%=Jiv*r4~TH#GxSQ{'$%ζz[Ğ 5Oo$faI6Fm?埙 W)F*zQIӵ;o}_ |RY.FGVxOF]O2 *.~EYhBIs(%n]̩\YK_ >>};YeMxxO-c$GcFv֌)s_޿/YsmZT<ZӵJghg]7[*.8d;.j}u*kG}__NOwkEԴ@O@ jiZLJ4͗yi7C%:5*>ƒ>#ٽҷ&k{l:Єռul󏆿?~6|^ni{>>/ӥK[Ren,&JCIo'!!T~OՇJ-+Tr^h:ΥM=KGk}p?:EHa$aUޏ}VRЬmv &YޅU5 ]XSnhbڌڝݝط YfVo7sr)roJ+kA>_/ ꢆ<+;Y_1_+k um:Ѧ-BKMMIMkx۬CǪ->]('eׯ=ou 2g__iiO{f&xU_J>JL0s[Ѳ,+K5MdgdGw.ߕ޿\V=vQc%Ŵ:^K [ۛ(UORʻc-̣.k.-V?(3°6;~s~}|⥽SPh\+6vlsD_\?t|Q1G%+~ v&1̰$Ld|k#a}C'3\&rrO}:~<~x'QдM?6V>/̾1y{~KI'M~469+w܉Ti_w4%}ĉq}wgͶizaicԚ%($ѻý1o"?ٝ'yԿ5;iV/3lI#8HYlѽ~nvGx:'t G>"m#M8@vV~~浿_;b굳G|eφusqvMXK t.#Fݳ咫n:?OjWW/Aֿ/+^iwO5Yfhmn.<ɭ?w%ztFImyꞯ0y} K߉Q_A0] &&r? xl $w2y0#R׹"}˹'W׼wc7Oi#kqkXUaHt5~s#璘T6"7Vˣ酣KϹ%?ÿhV~'ׯSr9 >tyGo";~ڭFt}l^fՔ쒿ky&|3/t]Zx xVr弹3| mM/>|ѩU5}UU%2Gg~,q+ xm IRp,Ge\Œc?.k҃_m4Wvm1ߋ~~j6cwg6\ZYmiKfT- gtO{@*1u7>ey9+Ju޽u~<~1}UE7a4B~ǜCDw>IVp4ݴͽPgx,ϨoƗ7?u;WK5#ih^|އf?#EH _}K t_kw.|Gw׺"MyX١gW̶o\*g3*~~?g}UC:ި u:4ӭcXa[lLp(sW\ ZeRIS/e<=h5JM.j|=2kвMg4ϽX>p!є__}iR-|_J?φ#$kxmNɢj^h:\ I41̐!r<؞YAЌ]/d;۱txW?{  ={ezI|V{y*1yv>,*^Oxz<ƕc$ry47y>I.m𻢷vlW믮RT}s{o$>9EgX&7eY$v[t&gȝFo{gO5 h WgEt-=}wm[|_vguq˚_={k~s,1xH3ڵp RGAW+I>שjzr$EyGfo.E~Ffm;Y Wv(-֟2K\;O&;;kXB 1H!տ/ߒo|?: }C=a u빌't dү%DQ'$`Hw~fZ$05Mks lA/]4IjOƉ ޏwoZuW 4yR QqZӕݤݟ(]{jJF?ydymIx˨XP,pd_VN$׿9ASm!0\0 @9nSW׿_K>fCo!ywo%ѡpO?ZƤiZNC-dX0>oo?qԋ]vmvw="KR)"o\7U_iTrw4֐.7/'}[ִݿVɔ[mjY嘉t0 /)ò~iZ19_/;sϵ 503/4wSH:a㝭}wM􀫬v%vo,F6Ӆooһ2cK^J~p2ͻֺ4rX(+`=[֞uO oZf{6}E]zPyݰ-hq".H*Kng߷nz5Vuec [tFRA;gOնof/ kuhء{KK_O ܷo'YXэfD{tڥe<~7MSyTך_ǖ;Ql?;Nư> %'I>n~Li='myLCQXd3ni@^~/3 3K+nvfۻ:+_]/Hi#Y`/}ϭI8iX7+)]ڿeV QG< |d3ImO/46쀴g݀6o#IK^fcpI<cHcD*4*$n4/X1"a+ZjPGtr3*?:rotP<?S|5Z851"ZeYnUwihXHB^_Q=E__!q5 SWRΙg7= [9Y΄`?wS2v}1:E5&Ru6K3\jKxmwt4HTՕ׮߅ɨ>FQd?`rw_y9N=sspi^{;]ɬo<N?t@^$[w*9g1wa }ֶmoS-uFr̫Ny֭FM`MkjӁgCoX],>oډFop"ׯEwM8 BٻrlOY9j}uWpYS,m wQe~W~?S6ZEB`*o Zo0.m<"#|?ϩXw䶺1n Q0M;NZ&>^_\I1Ww͵ x14m.1[[7PFLUSڮY5v؎HRfitɧMjy{w޹F:ϸy" 2 ?6geF3d~~e2}ZR/Mp#;H=F;ư49=R8}тG\m?e9E^۹ћzSֺ!I׷flzei.2N0뵙rWUurh4ar(c]AR{fvjw׼?eig9>bs֨۲:jm|6vjzM!LpwJ䓛_(!!K~GGX`=՝ G]KQK͐+wz펖66."8U"wH0r()KF\ǒ~̟jѵfovUhdm#Ge߾nƲIZgX\jY"i΂66CG*܈{# 4?Q."G|>]ܪ*C@ҼsPn%W(۷sɒn?N2Nw|qmww<[Q[ϖOYc2GU.{ܻثgWTG)< 'f+)6鯚FNֵk/ZOZr~~.#o0Xkie?{5"GTz;I 4g~k9mjB}nKOR.K?-?6ƍtD!n텦7h>e)e5Qo܍2_zyng?|G8~$So$~\+|fw[F.Qm--[,[|meh~bw|?5/+/CU7_|5/-hjא4V3FG {ͺOeˮב^涅xD|%O-a&=mfH4i7xztimnvb${ Luϓ$7{;ݺR2\HdҦ6gry@A*e~n;u}:kkoz/Q{8^CEpn-:g>KcZmqes^kFeWL#YqJM>aעml4 ;]A!A ;p~ö;_9ޭ+Og_[iԯiTOi6Z%.-oD$MG |[|W$'t/uɜ/59-^]24 +?>$eYdsY"s.?;̛>_&~D5;9 u߈Vu/ A$ڎyVwn̯qkygScomw{}Ilbɯxτ<>R6IowiZka#W|6ʛ?{Å}=-ghk7BA\&<؞%|W^[s"Mc}++B_o3r@#ZŤ)7cmCiBR֊~㶺L_z޵:Jvk=HUWTdy#O BUxוNHSRzj:\nJt\EuY/α=,ȣ[Y}WE<ГW喝 m8Pw_>]+OɛPmot& Be7?5|=jv}nwKeM[IY[[vo{9Djzδ&m Ue[Ďo+'C|zp،&"(۵M-591BjEehZmfh"K2<ѷb"lNbF-B޽X]?h>%?F jvs(i_lu[;~;a쥫Niu}?3U\k_u󆧨2sYLd[]RݶC#,8bo?+pJz;5{~'ZݢOyԾ&[P^rCW'_MB[W~k}:}版9Eǯ{_pze"tSIjn֯Y7viҽc)JRGZvW||k>J{pdcWf˫3+/ʬvNbq?˳w{ Or;FxchZ Eu{d'$SCII[Ȼ|c _7Q4{f}&3+FQ.u#o(*->Isn_eH~a>d>a,Zg{Wҳ _K{_}>բ Tq03+731uSVXIϿ{ϕ~=>Oc+2jڍgwtFU~~gJ~*>>NŦC4atElvz~m?ezi>&99?wMz~\t+8R)ٻd]~qZSVߺ{Tm;i6,Ѵo/ [g4d11{e^~ξ;XiPnoϽ4uM_/TPKPla~Hۖg/N+KӜ+_޶_y5GK2N9,UϝWr<۷>aRDW/+Bϊ~xZ ,Yf1G̑m;>Wy>zퟳkvӱu2ΚvQfݶiֺUXm p*~G$]4~K*y3|¤VVXťƸɿzN176?7k\ʯ4f]>zmmN9;o)zo:OTƌ+|U}bJ^fZ]v}~lu8Gt﮽Kz["K7goG]ˎk/K}s{{NS)F ;+o+yyX[aWV{}ݟ? Xѭ5Iw5ɲU}x,3+}$Y?bpT.[_m+>G ҡeThO2V.{|g}b0=%uj5_sԡ{; ||ZLˤYdNo3‹&'W̗wx~M}g%y{H_۵}lzlAœ,t=OOk;߄狼3]Oix|Dɨ-zt۳7am]|:{1':j\o˽# \ڕ?KŖ6g[_iR6jQsE/l ʺo>j8ҕH?;9Qݻuko|iK=n ee6VT2[;]W!7_ 씹_OiֿYHFm Xs`}o3ybGe_7gv'EK; Mkn]Ɖo-"i`HgU]#+6Ϻ#o}ש%vvu} qiQl-<z%䑳/ڤd$m&nP˫{9>{_s G!P;_[/^3T676ܳA"ko$;߮`)ݯ-/P4]4۳1w?Śwu;o=s3|3ku}iqY­˙30?دR0\onj6ỏxOK]GDv634ۢ"e|lE^KgwV_3ٌU=?O75:Ů[j23E.co6FFG]1'#)r'sV)o{濅|1k(WO5(Z%E;ei./#Wifo&?ݓ9M.?}q-妯'Ѿ5$sZ[X PE3yme6"}<3֪5Z͵ijpf Ti}_+{īS_?YffNuoH}Ƹ&}y+,8_EӅHߓOkgxᰎKONU{鮏ג>Gl.PY2SF|G2ʯ;=~Wrf:|Y&n/ᾁul4;U]m?u[;&Hk{-nyG#G3K;F6gFKj*ыT?^ڬzV0ޙ7$6d7a!?i9#b~uggMKm{nqԃRnכ{o#< ~xV-u{H4]Ɵ ;KY8?~bѵ=V4/&Emm4?ꤏEJ%5)4v^n#^F4޽|k?>|#)D7ljm|EKj:.]5 ,VFfя+T$O,>[ *N]>WwN;?T3k]+jW6o.=uk$i}y3ݖɿ_Y݆:֩҃m?O~*~ ۯXxKz6,'Rt뢗N7R/YVh_k2j򛶲^]I񙼧[A+I߼z??:_ψZֹ)<9&m 훫cR;k/t>N^L]YhʊӎO{\NJd=OCΓRxQZBƚ^X9~ե-i!kyk.o$2G;+`w/wWu-|Ln_E}|&Ľv}_WF$Δ7έq4z~[8hw#g*rN9T7׽O3УB/^|V7ڿ/u?OuW˒+m5ս~bC0{k6mHc4*w5~{ bwv$hko-5ybYռM4,gJI>p|һ}ߟ~tn?^=;Nfxv5}Ւ^&mZ4k5~(fQJя[o_3͟/?h{r84 l,?#յ)"ndt\Ʉ&=\ {ӝ5}ztٻVr-߯߹v=?KKF|EFKI̓wڃL.d]i9<ߝ+ҝxT߸9=޵m]tzG.l4]Iqj|cvE3>|G>į3_;&<'yNmG}N /u%'Uff mܝvݽӤOOKfuJVϦ~>)n-nc&OH~GG7tkRчnVR[M/kτ4M:x~l_3*w7۪?J%SwF>D^Z j=慄:tiOXs"6Y7C,%(迻߿%=t˯sEkzU{A#pMcke1|dI7BK_]|>=oT|:\^,鬺7=HW];]LL9>}Fo׮ Yk_|wu;-eot ,!~̞bd_1J.1}=~ӺO_Y5-3Pf* Ha LpI|~y4T%w:T%S/:#IghvCo ɽm#q䯡%6˽؊_'׉u3EiK{+~W4]sDjgZp]5_K_sW|^f-Ym&60.fM߿/uԣ7*Ҽ]'tў ASӴ xw:sżשϨ\:H86Joo{29Ϊxuխ.uge{}7Sj49uū>xf{/Oy]|b7j:F,ZϋO𶠷viudk},r&Dw]~B23+Omf.Eݞ<ZEkHqO\?E_#>Nm*?kl13/wk Qǩ6ݘ?.9̑cgnW*~{f[7yxSaxti.ur%n=%wӊ>,-Eo Z[f{na5n |L,'oxWSw||Θӌ]빻euqlb?}OC,nww@v8hߙ/'9 `7d滩Fڽ;;ZWR}Wn1)ovݿ"ZA52oh*Cs^ ,ėWSݽ{Okܾ}_7564\]>ԋ <ˋYm*ߕ|g\}ǮaNo*]NSzKP[İ:r'r?K9%IKo[WߩYx?GKMnY(uE[Y%?-٤6?%}?_1{hW#|y;$GRťhbl;*Jz1!齟{2M>w,墸y.nf_#ƻ|)ֽ*T]ٌw͛~emzs{V'Z ,e26/͆鷷?T7umYKoX3%G&m04}b+I'ޮV~M뿙÷]?6kZLw顭v]4gLwXZZ}sjͩAt.5'բ9.7m3nˢy^;ܯc~";𖥫~ ֬;cA+:c.klؽ~O*;ϷУ˵,6<񍟊l+ / >{ZZ߈VγTo<"rө sN_W'Az{L=}<^k70j):2jA2=o n+M~.Ml^-T,W[l5}H]H"|Kq {+=_|_ua:oosDžVon}j;(llyݵ:5r-ϮMGwܪ(C|$-uvy^^vG<zim=穅I[??-k)VI0nCi$?zGo؉F^wߧ9G亴%&0߹=[?`ľ{5RNcQin%攏W7]4cɫVo#->[^4fT_gWסB'}8TM5_yޣKxDXᾺmhtudag_‹GT~߽}d:߄ԭOR.a֦5d=tn7 y5:i`9OAVmI.[AΪ[nܻ>Mξ32ԯ9ʣM_燐ƒMN/~/LڃOy 2U|bj{v_=/?;i.]_o_5^xO÷"ܥ\ $q3nBl7Jw|Tt'ӬgQ9<\\S[g8l))9':Qu¨hopf{1>8i]۸^{a@v]Ƶo_>֤r+o%U;e6ȚtmIyy.*yp?#vbvso =/YY^jQZjߛK.H]'>7m(0ܯqN$޻o#H 52A,hk?2Ȱͺhd>t鲴Q6kM<ڳ]eTz}S}"mM`.H$Q+mn?U?S&*'le6/vX;_*Uk?-i׿]_S6W3ƫFAvol\fSk-[n{\<]wI?*rkmzkG=i'ldWB{ z rj*u7g>p?k^ӠҠH7"7$!މ gӧԧTUI*vNELm 4m:,3ZG_Aqkڿ; lK')~L>jW:s̉l i&VfYo/Vb}9~f182kZ r31$vżYOϛ>_̕~#n]g^\A=ʩ5\#4h~#sQ /_2[tWu}wߩi( w~ut;K;(g|qߟuޒ[+3o!</ |mպ?e=ίLiF߼fŒI$XvK'(ۻwu:(ӺgxBk/kW5+m5/;ij2Zh-4l/Emr43,dNWg{~ΈQIY[/|eiy5jj^"G-Bʷi7lm3C%[?K_> IsR.2^z:+! Ox+¶?ԗ)ke<>?g&ii*k5f6|Rm>?WPSw<3 ?Ļ?i> pjGe[B3nWkIz񱙍JMO^z1`FNk۷}y-:`7/x,:|J<(,]\iTMZSMmmuMM|m|\k(c=n0GY23:燽W+n_vF8[mon5uI][,mXYw~^w_nt:{^8گai=7.o#.rQ䮚]~f">V?_D_xNѾ|/Kl5cnm,<ȣwyfDy~at+a*X`a'&T},}m3W*eowj|W#H|im#P\τ<+c5|6&M6Ե[s317UV]TN2vWsIh}6UC}ɴOgeޙhztCE7gVϵ_jV>w/}vB ?<ѫQPEm/qTJ)M|6AYYiZ3Ϩj7ѫ7~9Kkgˎi+˸beN69}W׳f3{9m[5m>tx<]/Io?%n4s7K'`Móe|n儜*ӕٻ[KVLlT5K߾_-=sŗ4Ҧ[G%P,llN٤At!G~fU5ߥϩOtETY>a̪~W9ɻM>{)7緫3okJX*!#m/gMC٭ϯ5m-v6:U+|b~e/ ۚ>y.[Z<)ޏ iڟ<#LADͩgJ,bt^J3Jux¾6Z +:OM©{tdDS*R{nYG;ohJPg}Z8i%4+$}=4@⼨sկ"Zk]z6ѵ jYQ\>h*ڼpZX慣oݵtTk˺ԭo:G,q-2;K3?hgo3oXE]Sx+d׵9&0hMY_3yO9 ]QR릻]L-xgڴdmg-WKUV#/TI_'o߼O[jFVW]FtܻZY67Eߵw|g8Y_ ˿̝[Ʋ_Fo$QM&\lڻZ9nJ$|]35nNJuhmYdWI$q69ޟS^"z[zC-UO}jt+)K#ݺO6/{O/g]oYjzF9C2=ɷ+mV?(_ctVEkw׍5߱ڍJ>ufvK\dcΓ\k.!1GZM5z/bޡ*}K&BI ܫsΪ1R\|C̋p?|wnV?~z q}{۫IYAjj.OƳwZ[;%OQ7 w"%7.ʍ2Z3:};c?.y%kjiyz6&sI{ۿ|_wUnxL6rLM̞d>'8.S}& ᇋp*knǵxuwM~|cf[+Ó[A.̸cEo~s~l^4m 'yUi8= & Z6QZB6o/XZHnM/_/~!y5/rψ)M]}Kbr!~,q6v4.SrIX5}oS}~}mi ӈVtѻ*O3 MQ,/nG& Ue̵f;>ߓ_;.ȉF*M-}Ɣ+s:-ޝ-ΛisK,0Ḭ̄b V`Vm.lMKٳM#fKgnlM>OodL6~{}_ꚞ]XXK;)ڷl+I|}ZN)7u kSxPHbUK43i%mɵd0;II4;j׼^kWwgrp̗[*4ҳy!]=6~]a4;MӴ:' U?amۣ_L V_~9=GzzG Ȑe̎Ұݻv摝w{Rߏ :Ɠm5+[ Z`BȮ~L\_ֽL~|5~H1W9+Ԓu~ Vjc45;x |]e\F%n!c ~-GI?_>;薟go xƏ+_X ɩ3vm$qqKݤ~ϳ 3wIF4ԝů}3rT~t׹=oh3xoz'R &omwr ?6oo.G1tz*]Xsom_빖Y{|ϴi^"<Յ6WikISLcynW|7_0"~_Ɨ5:Vmwfmo;CG' L?7ɾE|{Wu`ܪ֚߮i5ݟ͹fYwH(>w;8Kqy;(dr9ȭ$L2ݿ]BAIߣFR9CVbG&6Uo}Dg(]]|{ˤI!ۓ|z[;oͦR-.]\TJVO]S:'_d'mskp\krjgii33Lj&mfy0o>;i-:_OοGocj iiZ1OV;EFۡIU6֔%'[~ǬW4 ZfnM*Z f?\6MT~k#kB V+'atDOΓz$д/kk{? p]ՎlǷΎՙ9]wo?uVo}❗M{z2FI Kn%mmrh9}*_5;;巎?lIM|&V~O`9 ZZtX4{ԧٷյ΍ȞZ!ن Mi$6Lk?>'nBӵmk7 1Fx#VZO& KoO${~/ϓo K7>Q{={{#j77 !c&DM$%t}ߛ*(].j_4OYE.Ѿjq~͙WIB5fBOF#%7h.=/ Z}g/O N.K.WXyqxEr+ &f7 :uKgko} ;1@ĖnmBHV)#Vխa֯r:?պ=pͼeYS%&oMl[L E.w pzĚ-aF63,zڃlyA|\鷗$c8[Ά2M [J\B-wy-g]94{n]LM)$KwoC0/Dmφ[]j\p;2htշ<43l<MwOS^tǞqn{7O:iZ[FBmԓG e |xc*Sk#Y~?;Gן> PubH=\|PŶ̺I|.o'xf]*&:Nw7ISMo]~>{U]ǨX7B&ik2“*<3l?$^IIo{973g|K|<ՆJZ7rOkGPiVޒoxWZyhO߶]o}|D O Zevok2HmWk;I ~y+HH#~\t}4LS|N.<~𦥦TU|䴎݌3]Imy8MJ{U= ?!>Դc&V4K5y{˸&*W|ӥ5۷|-x~Ω^M/Υo OFNyʻX#\5[o_u/u~cvso&}xcچ>__i7RMq} i47P[ؤ6v>)Uv~Kzw .o|\  G-ZMS6gf%YBϧgϧ]A$→>ioN_c_ Ŀ <|Y?<54ϭh2+-<ߞdޜcRZ}ݷV^9Un46=9o4f8 0ǮϑW{wk<žh^MOO%!_uUw5߯N?O3 Dm<@#p;?jmouoNnaECi:Lo/+'pOCc>΁B&%^&݅VGnT#r\2%K}ʲ7?Nţ,Q@XIn|3^+ vWQ$#J%ys̉|_ctVRq/Ϋ]痯UI9+T}OޚeNW^OE;QdS]Oꪻ_u{[[QEo6w`6zcw1[}mܲ]̒ǡ>-Ÿԁ9oL~,y;c}v).P11w_CU|Ƚ ̑] $LTS"u+$GX_S}ugʒ!/ROb%2i:BoG'er.aYRD*y=?hU,+!Ȼ <Ysd~>eW<^T‹#ct_'w_~ hf."Bo~o/+|ΊO- HV1n~X˿q浝JXh`1դ__6ʩOO驞~h{+{y˼ c5>r&Qgscr-6"r [-\/ic%8Y$F#m̿O2>~z))onmu66<ѷnQ*ߣ~FoGtkWR:L E'Ug~\)F=?{~n;\b>ZG'^wQo]=؄D@ws2D^I>U隙gj𧄼1iv2ۭJ'Yb[+m$>Rx/ 5.^;w]?e\_z6p_ګ1Z |WI -q3/;S>)){\M;[f^1 K&fC]]@,ɱO/JOΨqZ}O"H,n/uر܅/#7f[r=?3:>۝^Ho.a[-#Z vߙ}~^* iY}?[xw*)#;-s~KӣӢZœǻ2k9TR#ޗou'QtO35WYQْ&X2GU[w_~NW3m cpTy'lmrV+聦;}$ik͕x?2=kׯcX+NKb:LAm[BS ?2ddfubRYJ-n빷iw3Yfyz-wdtkHҾɿ=OM>ƿ{9Eg?,׏|cJۧÞ_z\i^\k-܃uYmi|I3ťJiG'nOץu%m$wN:hط X-0iIo@1ۺ&3;?Tϖ=u:#yZn{NfemΕ?ׅ[yuݵvIFs}yuecB:;Q2v) ~ޝ9X=Yttk\-dP,Uˈy2\ng2)7 44ӴFᬒnefUQY>:c97/ݿϿ\c~}i-7w 4I͵haoM^؛7u5iZNOR lWFxԾָwHmW]Pzzo I: 5ܻK69zJ6'gm?H"@s3w"͍.rea4YB JH߷ݚ6tCS΂+P0 7栙Jϡ]A{ݻN@HnwZuק߿s4ywa_1Tg=~asߞ᭯_[[C/'neC >`tۻ._yاG(۹$XT[}J#<<ʻ 7tb3$+[p:1-+M.\ I!/<.8V|ٽ>~7F.<3M=^Ѯ̵RwOHnyUFV?롓]RKotE_ʎWOAݱ*%WKA%YI-*Z7Ty;֒=5fT3=xנ Z\<. #akh==7Iw-sޱg~.<"f-V,%ٻ?C1NK^oȇlwnMtmSMt4oג*C$m~o=}[AA9?y.giO+p6z,^ywiIU[۱p>f=cg۲~J8GF׺@gSpΗ:HHVGޟsG$[V5jXiΝ秊T֟o=_xfm _{%-ˍmZ=7ߴVR/z 5D8I[_`Z" 6]kA)/z4rCC<)tkQyWdy] *FP}wտ[um.Ku{_]ٟ;(,t,n}UFnsNo(_}NJU9m̎%k7nh6'?s8'.ekשFgX?o`kI|_V:MvW77nLw+n>}qWay5k+_K_0Sz=Y]o}":iR,$mw'&f8J{߷K{Xlh8>LVݵ-_ӭ4DZU&ՙ]ܑlDYGfnKM/Ӷ4}rJ}e伯VjzwC>͵7$kC".R>?j7um-fMr!ͻϿOJPN>ΜuvJjJwmmo?p&mntíi)eo\$c;,[|"i6%2bR}Gw7o_ai[\O6VE1Tf2.gXJ8oo?BRmx7|}}Zo/ C?,lUmHcEl;>*ϋg%~rbJg- 5?I}x{d7޲H餆Gk27tR|i`[Xh^+ßTfZIe+mGw`|9д}^: .tOڡ:r/ٮ/]dޟ'Ϸˍ"?~mN4k%=z9._uo>ŷwl-I]i>F:+@wƆ<&ǚX丸ʌ*:~kצɞ$WC{gwO_x_=7r׫VMȻ}z5J97_S4^XRoݺOӷ=^<5Su?LkOEФH|,- wI-P6oę"r|ϕ;]sq]E ^7ӷK[LHGG=jI5)Y.[_|?a-N0mm{nzkNt}SoݺW{{)4F1ޫ%7I[3gOއ6=xYjjrKotw``ni.wݯ>(ڍX=ͻxj1mMɳz1v9*ʗ' Rimo?_0qI]\ztOoNۄw ,vupdIԩWo5ъN]̻(t_Kmx+gIu?g+IM4h6ϝx2J3V_/?שc3z^]9{on[w[J@t׶|U$l۞vlB2-$"}meo\Y*,^\j3"|p:԰͹Z^/_ϩB2+::5%V[\^:}2GFeM̞fپGxg9YRt%uVEK,wKG'=48^<' U%t!Nm-T$Nw#NLj 8Gʈ}4ćcmu1uU=ϧ?ϱѠ9l6څfؒUݺ5XomoM>d՞sIcočUWK2J+~f8OWm7& 6.B[3Iͻb|T*7986^#ΆJo[s+-{? kbUx<;֖W:egVk{ySvٕ>G6 YTF36wo=OpRN5wWZ|>ύ|!MQ.u?V6wO;fwďW䙔q9Z}zi?F |i=2V];τ{/Kyږd )i{pc̳tUiɓ2CHcgN>Zw]~_ӫ(OݿMOO>PԵYu ӵMgOo-ռy]yg/t&z6nTN?|Tgυt_k1I7²,K@Gc4)'Ώ=PRQtv?|&N5RO^u|K.jz^ٵK.SjoӚ̭iR;d)̑Vyia98zi2*Zv:7lԬ!ѵ y[_[Ѷo6>?W Ѝe)iϳNXVݻaiw=FIeFm݈ו*|罒Zt;imw}Ki6^#5 #zFj$kXaxy$y=75=.F%KK篛M|,4VWYƆE#q$1y&kjWVoLB42Ik;;ÝiS]/Zſ i/uY|t걼fr)cܬ F"q*v_e+]|YNIνNUt~r4oFƝoſi%.|w3iCDeˆIUZC{Z~~E*zoJ_ i,àxox?V}7o{5OyKϼLV'$~=0P\=|>%Ꮘ~#HdKeĻ%GƛɣHMޔ #(rw~ k-^m=k h֗ZciG} wФ &6:h<5 oOۿ,:޷G?n{[[MAU0\_~dˏ9p4,?o_?$ץ=?+mcNɾ"=G[xnFڳ^OI"췆i#ιcO?gQI|)ߢw~$#e{9 C}[UW|LvXmZλۿlHDW(;߫1_O[-ŭIe.ws{x7 q7$>ts|'ܮjg8Ni%ų|_Oi=;tB]u5X⺖H=:8H dv#Xn[G _u;;FXG{9ٕ㸷x|wDF?3s}ou׷_Tm%֑ۿ&g,^EkZCpZ41K$eo.k?.ݽ6~G +s-_]˨\]]3*HE䙾έ#3_.C̾V8=o_fݺ]i>&+7QI3IyFÝW9r$9mzrhp]#Kep2[}x\yzv JV{w9?<)M}Kk|ATiKiϙwε>w2)T5I6or؇ta+]K+~[-}>w{>J_;CB.fOi+u$nۖ8mn˻o7$r&][V7qמ~g,e\MOgF?w[>> ㏉څY;]G=4he7}mg_/_3X:T)•;Z~͞hwrʎJWw+{o6}㭷o _YXh=ri3[57fafHq$8i~ 7}]R}^ vZ&xƾ&?F*-9#ҼcrmNAf$kw\ٶ;h߳o}ω*kzwC LþlZ~fXHsc3oy)TQ-9oϯ j<lJVhc؛w)5{z1_,_p:y;t wv3zvoG#u? &͌W:uڛ}RŒEf]WcM?').○ƼK/1]4 ߇Kcfv|D;}Q]7^%)[M~Y$~O[Hk[ݿM o4ywkuҳ]o>7z-1mFƱcܫ?^~JBZoRm7ȒfeTo=eك&n$լtG{fT%4L¿.qn.sOvֱD dt6UvV#7m5!f~SX=g;<:|i%ϗ崷OV?̈K3|=kIws"Kkf>l߼\s3{t.[:i7%2nWEC'wgTGI$]Toē50 XOϚW^'Sߋ}la%v\ZE'tf.f^Oml!=""}v8}uG-u~8Doݬ]%T꿮ϊI}.R,Y~="w#\0iG̿/h me,/id/}In숦~H[ ۖ,n0_^=iNUkksE=~?"Mg·<"VDY"Cjfei%k#]]jI/twCfeech،7H4H#>QV>kIW}wY}JwOt];F4-6bҭpf;ht?~k^~]Z+|w6`T/\b6Fu Y;7ogU9=?%i/>XW3MoIFٕ]oŶ9$o'o/z&oޛ_|x7߈'k<#Hz|r31q"=;\own/b]8[jڿokjPKYFGkZGgmI", 2Wnm\ves?Ḇ)Udsmz짅o_o3)UG:noӘJ@{R?'q?_k :~n KJ'sq~o_^{8ZI)nG ܱvfY&fwݱ{sMAMۧ_Cռmbtub[]g -]b=VἳGOQ-/FcvAt_Ը=m 趖AlLGc4y,ϵxv'ȉ *+;$:^F-NP"F4W_s|Ǿ}_T~>h^m]F/jsvKwӳ~eۛX]OwĔA%$)KO7U%{{5#'XQ n1mҝ7-}Tek8oݢnXQg(Cϱewu};6P,6Qa]oվe³j߯vvڿ ,$FC]{sְu_5˵iENI>?;lOIuce=M;K䷚[rGmoI4?ɳTJG:|ͯ{_%_??e xWƃH&3Bյ|m 54O~=u |-/tBjtV6w[n_~M'7"s]*ܲ.sՅX)5[/AFNrR7[_7⯳}NVE^NOkwPw~{'WE]3Mŗ5y" NO,[;[$_0&1Ȓ~hB\ӄ'o];+_&iχ&|X@zԷo]9ܛ6Ms3D^5(F٦3K{x5^GZU/;IdmR!&O3|i4S<ڡ/7 BYtR*>cM¾dž6}+M1 G]|3;1+֩g<iSMZB~^/AkKoZؼfֶ$k$2uM>r[=sSJkOmW_<fy<%c5ϕ;[ƱOշ7a]K4i;^x5ZNЯ@K_m̋#cO0̩.ϣkQg;M:RJ=]߯_ZÍ/LG;Io6Ym{דS*u'y6_&t0P}W}siKag+lewWVe;K~_{*m/zeViE24qv/7g~Sr_j>z9g.rC7ۇʣw5Y)KK"۾tvMd9Y, 9|8Uf[ܟsBOgd^8y5 w6m]jK]Ou).wE~D㮉T][๷$_֩ij+<\][o1VUogGcn:ZX>AoYhP[= u5IF> hf>gg ZG˯o RNޯ>pOGem_AyC75jnygk-^%:o_c|O%>*x14;qo}>W7mR=7ks*ͿwO9|?E]Թnx⭧;fPҵҵOuov37~y!ވG7 Nm 2?_|EօQ\YȲj lQ~6~v꛿+Z_{D&]>{_f~=LDnjveV5i(᥿ 8 5'릻?7`:46+a)KmmU>M~Uie{'tɨ= tk76owօNR駟VK^9WpFPϱ8~k_UkO3WR)_KvʱRK+]L?V=ۙOǡN/O˯OTS;SMzMYVe#80cBmd5>J\Ǔ|I^oX^j[li4$lmc|"CI$,U9?_oI]۹;ϥ ɢmZd3\y4S"Cˤ;OIMZ?/~gKu,XTuMd]~6od26rF㉚RY Y uOUoϭ#jML$IQbl9ۍۛlW@(w #nK*@b.ݷgS4/i/d$rTʫXϚ WLL,Hz(1?W +"RݝWw8um[3)5溮_?i_KOʷot7DwݔcmAWɤߵM$6vۜmϿum'#Ρu+^_%W3~x Ş4d'5Ox-g3k&k}{}>ie|r&Ue}4RN*~'KyשT(2_ KwOet=:ijk@FUy~U7|g?"W^% k8EZ2빽?}i[_ qi%~t$mdw̭AymIi:峟85ߒvU8UGIeoGgBo=' YzdYQOZZdlwlwotX%vmwnxJK :燎i &MNNwI$~i}O|/7K}gWڏ>rI:j,ί6G寗٭YEEW_֧TjBᷧsܼaKn aA)aXe7(c]_z}YK2^mxwR}2EP݆>VW$Wu2nSu5%n޷W~;m.'Nd_ȕ?]sk>G7ڷ;]kc[oSo֔kmc)]t6Ceݙ*0r7= [Je3{<;t̙Jwuu$Ƕ{)rkZKBg NxQyqr+w︧w7&嬟)oːze~LmMl$ sg`%Sݷm*ToΖn希A/en I=l~)d0v'sː ڏauYݕ9ٗnbۑm:^ ;刘 dr+n͍TԋoMߡ3jޖL-/Zѵ޶]ojzzjn[} EX@rmp+}gmx\%',^!-[{S.GfڿLyc)cZ76IY;AFC1 norv|M,1yyk4/./)U;VF 1yv'ryj<-5exG/O YjfwN z߼Y-2&d׫gkr><1kn%6hmixy;q"QzGO#J?s_^j6t b4O!dFWz}g[%~K31g五^yǝ,lZ}4=U$ݾihżGmhێٷ>};e=]{7hەz?y)F$.u+'^BniFhQTM-{(nm}~]??xWtֶ~&<QG3y뛩#]'-~?}!Pk{٣ww |?v0x S <5u&*3BqpJ9y/7:_g|5(Fj7]A|QxYʹ|1nnڲ4MQ6<6yXBu0t۹g']h χڂj1n/]k_k,2H$}7Щ^NQW[~G:ݢ25؊W Qߎ>#_ke%MӴCGm#߽>LI߮獥R=,h5f_]m&oo|tYU.oY]h~Wo 9 Xh|6˧6u'q3OIQVV_kO?f/{Hᯈpi~uw4rɹ7pӛZ^ݗά=rw?O5k^o<$jV-닏\H[_2-d7Z4ZsZ׺}N:x_BӼ-趾&bBk2h|>V?7M|um4>g~wߡ>~)׌|D$ B?Ht}mp\GgЄcA[;GKoUP ~ݙ41 kʌXnC篋]sIoZsR|W׿篌gny_7S7e hwI340>Di7Z% -JO{IMtt[/Cy|2Cgntf&۽fG#XHyWj#/(ҵvf| ڤi[E3InS^uJVAwOioZ]D^"5iHmdrC$s#hĎgZ\m}~]xƥ8\h Kiz&is^izj+efF\]*|;w_?5ׄ)jIse(Ri!O2;;y+#Bc׵WNVN^SS tXn4Z7i>OvX%z>st_WzZjv:{!{$ V+,dT6ݽB:M#n}+Vn/&MnPꬾdIsa=dqɱם^7q?o#83iв,ʿͺ4}[|qq sI%cdzZ#[p6-M<+R&0iҏ&du¶|p4w@ʃ"fxXٓ_[&]j֡#ܴYsv~4ΊRK{e#p/6W>cCX%+r^>_} #~/RSL=5Jܞ{7F>+qpz7jF/RqhNv\߼_׏Ԫ6bxh4OTQY},߻g ?iQߦW'g.ʶϑ*ReՕưnɲj7R. sv,$:R Ț䗌3;,~#y2~y ʏ^zzSAMY w26]n?3'}mZu? @؇sJg-X9ߏ9<:{"sNpvĆ7Ͽ.wV Vu#Gլo$69>eY[cI2KUOs9ɷM}rOI&6v[w;K#nfuWew.FO,K4UnO_֟,0:eUWjĄT<+{Cmnjqi=~G.X*5Ri XΥ$޽w {f+.0b-nX" A<_+H'{oRbI~VEu To}s?] [k{1̒F&7ݩU/6YJ)l7ӿS#ijjwI, -䕳<ɾm&o&ZZ]MVOҡўUKXe{I*ˎH_~t뱄C_Y6ӇH Yfܩ[st5%z;u ܵXuK|M ќoP҉Cȧ%-z)5ķSSV4{?OirI2x|lؘ*k~dM;tS0ǍoxۣGw'L%%[;{} 4q>dqHNq5~o߹Q|6}y{rQr8p*o5't(0wk+H+9_.mDҼ>b|v.kUmw빏$~+㺔ʯF%iw֥]Ò]ecL.m_o%͍;Q/cyj.r*ol|KVf`m bG6{y$zy//*.OO1=-2΍,E"#m$ەYmj#GHg~sJ]V퍦 *Ud~Q'Vq[*v~Mͻ| { -RKq/}n?TTV}v|7n_ΎPu>Xk^WkϱWNinwQ/"fs{{4:|ZkF4qlݒI3^|7ӦzⒺ_?.k[]2ShЫh[)g6$A-丶ݕSM6mWb8aӯ/hVsmYݵ(^54&y4Xtn5(Hn7ıb .'~gY8{n}7׷Lﭿ :kKGeb\0yf_[+}I-w0mAL1`Qug8Sxz |P<m99W; jc2)+|RdKh94\˷smϸ^/"sibf8dEvf Ef۹{ߥ}4>`b0;B)S[ru5%2 SۢYdf?i{O/"CQGn0[ǖwp)_I^ Jk #}c>oӚ{/4"1 \ Hy'YwVoAJIwrZ aw3tFz/[e)7俭zI7 *eO{~?9$W~3D1,[b폥+ E%[so9<(E)v[wөGk7]̨;j?^w]q:yQ_{&އ 2vIy:`mF'QVhUIZ6iZ'uey^M: //'GJfzzS$#vAvz4>0~=kE}^[@pZ*ko叙I˷*Z7mXUt{MJ W5{|v0%ʀ|ͧW.=\VE`>yO@8_NGHn-ud'7t)`s -?O0ؙ$fO7T:3swOxNOMu-u.ZB?9.[~Hy'Rz{_2.o^}+\}Ntwva<~h!#OoJ6u{-t׍X./n5͜l7Ȳ#l7I]QWfVm>kjmkyrܻG5|˟3zyΈVu);[zIAuxTE;K/Jv&_.m4N*%]A9|69kooo[ON|=y&c;č۶ 3nfϑ8nusMSzdXdŽF-vf[~^͛w'XlZ76~ndpmp]_/?":7omR|AkZ<)0SVH[oѫWwȉ/;Fufж+k|K4+oMzI[gK4.cXmdV7R,n|cq$dދ_=Þ4|9aaF$gyWr3d!B>ϗsw͸ʗ7UXήZ}~H eR"69mt)unΪ楕ebr(y9HOlt8TRV醴}cGKދ~}?g{XMg9s77y^ yׁepkC\ᄋ=2iX-=N5o-<=iYEnZ_c_DftO:O}6:8.zױx5_ K+RҤn3Cͅ?5`q+Jk[wy}ic0tn0[?xEkqƭb2gO3jƳ,qyWZ/QA[X{Zamg՞ϋ|Skv iݬwv+{_vmg<|b4%.guulzXV6v׿wKuq1ϭ6<;Ȓf/ysB9ot ||oƧC |N^}^ܾ%ƜΡjvYy$̍mD߻蕜^~,.%rf-I-fm_IR1_;\G3|LmޏuNI]j迮M_0<]xo4IẊM/9tc;ٷ2kx&׻&pb1Q./NSwQ[1Brz'5M[teO6_׺xTV^m?Nż6wrɏ푲MHmGMa F1Uc:nMStuvŹE8ӆn߫MuG|9|Km_m^M%p}3y3LEddy}߼؟A^ 8zj{cFjjN7Zz}Y j~%Jt{YiT#[k%eýy$_u*+ߪmvWSݮѥ]#'m.WVJNXfYtf -y&If?09:Q Z]|M}L=F k}MZ-IAnPECm'< yk!;O/aĥdIy wxU_sz /ڤyV2 +F4mm[iMZǩl :o߱!Z7v%-ݿ͚bܡ4 W|iw^!ߏ-5]wɨxoKҤд=Z/H䷒EKc2}Λt?ӊբQ}ozgNWծw˞.&hH=.dr+}=ח'4w_hztS׃]c 5p~w}ekY~7n[[ҥׯ8-@%hojƿ24ISmw'yKu}xx%)so4~}4[td؛{kAFI3|7i&o%5oOw |+-|{fϴܼϷ~^Ĺ; mU0aVR_Zz9W$FIAKn[=[KR[tW^tiGR%rk#QyB舛yי_*Yme񡭾>.D qʲm7^oȃ˻n)IEhwRJ6V>Im`}RubnekγkgO3K߻=7_Տsq_[SSOCX3i6JF4qG!;=x}bgΩ_AK(+StVSݤ{ۧsxaj-RI*[obLnޟಅ t|K{^)+'[p,×ouKY5ULG3F"&WfA[7Ԋo ?z][߿OR_Ěfյwֱqix5(dkWId8c~0o)(S9^[^0U)_OϧwO~I𿁭e<K°-~|&Ȱ/z]o_Wu8աn߽˯xWt+N5S5+./~!xo!~:I6a~p< 2xx,}ӂU_-zZwO<..d3CZ{F6aI$ViRuMuVu_&oׯM77T^Hz*y=߯pT|˯㷗x?c7z3Xԍ^IXXhVO Ʃm ao԰·oqJ+_k]umhw"Rm|߾8G}SiyoMOMjK{mQh 9\IyRH+l؍?d&t/wC(^O>WN4l.Uռ]wen7P}~ˢ[ <I]$|z#Zs5-ml~̈"16&Ck>Z+?'rw|Eֽ> x-ω-s[]2si%% "Txڄwr1}t!0h|-ۤ:Niegog=ڕV̺gkTZN2_{,yZm pvV@R^lno%VK˫ˉ&ͭ{|to7Mr=$轵Oa믓jt | /뗺ֳu'U֭tö:i#FHm;“B\iBQwWuӋ?>88tx[?jڕȎZq]:T;WQ6pCm2yrI,s}aKGe=E_Wm{"Zk(7giLcYͿcwқSIt~NUMy[K\s@uH0fhFO*םEm]Vzj+}NqZ,L(n5OT6=kJZrK'1}Nol\NۻyoȟwSgׯ}޻_kIy.|Co&Oڬ7nh7Q>(Qo_?^%=o3g/ &_4i=s"厊y135/mM$kq$h_;ZUzzv~]ΨB1[{Wg+OkjWfV6dmJٺ5qr׿߽^Ok0,qD|޺#ue.gʁr .2NN{ק5D7ҸI| I]>q=iХ&ej̳Ib-ܫITi+U$ݮ:ӭ{\\LUfg v3N3i)o^ ߽Y8?#pEI#5q36׵\ʄo~};N.m1+7}߭:8FBI$aywϮ;9L{2ĭʑwon`v+J(t{v͙]˶3&Di:E!ϗcnjMe1M[ʌN<ͻ?/9VRD.cy4Vm'=zS] W_Mc?Bn⳻J<'K4䕬ca:_pxޥK{/.侺Ehڐ_ $n*]/tK/k>"|UM/MH5j6x{,nVu뉕μᘯG3^|+Tc+ϥ4] ~Ѥ4 D dӴkHw-FyeSYߢ80u8f-be 0г+n[7wkSJ e;J{2;;)m~rgU^Y_2GO''tcyy "Xdm 3]pڿLSK}_꺮/H-CH<ݱeߊ#N4֫mO3V{ߦ* 1<m]_լemm}S1 d'v ۸zU:5yTM^V %%̞~j{]oG֙3~SyZkHͶt|g *gv.ң>o3]d,sJ5Qnoe}í6 g',O[Vs nk8ǻZnZܿƈS?;z"kzH$?~kNO2e.n]I$xt(wL9OSۅR$7=^w^ネ-4V^\Fdw71gZ]>M~&ֱ}֫fCO󊘮]oOשj)ys>`]sTϛγfI767ǧo{o}CnDM~V}To)e' u}ӑZߏR,<=h2M'Wr 7;zl[.D}CP6"qws36Z-v"|3y(}x{nZq-ilk 4)?gVzyI0v՚8$!/"A"`]1Rwk]ufrG=Υ 9$(ot)vlj^CicOQIm%+X#kK2Roa2ٛe!.Xd%V;7uoNۜۜH^>m#Bui%敻[e|C-m#1d+`cd殜Ro -9;+~p k+?3vۻ+ZJW% ]i:GwM:mM=uB?/w¥'/YǺvgsLΡiS>k}5~GsOv3/|AӴKXͭw-I3Gi`:m4giސ}c$9C=WW[~:w>Vyk^%M94{}]lfN?EM53y1~Me8vm9I6N#VQ?<[ZkOyrӳ\|mgY>G3BD^M[}"><ᏇttEV'v>ZƦIF+Msmo+lZr/=j,+# cֺ[S״4]NS/qnd4y۱'Uw]ȾM6ta̼/Wk_ d?k=0ǵtKV&ٱqɯ2-}lo:<_ÞcKEkxw:?-fڅψH+nc]y߻JpqkK(;_١xK__|Q5(Q6^kI2¶:|+yǽU~E*uw9~>94:5撆L & jZũ[7ܶޛd$o:cI$6wE4o۷Yղ|+ޯ/nuSo&qu3bkp #Gqm7ȁ>m{Ty^?+-8Z]O#kzo5]Anu?Oi>,=_b5?%G|KZ]={޿6r[i#ا̒Ah}kjo\c$VXz򬶷ʼ$dMۗs ?3ס R_ 廖y,4k]Ve^|C]6-n'ݖؘ+k zyϧJRi=~]7jJhU*Zxdm#2k2nyWkTMXyRK ՑNc up$܊hT39ush֜~#/'-;,b6i4zM̿nUo&[cͷ{4ؾKKm;?N>w/;x\-EgX2(#Ǜgg .'W63:y.|ί\I '2ϧ71g[lˤ2k<ZlO>N7}o_OĊT~t m鶗}Cg-[ȩo mm5|s"*W#E֗߭ݎsszKק[kg߳gмuwXDѵQY5K >iv^qdoΟ̷|*M{:w[]߯>a ?uΎvkhe_&PY4UQyɺI7˽ӞE'ξWo3yAJwK"NhLZq9Ḛ߻?iR;ݮ}NEkoy8N:OnHG[s<)u*ɩ\V1omnMөK[^{DSׯ˧=;}0x@ Y<ʻ~+=Nws5_^3p^ h4t{oYU"]5O-"lA7"y5,oI?8x> !5OޛX|ZFE7VDYZ)i/ϊqMQwtgY^AmmndWYkyF]GBwU}S2y?w﷡ƙctjzNyb»v߽ڌWZynz֧ztݍ%mK:ie?Y.1YȒ|R&֚o3wLgi=6KN}>i.V+N}>4dވM2&ܪw&s[k}3XBtxⲳV|iLʐ7̿|zIy?"2u2e.ߊ2&ߑrƏFv27]~$AjOxO:4Fu-y|҇%R~>#Ju#ljgm6FWDE71yunzb'+}mk_qӆo_KmѴ[_d`5`/ʰZIO:jkK}/$K˅ w]+Rswmti #OOg4ƭDvпO|5 /$W$mսVZ:ZK5]"UsY$z;D ifZ n+2mޒsFy{i_t&Ǫ]έPpc*'wޮw}SrDxA򍬜9IxPJX?oC`SmuEPcHdIfڭ1|Gܢ3?i/pC8)ۏ?wqөF=uݚ9MJk]&o/cs*ɵgI8OǿcMuDxxDber˸gsޕN?6de%*Km~Vɟi+[V-+Vs[J7o-^J|0y~rֱ6mD7T'nv?O΃6ܚ+kfiܣ|2++y]Uw7{֔_{|Kcecq?Znݿ[Y~r0?ӟP6[!e1gW#ՃMn̹Ei_3fopn fIßlϿߟ4f~?ԃP{{{KkIB%嬑Uy٫9ǙmwE_Ļ9$_Mn+3ra=4r]C$27toߏQKuo?C?gohZmςt=Ú̚VOdzq;-EZ_?lX{ wf7U)7-Wo5m<UR_ p>|I*_ipEcpt \i7q4^!HFJ_k$>D:c.m6>뮵8&t~׾wrM¾)5? xGecڠ_-GYvItt}7)r۶3Imy~_hQ:EzM H$pk;svO/gߢ[OO?"E}32Mt+Bal5 AV{ThZFki<-_%|N'ߞ?ܯuHɍ'?79g?Yg>rF޸?>S([]*D{w l@__OeͰ%w׊IQO$r@HVVS#nG^Bqvi"*[XبѷjƻU6vS*n?}N7ƞιqؼ0jPenMi_>o/J7*m[i-1W2Fiyk9$۝Gfn‰'uoCI7t bD`탷-HE~ `Ř$~&ҷ3U#%m,=F+8of"eug5}?K,O4;4ed;[|Z;$O.HfGy6|;#_qSޮLx:;>ƚw:ͫ&hdRFwBg|_|4Lχ״]0] iږZ?NiU$D3Cpfo#%Fzv^}7rVms=sܾZ'멾# P.u-ŭַ|#eXfRkX5?4YTO}S w}>1ZZJ¶W2Ffݗm ѬGy#IVUcQǚJK9*~n/ak]VEW>QLnܚMǜRat|38f9GtNhE}ܲǗ >1t}Zjeȱפm?"Ikuiᙄ/2$Gtޝ;6?>|-q|K|:Ÿxr⇈tmuɤY}eKgM $q˿fzU% h}%GƿyxbMh5Wˋg[KU&IM|i/ 9TnOO?].ŞcxVj-t&qoKF [̰ ^בO1i4Ո?4g|[eih'|7ci 6,]\ƴfKVދT}Ǝk4Ԫ]sE]_U߀.f/n mB؝V/-5 c6gh.'uԌ(򵭗זzs[K{]7 ?}^%Gu'ȼ's1YE~3+[M4| Rm~#aE- ȗV6|g]J=)Fkn1 [KҵXTnMMIwÿs߮An߫gCC)`ӮȁU~i6&~|ϟYr;3xӓzi?>.2 ޡ3^ƟkyQ]i_n }o&RwM%G-g=nzUzTū\6Y#v]y5..+(ok~/3mbg~OU?7axdڶ$k {;ײַ9쩍t2~3h~xQ-RIlnx7kz2}w<ﵘBKW4Eߍ~g}i.m>m/ŚRiVܤIqnI<og<[O~kY^47{xz3WX݃[^E],?ȿw}SjZ7C?LCYV<|&$2f\8[ Jg}&=iw7K Z_b4:Aefm~1R;I>8h乑`SN[sMA{Z}"win'$Kw ۃ7||r^]w"}KOֹmx/ {ra2d1_*W-8һ] SR-޵hڅ:F 3'^i]./2 ˎVfX\{M~4숤JK Y֎}~.hVg5@[G"۟_1SnMVmw:躥5OI{3'ɺ"G vm5cμRwSUWPKۃF;?5Qwm?-Mt 2G./e?I_u ~4{a[G-#H6?qy;dJ5QK͜<욌cL@O|ty ww2g}Qv{ԣKvWLm"yeeheѷ̿'l䮵%ewϹX_춽G}֒2F8' .f\eah"`C:2IW/ }_GMk }Ei\YerR =(0PmU6h J6w)KrrbӯgZF-}? 9?͊u#}}zosYS*5nol̽rW/ o~N}c/En[ߔs}L{/V>hV2Oc\d/mtC;K=cJUˋ\cd~n[ Ւ_oL#}woo!\|wJjͦOYiiX #ɝOr>/ݻM̲[Ef:u>knƲkܵ %TP54KX̖GK2푙|nW5{?f4R4}?us;zcjkxֶtd4r/]˹˚ܨK2_ __Ij4K#fYKI]yĶpji Ҁ!Q]".6`Տ:vrJo>ן]ZA+@,/\@Hİ/cޢ6JIwgx&bBvzzgvay\>ˈC9ۻn;opK{%;mi˳3Mi}\X07^"ۺ a!2 }; mi1 YLs̱HO ̽~}.~+Þ^Cd|ăwSʓԮ-pnrIgxͥ^O+iڎp֗K@O4e >Zmʿ&t#dqJFZ穋M=Nz ;^,[\H;/9~p4oIgI2-i cofݹ# 3]ecYD_hV;Y7$h]|-?%QG^WO;oxgv 4 CEkۺF$Oϟzg4Wok{_/tMCUե_itڇdc6sI_hԽ9.Ap2G*bIFds@:SCNǶKOKv}peM'GSQDO8G%q[m_A$ Ȭ0povϾh+\K[1oZ6Lso4fkΞis^_ۚMygvHMJ7ϗv72T/_u:5kl|OĈ'PW+Io5/\ld}ԍ뺆'KI>-};4k>&м+wh#gFc;UdnfI[)sluv뿗⟃jyx_[ŖAaeIJO{EjT_3[/3QMxQ"ȓ;g)F}~z}Ipj0ەĶeKB$eGB$m?yOpkj1|뾦XC}G9g+H%ݙRFm?g&?*W&Gۿ3N]\Il]D^yw1:SF2^'m t߯zv +~CNX.OfmW>zҔ5Q3|5UWQպ]{öu^+TVzٗAi V9>tpT~Ifuar^k+~_dkĸ_7UnYlo 36swC,=OmM~fUh)b*KnAv$O߻I#ch!h~=ܧ8YFOӿm{$wQfyd[IO9EIjofQ(G5z'lZWRdi2?fggi!usXTj٭GRa|CWZo{,ikw+6Y6b_C_OQU#t*}<UwGG?y:!98ϕ==:tt{k/d֭Vףt{Vl;b۶6dI3ݥNNik[o]w-LЦOߖ7w=qJ7wIݥkkCHO>q.BVCiv ͶdЯ]գxw#MS8R]_n^fhtvWw^m JC Ql"0Cy3$^JI 7|͛&LBM{u77Y\=?_5mk^ٙNdk,I2#yl'O-(ӓkߛ_ \&kt( 7SRu[n]i3/˷zI=%0|,Pz秕0Aoʾ5wWa<rizniCQO}s,|6461x:y|jʋ ^Sדkr{G麭BVZ{~ x7rk#[mMJ{n ;֫Ly۞dm_* uJ҆%Pݗۢ> Jt>6z_~GiVk'~.iڼV7:Ɲ-U杦Wy$Txv}߳$qN?4IG]/z_n<;6o[jՖh[4x8뫨vYW/2gѥRRj0>}wzz([8#ÿ k4z5Mm²3[UYʱi_;^Ӵ50aMMSjۯ;2u/O}/JomK"GP*-2/޶OM$Ӓx%-zGZ5m{hpx?f]"ƣ^6mh"w.OgΚ%Rjݫۯ˳}]o|'cj6orOu$_7uqgEgm6F73"}{R?xoO4M?ӋV#ۦoq2T7&e\cg[m9-5Dd[o1zƿ,L{Z9E_ӫgLpZ֏&uAZ`4$Jۚo/o6; ˦y{G[,5K IIvKuگ&їfMf8AϿvO]~9K_k=!bQF7Cgʲnmbot߼V*{oÝk|kl_E;ՓvUQ{qqJm2nwvv^ Ե24] R"=Zt5ѫ4o(gjSOG_z~?m.g+N;h5CG囻.naɇcL"9/M|22N{/>A~k*ܪ˗4O7K Rrnu=uo,N ءFdte[8zyooq_;RShvߝ0{$u9N,/iYA+~T_2={7u*j$Qi7ECXotzWLwZ-K#Q Y[}^y舉Z>_o -xRj{^ xk^3}×?!+%V$B3,tp0XڸmM>;72cE}͘3!c.md~BiibBUF>wsiGnvVW3G˝bxEmЬۣ${"D8Yn?zgk-׽K`uqsuxW_Oe.;+iv3$c_|K[x7 ~m)6o;I07::JpT'Vk_miWThߧ'? O)5)gMKVENWVԼEMHZưŸo.OvʰӡȮkIk|ڞ>iz ?vw5Tu/8Ӆ42Io6ۋ9-;y ⹮֚5{u=w?"ԵDҴ?"{i[dV:4weԥD/"==8Kk2jJS1OG+c_0ɢ0$~IƱyI5HVǓ>a8JҏϹ[iMgduYE461ѭu 6^\~zޭG4m^.loxmSOnYhӬfVy_̎ 6'_z~[^H5kzwi:6oZaC]:][㷎v>GG+ƨTo~b _Ϫ|G6% ZEJ]4%BЦ]M>zCIYv|Oд yȓ=HZF_ܪw?Rz=}{&utG- 7jl:Q}-{m3Xx?xh_.\xvf{? iW +i9fݿwІPIo}N*v߯Gyό7;;!.#367g]c2D& _%i.d{},s/txպ KeǨLEM4ZU˩TԦ}|y97Z_q|5y*ZtQKO|27w7j0QV%]u3ײ]t^n{mρFcex|6}.vVZ_E mu;O_Y$I`SH!lw'}>b%֜y/]O>=|0)}bLqjrF{3]Oq#үM,%U䪇ty~ϛ̏^!SzoקRw|GxH|Ga(icdҴ#EmmVM2.wyi Q]_ycӳK!wbs}Ͽֹc ='DF?;ȦoO;3dO=Ld8?53"I,61)mꭟv ̿IɧC $,m[ۛv_zOk.i-37_{ڪG{u1 0}^rk-o$P}=$8ڼ P3`_CJfo3)[{O/73erY~w{R?L+[vљOv0zĬ#E,.c7'﹜NK&k &c=w U%}".G~?fkZ%V88B1ƞvʊj[z~(@<'ˑzeRm(>NWՖb(C`4E(+[0 <_y%/lvѴoimq&O?T:].vst~~Bs{[\.^kޫm9߶ߩ.s#<"X-*Ȏ6x֣Z]ZsT_9O^ Ե.--pUo2mMۓlnஊ4졿}|q9pXĒIfLIBwf`uw}Ӓ߮.iwy^\ZcLq>֫WK]k cV}t^UٰӜ#>z1]/XsZ#wn$}s=W:qv_q ƞdb$qJ1O2ơDGyVu{&޺}hyقN͟]S_pO=O馞 ˝^4RMqYA+ Wrrܦ:0{gBQju:munH.,Z(];Hm|7ƺ-ƑNt'M jw]&߼+IS\񿝷:!vxrt;ofohf6(UW&G|ȿ'W}z+iWVZ>kE42@JEh,:|{,/)_wB1G|S z<2^O_"^j=ǙѬ>dݾgٝu6V[^z֔Oi`Cww#ypE.nggӳh_ oxlZI7qҠe[/o|d&vH(T%߫_m*T_]?u[t9!65XI VV>U7l$)^|򴼷gfܬlw7tම#+ NLZ+#̯hDkJKW~)9'e/;φ9cK^E///!C\Iq"ǻH9>oVn)eJ ͫ߷M]W[3#+-ݍcKw c6Ȭs֪2QZ/[Xh_L-V_7y+gQw_i=7oi35[gH=N #ΏݷkME6I^mZ7U)?{-a޷⟅&VAs$Ai.$ ďt["ƏyOe(V/T= &T>|;MՏ׈,o_?i{2ƻ]m6so4xCktעSyv='H2;A"jY-wX$YH#o4')5:!~}z3IY[6q'gswɗ×\!^]0(%Xi>f$ZMϱNjszuE_#n“vet. ɷOVDnbkh #nt_vjov̐,,HNoU{楫}]LyƾoʉFL䐿uV^f=D{s X!bp~~׭hࢷZߨF/$ܲFV\gs隍VQ̏VvKl}k O[ݝϋkzyai-H-(kO7XF'y|||CYTӾ]W:>֮5_n8mei6Dzhc{Hdjr:ysy8~yE+Ӝ_ JZ_S|7j!oRѬ dI<~_&I?&T7WwzC;inZ_ȷvun$Em]߻o~O~+鰔m^E= ./#/lܿ{w΋>9J ۜnyypc Y<]ڱ+cծM׻)8l58'\KjyL۷nUߏ_SU m3}chmGUP"vn:.ow:g2Eg#}JVs"6[?LJ\Jpj8*W=ҴP__&ނjZ!5 ;[Ry>hUo2%Un4om&wߺo2zf~SM6l+ؒ\Y~Oz҉{jAKVۥԋo{,qŷ&HV{'ܨnڰS^KiMũ -ԯ>b."ʶf[?fKVZڠ0ω&c|]-Redgi%77fNOϑ}?o,Q==F)\gi: co^N "M$k6Eݵ~ִw{[J`0'wǯZ-L~%,j3)ݘg_Z͹&זƒW^} ZD+ʲ.uުʧw[Oq$< / /o>V-Y؏i1/e6[$2+@qRKsZ̟g- smۖ-ʕwS>1(kNu xXn/ s{#O <]j6oj/ 3x~o^,6Ҵ'4#ds"_-k$}n}ӖTm>1ς(iuZɬi ^iʱjP\my-,HS?+4f mԥwkQiM߮Dk=z6nIe_3Z=-c'ʕOM6@Z;gf{Bm^o'[D]g+zs+7?*RݰB'v9V'u~Q\]N{nc_4w_YKfV6YWwAyzԂNNI?7~'\Z-csml"M-9I4)yvUT3VeȄwEidiz=^}Jrrܩr6~l7˵U- q>M`nm71.^o&bgytxW̶݃25 tqB#UZpwcΒc׷_>oDٶR])T泚3cO'\*9ޯ_ㆍ_u+ #:W?nKִM>z3nۋTIٿ}jhQV?Gtޚ/S:ZkZ石k kZ-Io5k5i $M^{0q޾{ҫs7gۧ)O> KH"5_;u_Ʌ!Mǟ3by|FпN/ _궑ή;v}OҸ4r>\k['Fy|Z2++B#{TG[Xv񴐿zHgO8Qtݵ:bfvm{,0ܣ U'E+,s":6">wm^<7'GM"CV2-/#Ml ¿ۭ#$+)Kd1D|#e ,o3k{oiߊhNrN2<rxšb"i\HU_2E4Y-EFms_?/g:myiR}cάЬ|?}[&7eR(qU#mi3 £wGEsώ-J7ƿmHQ jKH{|=9F-Y>N޺~nYkv4!~.R o[]Aa˔Qp-3=ȲnkoдIyg-riTZ}5<_Wk->/6reuk{Yi./!oKd˸tzIE_^!]}Wφ axoo|AqI03&gflqk1Y[[> 'Yە7;<Ɵ=Ngzն^jZfْ)&v2:$У7|XN[|m32z۩߳GkǞ:ԭu][wR;\}Kuhl!mKGo}fŽ |7WGzOj6߾>?U ]SQ}wR&m-mްOHcAgφI[޾G I:/;]2VCKmc g,I ̬6lϒR>Gn֟6aZGkllFbZWgwy9v}ͻvej'Q.sMy8ֹtRW]?J#8 9?J2I=2I-6 ~9󹬢u}N_Sl50N*n|z֊~GFi}5- ">Ki4y&3-2.!"dt]?i=O+ៅ7CקQ!K[=SGWV# [M~h7{cQs>U컟>Y 7CT.-k;ug#4l~_w <~t(/ǭ?#Uni{q_"LuXfY ̭yX9::+G~fĮV:oҝ(~w}К?Kg6vW3[MУGsʏ G-wN8ғ=?3++Z6 FTZZ"C&VGL)4/ϳ;(Ϳy?_ 9[ݷoxW?|3{Jѧ ^[En-O2&dȲyg{=w맡7Wgɩ%gk6᫒A~c8`o woQ.mkIw{{'6,ѣ02~˧t}w+wamSOfύ\b~k=Z4\Yxտe(#֎nn؛xOHS Kk''8Wvۨ4D>ݬ[o_oQ¾ӼI'<1cv߽J_ܹԳ[nle=gGTf~-MmI~PO~H=;z']:ښc]^4 F!U/oySk_2(}\Y_@6 w;nUw)׭h{2yyzX M:2DP1X޾ֻH ^C4i42V# ͟7sh OAe4wm5 0jJOhfkmY7*V2[fԚ/{na$:IjʬI!dEI>g#IBkL.9#2NY%r_1=^uo>%mҖ:vgwi,rCr%9m7pzۿKmM?LQ$DeGOδn)]Gu p/ ?_1?z7}v5pа*T䟛޴3o$e#m#>lB2>W&z?SBVm52ؔ g_ _s7;;ZKjEH# MY4 y~? +'t2$+Tu?h_Cy~? qv'Sw4[sBlg(Hl4з5VHaBvow1oS)rKjZ;h PvtI$@Gշ/g_g)s[M_ks> Q+y?hV'V騯.xீq-m:}[QY.I&i!ecfveaؓCqi5՟Q-Y։SodM7D[e#_m͈>Td%\>?ȯiw*! on^T; +ӧߨQK7w{X%mGZ;kX˼Vɸ ѯ̪.$QS%4gA㯍me xPѤSugI$vУ hKWMU}{  ksx~OZxfiy-Vy}_%EW/]Zq}vzd.hݿ?z^4m"9a ټ3K3\Ge3mRI7Z۾mEYW`_g\fBܖ9''0޿ұIE?vrw8u+t.~1G<=j[KVv4cNH=[׽-_~+]x$< uF!ݻOS>m:aUHM#;)S}:OI>< C+@ooJW[BFF~bm{H@ǧ5ݻ}<͍2j馠 vi&YT'oF2HO\*"*"nWZ_N}ƽww2Ep ?9mg)>E'}~e\]82+Yɸ̣7ы&9+]eK6oW?-o!I"j$|b6މSRӶ}~?|F=fUwqw%ĶβG}.r[bOΟ!_.4|D`t.^ڵ}Oͽ4V{O2,ŗb~{3.g#4w~Y:v_Sw_ѧe0xh\x;)myOnzRO. &H#5od Ds<_ 3/BMɎV ud#U.ǿZS y$iJU*O_]a{7Hky}_mWH 7ʣ jϱ'v4"> Rir FJz"xŝ蝤$?͵qRw3 fx243y(ws33m_Uh:rKGk5$+ۤݿ4Z^_/XwL~_uRs$_2U'F~8=o~wUZF;L̊~{ BG0,VUu[ZQS[}CNh,Ѯ^Yf?~x>'ydd_R.XTtFHK 8C feoݢwwܲΙiE4y"ui.{i<:zcm N!$F6nZ6t#\rviAi{28"vn%v͕N[g΅o=.Z !83G'Xm݈YngI 4s("r+|wKIk ;VV||zĖfsq4igo sWKwEF­v2ދ ksլgIJ #:3IYܖ)4p2}ĽۨԓKvCq oqr(oVcw{߿RΥEb9~c ).Y_N1?QAik3;{smnk@tY\Iq3(~HwIW$oXjS3Cvg=}_Fu.fEBIVRw=7Q%}=?IilsQX]١$VZ+*#3>koM(V%E'}~gߴƝ}\\ѿqcl_ezli {)i1 G:lu?] /pc]c{HR'4IyupҴauįK:;ϝ3k4'RnŵVI)`gpoIJ[/Ԉ~gYk~0YqE<ˍᵑHVmfxcW&_nr_w|mkmR-Ntcu4ͯKe1hݙnX/\ⓊBѾ37;5{M{MI,mo=[Cu;]EwF>56yu&&8&[i3Gy5H2;쑤>iRJGn>J'g.΃}Z5Yiw^K󬵛y描靎~Ւrj龿ua +MoS/ľ:Nwo]ۤRm2F3em35mG3z_ե|ύ0+i]8h˭'͇,Ee͹[n:s}?Օux=~w}{ ;}-vv㸵E4W]Ѷ?u汩7KM}.~jZh5[LXfCGs:}cFN6V14Uokwxk!S lܪ_5^ [h$?_E&lE[ss\[7Icm˶8>l*%[]5ͮ?7ؼȶK-d#>X;߮}SWv7xUo9uXsbmkĽ$L0+]f?7ӟX%o|{w n-=d$WCG}sک8;bcO_Ǐzp{+;׬L[))UٶR!_^ZQ9g[:oWuzV4W7q&@&ZEcw5(Ex5q]s]5A0!Q%+~gzu焹UF{V:W݆OO5Y*sn_b%ӸJ {#An%&teDFڻr9?JJ֧+z^}nS_]jڅre율i6c̲#_qSu+i׾zeF%kt0iJ%D{-cVhbwz}[Wz5{1$#|k_nm]_SEk9lj ˓Ӆ`%&ew_wϧs:1(]-wżAX7Vo.X56ZI|]<\I\Nޮ޷9Ԍe^ג<>sj#Zti{&o3|ͳ<^1ua %--[o*Q79ovvvoy?VjYc%[%Bc3M>q7&?餎YVYG/FVZX񘚵߳[Fv=˚gn#Ѵ*D'O;ؓ?qdG\^Tj^jZWkK}osU~.z_yD%.`5٦;Rmdgg7.B7ohKTח^҃G--:|RW.?߃y_kZ0k]/FVD,.yrzT-N=+WCED7jJ-IzO^]/-l3x?65}@MNGWYtXhi.ZA3Y$dɿ齴p8I{\L춷m[DNxkf/%:6>ȁy} ox<-d6f=$fGe)Jm:1{'߿}}RJ-B=|w>3i^4X5+{FPMK흾U^v,q\ +sF/g-}/Gca S;{o_K'}*ƚ}x.+Vi7_\I7˺IO"L6#qrcR*q(7nmߧS ^r札Kzmm}{^7 ҵ/ZnNk{,dkx&ڤ^JrZvz %N/IХŏ[Ud4[K5 FG[-㵇v呓toKM~DRVs:twG|#_m5-{\yxmn$!dcpTTl{ښӫ+|foOg֗TZugLH˵}|ϓ iZh6z6Pj^!rN(Zu23Ako3\H?HJ毇M-}wӹ Dݓ۵͘LQg";"%!۹mo>tKϷe3N3P-^qkr{mBH-sG<,Wo3[+w_#֏q+ۦ`g`y~eE$߻޿&fc{{znHQAo5˔a 必a\rr`~ۿϹ-bk( Cl2XXaIIH7_W !JS8S~zc#9VJ Ux]Zz>Ɨ5-w@oc$=̰­qxO.GܳF̆I$޾**Z9E'w}zyScȯv~f?ѭ_k]z7[~{;n_Odܲ5})T e<;\*ګ:_/g߭[=%/<]^'o>Vՠ}F,{wȳy&wxo3UNJU)[yﯙ)+~IugxMMQn!eۉ#4!n9$U(+8ʜRgxRB|7=CV)1ڝ12#HWO(SxZwsjin]˅hՖ8:EVVwuZ#in<\itDr| U'}QS^ߺ;u'ԼQh\KiV{gmFХ/tJ>}֦m)ޏ~NǨM;Oү)5ֽ]Y~ɧY$a~s5纲Eu~k˚~Sg}̷c{xSvqcSᯊ̷ٖ~ydR4Ȳ+Ik7W|0IcdN뾫<\NZ]5{׿߃O,|/oxwL70] rP5Śxmx #$+J&-f_=ME鯻\h^ p--GkM5ė6ܬ[Bk"WP)=uѯ.X;%1 =FƺΫ]>>]/F>X4qodiK?}Tg꿭{:%oOY=4T[;SpvAxeYٷwЭQ-{oq=ZOIejbkb2;+;ەƻg=9u'[.^m;|?-֯cä=O9IFWΑۿ律U*ɯunzG9jvjwVhVh0to8‹:e̯"uvuBQ^~t K>y?](7r^Ʈ3o/aEr{jj}3Eum 2ٴw.[{lCՎO֍tkGx~kY&Y,ʅWo܋6ux]oW-ܗkO4mvv7g}#GS+2ȏm~cɯȲU*K]v{ۯˈӌd/yojϹ? Y~c⿈uſ:νәo|Bd~i$kk"cII$o~EӒJVc̋N)_|cZf&NT+VGԤK4[..#FC0BJ<.rOyk r:.z_#_7–:e{y$fi$iǻdv:m4]X 4_W<5hX@=4~g݆w׉S*IWg \VӮoO3c%WO$rg1}%;+[7;X䪯{t^4:{ZtON%NcsnbvsU ?/SRn9$H.kickחsr^g`1}~owJ8? \R\xae,qIp./;U&2ൿo[@|'ab_Fgwmnm?Wpm}|NBc|5u`9kvzwj-X-/$eakJQmv@/ x]^iϤ N-vy$boaOVn]"7 ۽Q:/i^ޤ-q Ѷ[fIkvOo&կt 5Fa n/$ލ?? iٿI~X^_ifyBmS_~yMKxx,)_1!@ӌ~ӚpK";mOT]ϘM/oҶ>g]C)}Z?k̞IoL^]%I>߯Һ$.C ۘjmb`L2FK=u|Wӹ5'"[d`RR?߿^M ȮF_ZG`|Ԛظ$r*++>.G?sZc6լ&.wzǐzrF}/?qM-~fLݢY*dk.nΨz/ [N f_F溚E{{d۽I>zq,7$?|iw_||,ҵ;I˛kDGa)Mh5ym=:,-> ,fQOaMKUkGèy[_-bޕSmh-IPI~=TϹh>0|G[,h]xHMFeo/$8V٤h~layolj^ԝi{K]BVoU#+%o!]-\5ĒC$43[=DDDu~Z#VG}=_S]֚~k~GE:ghVέXtmqjo\֔$~_שDv:|Ovz{yn|_~֎RK]~'Yŷ:Q?٭plɷw%z(Z7^g5W(uk3:D_7gf۵dl{z4g/qJMhٕxM$W ^Y9fvѷ]wZJH[G߱.J[v50ݵD$ e?>⬒_O8wlz|JWȷO[idnO=A-`$+vۻ֓ԋ%}8}o>$^cxfˮ$~bwjg 6w}0ﯧZ>ryUC{{?xZNa6<0*bc5Eu>wik?G34_[},:Fݡ37yOޛI8뽿S2En$o ?֒{#>{~3J 7@H\J4JMm fLd#;wU$9޷FN gz?y.2o/r;2;@u9GE;ݹ}Eawf_dT[i맦8v7W.'#9Jg~dr8Ē6I؃W=磲7;/kK6;]kSҜ#@2hcdG架=<"\yG <Of&}&OkFXmmd}ܦߴ_Y#Zq=V 6Yt{}ieyVMWmFGLcYR~i=I*Z8d#|m۵UضϓmZ_2[ۯ葶˩<A_Sְ-Tﯚ!sרy?ֵ-v"pbWg[h3QwiŸ9V2BǿZ*R0c(t3A.L!22K_ i9B4 rcb.[?>ONJM M_̣ey,J!ᰑ gb|z52wSyOmj:<;З>&o 4=hV8oͨ\mޏt{ۧaj>WÚ[xsV^kuo$wM$z]rS|xaIK:c]koF3ܣG ۚTzȕ4~=?I%$k_.@OǃQ90kyO˳vܞ߫--w/ϩY>{Vnx^Eة~-ٹqmel@;_NKe)_m3OX40q({hYWc7:[~>AO[m1ԵX!hh\WRi->2TVڹhWHӴi/55ky&Xz[g?_jWlOjfE;hSb~̑嫕IX[{%JXng襗47ڴ.?7#K˯o̧Qjm<6 Ve7hYd'Z{CW6%BBvyekzֶwDwJ3(mrcwgA{?u5s/y_ $i]uΖ?n-fRr徿j=?[|Ò=fVpÿzJ\ m)DU!$ Y~ Wo]9Jw"2w[{IoOH J KNE**Rm_[S]~.MseZwhΑ|w{jdܵY?_ZgFQ}+|Ƥ̶7Z|O,g!+HFu;:QS(uk HnR]`wq4߿_QL^!NqhfJDBoݿozo&e̞Q!OF[v볂~E/6 8z:V=Z #S+swsSzǝAosT/."<1|c--m.u[UIc%46$rF|훓i>_B1{u==J>?\|,Y风gueMwUcs-;n%O|o;NMOxJO"g5XbVʪ2W嬛/SU\'yVxuJcu-"'c ;r)r]'{׿ո{7Y@;i:KZqpmwOv_hܱ~I"wҍ]E7'-}} 2ª]/NU>M$ޕx)k[u=ofTݻ' kϛݿ[yAԌ$֠r+opq_sUJʰjJ ܟ֩w藠/eL5*VvEuo!u9<.NM*NN'_|:,CMY|o3|NY٤|.U' ?˥Ψש3Ar -Fʬѫ"ͳzQ2ZĚWZ=ƚhӴ'?5O 6Տd;W.Romuoh_vOZ~|*p'@oBOw oᑙ&3I?{GDu֫I]+^3.e}|s2B j@#Al>eCFw{+T/&OoO/|Kz>t-&i$-3%fELlE$pܺQM߯>,tV=17>֣4xf ;;ƚ9<#h]aɷ:j%$[{x{͸[_{ `v$64 մCV^H4X'ټsn#ͅS({)[_ջ~SJѵ=WZ,4 ɧX,p;*,>5GC߮+0pɥh˿t|c?Kȭy:͆'p:si{16ݥ]~_eW4_~&o/=?Ģ;,g.X#)i>#'~"i~Fu [kwnd3XGgyvFkWwΟ#tOi|_O{ioWFQmirַZ2^[:Lf_di˚|8~ii1|QiImqqj<2;uCoتrB#Qǿ#{|%DHm,cJLZnq7o"]]\B'ɳtGCT睻e9_M{u>Kh yK?Ňyq|jQ-j@#zJ\W}5WdJӾ+KueޗwzpX3qtζRE7Gf7z?sg^v1z=;}ěV<[kƌ[q$0jgˎh7xv&Upђ憶?ҔZ_g5xU֫qL+q5|W2 ڿ6ߝ>gM>Y/׻ӵs$wOc}+w94cṬѷ^M^?[K;-m6FJA *7 ۾oqO96le}wRΩ\heh}?$l5${ Dsjr.7*.ʸ^0:= Ul Ecmz*"vƭDʯw{[7=TKo F$xw]1_fGO9 *112OC< 0o&BHsVv7,|mۑjͣr&d;z\w֐M^,L Yy>9ߏ8 n}x^ޟ4{`-Wcc!?9wdAMn]s>R+?@[2`e9ܣs)XҋR^7G 6mk>y=Au-MGdK`o*u},2xI 32]W\=ƣ>zk Go{@&тh-c"O+W;u+9]up_-SvM^a"IopmA BeI\{!ͫ۾sW':G5,-ݕkڬj_%hʾt}Ǔ{.M}eΌZ~]o~ oA;,/Kigi]^I>j<g}C^dBUO^WG'$0;BvvJO^^35MFK0$VR3 dFd۷WֹgyMKoy V(W`Dj@]]ϯ[G_?ɁI]7Sɹ݆'O<֊)kMO7ǹ&41si(.A`qo7[yԮvsv}|o^E=/w]DLS5pvՖT]6|ʿТOߩ2JK_Ǩ{ *p?IvW]dea8#n>^o of>l qoT95k?S}I}'Lz1n"y;*{)o'XÚ]NYYv$3*??9I-/澶S\@'ԤW}=q* b_DտrjG r9a?qݬ\b[w{'uWM#Ur*vϨNg ?|qaE^WXM-yDYoW~p^oZ\X#!eMwqlzՙmezngKmODQgXd?dޕ*ik^dYqA#;qFM[rWQrYuiyg2hd-fHfH>s۷o//'4Q+xg5kRw^_eN xmV74J{|sP%fyOi)4$|۶JIܓgnQ\v,ǵ=*g{yu,J`^ywF}iYŨv"gqSvzMVD8Prv3<_ks/wKo @iSCd̿3}]N3W0v]U&KyԹޑ: U߼oj 7HN7[uV_ _>y4|?|Z$4p놈w?nǚ$K[wHԠI^_4J-yp6h&q, #h^[~me9rƓoC|ai[7fXPVPmB¯$;䍾wM1e\޽M9[_NaOJHt5[x4p|2FȒ+#J#{.c?wi9t(UvI4ݽH2/3m;kws'M[^}<ŗ<{qi{ڵlRaqYcmzI;?7{4<ӼIA7LeQV-j{<\OG=SOv>_:NJY)ma$7wiYLʾgcN4;{ X-# qhڰ`l2|M?QoLt0^𦭩^ U}J!#yƐ40 ;rOԍݬ3B|TAe$sMO-BI' @rB:UcvDvm6qjmӧo+MԔoumK{30ԋȹL m_y\uh(>"ι=~mtfWT3ff[i^?X*m:}sޡ,3ZjI~-~tO컖L's{[Y$ԶZ6EVxyޟ4g~JnM_Il m:Cy5< 27 I+vTu-nO_C,|wޝC]25RQnlr}qI+Ȑ춓_Iݦ? iQ%5|.I$y>r?߲^Uzrʓ kkWROfnF_[ZGoA۴u55q>Q<}\J꟒uC*cYrK]C |ITN}avmi|&s<;]!o/J7!Ψc`H|)6kk~ukEn\q: +诣ccM%!Y,Od,FWۻv[tmgޜp,׮-CwVnuCWa!Aϝf8/˽ok{ƃOk~V馚리!8S^>w?wc24o 0M$2NEfn# vC|;W_U9˒_wzaZ8.V{V OҼAA>0Z?LʫkmFHiUߝ `ڍ)vZ]꺕-/ym/.i%"۩[]#z#ǯRԜ嬭{uOS{̧VдoNO~ըj/u[덿WV-BBDo갰u*9֫;mkOsR[>f}UNX{.,-f/&fuѲEoy~yt<~YGw]moԟ,9߿YV"! ptZG2ƭgkc4_f33ɓtGj'=?^J2s[|ve>\$%_~ogQγ?tw lGwhI5龜ɅfI$7?l:yY<ʱu\+ɵ>R,=Fy5?LidWa$\ĽnH؎yóxS¸rK^/]9G]nz$~7f]6Koes:ԛ^#F ̙wtDﯗRnRoم5ʒodW%ƅ/n^$_3VW]7tgMOͯ?xVn0=C-1G Ym^˥M_⼷ 'FU|u3¼7xŗ76N| 6Qx6l~39#eOْwU9GJg dDi¤|dtݡ $iw~RtjҺ_{k_Oh:o<9sgiOw]I4?O%[%置,I)彗Y?E9$7mmݯǻ<煼IPѵ JI4Pzvj^Lou|>3r,.>Of։rV_};Ek~.ֵ6Y5cgw#E~oᅦ?=ܥ”Zo=<%wz[l7 \rDn<,\l0(BWTw:no>yNr{5e~{gm}C: ḒCfdg];v#J#gw(m<]u2o˯b&O뚺k:Ψ5 58mFڶ̭#wtGOƿq-K F˻O~QZo.{-GmxkOdM;BR$>m>YP*oBVmq$q~3؉}+q͵RWwWo7o;>J 1VvVWEEXm<=%xէ..'bJ/[.Ź{WWN߽=ʯ}NDMQݮeEmDȉՖA$aڮ?gu4zo1'k|ƒ@}t}Jm5u}2E5.Ul5m0l})gɛ9ԏ>Eto ]5Ӽ7xޥ cȚ]&9[Y3omMedN͛9|^w;OgƤ=~~K/tO~0\꺖|-+9..7H ߜ#|h'ZۮSըѯFPnu8O(&/U]崓3/_0n58uK9y%vVz|sǚZ ]؎f|~UW!W:=cÚc' Yvힻi' [ceʺ-mfB۩Um諿{;Ԍ֯oq3x5ӭ|Io=կ#[LCkn˺Igy"O*4yC~}94bޟ?ǵ3~,zdpx[KϋSNЭpQhTޅY#MIu. _*EKV}wZGta8.ug|Q>Foxh,7NU|CRUBt6 6!o,~)*t֟?]~).E/? :~/].dj~-|7kvޱV\IͪBK{i<߸v2QdkHY{oz|L_=OXix}zw>-xVMQIEw}@唎3_M^B4Ȏg[L&7*Tv[zm\h+MߺWCx=NtH+Do3sFfsbsX?s ]뷧W|=c++$ʅDbyW+ 1ysbTNߩRM~{uz^-jcNm̡ǖH?9}ט{4ZEҭ̒#Im!$.En,,!&\:.=s޼UsJY]Zc8RځYܛ*d/O }֛slG߄'ϹNqͽ%-m촢gV+eYe&p};jӺ_?sMww!ƌФqoʪwM"}[nM_3y^jڕ'Co>ͤX_#G=yy3+TڿM%O:m*aPUHˑcsԓo^{U8m̹{rʍ1*n_})F)Ц%N䶷VgvoO.e=ܴ>nE]_fh֧ xLiم?sN:>4eQkJvd Fyb&?'ts9I=~_ƽ^g0Z$cq@>g=ٿWuh? {&+˘Aߛ7c:~["g׹:[ !^6׭fcIr3a jbR6^Z/,p/?)>jyfouu(k)V ֹe m$٤goM]=z ǁ|S#>UJ.jQ$8˩wBy!fYWٻumwyΚToy_m\Anbke%'Ñr\j^'5ys\ɶ7ӑ9ʯ'+:nW giooy7Po7_/.n֙[mThm֕᲏/؋ק9ֺ6O}u꺮jko3ImT]:}͏>vPIMk]{y{;_͝/^ <5*:%x{DHeKy[3c]:e?}֭RO=|g<3cJ,qnЬ%3q|$/}gQMc߮ǣG%=-{y wG,!o}j).2曵 ׃tPã:/ixtkK9dtGOFs+zu/jױ$nׯ[%> <xڥާl/u'.S΅ ܾG+ɆO;v0oޗ߯rJkKo?|KYx{nW3[Zy \I ]Οiv#/aJ۩U(F]{>1ZoϥίoE 9R5f|3n?v0>?uӚM.Nsz;}ǚM?˭6Cpbuǟ-ZEm>^WJO?6g+rx[ëjXI36v605}֓/yqZq֣i={mm؏b~+WL]WQ(X?ntcHfԳmJujA~'՜΃߯z^. Zv} %0CLp&|1 j$4jbs\Ӿ^vaec Ԟ$ p222eJO6^׺$ie9V{ꋊ%V{|{ʻ?rGm{HgnI${{~B4m'=ڳo Tj1Ubww>j V ofo0G~V<ϽO,.vI?şʒw+}.l큂;oGnmVkg9 εhK5 $M6dvYL}3x.G}_γo-){ww}.&EX؟ V-ݷܹ4ޟ7 w7HMP2a]{u]TI~^{)"PocAr6Py&Y㍦DU1Z8/Nݿu> T~*]YM0^^-Z9n$]{58ӶNxǕo~[3*1,8FXPշ7gοk9'9~Qs?ɓʟ8Vw)JN{V.nY^WHP Uke9X>%^aiSOo-cy23*y:|$ӋV׿0VaZj>hԭmG\4I`*7Hctpt]///ĥۋK>-&cgYa5G ](_9e.a߻6o|]5w|-mof>p/GmgnL޿)yoOfuǒtq&]/94k#KHZi2[[S5FrIބ;/s/'~S~6ڋ9]fYwgb;Zב[Q/>:Ս֣N.&T*omf?s1l3q^+iftuEckYE-#X͹~MF+k;LY9>^?שsId xPZ6Rm[w+秘* m,n!D{#H$45i%{KWgrfn.+IIdM_n},K2I[fS]_>UfwԯOf4^y'x18>_n{._zyiaosxM287M#ZLz7s7/T۷AfK|/̹^jo﹛ok'H->H*Vu! m-j׶=ˋ康nrך%H,Ŵ^sO%eo-w$3+l3yr$#7o/2m>oukDIHYfe8vi}/ߌ߱kZ3}9臁_3gkÕ'8os\~媶JBN z? lԞ㴿=JmLWs,;N~>Ϋ][G~e:q`,^Ξ;Y+ +|Ҧ_c}iϦ֑e%ޣq|1TXMeZ^9d޲LzְʭÞMzz24UHY0 `VVMϵtSm6ח`ӽRnbW[uUR6G]泩OI~|_Ig{=zdضF@~e|h46xGHּ?xwOI[f6~eXV5ݵ|_/8K/籤`N|]NyWq.շE;i?y;6#8ovhedr}+VۺHI>_\Jo 7v@6y!/GTmZ3=Ưk,jefhdE}FVQ}A5 '2/,l(%_{)',s#4ֶ~U6oOlOJڜ}Ntk2nd QP1 l&2ضlWԏ3~5Ikw8BmcN휪7zuŝkYvXQ#do+M? Pݲ*O̬v?_E4(`w* _抝>Rnܐ|x9~?pZwSU#UM %zzȲ_$>8;'m,vM5wNR[zqmB=煢f[&Xc?[4֗ytu9I_T6isͬK2ɻy\':iAoϻ9]I]El5}@2OY^-ZR+UK']l;|Ǚ*RLM]󭣤b3f_ ُʃRuZ h+~>+b5=DyKy&%bG̍$sQj:MnK}^r+oL=kL鲥:+qmqm56cVTWW۾7FQhջowfŢ]*n2ǝ+{''?=kKE\i+mufVץrT&u=CNַ\2Zw?z>3-th3Ɨ2)dKv!$: Jw&?<%[O[񵽦}%o{$ г9U仺$#d?t{8*0~OY߈-[ G~]65a nbz<028fZE739_][}>ke'yXDgbʬUYپ).mG<|ׯ k xmYoȆUuɸJo5$)K</qK++H|SmNFTo1=#b/VJ*;",sI:UާwMV}9;tYYء.3}exdo=#;+kzS{Qan\|D77|^?38Ng1ln<|w浍˧ߨFW~{jfo2vg~rr_.~-5\Κ5_V.LsXOk=3nUXo&Z_篎oxw⮑o&z7fõi$-?-&$7*1#{~/fݒ~KfO_ZEo_-"%mOTcp񳵝s~훣dduY•&[۷nUd>><3EѬt[w 2i]ef[oaS ʢ?y'~5|R߅wuKƚ=vX㉘I3iqò;k2=DOOv_k``/΃ .LּeA4Ay3A Xm0}d\񗴓 BNsnt-^±k][ԗ5vy<[Hv'Jpi^^יV fu'tQv߻~^՛D?=B<#fVh0deݹ6.wG43uVmݕUm8=?Oδ%_v$̾rMr@5lH>oM|C#!|'^SBM^{KI#ܘot>iJ6T>_QQqUKgtPoܦHL;c1TIݿjtsEyֹexĺFk}RFcpϯƳIqg$;y˦͓*G"Jqն/=՛G2h_4_ #7 Ӽ=Z]<kj\M\IUHnf}/^ƚZU{F]OPshŽt i:^%חut:L/#I嬳?%'̒D2uQí}4Җgm>'쫣V2k^3|O;MJcc;.KdΦ`zJ6_cZ"]޺tݝީi7:O' pm,5gZ6ymm/پ=go<'9>~֧AȒcW(u:|Aj]ԴFRsfh崰g\ot?^ } +}>5TYdxWe;Zf_ _xM"#||?kݖ_'ЮcsQ#)FawmۯNNIO? _K_8W÷*Βj%M:qq疬ۣltTjyme(U6z}嬪q4VDa6]vo$2 O_OVR .mP jۿxwQYgu6¾;2+?Em3\3}ߏÙ'aKS{V[qrǷswrjeKI@̶6gE^]ݕrZxݼG^D-B*mOߩʋB]+[XvtI$Lk$wd;&|qny6rj7-q]# $y"($n̍fo1>myMs*?3xt:~,p}"dw|7˾MBI97,ޤ9;?h'ieEdh=}Ty~?. K gIK!Yۺ=f%JӮ_AqEm_:v*K{=c:+7>$ >y ߽%˻ Z]wvjzu+Os,ܲFΙ|ޔOmwo GW+7HFS\v';!iU]|Xwm-ٽٲJ]3l.{JX>"u+Cp'⎬ia.q {Ykf7O/2[+pݿ6sinov;~+[zu|.׮lA [ LQ2Ysu[^c;_ϯcojg9(RV!Xʕ. l$P(OvW9^7MZbJQ}aCʯLy}77l ^.d퉾onlsɶcWE~bj7]\=+*%D*mOA]yx~͍wd`ٳR>x[64vFv]¥ku~nߪMKcʯs|yMIvQl(A 0[څ{MntVV"ڳGh ;/✒[; ;_sX \[5I]r-Pz_Td >"ØײCc5q]w .c.MB??kG]R_?đFicǭj7my-RXF%Ae#ڹe7^}SPԧ7Ȓ.XXBOpsvR@QN{w٧~LΆ "|'}~|VN-y]4S]_Yk* lrw81v@nn,"8v~~UUmЛ[uF*[%%a-#.tg.]zff̞4u-3kps}3KKw08]SPk˖O6VbbF+Wn}WzvW|}9z:_뛤GRͻ[n_ƝJIzZ׹sĞ8Eb(Byr|>eBSjfxsv\J"?wqkkѥIk96^)hׁ]ª$=v~SRIlf{K$V rvq,f뻿|{* 7wlonTI3s?ʃHe9ۯ6JG'/[˻A,O3빷m?Xا &9O/#=spAn$ei|յ:no߶ *t^xNc/];p l1!it_R#wMӍuifaD{Hn&XIFވ*EZuB?Q{[Qs,m Ÿ2ewUת[:⬼&dkۋ b~Dv->^2,}rtoɥB|LS4d}cwbOcJ$U7&f34̹%Y{չ]Zw4mM#÷l^-Au^EUL,7y_6|2W{/Ⱥ :K]bMI|m>K[.-HbEΖ,.6/ mCIi6~7t sϸe/,0a:~jǗӡsvCߋ:IfNе4#_\*ȓ 2J|JBՒmwX|_:<["_1tNv/yLeh&ǖecw{=z[}>_T5P\y?\YU[vMw&Oyt!r:Y[ GֺԹS2=GV{$wM۳%IhVDl~+9SKPzMiT9^b[ei?eܫfÿq~j u%gQ+gڶ_],~ɨy^knC"Lc̥=^OF׮5/D֞ a5&H5s$^\a=ξwm?̻Dz!s_Mu-du#|*eI<lw 4-I"Y[x:%rrLl{|^߿[S'-< i~"h1 еX-4=Ri!DP=?LJR=~KF1nC3sq3G$ugOs5p Xk{Q+DϾgk,m|͟V_Re+z-4GºSIsy'9imi,fi7F?u+y}Ym;Z 00]vRj}J-ne߹#?E\?7͵~oE݄k$eH||U֤֯68_B?YZ}SԴm,&1ݏ":ݧ4{gMn%c4q|fS5ݻ{gv(hp]%s^-7I#nVv_!浜{W^ew~߭/?X:mɺԧ{{;(XGjL\\ndi#ΙW=rƯ"|P]ͼc^D[h4lEvph >_&1k>wy蕵:qrG-j7"m"ӧ>m?߰~sK%܋ )1S_c}zo%u^e14!i NK[, UmnٶDww{m>gMɷu~֧<_Cmu=KƾεX+o4B{|q?͑gy%vэֻtV ö^_ZjK%=̇1ZRU1>1sc<nJlurٱwάЫM 'Jy;$z *\UϋNPZ y?~OC_۬dd#i-H~_G|OЄE.nd~מ9Y~&1_rVg_?W/ua@K7n}]gBd>_3̯|߹U4׏Z$Kb.ՑߥqF֞^GE:+m~;k~,*2bel~~e}ֵE(_si=wmS.M͹ +4գS*BwN{/=uWRL҅[L|I}n]Gk5o'[u3]N(m0S$˪?Բ6׷)T^zR 뾷<'Lh7J%vOnfmnھ!VM{֍u灉JN߷5d; >\c{*;~֌]E^Ww6se6kUЕrq* wE;XmU6{䎘W}mbZGVMcZY:ljHDG~JTSUN6Eh淑*|jOe6:?=#QMG^[+d*36"b8 `Տ; 3M8ҴY|4gÍGz|qY6OzDxXG6wO;?c1X 4]3iE}&'j\1J:V+%9;ė֯Χg=lЬ$;GH>$Zl˱O5v֪WI'[7 Y_E}V]:}Ei.cw3FiI>˯7 b*=?S MW&g5OOTZ@[R#ڴ-ա_ݭD_μュo׷=Sɯ~}8gCNghm.gr}=zr~~_jocۏ if}?wz5ƁaH;-2 sjc ԯ%6Ok~Bҝ{+~?5g!]FP[O=͛IfPq.T(U|[jZyN2^_=[g]ƽMXq3Mʲ$ZDb"#.q*ФpIOuf8X^Ѻ>akN_tf//_i0$.&>LkUS,:b -;-w~:nEx#Fb^s8( :\d}yg$ep۲A7E1n}{wc<$#.2[-?vvN iOZUI6-v ldIbDzq_ɍZpi]KܞhB n-լty ԗ j-cef]cw"C7\o&JQӓ^ϵOĩQQK5Լ'iOk~t!K ifFl ?T0&뽗g州rs__ˬj3CA *]l(-k}F#Z5?wm< Ӽݯ}m4ju,=:;~M :ږZ\msT4w #|[ùRܴݕ_[#U#Kuw<)oD,(nggKy {渼}[B6/ˏG|ね:N|ͫ䖿zb1.uk~ txuO/mqwK#V|VI[i_%̎>0BaZI/;˕ivצ]aNjIzkw~KO7x~PNZ}[Ydo-ZWiwۿu_f8Yn*O _N]=W򺙅jR5zz}S]x%O֡qiY&ommKq~ehԩRSoN۽-׷~p'8rG{n߫=SŸu:Fk_5״5 n&EfYf[lweSᦿ 릻KN4wZ?;7xGM~&?o}K@nYdi-.!jem7.߽}}W:t_$.qUu=迭>g|-SxPeiK j:AaKk>6iΒKoy1y| ޣsRݥun/uG z_1ëJ-xY[Tf̍hpt0(gh߳޶n:xZW~Aƿژѵ+,ߦ^KCpp>OO;6}V6 n1,􇕒Bu-u}uv>O\BuovxSTh[%v߹OK~O㯓x6ګ9jz &k}_@h:Ʒjh5&X ^k']3Ÿ<~rb1s,^mYmpzϯmgTvm &Tu_7쬫d?ܺ#漺Vk]z>ioo]IŤ^I2O3̸V|_}}F #;/>["_?i;qomgQ]jQC[oh٤nd0+bYolMN7OFJTe_Ӆ<%i^FZ+C +{IE6G}"4rDt&\s+[˫,m˷]n}#'°4k{Fe^LU$0GyӴ6]3=+,faR_o×/a^HX8 ru%jސ?9T}[yycW^wʺf%gaM7Bs^}.4?Fۓb\˧xbrn}..vaGW֚u{]ŭ_7Yx/]mL7 .!DDʊ֞roUyӱxzWfMNT>4k2ڷSG,Oq4}oHܐ.wΕʷ8o?_Sztc:?]CGchյx_ծc7ɥ͹RHmwDB'|xZٿK;o>?,_M&J v8TϪ}fdo2i1clq4f.wnxR߈THetS$2I[ۙw~uJ_.3.MgpȍofE+6(y#YOy F6}̐*HC '̿sNM[wW>Rxt+>{fڌ߻UuwycEqΕJOkL|᷋ "ݮ-txNO~OmRRm>Uyצ Q}x%jx']wtux,m>\-t!~O[jpn[snՓO֠#ٞ(-,bycDqqm$')m6Nsw?JWw3wm$QaE ï.kMS6ebRi%nOpO ӊk-Xw{EM?P<Q9znĝh  aORӋqpd/L֛6P/PTaT(泟]$, @M޿ǻh0_X[jr1~z Rk$ n R-LB n|4_3w2rowڔ\9^l:_`ݻڪ涧u9?&=`tFnr:GStӍ|~nݿ['޾ޔJ6ob$),^+H%dV2832Ȫ337cƛ{F\WHa[kq-a?\ǹdU\IwY>e96{~;<}B=b5@H+Чuz| 7o_/y|dxd@:no5''橧w"z44JCyi\.wG[3+~cfd̋Jm|R<_cLf{fshP\r~ Ȫ&. zږis}cmmͼ3qpL~X˳mY>]wD _.+M^حG3//s|gnkɷ_*z]m|&+M%<ח/1Uw0Hd|;hBN\V [GH0MNobsI6s4OxuZYOErc-JIy GY||னӡ(Spԋ]zΙX#v>u (PO~smxRd}o⒧F BJweܘΤ_ɟ^FN:e oyq4rIVvf,'VrmW;͵k7nGY9%V4y[;_ ڟ\ҏľ6'毥q͞Z J6[tzc[|Z6 ;QYnHIg+~{k#ͥom>SjϺ=hwyֻWG&I,툓ySli9S翭qUvG]{0mjZڍ>XInahg5P Thy?5+g3Hۥr*o2E?~B}<䥶J.Afo ƠsnTب1$Tn???inJ%+PsO~WKil幓EfnsβMZz$fIQ7$OIgs?3eMhq cF{*27M{ߩF5z .^"74m?,~^ԯ.6w6wFO +6,7E-܊IW eLHeG٧꧷_d֧LPu |šO(`tڮ*ƻ/.yLf#7&kj<>e췿[twu+[5ϛFdfݻ*ͷw,ҩ&7P׷Ogs!vbW; |ߎi$۷ۺ9O-F1qdF/s}+r3NKm=-mᰲV[x-"2Xg?cV7׫3;/Cv-1UW# 33\3~3gtros[(bvo_zp}enq\'2SwBW|Af<>Yv_qsvq6iX+KhٙYI4Gϸv|Wm/G^:KBĞ5NK{{=J_#N[G͉/7:mػwaW]r_ YjCmJ=e&KC?<Ji+|I;_jxW]֖4F۱{i!M#n4?#Kg6l/{^Wi .x_Z[i^[-:-鼕Di-tM?%W~}>УjKW_7A? /Ὲi}rG>/{渑rI7omRI6G%Hwx*${= go[GMhVPkdF\^JImΜ}NIႂ۷o=+moɴ#Rnu[Il̂|LV?/fewfcѕajko_I= @ ?t43NNu MҮ.y6IpcZNZN~q%WJ&<wne]{rWUHWg.n&{kjl Jy\Ζ?M-)/E>aDl4֭1J\ӿrIeP?E![_*D\F1e[^Y~{%]?''_>@OWw=1l;+[&m^ejOiՔ^ur)ӝטtrCexm.Jnܫ)%vsH񯆵cɭijm!m1#3o2ew>JNrտ;N=Mϸਙ`?קן%%&~6!UI~o䗶v0xF7*HB~o֑n] Jo ʴ;I'{ydZ7֑j)$KvjvaP yS,k{'gs6e?it%\5ubq^ˤ]"^YDK}xYYټW?Y]~kv1I d~_緞#|mXeb̆F>e'|qF5lw:i%_EpW3 %~k(7}H;2GATn_{SU纜p^ܧȸM3|Һ˙ufW^kcgYK*8P!g;~{+qfޯhOkiuq  dy7nXEY7HX˱|6A:Cl;/Ibxo9jh4;+?FՋGQ,[ڻw7j:Sq4Z%Sfү o5${Yr୔k'/>ׯ9i$VEQfa3|[W.͕Oľ [)˷y/needm$W;˪G_ +%/,ؤZ7ʼYd;/:mwއ<ַع7\Sk[k54ZOԟAZӦyf&gX]:ܿsڹ^_mk}=ű'9;kʺƙKlJ4$o/ͷk6~W9ʰh>)(';{o5k[k5kݙmlvw|ŗ볿6Z)/}Tg XH2wms|͟G;JJng59xIРr4$VYoc]HϝԘI;E}~w<橧AԼE]–oاf7 h>yt<}o)$]}?S5Kiu[Z rI-mfe>oVտ&p^}RˏGb6 e^h3?֠o誧<ێ0>o3_O"RDDߡ;h%UcQW9Q/Inc4ƤI >Gowؿd[/ɔw0/ײJ뮿bum6ỷyiO*ŷ.ܭ~O~k_vߩ~v|}Of$i0O`jm\C$"|l6 +J?=~RM۷["Ek6~%[=CG<'Ioaju 9!Xh~Ϸ:FoH}v斷m>L5XA$T̞fv¬ۤ2&׮M;mTI6)sw+I=_1 C[[c;~o޷E?u]WuN_X=n8BefVog'dy~#m2;)Z=mwɹSֈϩoi&+YQm/'Y>fg%fLu9NXRi^xYe(p"܎>\SW_!λd_i6 ++ 1;IZDɧMgmܑ+Y`N|EMWz>M9y\;?S18-۟sk;մԽGd6lk[䣢_-nž"\OLw)_S[_lLq7ݴػr??1#ZNgD ߼=|?mO,]Ko1Ǘ7ȳm -u}O޾}w}JRtca9[N)-v|yP\B2o7+ϫQ~ҿB+7k_QZ}LxvAc&eվ74xg 1$-y:Zls7u) jNޡ \C6HZv'6 д;-y&ϓS8yڄpZ٫j%;裊ˬCͭ#|ʳFUM0h]S:B*& Q< {y 02[w7񑃃$(^Oצ-^#u=1N]~+wo9:݆$V-mrF幸o͹;|AwښItG띢VˆceܾavTݽt&>NzFѡm7 J5eۙwޫ^˯R9eǵ{&$!7qEg=տ 7ɗb>9-PuO>`Ú&}Վ3kY5̚;;[4vYț'~c$+۶.M{w I|gᎳgqk2ѯZjYC~9ϳ%|H$F-? |rIAxj"m.ニ[Y$Yd]O'𯙳'U/z_\]\J WpGiẕ̌%03.Jj2j*Oe-j ]Xj+aI'eǗݻw~k*/CXE|E#w7)%{f_cv_)'wz5#ִwkXwFsHeVqj,n:M(|CZ! w,[VY١7Bʃ W{}Tgegy"VTp$jࢶgϵv)4)k$G_j qhdLv?庇?9SVDGl-u euf@;3'o&P[Uz Zj\ҼrZ ݗϿϱVwfXQ(u*)=NԄщS'Wwn~M9Ӗiѣ6#Zů$ѣ6Ww6T`g֑~,i1BVXU;faNk`aOnK.#<H޴̗]<̲2". ;ǖ}24rZ;w/;3Q*-DZM@5l '>^2}5o]xrD5 &-mѴl:߷rӯ׫|_AW4Oƾ0Ҭ[qN`ռQok=?Dno2= $yf(F^_-W搽nv'ǟ4nE?K%rtQ,\YvgmOLᆪ%)K[ٻۧ/ZvxL@Nkk8E!eE}͌e2~'kΨE$>s/ҝXi̇[ ) |RIvSѤ--tN`5UFu5̓|鶳k.YtOSW|1.W3E.Uܳ"2tw'sPkeǿ-Gƺӗs>SW޴`kK_J,H[v3o?5_}E6 V v53V܎*;^K[?_"[B.<ଗ[*pe9Ʈh]K.RWl0bҚ]M!ti ɃnOˊ'[{}K6{_w7.r!J01~۷'?p__m2Hu'?+Ld"nr${V..lg;xtL;o')]ks>_1澻6m?:2',~zi#HǖΒ i:*,H$F~},M~}\GBWj:ߗ돥gwq:.YUz`Uz&ⴽ#ߟq eg0[8dRF=>o5iOD^֤JVy_݋rn8v_ɮ}t}oo/m2:r.Hlqno{WRwI[k[k/i0sbT|oi TONŮQU,8gG_jz4N.6/T~?Jr/҇(.0 QK^qJT`w$U 'mˏw߬)iw#ԭZ[Qw62?ߍT4~hV[2%ci~a?a*soeMN'S#ݤ5%V]L>cmU<;zZ_̎wYv Ȳ"Vؼ41o׳UJ.VNiysZr`LWeVsWN[{{7$yl|V~U?T_rcv~.dRW McԊ|.Mo_M)Eq.$aML*j%uduegݵe&Gav\ <0?23M=OxGGduKig]@q%Y$쿻q|co5VV~^ig4[5xM{3FVbmٲ't.%nł=$[kgE+DHܿ:2$UtvǬtRi[ 2@xtsCjM>aڪI ޓ3\A>R}VOMjGWlZC!հ&֍3Hz'Pw[)]jz<⶯g_;hK}&'U%wI$mmfOyw6P澋mR|2 FFS-֛ͲK}{)9<biJ[[g^OrؽqN+Gqr>s=2ZG6C%GT֭odMTr4yRGDFn &_m, .akvfe%s>J385; 4xmDs~v˱6 o =_tuȟfi5],2}3>Z 7w!m>@-#VKo6On7ͳvȅZ3CQKu8=cLռ3˨[ .Wγw,۵?ZO?6'$ӦvK1 U:jA'O-Ye \1F۸(vVM4,V^xdݵfeѮsܭk/Oğg_Pز;[$,O]ߛ_?:o?"k YM扫im#؝0@&ۙ~6>oTRTRqe6yiwu$xݖ(۟˗blމ\!)-N%H }Gɣ|?:⹣'MԸ.HI(Zkz;bJOWޏO-Oԑ-%+ e,Ѳ7,3_S:xԠMt5OjagN˵o&meg9iݙ‡1Y_VYJ/!N)Ji%zZ:ee8xai]HgI̻Yzt*M+~[__S8༷So "9(ه /?~JM\.y:+jujj~44/+vm~m?'<%NkU=~}!MG_n67 ?݉meM˶=[NXbrW7_z.WYOk*T).Wk32»ha~Du>\n+gsm|뾶>:R_^OL<%[MN//w NcFo_篛,^6_Vq /w歵4(,E*S{n}ǯE5KH.-n>lxVnYeڲ?F>I$}͆( Vryo4k~cik}Rz|.4 7[Oozqe`.<%ut?yɎFY嚢?`HQM)+Iyy)KT{y ^$Vhc 6]<{ZHbe~Ӄ[۷7,ƲSj2G~e9|O=%.|#KlmM>YF6""l]v?y>}&V|\X-sY_G_eJY7u/.t7u?Ϩ@מ)ᵸ@tTS+ 3*<߼}y`:5[o\N*WO[-ݫNH:i_Soi~)GRH=]K^y$24*ni܎I$}'G UNSmWu~;ΦT(-ycߥ_~0];Oҥmbi̞tA*iM'|ow?l_ukh^?lSkU=Ekio9%hE"6ٚ7Yo$Dx,j߿Umt*a[ӽ_1qތcMKQnVYyu66mi-?M3[2 Nn4 xխ[,5gSo}e'6;oSU5կ뿩,~Ʒ_XXk{=Se]t2Yȑ[;NZ nhNo?Qj7!G{mFmnӣj\m3y؞W$׷:iE}z뵼nާ}6|W bK65xRPv}Gd-"Z:C}u5>Ok^%%,us-ڜ6ioj(ׄºѿt9Vścy1 g찰WK UCZ44>_[p>3Iŷ>5Og:|=^f'HF{xǣѻ) +a2zǺ%tZZz]<< <¯jj֗|)_xoW,j#_Sk>ܗV \"oΛn$"cPQ_U;K[i{nO 4dKz[KcRֶ4=GǮ\;@VFvNۄ48adtwwi.$#A)aNx|wp~4z[M_¿<-'ö:oKGuj7Q5VԸ&ݟc?0G˿av"ŪC̫~> Z&cqxVha+K[{&$EW/Z?-6|g k5}x|2oz}{ޯ[\jw.3iwIo$+$+<%g[Z=(zIgo >m#Y_ZX_H<SZu^zyf3Ş5R^%Xm<Ǩ ʍspZ7Ko:/$O(a5}zui9kb)rDo7:7|71[&QOt/&]4ֲB>}~|vЩ*[Fn0r[߭Ü~o&4kTkKPz6l]Fw Yv<ТoAronWNRO݇ϯy†+xtP } ʳ&zwcz4|{0j=>yxGXw^<W~yg۪ܒ[_xXeXhuUlnm{|_]m-E3V m-晤 +kU)5i?yX4_?1uˮmиGzo^Pԥ}@q<3Mkm6#yq7o.Z]ϣrOh ĉy%Oul4e]Ahw{r<Ư'UJG>}[sOR%b^_]=]jڟ3,+"?wveu6{v[[ynOW&>9z"W4AMnxolndWU_-v}1EU]_߮('~_]orOFy'O.oRFiI<Ŗ6;FI'뾌iy?Ho{WI9;‹$v{Kb&%Vk淳rG 'ʿN\Kc#5okY;v 5laF_}+*8I5_[*5m?×?|]_׋-4{Gд5 IL襽ľJclKY?x)YPJ)G}_-KSz]4}]4ե4]_T 奌Kiss4l&p#/ɱ?pjU咋P[޶\U8;/źOeM BË7l TՙYZo9#} Atɯ;< ~=Fn1[O>|~$h:Pp6l} k6f# gw{~9l:xr)#[}Ϯ\ _JN}|G|cf&Hu\4]I&qGH~o/\-QJk{nshG[ke;࿇~XW/&Q@d.Sno7$z{γ٥I&*;|=_ߥF0/N>OA] (޿zfi*${JMz''@‚OXVićbsˍWv~glӵ=/l]V;6%T@&?SN ?do:Vd lc}ՂMu}I$T7}nUm ;g.-nNιݳVn/˓ 5>qͧk>7`a^˻9JOs4+>4<>i{K&mau;VݞHsl7[“}{߅}WS6i٭\nUU{Һ8S{i՝V&i\ om~m7W=x_ɚSoUijZZ+Coq>#1[Q7Qs_3:xo@i|I}d1ͦy(ͷ_I'MT~k%6^xK-eERۭzމaVF~艱7NPVn3vCS׼Yx4-vV ]cm>~N.c4ݭmWk~_wU߯~O^=%èYh\ǩǤf6&Yy2CsЉ|1ׯV(rr_׮jp*򾼟woKVZZ$|12[si܈]6i#Hw&9hWJST掍okz;`gp#z&4-M Nֶ澒|ڣuo3:pD5DWC:lgf:͵_[ԖmmtK"hLj#dv~cn(? -!akeUj?汓{{5[Zx:i!G]8X֪\v^WWVJm3^!n6w&W :uO`<){\ ;T,kkIc'M4®vE"pNww5}Q]A\Zol7SC;yr ]/[].db;<s=׽4_6xߊN^Z7r^hYVO+\d}>5I-OSi[lzƭ_|:k(a|1KrmUXu),Im7v?ah˽5BMRӥkni*o^ϟeV4?rCQ \14nu&%ūyM#%IpMͰOfw:z:7_}MWGTcjUfn Mcnp#foi<$rUa=tKϷE\/-< i~N]0<;CZnTW̗<p+/տKJz$M>awMI=nl%I!wm7-)GjLdyGVf-wUɦmZ刎lb?M#k+=;bk*|jMʹb4DA&ؾc [;ךմIj&]?ίv)5Lq_m:8"Hǚ-dڻM7ϖ*%VoRnY֗7jW6z,?rȲ*b]X߾%yr.u;v7HFIeY實ɎOٿwH'vV~k&t%/^[, et >U~owaкo]qpJZyx6ߺvGZ3CCpS˂(Id>__֢Xq+I{gxrKO(-"JϸCiwsϭ|sOKhEiVmh 4sr?\NRNpImO9WWsnY"JU6fg}+1'׮_5@&Ὁ~VJj_%'}:u: {}Rڶ|ts)oolw6z˷:uZ_Z_WI-6vfq,QtPdF_?7ZQR3Iߎ]oz{giu~^qz]RIlYѝoYdtr,mǍ]^(7?˖ϯOy棪M([hnҫSΜ[/3'9Ksז+=ƙh'Ibi-c1#\D*>}k_=?gnO=x@S3DoT;[=KT^Z l7$xx(8B\Q_>3|UW;5uv\]hwVk$cg4vqb cS_GUϧz6fCu ZirdF[_:HdT6uE}hW֍-{Pֿ[.U3lM#1Z#{w6 waUUwPM7&de6 ˁw)ϧ0߮4cN{hUyY۴?NkXIEi>i!$ÒFiHtX.F uoHmS_BwI]}_NTK-ok-dXo28t&tGtu"oz_u \GlHuoG`dtU[F\\-[ieaQY;lm*ݭ뽺[={F> ;s멇_%vֽtVKwq矽nu{O'/j׸g>],iԟ]izAa(x-,r"\F۾om9'{=swaj m6 1鹾m{䢝wrɻ0&c ZUn"67"4<"Hvo}Z\Lo^ZmZZ. ,W2'q!e+?>k͛UKK_^Ncdv2hf j3BѵJVZfZYo=6S$~cCJN}O%+NC*W{}vk@.4mtKȞoN^XT,s|ܢrmRPխ`6Qbus`1ۓO/ezm}w)>iR]I}pddVx̑ O1V9#V#$~^;zouԓϹD?s%j-I3p,VDr+}'ʿV lǡj7Fj#{l(2Vi|m۶)+keީzڬv0Xk5fkQݤdd._y'x.?go'ڋg >EX6QO鞅ijFC؈^wn`i@Fqo_i^Zm6+3j\,+D/̱PƏ5gԇK}jZ"TԈ$DVeWg~\]oW9pJ-?mu!MeF?/{od۾ЗgBdh^GN6M?pgone˿Z[H%u+*VDu1mɽ7>zIWP-M$HѱlrobkYmezn.YIjmun."|SP[0otW[_u5z;gx)[yXF+Nl5=b=t{f-5 fHhcnu$8-ݽtVY3awOpq*mն,Ci}s]0Ϫr{4[m6nmn^hf-ȿgZ|̈?3{Mg~.|Y|G:-/(uo6V'IDci-{,y۟;e}OFz6pmޝ|3Ԛ' >!kw5M3@U5\]C̒I 4^\Zo^e n^WK 2Fe, s}[kuf;~~ƴY>Ҥ˻a}UM7MtwZ2䇊/kSç~#&zKgs t;I!]ʓ Y. ފe=geRH 4c?wҋ[03eG8*;rޞ#_4__O̖8bݎqs{>Eտkuʌ޲.[? lJ4h.Ц̻P5ンኝ[IkNEjo>.êiw@ƭ/硫DRdfo.mu?"}~fԒ\S-添Df_^uoSľ#м5eϬꋣu< 96{aDۻ#$g)scxE<x~0AHDs24nN)"I6 s[o{+-|c>"xsMu}w:Fug '3xdT;ɶh|mKeh[EJ\ϭNi|7/xwK m<֐yjJC$ 2$3owD}Δu F;w}qN/4SgcѴOvjOIY_I%{rR)4([]_/' MGo ؋x/eu.kV2d =v~W<9Sң|]}#0ѣ]Guno'̍-,9xG#|_dk4gthvSyZ5&]?u ڂVnm˓|~wϮ/a(_ >jkvz&}[T$Do3]+ϲgGgUt֫3T=N_F<y++$B7hQdo:gߑ|a4&D6?t]_l%Z|ik+/[X+<ʨ3{"ÿ_ߩ<:4-,y੒UiZOe^{V<ҽ-*Ki˨[ir_|,x>2>suj%wco1Y-*ʴʯ ]5rrX,&9mY|~ޝjm!xmeDbX|d96& j[!ḭnmNrHѪ,x', kK)'(8ahymo) GUfi =ΓP%xoUԼO/K-`+I4?VIn]YnHi$$VPTލ//$X;s~1G=߉4W_ljn-gFn%n-&xE*fo:N4{|vprRN; 7-|O?[63c~Xdy7#9~v*NW犇-ƼKuɧic:I-B[T!k!ۿ{=7tIV_9\y-,ZcPffn=0j̓bV?}߯N6[~o;/xMw(KegUYoFE&ϗڒEߗzfk,[u Bws[juCndln|ܛ,SՍ#.cu;ȶ '-"toVp )/ݻG{}?X|OkGjAlRWʹw+Y}?BϑF.j~fGX[It _hGuŷ%/OsmTk=`Xlk{z{t(4s^ў{dKԹQk{lʞM~Ugy߱T~m/[2*KC3.+/׵2*]Y?; <^degf\qo1os3Zs]k+>#^y-nZΨQW#u˰6&vvDO_u);ƾ+< ]Y`4t}N񕼻X|x]L"ϒrm?x?ƿKsK~#LrLȶh`4O->M Zz|hraᖯ}c["k5YzyQçİ+}oIo~<qۿWd|oa/ߋ_!߆#-A+Ylፑ˻/$xӜT}̘'=Ax? _VM߃5 "/Oeu{EμO7k}mC 6Ͻ!4_Sa0ujrsiv{kt<'H|7]}&GVҖ+ͰC[wK8wܶy%W]ן3?ߦc^z~xঋâU]Gq532-#L^?x1QE[{ӭ͹= ݴs)?]/QEhb+[?3;gۿ.Kݵg{f'?t޿tKER1gԮe"80u I/o&r͜=Dػ=ܤd%ԗbi"Tn[nپWKVEdwo$ѹ=UJv]gu7Qg6U}Y B1m7Cohq*0m.N?iT赱GYQjq/$igYM3h+9.ܱIpYeznk[ ̫&wrQ7P(]~X;s?/~kHWK~f+I<@$Wt_No~1;;rxˆyB$mwؿnKWә^~ZX̺|Ĥ`i̻c]4ݯ_&rjXm^R$/2^?5"e̞L62G- Rm{_+)2Xm1ʲ>9۔nQ$jl9 ͑Ig(3p[Ͽޗ"6W2H4VB$R}Ҭh[Ϝ_Wf,^}( n#3wOִ8륗Oǽƻݩ %Xq ojU۲ NCmE%Ԯwe ۗ dz:DZ;~uba\go͟ҳT ondi܀bݵ[޿֢1 w{ɸK䛓ȟ7'[B77{lٵerX4BT6_\ׯA8bOG k#^7ϑwȲ{?PO~^yEJZF?eio|׆7 mlԕ&B7wWO@]J V"dmoz7N4[w;=[[ޟݖ=i>{7&&a,N~t.t٤7zmZBl6e]t].o${~/XTIko3sewlҰr+4[k(]WyYͧa-=ś\E !q#4 ꬿ|؏eRr]y~>drk~JkjBEpvE$r#7.wDs<Sh[3<o–7KK~oC@$γ*XaD$~t|]|1ᫍLgw2_HY˴Ȼmy4)fְm V mcVceT­dʮ)hOxKmr[HOnH5iEUϒcGHнc?] =*x44Y/Qv*cqj t'a@f$~_g5} (jMYI9WFT; óʾ!3jڝ֑h#%f݄Bʿyɟy{,S[_-'bDhfff4-,ne$&D8׵Si:9OZzLZM{VjOMAZ}UO3tNfp/̿{ۿ5ՌZ_yi`I6ht`-YnNu;_ܭOMh4Tp w=*M"ӴMRP^W{LZ}ver8cU$>wf"& u6-:[JC,C4i6?|?1ΒĤcʝ7}_o&-_wxF8Hu s^Z* 3++6~HŶ֥E'{j+l}ٿdgq n-B.8+{ʚMC!p7N4k}D{;Dz|u i_ٳg̏kh5޷8m7o=r/.".[{ t<+۫tXtsLe4yw72۴i7OiZg}揁?Xj:KMPG^# W*nWcB3ԭ?|OmCBQHeqkqx4ѯ޼5hMk3rr-o|Pt} r5H]ȉn{Q4~ȃg?XˤjИ -UUkFWmxwl%xFt{acI+5$_$ٕrK񿉿76KےZ^@srmAqI>#G}R+}Kwo]zKx6+]C>3\Iusii2,} yuCXϚմ&8=v9<+ t!ۖXnV=D4C楣k"/iwq8-VK6gV$7sVz;A `ɧ.!u}^6d$R=ZK=_ݿNo`O%X_G7F;dy>DQw.OYOBog=5hk z\&˫dey$dک+H+qktZt{[$֥,mFc}fΥ13G?k~ӿߡW|9Ptj.Re>uͮ$Xc6ؙzw{NMm?SG[NHFIC Ww:r4֗C+ZL;ʒ+uݹ2ݙ6ܰBsOd8+O|+&"DE~}wXL#%Y?^O/'IMuwkZIS5yx"Zʩ,snn- _&o;̎d\48{t8x/QoX_.s;Tfi&~MUvulO/A|&au -ImuJOk{$6K9$W̚wO~> Ν),xSjrw߹ό.k,4B{edhyq~c(ٰ~~,*K??cҭO^޻>3g-]-: y/ƎW!o+豸夢e˭MwYtʲnڒG!S_K^QW/M<;y?kzM-oas(ZG2;_%f-#쮟dB .;g7u竏nףsZi|^ZiZVA!#cU|$~%ɾiOm[u>!p~Ӽ5E/$Ե&#[XUmy#H_M_- }YU&;{My]O-jWxoMæZ%R>y),+p6֑l8ҹ0gIsVsZ1\ӵUwz~o ֱroUml̑~̋fwZ OsQӿK|ˡ Zk]OFw5ص4}>CgY;hUդ-|[O+SN.IiwW綾ݧQ]^Z~GQuwMݝa,tS2 {ڤsz;ҝlsOXӣm~~^hrJ0&r[-o7;?t٦|q5ԲjUPN&4kulNQ.GOp?9[954^^ j:PXmmyo *qT}tV-:t֖_swÞ0%k z=ѾܲG5Ɵ I$xS:E9Nr_=UkciZ_w]xg@ua}#S5l]Hr2&8}-zn2Jvq,o#խ;~'|E[[FG/ WƳ i[[Vo5G9^708ۛ#ϡBR~|׷WWn㟆`ZwuxٵfGkS47rGo"}CVt&۾=͆\Gy> .a>#h5ɫĬן`Ot7Md=ff!E_KROnj9{uL,S[5#;MB8lg'E7 6ݿ&߰t ZQO;?sEݮ=t>5O +Gt4Umot7NdkXlM70ξzWg{{?#U?-:gόwIMH nV7o5k#ōLcev5] WV;wjZD _96%m ,haW%i֖y-gwabZIqjP!mHv+Vo3v'O߮j_ |IY9JїI$,/o`'9:t׾ԍ:~MMFZ4SLѴh}oYl+$#o3SQ暭zӺFGiKhomPV6q_cRROqM]/?O/Z|e[+2F:x%y~Y$۲YhzɪQ>Lj߻g}+^^+{km_:%:r_|V4)#&o^ı-~0~>#dԾ!Mƻk9#f55-;W :QPoJJVyLI+t CkmgfZY$h٫47|?j骍E\{>n6\޿;9[S 4nOof^$^jZ– 36˛?.OGI+jT ڥT~ת24.iw5~oXEśEjPiBi#[{xDL.:ܷObpERKkyi{>ݿ"(u]ݵq|3{sXN o 55M#G&?56|߲ϫn躭u=Juci?WC<𾖒jwVFIgmcfvhVHm!r?)F1獞ϫuԗ÷7|^Dt7T-c}s2]-RFSm /78e$F]mvukS wV'e+k<>!v!};@[k3%w1o|@NR>B/1z{K]!c[Jro5I}αTc{uno_?xnG𿈵/}P.Khno5 v$hkyXBƫZN jwޛ䗟>X6&p$$VxdQ?+ZX(a)uz_|N䖚v}*lw|̪7UzfxŖ65˥"m^HT.֓lqlȭ?zpnR?S|jn5#T+=~o4wɲVW $Pu-h0_S|Wdx~[t,;_:YUddza;TGz|!g¹f\@n ERo4oHuSIT?u̇QO|%"+Aީ!Ӵdm꫟7?WDpI3UdZ;#`$<ˉ'yG#GkS4S^񌟽wˮ}_%ϋmB$]U,Ih#/E8[wn[}5L[JZi{x;[IȿJ͢Uv:Z/%T3[A:?3VuM?UIEnޏoC}+jƗmoŬ\Ůh5Vy8hR޾St]_Ms]]1N,F1Mo 'ʻw3u([+ugy-*zuԗiQ:z4om3)^mxʼ֖84wjy>&j^,f7 >]kZIU:s,I<έ: "EwȝVdºlrwv0i1<7*&:{p#oo!2|uj_Mws{ zyլ(2Hc*ϵgm|tി#QoesZ]խOuZ};8fR?3y6pzMJmo.F-S|92G[$E̓ݵ(Y/:qwQ:{><u?eZ&Qo,eeE#(b>m;CѧUVT-5MBS-l2grc~i{*K蚞6c̖'ʲs2uW|-\d>{w>jơ{\%pOBΧtsG$lt,r>RןoZ'Zm:.^]j6[_\_k4tWk6םٿU)A/ M)J_z۪NhZֻuZXxhf7!GweF-f3eݻ:WHOo5]ϴeWЭ*",co] nwlm޹" v8@/gɮǢN3 ΕeԵBSuw: oL Kvnfxhx\.>šiVuj0H!eoYԒRwFѥUu׼bv3^i*{iSIK}Ǚ$iN+w4+-,b6ӱ*r/+WTk4VA]\˩YC~$ht_MM6m( 3r"ٌ!6eo#R߮ߩWGixnv [0il FNՍfU{ww,xJj(Myof 2/4Ǖ}@?❖L,̚ka g ?Y>fog~KQ[|PE'{k6~*H/{[dlb:|V9?%tR^OO;tTB7~׃MG5k:?p=͌KڵJnƛy{#q֨޿wrjB}#tm"{O[Wm_iW6QX]6(]זm #̒el!؊ίO~:6smi#F@^vַ7}~I֣;4V?fb M1XPsmO5j6~`o茗Vn ٓ ?Z朷_S?g:B( 8m @c]BfmqWğB1Ph+{kk^7kC$U ڷT rK'/w8 pw}m_.dvwzumwjVm~Wj_z?S~im]RORYCn'ln\Ѝ_Ch7Q{{AD)=sCǼEyQ2T7Q_^?0a/᳆B\r.|ZM;L=sjzMWXmIy4kM*mgoo6ϿOQƬڼٰ61,mM][b\Iq%Տfv< Xy$pFFOˣK_u&֓S.nI%P_kawC;ZW7'no)L Un\q7Sn?z݄з5W亖7lc\/~\jŭߥΚpzWMG"V٧RkH5}O;̸[{o9Q! Gî -o׹Rn{;X_cE,oԮw뤑Us|qc-"Lo?cEQtkV52b~ .SJkGpδURa,Qcûk5tVO[9GH7Oa2ڪw׮񬢭zK{lbcgp#&)"dn֋oO:lunrĜR2 uxb21̞\j˴ȿ3|ؔޯs].Kkm34vrjkco?z]#u_8 Ke:J:]S̆O-dl?>+~ol[$>˫1˻mo޹3jq{sεXi|6 u;cu2)7ͻl!GGoDU勵 kj6T3j@OfDL(j"?ɽ1޽:黴SzɁy%{fi Lݕg=+8׿vN>۔4F?@IcO뻷$Io籔SM|5][;[%Ɗ[hoj~>7u6yhz-;S#3c%3}u*si e}OH4Uxypp[Y˶ߙQW_&mz_ޠqO+ychֿ'sdAܿ9}"_ysnIn"/ueو[4.bW/ѲF%ѱŒ9c}֟ތfڵrյhs%.*XoqQnJӾ廹b|1vLcnnN]>Efԏ9}hyĚZ6^P{~z]vX|6*sW?UnwȘM-ۺG63n⍷|Ec.>O>м@<ej#-tX7BVPfv|Kha'$O2]5tu*RZ&w]B38>ӵDMvz}9ḄWϰf؈@K6g=vso+^lsNz?A%/; !>V=R'j:_ k-Gݻ^zmhD$ok{VhǷΝє߮z7'x?C{y XF%oh?_/'S7?v峿 xфvm#IU&w5–S{wߡbXBTsOzY{__b; FeyR6w-H[>u'sFFV_jkUKNd1Y/|<_+׮YM >eش3+zN~fZr_6 y0v+zZͶߑ7/lAo&k:=w@< ̿6ͬ++2|\~co'9sX.eeTAok#^;*#bY~eoh3zpYB o=khSZ/׫ۯ๵kfޕEe<]zE[[/4 [iL-bq M3nudfmYg#OhY%wn;._=/E̒-M+K/Q[ V{}`ە'WWWṼ(k;?|?k%ţ,b p߾V|9%Ingc_V7KȌ;?}Ou$_Ҭ.H#zh3׿M^L [nvv3o@<F`nR[/57rIS%.by?S`ϯ?TEPwpqmu/p}˻aO9'va犖ӻe ==+e+=.ijr{?Wgz2|D Qs~^st/q\ps#'ڌeYVfm[nU/6 B1\rKFnQQkxr..EӚ%uʌy + d#t\, m"wD߭(olieԖkmn_NcG5Ky卿B]oNw>JwBPL|WQ iXEyy4*Oo7ʭ匦~3nw{^M]~?qSӴxZ?'{norWn?4¾=7z٭,n5KI̅WcUQ~w؊Vi:(Ӹeʨwsݿ>=qP;/,蒰wc-vޚWv3lMbZiHO66]dEc[w#µ**ϯy_xnpxoĚ|Sͤo K.#eGn~GW,$elF׽MGYKn{uHZ˒gftQ[VkåRQ}3o-4cWw^!zieYUO)$2G!<ƒ[m~}nß7jwxGǏj}P yfƝ}tۮuմ$2þh~͵mo˪3]]ןU<ɸ^[_𶇘h_>"mz-B Zi ]-W̱j=5_CA(k_[qמ4y^;I:mqTK!RCṊZ7R-g1Wiە^}ۮi;&γIDYJ*[ްV7d?}۾eVrl<̖#ҵ?A:V'1m'Oq4Igy!u%6^3XJv{YPUR \i.ceR̟421uvЯUUOR8EV n߯|^+ӥeC ͥH< ǘ;^do{-d4}l~t#*3_cWN\sWs> YjWd4]}6>oUn^^2mM$n#1<,gO2ۻh\gvBw_`a'2Zի~O:' }p@iA>wszw6>~znLNy,$,vUoƸW6o%. 6($R,wI#6ըue6F? %-&)YG&JۻzLy%3OF<.BFʷ_\i/%i/*ީ#AoM[wϿj>{7? )o//-^UF6bhbTyI?fī^jw^l:9l~4-9||2G؛&Sq;޶*)]+/63|3w:擤 FOHH[ˑeO$AJKs٭Iq-]8Su]Z*&e>?Фu) w&6mJE6[pP1^U?Ț֝ nIgheOl""[f֬?~7)jWsctLj iU}Zߘh{:L Ƭ9gh2ʿf?C%u+u{>)`6{8 7!Fh]$%.-<1(y h\m(G4rHWfyŖ?=u*Qw3_  uոaVy~#kDVJ }dO=u|_gmЮZ-/S{MQ Y͟)tv_ojw:Ԧ,O &ݦ;ih#$?'5:hNTM٧n*.6z?[{E |+~a9.OU$G Lv?$gP{گknΉJ|ȟz^ڮ}U.lKVh<-xv{| Y'u%gZ66y鎧q8S4̰# " RK*6}k&F鴟i6nz:7,lZ{{'dgqS~ww+N47sIiMk oxq ݗF)t~xڎ]|[\ܴ*YaRJ6byGssF:_'ߏG~$X w;e ʿ3G;a,.4BEwɪ[]Lkqny&RypvtZMs(ӯ>%ִ~ iV;k GzXqm5ZT}'!DDha*ӾWףO+9zw;ď֛ߌzE$Zw RJ$+x7wwGQ-Kθ];iտWÿ>6Dݿ7^Xi:qn? 5엒Mg}y?r'=*kt}ymN1oToSx3?'<v>i6s VN\FMx7WS%?2$qo$ҳ"Ir[ONjWi^)~? r5MF; -VVr3yq&'+ɻ"qnyr-2l-WI]^#L$;3?tN&&"GĬ#ilcsmǽyķ&TT;}뮝8^鱌cuE CRr./)8W'==̈AO'?ƺao}5~fU"}.-ۉc0aczNcH촷0hlabӒ{ى]7H^OeVګϯMO!çJΓ\l|"s:oo\ڔp[*vqߦkoSϪĶ֭Au_/$yXV 'Wg;7{snٛE'fGy ier\ӭuf=蚃y4>cM>m+V߮[Vv6ddT0ǿZ&OuSB~\U擶ľԣ=XDb`4M9Tgwxc|֮1w3_/8mI [~ںaM~y~?6x.O|B,Lw7ͷd:S9W[~D.Q]==9ohs &DȤW45_tsi źrC;A$[ʿW}̦bMo`mσaZZ̾!8 YC;?.Ȣ 5+7"?2<g}M 8L^Ό%7ݻn.yyB0ڦ% :t0! "I}*p0hb(/cެ(Aɷ,\/JlɲcYo?y_|J-P1./$771&w _ƽ#^W!# ~~77jJ#zGURF 6Ytm(ۮߨGd68w\nF^Zo.ɹ۟V? NOoWrZfY, İgLo_) iGRѯ= ,ٚ-\ 6o_7~?WoO>?(;>oGmRC ?g=ir3Ha#:}?ճ{.4RMtvk`mFWj۬3!Q h oZh,r7 qO%e9=ML D]VI%mUfƺ qMScMcH^7X;UXzhuynQyFo"1ۘbtz Hb1S6ݹ|[I?;ÛFH{tI9 ]?4%wkgpKfBnW{UU)L[/}r"w{kqt?d_/E`dd;_ۿ6ZN]4կwZh}9-~Ќ\CG"tehȾgǮF$9孢I5z4gHZ˽嗲UJJIorocէUщ1 K`ygk*?(§Oh~Nz#ESmE;7m۰~?fB{>O\/(.24%hWwOp2-flۭfޝ :FdD$xې~Voƃ%}v^+MA{@ or<.w|Ssz>OOOf[i0PBf\mUDY$W}\K8_z1KikSxd$[//?}M'߳zOWgiz&|.YEIhZfM 3"%/ɼ#4'˯OVrI<߆)Đ^7&R]ߦy>Guo hwzjkz1,67Uvw#)';ޫ])N_ݞs걮^Sa4mKOTҦ]p#2H~EޒG'&K&KN1k%!|7^.UrO&|ז6zιjW7^X]Ca,Zc6 ۻYIR[nl\h*Xu#UR<-T)>wYDhviZΟ$"c.֙mݿ;{?|w^=/&e; &MN#X!;og"4;O羻i6RJG/^hŧoWY6muLX$Z_OU}Kyѫ[]]]f}7b1%mɓθ).}3R4{m<ܿ l9/t J?\ Ȯ4CEO/!o.Owٽ<:(_ff[>f2Z,fVI.>fi$UEݵ{Vr\ FZuںC:I!|I/#?_>E{vEtOmwȗRt]o#p ?$fizƭ%~͒Gwk.mKz;O8o?&Ҳ׭<Ś"9 @畼 Xk,7 I"&wգRIM_q`4u+E}˯걦ɨ>s%qXY|zȏNk-JNF߶O^N5^Oᕴ~igO_S۠FoyRMbe)f1dMq6x8:$g-iS{{~;Wui4rCV}BFo<"omj#)*~ӧWo?]K)ߝO_/+vyAúz Oogw C, nw^ӭ_e}TNҳߣs9n[h1cgym-}5Qƪ|fM%|7c8Xͧެ( U.w87nE6I!uwd?:>Wp~a*Խ>9~%֡I_e/]u xO֭,uhmhnn@#I|Rli6U!Mw1yM\FkH'$+3H21v%}SIbڍwM:m*񍕦E3#oUiWR^\ y_wӡ"ljo|?x.cԣPe\EgIkey羅>_Ƥ~_} U1]mN/,n2mvO}Lm1B:oɽ YsYY3->gb(ִcJʭ wO˷NkSR{9ݣO)-c:ѷ}/kiFPW\󔜚ӭ,n6𿊴b|z,5 fݣ?6h8eDV?5a֤¥ޞ]~ej',~O2]iG9ޣ5Koƣ+yRGi#({;ごN!A}ΙICta^"D *M n4Ц&k2ΰtiw_tsNoKK⏀>C[[k:t1-֥M +]kZDn8pJafV߻+;~wjG (/]y_EZ^iO%G5ҘZIO,q[#Z^N^K~k_DW]wשiɤMI:Fi|ޫ~oL,i"$M r|yg(T|lկUyVW?=<]d7gU v'oq7Vm莟O|M…*7ѮMkcbF թew}KGonfJ5Ѡwn'ϒ/~_˿nz N7o*i_+|F ]P>hRq ]+'l2yLQgr :P[ݮ\Ԩyzw|?NgUֵ+LajնȇzGAQa \_{9s9۳wwX|xw}߀tֶ+m㼚5XIIcT8)TOm^IN8A7B9TyyU.<ߴ/jψǢ"#h񵭤_?}<RT*^TZu珍q8Vi}k{o9"uկe6,'̾cM";yDӤ$c.^VӒK[(﾿_SUP-m&XlFƫ1UFfg*46i;ow~_h>I#$B&W[iE6]&*v^_U7<9ۼ2xze6jWIgS1N;皾kE &/<1Ý3K&,b[y2K\I5 .7B]<]#_>jp^٭۽ I?o+wYz,vZ^ߪEsx}ո[}>ݣ:#}TwzkV$] : 3ǨrfwXa;;vEfO2s|rUQJim9mt>ӴXmaԵ FeԓF"+Cx oO?."vm_]kF}z?zlj.E|6z[m+[XOe*6°-Đܳ7PϞNS{]Y[uCQ$M2l˒nވ>/.oUV ]7?vymKP<;uoqZ.0Hn,#x?y+/_78~Zfu:SNӮY7]L*g:/%߯_B9'ѯ5:6NYMyo!Z"JoXUU7_Za犒|W.vϹ؏@n4O|DO,mZHd=۶}D'W=cIw3Xw/Oz~cx,aHЬƻ[j[V1nW}gB}w:SO;Z5`ǟ4{b|?\+di8[7ݗ5jҵ)Km$lG .eީ]?c\xEÿ~MEo=PDYf sN6t&U7b)M}B_{ew 6>^CO#d-*4U?so1])Jn~fm?8uO֛k<2z+YKu?29~#l#Jk]t$$oP%ƪhMRa6_'wwyyJi%k87kš,Or-d~.GWv¾dg=mMz۷<֠uh-5/x+4~e֧4q۳oG"?ȯBLZ[fﭿ*bu>AռT|s< ZZ]Vi6웆_B#5oD>wR>TQznUdSZ=|7–)hƱA#eo;wcB,}kXJkmm׭Th{.uS+_wV./MIo+PKyyH<ذqԝHBrZCڶdaR^2]m>5 gb_~o}eo Eo/1~ΒG~+3luuK .<aӽI9K_ѽߴO-MN𘴿AdH O3Y}O4ȟ+'ͳa.̛p/:RRre]F3}w_f؏r5aBNRɤwk^;xVן|g]>C_-ơ4k DZ&_uٗJPt4]Tڨ÷c\ݜ[uk>~{x3v4 Mu9Fuń.yr4}+vkbjURx N[mlծ/nS#kj7k]iT|KT6Q}=LmwQKRϕ"gfm 1?h_ֿ9GM>3=[slo.[slwĮzmE_O]#Tx4wpIrkv6vomG9/a*o[_{Dv2BWr 8wu"i0|T4nZ/iO"u̐wyjۿ$B;M8-42H$ mޖF'9]_=wԗ8?9둺ks#XZF~Z$yIĞm.;#$Ȳo&D6YS.pzy~!([ϒLgX_g³O1U߹v]}[I-Rŷt"kF1k[B#I"ߟ֑b޽~먥+[rM[H^{VeǸ"o;_f܏ȺˣKK:>/I4 /&ąr>iBUen]._"v[-Wz-3O~'l`wFYMyOTZ]V<>v60ip&?Eb͝7WjG.1׼Z2kvZ2;}*_蒥o>䴍+AxwO%RMb%ne%nU|:]9UVk~:_ϧk#X$1,qn>Y {R_3xp3j?h"ͫ}fgټ p-be/#~Og$L#`3jȈ2|(kg}8/z}?ώ_qcM'hYo,fD~>NE}uc]ozU[b\ޑ}ݾJ˯|Wz;d\;6|gmE2TмQ[sӦk[!ft}6 ?]u_qcm^|qм=mBK<6uM巒$o3ּɷg߹N[+sYsٺ]i6ܛ%9bylA$m:~ZҴۘTl>],4Ƴ_Xp<_mOkeGgkDmN7Cɣ}zPke3mvr~"HT1 BץuB+rVcs|A o3nm]l7ͿLob-330@4"ƍ#v=:{̤Տc 2I{cZZqA 6IҶw믯oe)8ݧo?{6ծACxBcȫw}zmM៩9_M1t;B#e֩r6Ք61:I[z?Gi,^4akkzp${ T~l.ͥ}!HcyyqU$k_.oJ7[;Cx^|. .XihQtyK$ٙ|R9.>O妪N ۮߣ;''o]wC6֢ 9-B8sHMrM-PN;_WŒ6|Yzau3w@(9l-zWH0AO H='&ntVeMLUwqjKE{[6)ҴnwtYvݹw6vڛN7y|{v%dmVMCX1YS,dnmgEm6kT}w~>^N:g4gv@6ȥO-$oqˑv+Ȕ}G#v6uK9Ydp.U9rJMl#{ѦLkhDeD`UfMr"oⵒoO?;ÎKNpVesuorQ/!:[Kd攕q}}? &ʐ0o;?dG;H$=Ӟ>kF?ƺ oqg&h:V]߆빺VؽȭB:eo;y,vW{s'~4[jF ߟ皧)>ǖ.^JQm]e{E( #w'˺pľ!Ҭ99!Fc}fHeXѻmt2nD\.kiU:j^w +c=ZF6鯭Z4U`RFJ{=ſzwn|U[뚿&/C]gg,r^[k?">G6I$U/hR$%_^^WLn 3`AoOoL֐寧. Ka* K/rȍy8yy1NK/lc+?g e[>aԞ~m5J-?]_sjCo㞕=N?¾yvÁ[w\qMY߭dk{}k{Ff1o9 '~ugu yTßn=iJpvy٥weu9(V۾eWW7_{47H ڱ&I/R2jN> [m`3߽j=oMy {E>E>6( j-o4⸃VdGi&MBk[_m9lJjk޿~+_ֽo~o 9[^Zk-N+SV˺|6Gt1D|Ԓ_i?ԹSOONW3ʻ!{# Ek"̾g˻n݇J-k>T>ss$E$[ mfڿ۷o+VܟktL8aa汫뮽6M#.chW~Fm]Xs#m8'#z_BWigc"E, g>7"ݢ|\G+9jN5Hɬrs'}UES ;[z9?SJ*H"fe$ ?9)4wWQ_Cjou[]Ͳϙ햻wMy]WB?GQoZӼm' kۚvK,W[W:2L}ϗ*+Ƿ|ΤSwgx3mGĞNJ_u5chZD[]&8O-!م ')G?'xOԮջ֬q"8y"hUܩT3"}~5Q'gU4IZ}?L3$q]˵>l&mœWtԨD1Gmlu]̿-ӧXOCb @Y'kRg<$ \p|?'%e+23,AkV)-?1[o]wDuw|m#r7G'?k%ὕXZIVi7cg>zQm|ܧlOm ˨a-&1#/?[\=2 GO] /{hmw]/~%[h+ރQVn8ɮC4ȿly`4dXf*|ͪ~E-mw'Oi~.x_.oXq 7ItfɏsOCxxrE[~og5,QJQW}~g|_+xŮ; ?x WzQk#5Fi<(=kJpKTֻwzU0ѧnzW}5?Ad=ۭSLQ49#'}+r˗}-7ߩcz+xj9n7ܿ6^y:R:V]bj-Ή!Z-s,ev$v5WH~]h*iϨ.0eשb"$?!| chw:UEsNi}L&̳` ?IZ*QJ_]o0(N|=FNeU|[V[2eّYkwD}#dؑWU^k2O?SzngE@L?ڏao? EhN^]>sѮtAĖ'zߚ=ۺI/mWn]Gu EkdI u#6[ҹ;XZ}~by[YL5$imls~^5n~'ںv!%[ K֭%F\oDyr%g 6s0BУKp\H;NOi3:.}qmSMfu]v^ԯ~yw_tSYne^efy 6?4F}~ťKf;my:#}Omק}hhjhoL]k[;m!gX~q9Hzdֿϵ9=?J%^ּmEVHe =ٍ̰֫DԵHu^WMg4[MQHjR ̾cHs'cމqi;~]3>x[BݪAqon\Koqi6qM[q(#Y=E.fw-кitO#XYfV{Z֋Vz[Y"V0"E|]8˛~9y?+$PVS#a?6s;jjtNIVm5uGNu]^RnR#)$oɇ'ȉ6UCm}֡ı FX uvzg\L 띿#֊o&e±Fmzu9oX\F*H9 )/F8=?4K`9KJM+#/νVE$NH#,6iۭb۾O8 Oi'Ց&ȑ8vr+tG_?͇<ɯjxH׵ dE]B$h;_6Cykۧi 7U|&u-B]Zn-GxH|呝~}?Ս6^Rw1|GhBҴk^(ul4znʩ˵o&]sm',Z6N+gJ'½?&k3^ҖX|I5/ˉ96/6X.n iz}yT~7gxTiQ>%s%i$3mh:TW޿NYS4mxO_[hzfMq0E؎?J̣iT䞏o_xPsC&NU䫴m;}$lt/ \}TG^LʝKS__#/sռC=ٷvWc&+qt7;$>tH96ѫWv{>=wGOPxgxHV{Uر"|.y$<^ު;!471j7oͺz[ F]3sk6vcNuٞSts꿯U&8TGӚ]xm+i%%.y@=Q('&@  ! "$m&Wo I[syo~k?h㎓Vk]O1AoUo˽tGkk箟Yv_q)64S"XꖞjG59ahqFx${$#O2MoSD╭7Noҵ/ ] 蚅̺W25PC|t7ˆ6T)ɻ]g{>baxZ]4/hϩ$"veX.!gJLț\CHһ|GN|]ͪ\6%Y,vpaXY,:ygi᷽tUK=?Թ6~;if[Ӎ#JӑY662Gom亹xKzJ%+^ϣ1I-m׾.\Q4d6q+mY&+X^j*pH2Dٲ`p}EUqي=>[~[xxxC<V%t{K u[8|}7O%#76{"My{r:B4Uy]rh|/Vtm(%¤,̷M1f.U&u߭|țqӯ1-8dOI;hRĵcocsssnEG q=U>:Nvr,{}=ƫrnn~ꯖ#|ʔ_1Y@GpO.x{_? Kvnk@^Zl쵣v7hl"䔜y\8xXp8g)s#Apc@Z+T {~-?;*1uZV =OUR7+ll7P4B-R~-ְF}Ϩ^ݙaC N35čHܪ"dϿ5QOuW ~ .%.c5vv8! 1ms)Tޝg)u&'io5]G̎)e i[Ihc IGr,}͕[[}?IQ'HyݼGռb Kk]$i#qjTtf2}p}|?z+~M]~ه1_{(%d9\yQWFrsOW9^_=K% o7ik]M7W"x ,\{6y\M_ۯ_5gH+425,̱VN-nMܲܗs"\P@$˷o֑}ck$Vv ]yVwkgEGmZ_ש't';;ȷo43vf>3j鳬+*d A%EJkק8JVwwu4Q˺[fwtoO_:m; Sէ-wDpΪ'ώ=:Tok3WΏJ[+نleew2UQw_;L4 sIy.[32?|S;_O3FԭP\yF@_0{e/ZRjwߡQ7S?GCwoAآ"Toy$j]o޻*zȻ_᭾lҴizU %phr f>ON/zyOx.kO V=j5{MfDmK_O柴dQcR4{ƺ_ضIh3I5kuFoVޞs\Gԩ'%-Ü($^;XAa{?ai >O2v9!xfyʸRWߵq_{W]t揭Ci:t:W]GO-5~ξc %sC_c4<ޛeoZh~@3MoHͰK$o֦Ni=u>}G 3]@iZl.HʾdsMnHH̰wuodFZ6}7[[Z<nͻ}U>OW_6=Z 62m8hrY#̭9hr6~:4׹2⿄M5;K}P#Z隥fEC,5}3l%W&?u+Z?:Yßqz$Z|70DeVmgjʰ/5d%}$1X*pqJ}o{>W^&eefUoTѲͳsf=m(.E4H']^8-KZ-<hrLƎ~O\_{{'oj֧LtOǺ-o=ìr4ȑI?ѾwK߻\ [i>VլKI`T5Ų3rŵ[mG?'Tk.>+57Hۺc>k4֥Mq\3"o,K"7Y}>VeyWF PZ6{)etYU5moԭmR95-fȞ.[ӌcIF߯ko6~})so~pz#G-on]Y]w?ͱ?3_Ej8zNONMtyjܹ#>{Q[%v_*M~Wcn\QٲN_Fi')-[>tl$x4u9VTWLE I!۳kn]w~[<=o6`m.MS06]i^+ ->4ۿ۲lxv)W oa:˛K}NN,,\˛Ae(mr,cw#&*JS._~_Sv-qYA*(GF=b91ZV{i{[ﶿ1IUUJҫZ<3nf!~+ץwC ODlqԭ;5Z[~&\2x qu gH8w-m%G 6In҅Z\vu۷ٟc:~[i"irLʲyF?lZo,EL6*q+O?$Ƅkri>Uu뾿h|+E JSѾi-;^45?yz=aX9(կY}Y=yAVw5%zuSS ohFhgGkgIa}Vmjxϑ5:m%;=zrմzmZ]ᶹItZG9cioF}I+09!Q\m9uv} $+}GO7WZtnu(.MDv2Ρyn]=䍓w3"ҾgtU,%kߜ.Htp}N\Z^muo'OU<:no&'KChlaequFci?eb\TZN[n]2ZIY}J}p;ՠXld4THg2ʩsUdV<27.LҾ RMm4_)ioADo*\++l~'B2<߽k]69)Wftuηk}2MHj7%[;fY7BY?uPm9jm.hz4UZi}O5k7L ʖ,3+M5;6]>xx=u=j1U-2|Ko6h^-결KҦLgJ;W]x</MԪ=77rW.o~Z>uy.2N[,,_̋'Ȫmc'ܯ NQs3嶿3!ݾDSe&$\D?Mp߭{)SN64JRVjmA$2RI̽5ԩӅ_~撩9+'o~}{h3|vډkݮSQzcD P>c6i~ZSvm*Son Rrhk.sdy]ivpªl[X툛M,+ϗJ7T𵡇~\ok~%}=h|g7MҼo5yl4h-k)uu.YL&'6"=~kUVzݽ}*t~']_7qu}VWNaʗѭYy'C|$X},5(q~Ii֩(kTIi|; GӬ&EFp8k%Yu}6O6>OqJJPq}5UZ/=ߴ7PP2LYA&`aiOfWs9߱+̕gMrӿ՝53n2JK)|G >;L!I?ygy3*-l 3Sֿ_vc^1)|;5};Rx{_[;)O'ΜYm"4v">}G ǗUʌwDRaկ_?xgW}zY֙wykMI$-!$~foZ?3\~^D"{ܳmOazZֿ[L*%.!]T_GM[4UWv}(߾#-V(SX¾Tݷˏ%[KeM?/TK(Eum[]FU{(}]Y_~~ea4 Ե9+Lj<:'Ί΃qUgy.kkLiԭ;~zuѵowW!gBǵa= +&ξc˖.3aRrwvwcĚ^'semqo7eH,5&\"wM*ZTo̅i +ǜ~U]NۺzN63M#%𦯦xU\-7/ 9̷-Wzz+{y|OM(~&y}m|]R><)]oy^~Zͫ[tuwoέNw伽v?ᤚ6-iؾ`ckxcP|$Ʃ:wvVPROf{̗F|*S,.~q^幷<{?7NJ4KW3$Wms^ *n_­e?-~'_<_M<)]"M3I׆s\BKMž~7}S95۾N痈8we_xu>&y:tF;@ti摿scH7#<;Ͽ']a Z~}媎svMzGxCMōƓM9LQ4vI vq7橏{6*wΈm%T]g˿'%l5?wq K6Vewb|{׿#9ӧN7/͌Bێmt~L?KþkrxćMĚږ=ԓGWOeHu<;4%K I/{vNW_O0=isԜkk-luOO"_Oh&[-={+2#<(7@%*l:uIB-?]9bJtj_C&.KVHR+^s^ʫ2e>c#R?߯3)3z7j{ޛ了͟yzJwn«&26~o5M~n>rvۿ5bM'x~7GYJ^j뮽:(Ϲկo]7OgvpGtoy??D#{_-&w65E;~UYfTנ6ڽsm~)6xu?}Bm2;KkdaeY,m<[̍8zW~_zG_ hс 0ԥ[+[hٶ4חj¿;-וZ$/馬}jkLIvjw2n]Mw͸}Rz;O=|_&P[I$i9UyGLӚ籠[zܚTV5ɇEUpsjʿ䪶m3z.ï8kw_3Wj77JZ֯tH }ӱ|B MRR}?F"$kCRѢ<6)Օ$mg?ӵqESeOm˗iĚݵooB|Yci6Ibƒ]_ve.ou `E]+)+L Nks-b#]ij[w9zynIxZRkOĺoҴ .7p_6IuՕ?ֺmxZ ҵ뻔[Qh;bs4j_D?ɝ>_ #Zev,gLvH~Vd__Ϯ9^o;ڵZv?{36DVEܷ̪qfۻfХomd_K?wGM.uKxM4A^yG;ط$;+|͝"n+VMAE:ia5:k}6RFYBIl̦[1.b=pTӵΨӲj kncH]^xy>ܙ+|Ԣߢ }Ij[4˘t XYkWL7, fu߉6"gRW^)gz>ZT`ח.77I|?'$vmݝ5͵&󪉮~_wk8ŷ;44X[Aj:d5imY&f۵>mvSu?>!VI?G.:է`x,:U$Kv^=cNwݙ1]͢ZOsM۷of7K!ӴK4 H۾ia][)Y:K^z[}9۽u=cP2-h,"#[nfmH 'Ǽl/[Ιo59XWuIc_8oL#7i{Eji6O@"D6D.-YD:r[\M 6渼۵^f3mQ-?|Ί4?~ZAS߽̉!=F;,)țp'Rק I=Wt5msBo#ԭ6XhI&/?'i/Ggdz;h<-sJYDWdYrl_+8kU2"x_Zr֚btؾf${cQqΐ4zueR*I-;%Wu amE]n͗?~*x+ßWy ~ ֒lQYv_q^7KW{|ٷj歽[o;mm=|ZQK[dosьm:ۛ^lړßgUMOOQZK_lWUwn-5]ϠfP%3F_"lOy7Xa{-Km6a6}TJ~Y.kfگmIihfX/{_]Z'G7-_흋XZ4GY )$_N3]_GszZLm3)c]߼:ӛ_2Mon|ڇ. =:ʐJ >-,1pw5kSt=^n?hug_e埀4*Mo5;iI k}ְaɏ^&Ooqjmu} }Ti+o__s?7>CPkRE,K|ry^~(^4 IM4a"go>Y%ߘ&:yuD^%.o]G$w4rqsv7Zғ{~IlX'KKƉ$iI$jna v]6߳td\hze2=ԷH"eC|vrZMo\ȰOxV)tmTl-bu27+|*m>Mg^0[mt'g-Oy=r%ϐCBnc^ 5;Eٝpzm^OYmݴ\v花Hcݵ2}|'s$޺wo<3\hisrA{;Kr|h6ư B&t};'+i/$T鿝s';r]zd1f;43UYi$o, ~Y#7I#d~tנ+3G˷ q.gonЙ;[-YIf^D ?x Q(Vv5'y?y{zr=};7_8I5^IoZwGDzRH[G[E'Uvoݶ{~Pyu^Œjw0ڣJw(22+6UDSP__~ݟҶ&~[TݩVHewe<$]$,*eٷz+*4/InY$=lz;?L#zP誝>+f[{'iH$|8uVe#?9vV8Zof~w40D1 &SnuKj[n^6{k_)7%?/B $;YU'صz?>~|>y9\2(NXs}ߗu ,>FxA^ܲ4 M+kv k}y?SеgpA,2!v8H-dm}'?vw;s ӓdyw~"xEdu?yuŮR<[W͝OMֵi/- CYXf$6zoി' )I}/ԞY9(5o/۽6+]-Tv~HR .ӷ9_RZM__?6\ߍzx`~ރ {W5g[ͽ3z wk}[{&ݴϳtp7r _Z}>ׯyH2trmYØWp4\.p_sހIl󟈿2m5U56/W)Z}mG""A `I4/%,&EV{ek8׾nje"CuQۭōD[mhpu[d{s]*j>m-}]u;M v7L},hm3I屆DYc#LgkNU;bA˷OR5|zލ<^93˦yS4 ܥm"jM 7Ms%6D2]>_|[⏈ּ9k:YjxVX$fv'|Ay] rE>N<.k}~}O7M"Aܲʻ4߬l.e+GSs"j7 4bK,GE]0y[zl9%#/IS7 lHO̮m?>oҽm'TKsnuFO+sC"˳̏rwO8i5'f~Nm~yxOtKZyG:L:{]Lf' ûs=>\ѻ#z=ˮzVZf"[> mcI!gӡo9nyEg ?7)E|NiM^ߟ>5'𦇤!din% nc6Y 7\Q[ߕ]k+-%u|UωuּUki_j2MmF$_%Xm{g`m]7ާ=*#i>=WU𯆼 -#ஃi{gæxǞ#K+67\_ fe=b?{iZ:+ӿߩ-}^c@O7o$^I퍜OhnySz"''aj޼KK'{VUPnkuvkv&VT,/ldMq"l7yrlBMybꓺogPIƼuyklptqF]+0> Om뷩x?W^c ܣo-szƤⒽ$7T`C^kW)Z1liV ^g5{D7IǜvQߩ^?5_%Og.*鯼7rn̶w+$_V]Ue=𿙙~/q/G)ouor`^PWW[ou9Aq2AI3[wq法(_?DukZ) Y~IUZR39PK!>nc;_z%;>xQb7f.>#ij %ը]ed$`$O_1Ʋ,L.T\7u[Ho]7 4fT]|~}{%'o;ڗ4ij[mmhۯo%mmqy}J*lG-ήGۻi<#}y*mKvGr&XwtOGzy>}='-xGISJx4q+I4qI#ɵQȟq6qƑFR\_g9_Msiz>tZkIKsF9,daYc5yy0ΓRLek9ů_:tm/BXݳ:>kxvyrȿmsE$_nۗF^}JMkdH`eeM,$"oSt =Ifl岏Suo.Bw4fw1XcE?Il)mVw If{uٍBjv%6b~FFOv὿5MdӶE׊m"%`βquRLSW)vr[~QQRz~?axObMsM?mΩV{.ߊ2ͭ{{6 o#L|]65mm¶m`I5Fn ;/}kh+zwzHU!G-Kʺǚ֨ndayBvX866Rk ^Yx_ѮtCV *w,R+#-Y=˯ߥ8S\~(EѴۛk!]RyˏNAroS?}K۹Z}~ ||]}k /t[t+{LhdVjj o >r(LOC$3 hgf7X:{uB4W_cTVV-KN:+]Iwڕ1K ƈ&OI"F!j8(6NGנ]TzeϢ{?i\Z[VfOi95/w9~Y|B`yxֳxmtS#VSn&З6 mY3ߧtk R? 2vsB=~?|yc!eF弸ep4}h\5b`?ǽKׯ_AN^">)!T?v9&t^ޞ+_V3Dmq"[y3e`nڲ^‚`Hf*A 6J>}Nj@{KU)@v]Òx->e=sڏ+CnEp$3[7g6zQԧ5KIndk[irgn z롈t޺טʺ&o\w[&ߓ~LOY/!M|Ϲ5q O\GG鍦$B!k%i/3/\ܧzvm:=RwtoK'k׼$mVH/xJqɦ'4קOP-\u; hQϏr}oV|oݿN\{=&_å=.EΌFϷr3Vw294Ӭ ?L&Vۛqik.r7ݵ1f%Ag0?cj4:kT?/çj+simsՉ8qvkI،껳wʫ;F}/?qwO#KYq$?7r7ҨQZHAUXЃ-տg|k%V?wDHF wݐ6عNNAgJ.?fvh?U2m->hz.ݣ)D, >>{O/(̡h'bW?y~?%tdHn?+l"6Y$dO1*/QiU/"M,䙜 R-dO.駑 rHsn~0k2L%R[nYOs[SSIZf,aW?=e&7˸XnPrkXC^n"R~_3O1lDp{wP}_y$ |oqc׏Tozt}ICo *p _zi*3ߙi@,s7?L]L/4&~to)ߣjsis$#m⬩rR`ⷒVb@9 RE7OY .#e?|^OQκ' {͏t{EV {<$uYͽ6'nyyaYK AE5Y?y~?bK`V Ae^?y=kG1p\U~˻+=u}t%7RpbVjeuzњYq$Va(8;~o"=ׯpfiFc崮^CZ?$~+s\UnVpm¿3}5iYRH̓ĠJw1Fݪf=YTmntR][> ,ǿָ'YQKdw֖Xݲh,vkR_rɳƨ:ωDb[{efcs~E!XH<l31&f_G,GWkG`$tEڟxc_“MntݭUUqN})06M{Hr>L?Q.&Qy`TVe vii]jDeukQDOas48(ȬT)eh,O{yn Kmi!ŵk] {6_TʔU?q{scݛcmV,ZFu{__~^;%h,2F8>sgI~`[M5&i H̍[Z*OeVx_VmS"QW62!VN./wL/ٞ'&՟8iysW>7iN62Mc[ky= {?K߫:ck춇IH́p7g7~T}{ċ-֗l/.5YfՅ0l2*TǙ~q׵Pm6=I${.-_vNvث_yuk:=֛tZfYAݖ򌺜u8qW{nsϯ$Qe w7_wEԚ5's*96Tț?-5MBKngD햶Pi( 6ɚ?/ɏ@G﹵~,w/[9:|6\K3.eodw_vP7M2zrIu$y;\7=vcު6fe;HJNF _犐/}L(`Uq"oJRAr17%c4/UXK?!+(thY_{szZY__6wu ŭآj-ޓ'~5uvis׬lg;ioXWJ-/w{~FM4?*h(jw^4y :趚to'^F'fp{8l= ;7۸% >F_Oϋ"6}ԍj ɾ>amz:y-e?kצ9V~_}/𼯫[$QG wPEnvțl;!IMSvc?] |P𷎴KV6׉co=kTwZ?3GDN_ؓ. UӬM@jE>o+;}]QfO'Jeuh7hom O i$l-s\[6L&]˱jEBݾ5i6zG߆h͠ZxŘ=[yYU}1 iAg[o}_9[۽1x3UfWK$ַ(2VG_}τV?_GEZ;3}4ƹAɴM6] %s#ĺ=֟qꚅյR鯭+nd$ۗb:&^0-GOCC~l5;X$_Z8䲙K#X}vK:N^e9d(k\XHդЬוּtC,k'ڬ&di~sWV::~Ioy3Qu+zK~{$M{E$l˻t2oޛ~Cη]߿sueAP;;z꼾{.5Nk۩'4nf}߼oO7⾗B5k-_]6#Q)[]i3h꼮g^)׻Ocӿ;X Ngt̤{/uo[_%cT泴iEߵil]|qu}"--ض"3(`y[g_qqh|>ˣ}}3sN416>] ,˹hx߳$ UX Edi "y$+s>eɽ2*Nn.Euj?'FE4N]g+34cʕ|GZexr=}ݯx~Rt{mq,6ٷ]JӸ+ó+ٷy5߭_z^>h~#-ujH-|; 6wɨ^BͱƩ6ldzO1(aPKvD3<=MU+`mӦվ"ۗN>ZtAw/ѷ7U$}bc#ko6_V]cK++8Y9_m=u&||_~M~ytt#Sg[7Ͼo9a$b( dZZVMW;c"̣fyD_6똼+\jK-q戮I#]6͑|[u*UnI~װª}yM[}wᏎ x37)y+^w $Z=VF5j/ߝ1Ҝ]GSC}^#ou)~$6٭a !Df̸hCztUn~oSk?oż(V^Ev[$*4m9!"M "oGuB5SM9E?-ޡ_kO~ba i |l>wҡOR]+w}ќ3NnV=K^ g1io6٤mwzŪ۶dhlOJq^" Ewk/_CϺߝOhr͏lI ֡m_<{o_/I&Di+1''{;yӈ͗hyO|X6Y@in/C~ζ>m}i+!Ntz/*8NjɄ2BV2Ml1ŏ5ͤẇ2-㕤 7ߩ"4W[kʅ7=NρY}~%ԦqMc&b->}deuݳa}~~+<i҃aa2Z$ey|3xn."'HwmH0.]̻6WWAb*MN򿴺6˳!5ʯ~-[[_<3"x–Xw% ֖6kkݢheUa~uOw\eV䰔M,0j]~]T|;;im%>K~H-l [5H}I_ 3GHn"הm]XaI{]]V|٠RZ|d׮,ton+s:ec$;Vd7er|ʔztMKKݮvN+'9EO7&gGVv 弳"YW5b$y<:=||._\e~7sҬ+J_5k,Դmlty- rro>d-Y.x[V=:0}t:,4_kZ2~{qnlmVQ%+quG󼿴y?=bY'Y}|tFRiͿ3v~6i9}9#wlT^VN>ů'Emi_u.wwK}uM$q1tSGTY?w͏VNE漿ȇ%~j2w<p,}֘lkׯ{u9Ugd<1S@OE7sQzsԜ]_3/NoL]^$FwF]!>[U,?[QzxF/ [fu|՗ |蜿_~'{luL nݻث Eq*I5?Ihkc\]lVW۞dy3UڬVҶ*=-׈ּi-ǎuqC+o;oC^)iac(ro^8'V\/-Z{~ x\֑eh)X#˨ܬʿcr<;cj}$iey,DƣmMtF*e}6qcy+OxJ[F9&55xm[#GJ_SZ+w6*ߺ>Zڟ?~ix:0boo4eR̷ajyq{;^$"w{+w"5d6j]x߅"YK؍}ռB{0c^E7_Dj;ťnUZ_,Ϟ'UkZ}8񦥣],D'H_^.6;L# D=tN6^{B3{w:o~,wxſdX.wL"ZV5$p1߲&?'T!Yiϻ=iJsSi_~:O[jWzͼq9U,muU*͵"+ޫ,Xj乓Ӳݯ^q,ui6N̏WHݯ;~EkqvyO9.9\:0%߷s񆣭j_I1H#Lۼ#uU|*z~O?}r T@Y%A4rǼƾg!mɱX.Z8U'I^W_=CL6𕮋Cy&VhcFVw}vugRwmgu*3% muKw:υhڢxoS𽑄ʟbhxrÙ%Yuˣq+ϣ<=:mmۥJ4߫ݳM[szeJdM'AP+o3{{Edgp<=I[74g}]UUi zc]a[H:mmT?:}ּی,ΤӯR{u{`=Tc'}e2[Bƌo߼>Evg޾>uQWkZ}_;0nTorƋ,?iLQ~(R2 u_I}^k%ޫ8(Fn4+mYv~ps7OS~E_#b|@bs_ Lv#mvKvM~#|?M Qumj`Ei+}mE&Efwٷf)|[yԠǘx~(kmAo ]K&o=եklsjq ƑwdS]+(T^<4p跆;95o)Ygw7=#MG+FNBNѭ ؖK۹?ɳnDMw1\ܪKJm<.lȭwשZ6kt0``2M'&oU4Z|}圚w~~[}rWY_~J+9g-ס%Zkz̚?'wĐ7:MIo":G &H+^{VncKxGnukhn+PLu|Ύ;˺?u&.އz#s%׍k7UN?U2f鿽̫Ҿ96ӧ^CiNP$MsvW3Uޛ>޺nWoL+yno c،|o_jQ?{6Կia6$:}%mRUe~Mqsk`M!*;QF-7o=zxi>vѿJw<[[QxmY'E*ֱ41 <+stli}<~L-QMs]^MٷmڬmopmeQ%ets.MOu7G-̺Ğ/H,ϛ\FgͲwtW:zu?{D:Kد5|YO XNڼֲn]}L}ϹS8SJ|"߻1ɬdn,EܷvyjIsw2rL]|lHN$rV^%Kׯs˿3Ox%Ġ#~gَWqQsTo>FM_E=@4Z[in%۝c79nǟVij/S;VZ_kop/%VhdlѶ&\|ǷˏɑHw]7O=.wF|Gt<3$z-X0UnFO; rԮշn)} yiJDqw[0+,+d:5؞# 뾷rv?Ev%SF?7)&;OfgktVznonE{8}__>m;>>C8W_۶V}7=8ڽt7qABey?y[wֲMegM 8H6CmԥgGw d7Tբ5^Tޏ;0_#S/]E}ZxaKhѣFS%H,){}ĉd全_Vu :z{u⫏G}?%fwO96W,t}M?Lj]◵Ѵi$W ^]Y=|cMk2]LKwZYmn{&j^ ,5gmjmBH/_}PU.6pziϛOY]h/WKk|W1,{ysGMO&7wrtשIz76JirZY4HLI6tUf,$:.`VP8YaYI1Vs/KMn28Bė9q{f6.&A˕^jԢ9]:43YF4*gDܼJڝk{;vPĺN) ^ў:n%eA-66Vo%SxQh^UֶzZ׵oMR放&_t j  F.m-]oEӼ=- &k/_4cH8k׺׷}/""+׷SzF-ώ%XtJIږ"4nPͭo-~kS`>L$3zZbcJݶK{y# ؎y_]ew?g̓gxvy5-;MԾ%߹Jo>SOXV֧;IlOiK{c$ -2~dV.~e_.Aoo45- kY=AF~|bMb2PJ^ɿУWXR@@~o#5NJ/_dy5]n|bxWtW2v̉lUm-n<@xoV7kir$械GpDA'336kŴm(ۭ\lH4X,hnw|3湜G$s;ZBmmozfge?ZZu / uƊDaF>ĹϿ).7ywKZҘbr۾_1v2MaMm)5sgKax[*YYe5E}s_T6z}:iֵ)[֖wWo8n6;?~_ևKJm3z*NZK:|C6n`]cRԷ=Ȓ5-1Y~JVo\cm=#GzCREy++\^\Q*?ZRz7ooTeͯ] O㹽 s02*8GV=vs߅]ŏͭi5j-ƕ}y'q;\[͏ 9uyGΜ*Rmu>xŤVk /.Yo!O/?=c zoX[omwwjN2JKqq|tG]728y5N]P%cmk2!*^GfsMخsr{ EGujxhegnf#^̑sy֝mznrJvo?~K]c[n&̓mI2?c);gyFX>!GwGKPGW- $2O 6nrߏ~e}agֶxc72̪,e}Ɖ̞{$X{\Uߗ_g;=ݴ7$RY&p]P}Ů_`RxV;ܕP]̭BMCkFP.V$|Jn6ZA*]o @݁Gw4COu6l VvP_I8L3.e_u3Swo]HOVU#7^{? XSOLXq[Cu;#՛|7(O/Ttk%h_g?ih%/aGXVV>MgkrԦΝ-piLHf ec[ϯϹGZmSK{4ߵ>O:-⑳47ܭs+KE|{=~OX;RWm3Їe cI/'s׶(o6gRvw29Y6=RuoM'ŀy$=jIGlޱBKΒEDA]OjԶ▲I{eaܠ`qf'֑vb_(,|5y}i4MR[.VmoʻحMOI$7)Tisl+˯^})|5j:9(`4Ms&FP6'f3ɾJJ)^׹ j7w뿩_φKjH<9$)i/\ڕoO"$?'ԛgsh5COu[[WQK/FH͞$VC63tFߍbcFR~}Ucck,6#K(yI$VOjI#=v"'1v;+\+8*"Yv?ֺ%J߯]JN);o}sS,o5s>rcK<|J%#h$z5N?{bOwdrxy+3FgS<;5떅6v| ͵}_pQmw;H V+o/-7c_{')8NPz7_9%8k_}jD4mwY+jU^3/$(BW{Fϖ]Jީ ϣ^_~z~rotnhM"h|qr[ЙWyw .6H4;P 8D\4Mv%eiBV}8u;"3KsJOtw7tk|ߟ:U4t)NK̓ 0-Ojvn *WN͠he|R]/r,ھI'Z ?x+f9&w j:V-ؽ˝QK__/c0C?ƕSk#I$/tkNO ƥ2 _&k]<}O/9&NOu~ld5?E$Y%m!ǧB W+|"lx[+*7&_==w Zj7zb,iZ#W?#(.uOgŭ+v_xwĞ*'m5} Pimy$]Z7L&ftDt8_ꢔezjOW_MW-[RҼ-h&In5}RMI>ʡdIi#o$$ȆgtFzKQ[Wg~ξ.g5iqjlyMv%-kik5X¤F_H">F#<;n/ϳϾ)aײuUYk^$4c5ОG8.F2l޼jZgy~3'+u~Z?ďx}&@ͬmtinΫM#E,Ɵq֧G5Qk(>Go~욄=˪[z4?|"^h [c[멤nkBf\$m >>G;b&Nݷx)wӪו_ƀ7r$ws@f`{ Ol c}?}&M͙s!!psMmț z߆(m]A/M[v<y|tRݗ9.K۾Aa_ '[원>iwHJg捿 k]x~hoݱeV˹+:mR|S$t-C@~tUvJ&^Þi'\-G_32+dvߚcGk|/_L'{V O\Gs?ڀ!40ܟ_5}.`k%ʇqw{<ƒ~&Qf.ЉZ?ͺI&77-T(/4/Gn|c@n4Դ-Qp̡H8݀ ϭ&ݷ"HIp2z?TMi]y9Ϟ~=Yx}n}SYiUOڴ'4Eʢz'utE(JM[~yewGGV5ņo%i4՛|vd[KOZv;`o'ֿNr?t"=̶; 7xr35r߁B^Wki'~XzԘTLQ@4C1%zZanF9oh*.6GG,G> EowfjEsd_mMX_$;Ll]oo09KH{SgtXauVW~#7<\6W|=^O6{g}ߓ:d z$#vo33p*wD<MDZ_1ƟkS*$oZ=bn }ce4s$k" *p߿Sw[JRhc[0>f/&֛6/y^Igebƙ*Ay, @s̞[oww1'o~Zw]I]M_"2:H(Wcʸ~JrN2f'֏vh._A $F'FmoζQYw~3Z~>-!Gy01NO6>^goԃEK5Z\@/eUVo6M߻]5O}տ?͙zg5kZѮ]; l4ysI!Dtn뾺~+}%S4l-b) ?h$$vi#ֱ_ܧ)Nom^1-,o洗 ̎I!6- U)'2t]N?2:_z[M/>g*t\YXM=i^+ޗ;ٙVͱgx 쯽^}WFaBs_3#-;7vI1&?Z̽m;+6XumB\Kj_zRzmu)M-kΆ-cC i}w~$yBmNq,â[H ._3k~URO]"ݾ8)uSW_l kOP^X~R.^ƱjX$L^Q~1]2OGs 1gH!|{~~$Jvv[뫤ơZ_[p"j$_>' nX𶟧Ńy6?Ь_ my%_^۩KKAiG#dY^׿RO>Y6(mX3/[?**4p*5hmت?uYvwkg"Si~#[$qQ #mQ7EGAh"pdv'a:/_?0_]r_ܜqNVJ?Gtx6'_XU)yWb$qVN:_n5l꒖S<|/G#4_Y!}#Q/v|6tZlN0s21D%lY6pj@Ƚ'&(lc)#hkY$R)b!̙ɿsZO?SP?ER`y}N>$Ѓ]VIZF`*t^`Wm]aB^@[=G|FV~O~TI{D2=kHҷ~)|)t8_6w{5w' sv6qךAWnc%g(rvJm*M) u8iZ$r[rVbP8! M/^Qmj,6[\NAz i6j@׳pTX ͟>zh.j7~|t;!4<3fJ=oU*mmo7 (bڻ}YX1ƛGYg;KVа,!#mz&5LTV6+Cil6Yohon/H' Rߟ_KoXyܳH9ڍ}OZU//ܵZnc??,Yy J௓[s_e}"p q*ʧ7'VK d}}ro@S@7 `~{3H7zqUٲdԺ}}J6kv+q{}ޑ$ZͽE^r;@v\sSί 4mgOv8iUVIsy>gr}YMotZtU1lWSȿirb*/WG_sOj hn' $NVp!u(.0Ztm]܉eIdq$r1*٤UnPݕʂw5;Yu#]k{ TS쫶9&U3#7~_}d:VozUJ ʱno݅ywӕMou`i=mmlV(z nu:ߞ>k̥u..ܒA"¾W̿ȾSZM7kt2u,0N $B_o]_o3"ƟoYaIfBwlգ^y« MzkM7=WXxNt*n{4F36V NW{sD3k_ZO<#2g,m/U9I 6.G6vGľ>\}֥ x~1wN_m]5 ωW:qգJ!"B|R2$|WnOG?SQRV?:l~S_ _k#%V#O kv y3iUTwId[+]'o/%EپOƘ]n%͋CXO8d[5I'|6~dȏZU%}ߦOxo[^CN5]5n%y%2Hx|m~]tE?%'wy%eT(WS[ b7iծ9hfg:#.m~_=ZOs|U/,,|W麄FZљ:N#̰Ƿ6oI?s;nB~-5 _&$mn[VdhUo7jTQڿM7~gJ_?g;ךφ%P$[TkM#ZRHS>3C#Ma TQ֗4u׮.ݫw>boOkT^+y#\s*$~^|U.Yc%%u=}bql"$ Wgeh|ٮF:?lr={[ӯfՙco/+ң]۶kt;˶w[wP$5Fi!cg]f8H:n=PD-6a(ڷŲV~uBXM~~f>ۗ]4s8S9b'Bޭzek&+.9>ۻ~,k]Sƪ5{X^&3w\wm[|!0Uݚ_J|=C8{]JAŽ/G6*]-4Pqs>)2d=yq߄lRX:2RIKNo['Voʟd$]~"5M*[)۵X%Uxds<7O6T4+¢K[x&zyҷ+^]oxwIxg$xي"6~fd_\>3mӵ~_sΔ9V:%!&Vv>W_}:+w}4EeJ*~?%sqqioMkolQV&՚M|Ə*M(&+iF~%1[Ȯ1~LkY~mVmi-:q9?1tEFHG3a[tk/+XSӗ+|uk8KTc3ew#k6^:*=cmߩ\O][|7^(^ّ[ΎfXy/{m3ܬs?gνV'mWW :WNz^7իsU#'<:͇}>mtgly6ci>J:<2ɗQ"5*NG;)zw1Lp_R{Z9cv{-KXmKMee`7_.F۷wkyE%%RV|v}|w??̱TIIw^z_tH^œ-e-$=Wvo|>:XP5BtK~=oe0X$'i7'4mtrepf?88 >F8iztnӝGYX 'fu M>7a;|*;+B*RvwO{j:Ek<5Ms{2 _VUTJ;_nӴ=N:qݭ,mtD<wLiBUdonO(x@L2I[ΓEijB&-\G[y7092ꥄZ)ϙgﯕS̭+K`]QR&ʑUȐ͵v6W ?+;ݿsqnߟѵ]3GWKkkm@Mxeec l$}72JU%}u29skXYZ[pZFRYy8*'Mم(;O_翓#Q_~]NeKkynVG9.tR9ex_::H}k,?,2IqzfEQ܏ܲn6{S7[~kYMkûz xWm|3'-3t%&Mom ÿˎN[1z4]9ՌUnkk^{z<$?v3M?Mv_;ahZVw)V0j@ͨ6ƫyy=6},~fwΡ9J,L]QZkgjXOkN2_ωcM7W5յk}WT/mo&kxl,lt<ϟL] IJNߕ[WWԉJ/w_r%В-Ak(-yS6M=Ē.:F𧜾dYȣEV8kun[{irRgwѯ{[lα5/u鏨DmF 4NyUxM1GGl64SK[W6>yrɯ2>΅?5\Ajktim!ybHt؛c3S' G'e}{6]~zXq}uOS;c4mٓ>brōZm%ks?wsj4{oTĿKDhk2II>ϵ 5:zaUWՄ"ߧ}3{F2KhI>/znSrd|"?T2\D-tk6?Y׮<.q}wyW}JMfWHvlHƼiӷt7eA_}>vu=Fou(&g[Rn-Ty|̵?2Hd7IegE+9lNEr/_שmxpAi*53j I~I)n7VM6([LeԑxwJݖSɭpv:ƾcyhxZFI.U}}F")}!¾ ]M|S2f_H~^rT[oEr̦Y_t^y_i^.tҕ4#S\~#ucι$4gI$ػUޱiIޞk]]ɥKIJou{W{' +MY\V@nX|HF%lC4~r$萤=qa08eeN9ͷa↑~gmjh\-;KnZ|ᯍ =gHykof:ڴo/i|U|?v'ΈMW%JZ 8z+ܧ~{[}WSS#wǩ|?oZTB'E_xW5,Q^=żqyڅѭC/x`s:VI7=k}_b~Ͽkڗ>5O woQ4nuK}gƻ7'*Xӣ:]^];vSѾ$\g_Ūzox[z-|XRfPIG}drI4^~oz̼EUJ73X?ɧPW_R:Tqxln溸OHayM6._-'gU(ҋ~kq|lLNi?=6v:\w i[I3JA&ט$ w~O+0nRӫ{Y)F-_mw} 蚧ٓUvZV˙L1¹fo EZp|~jK}>YbR[;=+tq^*~&v|^u/vtO ei,W<9qjm{Rs4ʷ }MhC~oӮ߁.Ͼ=F}euKktAaZtQjn4̫]-/{u;}3 Xznm˅RY x:漺$ޮnuҤֽ~~{o#/E<;nXϭuPuOGn%ؑU<o8zܦRV~] 7w ۵~z"VnޅfMcHڥ5;Yy ~Bְ-#6~Ӓmbӷ:Wq02NV-?Ky kϚE~YlnM[-=lvN;Mhz5*[kIqy#ȟɱZ_ݽFm63~|8z6,iY4-> WwI;ܾwfH؉x)_}={9;;{YE>YpIFo2eՙ?u_3ֶFQNw9]U{'oNRbev"Y!Yg;~]ݍO=^F79z^w7mwy\ /1G(WoE_18wRȑ(PLm1غ_.ӷl/ID}_X0|Ay h76:wo$rG%1|xHͲg6}94կ>߉f·ӴωI(reӬj=fE#*}OYzߧ:{߿o#HO$CdBAgfgBWzf2O$w[R*9-nv+;~NkҧwƳw7uxd6F|mS;n$fܪ/V3 j0&O$Vu˽>o3uz^~R+5#&JSж}ZwarW#緗]Pk=:tm1㳓LVKEEsʳM"iyrƟ%־zikj M{,0E#@~medexOSqW#U ; k4ox?xVO~w&6 _]k &ZJU;h?!򭣗1ZC.4wʻo渧U/ש${~/Awg޽$b#b+hVolsoONJ;B}ƻ7eyUU8wWw[g#R2vyt촫eQ˹{2G ??]1ۿL)'zo`/ q EBDwy{Ͻ +.hߋ*P-3m/̓25Nۓf\i:o/j!B&HmwܼmۿU^^i$aDܿ^)iwDWu)j|5o/'nih~yMm>{b^jZc*"YN د pƚL+oMJwʔU14[i/LfXP6+U.g$SOoIMWS^hJu>wZ,l>y.EeMӚ֌5}_Ӥ=_xcF:Z֋m$%wm]-OV'-~gtp5uޏ> DZU֖v"U{6|''y?ڡoO6|gDw}: B]ܳHm|fE/#au]wr_AfPR˼9VRw;*@m>k;2䑷||6|gI0jy 13,7˱U]aҲK܎II߉j S,d]̻ {~Mg)'Ni/k53X7)ù-艽YY&~'9?~Ǐ= +?"0L\K5s^C1mRIWwC4OM7~SϼC_zgoC6biv%BʲC 1?C洿oT){o?ַ5>kw>"uѵiw1C6Ӣڲȑ\יG rK*FkmCd&9FV9U+|$KkMiN`l}1tiei#$,MuTЪj?xOUnm5P24664$ʱ;3lGx2y=2t6|ݯFOCXhڄA ;6ʪ&1lċ$2GiNKVxZ5OxBagt%Tx3uq=>@-beAu]SķXFg5L _:az^y)<_[Əm꼻}qjQ[7lym}  wܪU-.ćROܵg@@*ߗRA"흘}VKpGwm%z&[lZMɾ]lκO7m}ΓZJK2:}^x3Dh^gȏ\waR<$޹= 2q\Po{n42wzQ{V6ddnÖ][iwZZ{1eU]K;m"ImNߓoSfԈ,X4S _3QoE;Eݽஶdޖ差y-u)K{d7μ~ntߺo/N v顄%Hr70xQvۖ?u[[ME@b.Fo֮]ɚtsR5hؒknѶcQi.mLwmzbKvn!e.]k|r):l[#Fcm?TozT拲okK;]uM!,ڿvd[vݟ/N-Mju1 ++ߦt>2梳Mp3\ cc,v^K [3NMk~֗9ehkxն5[gxRO|{i&ӯuwxc7{[fx|Mgo-Q]Z\:u3& dYXd!]cGii##]KBiǽp.>>:Gt<7-$׬~q]na-'寙rzNPQwZ/tNEF}#x_J#HT p4>Vlw?+k6-B=F9彺Fv!ZaCݶ_t߷E8]6y{8n% Ujߗg9f}kNeh!*G$Ls/;O̿wP ={V䔅Ev@3nZ飆n-{E]!׉hw}Sr/yct#pKN;ksrKQK_&}Nlƌ[>XGpuЊ=5uj#Hovy|g!wΊoN￘FS<PkkR:֖4jͺݝvϟ~?淯._nĚƍ7PF/۱IRDp[_:nގ VݽSTyxoQPI{CX42#+~:LKF3;_o.kKlw-F+Jϭsz.$qw+8=jKMtC#̧;Y~\uI6Mcռiы LaīZ=)g nK]ԙ7^ž /a*P9Vi}unreWݿ9i-S۬>F0Y[/ޭԊ3u?sσJCwpi%WM3_UY&ڪ$Wu]#tUI3]4ggM#]<׊| |GSȗSk+嬐$q@ i<㐩IcThI1CMesr7>\_sOw1˝p,7 ,8;dpVjTݟ$[z\zrIhYDùݪyޟgw6~|CfOiVdže4nﮭY#G4rs[\MݷVz2qn;}h Vs$S#T.L|ɤoOkS+u{Ï%S^%XZImi lXuV.M&ZQռ+$o#<)kghK)GQdUsMdɻ%D%,!]cTW/cYے>зTOeOZ[Rk/ @sʜmi6PyW!poHr{MHvӕA뿛-: `OKeUw1 ?z%%+Zw5!+4 dV2+s/6:ΧOfݕf^E+oNh}Si}oy'e6nilon..o*w4sI L;߻zs>Yvg=_j焼dx{]M[ƒS9#{!xfO߼DMR>u߹ w[|tM&(4sSռ YWU%}BFft1r"S2?-Mvk覬nݞyXeϐǐU~wwIOQPbEB+[E m2_OCB6n߭Ά"X%+\0ڹ&8ݿwOC߈Zߨ7<$s"/y Oݔ_z,잻ƾ-jŞiz汭|KNi/.aW&?.O$wc7/% 35zM׵[&J:|rZyqqcͺ#DxzWrQ{-֪k.-2=ܻ[ުzusR;yeZ\ ӥ|S+ÞMiwoxtH|>/w#/'Иjj1ս~zΕg~^:Ga<~aWk"۷GkOSUz6cUrt̋mWEyԅߧ])fY3K鿧ZZoŧƣy"މP%*>fa_>^'W[Qm~OҬ!;] Cn:oIn.$mNQNZc(Vt{Z-}7<`;kzŦ[}.h݌67I1¿iy73]$f刂}7wEZiwm_|yx>O[񷃵8"Ƶ?gmfu{wrϱ",D޿ͪ=7^JVK>}߆$~>!5N%ʳ̋nז5廳*oI.yBo~dk}?]/<-WDZxG.uң7F//.7}ML) a;=<.1Q.[kݷӾЄv^oSBHf9;9:[^8%~grl_Oml\/r38" $>i~^;>ZGW_&86v&0 o;5}>M: } w䝊B^9} \8Qkj!J?5jR1 ܃6Wz{}keYu_yk}nP\K:@ANw_OU E6^Kcּ!ǨZʸFL{p5BwW;FyX*.In8\c8B A+ )ۅ۱޴P}_x5}ʶztg\6#|`jK`="a"nn=>@YQ+ߏ]! u4BX X}}h_O䜠v$`[m3wyqy ,8FY;*jRwk }1AO5AQ}V4a L;d|w攣~u2 Y$tDGJʪG۷tO/㎂mM=N⇇<3 IMcLSI$[nhv7Ӧ'~dn4/ZNZi}B ƫ{6_9ʸ`]썪bjYKm$f?r>7gְ9IԮu<@#67$G{ۍ߭}}J`Π6Gf{"W_Uhjrhbe2$ݹvsg>’n֤__Q5?YWa?ퟣrpi_[J%1MI"y{CG,o}zï 5d` gLw+Kq"cYcry ߧ^Y]=jf3`.dW˹vmg:jMm2=M}<\LC._9ܿqwMJ _u;\gbKr&Yn'H>c3,VTOu^B#~sZφ5+/l.-n}1\Nз)$yHG~_]J$mt8uHfКQ-Y$ Ȕ*Qm?avdelE꼫)'sQ[/W2n#&YQ 嚥kIJ/x)S52{cA$wU^B4}GV٭n*̭&ޅ>LnuV_orƃjzOeeдhlysm0ykwjc^whey]~Rx6R'1;% L/_"#ڵw]{ 26;{i^#GK<'- ~|bLAG O :r2+M#ttoߊ&_Ւ9ۿ ikt]h#|O"⦅=8ֽó+ts-ާ (vʘ|3zݟWrK[˫BV+}>c $i?&J=wIShlZL֏U1+*oVkm%%T}%;L^6>o~|ĭwmuIYWWެ6k{h?{s/kYZp;-7_UeTk+GF?oYJ2]5Úq^wt1hWedwPFXnYVi߷b{1tM'-OgQYEy_f/,z7ga%ӬR N,g(ݹ[Yv4__O؀iv6e"@Pt?:w׾_̖EY['ĚFMs*IQFʰU8s⁙:3hN9_O֭h^ heAgPFM:UR47n:gF˺NsqN.X%{3;2}~e%_3wc"ok[ ld$H1|laߵo/o*\vIn u.-hGf9mzsN~ ]:Tťţ;0۶o=zz0s{ ۾L^ojQK׹k2UBqÜ7q~C4bo ͣ.k][i>c; +nׯ4osIi: ޟ+ZQꗭmM+Vt+po~sTw}[wΎ+Ŕ;=+Vv4'ȉ$nKAvoiy`rߧק ˀYN{?Tek3>vw303Ncaob e6wxyN_wںKvCoB5(d!Gm~'~''GˎF+#NkbPjY79ډ;u}\^O+UHc,8kz~5$_&-;#Yq ``36v' '~7o?2cR?7;O+G41m>9Xc+UUwʪZE͒[=#K"iIDY1{'m ooNJhKX. QϓgjI_oU}[Xԕ$/gC,73I2F3أGeTv'O\^(-^K~`а,BU\WlEZIsIt뙶A%ʥ8'?9y~?w:W j&dDL᣶4g۵z-LT)%ߥ;aHXռECbHLYj/ٷGrkUk}h%:?=oCyf..Un$|7ߚ䩉}ͣϹ4BMM`rXY.ٗS/̿|"q_J桤WNfi.'TW{.}p'Gmu$bxI6io>ui$7{Gaņ~)9^{_^1ڥ֭?%$)gimump߿opYD-}e>Uko =gEvZxZa:AbOm,߻c!pmFߡnim4p5ԗV6ٴVeU2&E4բ owM<5{%>_+1Z't7"[|LRo7N#9X>ǹou>fjuOlyS\_2=g)})oQ߹ N&mmw<:tft"m4*rYRdxJ1~]{R?16|NH(~ޭt kq 0̾K-}*{nje׺BϭmğPҾ5QZK+mGe>؅62}ϝ*Kھ>5 /{]W-SQٳo#ME'o+B++LߺޙfӾF~dBhcl !޷L9t[,mRc-ͺ|Luhռ3nw7e -?+\h;]IJj=\jvjZlȓƲyܐ*$nLy>UU{3{ob?=JOޞzw~Wzj)ywP*w?_os6{F\XkYD&%XwoIG=[Cįu:aku9UU<~e~&Tzw(Ӛx,ڲaw.ߥY 9,#m' вk:>QhY<ur>fis.fM?h[̊ch_̑j}h=MW]nkoP ]|W'w@ӻ[6gfYg&]2̹y-Taׯ2fd%yG8oiiIY5?i:&mSvYͶ[y$. iGM~䑣m~BO;+MJL6q|?˭"xp.-C 7oکIwsm&rBoɕ'+/vM=23rLI ݽf^rQqsq,˷Dm1$?G߮hWO5;o#6m}ƭrm+|?xqBuk\Rl.+ߪ4.<°,$߿CuA'EebfU}Թoe_Z+is寈=gWo}o{=ƛ+{{ɼ=.6󣑢Fwƾ_%z t0p~C[j7>4M׃_4$}Bhcr62\GMf2z|Ȣ~+|/zf ($k.I4+%**-|H>G;9F?;若p~fK&PuxuMoS[wk='fRO2Liaϓ} RvϭSLq] i|K H+R١]-<鲴oM^gg_s57G|e]3Vӵ;_ -nfkvQa&?tMKovgz7>!h } ^+S1 tǻ̍aܒ13F J\[$<7MɯCUIY[c^]5^l}cVZbڅ'Eh%o3H$;UWy~JFk|GWh~9|FpxevadU*Hʩobz5YUg_oV{>}]K\ֵ-f;˛K?mS)&eBL}uϙ׻aG~MoQz~?IyG뺆A%24/0߳ ^]LN<|꣌,W6Ontxƚe}}wj>UNCu#Vbۿc>Zra׀i҇:nbOX'QÝ{ G&Ϯ[(&#,fF977|ύ3'MŒ=mk)Μ'S[7_>c㮟xK^GGء-9ѫ'I~'Skɻ?1˝e ҧx6\L̡Jgwȑ۷+'ʛW [+ۻVOAoNKo?KҨM= ͺI6X;^!OG]^Q$`GuM1o`KbI9-ɍ~}ozIFi']婵ZM-?AYiJ`vvmU'+_[R쬷k?7ZIɨ'v}f*5ߋ^/yUk V OHV#o?G[:R­:x)VOާy=yu)}b->ˡ#8??%߹Z~-0]N/psF]wn ʢOW&kRխg[K 4Sԣ41DM5YWlѶd??'G⃩}޽;_zt*WQ_gk7yy#hQ۝'8WK|_(r.Z^e:>+)Z .ſM@% 6e"|/\֫ZT>ϥ_K%[,mH;e.vO;48N:iRcQ> j=:[ |9tuh{0-m4߲oHRR\+:!EPQ}~" 2}8Z4q6w_n_Ώe<"wargi~[[_^Vs. %Sgvvz1kMMotOnԏ3li/ғ[iֿvoJki[v>|cx4Iuk)m何-5u}m&t}1F^c_>u׷ҏowGSįi[[]h4e5KmdhI$ټ$^zׯQFQצMLM=7zmk>zOxN{> pzg87ekr~׶Zr$|;ોk}GZĝR[?IfyovlhKReU5G;_Jq9a9{4?vo^ ҵofo#𦇦Z4*Ɉҭדl[#DJ[ƵR{G/%mtiCY]w~I_jNZV\]jwT*a6od1?̾dۧ]+!VP~+ͥ)}ϓgŋXuIu[ 8#|vXmmbyI\=,$tԯ9i-}uk")]7gūSyck%#"ͲE]x~v\oҾ#>xT槆Og)mKk㪻;ݾ~Vχ :w.ltK=0N*clehd9{yS[W^]/noRϗw>r>0ԯ~#xgwN>sLBgdmwr̷73?O.ܾ)d]43J-l:5 w7Om#>ϥC5]-v.^oytL*QPNv_߯R0;M5~'SZ>6ǨxKD_? ˏx>MBkai,U;K;_c3=\!AT?z]tϘ#vnQTy4>oO8cOGΛcv$~1gon&M?w2R4F{~>rmԼ'~u_^=M>sýRw}&lk2"9_boETp.ji~w[;0G+N6+>s,t25ދgph-ƭyzq}O~J'$DW|׻ S).sawdFѠcګGfd8;&|J>rɾRjNտ3<+ᑯӬia2|B~dUa|I-I:v 3oqp57dqnN6sOu o xS>ר\5@o9wRwKM*-t|SGsA'iq<~Uܫ4mgJ~qR{/9jen4be fcidyZLj=K{a}V >lbi#&mw~ݛڌb,!oTEUC&ܾ_xs÷k@ N~Eؘ[~MO3ZTwk]K7u'P+ 8/06'Ν+M,WuyM9!F*Y1GZm7.~wDezJ~sQ? goƳ|M|\onsr׻ixėcZ^45_'mTՍ^ds&gGv|-artɯN%*nm4` ouno0Qi[g[Ke k[W]7eOyB6^w#J`>!{Il[=Mbn"gjwɏ+&+fe9֒2{BU4PRcǺfUzS+&yscoM2چT%wnhq>tD߹} WQN;_5JW~:OniT "@%oݱXx}Fsﶝh[hͩw);5mmLmϳsݯr8&wÍ֢vKKn6U-3|2&R?rcm K48'Umд,/77>3mg+ݓOTE YۉmmUK63b)M-Ocnn5+dͷtjwqu+Uoi݃LRvHGSIơd p-'D/[ 2KݳCnv$|!}6}L%'/GܰBWqfﺿqO,{~e'Ğ+CkvX"H2\O'0$msyxqYmmQ#yUw$4kɳֺTOH]v_?ĉ)uгjVV#bGcoF.Z_Rr2 &Z+XxF˅UlqsE_=c^r߿密O=:6'/K$Z/ {<ϖ"0mj}JBslzдR6MۙU[zx)^V')ߗK}S;Pݾz[m6# 6J U*no+eJl@;*'m{n][Uϻ|޹O}tM0y*HU3LT>w߷M=ZFeY??@tu U*@`>A(ʹn?+.yyF=7 D5&YK&L̬2o7W7_[)}O^(۷֝OϦ[~#P$fHc[wU_.N>BhUܪ]wf:}fwks{M5umd}_+NYK녳k[fW:>qTQvnӊv]zFi6A.! ̂ɑn>nIoR?+'܆3/jwچl-..y-oŻ_LlJm5ۯ]o_Y,tᴶvӥ̰ck#F>ݻ#YWM߷^=4"iv[ٵ5lBдk hܷ7?7$JNqo=KO6N~ 2Gٛd ٣fUOlG[][}dx'NjrO4N/|5{kx\u__4[# kͤ7M'O(yZ₩ߏ[_]j:Fx.k;L6f)O0:o] rlҹM~ZL_V iVi$y؆_ٶR\39q;RwNWkksPuۙ[Br J) qu$mF_Oh??k? ,vGomc~DqYٿ`f[7rZZOpVM& n_4lzz}Voo ;NM*ұHȌT'm7R[?!5:ǬD%Cԡo[[vEtf]f͝d)OM[*rƵR-n/h mCPyC=2 pc.ǜN\_W6Qi^l5֦}WOɱoV_&o#>Jluo/9J_;|L6ǃS.H|9 o=;Aԣ{C$v lP5 ƾež[ezk׿#Os?&/ G%G7zdw[LeffYD}6!͜=G;nKәw!֗?iuc^Qe餷ۻ3'<6'Uʥnk/֧9_K{{vRs{ȍqkD޽w;Z^wZot_&?~ˡ-mJnYcalw?ĩ?mkmN8vK3yy{!~O[S%3--5%y0(܎߻T 7Jian?dקK_綯?h_ ]K߉uSQֵ y`4b [}kmɵKe'ȭ' 3="?Ɋ~_2?h?Bτwy>/մOŅ8ծF!&s;B"q^ӿd?_ɜkoΫğ < >1|W_~$M;~7Z BHL,|{#MWK?~}^ޟԬB;w{֏x3^]Oeư@5_{I3HH/:^L*:^*k/?z/<)-Z_ͪ,KI{}ykE*GetL*|޽-Nssn+x%d'$!M2G$o˓!&D%M)Ow-zu-?8dn"k42*ksvٿȊdh6Vmm%nWfJCԬu Ğ/񖩨}NYӍĐY@o5wPm6xnZJ+]W]oW>U!th.ᴻkwm56٣RO%S>S~~[~}̤wLQp$88ۿuҵ[bӺcJ6){vSyI*yd_z"z_mwݵt[bIޭ'ew;q]mg|;a$jљ%tS}mw#7}_ϯnT0Eye[~ocq'J N=k$nDC/m|'O4[K\5Klw:#|rHfB/i4޺~_<'3.s?-Hq&?tgaoQ&3ûˎoNt09:KXK߫h1xVPja-tK5GMoXMh;?:njO*7~=/tm SZHukvX~^ܰoIforeMykm~^zOj՞~`@?{I2r;4qvm]N#W3_SjB+gjn}3x߉ou}jm?IUM:&>f`4W:*0]^zy?}tAYxZ?ז Ldm=#g;H]|r,M+j}?⿍#Si]OsՖ7uoR_^L .]!X[gdknLu8ȧy:4h-[]/]N-w>[7=Ʃsƭ` W˧/nY,/n#+X5inkC qmm{7BI49\߽RJǰ/.wL.q{_v3[Ȱ,vq\C&ロ&<ֺ(tStlG:2/KXZA.u4osY_y[Y4|Gf{j0ZkѹgO4vqGs wI$HvdgzMm R%ԣVoOn,xN|?|7Եv_[a-}tJ_In\i .L"%µш%8%ntrM$n>OTד?{ &MK]KȴbmCr j3l}O'a0ݵIwS/ľ񵧃5 -ω5羒D-$<2fFHv'7z>g[t߹'?O|eavZp_I$񮣑9&i&GM$+uKmm˔^>Oۿ ?^o, <M$_29 toݷ o)kOYi׫Ky!W9w-"Ff4~]u7nA.5#NqyoYMq=lnh_1Y˝6;?:mw*4e-nߞN{]1,I QYGƻIsIs%mY|S$VWo{u4V[G$q2}Ui?q(Z)& Y7=goUe N3LͶOkciZ~Zӫ"^=ؘtPIf͵w6Ħ"zrwz$ wo]js[/Eqm6 4qLQ~}ҴYZ77Fm?v1 +cOU)n9ohZZYe[o3̻6GN_!Sw߇GjY IFŸlʎ8ٟrrbs=ݴsNi-;w3yvӭlu 9kIoⅦ7*b> <\oOry9?7|9ixmj+kMKʷk[=V;iZ*3oFG}?WIkϯT,l}hC\ bbtm}OuyJN:5>砖xn-\S g\ܷ湧oumY;4>] ;>)17C0ޭdG?:|#:[`hj'WUbߘ+z2Džm~"iB5[ 9!WcakxnAHH2O}QixF/#kh{;KDido16c_27tSiYQY[]?K;K{D@l6⦅Թ7J};WX`w(ȦTx܍X7C̴jMlͧ̕8 Ȏv|?du5 _~nO~}uZwŪXEmgin2iu&7ɻdFn}v_s^vn{_ AJ{RLA.溟o1fy}8kɧ?^Z:eZ^gæGG$ IV8#\|))Z?_Ne~l}?_H9PI=zG4K`,ܠ{@mē~o=@Ǩ $^1@f 9+?AJ 7s}4-CCFö[>ni6z>Fg5}} Y8[w>nWbm~OcvyyZCnc@oU2CDܿh7ad}~݌ފ_zPy*ws܌cO_րm9L?@@ɖʆ9nh&Qc;wAI[b'$?׽M,#K@U?1?÷ҦQ涻 +j7duϷ Il2<1.brO Ȧ4ؚLb0]$5($\/*<>mltasQ)4dvL}Rht1uFtk m#̑~w*9#ٳwlNۙ팆+lc2ۤaM?9RTmvlobm8yѤGߛv|˱i;;^=;Jiv#BfUo5i^^eW[?W<~bpONޝ?ϽYE[Ua.s2 $`wYǛ|8yIӹv(Ow,skGQ-~Ei+`f-GoR.vKLf;Y!WEnHWǧϷ_VnuEZe"ؽ[h_5di$hlH5̭r鴞i3C$r#lݷ[Y5*QMh+ Bp ?iIW_^ߩ5 Hd%~-9$5w4pmդ-wJ&77m]/s$v/8hΟ&MRnȄG'IFU ,{{7 < "wbw~~7t3`Bi#忻jQ~?ǿͽ*]kPS[uY̱k_)뷖|4fk:Z?gjme{I amцE?4-mL޻]`sښscp9wP_L1&Ye!ґ¿q~ot(w/&e4˴w9sսw5t~Kk(( 6e^;?$- i6CIgmĶ5coW27Rr҃&ݷ[4SQ1xZv9fh |̸]Rc/ \cơ,mao*ݯO_FOvz^[ZW+N fMXʫpqk5o6>gR-U[iWzÉVBMB.'Iqi vWk=o|$QBc kֵJ)ﯛMo :V Eiʄ oքWo});_Oᯃ< k5YǾK&䩏7>{͖bK V?U[?OZ{|w[dhĉ&~_Noi<>o2ğ.8wInhkcR{-$M:~fBl0涶S֥Ԭme r?j~]ZR_&Q[Ϟue9U0NięM[ZFw *Y~Ik%EW~cZsƍ7|)9i_/T忂|){ ]D[<_\\\ͩZ33M.]JlӖ=2Kw <wYwhDױRMۙvMv_a=17es[W݋i,۷;pi.-WyU{n')̯~RC>/ZF\`i~hwm,q7;;Z͝c&9|nUm~bQrճE!Coq1U]N?km="3%tH>y$͵QcVۻI4׹n)-g;%PIt7|ЯZN1KwH0?gȏy97fbwc.[{(9-}#PH9 #Mm֑59?,9[[S\3Hۦ?mR{~!g2Gw3 f'#b +RJ_3;`lٚ ð][k?tKl -xm~ ˕G@Z_M4#-:3U|4/V xU݆~;c?O3X:R_>.iT?uozO:.$VR<&y?jJkZΝlW8/n}$<1YY٭>b&sZ b=AXc.xy5Q9ΐ> 6̭y~ڳI%CE.|o_L6Lg%lw|o_`VRe$aq.z{,m?|f]έt*N["oKw,eYJ2<2g2/ʈpovmP 9H[-A&ڿ,,3meGT[,/eD 8e"Dw|& c`HUr_J H$R'<>c}oqs1 ʋy ‘u >ft2۳';G v(ȐQ${( i7I$X-Y\/͏Ͽ47~+xSY4i 3P{4K骾e4_=v&ϓ;/ 5[knayմW %ZE&H2h|P~,.խ}>i-/[˾]m[[;Yi>p=3:,(oMTRgoFnjW揟t|T'>%Jm䗳igltٞHZN;2C$ȉO '{'[6f`־l|Ky-::T6Юզo&PccI7진n)_EoGrN~>~W-ͅKL|5u$!V9&uO7٭ty#6+~iW_6M[~~^54oּ/&mv;]6Vk{V<̺3OWwzo_kwڦtKȵUX=Ol,w kH[#tTmW~i*Ox/0|Vx{þ ?+NMfo,#8ZV}c6O5Rq7Cg߷{m.tۢ>*eJ|A!j? |nד[v>pO&^5S2Fc_OS%PVݺuxI{=ew{m{/6~xcĿ%|8@6޵km9PeUƗ J;Khw4M WNi^-Ms (֤}{u}8O뺰zh-܋XfJ]B_6}|?Ms_md:=-P,_v~ꭽj8Fr_-}Um/g}wR}>OCIf?Z,jV۵hv>F k)ѩ8I?>ynxx|4$FO.{8's3t( f/oK#K{}oHPĭ{tUlIܻsg^ %^6nW?Y*쯷Z^4":f߿E~qI9KzE~hRo~^3&+x< H~f!ܻx]q,=#̭Jv_˷WWi>*HʬwH.ԏvj1rpj)sOE><:bx#B/;N{M5|hd,}pW&{_^wܸac>^xFҼ ɢx[M *Y6_[۵^\F$1/L,,Gj^uܺW[ENޞ]_/3B^l|᫉o ;xU$#)yM!]g֕~ZE6ӻOr(`NO]o_Vo|8-Oj: i+gyI/wgf>ѿbd ̳xD/1uwk;/{u~ 6w75p$+9d:RQb>9OCw {Х䶟]~-zL>#xHXO -8ܶP3F<>M_:UKܴoݭ;#'6_+_-|K |6cۡ;p4Yڬnl<.߼7cf־[yziPknn]oZ5 4ZFjյtGvw4-$nB:˸,jTZMiѾ}|ŌjB ^i} Z _Nj#QFbiR4khմ{xf?w?yThhc>V֏Tt~ s;ϲOdž4g6tehR2molvȲ?cyؐ~M(ʴ)]O{}:lz[~Zd2]VجKH?Ǔcwܥ[ٮUoׯ^zXG?}?SZa&=徹w&X[%-by=H2T=z[nzJoVW?yGO]~hv<h][P&2̬3F }f̒}Ye[.wwoz2u8Ѝ2Ne^ ϊTEo8}*~Xf4MoʺMRERu"4;/5Gכֿ:S_?z; wpI 7tq.~xIe&-0 m*+=csoM$o5+K$VdG{y+5XӚ.V[mAӂ\/Ca߳wFoڙktjP(i?(vq<>S[0S5kvSѩ(&Խu~'_>%~n5T5ohZeż O&oOq ͪ\C_:kh]?.;08ks9UkKjݴq5'>ӻ>OπukZ2|50P3wRYaULArr|ƶ.5Ֆz[c|^m4v^[F(o6WVך]jjf?;zy._O?<[=V{K};Dtntmc6};d7וKC1[ɭtKZH959JVe魻"O%_e $ii]*$sH\C7\=KIM>hwpikYv}kgk,_U x$ڎnoO\}ίu'Rm$6n^+Ztzڎ-XM>G,,?,kGQ'%綽_u絟߹qG=&܉5#4^fi=}ǯJtF^nrFn_ A,'}B`lsW+}kOד*~ߧ16YӞCdFLn'muy/nOqu&pbʰFif&Wwe޾}L:k3$i3mrʴoo4;mtY.5`Lf54uW޹%g$V:{]Jeo>%Rܫ*Ztz+FU)us=;yhVgܪ>oA4ץ>ejy4__qX=Ρ %`n*d{]n[ I=jw\Xú B-Q||&?2Q}מ$[w0.8,i~nvgݬ;r|vD]\lU$E$}RM>;o?uiEApccXEfoSKeu.`gx|L2}߻:od-?r.!B%{܂lp6I'Usw_Qӻ^t4k?ߏ[s^%_lZn.y'i˻n3ˏ~G~gʵ{PefQO5}dɼV[m?цocI$׾_Ya业{+`ܬ^\[]}yy7GTݕp:M>BJckV(u$Z8a.\vm[/K|!$ ^c,01|ݻ|N3{|e s,q=1ĘɊ?go|ۿ桫;NW4J-ۮ]jے'l#?XLt7)'k_sw*!b7I4>_~sZr&g^W ZYǺ8K tQPKUQOb_vڀF*i`mՆ?}+KWn'wFVC$ooj?\#oo)t}ߩj i&[;hab]"cfk)NWe8w]]}kXխ-ԠISf]?+ /s4~7^TJnew~E?vߎ^_cux'M.tȬml|A42Hd!X^t{'H$tN 5 uwO oz~nSEb]NOK+ay>eo(׏Z7/?&j}zۢ_j׺@Ӭ/%w2YYI}̑22\Z߿cOͯ_>}N]OV.od BYmR$mD_7jfH"VOKC#p#пĿ7tQ(II{G1jZw4:sogaMKݻ*S_gZͼZodhMxH ɒKٶ2 1%ʩPoVպvUG/'ϋ־4B&{-坯a'u}gfo1Y!?+`骎o ݑz{>X{猢};A𾵩XY[sA=lזV[LbgOdJo6I؊]zV<+n _MgM#M-4+iLPH&'gȩLVtY~]wo]Q/> v{+BM0Tl`}κymۧרuܹxwPҬT 7 ;|vR =RNCF|G A~k cmagDO(=|-.^M>KtIZ[y3FGxVtH)F~ .s'Gc?,LJW?L|==L:-Hv3߻GDY:,%,ueOݶwWJ_Ӟ%u7A/4[+D˧<9u >lE$)_y)lZnP|Y[mSosU[۫u<>_[?5>\NZCol.%?M ;>ސˈؔUF"5=?.WϖOo43mS$ TaeXZ/ީ~( оٕJ =7+|ſ%uu-gfZ(R*(s}7}u5Wi}n%TBɍ~Z9' 2Y%kyoršc5ۧʱA<6ָ?y|2D{f JO'= 2Z5GMm_m7Oǻ%:47 [k,1''ܪM0^qs/eu[1faYvo7}ٜgKy*h$bX~n om [ bw^J fn)L/ Q^Gd+̒*,'zXH٧%^ZӪ{~e>/֝G%#[Uդ F$k4ols/dZ⟶?8)WRW&>p#$mIu} m71{k7ڬ&[ZʸhD#9(X&Ik}:g(%|ϤѲF,~d\=L-=_ߴejWz6i]{̅v|HsR w;y7?ש;!BUWr0ۖ\o&{=n||}+B5h-е 4Z6IfYy,IK/g{co\Cj$|IvV=ϕIsIq%m;aG"F鿪xe?^֟3Xnmt_I>m,\y =~ F"h+%w׽eo}I3N<0Qe-JךN2_3(t:1UDUR[rCA˰`rH~=cOTo"m{qIUg*J+w&.OdS]*yeNsTeuGߝ,wϙ"AduʩpjQ-irR /͵ڪ6w>#Yu8ḷF$`z2]|{~ntkarn3Rſh DɴZn |:hL+zg=^Ef `˃4ZI2~_q~g=>sΧOV(9f N{=OX!Ex0Fg+{icflO~. T˝kNuٕwO5"V2G;[U+Eïa?γm؜O㣛V$w l'HSokm"r*8 }?}>Yvfod}烷9$nַe'͘HP_nyݕ~ԫ*1?znE!՛r⿉'9?@u<1YМN4w9OZvfln'Vj[ PrO?>ZO0*=8H;wd^4w!#DւenFgw?7͒xj͢l_*HLy9?2?ӜO07lчř+7fӥR[k.K;c}vg(יZ]stڪ*6fH33mި^6=NE'-~O<X&R7 Wc-W; $}AA;snՠ MEdq_)˳][և_@jJ7o7'M2kKzÒũ&psOBؒdL?<_Ud? 'I:\ʊI]&FE֡d\G~֡E943\#I qqN~>֡/#5+ w^ A$3zքccKQ1C0?7͆nzګ]qэޣ, oO^@2uI-Q?ɵڻmVs~߭We-ygk{[3k6r,m~m(Q>o2J5_G^$ޟšEy3he?V-*ʗO EV/ml, ʲmoޠf 汥J^$-".2=?̚\8 Z1]aLN}ydbu' V٨tbkfk7j2D(*ɏ6OV1µ u+/%*7o&U"F_j"Ouqh߻!cw(X~_4T;ryml]TxҩVo2Om<с{[Vm6d`p޵Ub3aq[uդ3Qp>o?zV}sE.-+IAҖiDY1kfގ_N i^gEK/LiL3{9afzUOe;EyU赯/~6Fڲ ÿ4r˰ Yu (IW"m\TzXhB.]x)4rfNx=sT9z >W{l\ch Bwrm J(,IoxYH7j]+xC}lꈁ#0N~o ]V)ɵgQf3sKd[gޯ]dαa.J Xlggnhoޫ8yC1%]m~g)&~Me51?} kfkxwRHeH51jwPǸ:řoU)[^zܸ.;k;.wA: ї 2ݯY>_8;{wi'ɤ݂I%1Mջ[k-S}c4yktwrI r]+7֛}5V]nY64I k8\zRI۲ ^)V?%a?{p1n ʹf7"9ǔtq)7o)\n!-Zl>p%rĒ۽@2I8;NVf];dV'rQwR}_HCG/okO C+RB5_زݾ[݋lYJn eq&xkT_Nтw ?'Yr9'</u>xV$eX~Bn3Z(%}o\mu\% yd$hmo"7$~+aUKm%6Ο&c۝QWj%&ē֞Y8-"gVu85ft[ӯ;˾c? x޳e\Z;Mmo<;v&UG9}dM">/ޅݿϩ?6v\א.~c/~|>Lo-*]6Z:bk/m9k4M{_-9k `1IitX^ RoF&_kmbO$n.UWawgGސ[lnW]=utAeH|V 'jOS;]ޭ^]fxM:#e]S/b&i- #1_E6Ygeg3117?p֩MOȫl{Q.ŸNwZ߿WKY ieCmV_?͚ +D*~4家Q}k`EjUjFٓܟJݭN ][eF;}<֖odكVrΩiiD-\ˎ?.Fۻߞ]$nYh\]&fm[LF73Z@K 1M3(;( |yݚ{?? xn-}K+hMZ3> Umi94K#ݽ̋"*B:۾Jn]Km:=Y.W94ɤŰ w͖$W^Lݮæjzzͫ)g;{oϱ3_?Ai?hIؔ<|V-T×ObӛB\YTqQ|cA񭦈5 x|UR>M2&=L_/d{CT=þ(I:=ŶV-BSd+FJm9>C&zĢmZMs^F@$,];+.>ϏfQEgM46q\k8m ׃C ̗!"kFc'=(R8P]vCw(-hh[E{vۉ;UfyG_?Ʉ{tE烬4=cCY/'\]k?o~ f!KOG뮯kit<˶}W4mzI&ɔO)j$o_e?X<Ͽ};I 9Hԥy)$!V^} MJ+['e0ț*ԫz|d:ɦ(EhM&-6߼vw|cr aTx}OQ9I=wn?hx{1E-ʥY/.4!M#Y2y%3/Dt-JU񦳧^jtvu'㾚IdhGH~ G[JO_~ ;W%ijM&vO2ȥ=.]Z夗ѧOgo293$:qK]kIJݛxSuPksqwpRKK+yȍlfq=at">?BUוg7~M4 !Ɓև]B]f#D̓{~";~?|P,74 q:(b?kG![.F?doy&O=#⭪ӧoK >${V7Gd4k-YVeUhe&Ot)rOkTo75OI%]~n\c 7W{n7$(m_;em/zoE׵^HKP*qB%̛hI\%YKkWlpՅSF5S@xN5-Ƒ=ơ{4|pI<Ͽ}“/^ ^_ơ0Z =Ώ&=͓kdJۮ9ɚR ل /~=t͡B1}{m'Ai?l!I\#Ӆ [ZnͽϚ?1.>x|FkuVf[{_uSXԴQӯZO$֭m5v^?sR.z#=/ϻq?+{K 5 3UL7b7{]979HRMB J߶2~z3l~x|W[[Oе}q8 9w{Y=o}/ᶥfo Ѵ?)ƭV;Vk;g?:7zxY8Fo^_NTNOmvQҧIFYKd{rE.۽˿ϭz5 \./[XǬX"rnݵTYw9(bEZ54|aR[4H=yOl乪ԏ|/sYu&[?x{M4hP -6P5Ԓ4ʯIgXqu%Sٷ{__%:vZoW'/뷩É]V}gש-P?[jwOkڔ iw qvmq%Վ;_;GMGt̸⼱RKF;j/i*O.֏o?x/IJ)Aݟa׵o-nCmVi{V3̷ 4q$vƆ *sV]^}qpi_^_=jK|2&>-\vK'o"dx*{kɯO~.U)J|mw9X?|_x"M>=9nW^[۴4v62}i۽OGk2NuuO߭<|v.r{cO{SStMh\9wV֧]xBiM>-ng3~xU3CEyQʒymL.duVt{_#o]\&]+>Y/j7LXi>88ngCIޫn߯qYM+}:}z7}A8-2ٗ}'4ʻm)_9(>go(?*T[ ⵕ{g!vp}K- uoµxۿ<o .ElF[?*m*s"fc Pms~cN惫1ߣկ.#|pk0%J~g]GY]]7ٲ Sce9=d}ώHE_xc#ZJHGKff{̏&1#Vƪ.ͤ>~eRg}at[?S][MWnMqqu̅۲z9vέR鿗rNqm_/Ϡ~|kψ"6:YȵmWQi`些l=BcGNTofO:pzmZ;__M>A|cs#D?SN6Ia%>9IuynRiʾ_7Th:SMyc)ҨJ;Z?3h>05+_%45/.F[eX?2iG{pώ{Nig%w_9-%h^ygTNi4ݧo7Du"›D4${**}G,jݧow6NSNIo;'Av~~1CxE:<ؠf+5ՏY$?/e>ywxN>}GngfGP I^/]kgS㯉ʂ]O\}#_noo\y-34|(gɾrHEѥE:Qj -]r7+ߧ_s,53~_sn_kUtrk/^|*eծ~!xRYn|H$UXTo؎|;uN UUi8L,aiiַݑͫT# n՛>Z6ӭx3_=t["=E1ܬr5(_)$ uդym_OG_3ur٭ mH\?ۛ{7[~u^w~[ӷz7|+p^k˝mۡ(_^&&j6i^Yo3{$jL3#/Tz4~oc)7_zzMw"}w|¦5߾~=V:+=UVE e!Txyu/:B﮾J[hqV;e!vڻpNO{}m3E%~vI4:=<Y_)D[YV{wT_ӽݕs-&:pSfyY UXn6j#{z2AFe!Uo.N9Fo}_> ?1GnM$'&G?"^ڬOGﵣ[I$%.]_uIo9 ơH3A˻l.T4 |OY?׽عF֍g<;X&ҭ̑Goֳ y^z5Ns NLLz\mM+2)O2u)1P?"wRhZխ֝cn< [G?۾ɿcfM$Y/ k+E`#H߼5FqjVwc_3xGB| 1YboyOmz3\4젇OH.%9m gY ciBv'#Zs/&o]Ϭplw'vgTfWogiY{>fS{]>f6_gLک,[n~۩wۭWk]"d{ٿw UZj~rP- -Oo{hl-y#ͻ9UgkO{m C5RH/chehռq{Q˨:M;@5 P3V̟2/;uvNwn,|K~d\y{$y^*7fY%qψ9[wdۻjk#++hNY[^fNKPۤa[o>zua9߯ujLdׯ޵RVvٙʓZnokoeA k5]ޕ֬{{o#gwN:`I@U+'kuw]o6"d3;q1“rĿu4wEDZӘo=hN9 ͷs<4*^,x.#Gry} 8 W?Tuw,f@,}~OR#nm˝cM~ozV&I|ŽI =~㏭s|&tyPHgi=͌OX$=3_qY7uwo}{/@ oAwWiäipgY ,C<<~of9Ocf$b]{րCi!n8'O1ޥ=v`m[4( A;_~_U}R6iV Ha̐ys7Hܛݖߒ9p00gjց Qv-"Q ;~Iɒ擶ecRQZFA"2888߿=h*2{8?X5/x. )<=+Ib9~ϻ*}^Jy"^O]vDXڦnHaXWII3(NW?ӧ#$ߩoGmhv0hOnڮܫj4ܱ[{}i#$MXԄi>k;S}oΞ뻶A[ZkZ_d/c$~LM .5Ϳw+7۫Rwѵ=?{?>xAu_:^rt Ji5W˳X0g 8&t¬c&~K:o ݵ.mN)VX'%%eh_e^r5(4z}OIIy5?a\A7 `t-77]-7ւH-g/ڥV[z߰rwzqn:붞 R icy(5mI i#e?F1u-~w~pOI7=-=IŤsk 4.tVv 0HaGI>wx-,~]v_o̗V7úG5;%3X˥+y4w2[ ?]F83̫ԯV+Zi-uϯy$'tOY5NY.B~mm&Em6lМa6cyuycU(ۙwg=xF֥Oxv:ޣ5{Zsj%wV vnggk<gFSw{量_#|]S5JGM3.i"N^(]ODPW3yk c3C2ǿz*\,XSR}O^\SJ+o 0qxVAm.YSAoonC$q7O'x.M,ۿﯕQnڻ3{_>6yg$ pO*fc[zgKi6:U<60Mcfm{{NSwe|s ׉x &Ы72m>;/N]HT ?iMy敌'8.r d9{׾6PZPbJTq=i({!KegqĐBʯ#>vWKi]?_ӿ~35`z?ֳI-}Xp@c?0dC{x"B[80wS{;it1 e# ;T֭Bl&^)≕yk 6so64?e%t~*]z֟*'g(Iz׭}V|[n~_o7(XʶV( ya4z!Rep׵xWzu *InRk登ɶefoW3ХEf?oSM.g|/:wA7QI:}̑O[[Fʏ΍͟r͵;(oGǴ~mgV7j[p[5\}$|yh2~2OKڷt#H{n͵yzN :/n -^yveܻZ1]ޝVu?R~_.Ox]Qu? mcZǿݎhU6i C'SogH,7x|7o)mrWSo[~>G=]|COZN.2 H?G#.s#r}kW(&w.XJk6᧰fw mdY6'I+nC5.-!ߓ#Z6~rc=埥EwN}Z=At}Ak*em?Y65t^}ẞy |x{ j֯kpGG{[g2oDk.񸠦ݒ}Y6j1# 1}YTqqLI4tVhE%"$O>nk3H.TG˩Znt #oK3"6#n#5~x]7H"UƤƴwEM,m{{[hI% &j L۞g؟;Eitu9v8xF\\Kqz$,-百2m]NiM3M}<=2}Nxo5[K $TEi!nG2GPe^#tKitif^Q$deWjMϗNoM?_auwEͤfʧ_nP|CG+}k_[nGoFctI9>Аq3/3Y'u{XjWп4<7ey~ZNෘ`"ʯtqS%+w:]'OȂ $?UW?r_k܊wni漼ӬGԠ[YI,I=ͶG6:'fϟfW^k!/_Դ ti+vp\Y[\xwNyԬFWj\*$p"6ϼ6QWiC;VOPH}Z_6H՟UT{Yfo% Α$qqhڽ&76$C4# =v)k7g{e{WwQJ"\S℣94]P0l캕w7v_EX%3hmozLED3Ƭ+}.+}NMs0hxڌFfzoԽw| ! NG#>Mv$[L]^Dco_~eg OZtnиn1^<3O~s=\'$R]FqkbFvO9:uI jBdr{RF-۩=? Yaz7UJ-iX+Gayk]i=ͨ<3wsqpp'Sg;3a4 50UrU[#^XszU,3˘Ѕݎ:ߵZ𴌞u椰:F}PѴHX{I,m_J=c KcYw1F?2o*$~rSxI[=:ķֶv?./'mesj<[ݒFqf;֜DJ :g(y;J\N- CmF^GA{Wi_Ͼ(q3E/b(;z_e?|NDHl?0_;Ft#LL[Ğ+{fOϞ8m3fx宑g$\t_]YR kpr~yJOa*vwK~fikj]9,c߶6h_T-hے=e{-X'Z _~5q&;&0qZYea"Bo?_k_G"x1]? m׏ϒQ ۫،6RJDoVrz{_0$_^BeM*ʈob¿.n*_NR}_m&ᕓiowB[ s"[̷60m<֊ԉj8ˏi,.go!}FMҩ{߲̹d?a7|,_4a2~ok` &|U~Inv|JM7gB W ^VۛW:֫7dhZE|o&Pwqut'{uM֦z37k/8?\meӏO9&awWn{ךOa?(p?Av/-&cp8%|kjr_{I-/5kEQ5u=EnRǃ㶆EjDoi nܭ']8COnKCw h6\\.oַ%~}EJwVom(l3Go0m봪E{}&4{7ʹ =,!D&y$K~f[c.~߻\;tR_NL\b H_ʿydRۏj ~w՚FNW]k^%P0-*:ns{?? z`T/VQ%]߅?m~z~bm~MBHwd焰df^.kY\Wh|xQsժq/ o&wv IHӕ~7{E, ڂy,q|9hƠ,i f¹f);95ԗW2У30rF|͜M٨QN_*2Y.`w.BXom6*oU߯{iZScе9Mm>\^m7/Z3IXw*'~9}M{+m}+ž 7ڟ .9o!FݲFvq"?ɲOQ )7~oڌ{ >hWZ5 ^i77SL ۡo1H#W//K_M8_sf"֣g[h:rױ/_ۏ$77|oMM{~^{~;E7NrcV?%Ϧ[2ѭUEvt||ժS)W{sd4[xw_SV[]$o >sUcS7(/шeVP,3yd*˵Y@夏Z4].?z$_ںXj:m ]0̻6ɱ>}yh˹pg{cY@B&rH*lٰ?ҳ{ncO|[&԰+s^,GRk1~ѩMf\G")D&D6Wֶ7]^|1H|ӣΒo.Go3khשM=+Bm/yЗ&3+Ck>""ž(=Zi#R[ɴʹ-5~?G6ߵ(5~}{oSToobX|z fsB^,;nkxZΎ8wEeVjIinC<MiOwk?nZIq#Lmb,J2Ʒ開ut-w*"+?wUW9~nc)sՆiK4;R@W$KFW6Ѷ=S ycqm#>xw~Z !3\q[5Р3 d؟+"p1G|TQNlnRi|9/gvhD*[/\R7MXRp$ 847d١um-*Rv_+$Eq~cfbT;۩:Rȏ0O* K7͵YT{E?#p U,nV+ōC,O_j g?롙tIX0q:Y?O~ 㻰^I{wPcroGg_,%uRvi1xo]4Z:i}^;+kxw4Q%- wv|>| M/ N{mCCYom]Yﴷfm$SC![jz_!,/l/.NvKEhg'VJMyҢIX1b\u-lt<پne-/ΟLYǍ5/^xP:~x=Ė3Ur3ưܕm8߲/9rK_Qhמ=Rn,t o62èvRo4m !d'ʒy}_\*bKmrAOs@w~w_l׭31{v+CQm]ep>^9?(LTV@ľ0Nk6On2 )ݝ]PDtzn zN9~qsnz~*2{;f'Y7w C#)ۻk|yzXc$~0@>Qo%.ѻZMۆE9Sze~@ xM*fxm-+ooƪ3c #wv~ zqGϸ( ں Rm*< $vʀdb9W}ﻷΦ ?LNvw6>dxOMh"zGSTKwfecs"۶GөNK}r}|>Sc[YhL kk/ $XbG;y?wDOn'ຎJ Vk-VݞylZPbLlZkVM}d;|Z﮿cʮӷ|9vl} ~!t47\{6ioQZx~гDou}\on4c_'xwkHXnGی7Msi m&|y ߼1ƞgsl,|wNtWc^O3Gt?k.gb˨yB\t_ry"|.GkPbo^z3R;d:p$-}ٷ GteGc8]sJj[/ZkMF°ɩ nM py/MiHc2'RWz۷}qm[%"&{Xn5\yla}ʓ+oގ}+ΩJ+Ahsڿ]RbznqUAԤBX\,5;Qew{8^_u'k﷝'QGU|7 w[Jm Yyqy "<ȟ<)mׯEsm[v=ĝkӋ V>wwqc=u7O9k*᤹˳d?3d/bJM-y4*Pqw{w/ݍޑ]z4k&]GQui$[?_lЩ {HzlQիf$ .<%e= VI#M ^|b6㬏S gMG8TRj/njM&ZM>K?'$:~ox6u2Z6}uka>c69̏6WeyæyԒR߲O_U nq65hzm-ma-6:)Y[mgt<-Jַs8R=}{4ùSmgxv}XkqSoI5} m Ͳo2?1]ѣ/jN.[sTߺ>sA拦w`]/jݙ GGՓU0]htU8=uӷtZV+3AE$_8/pEJ_{;4 ;@X8 crmu&0jaj^A,:]9D7sL[w2}?F*/>_.4s><Znis.3,敵hY,Coؕ t~~߁Vo?b]N} f\$3|͸b^r/Y*Jо\7+;.?#ξ!WLj'6[Y.sv2ȑB=>OzYna9mMƃ_~{n.ݧ^0m>ϛr#6oH۷""&_}E 0kVKӷ`<پF%` #6~mס(F\~N9IΙk2j ,.b ̯ \Mțrq_qm[uQ$g#>)aĩƓyK;Э]+Af=nY^#Mu*7~y߯ʵ!7rHHn/er${Vȭwݱ$uU /oU4A֫ϩ>Y.zS>}P^-k :#r's|LOZWzݿ?b[>Y了TFnc>EX|VX#w7Jl>5woCį9M_߷Vg麞cP0,Y[̆6߹쮚[翘kH~~{n=[_\]Eͽ?I-#2;v+(_m;z?U*-}z=.Mú.n[ZKѳI-Sc!dMjboǯD 6*~,GxZHhwLs+q;R,^}=;{Tp0׾Ѿ~!{Yւַ6LɎ0f]EjeUzNQM}޷=Em4]Vv^ICmVo9Xysn߇o3J0nN \< f]SZ^gcK y-k$m+[^:ƈ﷉$+dXL#*t_Dyҝ59^_^??nJƓ.ڭ/KIn2ʉsryYOB5k7~'; Q?>x^Om{Qֵ\I$oo,+fa}>+Fa k(־]u걩'濥>,Mt ƑؠYZ֬䵵Tf ѭ%ȟ:lM+~Y`p~*u5o{=SRINз~Os>GyXNC}u=1V<-m$gw%NR-mm?|b%fw5gR;-%n:y4^jQlhkLJo4I$o پ"N%%kfjR\p_.y߉kot|'SiJ+cUQ.)O/͵I./Wh٢C8"%zL*N薩u=ճ SXz|Ϭݧgľ:?o^u})BЭ4jϙ3no:r]EI.iTwm[W~}~GTw9s.׷g;1x?z~',7zxi_O5k6udy:FsՅgja)AѢN/^kCOu"hFIo˧^>Ǜ|g/-xX϶𦊱i[2ɨ3H_I m)~23#༗#~-Zagb3&Nʄm֖/s [vK|=kǯЬkoi8G%^m:B3էkk8ak1PoYϛү,j_~4{=6UcEMלNc?ּ{QR,CM_\Sb*V>nXGYE?S&fM;ELes\"?rg䑙7A"l~]n~Fe'٭=."S2C0[s*cz׍Ru*iͫ"}/յ+J9cL) L[;pg8(k/{Mk; tFŠIi˻V^֗ͫu|][ yiڿsXIזki.&^G7ɵ|Zu=i?:E/ahV7w_~"]"H6pډwe_:OĻW*swR)/;wf5 ۙ4]9O}E[aSlћoV_rNwn{oi]FEܗ7! ,Hʮ֞_տ̨Q_uOf-Lֱsko ɧisٙnor+^2j>~kns)4Y7Qu ڃPD-&s}ѱ+uRKyR}~?lbz&(mL ELR==mܯc$^_NNup31YOۯIm{/34▫^]Jv O "/ګ4JÓKK]A3_Cn ͻoo9SU*;khsͩZea %G͹QTmӏΩ-M%ku^\i-dtj.Z1+,$?([7z*FhSH _E nfBYwgr{fVv^%zK{HJ7͹ǵs;HTvM%Ǘ^m~T~&Sm}MMGWi7Fon˶6ϟz|vI?nگU>\ԏL4o6mr|VtkԯۙgM;t&뤗ۯ+9fۗ]b ^V<ى! 7˷⨸:{(MW(MBWu;*BZ(Lۤo&X&=6$2E .! 7λzF]]BaOVM>LnUh7U]ۤمMB=?֫Sk"?m^4X%dfU8MѮw$Y[{zz:T[dz#F:_pܤ%mFX]_\1ˡVYwqpK!ky,JLY#[w2}Bjקe)s?/֎-:k8,#YɷFdUm~|uSO߭}7k?RΫj& +/&Utin#ey'̿}J ;}7nU._REsIܭ&=oZ7M]u:3HTԵm^]_T)_jrYߚU>T]?,V}BQ__3Ϗ/d};~6y|ڭ6y=wOY>tE-g׳3 [^NM,˶.. M$y$tM'\ǞJM-뿗3}l{?R֣e,D$|N}ϾZRj:ݼz` nőimyߣ=ZT|yմFdW!'m?ycGzk=Kg+QkxH֓"+#5;#t]'rjk~)RsI|վ6Ľk^4ؾ^ռdp'ay忙sѤU'W_4߳VVןu6g|}p"YX]Bmi$ʲ}e*.맕$խ_N[sX:z꺽1M;"L|4[#&|iSm٘_NY[XXX^\\ͽU[7-$J#7k%~/>J[_񖻩j2x|xB{cҮu=NFʶnw#GW5H-:[ϾukkAy³3*n]|!(⻘49撚̗[5?:JI ɷIO[Á^%nӦfm{R;O?ǏUr |3 S#-e.[2ˆ A?H oA>րqszMEWVO*NIZV~T3Ϩ=$~@̹GNA<`}\։\ )vάITc?\"漊(^W _J'ǚ]5K~EL\ݰϕ_g_NSRn]o{<-5#'ϟwIE=t}wbK~J3Iz-,k|n9|t5lwX'w_jLF?xq|氕[M" uV[Hs8+IjeVdӥlIRVٛlmZN[wNf:H|Eǧܬ,VMHI$%<겴_yw~#Mfɕ'`?+6zqow ؕWM}&2߭?nkIwy.ʻ>̛&˜դ,L駯iwembv $\jsDJů%~IS_ wjw;~]ݛZ$M̞$ `VI#ͶO?*2d2EW|r># + հfF`q"Gl{?RKWu@"t A9m{m$t/^|%D>:'|)"/CC66cD%u1T pwO߭ 5xO>[S#FH3m#Bͩ^ɺے=>3~~a<1|oAt~}gKG}o6bkŅ%oxH!}c!+_6r/>񞟭iWV?LYu46ZjC~RpI}~:/hvό|Yg#x{ gƓ}$W(qr4 [Tif_; |>˟'^ofi׮w̩Ay__/^u/{F-mu }V[i ,-}# yGYDVnu[_mW^ynkV}ϣgkIOX5 y-qogm ۵c4vVpo:вG\ڥxr%d Z>~>.NiuĚfu{偤iwy\""":"9XsN2޻ծwWm_~"UR^Zf_w*a$ez{ Io^D)-ijGXx>S̑!Ys;,h YEv?vʲM??ϋ?ho|}3>$<}5ݬv~CU"G&x.;c?O :1z[[KCEЊ_וk:kφ_"BOwm۽Z4mk53#B7tLiN7n7U ӨԚ-={/SO>ZڨɻzU:m^i5;#ԣncgM [?6W~Kwkm?Ľ'yő|5)Ы"/O檚m+2-u0G/w5Et fevݟOMK{$]Wn\ϯZ$g2OGRUfq\zfSk+163n=)w$tu$ud778nw<+H)6ܱ$XJ\7M=]WV]_gIhHQ+Nr?/Ҫ?L2JfF[v&};G_?͗8($꠶҅]{J ʺ䁕w1PۗOwz^bJ%P|oӜpML4MoQ}lAH76g/=Y9mw]ṽuh(B)n~Q ?pJ>iz޹?[Q.4&b{n#FF.鍏&Uo{/?3جIkh'-L즵_͗k2HͷM$j2)+;t&_>.t>4Zve3[mgn~J=nf{ku*)il` t՛v]zڭ[[1d yU[`Sv ndݗ2gY`a"lb|j"v}3O,|&Pu-IP}ܱf,**suDwu̦G|)xnFYbWY?gW%Ӷl{EkkסЦי]udʑiw#^$(It/ɵp/9JWW㷯E=Sy7d2%I$ճ4UJ6#Zj׉-1=Zưk'/ʟk:>p{w9x-q]?5I[~[sOlmGM&Ohjru}Zy:e6˶i-am(ߙ.o>9o6n k:{K{V\Ѳ^<+#4htl>t7IZoRpc>?!#E sy0:ώuk Íphʷ#ϴ.dVy>{5BU%맙E\x̽bVtqQF̟~s"tEuA&ӯv`75ۉgtEM77,*c"}Iəsɞ6$ɱvʬH*&oKcks+uSR .elݖW)>/g*3zklh"oVֶ2YEu*Pm]^fTy37}E,|:Rt ~TI:+yrVDnצ@w4_zQ)5FkF57}omI^B&hX|W?빜:S=mXըK;_19Rk3VwfΙp{l;<ޢw[.=F-^4V鲜m?{' ~!ŭe9*$VLsA3.ͣ&׾0vqYIp-ʌuo@s;y,9@ש%Zcw{2lYr_{5oU'ݳѵY^KMJKR53Socۊ7ɭ?_.5}gLV;cDGgPҶSΆ_tqK}m%.gKisodVfq`XooI|\ݏ]g o]~/l <Ǡmޣy52I"?iWٿc߼/Ӗnw_tZ_Ghқ2ȾX~eo5\˚߆;%ft6[N~W]~%:~V'fQHѐ&Q37ܤ_ D@K[u qGdo>iw 4ދ٘:6጖ڠr]>z~AlݏN7_Ky_1JW2A>\)M>O)%6Әo3{~J6VQ5-Mv(.e aU-oklPW_mAHyM-3C"I6~]3+Ȍw|څk_#rfcbGFH"嶫6۷mVSxZ~L+~~1+AfE(Uݷ.Ķͭ t2MwH Gi{wZ*8G|OD<>^B)]v[sRkwq~ᄐsUַmw .ChTed ٵȥ2Uӥ1?ٝ da{ڴ6~x3麎[k,2rjH'udo8%hRZ /?woMƺ#W]^o?=.B}"MRO;$# tMEl4woտ/|zu> yo1f`۶u'u$?V53g3/Z wR_o[x;h1Z2Q^DW2vgc}L0ΐ qc ?{;Ac6<2!xWjK6_3o=dlHw̝Ϥ{i}Kga#%ݿҳmһI&G즱 )գfk++vُW;3g.]unsWQմ_hz{ 8ؑvȊٳ/NjVMpEtL)-/y9oFދKkM2񦲅V{ nY~Umi>u#F |=B>+2[C|̲oVJ;?䏟#ͷ9ѭmd&i Jw2+y{[}o.e|#"4YFX-+ƻG~jU,L;?0>?x]6Yu$171@I϶=;VPm[Δoľ:jE܍#es%ՊnfhY^E"/*w׵3pwӯN6iI늛R}:Fw.֍dt'zf?]2;m7+_^zKU$bM }6L+vΨ˛שimbe#@˟7Z(o_<QU6{v<湧(׮ih^i[[G>[ۭϖ9,&k'>+=?&ooZ8Hr/ޓl^K|A-m${~/!` xBP/~ҿ~ߋ39ZI~Lrv qܱW+.-_ud1m2~{y7ʗ̻nݻO߮-R_fY'uO,<{ .kVAe.ߊ0^j Gi5gb9.YӅgc:jSR)%##?sHIYXHVXs5/͹g-o_/%Fķ(׀i&}6$?/;;LoOO28aBߗ9^e`x>ZIYo5=j)uFKҋ1dˎFmJ36xq]p+7?|?n6ݖ{%E'vlr]HCn&}6yMlmFg"?>(kK^Z%fuQƱx" ,nOΗ:jx}N$[H+ݸb?S JK-tٵXFTG7#>My8~=d{OwougG/R[ KVlӦ75h]Vm[ӊyZAiookHa(~oc\*4ZzqJ{r֦_px׿yC"NR]'`#%yQ {դ[3"])XToAS)}FG9Fop4uA嘨 BŷI\]a9ci;Z׮׷  @UeɎՠ[$rC ?W&ݸ:ҳЗ'9r3x{hŸנǯ5mz)>A?.rpJ$aCT+2{ǃ4fk8ݓ$p(SySnq6}/OٴKX493JÉ~d]'SL>G~?}k) s[;p?~!P|vM(Y4eԡh ̰d3ӻUw9/Gq|C+:+QI/ŒڽsWo< {Lof>L/K| ~.wvu}eIHKi%l7SGi7o]9?x"7 ~Kkm!M%#NZ6HB6l_U,<)=FK][].G^]]ic*|eY7;ɺOz%S_ɯOxoz;:D:MHN_Ao Gi1exfkVT y0xBKԼ)p GJa͔߻D1ȩ 9DM*]"'ǎ[M?H/4ǂ #OTECn]?"ۺv|ћv$og~'YixCE`@u y縎/oGM W ^O+^&Fԙ$Ҵ ke͞v.4dfO6o*RRb=[Fk>wq:Io3w_Ԛ< c}nbѼAu SM [¬;.c퓧F-Y%w_s9V|רxt kW:楠hI]'LKe0w 0sIyVhGKNm۽/y+3&Դ-KQ/|?-cjWwu2Ccq ~of?INT]_WuorU~]Ϡ|#'}C"G𦃧4zi="CbJ0L"9£w}7KwМRwnXҵ=b_x2ISկ"kw{w^v5 p$(&uVcy;f>N$Eo>GDI<~}?fkWVuz:ImMSz5`<@FmuW# ډrtcOwo{r K&j8DvXn6gYzr4o{w #IusI#^nۺ{zi][T9AE,oT|G?#˫}2֚ruIt%&.TV7MVlȲLtS;$}󟸺O勚[F_d\iCYV  >_6UE_wG^WG,=e/{k}xPU_./q_{~k~ mD;=ʪѴjooZG,<\#)^[~'3!Gw~n}6//7OzYӬmyuZ *KCheԩ߮}x[ÖlDVꍹ-Xl"oUٹq^7W7}u4m-6H[{8O99B=UF}u(k+^oԄ :1L<7}/zCx]Dygg:6߳}Ќ}ϓ Ϲr%|m?g(Ѽ)M_~޻]5>=?/.cf͚~My#zw*eю E.i쿯_K)bJ{IۢpxwX}F{O0rV-XoC(chP~Ko}OT];4W_ú,&54QiѺOw7ď +Tv3U*;]uWγ\yueJӼmuG:.bѹԲǤdq;iȥFhrAk$8(m.[ms|G.6X[z46/[7_lo.-t'%$O7*B<іm뭶::QݭW~<1oR}{^??M7_lfku}lX>MZPQZRJ6m$Ir[uԟ¾+Zmͦ?O&go.EfwKuԡ=iuawV.oKp;^vHu۹\i,Vg] G'ڦG4'\}Ůeݫ1~gx㗅u/:fX|`Dž;yUoV5ČM6HwMܮF*י{joN:ظNUnL>#]icejBGwm6?ٔ7_b?ܨYz>nǣSz=:n_SxzNη<{P[Ϟ̲6c^眜iIP}dԺv\gh~"g/W28dhկ'<O2߼fݷwtJ.,ļkpb1rpvZoTs7:Z$60 UoH$b{ר࡫:'_н ŭupSgH#!3"sW |w~~FOտO;~>g/esyXxYb F-rBФ &x]˓,^RpI?}=.?O!g/0Z^Gg ]2I47yvٚ#ʧR4)֟3I_M/|x&#.O># -[Pضip'WOy=!q[~kïbqOh6no=NtiЗK~=">xsQUO[}Huڑ>r7Szdz1q^{-mtG^Q4K/|4+ƙg[~ j"y76aFdNߵ[.ntK# }1dS\ە٭gwWbo9oMN5+N->T;^oT>#7k޽?_5soVMUݓcɱݹhᑾ7~aiVz=WF||\=ZfΗF֧⫫ x6UumBE[64-8U~ʚن j%ZK*6sO.]Ňzs&[q^M<,c[VV#s\8z4=.zOe5)}9c㷈ob= o8mm$nѴqǹv8G*J%'9iO]ߩ\yt]`~^UsO_/x-2?JZjv%V;8!Hc=ȈGVeu4mO-s'I.enji8xVOƓh?AeYhuֱڭđ[;[^D|ˇgl3eoV.ov޺yZ{=k:5Ȗzǁgf)5(D_ 4[׭t!o Sˑ2d1Jy),r^C"|_,d 59J(߭wm|7̧=ǔ"A/hnx9t]:iXOxG2oXd7<\6EKZ3I\ӤZἏ%xӣ%)~=|/ߌ}/jsqIi5K=U;F.BZ0t4'{mɥ]B'\LYF۽ s7[\y صŴaͮa[~Gv,T<15Q|\]׵_ (̴圷Z+'.gŶe [Zb$zSM #\];2}O1WEDٷ>e|sƫ.K|OTz{nWlqum=?LG𵅞emkd;hª¨ߓu\TJrNa]uwM4v–qhّVBͻmm?yͷw; Ԥv|c8W͵[o+H$[`|м5yuSxƑ\k#~YFsF$MzpM]|M|pvꮷQxOP^2,{NMpy/5JmSV]/{u5q_Ķum4p\}Yv|GX6BbFIGO_Uq-Uk>ݭ!pUwxW~5eOG~Z͜nc~]6WQcYe:mJQ]`]=DFbY j3#ݯTm_uӽCr]wJ&Bνx<e-$ڶ#p.$hko3'ĬI)Iz-?s 5aSOȪ"vys-$o-="{3zm{y50mo,3mU&hs׵Ћ\=6)6@mZtoM24MH!PuXLrEBbggN.+H;wPA~GhzIq fmJe+(,m~\U+J׷W^FMγ>Oq+g q+#Z"ɰyfԆ}7>&O~ǿ5MbH0wK?mT8 Dwyҳw_OpsV/>:]j3{")l+nbv'';3^-֫n]~?RզMTm!8HcmY$2+&sJ(-m$`IlG<㍷'4_mz/tcF!4KkUxYnc hGٗs%{ͣ* 3_ ]|=~$VOvOeack#Ychf|yuZ_'qr>kkz_4ZFiP$[]ǺI.8XU$Ų?8E_wΆ=rҢm"Qm{5/ f}߼4't.˧ΫDC<Ə͍fδeSSM[k5<_U}OKjHeOKUf4VI"Bww I4um쏨i5k=oqr9}QWwFIߩ{w匓?]JJ qz~&u}Ѧ6{<Bm"IϻQCIhmia\I&CeuO}+tKL6u{)@lhrnk2Rs4 >g!s l_^}r7T~%}lDgc?T62Rs9Ȫiu{_SjFz=?O_ҥ,Hr<dk>zQ,&}N7'&`kQDNG])k:4>YaV?˹QZ.R4u;$  wMO[ RolN|f[k +csq#IBd"~!rNȷ)d;X.Yr̭jy*1@ڠF~Q $玝zu9z3ucgs:TPF i>K2]^wKq?_ъ0$ܸrX|Iވ=ۼ1p$q+dǛ]jW+%"6cF]\:_NG9UKب,jvo|Zz?MiGcDd{idw*ׅdz6A]FƟ៳JOٕ˵ /vVg-_t}ef(Qux^ytvn4<[٭mU$~~ڠ/cyumcKu/ͤ^k7:}ͧT,^^ȲGj4k4;>.$H-4ߗoF*m~>Ji7x䖋I2fĸWs|޿&p~D޻#^5 }_2\\>isjjY]76="_y\O{__,sڶu AH5)C- o$sMpQVfٳw$0g3| ksuyu,zޛru$~g;-4Ds4u|2O|Wе_;Ieg_G eh7<57:sO^ksw/qmז\*=sFRJ~h*n7nߋfRI|ii ]X,6jGIéM~9YL{?󢌭ݯ{wm'Hh:-YxGյ縵=Rd;짝lˎ?rզկի95v~]OA} Rsn ,B2f̕?Fpw~ 75wj7A5fmf)lwHMD&ROG'sV`k𧉵톉ZxvciVzdLy!mj8+ukԻ&xkğΩikmJ-sRk?]]AhӼ7 kyuf˶ݝ/>k%#^Vc[O*+ :J5H_קnҟ~c9ͭuߺy?yoI| _|a,>6":vh0MĞnڤsyWL*dsYGatޫɺD)EМ]ldZKm[[]~|{տi_+WEnئ} Vӷ0;y%6}cp.:ÍgSIa|5Ni$ݭ{kFOJž+MEm"&n"ݩ5?x]̛0#ɲdγ{O h64ٱ\F(kU'Į(d׷eYu }BtO5'pG*3,lO}o#9+=?ՖAc![5_:5o]W?EZУynay?7_%r6ۺ3|^oc|7[]ؓRy _VUfflts/nUf;ew̎JuU.gR6~OЭ?fEmbq"5ǜʯǏ/eyqԕ_R M"+{oo [kfH]ч9~ߩn?>gzouW˹V<ϗ<'W0";|n/7D(<_tՌC,a<{: qͯL"[Yα"FVml/&KmJGo-22[ [I,/q_[9E%Ӓ~n\gLQ /q/|X#Vb b7t;Ws[/A}_ ]k'ӬV,\vגIfO.Kkxٲ]iD8ZzXud\_i-}p׋qrGM#"|~='YY׮߉IEnU >%[ )qBɷ.[ysH~7+g_X^\X5k7$}$ rjX5rFA"*;٩eUnIbG=ZǙu)Ե߯7*r;hmrF=US7m\1澻9_bkVf,#bU?ַI<ܮ-` 6sɪpr:KMD1_x{wEe*v}W~"/(s~r25ћ'1һ$SѮV=䟽п*' -}3K7]cz=cT$rxH_O=?)8O+ "\!Bo|h(dOI998w>ɸf>ޛ{Y69^Iv뷙q_8`KxO3>GO3mY\bҷW-j:uԌϹقpz?ș˕v_sb9|ׁU>"9ߗg??gbql}~m\ZI=.Oy~!$y`KxKn3[N0O3?Rn.5) BxX 62|?4?otcχ~GJ6}${[Gs鶿Kz^}ƺ += ;x;㍚[̍ms xޟ&3 9_KC~7f tg-c9Ay VgM"̷;9[=U4ēY%_GB~I)sM tFw^`zo&27bN%Ue#vt2>Dvp|{1WI|+Ȑ-߹[mvu~r% ]??>OI0e7׮yw׶G̸TvNJu$YY}>_Q])x~U?*k̛JR#, B:kxBNɧ[io4?(+w̭[P[6,9fpx|JN7z_#㶁rA# |W~zD~%ژhbUXW~_1q9IViٍQܨcVy~U0ujcfYj5ݻs+9V:{;]ʍ cov\a}[tHxV~`?9o̸$o0iFc$GzuQۯ(!O@r!8nZж;'޻?RkpCt+2Y!ڌJ{y"[Bnt=I䜟wxI-I>ȪGK]=sMj丵G#*\}]췋p}#{@ѳ*edv?>.}Qm#>䎿ӞN RkgqD:8氟nJU6ݖsRhR[Z=jE* vS#|~UVݷq_%4z5"҆rvGKDmvn]>J_>Yc %!q//d^~EwMs.Hxc뿑313w] (Ktь~}BDC6I$2IjS^w9F凉ӍѲc򽧗@7 8 r3w֡K?Iwh74p V#/ ϗ'+4U:s?WdU?CyZ5s47rE6~i˛ƴw0u|[Am6ڰxn-.ݶV9.O:w}H}}7-.nNj$GYy"r7tSn; Uw4}gĞ/wScxyk5Hl{m%ͽdU[8aT>3w?$ل't)F7~+kk:fkuGg"s4C$2G_b3I"o(Ujw/2燃zvWvme!1)eT 9ͷstV~ /~]O:AR{GUAoh.cY?ǽXԚ¿4cJ}[W_ud^]#1umSS]{kZ+irm_Ic\m?5qK{ ud_i㹑$;}dǽ8+nyw%+vmM! |no8s6^U.vq%_2Q[;?ƓxÞ >cj}r$x6gT>Ͽ?3L(ufRwPʡ6)HZI#ڿv6̌xKp)ie/nnb55dLI3VgeWܦ<-+V%/BkAuSC l$ %Js_h;]u7N8Cٔfܫnϛb}ϛֺinjouo.\A^ mITٵ[E sKxcVegSe+ګ8U{?TѧrdN R1iHwV6e{׫ױU+6^vln^_7{+=y8^zuï;!qS-+^FVk  [6 NontiK;/:f6֡$ +L>ysRQF4O]&yI3Y&oyOs j[/yomaUuIŴersByb6¾=z o-KXќͻk=5Rw*SZikڰq+=BI3yQ/|沲V>DV^$Ӭo X~o2GoJt^t.2n~#m%vzyeсԧ5-пhh6MZߊ,|3]_E8-Fզ1l[2BoBfzIy]@i>iz<t+yr2m_>_GM=WOѼ7M4ifKxbPZq- ßIQ7_Ӥ(,dBKKaoFmuvlS2 k_ֲk*y|c zO]5c 9/>u `v'<'$MnܷF#8#쪨L]\N[B]UI^NKgw>17P9u5XDXzq[UC+4vĀw@ ΣT՝Lgb_r:۞yj@yyһ7ޕ1ߘҭJ?ܓ"~``3v7q<@YĬ|$=?_wP*޴$'=9ˇ#R=(-cy$n^,+k{a|=-pXy~d}Gd&I;HN)EMh4|4BxGy+Zѳ5{|̛\&Yo(9+;Χ}y֖ .,m57C"GM|ĸu~5-xwvg/3q*M'6òmSJVKW]\*[2>uMC[:oj~]F,"mhZfIo4[";E˦{4n2G_Ow)⥋:k@<)yAo&e[ȓg% osK\.? L hwZ}ЉQ+2L>sw|xSm/4W+{t(g>[Wk}HREd>.*E_{i]7c<_Gi7[ԣ[y-fVy;S{Bs;tOSSOz* jvH`UrXMwK##B:UF3U][}|%ᯉ'|Kk7QE̶ѷ?gd(Z=Cy_3ᯋZh -/4Ki&7{cU\Xǧq OqDGܑ'7A;שem~=O 6kZ47"=R4p0ywdGZN^d_o[[[F=M.VRֳ3-G"-¢ǏoN?-Dקݻ͹'kΏ :ׇ;{{;88EXs,4֩ FO/|zzy#S_ xY5O^{QÐ,/Too +Ǚ2lZ//G%_;互&KJ=QDMv^hcӍ ɻJ6!t}d.\__;JJ~ _CĐMvqiI;F"cڢm۲ۤrI jh]y$åua9M*Qk[y?9o>wԧKPSk; 3Su]VXVF1tcˀ3{,76aHZ/Hݻ^kwc.Ϗ|N$g@KBƲZ74>u2FRLHh? KmuN:'hu9_D/K{kB'GK+eT+qqp֫6崞Sy3lL|u%8Zi^_-= }ǺOub]ڇ(L4_64ˣq Mg4$o9{BnIz_}࿺Rn?C=iߝ|^Cq<7Ryi9klޓ<<$Q+[KaWE$i}kOZ֦ZmhMGiﯭɺFJ&!XϿ^ 6k~[Iikz~ WvW^eX4"hӵ >X&nwYx~Gm/w.:;om)t=kO_Ju(4F/k:s-]r :G#\l$\ƛa1o7{sjy~u'*}^ޝUY?zBBt?J~k1vޤl菻z;֓yNv{c%Y;5{+} [x}nkT{oݣo/ &Wwx_zIo/ۡԳ-Z~j>'m]==:/-q'"L"H<ѳ={[7tu>xod72M12:[ɦuh$4"#dFOңi!) ;|c22;Y*|4QW̷{mhMn8+*ȱ֝閬ߥw$>NV߽- ߻w:oy'y߿Ns+~kO߈zӵbifFo܋ᶏvݿ9OWHȩ[w9@G~mt⻴մ=RH/|miv2&ȢHy`,y.Jߕ2dһZ"~_,>/n9,gXY<噡;wB/ 4&zLUoos~,yÚD&u<fL_s|>g_eCGE~KWhxVnJ9I}˭k:+|/#kHZdF ʎfo/δN-RҿGggKIŻgoxPi-,H|50ׅZe̊:Mm$9ٳҤWWm~ox9sC-^W+oz_/+mO ]}RuݭƷXy²+"#$.r~G4{Jq^[mi-OSrЋjW利e^$χKuۯ^ k8GZy%rdž5$#<JGeȶ}0_[S!ﴨ9|12O7]5ԍyr/&Gsihg;־~^jIwMv}?[.|-KXuMeI8m{,Knix{M٥ESVޞ{qiw[ =%!bTߙx:zWtmMݻO׿Q'k| ӵ "[[,Om#"+wM˒?W$<)߯}{τ)Fc}M3[x-DC u2M䯅ڧ9y^${|T.__O7h>оZh^(fMNUmr8t4+"Cv2xXٺ0pmY5^ǝŵ=v 6{ti,:-9&lo&طʍ$H>y>emɱX9rd}kqKIAJ+ީk[OmJ_7|emx_i6C6 m6t&߷|pJ(8GOy|Zٻk{*b'yI]$H3z(5 .^Zl6rT֦r7LBv\!o*/8__ x⏈GHK:)mⶵUi&v4>~ ؕYmY?wﱶZD毯 ~ ^XK?Ïk۵7M?1N~գ跻bUxaVwt~tJW<c&SnuY9vVuK+MßOWo>vGNG|E/{Q5qF0USGDmwBoO>1F𵟆> x?H$]/_[ڶfc m4iUtmsMX#S)%"Z]FGfp깯}o/xV*<_'Uxgֵy$$߷zR7Ko~cW9̰-ѥQ+(Mk'ӣ[R/~ gL-+"Wߝu+˫RWě7#Ɵ'8j"R=V>R5dmO>w~eǍyKH|=BL]?Bm]$H&%cxqȑ^2S Tkmu37:攟Go炿dك=? 4YMǝm:{d[1\Ke'M}1:޵ ec=Nb-qqmFvؿxM9ow}zP謿=VB^˗SQfVX|ʳ7]eki_ /~/D \r[]+omh]I I;tGf7Ji7bmw<ƿ|?ךmD6-F崲3y3m<}Tog/3-}޽~s<? V%|]v%h?u+xIgMMIR gk[(὿6eԵU'yWTSFF~}zFGijm"N;9?qw}GxE74ng(R5w\߼7Fg7qD6& Q=\y֫!ToF^jR7׮]{'ַelrd ׮}9\{xry{Obɳ7lqM ^]{kXC]?+uw5ْ8ڥ X!4sXljfꌭz"I|c>O;| "n~mns:o~p"PKM3:x,q;G |%v3vgVTK+`ݦ@lrdyHuB]?Dghqyq{]G̏6v/ӭD~ǝ7od`yM-;O+ڿ3g.49+J{H4_9X߰G4_ݷZ*QW_r"喥N,jlfNU_m?m S_3o GnR!TnʾTr&G}t?`)YmYݤV0#6+>oSK[ ˇܴ%mʳ7n~&>]׷Ե'v.j֬Q\K+O"ƈcmo]S;YG_΅E[du=atȣ2-Qe2J$ݱW))K㷞 +g)M}ݮ|Dbv,ʌ߼GD냝&ꢆî䨷l҃NGմWEhRˆݮaY>6}{ִ?s= j08tTۤm?|M%b{~w#4[|_GzSK#2H]fq6V3Ink(:𯅬fhag{N]v홷IjM&wӹ\umwmҴkeYG`2[j{ߝ}<5_O[s*8]3©gX4:zD0Y۵4/^9a)իɤmggcjwɥCH>R?-$g_&V615Vfz߯~OJW^&o|*OtVze0B&%̌gbͷdֹ&۰Xi [VIA7R hʷ]lQ?]IQK͝e3I3]ow=_*.0RHO:e0A3S9<_Jˠ_gK đ8={Bcc^@׎Q7P3&Mߏ9tV7}m,H?7aQ[}j\d`By{ފȌO4w6>w3̯&Xd6O̿)fߎ[(r%+m]IO0`W;$hH2FoT۷G.e}g?X>S𧈴g\?kEMk<+nhYS_6VjnߖmkWZ̾ Z[/\hvkLbIy$+4~Ot9rtw:ۻkI’W+}hSW5ms L:zmא\{sZï3mٟ't Ͳ]i!d[-,Ҳdi)Cp[z?ҋO ,U{Um.R}_o_Rk[VZ$4u۳gZNL E;>yKrjengS1/ s|ݻ>?閤t!;;ltk)VheL~śjsgo'ushsh:'ڧ٭fkK\qoMEW3tsж+z.eɢ=;W,d4j_]ɂRz]im/^ӟ ivqj1[O˼f,e?fdsZJϚR?^:OSo?j/7ZF,5i|{|t7% 3YwMsyM4{K7wm~)S ']Vw׾н6mck!l< jIʫI+;KKЦ}_~>|㿈/s[9AXP27bֿ+Hܼ.z1z)(;uk| a-5GZմ]oúOȻu &kWmI@ug.xZSθi~䶟3%UYQW 5%)wN;$O{U=$>s:<~ 'ys*\yWC&D_`Ktw*氯 )FߢC%WW+}} <5dG$ԭY [;{/d73IvTTgm{wJ_KXh6n{S80,̿9>MѤ8t}i|2v=Ģ9^[0okhm'$l;sV4EoRGe?sHm1/]qT?#Vݒk3C "((E55YUbUTULg:ms^Y6~{upIsuΧ[̶nͥ6˹<3ջ~9 X:nu+)Rͥqw42jv1]v>O̓䢤6Ƣ&lgU0v|?]vZF{$GTU1;~sUO/zm⦙~װZB>3zU1iz7r57\?7+w38K2۬sfϸS#/ʭDޖhQtZ"dPϲ.QJpegtvwy{?i_ p)|~W<{fJAH$|21(DRh)lݿ\ֶc.[{1mW4v餐ޜT&y5tN(%wq/o~<%uӫlW.6Z_7W 3Ӭ!JHzvxStz}{fZY[," 1Kyӛ=Å;w_/̥Je&#(ͷr?ޒ}_[՛fZ'&s+Sr36Pʏ/ޔ&zPEm_ס]jWvcgwv[rI`M"pHǹ ×PK/ <*iM,j;DpkXZʩ_kkh7_^yeg]7+)k.ﲼ7gΟadOY̓K3._44T! Kß1S̍vȕO gkѩ.[~>W8/:R|/бVt[rdghwMCNo{Oc=y|]qNKB8ZmJjZy5~_}z /#R˭p׫8SRҬl4K坵m݉h Eq'!I :?ݏMޏ=j-ZX`XkǷ{d ]tGUYCj=Kc_)_铝M\v5x[7CʩF*k/Uִrm[!5wSX5j7ѣE29hfʰ^VR[}/ׯ̙-&WXed+F͟ךF6M:Ak!$f&o_jQm]c(^[hw,VUq0w?m'_]8]rg`؄5XvFu+%}~}hximkyH˹w'7}ڹQ۾k2n;{2/O(ۮ^4r!sӯ^>yS#e9'k'xM!z9$՝g>\{.#i$ɴQy<*[,jKۛkHh"`xZ\.'O7ZmX<-H:&ϟjϾ:|C8y_o69]źG|%]:eܪgYMXY{h`Tߩw?W 2S*2vmks6O,HObI9>e.cʼE}d=!fۧ<ۙMN7wrNvRhJGH:Vde?k%ձ4'o!hl~ђ;"?&!rG:PH媟 =rﯝӖuv-qڤ*U -Aԛ}F- Cf<_lwW2WodPv{4I-JK{|FX|>eǎWӰǽ/%yl ֓ۡުT 3Mqr<\|7ͺE=.<{~v䉝fW˰ۻ= ]xV20;}hw IəS]e9iOmڒs{O'0#-15N]?{V1?RQodLm?[S=T%K Qzz֪*;#=dfl??:^v+שx>Fޯ5<R[_~jovo#=?4_#8_4mlAߎ8Cr7ލB8}z,9d];c'XR4wEKz2;^ ^ݙYcFw.sڧh~eki{(Ib7'fb}[X %wI+p?^?5Щ~{ɹ! i03\A4ѱVo1?#9}DYh2}T;yޅ\ڢϭ"H. IҜ|ϯzu}wWDK=k2;B% VoQu{__ĨǛ~ hqlo5N,$ǧ׽3'tCrq#cӭ5E]=[g# z֯OF\3F;.nBøzIL9ߗe\tm5%XIS;qt 9%_w[)huݞ~i824,/nS͏֑gvR$]i|B6I}(n~aUnZƳ_&Q[~bM1.|vG__~#k_^ױ"ŮtntKnBm~ku5%r~o;P@m$ʼnfMg_U/|b UY.mL7.)a'wݧªK؂j6=):~>)TM~> Aد)%Ā|/[m_U}uZzW2⽾Wew1>ߗdF_{6-(K׻FCǩx61ȴ&$VݷfSֱϵ=OO7ϳL-o"ul6 wm\q֭a[+__eVbCvGFӟS<6m~(^y_3vW@@H{Yjw~&4MK?1mH~u\sL x~>TۭuT1YxuHZNWnS'Ϸ@M{"ʑA[ǮGFӗO;uRǪ]iW#fBSwnV}e:KO t_5i- Ed͏24~fj?g4/Jibinb%v^MgR=?wkk=dqm2.2 9~_f?NkWF >hW*|'{ڀ5DC3 ۏwodk؅ Bf*jT_ rtIňfc/@,lN'6 c{s@p{']Z]P@`n?_u}UoBbON~oAQ7RƐuɯb)I[$242VIOM+زХ-FGHOL>]ѫ.>Fsz>DssI7ȑ *7?~7$C, UL34. ^Dۗ*b'@ʱt.NϪcWu40".yt{{7VKFZRҗOk*DcNj˸+rΐ?<2yi]qWeJWMsggƺtE]y+%ݼr6ƝMȉ#/3bAZ!9c4cWKIo|J)ܻ_:Sq}SjthUaQ]o{N?L}><~Tp4UzOζnڲg +C( {q$S\[ْC2FUWwހ<_MRTfo~7Ҷ/-߽d1t.tR9$>~mRwI =ԷI,1cX"e]TOGK[cdY!HIĂ-w[b՞WNwNq[>Z0[j3m~:7Q&8(,>ӒX:2XWANn#L]Iߋ\P4ߺwq~5ofz]vXƞ`s.7_҂j)/R䱸E~̬tO*OuSg2jIS3Vbw }/c~[2-l|ftc~CDz}awN*h)E捗]&޳ddBmcvܭ?ݩjNöFP𽼒KV VG#a>"9<Οw>v~SO^DUGՠ;:n6p74J6fE4+m|Y'_y-,_ť A- l;Yw'}>O_@׬uj:j-Vbv-r[۱'z5g Y9i]p? #!TuBF?Ժ{Kw?6|zk%YCj^]jϣ$pyv5ƒ].]tO7tП,֗W~?|y[.iiK]hȸ8nQcH#MNiVQ|̙w m(e$d>OqhUm \2oFvWWf{Y.?#Uh4k;7OBQ>gmT>g@5s=yK-odm˱!GHF涒O21:qw'I+Դ~mQ)VKI$ԍ}I=ryȋ2"~wU*^X'u{X5 }hom#knA5-ĞZ<7Iw/]Ko|H?֋eMogRк˅o55THSblSoAi/xoE񇈴 O~kmMBwM43I}kܺ"dhnQ'ﮩ=}tyj{]$K>;ß̾2|^ KJ7kg5Kɞ=9\/|a\>l:M_oXҬKh/,,3,Ѻȕج?=NX[|)Q_wW=wx:ލ{en#`aok7˫6W$oGɶW#/!hZi\o~ Ɨ |253p޹l'EcC:I/$ry?'χ:m/vc ʟ3tODH׶6WMqq4rys\H2H?3}T[=Ni ?4= :K:o;7J,d˚vLgET8/h~lxG~G qizΫY63=։[o"gs ćU$(S.i6tMUy?C|a S%߄uSQ5-[OoxK_3,,Go1xsnwa)WU!V1ѵoN{"T\$67?=|o_&+ˍR4$FCe ,:+/u&Htrm~G *q<켿|&O[3Giwqoq}Y9fIFݿGjsz'G2"#=o/ooSN^O5osSVv]|FEWDqyEѕ=__ˡӕw+=QkDkᱻ쁟P0nfGqFo~*ִ{?<5KSүnW[mlۧiHgFmg6f~1dcƜUV}Ѭ￟'xo[k$,곍K2:l~O1+ɞjI]cSKU/kEz*j!O䡓X}9ӻ]g:;'{g @d<7z-S?usfh`cO&Ϟv;+G%htz#珊4?[umvEGk$3hvl]|ͳ}K_k]4j[xYnU(0x> \ӵY:3WWji+e5?Wb 6 p rۙz]o;O:N;}/+%em<+:V4ՕYuEXvofI~iNInw]>{eXty*[[="Wfj? 6i4V ,t$$GL6IMp1鹻{}y<Ӫ+o[GxΘlC Ҧ[K ق[,7ͺDw:^-V嬞 g}\D#XV^^kn~>*?oot#49.xMx}_O_WBz 1TJU%~]Λ>%ꗚdl죳4{?NUYd}nG=ܟ!%y.=#1NK}9+E̗֯]Nѩ?ʫz0ةs_m,D0҂KYv۾?sJ}~G+DK{}}% n4${03ݯ3/꟒o=l&_*mJKmuVr|Lht +BQ@<۝Y3q#\]G4h' NnUk]'>v]'S\wZ{4ri'bermWZN:߀rEj>]N=I YX+b5m™=G}UVy֭ %ygpnͻlkw-wB.8*Mɏ<3wsޛժFeCOGT7߿~FW^;4`$+2ٿw _<۹7Ԝ%ӦWF{~4?@f*ЯuiӼ8VȟlFː}5*8x;߈\K痒OSQ4{y_/#a=k /.W6}1\l]Ȼg1ɼ3*ؘʬgN+zO}vaB.UN4K? (YVW}e}Iw^!ñ_ 6d0ԯio-&eV#4x^e%RkV+7۫[4ڋ/sV^uoSX#w"M3>֏>,py븯NE|ܫ1d-]1d?|g{s/׵Xoo=;-CG Ǧ䵳h_μ17<<\+a}Mr(^/+X-g}?K>#O^ ?q'/m-vC]Acx ya;m:\Cs*x_ǯ[isߧF*1Z_]<|; _|X}[Z;Mgk-s/.c98Q6lMr\3F"=_w]:]8:.i*×wfkټ_9Gȉf;+( {N篗CNڥ%ճ (W["ݷ+^t鹉\T^iof[(Jz[׷ߧcWR+u_y̟jnۦ]"zVJMi~Y'jKkۋ}V[C_?]80\ilD#đ$7Fo]YqשkźnKkO@t}B8m9aic̆?3}ZG Nw̪NKVm;+hmcag[`K;if0U$<=OT9Vo*dsaFԿ4]y Ԯ>u&ᕼ=< j E}>MQ(Z'7ou k/x4 &siJIuaƿtG,I3:oc; h(?_Sb]/ kקRO?Zp]̪+IG%y+~?3H~-Dg,g ijmHeŤQKS$.ÑR~}z+N/_olتWIZ1Et]^:g]EurDiI[~Y>ֹUW/;z.ߟs-iBw/VOV-d[ʶ=evZ[9? 7zm떚 0[$f_߼6|fu4K-͝Dz#6zҗ#dݍB};LnkL/ 'oWT3_~̿=MvowC)ͧVՍ회vzE6U7 ė{ٳ^7o"J] z=;Hv\K:+7՛m&wRJW;`-e_+ҥ=KQ+y6Z~Ll$?$3xD:='AVK岲|Mym˽cϫWogxՖKeVc?ogȻ~?Sƒ6;\;s|>K(,Ԯ>y2k9UOkv7Wguy,bi.v3+ P]7~Q>z=z~'B}y~ T2 1 by67wnoǏvWu<w_2eVOשϩοy&JZ`n6_.=[_ֿs\_mto:.nUi&TeHZ;$ 4$*:v[.Zwn}?h:EqJʪroe/?:Mԕk6?ٞlYZP-摤fq?po7}b\MeX}ďXc-J쪶)ziG_Ȥ鴍* "J0>V7R{}Fo7:KDH :/m1L$=i/ʵ--D$HLk켟uL't9A.^26pxoߏLSI:bEXoqqo+rz-mm[޿HeM,Euyv쎿]z]>zZ~^rOP]B,G;v0Rd3Ay}<0H1L'Hߺ -2fX{;bjnNx" $'t,U~W|u7Qs3F^ 43\^:U{sn޿gbSWZiv3RPkY&MGiC5Ϳf=+t[Zi߫\qwZ;+.לYe>Ԟb[yOfmvڐ=nz}ܨ7ﴟD-"<˓NS?@ӓiXyq$v7o-mo\b^΃mc{>3 ʯOyn}k[d J vosY0zd Ǜ2-˱&I?;(ۭRwZ^W;X%[ۯhK1$`n't=R~_&U_{w}@IV A?u~hՈxذ支~])9g Lclc~UFJ;|uoZLQOqm)  fY$t"lw^7nhz[sZt5= rO3giYiM4+ٞԡ_3D2{ަj\VoŮ~eҳ}/ş)O%χ<mGK|aek ͨZ4sj3I,w/fs7$﷭j2E>]F Wo9976Gy~_B2r7?8S?dy\!\i6]vwS/ @om n>u2G|;]Q]>.TU,1XZv>'絺c;Hfm[3|\5SV_4?iP[FK9|{u[wiwn2"m_|_jҒi:亍wzŚշ_6ɻeyN5.e^zۿsO sJ6[go~—7 q2?;ˏɎT6I˄֮ݿM~󢢌n~j`vjP@#|EVFvڎ0\믩]/jPˤoim8/-6diIOi%}oZ|?CkeΝg1yp4VFgy'[H3"}ʶ붟|]|[mgŞkq_ úާgoL7I$HaL'=Y>Iݓ׽*q^}/_>'VxGKZZQ#_k4- IYHnxRg>IaJq;Y/y5)JϺmVs&>[o]%bg2rHgthe*ji+?-W穷һzO9yt=/H{ddXGs'7Q$پFޯErK/jFC4pY:ͻvn۷_ ww6Fvn[6<3I'1Zmlbm_/.?0 4&u;;nzcˎDoOV~su]Knz_h7wcgP'Kk?Ҧfmډfo +I&Zxަnѥ2FM?C[|{?+?z}ŵŚmMb}:fV?oP幡<&$3 w?YmohdraGHνJ s}UۈIfq#?{ހ2ԓk}[kߋ&RknO-חVlTI*Amq 6owi;_j8Ởhv08ݶ|9cn~\*c V̢0lc1j6?}yn{Xj{z]cÛ+#:S@)?߮$K9kWlmͮ 'F$~ZEHcTwK.ka_#kq1O\y1-46Hi)avS׷[WL{4/[M+\j;=mlk|]}9r ϗ 1_=1m]Bx̴zM8>e"ܿ?7g7~iFm~3>}]^^O[;/{$/61unR.z~¹;4 x{VG4^}ϖIT>bv\Fmf^M y{'Zҕ=?;JNG_Z߿ΗL3pTXǹZOkTD_"oKw3R oR Unqɴ[x!;kx U!xc~XnVՊgW(h2InYW~]E@:ӧΫɽZuRNI g>}I۝J8ekME2sW:ԓ9HAl~ݺhQrj|b3ӻiFDZ=6䏛jfQAD8$q(=" ǹw(;Wx qoʿ'P.O/~g #DJ2+qݯ4l|ų %\l[wv7) 78/+UYZwt{Cl:1ῼ7*U}t:Fev?533$}>U6Z}{_dXx 9'^zIE~ߏTe}/s4ĻP A&nnxuMc+|F5v3w$~_R{hד=垡w}&{ uuekA<{#DZ+lZi䘰QWd]ZëF%25U:yԴy歵f[\H^Ʒ2I>OĥdEs_K߯3P[%b(¤qvƱ|!ܮ~z;E{TuXƮMO#6n#tŸߣ4lk>=8&ĻsmE#uk.ߊ3NBIQ{>ךvoGO1mtinden$o݉|ϽR_Du֖@-Ӯ m})YeleOAȬnv5͵ޝissfo<мyh9Y]deWGqzm.w@?~RhcE:,&Q]Cەaۼzz;$FhUvY-Xx~~N\,3kgf.s[sewpcvf#ofokH} RVV/Õ?wp#Vc:Vl׿oOZl6qzMm$Sx3F]>ʼnuZUxb3xwջӯ59V zw~5,D%on]@$P 9Qw~"[.[{തgyBܯzR涛I,ف-7OӞSH;NktiK9C0x՝Yij: nOzovߨ%[9.b޿4]ޗz;$9YPO.s߹E< * lc˽CRҢ7^ rsk~+H_09Hʼپ[2noMtF\޽Imj*\};>J.VROft6w$`$Jz_p{i-9[u&2usԌX`m3ZuvH¨O?E|B~s3"Z4ӆw'b98wrop mIE&&c䉃vOțj}B#Hp'Rj_?K?;Z䒐`N7+>?"R.? l׊O'?w޳I-^aj9eـ~է"o @۟@H .y>ܟhI.]2~^?. +K<3TggیCW_bWoĩinږxlp[|~.k-Y^጑2K+d[ZJ7~xZγIl".f&?2ڧd;FWPo)S}_ķZݗ5?C%Ӽe*6дMbֻ[`d7fM9oz_4z;t{׵"JSӣyC4%үvxWo>יR*ma=D[8o+r1pm=@IOۉg?N?ЂՍgE$Ʒim}ϵfTeg>@f;him#BɻX|Nok>d(g $U}{P7߫Bvw2--mnLiAtL؅ϗԿi2o闈uiw)}meX9%lmF uk2➻3.f|F@3|^(T?Kz+ӭw }Vo֒'_y_-ψvF#P=֩P؜vs?rl3cٰVqB\Ѷ$Cҧnhfۻ~_fMl!9Icy mf 4*Mmo/VS<cjOLL@c<&=5t+;0I`q:B< f\Ȯ K^́%imnG<_xf;ps~($dY$Yv}ޫ<&Z$i=01dx\J]5~j:\j bgsnQhQKF {b}&kkI?.ލ&Q{5MF`t@`J+FN?$ߏG/R[}GŒ^k+6$H5<^zR uO[-G8}?=as_M>!%gOۛ?ގH_H}FmA,-"k¿3H[oȿ;\1:OoSWK]my|9f=fm2 w+5G~g%~/v:oA5:w${(-$[UFZKY4eY"|-+uIm߿_XwzKZiwiayFKenC|+FFC}>Džh;tk_cqo9gč:͌?Zk 7QDRͩ+~`Ev#suj[?!Բnߍ<]aM}f.n&eޟ./!Üʿ/ks;4YrHȈZdkq'c?zx?ʥF0^ZDxGw~@U9oޗo+]C/-cnxy\%Y.KFO߁|-ηN[cy 4|2{m9ֳ)+j{~74%ק^6]۫6c,Tf ]){/ ^l6W&$B;Rpym-YԭzmR"\8@p_&o_>%$"o[vl- .GL]hn.~_i;ohJ﯒JmlοF񥎫u55yWlVHCk7ELמ>kIv2ǎ}ԓت2E6[- @DZidFF 7=smϿP O""^f9~ḍ\- ]W?懧G  y#bT,cv׏ZR_ӳdL^ijDK7?5s4/u #0Hc5#]c֚{"&ӵrw.pdkt3>fkpOO?΋ׅS`(NF?϶ߘOf|a6ׅ=m]x,iXD\2]4{t0$ȇznː%+IY_~E]]?=.|a E{,")-n8l(7 c4pG |lOL<%>&UEi!D万lQ;$?hz׫* 1믣^}7ºCZQAXVQsw~'Wχ_WլuKNK&mK흗j?tYo?9.o=G:ouomsE:s+L$O1Zl{$Y9fVbUW $BrNq) 2{*8;=oo.uHg)yu N#\9fe/9k.1]oo߽Qo6g2YҼabTO*m^sTss6ʎS;調{wogROuV祹[g?'zhf_n/ltee-mX[d۠m+ynmoz"| F{ۛqmjB7̱.G |Com?=3JL ɖl~ݛk,_;3Z;Z5WF"\YItsC]dogGo3Yɱ5)4^V,`}_ffc\I>XD6z_GHy"̪'aOX87>]?=2mVtk;Dմvv]C4>r+*L"&7+t}=;ֿ>ڼ)6nļWPG2Vm>S3mvVv7.'K=:Wq<G o/h׾?[ݿ)K/m p#[CLEϳE}J yV_נrjEhq-/;ܭ+2.ٿo|cA|[X>-3G%νk}_q9&n]?w$~_sΊ0K\|~ q߉mt #g{X35ſ[Y.mx[̗d{m7=.L[o9+_}?wf}B]NpCt8]Bc'zqrݽR<=A,w?QyY%Ēˣk̭x淇t{|$H^Qv9K1\Bf96`nxh}ӳLQ⏈[Kkot; olInqknbm7Qq9mׯCY+n||qOh4:|-OC]'K7/mI$KERDGoupye\|>֞)mмa\]Zw?dg­$0XN7՜?,̍٤FG| t^:!'{Kvw7zis2\Ũ[I çj֒}FCjG7ߟ:?;[Mmʩ+w9.7TvZF7;Z15ċgH|Lo)7po_pi?-m^ ٳQֱYͧ;Mu};wsgNP_}/{]nMH|e/ m/~(蚔zoq"q`,갼3ChϳҒIof^>%j~Awhu/ bk7~\k%լ- -WGYcYm2&. j}JiLv%t{oE`mp\kvz?͕=LKNs OSk&['Ycdaw LY.HSciμWg7hiæ_ٍ|:\mkOv? F1J}絿;㯆s|ۯzzl6ⶣkXaH9hg+g}fbn;3‚?HaiB;KۮߪكX[4u};Gxleګm,|-;U!ٽ_*Ngtm|ן 5=VgCš5侹XӒ͚ v<M?*EY?~=jSR[sO]Ǡ=I"kyVn7ǻ̉C???r{n^F }w}igi7!!67SGkmX߻XZx!|;ITIFr˚7ϗ]ߎ"ᯎ-n/5Xn˧O9o-dtޟlޞ_`+Q8U[;k{s~cĦ+5ymk]|vxwƺ9Ӽswi/zuu.g 2Crv2}}$<<}99I.jOGY[c|?e]&}JKZ\[HȱM.H9J10N9t_ySTbu˭/_ZàmRS3[_LԬ#F]#-DokqRpMQѭuWKzw#M$ikfIJnXneFeMy7%|si[Ek[vۃ'۾WOu{Y+[\4R=۶ddgWNZ9k}^j>|#k\l2?SL۴h""=¦Wˏ%}*Q'^G^xX/2~׺V\IxXS^gK(xQ6%tKUf=T=߷~?ש>J^VFk_c$} ;YWTզ_4$v$DDD lS9yձ$uZ3T㷻mNUx-KQ}/-aVj'ѧiI}+TVx:]\j^]ZNeܴs|/a5z2 4_ WSv{4i"}'L)ݽg}B;f|hfi!}<|tmiE-QI.d篗|5=ߕq澛 l|/evƻϙ(ҏ<ߓa{4m uZ_o9,sO9%w[?3g'ͽh eNyq'So˵d۷?ZF*/}u-F~5]3SЬ!Ե{ Ѵ ˟7̅7|~#YT_s^]ZgxoLķ:æiuk5"|CsV8|$;r6[!K;wowv7>=tZbLK7n‘,+aSN~3W7;N+GMSKᏆm/Ac]g7YZXV=,oqyk9wÿ˯γ2_&>y|UF?z*oKz}ǣ#?Xw«ZR)llW\Gd߻~GuohN7huɵKo?][OA]G]o俫/ &zŮCh'y3w9kfhuWls}C3J8lNIZIo鮿fYDZ*W_]_#wg ?1[9et]R%mmͽ!wr2H?5gzT4y! }]VoWߪ6?߈^);x5?i-O6kL|r};o\\"G2"|V'MIk쯦k[rsQoEױ|)BZ,v?t;َzZ.&K6 k9<3<,]j8M=ovjΪ:I7v7@E޺V<,5/Nm?7t1E6w1?C=)c|nJNy~y庿 +NZv\wuz˴5ďpw܁?sSk-=ߧkSvWk{ '@aV«zob'W}8C~#Dy7߼Vo~}9cJ ywV[yWڪY$Xbf~X'mޟ㺄/$V]{mC>f񕧆|iu7/s-9`Sq4lM W=.aWL;ǽڣK٥WNޯ]>P ǫx :7xsGc ,_.O&8&O#XcoXoOZkku|Uw}-5I!i[kکA\-q;2$!foo)5*r;GM =vfRro^Y^i?vnjt+o r<վԳLXs?By9Kĺ~ΝUE+C_wUw4׻-~x{e֟U L0ym> Z:^_AQi'=?ǯ$F{Fk2frIˉRY}K~jl>[Zkiko5(ŅLJcPc.Gd2l?+Kɳ\7Jvt?vhyo nѴmf_Ύ77I"Ƭܓ}W_tvNN qf-8oݶMѾD1kM6&"D iI'Peٕz~RO]{=i6>>\y-}wBZ~NyJ7x7Pcq-qݵ<)aud4*Zp+ +/߼UҪTպORs]=@Ѵ8EMdʟ/;?:g)KH_3xF)ݷmY AJֶ$JΧY>mM*x ]>.撮~~G#4r$$ۼ̿w^o=km;+NVmywe6KƙLfWwa&/o*7֦-A~~lt~'^t #ojWg,2ۻظ^TJzvp=G^^hD*82CiYsOZs5m36&<6un}[7cռ{0IMF`!u bH¯2]t[s [zn\urVmc~:~yMdiqw ڡHs4aS k#I|3Y֔mv6JMٝh[Z^I$egI 2,y_o_+jw^tJ+ϥ3tM1W3-ɸLsmxo5}~u*+i}V߮1IO,Am"IªUuu .ne{68JqOF*9ݹ]0˯k?/U'϶vO& R,`۷6ʿO^#^y%ȲuGojQ+)w^~~H¾7BwXB=? lUЛ{Ku/;m@37vZM_eY DE-,;Hw'o*~owik%M19n'?/ ;~L? __xVobm c4"<*^~GG7-o|)5MknJŇJN4#߯׭޿r3gMΡ:<UoY7k& ľ6%2"RG'}M_guTTor |,}G_?ɚ}|0c~`}>{RB['w\~v^0ow9g#2. K.B>oj~WPp鐽{ˆ&ޑ9?7`⛾]歞X3\XFXcݷj# ro~&jnONonknH1qjߗwb(ƬO> VWŃ7P((ۯ6rn'5 sc#*n;j@aӲJͱpȪGۣؒWf!]4ʪ"G$,Q4뽗̩u+ۧ+XK1i̫w:'ߣ\#Iuoúvd} 8|ho?׏U󷷪y˯__]Ko7lv£23.y˸RMu8$|8g +kdd3v; pN!WPAd}nZ\`6=H7dX{m]:q׹9Zi!.>e} )~%]YobZ2ݣ;&\o2۽v߭fmvԲr8K#sZ(zM>j\LIbI~?J\{~67RVEHgn̻vۋ|?+LmU;>4e),Y~n:1R~_ȭ(y|sz妈uw<I$lkv߸u-mJz~g3^uȰ޹~!m3\u C n!wXv[;yg,iէ[$(|ydm}<}IGxz˔(u<߽R*Q[S9bvӳ{&  SHcd?6`,Qy_`A%ntycF+nsϪ)lcYWv'ٷ6Uo^=:q2%ۥƝ$M!2pSF=FWƁQUY[lėrO,ƶCkya#z7~6{@jP<(uhnoRWUKrD +ξJ&DﭪE8r]SC '㽸0\hLw2t>o/g8ݝ̘ǚy:yao]C{+9!<,FдЕU^&դ(޿+u-޾=C2> 4:uhMiY6֚64w1RRdMo夏&Q*N˿bJ/u~>a+?'So:úWƥ&"kO67v'{]?ۚb5;Y$pѳ}Ó޷Z~9ߗe -/7}d-KpwJ$O27VmD߻(~Sm;i>𶫫_'lQ즲-άo.퐺vr;4~f͈TW}ߧsI$LG/X5緸kˈ^k-_#)埙̜d/ƾ:{^h$6:$4ߵ.0nګgVFN뭌Znɵeo<%ƉhDžt]FKC6m4k!ަ?7̑+J:?̹GǠ>?ѣ|& ~mJc[ VK{Y5cYw>c'<ԥt~|oK>^,J6۬Q34qUWyٽ|YAƬ7=:wtuQNTYmz/=Rm3:x~MmGoieccMˊP)ǻktWڻz5%5n?K .mjG21˩'i<vD؉,H%s.O݋r7{;~nj\ťk6agvj)>Y#ETeWwy{OsOhk[]>@f0"EPU rse32 ;hv6ނVR f80"1rΫ] u{X]~ô.ۼ+,ͷ'?ӳinr[;EHn$fbda 2kp)4m~o~ܵ$ &PŊ6z]ٌ͍WӯNWVIk]^\J ĉp9W 6vP]Nuoܷ#rٗI%{?OdyA堘ڭs{J2QVK ji.ͺvc+ev/C1德ꓬ- zD>xIJ*4_!WǥtӔu?֥*"Yn<7̒ȨY ZM'ܭzR%ΆIIxfVƱά'ѺW3'xaK)"gʪ3:W$vCk(&0͕$t۸&&_PS}C󭤢b̎Mѝ*75c}^݊)M!Y㼲]]EV.2s' )-ui7 ag˳֐-#Tij_'SG>;VźچGWw̳_lᲭž_E 9x3ϊY%֤R|۬6j;̻>=8՛oOSeo sTR"V\c1_zc%u[S\ރkZhֻ]fge>c.;c8Vo1Νw?Snk>o,mn,KC7,ܞL|.c"=ܧϺK~7|%?}a%̐8Pt hZ;[{V턑gmOrksZoѝ?4opK~0YJE}WIL?2.h[L"I'ztj)y?d'Uoˏ i[rHщ_Ur: w~zʞ_Os]Aj?YrKg&?" [XS~fګw3zt(ȩ/?l}~5Iw{R{ nzOU6g[֞ H6{ʣn?9.-e5=u2[֓qg9,Ys{[uz?ʯv>?sVm(~嶩<Uau}Ʒ)ݓsUܖ(D|GğZE}ݿц$vPN>n~~NMZM9ck^o@,?Q~ON7N?p>Op_j\ṣ9$S30nj ;$_y5+n Df~ZrKԸ}/}[ߧ0Րhq̏ʅ?wߜWN-n+12Fبu[h~lo'4rG H\m$~gveMu7קVOZXGY-npIltJ{?Fw'60ۡby$e_h 6クיU7߭fԺ .!RYr[ߟ~t\'c8{~y~?ߋ1,ήO%]:{<I-D7!n?ڢ3f3*ϖem'K΢[_KuyR٧9mh=>}sӺ*,42ɖ"_-#&VqfWLguӧRNUM;-j,*nr_ݷ|7Ͽˊ˺rK6e8ػ>myi|6c:kHc?sW7țJsB.dfyu.IOHM)# ];|?2s~nZŮV_c]G9Z}41!׏ޙ*I7YH'x@5 ܧӯ=릛N 9?x~uvO=ޱ.WF̊0eT|kRӮ`>Kfծ'뚝ƭsnmԏ*Šq"oJO/SjnK\D~S7V]dcjZT#'oDIB&6*47Ţ"GrsmѶ625f֤ 5F@3GOOoЛ>,i.qC\w:fX'Z &9xޱɝo_Y[tE*گMWZ 6 _7y+8-, >;/2"?;Vnq׵oNs7$م?;$!r3I߯ g)7俭 ̩A;?37Ϗ~=WK^W߉Jm[Kv| g3{Ȼ~hK_S_aԴ}4P<-yY7 lRW}7.LeuNZ5P?kylдo~O>v_=y6}ߋԫ?<^y꺢Ja9./'L~kmS i7R_H1JTMsd{'wm1VуO4 drį7VAͽ5ei`?2HAoUݡ[MMz_m`4Kdb@ߛw\55M=w_qnk{-VfhmTjO9X̸;%^-"w[r~{4v_K8EHghge- rK͚ jL[;DQ'"gR_N/dmp3/uVU|6݊w;zs /ܼ_i4R[nt"$rif7ѵpegD>sn\LY[^$icy{deoӶ%FK+/ÿ]?[$fc,wA4ivm[_Qr߷vV?ҵ+i-fd W1^5S /;o m]i-xŭ/t2tMgn .ݒ,6:>X'̿i-6h+xQ;rыu(|Ht\/m. +-Ðy_k9#D%cm>Woc~o=KF1Iב!QU*bU۵W?n%ZgnI݌eR'ߝ|a?=Aiڜmq[]2ݑGGzQmp>FvKiX[QQniKuo z,fƩq3W>.xOX5P7sX6e=U亇V$r'­QӵX-.<]y}uTn4jϳi̎fgT:/|xSK/}Vu_w[HK{o{[gI.]g0|[s>?__-+'r8=~ |Cgel ڛŇ3mi"4dڟV57}4]jwѼXꬒ:]kKyyýzJO6*K}zVlA,e0KĮ:*5z2jrOG3(M=w6d)m,4~ ؊k3rovr:Y@=m?.;mgۻƹgVc'<JTLܛ%ӠE\HFantʙCG˥G6!n0-"5R͟njǓ u pYgdm!R䗐5}k*9 1B;vwz=kd8.#la]O͘^vKKd%6"/;YoooI/o [H |vO%k~3M'0Fgrv_#c{wf]楨-ޏ HA`Id,ڲyd/E,|Ru[)tM:խ R3n˩YE)YiuwuOx[fuSRhk1uDόe'w]uO/|^;ky4 Vo^$pZj:Ǧg#dr!Y=(AkӖOwy gռچn~IoMNi|߻=Q?GDw4w nlE(});RMmn=^=-Ͱ'Ͷǭ4AiJXyk'<~5Ԫ]w'޾ޟf6ub$%v|S?'_,}$#i<BMbWe7~83xUSXҴ; [kodLk>E-D|7J6{mu|c;_KoV]=ΛoN'~Di =.9oFIG_ـTk#B̮o$>tmk}rRLv2ɔ/V5KNtoS-,˻dI$ś/ǀGDYC -rhaG"I$.SH>J55ׯ;> /nǎA67eaꖳg]UmշIqX}oGe*^_ˡ|?M*Ÿ];Wssj:eխ6fڐp4Ώ#x+~k5ek֋ᯈI=H$/7ٳ<6p5"'\~e':ouV8 ~.^_|5.i~]g;i#I-n60G1/?Ҏ? @UVW}9HMݛ?>7#oN㺿Fqn~S|iW!McECY"Owr |S\{ĶZVӢGKZRi?x|슸zrUџ=MdžΎvp<:ƿjXv,̋GG-O隶ݯqK]ҮV]ZO9LqfVM_%7y~b|SX+^/ſMԵx?QWA6Il7-BlGڍoy"|WEJoorjtIn-wE${7ޟ vkHfItd?حm-2u>?oXWwoI?#ɗٶWiGm{ϱo~?-׼񑨕:Tvg: K;?_/-u?׋oٮ{k,Qd?-dH{g>ww\^7:_8޿yi9Fm:- ^Uc$fSmooc\?׾bj]E]zO  f4vv JY^8ɾ33yqJk7;Wۿ]φOH <K5[2/dحzt_ %;Z)m_/h5o++[U Z/eok/h:DŽ%x@7ڴv-aՑ-3M6$ID,2V^ĭCvvϋ2录i5߇hwnj`hr&OT&:FKvkDD֟R:w?|7nD:>eg4p"n?/zC_e} QRu9^:ztFt^h|-ÿKhF.cMWf>I8hvmgB4/->O1l6#wy1-ŏ#97w~Do/|nqq I^&j2]>rO YN-E|\|GK9-#gZ=Xn"fVI|.l%L3^=5>Q ot?O9Q{b=ґhzhFn&{ugMZg̞jIļ$!B1M{HnV}t"I6muk<|Ǫx2j׷"G|yNG <ƍl}M:,6.5dӧ%mgw[\_]}:]x6M7Ekf]Hny~*O㏟Մ*=M[pʵZrIr:MFc***6UB =甛_ԨȐr@Y[hy:c}cM76$Qm2\2vNowPvOK~~o}Wy{fUY|]/-'hWO ^E#HTo;dW\A"4+r\˾ksh-4CNkZ!ꚶy'(wFtj!O5s[ޯN5 m_⟍& RL+gԤG6;~U~ϏG P/'fݦOʼn4 |jyڔ%$O9ViMaϿ5V -ehh_af}uy|ɾ־_nx&xWFTL+qjd1gs$kȉ2r$2?縞&MSmSSM^QԨ]>)];Y//,/l%{{om䵙R ,2*2*/P^m\Sw>[ޝ_o숖n}w9.muw" 5_z0iQA)H(viZF6Ϳ'\ů?M~&ӶmܵxcX)gK[Tvp˸`$~t7;F_TIE]kbj1Z\Yèi9qPfMwirzإ OI}~wPM赹 6k~9«/h-t_jQ/uHA2nml-y; GC T'Ng8OuK-%so>/M7|gxxÿ Z,j)#o-Z}ޛi~wN6m>ͳs'-?xiܓχki뛩. -$̾Y[U&ō6|q'?z7 njI/;}0j3?+أ #"^𡹂;yuǓq3\؜N,O]췳]N8 I}?}Y=eNKH^Ykm7JKfoKC6}jnvH6W3f4'.櫘ѣujǥ~*g+|_ƧHBxwPz|qBڌav&4L.yURW/-}6vOVΥe}2#Xd/!6bC0>Mˉ$qHa(`pkYy=ou^{b%9޽Ng^^/oXm }hֺdTO:6m$62Gqob\7? ]Vs|{SUjFҧw﷭m:UWnƐ|c84}qh=3LWntG#_U+'UUq׹,-T,th4ߚipmLwO%FNN)^Q\~+i?= Mysj qs%4ͧ黼/&gݴ"o}/=}w818ѻ^$k[^Ol6~TEot;ܜOPu+n]~hlC|g>𽎗IYޤVrK_U5rGզy^]lO:{A+Z1{;MAg/dMx\Ci?yiu6|~Xn-I-Ź&H^6C|ΥU9wi(˗_+xOu~x*-j ~]djOQ nׯϧbfZ4yωǻ-{%,bw_3sl *[^[rgשk*gYi'P #벖{}|ɕ[?[|8 wT֦V2:1Qen?;|o߾ح֍8;1C FI22 hWy4G*]ǕVp6՞f6 y ?JoIiz''Y@9'261[cKIy~~G>֟:'@Uif0sj*\ڿy>֝?:{ߩ2>xw4^cfu'puuV?*cSq3Fww) vw-rwvI~ws:v/y=u qe-VeUs"NylVC^jOϧH[]ɈF IW21'e\jWk/l(ֳ6ñZXYj2M["OIDEsJ׮Lb=~o=oC֝-H'Gա]˱l6"vow qI?wm=՜*Q"o(m۟oϹΪT]=զMN9^"|,v:l뺚ӯ~CfF)ɔ,smU˝"{8s2Oqw-Xk[UT|HI!#}]F/W)h=#/Ya$`5c]Uԧk}|zOm}/n[xWX;kDڰ;F*vP i˶z< GI;ܺ݅>c'"x/_E{WOi2h̓FYFnOUk_Sg +.m-Z0y<1ZF˻w=Ͻt*ڧ2J[ClQh`imHUffݴMl:Ȕ޺9q.Uj=(nCjV{YO>4r|YI<[2HoٟC%97Aj Ѷ>&_r\ZWІVh9 iw3ewjP&cs÷}߯UQ{oml~-m&n|GkpYƬۣӚ)A{sxFNֿu[ rML%ŝnۛlɵ$_XFm(i)ŭE,z6L|zťūƻw, Ͽ](E6u5);$K`emqdJͭɾmhO/iѷ_Iۿuߢ ݖ㴈D[X"̊8ڮ07YWKj $vnNnGUiMMзѧRm jGrD<]ꕅ\EO_l%q;QZJ=z;_uo2Æ_=~X+(r.췥 &ߌ1Lskx/isf웶9UI}$ip{gdoV7CSZ/Gv<86fEc3oԽak~?ֿ"γMMA&#Z5+mVm9vs[q3Eqtl;J%y[yU_|z^6Ջ`%pݣoʫ?Vau}}w NB~dďU7u'|PARg^o~dS@Kvhy{@8s?NhlRY o{3aM]s`'ŕԼ$[y0Ko>]@[-Ymt{c1m0Glk{}G4{`iyF]r/?Q9'k?]Gi3/6>o^Jm;Ӻ8Gb[Pn7=#Tn]岻,&؟6d߱+II[o5n2M_͘kyH.{Hr,럿ӷ+4wF$I*dlmZ+3uUsȥ&2 97}X˼ TfRR/{H|̃rh5|$iv#9nRMYNd# ?}i }Bkl2dVߵ]ʣcH"?Ͻ;i%{}dCV:¾}=[ynγH20ǽtIG]7 "BuYtF{KXmc[$ޖȉ~GczTԭu'ŸE4f{Xt Llg[lV'*C7ܘM,[fӣqvZZ%֑ͧ2]C;G5,5v[Iyw%}2U'׳_#ǵ^>[_0d5whc<[C -W?s|Klwh`4% שHΕڻ|:_|]^GL)!a| mָkۦ뵷v#;W xkQ=SiZuG5 Vn$Y[s}f}fpk[~[p='Kc|FLK,6nu̚Ֆ5IuFfy$6X$qs"&54ԯK}߯o?Yjm,[mcM'';99eF:?'xrk]f9;mm4m-󼦒4eTMmIn1۵Z|GxSVv=.KK68n|[\Mq53#m5Y2%wF4wVΉ/|T_&25|=axM$k&f87xaIrk+JvI[롁gphZ}kwzM-ݼ4zifh[~[sWTݭ{ouUw4i$𮃨Iͯ[u~|q4}sm-9mosTWϢ/~|@!eRPd$G!khV]ʏ$){>O+5%;]>龝Yئeo_{;YhR̩෍,{/o7/5%(驜ggөsz|H3n|]]iA}gg =32\Y&}d,IbvN*lT{Dnw4|9CxxJko i&  oH( O}b-齺{(:Rc'Tַ64+;;W3W*-O[ֲR&߿mMM8cm=\5M"wv_k uEe~7b=ƽ JO1e37ߺ6WK"iv_ۛfI@[Ius5n5V5MOޥӚ~{yu>*xOBQ֠ghd!m,SIƦ97*6?te%⯁5M=EKRf/⇹~z^i>! &o5[};Q jcw;+2)#/<>f͕RK?6oܒX?$SDVo aH/uO?8_*3r>ɚi}&M1tmvu{tC/_ 72otI/^VVN:0D nYy&Ցk]Z(쒻,o ?|y$h_߾6p$9:3~*qW={+ VU;_\P)L*?7’Nߧܯ~ U<\ 5^lrecXټ#eyYf}8GO?W;nN>j ֵWt]CG6&PHn!HwHam~LDԅG[|#R0n\CCዩmtK;5;{vg捾H^dwVx6W*մ>NROz]MgYXt;/zfkxRlvwlI=-Dz)ٿM"ܕRv_֧"##:^ C=q Cp#.;G'ܤr=[ns{[kn}KþvlELjn hdm*dFXM+3Ztlu#[OeO+=:ZLr.n['ēe]]):u&7k3/(|S[;`NдEwn|qGɹ;̎Hb=zU!f5!hz|K/SMjK$s|qy$;W|l}߼H!O:T*RN:N^_;źIu\iSue* k,rmdVd1i?tӋ抵ֹ{myCbOy~Zwonʱ3?h%k Z?OĕQ'~?چ&G-dE2XGokw<"$."fYkE-ob*6S񏆴nq,mrdd]sIw?SUmuz[89ߧEmKR^x_.\ZIo;w32gqf>mx^ƄvK|Ƅg+ߵU՟qŶZo|kb[+E}ip4K}5Ef߾Iy0.gB*S妚oz}75pYocB:*˭A)Jϯr@rҶ?MtNr"dp7cJ߫3r6oQBf|$oZP߇ϡ`?g5/'Em;hV;uvC-w*Aw:)-f! asԙ>O_z*v_(tNGt[ 9eanP;;捷n{JsG?y_Nn ~!G?F"YO,rxjIe$+͖bm/d?:sȂF}DM 6 n}F_.{?|T7a$]Eq"m7JNdjV<ޛ-_\?zt;~>v;}$Mal5hG>xtlM*ukdWz9I5O/]ZnK%_P[?hٱeU T2JO84zu>57PYn]f̻۽6oe;=ί;8E,Cr#ḒX'޼ɷg~f-m.A:gi_JT}q)Yy(Cg ;\怌WB!շ}*g/%NXgk|gIc]٢\4;9.?z;ꀒ pcAUWݓgss`Ӗu;Yû$j-l]=>2O^;0Bkuw^ۄ6#OB$ת7o֩Eu\>?Hv+ZC/!Ŗ.@źኧwZ9:?g uF^u&.ǯZJBWu3{Q痯zWWӏ{5J]KsR?H?O$~+O vO_K4!Hm׏9|e{S)aepY,>3(ۭYb,*su~?Jй$N>]t"MHmzn]w5ݡQ-DVu!F9 coy[͆22*6s'|gS9[ǗSJ;1KUZ-o+l\C8G$][Κ6(y5%<[ov z[}S lԙ2-ѾY>m-{ihnI?+3/ͱs|Nyz݋4 ۍ"+|tmŻԷvsNO3I ro?҄wD5gcc3$ck1ߝnF(Z/̡ļOE`ơ[:w.̤ tYu>=g<10R0ʒ|F-xԺOu{_S R!B7͝VRv{7oxC4( Gvm-;ij3\IW `RһiZ]ݍԱcdKWs[WkL_|m?j/u6h.P[>XaU]یhm~Ogu<~(Z;Q"Znw+v.ʆy~r89ojݏ<%–Mw_{uY*\s۹˧BW|[(c?9\s7-)ӔFF!NӟwޟN*Siޝ/R8Ib7Zcs6imP$QI }{Svՙ kWY鶰_ y_2 }\j7^y?wS]|fIsR{o7 gn~Yi˖H%(=y!7eqak[VC*Y'f[uV|k5mot)M+\ִ7KҢJBh$+m?sji;ԞFZi7|m r1βhO"}}ZMV[,fGd0ZPpo]FQo_Leٜ֡{gA_y?_}cVLZs#yoYM;K=`hEc][jK$vJ(Oۭ.1\\h:K-t$] ȹٿ|;~2sTSML e9s["%bm rs[5-͙M63Caok4wSİFVgV]9ß֦g-.ݕtu[m[{]M ̻n\ʾei u/lͿ/lu {#[*+b^CIE{wt !M {t[0a7Hԥl2a wm?ֵu~o!Pm E.Zf }Nep%9;aۀ{~k0Ty]WL_-L$cWv:*Ow.ߊ1PEA v^~_52E^A{.N.~83Ĥ`s~VyJr{|Kֹu(#hnK7 MB{w(WwbHFn?.C=v~(Iʟ7C4xzsU_Qm=7 1Ss}[Z锨qulܚ򔅒 JQ[q2ZǩQ֫[y :νgdŭo Eq@?ҳz?=̻u3}X$9VVoUܭ_?aw}$ʡwn̓Ȫ+_]"q}A4]--0^ "$#?)FO\S]w"$̲mU׬רZ_0RF [oV6Q?`X,2e&*%$~_g)i5~_o ?ݍ:;~_U1_4[*^}F.&&liJ+"nweR _'#Ik|,x 2I9H䳯gvb??ޭb#ײ RդUHԂW{{"^fIq6Y~-}O4h7 To`]bk+[{yč1]ne¯?ׄ6/c/Rҵ$I%t>Z5ʳ5TI?SֺEMCGeYF;u8]/7)*}jKpﵼ2ûӕHKuo_=:,.[)nlԅ5w =EMMzuS , drT:ljvnU.+rDYx]0g߮^DJ/gsuU,ַ*1ޝu2LbEB{unbèhDP2Nm#ºçxhnnʲ3>73*>edziB[{x?gxUTm+$Q^N飑g&\Єڷ[s15$4"S|GxDK[Ylգ~U(8h_KW}A-4[{[K٦,7^2tblM& Igepھ}dKq/ޮN?kïSTP{2g餡/w{~K>ZNu|v_%E%th7}moگc"lf͸+6t{O/װJ3gVrn}nErTĨ97OY?47b'Pxxv\Sw yq\$aĩ|4v;ggР8G͓"Oj{/.IufϨگeX"y`yebǥi̽?ܦ$ q ?ct>ߦU:|BaGh"6r ;h38WLЮ Kya 7(k:"Y==  wn/9ٿ_>nY8/-YI0! C.[i{ޓmugp(":̿YΟ_ޛF:/|) $ ǖ]s]xSY2waWirF{ԄW5ܗUx-f/m՛~mͻw÷|J;m?V5+߇V\ڋTHZ]abc1I8-? fmPԯ]r^Y%0Ym'7= {G ]Kx+-gTMW}%^q~E $6[G}m2\\>ʥnvz_|u,,I-ɲӮ4]g\ \5ɵG|ɧQ[a~%9Y뗶֚ߓ"NT &8n i~eg)6nt??};%oqyyH,n 'v*{b睻JW|Nu4&I[y>mg˸fBsl2| >/ti(/f5+OV4rL۫3nhmУ#_OG<oTo,V)<ίtF3yO؎q i$9[_םy_2ީ$diNou3njZ̳9URO;D)ߥnӯ{ /UZ*i_˱3NX*8guPF%br}m_ƹ=Vצʏľ/uhq:&Ҵ ˈT:HՖxQz۶<|T]IϭY[Z98hmnɡ>o܏W(%gtmuݓiHK پ6$;@lX#VD3k |Y>oݝ}>)rK'ߟɤhz˝&k[Ӆȕ[fܾrƼr4|q0R[rEr4г[*sBz*dnW]zr_4Ku"ZFsou/pM]d/[ Ti.'ᕳZVo7-=čXM{ob#& m<Ɛ3gQ]'76|VpFXaF;úL[w]~:5Rh7RGګry+uߙomުRkRD#$IJFx~_ziIq׳X!ӈI_" En_h؇|΁m~ֵF^#Zhڭд+lrI$ТL$rtxJ9uc ]IdSO18|clj4jmϙ<~}=QFm Mlw>mQT_3442MGPBDII ry6؎gdaеLg= NǿM>7k[5K=S$0Iq#EF EZo{1K|CYŏis4 fc`kqgytZ, _>|obͯ/o_/Yi#Fs_[\^j.}&HlOk~7!͒L](mD~|=񗍵 i eֵ;mOSiS,ȶZ'"l=(E:˧﹓_jz2/j|mo )T⍫$+E2C+ޟ,YJ\?_5m&Oo _K \;`]n$D/Gi3=[Frݷ{uc=.Ob֩wm%#ً|̳ H٦C5}$Tcm/×di*F)׫3swզmkkc *â-J7>5K{4w?$r&ī߹Mகm?ʖvyos6feopIo5oЩԌ_ۻ/ԮIyq*Y]4ruVEEUov՞{o[*F;#7@$I~V-x]#x)/W_ר❤}S/9o9.|y|{Ed.Kqgk6E97L%5&}t=;Ùm7y|;7Kk ,W rKxuZe׼56yvl$ƾ\~Z#'*+^OthPM*Aφ6;ț&cc%oˑcj\I2l䫉{οJ^7?=??.oee!сs&V?ܬ[3C6|gu爴˫DD#X[ /ra͞u+Uj{uf]M6v&IgcmN<'ȳ|,|%{rUӯ,| ǛdM߼].7Į,>*qj5~e˭w]MQ\Vw8[MsNh?Nn_,dol^s6M+;\yvosNߧA}fPާ:+ݗ˩C%ԩr}ҤmvƖYDE_.O஬.o<3M𐨮^<ٜ5ψ'X_tK_:,n۟tټ}((˗]ߩ٣co^30_n ȑe-F3mQ7C~c+CFRdݽn۷vp˜>cȬmGYXloZFaoMW6;^eFsK}WשR몿[g_O']xK=gQRub_˙;/i9Vw =|}C.*S ~Se==RܬޣJ'wu- ]6#%FVO0{wؕMYN~75߮n/mۿ霍ڿ!ꝼt3A>{Y[nS#/EUh-(m:0Ȼcf[6YZM/^M.ӛOUJvJ7ks|y]] ȲV[my:*4}yQv_ey~ WvCK+^OZojKalQM\:̳htw?yy Bw+m>F/FN_P>xO^Eg cuc!] Wج^7F5=ۧ;~Þէ)w[\7}R.="DYL1ʍ$Y~25KMN`${υ/mu銶s<_gKk;y.!|Ugxolg5組7ϫhpz<k6{v{GOp|7nNJuCS]BMBui><vjސ~yҶ>e}uzZBUݾM5]S߄uLI,.d$dm O3C4˸&78Ҍe7;]խ龝F&4ܜuf|EOSm Ɩ> x7? hDžC5+;}jyVVRnmw9!$˅ :*᩿d_d{3ெ'Ż%mZF_0:3Z-.Β3g١|D N[~5YFKKE'Ͳn~loL홴Џ|/_ {KVi[DK4̑y5ۃ޽)/zO|?{V1B wMs׼Pkho,&YHsxV[vξv~x[nF<\N._m7zЌuNĚFh-xoZ~%Quܛ|aXcnty{Jum#owN~ᡣZzqezo1ۇoDDDOiuRe7Svt-.+}>Am{ j]rT&-Foq6XXCk{">_]$+H䳔7cr~j6HǭkU}OUּQq4@:,bYdX| zp+f߫qխ~}k:`,p6#mi?N nO_־i)YyCAפmGUmc,J0~q&1y*qUkΒs>%!'JP6JNVA{[}kȭv;|Ai}h-i$vfm}< 1d+W4 z,t\$v,^{YvGk&zV?N;ܟcZ=foiPSQBKy i$&{NϑSᔥVNM(.>f^-4(- haI&>m8z ˿crIg%nk]B߻V޽a1Yݭ/q{>'*,~xOzjG[o_rS~~k~^n5k9MXZTeݶk|b{7 l[̣6Oe֗&k:$(ZMmy|޽󿰮 G{S$UDᎣǜk6X]ۿ~:2o4s2VEwLX.m#M_zaٹ?׿Ky~&TdUl%_W]5p?O\/ :HL;2.lo)?. M?ك:oj:lPiN#vu"_;hZ,lj#]ʥc[vɍ=w=Κ{]({LLsD${8n*ߟOXI/0-QG=3h jom'L궿l}Zy{]vo Ιʚ.CHIw.Ah,X8K+yS|V孿W_HXE_׭~ul^#֯ .ȋntGUWm>iϸzz_Q7v2EGMo4o"Or;֢W QKa?Be#VNcPZ7e\oJԛ7l4. =6ac_s2.upCHEk'4W( cwݹdoyӢmj{V)Z_yG&[xB_n.0׶fo B㑶~D;yzj*/Fu/}7L|mh<~l۾jzHVhBItF[ѧg|da B?5}-9kKt%]/z \j1kŹ9f;wk2M ^5H I_o~kuk_?xH]'GdfGoQRԌ2҂zy~0|8 6it-R(~ Zkvm:EVh^f<;y˓,g5'^mw i*{__˧:t(?^iw6^v;h/|/6 0mWhf_ޯ!_ѿST6_s+Rij߇4@ h_e:csևZm~?;Ytt6k.nxȥj*vu|*wr{?t OBϷJsgrOJ-1Ȱ+2hJ#$ԩF^ሴtkp U M>NjR~n5|K_=_5RSp`.-ϣ֦Q4Vbxo>Q8Y]bX6ceSrZ_}R|v}: 5}cNMѧfԯ^Askq.7gMmϿNwRAo9<Oy\V'3:/Sv<;,s.pV t:|%+#GE$-.wg> ꣜ 36Y-ȽiẅûfRMbߛڲ||޾^Mf¤NG̬Ը8XӤΝz oXxd¹=O>,G/F 5MN-Yڮ6va1-fqG!AwfGS?x5 6St ,䲒A2˰WZoExfDӲ0N! #|7+n_%.oX-[j/tr{?ܢ瘬 Pdd[evh7ni/i٦x"VYdwtM隍4˸*2lK9.$У7ϗIڭ?&ɧ0eo5>Zsiuw2=he5Zi$gbO%)ӛpQ{ 3^>Ѯƾ,k}2j5(xsYxܩUQ-Z]M71rosج4mn ^H\R[ݔ6.nA[$y}?gGZUËY5 Ii-ͨ+u,] -YxaI&4~_ϾU_M߻߯~WNZhc AӬt X&xRDfljAUwϥ$:$/L5kiโ Lʳn_;gMr**u,軷iZo>mCDԯ'Y4.4vnk{{jS5 jVx_X$Ѥ]]YU%&%<ɝZ[G-r=Ss ׈NJ|- <=g&'EjvfRP=5y?/:DN=vꮼ3F?^Gx''ק䭨0[&ȣvݿw:⹨ABk[os.ZGForv(6zX1b~zq}|Ҳ}JQ?m2eY|>lm_T Gnyw'֗,o{^N0N##i򼁴?|ϳf~/]w~ƈK8*ە:۷?g7_ O|E>\t"uqm^i$g Sߎ99k+;/}qr,ȭn_yUmXHO>b&7¯7{_R]f^:ƥҮc$M:}Ho̸gU22$;ƴ.S-o;ow{dx,achm[P-ccdzbO29<7W喙𿹲47NjKxmt6y 5ܟu.Q_5^ו=VtS?%ό[+k?igeE:H|ET5n$Qa:k~SxgxRѯ[GZKXTi,Wf>c{\D"y3y>vVҏ7_*2ׯ_4^Yw}{3>ԃ~ʭ1OZV͓i X ]VSwSrSRp~\G wK?Lmk7ɡN^ܼoRw.hc& RF_G#FoV/WZLmxe&UwgeKU!fcڃF#^0vw6RxjjZW,lW[|.{̎oʝRoUC)7z{s /Me<S_8Ufc'u>74{>LmfҝJF{t߽8%/;|-xm[^xUV:}NouhWfw}+LF2妽5k+ߪO{8*߼kgտxWx2Pΰܴ{Ḵg9c2yoJ\|^tӏvzí@.ek4TXۛ{,Ȳ, qG~˗SF~? ϵ;mb_׊/hZL!\Bn(VO2;[c"7~ewe (OݮQr]MϏ|=.-3F$H⵱4.fUVդXm?L?cOOl nIéN'ˣdO2&4giw1|Ht}w^sƗVqGi[n42H͆੾eo:UR~w5tOj^Ics Co eY6GGSオ~w&|}O/e㑫kg2{4%n]o!Vxy"{t}rm͜S;ەj'7Y'Y1%q^C{Lo!mn]UxBmJk}|ĪNM+? IrUQԮtXMbom2I34{[o<:&^^}ͩu{oK~ʾ=K̳jZi!VVfQO6t>#쿮?]cdKZypw6Y%m۷|̗m9.{eWеǨבL?m&,G ʅE;l_w= J-=~c^X]sş2JVeuXw/}d~[?Lʸ:Jpxhމo0p0jsU8];Ior^-hEyIr.SC4ڌ)4mgo'럓\X#jxxRrqQt]]SI < tJ> iČFOw©+$ʒX3YA89XQo_̗8ʹy Bq=6]'&2w˵Gr9.G?W]VLgk} woX,?c|s[(%}>o\K0b13ߍ6:oZt:]jOUְƪ'E_¿<ϳb"ֳevs5%_ugQi2էkdM:C]-&O7*kw~/n}+iQYi6'J.fӢc]t$Y_]N/'EJp}3̼y{LGmv^**E]m//rX`8$fM2A ,($_7֞Iuk/-D1.;ƾg[~= N3Ow[?԰&Gyc?$FID-܄UUx64{et<{>XM&3?Vn{=3pw$Aokex.&VE~J4{_~ߋ2H\"]7??ki\,~+$sbv{gnힼ]w4=2x"$oys8F,YQo~_ժL˯FM UY Kn$a~o˹h =v~z3n% ^NLr0u^IZoq rId#w;Nq]oXm4hT}Y\]_oAgySF16IeE#};z;{ ( }hS2Qdmʽ}S;Rp!v{4ng~_s?Nuxi,Btb_-a+)5{ukߏ͝?UK%=6 L0ȸ%w.Y?6yM{٬t"[aYɼ[f5>gHĎo=M!rkt |X,]c-)oO;ώؼ}/U/oj^Iogo$~!i&_/˛~~gjNыWz>Ҽ9c_ =.Kwrn$Iqʫ#*H{#y)VT|F>YԪ໎;Ycݺo׾3&=\HVx԰7F̻ѿxm|68~75/ygi=s7<:?]N3Vݞ&z1efSI3-KS"d'wXʕ M}Y%;:ۛyi't1#+y K.w"()bN P 73yQD'6h_<VMG[ $FHl OEv#v5Чeտ?1ءi(⣛{4RidR% y`r_֚MIn&;y44K!8`+\ȕΪi|c]ZroFO,޷kk6;nVM625떶'ed0۫MHդo*i{0himBoM͜gFWe|w?+.iexNlZݜwEەڗ#I?~RIywbK$A\ִó̹u'o#N3ɐ(D3zDrop9 KTյGqKcmE>c_Zpy.WmMVO WLi[=U|]n?Uơ"ƀŲ^2?Z+׷wkuve^;1S*/"/j#A4}oTLOnŽyL>c/&{4w<+Ͼ>^ԵE=ZE"Vٯe$΂hf*#ө}~E+_=S?3wX\"I'[ŷ̑D߳ky$GE)>w24u=Fb~feR>W>^5W4 gá3 *8%NW%+wi{Ǎ1v'~|{HI6ko7׸rt״ռ)ykD4{r3홃yзޏn.]9}+S+-]=]\4FeE}ewns}/Fl0&eqɶI?õYr?53$~r$Vc>||cVxf>[| Vwӗr{"WHTmZ{FUڬOz'c) ;3SD1}S[=QF ZNXxVמ65UſwmCu[+?2M5']T+>g[7UToG} VV7V%6,Y[  hH$Iwˬ4_~Tc6%wnd9JȞ|W})cpjI ]7&R嶝1х8f0ieVfsf؉'ANJz v>ǐ'q}{q[1?? WuH1Hʬ/>Wy'm]4"65*}PN;_lv2.Im/ֱRM3stz G x"D]">Lv@/A_@4<,7͟Xi4qɓ9?.fƴ/,|X9F[kxϻe8l+GjzD2zY=oχ5 .m:ܻYd$ay#p}M[l5Rmewv/:7$M&MHke=mUEݛ>L[*iT\˯ޏ'wgŏA[j?ubmmndݽo)]z/][hiN[?멳x[Ӡԭ!ԣ^{Ky-n΍dG$_28މ,2gGoW#b7dwn[{͐Tӧӑ$ɴ3)o˜k[ecy}םvfnIo}I>}OPtK|2` {oܸP&_רg><|=?oEk,WvD 7RjpR!qG|*W_y<Axv$di8c-; (I"GsjMlD?ᛅ@G~Jڅ }HeQv陫|uzv/Z_]M4#{'r zF;Z4aw'Z/1[>Y+VվK[F~{=2ZAm-Υ4^Z}iZEMj ]1$}Nu hv>]]Gnӊ]zo}I\^>U)K5 $"'C%e[)!jѸ{] Iemj'O7 KhnU-VEXgykk%M)_QѮ-zZiw Cco-|9ՕϪC'ܑ0y)ionwcUh|7"KkuB  ۬KY us4;YNFVz_ɑ(ۮx~éfpaV{.M󶱌?$hFw0a^%+$Ri`$hŶ3rG}7r$[lS'8;\)OO༹- |;eK՟g6Zy : b*Z5o.Hf_=bӻNIo}M bzd0;_X'usvD$C&Gg?"87 +-9- XٚK>o2,ۡNj'M=՟|e5_ͮj΁yv]F˟rKc 6d|o)%uD,>_^#]4~dM72,Azai+ m7.͛m4N=  GٶUTtև&~ax}Fxml- Y7$͹wHȫu}sac?\k/ycq+,p$.m\Yh]Е,w#J msk۽+B֝9On.R>-2^IoיG¿+/fs·~ J$G4/563Myȉ7W,')Isy/Oϊ &IK9o1fFh~nf&I?y 7Ӓ];z]@=|ž"^d Wzehl9%Nurb;bsԢ+F/ODR}^?S9%x[G.uxz;>K}Z6VFMؗ6ɣkVzku)rޛ4I+_)+^߉f`GL]fY&Y<ϟ{ki&O)Z1oznYi]4gw5>;=FmI6|BmwIyqbGOoKme-Yo'Zo:O7+n3~>/-_ -Bnm|M[m`E!uohfEFhudO%!vK|l^{^׺O~͜թnt}]gkƚq6D}RQ4z'f{u9%xh{q8XTݷdw3Y ⿆׉/=gIDClMo g}t Ռvzq%-~ӭv7mYxW\6hSt2GƓY˛2;,GgLN}.M"mE>';5TԼC3JIqͦdNM ~:lnI]ݺu4Nk/MoTNo.tUmonX;yqƲo=G'kz_]^M4>K jm Qk$t46\/̻y>%q]տFs^$qxwTӮ59.,k#I,fŽ>?Z -⏟4φ|'ף/Lj ? chn5cX;GkgOϻ9ӌﭥk%B)$/m/|]rXg .luDfwdX~_xT2*{{-漏&?nyy+xJΕܺlçLF C4>YLwW:4JN.OuvjR/xsOU~ڞ> 5-y!Y FϚrGkwy#ic'KWQ忣z鶚Ƨτ^7c{ke]i^t}wQ3I-1I;Gϒ54o:]9>F[zfUx~ϵٻ?9?cH}}u| ivBUo c[x.UIo/&kmgyp2y^purFuyQq[֯ _Wg}o>hz(O^_S lܤږ߹2ɾ;R$ cy>f_5ssro[u=k{khm+Z-&]n#k7yWO^Pj]~[=◞]KIz5uMܺ.ͺ]߹OԥCkYMR=_[ݜrUc2_go:|pMݾwiz퓢j>&լmе̰gkNYZn1Z{.lן2;uVI_Y\[O ^%պkV?.׾<֩I=?$篗|;OÏְh߇v>Fiq Qmm_ta{>w.3)Ns˥~_V>g?m/}{OOJgSFm˷t7APރiWekVc<#"}~If*hF_~|,)҃ݫ?2x⿎5V_׵t]¿mŋ5.g夆iZ*Nғwë{_~hSVOgwQ}sV$X$qz977q,6ݏye74Zק?Jj=ׯn3ާxJ,tWoo/6'6܄tV޼ꘋ}w˧P5MN/ :l^">4V~i2d଑ٱ>Y?+bNrvrIZrN\ף/##ռ7Ke;3:'f.0;i??ܯrUTXĩ~SZ~ O?Y2}[Wr*BέUzPex\iFqKY~,UO޽/| NVGMӴ{߼mzkѭV^]-N}K׵u;浩iдBXoѴ M2KOQcW$ct/߯1 RNOmǯMͭ?.YsgL;_<_|,Ɓǩx?KM>_x_S#eխaO%LG~[_[1Ц5-f1yﶾVk Bngwg7㗆&|iגYIHoH7lC y~7eyMTIUe;l9*ԭQW=vyώ|iֺ' Q{X[kۙ^Zb+=³$y8X]II=6ݴӪצsk.>' N:o}n}`˧h!F$I|K8^4Miת]NW|5v|S 3`nBg-^d~v}Mc =|ɵ2&0.*j^ne}_[?}M|ĺ_x3מc5m2;{jZƷu&{4tO&$oVP%ZK64gJ pR_}:uǿ|Cg|ULZ=+v- |Ē%v.V8Mx ⓭!Tï._w\eNo.۩Z} T1YmbGyxRm{Im|[ohЦ.eUmߺۥ=jݻ6_;~#O#[OSI)xZNMku w \[M >JTNmIzI+~,Lw>CկlRؽig%Vkyvu5zi67-߱=׉~/h3zh<;mjZ5)dm8&I/I]~kӭ'JqzmkW]xkW#‰Cio{#t3ڭ~9$錉{R?^L[igD!w×u $}+ó=4r'J^BKU瘻ݽ]o穄*Q뱧S&#<Ȏ1[Yk[]'1vɑ6}=_pҷ̫OG-Wq^Kg`Ύgk6[UR-3'cDDk[[_3n^ QLImMݤ6bUI" {gv铟ֺ#%{<՘]i4V\J6 -F瞕 I5ׯɴ_֧j3FTZ8..˹|~i'ଖ[8[ZNIwL*nmͼk߹Qcؼ5m&e|!گ͟-Yokͯ~];aIo~=/jz}iGi[404Α1?1yRYMG9R==1Xd1fVoi%?y~? 6~ӦQuI:O %2e͹|'|꾍?W4"Si &cp]}@~x>u+5͆ Sɶe K9oVu%NiMFimik ,"Uc+Y=H)u}F슐1Z2_{ծ[bbDqį,]5R|ȭOˊlLbxZ)~64z}e8ٰ]H,qb4\o~|Ƕsmܒ7q1Ulv0J J)Yv{>U{RlfamSPk#J974pVFݷoܩI#>(HqܲĻo~qNIAO\DO[9I_*{Zhe y]7wx_Kz ~,դEi{ 4BU].hy} T&~B| TĦIsnm>zƦ&}>]|&;/!XKJћ _W~uɚ* 2+:F#<|? 8nWWOrSmcGekt%F$>[wnOguySrwҧwSRoW<{ BspTݝao}u~A8۝RG{!pPkX|L=کӒOR\O+*Xj ~?^m,1*~X͏Uc Us[I]FL8Lm/qLX,rs? Pݒ$f9"vRBl@lj\ ʹu<h'I-.D cy~q>2'P[p hWT-4 y;@,ߏMGyH$02+doO] '5}O*T3P}˷deqdV3wjI@_\oFѲY[o &_I|MS Ĝeub).RoFxi-2wnKE.7-G,b?+#b)ߘnެJ-eg^yVWJgY8f5ګ~Qܷ_~T7!#R(->N{þ{=L߽|7Ͻg8Y~uQ]#Qȼs#8m݆sʷ+?V\w6. [a/l{@9KP]:b̹r ygڵ^˧߿Q\35JʹT-)G;iĚT$Դ "-FuG7&`>~f>[J Y٩¦n<.OjWxyws'O߻ٱ?Dq"Ri;=ow'_4[C&6 m&bLʱ̛tϹ$Kߛu&/ ̟ #H>塻-MFv;^,{ Hއi}&ؘro~tK"u9~giZcmKoPogG[vev(s˝۵~_ԩ'Z3Mo4,I̳2wzM8l4k&VKmmݕSʪۏ"}Ϯk*.cV9tۻ[iQ,kI/ʾ\ȟ}Xߩz.M#&׾em];ΝC{>-kY"]̫6VvãoIwת(yo:{hKXeF8ylof-A HʌyJZ5ag_"S_B)T1rGL˸Q<8xKA]Α{s [iZ{#[wVMЕͲK]в xxN.,#hS5v/˶M>E?ͽ-vٌi+vu],ߵt +閺ڥ 3GݷۻoMAvL}o{$,gkQG[vO܃_>_}nڄvZalUL)ۿO \ʿ |?O}[Sv|uW gb|Ɍ<8gJt??[3Y|EmKi$*\pYq KfЩ3u =>2KzfE꣆Q<} ԲE~7~xhd[4{5֩yj{\Vuw[u1i?SKx#I&+dׯw3w C|r|O-a#:J]/߫.x|m-{/ZW=3xӴrmTA"f˒eV}7c?gM(ެ1=f}tOmwQt{[x^%6P{t) ټŎ=cSڿy]Z.}(ru;ww^k |/L<1 5VMQWWcyZm~gڬY ɿ3|~{ַ]`[~;[Y_ K0fMѴ9']䬞`l<>L.Fþ*TR}3{ᗃwqs访ԡoUquRYjw7RCNY4MkI$S.qikz^z.u]NZ?YY췋UVU=*aMyh3Ym5{]f_:d1mWɅw^Lȶ4L7c(%?{]M}ݿ=~+??Dw+~EjE|;qXDTdI/ktIc5Hk(mosDP~{2HC{Ko ݵp oo 3$]nHy}dqi)d?;37FjW한:%X #&Ydvj}<=gfn{9Z4E9ts?&5Z릧fOu-ͪ[%O{e_1Yaw7blPKO0lWV:5R[<2bn1aEofhLʥMtw޴ڎXXy[&(ٕq⬋3?'Ϝz.7Kno]B.Jʮ+yr1ܻw"}k);'{?meogا|gdK^Iqso$So2B4=T[_[h~lro߽Ꮪ-rA񞙬|Nuw}6&5ɹV̑[by3"3Gt3ZxIF>Ƌ^fz:pܱ]z߷~bxw յGOSix;S1^羒6O&o-ybY1Ju^ŏ og#+?(NGΥkiYBmu?L1-żХܪsJ|~g Z+zz[Gپ>?I]+/R]kWm*TUW04^>D'HwM ojR[?m~f^6~ڝwi G oK+=sQ"2#K46»c<ތ#ypw.3xݴm|ַcylt}g2{K4*XO;d\&[k(+V_?~7^i2kFw=,9k>u#|]7My>C\3#Zu-?IZYo)wwaROlOW s.yԚ{,CddpNh[Gnkfs߁񲶍got2f3dUrʻJ_1}:`վ-]lVTX$rTĿ34jyq5*KoqsNn'w'SPu M$h5䑯ڦֶoyv0i)꺷{-> 4gIo]:^q\v^T)k{/-w{O_xRCin)k|ⵅ5~Է%ϏI_˻;77 OzJRim0fX|*v~Ru˰i޹HZs*[,Dqi:^lV/oc=){w /'ͷu䶿۷^Vo7s]skk]MoKfV[6uۻG߿kf#TRiK<[l&ЧDDJ߫9U._Ԃ12C1liJ9ۍ_RdRHsVz oRAۻr3ڋy߿`z~g..t.=wBoF[F#nGnEGnxSšwu;ď;ne) eoܧT~~ 7ӝP[+TyyvڛWU%O-DuIMO*g,VS\ju ~V+$>%\dTE3pS;]mZ/'jMዝnUHH4hg=fŸ_~ϜV6"/5mM 3[Y>{u&OOYu9OrN~?=ݤEEGMʱUstԒmi-̠*l+~4|mWMhaD/'˿ɩS}u I5 zgw47Ee9-uPJ.OGd2L<#7m=vb֭+uW(DBc]i=\R$ n)Mm?3-\ __Ѥ_d)!P=H$g7npcdtYoִ(#E{tr={ R9 #;IgۥkM']iB8Y?OZm ᾲS.AI$:e_ĥ01q* $sfvG{yԙ8o_sn|Mke*K˹-R4b.xYɶ/"kzt{]I4G:K̈aq<cԺ[vk`I}w7:38M-w1g)&;cG-(mKݿfaj0u=hK>kǵ *dU.EwPȴެ,>ޟkEq4qma &/-&]dHw$2oeȖ6뿭n^߆ /vo5mѼ5|P_æz2D+#~]eժ}ǹBeռyž#ccd˅w I7by&5/]if(`Q,jp[Ew=Y)?=ofrJr:f_xXev#}O(%VqihIk[i=]̱34.?wD\g|Swๆ=o=]*+viP¯Xͩw<͑t裷ݝ1J~`ϡ:׏DNKLլ|Oڅ%>JWkIo1S̙Bo'js秦߉48/yW}~f̿Dkδ^tswiuu3&֏m7/cӌ[Wzzk}\s\I>s?$:|[=֓k~ [wO]WY%~GÞ\Vkޏ=7?OռSO\GGuNZzt6,LLi"FDC7kxa+}Wwޤ-\{o~y{ɡLnlN2K$E~±­"#]"C&͘f*)'Z5K[;0p#OykhlۚV/Ω7QSٶ5" '\=ڵ+4?٣lnhFhD6zQtiz>#7-X k%r]躓}dZˋk+w8$9SlQGN{=Hh;[D"…u~_u0^gk>6bI*;F[$/]NpWW^5v {ic9SKOc1FTO NgsJ43 ] h їC̵[.ou9k FhL?_ohmozNz3K=#;M\ R`8~GGYU+^>wZ__;p*xn=y(?:Kshҷ|yL!8oEU݌m]'K&xA^Kt.&ERrݳzAwuD4^.VPvdfڋk/}~r\yom Z7C=/KuS܇#?v)/^1fD %12 u]=Nͽ"݉Im?W+V?* I/|*_̮yz=Mմzsr Q, &a*L 7 W=_կ|IRQcڻB~_Ƥtc.4X,rDBY?ȻMΣ2lm?24r.ͬ+1!CE$R0JYX67&ripھX1cӵimI%mOxYgwHQHeZuw-mmN-B6{so' DnmJmweHu̹f6i 2 ۯo$DvV(wmev]&ϽֶK6kwz/hR7RğY[x:Ӌ!o15#VO4sbo؎|&j߯m??hO޷ͩ4 ;I,t7/oS sW)jf.3N߯vw<;iwz?<(n7cH9X&KvOƒbjZKion'ծyiɲ+;?3˚FpF̑wU3}_[= |K'~kYXtCc JCmvB7hy&kT^=;)RIϘS%z|""&y`/,}X͆կ$Eha$7;F9_ciF-~Nb /kTf=CKgfUEy-|ϵBӎ&yhJ/k k E𝯊|CwIѮt\tsG6 |:8{?<i$7uzaNg1!Hf؎_=b>Qy(ƥWkgUߊZg-GӼ"ܛbRd]Zt;ߗ>Xf#/n^q>7qk>$ԴY4N|$~峼'=r ?>~~gD%}=okKbu>ltJ;-N2I ڳq%&bXYqc~}Z׊5-p`)n)AR%~]3ހ85fY.-N=_F"E yB?־_6skz[|XI46`,vc#n&[pIkKq[|<]/|9k 3[[L50C",[/ &䚾ƬTϷCھ|CoO _xKjj>N%˜nޒrK'DXJ[^33I-}tyoIź)k>vh4>4m cx^ yHRb#Y(J>Zۺ泏o-OS's'oxy<_ir]O6:j4K5>5$]lHnmg{{2OqT95fe/j}ojZ鋫ZkЦףẊ˓wCm'ҼYl;z_ 69c>)MFuo::c7Y?Z_{_O}/$RI-ypѯVHmܒ4gΚ __Ai/oO&۴4o&Ul^K-~^#'˧jf:}&P5wM_[׷wi3Hs]Yܬz:}4]_s0RI{{~KEGd2fBXy [47SI0I;Wԩկ7o;qFZ׮~<5I}MVIN8z򷱚j{ójW}=uz0n-5.TC崗֫#7.xtʬ+ֺ_QFi4_Nm9.u}7_6qo7Ƴn1l;מi;)wH/ޢ5= I[/Zwqڪ["l8J?_$fI=᧌okԚY$Wn/$]A2;xe?>ͻˏ+-o!]߫5|g῅|]1i7 o$ZCkdDGGHkkMuGxZgJH嗉l^k{Mzl_Njor6Ik=%>7>Rm/~_Ѭ_O]!t-ZCP4 #*|]ȇjoC7ɻOj2QJyk߁֤䞾>Uo- 薳>mMnx |34z|3m‰ϖV5k'o^>f]O`y^5 D4+]d̻&y:Ȳ'qb2Hy=rw߲=8B)+gzmj^xtUX^К<.?3wv>ęxw(?ri]kѾѠQwi_y~|7|Mh!|Hwz¼7^cC[72.ɦ^~tNo<HNnyo3hO~lj $7F ]Jݤ[Iۿ6_ᱴ#ӳ_֝տ_Uӧ]JQL-\Gu4/{U˩ׇ+9]mV1}goOt}ma7'~Rr:;+|ܛ޾kQ拚o7O=^qU/o=.<7u mƱud4o|VppӫQ_wNݾcǿyn5m@ZOI-U[˒5xWZ0,-v?V?m߿SŴ-c?:'4_iՒ8Rmr371[ɞ?cwj0-JS*h;[+TZӍ6_۷__$te&y_Mϻ]O~)|059cgxPے]}5uaGg<}VIN)Wk}v1yk?ro///K| ~#|1ּ^m̚^[Rkk-wDc߿ig\|(T5/߿N_,7ůo1z/WkOx{HLmJX;x34*e/:Bx\ӌIrQӯ҂vN?}ttcfPY.o#UFʎֿ{cD]u|LҕV1|Mn0lGujnba%$$ܲA_#nM{q{>l|<5Cj'[Ͱә /4pk,0voS{ElUok8|~SԥNn7v?Zφ u özhootń[` 7.Wt?ؿē9{u_vѧϭhuZmim="m>H}rN&]okz߭fqgmw_ f'R[<'GF{Sˍ:;V[TҽܓG!o;bicW$6}t_˿cfG?t]g ' .0o6[tzMТro;} JyxSA_wꗑȒ^z&ȿA¸lR}ef/_1m)_k^ߧ j=!V]ӼlHЯJU9+YY(mxux2z|>zllX`e!8f_opխ7%.t_^?d|=E'oo.S=6sO\M$j[g49ׅͰ{ w}7wv^Nԩ9/k~*i2iGO'8Zɥxsc59>s M24Z}o|d8Rħ ֍Z+oB.<^I s[gvռw۹.,l^y7$VN^x\;Ԕ7wo')I'ͦV/.G׾,.Rh4KmN_EIkhlPml?>cȕkj9HWj"skՄ]x] hh%1Ğ& n,-FH]!Oc 9_ZoVy_¾"2Vu_9_pϋ<)ۭ6M %m[xb"{7̟?cyE{wzGR Y?/ӿ>u2kn!c4m#$i72ףG Itψswϧ՝Sމ'->\ZLWc$I$Fhw?x4٭5]B(cmIfk[˅YƸn]߻$ 5NKVtjk Go7~ -yl,~ 15*]=OT?b^:.[Bjjw{?Omu]~n4:d/s[Y3Cm< |h4_[};C6׿dbhn'JѴk-H]OAk;M}qo/ɷPkhSjkOeܿѭPxo F>.XoeU }<,є~kV-.iQVG'%+DfcUH1Ɗ78Dޟwɾ4=O?rzR1YoyeIQьs2[ȲmnvuG}ǧo[3nC#Ð>P"V`w:r➟7|ɿ铼afeUUeosd~O?IVk}.7U_uO{F4Op’norb/bWs9>׮ūwB&u{-Iw*:e] q9&ܓ'PZyaa|v򌫳G|{>脔5k]]L *]]\Z$p6d"]϶d'yO3 -7~,k [F̓gm/4rڻٶ|w5{_RB6ۋwܵ=rMj[ӵk^{enM ;DE /NW3Oi9.׿[ľ%:Vz=Mec~9_gOlϵ*.{3lmB+n V;}VdmN%6M7hfo=KzSFhR޼ ZyP|]\4_$߿yeVu8+]HKw\iii7t^UݤTDdϻvɫ^vW;T'-3]h?#K v>5KfBoc 6lI#_$gMB];K)jݿϬπ|Iou=-Ϋ]MNZfmdrj۾w_CBWLD[~}}%{mH.$]3JG [Gco߿>}%(܍G՜9k+Y 3Klo,e+{vV|omVOR'N7i+_r~_z+i4q3J-!l-Dqi.$d1y~);Vۮ}AX`IL̉ 2afj>,eg+/׹a;VY!hO-U|1P~3?'aJ#U;}#_5[ ;_V[o2=4ms Yr>roiVRo򶫽?A_tp|Y-5GwfEFݿ˸=к[?٤|,0thڄ12|w ˧}mܧkF'#*$$bp.$qT+$pSj󍱱;Z|/nK痑ύFA*wS10O,v}Kyz-{u5.㝔iE)f`[Vr>8E2Eq.{ZGcړRKzrJYc WR]Wyb[Dg$wVefg&bm|բ nVWar2{ޗQrQR#4q\y({}=ycqwe#ci5̘ ϳn[s7]ߋ0s5Fۃ$,J>EfۂeUQh7ɏ^^5IfFRQ|&%hnmǩjqYmʻPPBmC2 C@MJ-?̧)-EIe`M1\ܮ߿?~"r[~voXl響&|ӿ=-{W=HEaïrNZi܎k}~i}!8xc?Du{m)'΂C/ZBI\d7+/hﶟ_Է.&}c!_6WiY/<05 BhX&X!s#ٌ{N*SX9|;r \)3o|zֱ>'mu1rxUUo]X_!oQ\ruU[?QN? L2,'fz>o>VG߯b=X.l wOgg{TVp9'1(䏛j[ m*1cTж~_?zN $[?3fK+@ȏyǾV'ҒOUt _'ZX^(IVtrd Kj\tge˟L+kdw<$/Vo㬽OvoO3l#)URWkn-oԵ5Vopz)߽ҎG~?m)Yy-Sı3%L8Q*_]7_Ʒ{? Hcbڧ_aZȜ79o+HcH?x{+9i+(v%ۉE$.5v8!4o|{mCg.嵹pWwUONk $/NJ,2˝zGSc}zVIco,RW=ZJ^°G?4YJn4[mZ6{3oϱ~Қ:}+,]xk3iQ,dg%-tGhO>c0ܤ~tfRT+lS>ee}v<ğZxXiKgEn~رxh'[9v=7Z$/B\e}ovvd^w=,>`oKEgkW:\E$0lKmL1Gx_yT&޻[~EOBu=r GŨAqz 3Mg:(^}I[Gj;{i+q[O 6qbO8CC~^c뾿VNNKGھ 4S{jOuww; dVUO Ogםe~{ dzތÓźm߈.m2)a{(4Zl/٦ϵӾT[_^WOAѧMO)v@nw+n+n_sXMơRj`M<,qwdR|:is]&PAwvOe-պɲFQ$2G/̱ϓ=Uͤ_q3WZ=_ ckPKx c?v5yR.Svi.$ז=yrG3e^6w<$կnQtV۶*!;fn{Q)O.2^_2|f ҴW>#EYM6ϗB5xmy7o}ksJ_Y~3_ol9^GP5o-JmȲLɷ\|oMH(}o9na|Eޣ;Qg|YZ[}eOd.":H'J]z~G@XCF8TH˵U^1I+kyf\'sn3փ'&֎F&lv,lYf8x;O:-mqͣ@% 8])i^+f{C–z֍mtd2[1wUv?;fΜmtg-.NtK,};LMA2-|3}Z9#?{ JoK%:o_^ Ӽ'kxY;ٚO4΅c}3|>zL ZN֟*M{㮃xKcvu{푙V9llf$gWo_}\)i_bBvoQEnFYW9l]n{N)iOäZ]3Q;o%S]K#n!c#k.W|Ví|ş>&:퇅|;FhO{`mmi$h*lT٤SwsZxL OaUhkddᵙv $^gtwwUmŴܣ%u}# Vl)"p߇,gʩtމztqՏ3ȇ\I[P,uIeMw65I"DOe* eofyFo}ۭKTtdeptKym#y־ft=T]u%۾i^㿝䣷$p2;;;%okw;3LAh+UͨXXkujyb 3mDydȭ |SK'g~7_̃Q$Nm`,:2o-ymsW/wek@mUDהZ\_wͪ!ޮjAN?>戝kn7)1}Qyv$|ݽh*? lO )#Y+Y܍I nVw|߼Ql{kߩf{Z+hN浛V&,22#l}ϯQ~bz̑mbGM*H7ΈU{G}@4.X_On  Gy4ٽ2M6Kn_Kڿ< ZZk++wym\,:h%&>]}$zJR{?[4nx3XK*W|W$:ů'WNV?HoHf&}yV~j?gʞŭ_b 5]F\Hb͸ |Ws6Ut%'O_RZOrZsjvZJZIuB23C*Gm>_3m T_;e-b˼s-șݞVBfD)U}6.bW]7(+۽Tu(K[V=>sY–̑}T9naS, $1?5d!'=qf E19*14fgSx?_<4_VnyX>kzYk밊~U$z֐F\޽Kkq prO<b#q9P;,4~Yjn ܒ'*#׿汍IVf8g>4V+9$FxgPDޫ i y ;i*? lT$(3~s4ܛCj6]MS ޟŻQVv#ЯEͫ[LJn7Gw5I"5sdRc[W7w:eW$8 B?wI7JKAm8`vEd]&獾}#3w}?qzbR濐NY`%v4l}3BOܢޡr2;HPw8rA$wrĈY̚hveCMO7N/ kJ+<2IyʾL?>ʞ[NOԋ7l9uVPoAcmyXņd`xa?ܾE[׾U֩纯 U>"k ?_.f- +;i$Xtovat߳twF'Z*vU5tMo{kL|%kz%,Qǫՠe}5Vf78U>%G^UW5)/#aݑđMo5\'>z6rm1*jO['<Ҽ/K\h4vr[N­qJߓ>|;9֫i?$k$~gTлPk&ݙHbxN˻ri=:?NM+79J-N(W]ǹm++?i:S[b-wm6˨"EĖ;4^n{~֞V`6ib-fF!ۻdO.M۷.ϻj~BtZ~ӽ6u1 ݬqŴ$țEƓzVk-[ᨾk<'j1I 0]Nm[4L|#Tu(IzZ&^m~4=zM"PUfܿgfHSdKy2%Ru+ݻkCHR]||3jo S񷏴h/.SǶ6g.&{i$hHRh^UVW2'ͪPqWO}|<+} дwˊxᶺ;[Sͅ_6o2Gg+sS|E֬fHxEgoyWw6*'2\wvk63%cidnVdaHuCnfFze+yѸeYQVe 呚?+#/?ijWvuo!B.xC|ϕֳmz-ZW5~=[%)ǚlkywHm˿=0hzysԳz[acoۧf%_w'}B賵?ֶ1|Q=}嶕zpypxZhcGs0{inJZvBKiu}5W+_9R8՚mۙؼ:>|%cRk kR|aEhn+IҾ34/S'KYĶ\cڽŴ-ysHt>C$=s)5;/;J\ƟZwkܤv UH[ʆ/.cO/0D߮ܢ*1M]>.Z«x|#'g~"oԤF=MWLȎ'8}q8_3>'|4PYFRKi$0\lh._b4qAJ^wWzM_GSn6O<]\Œ­&[̿;vw}Ӳ<_ܹISVw}~S3KdžmtMs y\Co5´ٚ&+z]Jz^9Z4^]2=Ğ&5뺱u8uG\[3}d■Ȼ~|D񗍾!+,$#HgP˷< %:Rz|1{}/|:T6u/VC*i6RsL4gq,o,^o.k.䫜9|_sGϣ/z>%oiR2*M2_`HKxoom,~ `57%GdxgU>6{[4]:kc#Tdu έ!gm3ݝq۸ݨ$Y59C" w }=Z{&sK[o2.yrL$W}oe3n+Us~n׮{o}ɔm*鈎$DN; xQD Q#oz'=j_S'?YH0O-ͼlGٝذ+|>sV6 xJھW'L}ݭeo+/-}ϔr/?ձ$nkĽ~cuRkfLmv4p i98L{-m KG9?5K~9",@yoZ~.'K_+(F}5Iv:?Jn]dGinȶ+rܭyjF/Vf~_v/M?u$rdlcJw#\5:|CA黲J`?4)wkZKv'k.8Ъw_w^W^29?2G6l??o{=UhmnOjz5nW?՝ XoO$^~(ǜ$.[NTmew}> wv/ۏ;l6>;ޣ{y~EpO; F\A}KE_I5#WMNo*NzHnhrGϞW?n(_RiNͨU[tMXM=oo50.X.׍ ܂_"PLѶk3uF?'ΏIzt;ZLp_si4i^Fh&EFz+B$XIS/cWLxFK}JͦhvڅV,*v"lS$M$-Sm_]@ȶ9,z;}\ܳUBi4XϹbxH}! Io#g4=Od?*my#V߱!OY$Hc'ōNcho'0mlS5$Jmk@ږz]&[dh)Weoun<FrZ_gw~#i?'*-'Uzƥ$6Bͽ[Œvk֕HS+>o{&T}'o|Tou?zO[-?M~rsy?jf1Ծ{}u]L\Zρj~6o'J ;Bҭ]~U6ՅfŽ=hݹ췿_a*O^~7ďYk^O$B4PK_]mnbRZ;{ "C2qM|zC%U}}??/oOt} K$kAddy11<~Xķ;[}j/C&L^oj{Ŗk[{{Xi&ytO3]Xe(-δ\z[#W[IS—ֱ^ګ<ChѨF̛Y#c؞11^^rܖeꙍicVaar\"Iq?|ϲ'U h%f[LQdm7/̎5VO17mX[BY-~m͚IH!ZdPKssMJp2R,#* ]ݏMqm;<yew+_A2;op.Ixc(/$*z(?:Om'ȽRy۵Uᷴn39GG*1S}Iݶ.Yv2a[\?4W^nsq]ܲ*rYYeo/BF&0s~: ~_E?_:ď}I4;\'pв>^Bcz9_u&_r,5mV mQZ6/㙤ѳoVW6Lgj(37I1|;Sqr2-İ6y)dY<ӓP"5 cs۷,4j?ɿ7Mn>g]a:i",(/-,4MH4z,3*Y\3[MGS4?ٿbv҇+R?멅W [㾯mw_دgs$v7:rIImHcGw˧c菆0j񗈤6Ss]i2^h##}o&m )tI<ɢJ4~}߻}x=ycğ#xoƖZ歨xfktMByOK:;xdV?bkZVv֟}]'w秧_3_bg}xWLC[76Q躺$kGHPmmK;巓}ǞI[ztʆ*3z_70پ-UY]YG}lo-+m :qIB^Km̫c,^2}&[?hPͳ6X}HuVw6B %.:SЭj|aGzN^,Yo-#fZqv5mwxտ/u;;_ ?kKjwZljɻq^E2.wg~bR+;P{/WOho؏V_Ro6- ]\ش}kpE 0_6%{<ۑRi+W}QI|7=5][yMq|<4KEwf&a1opSH3f.#Otq.hFI9_׻8!RQ-ڿsOӾ=}8 ;[EΛPMMUtu|%o46%fFdѯ*Rck˫߯*뭭o^0o;):wNyK{A$,uX4n;{fTcYarRJO{{'}#AxU~X 6{}iWwCo"#7óok=qV~/>Z:N0k}NB5~Y ?DckƵP ckoDx]ặ͏y7tęTIw#uMzOwK.$:1BYm7:4;X0z7-~_u _xz]{K\ԝ-$Ui{8d$?rH}龢b^Nt~M[ k_j:eӡh%Z [^$fEh_uǶj$ҼkjOKۈ_RYiG6~J7r|o%5>,}>4cx] / ڍƞ]O+ouZ2&/tihiNs('vO]L=LOm~ Ѵ{P'σVkP5hr7=XT״k0OytV_V6-m>Ϥ[sik6.#Sθ@'>ks^DST߁L?3w3<mZ]x}\]\^PiI'=񷒻aOE_2C&(]j1^RR_-lר.}}lNy|ܺrimoM{4x͜/ŬUde\<䳯)UgOU>{ U,?붯==|S]zZ>j/4&KkiL<)6oͱ^6eIky5]Z677uW}S{MƑg[eR{-Du+c**oO͝X|,)_5@r?~ƸnKdaWז3Eߥęh+?~mJ\3[^?o7ƻ/:gyk[WyŪƶcdf7Lv|]_gp1E5oo#ҩ7עWz׵#J4n>7SV4r?IX}'ٷM>5]ŕ(ԩC +-nkַGᏃxYmFi, RٌZk;sǾ?c^5zUJ^Rgvy7nj>0oԵ Ak,#ظ6Yi#GVgd?~NZ],,%VU^_squO?'x}z-1mKIt'Iu h΍]Z.HM }v,\((ZR{km(t>t}-8z?o|C⏉phzy=jQ+\o&DHaw]Wq79_/?>%N擫]{}/U֞M:<čnj|y7gg33aE^)9'ӍkԒ6gZW9qEP5XaoٕGeid|֝_縡 -SϤ!~&Yhrk6>F7z~Cya)nʻdwλ FKJ}QFX4};,_^*/uZ^L$hʅkK"DO^ "y7ՃׯL[BeeoK[17_('w;;!C{=z;_]/ p\yR tfExaumW̏|=skaTVYzݞ]Θa/~m;/~_| u$7_B(kY59[ZͦfͿ&WO;Nؘ]tsZ]L灷jO3-{V47B[wFI<=C^tZk 7t=\zX;Z۽yq;/t~5j^=̖e΢T0;j繰{hOif8JkCU/{w&۠N.moU_3WGy+dbCvg<1kk&[HHo4+UὦRvzXXIN}5_Tu͕?/#Wt d,[ e>xp=9wrwu,L9R"K]kt[/cO12MCV?_wvmE7c|Z,yȖ};ص]IO9/աFOmUӬ"i<5iy"9jӔ8{o~z7SV}|3&ÚzN׶5t;IMnY.6SbTt6]~OCXi}czm*)ߺת2sR~:r{+8̅PgIk=yIzyovg;xs[phSN;iXUC2}?ZԜ)+Ǯ̥=R|4 h)^srݗZmGkqǭxwOl3"VeVXf$z&NK]KgwC˵^XimZc{DbӼ=ys7u4$4,!<o'u3oRNn[?Jk̿W[oxKSfZΥr,ktLG;:Μ}~:fvd6aKT7ݴ..YIw]u^n7- reu;o7X|9xVxjmNxqª3d8t$%\"_=Qh~yP;T\i:\PU~c/7ݥNlf#i?'{|ɫwd^.|K{go>#h_Ůj:h]CP81-wDW^Sm-_:T֋=gE O7iu YJE?uH;i?}2:W-ER[5϶Կ6|,Mշ|š6pֺV!A9w' tyS߳ke=CLŃZky{M+ak󭬈wy( GD˾n|F;)nhgYلgm+̌;a}{^ 4uO[ V|qǾEUe6WLj)ihݞwH-,˂_i"mG2%AIo^{7~fJ:z.45a]t2Mjz^{_.|#xK^}5m5 NQ&[8! :ˏFKSϯ;|0ƐL~]I&˝nkigi|Z~o\Myϓ$4++δ{fiW6Iյli(6Ω?]?خSs]ERw]N:U̖~@Qe;.sjuR9gu]]UX@{|䢷tٶӵ2I!Ydhi[U]ODm6Wv%.%O"Ui1L~'o2+RHH2Y ڿ/~_qJ3"u{)}~PU>u{5&I"voya~Ns>) u9u WfC[5=n-'ݻ}C]ah鮚yto.oCkEw2X_("-$C;3Oxk}뿘r?gx[xY>o IheݲhZIfy "i;(V:snȌѿN*yomKid/2n?2'S.5N[w]LWKQ|V݃ywM%Av]\-^l[VdR1o' oV}?IUMG\VNOUK>dӿn\ * 돭j>B^ W`#*Ф!#vU~_[Km}{o̖L$KPIfT!o?g%';B ؐ/3&w|OytIvIQvKM}e%ZX_C K( 5\yjbs}?SN UL {Ww=h˵ĩI;*hs ؍04%o)26)١g.+nwfRfⱕ)?[=eQ33[ch7dݟD+i^5o>pbT^_9fv3 8¼^jo;"Aӛ2mٰUUwo&40ژ)IWeI6{FM=[iyΣt|Z\nnd3lk+ZjR$׽ysd6>)Cs)Y.̶zV^]Z[h~ 042otmvٿyok_5OMS}0,i#4Lco}6P/}=6÷eʹp~ x浟%~~9ŵ/9{+;b޷Xh.ϯ4t3?4:%V9~g3O=jZ#(OHG I[K:C}*\Oߏ]Cvt^9!~RI6'mAn?$&/)gdfo׊F+OS:M[W.'ݶ,?ƫ7?OZ"I~f&+vymDž}{wU/]F?a!X 5}?E_"^dǑ8HR2:yVY#(27~\c?٧?d>[84^h% '>r:o|]=zcoi4rdvS nfl|g[#* dx0sIsvoZ:(+:ú^MejW_֔թm篟R\wo|eUk-Raڮp+mݟ~>,WMz.{8+cjJ>NeSMUOn(Byqo1vG7/u,MTtK{6syuN_~֧zyWUf5;wWbʶ:ho&8Oܡ [Fy~*t)Y$]b+WrUxKA7JuːΜ>PHO(Ƿ|q`i)rvj^S럆|Q2^XW0muE/7+㱹Wo}~l0y{rM.Mw9&ZW4x_`$eXW26,I2/ɇb4}=WS[]޺/\ *T~o`/C~|__Z7w1[~n}#{ y4(:HJynٯ=|siw=Vju>&iLVדJKIESoxo.9-mz~= qӢZMΛe·{ܥ0ݲMjqjLʬɹq?Ϯ׿u|CUܩ;s4Kw?7_' tI.d:;*Gnf](؅ki/˽Ȝ~,z[! Y!ͷʚNJIk{~|ˣ]4߮cĵ?ٻLWkoý+վ0A;qek2I>O6&Ϊ=-o-]z:_;z#ŘmX $eʪb J~վgzmӱ_X78=@ݻ_]'M]KÞGm!c%ݽauwu *4M$*Y _~-yC)U3? }u|!O&"mt륛i<'{ȩd;~Y?;1Ye|%Z2/~u8g$jsO;O}aqK4]BBWˍneO/Ԥe >}oڍ'}kf/D`HlVWCKIneͳҍ߮Un~7l}Yf)f85zUdw#ee/Z5֖H>kZK5#-#¾|͵[ i7b$~]5%t{&H|; Mké]_ڪ"_ _RcJRxOK? <_ĖWþKFQd1ڵ̙U6|淎Db 3RSkN_#柀z;~%? 6"5+onsn~<[#fHar}zB&*jײ#~i5}xqg3 IjvɧjM34lu$s/m[wd6՛_5_𷄼#+ j[V7}ƹmMMhȼ ΝGvmV?C<,j^|I+i׷zeu7Jj dt Z؟ig5]wzoŸ՛ǺgM{ڠk]ZGp Qȿwy6RQW̡$l gZo92 fy~kzG۽O3 6qM3aa)ltj}ɕU?ٳPH[̒<+[+MgJ0k7ZMAZo4I Gv.O3t\i鿝_ֽ_.izm?hok[ym-mSv}򷅡UIA|+?zmODơi ٣bʭw$p9~$/|`&(i^KKщˆ7H]7ydow1+jk[_\Ok=`+{?E|1|O/?λJj7P 1}߫}ǹGٚŒ^1XKHV9'ռ[[_d)rBC#m;%.]]M;^ ӵ85Oxv%^I{k-/x}cA",eb]CVW-+W!i-Ğɍ6$~\,2+ #|~-RRj]#GOM=VS֭>i$isnJEYk<0ͳ^yJ٫9OO=L[߉Z񮛪:v8e=RؚdD;[̓V|dZ|#-u#dukmgn4w}'-dRQG[ofnO> |k*iiVR_O}`dn!I"IqM>O.ټoNi˿[N4E~h@,t6Du KO춷7S3< ~cqGo^MJשYEۧTɵ wV.wq*27v>y-M5IJK[/лS:qpn]Kkg[u65(P'FKvV<|\$̆5+8˲ri~sK7y{vpU/Ef'PݕwK :Ľ@P5yNҭ俽yZEgoyb"2{io;涚sj>+t/LS\ۺ2G#, #yvf6m?V[E';&'7iZ'l-2vp}eY&mY3d$r?ɲRro_[ͣ s-ޅχ>f|A~mFGjaDQ&ՑvN݌;C؁4T׿۩(5}~OioAx;X-mtd71[o2B$|(w~JRyGx?m+SuK,嶱kG#[4gV}5n|g Zd~8kk´*>Z7ވ꿼y]?\+~{jo, !{ɯĒ˖=5En&G}4~gț98񿊼Y YiZ-^!^mӭ $k$[-q-ャ++ߩ- 7GGM,-xZ9՚&#m yr~%˫ۻ꺳jIk@scs߯skKq[%[',x=Z($4 &wWY!٨BI13?WYׯ(˚~ΓMKE ?ZFM׶/6э.{V<;^9ŤWd^O o,0FO8Uϻnlvyן0n\/3mVtP7}Zz2zr+_""e;| ?NmEjjkVWm>Ksz/|+soM0A8zLԨZ-޻D1mNW:%u(ۭ^rr29>ׯZ9ܭԱ$7iBW,@P -꫊N&wt#L7whnUN7DbwГ-w;! kZ}4^=Sö;yD)!Cnݵeu?Ϛ]TS-iiHֵyHceIG,s3';xlۙw_xmF::+[@bc*bO0+Ibe,oot}RJO#VuagwA UBȾc;|.7/)]t"NAkoKQ]6K-LcSi}v͹/n]#{y^ﯯq)^I-oOx㟋/ xsHtSĚTjW.|̺!y9ӹfDgrE$ۦa^{+,eIj~x#\z$8A߇f1ZZ^_D4 ,я锇O/"okI9舟-ڷo5;zJhZxPs^c<\4M5LdtlJnwtf[Lk՝ 3F}F_m9g!n#hd%H\o)zQ=nLU.xk7>xBzuo$Mcdk;߲mG'BNs~k74VHMKT- vXmeE6>t;]Z?3G9C:G}b o^ӣu9u;KFk;ɠt#ge;OVu:|CݞQ~:X2v,jl͛Γ>}ZoN_|ʄeUhy޳|bYkoEDѴ[{KUnKZYc2G2MHl4U(?y~Z#)6\izZ4ZZeD<<䒳m?vLi6JZ 4 q]4ڤht$VG(._?y7(>++kƿ?t=JU@SUFe mH|:>v(Y=cMmNT΁Yr홛s~]ɱl\-s)kR-ˈcѾ)$l ~lMXٔZ]6&k>j\x_E6PZ-լlC]Fa O|ZJ)SZu%enEg*+𗃵}jDLQ:Ro?CZyw/?.w<%{? umQ+UmZ{[#i#v<#Ɛry#D]uNI+\߄$9iQvmAykO3Gp;o/g&&+^/W[s?kOmC~=bu ;OP&oi!n2He~st^\\JߢGhO4ǹBׇw63~̒Z_osmmu5Zq[]Y_"hE]ەVA|=YE(-z3I( "#VR/˹[ ӥsJVi_ChqW-ΌJ,2J07ڣw=e)r#'YtuzɐJTw+m{QʞM[Z𭍇Q$YUfo:Ky$d$) ˏ-*eu N>&j:LP=Em3RշFBo쫽ߵ}#C6rI|ta=>Dϵ-͆i,vo{q 'ϱ49ܛ{9HoOzFi7RC<֣kUT;cܾbyUO-\c}_k5ۘOwi=RCo2%̋H߼X?[usqqOecO 3s:%͝ԚDgq!}%8Nv)ǩ߆ohVWf-9VC\h/&mH<^$VvV>|6WߩoCk~_@{Iƾ6Z׈d}dt$[_oqݿ߿V]~Gi0Ԟ]N^Ŷ{}YoUqʥIvC1*_/x`u7\Ғɑ.lYXfg?iyr~󧳃ݔmw}_3j_~-kVm6jjeuԫ7 k맸xcI'J=z8!EIM>[s:tWGWt FWz?O]Osbdk]]M'9- ""WVO&y].%񧈯|sjl,K gZf̹vow i=_'~ >).5kw%}Z;ɕI$mFJA_/ˆ4D1O|m^N_$ִ#WviF{@5 ֖9H:dIXwB^F:}oP|7i.> {mO{ˈ|K%|x1弘cK/^UV[%nO3k E[P5o'O$km:Oy!m-RkN/ӄ?_Kqőٖ9]nc?7כ\UJOWs#>1Mf>qݿkOmbi%OYJEu:b';}3A| [i:yo-mm1Dz?n+?:Kw2ZSo/.uT^iYi2I o$̬F̓}5"+&`.}͋KĆo苩M 4L ]^ISGt'*g}_&Ox2ßm}hxy\vI5ȑ=kHXM^~ y[;kSzO<5//{˸`֤UkB[v迻tpkMUZ^>ڿ>gZV}kpJ֗2Ѫo-ϳ՝f[ (n+gdaQYwC[i_Pǿ:D8ݷnW[2 J_?y~ zgB0) k5kD=]B;K0#33~}T+-^`폚 "t+(`3ۨ*?RU_9`ydr7.?Ҷ}ߪsX2|Jn'?G4{ff!xo 4ip|xm:!S寞߮祿'Vx.%gǕq 3c@M/*W焔6SV=[EV}=WUl?%ZY˨ͪ6}.9Gv4٘yݕʸhcsƬ󹲂aOVT\[9 ]:-'$ Fu2o\6[6eĿЄ@Tˍ7˹~?i~?4\X)+(*Xq t}:ԹSxX{6uygikYn/H<+#4?d}R]/J֡`yw$=_\; Xh>P3v+%;,홚O'1uMI%y6vUpHl0[B]znw9ZðJIXsw}־_goV)Om-4RyYxeooVǿ^9Ej<,kZ6gdcK-+B3k2>2lvO_7c"vvq#鱮eo%K *ZiyɾywDOuun1|;]\]i7H7y2ۜn}^'_a?'G5KYgo5#"E]g(濭ʴS5.O3xkMŧfeF%iMC w7'gq2OUÞ_xkY^5խ_LxO~:?]_ĚڝxVK+{|!?mFq$r,~W[{-̵}QxukxwÚ_kD׬vh[Gq4wOZKO'uK۩||i;ᮃ']څY.mfIy2Lh̒3#f^zQ]/κ>ҵ]SQi]m 9u F}w FERȜ飔7yd_jjQYT[EI$? dX;O]mywI=> *anzޮjֲ "~?އδ$_ 'Qԛ[_jȞWmJNUk[6uhaf6Fq^G~//h~ӵM]v}) ԑ-"b~t}o zG>NƁ^Լ1(Ibְqjmn$6:edU=z5~vkwO/to[i~^[}6*3Qz'۩'|?GYkS}+众J0o9[ˏ|](<o=x8|J|3r]kO Z"f,l%1p\]\I[xwE!JMV[i$Hm>=2ٳ46M#ut}+.3}m4 x:=.#_!ZIWʾYogۙ{O/>\D g۴mg\7f5Nᄂ$'Oi ?Ǯi/^|2;+|F^=[cR.w|d#w\%{Ms kG=][gWHk6N#6B,)o#_n̉$n߻tGG"IҀy-VZмWcj`7:L^LF#?o!eIy#97.)rK x|9,^{ ǻcZgM)tEݓ۵(p[9]$r.w#&δ>w y^H'8l- 1#]4o_Ÿ;[BQ*"oξZ ؗ'1}2$If=Nih_ KN~&>xB֫tMa4[FYd#޸?Ɵγowܨ;stwM n-KE< ܾuov\RZҝ!ݴ'׺Seorei:lzlw_|Q߸_ᵥo &jQ5Mʷ i.wdm7ƛU$ޏ%[m|g2x/_?i'<)ք*]OeT8ۭݞĞ9fmekkmwx" &-V;L\fY ;MGo#HIn[潛Km|58π!c}SL;n}R;?Rhyfi>pa8)BR4}vFoyu]Џ3XhPFע0vv+u5lnf_cə"lН9ӳwϩA-S~egKH:֕eyiHYE4ڈtȉҲw_OO4?k^'5{V6迴4Cɉmq9#O-o[vCo%t\%͞q"驨2?.5[i^+i"WV M]|Ry%pZgkgkVWڟ5lCBm$[(cwSG,iGzO8*z__Üo|w9w kx;GXg#IwrL=o2umt&kk#zz~*4Y|V]nuʤ9S?e~?B8'nXiǭhּ*iZa}&m?תw2[̚k7٢> EK{媞Mz?cКi'Y{Fէn>=۾#;y,wY?޿]L OzAiiUՄ1iZkW{Qz<(r75z8<ƶi]Uiv5Q5-[|v[o,wj1Xb᠒h4lڨٵ#7*\d=uVL3o[c/|[ҬG ^MFKm+k[g^=\$ٯ g^I<7t|waO֗zDՎI>l+33#8EiJO=zu]e};{dJMFcijV2 ^. [ԵtI}sWggК_O4x \5|jڤZjK ~n[4V-[|ϲgMngĬ_[{}?¬\j76VkvvwI#Eb*y.ikͿ[5yN\V׷xs[F4iwWc ciO5/,DUr"ut 9Yw4$ml% T(+CY;Z_;5ZJ=uqr^I]SĎ>fΣnPn++4^'v fxbEDWs2&s޹+{~cOE'.uj^6K/WZ{~8ilOוӦ;}2qKKzis?]3cw nl.-ot$Iln {[,m̉l\_3摍 UiWjMOKJ G?=&?~)^7Sdλ[>|Ud2>yY;5TmTo7W#N k?ٽ>zL/|{6 }GMnOAbu +mIMM@QRS͸+[ٷfJէ^+lבμo#օFB۵c3UtN7:v[vM7m%H FLU:M5L˝y_3KQ>1-΋}&]qyefc~lUogD߿GB)]ۿGGץ;-릥Fqd:̭Kt[=[>U&u+;X?S2vyϽ6f饅׷Zwi]߹SN?em?W<>+:߇<Ky} [j^(ox/vko7<$+NS 9Ok~{?GQӕNE߾iky,D߭\X(EvXV6wgDXK;䵬ns6,|FOI89(i9U.ߵPn):׹'ƚw|H/uj6U;m.UaR9U!wl^J (VMK]֝9̖oɾhc_O_iXɪxcFE~dD(>Hs˚T MkoM)ԩWkm{}?J x\?,{y4Qqg;6՛R;C3~78uR0W^^}<Qmn_#V? >.',l˥:⻛;3&/k " 0R4b8ǟNFzvwUӮ>k/@74!dVhn|DždG8"~¤]jpP-.cƩ5|Wmz~Z ?jrX׺dD:V|ڴc4K$o.wfؿ4xI5r赳,ƴ]O?|߉>)&:֡Y5ֿ֛/-'#^MqGx73 7z#g[ E8T+têw}ٟ:41xCS:Uzm}u$iquѦm&o9>3QƎ7M-m}ORpV.w΋Ǿ9DgE>:&|zKq8cTl#o}S:pt4kNHFkxJu!8;y]--OE]Vz>|M|=ksY=OEM;:Me>7̐$=f4i7MMkz*{='SU:-#C^t:Mm5]O_IwBik &W25w3yq)B+|hY|V|4mu~63dgǾ m;v֚2S[Bf64) ae~?{?_Y;%^{{W.akZթuVt \@&c;;|'@T~__=٤on?ctnu\[jV~e6aPd.:.vNնӷafZQ~x} 49^)*^gu^~L#Q/~*0r~ xR >PgU2^^r3I?;Z]vt4j=>ȶŧK$h#ZDd7ͳg䷺(K&B1O/yb*_g-?L}Ե۩-NGV kRMVZ;8FKw"o-+55v3q?K:oo4O X WSm"fZy?LJ; Ko.W-w2<௅Mr? :-_Go6$?lwn!6Pzκ1v >'-S~[|~(Wַho?adFhYߖO |}Q&GęnI is͵ Ě|vjPG&gf4qzlAu xK~tv>~;7FfSocW~Ymk? >>b/5VYu=Y$*,nc6{'w5S] NSgyMO⏍tM^K%ᳵ!H+-Lݳw߻ˬcgVtR嬒?Mou@RX Mkm[Hν\ڍ/U״ZK{;{hdcgy;1zym_<~տDS>+msV񶵢\茲mKv3#oHYn?sƦ"W}?K]Nej~ͥwY/yGo3ȻųItwD'~i;[7C:Keߛ~Wdi~l: AhK$_?O_ƺakh_3ӽm:MNXIJ ۾_[J7/%֣F2 Juz|Ro?q$2Mg+#d˷,ʢUS]íVI,R?͕V`lO2oUztMyຸB nl䵳Xwy>nGH,sZ7Q8Tvr/7:#ַwe|7@ɝlk\P,YJ67kksf,6LB"FUep1mFo[A֡(~e V-%?ת4Z[|zBƏ~!fM:/%ʳ.NU_OԸjֿ;^oIok2?#pRt“O'YovNX'4N 7I^}Wܸ G\c6 Yn5s÷ &]{U3Og_g#"-%:vmzV&+˫=atwE~e4쿮=?D&#{ႳqB3ܻfoG{[G*niz[kmtO5T#:+soVNM}z\ 6(mqǗwe,%Ή"ʈ Ϳ ׭i(W %`5Wo4borDTÿՁsYAE.]^yت$zվIrGb/{UO^nm0)#REk67C- JlX¯sF.c]|[wll9Ю)=Uia:~О ӘŤiƷ;KR~~?;_ ]ݯR]?Z>suNmX[]f̩>Y6*tM}#VqR^^vXty-ef ]:|Cim5Z<u)/5I!eaM!mɫr@ӯZk5¬l*6~8sŶm~ӷ̥7k?MK=5BKt):YBە᳛d-7z"G+Ydm?]:]Nύ&x};@6_GWs 88ٗ_9z# J[::Q}ؙ'g./Xۤma䚲:/u~利QggqҬ$ o-6ѝ̿k7^y]_lK19a)|#?xZ {5v+5 7fUHf/,me7?fʕeE*8ju7O_hic^SpJ2-Wu^~Gej۶x/L5-[[ũerGG691"VQoO;oe0Ogiz[sخE.Pko?^;?'=]FX՚nd5q!>Ie}Ά]^ͮxhm..R Vg_gdq6ru#cѼTo_yocš u-SLd@4jwV8W;GYn>k}zz{=~ڿ/*iǁAhG[B4?iC4uu}u=BaLuGNj9%}>ftIG4Ov_D4|L񘼱緎"6;dfQyLgER:wN-Z]5qCPrQRk/];~|/O/ژMx:¯ Z-"6}?|RwɗI~qPzޛ^?:p}?/~|*M& SqM?Qukj6[˒Rico:YBa$}K2i_M|:=Վ=7ZA6Q47ŝeQ6nI7͝T}޷~}w3Ч&YMOX]\m<0ޣ3yg50ۺ-B$T?w__?_QM%SV-thq%YMEV8DD\~^(_f'4['ït^%$g& DH+lMƋ= o]_:r*B~'Ҟ;oN5s=s,2$kdEyN5OKo}Л՗yxL^˩kE-(u2]q}4O^vftחme8;^ZUn`]q?wo7_{VGA.!؇׭`ɓz+lDM&XZ(.Ԇ淿{}<(g忁~׊ߧ85wl>@O[Xh%?ݟz^e\+<m3zuØ=Ԗ2DqCHfʌ-66ߓsͿ_3[ק7/M~IM޷Sԧ[x4֚UMXO%c17?&Eiuݏ/ռT]&oXu k Hd}uۿw"~,WhzyaY!?:<+i_XMܵ$C{.-OfI]ɆS$esI)CQh?Js'yY{-x/[O \|E :y<9ڮ q"L[|Z6_ogֵ}_~NO?Eڮi&_ XFV~O$2 >u#>Oi-}8T7{2$+S]_~ D3yf "fWԦ_=3A>H_~c:J6|;3oW1hm :maix-JH.doo;) w7ܧ4}S9s'tݿ/^ϋt 9lKq.[wȬLy3C|:MCPn)[y]tLo*Ŗzw5kT>g%3,jM4;^?fMdʫTf鯒wPW~~iƧQ+}#Z 4|羙XZ=J$%D_?|Ϯ<%]gz5__A=_l,oHO-Ǽн3&ߓ~\V۪8kQ_%;}Ö k%գʿSxB5y9-30q}9KO+FrQQS_f#){u4a$k[YaX5ZyrGϳ[I }?ck'+Ezku$ME=_7fS4ڼ7bZE7m~˹Y:epy%tgw{zj%tfVHտ^\'-7N}76v,Bci>>ߒ6'L/u_3iqmIP^x4VTޛo׶mw;?xT L3wh'újZh6^VC#* DDLeʝ̯/ xg'@f]6㸖3_-&VEY#gYr>i_j'toRqu{e\jS n_j'w+?35woox{ 5?VZZh/jpnnvW.&rN?_YVVς?"&xZ?{M/LlmBk~c2lD[JQwnƜGz޵$4#YVeiv]_e_Ȼ>NI]_d\75?I5][X柫+[e|C,6ǤBך[Aq3GPﭭ"RrwgUUMB8!y 4x;V{-o6[xaUN_eخԝ6SkK[ SVM[-٤96ȟ2ʟ?Ϋ}spj+jzbmg[CySr}& FHx0M\DŇzzo'?^PWrladR.ܿʮB8e [n+ilOMxD̯@7/] eGXToA&u8[/x-\h̲NSv\j!+ѱ[Uj 1ݾnM|6oYW#'-vfNRp3Y-%h,t'>VV2tW{}R!HߑYTt߯oSV_דХjv)Q^lO-r?+jb'^}G_ҌqiNΰ<6zDsU$Kwh\A,3E1H]yOL*t3jI1i@٧z<_5_ִg鷝s3ЌzMEfEg$TOAvp/,dG۾voY$e4':nw{a|/KEt|~aۙwO_vQ:wOϹJ>ͨWS즽+k`y{6̓rHtOel|w_dž k6%8-׆uOKBep'sB7q'8eG6]Qon*UE&n+ lxo,\YIhomcɖ&ᔺcMY>oĔٙ'y<)+;]*;xEP34lrt f2Gޛ4_q^)WhVj&^N[x |߾< _ sV'UΕkj,imw$\#ݾ'LoNDFl ja7ő>WLuXrg|<^1?>#xv -wKnřVR!蟻>>t%$KEnjX^^ :k.mkI %ݭG#i6=C~d&^QO*~T5| oK>/շǦpO%fH]>fő|_/w/Nw|[R|ioo Z__sua [۫Z$A ?oןJj_n,_ñ[YG;8!3ɻvHv3& I`qvszO=="Ek>[i$lpr+:I%} U6r_sٴ*C=ճ"!M6>fO5=߻%sԏ+F|U[rUB4rFmi4{G{|PmKF|9<&pޛГ'wk}(]|zG_ׯRηe?tl7oͷn!5_iZ7mYvE}6[-ۙ-[嫵#<ﹿT_J-9?/—:ezmGgl)xs]oZ~7P-hֺV7G4rߧHh_?34^~%j:mty%U.!8ݐ Y;>Ď8}}wPƭ4[}v ? sxPGaZilɨ^Iu6ItX3Qd$M?O *T$些ӞZ~)Z躧in5vŠ;sO#ۙV=Yc${NW>[C2{~OUg8sK}3xCWm"}OI>{iw ֳ]2Gv ^&|v߯{lr-=5ռWjoNuXϭϩ[xn+<0)*#3yrwi$5R-m/>>bݻ__/_jTw4-n;lho$:N.Y.sȱnJ~gʾ^'`ko:j*+z>|H OQ,L>7ssce"rh,{顎(g|{V'.of5&.dQo\QoHv=O|Eq}VYgğF423F4:Ҵ0ț6'JӓJߟߧbM=_gËOCv!4Ze;;=߼1Qw嬒~ܽ?ȩ;&Lx B(@av]ܒ<|a_YK?w ?r[fy5-E-m5sSᆽM^j:eۖ=C_:|o;eТ~blM#&ծ߶Pm^zE|Oi_s#_|jl'O3J~$}s_Zך+h9z?|3+RmZQ#3B5M7[U5Đ|g?\K<I n_2mr[7o-gɧESF.7/)> ]3$f # doo5i[MtswL|'9d7znZ&{/ʬ_N*/ȥ>G׿fz,#XuKkeR$fkwy7 Feïc}yα_e QRX?z媤mt&P30Yl_3k+g'kA>$C֬otKxr٭Am4 $-l͸m/SfW_Jkz\vzM{Y[]no-G'uBzm߻߹e&P&ă.?oezS &v&$:s])i4F B%˸}ѲsztK|/]wzėi:ط Ĭٷzks8?:a_?ns$b{ w!c󮝺/>Urʋ ztF]~Zu^|Bʖ .Tu.)ww8fytT3|?no\]lF,s[.9>c[Z9Eum|QtNHRUy,rÒ+. [V! + avnjZS,o58G̻qssUZL +n'w]eL sGSOffex^߅xX2 ŽWF덉3˳~ǬےoWyl\RwO') nv _[q5=-~a?or?ϱWӾȵw-HtXK:L6,mw]*wm/ocWR4.u|˷TF$22*w~}z5<~H~gikZ\X*~=ogZdV}w_)G7DQ;mKZ \W2Mr˙~o|ww $_7\=G>Z9Lv*ʲU呤K?fMsc4JJw~^-_4(wn ]>1ml~vXb|ɻEoT{_3_qstsj{{y5Ϻxɖ8Ⅱ߹Qdͼ}4|IFxJݎyi:i>|Ey=̗0;}9mG' :.͵;){qM%ky[e? GZSMkJ |B 2G$wR naVGG͏߮h5?}e&v#ݞI&YmFL?0G#BI+?پi>}RvV~|B-|Cv ?lmg7hFˏ:M5-or-]o/?"O+ß՗|5>೪GwmPXטxٶ"y+ٽӺ= nIW3l~#G|<뽏ڮtnZgDiIN>St)1jhNmGs7t쬓\>ͫl/U(u}O'ͯXto x~|f湺K[P۲9..ToEHQ ww}SmfɵGLyOe_ hI9[?=YQw#Me߹M5t[(ĝcIk&徥xpRP]zDZ[mowmkil"C,`SFIMk|ܥ_].8ןY__FDJCc,:'=빝GtrU⹻OR([rvvmAj |{ޫ޾bߡ $I.!$1] /z5[vՂM (}gVti!D,dX~g'{ݏٹh>>N1j=0itʻeIDdd޲6u7WG5KPIryHn5$ݺhfDsơgdD Kqs41S=_.عv""'wk7{5;>{,,:w_sqOtw<#[12ݲ_tw$#K"ۗy"jvp E[[ogI[WxhKR[,XɈ@a56rUyE$ϙCywml=&[p5{B}!\'vVϼH6wjdqFlWr42\j3nXUwa Mm;cAMEjH/g#heݳBv?\򃾚y=,h$s't_ iw}#kmO,yji}dFzͦOe|c_3~-cw1swZ|v>d ;F5BDI+]~qo!ٞL,aA HMχf7ryRtd>d~e2 0k~n3>ZW{c/uno|/.ou M<6\ .gז}"]-.fLR8x*5:_ϭJ'm'stk8[[ỈɆg(8I._RIo'˷’%pb"k5N)ZGWÿhYhO-J#* ,ѳao߁$_7:\ym뮷|]^x7Fio^E15"+YHnWl#GD{|z.DOo揄<+|^'M}z߁.>[[6κf!FN~#R&Ӳq׎7 J[-h6tortix]ݥy6W} bk~^z;#?^ zςU>pʷSXJmk|ϴOBƛmiK}o9Os^/S|OWu+ڄW !Ԭ侎K㻚=\3&;y#$3B}^0g{yez׏> `nோ>O>(iZ~u6cOiB!\\4߿ǼN6IOH_=Jѯ|-Z>kZݾ>vαI 1G(]NQJ_=/'u;9c'n,YZM6SG/yƢmZV|qiȵ)uQYm' mio^;2Kw/_MF{eO 5x\?]^I~;X?3&yI9”>kɮєkO65 9K F 5}:ѶM āf]_DE$6o(r|?OS,`Ɵwqj j/j!k9&uVDKe?a:i8o]{o׭Z3{i:_>t6TZAqjnoWȒo8 YOJ)go/# k'+ᵹ{M/Xc`a_|o49z*xƐl6~үu(._,6y3.~]VfyZiZejʦO][Ft>bɷ~w%qʣRٮ+ۭO]ZjZ\j:ĩg۫\i6I$&ԑ?̭8vѾ7}nmNm◃WGT\5ц9IkVh~m>}~98'a)ƎpkƏ 7>5MO:^Ö H2YK%i#?ljݽMz'{[{:635%|cη"Likљ[mǓ$|3#;jtֻAٻ_џ9|˵>G׵S>Bnhex/ .6ֳEhaQG~O%:EhN~++m|;.4ڐy3n\U1<ϖw]EuG ?[^#4(i^j._M!{mGsIqk#H_x<^oo4eOsJ׆< \ZǮx-xeVW~|J7œyhtn=}tv0~/$_ ?b{a/*zMݚh_kp}TiPo' r˒߿|np Gzӵװ4_4ݺ|}OTtVzo#[:Mf/G_ItiyzoN"u/r^z*E~qO,)m"xOO nXYs9u׭Fo -5t\^Mޜяtʒ dwl)]UY~wo=?SɳL4[T71Up~ݷww~>"f. ֡gKw*uI$7t}|_uУ{ko] MK=)·ekm:K&|wk*Lo3c%% ?*ϾTӠ-M#|k>k3 ψ&Ӊi̙ZMi!m7LWO/8FM9S_CΓo_Z+OԼ]yt6#+B$wtz)_kh:h}G}wV_+Og#IAmE[ >$3%? l^"c{$}5[3<|c-śY`LZizݚ43k4}$2~e}:4a[D>矍-;;,F&][Dx({wk˛8av~8t>T?.-f{}$|L𕍬 0E*FM-Ulmټ[{fUydj$#pOm}u{[0G~3ռGb_K]\]E3#?v ve48]<%YͲβSM&o&?7__3 UM=?J~x[&meuoxjxFL<,HOF[o~΋^#m ׀c>yM1ȒIoYf3$(s|_UN^w\|hSrys^_^߽o1~КkD~oHkKj#pz*G<>b?Yct71ØLm9j6=kI뾚|v+3ש)Nj8#_>5|- 6+~v݈'m]WmJxw|1]n涵Rm!\YFTRj.?K}_'3W0n iFt[Y#[{.>ϲHc]5IozW&aaSVRpٻ7m4+Uy' w>ytvgO xĺsW Qk0"nVn?y`6v?E` u.SRƚju懯xo'Yht[XO'.|\rg %|YJ0Qj=t:O=Ns x7kguuYH9edcyL0c?jX}S>EmϤ!jm{"_\FI ?'iw_eyJV.xWZtڑn績K[X(᷍{tf?[等pK߫`;_=#i ,ѕv^zΘ{${ nhc{kp%AoA{ uױRj*Gɩ߼/~kh2]?-XW)9$ض$Sʾ/NwZ7DNV $Ck:}H >h_-7s Lw'*Yehψwg-K/sɡ4my{UcD7Owp'Z0aG}㾺w=/g]^OQj- >[y*onY\snQӿU k~ C'}N]gKLVs#^+.osȼ_-]TzUEy- :~}uiq#ZL!y.GL97Ъ-Smt6?n-t 7NHd8#Gʧv&~'_~"y.O)푤("/?ڭ#_P2l3jno-m6#:2G陙i'ʳC ɷo"oZOi3> [9m_3Rq~?׹S/Zͅ'WT7\}ZIV͏vF "&i"rf8*Xuۥ{5S/G<)ho4 T{m L&Xn<#ؽЊO-U2<tHa3Z}|շ;ak+Y}kAOxWKv^ 2OFy2o-(^|{Rs')>ѴX1cX븴VȰWVХ}˯9sƶj{x-,Ks/3Umu{ uܿ2]6zqn]mng>o}zvkAi~a_4}?c$EgwIG15ot8ׯ}=;ߵO7񎕪X$+}mt2o2i7%[|3ogCI;?*S}|_3c'U^/_i7:®%nH!&t0)t^',~ڝNZ?w>d5 55+;\O越o2hoGr$420ycӺ} $ֿw}Qu>ywG1@s=u3M2Ď]L\});w$2$RIV6!\+{M>{TV4ٙZ*&bJ_oTNʙLWAD]o3]6~%kԙ/VrrHT7̒ms/(mtYŷ`#-[-=ď"H?!GwvtW0^z|_tmP-B*\Y̰Y6 wyZ~w{.ʪIuGeݤ sew^m]\JI% xk`vz2 I[rL5MA獴UI.^w8:×vMy~i_<}Ծ)jx/E:,ֲHȶP#gOVlrOopm_I,uiMvcȍ.-ўxQ6~>~sC RV}odv{|'AF{i\kZ}|C2?MMO꧆?*iE'};G>!|GSR[=TIgi O9drMd/=ܐ^}|{ua=v=du_[>m,6^%HK$!]OKϙQBvu~l+{/S<6!{>^h|M!ePahm-YWȏz4Kn[׵rM+ot~,~h::iĺldenfح":'wΎ[Zrnv7vϷ_.Co~M֬\- }do.7%A}FR{R%ͮvWx!Ѭ6Jtw"̩"|߬eKK}nt2i;mexB\fyǖmPJ7syE<3O_=C (DQr6kϷ}=47D$/p*ՓJr{s| i6w(,SGIgo.w|ZkYs05#D$n魭 v/2.dڐ6ȟrrK#7.uk씓V}O-kKW ϩ5ưb5mdU[k/rJQ涻)]ϩ-(|Aj"k+G$,?ܲm)4)'sgP>TBpueI>f ? V嫏[9GWn/$G qK3I"FMخЛ+Yo皏Ɲ i^ ]֡" _n7n!,~VRJ*Z=X|ΎŚh..ʃpmI#?8:6{|vjK 7v$kNY$qq;[ZF}=Yw?Cm.7fGjnS[rKf?K}ִт{P7_J7-M=筑xCBI.YQ]QJVN;U|O- \ۦ[-2%dE?7w}&e}g}G</G_:=ݩ|ɼٷG rI̎æ2>Jf ݯq-oڽoIozi˼'<2qX;dg_$_;ī{p/. [^iqH/ ^{bf{I##*~#(vU*_֟w'͢zv߷S| (ah/㸖YGea&ګj}X|S~{_g̷9T>& ;VGZ,Vab;b·?yVe*M46l~C ѪSd,ܭ}L]x*i5MFz]6"bH1( Wi}ƴۿȡ^QdL|73|Otœ]{J8-C6H$1%Yj"VBۙ[,<_TS'^hG'P˰_?vo _?:瑮= X)vYI+G?]nZ_SU9Vk}ol4UYNmnǻS{v?~?qjJkjH/puPL+9_]o9`k{]VPAg_9gsX.3?lFɴ~~gD-c"/R8ӭR_\v[7wJ~ΒM^;4iIYַ&:mG^ku6 CE1#VX]6}Me/_s*xv߾?=~fwկ-UB!k[6o\\L4|p~LYt_mH}Z=GF*?.RmYInrOZ~w];v2կ~4.|$V!/"I'זmmʭf#_wOIڧ'N/Uolz&wwº.Z@D-1Ѡ{5HՇ{d}>)~ߟp~]{6]LCpB pm?ު pf[3/4kRbYm_?]U~`{?jLDO,y 6e̖_!!),yΥWo|V> xIƓt<4^&bTLirI#2yn:>~tnZdÛ M[۴+]&}>{K[- ]@čyqy&XxS3[}ءO9s)wm~E,:SRNzi,M^Yk>;nv$oLB1yni).duLBl Y}fhUZM͛e8Sv?_S)$v_^YH$˱$ߘ@d~I>-JԮͳWncdF#U?o$uk}~aqXXKomfHaj697~[)koO*iΏëA{go=jVfݷsr׫>g/[]OL KY.F i$7nw"͜?'&K!ʯ>蚤Qo<[weM喚ݼiO+/\:ne}|RQL?RhR#+}'IԴ){2F-52&I)x"ks87mtϼ-Sx:<\iZ Yܣ_6aOs+>au#ltP8ۻ~)~ß/P լt7QOZi8t2k/Ko96CmO8_aJ2էuOO3~8;euF> Mx54kź6캍ͯ=_?ڤK$;/'ܯ:fR/yJ2WMo>ʷђ0nFG$6=iJnڻmq'ִ ^[K]\:yhuUW}?_&Ȯ*ef,14Xse IIZ";[e!ϊyዟ\kS&xbٮfQIte&&7V1Rj^ۚ(+k*k?"7W>#lB71YHٿx#|h%-!pt? 7TMoΡ9Ima2s$hOHWqҡ'|d۲߳9?HvOZxMx|bDzYd8e2I?<*\i_𷟧Sv߼sÐ|N5O k^pnԵ -)-ᳳhB)ͼ=#NQ^뾖|7uͧ{F'wdi/1{}ϓDZ6kJ2U/]j,tJ%6yEj6%o'].y-/ ն[>~Ŀ Ưh'oi`WO[}/M70Βˏ:o%~)%o;-~g.Rv]9Ky-IҞt;7/|,!v~Zӽ>}+}#Ҽ53f$d]+B,:Guas4y%U[O!:IkgW KԴ/HOcEijfhdk{˅Y"lwkxMEҊ-?4X:j/woU~>gV?CxK|K5^&iWi62Zi3Ϳ-kʤ鷢|{;V}GVi2v֮o2?P`]?k$NGrόZ=+񮙠G]iфkF8mbFǙ6*̑"BsI޽l89MwWΌ- QקgVoh[1%Ap|۷;nRRקvK%ZtG-o4('9XH :Ʋ,esos[X-JIj6kڷ&3Ӟyy}˷/@ \ޛ߻5<r|1 s5#YTZZYثo:veG6 sJI|+J&4="2Ⱥ$U-v¬$>cK(t<_ uvqc,Cj?G/?&O>E=0YM2+^t]dR#woơH.O1,O-R06|}ƎEZ߯Eч[?VM ]YҔu \&# mmoF}G43.wC&͈UF6&dv6J%%m(U#zyϣ=53H㽇H[o#}&o'}qCTCm{݈_}zҁf$OןWwYb_iq.>t^OU~>[@ִX׏%$o+[H7f^?Dd}?'4_zl-4Ͻnotֲ$h Wj[mmY$UlThGc\c*[jG?_&2ׯ_[cd8 w54E*܏&2Xvs#BgnnW_[d0TmnSjI[lg9#?x{d_nNi̯hgZψ_y8֭3;_KmUmZXݭgc'ϝ!Ό\_d ze| Cx ^{ 6WΙU7# vO}}"E/O6o)xIt=AmFEѿ;HwG>7k{|wջ5{ +E5 .VەvmzjYh'ɥ韟>'xP<}&lZQ?i[Hųx`|kfoZITS׮ V]{=/Ol>&jH]Ae=ipJWNY$ݿziQ[w؟vCfN: *OԵ%0av,͹c>]eJ^_jWv>Ǜ|7IK߈:fEӭk5,ѧwsm*\Kos%vzv;_ 3j:p5ޣ)6Վ8YoR7؇̒n̉Iɘ= K}.;u mA78ln9m6rUw븓kftBLyV/] ^Өfl]<+#-"4U[SY3SCy#e{=ϻr&ݿʣ'RT⚳6$Ǟ 5GVV(4d9"5Dސ(x2~[8Kx+γ-KT5jSXn,1nx{F&[!1 <-t-SSk6p[%fEv[}ϓo ;4r:xnIu[2xw4~.ϛyH>o>DT{ iYׯvR&i$qU&x4{SoR\^Jt7o|L&WxW*iizVͫWfhalfO3̛bT WoykxLzuù ݳApdzoLy2;|8O=!ɿqv>y0+/H>|7- x_$X$O]:\gy&*i~wDIqwq5ZmyO$^= t YqkicqX7dU'z=T"$FZsXЭNjR,lx5Hcgqsofl^[57I xP5Mwߩ^kq\[jz7^]yoi0aUD߽?$pòQ^bw]b!A)n, %u;Fw6|߻*re(8VgMckj<Ϲ+-fFWcnnqi˧2op-6.f˪M$6),4Gq|"oׯϚZ/Lic$SKt2USkh54df7jcG:%Jv\ջk9xšdjzݕ9gg;LmݹUEM)ݘ{|_[wZgχ][LN^eyqۼ{E":Fo)~ֶE6ykq:]PCkieq#U\5$_NO~,-_ĚEϨ]--}͇QhI#:WJIs?~=ZX=x@V崭7X \Gq42HL+d(Z}{߾o#^[+kʰ$ƯY6?1?3Nj:isT'ڳUj#MNH&M 4nb;5-jws̵ ;Iմ-WXn),ou+-65ƨaB^!{~_2mа&R^|x?ÚבkBΗĖ #if_2;o)`4uV~mMx ]Ǐ>%i:f VK9M=HֳF6业y|i$b'hg^ӣ|ϛi>uOk~KTxVH+qA4-(QhR8ΑzUimwS>!'+oQ07vXL%wpƍMiOefӖt|)Svv~q7m#0m K-J[{s~\zuջɵW`u"I!|TZOGq9>b>~%:z][jZhJj:>3IVe|;ܿpɪ2r[~-[_j~4֗Zn{'kyhRMx%$"}29ԒE(oO=a~!DZ_|avUEdu̫cLM߇ySO־?X|7:xDVob!k/elGX숛 .{uMuiOkzy;mƃ%~%WMG\ҭiWYդMj'ڦuaٿ{}.W#z~i>E΍hZUb+[ :;XbNlsV5oż>}nܘ~E6[efgT+D99n|WxWnukEBHwԍoog ȋoo u%!I$hœ4ѿ^R.Z/w7?bx_⟈6d_\fn$[b3~blyڼ_PVotߗ~x}I5;s7Z[%Py.I.Y:|JoM,~\:$FXy986/s/m|}M^jڮ O>Gm|p(s|=cj/k.S_iel+#}Ǚ&E'n]A?K7<1_>'`_ L/l/Oj$vq}2ϚOܶw3InNmm=z:Av{["H_9GuȻyx a6ù2aEV`|W} sϵ?xR/\x>3^jh"xn2۰fЬ˾ݤyw4pcGoJ^{9=~L쵯 gjFGVM˲Mкo}>xnKw-̩?ٮA);6t?uvRZo50iuӽqgys EqAuIL#y{5mco6}ru]t[8{UdE ojꄡ% <6t &t@2Y ={F_/̾yw~{z<[l7F޸*w]WN7_ml(UH*##ύ}r8It32~(%4_x[Nխ4&eng,>d6"qg3k?L~_x__[Al 1|6^f= >ǓrǷ\?xbiM{ė1j#|XdKtmxw'ܷGzw}nXm-(DbYi#k慶oG|.i7vBQ[+gPżKQDK,ZtVetm~ϧ$5"[N+ dd2,ySgel7zojR:.\MYmeXF&dX{շϩww_h:YKk-ƙ5i30 e_U7IJ-ysZf-mǑTvvʯ5D$cѵn 3w۷'rjc+=o4Sln3T}.WZ#@:\\^.I3_?VRImʗg}+u u>'֟2$v|+5$G0֑DַciyK*?E&p\2w7l^Sϵm?Q5n$֗[k8 ԗ m7DZ>t}?国뗧_.wIG{mf&+82\]yk'nw߱7utĨ[oSsOAeuZM67n3koHIv~>]RJUJ|+_ZXEֈ糎ܭBU~JVߝiAiz%šh/ 4jn?q?fޭyeٙ~OėyUYжoVݓ} 7i=O&ZmO/#7SMNOS5uu|v/TO @ 2ڛux7/mfrkGI; s>2׭l.g\A!beFdJIy#MSn &Tf# mݿUϗg վwsOq{;Ŧ*>֒eڲ;n~fM#WRӓ1.䶹Kwn7V2{t9EG[ i/߻raӞinU\bC*Fi4o+юF-KOQmVG"r:9GI쿯3iΆn#18d0&T2Zz꿯qfO K츏62OA#*y#Y7>|?;թsk_jihPY\hWpѮttwf|&sZ߿`.Gѐ5Ny,e_n}խ݁j1ĀA/M7}@"$=ʜK`xZSTt6n$e;;#}&xULښ?"yt|V]wY^ NđLM7oZ4-ޓY qvwu_>'-f֋׫_>cCmϥahjZc}YԆք2^[;D6<ʾT^qZo,דu9^ ?ݜ~%jWeΓ>.$6}Li6$ +1Jcuj=lwݝ;H~x@4~|M$m֙r^fyZ&p{\Y8aDFˍDɉ:wK܍#Ie SAqkc:A Lmo46syo,;Ǿ'Nq_3w7%I? ׇ_OqiQ%o!_4 "F/L IEftDs c= CZMsG.lryӳ*̭o4skCxYJk>G[K&I&_1!e@40?]0ԲM]5MW>6 亯otK v7q23CeiI#c/XخUhoMNת>gϾχ~WcW׾{㸶Vs52I%2Yh#GoX _SNkmz#)h} GojOkI-$[I$Inmo+{پڡ/OK}obVVw? G&,|Co\Ú|,iIiXItu|Sׯٵ5\O]̽/_zց_M=o%<u)g p 'G_Hn>͒yi5S\S[[ֱCԴ˳\hmOعl| vFshzƥ(n]6~5u_M񎂭e]>җQ[L̿em^k>紣?Y\1[B|ˈVO;2tX+7]e7{o.վ_wVk$ G5Rfi-4od^y6?-y>.n=-{eR)o}#;|'[G"t=~ Ѥ?o <--JFɳ[fٓ#H6I-掮,K*}|~%|amaA{f2fm:8Z=B#Id{o%x1O [._u=%GEJӳ_-t ZœY]?I6`£W#׿aQJM{ׯ^{㯇C?[hWlwSaG"'{4,7o}E(Qpi{weNO|K׍|Oᶹ{MZ\C%E3$k2 mW*UH;G^Kj٧/;'>7>vk7? 5 i:NAE%0̳\B6]!27'DGmLF MW6֝ZiI?_ՏaWğxbt4oH>+5fo!ޭp) ->{ 랓SEF_*Kz>v4|{'iBrx>[]緊V5F&KF# "(Ԅkl S^omu˾Nž"S\񎅨r r&M6+!7G!tɲVuhYMBiK}]MaRUdoOwރwhznIK}7"Y,E'ڼD d>I[|/巟OkvQUyJRY`ŭEr׿z&h㷺I|.dyo/I:WON7J$~--Ʃ?=\AIs >whTx4dq':0pro8M|;/އU,kfM.M6R,kXeVG[֢.uC=蓷8*w~𞗮2=GC񖯫E4KUܿfVKo/d#?r^]JעsTcմY.b&,mVHee&Վ&/}}.EqzFfr|]e/?x֗SҭZ9nY$`˻$~BN(UM|VE}پosT|I㯉/=WP-1Ur0k8cnXeR?PT)rѽֽחws%Y_c˜y$jiȤc[pu+AΆic >tl~jعTv<~eF._9|@ԥ?lKf.dI%i>Ofٲ.?#SoѥGrռv~I 3FN;;I4w2{]o+/k{ͻ?mmOC/ot7W!*2B,3߶"L>'."'>}ޯk5<WV3 WRy$_>ImUv_&k -o֟qĹnif6-R9nE!I}ݯΉܕ:o}_o~&W<]cX4Z˦Էf9 w nZҒn~yO4w/|Yz?`=$[Y$*AhL6Ͽֻ|k/8SroO[wzz\c执\_Co MxhOmOt C -\C&ğcj҄%wQn]:)/yu~e-z/]G>.M߉3B!"𾝣I :ēL5nl׎dfkRcwWNrt|*E߹߯_^ 槪KpY$eiYi$1+pcM-/dj߷̝<E/~& 0 ^ Ƨ} 7Gkgg;7 Ia8{%&1Qay=ۭzIy=O*__.Jóh,u92Yڔq;/v-O~evaJU`wU*+^3|%BGl;շ]Ѥhp2wZѼd6K*HDqoVW]}qW34+GI"'`jw+ݷ5!kk 4տ.fM9V(ag A;$+Mn3õeB~yY8__-]vMc7stqBmfsF.Pei-m{*R]۷9/f]KPx];S:ViZ۴\=v2M$)6dO-ٶIssX֬kTFmu_>u $^~q/~ɐj7x4O O6vV䗚\76v&!f?OnknZuqTa(N{5}7=>Ah=қštmh5ZM?wk {aw(q+MNU%~-yxRv뭿ͿS Z^h *k:w=jaJRe{hamsE^, _KJ>Ü>;^ܼ-3&fUHw"'Wz}vy+R` ߿I $vsvʲg/Uj'#Imo_٭ޗ`{C4=ϺkxZC&oݔ9S?7+ k1_oZi,K<1ǵ,s0ҽ/ʢr։]xc]M'S:u.Ɏ'w:[;t'%V/ .,ukOo1PIim{Mg%KS<ZjW*~m$гB&m|#h$7:Gko)6i|?]]xSK;vڻU&i9:֪E'#Vv%?@ <4Fic%Um> IkMu6_:iwi|&|UG)m:]F6OfYc`lY.on͈۵7#vsW;R5>FZM+WQ ^F@Ve~}'ϱ΋nedho5.; N;W !hmշ#}YWg$;}|̙ǚ[_m> x{D՛QԞh+w%1UV5~mj&3yדK}>Nfbq;{\FJyG)X~t3MeiׅY4kH](F7J~Viٛ/ZI_"[|C~3;ɖsw|ݘ]-oRI7}o2Njsu Ǫ"2Iko1ln.-fVz&\u#&}vPt??>8hzߍ7KwRIJݵ?f- ¶rYoudǓ'̈VjΪ綾~kO~Gֻw>#u$G2YǭGA\kmsk}po<7i9?^"iSUڥy+9> <O}2{;kNhfg+9:s:?5Jii#1(دއ̑Vt_8*ssNZo|3'秋0V h>hZMV+ڱ[\F%ǒ"\[~>J誡uuoP~<{T Hvi>)t]R=> ƅqi7(r| o~d{}5|>X7~0Ҵ$cȶ}֛7ۗO1$xa>OAm5}ZOLṺFamٽg$%xR;ÍI'6ZnX 3K*whnU5Ң޻~7Aɽķ.Y\㑗'p.?^}"_!ys_)cOZ2E9߷nckm~rs'4]=/'ݓLKtdpͷUh$0ѷϲb[GLܭ{7^(]< k^)[y-+OjЬ,ͺ[ 6>i"FwԨԗ?=ɷ.?״$1%Q{ci I#ybM4Yŧ_SN6so*foke}ɻ?iz|eƾMSʘwIZ_c{_E)ko]X8ћ{ܾKc-ەg:xZQEMlmí7^#"?s䷛^QwiN\2^Ҿ*v^ >^YM%찳Ggkyg 7Kْh޽m:Sh߭-~|7:|1=:kM7mЦ 7fK;Xd%]5da(m~_ľ9a}1S󵦹<ƓO!nYxawGetBFտ*tS|-d{kڬf]U=6jGyx;;|u9_ԩvYxfА1}ol65G kvg*[~Z/S&g{MGSdrIʶB8co%'}ӧF[[~F.r~^o Q"BB$k-nm޺3sKՏ^"ic9jn?s?ptlz_Wk/ΡXGfOK*܈7Kmo?S 2O^uݷ}6kqsǿ|+=V GMW0åNy\ISi>ֻ}Xe_Q CÉtf.~c?ݯ?xᰟoNc"vfyf5Yu)e֍d7M#=OiV=S)7Id ePJ%yabw26ݿ_^Ao2Mh)K;oo_X⧉/b-+="%;*(kK߿[(~=ԼE-CU4u{o gH|gܫ0)pMq:#|ٓbj٪Q[YգSl]C,{LT VYv^tB;맯7Țdۖld ~l3+./鸻z[k;Fy14ٖΫYLJOzN*[ůys~,xtXZK% anfXw,$Z|ɶN*);4t_RPRzIuMZũ K<ۗVs׌]z^8ڮ{G_4ym28c}[y.m&jotٯӿtiWσ+Vׯnvm}'K9h&GdKh_y1MeNOקm^ios|#}#^Co۩M^6?9fnUS mWk~B#F i{4exᶙpp+%[}Jymo ?${vSķ4l^v_3 jn^$KWS[w/U[u:#$E,s+a`f_1^D]'DZN:?몵ΘQ>v_t~w(Ck};T/;7e*4nM65kΘSQjo>m\g4I?卲>Z?1z:kok MT}W> Mo3ZW>6#j,W?[G n{)nϒK׷cptUu/GR%>fz]ޣLkjyvQs|&ܟR2Iz;~!'N[*$䓴}< H^kkj7:p=li5dkcm- 7)[* Ȼc_G?XnR5feoæ>jkD[c?r-ϙ/G̐-اݽ~_('_d|gk}&K=:Q [}2e pv/ iogn ^K礿ͣ ][U͍G%doy.n?Y@o]ؘFkI9! gmj?ib_AE\i43}K7ehf\rg'_|Jj\^W]}Oqam !'B~tx3K}=snEU^hw wM&OSпg}h^&uͭcn|7qöKUH|-f~byFw)zbj oӖ$%Μ+3$IoV}Wo+Ø<^[Pd[^1!4ٽ/>OݦJ~߷#;+?O??dzu{ uo.u<(7{dr}M7OI(>n~ ~#5ⵤ]- 9$ݹZ<[mfؓ'ߓKMnho_+9>qqA v$>|ۿw3#G2_:I~wq;>AG]~^oEj-.})mjmYn&ELlGGb_5r|;co11ohz9߆lu A#/n-nՖ6KKŅW%!3= ?rz߷p'Uߕr]kIִGj .nu)ҭ5;sq,kgi?v[[#(ɨ˯o/=vkTNW} > ܖA hkv{۳M6n˽ZGo:}>GMWMKqRwO|}v/:b24i.$gUGa5}j-zr`Dz~=5~j_]]Z ow?{vl4ݽz4x ־eV[\6'yyM[$K>͙aMfi#I4:Ҧ7_EJ>'Uxj  i{ckc^uxXyЫ;$q;cc9| 1Wo_>)xy]8\6iw,<ɖO;ls[;17ט}?L/Tj7/wܾpUT23ߑ7vw;Sm|}t=N_> hgol-[Uҭn qqͨCo7m ̱_HȄ)v?V;}2j "7I|YNm}?[C_𻛩K[(5WӤ^A7?[~hFޔQqkwsz:=W9[^ u { Ӯ䄬)Ke&TNyIy<ҒZCk>?Osφ׈KMJ+5 oofɶHv墥s6/.+=-Qw3+og̒|۶G1^3JCngɣsOaq˹c`eZ8k}1~]{nycd0⺻)eԞiVKKVUg{Ϝ"ͧ{,k.v1Dhmf]=}{LAMÜh}fi6OցM1;`B<0~of|rwg$~NLKr<77^>]/=h5I-;bI^ ]~$i3B矛?Oz V*N+'MwFMB+k]Ӝb5O0fFwbuTcԮyy=2,Ɨ*;[FH9;ݻ%ݝvyya'1wx9ruRzuz~/OcyoaY_j2W\ӔWH߯`Rk _ |C߁5/7p4Au%-of-"癘$ޔMsJ뾫:M^3O= 3ESH[}~vdY>ʋʩ.i} _.G[mGĐj/ՠv-a!tš߹V>yD<@N?'f*);.Mg܁sP(ﯼYqTc)s?/̖3mpJv4 ITJ{kIi _x_KnEqq%_cͳS9?́wѵ-SR֬-2[E5V]  Nf}5_ב_woy3xK>k9ߏ,k_ԗQ? æYc4& eVj<>wC+M_>?\N{v\yu5 .;pח]M ɳM ~I%va)%}StnWmkzVa z9i$_/X㲺6ϱ~m%-|j{~ ~6ZW4xV-,r4l}"n\'w?rxfHǬMmֶtm]~W{]ϒ#w{GI5uu-&u2JZ]*n&俗DBSg^^}-5\JSubke?] 0MBBBYXLnG|}ܠKmf\:G|_ٞ__ Kú76=G,V>O/wF;Ro[w5uIJ.;Pn[{q 2+ >>M^.gqԚ;=m/Shz=|_s鶿[Ɨ eg$z5ndhw4p"m+6voLȆwgxחv:Fi&oq [,|&vC77JѿB|g}⯄^9?g/Z+iZm fIHmt?}KicD}Ӿ%kl5'jRFɏrt,"[~fsNnG;NjP:ΏGԮnH+7*|}o'~/ɽVoN__x:l7 뷉37}=v\,~_HpQzt:I%B)_~Gqz墲5%mo%O$j4Z}!ۅy՟ߏ%QδBKEĖVY[q41;yry0W'M~^|GW}$eva{m&(KGw4By;9qo{~zӥNM=oxtUuOWZAp,2G'gr̛6'߳2nꧣoK8i+2/5zS[CԖU/ʫ,ȫ{"%+~~~}} a0+rUv[͹X՝w=,=zG]wm|ٶRܺ[ʡ|4?%m3g%+yw烈:x[EѯO M7n|ُU}Z\Eōmj1͍RkRl.|Gup/O-;.g;ɦS<OŃmƩj/ލydV?پFuR4ޱsj>{kשa8xg[[+OM64t{M6Kյa4MqpcI04DcZ!ҭju}udJm/>Mxm21Hؑs*w&u}]e4 Uol*>ny_ ^)KkڕmPHfRV壿B2{$&-AϿ8Z}4rWl' pMsB]WZl.w)-墨WDQ,#g@O}3s}4Y]^F `Om|6Ax^ִw{ I#86ٗ/o^~4z{~':jMҼ9tEً{͍KOG:y#if wöoOO;)Ɵ>_߇Ya Ǭ@ZΤЪ5C"wGK⋫NqO f/j@oX`.ݧt9I?u/z&x;kZ#6T/mDϑJMZozgWv~Eo kf_4O=m%7q$}ߐ>ny?ȓZ*|nOſ|q÷ZmX\hį4IFZMQ--ooɥ8GiZ T޲_w~5Xֿd#lt'V9PODg-ai$f⚄cfW~ʖ:jQ鯦T{~xN{MEc3Oh..dmّ6? Zo~E} 4o[$KUC/̌Gٳ]Rׯ3/W;{y-$h^&T|ܶZI7v4ROɞGj7V]{;bwBI #o}"7cRJm}E(&֚ksҖ Y4h_QtK|Ъά/l6yr|kRQKm^xt36ԼFq8>(cbW-&H_-}sթ(vۿq߱ <5|aϪBYFO1VO_zږ&R2AW۽v'sα*c_OD8[/fQ,)i7n7ZJ u6?Ko0ӧtkV7j1aOs}޿>Z⭆kUGm_>6kSM{ۉ"L=\#Mq?sI(7"ն{&i5U];M@OաxY4᭙e?mn7mӿ[oq`wMȻYYՎVr>֥Mm)Gem5hK,GU|+8mk.ux[[DI'=r,ܦ~yͧ}:x[QAjrhF./ 6zXjoXI$̟:#D Qz4]~_~~LLL[{lY#ce]ʬ6Yu2s}k>IFY .H_"4ًsseKkZy F,2lu)8]{į~ 4{IdҼ9ceo+ݴ&IHkv]4,"l؛|.NgucѼ1 G_ @m.xO-bi'M]|Vs8]k8.1]M_|\˽l0;C >c"tOzRWM}W:#~NT)5j,?_ԏX_Mka5YVWpUcʮuy6j]Kmi-ZsJ 6n- t ײ#yc$?<[3CkG_#~(H䉯lQ K$VK{yw ]>}kM=tz;]Οþ/{i!`-<ˉ7$jww쩯->E$_"wSjP[ͦ70[E2߾d3|̓>Qwz^Fx7ڥε:SEL8<8A&{wT)YG|?kFv[}*3|`6l2x-x5|#U[<7I4Q};dtt| _xGF<Θ>cg/#\~d¿&~mǑQju$~_3;?"5oNQyiam4j,ɆwM6͕өm??[JV6ws iϩ^ B{岱yU8U5ylDw~૫An U- ?G>jk[ F4UmO^%8Yi#2$Ȏ gR+˽&zt}_꺶jwZlR#&n@]^F}LRIZk 0J]vNBWOlxI4d_3o~GԢjPm/N7ڔ KK8O;oC(ko׿9ϑm_.}jOuO jt& irC4}y$+#6$60Oʟ$-%' ZN>|I%e!$6wŊ;wMĻcM<ˏ9jm?2^^I./bEL\JI s}ftG˧_"cwsMmռUtͫEsk+Rۂ۷{<?,ԸM/vledw~]>wVe{n#]jVAoIvy[Aj LȺ{KXb%EWt+|˷kZC%;;Lϱu+5bEkdn1Hvkrx./?Qť^nMNu u 6r [ʛz|=oԉɽ~qXX''o7| 6Fi&3ywM͞_qI_?Ԉ-?1/K}kTFo0] 2/xPm[١E:Cq?h~ri~O=7G񰼓kif4O8f˼hZ;s 6S VqK_?˹%̜e{Z.+GZ/u%ZZ6[/Pm)l& s/_g,ENo[i˥z]ZWVmuAo> ]x{4} UTFuαۭכxDžU!7..ӯEњEhםy?L01zq7Oާ{ֻޖ"/ݓ/| Agox j-YhpCd[=3sO1ȉ~=ZN[o_Oԏzc#k\x[NY\d_j"<'[oG''jڿu:g<5q8hz>'o+;3y2G2y?<׍Tײ_":Ɲ5Zin5 ˽Zb3̒?J{cd߹x_z",o!Vz%o=tӭ.U7ty&A-|mړ *jf[6,M(ʤ7y;sErþniSM#xNNtkh]&|EXTFHV&H~4Gy$~KK{w(]:o͍GYbmcH/cM2MwIWEVn.Q䍶l:n۽MRן??%{Xc?طt`tM4,kI 7 fGpUiKޏwu"uw>q;G[uwdݝ-L-no(M?Z'9^^^_::]~wZޕ9n_LsUd&614s'wKMm綐ݧnko/c]@4}bHHh&EYu 8+~Ou}[ѯ4O_tİxn4W833Cr3:77*F⓶ڥo3*ь[oe!|&-I#gVSOݫJ_]egiwﯟ{} /)Wn.$,7^,o&AkpWVpƭ"C7RCwkooS'~o;zOh2:'ē3ZZUs],O%$~Iww9gNVN7שb{O~ 7?5k-^ToxGmKӣ-gMDcO͔!.jti׆oWu> ;qӻUۚ_ĩacխ\6 k4~_|~ x?-ik٧]Lrfxڦk||_iMXC,{o4նގ>wq eUWom-yp^~\?xk _EO\H"X$'?rO~H_gW5ҥ*|^0a.[_gs|*Nk~}gM. O% oVٽoyxU>2pw^-˹O V<-]l|<=}߈egLג$1gqɷg ɱ%WI9o4Nt;kN{7qx3O4_ְinx ֱ}n/-g$+=~ei7V_m^z+:Oo-]7/bjtnTbxuMnK}ܿ6ϘS8U}w_~s|S|D|C>=՞~n!VoUv'jTGI-?~~5&v|޿5] LKl @Hl(Zv/|7Xi^3Э$} skcs,%þO/c!U)&ozoos#%g)|0u{)/43LY%iOṎ-]K ly$;'9so]LeN7~^[a y۝"^ѦZ#iZhVa!x>y\hBԣv֗weky'$Ӽ=jwdZZY+A MM$ח;Ip̎cvW^vw{+.nr3yT-,Ok {UP7+ɵs=Co3J-i۶jlI۷ly5mٻ~&7K]*Mwu,0#o?gwKU;K敃\v+ ` 6o>*WdmU};NCogvBW]ww?ߏdBU_r殾{O_W,7a*40C.nR?{N`%7uz_xs⏰ŤZiVLW|Um#"ސΈlǛ)Q4oWx9s[旯S/>&_ I.-'^&kH[Io5vѢ>t67gOAΜOQVcÿ-"gѴ=u? F:F\@0m?j7]mE{;;?9ȉ_Wʗ*ᄋeS>vy?W[?^".Ho?w{}<ƢO3 ]y|Ư{ e'{}]y7n ij BuY9?ϣX7ג=g5'5Y,u!' W=TfIZ-/R8kaUfgU7Y7˻6ku.Wo緽uݯn$ X?}컿4T{_~k{=MIy!uGk䝾T-33*g+chm~^_XK-&U^"mmsx_ )Px#gIWY~˳ZK5%Nw5=CWmW lv'sk2Tu#w=:rHy?Yt˓؎%ZNlu_]Q ,|qgx@~9t=N6HV9!g =f7cB[o,:IUMn3?ӷk'Ҽ?a7« n<5p\jM25Ǔ ;MLm]JKy=,s}v=3ߊmtEc;W2,1,*Wbl~w_[rnzkaGz$KkI#YL?w3/nnpPo;wMi%'oU~XӤK2ÇV"mwBka꿯C˲ k[=qAG$p4|߾IFu0wwoA:oש xcW/`Ӌk_OZ؟g~ ޕjI卡ynϻw֘F&I]"e}/~?yCWu>Z˫k+;eI#c ]ʌt#mn'Xar0ROV~GWu-wZ<;i S9%ί/౒5GY=gGNڴErwz~}YSq{7{| |[.Ŧh}m.`6+CtI6$.zOo[Z*Q?Cٻ}yd{~ yniUifGG+tEߺgӚ߉WB{Bbw7|I|k n)s/OɁeo5_2Kd>UI"Qn)}Dhc{ibAYL$xd}ֱ)+w5w1b7ȬF[ng5)]vk$W7w,4҅!cU>y++m*f?6S{R}]  }{Wݑb7H2K|JRI=k{{ˤ5404fyqpUOנs3wNd|ˮO>|ޱk>*.$AU6tȤefh㸂akV>ooaNi5sY׿_Nz|giAZZFA f8=F/VJ{k旟jqYD51ƘY@43}?QK=A>o2m2.2jF;kj\d_qIi;ėfEQ:O|Q.ߊ2ܣ`fm,TvR?g|UO$y_ir=lkI%+;OR%szSJ^=64wCsh~Ҋ=u#EX|ii&<|H7׭ =4{'R+EiwoOQlOtF/ɯ:F];uۿ;BW~}l?i/_|c{H/e?{) i 42y 8Q0BMV}VW3:mizG;~_.W#O[-JN-'v%&~'L匧U뭿.)FT'߂#iฌje]2qk.myr|'Lhavz[^ӡ>e}g޾x /='u%ӵXoGjѫ"7+ -7`мoi{W7R2V>'ALK*%t'EhI˭nߕ}Ri?+xm~էk7Qֺ}O$λތ&zmm<2kU};>)jVjVeq{KMZIxg[?ݬ-^kJ"2#e5lj]0tK[vZm@$DwF2\_yN --^;牼%K 0DnumVI' 3\4,1eaHլqVwi=~jN=wzdž<2!Ӭ!յm)߫53Zoy$cl̛qIϞZ;|򷙔-ׇ3j?f6$ZLN^O̸XYZٷ;Mb>SRt>kHz?~u h֗w :u%3yی.Of|(*)|qm^>[Tj+_goFo@71^ 7JmKu,%ykh]8EOwmΙJߟK_3_ٳSѾL|w_|FFII>Ѥk#y^{hvp֊"ӯNxkF&sxm˶ˑv"3}?hx onntS۷|7z}F~^e Nѵ ]sS[63}rd~v}ZI]Ǔ3)VvO扵*֤WL|3_;*gßQCޓվ}O=㮙&^VdoC&|LnBD{8z"l]3B)׾=WNשmڿ5=2 Xmv,^Ico4h&B|pj+>wRS$sŌx7kw}>@ӥO !Evڔ*M :&I?MeN.i>6*՟cti{c6KhB+g"ùٙȐWU\xYCW?^FStߗT|Eq'HTܬy漗:rwvtBekz{\eSiצ];EXwYOsJ0_ߩ R?_F<ŗjOl{ϵY Ƹ`(hܷ}5ٚ g\Kp>;ڿ2/dMozw4TzZ= MGt)?oWr*μXzvmNI_Ϯ{gGr},χ4"jvZCJyo3|۶mOД}z0﮽;3żAR$O#lͼ3O+yZ?.5쮨P~SV̭'_Gjoe 7׍+|\q|s%TJï3(u&ҭ<)\jrIumYl#y$']wɗf6kH{\Mrm\Jkmvo8C>?neGXYoDSP^׫m[wi($kkˑ*# [XۤU_g^jJ/o֦o?C PQ)dw0򲪶֏nzz}k5mٽ_㿭S6YVV;-YFȢy&Uf+KSۿs~˱Y< isw><{5o3.oWg<[qyur[K hFFv6?vZ޷_ߥt?w5/q&gK՝uEfhg]M;fmt"yJn2ۿ(5W(~3֧6ڵmz-$gFݲ؏'J!'(VMJ\w _>}{7Ż>0l5+8c[U8Rb;>̕b+N}>g&&+_~v*U blXV[٣_/R\+t؟pI?K{tГ\`.3$Cm$~m^kXQ[f>ϗb$=zTݕ~ouF _m3ĿAޅc[+?R5- 3C422[Mr.9:=rԍxע)ct^ֵ{M ]UMFIYVC̿NֿpuݿڳJ_7ktZ6nfOvyfKbywfصΓ=MK[_;?t4 0Fj}s7̿iU;&h?=ouk%/_Kﶿyו`֫oo#O$tZzQm̷y>^\B4/} TuKoM NEI*[+ꗛ>_VGA.nV;ȑCq=oH$nF.^[=)8g۟ gk\_E^Lf_6=B?||E2V#_+_wɾgJ2៯>+x\q][c[Iy48mla$M&D-j?՞yefߟg|Mek @XO?դc̍6o|ߗ.wh?3Si?>-ZTmYurnVX:??q9_]fS,bRϵV붂mijͥoRΙgr]n^ mQ I63IG #>mm;+< :d,?WYΈ-oۧ{ߩ?|x=vc0|Y)+36c!Sһj֜l׺+Vz=֩}TӣˉY~Vs"GdotX~[3},|,)ӚsIkN?0#ԇ[5֡<=ȷڜokyq.syjWGDi>UT4OU K_,<5k`zEiŭi;f"Kdz?o:g<O2g9M^Iw]YWj];oC~&}wڔڞ! :m̰y]:yWQJVGLb{~zS#5[4nArm5Vo/YSG|hg#jT^v{m?5c T$/ǻ>uopI4\%#'W{v3Hsfd8syJ#3n??>3r,*lu!*j\SQʵo|z΋>m"y5-Ky$2[y;IgQi=%k|޼Ng~?ĽUtφ7e%KhemTƟUf.כon))Z$DOƺ VmgH^GX}2ϱxStX8j§smG|5:fhYjf=fHП"=}cȿVo 7P%&O4I1pޛcZM]t2&5^G~|D nwM[]Uy[->ڭdg} 4CM4~37'/9nf<7?nc#0߈՛ɸd\M^bv1#YљR{G:>XG^^7> Fg˄?H*ot<ϜF;?q{hzWt_W,KKRbO~դmZ9MMV؈ΗwR}?ޓtuytloC$˻f!&?&k&YstH#aH;rI߾?yrO}o˾ff(BzSN33Olu+ʡV }.kmpvv[?,ޱ4mVQ mE4_Hs.~Y?v޿w2zswJOiLi7VyhV v+I>:iH䘤KF26P-?}(]"e%oՑ]\Fs@RvہssPL_;yØ\IxsoBm="q0ן_Gyum$lv<}r1uMR%8!;ʨv#~ʃOqw:ڰ+ UM܏G>k^E$ŒeGd ^HyQJwơ}[QLF on?9$"Ə ]K\?[ܮ-er3ne$qbՓKe_ [\`cɳa{I/ݍtܛݙ7w{X+s__'zfSOG%GQu>(>{Ԁ9K"Io[*&b9<ӦduXhɵ_Wjx Y!//{YiNE0G]YeYw#k#Di/2}2 p8Ꮼ2Z0J=|[u__?W]⧹eWK.Oy|q3.Z7x% ݻ5ߗsxZuM&xOZkVvzVHV q+%]ݏ0+zrqEmySjϯG:ln g[hc]!Ip%"py z=}vO5_@[:E=t]7LquI&h~Y*Mle5&~>XW},nﮯ1mZM:#?#JS}I?<ߴ&xETo5H3s\y̶~t~t o6:4Q>_{#u+Zׁ4j&]w/HI|-]-iK.9.+УWk=ߟtfx?Mc&Z:PH"mt5cB'.G T_{8 _}Ot=/DG Y,v^[̪ʶ;Ln󡸒40}iRW|C?oB-+V4Oi3Ķw&]Gutx?~t(:/'k^~ct/?<)xox wr3,4|q-2\Lۍ(GM}mnTiwt|?֠=i'ݬf󣼚hfui& }Ҝc 7mw(ҳGzÏ xWմ&rXK?' 5 .fx3";[yY#[r3VRe+y{šnkZhaIo#dj>#;,oL߼=v=Em+τNǡ6Zg{irp[wa16#-x+K=_?gͺ>tl/ז;$Fmۡyb4]ϱmdW֧y oFжړ%;k]is ko/o"}H,"oa?:XNtOfmsJq[l|]&Ŵi4ӄhi#;M$Lt7O+gկffXvJ=jj2}5a#,Hčd?}6c+_2i xCV=LVq건/[{S23.Y]Ei%:!Au 5\Ϳa#Yc>ͫGWm3}w39Q~(1>8{7OzRgLemh̖rnMˣyƑJڵ׶6M'~u>gþto Eŧq5$Aj#&hʴΐ"$?7ýrV}"ϥQI뾨|DDV>"|} vW{[fO.8v32yHcJ2W,3?2}]cu$3\K"#+\yf쭫SV޿A^/6A6<6uAjWU<͓W,ZJ܃UI=Mkgyf#t񴉳tw.w/ŁOi1xJ#MG#-¬3 /;=/2+-{K?KWVouE_6-CM;y-2L"?/|5̩9IZhmߍ#'xVin =?RV4[u94Y##(/bFwN+E/mgL~u&g۳?ٓg.HJ|Hfi=uZtxÏ]bK ][\) Ԯ5m15KdUD?c̞b"?ʎ&Pki/[\g_64 4]ѼP},mO%>gemwM5a#y-R]r[_יi ߴ7:Ɠܳ<-6nՕ7m|k~E'?Gtש.3o+FKYX5g:}Myyq v,(_I7tEui)MjG_w=1/Sywqgnxb;]˶e^i{›>#䕯nz/VѾz+o Y5EdE v߼ڴhwcJbӿ^|?xWgJyq#; $,|H5 Q|ft ?Y&%FL*;Z>/Dj&&4FjZCo3f"ڻwD>IOb9ҝ''[ޟ$xFx'UEͨIYM-:ה&ΙšH{OG]w=t|8Uׂ|;kľ1$+{;NYf;I ͩ!}gُOr|򗳌W}6'?3>RxNkmwgJړ׷޼sԼhZj^7&ej2%ԩ}.۴cO裏sMϜ$~vcoiumKm"48Ԗ.6-3$3SK]6r/s?w)w~omvBB[$ry y;|;%{|}.TdO{*yb;gþ!Vm%C¾ZYcI?%S}NvK7${-|3UΚ8Y`'M4-*k-ygȖZv8ʫn_v"y\'Ϲ'-t$ͳXHC_Gyhceei6ۧRg}M*۞Eo^]ֻU-=櫤_]Cy%#o'NDV8ipz;^=5Gx[AOhZ<7whqH<EUi.&U3>M߻H%\wuniy]ΨCj!䷑`"áFKߗY^,6;$V{'dwz֋:2I=!~o{?|Si͛#@-snů=M!`4Zj D=_?r6ֹ[m;c&i#oy~UY,+h_̙Eg=1)#ଈ˴u`z[b_ Юn!z%s&a)o%[<9٭^eEu7-u 1CFֆoɹzכ4ӿcH{~CX=xC>עִldd"27m6/WKKW>&}kN{N { #myğr~pinl\i w46}Xo6?Y71~u+^M7,%aipe8ڻmO'}wkfzy74[{-RkcKkyWuĊ6ܝ}.O\V~a$6[w7Y7Smb%. =ٿSM6s,Oi >5}3kz%gu#Md|-Jƶ"m>ߠEE]Oo~3{rsU|Sn͏VCƉ\r9jv^: m;~ϻ">'9}im 7RAx-&.`%j ɸ[F|<'w6w Oj07:HYdk#UKZ~uZhF!wm4wGj>#ܖ`T5cڒX$k7g~/ʔ]oo~8|1ӯaյ; SV9.tV|;~toY\\5 .6v7:!1 ?^f8Mz?si:Ww X_Zt啢9FOG%j}[tVv8x;׀mNKN.X.u|P𦅦FguԚl˨Kކ ȉӽڗ?kzWĝFGԲn(cf=H~7 &oo嗯_~ϛO./SUSvK_ާ>Dx>wڞ_ Q6ś^zlgAl~s4$hVe+9…Uh^\^t)kzVj/|i[Ci}zչ*Mh\m50syM]~-Vw!CMOC^mujЮmwGվHv|2VoFoSJkөx{P?j>ڴ :ua~i$hcuizmf K_>okO}&IA4 Auym37 =lrI7ϳthg%Oٴmi &!iu=]|ltDپ$z^;Os Xw}[KK)UgufY-#Y 2,ҹ&{nS["?|savmL-A74U_E{_{dd= %e+%ϹƼ~i?ǚm|C]iеw^s[s jt6sL#$\2<ȟCG"soj׷jzօⴱ5^ Oau[#"\G ۟Ln^V'Jӛk;~go:᷌?js -kOKXfK 4mo5ͽ,2ysy廥pMUh&/8yiׯj Pyl[i_}I-D'&މ5 KBKW˷]t_$>yW@j0%#'t{AykgKb˺hnYd媺W,;SI]󶶿sN˕5s>x?ѵސ.4=M[Ύi/"K9#y-w*]5Ɩ_]vzO@B񧈮Tŕȹ=jvRInoY]z+$ {}W'+ߏ{k77~72OKsk}ei%ҝp߼'&k뾾E5b|,~x_KH3%⭫[ q%HH噾˄SV86& m:5]^"ȷE}I"BDnXevЭ(&ݳ_Ce>V;omcMa}f?;F̿]Ujrӧ_Kեuw2} C#BN{17}oxEeXY\ۤVȭݚn,fO9}t J-ϯ۹R{==Dw1l-A//?j7cnEH_g#ܮJvZtFsj:|S xz)d,k]GLo7Schv /EۥrI߾ϔjO٧Bǃ/4tѵ{[LWhבG *o(<>w+a攟饻ԥjo0<e7z}FúŖGou7IF>}I#f3 ^JYm[..*E/w|+GS'OUܚ}nkkkfHq7̓McDc׻F;*jۻVXeFJjQ ?ofǺdGu}B9t+,kI[[5G$w BW̍ħGS$NKev7kJ߽ό/kS^&٢nfee kvTJnKoJ%O]w%j]kWY_A Xdݵ~з*2-+rL>.%>PNu:߳I8G5qu+ORZXjjq3I41' qqò{_sc'Smkɯ[HL7r%,n5Qz#H?DxwcooQ}7}u]z/x?:k?|8i%,uFh}JHd4($h{8\%WߎM?~4*7cofmg B1g;4:U,ۚ8ofWIl6X9sAem#>(^?X_7Sk ý4ysCqj[2-7?+7>vߗ&z0E A-YEx4x׾d.FeochQZG޲XzUdOTuuiz_FđQ/]PM["y)񾺹!CHoޝu|g'4;qĂ84_ˌ/ʣ'O7ymmk6spx[^i)koI.9' s0-ZA]fU1 -_3u}/IkZN5Тeo5o iF4hMr7'2cFJzZw>_?jO^hut%e۵B!1}|,,88JWr 5WKu+S|rN4w~x7WԬUɳehOt77` ^)0wpPoUm-\XOOok#qk2nc[4dIq#2hahF%u''nǑ>zsK[.o3{OӼ#}\@k7 ]Ii_ٶ2vogɷ}ystSС*׫ϩ>xǺpb.KƸ]MFycXaff?I+˭Z=ڿÿO m߯SςgEa2sP[O_X̞)snd:Mymi_q%Iң.jٽm a0\O'NoC@/+i:B^)຅VgS7ɽ um_ƶ+Oi׋xS"|J妚;o6y6\/1HPvI_7o-[ j1Q7{3o>'SGd bJ 1ӕmXC>_9cai8SQ[=gJ|כm09;fh֏GgoovݬiV/ܻZ*fR;'wo~m0E- oaq~Yܬ *۾?ՙ`rxʦݿ)$Zi^`ڞ33vnr U)-[gmnO)||VWo|6r3 U>ouqVJ~~3iq[]!Po9m$mnƏ{?(cc^ߪ1~_/E ߇4`~06my46cC:Ʈ3D;f19n}c)Ӎ5{}>w /E"WK n7^oZ̶>4%~O7s?$cpYa%i7{5uwgKF~o]8E4+ x2 t]6>2qWkMnװm䛬+:9oǾ9^:zy G&{xZ-U폿4hYQ>HxJwPY8oN|$}-տ3 dC]#QӼ XdJEy$uy7<ɣ5tpj߲g]*ח7I𕞟o@nN,^ZOwV7RuwonN9Jsʷ#N{vWfo:s~~u8o]-vE+شVY:5ī;|/wJg_r}W~֢5I4y[n#dA ~2s~/'+ߏ|Gᯇ|3mv\,/glE祼#/GO>un;h|?u/24ﴆƥnU} _z;~\nVgBϭ77f|kMNFiIYHgo }sP)=oQ֫k(k_[{g#)mJ5|L\yV%㷓ˎdlJjO~LyHgMMS|IzЋ{].oGnIk! jdD߯}?g7lPJEM>(f۹dY Qsg7֓M:kD;cicO6mr]^=/YCV4|¯.E,7zo[Gsc$?c{?Oiy^M]5ܡq40I*Zy7+BW!RLQ}Z flwI;_0t7͜H6 *AhYjkϩONMc^]]=GդRYŤ79n~mvw?Ŝ?5:/|FRI. y[*/z¶Q7FeW;w񾃧,ɼ41Mm&?d֋~G[_=>[˙®X䔶UcKROK_{ī #~?x21u+`4p$]Ś맖O]>'O3i;Lƅїo[Vߟ[UbTe]OYi9wu+}zR[Hʓ޷su>&M~]Gw:լ ]_8>4ߪ%_`[[ǜVR˚o0YGcF t_1M"&z q~WCu4,$-݅ZM}RˈYOޫۿ˻s}q;ߏ^//f\H/ ڃܯUW{&_Km4kxmk-;1G<ҟ HŗluC-Im3)b,?7|c~]tnj}tiKW߯AHJdԮǻOZë?rwoͶsMu.qS"G6m7NJ 6Qzq{ӡi4}:OZ)aH^T~cx=_}K$pKiw=vl?\ֱ;mʢ}_n7FW}xS"-mFI.sMezzscInQmsڲCu6i߿̓~}ԦǗݻxe-ޟ_ƶ~ѿ<[5/ A[3iʐڴs2C~_}zsr5~_j[?'|(#揩hާؒa #fm%F|Y-vIfԭ+_=:/5}Ռ^_OY;}wQd_ĥ|O6nj:,=RtBeI_Q/k.4K{3Gۇ]j79Qج.ۡYIyiI#":zhB[;zM>߭| ^C:h!0h7s+CB!<{9Xv;ִڝ-??9Nm9Ss-fDHlG̟>z观ەz%I="%}'i.`[[j*Ē6oU<scݕֿWgYfMi3560G$v]ۿٶT_fjq|Prlҭ`s>{w6ݪ+.+̬VKd%v_>=g/ˋAn/gBIi%C7+ s|ۿ=+jyd;tm|xA~$If. S7&2/W4rKTŪvn ^ⷈ='Lsr >VyaEZ=YY?]_xg@M8 byq{oȹ+Q{ݽ6g6\xQҋR58vm_)PZVV<3'|[S>"𭥣HtMo-c_lWttM+ԥEE|7)^[x :塵֜j6ƣ$[yGfv|1נحVܥӢ\\HO\ ʏ+ZszZ^3}#&ѮKcq_Vt$Ѵ3iM\Xk9ByrM"Wfx0W^G6ߥϧ|sk5u8(K,PU˥CבپkĶ2y応5bt%mѳ[}xMғO^z}7+,7SG:?ep֫RUouoeR{=Ƭ|Tt?x{G ֬@UmN-X\"tFY>s:CKk:&Pnl~ - HVdVGfml4Kg~;yNMc℗kˆwuǷ^pn);kFuɜޟ?xI @ Ev &ďm ^iBOϕ|cmQY-Ԛ; "$>FXg?3I^,kUUݽdonwȮorz_'Nngsj &[i<'O_ZP{DngS᫿]o_vfs}/0i%)\,m#b-dz}>N[ck=sZOJݵ٭ %k}Ydl/3t>~k4i|Ϝ|[_TD.#s۲ պ4G'!FU7foJnZw[=!//_9iƱjZ^ωuK-ϳ& olhhtӚ"rNz%u}w5([K}Z]ۨOlfh.v;~g-2eFZt^}֞u֩P_.amo7tow?#y}N7ImO˫q&嶵7,/͌gw7zvF)%޼خꉵhZھ5TB+r[k647&w{hS%=ױ,w}T~IcMq }r2[e/mIg&LgS?3’U_?GbVM2;;{8ck9VOM'u/ei؜ESo~oZdaQTl>}l7qo%rH"Xpo2I?wNYӔ7;(r&1ܞ1^uߥ(d}xSڞM5\ڮn494;]3;tO&Lr}bVb~+wJ|%7xMǀKYo iگ|y%'^d7Y~Nw'm^#R2_z7m>(|>R3n¶-w)χM&\ǏYXG4rWieu/9>]NR`-쮴ũ3fH/$mѫn#Ut?&?uk6ΥfӷqosihD&9$֐26[*nzSEvO!Э~(|FVVC5s$[RhԪy{-9|'ϝ_n̪^7Gjw+.ŹygvDWo-m5*p}bZRW>l$W&5wOs=v^ٻMkyf+Z_}yfSL7u}_Ulz0q{^߇iB xbNx$fS[7 CxI1*8w}G&"PoSO9|شKIPcpχH+4wΟ-đy:7Zý 5+Up{o{w7DѼ-&B$/C\oFrsI_3oVJ3|?OeuxffX$4neJ<ӷ&o[b/=W/_?7~0X~Z-a 5vMu n$)#D=_*Rt>oOK/ɵ_yyv&[z0U}zK/n4k3%X.$_CuY$q,L$Kyw)%-;忂4% nZne)兮GbS|D[?_{m$v<~1]K֑ :Pm I|~qJ=w*_Ok~''Ҿ?De -WH4_.úEs;3y$24h'Iwt$7n۾_36vӿˡf׋<~ -BAV (,Ǚ Y9{~z~~~g S߽>+E=^ dқ2e,Go) Mf/{0֝z/^xDžn$)ŎO~y' 7sglkrBs'eM-5=V-6HONs> YklL?->4&ks(ԝ :~+xh /PCek nUfeEIMgٝUG)_M=w}w ZjYIl|ͥmm#qÍ//>Z.̫r^ӿ6ʯ8my_jm@#ڨ[vV.)=T{_< |xt߷5^U夋, D۳tx]*)Ǯ_3|j3b[I^5}jx?(?*59 sye5>e=MJLGy0ͱe6[eZZ_CWhνcFM3̎kk[|ƍHf$&7R#oFzӏO鎉-!_E<kٔ4J-bqްN=Y)KODncG[xM8CjօY~ԘNy}B03?w7>~sA%yhd*<@8i߷.tCYlRO["WVKݳ.W׶mwwEge6JEpjͷg/|V&]NiCd%S럧Zryʺ29]4ޯ0IyZk D&=dw='T5mjfHp!p}fyiIE}o5$w/n`?Ԩ]^u:|Bٙrx$??CZ%ec3J'{T^ywOiK11#;UF2"ʮ"cuŗ!M_pӭ"M9H3n~<֊o֜}c'T<84' V ۸olz˔W~Fg}d+wʾXXuRѽ7q>OryJi[i7΋sh^+ ZjDM j,a[;]kȬ3a_.>doVdzކU|ZG/&nwXpm, 3#Cww&SZߕp_&Y!|iulbtۛp.ڭ cy]>ʣEvD))_Go~o߃>asSO o4:en{$XݓeT#:Mӥ_/}LJQwKg˿9KkOyj/MSR]I-`CYin_j'_6ukvǵG0O ']J?g_ln-mo[<`*mh˶ao+?Fnuk.nUoNôyUs~w8_ٻ2vQ2^:|eo~e쉵EEC%̙tF}Q/}3փ}ϦM燵ηv]O#4Aed]8/D6QO?̢޷h|Oh_X]M%ڃ3$Cm ?m~]u%;4/tvOhGuaOF3\Ho~~luU/V>xZ]6 |R-{|g>} 7$;ޡPtZv<y/ j]ڭΰgupyzVɱEMCFY_-s6k};"&g,!8a%m{jg+}^oRo}o=eHm@y׿oSJlg73*yf||اκܓ7VҵbQL/owێoU>D~%ovߩ%uekcm^UqDһV8 v[?zx97ct5ZڮcdZ] sH 2~gtOQ/fF7+Vߵ_^+1aXZ^)u # ҳ}%?p>ĹHgbZ3kU}^4oy]yᏅZne _ oqkP¦ƖpbdOݼ$}oKvg3G i-{Hɷ*y}'ܬrw;g2cEӵ&\֮f`OEd1c~`џh[k!O6Bk-3nX^,^T2(wo">o|ͽ|>co3ZW3 FH_ Mu&*m]M g2G&ỈF%:n>~{7=D~BXu%Vx9Cp}P4l߹DWVO>;u_y|}]J66hiIe^9?:7oei!gW$.m.=Yj:,q6][܋o;m&2}Jm|o~}:N״.=bLq_j*lƉ~zyGO]MCd\Ca+-G2I6ߟcmt? xK񿆵 3jڥ7chhac3NN@~zx2|*om5X!՛~J$vdM]̎?7䭡--JM<|C~lgc]/s/?k#i[8ҟRmn[$K$Lch;7kOjN?cERMoC 0|M}Q.{++u{o9oG ~b[yOԯVQߢ}_q{׵~GxCx>3t+ѭk"fX[RFdw}dN7NJWio^(Yh>8>8x=xڅ5㸳km;fo>#/swѽ۷rb௎׾$!։fW*O*[ZI{p_,vy2U̖ʿ;NUQo˧s|>%ͫwvH5=%zv"%?kEEO4+ ӮB1ߛ~~ַKKlNYTH8mZ_%slz٫lB_ǯu?,yY-|qi ~pKTrs{`BӹIzcm|Џ*6vG]5} ú:mEdX?MDq[Z_;>-FM2 uO"el"lGP=?d$5ܤl 7mڐs59}}_9 7> MӔ\5ơ[}XĆoKJ)A&}}3O_w?b3EjLdhF7r_]z?G^ .kZ~:3\>+cugY43moGI7-hPVU#;ۯ2oX['m{-2@˻˷F.FU>F,"{NV:qfvw}I$wZA2MXJ4\ߵs)mv\𯀼}yMέ3 t&X.W3;xm xs'C6^6}7]Q{WI$&8Sbot15aI{iuusgAk#'4֩]I<7KȗC$-2LizR(O6.u-gZgioAu]]Cq{e%qGvg/, C3<^~Mq^ދ{zuP;VEDֲ2FݵjֹgNrZGz~eg s=}3f|ݮ|m ڮ#-l'ScEI73HFly8_gI?OtX5/w4 FOE߈=;^VOd<˱z DbZ_}[B|{h/imw%ɢhm,zMͺ}!Kx4hPMn}-|̹vGό4+84:u;_>Vʭb%L}wϛ+f3{9J5]œ5Auĺee 4gk2;}G} *nw? kVtW jnq#/q4qƙDJergQ[S^a/Om~IqiW׌,Fnm Km`I~9."IӷS~Z5~<ͳJ53 _@N]/Xޙsm kڧc [d#yDI$LNaV^o3m]>S>(zJL1/ڌo N.;$h|3<R__T`ӻfDn6:Ֆuq& }*7wRXvL;4IJ:W[~},/,kKjofȒ+yЍ4O7ﬦoͥw&I4mO5ZKf-.oK1֐H71_qsyV&zMYo;9c"MY!< b۷٤Woo2tK’Ǩ&tvf \̡H0;¹}|Qƿ4 +o߹;׿[|7=+Ǟ~ailgyeAY6DI:۷cm͚J)j˿$tMZw<-,=ƃ&t:OH'IՏ{;v̫]zҢPR^~zfK{X^a 2g xipױ\lBۭ-ȑ{H*m+i|9-.`$qTTNs{{&6j-̢KҮ$\.Yd2|w g:|6I/~C3P1k> +mE*"klgM5MN<?/|W(tCS"ՆxtǑאy۪2kkdq7Gyܗn{C$4xxi}ĞFo9P,+0d?gK"G͵[V,9*]"u @ [sm-tˎZ;\6Bh36!yV8)+-Z9WKK!+~oy L "_]!a%y/f]Dđr9ۻzWxwdrFl{"Fhw~vyޕiSQeěw ~(f6ܩE8x|7}4f|;FK6| jM.~|[7t.g{CHTpѭ:|V^*CmǪ?fcY8!W4[k.io~}V֪zu8ҥtK%osZnp[{lmLJ`_־Ƭ-oSMj>ᯆ4]5ƑoqCW5Vf<v$"|(_=ERRVO|Qc]Ӯ> Ο𾭯G2{<rn?ιxU>H7֛kWĚ_kחW K4:wL1 ,ӏ֚}//C+,1,+52I!wL [u~rKv|.ž H ݬ]6G+u}oi}jgg4lƐ~ZяHYගYJ7Fo|cdprW_V֚_vmmOWү-5)|?}|fE!tiB*_&WtEjfwڝdUfSZ}.&[ꑺBꏟ뚇,e{mo9Ϸ_WL>ͣdDa,vpy]4ے=[":;zq[t}yuo<3,SZlo5t?O|YO5H{wDEDT"'Wܒ}セj[GGI:/ v~!φKM?y;.?vdлE/rNL!$\K_6 z?w?? MDߔzƯ'Č#TccxWH-N)nn#~YalDY4: ' [>hz7C׋o#4[Ċ?w4w|W;TDjQ<.o \xSԯm ֲYX%3yl%|3WWjܩ|WC4[8XfoUY5-w2ĽY/OWW9ۭ[Sݕv7&q 2Ͳ="|ycFNIT !v-̒3"ϓ:cΕWuK𧅵}e5 &;{[ts[̱W{z:˒OW:K?ٞO𮗧pQa6YRO`ij t ?U&u{5Xu >gjɲA5;)~awݏ~3~^xk]EoMcT8]+%;I~}#fo|C.HVo6t7y$:lR*-]v_۞=3h|@j$̚V Aqye}o}p]jh?/.cFGsc5iє_ʴnʴќ󦹮3/I^mmYl_fMU~Vސgw>f^RmZM_s6?>}|Ix\h_nwSp41_&gMdB÷^:kI5}'ξ,4a|Q>.6^Aqc66D[5]?~Mrqx9{$/urnܞ|Y?m?)~nn %Ʃ3/YV6!IGBPvtU_ywK_5{^>.m;MknEcɷ wMܑ6'D(w~-ysntCűx'Ht9-oo=I? k,(ɳJΤ9wԱs㷀>-t6-#N9fmjݤVffeV}ۈc{6sT% [_i]QEUo)$7͹[XKo߯_>VROKK&]nXF֫3Yj\7 ;D7ʎW˓o^UJ[KO5sG_SNKN5#tۢ̿y|REϕ?ibZw<{x>"E4y<~ei .Mj[o9~Ͳ-#Obl*NP7uIէ$m o1.Yz\Oºsxڶjc:Uڕ41y:wqRpkoz)G6OyY~~}>ZZZ՝?/0aOY1d?y$tz}%w1 k'xkKx QSOuVsFIZ?5jG$!6$6CՂQm=Lmy-EiWbHsϨ)9zVGG%Z{zqISF[Py|ƏtV@7Gyj$fgWj|/'|wqmW֓>ښD{u%rm,i5ރ5ǙȾ[H—7Y>NYzkd7~GhеMt}_I.kCgGfj}jHkcH^>U痳&':W['~[dFrO^_?ݾ}Ocu{ɰk-kL1=т!wg$X"b==|u:uI迭-Ww{_/>^Μm$qsn?wq2O-rN^{V 7k^{ĿOHi/.ⴓO> K:rɛxYݕDZV8~QOX!SsO *i1𵯗-dimV?iiW^nt6Ox|d xEm-/Mֶ,-j-$m+2<4a`ըWKY$_U~eGw~ k}c~i⨪rRi<,F{G$Kf#s|M >l4[>;tt4VyͰ\l3.K!]UWq]_o|)3:tvM*G+L:q,k ऩ)mM_|5Go{Ȟ)y.^QS=bjdRKfP77kp/3_aaR1N^e{odTK O5_ vw1Il.m4^[|\m&MB*w/=pJޗ} ~7z>5٨ A%H̷|g ?79Pnzo_tԍEy;ǨGjouk])~&<&)vmY#f3GI3/ $߮{q0cM%t_Gej;t,d~\7[4#^{vkkߛ+m^EVEI#O9MY6ǯS n{~oR.j4VRGk_Kl[V;&Rgn<"'[Jqo];~ٵSWẐ5ʗ..@}Eݻ'֦Y%Il߹*jnޝ|uOZL^F7'{}~U˜{ ^\揙g|,e'Q{yῈ?5ykh+`cuSϘ$/KO=nz~1]VRtݵw>?yyz5MjQ/|YݷH[ 9}2 8>yRQw]/{n|ij\f._vߧ]6m՞u-,ச4r >B\eiȩ{w u߭o# ֭=S>]m =;O;/m]n,o5dԕ_&uA/^Z-ڜPGgEnfo9dU&O boX-I\C6.ռJ6^4nd/ϟaJ񜹠In[^gK5o߆? O6zG5屏Ǟ#Ѭ]y˵ˍovi ;fko%M7xGvl=tc=޺=ƏW>1&Z ax>4i&M7ITN^exLӧBnMץ[O I~z[cxijk 5tt r(ͮ#4MQ"<;h19? ѥW9z^yxtڋNןsH渖kSQYnofiYIdify־B6嶺֟w<+;̎m>iܛy8Z7FۻSN)YN5z^EowEj$Wef[w_=v}Z!t:/6i)#_hHv6d]-}#H7&޽k #[,Vle[%d%!Xy.y[ormo>?]N_RO;"B5kyTR8Uem۷7WTj8+[n޺f!iڊ(Vݏ 6Yhdϯ_2߇o7t{gRCU$Uu4f_LaRvO5N;[_:׏l><>Ko]*XƧE[I[wO yhI#<]*m˚ͥ'^qvzGO~ x4 /Ӵn[Ku*|"=kt}ZY6Q?uNݝ+){o/u x{WWCSE v6Jʏuu 68>k#ʲU[]!*1Zt+[ϭ|]⿉Z慴g q=i +-'ȓM':RPyl׳^gUN^Jr?z75(^܍:ꚡՊ̭o F\}b Jrm="wLVI(I5k//#{&v=*NJZm:[*&\jjHg mc"*nrRy)KNek~o~Ī2so=;wS/C/7^Qȏ/jvZ\js7o⺶^L[~DH_峌 6Oz궾zBI~k~~w}GƖ^=z~dzlvjg>x(m䙣_j¤%.Dkn} F{;''I v_0 C\}-ݍ G#iw^t7_}|?VSuj)nm'g:b$R_7zfq cGtE×-qc$TeKк|{7>"ftF]{ XgxơGWơ,چsw*|뙜߾rmnb/?{5gjme nux/hb8L#F}M46=nz;̱M.5eW/9hcEB(wl^~c>uTíGGxڞ/}CgU6.4v63Gm6~w!%d2t?װ_]WxSDmSK֞4WW"]ZM&Ugm<*d"SmOHm&CcKopcm.ȍZҔ[iu!'uSP=ޕ" }ڛr\M]],r<<ִ+u.ݕ񷍬t#u֫;nn F_2o/_?{ >5W~{oo]mԶvuKw$Fk|~߳ӭd3i-WFVo4h+ϥjmI&~yn<7tпfVWӼ'<~g^n׍֎դsL/n*K.oGg}lcQɧ']˱Gu?RyƥYqq466=J$.im#yۑWKHFw~ϟ~Ќ|ϭ94M#P_.o+^V-,}ͷO 4ޟsmNNN4GdlHEKkOtc--7gvLuk)tctz 暚\-AnD[ʹ>__w}}k2Kף"Q嶷#j **ꪾdjw{t鲰-{yyt}1~f}KPWGk-_!oV72›uo)1\)x\@λoݯw+YScRkfu^Yu+h|$d?3*.o7W3I'nZSgKq/OT,J̪ʘ2ٽg9kԓAk$CĪ6q#+}8+siLjSrzѭ;M6:.|Tf۷lyZ{vqMo 24:.m4}/ȿ{nU.G>jݝVn迯gGûd4LAgi**ƓˍVNOmoF1{kw[Mi8;ipo5?_5 ﶿm_37dݵE6iX+Kh2)g.mdoεK۵F[ݣ.;4!ӭcpH;vͻRs׾șS_"LtZ8}z>fםps-juǏqlVK[EY$\SPzn߭zyo.$:ݼH7dm&ATF}VbAh㳴҃6d?xUgy洍7%uoܒ{?cO7 un`#Dc74J~z r}/߿tt_oܿ,_]_3vvƛ?'(ᅮoи7w̽g[qYldn? :q~Zs~y(%}3{7G]FUcy6Ί=͹YcUX?hۖ+˝;V5rH#-V1am˴ۏ=\*^: `\ik Kh!-礩$/B6onj)S*M˭hTƓY6-oSi@­%n&o/J3[5|?)9J#}f2|}3[:2d|m2 dai% +&3}H6(S{馗q T=$/mm\9=V޷E(6'KAYcUcu9G .cn70v{?%pvRk-caʏ~-k⑱Xi \]۹Fݺ5u/Lҳ}יM ;w}^Wh$[ny&|۾x]<TZ~?x],Jߺe5o$[mןZ*{~ekKZIM{u+h϶Ƌ 5yYXÊ%Mw&9K!.n>|žuOT\5J{s;;[9KK-Cyo4~nc]ޱݿ:&~V5o%$J\cKx KUtFSq{<m0% W߻vGޝJTܓkhQcݵ+x7aLjuK|UԼUGk;+,kٲ*G=YH|Xb3h5_}s8Ty.?ϧ|?h+/[u[~dpe~{/lWq=pYD|&u]eeݫgϙ'm_<|?5 ?z;J/|!ZmEmk{hCo{wnQ:nr_Eu'y~? {p̑A'"P/[o^Mwõ_Lm6;ߧs5i#?i/neHV8"[&Ug{7em_ xBRn֏o ĺדk\.˔L/$Bl)QR_v/H/Ts_R7CMHx=2Ƕ,|g¿l!ϵ\rlKa8b皴cF28*AXmiu+z} jI6Ρ55nO>OuPo]i? 8IϽ5'u']?Yi4jGƭdwz|1]~9BG8[}5uʕy~o/&ml pۅx㳵8!k~8lqbk )iPV~_>x=O:|7HiLv°?,ru6k|M9%5zts/Gj"5;M?G6lE#Hp&T2'Re̓ ^#w~ _oS-ծ<<[ .u`UioƱW/?ˏPKWM_DwG׷SJ4Jm_X= C>'wRt|uaE#[i;/t=.VH8< XTM5h_}' ԩ&mo~^w]Ò|#o]oլtAchV_˅ildqp?rO4>|lx^O _U/Q8Idj.ck{%2"Y򍕽;̉ZۥlhxR}WZЯy3PVӼfrMfd'o~贤v]NySwoyr״ kڏ4KO[]$,z{Y^CMj6j׺Nido%WNONT_3өJJ_/[=f/hⲵHbh䁵M%.<˛[y5$>E_/VnWR纎 w~y>)$unO֌Uto\Ν_xjtgbW/\"|_%#=vAuow]{Q_4x[6ĉ{sg^i3-3\A7;GэRGL'7w +ֿ֨΍`\;sU+Z0Q~/]&7^ }WGaARK-yp2'ObҩodržiɵybIn-]hHՌ%7%X8XKrGh.l6# )433y eygkÝq4_[7vo}Kq#Zv^&1~]{25-<:-y| 6"0|6goGNsA%ǿܜmgvkNo /,n@hnah)WdObqĪ T۽9ͭIo|YᏆ%υ7LJᷗQIqvW^]Jf.tMgo$izyJUdޚZ_$NO]]C3uM[xmcX[ȭ Cɭ~lg=&\N:ӭ%| tq;he:ri߮:8ah{WtQ̵ 7ٖlyC\g:2r:VXmxn9u;k$O3FG L[d 2y{+HKKsO'5<5k_zƥ{t5{.Mh[; {.SY) 4-Ғi(;xTm(쵋+Y4S2 m܎gĥ6O˥6wxKJյuO-Zi5ƾdû嵏H6~o&McV:{zײGoz&\9Ky[V6ѭ2n>vgު1\gev]tдF⯇F2m7[+\Mt5,Ѽ.;6Vԥ+Ez܉:k\Ő^V.K$v"y;mA%~duJ%U_9ޝ~}_^8&e7hn[="h|ClbyƟA¬^[~'?55S[Wu_,/xG't𩑖9fI-o!FGؗ;\\M>Ewcb̿?/ր4saZ~]F59|&ۉi="'͝otūi'o^}KMcSe /|. pk&].;Ȍy~Z;ן:qrwe K;++~hOOxzgi5i!ya'I g/qoyXߕ-_SkfZIL,l DKS_"|Cv{$ɮ3H*=[C,?5]3Wmibu71unZFH&x^d4&N=I8=%^}.>94=|iqcR= ĶƯ{[řtv*bB'Mwng[PD#Դ[[E mq}$1 o_d.jmUao3u.g/Z4QzZ,;H=]oaۭm@Ӯt-\iOui qwc4MM|Gih7I<b1Uhٶȧ_vqM=ӳj^|UĚgtL YOHPD[r~J0wW}bv_sѴ[󵾍&Lt7jkg[I6StoW +כOӱ xDM ڭnFoB{^ͫԿi6,,4 A&DeD$p*ʱ۫g]͂V_re;WLG-"Uv}kV^GG Yۿ_gJVw^Z3P8T9篭o%ffE/C !f ΔawETq=hvodjLSuwR--+UzPKwm4fN>nOoDޖ+$W7rII7Flk9i+[BMum?D_mη \*ym"iHU]gɹy;{sW&9+ϊ[kj6p؛or#nAMj9_{1)w|5LcOi]H2*F̎z$VDii}|]@K???WUգܖvgٿr|J}?zDKZM{"[5_k6˯8mĐco$-qS$ kguպHhft rIkK;1Qݕj7.b4_ js%>g}eci<ϟ~D;$S˱ tj|@i{i,jQnbXHzȦKxdM=qM(ѷ>r?>Ohz.$]i+ɮ!i#Y.|ٿ~ϥA:oh齿? ཯ xQ=]dš mu_)4ntcF$HD.8|1ZSݢA0RN'*ŷ35sQgo||<9%+Cy ti$C,m)j>zcQg l g'߾ei1[;u-Ye*_(%gu(ܼyCoVžT.ms&V,?%}[';[vqI?v}ϊ^%5k_&.ɷXwn^FWEojX>7 _M5(e&ߔ\4"~ϳr7k&~>jZ5/ :ι蚆Fe;~o.O,y ɸ=tnj^Q0m=}/ iްZ{OdlDB{~giݞO)5wk/[/SSGG]skA:>.{Y(ly&0,.Wm{3ŭf6irYdfo&WWΞws-|V߿b䓷w;ŭxDt<9YĖ~mPK-Y4oM 1\I#.Η*}}?&)ϑ_s=U|@d=ޟVGe*^E5\f$1K!OOx޸E?ړoݜ_4OM\+x-O[ɬ⺓l5k";I$dwGt?;[R:٧5k[9(fDDwMGsr߮~>Hz#uz%xPL ksi>!աrmiOów域gU* oˡgz}4GS[ߟ upXi,Lpܳ>ę> -$^fǬT(/4~Zc)hCLu [x +o؅Gfv۱7lg˯|ͷ?]Z \:TE-'Fki>_hfO~4p_zhFSZliEXcF%&7lHQdOmYbݕ$yψ|K-?xwWV5mѬ<6t]ѳ'%fDM|ǝ"?mS⎕^xoYWϱ7;&b"M?v$#Dbf?%h?Ʋ𧇴=3Z^h~N̾]۲yv.MG FuZMϯľ]}z桭>}~-jz~a[vdv0;w&jHdToܢ&P+_:iJe}4)Wuzr~?~ *_hѡy514 9Z{O˅᷺kvam M~^w{/a8ԛ54~ ~8omW^!6iq=S/~gLgd3#yj%?1o;VTNJ~']3WEȟhwK:q̲M²l$) }ap]̲M%C6?wp`|7|*);R:wuM*I𗗠 z{ʶwp{\-h|o}gRRI{tf.z/|[2}{kkk vCh5_~ΤltƏ/U|G6͓d8-hiv̡͛{u_^b /wjUjWp]BRƒ[fue^ Jӳo_o{| [Iqo7 .\x{Me_nP/oΟXX];8eQ7gů_>ExH:*ϋwpޤJ2ml#=&)E-5{r:.zg+ӳ{.K4 7mfy}MѤuQA?%羻k)??Nj<#ki:2X^+t,%j.w7/ VSCf'%cx~xsNK 7+X-y"}DuouD)V}]Mխ~ 6i Qyog_e NOov98VX|DYMKm"qM+G}tu;(u KuqzňK Yv$܌{Ξbzח:rks~$ğON񝗈nuSo'f8h.a-,~ie;]CPiω/g5i٣I1#/zfXP4ȟ"}_32IÞ1}ǚn/2=sF\[j}2'D?N*;_8|K$cw\Լ+m{<%wdnhV-wk=ūL̟c/f˓һmMZOr>vSxP iE-a[;A4s.ׅxDG#lzeFN7gR}d.?ѣJ}F1'dαٹ",R\y{[V}7)I5{G*x[Y 4uxZ]?&m%wo^I4|ׁ4GS]_Śy]nRuFO1md[iM4֋eozz,u})uymǝ &k#Fd ^P[;9 z+O&;inD!/#v߷Y$>2ۗU:-+k>o _E_E둬sylk"F,$S$on"zNO%Ii}]Z:5&_?#'tO❟4'p^Eas8DqԧuK[&eOI_=Z}7IROzK=jHII7uqڼ:;J;gf4J6/9HKϰFSgގ9c/s]5;MoşWOҮ<.٪B1nQi p ^͑m<W<k/xG0xSA/+y\F 2ad;IMgoSE>B7U~W'׌?EK;moQKXffKmOy>uIPI|δgxk /u__֮BBlڻvuwgW^|?l-??ש/os4RGw꒶J>\37u&_;+lne_[np?sPset#x_O΀*s[ ۗo{(ϺxW؛lklR$wN(3Mo(x=ւ 4ȅI-Iw>]o֐۷h L&RWTc߅j6'?fKhHTK4عk:bOI6o//f_=Q&殛}|OѼ,ۛsG| jsT؈b۲J3MF_[mhk;1nT6*9mtzGqs?)Īk#};bTX1m]^Y/4nQɺE=Lm7@Yv+mV?{7}'$Sg%bKrnZf^Uv6|٭ NoF|530K)-Gʫ;2}֗"gO!Mn=?O4%ڞ?($P>/O'+M?[4eY7g[c9Fܳ6W)jRriHhQێ3»`07({[[TPon?/wUFčW ϚWig$~`rrBHOz _[x%;ʌ?ғ[^mDNg/̸t4l%hlR淕ʾ$X[MEg!O"Iuo"owa1<1;jU^wXֺ7:f&dtR\Go g}^DNۿfJg N nm>j;um!fIqp ?܏Ms$Eױi5}sǡ~ n֞4MwiK4M Vc/\$#΍4 2@χcּU8Oa՟ľ0G~_ԌiɫZNEhZݟ>g; ӮƗ>kSRF )tGt[6 ]J]rԛmo/V |%t>kx_P;cϵFƱC&UK ]_X%r"6U_-?zU5nU~{?v'OugZW$Z`ViLtj-N}UVk6xY&wG&˄}N-[${m1cm|>Z%/#oǿRisK ׵&/1`DFXv4}/35(Ki}ߦ+N}|Y?촂R%]IRHZ[.c_ uκu}}d^r^k|Qj O_M$XFtn$;7G;un*tе/;]h{d~(]o|C^X;+$~{\kЦF+Þܹc_[_G|k}(Xk^!xn-ZJEĉޱ\[ǜI?x~}Wk K{f0u:ޝ vRHܮ9/|ƅVߔW5Ǘ.6QN|˒ _xz>Q [;yfdl7IsIW0U ߻?K}o!𗋖O4۝nFk6y#r#ߝ+x[߿N6Sƍ/xN|OݫͮWt\Zɲd6m#kӕ.Cm~Ǟ|Es_K9˒KVh-լ" yrmGɑ+hUxr| -wÞ9ҼYx5k;_2=7}WUC۾3y{䚽|6;N;z.uz~w9S_qEoCq?z։kmZOmK ֶy'>K9匉r"HZkKZg [ׯU~_3R%5c_}A5_ڝޅ$sZE0,sZ\Cir\&&M/oh4ɬ0VNVnkz|Xm}^Gφ'x xKS˸. YVE亵]Iw43B \H_7Wߝ͝iK>[u>ld|EiZ]hScpȱϷ䅟v͛HB׊ίvx V7zqq,.4.Ktl|Yw|?浥OUo}ȝj۟<} #XG4};\F]Ѽr7frȿga|^ϚIɻkoN.1ҼcM^(N.n'{csM{}+A&co[j+9X[ѵiq5[ 9Oxd}t#H[d߹wIlئ}v`Ͽc_.uM;PF} ,[M=猴%C7?Icm'zR2|𝹿gnysWϣo#+ 3IKo\/- Oj l.Vm'n7W؎BO>jo{v%uŕC/jzG5Uռ]H5 #]kOfMԂGي o}-/[lԎzu߫>>$xcZܒ>٤isjͳgeyJ2ov]·&՟9?^xU+2e?:fhܑβ5. rzr[R14_NMKM5O[z]V? 4m~ K~ݼKrl)<<$IFӌe(-[gQ?h '@4;_xnWޜIVv H}4jVĆϙt˖RO:_/GwԹjZ/!Ӽ:@HPq CwGf̩Tj~^+k]>fWx3R𗇼K}ZG.e׼)ӆn$mirev%F_קϡ6lrc[i^71@vnm\e/ium>?/ǝ-|Na_tuMG,94ʳI}jqHR0̿wھ{0̣_m}yzm{ NTK#մش Gw.TF+;UeuW_H~$_￐^udۖrA(;j_'}]^,Msmuns+-F<Š˿=U`w=}E|6-XՙcfWn$mwwdFOpbqNZֹT(=yǞ^Jus sKХҮ~éX6Zp2cy!smrM3xج#^._cQi_~O=-^xEmZס ߟ}>O3'Z4_mSX:Q!խngyqm$]ck)?W35?}6Fo9k^t[2Z:֑-jҽou"m#m7'4]өuȯoy|]7ԕoߩOٿA|;yiize][hS5֭uOXMM"}'1yN2 ~{4ԹO_7?Di=^uuũ}wHsyuIk{h^mg[yK3mlEg5۷OW~糗y)IuXi?}-ŏ2wזk֫Xg#mõ Ÿ9)9kgtcN 5p]k=ׂg5=J;]f!EY{C7ѷ2B$ޔ%M{{5Kdy#}o?G2_O[ݹXm!evbJCoU1*V~Laް_տ&~Ϟ 5ޗ:<yvfC7G'?bgR{i0(}|^ߡ|+ɨ_\ǥ=/2M;W%UMRRvwݾ_dPVxNJn<5/xcŶڌ@5N i~no'g?C0&PxΥ}t=km{]<]+TԴ^ui{(ʙgB͕#r$1UY~빝,>|b5٬C2C 'ɷ;_-[RܜW꺝E>뵟u_wt=K]`q~z3mYYw&"y$wXי:;i{|z1c9twB[t@=bom I6M#͏JqV׿)BM>x>3p?t 鷂$6zMϧ1>˹8fxSc~LJ<ח{ݚZ]A&zZ-MVFV>IcsB":&յLN/mZ)BPhmx".]Om64ߏ8)o}E j.Ւ9m_X2y#XvnWg+F3OgZ[-Ŭ  #d-OqKRQ̸d6vMZEY=_|"Wnf⛻4ƯK RXF,m_s(Y(4tyR*eenӟδQi#_\YYA}ND, fr_ڵ\i]毫Em-8r,2Sy:jP_g95}ε?$krۛN8mYU.7⺝5MF}RmZ+Z;hjm?o:~n5Ͽm>cEc$p"l;Go 8Cj"pQmk%߮ljfrW+Գ[&OύiK.hM2'f5Vw5dmJH%2O~YѫWugZ.c 1kZY]~}osxu?zkTF_\'kS:_I ս24l;sHUfRӺ_G<{ +MKyuKkXu6oVsIݭaY+ JGcx*]TNff ôdڌ,_[Nm+߭Fi7o_`f-q{ngFO\N$ΈKmvL׉.ܼh?" 79KO'%-,+\u&r3?g_*"ugu^M%);JPtn_ o_W/hB; r~wxOJZ@Z]OUuKwJoXDkFz|2.[i{ƥ5k[eP nS^|r 5ْiզ#Κi\'?ҪX'Im௙X<"#E:NOpʵ̭"4:O_O5߰k6Z= 7|Sn w/̻Gן*6A^=xkF w.onKAr$I-zFC9x4]݌J8;˷֍oZk_]̷,o'~mm_}"d֮빕 ܼ;̭<,_BpzșFork=VH*H%|2# ׭0-吴s]JYj}_7+u{Я~XxuX]ޘb,1E^wo>j~}̗F_sȵk6lz}4+H~mͱaz}ࣺ߾S,>kVX$I751n[onlYx+ė%}^Vݷ3.7t={{LYR-ޝ\ ͌RV\<ٍ6sYjTh:ERA!P(f?2?�`nGf[\Iyyor˕m񌲌\6}ujM_:SfY;+ٕBXR5*Qu [Mu~_Յ|=ku3R-丕/)ݻzj' 7uo[iqAn#7Z,6.wHۗW9Yj}~uwʣw}|}~zmt)fAM6,H7yomۮyUYo{NpK}^ҼvuHBoΓC -'?VS7y&Uga G2i&}q^꺽 z< +q[o7cͽsijөjWmeW]30zReUOޱx4}MДu;|6z%}M#/''6lc:zɿ_[,< y+0X5!s[I}ߛ:<*-crfXa~]w'h}s%i]ݶj>gtI>UҶ7||ϛo'&/̩B)?RZNRۚh٦vGnտ_Ni)-u2-Ks{ f1ՑrMg ׯM]F'InneybEV~mߝf~&:}+ڵ R~uŵw3u߾uz^_ WoĞ_xQWs$6Ei o呾sV^ɏֱQzI= wmu~o}ZSϿ__ZH%Rz4C8גuk"e&tH7V~OOw=Nrz"QKydETG|RO1|וYmnc#4_LgO^H]bf홚M>؝ ?=|%= 5 N,>dnf#cxE_3|{̉R-cVon)"M: (c_&5Fﹾ[E2 ehɋ+GΊK_:+7~4j#Ű a/V7t,j%Ϋu)\+Hvٶ2ƍhyZ%E?G~fjo;M.J,nILvPʘm,lۙkT5w{y~:Vz#OK&g_+ɍōV\+mtmMY=4(ۭ2E"[6y#+okKȤuh\uX.$KȢ-ݡxJIdH<ҹ9TNz[Δ]٥|Bԍqi|f"Jɻa5z} _z$ԅJX 7>fWfV]jVKmGD6i,VY~e>zҝ7'[w!7wO/WƉԴkإ_XwYo5Hk4ȎVOotqoƽ K1KXQ %UUXU[ΥHAnu׿-c~_\jV~۹|_3~rcS֛iwOs<#]jkkji?y6)Y-դ27wa+%QzwqJo{~V.CiojA49d!0ofryutk{NʂEfx-6 ;B1n&~FM{lA~ŕΟZ ;.hڼa46$Ej?'r[oIҍ>5I-OI'=ْ8WLKEK$wKgMߔԯO?ЧMF׶/Wǯ?K{ƓQv_EgT,u]M7/dd;4jRZg3nOMŐĈ!y\HxkkOݫt~f%V+@:?s-ɾXܨ#Zj-싃I`e:xc[{dHeهٵ~h}z=?ϩտi=_Z¾ [k &m[:i5,7!Fϵn1׭Ԝu˪Oc/:ҋ3z[ny k &ү`oM>k-Hp>nv]6'^nᇜ巽ImS5R//kW7I]42?$6Z|E׆E+cnn-cdhԿiP}Ɲ湵^})N_z~'> |cow]gVľ%5iΏJowc3o~uv9Q_ZTmݰ\[Zĭ $۝nX^dDO$4-ww*NmݶZ'^'l~Z.|ym7.nZ!i~O2ټѻS|RU#f_>q~~q$s%1iח_l8vdg}_3SDپgȺmxMn73iI4ogLxwd&Xjs֧8(7.>Ϳluj׺%=2_z֫[Ⱥ}"i,u9ZH]>O<-ҸFK^v:|0 5$n-L,~Ǩm[h,|d%o28v:'O;kW#u \߳]3^ ~+ƾ[5ќjqZ^Bۭnf[ wB'c9>:>n i>> ?-ˮxg!#𾞓$}!i}˻}g?%/?3oQxSᇃ4(Ec /A֛ G ,6|ɮ!xSr줽OjFT//yǕk?5+uz\A=ΏYcᨣ_:i̾ srG';ם^6ޯm>T5[Ě&ByV2(n_*8|Ede[7k[m~-;{;[5IF=?S]ɷ}4[ԡm’IG\yV֦qŷ@L9Q'k/^kNX48bͷ-%gw)ܻsxR s?6*hsBe{ѕ"UȅwL*U[=AlCj,6 I .HcX~_6:|dmƜѻ[96Zw !#nZfytܛ8aJG_ui_yN}W}Oyu7O!)"Cvnk/̘۬4-DG}%' r۫7<~?Ou_ׁC>tд75Ruw [Ld2?1>wT忧rJ2q{/;;|=oB4:5/ejd,i$0ȷ G} AǾ!NMiW޿O7h_YjF-lu6r]ưĖ V? _7|=wkn?dS~ j5O،>eƥl0C4mMҦwsZ+ :Tv,A0/Mq4]7DQ#2cz?=&׃5忻K/aMIZ y6igO3̓Y<-a_TcL1 5zv|kfvrowpzkx M}7͎xo}-o4[1xqn:\J([xϗ?٬5m v~t?5?K,/,cf٭5C6r`[l;_:gO29"F^Eߛ?ᧈ窬~# L׵ˋxQ5{H5 c[jW_eid6iq]؊%y>nzRte;_o|U>&|WGм?[ Mnt GFP)XckNYj<~qm"=yj_QWRzkp~ӟiKYմWC/)ִ7uú\hԣi“\~zmQ3->w}Gjh%m{v8[i{. zU.;$l̰o:*S2oXPz75vJ|9_z#f͏}q$53óZ?2Ӆ5ۿ~o)/SM JltmOKFMj߻=Yc_:9gdT㇨?+k_~]ɟ/OSY^-9iFĈd䍝mF(_G?C_w]6gBPO/1#=J<<^ |K[HeʿhavVdΌ\~Y6n%I'|Jûx_^<=-mKo"upbU!mZn6iNvo'`Oo;UK{tG_82 X&7O'c ?] /{K*oӷT}OkkMA$b>EcԐnVEQAɽO>5z>Yo |[JFB ="Wtٜٽ91W*qJWSB0p>EIvO#{Vɫ?j)&an$'rYFݖ:5&C*'9+=¢Sەf'FreV;.Wҳ2VɄ(dTQ.~̥Ԟ -A 2 ?n>ԍ9c# .+)d'Ѳ7)+L?_R]gѯ.C PcpV5v挼}QI{~EFVkԃFyqgZPZHEdfa #lL?#˝%˫9鯙9O|Q7O'4+o5 C"Y5X#fWl%XC[_..wKG|yŚo1& i:]ӕU$Psì?lv{osVW䏐Smu(%1kB{:KxtI'gDky7ch%IYG_}8{|BgG|3:e޸}L'50Z\r/y;:c&mKZ|l֭7ĚM]y4:{3]mY]߹DVL|2(]~|ѬjF7ĉS`4ƘZKd˒khP(ak2~?-踪>> 9O}_3hZյotC^­bKSO:֑i+Bks"+CEu⒅5>+ѳyٮm߄3ٴnm^Qsk5x<ܰڕ s/"G "qQ9MT}=nzؓD|={?*hMxm;o4:mn_]]Ir.$~#n>}qӴf.m^*Uϯvq׀G4h":u CT85 4[}>{Ev?~ΒO24e^S''+c_ ^K h4FZt=RV_/{aGI&}<#+[?0IF~_{>]¿ 5G+}RӼIfSvyktuKw/:u|mnT|VזCf$cYG$tox?|odDrW޿m7wn߭O|#hkz'tttټ,֑HakU}nay?{&66РޓO!iOK1G Ŵ?X#O Ѷse]׾0UoS_X9P_GmUФXf䷾u^~ 25~ktyB9t}o/ǍCJS;cᾹmu Sk&φB%7Csp."|eާ{%ltC 9uzh\:}3Ui|iuug5XEj_/uxGsXQJ=ɸ#VVɕB+vW3+>uoՒ'y|EaHl/JKi|A?Z$?IwxahZi e߱#wʛz~ަO]zoג;~ m2f9;L4*&K7\s;v~#OJ}=_,6msg:cEݡd;x?%ގm1:Wm{;[ϧs>;g#K[& ~'dlBNzqy/{uZa {+mo6t2&&ܒ'=%MW5~{k= o+Ka!k2h[ a<Z&;$~K?S %+/_i={7¾xÓx{F-R(1U7^&y7yp3C;_3OʣRӷ}ΦWߩ'(BHn)Ok+>8FV ~t \ÿoO%i9o.{Yw<&zO|;OIoy]4:j7[wU!gG̎=S*ܼߎ68u'/ =+XxC5/>m { ˆGt6}>|%HʫoNv~aI//WWqXo xF/5J a}II=ٓtuk[Pi~-[Դ  {+čj!y3hM3/'7֞ŧ}ӚRƛ}smUdΓV{c$,w[Gm%ª7P/ɍzMG׹5qG:mď? >#hPqxwW- 1mp5ݼLd}ȔTZ}]hKekݏ%Gjw>G5O:f61KɇPhfo L;~̆TZ{Lg`??h K-cRf4{] 7fu 5Q!MTV+W&& x@K(h5MGNoǶU/?~|yL=]%EKE_6jxSRuKYaZ0m+"ڬ2nI]!txxةm"0]V_SIb_ܥlDaJoJ֓8/giq: RYjaZ};Wny1$XdOIbT#ȡgm{ΗNos uoxǍxĚMoXP6cqB٧ƈ~ڴʝ w2!{?Ϸ~x?t|9׷vr_Yo5ּQy1%Mqk,7?fgnqD\sj׷nnKdkնD[9:-KE]sViuk +fӯ jG29#%._wϿS<^h] _Hki q[.B˺%Dbl^r%ʯۻ?;U*/y:xOLmݾuk鷉Ade[,Xڌ |Dww(Ӌ==Y=s_/Vg~Sǂi"XX^\.ڪ {6%4v"IcՓUۓ_O}{S3*Pj>/ r0OS1Iϩi{0KŶ]+hQ̑#NIJ|ͻ艊kO>>MGVH񍮵5W]GI$Ǜ &y~cDZ +]!Tƍ6| V=cռ5]kXYJ"5hH|馏]&r=έ Dv:7ߧ֞%TJߧNc|_<37x"]wh~bYSI$>\p͵ ?}6=Gg>4Qr\e^6Y5퍅.VUІj SKgysGi5|"yL݇Kwo濮3ڎ^g挟jJ߯Q+4G gSŶ:YEkx:9-nI#|2N>t?i(&zظSm?OٮZ֡oem&lY@nKdL̏|O`s҄b]O.~h6CZnoC $\ZPotDv~ѿbz?קQ|}c\ow+]XWz;Ȟ6o'uy6~$z?'<\ůЌs\[B^DYf~veMsәɦW~_^'}M'Ö 4C^ivVv k4YXmR_i<;zpqnW? _YiŤʹm&oPfic>Lϐ/EkG}|3F>wԡ]6TŦ=r_#,Ime yI*kG<5׼!w+/qmi0č3ͪwi$3HKE(:*roQ_>"Ѽ#<JWt%~ ԷZn3/4;W34.qs͞*^jo߲unDESF_+3Śm<7I%ՍsQfM"̶[jM+|;RFdp4ߒ{][M~{Sޮ~ ~>3)e߄.bo7Oѭxm#f_%. ϕ Gi08(FKYgh} ekGp'(cKeVF&6C *.+5Y9^# vONyw􇃾 ڃYA'f\!/n`U{tmVv:;~Ϸ؋;+y4M_TP6pfYe_1+X[L6G\z۷b?'w_os .Z(HԚ]H2:7GH|R_־v7N7DZ׈5~2+}k↓>.xN#3Y̑~Z5^ۧM>H>7Fu׍w}IǦZ~d2BHuMII Df?}2S>x7Z$_V73kW]Ǔ#X,'|>$) /*QW_P9~w$mN70΁Y,~Z=3Iw>-'Ϲ>kW;.\xi;64WN{i߹fgM.$\ȻZIҴjh]\Ig W-\s\j7;<+HorQu 4–WDo;X#,ys}+\S CX֣O*mگg*ueXշg$֗޻߸eh]<Ь"m2f>zr˳2 s?#9$1M3ߙiBo?唅f m<4f*~oeP鵗xagCM<<\ީr޿ߨ%3mխÐp|AJ,w3n&0ͅc[mށ^?;u)ɟ*Sهғ_E}-er 2'8c9+tT}3K!~uDY%T3SxKK<+MM$7iYH> <.I~廿6;/TWﵺm59ɭ{nOY3ִwzv}WKYi'"Ɖ;̰K yI&]6uA'}τ~"UnToo;Zb-[ ޛ%:?Z1I藞L0YO$2o69fDGA;qvQ쟟WWgIM+=SrƫjO \*<_#CGbjNsm~ϛ/񟋂˪_$Q߱6>7^U'?x^xRگm|ixZ~)~c 6/6i64boK,|>&tq}DVo85eO|-42.c9>Iri^Kė.S cSBOMQgGfI#3}tFZ7SK޿ؕZ|>MComzp[VHtxj-WVGKo|0Xme{ }eWg?W<'m6gݢn6mТMoϕ62Vo5. KKM[>0<7+%4W¶]i'1켏Ig|΍In/'(;I}S{◎~ WZz4籸FXvѻZ̫&WOͪskȹM^ s5/C+Z@qqog-ǎOw}NNw^[ǚ|_]lwlXG"X.u ᵿK7,]G6 _v͆o&uFG]gLonNޛ}ν;ğ~MEe 6-5֕-֠ ´412:;Nc۝^Ӌ]el/AGmOZH,_D[w3Zڔ%ca7|?,Xcg~+neF]!\lkqk[S&y3.crq}c/zWk:Q>]Z­_:zx_jV5;XmdK[;ٻ뷼֭UWvw <Ÿ`FeC|7nvAk׶nmZ-Ueܭd74C )$mksUn+o[>1@h(}'Ɠs5ׅn"iiTY#I&y~dw0sM*[4 ]-Zڟ=XX)Zo46֨^iż6jRΛ߽쥒U=~zcOׯ~N'TtC'OB[yx+UUwkIG\Z#>Μbޭ.]:տ?/>^*Ч<S^Okៈ^Diu{ ;=D|XOh~>lߖaîkI^q/.߫722i'ֿx¾/ѭ.gM6ɓi7uI6|:5NtͫOXNt9s%g|C˿~dhmOO !d=.݆T=>?3>>t&XMuo6[6qf7$ȶw cN\SSw}u m}o>5>9ߏ_|84^o7+/aמJ4S?i:8I3'*){ucj?]|l( iwt]J[$DVKVo%"_:lGy[\;7^7\^r֛z;k?c kpOj5C ?.edH~_>sv};)(ssׇ|B[%+}Eh`Yȸ/{wٳo^9Fd{֧]epx^E[K'6-.am[#l TUohwfu[msž|kRCWӧԬu}7:s4p Z1fyWd:Mz]u|˒qݟ6o<1;xsOc)4"S[fY[j$.C&Ӝm/߿w|a_u Α?Do?[iAk[?K8uX淚g]Cr&^1\ꝯzu}ڗJcjoڇ>#Rl|VՖiX~MJy_+<D/B\ʄgg}:o+Mh7We7M}ƮZN~ ݿ66ݷޛ_3|ih6u0jmjq/N wfyJ֓lMԴپo2}4|;K]Ctkv$_g"I7OC&' wg&DV?}9')Ft熭ia&[۠dxYFY=___'}l%iTkݧ%jDrvyI$ͥ[[]Vo]Y]̯헯8N5|<4&/8 Kǂ yDWee#|'}k1ؙ^G>.JK]ݵ5tv0-6 Ⱥ"3M83mWqMYo[>û e~* x?Q^(~K8oIy#ȯmotIGP]^W{mm}^Oi`n|> x#7|/+;E%a$iifgsxKw?iq85hW7w99%Ӧ޻eFZ&߶މSw> \ɥ^kɨ[`m$?.i D4;<$kRiWKR?ˮ~e~ᤰռhg-o]Ha>V[t.+,_ܮA{vn03kz5U4g㻺U߸Ϊ}E57iot ~?y=|D49-"6-RY{;,o F\X|G*H<:K:FU:?/sUeL_y{{_Xm̶6+ xn^o¾dǚjkJ)k})^-)X^׎km{iتɻ-.v,^Y?ˋⓅZ)A|}ltGUֽ}{T_ ]$$0~X̾[;;0t^<jғmyb/%5^گ]<#>- 5gV]&K{=2;˱͟&ޠ's:8*4缻,Y9<+X>^AkZIu5$oc&l!yzyr'Ҋ/{nM5VI(f}k[Mկm~ۨ큊3,>[5n滿frA(f5Oz [X޻lWe:Jz]^ަ^<ɫW^g2~Կxtx]LWi.~%w^蛤z=U);-t&k_jZ}> i~j"XxIek~".ٓ_3G+[{RZun<1{7LJe\߬2.[ ?!\fܒWy9>Uiב䚽ޣ$y}uyś$߻랭֏i [ϯ{=wtrƃlBHn^7sU_u? _,4"U[v9aXVZEQ]lǵRI?7..mզ]7G<@'e$1ym?W28w}wԓOziEk2Kcw |~VhVOn?#?o[m_7t! S]5>oU/mV{ۡ[^!C]=S2,6kg_f~ӼC C!Ni٫kKTX}v~uL5/4o]KG'Wuu4oY$ .2ϩu0䥈\~:çOŬLZ}<ݽ#g=iH"M"t]Moƥff'/)Sԍ6޼z7~K iS$>oK\iZ]󛈊i_^']%yÞGxfUu9,29_>_JRg,ܧ-.k;h/G0ʻWw?וΝ?bۯ̒أuF0ӫ]#?TӒ^o}SSRN60˹$okud&ϾhŽe,2[Kqk-5$mynded)+=+~×mĶ ,pC 嬌UU>_(=9=Mjz6!mGP̬.pcnNݭ0;w:KM?R%nq~IcKU$%pOȫ/6[7K̠<#ϧ_ҳ^sTu'x{[D$]O0S9kѾ׮Ɗg $I5P8zT,%؞uٙW~9:lgGˉq/:Bõk`o%I$Zv*`ەfGiVgHrlA9y;TL7˷KJɞݻjԓvt Y|d^U?4~fdyfF ú.PL g"2e4Y΢Old[PxYGq֓OA 4Zֹa[wVO3>{iKoJ׺ej~fX峲㷶{῅[~]4m]\72 {-Nխ^[!ar受6~کkϯޛ|u[G3,+m?ɻOR} c_% I`3/ͱ~jeEvo|zd:#e}|ђCQ-l Wz\%Vي/ˉM _:ot(xVZĝ?A\aVkCgrOiK)Y?7VUx>9xVF;H-S~#UґVq)o5QˠuĴ*x?\Z ܣw^ZIc {{:Hٯ_:ޫ͞:n/WnuzZf{۠&iSlo? kr? ;O=xc `"V /ʫz5˦}=?tzX_B/޸/s2sk_2i!e>]w忝H/XƄTz۞+I6kOe "6Agkݷ\Rwmeփ~%9RUym_/z5i_O[֢0A_2=735cm Gyۻ, X)9Y[r9;w^&c l yѣI]ʞaE\s3u-^)KY Y|Lj}?_ɚ /P P%\_7tϯfϧ<yz%r][OQ$\";zޢ5l+w'>C[^f\e}_68ծ.7nFv=T[}~j`c4X (6#ךQq^s˳[i[[٘zO1fI)-n_z^j5I@2H3j]sF0O[=;q63fHI;/;.G޺HEo[kǛsN" ŲV /eB[=zᏆh^Go|Nuyu=yE9du^bB>opW)uRmjzVЛEFeE(W_kTog5Tׯtik GN{F?305"K i'Ky8Hݥ=m4Kk ![hetQf'a. Kki _ifvG*,p<֒˦g:|߅"otOQq{>2ʖV;l$w^o'G$^:W+RkዾߨTV}.:u-^O2fkKq%)i< %f϶o]vu_zYV"Ca6S3mKy}4wOx8Ƨt~o =Eݿ-T]gYw y%L vڴ]Z2SwmnO,{~g7{<yeXu;zw}Io3^h/}NM}nTqUAD*1]?^ޓo$/:k)T3eV+o7s4N|٬ew߭sOW¾l)|C]:=͵WueVn]߿:lndoc/U~=ﭴ=J^2ﳷUWZ_o]+]#So Y%֥߱A$k$--j(~̋.z?&6tiW%y=zmZ4aQv Kz5;6x iyyCi4qŒiXfDO.Οˏ\n+j۩Axn`]&5 lHb[K[yK88^i&xWM0Q ҍM4[y$|ݎKB|}~ԮsW.k<+K xck_H\ >ts%ėcƛ!}I[lWqԡѯ~^6=v'epe'Wr\eg}5/pJ[k?m~/փyruW.;+HdQp6&6؎#n龽ZSoi;^3kJu;[:MYV_9S-3+2JuO~ }LjuMusuV6qUYtYgڻz\#KlFI4ox"JVX8G5^/[VGDtP7{{4խ}䯎:j^;7C<_O^<Ė^_$$(6ow\?7#¥j;.뿟^>_[Z_|8|;+asKѪŭM3{Zo>q_2+7Aq/#c҆m;2jȱ̍&|#sMrOgOO𷈦 6{eš7rThKyԻa|)oIͧoZ++Ƒ?1ϊ˹[է_cs$d̏ ʒ#C$qRm}_RZߩi?_ZY=jMXWwۖ"8~ͿoF1Mz=o<y>ehpa0 ZHGh]o[%;{lzY}:崆6uoV?{y5 ZВtopǿǚa\vw$s+MYرj+Hr:c {#fRK%?1r|J!oi|j6mw2 sF&ٓ]~ ӻ?[_;>0=iu㟇zmug| vW{k|jsǶfkѾʿsf^I?8IB|̪'+:>k<{Is*@Mޒ,ZK{_:eỷ :WCxoKmo\u㱖==u(UcEa"Mó0TbKmfZ~ggEWV]?f~6X--F(aE&V+/M]H|x4o'& Fۯd4Afc AcR֓+Ckl{]zIEGc,%z}u)-ri#Ed|mfIQGt,{2\}>}~RM6>gKj6:$l./m蘒(e#d?ַM5pM7g9HE>k- 1bXZO1aVtHQRweVҳL)ԗM~!F^c}=|IY5֡qy[ޔ9nI ph}dwiZoַ^GC.+;mϮe|%5}'Ķq5#[?iotGٵ|ROhw"RuN%:za4,)$ u(a8n^隟o56{YDvz2DUn64/G{>?8i$Rf,tǕ4I2ͷr#'|ɍhW5~/t!{i<[i^}.|As1祜L$(3msY-Xf)I'&~}ϣ>hէwLi_c2}-(at}nozPxIsp=3J>gƛ>B-O嵇K֖kO2Gew߲OF~c\X;yJ i緕%qy~ƺ,>ixSŻMs4.~"|\griK;oo|!#RO]K+h^0ho:Z=QnozA{}~ҷ*jד>д+INlu6D0>ogZ\Zg^4]u< q0omoǞ~"zI,ztKJ]طϷ,O [򠳠Eixɵv6U&X繀*L9_s]๶v2qٷkG}ҬUa~s I< l#s ;J~nw}ɰ:M)X8b·6Uw|{Էep9šjMgjuY-̿254 W_[[47Fvjڑ@wMjpΈ;7Kk+[B.kn,5̿t \໽ d#~U ,\з߻f[̷TkEh6ZOFR_HvZ7+;$~co1|ys ._e$ٍ]͝3@fH\ZbTIV'=jd۳ o'=?W"341M<ȥEtuSȼz46hƖ܊5!;ZyI{/> m]!]'1Nlr|1Fh/ڳZve)43{>mn|9Zu#ϏOvJyk߄T-[йU'9|G9Q>xFgY4tI rR=T_QwvYQ[iVVV5qWj*%;]MIJ/^Džkg IUɠTf0ɺfO,m".<*=mL_~0Dͪe=i&M˹4tʿQ2y؉B<+!um{.WKz8~_I{ulvfcx[)cD&HlJ7^~ֻ׮JQv<+_aᤴ.M@x3˭*gYn;xm㳚O/zBsHHh6ݞ%?u[;O3GiKk4{VKvmn$e_I*[|N,^1/h>2x>MT$sN\/.?7g{?v[%vӨvZ%g Oß jxUMϦj]@Lh9Ɠ̑}H~o IJnoѳSW{_q)<>־-m[JM6K=]ir&YѤ#}IPsKX{[N~. [_Bm#E͂=4u$kЮg-\v'ɰx8? ۷8Wo=9g/nu ퟊s6j5\IkyθW'_0})+ק]{ǿώAZ.xoŶukXsBmZݼ]jZQZ?3ޕ$۳;o^um,xGUXz좃>uM+m=vof6$p7[`~^wplO?ޖZg |1ލ={6j2[¶rC|dLȉǏ|:+og %r>K>] ' :P־&L#[f;Yfo :>ɤoojucEm[sFVv|/;Z^8ӬZ}5'[k,+'7M DwؐvJbeY?_uU^<7?{xm6uMwNM[P k:U4;ݢOd~eQl&-{/.ޏ>)WzBEw|Oc++XmM3WzuޥmwFr%DKd-$·ԝ'u&Եۧu՗h ~1C mռəfhY~Nw_rj)s&}j_ |;TskiYxZơwf,ڮ-?$CHd7=V+v~^+eƙ}K[ڦ:?.$.eɜ7t)UiJַ4|$k#g_77%/tBѭdfky8&*;4eB*V/M=6ۯ}_YIׅ^co Vchvȷ~O]d^LcS-WdhzwWnH5_Vqg퉡j33C2J6͗ggslstZfWm?xoľR XΣ.;>R4I|7xone0<>ߪ\ӿ͛u얞4k]>[_ͬjZq4wZٶpM&S7X6VNW'LH^[O/^4 ZB4?VҠdqv5oiz˖)}Nys4W:c߰]'MܥLd {dƬۿno?xtƒkuy&okeViUdK6;&TGU_ݦ0aNWo_þ%adף[ Mzͭ}K]>E's&dwz¬g{]ngۿ=: g]we- #6ڔsǿvqf}˴IBHk[IG$1/H7,)7kzZ ; k_@A& wo-%yG8eVz?9RzC|vMG^aS8k伱[j67[0>NF_'gNe*G NM~2%6S -FV5 3Iwr3:/̨Ry?՚]KO]-ΧǯZGo5R$1ƪY_ݘy;WV}t_/Cx[K[ԬWRMwV }[$p7Ȼw>{>}^/ǍQa_ 떋ƪڔ Qq%ԉo.;GG4=r:R'e~3Idzuo|7Ҿx#Ğ%t]|7h뚂yGcw{n&{C"C yh3Jku*\oZi~$[Mό8H>{";M2/.~٧w7Sͦ"lF:gW&.Uo>f+r>j^g}O>7C]93]/=uĂ v;# ޞ[Bn8Ca=uu׷/C7e7 EYngug~Vm'RaTdf70ܼ}؊ܽmuog^{[: 3?ŏ4WYOݮvzo]2Cjy<^O!K ^rA%ϸ'[Ѽ⏋+1v,%ɫi,V$n$&xyHpq5(.[~$Fֳ>}1=׍|c/h-K]/Jd;,? $NczuC5(vש>[js='ż?g!UZo7zX.$Ξ6Ow_o2KߴŸ|AxEM߇h{,lY6OOV?1 ,Σ~RMQ_\4rizrݳHXM3B Q7?#־z6s% `#C>jw<7 y_G fR~Xr^v}zYv X3[Y\YMkp RRv{"Ho~ɯݿ+{y< ψa§ d2yC"߹t=wzwh+7nb^/-pi/s3Moc5Սig&Bydɚ33yw ry=-M{ ƨ?"'TYE5t'ɶ>Ҽ3v0[=І9mh m,+3|u*Mm=}_J: MSA޻&m,doڵ -󮯾ohj$I)EkKqT1RĖiv VPGIw&E=!$cޕF]1vh&s>%]F3kzo ’y)_/I86>>xoWdub"$}J}+f᷷#FREw}Z+kfQ~ʅPlv«|XNnO}??R%64? xf]'J;Yuѿ8Zfe|1DD}?J $h]躼^!mB-ZKyeW[cLOSz[dO^t=+W"Y$Y{?9-mw]x"l-WMi|;ox[Ilg[vA gwPȗH&/\ڳh=꿯Q-.]Gs4Ֆ6haHZ5yY$}&#_R|Y?Ք>@~wwz5.tmPʱ&xr?H|zR-ƩoLWt𖓦".y ;G 6\4$7z\--oFZi?'ZjVIω.SRk C4vCmd~_jzwVi: gT<5eakMusQdhXni6$Xd;unrZϻoOҬu ϳ}C4"qt4jWE/+= ٯU_=މV|6oO0AZۯ_.=uVB??i%fץߙauݵõh5\^+\v+"|蛿;u%'Hj?ScuƵ_xCM5{IwgAB oϿ0IkHO]?ȷ/ڃ毧'x5έ'V_Hl~_#,b|CZsrZ|;|jFo Z,~W~"7V]ſ_[v [r$8}?i-*x}ygX/Mb)4ͤy=_~J{o|LN_|A>o RZGd2k"\Ȉvooȯ՝[ME^M}a lb+hz=Y̡|GSd}FQZ=}z8? Ҽ=Euw &E|yaѕ5_%=}6=k/V{R$%tq$s^OLS]-ΓDT]" z׏-a_mO;vL}rucg]+vij̑~NNﻧ?g}>r!d.6~ݑTr[F-J'OH9ԥ->c9pv`z#|_Ү[w&C r@ͽXnY?W%uu-AN-0 ̷]c]~v]߼O\Meǯ<@5H~$MfW;Y Hc03ͱ>ml`?&+I$>D&ŷn,7m4 ڝ-+ox=\|˻'mCTIo/鍣Eٰh*)[sH3ne}z_$L<ڔu>}@ļL|loϫ|3umP7a?k蚅]iնoyGyM]7<3iwigV<|,2H"û v1'DݯOS⧆'/jkWRBmv]uaz.,.;v%7od_ 4wִxCKu㶚LG#Lu$nrl3K^\j-Z߾k9#NQg:?j1|+Av֒Y5n419#u]&mq$gș}J!GߵgF5u~6/xp^EHm|ifI<_yoDO=N޺}Fӷr1 >-"MKa&Ffxs#s5N^m~9OnW/>#Ӿ|=>H0@ٹd_5̒B"?&?\W{ 4|;5+in,>šxVhHI7u:~tRJG3OM14Eǣx+H|?֡ئӥMm%m崎#L~\X&%h`|k S=_3hn?Ь#eixh5Zd0!_[Nk/<1 ^|oXFI_4k$(OwTԔ4U{=~O߄uM]rW8ٽ[k 1Il70{7MlKk=ߟϾGw1x~]O1[hQ!Ѵ1G\>o}K|^ (-֘"2GUcV}ϙ&zvGCsLWIЦ-7ěm 2nWP'.cRi[L[?~0H4k#ufy/LIg~—6Ǻ?}tTM=/OԖ~Uɩxᶷx7_+&4$ [-Ŝotٱ:4jk;o_B=~}Ol^'mZ\ObF&YWky7?#_29Y/r4Ri?>x3Pj:NYaoYVf[y{}$0{>t~=Zwj{=~}NY+iuoqcY532Gz.̨~Oz鯈s^GmJ_[LMQ'>fH[j]P_;YFC}}`HM2&Mڷ\GLm9)s9/뵺qKg~$~nK SAVeptHO yH[̿~.c'+Rn;]6F5RC;Kq±xHe=P8ٕmLU)&9ť;{u[~0Rr{zA|(iɧh?đ%αvc.m$fM\DH y-?{!ʟE}7yVRE/<7ŦxWt:D//=6x-o-V#D7"}#\ƩrrZᄎ[˱RK>>x_W|5y/x%wP>ef43${w$|9Eko0n)\l^s$4hk՚?=C^LxO'_ƞ64jKF9x..\Kڽ?o4RtK4FR#,$!¤c?5ۺS绶? o ž·k}mXt 8cY>ky|atM$q#P¥*sAwziO٭]ռ?Oyw [C%Ƒc2}p\\^eO+=uTݯ\s.}uO/ۣkbfq ̭.չ+(u--G8~/zoOچXg^\i6 No47s]+2wwϓFDη[7{Fu.{Oo6Om;%:ׅ-kKqi0 2Cs=7.#72EXsף߳ 7O͵ym'xu6/ Ėq4ml\,f'u m-??Z2>kiXèi 2,ȯy>.򎗵=N>J6z-ڌռ)|I C"]htD氅k%/muC/zu 3_WÚd'm7KZ3}43\~2ON|[OEQNW"x~.jп_\cu+Fͷvo/빿*]j Rwsi^[XNs[푭af~&teo6uʼ*EEk9JW߭o}GWj?GQSK{O [KO/i>m>;iDV̹-syW}:s^F|QMKh:ѕ5_YYG][_77~I7!Z^H孭{v1p_^* ^cOMsh[F+ J׌&j{u=tc܋c'gHW=:BQt^IN~#){ak:\^{o2 UnMa#]Z{7ONwӫ<}'?teMZŲ+Eu6YqoD}4xx$aSݎG~Д}_DHxEuk”mu%]Nu??="+/19 W{VW_Mȑ|H 00%Įǿh2}3džkcIu_CX瀵5-Bŵu8vO޴Luqexry͕`4hƽT[[۱3B;G-/>[+L><0ܬG.o#/TdbWqlD"{HWs`j)s%˹vzׅ'Yum>v0ƫj2y>l~L'QE(8_NZZ>{F[㻳ͪʹ~`s#/̬;lm٥ﭕŻ%f隬Mm.#wLwٿ=S2Β-? cU$0i%r!e]fCVo[_SЄ]_QR/Z.-?ᆇ;PIԑۋ%Ś̿cb4fIt:Ulɽ]wcOߧE~±S}JKXJ$%mhV>_R4F/mgf.7.7Sd2꺘912e]Ͳ=f35EKk2EY~WwKien.LQifns|Wqyo|+o_50x%﫶;_0gjN[ZI 2{+v*U6v~y&_2D;+qWO%맛~O>cP=G^:Ή5][aioh|tF?1z1&KUM{kspev~{Ŀ)_htɠO'e4Y 2 7Bo">9,q2w-lkmguΜm o߱>:"_߉_4 5 X61e#Kз_o"=wF;o{m(;o+Rje :}cPtpUoi{׀~ >.|B.<. ծ3`j5?:ݕtfT]{7Eܗ6Wl\{Q>R]SXu~ѺihDCmsmi,jPxexOaJN5[N6W?Y>Ϟ|DMv};w:ϥG [٭nFr[y>[o?SW7&^?%N.1e}}G|e^E)AO\mgC-ʺLynYmeHf5tӍBu_=zZ9v߮}?ZդC{f,Ԯu>(>a_'Id婘O;֝+t&" ;zyͅށ㫍+SoaEtׁmF~!S˸7ܢnĉ8_;>3WFGQ{mNSӬR} cHjY#n}>s|̮\F2u~9wҖ;k5l/m,VS pѷ4ѶƑRmv߼5sE΄~Oi86k LUd.fibsՓ-[6[[BsxgH׼E,Cfy$qڬ:o![]ux㝅5ATPViiG4\5Ҽ2'2/]ojU8|nϠZ{]I27|.ۡkl;\%JB7cDw(hrTRw_7> ][XΩ_Af(fPɚ]c[\*#GjT׷vi.>α5Ɵu^0c:q |K#>:s*r}?_䶗_ /ntQԭgq*Ƴ16#}gz3kz3ή~-SmB{Yl~ӻ8aepܿߪ2bwuiA{,IE<ҴTV߯pŎMw1 +ȡb;t~qzu|΂ +4!Bw}OifrGu㑇-HjchxkFZowl[*M;_=ٗi^)_No/rθ;yV??8-. Rz8c6mf{ݮfHlm2[}i&w"E5ݽIӦief?tWoor\ݜ OOڽw:uZ$6X)YtFOGߺ9W㽽| Y/G GPFO۹a|?Q>E?ץK.Z|x}?8^31q}oӫAa,1O~L/߭!I?_ϩ믮EcG[!UE |>]Փnye҄V+9dj[rƪ3q^+NN8[W}8qVW8~)|[OjO|?kr%j?CjZ8#:nW9ONSO Ԛ*7k~zen%{]&}QυZ'<;mIkKu"ݠ[#CΑk9^cțT&v7ӫ>_խ|9i–K^_d=~eڪ/^{7gd(FE6fRM|u>glˏs}WujOu}RZaKc{ކ8Pʿ36O|XmoE*q_՚zƯO i=bWvݳm/#).y=߭ʕ7|G FG{{4O_h_1--:T+뿧}NNgu[sm -Nl/!b2+]aX>f%c~zkJֺv}N^ew;z߿}IuΡsAwizv֙J>YZžm]?W5{|ߠK 믗S[vuKkĆ_heE.U&aw_IVy4zQO论wc lau _7Djz]1j6:LjmM彴eeYWtw7\69BtjK}vϙ|7(mEw\iтG1fqɵUKxI[kyq1uhRe5/]Grq&VfG۶$ {~;S"ºۻ$6Z1H2=[pڭh[3~~[hL D+,̻sϫcc*迯snF_пÍr xy#EH#HYپU}{:]e]2Yn9==_~Y:&miY˗u+ W+Xx@4;fDmV+Z*R2o'A rv¬fڻm?vwȉɫ[䷚ڤ7kd&b{nݵ0޾24]Ngu,OWh4Df606ݑګr_si7l83 /aʮʿ7;S嬹SkteKy#v8єvݹDTw/ϮnߦuXEk\Ivi_s6ιvskgn[.~kw{tbhzqњ2/ʭ ?zs^ޞӯGWmr׺kZh`eW-w7s>]c_T}K~R}.}&pTeOoIGLx'Bcg^)_׾~>EZוz}s~ =kjżڿwL2ص9Q?ي'?/hCH 0)jޟ`Unnw_qgx.fC{EŪq'\^GlM߻F;8ISe~ V.Qc+~?^S\;gudQ|ͭ *Km d˄tOWRP?^.fIoEyic/Fj߻KԮYuI|ѭn#~@?zg_u5RJ^Z_RM}纨 >mVO(sJ[ۮlC$H*wo5ov}|݆w_zi]۹g15ɭo ^]f[3*6]xzԨ6#t*q^hڌcU!X}?q:8uF*ɵg)+"0wy쪭jFRwKfm!4ڶTH~̻m_RWثjv᧵3}R7~_?ȈRl,1ngbiKr*>ϛe(ֿ[~$k2Wy!ȴRoeTeI~#s]%>#6f[|=2,o#/w7[Igle}QNn:}khVwܵfӯn)/"_MAhLZƮkUoI>{f?GI/NwOS\Kɧ.[|2[l+ʪ[,\~4{õ`$D RI\6VKT^߆޿M;/I 4zr欝Y_ĝvH Y dn̑}P:o_ :@=\'Mv]3֧]\T_MV\hVq4V6q\Usw~ZMjESo5).?'?{j_\ЛNwv12QӗY[mY;=,coD}g>JFsM^:[R&] 15QUg.FyfU~rzmqaFCe}YpkeM"UZݜhm]uWoGՖhb{`Qef,jɴ~0N|xj3V[缐i677O=?8.~yRM}25}N5j" 0IҴYk_6$7BMRz/Z_O?C/gեKWmJ7m2V宪jֻHܿ_?l&Xdv$O$z>M||Otn4B?'4'Vm ?E6]: :Ϥi_k6N&ܰem1Hv|;NSnOU~}i=N4mZ];I/VPAKZ#op2d,Ɵ#Oov^Ku`\~lpҢ(Wy^764Z7K[diZE, n7)Ug]MP}_yiY{7A"J"ʽpn}ֹӳS_C]>ַ2.Oᣆggwʼ>[H7"fO-gͬkׯgBJzӳLk/o%^ɨxZe[[8V8fgVaxQ?yI{'G|?-O⯁|}Wvmm x4K9>}ͥB̍5H̿s+I嘾zqׯˡh˝F-{V/ʞ}/RoEVum7+ :$&Ϳ [IY0cy-/D-}k/67w\5fVŶʹ춶1&L劔o͖&T_z|?-4h:|z},&c60#MoĬ;re9FNW׭7\TR2j65.oX5Ȓ{#f_ƫZIޞK>ObTe |k=yչ)K~]y 67 #%][G[M,q6oM7PЏ3Y^jy^<]%hw>E Z Ksi> $mkX-DK[j[<6~`;vk#??)6> 3ArtZv'%}ko d% Q#_wEt_21lun?t}i=L!_Mf>b4A,6nH_@wVP%ůȒJG#n]m62T4WǗ>-v;uRKc+g7}GE7ا4%׈DV0cxm[͹V3{gmskcDFy<[X.l+1eEs1+]Gnmngd'I:}{花\v> 5O bǧҽ%Vмv6YX->wzʃw^FsiϹHb@{~~_HF7LYq@c}_of`má kX.1W~ibΉQ=ϊmm$D`c>]v̥cG5-|MwOק8_A5Zn?gtom#Ml/wGGl5u%ko-GuzߵO~ំ:z0կxPͻ>d-$qȫtdUH_hzD15e̻2I'WMs YB}?]O3Ρ66j`h~Ma{{TTe;-w칆Xw╩'Fvcx:Nϭӯ~|;I|/|V.;OQ1C%R[5|bN2nry;;|~WUkukwMj!Ay$P}"Kf5ד2/ɲvo]_T~_g?hgcYz/ú5.yI 5wGbBdgΕ^m˷tbg&U_GmGP]~ GZt[NͺNߒ+~#z飷݆/;__N_<]yg|UOۤ׺͞ jWvQ{yĹ6!**%n}7w3}BGnVSAfŚn.fG5QY<Z)•wld<-mז\t:=GZ$_7tWo/S_O~)_oS?ڴGWgk#nVLɿdmys<#ߟ{U}.vd<~cD帖2I3:ȳ+}+С(h__>㭆M/5_ׂ<}kKnnkwjvmvv6dGحrl;VW48o;?ɥ-Ş(RvL;79Y-||(I+Ό7~Wt_~?jkj}IX.t:{e=!D"J>vi$Νj*Tzw;4ԕKmvӿVgh:ڕ[xC.&3nMS_:&ܢ%Kߛח_^UӍv~ˮisǶPEenOo62A|ōw^hRo}~R޿g,A7˯涟-ύ< 'I˭HmxdQZ&ĚduY#N05Nk{JX~iz-Ư?䶅[tI<wEq>ZCVpmxq~kzMHhe-ƥc5..9<1T]385_(xSc9ou-K54h6;~&RsoHO>?)c|1]<{mCMZmm-aPhaRQy.XO:d|i9+;ro>y->h?Wj->~O5V[=7b6GY QE.we]}=l7̝[_KWN{4.<92f uO&ɍxmMO`)}nOv{ b){sw?Ǻk:H-!fӌP4;wΥo<[rJӏ5t>kVݞv>{\ͬ3m DžXnNv'?][Pk=4H|K˺Vtkmm.lO#4nIoMڊWv:RK^x- n40`݋}6elķ ?-rqHYOf]E'KQ"X\Teg)Fd\ ,zn _纉OTY Рf o:F Iax'dxy 2nY[y?ܡiȌ> m德xnTnO:dyfdȿNsR2{slȓO-4YRdU ӣX ^-V>ѵ[)Xu;[0`d4Z}w!S>Ě<EWI򓺸SNp_[/\-wfem&[8oq1$n4!= >oWv=v*D# }!eZBꈠXLe*j1޹NAUm9??(˚_Kob8$_CylB3,vG'&_5 ңt 7G+Vηwidi&|ho%?>\iƈwW4-[t2 p2Yn߭̋>Dwv]O.TY?9q}#~)I [QA_|ۙ֔'t K~=Zn5;cQ$Iߛq+H+K}|mgYL#8`̅V$Wg$UM5'wk-.-:MQkha4 ]){&ݷx_O4;SA4fմI%.߻Yh|F?s%tt7+hyxJ_#x63魤Şl&enHvp"G~L$xY'&TwoMf{ W:~__jL F v-\_ˣHdM؉NfMct{ 8%_jzW]W:xĺν$w 4Z}7jK&n=TlvTc}^ߙs{pc--ڷʫ4y3nUGQ^?r.vo3mPτ|;lhgy nȒ&tIHqXZG{#<+_jG kEz|&HUXi>HUJKJ6q X𝝆+oZHjwi$Y?|wd{O/ڏM/t\GauYZ:߾ޛ)qJM;y|XyiJߍ.av/k4mƯŸ#GoquT]UqB[}:_}_-u _4˭bk[MA-RoZy~}]^KV'GJMW ;֛Ru? jּ?} +@&6>$k641Uf<UϋnZƬb߯U3| A@mc/m}?M6u]ս͌Fb?r#+VmsԌTm~-迭PoxYa4? j{ItM>y($VMZ췎9#' y3+)Vk QI69~߳'OZF\2gjEMi7yGu;O$r)*)˛>{3Mt|as㿂uoiZ5>gcrJŻIq4#tǾ]y~dGz?^Qۿ_G7=Ak/^o~5HGLû>oS*ɫ%{#RQ^~/Ծxk5 x6i[zym­ 6yɲ?<ӟ7&sA-t >i$NgoxOS.t)k oqVy33aQ<뙼?|CiyMt0?e"Ez/4{3ڜsj%p$~cC4O,$ѿ[iCW{mXs{Zyߏ>8xWR Fw./5\s Ǻdž*KH-#yk4CB峧rn M";D!w-?._S^۷+H1 -;Mw\u3hmcgiC2dx?oSzGkoDdh~fnnZȾ ?>:/1a4 -5;dqy2~[[_e}?|Lq^[YL髈b;H'U䷑ ەÿ|ܟn..::Ҝ}ϝo>%||?EXԵyn6h)Y|3\?fn-_~FMO~> o5K=ve0c%֬]Y4~O|dtGRܦwZz:/MOYIj2Hs*YĞNU۝yr}xo:9_-{Pi*"Fm3S_+y"|ˈaryK#:&'RQ_NSnCznf?gv@vȪ 7˗.WϸJ֝ vQ}MΉno 7O'fēˏg|dixy|3MW_ 6:YCi2uykw4ou*/?e އƞ!\BMG3C3Ȧ8ܲƕ-ɨs˚]nOu/oNCeӵ.I/n#XkvWõ~GIRI>>>3t>k贡m( & [ɨjV>gkn҈dOT>$ge8S2_=C^{v[k^(AF3X~w7[}莟scǿ~b#}Oاg5%׈Gn'{]RI$+O//3ɻYU.yEo߁|{3~1)œQ+uGyWXmjՓ_gZRk_y>|?[uwZk={\kwo'<#6'+i[eg:_vwW*-|MU,$Fo5(ֶ'(%r;F_?SMR~| xJٵ4 ^[]i;aյ(Ugi#y?֢oK&oWi vt:q)WlwP릹Oigt{8[^3_W-eqj~ 75FIGחS9IZihu?6߈< yvZXixG-ncfxwB'#ywc֪U-u^əY x ? ?^bMGQO2H㹼![M6*>U*ԛjϩ)]~$<>hh:dKk&CwrIk#ivC$fHbCҽ{~Nҍҿ[g3^(Eme)沱Լ_;fl+i;{Q+^z-u}^KV6:9]0E-LڦO^[h_zڶ.ѡrj:#?|H|9q"|躥WwV35ۧ;$rC{h<5}:5k1qnD4KMnha|9<ٗwΰ VSMdGx+' cK>"|B֠ciVig=ryq3ST>vkkiXq ꏖfi#hb2=(;w6+='PmKH[Two|жho7Ij9eل[?S/f_eiOQGpniRXD66ݨo@줯߯S|m4#_x?.n8|wO lIpș4'y_7z[i?<5 ᷱ;(&i 7Cp|sd25[Ss5Om>={x^YKەgX$DQdѿȫ$%Qގ/Mso߈l9gI*[J4%l;Mi`IX,~w$?_-Ff;W$ܵW;2Om>ocҼ%FT?k+Z_xVQo3kco4G߱ϳlGv"n^O>?iYY>;NMfkuFW^Q<݉>wi([~hs[#bKZb5c}Vrw}-V~t3#y{ty&S4:=ymoϿ3? G&OgoLacZW!ZҏuK2_gZņO FD B3(e k#/}/ҭHfk˫|{'a5mG#?'ڡ{QfM6VβkUϿsK?ݫw'[=޿y{qp̗ #/ڝ܆ofo i&N23rOmHu(5{5ry:N߼N}~_ɎcћBhP*ܨw6}ϻ&}⨾;[OO*3dlvko3nhGvIlt#ԼCc_~K/%mԯ^2" B}:O?C9Gz|[hQ}"Su?~"4~liҠW]VO(OWk x[7.w.[sYyОT{=@?!?(ZsZ_еK|\Ə$tѭid^l֐m&v.:Prg.[m,|GN͏'[|RJDVh29?q֪t2/zFh#e)>Ux̛_evK9i'O7F'oΪU}_6Lcu[IaSslHPw2JW[JJw!FIߊ= s:E_˻rZ_zշ -j1+Vs|T_IJ[ :jŝ] %p]~VemOhyQRMTtoaSdMa61ycs n˵Y[r6}Δ<ʌ?<;[gӴk/ZͮYHf馓}/λ?wޯpPx2FvGnVkֱ$ιi<)* /~p6YGwMR"B8)ּ˺9{WW@'QkeJke[TѕnLA/ ?jlv+-"q_,wqN` OE]4}VDb;.}5|wcm { 2'dr2Uj<:ރ}u -^7WݺUmʮnIHTei^[{ӿ{+-_/|Gsk? ͠Y._V̚{f]sZ足HrM3]l2BG١U?t-U3\~Zu.W^w"xo;{+Y>q{W3^ hmiޛ24;78*R/Qݮci/bCe .&<)?Z&ӵƋ:n$K;k[YI̻JC2.viN~xӼ'uBkK-u%7wRLa_CG{Ҵu7*mu<þs4g4;?HtgXԖd; -d6:Gn$B~{~ߧ}}]ƚ4 62̱+mk[yA4+"3|݉*%W{Z>|m&CUha%(m3[ij.nQ-Xd̷HQ;#N1ݭ9]_o_Cϋٚ;=Z; YZkZGyiyhZma<|KFQ*_}'%k/ߊ^g|>howz< jút-QOpXm#^Zw?=vM߻ux_Kݮm!c-6M[WU5AMsk~}9ǬzN/QSx_Y㏄b[}J=ku+97א2Cyhʑ~Jӏ$ntGCxc_<1a}64G_zźǨXI-3uMgVwNr措knk~?|_ >$γv_&i$Hin8wO }[eEɯVq}lvkaE?WGheh4d^i6q B-u|mwүۥߗs]Z\FkkyorLcfoΟ_31V' MwVLJjzLj"˺偕b\]Wd3Gf=i1ug5iN-j⎢(.| >%Z;kY!i3pŦ9 Mlp3N{ůE8Z< [|WrȏR{yOo6U%(JV/~*x3H`h;+渷Xldu%U[ɑ$؛DK?K:Sk^kwLjFߑ/:ZzWͩj.8Y-Wlr%K1LcΜ>[e]G71xkMүsSX4x#I]'cUBI~u_í}lyM-kL1c]k-GO~Ys}91ɧuk||?ҦDۣ<<½}])ZҶK_ckn}E߇>u}c4oB;Ou%վu_j~H^|:/%7/u=_A9o7iчOW*W+|OMe:^}K7nz}C9~ؾ5Q<^_^ǩMTx{u}3_)ýbt+rDYI켩uU++=]7O,W;OOԩMe4W&׍폊El#E5C"qs$/pm$*_3xU6-&Y}fFi/|?|k֣XBo־VF.%|'Ӽo6k#MƊI}gMn8[˓m|mȲy'U)Pn^oT*]_ ϡi?ͬGHt[nkKcof&awTgqUr;9?oJwgΑkCs\̳kpek4Ɵ|Rm?x[S]z5ECNxDŽMXzMJ@[*жO-elҸe(;VK&fE"6n8?=&}dȣ$ۗmGO] MiڞXvvKtgH$o7ŒZF}ii/M?ӇtBQ }B[n$SO[{{xdT~8ݛ̉$~ʼnk4Z-cn*SzCkndzq?ίq*G ]j_Ǧw @w[5ܑ,{__ep{m3˯MKU(w_}sOi]f $\+#g]o'=^>Hmwt2ԝۿ_T75c<_<1#LMNSo̕mhfݷ< ?r]aE{IrC} 0|WUM[%xUxs<#fMiqnmJ[w r,;6mwCp.IFQ玪?Ϲb^:4ym]\^$W$4y$ <|3_aѠRTϗYf#5Q-.ݽlCy&:ZAJY'L3?QjSW~K}kQ鮺z?~xķMx?úbymo"?$W h|77)JVֳq{Gv}-iM>NKQ8x+}t-WWuI9!/ia!hc1*ڭW׾Tyce+w</Ox!^V%?-48,Z{,y<=k< 8'C1|'Ÿo)?S}7 4 z'Fdd/eI*FM] E+^0~rz==Os#Rg".tM7B6R+G:q'2]MyqȕC*XY-yq _>M5eP{k~$]M>CFQEto>MFm}2wjVAvyvW.~e_o)neEk_wV)~}m6#W_ ÷)~Kãij3IqCe ,>tm̓2$1lDvNwUӔm/-zhzfį.Ѯl^FZh7WkxmoG^dt~r?fuT5{74=LJ4w>O(|Zߏ+h!mZI rGkgZ\ƶvȟ3M2}ټFcR޴} 2u/'e~%<_VPSQ=Wm~~ԥ+'oǢ~; xgE)%[ZkYlaaQshGיj 駓~nȑK"w׏!j›ش[K,Щ7̿.Q#Ӗ.2]+S {5PAr֍ pߧɴѿF~+o{3/p|#-=^/O X-(i .̒dWWe(fxS|$t:I=};} <ڍ՝vpA}wʢ&dVBͽP:Yo5_x>/{}`^#Vgi߽g_zTpܱMߦc:o# kC9ntI,s&Ɔi<ۈZ4no.!E7~yԒ۷[߈5It6љ>ff4ϵw⺬˦WcgZ4ȁ>WF27ͷm?iZ.X]h˨A8W̽%ǒƊyȅ~w練x6/Boj(qs_@o6vcDߗcיskz,Yl,$QJtӃM^KyvmJw;}?}ii i(ydyhZ)[:dfRv"e__SҶL)'Oԩw= D̒88?{1_mo?BMt6==9j zE̛b>w֐RsZ+w[kIoZ:vkh> ү";sX4W s[y}G3ݥ}u/[Ҳmo.:d~!7WԦAۣ.c[˷$ܿ.Rm?w"V h?uwGY''v~m贏^7iLI"ճ"zOvU19O z? %cυңR=ln#N{ok}䑷y#FuΥ:]?ޛ;—Y$m۷?׭a6tZ[x7XCյlmȱ(^)h707im,h°,ц-X*?_3UI'vom>k{1>in.W!ݡi?ݶ9_??23#Yʤ۩|~O-lX>-\WOxJomyZhol-D5=?˹2WwɨjjJ.ߊ2։k?WZ`@X̒C?涃ZNVkK4IfȬK#.V?v?M6߾oocFC4:NM" HW I\mxn[mPbAK3>۞omU]Y%-R=ҮWqZ_^u +\lb[t|o#? ۯR٤IKM"!?tkfbtZlrW ZəT!Vܧl~`箾h5Vx⏇4YƗay ISaք yV|G&9kc[[ӥMp}!eOpnhD_O]=[/_:Y׈,dͣ[US4i=}jO&7t Qn_3wV_(ӻ/1utz׶"lGnv|<yF$Ԭ㺲 -pvwky_.Vy%%IU]{md}ݾcm/yCPW|:-Z4q7"glPoE3o/Bm-ki;{xHռɚp|y< ҍ)NܹM)8`//"6ԑwM".=vRE;N3K3XmYWNRindH|Iٕ#_3ߏ/}uSwogms̟Z6]Em-q%nI'o~Oܭ'}= Ź7j.^A3O wT?dz7>jK+?>?i^vZo?']ZMld/9 7[텃#F|͛떞>-9-t|5 /}>=8br36Ex[H)TP%{O[7<^>TcoxcJTUa5kU8g4>tl!G3:gƕwy<|Ij:<x[ C:IW\(HHubޯ^޽ztlcIѵ/xCouxK+|Mm mw$(J|5OVO[?~=GLд{kY"SGyf U qn+ |4gD:S P,~ߩG5 47-dd5KK6y'nOjfnsk+ػsC >q?b8~}g^B?璕*u~ǡx^jcԦq׉mML[oICm.{4woɞwZoxmp<^6v:k9>ВI}o ?٭cOm y~i~ W^wޫeq-K춳O o,IΖ9~g߇wR%n_GsX5_~gcީ=K^iг}npyͲ&Wwc'SՎ?Pyymy1qrD~~'6 :%ZxA;U}7Kdg-ږov;&.5Qo-m{Zu ?iGѶp#i;ED[$y8n{t(0}km_9]m8 >ls߷5vw.0_yZIqԞI[7V%pZ3/[oUng/iw4举Tyl?̾b;7S;=?3NWǘ|F~*\k3[x"}7ҖjkY泳wզrm="H"jn;w?ѥ[HMG:|N|}g̗^rBw|c?]M!>O|37|yKk|| 6^}I[;nf;ϳGl5lԗӯr䩪xCG-4MG^O[k{.k9&a[t8ovǶF#Hf3~Ü;׼7N֥}gڿM T[RZcYRgKi?0~d¤Zmmϩ_ Z^!YY]c #:v6HfaD~m߼y䔚} {~_zDi-L쯵BZKKR);-Ւ?.)_%#HvQ=v:U5+kC p(UUT]׮TTu9U q^2E{8]۾V6,E4/+j_yj|@ ֘њTOe8vv,޸R?>"[y3[lR^%5xG X4.u6ۋ[Xᅤy7LL 5 bK(d6 ![s)'޵~P?ߍ|2?!xkRkVUclhaXq}f}G&:˛=jt_:n-}s'_e_ͤC}./u']zHxdܛt_EUT{~:Nv]w:ke0syikWCtki$iU5/٤>c;gQߡ|@m~h0xoLc? I6OekF7o.OozE괺 =gOxŖ|EqyEo.syY6k7J};j WC;t -,~f<ͨbmN;o:Pegg|(-. Zx-NYbIw+]mxZD%Sfe:UrUn;ݯU)9=ty>g ,},jff.5eWk[#$>Eld#M^۫qfOz˻}sc6-s[6D{?IÚ5[n=Zrg#kɗ'~xE&Ѯn6y#IfkVWٳglZkN>)-t8>RO޵O~#GWxzg;ƞ1%ƧbVt}4ƍhH?/\)Q[⢧U_M#}'D|%iچQj6zrEhfܿD>_.?-ҺJI{KuetuӮgk*A~aח^pI#c{_99o3̏bQ67k+?.-b¾W{ֲkr4{y[\󿓺8#iB濫߱"w+&ץ_Um/\-rȱڣIdrD g>WF,N :Rm%ӿ_ĭhvRm$v "2Co4k$rGzTt⬻}NeWo\ 9~OrTk65čMg6xbn="y6Bַ ȶ[4/64Wag.hOmnϩ噼!JTj;.Ug?#\|q|:^3h|#Yh^fy#gyd2Gq'8(QWI[6-6ӽ:ܡ4+>kw嶿ygGI5YO+#jڟ*-}pjj7b[̍liG?Gk s=e}Li8@˲Ō-Ȍ:|}9B^uN1mkڴr["G9L>mOw+9RI~sr߈滂B}+ʟk.~o|ϙQRK[]>cr!SR9iw+F|λ6]F$)swo"hUڬhf&[+9G/>׏F]ٚ xYa;d^۔߯5&ex7Dyu{Tn$&7!B.쭿'l+?|u }k`+y68ߊɦ$ME.B $cc{Z[]} S#FGԭH򸸕P~ټEE}ϽϖeVsn&RYfKWVܒ.o?(K4rnOM爼>5쵷HBn3:h27n>}4luos%UKSɾx}kk 79{W6jwykv 7Y&wپ1=N4.ZUQVi]=EjnNbKu(lgV*͏l_gK1>O24=֗'tz}[mXĺ]#5IΟ'ΑyMIMNu&SMg]t}E]*_Z]$|puy,24~f,Ȱy졢C=2v >:sxMbi4hfU[V混fo=thD/izr)i?/3/Z?y$ږ34jrbV[gӲk{+rLʚV}6{oBGÞtZj7iڪCRf:Z 4%!m:rZW֥Bo 0焴Vm.i4͋[ v[lKu慑?3G4N~}u*k}/ / jڞv4Z 74[L$w\3opْ6/jVM[So4asidd5hmo􅵄GUY7%v>4|V+;fcҵ]72kmɡeT{t؞gc̮3}G٫|+f_#Bn5{NuUl2M5$G}zb_}ocUv;o1jO⿊|Cch#noY[ '~ǫp?'7ϫ< ξ{ˏ x/WSl~hm^eWogyQSQ}_R_iIy<\3|Sm 4w.+k}_חC_MUѵ׹.d^ѭw}H|FhsXs鶿֬l8ЅNL@?S38i$쳳$syowM?~6벳 43^}n{&Hk=f̵Hݙ&˒76&ߙw_yֽ~Mƾ4-=Ro M\bdq9.̙l].6lg %>:oGkRƫ˝[ /tɤ,V6Mx F&>tM*6]WN^ﮧ[ZzNVE=eFl&~ΟnRkfsT7kVSO^}i?] | k뚖6miZXir1u>dN{JrmYÕRI-w`x x{L٥Ho# yY';8fk{'O$+]I#r_;ggְv \A 4}6d'{a>6/X]e<Uo-BݢU<1uƏbo5Ų,EG|̾e9>]@o<ծ}㿍<# 7-=AHwɧگLmG6:C27BtwϯG5do宇+{>V 1e6\F\ ԩn4ol2$0vlTPvwz5j}vG$@֣qvmegwD}JҔ ]~-z/6!Z\zUO6a%ǪYm;nˍ>gÕB{Zyw<F_Cx_F|-eɫ7wαmݎ2ōyroH_sG%;i:W-]%M|UEhM ƺx%G y!;Wdwy!V6lT?w2J2}|F<7u^[}^M[V6h\krGM \KpYC˭ʟTaȕ{|;|ojZƩi:&řVfYi6B,mHvcOEW1T׿NП |cvz`񘺒\ZqqM ^L<3Hg3<3pǽStv:y>5o_1Fd#kyoWvǨ >ѓVxPq>KH۷s2׸"$^s ; ~7 $0lMi/>x6ݎS]jR ERklqE_VLDT7:]=KepnY~h_?µ#eebϥhv)Q`\1`ʛ|o1w+$3mWl<ԶmiGw86Y'tuZe.ߊ3t}^^~_tr|[_^\Iͼ$-hv6<#_5K kX%͵Mq4w ȱۥĊ4#fˈDDwFnY.W~cu*qDc_/&HftؐYG؝K &[ӓZwNQ~1|pMW𾯠jڭ嵭޽.>ۦidL6({t~|N̥ }'f,:tG#qiBtr*} Vy?{d/xVn;tt6{!kk?/nJfiͤGY۪nRL+lr|߻ĕQ k/ ]MyivVV6?1Vo:DUo_h O/eE_txZCYˢiq)xu"mmf4g:q}?˕e}Bhz1-iD4Clm7:}?~f8^f߂Ʊa{'/7$U>ڴ:aEM>?}5zjO^xW4حmt-4M0Yyfw+=oI'6S~n6(Ϣ<+|4 f?x"U|>u[[Lɹ Y~۫9%RRwD[h>!CWx ~ŧnU5 ,o" ڲ|ӕiݿ:#$o>In~ 7:] KcjzkCn3Ymok2G$s"y<7LoS99=t/[ΎO:;1ǚm\~wwѧV}o(Izxi_sNJе}FTJGk}M٣V[G"4lD5\=Hv{tL+=/Y4ͯxt|? WةoVYm]Btw>ɶfwp{y#d¥226cmܯ`ӻ`jYK#Xp~+nWn7+? &Z}PlRyekp@hU#0~}>>_+ 4o,[Ȩ!O(2vr%ԂiWVyufݝ檜m^`9bH4lr?ӭ@7VkyW ޹`&Mg/w+uBY>U^z4Wͨ«UyW}UOz)Mtw7%KE#MB7(mN0ɟ~=8yʭmddqo؛&[w)Gt|6Ʊ\Iֵ5&dY#ˎa+3G5}{gﬣ)+ޛ~tM|zhgl4.ݣ@5 Ь?$/MZ}+~e6RpJ~SX.amX-beu,v,ܑkn^ 56uyCI|NU݆_>~kekIӵ9LW:5dۿfOJ@X0ZBٻ[ṃV'kcs* EN֝W1nF9~o~:,$ҭ.-CWse@0kw,OLrַ,W v~:u"$G4ѹY-Ysߘ\]QqpvlomKXY+KqߙtUf&6AY?˻u5=e%O$ݕSn]R{]^xRTWWm 1/3cv|.?}?țQ@h$Q&̊.ſҀ,J^-n %Yv{ߠkT~xW>whzƍpK9Lw\?kN-[2e~-_cxXIEKp-{0ٶ?-6oԪJMצz~{914-LJxu|4g¿kztܫ$WMqqqFd#ˆϑtT)F?ֺjp9J;uu ~(Kc6o? ş|a7C$F+$/ ?K$ox̲*Tc?uo>nY;_N<# ~[i/D$CrsjA:ٞHhճ ȏ$D򘼧NUiǤOIZ 7ϋ.ݴq5CqG N4wI'|D*Ϫk|˛R]In?zZ.so:[jm3I5Ž{dXdB7ozt^r)]m~?:uoiz؇Sh/ H,;mВLдqoM:W5:nW?_~ԩm,GO_~&5>Q}oUDf#=3C .lB|y'gt2u[~?t./j#_uM2sa6Hy5i/'b49Wmck?Nᯍ\x#!An-n iY͚SəݤK_:K_Ko3Rt9xGw-c̓+i8T2O+m?3t]k~W>2j.Z]0Yay;my.?$/&gߵ~~mZq7df4%g4]dq׳IUiI|k۩ee~_>CN4riicy$6l[[[\*XM ڽK&i.~vN.wVu_| e+Č"[:ee 8ԛS˙%UOF7kfsZ0ͥЦsKY72A16WCךӖi7Dmo WZnq5Am_2rUTv~Ort?d67ty'ԴinLSCr>c*q ;>?D(%&Kڮ3MhQ%Im>پw*sSr}t]98cV sQ}YTM^[vM #C}RG&3RtU_7roW=/OٟC|(4_ y,M)+u|_<&8DV~%{˧cm;?!y;` jԲ–?`[lw3ZΊOqrIrܩA?x^Ǘ~Tf[F%u%awЦdVEo,&V~ʗ(}zu9nx~[5x+S+]vK rȳ[ֲ" cj+>[*m7xk[𦻨Tnj/eҵ J;;SVӼ-亷^EWfo: $}w2o=ÿ%qBg%.+-k|RG4k7ȗ)F_5<Ы)Ǖjޟr:.{y?/^o{y[+OP_Hyr=r7lꮏ͟7R5m~Z85CgËo'R:[yg6^׾^SZ'Kxu+?W6񴐬I ͵hS+wuQXz[_릧*鷯V;_xC_4hx;mėq$jI mM#HM4U2i̧n_JN2N_~>NX.<+[veWWzLż$_13&"Ny{{˶}ݼ qI7 _S20ZJ]_T?9k.LθeVE}Scy~l?$41?R涛πG_xcD_+{6Y| y6G#(:$ޱfߟ]?_SHJGgaxJ}'nt]>I$6_ILڴ,gqJ>w<5 mǑ8VqëǑkw]^,_k6:۟ kZk6iאΨ܉?$o00*4 s%t~ʜ⢚icMG־u-{H>kZ>='Morך\ ơue)qe҇_W|Ыʒ] M<#Ny/58l%ڡ-%sI%'Ȉ!?1pҚunﵷғݗ5K@ֵXl/<9qehQӮ/٦O壧7Hv)~ Uտ:kf}[ZտNѤojkBnsG22 gR-+2na$AKMCN{ˍ2 msm&<~U۽v̛7O޻`|_umBR"-ͤdh99#G؊={^\Bߎ[[u) ]i$ׅ<+ " {;|0'OUXQיOv\-i7]"*d}7h󏉾-|HZi {tfHkT;Io\xLUIwU8b] mwg5g VNtA^h `60gr\jzCoqCg M$3maDww2bkFP߯ٗD|fi/e4ގzm߳/P[[;K5o$ja2|ٞn}+m4gFZ^'fJz~# ÜJUҧn޽9~t4:-mͬ?&k"} &/?FBr9mשӇ"l}6lwxS%ֱtQji1ݱWB>wgc\l}vGGM+rw>?|>:z^IOh:L1s};{yhݕcy6W3z9qO[W?}*PMrtcşmtKmuM.M'FK/.K->ᦆ9iKeroW8^k%N֧V4՗95:dWo ϸ |_6Fl3޻OQ~Ƨ$p &f!ݽwϏv.Ue]"R0W3VMl7n{:42Y_{/Iqv%?0WEVaRTv0u$:=7j-u-]#K?jo--fY{I_ET-W|npUcY/ZyMۦC<__J$׾_8k7}}O^(Wl TaihXo5]~8޹{(8ՒVO]i>["zuU5Y=[ 6@u)(UU6KH˳?W>'NPKK[L_~3QХ/EwzϮ-^;vܷ 1ɱ7_3﯏̳Z\{X'g^_3pX-Uk_~x~Vdž|O\_xğ/,a并e 5Y7<>׆*ȮӮ{.\=Mb'(ӌ}nkMʣk^&ޥ]gZ;,[i bI >r3,̪2M#z;NTk8Þx;Oвb@$\0/IFw.)Ŷ|kYݽN^$_&'MK]K$kP+}gϬ_>kw/#(9#ߏL{M5;%~2XJ߽f-4nI7I^ Kkk WSܦC;m|y&ݼyd$$ j[[i$jT޻~7FrR^yaM7u**?*ڝ+~?ַ2p建#$Tsk:mcEV$D6EVߏ֩B;#%驕֖^ցV_'}AkٶK7Jo/S^jX]V 4A|?/oDG?圥CX+ݵz[m?U]R}0feFx}︉G2#uNg!묮--܍V-?wv\]?g|?soj^'l$;{i/cifh}MG#Fmi锪ii:v=esnK)$wݼG4n~_v RN̪UOMG±q XAY5;g6UO,_0t-?ڥs}}#uwz]|׵_c>(F9lKoZȲ7$n wdhï^i]=Vxvh(ԭ.2q$%dv?Mod/m,o5ؿ]}ԧ/c:rOZ{υ47ƶo?hC$%C1Ց{x"M60b#kUvB"x;^?pK~: xLEdWuR5i^iF-Sy~M~*xM{[*M_R[7zՓ_Zoo<w'br#TVV{~u0koDz|s uPwg@xZIpd[ƍ"2}=xJv|JwW7o 4=+T".#I 3[p8kdI̊XZ;hQ;~=4zaouhOOa̷lkΪwDr<.Po}=(饧߾n>a7Ú~xv=STN.~-RTLJ]/٪C[>sEBڷtru{)o Sty&+^}ק2]8/~|/_W_ؼk6Mkw ;vGlO+|&%VW_ӶuR}>/T: ud3jw»L|ÿzl5(7o_MS͵ 6\r-|Ķ,e7nm?:R~ݜw1a-4\ifof:gmSUۿz@ml%$/6Zҝ۹I%x^#3u1$rҵIoK|聯$y.w/#31D2Am?qfIX_?=Q:Q"a\M7\]Y9찺D;k{ܖ\M!*mI%p[+f_,{ #<%2q}tyl^ۭ^MMCNUuol<蔋]M'l?swM~ѧ﫿7[aV3 k~xi~%\z-RE&ݳfs׹jsn5u_Sϫ5N./m @L> %0xwJioʯ2^ s|~kaB{Yuoӥ99]^v}M "ZZ\^Zw5ձ-gBu[,-:f\PC'bvWUf۷榕d}{]gor~YojZF̒6r>]lsQ4OE}m.d(0C/̪ۿ__S^;%y7篗M(Y~g'x8[$_\>ӿm !ѵiR$Z.[9.-;oD *fMv-Z6'$8Qqyp~̐ndyo?>{/̞}'!۸mKw\㕜jOGy+Yz~e7Ϗ.X4J3F4I})ag⻗n4g4~\Gs- 2lefɝmqʽދꙤ]os/2[KxQWA M?ۘ LVxăo3.ּJ#Hg9_]Ö<+=*,d15(Wh ]Acc(\'ʂ$Xo\ZkJGoF9U^J}j w/Q)2>X da[FbUmZ-V߼#4wt֊{_OC9t-jvhɸ$Wgk}NP??#7Ĺ<,*Ӧ ,w.3Ч^w~QuxdK0HG~]W"3úa6d%H.ǐ&wnU'~zg7$AY,Aa v0$1,wnnם$߫kvr׆cKKkmMԖDxo"s 2'>rH$GD¥Eǧ{IҮ.5k{k!˔,{Wf}ꭶI7|>sNM''}z[{C{Z&dbu -<_z|ߕ8]AւCrHBe%>n_w.6K[x|0|D M7Nf}tm^hɩ_hKkS鶗D6^ߢm$2^Q}vCj*߆S |BqVyK9׳u%FRi$dIٽ??0E=?ӽs{GgwIup}FEmo"fĿ Imbڵor-4D=ŽV9ݶ7wwISOgוuu:km.M'+巽kXwye_*ܢ;G#w.F}$޺ o-uҤ<=q0 _Y<,7ɚ3ّ6l}gԦ[[y_ęJ󸺾uej]e#2\ͺid|c}~{w4sgIGW"Kޯvxf,00ˢC j^P;FsQ-I&wSFK +vpy."O﻾qS}|@騽͏4K tۙ}RLt2idfOMUwB$߿]kWԵOވm<>V2qew/DYi9wmtGTzB|3Uk3l-dveoc%?j5%ë%wXCȜ$4-"l?(iS:u*rY4=bR4J[xDgjɶr}]dIFwo88;7 Pxcv(Dgqǿ߬\Q>?/"j/~(h[ oGYdlܸ*k^߈r5/9jw|̭:_,2cG6ܜt{;w.l-db7EXCAF>+5gT_;[3bdg/'9{tf2m-YY7ΝM<m-=>CZ (ZBЬjW~J]#myEK}MoɆclk*FmC|뵾o|ͷ4S#Ryv0)?+}R4/iڬjmwVOm3DraFHfDoG?/[_ܝb0/tq-䚍寗=rۤi$;g.c54=w{xo5MvZ>OkZŕ]܊_rqޛ֑Wcy~?x^nox{R;?X}hm˒6i;_y1ΜJоkm:e(߻>KSt4Q\%ѼK*I|M5Eۿ^?C=uC͗lHٙyv3|ۇʭ}Ʈ1sY;/?3UI:><ՙ9/>sq,z֪*_?~0}2:J%fnm.}5&*1~]{#\.ʺx>+HͷguX{ڮh{_y!"*yVm0t}$Vn#+Mo]OOx@׃1-3E[Bg\˕fT4UmlGI$ro Ѽo}ߺ:?.f~:QȖ7Ԧ7msw{;uM|^\'W?u]eB2=oZ񧃾_Zcik/-*mCƲw4.91`g?~;#ާ'.FziQeMĚ[L+\im򤗛ix|}$)X2~Ƨ/7]l>=Cƶ~:oEguJ.K[DHQNOofˏFV|3xg"ڧ;+|qV>"6rFz=6o6wDc/BH;sz>tψ4ԯl<3$e4Qj:qúK_Y-m8ypϟaQMlu{׹K;rNsZބ{uQ^'is^¤ԫ/PX[' #}_MD={:YNOzQ~=[wa\*ZAwyd[In& >8cfcv'Mn;~9DZohu̗#Ɵk2MgI48akpI]7mÒ+oUo֥5ܺۿe~f-[5ΗAƅ,zMY#7Ӥ|6th͌vDxa&_{}+{WmSWsTӾ#ZܴCwDY7$Y+.͈?:'?%+z㔖zmefBe_;mS'a6Sp]SYԣkYk{4}:LWj:,~ |>;Xҿ׮->d( lftƓMSv<ʵ]}o}ꟳ_Xɯ<C ehL,Ovy7Kӧ^?3?K-}#v* XXjz$7^vhֺo▱K;+y(1ujN5tb0:8uVm?~/Z6KWZ7Ķ6+qCyug$giVZ>fy[JjzZ^j=[y}' QR)xWll?a^[˒o-cM߻ݵ[3`o_Ϩ3=]#]5dGQO5U0$;~U:L=+QiY[K<]4oG3)jrxEJ?M#hVRp$TcNq۩L5nj15+UxH^eO&{y˕|g}DGNHR\Kt<X~a?;_o*v6-#L.MIkۯ^,j_֨=gBO &JZ*w}ocVQ+߮]o5izMi-L,Fc˦OBMʝz}wxgFL< Y&33Y[Xfd J,٭=mw׻=(V}g߉77JX.L##Y,B515qOdq'k`[7/I[w.&k ]C&חFhx|Ē?+nc}`T~sVbo_;wox~fk[]6KF+}psoopмjL!]gzJs)Jm'~~cq_C3Zg kY/&׋b*aaUT6fK# S(%k[~Qkw6V^~g{gΒ|t`:=w)SqZF_WoOឭd/>#Pf@SX]SZ٥lX^˓Gӊx~ڝg6^z_keM?Feci$Uݻ5)^gw.OS7xNm}>fح?zMٱ&޹gGfD^. 1xW^ a曧C6٣eE&wkgc;zu=-_V-o5-NK 5aV&@}n_?ΕK?O^pp!4 3Qh6/n ,HwD>o.(ɻߧ3şw#Ş!g-tM.yMBRKy>VwI?w^[(6ɔmylz۬Rj^XB ~nHϽ!>V۟5TW_;!TӼEjVe&5ƫiGk'ٮ.]!M~'bK??4*T7tnz_փ5׊x*Y5Tlm +G *ȟ,g:q?7>~gd%̻Uש躯4={IJ g'73Eui+LnEdoRϿsπf֬۷[XPTUh <{6d}r>M޻gG>,v[y$he/":/$ip> ͽo_ߙq-0kik|w=Z%ΜQHjWבٲyѡt_6* _2\-ۿj(fN>ir$v:ݮ%]nǾ~6&oWty{jq}u]SXZ3=6p_ʆKKˣjUq ay-_1Ϙ O_7<->}IӺ<}_xijοjV[XvGqk3ZO#İzr䌾+cRZ|ew^5񿄖W<.7NZo(w$f-aw,<6.9K2.f ^ύ>$A6z^@5g[(z{>[vm6adb'$QR;8ջMWgx'D,>jiwW> k`4\^[pV{W|V#ɒm T*zoGu8g%/uuo\::nkK[*w_34 gyag:G +M|MM4RJno]gvT_?N> ~:go~:ֹctGRZ\hw u6܉ry˓~kЧ4~ǫ{3t}og׹U;#S]k2M6m,3E1Oads2.߹17JMVOzkG{v_s_mmc{]ҴuhtEڤz]"}pO$6<H+\ yE7_[ϖK_8&~~8k'k7T^~ Ne[x_LL;&XϞS,5(8Bu߻'4~Kgzįu |NҼYiڽ[M"f8K"LM;G\oد_,;Ӳ;9o?/#~,xBᯇuZ1nBmcxm9?v)i2sTUN>!-VڮIiq8u"`iV;}-ZK8|]$#l~FJ*KH{|9=Ƥ֑j:/tR{;ߕO|?:O{IyyP̵Gt489Z|{PIo{yu2c#UDyvo&]S;;_}ާ\R5ИuZt:Aj +ki6ΆfnaH}_5IJNߧ幜צmVN_~[o=k2Em-ŌD*}̌|ۿoZRi~ gZZkj6xJwnx̿{,#jUvF wsOnj.󹟴M *ee/J3Cqe.a ˫=>yUݻl;g*"&P4qIlѷ+M䣆Y [}o6<Wk~?u; ŕWAXurL'Ο27MRT}_2T?8/.l6lk*6?1]O|#w϶gmw[/ 0kuƟjEؚF/!7wY\؎d|IhE.K&]lv5ժvE:2WvߥmS>dIAܧV?i6}ohiJO]=:OKԼeT/7wj7+ w _gYf>K?l^]Ӻo6uSsKI#Һ= ȈO:NMi}L}g>5]Y`ԧ,-5.lK2Evk5Fs's1gxiջ챴{h?^szz'mY+=?7S|c4l$.-HEFb3Mm]p۷u}hM?h|3ZGQ|-qh9UZHQ7boo#|??=v7&^CǾ3պN+Vwkׄu֯YꚋZΰLq˳}f9rMTt?$6^NZb,fXavѵF4{(CW}Pfg>_Լ;{uDo9V_Co2dmH~gʒ_t\+rk k>Q<-#S{hӮ< B?{Jox^o.)$f\g+/m[:Z}>|ZK1>.N0@,am{Tmz̲G#.ooIzo?1+ZlNyzhם޽w:e-h~=7{/(-έsi2/$j+o&oZ~i#.޽{u_[\/ĭS7iHm ,G坭,ѧyјn?Sjw>=GQ<)d4ۛF#6id!O?>8;s'oǭ؉IS|]z;Ov|Gl-m Ǻho졛 ?;ynKӧ~[_x #滹}B4ՠ3no5GBoxg:Z7.fwO|U}_CC E#bA96aH~;6ϻ|_z4QፃM;'\CJd '>[_l72}z?ZM7m gToBPrT?;<|:yWmk]<%흝,%R"nVdow;tq2o^1~zmǎt4+J'MB[}>V(5 4lspY::2F<}YW+Wn߈_;zmnMo=בus .m㷛ʙ$VO1yyWlߚ]WuVw+}/Tf;Xf|mr<78te#K'?7Z3Ziw?ػẍ>VFXwñI$҇}T╴۸V^.h,cO6:F ȫ]ymb#aV4mMQw_~>Cv&7wk&m dp;wɾrIvlUƦ%H;Ml%VR_~x6$o wQm[Y7m /.-=wwֆGK7%5[KZX[C;\|_yśp~r)y~jWr|"u>:5U-mI2*wG ߧJMlվ/b-m|]wobrhh6X?:fiط鍊{<&ހ<;_ k%/6{7F&{cXlv٧&-.7S_3b4ߓ^kMM#gVa7/tYh-ZM^Y7_x$/Fh}TMEe~|]Vz6=i#If-$7Qc5un {s85oy;73Hx_Io,ݚ?:85POwܗ{XS~umIU|Su؛ Iwx s< q]G>raFu6=)M/=[.B;EdZ?.>Ϳ_5ƩǩiQ]^} %[I4voZKI^}ԙԍ~}oq׿dpE29MMw6A¢׿_U/mm>ђ}6_ש~z/~xᾩҼUoG=Xc^-ny[m:ͣM|MwVWϭ~ |wx^\Vm/zU[54#I4?ޞw:qjW_3 >![bck둷/.-feUS$+$r1>NfK6]&>b66|U3W:Uށ%k5ΥcH2FĭobnX>Wl9yzXi]zΉ1X.'YgǓ6lέe0E%ulf6>pWkcr#}̷SBק>0tsv LUVѿNrz;tS؀ M wKE駞Cv9GgkdYw|Ztc.Uk/ j];y7n 4{*͹qⓂ~_Ia21w+K;)RIl&Xs6G Vf;Y]?Ûf-e}ҶAc{(S_'џg>ֽz0/mn v~\ۯ1{W9 s]o*MkqɆE˚6?FjQ_ޔ욵E{O;h]@\MgqV2$"LG/ߓa^)on-mm<-?uIkIa̷!Dy|GMˑo__ϴ>~ƃci}j~'x⮃?H:ec󼙦/Ǿ-~#x^i>|A[SCZV>ZA7;WyN҃nyNH+}{^:Wuυ-ԼeW[GyܐA{l۞Kxaw'W OAӜ!fӥrsI_W_ֿ/ڿ᷌U ޝxImRŚ 3Gn|,˾̚gU.fO;^FXx;{[##$klC?ÿ7{Kk}J GPխ~-t{vRM$q'U)VUq﯒g_3|m/)G[|SZ$v3yUם#y6nl?G=QܽkLԺzߩgt hQxO}$ԅ3*,g"~"Lbvw=-$c*QnxGVW:gtS&. e5QY]w#.o|s5>wֺ/|*#y,`/\G yoózC'n|w~׃4GgmgƚQ['Ԯ䵍fhm#Fj.2'm>o_1-,;>n׏5EnGKlnCq BƗ|i-F#=F u}~UEٕOxv?/{}jvkQoa٤~б[^/Uf4kj]^po{~]IEx ֶrxC^n &;{[$l B2B<-ZH44r6"*KNڽm۩ivo75I7B[OrKGLEcxcAd_Mr.CGo3t2^ZWvdt2# k牦 y GMT$J41jѱޛ-mG#?3\Z-q[x_{sRN4ٖ^33yv+*; -$ )s__;~6gβ:WA-֟GɥIggMCqihIzzhI{%;_{O+:7m=~]wgmZ?2B{鴝}R6;yZygqn>4ɻm%Re0V魵[ۥmo[m6]VNKe[xE9)m$6˔{gKC$r9T--TۯTo)_{|{Țׄ+Ěݜ:/aw_=óIkdw?3:;u${t+]|~+İE6C7ڞ6-|Y<2O/cjA(kw߿RY?N]{f7 k:D^-DޑV9.?x&Ӱ\Ҙӕ9Smkfra^?LM/~#ҵƙ+\53~v/66&ϗrli;[ T66׋ƚYHcE>bG->r#2kNe*G]?ųF=S,l\5g/x].HW(]ۧϡITzUί[;OY߮n<64_w̄M&Q}ϿRoݿ暞u^^]xV;94h_jqgݤ>WI|({);/~_],&;ԵxVUu˫|' BWgt-WGNT|܇]ī|RK?G5䱺n.Ѫjޛ9ԥGd>W'27~o O/ xIPk_+J];ݏ8ϴ:#vy,Sԭ'}]}zV:MN/-Ϙ<53[D']I{i9,#Ws!bΎgR +m5۷tI;I|رͧ3m$6wVr::G'~3WnﮋmPq:_s}kዕYha䑖Iy#|Mz*o_cJ_J? kj>(,vbh,Kɉ$O7rIY֤?#Fz/YeiOo>\zu[H ,iYӡyxU_L~P?siuը[71nvԵ gky39҄'̣k޽6m;y\ǿĺυV]mr=MgfڶZ},.GE5w~W.}>`7m~:i=~9ipUO&9]/+إҡb+!ѯϭIޜ/o/']|<>~ѿSG1jZtF]#B ֭xahd<럞Ǘ!sMM$~ JU}+/N_w<)[i{q >KN{X,f}Ҽ1ilܾd#q0TU]ZˮaMϯU|%~!x`XL:kU[m}Mg\M*t/E˺TS}n>Wh Rty {Kx̎hlt{M .dtt)dx=|w3xbϚ5)=oXվx{4RCiGs~CƷ77t&j|+FIJ7Z^v%좹7?w?oƞ%`𖅣lx5[yñy"uU%R^N4_ǀMcNqZ[1'L:Љ&khdGmH7C9z칾7-{,7fi =Ie~V geeKkm}H4˷%{kEx,1!EՅ|ƌJ~7udֻK?A?g'@'д}3~OHfhfm;GRfF6M|#~w8ƽ/u[~zzqb>K1ul'Sw]-֭%̑ɴ|ns7.wt}ajіM㶉ҹU Ʀ5^J|s~wAFjnock:yGƏz~VgoO 7~e@aKq.|EQ&ϛ#*67޽ksr~_K7* $~lmtbVVoWf/C44? #dkF<֫ieXȯɵB2ޓ$zIo1Ꮕ~/MC7Ɵk7ڦp]iZfaG9+o,NZ)l,sMŗx\f|f}-<Acrj y }+a~G ztq߮3zyyl^Ѥ:=w\۾o.G;Oi޻ QVpSZOԳ?|_uVKkF/n#- 3II4v0?}WS'&SL!^X9}[{K>[9ԛPB\nY -]c}SGU;zW舝8^]LoPCر=>5s>gw̪Uoo#NkQ/ClZ66:|6ui:kԻiGoh. k+'yC^fU(/_o;+Xd~I>Xn{Y^4k}_UHXn%o}]VU9BMٻ&d7>1uUoW}|! E8#d>^?;Zy+ahLc /qUܗ#Ek[F4[;;U*ʓ:uѱqIM]W3 5Fo?Ӛ]N[Ex./!UM++5߿Cm* qr;̄uU[]mϿ}/Obp֧iV3| gj`ghc,&=~oҹ+cEJ}mi ӧ;g $_]>Ӫ_yric2Mt%$]gƙOמ[ܵ޿61JNz$մ z d2N -#3|ϾcyDrsY>#jT4ﭞcM4>xgچxS\4 Af7OJbLmcI~jl=9F\־k{P|Z]{ Ow"3_5k[m[OҼk Zt;y.dy3<л2| 15ɻ??ں~W q'ǿ׉cw/¯1j1xhӥ^IkXZ3x7^٤99j7'x_M*QZkg{?Yk:1M^]%vx~$7H\uhZ]?Q5Ý0Y.:#Q^K/!t"Gq&ˤY$ɰ%.m}'[>|5$eԼEl'{iUex][s/}o窔_.j7Sσx/G׆~ iSk3iέ 72Yko4kO4ͱ<cdڎֿCw's_7<[wqH>j!ͯ{ 2}/2'yV^36_}-O3N*Zz;S q2>s|m/$2'̪IGtݲmj)okۯz73\Dž, OO+an;+G$jw |蕾oK6+s~+KmmZpwxdh-7+my'k;7_'M(֍)^K^ĮW%y{T\|E<[}b}lonƍ']9qpNլ^:H Qs;5Wo0kZEo78WԴQOXT{&crnnܼ~rM-=*GZ]ŅE1|{UʷɶߡMoe駩>ymSӿڣsm^Vn:ߪl_rin#)6xoM2[3 xV4s~n4|ť} ~7z"i9S̸]"󫟝7^&_WN/5-J-@gi73}71KG|Fo_SѬ~>qqZy.Yx੍nѮznj[_=Dǂ8.FKCf ?\._ۧ$=KM#i~EOc7?v-tѩod/,F/]_^d?ad%K&YV8c;z}VÌmLX>hGɗX$8R+csG[Ȳ*37u%m7nɽEup[٦Dkmgs>Zf g.qj*[st\0vӿ~LeUG|`qqRq)6(GZͤ^ RJg75",q,ѹV]:nY>}O^?0qmkΫ^6d0AgFXoE,{>o\{h \ϱEX3N߻vqޭ䙷лm{Qmfz} cZog B -.o/{WDcʽ~;{'X,;9ΟF(bQ6֒E_s/ztSqar%Qg<|?k2\#ҬtyGf $[80m̑{?&~~Y_gyw:Σ=hCm{c+{{x"/2/zW&O;t-On'@s,u3}XmO.icmLW[^Լ9Lh2q"7o-~fHΫm7qg}4&݃˝ZA>f n^Op i&[o&OD5U}umNl;7FL^jfxm͠[W -4>\n7+ۯܷ'x`6w7i:(34M5FtFxvi>tWiԨmo{:U>N?mm%GR+RE+V_=;XөvKUa]3A"Яxvڢ6v;6;I.mʆt$Mw'[?%Mºkxat=U_jd~ϸhhّc*toc-x2z%ռRCȟQw\[\Ho؟>_pZz+c~'|Z_iuaqpz5ߑi!fkU$ܗvg|ͲZ1'u#ьJAYVK-odcsc-okG%!Eݘw3\5Srӧ#O羾>vAL9_4y~U4 d~?;|Sl#K̤䒾ypmwӯCTxGRka}zRJ+ݖw*:lShݸ|҆˷_wk ,ᷳmz垒=J&T**FfEUE\nVV:[]:9t DHe]_Y7}9^^>f~--SvIi$V4q'͹cy#w}s8E-Ӗ7MA(Zo} ]Ьē<3xWZ^0牠X. _fiu?5!7fooH}QoƛiB3/:m>*_ Xi渓1UY!;FU#ɾMc?zrhN/=jMH.omȆ")œΌn۽6iVnZԯi/uW jk$?dm˹6G????^痐̍@8\:c>Kb )'nӝc?n{2܈.U]F>VU-5fJx~R Fq}_FT #r:'oQɑg5V szTd7/4@KHqbn*2;yi>Sm;m},Z'k?4[_tJ`;.+7 GVD0)?w$/~DwlO5=/54h]~Mؠ '6$2uj?ٞj7KO=f#ఒX74i77߈B[Vl O1*~Ohc+yeŠ{,?#u_ק[B^;5j:Mڅ֗ Զo%vsB$.ͱMW4UڷNzꕏd4U.yFwr?*);<8k Ko鶿@i7/cb||d՟$!g% XՕ(A7M|SI/|PC.[bk]"\Ik"g}qPsGF=UI-JRj{?SYmHھK oOts ³xFkKiTʶr[I ww[r[ó>P%c8Ƣo]W? u'k.|oܫgnۣFkfmm2?$= ֋zi/ep[wO~MjMOᦕaVZ.%+"{f9.'EI;qq%û?i~;|wT{[pe { \+%:*mmeM^M~o݋-ݧ6_UR.}?M׮L7|Nחڿf^oM ~VϺG7W[|Q﮿<8ӝ^g:OٞCN]226mkoBnYO3vV1#}?.~p)o$U̹efW]9{֏CgX5EnfK9N6a4l+n>ݟ=XN.*oYrM񖭩W~ֵe6z|w6oڲ3?Gޟ&2-|G `yC˚\hƣƗReF][$kq"m0&Q%(0~SաYE+^_5I/tm3IY4`:QVˇkYeGy9<53?i+Z>gN_[jN^XHֶ5ҲF|>Oȼ6>;OgUW'.U'?>k+ZgJʥOWsZ'˭<w)$+"-ɾ6 y/C U?׮MSm|B1'>-SAz.uկZj;`YoO\n$Ώm ?;ax?ᇀ< h~նiv$wyHI3Y53m|=5z sy L%YەVͿ#(9 7>ѦD7<-OwѬͽ?}ә7O XdLŖ2$2!CǍqovqAm vi~(aKi7nV\.QUqr͚Hh"iG*q֢i[6C/ oUlyv)V1f `V HZzbR3ig Hmo?ΤUcRw}!S?Ox0Mц[hsZckXcEhVGyvdN~󃰙~3 !?oKNUi֎ᄏѝK6 ?/f5=߲O j]y{(ϰu孮eKTkUW=<_2|cpTkZο t3O,otib}Pg.>k{ˋ&ಚO8JkԔ{迭%gx4N|Ym/O< hXc' ofvM 0?yXUww-%ؿz'58-cTּ%x[T͒ems4JDy!y|M*>hn OXb{)E%:s6_4Iۀiv+eþ>]4MӮׯ^C:pֿ#G#|(ot+ G=Em36-aSInGq̈hm6/[VOaxPt{k@Ck7ƻwMx? =sԔ\|_"=_ÝkS}[PF'6|姥%ZqٙYv_qZ?O OvlhRhy6t0ý"_k+Zl^wW̤ٳ]x>#v$3INxg|#XVHh㼶tr|oD+ױ_yn/Ft|: Xq,Z<;>΅-ګa7nVI٦gQޚnyegsYjwWdIm"=I<9au􆱒oo6CpyZׯ+4?iz$2MH2; NdZ~_ t mW.Τ6m>|պmᤘO;o$;6WZ(ݾҚ~q?M3jClkOJ}0  +Ӕ5:o_[%/?EtZ+44nB˵cd=DٻSO 59 wU \m 'MŪ7!o|V򄤮_ٻ!w/K?BZ[ymeog \I"ܩ$s$7(vy_5|@E}6R֡7][eicJyNc>OiZѽ{ ?Ś(|%'l+D6ګ$д I <2a)T_yg4vgϖ)Z5K)]Q607W4vC[;GO: ̴_vߚ:.i5~6ſ~2Mm=ςm5}bjs^\mZi}fYc6jv7Sy*Eh|ɑYM E9'{jd)6o#|K xn+b&Vx&{G'.?֝}:o|m~_l>n*iZiMvc7;˾L9>o9+G UeLJm{='[tj~#?a Wi IG#ylOgTDZ|Ů_cGN?O8?cjkE|-t=2.izMUv3s~#dxKok%Rc̼Mq͞uUvDyȏ]r߾m{T-~u ~?;+E}mm4&fm8<>d[JQIrZW#7mfx|[Z_F8}]yij6ʱso.,[gE =w߹gwR/OWIv>;w˱0. 7'Ќ ?Jc)eY!wIOȒ$.gg#P_zw? -_XF>4;W3[|'Ͻ]3XfۆaKSRYZK{fMh[T[B-].h*|y9Nߡ$όokjڅ|G,ڭDmRK#O%.$߾6H߇䡫z8J{?#G%]|Gc$ȫŻ,*/_z}1#ɺWt筭vQIw_fdo j?; KH#u)?,o[$4>Oͽ$[}45/+^GОO_#ĚL./uk豉VD{=I.Kr#ZG/Y^9GF>"|9!ok~ᅆRe7Њ˲b:B7>ON?Wý2\񞯯|KE ٣ң3wo70D +WZ_{4>ű 2YYAkimmkK Ejwb:}+sr}̅;[1mJBmoj7mL|Mci$p$ o0]UѾ__B: }N=Oi[מQ.UH_hc/}%|=㈭{9WF#2G$uy$ZȊJo}&啯oRr>s.Bƾ:_^h=ݽƕ4qPXU2I2wQ&=vy)]o/w|}x ?þ_ ̉tT*=CIop휢lDyHw:c^AV#/}y}AZw~{T,oe2Lw8$XF漵]Έ{8gWksܝŖͨ趱Y62]Kq : M:۷la#x52H}G ihPeks SՎFeϷXM~N%yƇ@Oogj6;yryM ˝YyuNi-'\eG|c]z<:o^C3IFTr_\\۷TdA3ö=Ʊ&B5kȤ渍ɱ8XO&o_֐n9J3~+isGxYMֶO\_^y6ktsy#vZ%|zocYNWҠ24VfHayȈzҦr{:]>i?ǿx~24+x/"o5J8t|-gռ; giv^(k8仟ux O x*zgg_Zm{&<ū\6vo>(Ԟ+{O/gǛ]Z41[L Zce"7H^cM7ׯpuEGxkƾ nO\ȶQ1;hiHyQz_hFo|}G 7Iv ^x㺸EfN>a%.aߌ>2DlK ?F/y~r Vry,Ή Iވ|K'ջy|]NԼq߃+'[[mOpwo[} o6}9;{ٜ3~Z1WߋiKGPOu;qm>kw>Wh=վJ]η%W3gyyc>{ol7oFIow0{xCKӬN9nVdo fi#|%.cwGglŢ#% qڻ[T{rYLi2yyw /;b~ռ7ZιiM!6H~fUvmր8xHvHbh#mEn^6e{ܘpZĭsYD { RG5K .3B%lӼ#+nQ뚎xv RQ@P#sfTI?Nw SuhLO*$ glsH̻]{_0%hI tk2%)\[|rɹNygSg?Eҭ29gBR?4.3iĒZі ][k}uw{^k}'E1|m-_>ƑfN;Ƥ9鶟yv{_>^8Z#F^Zi k&O.bd3 iGE_.;h_2'}?Sc-灼KKf&-.Mc$wpY}3=6׵v^aRV{š|Sm  C㯱j|Vwسm!lI7<{ZO~Nݬu ᑬH6|:{x,L-mޓ:;^rԺV-Wrr<^ /fNJ'q#xnH_2}eu萤=?44tl歿 -_O]fKuAq4}o4Vjy1@K45?^Z: kY`N=u+#ھ\cAr;Sz?_z'ƶY&mѩK 1FK<,i';Dҟ~}8z[{kKO-g{swP jxVO/09kZehw_DnYfi$H8wþǙ~ܵ5WOndZXnV J߼D&FΉA#8-rKϱuMs[#.,x43M-<ՓQ!g$~Luɷl:=tCSh/y+Im/˳bHw9RJ~)h Ź eFڰ_I|Mu^y=_;iW~xd[]NXѝ/P.͋Iv{?ZVDmjVZuˆKi! ͱ$'i'\խ|3uy0G}$LVk#(ռGM%ʷVm[GO] ­/[RH$_Vf|i$ n߽!ݾF:BQ}"mMkSᏅh6Njiz:χ$4e}[E9$o685+)-69ޕRD>[5;:nܶ}og]8Ř$-W\k 8u -t.i!_'6􅡒Kt>S\4u쵾K zo˚V^w4ĝ[ ݴ:ֵi0꺦f HO1[6ncz53߳kIK\PJ^<|-owcxC]j]aqcVd)2&NJfiI?{W~o^5~i_ ]lztA-Kk5 /+\COfGⒾ;USuk鮧fߖ~_VxgH^nj>"jVw6iob:t˘վpۈe!U*jQw[sׄo7r[naXL2[ImS|mTnK{ߧ Y*I2x" -FEԮlb8uwuVky?o֓{4_oIZ-v[-w«g:#}ʙW_m\}OouKB\MʗVeY hݎM_빤#-t(| em}R- YtM0þOUz|' :0n%fn'zm,,x_I' ;ԍ;+TQ}}toN񖁫R+{k'еᵼ;_'[Cy1#þ8mO物?}yF)i8XxTV\ž5cw4׊[k U~gܹ)Ͷu1ΓZuG~ϊԧ['5_Q$Enk;tKH#y?ƾ/|Qwqo 9<4гMț!{"%yLfuޣ[w=O^0Oy:'+{MѲLm2;H&miϖ^fW⟆Z.'{MSIҤӬlwII!2ȋdzp-_ߧsQS\M^6Iiא.{$m$r[0SCGIuﻷWjϿo{ծE7vƃu4m微ysG}[Y>3(&6^^䮚Mo#<:;WjPjI,ZZV9ǝ'd\ׅ%=vkJ3|95|-}wL&du(=?[]ӰM=n+}Lrx< =Ƨc>]Y֫5[]#xRm=׺N[uݿ6qMݾO]T|m>5{m 18lyo.tY-|E*Rl?Hc6G7x>u*.T3/=_ƞǿt7~!e lٗM|!dfR?}sdo}3v7sd: hC0q4'lGv&o.Oޔ^k}o /[=Q6xN"%sqtb\o>/мgjvsJ [u+| Q:Rkf&z7_dk B+K<7>}mjw3+7HgoD`:]ҳm?>_|;,=Kү.# 3Io*fDO?pꩌMDbbZ]wf~ |Xe4b:G ;-#Fqc~dR&Suݤwitصɻz9{:t4ծRO,`mhaY":? poVX_ΥOK\W|_<s7ݒQM飸O] m{͟w{,I:vo}ouQ׻횅ݕߋ~ x]j\|y ;_O8{;|.ߊ3~ǧ첇QZIˏ Ɠ|Qm >z_2o5 nu 7|%m4ۼԯVv}_7Zri(mv1߷߹}ڻ  ,=ŽSh*$v3AugyjRG;C?YC,S-uWuקsxh˿썥,ҴxW"[i'>@/.?Iko40>wI*|Sh{:IB EwZ}m3ϩ >n[Zݗ}_¾kxZck:}cU!;fl^L׫Rԡ9;z{v"6}|ۗiݧ\KwGLLѪj-y,dfm Vkd9ry?Rm&? SDO^bHWn˚MWPRd02Zlp mJ|$?¦5Y||uwϩ 귗1Q5?3,vL¨Ψ)aa uwoUI7'{y|]Wy2r#^7*ɵ}]0 '篩8^fk,5]Ѷߩ*U?_dd-yj1$D<~{޲M7ko֬w_֟e[x\l9^dE_W]Wf{h4▌0x.\mUgX̾?%LROsEzr}A}bkk<ݖE;fr7'z8+}[k dm?צ|2&5仴TWqiUS˚Vó~gW = m~] "wTfI VM- , M?}[쩖sF ,'zw¯kKmQGO^fҵպI#-6,f-Kz|wv]G5}kcI$Hq3'9(m>ǫG NK￟#K῅kxv&i.keKO;k~zy/&Y%ޣWMOMvYML̿#|cX6YWu:zoσo_xt;M;ouWi!u"6~ w;,I>]W,zOk??ixV]mǨ дwkqّKxy4nSXOo뽟};kZvj$Dơtؤ1kǝ9wwy{ yilds]\k J~40UfUͲG ʉ㑤hžWFw_ f(pFp~e7m?kF~5>g"ͤ$#^y,ϓDm_ioŻgqC)۰; ]M܇>*6Q#j*DkJZ[}WssJㅤw_s0n?z~?p2GeNMukov6,|z;BRz|9Y}9x4;+QFn>s~طЬ4O1d)[Tk>x/阞q;ÚG&ggwiXgI+ȭ'|԰M7f?Ywe=CZv!]cwK{eo|ѴDh*,V];_]r#Ѿ!@Ilc\G-fI] uF`׿g3?Nc-0yļΙ9?&J3~wj;g'ÿ[j{XԬd||oٿwN=: k hjc}v _ G}~t/''F\$K% ^c:\cMw]r[i_1cb`Rԗ3X}j#Ko /-*o"[&B4_Fn{X}o_mw=@~>6%f*sl?fJW{_y5BzzvZ)5ͫ4t.Ъpe1:jH{:?z쥤K5^߯]=Qk멗:6H,Y!O&5+'~ZO /+~L,\Kidc~_z/jv[6YmkB6~vwnfMS+[WkM%SR,p$MXѷ\-/i}2XsI}\{tt+ryURyW{A?Quneam{#BO'<čHZ/YJMs/~6,|Bt(?cIJսFSRݶ~m>yy+̩Qku۶>$f?umV^$~FTTŴFfUOim'l%x]>51ن9BpݼEgu<-:nŸkZO xC]ُpڬdfK?2YG2?yysag{_M^y1?;kOO5 WF.Auq%ͬړFq amnyfDx柬k_ۯf۶ZX$oO>ĖZFڅā̵e&&IUmw/ųy 3׮޷1ZRmG_ D׈K}7L@ufv?z[\{$$ dϪ^V+Nsh6YF|jק}䯬< )` Rt6}몕gWgrm k…&s ʩS hyw@}iz?/{Al /!ЦI>M^j)zlqqcQLRDZUNV8onN-Mù /Sn eR$]*ܻ/ҹkקͿd8B]?oGok -bs 57Vmv-92~cXja/o}jq=E-B)i.-a='}% 9vkymlvΒ|LJ<3+Ga&$Eh[Fk fZ}8wSׯÝnyZDm bo,ZJU+h'ٌa_S``E#o͝~?jO;:HEktoo&Cw6zY7WAމN&I빏q,dlw2Ujoep?y~8i$u&H~kvqJ{WZu׿ޯ#)W~OA^>hm%Snf߫OlBvOhaE]5qKh?$6viM)diVg7垥Z껜zDti xX匶y}3%ni_M/Ը-.OQ[;V3AA_׮CO-< E&>H~Ośӿ=Qm߅cImw`(aur?i[CBӯpfđ&ܮr7*V|615] tX  nvb,w<}]zDO1Aush\p1tudڽC%-'ȒK!*7NNɿp;K]6 x0_22Z㳛onl\EZ澻"dIG ۷z㵢_6ssĬ*țov|mo}vwS3`{|qvVޟ|L$h]̌4Xl>0+Mwi9t_]Ų1e'{[VkMu~)A38Ĺ᠄د&@dOrҘcIJ̿3Iu ]E L@{UNOdV6O+|IЯ~j7ck%/}Pi믖yeeI?ee8vboy$dnfD͑v;ɶOgW'(̗]tUZH'][D- N+98eǓ} *ywI4o:?\#י)Nw~fKZ?+<;7Ie%2lnʱoxǖKF_U;ŷoy>$@ՌkyikztCk9fPxZ9̎?[p}oխ?=#gNl,otc57]lf?.f M]neϱݞiZcGͥsbf۵Usnh>cv[mf\EތpYzVڔr-ct*y~rogeqjF~sH5vާQfX<{h/4U,Sfi/9#l6>r`T+' ߱ *l;l+|OI&5i!:}U?fMɓcOE ܴ{gx˓_])vSW[Ytyl;kWʿmFۤ]Y?;)'=wA~2Y4%vאu#mkv3C >Ԇ}߻R__ԍ޿Xkګ5ŕk+,jK 7T4_vc/^[l>5MLK"(OwsXJoH%vunk "Oy̿4}RĚMGЭ/.M6ek5Kϰ&&40~{xgmt3A=:.^~ )u)oC@GVk;66_.g1!u?pױ/}+}?^gúസaZEYYkm7@iMn۽rMvwHʶQRoHQ_=/8!o-t (n ژ#H|{-dvݳz&oٲ6?CZ3iWEdUzhoOvIfSkW Ӣ 7&_kn a6Do\}Jo?qΜ[|ߚOV|?k֦Iuy{cܪTDO|Ȏ/樒kmCO<2T15|6' +r%p+N KNnVXՠ2J_ɛvMDͽ>"exUՠcMXn.5x<8idJ$6gRWZ^z:~oï}'ω+4 MZ|Z\rFn/V͡{-sid(r;_֧^n<|=4 V[iv@f%TY$nvi?zZ{̈CcH=?.ӽurRktei Hm>MDa>^v݌t|4Tz} }/o=̦4oKm&0TzP#*Qmo9yym  ݿǻjGG_ڤGԗ2)Fw. 4/ԥ=F˴Gw$++/&Q8[Kù{Z$H5ھ;fw{_yLCdƨFosbI]w(?smbmy!h᾽;O=<y-GzMe]8+I4]FΫC7_g^U^U#+v*ᰒK]%?^|?:YE(cuUWIQLʯ6ϑ eԔT}\qX #>}ۿSNl72H;#-{d*N[sSI즺i4[wyS&H9#U7ǷZ"Go孿]wu)i04Qy }$~go,Be$7Ѝ`F?!A'ߝRk MN_o w6ou[ ?xl K62fd ,=3s@$Lvmoi jc(-?võw5Q^濯0٘JCBBmm_5<NWmۓ ?O_%ܗ6r7èY[1f?.H+sJ0ݷz?' x|G . o>׿nqיX|6S\jIrڅYdm~7oj9ܒum{T$w? ^5*z}\++ƛF+o5֩Ekq+־_h+٢3K"3"X6hיQ]?S|?nCe2N7XUO]sKQ?uZ4xhod ^hh:{˛x}n#ڲ}W=\UIy{Kg:%jiO jJ&OLcʳ,1.Ht}h^5]V;jO]h:{ir귺då aUFSvءJZZ#J9;]JҭtxCeeZޙgwb[wݵQ7y7ĨB1G9kGm|fnV"!V6xȬ+G*HᕓצG;z|{6jNCv?q˝߯2w}:ne`|9(.4D+\e_*m8辭/3'&;KJWVӮ[w~U_Rٺ]mΚxhO~@՝̆N,Xde_^|[\¯F/.Xya͕Vl}:R_\ם^ߏCy#[" 2ͻ_8>J)2P-_1 cҬw}=["N)`F^n[ZOuS?iwm%e^5"߻}mksj}&@M4tf_&VܪHzydtsV/uVo6ͯg+⍎w7FE]s~ffG'ɱo[˕ԣ5LkGV]$W_1o?/[$fn3zm_^[a^Σ]d|W_zKkZ EJ@ 2IxkZC4M;#\?Ҝ}L9,O9o1i=,A'nϿjŦ !Vf<ќ(?PZ?=Kb@1YOHY|vʹ)5kAwxK]ʛω,[wL3ꙨI2O4I >2L1igpfM [[\L6͕VE1ѼSX|G*"zEҴ䵏-||ɵ*\o*)^useSFռ_&h-Qt]F",K[EUlM ?7̻ˣ9.?tvqm^\WV|Cɵ_~|A躄7~"u1ͷ%"H[:txvDZMh[Vgn3-^i gAMy,гLB) u4^cףNIo0^t>O UzIVYY,Ky&Ul4դ}6H&kWcٮ'0#4~ZGMh5;(_;|Nw-$|X42ZWHB&Y_c}yoӽ^O^ Y'ZgڟihV3W11#Wwi|žD8yFNӴ ]RHeO2)7?3&&(C[Qe3ڮ|;wQ&n,nKI|m΍g.fM=Hps[|ˌwM? xu|$ jDZg̶*M]^/m.c50!Xb~"eݮ_s gZlCFy->s VGSq6ǙԤk?-35]vv EGՑ6ۺO"g\{do9'&ϑ4sۦZIZdg,2Ԓy\}?qmпx 6蚤:~&ƭ5|;/ndΘ W_2Ԥޏ>1Hx+Ú"_ǧ;++_3 L7ZHG##M,FqN"Q{~7NP^k^8,>x-Z?15D[s&sPþH{<=J6L; ;ohvڷ>NX[{jyaλe!fb%nJKꮿ1GI+y:[j$hӴ(khwڮxo-;idHh!y/^5/iV~!./EQҖ^$k6<6VK.O0&墬}iϓHϡ牾#˾pxLo45ᲵUW˷(Ds: qʭ̟2[~]BUR~ޞ՞x3PX䵱߼ykJL{]^gMg)F}glz`IMCZLl&ĩBP{o~8*|G'xGkF- Dy$dkmozm}b%z88F 7Ź'O Dm;_ˣAfxjZ%Mr<|?y??u?뗫K\wSf?:f.WAqkYDmotY_miWKsWvw\o?=oW٫mK[&gs=ɼ.mdF~ Ik5$ܤȎ${)Υ>k6~oh 36pg#{#c<fWCO[mB%[RlfQ,{Y_9<>j>td5hep߻ig;m(?vRo_JG΃¿}?u-> &4۞7w;~~^/=\;u*42էW&IcbqrjWfnn5ϨGnLc%sm;;˓G8\&އ>4ᏍCxoE񝞛kuM.j1kݦUYKWu2<{_l7%f~rK_|O1&u" ]SRdY, Ņ6Gg1&*w(h)cqux]Kil DiѨc_ܭ>k~92ww)ӻoS4٧[zumBϹu-#%ī/us2a'G,fϑI}7mR?xBau_ 3izk4m=Ŵ4hcy7ЛU}7Kxi~uxOZ$7̫Olw*ͱۏ#hbh8f-|O]&2X^irM7 0äV37]Տ#ޗ5^ᬾ_aKiwl1ë e^w#"oClr[ק̢<Luz6R JN#[۵[6LrI,>Z#?i:z][[ʬWw&eTgcC~7 [jpFŞi?}0Oj g n>NoTzQ7RIk~6W-#Gg,[I喆a )]ď֋Wݿ=Þ %CKwk% M7MRݯ{`I=ƷeˁKyu$ox,RM|/ߵ+Qm/]Ml'X[}Gz,7Wr@ۣUhXO|țovl^.+y=__N]^LUo􅱂o5&wwocמ7jf֦li^%}Q[EV {v̨+X5߮qow2Iyl/20t[U$nzޛa[s=:\570BCW}Y_m{]Ju(p.ahc*f]s:W=9m2OwH.ⱒZ|Xσ/u-{7Zږld,ѥC4y'4>t0̍6|GCUӿn6ߧ^_Vᡩ^=cYn ww*+ok.-1ziׯ_?S]?g×~_ hb]>;x[f:̟?#~\n6ӿ>D!U& E<s_\]CzeQG' ::?ʃzu_5߼/3ʴt߈ sf^k:ݚ;#~Xd<+$V~b|ϹľOơy (.O]FjgX[[Yx5K-_Hb4Un*Lv~V_ xqqӖeVm\r3s?Dc_1h3I?K? k{/VOiGG$cM{+C6|}ʳE,WsGUݵZMcu?kE@z׆m*X >[kIL;O.7'?ΰݵn\+'YGӡ[öi|$k2 ʪ6|Ǿ7MBMs'_{:u \,ҴψWZ4?hզ nXhṹD!\y6Mɭ鞭|ZgOAxz4?%yqo}Fdm;òq'W*ߧHmk}9O>x{X%_j0$k.խ/Gb?y4&gwnoCrZ(^G!|~9jDUo{7|y߼m~?X|^|5 XfFE[of6ȒHȎ7YVu<5vڧώ_e|k+6:-jz#Hֶz$6h<K<嬒_G# k}>k}Po6 n[&}"p|ʔ$}?E8-j|wGÑ=g5薚Mfy,.x$D4;z("o<4e;v}w߾{ry9$d.MMK%fWF(M\_[zNdԿxvYmu(d6 xV2?nO?>%IKG=F;ouk5HP<%4Я[ˑw*ޛ6V Z;?eFexVwU3~ cJ~$vy 2ۮwǒo/g'' G+S^3g~.q]09!Y lݙ?sgqG xʜ{^뭏s}W]+F\>17:=~}V?-o,KO)R{luCuAiFW_goOY^knmcj2I5m#\t},(*[mz_gКUGǁ4ݤ0!]_F8;^p{MWW;soqFM=}7dx/N|+' iuGNCy64{d=ܛyB#ޏ+V9$>D9_|3"}<2ޏ E}%Ai,wP\M#CΉ7ΆO)5}-+\|7Qt;k5I4ˍMèl2_o2K߇:ןh:Xx=A#x{Y/!eFy?i}3fͣ52Qm} W3Un)I8K[Z,۷OPqkͣߧ9ygUףoim2il3c$Ȏc+TivrԧἻ|Duoi.++#FG Mgn,Cw:#7q8~V֟;^}K^v>g_?'u<sjqj)q} 4W-ĆfE w7!ƷO[[O"!Rϊ|-|2־d<_].֖v I]j$5sI9%WV뷻ߩ^շ8(?:eAhϣk鯾g FIGG7gH1J;_K6ɛTml{al}xGGŻ|"h3VweŚ6kco4sL[LrqMuva2&-zK;9*+5Ӷ"]x>>x3Pˡxg55-4wsWZƗ ]FTVH;:IŒ9Zt߷sW.]fq[~>8}rkz]Ŀv:G.{k*no&0;|&8~'խ5(GWwѻ飋P\=>o7uzWV|<e6Mo%imdlr*(bWkQq_~+koy oеhNӵo'V3,w>JC+;:O{Ǧ}j~%ޕo6 K9.em&kV_28lݟ3Do ZxWLem={yپqs$?fP4hDH6=%x='/Gĝ6yIvnֻWY~""}Tu?}˷I{O_"j[/i.|WTUaI/oe8~Jt\z/澿=j&Kk261Gf1 .Kl+npǃt˄ѵn7Zz%h!j2?*{埉_uoAxCx(Ⱦm+S]+u6ݲGdD݇JV_e*q=CzFZ3'J^2[7֐o3<}lƯ%;f>ֻ[b)QO'뽏 em{ǿ3!d f$Y&U}v8&do<ǖJ{t^ p5,]7~? 74kksi"ɧqK{y2g?幏gɳq-+rJ3ԥQR>޽ϐ*xWD_|Màme}cyyu!'fu#ۥ(/aަY,eXI9Hm}s Ve*w|WsJޥޥj>$V𾅨Ci}kx$r\.y6wxaIyvr% pxzpZP#Mߥڵ$q׻uO|?<;{OBԥv]]olnu&eΥOpn^wH=^|*qX| JrәAM.}N'4I-/?_Ss/ ]ÓvCU^1~eԈ͞Eo}Ǫ䘜CI/{sUH+?g͟L=VOxRt.tO M6*9!.67"5xL CT)i~ծ}nrU^n?s茶J]\jԒ9R负F~dUz J6Vv`ҒNI/|oe# M6XEje͆cɣxBs΍kJ/N{ a*;uz㧻x &Jy}/_g{%ojIy?87/1ZIE-~V3umW^I}>ϖhcUUi#E~79v+_ߏ7ck3Lѵψ>+RP/;gܾ\M0#2GқlِWd| ?s^k o|9$cY9SXv=Afv6ohfyo- cqG{Wѝ5*KGuG^~tOTmNY%ۇdV6; 8ki9_mO?ꍽOok >ú G >2x;V%eO k^&sE ]xzM 3qdΊ:'ElT-g׶:/X-xWSqkCI麵rJ%HȰ07=_T]U0tw~ֻk յDGY_MÖSOӫo_]Ye4>(? # ߊ E̚Zڴ&.`vCg$=i~d|;|;,q4OUkok5ZnmyoZWק_~~|5f-B g}BPfVKy-l4\6qW,UIn_Ƭ.}/stxJjv/Ei ڕd?wfGGٝ߼;ovRn:tqk:N"edV,E{E?9[/s[֥#%KW kt$mKY7yqt(m?[KwE<tOxR-xZig&Uơ(8n!jX>MEltd$?-Wvw4^[ }:k/mjʲoH]>0̏oe굛[~\GZuSZ lll"fg!?rJ)$Wo͡Ԭ}?wϞ/Son|E#~𜶗fIxlU4(هɅg'^e:pR'Eݯ?|Ddƾ6:>].gh?mo ̒| )~DpW%uzS}Mt}gcw3m<)-sw&9nd;[TNE{̹/n޿ԵX捑UcG ufnxF>zӕk}UQ6=RY$ӭDefWvەlkǵh(ʣhZ[Z>n.aFF4 ڦoU_Ɔ^K w+}=BOdt{=/,b&xv~&ctm !ZFo/{RgU*ڔ7Vz6{<;nߓe]L)m?{WזOy*٧#b7CeN^ j$S)żyQ\ZKlU#.uBocDUCt-¹%J4_S6nCgk~-OM_6ݦbGo[s|/ Qoc?9Kf94go~~oEWQoIFﯦ{V__s}A =0i슫ضʫ|zQ: KR=θv$<&3nUF;mлiYY;T%vIʻ{Д~K`u=j܄gtx` y[.W,v=22nf;5-:qֲIZۍqgć.]-/z5m8IJ-5HS|};N %Tdo9UrכvovV A6ۏ~fuVA+7~ѯ $_Ҥzu$wݭ#NWz?*Tc>wlSRVx<Μogiu)_of؏IsZΛ wTlvgV{XeWoaZ}.!C8]{=Əky~:|6Ӟ7hownkjV2Bܟ{>T*ѩ&ר7/kZ]3j k\WP]DDmII &ɭ)PoOno~ Nk-Hvj[G=VhwHjo82~ecQ{ћ*|Y<'tS:W~xd]fv4{I&k=rI4CT:[A|/q -F#\dfXdZ/r+qN_{EX $OkXUmmwΟ.7$F)_/Rzo|9- m{twJXBÉJOK/[òfT)>yrycWhFo|8lƜ~]oIvWjJ$ɱ08_^s4K$4=SҵC6)Y14!To{]\lsy-6+\~tKb ]iY8,5(ᐗF_1KI5Vu Ik߭>gYj6#b;t(ܿ,c?ݯ5OOOmq [P$':0k򿮺<zi!MXfF=Q31eήiRB?ꭼoN__ O]_s'8G73y~ )/w+(̐?UȻ{JHU #3g{}TLI/68Y[Uo-[rN?CT2eYt7_>oSw1LlO?G+[l'-];mMMM1X~Zp{.rYwME 32~U&j&uooe7mB@k>s!K}'I7z|ϧ܍ҲT$[gGX[4ޞdr*/D}ӎ՞וo \mzJxk+rާ2_ȻMg8Z}Uo~}͝(_>QԆ3یMoʫ[:}~rrz블]?Rᅽ鷔Oͻg͇moNW*;xO/bVT]y~^nNȗ7}6.[Y~_ްm'*- F>\es#+䌜uv]hZY嘹[ 5epuj2&>boUs{ש<}Addr2`3g\_&_ı>Kbz߻~ =-oAʲ6w}QIpW[LD^p_F:O '֙J ,Dy?W`*za%3,\U[i$!و5o7ͻ?7o&i~o1h乑yWrf>e3W/Ф+iP [N-P-I2/aq=~i )ViI5ƞڬ7y6q\Y{y%t'R)NΚk^S_~o|(l<{mFmuh\2/haHwF4"tQ:N <~:x;McmmTY!fvD+䟝8y"&rSO]5JNMQki2\]CfYvO7O-tG7{r} j׻gZl㳸`(_n,s|75 -]_xiO{ $55 "O n\PƱH\|?_Z^ a43E Yƒ-o$F$=G̛G|Y9^̚$Iem?OkX6vNU 1lO3(vOr{O']O7Ri>mxfmV +X9 G&vo94-G)zyrRO]:R8oIw24|QPګ[[{hj;3) ';wmmǷ`̨զf.mLʼnۻyߕukod /C޿_ϯz,Ji7j.6S##nTM-m0u<|c=(Wt#EZV_h7o="{j_(,m7"mV>>D-I7̟ x#H3cu_ ܓ\ooܶΑ>o/dh7wqJu?dfa"vGJM?M~'?dw?5_xùoEpvk rs ͷ|2&hV.J>8.g{v>ú-5KȞd "\Go;ĭcIz- ̿(,w/ZÓ_PRkcmp@?⑸z>i[Go'*h)ǑeI3s4Qf ^A?|P\(Om}:GdnJ1H̼?.NZKv[+ݲ-Z(m O;I&} Ui!)r8w?ֲVrcn ==jb[bg=X#twO5R7]iɝbzgߡ^U$0sߠ? r]hEr cuau}oujjL::Ǟz{6ѝul ^/2{)叆5Lia3%im4Xic pഽuvbKۧonnon7l#p2sխԯ* e;$fm#u0#oك-㚁.*<m6&Q涻 !xRLkrX`~qi[9“"C9s@ML%dW$`ǿ)}(#FZ­\{ݎ_Di?_P}m`mؒbͻ~v9-3xTKc՜mwdp$H>; ~[, Q_mn}fgP_޶TfϵtfKn"{Ul`sqPSy/MҖԧdIC(a]~]S?;;++% *ą؏w2.hM]JnDBM3Uϐ?Vv_wQi-_˶ȴ3KY+ ]";| :{76.q| }<~8'e2?h?ڞF[yg.Xv̸Hؿv ǻʘeQ[:/{oF_?X~ou2hu[IkG%;B#6|F =ܕZr"D ?kQ_Au/%wV?V561ktfoGY#wl(K[jԚz/? ܚ6%̲5ds4>@%}VO>G 4eO_3/=c܆m[Tg=KP .!RGHd[KiKRK{ɑ< ]H{_v=״{^Qewew}__RM{ſ*ش> ψ~򵞭q~h.a>o/=}z< 2Ӧ/ψ"^ wv\}Bm* >^[M2Y<v:!FK[>dw{>s -N<rGk6=Ƭ˵5.P[Yk߼O9yilFM;(7׺zS~;ĞOs-ꑭ_$^Cs Gqt2\2-*o{kܚtuk_'z>8~ܺ m>+a)7W3$ G| ?^+B a[ObXnѮ>ooڀ4p~dRv?³RMP1g0lIX[-YW&O*!$7'wˎ]Zp8{}7uּAsw[lE Χt,l|6G*ˢ|8w$B~)7ž4xv v.k-;>322bo(KSзߋt恫Zcj9ԑ\\yryt40ñ捼3W ntӧSyM;z۩o&eዩk.WṪvY&fKuo-orʣI?gwn}nT|7MK|uм-oAr&Q9$Hhn dOm؏[P {Z_xdzΝ6P[m:J/q鬮:iFU_"%ǡ9r-~HҴ='iz4[ h>&`+y 'NEUiiUo \bo/m&Nszo(xIw<-y\~k b{ }" ]\\ɱẒ9>̓ZKRҝ>]^~g9i<9kH xR-5 컍bj.˭Bn24q;"MBDD6-~fMlxĿ|[#M02$%ͥįsipk$cEړ|/}v06֏>gޙk.tn[-cJ ~\%\CVF[f߿byץ ?qѧ'y_3RYi wek)[1ym̻}S'Te=kcN:XoV ߄Zk־dk_.!.DK{xD]'J+vZt?#wv0~_,4JOBU&/$y{~#ˎ7e4cxC?,g3h>#ҼIM7Eh#Fj$H#UIɚOSJTa.UkO%wɣu>/Of]O kZL|0ȸU[wu 5~:3d2ן:25k/w/s =O^#ԯEԴcRK.-g6;#o.O-&K*Vzmcd߇?U\Ƌ]J<'|1qMRHo#ԯ$i$QRHv~Co/]INokG<9<ym˭Hmy#B^ϟxE^zƔoǯгO_[_rKY/mtK ;˿N;Io5շFRSt) \:iմ_u4﷞<#:B5ٶWwjKEyo=w٬W!Md&:۾_KyMB}7=^+3?G 7nzMF >mvhubJG7 >r9-5m|xDԣSYm`kͲ+[",ol)vTy^/_oc[ϦP&۵݆G#ywp$B6y>?v4JrP=z&_O:ū_ |B.w}ZkF*/3;$7\A—ZH5Z+JK^9[;Ez4?.5x;]"hcDò{O9MfLrK&N^]_2[}7Z;ѮaM˩HYϔIeo9wDDrlbji*|Yf:.k:jz ӵdhlu Fڄmٮ f.O9&G,1o+W4箞K㤜{zN|a>|x\񥯍|mg͎ h&h|h?$?|D[)7/EsuZӿvtVVm%Hl÷3-qM$)|t6pòiI.>QW9[ml[NTWjڍݤXd_-h^g>j\fJVZew -𶩬x']^n -2k_ %>\j d-J#M/sv'심xv_'|L-qqDڝ4r}GiG 3Mly<-_~rZ~I~5U7Z;U۷yO(EoJ:h/_Uմhj6<;uvC %&TW|79\}ٴ* /ٛொ^+KZr^H64':?6i6=]{-}Q|- _X,u;wm {~9ɯ2kWgc/i}o{# \~*ZÝTK"+W)7R:xZ#I_oMaa;ɮ_5Rg{_wR忽S韆~tK[i2usu6~}&RMI+{?M:OxFj tk#ػWHqX{~Xi|Ka{]zP3h>mbFѴ\^ygn.w2W/H%gk,mmʓPdop#ܥʟުBOo=,g'ՓY|C<[sim0is_i-a97|;ùtĥeu<;ľ-gtB7)kjAƛcnI[v'9.RwWnެni7g/ƋcWxQfu(s}y$ [1a L'q6Lp=3M׌qI}%&k ;92CGI6V7}7"&.MI|~yxOw~k}ExĞ_|7km.Ηo G\Jy(?DWwߕ|4S^,l|AHo6dTdvU߰ǿ>Wum`z 1ֲ߯%L(ts@ wM̷2ڭˑkm)y(+]_ڲt>Ӭl! 6~7?R}_ s*)&z?A5S富߲G߈yᦼ-̗ỉu)i>yk ntʥ^ˡ9.ыK^~" m7^8Niw\,yЪ?ɑMJWVt'>>$ ƣu0ՇmyQ6$?>mFP^>__RSJzɥRI.J:'OgT_&KCz؇_;dfEu8a?WPkY?`ܗ>?W%ǀ|1}Z_Y7#hX3u7;6yz\Zi0G/o,tK,+ɻ?Hqӯ^znsaok-mi"ZR[rjJ$ˢ?ϻ̗Y^}ƒGuO^ j\ZU-ɓfIVpnw;JbH.<'=ƣ7\༱𗊮c4"D""yɳwzV~2Rnߋ4MV5zo]*AyaxFInb./2m=H)']ʺ>+Q[b Ru5ηyu3\[wHb_96n$ƪwM7vs|s÷&u&ǯ$X7T7ecƖMw n-}/mlַ49MC4xG53K)[e3ߟǵҨJ^g+N֧x?X{5HI&V<7.L0YީA~m ;z=|R|%KյMZ4֍~X㍶_N>M'o6拕=WdzGM|HH#[+[ly1ۤg~m3ZoKՑEV3 Bk[$q7ߏ8tn޿WϷONxGZviOr.|IũmI$4Vw}y,$sR2G͹ܖ߮Ƌ* mSq"<]?A'Xi^$X464;H)$ɏ}Ѷ2U\m:jLo= M!.21y7zIC ?wk40ƳI$+ 2|Gq_A֣V%{kd_f[пطӾ(CP&:^e#'9 2]Zcw`}^{w}CiMrWfcuĞd[F?vdxfi&8Q+^r^|mIHa`ym8TvۇLm{z۶_G𮷦gL^{H#;-&k_]\3w}YfR߯3  b4e#3[ZĒM37 syvw%{^ך+ /h5ifχ٣g\BѴ{6F$<ǍV~KFi*nIϚ|_ީמ&aY&^M:H^Hg=tr6]W'|FMh2Ih:ϼ5K6Y#&VsOzm+K=Q~ͮa]k_谍^ vɦfHB/4Y/ D^/ JZ6Vzg5ܩ; >$ghڕ9h| >dk)3$?}s.L5/VO v^7|LӴ+>++"/74$+l EgwӚ ׫3WW?x/OY4-s׌uRhmH0w?h"ͽdiթ4v˄9?&O[#AsOl^2Gq$sI"??7,~t~xɷ>Se|5qgK2YDw[XnF_ܫܟGMy]_AGuGOp%AE.Ow,og+;Mop|'G{o%w'ȡSVu5IFWbZLka^rC{[]FI%G'mns[y/ $ h?|h5y{ xA2,Gyn5y_~kA5{ PVz[..?3~0/?A.X5[{Kݧ\lU;w{i̓qyU:u~?E뽖kZSe_Gn/&R5^^IGiw$-r*Yƾ\EffDkGfH鵼Û9=y|Qm[V Yx6;;kOvWw}O팷RBLfD-[3xkǕZ*ZGSǾ5a_LXOHE[jsIg#|$ ~Lmq1yQ)ҧ~ko}ٕJ+o_7~2ž 񥆏mm=JkOڼcy+\IK}ʿf]{/#eЌM??[m=¿_8[zn۸~"Ğ5]7%6b|/j~cM4$s >i4tI~?}VWZ'5o[y+{Eֶ7hMB4^+n-4I<.yMgɱ,/}qӏ3fx> ӭZ0km3Y}t߾64G$+󹄻#f(o??+s}gW$/W:v7[;[hHE9atL16|ിo79_.y'5#^4s:k[/Ůō*+ItoT5ݛ]IZ= mW~/XI((5Li#u2k!M̞uŲ~c^j4bD7O:|n˶~<=įj:5V8Kk_s2Z7i޿ ݢo7 ?]>7|OmhfPw%%,p ّ.]ўfߙ#ʏ+ݮ}~"{;?<Xζoy{ Λ /u#t)f~{tJt$i[n8ړwk /ڗෆ+MK$/j}[v_.K-hVy|$^e\g'wWo˵恵Iuv}{_Ixo~ mSŋ[XHVrZ!Uw[#.G޼zT߽O>߄CxWQPAq?;xciw_: O.Z-R[ߧ-,ռ;:χoEjK(m?S,+}X}Lm\[]2ƳrU[xTMƴ֜{$$׾ۦxNjx&KmwB˩*A\+IkqouחFF<ϙ$$}b0թr?VXѕܤVu&yoe~b^? 8Ӯom֖rwy91ú_=,=%Mz~]+qo]kzE<l-5Bci=®of;d$œUᄊרM=4{𞨞+tx,47Ld,ce;O"G4V>)R0Oih⮟;L-žLjv,?̩ ڍC1_WI*sz]oM Nҵ_ k%FD>u%,zʊ;H rO _$msӭ>j> կ'/51mnEA$n<(ĮN.]t֚_'siU~F ^/0gdk<#L8I Ο摋n_Cޠڊ_[}LOʷuVo^ o};H01oo5hrJbKdhv$"~S]KF9hVXݾwY>iJ^goռ?]gTyWȴ|ދ<ϯJwmǾ3tx⇊k͈Mc%"߆w{ "҇'wֻ朹+۲Zks:%ŕJ]0gowm'hgO7ף4{P&c\,uJKf~;VT?O|Fn:m6 {hu=ͣ׺k(oC5,[$G9w0wBF杭ջȺ&M[w<6Y%gsWp«mۺ+ҽWwyz}2#MvJᰠ B2gMZ__S+\|oYeeqj6Ԯ2YX+oy&xy;mE-lj= 8G&֕g~xSGrV [Z_}6w}J~w.nmXͮf6Z> >T]w?Rz?!w{>GH=o^ۀn5;K6-|ŏrHiO'<FO]Na_&|~omºOiV'5SM5Ӥ!Dݜo$3%vBk/3Q#W5INs-|=pGlZK> +Mo}f|ˋ/o $3&jq{IqouYMMB__ jW-7I"٭kyϳ}ԧ(t @ 7(y.}iAFlUwdG0y*o76Q8+{^k4mj G:6qB6L,8CR,~u18gwSQď @D֨7̲M *I}|ϟkE >}__X_mxW7ysa--ԮmVkcjC6•RK߄eٷy_&}{lN|BOh_ |LKCK\K{%}n.dfGooo/+/gSٷMq~/_^)(W]6>t)tnVi&QwnF4ݶZ_Ռ+?'rz41EdX6&~=_L͎=2͖pXMrgɮ7 .j$rCK(#Et?)BT{:rZYufcw2Uo~}Mn˼tǟ7 fnYQbyУi=9ޫgϯ1OѪM[_qi')㨗M)4<0X8۷\ܴW%[t|ӵ|_\VDsHqe+וj$~Ӿȭ}q PD &_f6[>sy/]0w}RI<@9?=}%={VN$QU 0bx|ncnR̿eoKqٛ0HX[g)(_:-J`In44TIdU֓HI߿_yt_(Ӽ?cX?woG*N 8_/hм~',w_6!Vb3s@Lz((MNsL5㘶y0<]HR|ߠ8|6)a9m:4Kws'M+繍>um[>铑'Jmr y|,fquU.&i>o{nQJʤTosֺ%]c(>oコoù,Sm#ˏ۹QS}ksE{wv'}^} ooگ,5TTzO>oqqOi_7E].2)H_2d-~_!:|[+NuL? c1 C;ŵOZz--}~|!dO$ׇ~j^%񝃋K[}M -$wPͩH,lc˚o~fg]֭[U7-h` oKOW3¿x'λI9&=Eחouu[߹Foݧ_:M_Xٿ-U~EKj)}|Y`|Sx_K5-GC;8Mo}%mgM?1O%/x _||Hn/H ޭg.K;okiQqɓb$ӯs F~}zS[):c^޶4j^o..8Rdthd)[T_y$=?z- [M]7^OmҷI/fYcrYw/4FW宽oxfKMߍ|QkE)/u=ET㱏η[ܤ3Dd'̪Z~wtϖ;_w9?ᴥ6?Wg{ kn^>ug56M5˦᷒Ho!MdƤnDxEA.|Oi(t\w0gfY]̒ˍ޸N~[kz?SҾ ~~%>$?ƻV|dmE_D~^UK1 z%_+j禷ס忶o|;]W4C[Y.maHMCyI|/Q}BQq^^}{1Mi>-OXKkey>չM&4m lO,<<\^K N_s﯂?) Ro>𝯑-;˺e$z{I2iv'̲I'Iaj|ۯ}YruOO~za2}rW: ZK{1afhmY!xf(O`aCH~w.wkWþׄѦX-GgcqƎ;ý_.y3zҧ$vQ[xV4tOiɯx#=ޫwLYy m4dyxv:r_O̥޿S/)Q|s@|Jak-`CF]kɖI.M)l,!z뛄֊r{^Nq^Im7PYh0x.X k82X$+w +Lڂ?٭̓ҼjjZZ"e-?>!:K4 S5z[ݭל5Ywf7\K'gJrZ2VoⷕIJKTm<-#oYkAӮ[G \,kTy;} 7?2ҝ'்;Xh5?KV5+[fO;&ۏ:klY>hUK]/ncNvyǾ~g땾ٓ^41K!7kңY˫8kʹs~"--tSw+㾽J7n3okOPXVvVM"4yYO>Q.1[vfUϕk$+V8KA"?-])=uL+tw{4#Р \Fiy=u::yNokgߑi;B[/ڮ]}wnW6sYbd9_/瓊\BsJ-{U 9.`o/<Mu5\eW-wW-i4:׏LKXK ="uB۵yZAnI}egwMoo0#O7EM_Lvꪶ~CzWM7)jv}WϦS"@lVzsݿJQ=VO_owVtWf'.Ff_S>Ee=ào<ڎ<-m?__6]m0gv +]NNE]L,wu?o*e[rJvlAt?wa'vP*Ԭ;4ewgȿ/[sZH.eP_Lխ1Y_5?2.܏5. n`osCﱣ l(c&[בJ]SGPs%ȆI(v9_;[KX%.ס"(lz։H;>mKxwmis|w?Z' _&[  _CM=HvKONhP* l[뱈o=ϳqqW3RzFV r@$(_oS3D?Rs-ݲnђ)rb;Xi#'aߞ__ogE֞*.R3 DRZ6p3)kY% ϑUԺp߼xJV2V~}Kjmo$Hwv]yj[YI&fx{ij_ܭ~g,^w%N%~_>[ x(MoˬI5A2n:Gy߿mrE7뢕YE/g_e_Tt&, ~]LA%]BMkCw6y~M) ˎ몆/TsrKo?#f?_#V%Ai.0l%ҵf=h^|DTT1T\w#;oZkF1]OIto 0caG9+?6s7o%`<.߼R?w]ѥu^~NoL$'r. mw{Dho,xI)bEv&؁kaX{5m)+hăZ7Up06v{4K1:[(񹱓&7]sP}kYAiGim<3W,$m~Z-ñG*OǮn.+Vzo̙E_/ a#,͆2{_H#8/տ?ƥ+_VgTiG]<4Q=~@$1E׵{_✷u75QW~]=uw&p8>IYt1roޤj"Ե9e dnj̟.3ʛlqKGM\S< 9"BFm5Z1#?+ϞƵUk_?$[u힝֮ݖ3~[]`g\ #_L@ \$瞝ۧ.n򹸽PI#E4m?nZy~#UZ~z+!P'>PGЫ%iI O=_󣕮"{^~;Y<Oz浧t/r"t?,دI=ZI+*'$>uG,nE/O4~!O/ZHd=\^+[rk-K3[8k硠Ż{$Ax?4QjJeG8sbap@ԟ(!6~d#x93zӟW اbg);R>1?4{i)KDnI?RR_K Jl9o?)6I6XPF{֘4d s^ *2KI~ ۂNxVJi!e0y6Ɵ$~_g<DA|ff^j&Jw{TCbxْ'Ue֩QO~2Fokľ,mD\#A+|۶}ɫTߒ+MG ZFo2_֣)G`9HY1_4 JI]<9|U+2>R֫͟pm>Sw⋕̯(qͷ+}'i k,ɖͿWgɓd{Ymߙ3_mlx',QġF?j K&}<m[^OY%f1}lhۯsQwgmDzNm aKnGooOϛ:_E2esZo-E^Cg$[ϕ2.wpSrl[ %EkGߛkmo~ަk M=&DEtfyqI*mY9䗻8MM-F v3<22d$~umNZ7^ ~K[uFZpz:k=u2[D4ɷMȈتo}?]~k׺t~%? =]X-k]B9S=\/ȳ+?{z#I&Ͽ\~ۙ9w}Oh4/%%/2]5n7*|~3#MI-uK{t2w;KfG:|m܀Y#fks|M￟]kfwCYMJQu +]‰|X~oy^ngRWV򵏕>)Λ?Cui%ֵ] uh>idInǻy[yi4F^lqיPѬ4QOZX64of߱?3:]:cMi4vV Q\m2Lv%|]!h_%u41eJ#c' uܬ6ڌE򫞝Xru^Wue-Ԃn$AOƭH6֓+(mioǧ9ibNN6[p*eyvƭJhz ƳzE#%-F8yn:퓮ԍXɿȶoԯf}Iuӭ;[S-xRa޷Vx]EY=_NwF;mo_嬑+#$Cٗc3m.pȈ^ԛߢO>-w_O/Xsl$~c_}az7\૆ۭ[>]xɻ(9$ ȇo2WZXm;r;^um-b;L2p~e[=+);&Mu΍l8XndWi[ԼmU&׼'0&ޜU7Wjaf|~ltk׭O6 `ئDv\\IngGK}'S/z_w6))ڝ= u }OR.#Yc[VM=ݔl#˷`4X[]{-Lc+7-5<aSÞ%. Nԣz:nfn[bþ흧x8 qv}Q`1 mݮς~5'q}Lj4YKSu7Ymnkg\y{|(uw{\?7Dk/[]1c#v;VYmc{^ce{-{[[O2ͮìu݆aYv>E{ v]oߧz OSY%[h>b'-jnn7<ӔIz^fs~$|AIet"y쮡0M2,{}IN}w wylZI2E ǧXF^[&5M+HԼ5i覎t5ˢ:FyǵiMR o~n}_H.aKeQ8vu7۶︛ܾ4WQk|NXmn}*O xbUd[.RDuEzpᛝ7VK;1Ho4ɡf>u2;BcVn*Qz_ׯG|2ό.-tZMVf;;Sg6i#e77߮h[zW0y5+[5E(՚\/iņ9W{Lwq[κ.M:Jn>##C񶏦kZZO:ݾ>Y"w̚w{92o_@Gn{Ě׺gӯknM<.Ÿo 8'}di$'364k+N(B kM"|;~g^UIܛroqm_Zݬu' K;T2['ɲG۾̯w~NKfsEOhm| 7>?Yu[vՕ}g#iGxeV՝In螫 IE^/Q|ޗͳ'Y!zځfo?GT:Iix볽U[B𗇴_z- F+]QJ|ƛV0tu7܌VXrKVߪ]S濫w|!kme}=5bhl%HmDf_ݼ_;RRo]=SOOϞ_6Bk#h|r>Z:}q M}]2`-ֿ{ox5 ]X9g2Mk.G޽:V7s{~=_B>ҵ[_NN]CKm#Gov>y3C4g[Cxv MzbUFmv,ki~կ$K%x uۗWLpN/]qI'sͺ7=k;q]|:mws=#1:&-שּׁ;5-cgďf{Lָd2[3EY}/?ß?OFVK.; /3%[ݴ3y/suDnj\]~)=uk[׾|П|MJnEڦaD4;d.$Ia;\E8+9}~*|o^,ChU>G4i\F{fd}GBK N_7z_39T>&}#_5kjݯJg_x^IO4g^J$i"RQm{ow:pqz~o:xTl/n,O u2X{/e.dKgWN%e//xG[nUu}b:#͕Ĩ(v09.tu<75=N񦭤KB)/Xc6gڒlMi:?ß =׾&i:..妙6'&15l"C4tX=tnn[/Q>cq{_t5]$ip&3^Z6:B+a<֕/O)Z]7QoOo浰h5}LG">T7i2e˵]]oK߮ӿ C|IZ\~(,mvc/gfV?ƣ뭿ZcKo]ĿƟsu (T6Z$mƒ,7l?Չ<Ǯ81mcxmP|1G:c2Owmh{w$kDԩͷ6ZFE/]/KOS_[C'nzws#+~h%zed{mZlr7IF߽Z?EumշhZv=_-f3w;@d]ۡ_3+^$KCѶ2_麖u%K{>8ݺ9HZ|fHxvWDhjBOiVFe}w\Ӯ Jh\iwQ;eI#Ђ5>u{ZoEjwV75k@w㱑,|2\Xfe=k3b1#$sJ\ -ߑJ)l]ZB k^W 6l h rL}”klZO ?,jsxMmvXUڥn-Vto2fd0chy}[~w_J..wP]yy}'@<+)k-sŚ c)H>*̿/sjg#7imZZ^"9 n{Gn?q+A{n*kZ޳} m`Vg?g䏩M=FګiC?6e˗)go 7vhQ$CfA8-3jwL^1H&H-%ĐnKþ?ySNGk]kT]Io'̷gkeeGDGg7wNkׯwAJ#QE""(_yUa)]tZVzmXNSvW,rtL~Hw84IY ĂOe_1_; \fmLmv-h{VuI%m,ۏᄃ+S9&iiX[9H2u#/g=sH+bWQ$r"E^x2k2[ݸ/SߓRVJ\25xOV6v~'l5{)d;uf4?͟jWGKIU 4"0x4ju0 GMnoz}K V {[Hk K#UUSwVr|"Wv2Xs\ |Ly9ۻZS`c?~RXc1lh(UxBqPF QQ:O}|/_ g (TL)?ï;n@u'Kl/4fTu YmVVVgh0Ih_xR=?~֕be5k[tng` ߻kOk.3tܽgŭe6۷kF~V?:\2=*Ic]ֳXKok(]gj4Q[ӷ_]H;[h-!Rmv ݎ5ڿ*m+[S["w/KS}cy;~VS٥g{Y&2JNwR5/%2%knY?Og˭y|]w_՟ |m;˫|-^˽ID>1m[9A$?/ɳ}t|Bǘj_ OKբn{YdެϲO}>??'s|gwoc\YCwvMmM-vcS!oq[56X:obVѾ#HT4z1WѦ=۬?h96mo2}ĩ.[FM=>?cN]CNA/xzHDPȻFM41ow~rqP_.nn_J]Gók}>2AIi |$a]>CXN+Ehp1>%tۿCIӧ{'^Ӿ$!i^/Ȋ\oѧu~l|MwU4{xQnw'g6UO?"yFv{|%)  < kyR߷Gr]CpVhWrlx7&i=Z߸:~v2SӬ442VRB̫Bhdw߽wt(6&K $:nxc]SWKm?KI\o"ٯcC "-ޥIM{tB~})TWv3AqHɷs)dֹ'+k[xW]:G<'*q3BcVY-dxّwչ7/{ CGڏ|q#[׮#2i<3BO FM=?MRGdewږaUHٗt0>O$VvN;9_4dUI{,Vvc&ók}o汍tM3Ŷ~%LH ^ݴb_p$qݳo+lQ3nc6qiydOBCOM-?hس].b(fg :}կ3.yJClWu8XX{sWmwk4o׿eۚV? ~8G;{,>#;V{Vkh6#;/ɑe4Ca&_u'(ɻkl!ռ5˧zݎl'{vs3sވ)º 5o'U*{zOYY4/.Z{t׆KnY Q7[q-ͅ,uC=k{_74,Hr3FUd"7JIj!)-8__x#|[O.fE^>fK^Wәs9+k{GOE^l^qIȲG.Ǒq|>-t5 5߅nԱa?sHD-<:m໻o\ufd:οB7s|&E$ٱ)Kз?|[J{ͼc5 c|wRm&5D{O:_j~{xIEI;H|pB>yj>;];.Shg//]ZE lV1e=~"vi73WxVH'MCKwZG>ҰϘtI7&Ϟ^M8=+u>\msþT~$ֹ[E{(鴈mSgo}Dp4:=4.i=z]NVJߩnm5cjڥG2]»F]ꑷzP~}5yיehŧiYYv%3>wM3R`[qzyQqOo{͟Aṵ"]6r[jz;}?-w"+GOcsǛ^~ww45}߿ě)KMC]xmiXoFc]"4_mI;_SngGkD#8/= ܭɷcg}s~5pMO:__c W_~寄>3|1vf?Z}r M~dM69!deicYg|KxwɳaB$%뮥rKgV_O7CeioE[?=.>̱7pJ|'gC7^~𮳥R.|[imWmFmfmבq?$)dάݵ[_x<%x ju]H,mVnd_J-{K[_UΖ>~7?>]@x^6&t1gG5 y;YɆm}̎DV޾[[};)xo>'j.]-CWEФ#7<0.2>Э;_yI$d*s|omo_OshZy>*Gl4=3F>lc:[5YդiegUkvC ykҢtT^ߧNlO2%4 #\5$uy- Ec˩Q_vѲz?+O6Km?~(e_ x y$K}Zq2n~SMZvw_gԟN]6OH ҵ 2;[k ks>u1%ݦڲ$r,&ޓ"4tn_kT_JMtmg4^ok C>1|ě{n7?:߇u,uN m^iXVnaMa|鳢9m+ӽ%Iw\-g^~*x{DF}[KNuxfYwBwwƲIE·v.^K?úזNjc:fǭګ+$qHG4rdJUϸM^AMg/K-b]LE#n#[yw,s >3g)2!_}1/3'',AtN3Bg7+6:Iob0q[}u}rxW,z ?k:Soimw\~E$>ɒo~>??s_h>1g&= PGNe֯mAǹo[;ui6lGt_kά}}zw"\d_SE;ht{[oKvFt6wed~޲GU%3G& X1xJnz'Mլ]Y<s>n}a)[;-V_+nt?\Y^ Z POɨ#R-Q̍Wn^U%?ǨrGqZ,Դ+O Gnſ |)WO/itBKX5_;;kӢ|$;7xjѧ*Ua}u!7i}q߅l2#BeqiyZZ=­ks$rooI$GŊW7(ODEߧ4AU~zy>g[|*խT,m|.T׆`4-v/<,y]oӕKNOyn5f0|B;v>ϡ'4? <'h:ߍ|M5tyyuĒ7ݴ)f9o%nkr)^nsZ޾Zs4Zuj~8t_<`eyd*6-n/.\ ҟ:SZϒV[ksshOm'#,;Ki#ܳM2G'4'<%|X.I-v}?3Մz\^ZߪLnTK+mo;W>~h'wsM=%ջo#[+JK;t. F>K8F]c?(h̺jxBZz6c2{򬲅8kI_}5V,٧~x○j Wi4.FF[ɾmʨ"lww}J38JRV[r]߮~|K8O×<5[ wK?PY6\8)4?ZH?2:koja;߲8z2xsDŽ4j~&VHyƛ\]+5%5)$7>{߳.lB1[o'R1Vo/}bG|SVZßvI!Ky,Z9$wr+M Z"Uv6[ϲ؊x߼=ϭNxxźQkƫc^Ej;96 {Sc_8uaW1m_Zݺ{Lkw廱U&OD<ʭpNT*SQ~_NJ?{ᯈkZK{i&jɩ\^Y۬LGoG2mow|%+.ӥחbet>1exSJouS^Oi_]Iu4do$*mQ!ؕRWuGMu~{~|Y%ͯCVk*yɺH_oˑ+E}}OVݍӌ{w=,Vh-l 8V0p!ګi׆|k N $׷8C7;s$GJc;:uO#xODYcL) +']JweÛ:2ii=}[sy.9dv۶rSTU-e]_&߷{^/J[D㳃>E7ҎNKlgIsB6=9b\2oZ:K-1{9kgRWҫ*uB">ܯc>еޗw&Ta#UyvyXj{?7V8!b@x4%*@;UWozaWoЪtz:ۘ`Z6 }}G\3_:U[ь|B Xfv<,;:>:W_;Î1]#HGٖ87J~F[~sZ9WŚŅ?a'V,6+uB5e%JM~h?R/a*\U譧s^=ii 3K M*omw 6yw}po}NƱ'Ak\Z:u(=~H RNI_5wŮ]?źB$]$-) |Go$ݟmNׅW=w~njSܻJ:ρ~+| iMO௄oHA'p ?λ]mTyH8+*x?X|NiG?魧h,ӮutM)/OR9M-?ۗȚPέV7Zzvw m7l2G|!xfPsEe 0\4uInh|^79NNT[]]k~=(~$"B lc@HU5%:&nn!'ϟ73ۻU'mΕcaSo ^܍cHv=n<;,MM#*}ˎHR*Ɣ`CV׶گ=i[=UN_xKִ;I}sÑ6u_Muuy]7&!ر1]FZEϵh߻>_gt:W|_Gsj bVGes>?vgȟmyGj/׷}Zm~ϟ6OW:G<;g^5~~пnk^ݝ[퐳=C~Ko&-GƝ Fr^=lBg |_І?Ú߂<xK}o%Ro&cɽ͸߽&>nŸ|q[|N܏b^Mgg%6)q%?Q3%nwaQiGn5%|}a4˽Zh[R=y7gM?1.yBJ2>>Y%FZOkW{mƥk::&;xm5'6H,. %ZG!5ODQx '1h ㇃MuZA̿gK+bG KXf;IVYۑ~h#a]'AICz~,{9ZHo> Mi&:)㭉V׺z>"omj^!M|u9xfoɑ7NuQ:o_gG AK'/$FTԾ C[=d*tϾ/'d޿௅>xO>/5t4-r='@]H.;yծluk]s#\8OTjMsrv}M9yt]ϫ$3ƺ>A5/#?;mnmu(|tM$LȕQ¢F}_g?x#jZu;X垟:B)# r\qW4i}ӝ֭ǝwﵽB[i>[k 5גa pt-u|&Gxvo#H87E?=_>>uox?Rw5-v4~MmgCz|nyo-~ٽlu%6RSj%еO{sΣN^wjR,qqLv_%Fy<Ǎ>N=M;y^G__:ۭ25-9FhIvF]˻r^PgW|gW[e?O6U;nO{Xg5d־oUʛz޿oM[ !ʓXt~~>0{~k.wRH[4)RRCN7n]JoF*} 3Ѵ_G#7"sw7Rz7BOk|s$+jCcY$ ?\ӣߏ6R_M<]; ]W{ֱtguOݯ^Oc Cn۸zV3qݬ:Z5x%Q#)UT]~Z'e=~(c|L <wn}k1skvyߍWRxڇ{OQWϱ} t {o),?ǹ1稛`?\X irnu嬟ϟ^vz|zQzwWgmFVcn6>*o|?=J;ZI`; A6]7MmQ`/gS2@6/(%*̠kϦ{}wzNj+=zR\BAhow25G$%dR|ֺ._L3 ˒-`,AtY"^+T5gkɹ-nuvjFMc4ecHvn>Uw{49EoefBA"__#&}rXc}zǷ߯e+q^$G*]!ŭB ]//caLUYv@WfIn4 zGY.d{2ZO-U+7 o#;ˋqqlaKg%ЊA,݄O-f绁]jd#q:UOf]Dbdc_}҅}t^p0-zFW.ko UaYXw6?{YžzW^z,|K%դaVH |٢TuWڥmgvLB5oIS"9oݹ\>iTtPͷt=G󮸤޻? Zg5 |{[w̑Z菽|wwMZ+3&~L ^@]%ߵWcּNJ]P26RO{թ^GzZ]59}S5ݿ[Ĩvdcsdwn?Z wxٷKbKjM&Y X[j˫S 0>xC_%~pZu+[ .g2>qǹML{;s|2o6QZs$Oq ;fVi_clbM7ݿ ;a5`*g(udI'cFpq8iw( :2y+a)>mݟm5b=G5kq g?ZJ+\=w .X?΋%)I>y^xX ͸d2l{n\o׶Rݶ(eKv=?CI6[o1E#{j??nޟR 5iٲ{2W`[:9xv[i+k\;={߯ZD6ओz5_K[znЌ19q?C_8jb ԟ^~<קbx'8hw ;3tnN=@wz@9$uj'2n=sqzQnogN{Ehjg!$<_rh2M}ɈM={gނRocʹz'jz|pN4esل~1d@$GyjG>f .`9lGz7_/ֳ3Nd!`}QbrTrq7S[i$oo]4I#Mfd̡g<ۿ{?? V`ߓr1 nv_Cq1cdj-onuкĸ@I !ӯ#BV_rRocޱ/(3L—.z~zr~1xy'e_v+w>]9cju]r 2d[擌Rf3qZSoGoq5Ls&ݻTfvhDnc^0V >l?323~FHۯ}Ͻ7܋iSŖ>!5EdĄowλ̿tNV?ӒWS;U)5mC)׮oUbZH}tZK^DkzW6ߌzëG,E&~ZvZ!/_$OT_+n[Ye s$ ]l?̾Eݑx{|Ii:E5{IVs=}M<;}P=}7j>NvUUzJg3|t{C S:Xd_O,7=\龦ѫw{ocrK_4,IFc,͎Mmj#-;;y}RZO>6j~Ӭ@h:]}y :/>g̱0к$NvW:ݽBiʣ}]_T濬~Om!Oƭ(8,Uhxnmؓl{O zJcۺ[ߵz y.u{Ux*H}g@4Gjl1{y5ۤI~?l:GTF~_'NN*;k}о#M LԮՑ5(/8ɵ$j~t~vy|Jyu}8g4OZu BVm[*c;]Tsy#t?2I&UI=&Zm3LEIm1LJەXǖ[sҸ]_-'mwwV=ŁʪU_yG3ozagP/:F%+nf])뾃R[K ulm~7|sKѼ&խ͞mk$PO'ɹYY! diܤ}N}3s>(][PhڅcmaF ֩tIu70ydO3c('5#m?S|;Jiؾ%֬4W}{-lP]}M:<^}8Ui8to19{KZ^[G%p- ̖l& ƌ#C,s$wq^7~UhJQ^^NhƗuC ]ҭoo +Qa$.dI.O%|P_׮8ҒkU䎃ZZyiI\7PIǚo:IF>cuJV~ΜWnk~C5nbIU_Jr9] [+pM~w|޿_SQ'Oq->vя~z5]*g_r> V,x?޺H#ئ7]1'{c,Do/d6ykNT +:.OT^ȚLubv$;r~}g4s/qָ^Z$B>rT̪_j*bgƩ>o9si^̃A4p[]+3K |K~=J)+Ekǟ .@jZְneV9?,%cKgI$?գR.^ Y4~Q$[m\og+ ~712jZU͵Zg9u5ɵ)O3ۺ]eak->ciFi4mkHQfXo#CkZ. |Tԥ7)7um]\쾻},!{mBYmھR#oVi7/ʩ|k IM[1> 鲲Y-ccnwN?ک$ٿgzǬx<=ƕ s0Y7GMnfG۝# i <)xlJlttKu!56O:~^_)lQKIqcoUVmf.J!Uvߨ6׻۪Ҵ]U[(KqLQcI7Jwf˯^NŮYxP/ GóԮ_8w[2ɵs?cWwu=>:\Z+$Vb!y#]?-$"Im1{EE]ͩw.z?xy_ :Fk>][tq썗oydYu\tKrjt3%Ea5H#Pƚ᮵궷O} 3cgq5Hę/q{x +lھ_~*m'Ok]?3 Do-n!tz?m.<YXjW[g$Iuu]HX}1t_Vn;QUW+v]Wzł ?WP?u11M?{*6: H$߻?rIޱJawN%:7c۾k_mvGu1yBWD동^~Y<㬥W_d_=M3jV2ϮkdU/UcqorI GGf旻ڝE>ֿ#,7+ox+N5o _4wf}GzM#C$p)m3"y+wSs3Ej֭ ծ$73y^[DZQ$2>sow}y81WcAj:2 dߜ/5 nx;yqþmOӻZJ׮R|%}GJ{^%İ[Z=>(t#mCͼJdWtjCJw__}3G<ǁ>?xHuݾo--"o}lHwy|TcR]oڻ}9χ_4>Iּw FĢxO.v\Mk&x]?y6?U\r;(˹Mnw}Ӭ>1~]F ^Q\ {m-8S&iG"ipou>F7S0coZy,ef_/VȉI&t9Օ Z뾦?iMwHԯ_ZymjiriדI[ٌw7̓IJ:ߧ}go66 >ޖ+bX ӯnC_XYImMy(~^:9Y>LW~>3; H<5~n}U{`>w ]I4N_t^elEUsoށ]?C}5o|)l6pMxXlռaM>5:Mϸr4djqi <5miNyg2,\ #C&ϽF~zROv.gIU7Xgo:~}ZhK/k%֙3,sB&[K3M.Nڽ?\jɯzz~O9m<鰗E4oGwefɽGUx~X$w3]iI=m!GTy{>f{Ÿ.gcQ[/lŃ$$kqF﷼3ы3YCuO [߉'4?G qr4Y/ lܿ:y0vCn^޿3C?j-?3QFS- _e58!P464)nm->՞<~:Oj:/Zg+=Nu[i *K)_՚rj#7EBҗ~kjI6[OZ^j#隄IhZm~1u+4PUkxn"Œ2#iSHOԙB m{GoaO X aeWɳMYFo%cwd*ޕo_?ĺ*:*1+`gn<,ح-9.RQwsڼ7($64Vu 훯&5o9dKhjx]>>2[/3ITO߽υ~῅z֝;{M:FYf,v97S։M>?~?:oo/KW3,3i4S~hz7_.2mw#lDIڞ{Jk;;j[&n4o [?ٴ_W:Z73 nXUnfJmR2rXZѶ9ݎO?ŹJIVO~A2%sc~oL:Rdw3o!${VojPhIp@Rp_vFL瑛]͵vM/')~ }k9En~Weց#L~h2* +dv9^?pߧr&ޞwh3]æsߚwO~y$ z_7hz"Bc8}Nʪx{\˥rI-sC׎~΂$?ƀ#{17+$x*3?4J) r3(m{ߋ}u] n-?{e?{3m9s?k.0ŁmBt6`~@cw$ dW@Ყi$ރ+?M|N6nc@J1qqM;;._yR',Y=??Z{&Q]O',?SʗK?ɔm0K=S1{)NWۆשI> [GoVA+>8۸4o?Zny=o/XRiM6:ɹc!-#GS}!ޝQKGhϪF%FRGE]@_ְO̳If,B72qk)Z?9EN.ɵ0,)fUk8K1E5~>p:)=rzQ2mvc;kZ'-s?֨Fզc(Ιw :F #nuKIt#W;j i›H]7:[4&h>s]nؑl>O^WK-(MxMKa|'ւO;Lֵ;/xFBy`9~Y -w;9T#+h=[nxu'Ԯ-=E5?ʓ}IoEBR ۾"Gm'S"ȓq~y~s֚/ R~ro_/J7oIG={ZG-4Co?6z6O6>/ku#W֯Vo.tL+pB~}JJt,^] q{u?j}|k ;Ť1oLlGs$Itڃv[eGCvtV[zwn<5q<g$w:6k$Λ bqRNooj+];/kZyoeʫռfD-"'?9S1w)l9zt: _U %nqhEMo 6UwHmמhjݞKzh441k!hJ7K|<&g/xW\:D :CX\A$CfO/ ɷs}*ʟLȋ-|3C}q.dKdp%)a #Jd$3|{@?xA4Ƨ|$feFm37ݏ~wC;)Eg~-?x%ƌg"x!\ aڻi(_6hdֹ}2{" }-n#fv$>_!)rZVkTQj_ǚ/X|_I6Pt{#V27!v}L,Q鳮^_]vvL*ö޶^>ωuQy>o-z휓[Y.bFY ??.v~_]Nh/5ͭ_xWZk1mdK)-n.!YGcGxJ)Aj:/s8|{?Wnm1iֵ-R\eմ[-=E7-7no9UޓbI<߇Q9>_/J/Ͽ3jvj ,M+-mG/~9Eݻo|8-CuگhfP[+J}|boEǖVW_~G붷=oH5 jz^kMf H"^^i B.E$Pɓ͆I#xΥdᮊz_=|,XkzJiH)NX渍yַ*$.y,~:/,7ns,-K|?-7dQ{guHAiI"i$mDV1zEfƷx]/Xu鴋9/HG&is+G%M:I !uC;(,AܺCI͍B&XQ4_ݼ޷y20i跾AY4&,ut|m:vC8YOǯEns^:?iz?xzT`}_BmMntG~]g+M7}/W!Ӌɾź6|cuDrY#Po0h]W+:_uK^^%he[ľ$hl͜33~6]d~قov7צxyOq rZq, hˉM߼9VpZ/2JOoş`KEtdO4?7/wux%'&4dHKbsl|o[ bkσE]KZ#KS¬lc7|S>-~\ Gno jZ,Z<-֜~gӭmeDlLyze]o*-rj33~.zѼG4YhcڲKgt];GWuNtTw׊~8xg5併k^&: ɧkՒ@dScdz%fFGءck2j4#n96w|T+9dqn38ך_DƑkmX>}<6vڭu$&NUɞyz駇S_Wm@f}GBU׉[I4U>u~V\ya;JN}_r^ץڷW[>[i:N$Gtyno!]t̸-L2M;t}59Sd4=Nk;Z%ma[y.VYGV$r>^f3TG_OFO5ux*2z9/h>W!o_eyf}َ%}OnR5}VlV:?;}u_ - R?OCUФk{K rKxa˸CyθGzM#:n7vnvqoӧ$< yQi^%LjWw f^5o*h|I>U {'ymVN?C- t?Q]CW𽏂~xmcYjLQGkp++^Dy<>COVg~GKz[3Vg{o|Ah-N>ռIfom3Ðq'R-yAzTuk,%ce㙕w"$7u9^ŒtYg&IG࿇/Y%,i%:44׆%YkWJ7W]{yy9\a7tϸ!ԵKIl`[O E42]j}Rfݵm9ރ\B-a}ޯv)m9G~u>_اTն!t_[Cw _ʓG$2'l?&GM$ħJTjޮ/cXdS7\|9SVZ|;]ۯ[C}\y凔ue{=IIBV[}|}&?\[:ǻӢh'/1'ٯ&[Lٳ{3<-5eBmw]:z/h|w@|Rwըk]yw6r9zy?)4w^W{}?>-dם :~տ,D6ԿlZNK֣uQmhjͷ_u&? ,> Mx+{ p, [r_3sЪVOwB~]?ITz|,:y+~w5n ,(#fMǹt{*ӟIr/JM~h]M4eu:PA A ]b~JpR+=s *%rK,{J|vޚR\]Qnڗd?֤%cvgv$WcZ }CR-'šҶ Y̭#yj\nO:\?0g8kAX;{Q3;ޯF\?o4ox5Z(+OVd F0ei֕(og]:^-kGGͭtz:{,Sr>tqh]ۺ~jۿc}5E!q;* Q,cZޜj/_}Bö2^t<ϒs\0-?C*)_HosݞferZ-OTĴחr:I6QT;]JInXԧl:}dIg3IOjK_+eźJtn\dA _n˵~oᮈI&^ z_6,@!῅ϻw٭͹o'ZZ~Qoh'?<gJPoϿO$Nٯb^ϊ|y#X'z+7ib)ATsFRv+-ŽܷZˌe ڞ./z&F+ڢ0UWp#kxק]NKu~G-߃+o9w&5_yo5*yAq]'*go^ItIcy|vƟ{ouKwb$yxris,Om W?mg3w|1F}썏)l96w_}w=F-+n'e:_^d27msRUo]SX*Cqd*F+"nY[hՋm{yBt[i.m WyZM=uT⿯5ӬP'poߥ%Vk;e}Y{x'MT(&XT25ﯴ{e@ml ǴF/X׷KV 25M)}D'V+nZ*7t9BQկJoU/aŸ=䖩1F24ݿe6ge}~*D[fZg;{a[$N2$va&pՔ%ݕXnvٿ3t4뚃XfRM_:9?#hd{}>2pRU4O[s;m_P} ˏjv:Ž>uk)mg-:fRITܘQ(A/M>Oi+o_Cw7ouy73Gj#l?ؑ\즬޿~Wۡ}Yy/|?h߈v:+j~9<;\YiZ5DUDy|o$qƒ&ƴ6F_>7go:oԼYmCPⱓY;Wjy4?7ΐ[go"E >no{̕[+߾=>o|%4~xQ*lO#_-ܾ$Gzyim_C;;t܋þ? <+my._ >c+kWn"4#[76}8 (Bv}{jTSz=~zh='KV/mo _.yx*c]6_XdҶGyz+C.M}ח9TO=M> ko'CwjVjkoxq5j[-c&-<ɶ"C֛Dߟ+FV}WmK8.-#mlF\4ڄW>cH̐UK#mtݽ]W]Ϙ> xUo4_j__N.nGoynjﶹpq=碤fozW_9cDOa> ޴Xˤ_zmnHf[by.˷I>t, fjN}>-xíg??u-b߇>%L?6u41±#;7^d_yi!R2?̸EEg>nMNE[GmrƗؚ_$[]sO,m_pt|%i#?[tOO_eWĩ[xwŞ"4OLF4q4 +YJMl%H]˞+{uqJqz}[O Ş1iGNOxw2Cp!tjkv-n<=[=d鉱!D$Jr++D&c?G[OS9^1˹Op5/⨣Hmf֤6Y. Y5o/e)jG"K8]xh~׵)'n4:G,?\%oE4u7x>nS'#> SMWX1!u#\^ngP[fvТ%xW-ݯ=> ԦҾ]/ ue[OKUfo:7Ԯ/;o7h<>gț(Kew9|+g-4/_>ִV٬ڪ5vqo!twOo +(Emǿsn%N:-ƛ\Ԟg03~y3Io\f;;?C`şcZ3Z;JHYgo,'7( vT)rzt~ߍZ i:?7uzށ{HX[OiO5ŝ?=y{Rim~F_}ᯈ:޽ڴZǚוc źM7LyYM>]ek tj v,mUĒ6}OHtӟ/_K"i=j zrXM^m FNVdGU$_U51j?|+iw{RiN\Kin?ٷwrc' IyROݺm />1+ZXwۿ;}Ջ/Ɨǐg}1ͽ<~u?Z_Ct\|_sؒ.<)h4sz+{e-ߦ˗h־"a4[i/v4si;n߯5Ys:ܺ[FHnw(U\4_b⤯e^j$rY0[o^}XF }^J_b6y{"-|F2*m⵩UE][zꈼ-7ljQo&ݿu\_;fL֒/s]&Ndܾ[>ЛNwVK}| KfKT۠$偷>n3mo0TѿWo򼸣) G+[rKfA%$wgoXq9xʹiO k]wnnjK-6/ww)[Ҿ1w`N"9ݞԓnn_qczm>j';;^޿56#MKPfHTܢ͏1Vf&Wϛ^v閚dFPy{OdԤV,WNUh$Y2*OڵwcXG'S)RDKmcMBE-_Io#̬mWOٸsdJWw4WG*ΝFO{$+NFk%Ē[mdoy9#Gk7.:5o:=:`nrz ʊJJDAuY*Dï 3 L}pz^^PL~%+]-AJIdwHws7mٟoZk&H&BeƲl2$"}pkO"{FY\`ʔûoѶ|"Zr/3 Yy܊_w'Q#sMdk8DI$]#ehd{єv/YUt[/-AWxkwI!mi摡 Qv}6} mJO9=DIcm;mJЬ,&y<"m{GMcv-IYgWp$,2G'#;u.~9!b0:8?~դŪr.g:Λ$&$;~n6LZ(.g?ߪ8x~w>Ai: hui}8l'>dKo?S7Gu]xGmӵoaH/Wv3#)M5&W;9;ysnO!o=?ǜS/H_ d)9ۚm7֍݁0c±sAE1>փ)tV]R}X1?Zm*M@?[j"73,q6{V_i+[C@o'?}sXI IoeIZ~_ۦە%y$~ݿh_J2+;T r^oucb(~fNP2T+NqVI5+J rJP8s\{Wȼ[;@IWqn3}~5%bcLM{[ƤS@L`}sYe{\&,q֥m8'=3f7fG_?͔e.2ljКi|(|džsMYdf2I:? qCӱh3M|]CynyWsm. wpj̷wI+QV~ 7;%[e{gOҥ:ZР;~?zm'ٷk? h1mHn <6O:}wu'w^b8]u[kI.|M[GoXSn|uռ,r_:sOW_>kwZU|q ŽB`ӬV8o3wڮ&OοԂJ0[zsaO~M^ixn[huQK1qg#{\"GnTjʇ֟o*?axvPvKOsjYe_<ݢWGJ?f:ц ~ uevrI碳n_'?G_[usy$drw󽛎gO  +.ySk߶qկ|MzmDSCq$arQYvfOhmumWkmǜAZ{;eHNĉ7mUvg%vB)}?syoz'mHdI28c]c9E'}NYOng F 9W۟yq9N}#guͿ?:hŦXji_U=/t"d;WR\k~n'KAm⺹dk[홣y672CfU*szVKO͞x; `A&~m۶4c^2kfie< \%-Y7wJVV?KU&Om; 뫅C17c*QZOy~$pO< 2{M#JZN|ͦyb +; >G3I￯~f#o5%Hc20mYDf_3W|]V>jկcdԭΗrdVWko3lUZ}V:?Uqr%mz~X|_֏xEMGQkm䑒I njidzK ʵWrzT5NZ߭zcݨۿ|JF~͸-8Y|~_l贝"Z̰tU+ }}z`oy̙^^/x@ҷrLs7տ𧏭>4/~xKSQ|wq̲2-P.h^g#6l|/WAq0Qc3oUjʧsg~GI^)Z.<+K7\mf$DH\[s\^ƍJ^<ִz=iϣh7QSV=|sƗڥ)湓MRywU`e+o&g~x78Ź V;F=q{-_>]>'HuJI6maGHxם_&a"${6Z{Kt^[g+*mffwH/_Fo]_mcıG!Bxe&_3omݪ?TMj~iV#ܦ{qu$K?fI167DUc[GVwRnL?gy>3wE['k/A „[seHW;T_*7XSͽU?9VIۯJ 5I/ïv,;KU7W]|ޛTmźݼȰL%L+L'O/ӞtemקsqOM]̋ -Yy\k[$8KCdYsnhfϟok5Mߥ>xEƑX!.KqZit2Eo,+*GB'}je~Eώ;iYuYr "ۦy[ψ.<׍Osa|&{;Ms;8jl&WaܜoWM5Noo/iX}ƾ7NJ|Ut/ǦXiU?yY|$0;ʝ*{Nk=b99h/;~'56'tJZ~n|]GmqfcᷚOo7;ӌ4#j4Vk+/ 57\&ʒk[m$_Z4ʳm_of:R彶{]NԃWM[b F})Ldҭmyp^G 1qZo"l|Bu$wo߯ΣJN>] ZJ:N,7ww0jzD+IEKP >L2;rtw[󿡳GCg嶿WdkU%6𮥨EOڤGᦎ7iMI*5ӧ_dw xdO_yE²ӿ}W/_O\mf4}Uw#K4i p"ɾG[a8S7/3Ih_뱕Qz'7/q_xnK$) â<;u3*GwCR=_ҊN(:4ỻ GNEsq3J\C CtR4>;ѣVU笮]m6{Cj~(մ&>(?"%I$i2&5v|J]sZkh;_~xurKѵ{n{.hc[|9Yd+uRV_o_#h_뮷jj>J[٪GnQQ>Vtm]~5O]u^,-5+S",5/G%ķwõR_랝Xs>gso_{c|eRc[N[X2te]mǑUn߽y#<)rӧ{~NKDY`{e ѣ۸1,n_wGYw=QW۵ܧǩ\ϩͬݽv5Hc&&6{B;!x;t[> T,m>%"ѭ>b#C3WG[_Spwǧ~{gI]m8 w-|cqrY5.{IoތF>m[FPT߇OɟIj>.|)נύmum.[o*Dp2O".ՙd؟<+57rA:o_/+E:IIoY>e{#n3y+y[sw~Ýe1.t ؤLyӷfv &)YIz_}m1B6!e#|ήRim;mHV 5-ǍvUy~8^joQ+_-K**ҬHT]>Ϙ\nߏ05j h.'`ӴƷSÖ G&t۱_#rO9Qo|*S-`'MM~թI\/#y?މW'u~jZveAMZ\ء$_:Xeoo&Δ[m~Vo}oCӴ<+i0Ck6-sCdU)sl2JM{T 5kN#o7 k^*`5羏R mIt_c"WNsTz}u"t7^*_H|sO i~!5/R_\<ƺt7 ַo7.tדL-ſ[=:P^]٭*rKt4>xN7zcoN6j&YIk &6R3tǩxj>˕"'Jjz}]wV f=B}RK<ƸXi|=j-X0g8+ΖCag©~w[7񑜞'56od٪VV+N5'-{>IvNB_yooӸ y<9<Z9ן {ݜcI/۞NG@/a7ko#[(</ÒHCR]4ͨywwgWOiOݭEU9~nqj&e߅ɔ˦B?YN]H؜.]w_yb+JNxΫ]_0[2hcB 9<~}z4̧$nqp=zH?[29gI0vw5̪[7w_\kjJWfs|ۊp TS(N]v\0bps_{Ar֭%,S7ߋvP31G"J\_?Rk:fd8L[qV-?ZM7R7Fcl__qF7LW\idYH_vuܮI*]վn_ǥ'2𱑭hGmЉ>LnQe\|?ڕ;Xmx3eA*WEunE]Z^GkQxL JI}6߯ ]^bY#evR^M/FXdYk:Z\Y<؎2d^v|%4ĺ_mm g|v6}_3G]]i0)HLL[(έ~-;XI4/e[d9?w [y̭l}Rۺ?ѕw0%ʆS^0/|+ct}\wikߦ[wu߉_ u-G@mxVeoqq"/'0h[o7 ɲ@͚2[?]tA*n][ߞsX5gbLmViڭ!R?gyڐqN'QZ[sWOQ2rHY96x/ǯ/[i$}$ЪQH[rziT:{I|w<ÿOuPҢ4F5븖⿺[e9'eȈsyܮخe&^%t{'5o7ڏ|qZ/+V'X(!T6k #}>Km?rm#YR4CNPF1lu(a/}Y_oq\xCM2Z[vLr[ FVHRů]_[ڜg~=wƍgfKX[]nVo7*|ɱ_Y?ebZ_/]q/>8񧄴Wύ BM>MjFi!uZF~r/ڽL i{EFi>[urԣ(׷KiikRV-+H8!D^=#кgze4j>jkjz._+筽{/Z?#Y_Uv+j`ymu[ydFuKu$ݟk8^|s;9$lʾN]M6|i#WK'ZݻJnN{t#-Q|3)Oj 1t%̑P}pF%tnFvry}z_ş>:9hXG ZTL ;7ٳ<_&*SM'wonSC~/lC^xoQ `zchcMM )4.U/{q\H^>|2:0XƑ{Ķ*ڴ2X̓[ڧȎ6yor$h\c\n抟U䋢oW>#R66ogqc[ٸa|6Lr<79=׾}v  ]~k?:^b;M~GO꿼}i_1???|$/MKWpPID$UF#&ULMƻ*ȕiwC}m23C ۶2v\Vn}۲e;X 6F][ܬcHdO8o{˛ר[]g% ~mbVo>i-mJ-y4]/N-}FEhX~""meM]+)[߿N]pH$QiQFJ2*ʿz2得Ŷ Wm!XIsmr&Og"}ii^HEԽL?fxh۾}AjPí[+s2܈ƈAb?&ѵ25n"FcOܮ˷Qߋ1r'z}f{ş5[NC%w:Bo#I p&aGF%仕ʒ]ZGh#xX4EFφ?7SLTܪ՗7nnhċf8.[swok6M5m F̑p\%-uϳ \[5ѳ?[sFa[&6uU Ή$}trZﮉ~.RMwΙ> bK2x|a;^,PEs5vns23BUНhQct~->mm5tϋ4[χ=ńI"|WtUUw0~d7-dB|V~ס^&q%O&K{-|јQf;;2#0iɦ<UdԵ Z16|<|40C #6'Rù-o|rKsϵ(nj/x[ö?M4 Vao.ݯd\4ro}y.ңUIJ_{[k=t9V2i_2WO 5o)eh?!}.Ei,dO.(]&O7G Ir-EN>h?*k>4Eմz[]kJcּ͞]߾}/,s|ukѫtok$|iW|!u4׭9=KF-vR%Cz<]RW ܬSYTog/~'-i'GVF8䅧w}IS%]ǝ+ynO_u8֤o϶ߙǟS]Ѭ|HWaխ-&ݮol&h$ɖ戮w[?_q:ReYl|]7?[V[=34+][=ҡ2zFbxR*SJrww6xU~i;y;Q:F"IٙeK&HfC~Kt(ȇ**uJWZt:Rʔ4#][SڅKzD {zI%f#ďGwU_3GܣSmEpTMO~q e2\2u3y&c,VW9W_Zo%{;_K3tc;߮;? ãF-6܃95TWnz Z&mEI |K=@[dבv>6ܕu| b/.A.&slƊo˺M|}+S_nt{I%*YW!Ss !6eY{ni5>q%.:v\_f| #-XEy*6S3͵Rd,,ᑄq#nڲ4c6unZ?~{5}˺g-ngF"`R!hYooSnӿk]M~f+UZ7o4<lYu&|yyU{|̪O9C{/kɝ ßjgsX8L,ïY[sֺ!Ǜ~W rl~cg 27y7w~_Qw+.io7\U-{7PMnB*_漖]{f*;#Ny-a3a&XMkH]>.VN 9F?s=2X(b:?27)oTfkYB%]-1?i7q'Տ<-x2UmnȱBN9;zPk^j? H<;KGXgFԦ-wyh#o1c67dogD)JM!Ek}}ɿ1m3^v_ہkcYC$WúO&k.Ud_g6cH\S],uNUka5zݤ:ү m5m9;ڕq}niTV|97}}M/x?>Y?ڃZh]3R$o%n.t!ա_br'(>?5q_hx_zLj4 mY?i$͔Br[2tNMESt<_xzGYt˒̿iCޑfv?q\WcPi>8湏i\=дm "=5w{)N];y|K[^>u}xHm.MXY?;G;7wȗ75]߫׿oT~?3Zρ%wVVږ@ hl"fo:hRv\,r}]7t3nqkᜟukZhu}/H84o5vwHv;H-Vo_/U -;zO+-heᦂjZMŽWC I -.ܞr/[39QZ߿r*FQ 6^Ý3Úf&*zk\Ό.(7CILc9wv>D׼ q~ kT[pcdyw\ m-#xqQ:[k~,G?k2x'Z^ïEZ~&52=ĉ$y)4TpҝfRݤo[;7ks5ϋ/U-7M_>#諦c:oMS}166wH L$ۧ̏©Emr[pk'PO|/N[Jھo7Ylz|6c٦r۪kdr_=yU9Av?J-/Ztm"^L:n2ۤJO;<%G>S͕' -xOzxoS6)#6+soc:AKxd܉'?MuK$~ >ic15Ђﮮ6WF~ēr?Z{3i=:79kcwi]Z 3y36kuYGvw_-_O[$(c73wן_ZV}*]? Ik#WinlG_iUO]{ᶧ*ܥD+nJ &߽W Db~}tS[:|i&t&]ݼ7>\MӢWTQ5KTvgZ^$ڀRWv9]ߟʫm]oU.<㻹gc>|i78QzUewN}vP89յKY#gRVZx}+H[idwQtt#+n{ʯ'ߨNj|eCp8mSu Qk7˽ M$=}wz~-;C!,?iwo1iKL˂YG.Mt_d{NM,Ǽf|y۶Evr6%%ՙJ*;a檰U%?R-&"{ 2Nȋ(n?Tv2I>"ͻs/U _PjӮk+u\xN6NBoh{ٚܫ.K|>oֵF<4>RMԪD\?/omEd5ev{y4pdߔҶIl ߒ;KiDBտxs~oe[p^O]?<[>U֤ CZ_Cm+w2ٻV}aҴV֥MrܱݧTyws]&ƩU`+ڴ'_b'xP"Z#XnOW_ӜWLl{7Ӵrku/U~Sמ@ݷ;p^ooԼ #|cC}I}TPRsd`_iYX!!яwz \uRW?@b$± ~Z w[7Jq\nmfV ]#'Gwk[ثcaC^gMUH4q$D2+5LO1~,DR\e9_WڙYP7r3{rk!;4ĖyLl1VIRVFf g>ZCY\ۥ#ڬތv}gt qtwR^G(,ldI$\ǶotƓ]ށoΗzSB}+4 ]Wo[jmtS}V?<W~k]:|gC$~DeeṱTmroV> IMݷK=\.K];7 XXj:bh-ޝlɋmEaeg|GOF8R?7;*ƅ(}wߩI5w]6v57ڔ֮&ϱ"?قo7Jj*?Rsj/#6Nt[ >+kD Q.D[uQK}$;6e|8{3x28Q?nZ0rN3JދN#H;s}O|ɒogo֎M02zzy{Ը}@^3ֱ:ɹXm_JTY%x4=NL}_@IB[r$q{S{șG<뜎&\أJ?ǥ9AǿDJٙrKdR99Ni]kJ}?4C'~9Oٵ+] 3My,4 F,2C$fG߱FeEZ;k]NQT%+zORú#Y]葷m7 o$M[̼G43~xfGM')Ŷ_$w.s-,_γQ&3$I#"n"~fv"9z^ut/[\蚕qaAYcڻnuVi^=/sԴw\}0i3iZA?%vg{ĩ]˧}N[zVBѴcgv3W򬤺n>q&w;!rarVO`7m[ׯ#o)Ԯu}v'@nt> f{+zo.6Wiծ!M1M JEI w;>N =PK١Zֽ8Z[lS\KOMO^Ob"UCe@?zk29 m<>5'oo6UOow#5KXKހPĠUG_^Zn/UX蔯xo`揯Id3J2m[&Q|=Dz|}ziw15oi^4$?IK6/`u*\pX7BvΈXOS۩J֛~aR+OGilYG/-m9 x$M䪲t4o/Lb]?VXM.TGCxVoc̔ɚҕk{y5 AYϧ[޵eVfd3C6+EoԊXK~^[⵿6љG$=k6/=ޟyFWKx]HEQhzTI=mYV֝koM$i 1_*xyikT*|G>oBWV}X$ߒ<sӊ^~M4:'Wbwwۭs ]/oN&Ѭù6!-/ $gOK_*z>[Y3F&8[H0ܦdmpOVusl^|mWӧ$S6Q,ܿ2;~^oړZ\dabBWio[Lg}BBeʝ++me??ZR$[mV;L7UVHy$O3j)oM{ᯆ1%ދ=džn%y5?DsVJ;׹w}qr;#g @2[6ˍF֌߹^{_$2E{O0L߮yEuSv}o|WZZd[)존[uWknV;YҼPvJwܩT[y5rOĝ?]^in&Haqj+-mumq$/,mlЧQ 6}xz^~7fU_2_uvix/] 7O<6莺eέ7n-a;\inΖ>H+5 h@xe0~ [G|i6nX>|UzTd׶jv*ɻfզ}#an"I g yk4{ttF|A[Y鶶֯Wz7gkoiiaoC OWRMY}տSm>PdX{R8s4y7pȌvEˎ9ot{_M{3n4i^j:falZ ,Zknd ޼מt=*[yN:+~5txRvumSJV3ɲ{BGIϙn=fr⤣{6i5k4/:H4Nmf pF/o]UҤOf3;fm<j楦6!2K-vy7θ}}q^{~SY|(fAC37\Koo5C3K&fHiz#e2oD֞n/n_3W7rUP&x -rqR']&V"F$tiڔpC-]]y"G ޟ7~~ ?"D,'klYcfUE q\xoKo_Qm7u>g~a$ŧT&2Ffw>rn:Vi^׫;m{ǍĚ0UTy%»}㭄}~]:?YeK!C6 lngW,qKE{fֺ= ?t鲙`Io+b)>VX~sIv|LڜN|D[ mQ]7t9S̑sF?{V;:GG/co݆i75Mc| xK4"յKm7Q﬚YhݕlX|klRh}::׿MDO}qcwg>wd[8gDsYVI6'e*)IsnzduZiwzMCNټ9{Kټԗs~ͻv6 WSoMV;xSO5KsE/555(gfy#wwGoܤ{!%%I]TY׷ho? 554oFx}xkEofPHI?׉rEB ezzcXbRrz;jZSVVmdVM3*n729kIo}y ψOqi.乏}ǹ.dpƅwɗCyZ=N㾭/>?h_ͦ;m\<]xN].&U6jyj ̚4DL&_2OȔi~x S$w5Kt5{-fhWk}dv<'=pbsKR:eÑ֗MZ̗׭y-]~]<yUo޿ٽOI,[h[Ye]!.|Ek[s-QDeWO{)sKjm+߈g̰jVfy,m`?RSz̦UHu U#~>~[&|IC>tAIK-;7367+; &ܤ+Ͽg[hGY=6+C#/Hfz~/o:OoF{&{kkc-1lmܯ;Cڗbt;:{{{-E5mZFI&Lm$r]{|6gs~J+yk.VVHhs5{mfWy]|1uNF[hfلjhkm:~2?n-oS|>_ ,]7&{Yn&_=n'ˑl|՚oĽתצ< 8^6>&Ңv~)i kHNonMt7>[{xӗ|._I?;g䵺"5}"!V9]1mo3slKkdd!GM=5oE?߶7Oڌ:_0j23ͪk[ddȲ"&tGszoycvSTI/:C&;:yo<$Vqm6Dy- 0OWWCMUo%GԭF &Ueo.GN%*> h[*-mfq]:YռnT[IX>O}$a";#Vw+2\M?S¿nla}B?i5v1Z4-;h-Gz֏V->~x0V5@>el;pm #g+zs?ȷ׌@[ӓ'yY 2 [>oi%]?NM:F2zs%_?͖s'zjϽܫqxGʭ=?hB[gɨlI\Q5dl`~?4)&yK[mw'hݵ??|YW_nA{a`re ke& L3*Y!?Iŭ3Suύ|7ϦkZ%ϖ9chx}1-*髿5Lʻ_9x !}Ԯl`h$٦m8w;ޏb>tTG{(~5Σ^o(ۭbOv!gui7I-jC럗hV't '?csAׯY~?ĹoC2Ƽ2)#=?δ][![*q3h^bm-V]f$iI;Tbm?Z|ْjwé!&7<=)8.~#:)X[}r>XͦՄW ˎoǽ4[oH%*Tܬ7˼{uPG5͟Mfk2̲B:捿fu]X$23 oVEݹ[w4w @4mb|Я/!7Li8,?lo^<nJYTܰOb%̉]'89@זPj9y f ;YJ_%_ƀ,˨]Oll58w[\RkqנvJٮ4[ wg 7w˟޵n/#[{9af|Ɠo#vd_Y[jw$W\8 oE N/M_ )d%^[]YF>Yxvdf[ɿWJouo -2MT.|ExS;xw" I237Ͼ#>"SINJ.hӥWp^4VEo5ƙb5n16Cͱ?yaL+ߖ/KrT.`ӯ!Y-dYFvVdVumڵDi{Òn׬B;-E_emo~՜]gk}#Oxaak5;H_s4dictRN)4֛>|м1x߆#[oiʶvEɻGn$ؗI) O NC%̺qfG"Mo}R93#|@-]n='3 ) w7Lo ;~iDdhS]}Imds=χby~R\=n֬u%+XUZhv0Q$knY(w~}}LM^97~1iWr.j]٥dy.>X?vrOܦhZ<__wZDK[wy Ƨ<HZ2N>b^ 6Oc2ϑוEۯO $5X]mP,6,r[M B>y.*[6uޏxZn_I״FxHa[y3t:;]tm%VGu4_[gxaTHdV0{~Ϟ~%xg4hqh<>g M ,#lm($Qr{jv?3NHE=z/>+[hqonVOX?>9_39:|Wm $twGS\2UUdQ{ D}.n2PUĚ>4hu;SgZwI2F.!hmh|z4)w}sʥv;_ -3̞ wg%޷ZegY!o6:5`'u[=uo?w7F߉?eGM|EoXiX42$_hV-l?]c}+.5nj|_~5_i*mͤGZZ ponʸ8N\ziyys&|~/|QgQ? ͥXYjKwZ 6kjFחR,$s3'εzNE~Z{|Rhսo 2i(Eż7iG?<\q~άwlKَDՋ?/5u:gtmZ׌l-:l,u[o7+,v{bG3&X"/ wom,ce󼽋n©U^Vf# yc?79Ca4VE~nM1M.e"|Gj*S.kZ>wz WqӶnكOn>k]RuSAXY.f%Y|0ۛW-rϮԤdV|1w:DMiwYܩ.:|i|SыI#HYVr[[_3o.߶86#gI\Occ-Vu6Fwϳp]4"̵  ÷K]wW*5*80w;nfM=7c9sG0Yj dhoxY!ݵ޼Q++_遠4}>$$tXU}]'oN$"T+GY?S}sG,'IYM*7RO^_?sz/[F$gmY6cgn̐-ceeT4wE ;N:d& `2]H۾]7Foj w [m"y[.`?m;s;}kMtA5?ْ[x޻ܿw{\ mAs#Wi c}yz--`IqunmNoVeTfmѣm'ŭpi^'k~Ξ"59/7۫dHh!eX'Οġ66ӧ4?Q<_F/$YΒL|o O6񍖣\1u7bphoi9M?P{9~ xž!We_xoQSmKS/Gofѷ'̱8üz_VvîjPQdbKnc_2I7ٞ&uIZB=W_qUGe}nV?gx,-|o}·J"x促po'Tշ\oSGo0ԩ4Ouzl<؉uۮsм<~͟ #Þ+ho5ۼ$oGԟ?rWS"~_x;_ /mz|go$IeOm$#n!Mϒ?ΕIou:E\Nˢj7&Ke_27(?TS 5Lz-h𳀚vWmUh6$TH_˟Xx'w},DzT2jo 9$}>s[e!r~_֊p/L)O/T' @e?wv}hRMQ}_Ҷ.cpH3wjoJw[.lѿزTMI^UP~7^湤߹^K˲ˢZ0?%I"@k|ο]ne)s|bKg=R焖ź"/UJ]ef>5,3hOm6cג9N4W{'jPuZam7J2,Z9FVc}o>xo}s<}e1[Yڵok)}7`%:%:F AeWwmsʔZ ܧxM ),!^UvҷķR+g)u9I>PHIHaͿu_wGmv^2! .ߗo}G5cShI]L4c$6:eN n&sLzM輽_^{፫okV3vGnRJ=t6(I$&G,,7no.OW'~yQ6zO&dy.P F=6 Ѳ542^I!h@]m{G ?u1etwAfo{hߗs|Qc/\6~m7@rᱟ3eVO{??[xOL,}ܪO%ww{ԩf`l!_=~T kO\BonI`%h#>]Ky\\5<3khȍU$9c-6޿RȺ}նtG gv :e6WzuW@*u_z65]/Of 4h Yzq遛&ݕ˧7iKAT!;5K )n5n +6jr: ƭ$ y-~oۏZXFIZ4_es?X^_[JQ|kOE4}v\^KQoduxOB[(yDm<,ǶCnquc{j͒νVݵ -_kgs<7X5ռZm u d!o{^~^v-5>CFC,5{Rk{c[̭ssZfHbQ}n7egϟm <+Iciq_rƱ~ʱF]3M33I'<0XZäx~:4Iu44z%7i̳yIhM]JjIl5~Liƞ3?xK-W4 OoxW'eT͢MaO2Ր;neo$Ӵ}n}[Z}/Lԭu>y,."|涚$['uTIw;iS{k]uSӾ;Lt:v^onfibkI]'Fo}ﭿ἗Rg7d_x.m=%|E]kSY&ݮaɳDh?tۑ7_Ǟ)vO*xJ!xrO-?۵H<,]Ɨ]Cqgsmɚz<-<.TߏN4s_Y2^iזw=M,1o_&kKi- 1IaFZcV~?i_w]|>xSX%Ѵ}qg pț٤"T_;l~Ds-_R-4{]{P-׉WSŴ'6:\.ᖒWkˣko wq5Ir~g5GKK_ς?4O( "1Eԉ4j^[^M.${9c))5}vǥ$?蟴_iz«|JM5[k%xK3\ii6O6kiFG]hݵgذj^=ݕzmpcXlkCobj&6F)Ay[ w'Ěċ2ާ%k:o5ɧ%Œ7 s&wq#3i̽z$[ghx\&h>д 3Ij P5(d o^i?.cd|=Njk}aJ_.3_xCQ4P|@^#q5Ll+>Feu x[T޿!%̹-n#Xu;M I'1澻#+3x.T[Bi#Iu=ٿkM4r_]V;$Kl2mÝ-4붟3Sog__Z׃i-_x^}F4:==$=%-mR;tGHjsM~{?.4m6:*MJMƈFuknlv\}͖;kg٦X>!E618sC~σ>:#5/llEדíohڍֺvv7 &giB5}<߅+FoO?[חSQ(/_E|OïG5oiaP5gT+46У*y)U0^~.n IY~sgĺs :5޶]SQcuku447dGyϙIr45fݼ۱F4WONbi=u8ltۉ%y*dVe0I6pϷ][ yjWeWo}ֹo[8>dEƟh#2F֯!x(ޙkqͳk^^gף߫[t{|{/5 ~֢ޝu[wCemuqfqʅ6/_*/]z֭߈sI5 ڦ&|֥6{t-&Y$]Y4iU85ע{&M5ߩ/3{)O=R_RMOM/cf9{&t9kghHzdְi]7O |ov[+ і7tssmw7{hK֬n/쯣-JQ"ȟ6͟:=m{;+?MB6m;S@H5;HmfktmM,)1nu;z0)%<92@X5_>8ك,ȭc/ߓ~\u5q?jsj}Ͷ%ܱ$`vc?b(ϣ/TӼ)m<1Hpp97n&`բ{)\k4~Kqp5h̎yЖZH>߷=QJ4o xo0.`3 ]sGo1x_=ֱ%붢qOtcNΟ4 RE#ov?iw}rZ&f;#H?ogKcs|p }~BP,(Fj)y9 /oix92u.+2MSiX," |xgķ1tJ#m$^SAN?ъO N37|6m[(I,޿\4R(s!^lXQEQO]}T_jK&JϭBêR.|z$RMȉB#]Iݏsf'.~;d.Fz\nT#}m~{O {}BݰouEYm]N[4_ egu*[V>)lYYzz4kO_4%d bo??j p_1g$V=^^}oo?u V^.??4d҅}1g?4 _/~$_c #_=} 9s$kG$N!?Ꜯ^ضB'9=?R`H6.F[UF뾚~_]?3]#HHLFicE2r2co݄94~gd[qzNjI:t;@iZ۲Lpmƚ[zI{ mpF2zǭso[v}َr2GL=yqOtn̑-?4$Ӝ~`3\kme}:-ܶOOjH'3pBgs[@&Ԏ)QF9b束g2#+hn6 UUUk}<ԍm5y0wp:~Si~%W'?ZK2#OPslLҳ}?SJ I hA/ԍ!ְM^_~/:s2:W$\Y72x]7ț-,KBHm8?ϭh݌HnɖFK@Cn]N?l8loֹbo0^Ilc<(ovcV1ܧ2R^}{(Tn;@oyϽg|& 󴗞 $1karKc8ϘNp,˸>I&Yc2YK y/,sr>#|>RA ,Zp<iWV<̉U {N/g8_ xb^F5ghIJF ]gw9I1HW.wjƧwK8Q1(]?Z#)=֝:Rr#N%mgwNwV]&܈f*6c$8;m?&wjpDbSO4IwoUvޟw(wwдk_indIoj$iNٚI..v,33OrKTz]MIE7Q db63nu ~nfg8soOHz}P}*GU-$jлɹ~#}Ϲ[Ѫׯ^W}sx{ž6$[RY%s ;}a_26OlױJZkwӚA v)~}0jwBzKGlwklό/|+{u|0DZE7v~oϝ̩7nm=xW h:ΡiKfoݦe;ǙZ9ڛ mbFƽw4F)o<uyl.lϢYDvpKX3&n|#us5cʟutVV>$›k d͜Ϩk 54m3[j(>H>|V>f<ƿh{ Nj[ns&W.nx;Ze+v̒mf,V_9I>}J|Oo7PcۈhX̽G^%̯u9T["v_,LK?ތ6~.g$uo?CUVtw2/^'÷Q{9Ni"e_[:jݾ]~\W⎶Ğ&v=L;K,^[̑c\o:`-[O\۳գF)->CuVm#o\Jɫ B# ʟ/yᅌ:Z߯r]F|¸S4o;G!z=Y{/͹#CAm,͖)Jߓ{SPWI{6}5m5;{DEã 8Ymlȿ{wZA7xlc.O_--o'd:UZ8VmVZt?!*zߢ=ZMf2pHQ]ʭ;\'vѽǗׂOVm8~Vhv7mkori{/{{DמW i7gkno땣vߕz/'me;-b:fZ w622۷7boܾ{,{[Go$~ZI.'}n\{qj_};)W͢Ow$lLk3IGMVUe(AS.E~w<_Z攒k*u-͆j-diHo#ctM$?#dgm7O%U}QTme׶:H#C1_-̷\'W,ekr{kyig~"j4ԼGsya`5./k7Ͻ-ˆ!pQȕ}y`4\}VO)?z>m>°W%&v};YaDFs~D8<\Eoek]l.aJPQUNnOך'dny"Mk#?ykLN]JYC.xk*=[kB5ebJBC.lzPlLj>MOz)dw=~{1z_.iw27\2),rNc[g- jdR~;f)cR[}Y~ogN2'&w]K뜓V@*>nHS~~_)r?V[uzi+nr3e_6qg}7ݿ&]cz%ݑ +~}go(j{*Q/+Fj0ޮNۿyt[O0;MEH.ȞHсIr9qޯ_ ޽u\ G"vw~v &[kdjV& H8_<'&.Vƭ[[2&)|3E ;^hضs-s`Vڿ7s\MouӪ(aж#k7|2Cg(?HɨuhzC$0ك;6.?矘!e<:Vٿ>y?:Z)\'ϴ-Ey#de̎Dq r⮿ Zݟ[zz}{?kŸoeHSwI7ma>M߼uʼnU*Nv_W+uoǪv>0Ѵ5Mm#V3߬G{2ɳ(:}i|/o4(%w_zX+Fs7P[;~_yьy_WoNyq`oOw@ [tER5HA*FkjZ^@rX=?($DZmN[w^eGmgsf6wO]o'yqrOԞeJ !"V$iݵpfO6gnw44"gXO͟` XR 2˟_7iV3ZZծ,Idϟ5Qmg0%!H>*c?c'ImvӔu:};t9_{vF!mMqoofwfwzoԵanF[';}׾sHcc\y79Pt?={[*"8 ӡe!OC'{kxARJ0aN??M\2qeͱR4S'%$❯t0O8i+򲢏|3U\b^-rA[k^ o=?IFeKБU(ٷqitǷlz]\X̌W6>]ѳ)۹trGl/Dť鳍;Hi>#"f2U6]#^9knA2YoeYkGjp|GjI<3kuuqu[ͨFY$1m3ۙqv++>.E- Mҵi"3[X?پ_9|;Jĸ'td$,uI=j,em^_[ޟ"5qoHp}m"F#KhM eDYjcOggĩZ*߽u׹p]^r~ݷ9Nt*gm,b cj_N:|B'kHVI*[ěWʹuMYnnew/9&H5 9&=#OemyN셮ctLf6$~_Zi/h%gf_&8H.ǹz#,ɲDrï,⿋4 WUu?d-սl}nɡt - Dl6ݷrz GW~,5M+Mgw b\y{vMb#fd^ԮG_a|hÞ{_~79XtKVе[,ks%7a^[ɫ=wԕwK>8x_PX/<1\NtjB&o,|U&t}R_"Ώÿv񖍬O32v*fhfܨdeڬ&7[}t'G P_Oj$+%&1Zʱg.:tU'h&xO:,$ɧRF%ʃ1_w}k9qgyX 䑗0i X{0ل7ϸ_{҃/u)&bLmU;r^A-ul˚lGyJ䲒gX;v6ߔ|zOJ0d՞+*37 ++T؉-A/uo&!FYVΒi<ޫf;-_~ּMxbI4oL:9$ӣ o$0lMp(ǛiACRma \֮3 崋43F̬C&7mfi*VwZ`{O*|G|=ÿ d}Z Kxqn;Y&_:4O9!޾\r'[v:(k__,^(i })ok>)sq3H~2nO'L*Sֿw^I=_.++7To+7(@._6G6W:%Ymoǎ0tt5FPEy!Ůuc#Mo#L{̍&ΕQ5;+6}V1tI FGh4~?2Ou_3Iѯ5-s»<{X t;՟sfKVkȦlʲgg>Yh/RxkV/ؾ B\5o1.i<Oq??*,~/~ɴ;Pkcig +:[x䵓e*4?|G~)ss=-rU~ӥVWrk5H0Nnm>5xdIW[`- >τ+}"è-rm|B̥[I߹2W7[" |!xWŭߙ=GV.Lz̧qͪvom=w$nm/tm%B7o({VWROfL|iqs%ԶQ[\G.nlܶM 0͒mo=Zj˿žUۋlִԏԻZ5lΛr/MAWtx5;Kh- qy3|}ڔ|4Z~O!;|9/T sdѕHVH淆fح7$9y7A(}_}hg$Zym~:'ׅM[Hߍuk/z>ٱiL}Ɵuu 0+Go!}+FTvvx<OY4ڶNI}Q.KxWRFVٙLvNu+eO׿O89cxٯ_Sm4gkIi'Z7ZsJrsweq9*Ò^V鷯_Vo.>~W(#[s}MF*mn/x?O-׬~!55[U6k4HYy~X䷼|5iUַ֤!;;5>on%OC+ KÖVܐ^?i}=ZewOfwԓy;9$iz{\دgU_Fo_ƥ=l.?>(l- 4'q^Z4;<-?.u*(c.ovT$)i~?↙o>K{}Oh!VgHM%$.>]MXOv}d%L7cܲ3s]RM2ll*X/˹"I3BR)B" n_ƴo=N8ng 2D^2ѲO?~-COI<Bwl~Ϋ".hɽu)z|e:.t_TO*I5,F|ͥX;ۚNs/٭@HYT/g%6VK8@`;w| 槑u@&ݫ9:ݧ. -ųMnf$a}?{Uy}GuFCHi71QF_̧ok0"7jii֭.ӟe m#mZ|ZdZxKQ/TE* 0ƻYUnE]_턮Rz]LeYFy74VZGq-.;6Aկ-դYqv]&nX)?R%_fy6UGźdU o4Tm>͛lk2͞s2>Nhjw|ic5v= _ J=W {?q7V+7?F3o/_ x^+4})s~VG9ow7n<>o Ԟ};];ψoGw3%oEo*4 |w XtRj}~gi {c}=NwJPvi[Oߥ3G ,pEJ[w'U_u'IoB K[6"٥DUp[\kyY_}ϐW/Rn?{+t_%,ɿtRǺ).y%@(iU&wׯQƄon_[IJrd^e9!'BW.ަ$ Fi`mḆ:~k{(qZޕ|wAx@pOw ;< ǚ鄺Rsqi^iO7#|}'9$?9#k/ϩ?U~:K}&+ލ>rW]LiwlVD$0@7ޮMӲ]xXyRdϵJ+UxWl)SKWW$|Wֵ%mݝJ |fu\#?S$z GtO%񟔪(9_ZX^]׹}CF_ @^+1f̹3,,3ocvk?k3iSROOLJuhuk:ǟa~oJZo顱(K$[_Mݿ~xukGO=R_2 +oOzb_oD?~l=>\d(*I>qFc΃LE7Ialgk< zRJ~֟3x5v;I<]9"ILT(i4o׏`˿_MlFk!KeA^&4z_?.Uܺ(0Oѣ7xd27lXhIdb:GUXpo<'g)_kͽ-l̲޶Nvi^F{/3pw6Y֓(+5_>tŧ'p^8R1ߙ] qvݟoӓofw}c[_+~&~DtF:[".*mεrU8_bLHje~L[-?$gi?m̺mLvUfVF z\Mwo7s>^$8RF+RHcn_^M_%Iokzzt;V֢rr?Ȯyo~KwnODZ&h|*]qB}(;{jӗ@1]3jݴdՔ~)[H+nSmʲ6i/"x_;IfĒHwzozT?;ksrXxK7-u~Zmter.ՋCR`X ?vFhr_)fH__4>k{u}#_Qjzv1/2{#umVO9M>tC R}?N_'8[<7YNMmivoHw:?ӯ_9;o'r6M}ڕX-L6iI?ƯҎdrןjdxV?Oxm<- fi7yps$ӿ H#cF4=WjVV+I$s&GƳi*5&ߒue%EFϯ#?A_?&3ˮxzc__G' [f}RfߙFUstß@x?:ϧVmg}}oq]]2IxUfo2Γv"oـ0#]xKj^(<j]]>g6dS2y_.H|^QV7Yi}?95h~ F|CQZ5GMy2Yɦ/ldTm;$/&uw}/9/Ǐ_4OO٢MU-4Mk$6#䶝<.n7~W5ܩFQMy45?|IeGs~.{_jѴikbgx^2Hw}l?2jW]K1/Cú4/~}[-8L~E ڶŮuY~w,h5M-Prݽsȳ]K[cɮIhct;>y{Uo:^'~GZCYx拥h\d?lkmHKkX6TŹ?7o1BC[y&<g4#]N) Lս0$?!c'cv34_3_]E~#x^ҤdU.5 'O.kV|{k5Vɼ薾_w*^7`˯^<ׂ-|6khS=6&]"CB8kJ9پdo<.+]w&4vӹ]|}k 5ox֛m旬kqˋO5xhfKwx_o}bmU.k}xNUm)-ު>}Uqk࿆ZmNJ]GJl,eMz(EhxKx_d0MC1-VdV|>Ѕ$}|_ܾ>f to=嶭oj\ZȲ\4 Cc&_2ۏ.J4k:R1oKWz-e#t%S,pن{`v/> ҕ(wSR=PܵH-]nj9_gʯg:SRQv`}7{jO]Q=>|W|yZ|2֯5KѴfq]\/.VζOq|Ӝyԡ%{O~u?ja#whKg$kr&Ekk{y_X.QZO2)+o}en=< ]fۨ<=xf|N0JլUu 6eoH$3lico&}^t!7 ;?ӧ'᧌nu x#iu>Dףd=Ğ&}Wֱ\?mm 2$yTқw3\k|:k'-/XMI6Q-\\,zvL%IuKB~o{g㥟!U}~ lw$3j,n'n]m̼IɹRIڿ_*_5|+>gïZG%XuM{@!Եk/ ZxKȣVK hR>[x?vRJI^Gܛ?7:.iյ9-`^u2koa 0)m|xC5N+"gSGu|=?Cw4-5?i;xMԛXd4ڔڕe"ˆ!vlE8_35#}~d=5E4sOw w3!/|=FJ3]˿_C7[>T?'\OTo;fH1׻tA8J֥{>Vߏ|wo=խS)4c|Qjw,0??K%JpWx^gkjį'j>y}g'u kZ0L&Kn{^pC9䑼t:nx-+:+wy߇|!q[ƙxgUy~ G4/thƨ: kM"G,h/ Έy;Ktv߃㯆L6<7:֓!Z4Xu|? rh荻kX*1-+K>óx^ mJ>R7Jm6W];.Q۞·UR}}O 5Du 5ZU4ˈf>X.d|ܧ$',.6tޟM}=MexxmVsϫB5购CYׄtω^g5 MMՄW2MlkVC JD{?\ 5T(CR_~ _΢UՓOvdVo3I3GΛe?]joO9]z|CnO3ٓCҟM$}IcSnUYf_9VݷlϿRZ__s{?%vt>Ö7:ޔmvxE]FO.?I5jm? W_ 3G]}h^Ԭ ,Ѝucs7#Iv"W?4|sMl{t Yi$=Ӆ[7,0_k]>>*Ewϩ*-;0UT.@@H'i ?6Ӎ|s_%V֟" Ҭh{r1ylդe3@eKYZQ)T.v[Y3|ɭ|kKfv5I鿟orN-/ˉK^NK[hzV`C{;<`UG,`}5-{R. VhB2B1ֲ冗p-IG??'${#aT*8N+ebcor5[4{:4griI뮝I`j,)$D#j]Lm47 XoljޢUZo[r.м`&105TYI%{{cL-=2$j~euVVVnFJk[;5mgS/+Ee'QFo2cO1dU~DٲV~i+[C0kz+=q1hHJk2wrK/{sXb0BC(avϮ-.)^E5^H;6ܛ[b}&]Ma&ݮ3CzujԚdXX#.-qdy-h7(|MMFJ>g6>w xn߂^m#mr{mo GEa˅mоQ~mֿߕg-Ek¾W%{\6q⥦Oe/o]?O"p8'5b3OS m5_rdysǿi[÷PdnT=3s֠;Q(lm^hWUK8O0험aks>p4(FoMM|Ik~s?EȻg+׷kRk9f{m~qn#"vԧ7~F s{ -" _Sm޹)fuY.[8cN+$#DJ 0;ZoyUAsSע~~O YgvZꚄ0֣woy$U4I?F_NSQs[DžNS5߿ϷsSӭ.2=˵aZy⾦*ke[f/=/Mvccut)4+|s7߮vr;뷯Rn ~ZVV/vЎLs{لb~EV~Ԍ+)mi6&kc1U'1PiȻ_H {o]F[,xs~ ֠i]زU}O<ȠZ?Vek\v6O\{۽Ao;==??\,yQeBMGq;}l~WXpO9O?avhV9s`>hɁ>?)5 Je$*;BIw8_o}T-({W9EA#3ێ8~<t&L u"Fwpy&nU]o:Fq0nX}a#0o9Fosw"8n=}9eٍE?&2 '__9TRvhrI&{us5 n%_ˎ*d=y?҃%]dG͢ʱc8<4ۿ5UsCwζ?0^V{>lbh$fO3qٳNG 2nĸYRi"So.vN>S=oEw${~/Cf-Ž'v'{M2ğv2j[DH4ip*IvuEF7nnx}ϟ9zy6ܰȬwqdկ7mYk6sCi"]m&6^8Yco/wݷU1[b$<5{u6cuqj"Ic#oەN|]%mW?|6>f[t9A49#oҺ)*SZOm{[_:tZe墶QUn]ſy~:88_g#ǃ܋`ksE|e?/5V7]jm5&}L#ȿw?zq<5fot:&-=++椻Wn-3m-xm6z7[1l;:ZAJ~GGT_yBNz抬+.wG#<'j ul[6_v ¶6?O1?<󋺿uo.ZG OUk77v~:L&rHgsw"H±l$?IK0(6%ץqi\>|8 Dk%qk} 7|fo⍣t}H Uiw%ѯqѥ)B掠ߢE5kkYZjv , \ڴ:9퍒H_9YhT֛\.nZ8̪Cno߽I6sl60 M꫄y.?.߯ؓjH`A=#y_1k~[bޭRo_wN~,Lb;kgbo8&з޿5d[~e_:lt/t-" IZ@JSI n_|&c&O>:|Knn%mzO5ڝM3:-?EyeEa3ؕ[۸tK{p?E՜29.}ߙoZ@46nTo8a~]>iNo_:+_[7bP/H`_6DY}ߛ?ǿ#sʻM;,:ΪnJ/ 9hv&[:sP񳎟IloYW<2o'=3?hbe)3c L;~Vf_U>|VZUϝ|kœ[xrX湽0-ʬ0);1ey,bj|8};R-ZͮlPf}/vɖiH;yr$yG)-:ۯ߱ ;'߯sa -N{}kI|4ۦϴvVfY6ɹ܈#RN;1X6Y[;#~jj#~^_PO[H,.Փ$ U+=+ϔo~fя7S*N=y;3< %} Qk?smx PJk+/ ?öti=od-bFcr\GӥsP|Eхo"bpG$$jyW3u5A%xxJt*BIMu٧(뿯O3̿e/kPyυo"ɨ?P;>eohѤeDGI|I,U x(I-oά5eoec}Yӵ "5eYYd7}!ϯ+T#yrKYǮM];Ի[YN ZPyEq*\/gG'yg3٭Z˼LXKmۺϕg/ó~Vר“>4iZ0Ʊ ֒Oz&IG}N:[~Q4owYY6o~ hK+Y_}о#^$ֻ5Lw_]sg^-NVK Vk\L۷Y۬~sYH1H~TR+7ΓIfT.oZkJ>w-0`Mۭo-ni-oSoލ%:$ʚz5|Yob<12q7{egRÞ?Z~[޿yT<^ f;H6v˯ ׷xF};_Ė6 xgBӂF4m͟% sAʣ'MSkNmW}ſԧ[}l{I #w3*Ϸz>frﵿ4JFvMVYHHMEvFQj_TC-u1YDJ0ՍT|BeV^o gD);k};o=GJ~V˫x̿5Zm=PB7V?Vt<[G^$hi#d$r77\Wה\y~}wIfm0NITܿF-2qc4!mFAi%_]8WZ ;Ldg̋w͙h&PzM_& 2NxcA.eU~;a֒?ԕJ{42ោmcFw,a,LMi쿻8Kᮁf c m ׾鯟:06Qk5ဎ{y$|߻?7늧(ߕ[ϵ | xm'ͨ wmʆPʪv6o/tjvèhQ^ʓN3b8)F[y=ob ߋX>x ˋeKq$,;v%j+~Z߳geΏYkWچX&Xqh?qV(};PW-SBdž;i{}s,LxMJ/țV4Z뮟̻:%kU^Y}Y~]ʇv]S c&doy Aa<:ӳ{&e;6s6j2}>yc~cPa ׷M3 9yx9$ n?7i~3n&|Ó{I-FU'p2*..VF>TiOƀ7#ӧsQ?7ʧ''ן@!䓒1YTgG^C}_G?Ն&&@-)c~,"Έ[Ҧ^dJzslEk%m%!v3ljCK'+niOCɭo#_66-o.-d7[|-vMC3S&~wI ;/sD!^amhv&iZ{yĴ~dsM}qdg'BM}]\_^+r4mʝ7} JM6Lk[!I8cfecm^ϗϲ@5'%ayxDYfWo/ $Ԭ]CMɐ&ghO%?_#/vZm;ȭL0P WnvTP+ܤfWYtoOϓYid~}H7IE_/}|֞ 4-A<3Gz?w]~u:|C5n/"o%IOα o ~/&wgj(n˿񦽦3AWȲKy2ՙ-S}gu\뚣]Y|8=FX̐Ět1<0ﮞ#ә_Il[z}^ R'Kt3\G2Ci2C3M䮸)jTg(6k7V^_K[A}އuhu_:oZm7H?롴 N0/WE!oĭgsSfo9.<7RMK<u LJHTouLC_\ KBqԍ65jUԇ{K/٣~#>B`ƞׄ!1oai6+M$-2Ͷd"M2g]y'u^fыq_R|3J/.Cz>$I54+&ٽ_&cvm/̏beӮ,XYXfeIlʲHuUҰqrj|/_^j fnIz#6}$s7z/Wf*oCյHƃXʷ6_zfᦆ]o[sxWHegFWi:<>bȈ8kvv?7_o|iNEѬilY|g;G'"&4]ko' 6*ūY eh淹I#xc+$'W wuxM%$cu*VaߧL%uhRY͎]gOnTHl/_ڐ'o7i$RizMۋ6I} &JC4gv%TegaVwjoc5dAIݯO&)emTC$eվfGKB2nD믂qJSM_~Ww>H,a̒$wݠ!mEnUUYl+ɩW]ӭCUR<=?<%In2Lhwc䲳7; ?-zmS ͏5Abl/=>H-bI>$qގgϳzvn[Vn|;iZ|3S;xǣivk#)Y_LU-qQ6z뽟o?ҍ&Z/'k~k>K _m!{Ve{9$?:]N dxs.>/O7rI4FkY΍!Uvݞ{NX> j>x֯fK}\ߖVhr^5],:¶w!D1ĉ'v=t/$Ϫl%J~x֩(^7m7nmo3k+,n[nY9'o"߱3W֧wkeuKK=ZI"ܿj8dډ MŸ֝9ʜMvts_|Esˮ]h^m"-ҵǓ%Ɵ4?\}k?9ğtl5Q^}JW} @?g2o(oI>hqϩ^XGΑC KɭiΉ;5%{% ]~m_3R|/aOC+ ]wڎOᘞI!ֵMJKpy=?n[Ky}~|fOM?i<|{7|`i,W84[Y/-㷸Wo;h:l D0 ɭ֏ШJI7˱QK=CkyM.Y&ehI&9.Wom~zp[ۉ)3lo:恛󟙽k[Iq6XG4]V~Mχu ;[V wjrәi߷S6ߧ~RS?$nt/xOajS_[X*z}c{cB#tڌ.YF%}_O]>ljݛ;?l |H6oXӴ_s$xZ/Gemޏ/f5U*Sr zQ}lgͣi*,N1fzmƯҾjKҎ]oM=z7KBmUm%B6[Xoy]9Sz"h3Э tDYĒ3I!Ueݵ?tO \7P*8I2Ĥ _Ҳqg@ytoouhϵ4Yyw߻"#bJ֠dxźbj#zZL3C+}=#Y?)ﵼ[YydM:NiJ_Z~\I_V_IB-Fu?aRkWZzO fjdϩRM_-7_յm-ʭơ$o]?>MyO}:-Oج϶j~96XՎͿ/ǯⶊ&%ʹwBWV#"|GOW{z+\|G_̐ˢi4eq=S"o]}mvTYZܾf87Qg%&tj~Ԕ̈{^{鵝}濼C$qXB'͵S 2]}M%;˭p;(aum%̖Uоt{ݙr }Nv_.<;wDm^rQfmy)*Q8Iy?#@%Ip\̅YvuJҖ?}:#O|??jck.ve}晨{$;>_*ƿdX>/uWZg^E2H(xɽQ*+oI|*\sEf+|=ig]Zޖi;]Y ~ȉOd˸|O4n̗ ,܏-T6O+~fu};[\^J-sF_U:R+D"y|;xIۓ i33"\+[k~Gd"3FO݃,ժ!LC.:87.2'_&]AF&vأv~_͹}dO]NHw߮;[+Ş6mPaA/ 71FK[:Un% & _.t+9ӱ\̩qxSH>ºbuϛT_0-‘n81 i[̫?Yԋs|3Jۺr~kf#_K!JbYTVگYN_kz~&WMšt 4&FTD?m mz'|$ÞNlrU ?~~TZm.XwzFco$j6D)!megf2ݓkսwIly :ɧx?BB&xdw=Vo]q7hs_~?9nC$.Ww^j#ou>k}-B.PPIBh")dCҖ4~eמK\.Ο*ogקvXg=T>}>LK㎅Iݶ+F]0nڍ߇ݚpM wn?iLqXn/y^\8?sM^zO7~>~eYKpپi w^_i{Fb< _*=qNoc7W{_WR> Dt{MW·z}^5y&tC4&_$*QNl5-mmЛWGnMb(u>n>w7vit$X?u9й]}mQ.s_uo\i\^:&+Ymq4z}>JGq6mn]<|$omFJ:_}}-~"-⿂- z%AkP.HẾWkx_?7+e`&g6|Oco$F{1Bk\ɾNSO_?Au h9St7ZYK[˖7g ;+M[Wt}(k}bPX5oIvuʭ}*=wYOp乔.p҇ςMUFe2) f} Md~#ovRBK'Q[6R-"?ck_ȨgRO Iui%ףV y]Ouam/d؏9$:M7nqZ<+&Zy/"ItkU*M"g̋fyf-M_2~_g+oFvqpUws~1IQ||>:񾣬k2&N];Qk'k$1ǧm[mV΍whJ,]Ui/G}t>Eu"-^ңZP{VS+xY&-8$|yrW}nrJR=[@mRM5CJz@-ky$W=>q1pJN9}cA[,>;YZhi$_nI.z:tOo=jW/k@֥5}8_42i32tj>Gdo7^'tϧ[y4vwzW~!~(5"kE<5嬒G ۙ_jtRmŤIv{ 8Zv~_Art}_v }RNu2]Lego#AoM?w[+Ej%Ԓů|-}/6$|Dh $zqfwlޛv׿Qݭ72k4v1HjqA4d"ΏɹdGodài4Y+AemG;UVcMY-'ۋxkݰ Wc;YXj)L]vo]Dc; 1{{yyZ/ya2V#VV{ZF\޽I(S`1z =>;RP\HW=}~:Wg; 'D$ Q7OW<5z#=2bӜ}{DifIQT|t{Y i& іۛPO*[sA𽷈"nn5-cj* q.5W.g$Mv՝म{iVO.]-A:oOE'2<1$(=?߮Iɫ[SQW>hQO2^Cd/ťk41FldaϗV+?;D/.FGaχ/K{nc顷mR;;ɖ%tI+$= u(M7&ws}]~|&׉`hz%'.qtcTea2Y;>Lr}~'Jokg''߹'߇GKzkڗév0" hB<3\c#K˩D $Ҕ-OUӴnKy|ʭO&{rmmўx/{tJgMl{VFFmd*+m}tsH e+ 2^}޴ eƠ4&! W~٤ i.ݾ_O5ݤa Nǀw ʯͭji17ك+lnivz$wc_Rhp?7?{Q6s +Y15#Em,yNp3ߪN涽3x?nWqFKki[VXh'Oțq' *Qᄊ^hJ:eZ,ZwoumhY"ZoslzyIr\&r]*]w׿uZaw^?'<{xzQ|1>O8+6Om^ٝIWybn+bT)I엧hw|[=ޟsc[?,cei%fdD/GoSZۿgb+Sk˽Ʒb@2me¯1_I&-Gnmuwc,x|^fϟrK٠(~7y~Mă|q\MS{9ZP־ @5_SԢE{ ۻnf#7}]`T>ikfi^2t{3L/oyl2 nuV4nl}*OSҠ{(=hs\mVݻDdW!$> wJ)r6>߯J KQ-Y '@ w=GC3w{tdH 8y Hl̘X|N O &i=L٤ؑD8,<ꭞmKQ<큳9#'5}JGMU$Sֲ.Mklƴ$2zi;os#+l6dA瞄__SSeo}Ɗzr$#2Wv9=2m~nM߯ #ެ=mݐG+I /(.Uw!'(4i=T7 w +;w2>եG٤o1wd#ttNsdSwbʐ[I4"c߼b͵[^=ӯqw>0kQCdgݷs wSMtB2߯OfmiJu|2O|Ƈ~^_8>Zj KIlY-oq ǹZI#iՑy(5[-M3Q$t]ooS)).&;>1߀?ͻ=)Jw3m3n>!Mu:=^WA*@dW;6|ϑkIsD#ϳ#kW5)})^M|{stٵk*t/?3IC/ t]#C A.\B$*n}ZbԣOJm/ⳳ<);Uw"7z,i:Nӧ>ХIbulMJխ<{ɎCg?VV&cR:9C–:";i/<o OS']:-e{׫fsW{_qO{y!. imکoo)PZo_ykoMGd q[\Fc=mh>ztN/OwF߽^_aF4+&&ͮ۽zo^1~_?꿯Sڽ6vQͤ\#*ȍG\[N ==ΓMG DymKq_z׉4쿵fr g)#|g??'-,%rkﯙ>|歿;į kIӇnVӛgzq&+tkE #$k.Wc.]6OSt`,n?o[xD-Ua57,V3#G&bzz"ZU+i˾peB|>oV|}p9_;JeV$܎=~@ߧgOJHn#*?{ۭTenVv̳pb17xتp-X´ꇎnkۣΨŭ=W@[[G/>Ow[5^[-YkQJb3ҹydD't]3EuX|Z/Qu+~8%3> K[s ȪU[6kx7YϭDsn}#_f&vYF#3߼E#3&[?)s7OPvZD6qLr9EY2oNszq-sthP<|ɽvNa3\ӍorLv( /F*tpsjdnGGFY}?w3u xizuM4&g84wݷ?#Z;7SO|դ0x N5 ]]3e+󤷒dIj2~_VR{jj/Sle˛B,5P|4ohk[i S/܋S^#mM Jw~pMG#sok2Mz.jz>/KlȻAa1:+j$(`Ong  G6Q~f]پֺ!6[wzrі`eziڏn}k E59? .OSȯ~Ie  +}ϿoM"_w}Γni,&vw|:SI+o&8p F_ _uo ~k̥A>m~rǡjmCsi(c"I*< n{!J߯^o +ow׊a[k?6^Zy oYo<֏2?;avi}Czn常H,4n~vk,]r0x!tY>ɩ,2#7V_Kg^B4>=/lC%|[m5U}ᩈwg߽[]fxZ{YHm#m-GYo!;!wDyգDf]*UuVKB?B_~%W_\3\ˆ-}m`ZkZI72M77٠*>rK[k^z3ƾHUu|~fտ^Sl}cYOrNdOߖӽ"Tny CuI`BRﱧwc\?Uf1>~oo8F 'nV޿MYZ3k>?i=֩'Sά ^菧KxGq#-՛}hº='~\يn6JKi '%N"^$G߻ଟkz߭=}/OԮmKZHGfH^oEe~f'o\[s5$rH3P f9Wowwש|@[a+ۧzW=W`&6α, yV"w3m{h%E'`K}GF|.-/. U5Ŝ̞[MC''k;{뱨\Eh5EZ7rEx E_]Uz{~3;;f3ecvsCZ_?7, "O$r6컷gTMLg3{]{SZDp.UEmXpޮԶp߯nmjWlslNmZϹsԾY.=fAܯͻY+|۫-?>31jkObQkXD'ùFv#~dG}~SL71:!g ο&Ǫ<_u[;So\%o46dZƥoswײG%k/Y.$M|ܾۡ =WEz!cDfys#3<2,ԩfʯc/ͻ߹R-FMx@~n<>`yB>0ބ-/YB'';[j1ul~-Aᢋ3e^ Wٕ*K7o-Y_62Tb?.[p`G_k5Kg~e:mqx[w# YYRcNݭ[GwI=Wo|AM1C~VR]~?_}$_JM9)RֿXG 4aSl&A킅YgվgK_"_KEDŽ/9BC(@2?W\^B)?i"xGP~ö}'|X7}+@ ^,iyvɃcgr{_Φs;,U jX+zSkk.KtHh.&mڻ:g'ya$__ABowo 7oKxmm@2Ɲxou߽L]/5]]Q(֢=CE2grz}^}]+jWtB+nEZ_-} eEL\O#G9В}muT&5K;İQr[2 XUo3oiVh=޵cei{}xө-}1>kJRO _>--4{C]aG g]SLf_kpZMoVMOٔ|{ė?-is^I<7oi*^Z64mF7FeJn׭߱(گ~z>-C}-AjڝQ9}̆fmw|eo.Dnfz;]o ϊᮆ²+}//OKϫH}ܢ/xg_:._S)i^(d_oAe,MTi$Ѥ-5L#Az?:ׯf;׆~_SEN{<EHMOsɘpEˏ[] [VNJZǨi][yoҦ>V7+Tݶ _ͮ?DSťiz.v2ٚ8E3M !D2] d\6_WPNT-tEr]#D5ݷ$'?uo+.snAiZgdNDI$1ƿ~GCM?z~=@|KI.Mm 8+1R?ʾkGO?s77{q̱U5ڭ>hf>q]?hѫ߷CKϏ~%~_  |IkWZT3-{]{Zo\6R5lf];o wFKEONeQmm><=iheflu)Ee7BGެd;UHGmw(ۮ~5M& seE_ݫmm껶yf}&n[xƚ֮/!Eaf2m&hn}a?$~dQKu`CGc,N'"nڳ/][n~H_ϳ)rcK!]Y/ˏj\,Ϳe#kY~fD`ؖGAo0|8FVgHKMiaKX-cYoX]NDC[i8Bʜv M8ȄnC'瞿'NtT`t={5'{;Lk׈znzi="$7Ѵ~p;{ѿKּ"%WH Ǿo pvE>?tZB{Gj&G5|;oxU {KIrjveɲzu#/k/Mpk_F'YÏh'udҎ3ͨRci0Lr4iZI_x]ծLVZiLbIO-]coeyr+^ >j^0Ӛ\cz׋g%ݛYq;h5xMs|n-ĉ B%6ɛwmyiZU^|㿍~.fmMg4|Aev/Yn4ZYbw~hv+Iߍ/II5o7ٞ+D</~+Yx~ֳגy+xvi=!io!SN7MgwXuW r0SZH,ڪC _o&vyq#zZKg~߁MqS|3c/gާudM42$!7[V۷眛{z~ M޿'֝N#;rۤfO{|_))t0SiXQGhH{~_)_ pwU{I^qxiƬζzP-Gfѳni?RPm?B]_ }"WV:mn4,Oo+r;+M7|Єg7˥}-.Rqo}&r#It{e#,6bCe#gA+lT`oR=OA7hڔZޖ4k/Y`a9,yr+Zl4NPwe}/ wӵrYVl5OmR#=#hǺ-ƹf ޏceyqk ~i52;m4ȏ6"l5l.uk7-/w01|ˍ>iW>ad2G%imx餬1{Ǟ>ozlzc'%е5;Uk[[ySI$Rk};mzTy?KXվ=>G'=ӮFdzj_%Oֶtfaċw7>B{[{ NF˶=e5xߋ~'.iadc3,4vrɱmH͉~C#6yhn5ߎ+5Sm/Tm6 ehRj^kIif>WO.B'_[Wb|aQv_h2xOK;]tԑK$}}wӝJ }-%&?_ i?w>#iqKyo| I-я!I!ctή:w6_WX-[/-0dYjh^[oH#96F2*X8ӃVꗧ J0^z;q+>Մa$K F'Ih|xZf_* b8:|5#?g|/Ma[smwx#Ob%p aHyYQ~~WG&Һ_|C|JFR#1|? !ƅt^_[ԡFO&'GUMv,4=bZz⒛z%~' [\Yƻ?-xw& '6;VM3 ц%ev?w'bbM4t俭: AeyyI2C=fuGm-ryzeRNOf3^K~@idUλ]9X-,HПiqp¹7t[ɍ+Y&Rmi4Zyfd$u7r74KuKߨJ{fsÝ"mVĚ垟&yh7)C ^,egve}6d%bvo-~(QetѼHx~acuyq"&S5W*Jo~#k:|Arڏ?gu$mk>l̰E5L#>}*M+i<]"漞Mgо|wgm!5ܗikV!,OQI~;_y> 6]V{ տTHKx^[ReuMI "4>$E~ߕT?妒QݮQQ {X fiߕKuM?.-__[( +dm-S~aE[(׮\s8bmmImeT}=$E/{?=K ;Gkk9!c%U|m|վW޻yPv߭da[X̲3ĉJsukuaԫKыh!E] vߖ#~~z :K$FQ$]7ֹ u_תܵ9%o%ϊB qцWדZrwz_Jm;:!simL|y۷o_)U*i/u?ť"˩j:7oj/=j No8^Wb_rr| ZMơcG,lx)#y | ַz߿CE.}n!Iè 7$m~,{~cN+y&ĩ1+u]w?Z~?VY^Vѽu`v²)m@\FIdB2YHA'z>KM3"-~M3UKP8k$ow_XJ7}i]w.02U\ܝGwc>g3bR >mNq(3ux?۵2[sZ$7ajpL;eo#/KO4+[7񬻾aJ97Ss]5 Q]?sy%mǖ>Z/}k9UitOPn[[Z#4Tga'R7x=<כֿ?Q(Gc._-0_Wʷ?$]ր9os-E-P.~˗?hK-W]{O-툋vb[W^uo6"6ğ2н둶bO..y"9b?&5|&7/xTYyIEm9nh_$NoZVI[%@ ]Տ٤oiF/}|ڹmR {_md|#T8g+eM+s^][?gROZ\^M9<şx$(%{8\)hwl޽l>[Z#w~/Fgκo9uF,~o5xwK?2m/&t"O//;un*}kQZMk-l ԥk;}9,U"%MF?gG5tX=^|is:Gc=lq>x;{1÷woW x/f}t+IYhnZ9pUĥ;w%_Tm~>şmkVҧI}oV<.&ypy. /!]J54iHm69N&8wk}Vm}w4O.ou}hw .ui#EWC |Z%Z|ѳ߸ҵr^u}oov{xxMomg}:EӮ4xn+iMy/)sc"7+Ϣ.oYl({kJx[sk w˦ q$Ac4s[fV<}|n.zo[KKy}\Hn/]vHo}G-Yg]9^o.I$Z|7^.n}ztrvw?>jZ}kெxi5jWwz}u o'>KJ[_lm{{{i6:sIjNR\{꟮W爾ƺ" H}R]H;mZxho# o3θؒi gߕ,|=?<tk7Wz^]M2ƳX誾t-t46 3CgL>~_Bk}y|-?\iz֫kèX}joN";G0G}cR1wN_:Iy}{gU:k:åѯ,an;yv2X"ɼ=;7toGsʖ!BV~uxק)xη|&[OZk;W5h5yS΅V;CCCoӌJnoo&S~Z'o|^\աX4:Cg q[k)%&iA$#8E{z Tgܟ?4?*'zE|K$z{5$j7a^k˛dK3s-km^>fܭ{%ŭoz[uK}lu ڭtKHn#㹏z'ʱU{_}ȩ^?k5 G\'S~,7jz͆Ϧ^{mKOx^ֵ/-l&·MH|cJ{|Nj{$ݴ]}mEͮ~u}-~忩?xNi7-0p?6[~ Jk}=k'?sM}SvߕpUt2}:>xs[Po[ BGˏ %ջ[oN7 U%˾˙wƉ|/ATs~ӱO 'iN^Mz?lKDԼ-xiZ]w> [Me[u5\[HKw3/^֥FWw)[PZ7m==OY <=j_`uMcSuXkx~24%M_^1mBM;էCIooQ=׊>j/4z& :V.uu`8KoͅYԨۅ΅8MGݺ6U ?"-1u;6k+Lu+}Q! ny??;Ɯom2_~޿r3ş |+^ص;Xn44Qo;wI2Hz|MoNXFi5N׺wlXW-1Լ}Gm Ȳ[2:ltG%W_rjk+Abì19Z5r|CN =?멉&X,4Kk4$3M3jlF7cUM!DI.雧}WQ~'hq{+ [۹3‚ $+ r,d6GQV|]w]&]ȟ&|K;iOg_ԭ4MzٮhncִU}Dž&m > E:r]}?=”料}#s-ZozBޕq}{]Fn#hn>%܌KrIߓg/'usG>t[x⭧< [Yg8foeo9Q/,ay?ys县/^iӔ}@S@ c__\ŨKcfZȷZ{\5|Tfd1iNI|U)s+kM xR׼CsKT,:%k}QIiʶu+3^q_uƶn= 㹡?ƾ+d/?-& Zr=ҬߺdW~,+kz~k9|eE|3A ~+K|~,nt j嵷:ԟ跒}aޒMgq }_\~+Ӽ5K{kȭdahk654=_6)n|o|"4 _H5ƭ !k8V4y9>C3m'7Vn?CNcms$WCm>2_˿];' 8Rn#Y؛ω:HGI]EzMJFUL/:뽭}F^]/SÏ|?cgKy*-sRGgy7Hm:|o{Իzw<ѕ7iGa7|#i?.W/$ŖsOM6a퐤+:C""G_z_B}[f Q{}3\eְW}kkv#,#Y>{g.|<)5z ~ [Px[iԬakO:OE. I-¢RzQݯwl>"xwDN2|1M>O KK݄rpop"7_2wҽSK_TT*J׷^;v|8~ |D xUԼ5m?Zs&}w -oo5m9|pܳ 19'˫q[%՜%՛}Ϻ<%b:״7Wu+knf pz~T){~q ',X4st,ch-.,LyW3<-zy)mϔn}3: {[j?kvb$;ˇc}֍n|0Ho]5)E3;p֤SґFmw︟q?Be(nWb`ibc7#&_Z}Qg/Z x$&دˆNԚ-ԷmC+][BM fb?S${~/ P(f Au~KīBH %Ա3Iq36T\R?_6ڎI_NfXh]'8JdI/WiKxj4mHaݗz#͹l߫kuiicG7mhcJӵ(L; [9U"`0ER.[{yMFR4UEʫ}*j7w{XX<:e]nO0=;̒Tic66M-jGk4?fFk1.ycjiccZCkkfoܻg?D%]:k_uMXJ*Y3+[{ ?6l$f捤]+nezb'4Sm;iKU_6iso='^4jylT?_>MfNN*u>c*wͯ-ׇy,$[\ok"J@[>Y$(غk#~auxZ֍\̗MM$vm6FW}FOwYO&"׵ImGG1yGgw}>78j藫ʷv.k8|a+K ʊFlm֠.i7n/kPM*S/ux泩$- 36hCPC.'b`|>6)2+#X,HИ"E d8>+O"dkX]2G~](_v3cYXaStwtN=_Ewpd;M;NSrgk w؈I$H޴[_|49嬵[.˟X oin\wPchw$44.fߕY'},Ln?r5h^H[P߹]uYn [nH^6h5;nyQ6n73m۟ɷZ\j-Ds,»Vc4P̛ڎ3@XZE';bQKdT֯.L$n¥C ۷34"6d{M {&ŅbdPTM=ַXΛ\麜i6b퓅X&,k#nY~wٳSZ(79.Rܺt_>Tic!c#3|ҳn'/M{ϡ{ucAg$w,P4+4+*m71nϨʺ3i3IvA hM"c;mDҮ5>y]k$hmLw.h+mW!7NIO3?z{W_ᜮm-O~ͦoDÃogݻ5'])A5;1$kAa!c@_]rI;w}ס5w𥮯k}Y]qIG݌X]tk{i}&Kvz!&[Y3.[0[ 6o&w 91gs[E3kWӠ6O4 m6]7PjI׻W5 g^-V:yͩ?"8c̙$m*?]v;]6i]᥻~%F.ae#'?R잭}̾%|AL9u{KKkn&ogolזOW}Mںԯ~ֺ]rG}^"iWfkku'ȷX\2\{y:V}`8oMx7@o[}FVT +8$퍓u>؛g4b oouZ,-mo`Zc2IG'>_߼ ]>?6 %x+oզ۷+_ם/jڴvhY$!(~Q6VlmVW5ɯOǧ=ZG߿l?yr]^F%lp߇gΉJ+m摊i6ܱ2]&mn;V^|$h|F G,ӽjEDTkE?lm2GMf|}D-kdq0*ׯRO㖗3C,WU2\Ιڻnkz?ٓNvp:]YfG?Ϲn]޳ W-;gW͡b^,SrIŒd[8o}:ggo;-0Đ0 $\n߮%;9?_*kr{y'K8:ךH=o<@kǠ6 7鴟 Qw>D2Ĝsւt ׮F~SoA ߀|9>q+ rhaYپؿr5nO {0k_?ǯ~do&Ǚ}RϻZ^ֵ_RLKMtO}t슨 ߹F4kϦxj^ ͍i-L>LiApnݹ}**Ϧ_+Qj"QmZ7zB?5j]S䏬+̋ƫ]k/ԕ{k;v<ݯ^I4i=L'm5)'0,`:7ns|7I}-%,˴+/?$7'.ek|Ac{ Eae{+UUVO/b9]rRI5o/ ME~1^6A%kw}GT/ne@ğ&(S+_YCuoG `2m~U/d[7~.uƏr$`2O2?&w~k?~d~m~[R1YGuwV'__s]Q4-k-ދI%w7x#\$lyFVN/IJmuHacp-ĞoV]5XԚٜ{kN:Nѣnr(bm}oڃ[i:\D 6f] *^ߟqM>K?[[OJbKd!۰kt;W=:G}*ŧ#.9=o6͒#z%E>kWQ-~YR'2 7$.XRK}62u 亂1r-d jryMߟ<wy5VuNmLzVR[C#( G4m3-u}SW[J;HأmWʔ7秦2t-^Y=DL(Ua,R6ݺ6[~{^RWuGQx3 }wZMZ޾ze.WĚtI6;Fi(C߿iN^1Hݪ[~WkEIor&[fs:ot,x:Tmzzf7<~%YɣMsbz|QuW}~OZSO֤.ߟv:,e[H"KngM~UrKOrOL~g}"ݿ+ӟx= ZLnO4챢(ms*?LfnV`>QmW}Sʵյ}ƳMfg#UlݱO~rxE[t[|/#Iot|}gsXJ5[hJ[n2ڮٮ&~{o'/3ۉ#>4_ʚ_S}U$6IllM=Ydki㳼 IRRbw'ß`c4MO:ΉBe opggY9ݝz%4]5{ Im2}GIu dv镙$DaDOi|j-I|.G5Agim8ْFڪJkݿVlF'V٩ZF&ܻM}2,x{G5+/iSߠ"K>Dn}j|&+[4Z_OHͺt4m>;[O.Yct>yS嶝~אI~nԼ]h8SxYđ_.muEhm5xIg6sIק M֩i^%v.Yͭ:ߩψ5^.j:ԩ:f[G5O3y<␻[Fm0ǖZɤ]|KF?`Y-mă(?Ӟm+toN+߯Sez(VڇSGӯC5y7[搤B7SFTf6mq3w&.4"Mln~eo?Lֲ=?1ZZ[m.#X3|nUϮ~%hko33nep#3 RC2-Z ɽָJ/#,7[;ّ?K0r]#S}6d䷷/ iׯ*[ܡq \?y/&W?R;?.i|)ݻ[0r2JKDYY x*+|M6•)+Zs8lߣ_԰JotM69P33W~fQv]W4{Y7^- 7N[Uޏ{(kx+Cմ8:lЉ-raOݴ0yq}P"/4O "5 0K,rt˺{o}oٶtmzw?8E[_6{o,zxbX`KJCUnןQFZ[ }%ŅJLmW!ҳ$4¥5dؾ\cm&wmlw$wN֤V)u8bXVlṱ{%9;/1uD~gZ-q<:֋yeNR4eo'Vt˰lc9]IKxG>"hɬx`dG,Vsift3}e9:2ޕ設z{"r/#qIno_׿ֹu#.k}V "_nz!(5xoDK{kN.ż>_yl֩''q_ϠB}oޛ'IUitָs[Fyc]Дdj!N_?5,+sLK /Hqqe qqqkѴ,M"[t`{I'RIlfix,,aW@?tº/!Vذx$&絿TCi{oj .a 1CqNybI=zM/drx=3W|O}hVo"ynGs,mq^x+:|mIg:dѺgk6ސ›o/o/>dgu9] G:nu;-wOykVGȽX(2yh3^9#+jQN+~̈=mQKƊt54 j&O- \\?s=˲hQ$8#-imyϹ?o|n-{į['Mmhn7[g<0<2[$sl֤ O>}:i=nǶxOE/lt+]2 .-Mdr,(2si Nw2w='.s&O w>'YO.$ZKgWI.]ݷ[ԎH_p#oÿj/~ϟr*~wׯQ= g^7մb[CsuTyP*ۙ1ד*%.[i{ei;aCOs(Sg_[6%;[W,c^<*u=JL|GQ}#H6V5Uy?~*GD9^鸍}+'wKVwIRn#j.W}#ե n}G SCo--/9mwv"<y6;\)ߧ^|1gSG6A ?lE,[f}.ǻfT5u~TcgwGWQFgVC5;5[=BY#IQnaus^ӥ)]=R__6mO,ozê2}_hWloRv4;|GXQo.4k:t8~-=]\ĚxQ,~ķFI$ɒF渿M:$(QWh3c+rM_Mmݳ^z _մ>=h o j::9>KGioy0GFg+%j2UfZiUl-56M͟:w+LTzS^^~}OOo]޸:%jsCC5M2y-|̛>i:שF$O_.ϧSrs}Wz]C|HYc-B׬Z|vqq\;6UUNߦE׭oJ6uۭ'teGolլ3u( m[ү ɇM&Į*yeu/;b4?;hPdPSPOStW\D:EKyed&[!!uaΏɎ=;gZI\o{n9>>V4Y!?.^j?گao2h# .V Ow|s]b|. ^jH~wb$ڳ|s4K}3ϛiYZ{O;|I-t۝/ݽf]վ2>q>?}mc9S]NW)EWO=gDžu/ jλhwIJ-.ŤW_̚4I?lDͦOG}_#μEoOxD?K? xmf?hD?xwOkҿŭ 9ijK:?#1|cg"}o8[:}8⏮qaix'ϧwd>>kʫ=d3}լd6چ.Xvnɹc}q</i`x׎>i>qŨ>x{ ȷt~mĖ?; >V>̿^|?hq8M<}[GemXKxd{[8ټn#n2oci$;Ф<+14OMʚx-&+43^,o;f?"<o:;uGZgɕng/Qx؇Kנ7^ wPkFZnԒ6 '|՞S;?Do_KujON[5hLr˒XWR_Z]uf_><|"gs_ O{-nRYIor^Z'd{%"r­ZRvwoOs{^E?4i:$L_Dh~xxorTҹ{ɕ$y%E^t 8cguc4>tB(t42I^|jZnk-:8N0~~g?ϋzɵ-LY_ F&h ko4Mۥ2B~d9><)_;ΛVZn{E}}!gxh1,18=[o+7}</[_Mu<+JS\g7}̾5vۣmdGڳ63=>~e|;_*_j= kIIm_VݶDӚ'g_Pm?=>h>/ +Mh&)VvņH c)/{糧hTĶڎqt׺F؇7GgbU)QN?/xg]t?u> h?gOŨ,P>mgՑwLIXǩG0ܓX/nQElO':7]뫵{5" ,xcncž2Yqȑ3qI۽NhU󣺷IK$_R/k40u |;.tP}ӟȚJgjtT,?ԯ͵-Bߗbp5SW|}d7uܭOWh"[ᴺ}١RH]|Ҕw1.ߟ0Q@@wc~ʳm\Ş1-*rW(mfsm\Vͫ\4@$dCe[ە}_|JOK_F҄0=ó%̸^_~S>vko[vlhמm픀UNڈ$ۿO&O\Ao<{wf߫vq!HgN.YmX[ (8Vw_ZMFч*|>yØt,ʣ5;Y_39&|kFe{=#Oc3HZffRؾb.b9^­:Wړvʶ]ܢeJxk-F+-UAM2J Xx>zÚzvS۲ʧoR՜yNwq}{vv ~V?ϭg\-ߋ2k? Ytqx'sTMuס.Lҭ >Ƥ{?w^~-%aA` Xq'~Os'15i Ȋ[-sZm1QodyfD7(Gb?m*ZC맯Osߡ2n]U1ߝSPnJG J-B]{tUsuzkivLWt#nʲ~S7%wi0}2J6?wfd޿\m+^7NW5٤\n#Hݹ6g_~*}m->{n҄XEb@v:y:_h3̓|v|]ns֬dދ!.hu]WF1Gy"Hxȱd]lގGԲnߍ)VOuKNZTXvm۝۾VΛ'z}킊[#VJBù Dw3n7ֳ*"Df'//vH-ݽg'J5ح6y# s+I3'gZ<_ٟj/˧$ Mt,y~34*S&g{⾏4/4S'cy-#լHmU[vyGy9f-G}[w(ŽW[o66zVz1#鷫+0gf[wYEg+׫Snt֟J.Zn^Vuu۫_KzPդI{k ݞ.[ku=1S.ut_M FJM mT7.<ӼWoMoj۾жɱ_2JzԩIG]/g}{_<;k/k!Οsv:,gDk-LHq5QƏﶶvϸOgpj7_#+qiwIm*\^]84ZȒ3l:?VUom7Xt~}ឍr[B0wqwѫ=ѬllqjUm5󲺎臭]\G_ZPsMGGt:Ht+ugcoo4Gƭr&ٮUeݵc:ݧgu F%d]/RҬ$Vfh/g7QUúo[Þ |9Ŧ~óլ$mB4 ʐ.#-#FoGJue6ZXֻ(g-lAkŮ:?e?ߴ׈tVϯu,4S7.\W駞?d֮!x]2oy:Eq-6qتIqqmw6m2Sn?oGĿ |(q be.;}?REXsu'%_˘)r˵^>xwrSs\Mou'u5o>fkKH8~D%U5ON-mN}IGKAqmmo:oЄRWhq% cf$6@F {/ݝh(}]z߷˿ZmOQ[Z^2,gVm-#<*F.gkX\z5}{] oϩZ,>q=Z՘lLS-W̎d&hdN ]M ڽ[^}X}Nj+}̿ocOV܎]>fq5#U4Yk^F^o[t̍vWG_ɡRq[FN.և7oHJTd'?_._;wѲ]Cf*""D؂熔6f>g~7t*HXFw˵v4~g3{5nyԒgc߳/oVga;Boxf8IYbKH!U %1þ_Ͽm Da/ß߱7hus;|hwxvQAsy F:[My<ϴ>,xnt2TӍ曩kvk7mfֻw%K_]w57_⚔^?.-ʞԟ>⯊N$|&\_%nwi5 Ȕ4-+LF)U\Q.sM{Z}QOW–i%VO"FkHC}wʷMS[F2|]M+A~iՂY]rekl|YfKo%i}Õh?QQ)KWv|eswNku-,`I;o Ay"ᦍlmI 仿 ko6w?g8קSt$5o^,,t!Yky1 l匟5SݓSO.&o`uh?T7+#mY#uܸT).~}wɠk7:>5C"67Z'Y$V=ZTiwχITz;wnXւ~o:O~ƻODռQjIۭ>"u.5ٯV7]Hv%LW_w2Jza~_}ڇ~SZsuKU÷ItMv~gܮ8՛vk&qKg^_ I]Esx[)-a{$kR4;K5̓I{!7{7_'ڽҷa?fύ߄uNA=<#qw7cl7YlDžYʿJ?_ mj;Jϋ|QMOW9[7Y1Ǩ$=R##M3d}b>RƢfu:fsr箛<;]UGװΉjOkڦiZۥnp5(|O]o}Y,Jϱa$^t encӖ HH7TQϒK.^(=tq>ϝoxJvc7gKf.̟2!EM4CIjҵ]PNki\{Fu\I1T;?ƿU-xᯅSx"4]'WmBkҒK\M778$suV7K_y%ÿvމmbKx-KR]KZkxggMDޗ.:wWz~k> k{}kNdKGe-Z2ƯfGW%g L>߯w]^qxr^g{׵IImŷF-QJiUq˖_~r =;߅̓{KW'Еu,:Ao߯^b/6WzNO zˑBWf^Kq-OnK r"cd< OW?[@[F{p!(c_/t{T[.b֧sBefڧx]K?ڄU~egs4].iFH`XQbwawv*v9nKp'ZHՇ?2l؜,}}Jwy3RDP06IQğ*8lcJEʭǖcn';Iw+q[W}2[7IὗʛS߶iUZFY~U>\l?oZS_;ꍽNu ,+$wsPcG! 琢βZ4~4/kxCdshpeI5k6EQ'ּ<*K7moʤy?K\I} &.B}q2-#^h_K}}m_'hgEiE_Zͷs'Z(^߉ik Į0#h|Iךeqڜd4`, >3}ݵpNJYKFs57c[f.&fo7Hxb'vL y Ӝd|;U6ĸo;G$m߹fVw^ZԚdfRw~6~nc}̉;{ѿ埒zmS⓴4z~>~}Լig.Xb.,-LVqm#\]I,U}ƟE|F'!+QwՈGmX$jyy41]Sc=ܫhoP;7Znimiyiql%K8nVU0oskUWXӖIayƌۤUߍbKNmIY5Okw[y#|;?wDxTq]o{keݞ7!C/#]k1Z{$:]жݣtm崾fy}J3^^d[:~u濪^]FZc yrmfcWm}ǑEGőޡo-s2^csٺ1uIw=^xA]j\h1zḷ63m`Y#fo,"ƿt$r&jJWeTWկ4:[ZK~IVe8|ͩ>D>HLe%RFti%J;Wu]i_Rxa3Ikg|-Jt1pM24ۤYl=5BQ=2(6G|?aM߆/|m>}%'F9-Ճm+o߇ˏ| 橌Oe)6%|.)CϿu~uVQNC ͷw\"g/Z %(߲wW.|>D&%Goa|U+??ރV߷mߟwnG5|7m"EhGx[$Օw'bf/]hPnokvo^ kX¬Ac+a[{R%w*;=| Qִi4oMӖaegp/Dx7?sztdM|oMEӬW?e\Ʊ\ܥݜVsfWmR,dH#wkqfs ^j&M5]M4YElCb .Jik_sXҌz_=Ozn5K]!&X?#trGfI}o?r?}U_/&[Sƚ5&ͿsΛ璎kJi']=~/xCӵ;_ F{=@]ZSgVO1lGH=zظ[؃HDWPǬڟf]mlѲP?Qb|]"U(LZvzt~v1f_Zg|$ۮUMZGW55߆!=q4r,^Dk9գò1'얗תp%י_j;/'|++{K;{%sB[~Zl(4r~х _KoQM&g:_*{oR oh_t+Ƞ,Xfob7X?a~̓Ĝ}[R/g O/I*jqWdY%ib7"k>[>L"W2MlZI-ܿvԑU9k3q8=[=^n T=GQɽ2In5&Mi/:̊|ӭ֟՟s ?_8Dq<"J֥.8'oy7ӿShW׷",Kq#=~4c{RdɃz<Ek{|ey}zth9O_L~qPO4|˫e4f7$ FbDۻ̓7ȁNOKz + fm'XG[TŐkr [%=)wOV*/[zqmmkvߒ>]*YF+yuac'ӢVhakdܭ +UX&WOik^H.&o&i|[G?-#.ZIuOؾx<%kyHoeei6BOfc&۱Q7fbFrKnSK{[W\3ivU-.wp5ŝy6`}nwI _%`75|I×:.MzyodckgXFʭ$hCC 7?w|jEGfRE4k߹^'}Cm?N-Kkش4bKmZe$X~DU}a5]G_>[jRkѸ1 :HЧӬ~i{uOHЪ3I#a']+?>bg>X]^-tCMi{4,R\mcfW޻K5Q.[;ul{  *wuj3oXk$i7HQt䵶(]}tw"CYfY_Pm^ 'ݎei"|j川Ήr˧~M6;I. n"yn'6U~I txȁǵW__W[fÿ={Å$R#?%k*[o񟻷v=ڋO,{~e ҂F0Fy?߇4_7{8k[ح>wKXyᣑdwa _%ӶW_G&wlo AKoMkWkfPox `XB/Cp/eS+iRm+ =jl*ڰ-'v j}$>̯oX!^gx}龩?e4{g&6* uOo_zs*=9Crly%Ě|Z &'07_EUJ;vw swg}Ow,ld_4ߋnTtٓLI#X%p@+۶.׷e_.ywBH1 \Wv>oԉV.a-n)w>MI^ iu4VwwAfUuVYۗgo nZ$VK;Mľk:4Xl.Y-QLK33tsx_ym,L`ۿϿS|I!BEúFEfc䫎??/ }M ]h<̓kw/G{6wi{{E%^ys=5]FP>ȭ.5I|_ڟ5M Zx^G"{;[w-XvI7I6HʄԠ䴻>k5?Sđ^#ӼC1[ZErfiy#W̟ʕR6]?-V2wzY{!ּbߪAn+7-_Wz#Vb=mmzSW~ש|"/ݯӕ7:~'_Dş |?Ҽf qnC[5+vEE]&ոKey]5 qRzs4{.xnܿv!?4^9xHR=34hK2nҼMIf_6f_EXۓzo9ÑZZ e8kH~5K8>L{٭u;dmhdF6t&WDGO:]Zw wO4~(?|S4W:]CسGo{R.7̏gT#.qk +p xWՍէHnI-fEXCXcwۅW^g\)m|#uh%]3z|6v'TfN*_Gj|ZmOs4pG.%+ϒ+X;;{=#o 5xkogfy%ĐRl )=#*u#Q-o:v>gt[H|+zNđ[[j]t63$򯗳v1YJw[[+~_"G/KE, 67Y~_Ϸq;M):F#h\p*@dy$M1ѭeRDW&6:M&SAm4=)4/1m#3346nZMn f}ovEhq:?]?ylm>NIsi(?{Fߕw|ۓwΕVSh5m۹k-֐};ZU*Q@YP+{umߏ7 t~Pm:jY1|+IYXR3ίREtmpj"*H{Ԫ)KWw'ש%ĶvfpwaZOE4M6iXMf&ߗҵo;k4wGju2zt\ju6]fI%e@I*MlG#~?lmΡo,{+8jsM7O&5%[^3~;^wY])[wnX{"Geoo$wBJ__vQ>&Wu .VЧjY\Eof"~%VbLW5{Թy 1///wْI6XGvqEi?զP\ӾK2KT;kVs2I],eDm>rWӰktg_.X]X}JT 4Hu_BPK{[Ğ ΁iKN^62Z/dw gHo &iJ _WƟ/Zdߦۍ;OERC2$2[Ʃ''߾7fպ{u2վE0ij6Z6fa7$l6{d|֨_NwЕ&k~}W_(v WO<,"SP]BM?Q-Ցo75w.fS (wO?3j }O2-WxQ-5M!i2BǩiP>LѬ6M7̍C݅Gszu\%E+U~~-.~ax_k1!chslwao_2Dz'=|;/ {o|fׂt7P5o4E BMo-&YHb}>t˫ѣOh|ɴ~ /+j3m S}TXmG ۙwRmrr_,km>οt.mW붷bjǛO?A6&zfrԷjM#;[̓MmCKr%B?mx3Ҽig /5^ڭnFgkYlD˱?u ?~"Ե+.mFkwD~zХZ*Sk-qmz8MZ_^+wZxRּYڅ׊.gfZ+Iq5 y6]IaR1ߪ^ʝݻï6"rė/Gt6}Xir#[y#xhn#{~}N[J.uw:/7_% j:UX&MKjy־wg$MMM=z|.r]4:/Xz}օ}* _6 ]25욤v鷖lʶgx6ﴼ.O1X{ ݻ[u4u5Jg׺fD|xM}&gs~:[4)DLg;:Ni5/;teu]#\oJOR;XwH̱C5:BD|4WNiΜR/խ>4hrL<-ͦZDFvdduk{Y!twGyi鮗[1r}7Z{M|Pq ܭN62:3~wmQ[K}mSymhYM%[[[&xa';Z8A]ZI}U[TGilin&-TmèX"/ɿM|FҴKu"r^nxƯyR0e_Ys]\Kkz]Y[F԰6sR-2MR9HݡfREfm9ZO\.zAֵ̞C*;购>IQHci7O9~Gt&.壾~M E /Wsw0Y];▼4C'K[Ik4pCmɡMUU)g2Mwcx_oxcἺwH/&a fyVuypΕ1*su[[#Jn]ytڄu.s`3,${];EW5wm{ڜ,=u"=֥d]MK#&{8ٖH$ݵWtZ1{_7=?7t [vwu/Iao meo)qc7պpjk{jwoG5퍝񇃵#CR#sƗZ\|zdm'bO)Rtk )k6s~I|AJ|Ȣ?1o _1<˟*8wWf:월oŭh+gm/EZ΍¯c=B=3E][_W ^33$#$'¥V~ϙw#gk^ӵ8/@{ Iӵ;Y.M6eDImdٿ M.sU_O[o Gu: bV6rwmidO.MO:Nxxi0çA!{f_̫o>GG_&qofm+Zl=ͼPdWy߿a~mK˚QnýFOZׇ~!kԾ=|4񿆾E^7em8fIG el|OO4IkTQ++R5C > ceԒcUmc7%s.'$O⧇sCIJ-khU&{vo8}oHct)]+k߰W| Ge>.~գHZL[B#*MߞO=˲a?OaR6iկuo`Hdvm @ZߎV]z?v_}ŗ~[H-#ךNn!|ˈn-dkHfI$_{/^eߋ3_6χ>!6:Hf'v-̳%ko9?N/y2$ӽ |O ^Їe촍LOCRqg;}by7s4s2=Ҋ-)IݏCoU幺'u9-uzH^g%6#?ҕw[Z)^?>AAJok>\iSdžU6Fte]uw{^z/+mAw_@4 xMQi5Uc;YWccDu)|]JI{3 J[BF\h7s:34wBe;9-.mߣSX=v߯mo)֟g]OOu ,r]ȲM2F)ɏ*e9IIx& |'eljgx:[o.tuc5Y8\}룊]?Bgr=R>|'6 . ^+]kT5{I776~^ ::1&r~N?bm~6s-xҸ<+OƜ/yfڜr̷jO&i>GK7Gcjsv^YjroG~;yoU٢]߈Nqy>Z\2,S~O/s\%Z?wN|L֒po{_/uZO_O_z?s>::ίZ> Y&XI>v;ɳuyTܥ}?=ZVi7 {uhݲOe5R_xs:P(ӞV1}lWVr>Ub*S|Nۿ˯M]5%??axx>/tP%ՎInIɛt(㸎o1/~}ݮT9k\Ÿ|9k ym=oÖ2CdY"Mbλ{I#8:UV]o߿T{W25>״Q-nǥj]Y]Cqq3,W|.YWQrJIlR J DžlcHwmu&E_2ZɨBfGGھdyB7@M_SLo>mhxrXƟ|Z#v]©rl|J2տMo:8u^*/5 W/cYjwƝ2Gqco3C=uq7Mio_vnh_W?͜_/{YO xGƚX⼗D=3PV1jXKM+ cDw_ޡBVs|{|=o@Z|,NMr_y^ռ/w̼[f-{>hfB#C䤋71'?uh}~g5J7jfc3}W.l<@.Y o\?h9d~L;c5W Q\W8~?w)e]i36n! .o&gk [ Lʑٿz|K ʵoףo[ͳo߻K]278-aTcV<|.ݟwSk$o?y޿%.;y3SwyߧjWn$zM۵Ydg8XQ,~myqu?wݯզl&im;fq>=l }-ÑjZm-'P;/$ø°Xn?D~JK}?͵8_ͥ CסD-Ԫdfm}jeM5ۭRi}g[G^N~VOHXU7i:qOgO-Yag#>-w3O {{qw\x{}jڛ'$e;H,O'g?Z~zin}'|s(J{֜f\bŬq,{ gjɷŬ]Cp[eV"?瞕$yfuO#mH44}iB̉J-Υo2R0I&Ȏww-wV}˯̆-i>[_C-&y5&>~wRdwRo}m(|J_ugO&/ ^bkcVh,dOߘWK:e:\/]v*>fy4?g/ڏ| iq'ʰjVq41,q(bwOerlVl.f׷5E5]oo{g<^<-L_+J񡷒{qsqcham&slI[ˑ6os]޿/>!㟉NTe,uw#mvlMGOLmO{䄩UB-?J-ߛD|!Ĺb_iۮϗBEK3w o!Zi<óby[ջzׄ͟u~.TԵdXjwk-՝lǷc_;wz&^QoKz|G'mOj!Ƭ5-{BEΑ~*{z?i壎Kmr'(߷_6WVO0>C6Wxn&I]3m2[o+z\Q2+\[Etv^'|1t;_g>3?/n5;o1.44X4Ut&wM-$iJV'YM߻)Ө^}O(W _ᦛK;m7]ίYh魭G->Xn<7Myݙr`~ Ns}*9W߹Oś: = fƢZ v?$yO"\CgxOuc 5ꎵtz3/_?ǯ^!a^[;yey 園38|mJ~?7JOh}UN{yΗ'㟎t߆״Oio-+ gm3Bڍ Цo/KG#]?o5l,yӯCE*|g3g˫,MiK+=h|,C%B~ܵOURNjr򹦯ϱԼCZWte}cIP8i^eMfS44q~vVGKzo#2*$ө'osωY4.b!Qgk]YY8q#gj8ﯧn~?QS|ϯyͤCp-.o!)ܰ{Q gbfܫo(]G9+;ڕ%=~/ܻ/xoW3 ;L2gXl7 Yރh6rN^wzxzw4/t q|m<$;{i~ۯ[u2j)hZwd$ZΓk^׼5w߁5yf4~^PYfwdK}}9?lz[9_|/+hzH5 YX@ȶriH=x{i[w9jJZZ#ټK}J Ked`FafE;yC|&:@6 o߳z檞/,<;\ڮj[ 7Wwkmy"?pM<O ?wtoY.7ɈiMWV<~o?h GC,Egơy$pi_"$_77  78ZUtkNMy]۴,Զ?7_S_ikrvnjc֚53M4Z] L&c^~ַ®:oMhx+6y[^F..n2Ī{ƿu>}jRxƛ_)6^Fz6v-j1I~fy?4}S<-~Qm_יx[6x/guoZ\+ŦG~ɆI!nwo\ KaQ&{~EƜ?_|vZjuoOuϣNΚ7*K$; H$F_gkSVg_ldKm-moaILwD do$OQ_WT_y#:|S,vww6W[|G?#h7Ŀ\x}DޅaI$چkgy}FhVv87n۾7>q|1w<xƟ(Ok sCAZsCt|ϰ$Ѥ?\#ym}_o'_OY/o| Z{Wi6l2jj~eLI{?>)+om?/9k'n~?~ztuxr{ocӖmfo9-~4&'HВlR-WWG<Һ_|;Mx7Z-t9+TMo!F_ܫ kr˙Frrby3IM3EUxLuQ-$Ѝůj\.o].ԏMԒ5Hm]hVHF%Bnj_=$"oZܯG}rI< 'σ5M> pدonj"7rIZ>蝏x᷅-/N~"hcou5cw͎޷7tI./c渭S OTYc%t9UՖIT!!!Soc]y{W{kt5y_ ~25m4{KnMYؗPǻ]6;fV5]{R(?~?u%VE캥oo}Vxؑ-ׯ4e5/~tk 2V&m-7MdEx41[>cK T{u+-JOѵF4Qbeq%qYĶyD $iQi1)-?q0[|Q][__[PH$6umuw_{sm ǙŴE=-o0m>,j*>Ӿkׇ#5}?[dx ?RiG-aL6syqƟIY}WV>_3|K?/[O}MYLoW-#o6tg%Ս5oV8/h}wcؼ F}?[ֳGmuo{o!}GˎO4k/)uv &Q[줷톡h* }B ƬfVdh}e'JW&<-{ź'UΟ%2bv뤙U|h2k?}?<>YM㫽\X.shc'Vkpg}6}y[$767)Ai_5wPd=ه_~i/𕆗d+̷GMSHHaq߿' 7gz>~קSK)ΕMb #[ʂEr|g]*IcgkwQJYv_vImBʅ'\zʺ,S2 =_CvWC~*uwXaG*kZZ2Gh挅.p s鞵akk&%Hl3х6f_~55"m}wo`s=FJ3o,|*Z;wgqdhɦiJ__MPL(m-Aqj:[*²on/#ڶwֹg8K_?Tto|/5OxrZ u{ YbK Bͧ#<<;f41ZE;׾Պm;_]}O?/ǚGeէдCW]#PG;SWR[5lj J2~zg?ֽQ_W9$7ynغLk&_[[Ylpǽ+ҍX87mfnQƩ_]_Üi-׵_4Z}7ÑͧnTܿlh]+?&j>ϬϾSԗ oѼwg=~ [Lv7icnVy#!#VhN_ {nL߷a[FP h(vXUf˹rfWr y;8P%T^w33z5SXwRDvenb[t{iZR^ѵ>hѿ: LC1Yb?{+TXhM$- "=̫nYMWi-#HEI*) C9Ri=5;NUlk[xn /̭Ȯ M4 +}%4k(WNIctREI7mo ᅲ/GGxEYWs|wM|}*ɔyƜ2Q[nYם>c@F6{77IiIʁaYpOwͳmUonۚ)5_^ ށKxMkIqvֵ lWw# Tn{Y,wɵLy;ˏ~e3Wn|OhZd66Ȩ;*Cr7Li:ٹ˕i5t`]>9[hWíš:Wyq$p 0HͲdko1Mp(]Q>ؼUOd}y._/t }l36Vn qCjq$|,G*]S>ݿaQԷܿk/W{"rXD]=*<$Igv~g[[[hZDѫ]ewo2) oQm[]X76Yq.v"I߽=^eo[K,7Ǝ %6YKK҈+o~za{ j~*d dRLFGMv߼mQymt}:x=F#$KkY!0yocvi$G}oX6븹Um~gAoŨh!.{o?:0$<뭗;?'Jom+%{gcGGԡ5{}wG,i_y$wͲ8ϗ RkTۢS֩}Ft5 h m5,uH$L4ֳLi0<6MǾ?_ֿܧWݲ}o7|2g-Җh|G>5x:+Km#Bu[IamŽ+g "<5&k7G+{ L[Uo2+;,,|׉#G ;6O~R+?s [o'x W"t_xɭp6n{[cSsoDw n wJpJ:_n?O;ǚ橢xgCӤ}G^T!RFdKoI$w1)t%'5w~ΟItwY[k)/ #*#E"F.JRryUwz~? 6??)5hfhoTm3J+Gl\Gn-3L,,tK%4=cUc=nOgJ-;_3Y> ՠ樞 gEg~6>q# "؉ΛI N7^xA|S GkG Ϛ߹o/d2l]:oݥUU}w25xź?˥ PEhyM1{?I>DgNO*q~*hȒ–u6f!NԖohһhw7^֥JJ _r."Re|EvXz_yZH[F=;?rm2]*qƩW}ܰT>F_s2Kq~WNj|{#`<+Z:Zw[24j?ɭu9[tbq5q-s鶻Zߓ8ɴ:cגS*lX|3y}ִƟoMo9cOKzL\:m,D>33۾~+Si_9j)w]Rz.rDnXu~dNQ{kJ O##10dNvFFۓ*[7?-a\閏n=erwi%|b5Q"KլruGk(]Eɿ{_x_EhћĴ[oOt {Ʊj dhm7\::?TO)MsAܥIzֻk8Mx3[[Y.-pXX3O?<|o[OkI}е]$X?HɹYT7.2w;>@ C6qpdiC6s>c`>|Swxn`m"RLr[,6#y,̻>t75\HtqZ_}}?SdMlH!teθ] EԅR/\#a]sY[$wo`7PNOZ)W>$DģB0G;ˡ5O(Q*r"9XƮVUefnez/jNR,Mqe\ոӵsRhu 1V,dl2ȿ$9:o5;nn<5.Fر߶vkww3]sg4zzkrλ3ː2ٿ߯| gm7r9?kOOQ?{u+ݻTݴQhmݽ7 BPՒLOvwΈ5CU?Y7>[h[ORy2-͟j?zwguJ-KenEi.y_;ꖑ6>w{;?K{h~b>o6ips|b+uoޒʢ_6ır|tdlbFt'>լriko̙b'/_sx=ćPov=4,.f#5+"P12ɷ+_{b֑4~.?P1;"\|eoC9]髿OBANa}~]~(P崯{ߓRo Ļi$d_w~ju14LFZC m5^җU9??Ov(+Wt2.?sUj 8>utv׊ eU~oW2 ;ߏ6ٴkMW~uv9e"kO2yEMqa<-3xVջ<9½F)|-ʬȞw]7fjg藾/ ZIuA>]4qBj}꽜Eo3UVTբ=cO2-m da'kahOtN ?&_3ҿiiw7|-. `]]+αV?q[;i⬿߷/ÍLYWJ>'Ӗ85ݽG|";{+v劻VOΣ{#Ϳl.9}KN{_Zu4h%dPʭ#yO-k>toFabQ(p7M~jmkc^\1^Mv7 7(|YhY10, m1U*2kmzoնͯ[yjP9#*6|˷d A6zĚG^ݕ!@$TwmyY6>}MwIO4Yjo ˓@?Fܨ+nդy/ʄݾ`c A#w_%8'kr_Qɫ>m~z&^Ht"95]cB}?Y-Zɪi^cIs+:q "lty(kze:myjmdjEܵͬvMonI$rlG{g4_/4o?]|SGxwᦩk ibOsu'ڣ̎eDKieѭ;I Swşzιj^:Y`_ 3R|_m7a]^[aYžw$"'eiARӯ^Er8__שߋ|exl֏#Z^^ x 1vq '̻Scy>DMMy~zl)ï=N mn5/he$naҤOZ7 ovGy{/_#Iiu߻=SPf$CQ.c6$i䍕ś)|w>պ6/ڟ~",W=ėwv]׈.ml5*XdY!h>k9IZI&eYݸ .=%c'kZ_cNKMS[vui?̪˷k׵DS4z\ke&4k[KfH"ߵ[|Fó9:S+ؿg5ᾷ o3;3.f6T4[o=B XɈJvGz~['7jq4v6`p|zNYήWQM<KMְD:!_姙j VEYlH-#rO̯6u,{߸Miψ1ܙX~><4Oq>[ݥV6ii>aQ뿖שVmqz]C&#<40is@mgNG ӽ_Ų,P;C!j㇄vu9[]=-G9D]ֵRkR]/R]NP)aZ8-0LZ}sqkAec'*6k٧ѿ_cI/m䍦'sAV?+|neN1[\̦O* "_#B;O>7o&na]d%R[9r+:>iV{+]MŏBDH. {n]_βKwm@_G'oux7IJ~ ~dJV}>5mNHdr:[#|m&nqXNR׻<}}u_!?0U&9|?Yт.{uiW:,OdB.֍YSz#Mk>$^"IWO|oE;_9| ]{M5S5Ʃb5܂[{n$UYnw>6;OvT7®uù|A|=J]\B6օ>9N3[ouw_uu-:¤eck6ٹdmWYYEݿM?Q3Lt/ {#$^k]C/LpY[Hӽ2?v~j:^-FY5Ҿ/PBO1Ҵ- & vu_WOp_WKWo-ǀtR^# ('nw~G jz~ƣ zVaOq o5~2CFII#}y2_5}Sɵ? &ڗ<,fxuJݖ&+$淆IGtk# xjZGV]TmF;Ğ$Wu+KPD2#mռ䑑atɽ+xloEE_ϼOF|#Ft I?UӴ+gIUsMm$̗<^׍u~cQKdz/C7 _ [BK+iPmI&[mN|M0[Q6}G4VHc{Q~_3o06wMw5-]5ܘq^EԮtu+H2bxn-YfX›Xǩ8Ԩ}?K/YՖ :w[{!o$U|ћ#Ɠ4w..}:%?|?aU4h5C[k|%Y]g-]z߉oo)-[WVR/&k}mY[f·T59;O]oXx;菣X|Q4;[ÚKڮ+W|7/si>s 2r޺cx?[m (o;nlMlmy,f{]JkgGMōt]RK/sj-_-oÞ-a|Q)%IZ}ZEwm_a KU}JTibN<גK[^گgs A)=?uUѼt<mo6[:RHUdԮ$dw!mk7M"]4GByzT%mSWWS>k?~w?DoS$7uou>$diu dy~R~0?2LW_-*tI鿪]ByeOiFhecc}ͶZ[4p*;w(~WH]6t Rxb)lľ^xEP qmI(;"Ծ/m#Ě-yiPC 70D}οǾ77~LI:[4'=Eo*|8:xOj qqq\G{% dƍΚ2NXbw;,r 0H&xu'.]߭߮-sU_ uZimneӼ?k,1k$u%:I${-.9{_֥(Iz)~<7a H<)/,tRدcG\Aow#[!tw&zGZ/׭nt-u,帇Qc խn;s'YU&)?Zޙ$\ 3KYjv|h*Oo;yƟ#B/}SWwg|_5ZGexOŚ'S7;63Y5T"L w)YB?ϓ4? o^ts3M?rѦ(fi-acG"Ma*c"u)s$[vՙ|'[+ x2Wխ~&iWMkB6fKL)ERgTk^ߢQN_}ᖩxSH&ocIx($f5zoޟ/,k~]|_֗Q 샬6y>j#Mt멭{4V̿v6Ihyď kguIRKmng6ߴ7ZF9ɧw_] u/G.u3O?5Q] ])KռZxlhf8^>~T[k5^Yh#usrL$G+B7 !m7{'|kukI_l?j߄)PN->MUV;\Ic15r#mKgt tws2d xIӿƣ[6LX鷑%n";vypi2s_TGo? xsޯeuiJxE[%IwoOǬ^Jw5K7kn(w*]G[[|莏p. ~Z|z[߇u}V}w[z:7'1^~8?' Oz}iZu}'}%&gNEJ8Ω_.0m^Wŝ\77mtV;F˺9#+3}KX-? XXf_.Z9&5pI,;Əz;gwvRꗚ|eZyĬۊOgSu2K ;I[u2]d%ddҵ3^e/2H井?:|~eodhp#; wC^ZSm,ۉv+ Ŀޟw%UoosE1IO)waZ;߶cKt[Ѵs~]%]SVv2}3o_;M+2f uf?ޟv+b;?_o-Q-?LR3J>E'ʤj}斟hijXavX>9%UM_X;FKN3|[rb<4dc/RWZdVݷw)'_Kw3}O?Mp d[$=alUƚM_qn*TXFVY >;eb 3wa.S99'gʈB{?Kc7.WhҐY$NN?EbvS[·]ErV-LEɎ8y&(yol߈5.ñ.WC֦k_i[Km5>'7o!m:o&x SmtM̿2iszeM[[E$ 3(MGDϚjIg-n#8Qy8dVpvדRsI~{~ZoԵi&6q/T{?ud߾/W^{ھqwVEdI#]?{t.{̴nk:Ns=>3Wh_^} .qm=[kPhzgO溙XX}I$<ϺTiф*BwzllO|it[ 'm|oéڵvvCEyk7&o_/cc^3_+[1;}ӥx⟈ ?*حjyz,s GɒTm2LnXs[} B^oxuM}xQR|f~Cs-8ŵ+71WMv~,swmpɉ H|C fyOgR-ﯦ]J sѼcspfM]eB$vVAVɄ85f~}34JѥɸvI;.;5g4ȏľ+ |iC6Qof`$of 9='vR6맥5^y#4<"']V.Sb333Լp񫷒e6Y8;Z:XZvb3+~5IV7"-K7.5LGDc2?ΧOjiD;C7snfi$n.$l_7!{)4ޗpksh.H[ ^̒CK!k}񬥷|==7o\&"~;oךw5{HcUn-fٞAdɿVN)Iŧ~A?6>29'cÚ4ۘծOxysL *1^6a)ߙku;s>|eCOŝXڥpç2gl'\؞'%EE{{o}SW[?73XZMs~%EӅht|v-DG;$u$~:|"ջ~\j ޥMcÖWZ ].B-җYkx[gtx>8.|:o4}~/vuWv^!K Xud,o41t"ii!xdEQmo'?5|x^.ӵ-.}KÓM,\]^+-+Oml6_gns˔W~F)+zO [yP9  뚦#Mk礪.`ޗiom CWߧS8ŷ|}#ş'ݶxmXM4cӾok[#mhR#ޕVϩPUWM~k[__ v+;^4.Kmm[jaHŬZfqgeUG|^ݿB m<[?|1y<7l:5ҬvZYMlG{m?;(]zoWM('u|S[|_۞3ͯV8ZOK./9f5ĖQĞmYQ)=z?Nto.j׿ txOSJ#VKCE6?-oO)x;\9,=WACCip(!xu+#O_V˹߇k]ςZmj/xj-?i^iu0Ռko1DD\tk/}ؚҌe[hP?*F7#Ğ4IkbV-m~skH75$'RM=~_?z$:AAc=^.nb6PxxI.HZ;oKYGsէ3止?Zmae ۬}-@* CJf4ڄyy&MI_W/w-y~!mcLfH/b fY/۷oG]Ԟm}?T7uh`I-trOy5k pu_y -ri.fTk&voB>"&n9|M41j][!{da[Z/75~?~Z[_Kş5Ru Gih6:n BêG Ⱥٕٝl˙;l{o#IO̯ۇZNj|Q[]A̾u},mm,C ߟyX<,^)KWgkw3㸃035x'~xKG|1%MMJ;+&kk^M\3F=߻,Sӯ}OTåoן3 ^*$wGtk}RMGIHZfi?%dw#43~}գ>iN>"23w]m迫cՍi,}2kK#7o-t_g BĦV}hom;]~_Ϟ&_ONgåèjKLJ}+,w^`]&|ߞ*ԧM/.- O^:W×v6zT?IZ M,ݤ3G ƭ3#_ONu҅w ~Sww] \\LƆ,7˻r0m?,p}aoYwGM>2g|0Yv6ﹽĔ:nQ5g2|=}oiAw>t Hfh!V6h|b>#gir/ȵ x _Zмm^gBciwxSZʰ/.-8|r׷5[WWj~5 oM >6&O&}ۃǩ9v-}[_ש#|/w OkZw3y{}j6VQy#jP5o5͔)7ʐy>dPNm?GwkOwMַii6 mi*\[C*YG7kg~WIOGzGT' %5sÈuSʻˍVH|2<{^q_?^Xz5罯o/ṼQ⟄2G5m=:>Y>ˮ,Zⷘmlo(5)-uկ462qֶ]wyx^+_i=Ԟuhc<0ǽ;TZ|8ӗWF?f jW^ b|e[kQ6Acuq', Ь`8;dJ y-u_]֧o^16m᩵Uk-?Ğ`-d>oYa$So3z[cjGOڥïw5mvE#_ kvKji6n-嵜s9H{)6wC3xcS$v\=t8 6kg|z[>fy-VheW76f]Tme~yƟxGKXu->G v[cV{o0FZd|mGTՇg5޺Q~{˅Рu[DXٚJ[\/t'g5E|>Q4M*H[/Z;B;&KVw~ktxy>_$ikU̓3j;goHa"#|DGߖU5 n]ɓW_}IF+wCs IcJOt}"7یXld:\Ό<%M?.~}Q=x/ U`֬Cζq maԞgwVKiDzU$wz|v>7HfeH[L?vYcjj5zo_-;/ .mttEy.Efsu6?ZJvv>s5vVx5XJ|#hjx1Ij"ׯBVYj%&a;,Q<Uާogakk{B)I J8x:p[۷:էE[k]hzK+5P6+GDFח\lMؑ~͒7H^qR֏]^3m^/.eôeFV~oN*-si7u_?3࢟&K<=#h570-͝\74-q'dZ/Ֆ>,Njςb/|dUC5_x}ͮq^x!MJ5k{7~2lG}$n=xRq7ͮߝ4%4nkuKß3ox?E÷:$Oxe2u.fIO#_23|V_#|߻oڃ㯍t+<Mb'Դg h5 4{u R϶^l&$7*tӪmޕ&۔Vm;E>'#jo4-Cn&}c#~i'/x[VכNXw[mO~5xI,|96+QekZ #-~O !wumMohoO f(+@>LxczRzK}D-ݼ+r&q"/[|Mly~|A(!vjjVW\iuQ-cdzEXQ.u:"Umzww7>Uϝoi)suv #gE??rͿ]&އߏtetԵ Cz>lkVu5Cis5${$&CwmR嶝MI{e\rXeX-j14l>HV$yˊ!2n}ԡ״Fk9ͅIoo􉭭w)_ENl潸wRJt }:M&?x͐u߲?{~'[juj;洲I.`LVI6/g?_Qw$_:;LF`FE+}&򷗷be7nI,Vq^T;nUnVۺO+4SoKhƟ Z4AU9ONUslD mR'SQ4$E,7ʿt[o=/@hF IvKyk3vݎzs4Wz=6XSN|V{}+ [ool,契2-hf79ɧL}z/J7~4Ə52-͜}bOq4;?ڻfJKMv]~hɻĞ/+?9oj-j'uχ;g&"~;p^[i$T\эZ]=!^MqvbZdl&9_ݫ<:"oi\8t[]u2՞/6%Tp %[^e{_GTc ];N ^d 3sL7˳RkotyM}eKQ|2[kt%u NEXlag-wy/L;`5b룇r[^ۋ~>״)jvʳ;I*amo&_&Il"V<ΓҳZxo."oxӼMS4n#4~$/hIߣzØihk-CZ6ֿef ̳*vܴI*WzKv[%Zzߊ[9R٧|7|Tl}Ǜy3eT[m㱁$VId}DٻzWo_ԮIzz]fxKXw?^ci/[-o6渓gȕ6QOשti)ZMwvoߴϏXյk%[D.k, '˓\qJ[u|N.%|MǞ<%ue]I}:E3,מ֨| [:X|/VoH]S~~< ceksMVU W n3y8V96IwQp͹?]Q.|G}qoc/Lk}Io|L/77N^˯]>hV~IfhC\\.rŅdM4y:ٻ\2|o;I]>/NC{hr"$ucḸZ3/'3&Bk% k*V뤿cܛ/Go HV6;uYsy4;ukZɞQ7] >8Tg~^Faׅ9s;~zЏNy7'|נj˖^H8ϧTK't&ymNk8Zݳ,#L#ng+ΎVN𝗉I-Q(Q'qȭTnɭ!5̪zJ'~爴Wos? %b&Wr^R=SZ:Gׯ)N7]{+]_O,eZ_c<,W;!i:K۷na wv̟3o$=u;f)_LK-NOm$֭ ([k]OPELVde>͜a!-$MDb(f7z_"FwSCݷ˻ۻ?Rnrjb査;/?v|a\WV[*Xa4 ]fէ}{|;> 8O> ʳmud>/ϱ+,%=*u5y/}YvΞ\x&4Qj_ǩOG{]M}C szݢ):l_DIi|ۯH~^WYo4a1Sܼ|Α՛MG~uߟdky-JC3J茤[{<+ƁKs1}n?ں95~moj.H_,N`ˍC`ڻ4)lկw+v;]͹|K-b#Yk(}_hoZn~*NROS/ILmU\,grˬ~]_x Kٴ둭76M$Bv)~G5*=[@ktyk%ĎM=z#*խ3'Og_[-ZM6^y;?:.=Vo߱%>l\,jDRUv$ei?"}#9Ѫ|zD|Hv{|:m~Ƨ~m7:eoGʪWۙVW;>zh>6jMn7hjCq$6HH9Ɵ#WvhjWds"\ߞXJj/ Fws<)wpɨZcUqӯ9S'>ߏѵ8z>89|cO=mw;[^]y_y[v{B LzpU$p wmY]:-;{~[sm"T]񳷲g?J]?-;Dx:/ͷrʅ7zM%kufMYHlIneIONz_6_ciҒCyQ?û+3kiM^n(Jb_vPNu ?uGoTg8i4[?y[[zIܒ !?zSKNSvym}CKzc:]>ot?77/֟ooĸI4yh 9bdہiv<^^_F7N?Sesb8d$~_#Zzms{y1Ǘ]-;\֝~_(ux͗V-}Ӹ6Md:;|K[_Scۘ2JX=ɷ=i{z9S;NY?_3t ]$R捷CgֹeBQWN3 o?c 5^8ԵK1gd2Fc$q &.7XEC9S{ߋ.)X/~5OjMugZm.}yok"^'"'?}oMSy{V~{?|H5:6bB.({xOԙIOṙhM}\> hV;U/iy?Χ߇k2Cy.;$GЧSZۿ{=4۹ΰѿ^OlN\xwHG3n2I ȥy@diFS}/!O\Ҿ^/{/k>-5 [@6ogwqbLekmt߹{n.#2X4;Y*76֍U/ÿM_#YEԟhki4I.kxuI<6I8Х-=hj$;6sU?^n~1xT׵K{kXkiw^Og4C<ȏx!zɥ5=~G_R]sQߎJZ_I ecHn뾲I6[?oQӼoc>~,D*kfI9ވL[˸_fh\=/< {Fx/cOo:5,o6)7?YEWSQ-E1𗁠i^5e00M4aٙB{Ⱦywq m;I罊jIupfb.26McTgknXQd*Wv1G~R+lV-V_>{sZ1vR\w`:&ݪW,{}d9=]t;[ئWI< тa}x53vV.{i5~dX`eFQ_tќ\g{HM_<aEkS49 S&5yUUXG7"yb=wYs2Q|oN﮿6li/:ÉW'̸-7'cC{ |#+Dndg~gWvkH-wa;if)k`R1$ 'ʿ7wbw?y<~_\~?Dt6ٵI ;[UMnfEW3t{; %&+%ta+}(fΛTWd/>^ݏ?g{e% ag ~9i?nl^];T'Phmk`q^okY-f 1[i>'UﭿĉBťxŦOhc^6UGe,ˏg޺UX$rKڷc^)1C toO߿r\޿Ȱ%KK*-9Vܸ7>R_oku)4f%S yۻcG?uבRӭov|a?؇ww\Vy;u].gVh–0 ϗy弐)֕=ϩQW_'ʟ_<M3F>a(I) &fm?rʔˌ鿥z,uHN8K&Z=;~ڇE^zO6h|OTjObB|3ѼAyCcZ|2[GuMt'܇Av|ۻ׭fi]?_x?xD&eZPZk&A5)|RicKxSVZ_+v>v^Pg?> R,p#/‚浿F2[;[?m/|UM -@Yo' &/E6;$;&lgx ᆥ==Xf+w6laiFa׉unx,d(#jV#w|ffs('! ˯sJC}27Ln=ѴnΉ$?.2tz|M4 ?)JO'NsUׇu%G[y!֣}C# lN2ٓǃ|EO _xHA-O6XQo, v4)ٮOw.Yvg>3P/otMdKG8Fgi-IkI$gɜ/.WL-⏄:&7>%^x:c6'|7Fkg}Vլ;$\FSHjﮭv0En֏u~yhwşv??]|PԦ5t9&Ἰ[i{eʬQGF?UZzknqB5Zw~~iCƭu@ѯkkPtn.4XaKdx|hy՛Ӣ]]2xw_h/xd5Ix,v:PKC,%[\‰󼗑&p)zknMdN~ε/4 x|(<5e*f0(5~zdD}C^(to4Yj:ڴd l}̸df%W7NRM{gToo6Nω>"k֗ZG}D4{TiIfS[okcHws2j폿w~Bj+v|i}Zy,4?vo:"[![=1|͟O7熋{r9y]NCM#4D.g> h޾Vsms$p >7m;0m{ﯙoƖOwaԼKj$HNդ#_"?&ItMpoRwV`5/ΎZkܐp[$z~Pɾ6xY>n3I8MgTv"l5ۛoCP]Z=Km4ֿ1IklyϿ{'c$9Az+>Geq7o~x~_uojw1Ϩ~(M-!r;ܢyFH?Q-&4]ξ 1AkzLNZhO}_k".<7mo%y\Z5,i2:yvGL1U([USٴ;~xGSjwB֗:5[wITՕ^.S{zVp9MvtŨ]zmwL42jyɡKZx~ﮱa It#z̾^ɘd9>'^$涾켻5UwZ O5<7ǧ:Ɲd#ZǴ_2i,bllf8NI/]ݻ_#T4v&6tcXm$kTryc䍼W/g+_ rj]Ol!ҟP;/铪\.{k ~W|ֶ4>x[Ý WFAL|xIdMx}?]XhZIjY$LBc5er:MRZu/g_}|3}gFLK yfd+#4P a)oo~;oߩ)rK~>_Mx]ֵ 2YKhaf4o<{?~=XVoX?oNִy.KUpڭҤcF3J4mks,~v-߅KcΟ_"OCxqnm-F)6<2wnnJ_zV,o/A;yKx##[.;}tBKkDw}q:ΗŗZU|k_2Af@ ,u>k;]Jg4(zꄥ.׵"Qp{g|u ϧ74}+M^i>kVI-cYOB_#uk * Z*//KLo,mf}:\vvKGgm 3ny>NbKvuWP$;5  TpY7N]eiGU_0M=O%O-ռIk!v w[Gto${%DI$=J?Lg? s^x6;LhT^^[a}ma٩FRlG[nhvU.kzlIO4ZJ]BQK魣,u2Qbi;tCL#篦¼>2/{z_6p׌s7/} x |(t'¹L֟%c m&qm¿&w6c7V8'+{{|u$q{>2"k}?/i9<ͻo'jJJ7-G[mVy>丸p {6lL?y߲%&: kAoXxMZ˫KkESu/|scSpѶ#G˾ "x3h &E3Fy'%;hnO>槺[|xs&ab;m[R6W C$XfdR<㷑>}\|90h}cDy {[Zlk 4~K[;jޖN mSu/h_Q[#<9vwz;.fE-.I̭NsiA[ͭ˧+]zzdžaZZ|/ Mn_=S>y<,_g- ~<ϷJUem<^&p~_>P麛usok \lRm\h“j+9II{v4WMx-m1*+TIt_O3j=SB;fG *Gs{g'~_5Q ]Ԥ[ia7>˶6͸/:Ӟ=f#s#\ )77?5Ӓ=fic@8K i{[K'ٻwe "6$P6w9g[wm*y\yiְƖo6{)+)ʉ>m.Oz8wWg:/>rϜ,?7ݻ[J~ƏWG_k2&7T{\4-F 6 w~*-cPBrI9=?ݚZ vw*FUT&R*Rj}7f[=.qmmhncoLuOftѦ[sUny3a1u䞿v5RV_[]w_xL.D͸:|EF׽2{,{IH>\*2?w}kX>JvVc-āC*Xr7oךA5ђ˿iirp6O6&v]tK{:]L CR 7Ozdpmp!Cu«ý8K?' L{˹KXL;~\jbc]{?NAwoko˥\I ֥poz}\iӿ>5obt{Ky[ϛ%W6ߕUoޥTIu|Ͱ5%7>B4lC},8;Z=]ټ֎]m`eIᓨ\=匓H[-W ~t]C\{rZȳwwZ6Z=|)CahO6ۺfR#$j%%=wf<'~UW|V\۳@O*22yٻStL_?y?9|@αoZƵm/C)}Nlp>[_iZ2Oi\vOׯOOt{gX4G%M[[UFT3#,~b]HGtxpO-#s9Z._s񟋵C:|G-א s4$mU~E3;?=ׯ@ũ.hZdfioG$.5!~}=&P V"򜬞@O{#V!M>Jtm/$u8|Ǭi[}Bu@꿼dVEs'c#tcgDtF;tlŬM񯙲:Jm+A;{ M{Xt[;[B-'NHuk{gy<߽MEgo9ǝ[|O|Dm' L~C,t~٨\LI$6vMQPTe%+ZzuJunk}A|GjiZl<9agWQk[?k4qMn?x^9GOĸ{ܶSxƙKc|H־/EV!Ugҿ5ki>+Ʀ4=F=E䴑d4FK{Z4m =M="F(ѾC9+o^OF|+|=cxfU>Sj6cq֡ˉ;kYogodtr׾ }ot.6$]|v&:sc*X}}v/uu`K;gk&TtΚ׮ϧy^i隓<{x>{;Lo6-y ? \].Oڅ([t?xC𦄺59fLѴZy$ fc~AO:eF>O<cq[.:IZHkI! ylR<9":~^~v[fu% Ǟե$}sφWy//<5hkypû1E:WdEFUNKC <Zx^;i_CouYYdjI%}_=M)Rq^_#ſhρ?> iV⯊4}[zPA=wMeZYn{5SBo#jn{!t[9Y#EE >6J[~$U}S%,k{0EƋkp RƻDI?߻]Je-_5[[Ms7m㦑|sE6[KOtpȖO4\7. ܉Nԧ{ItM}}N˩-mK'ďOco GAWzd0ffM%ȰiFY#9.H7N}~f3Խק'ߙ?4}j>)Ե4̷H4pk7&_+'pT{_yxZ+v$4ۋ5FrѴ,mv24??M)5m5~Mjҧ7z|z^=&q$,yFb~k)KziNyS9_xÞuk̶#mYfK_-kh_̒OO)ESy._^6h.|Z0~h[q -ƟwquqI͚\ThM}YձJp=6Y7qu|{Gi5Me;KF8c_,6ؘ(SKp eY%~k_aWީm_~N(}sh,5=4jx+Oc}>k{}~[{m>O-g\[Y㪥'`W\l%}o}w"'hw1Iqm.ͯiֺ{7WCo!'<#~ȉuI?>=t/mnM~g~Q^yYei?#O7xwFo춿5b>miq[6m{t>ɬAǥ u!i-2 M'RnZjͿ+Hk<xz",|A 7OOI,rM"g]4m~:_(Z9ⱴTi<؅IUn6K߿lVRi}9Z\M5<''_K7n%#G!uΝ_wq׾"Y+_a-2Ѧ&cVhd[dwI'%+Qo<oxC񎫥A&iGV ]%/^o;b\C~_b(7ǟ ɫhu_sX84 {jZ[G \nMzk:M~~g¤J޽oʼn z%ڭ~s*49mrHmBɕF߹ȯ^g|o []Hi%8AwꭄS\zZ^֗= ~"Xiw~9h7?aIwh,u*h7[ۧ;}%٤{go{]vy56&}~S'>*iHuu'ú5 {I 7My-'١_&9{iϾv|? v_WᄱGÍuRin,f馚f|X`i#˸?%&Z}ƕF>.V⏀V~|[x{5[2 7~Jcumsa4Hh|橶 T|__ƛx#ZYxsƶW)(Z@|>l^eϴѝ:-]MYk_g/}g|5;Ҭ NI5Mjs BCq4i#y9PRZ]]_] =9' n7?_>}⻟ {J4;7P>d$:lv٪G'I3+}>DOVpHGZNvuLԣR 3ק[ֿmZx?V^Ou4>:oVA[7ui*:G/5}?JY%ihZ8v2=6yJiMheŋ٣·k-eSSG 4i Bv/nJ魼~&wvI; 4zzZ/Xm6I"Mg,6tO&iY>&S_mQ6?X}i> h٭,U$20~$麒KObL~iXG}2B5\[y(gηMtybvm}}G >Yo$7?axMN ky!hmwhʗna{dh$fyj\ J͵nu;}_')V↱^ϥr9K\MjzТzwƲNU߿{2Ix]S^#Pm.1}$6]Y ?smNwo\#?eo ^4cf_*]FZ׵{+vh]7?&ZI$x~^}Ɠ՜/?w0[>id4Kpj>L7ikDrIn\^|{߷K>}KQK͟c]3_ΟztȠs2lVhM }Oyݿ<Α+ϵYV]vf$q{u !ibo&7UTmʽwU~7|՟ 9/V7G xkWt]_*wړkjL7gMg?/pNR{ߗ|To>*ǁk}V_S]y7vk7EDiyn]?y-GGiCWm}i{>x]]{kvիiyr k|'?$ɱם9s+K~' wt iz-΋ ].̐[\$Z4cF>d~O˰"VjMlxğ'V'Jmme;tL}72ؑ5>:8 i>#^vX.Xckqko2LU>?2Cok Zku;3[VeDf di>ѱv>Vޔ*ֽw[&i\MGxCLm\Ok ]1bY9cڬa67ȳ$(<bZ[]V%%X|{O_^{P￯#:FNP },m6_q"K2}菷!߽:!hwl~_&2cY5qs> /wZNq< 2i\\F\wEyپ$oߡl乾v~Hxco-y+Ju-FAFxln,5Hm-P[g[L(LQ4hX֣guumeAQ\RWz~' >|woIn7 g7I%4{<36ya%κݻ?[xї5l9_2˲/+xwQ|[igx~e1+fo.8vIų߰*N{k}zooB,{᎟.߲K++xo/}ZŷZm&妚7}5,^<"%oFy[SޣB*UImޗSO|oJ(7?Xi#d֕VMחM3\ygϷ5|(Jv˻Ͻymq~^i^>^"F <}-Wf;jV3LhXѯMչ}yv):RǭԊ՝(ݿ kFS I$Ch A XCn\4inwxɁ'(O>%ͷɮG>>ռQ;l\pnWo/Jt^KmnI);ӣ0Ң#WvOW<\ػx@C栓͓AFfbVn5FÜo^@EziO/2:޴m:1&Dg]ʻ]̧!NzR-fq+"X!a0ƸiGjS~@vO\kk8 (pOsM~_؛lu/7{_di٩[' d2DlM%#X0bF۽rjKv[2zeM\[ۛl, 6M߻FQoi$O;6mE[Mgjv>(֭.f/,\,2M,omm ƈ"qiJ)?qIYZr-F;pǵYEVo{Jnv׫ԃ FvqZIqncyH[twF'Uٽ29dtZó.xQ\ku̚aCMio!qu~Zo ݏlK/h6zeqoڔs__,m}z|ٱ8y*]w'=̯~^c}g&-ޓ]tlAu.s9#M}W󾻜rv#tCF; c xEnn-4IGy/cEY?3ͺbSٱo)Tjjt„7헬|DgZ\Ik nm?wUO ^}~SXUtwn޿ka<3j[m_Mm>;J-HRAc(藋q$r$nw>gk~燉Gۺ}鷷Xl!Af%Ēim+n3N)$-p)[uGiqy.@\  zi(SZeۣ[kJV{Jk{{xfvZI$OjM߽mӹ4z!Ǧ|1>-N:W+ \idqº$qmϾfϖnKj~}>3xWkoMz%Fy ?v6q mKwC1ZLSݿs8__w{|uS]ּ/7Vմi]Be|Iܑqr}~ǍO2oG{8%x-3|994-[sa/7#[țYΚeY#Mᅱ0O'?dNwZUp̷-~wWEi$VWu*~vz?x_x+^i2GkMu$j$oEXf?ߊROK~fpgmo>{3D%g>-,I$s$p i?,+F}/\V[Zo>+۾K'ு?Z+t;X.퇅Zy&d3:s\\]5m;>f>^~zum7մ_=.ZG}eaom4p;M*T̨]^1SM)D Jƹ]f_o]\cnq1$e2XOAT4ѶҴֺTb8wyj˝QV?CA<7"sj󶱨޵7Z6MrHD؈FOMfDlavx{6 h?vѥ$ {nSNݿ^0Լw %fn9ۆm?q?⽘Ea{v[ݾfu+rEphO<їùGqxURoWG<=EKngv{U8PP>?1i[uӍޟ˩! pzOY m3s%$`3ɶi/&Xw2Uݵd|C{x}k}8hz[څc$W3IgxDO;>XċcN_7ow<>Ԯ4ҼIiY$XR\]4' w+C'ΰ3+.E.g+r}7xXӀl6wavlՏI+pQi_h/ᦗg\3ŚsA彮!#UD"к.&%^0VQ3-u߯g|d g5s~/ĕu6d:d:m jߖ.=ĸH'9}LfvW?Wiֶ"BGEziZ_T=0@ndӷfsYs hGQ=2MGPevPkq?UJoO__gϦvh7fWӭH . o[^A/HV$g&4ӏ4;mmW]ߑ|)Jɦe<:‹V?-_o7+0xkyu<'MSߕ z?/FYQy#oV[q>%Ovݞ'MemurMgh.P6L>e+F߯=u/T*߽;Ǔ-ܯ(̻O˶96?؟-]9[;ߵƩM˱a-Qu JHv?"oU ǯߩþntRDҮaK H?~ _Nz.O ڼco-mq+DlHm#v2iټ.GCʬo?G#+%u} TWC;Qk !XuO<2H}{k"23Es MW'#N'%Og+C3SSđ]jvȺv/ˆbƊqw*3Btߧv_0/|kM̮&!D #}7dhJ*r~}-k9爕->+k7|̞c3.߽Xʺ>ӽ'^}]6:xvxjvWqs}U21-8nOd݇{yYpջin'VvZ+=,&3/g֦8KO-HiSs,Fh $P3/ލdm'/m}XyoZnUvnP 'v?it)^ZG춻%'ySʭ/ʽ~~PsT*/G[O;mc0+ ,G96hQjzo^9 D3͌ɕdaO?ru忨;ho}R"EiMmq`oDəwoVb mh~''s}0WQ/zmѳ|̽ TksTpZ8.<: C&}2+7׺*+Fz3۾fw^Ե;+7\4_},Ӕ!9y_wofQ7;iTk;MĿu dľ _rYKg'a%H*?}֬[8{MZhEaxs,/=w|ˌ>4}#i?7GTM?Rd'eޓ$mm2,?Ns]ԧ^1!Rw#@Ԯe$KF?+H|qnsZ߿c8Gϻ2;#JBgiYݶ?ĵ^+e(]^'gme[]Tw?Qzԉ[K;%)I\2qtr[~eX}˧-9f>~w7=}Z/5!$PxkL]T gՌf~4 ܬsFP˱ֳ̟oW U:i{:_ Sn$U*k"n/% YȊY][ק?9%ccWrjm}OKLK5WՆֶݱJ~϶`hZɷ?_OG-<4\K?v3+F?%pb&ob}M=u쿯+JxKJ.7dr)f]?|+ Jw~Wҭ:=:tz|Xbֺ5FP4ҫ65izW8[ Co^ǰ/,~$I.4(@)'>b2v}2+EI[=Gfo:(Mb̚[RhN /o-Igc(L,S6H?MF_.,='Ew_yR{A)W=֮K- ̬'#To֥BiE3ƼU^|E$yGe#{P^n?圹_3EΒgiOU]qof &4[; *.~ ]?^nTh/\x[c<Glჯʲ]:GO։`m_W}㪹o!⛵fXݽjcoo&6~GѾEաFw°qI M]~1 r:z}v U_|SO|!6{Q!ԮnwVev/qcpKEoӷe>г Qi6_&ߕ[ҼYb[Xm"[h_q^Y22F˻?WK/ew5o~ t_.wVtFGBW'毖Sߛ짊m/0i|۷;\۸Q77_tu_/WμH6,b^ _vo^{tj}z4mH {%YWr"f^WEG+[s?h"3 +D=9\,mz%n _\۬{h?G Y4'ӥP+f)x2?_j7R h֞g Qt.ߵ?bBWOndofoS쨵g/KߥOצLO=Q{}+M50h04lߕ^_ezPwr]R% Icv|ڤ^NzL/-ݳIW6w傥, 8j7ׯzEMR1ͯ.G5ΝImwCG=y*ߞ-⊎"I/ѷpVs;'i5)Yɴ =dtѶ'g⿳aO5#3аm#mM7ŏ堟P%mڬʼrO;_vSF4> 6;*Qsl,LۘSzJq t4;GuK?NqZOVqZxj.ͶC# 271Vi{]ߪfXRݯǶSYEyuy);Io`c1 4mjl=3^#o]}{۹I'~2Mx::on#{[ew2ͅ6"%6}~ i)+vs>,jyPInRm\/%ڭ7~Xtw׿sǿͽo&fԵ >;yTF_/vd(9(ILzw~/Akދht2)O+Wi>}v<ݽpR~z3J/󱧪xvZ-c{;56aOG2H7ο5NO\tH l2{fEs|JmRQ^2_/ <z7zsWI-~iLn4pݕv2;w|wŪRѿLۧD[][#`32 ߙw~xaNj^^)_}8=Gj6c?(6O*ǽZƔNW_'7fh|+V /Uh/?tK"n8xdG{_=yoF%$_~#)|I$2`@lDB˹ZUzj KuZNB3J|,[e~;Wn8E_sHK?kyRk$a`'giSndd1߳GV~ߘ;;}漒CD6y mWa ՕzcU7?O+zɚ?يhNOFdg2G{w.|/k#ޣdVY[[1i?:[)`gdR?_{zwuտ0䏛cׁAtwbh͌ߙTIle:M-:ki"ʑ~OwN-׾[wFE]$TK$gw_6F{cJ)- Uoz{>ύ QEU# -\j3ҼN {N_'u:~V,ȷ 3]#Ldf1~]w%RZu\^O]NZ{93ZYU:o) ڿ]ϯjz֯4dI}.H;=F &x|AvjƒۺkzꗶV xí}ykb{9{k3&ɡIߦS,Uko|4_-Gv^<}nI4 'ZT6nčmRgd0pD.Vտםyk<^]BI\Ȑq;O.kuWHWgD>O.?oovdUfGu O =ޭsi6ڍ\LmIO/|#ƈmcD؈ X]-ՕX"F2G}Gß |R/hzGm%isH+ՙZFѿx-no-md D]_{.woʯ>%Ű^*׼gmiZ.P􋋫%w 0Buȗ&?1D~0#.<jnQm 'լ9xNt.([>}un5M?fOG=USRIv:UoUOϚ6|RO6V [dӮ;m-Fuh0[> i+c]_?|]Y7j>Ѽ7n hD[2&fu+g yKdS VnOMmmEv/o45e65۫c:ihm|3<8zTVQo[|̢)h_n鞫x~Z}q:|E+^z<tt_M}ow{ǿcxiՔۻUGc厽W}}zm9I^>5x#:_-]Z=Ʊo%嶣ϲoݷ;uB 5/6vnŸ+o}ϡ~=GLJsU^[mWsnhC3H|n;tzmJ =t"~5;_VmTV;yaFUGyGy!I+)9~.tʪK֝Ϡ>_WcIlmoH>!ȇR$_mm(IthEH6O˥Foo̥}Zj <;}t7%M]%!DHRm~_ϼ(>G'_׿gA_{+-k]xNF #Y,z<&??֣^^ooVgg|O5;6ǧH"}XmBB$'d76ɳwoˏχ|T@>S/M]|a{%1H<$q3}kNѨՙƪO?߉nn>xGé iM^/WUK-wCoR仺y3[KxSoR+Qvd{D_95Ѿ.|1Ҵش9ơ6z%notKrΛE併m6M6*Rѫ?KG5o4-4?lv$.o#o+ݼFf-5}׬N?R_FNQZM|#h|'DžO˧wRnZ鿲fԼ:[Lfoޏ-&Ngki-V{k;kS>|g[WVh.t[˽VMڳ~wDoӼ"˸|^;#Uo3ERkT5[ɿ"nhMm K}S 8+'|a5{S5>αc5_jv3[K}>uuX^KwHGdI<4]T+?yK Z+rC&6q A#}4%ivq%vKfP;Wˏ˚SԧT/k_ OmU5S-k[[7vddwٽч+9NVuj\~>5=zm ;Tm/SӮ)I $rZ˵k'ɲM\u)Ikm|8_O^=oR^*o2Vm5Ə/fVI6~wDmٿr]>/;,SmWĭed wVQEL#ɺi4HSHds$i!GYuooÚ/ߧx3^]k|iSдTu+i7[.D\LYr̿?s_'iѼ#mg_aRXv7s"M Ό*Q/5ӻ?i {ugKseaZ\i:Vi2 5m%r[y͒4^^c)Z>KW [Z|?V>8oıǩhȐ^&unlZo&9<,B;|HP&f!;[eTKܤ;d;97ܴbNk~*]h-忸[$X%7|=>K 8^E:˥Elj`~]+~~3*S{}͎sPb֟ojkt`^2q$${&iֱ6s~>&@̷Z{$FmQd;tJޕzWF2~'/j#֦5҆ڔHK~2ċ$ϵat$i$l驏E[yt~ji^4|-h~xzF,Zpo漅dY^gsGw߲9I4!Rk[k#dl/XuBMrWK{Eu+9t:|=ҹ&xn_={ڌ>Kp_Dtյc^jMou%_Ğ=OVl[>٫y wD2yǛf1~X&~4ehM<2$s/䭧=yco1{vz?:je>Ѫ .o5`{1epwC!Z*V_ngL,o5f_gZMWcwr -u-ByK㷍}k~vlYhS/웿o%扩YQ5ʋ7$0(UVdfAY_;ofWΟG<'.^F0S=U?'ߔ?^Õ~p{c⛍#FN|pI{v.aIw$GirQ&?|fG_=4۝OPx=KF$ym}1fvvմߵ^g7^ez|ZD`"Q+M33nVI?bxᅱ-_RΛL%Tv>lt7tW|=V;80.Ǒsc}cn{VeF6{gʸ,IA5:|CX%* cjy}5v~_]mPͧ -&YuMD62t?=>E*]mWZk:^fMZU1q$wl뻵zOKԴsͷr[K+ߙsIMk; wn7k4[5u~߭XK7wsylJeevUG~9jϽEJ˯rJ/ۮw;¾ XU-n,ա&fn*o?3}"?:U+}]+&a}o>q$:ەEav߳|>y!t<16z;Ϸq]?O/>![!ngY6|^R̸S<uo:Cxn - K?:?9fڵsA;kx@#70Bk |̭rK}Gn\?3޻ˢ/_/)Fq"jM^6ψ+#yiWso$kI y|Զۻ$|߫#Լ-heqlwlҏ&XUmcd6liXOBlNk=2QѴՒhc;K%y)i33"*9% os|j6>ΩaFHդ[uGdM=A+_:oLtoJfqJkbiNwG5226$;wJƎ[s5 b= [kF9bO/kIʯrkoI'm쭬`j ڿ.G\ֵmٜ\N y-2y/l^HՌ|[˻b?]z|fJRכjj'}|| ?<# xOE4ii ,(MwG7M}̼NwI;;>m<-f޴K3eA)W,#n jKk5#~)\ռ-i6g&,8D6G37{)7%LuͲ"BgپZؕVQ^tCya;}=_ m6xm][Ox7fF˧yg"^^iw0V{%wqǽ몔F>v_ۺ9τ <n--9!1Ե` MneE?ζ8N7 #Wg%&^GE;.Gi4:V+Co^lc'.5iIliꩲ}4rӿ9?k⏆o׿ mzg,u fMX,昤| snm~}?룄w澟/5jSm>&jiz_ ŔF[If5K,373Hy1&z?UTrB5ww~GZ׋xxzH)4w"Eu,߹k;ͫl}Ⱦg\W7\g':R>*uyu&2?FJ4j!DވwG|Պ3߮%WZv߿TIZͽcؘmoydH5u9F% k5ߊIhĖ;ٛc3:y*E%Wn?juRyn#YOmWzꤓk_7u+h+/º=K]5ω4P[hx5Ɠ'ti#ി5W4"|NwGZmB٭~ ]#t23n7MsCb%Ԗ|13*ſOo27yOsE3L!Zx3W|7+Vĺck. Ef,;|sx<K,u/MR8%W,l4 qy\7{LΔy篟i[,28帒HZHY&Kezl7Geq{;VN{gk_3hhVu)?Mo ƒ-'!ymSJO׹n|`<'f5 B[fK)GUVvi+3)kӧɳb\[^u>ZZYV=Cƞ'S\kPZLX8yz{Cӣ(VZ=}~}]<>eW^a'y'ndZ{u.db]]MyPǵ%Է>9u^}?T)ƞ@7x/77Z˶Bo2Ra4׷nrWe(%u?mͪzß߶U{u?w6 VOV4C ^Gni߼{4t{khKtqDk{3ңh&_ :-`0=wA9o۷#B7XQٶm?B=v6zDžounR!An+iv?c|ˣϑ+sO}~*4zoIZ Qimn{.EVԄm5B0 ,3M ȲG$<O~FUj[=ixgOxs|9|ťaN C_iw֖py%ͤ/\q[M#tЃRnfymOռ&K-I0ߖ8J*{/^N7O MԭSD|Ɵh擧. xW'eSyL{B~]{x`Q&ݓT_H55yJ6rk'Ÿ|K״_ xc_Qn&U;*e߽c?aR_{K--O*.rj]-~̿ ux{UM|lE4 > Zhq[?AsBѮۛ f$}>x_3i;Mkտ~]Gpq\϶߹u[ρ ҴOxWCw:MMi%~LMqIgX]Fim_w~ ݭmo3P%oץ:%~g?[//44kMԵK?x'8ƶjV i"MxJmw;Պ\/3U|(-޹c1mxagsiƏj2^_Xsw㶹aw\I#N1ow8k}o,4tOiWs{= 4ԴikxdEXnhg!H*ӝ{Lbz?h3P[7ׂhmhs/d !+Bsce(u}~fq{|;W[ MwOaiw LSoxf-vP-ߩߴ6ESռSop<3ywh"ɒK&&ֺ9!G{4Ȝ8+Wz뽭{ .z_?|:5߅ '[yoǝgRW$RWt.}=w>Y|V~^!׎uMvH-;_ _BFh6kh,|Λ!'$7NWN/_שw|vĎ?=pI/_>upriNU?^!?4V)ҧX?oU,j,rC"_5瘕Bտ3̕9_|%T^HCixvzw؛JHvjاn-ṹ9.?y=z4g+ӿ}?w^o?Rkk֣^"Ycm.T`i,\|78FoEm^}: ΜK龷VFSI~xv}'GXtCRzM7kMYB'^l\y%k,Ҧ$?'}{?4IMjľgy-4DEM+hf&{y"]s^}9>wgzdH|#P|AޏSþ׼Gm.8Ev=7Z=f:?&ζ:pϨ.}nU5 Rm/Ğ(#'ޙM,I_^G"ȰotnSr3?gNWoL,|?fKYz/4hȱ&Xԯv?3;Cy$~ZGlڜj$_%m?׺`HZxcIOw^I#yJOsi=Gx:/j^>7cudI.ԑټw6D]L"/i]l|MXԢ]o֟tHɩXi"uך(v,oL=IV{u.rjq~)jZ&oltmEΝi)Ѥ8I48[+4O\ыvzB~9|O{koueZI4haլZ;iXU*Xg Z5\մ>ΒJOS#W𮟨CYj0c4knڅk94{~mYjuvJ- ܫI*`Rf]Fͻ:>~Ftr[o3W_ ~|_g ~$HV6ܿg=G۱GD_K$||5Ogψ">յ{dPMM3v]yɱ*{ߎU kӯ+m5_x#_ #{ZluMZ$<;d應E-X8}?ϭm͚O=[Fٕ6ƿuwF?[{6  zJmq]0~ʋMe/+Va"~&߆Y/+hm˵Y#hdth$OLulE~־Ų[cš8fh=>-bO-[gf/tx߿ԦӾJT^׫>m?Ś4"C? ;IVܳB۷UǚKmzLjͣSx&&cՒu{ȡe!g0߻|͟>-6^I;/}ލP kZÛ?|45{OէcCyh4si}.GXs*[gm{z~g7M˫V3Ys ~j<7 ;M=oguZjkyusssof7Ay8]I[tψtԾzu>>|JO ЦwOR`XKBh-jPel[el qTqNp՚[&yDfgFSyQ)s/͵#gzIog :RŤNfoFڿ'?'CnEƟ%Q@3CyFUg?i6x?Jغ nFGZd ;DFI}?ߩ./Myq?FNJ|?wcA{mh]aj-L|} 4&^^̢|w;G[/?4[& .tYf]Z#G#顸o/thmwg|E 5k,VKSFfhfWvWi!'I$qz(Ed+i3SOyx%ѡKna oVۥ.i]-߹swPπawm]F޳.VUkˏ칗Q}{;hQ6GwGu5V>'xHW76Mcg݇ƣe4*OuEY[(^^`쵢M$g Y%mJBm] DiI{^[fӽkC5}N+BG,$?ԟlR6!{ˍ9fTn_ӻ 맯)↏x44[KǏBf2}hw6Lp$cgSKtz{w&ïqsAm_UY--[&auonlPi3?&d)Rp ׽m yl_q~>7&1z2bqf]yvz;GosE0GQ='[G{[eZyIPN fo|wx&%Ao l*qsr6Bl%i#_1JY8+'qչȿWmL!{)<+o[A  [Z#|GVG=?T0e'KϷiSdgٌF>d Ðk^![/~IG4 q]0vvi]|k ◈|C]0o:n&XiM>}͇R^0[Ҥmelw6u/ E@*m[+y1423#}6rQ7U9~D_>A+zFy5'Y--â64hѲyм3|;$釶~r<J۝~8嶺u{ŸR}7mI#ͽ\"ss]u=|7Aоխ;FgU'݁& Ak9y'=] @dլ#)5Y8ළm$eɴ/l|戀E>/noCq C`Cn?\ųU$?:ӚIM { څT72-q=G$;֔ckEI$&JHu +l \oܬ]Јߞ:ŭh:ZGE8+m 6'9m+:}~mV:yQKb /[歡kyޒMm*{wn&>ҭm4hTp}j2QuS:X'yUbsϩ:,?=ki# IYY}%fW]^3 Z^iҬl`)BW[}u}kYxvڝ_X7V7Ns$OYcމΣ)Gی~K_?˥tzc8u7}{~Gf{u{[I9_sc^hCRpmjlo#m$9Vf'6\u0]Jxb1e#I~߅7i.en&mU%X~m2̻6'=k8ɻߧ6>+4ĺ7[fHLohHkC{'$ |ԣ~_BW7sɻY_~gi^.}^A43{=˱fڶ2Ɵ6wDN?ȕ2 m{]Y+[ot͟:I[9(~l3_rZ׻~D8*&R+#.Qykݧ)]:cEI,,1v:=זZX{s.1ןYTw_ueJͳ<'Aic\:'Hۼ}ιIk+>zxa_­񖘖V$6НAFU_;|Nwo.Y8\UĽ3PE4'Sԯ'Id{{K;˙-nYɹgO#V 0S.[}~~GJ}OMxx'@ůZlΫxw=L}&I&YJz9´cۋRzF}m[{p|;OX?=~-jxlmhmqIn'W dϱhϖ# Q{G5Z˚эy矙XR8T$_ڽu=y*#𵧯~,A{ s5Ռp,.Q͹Fy6r,뾞:}Se.:xeR]ĘdH-kl:"WκJ-OX`nm^ehԩӷEtJI>m%uJb\^8˷'׭r5WK^^GyjHMgƮ|C.m}5a;n#M7i7_œFӢs>-]mdo-~_ժ枯?Rek952A1jo'_) i 1ueG랾լ[i7jn,=uVc~+9SU}|g۩ 9h]/*a%6ȁc{;FsH|K柱2kC.>dSi>M5ijĽnƐXsG#9יZt=G_#$rm߭ =7E4NtmDwrBv m {\9'ͳuUdܴuVeǖJYQuG:]? S{m]>Eː]I1˹W\nHzv>od &QfN,V4}6}ҽ6*m]>8-3UZ6_t(`.ɵC{H&2c KXv}HӮ~ܠ-~ϨYZ)$dG2mM]^x5mb_][_Xd 2*V[|zé+ZF/_݇E {lGi,?7,O97ם_NiV6YI=Wgg࿇2]jeWkCspҴד-:H|!sm o:"#(S:a*TΠNj?w|N48E֧>mޭB4jۖmg<0*5$uk_5ʭfi7Iӯ{]/? M^@#o&EȳG!\1+뫎=\49b/}/F?KCj6o%Ek2o_3d~k_֝{#]eb; i@,v,Ukw/Xog_5YEo]WqzK՚L3nݵw|Rٳ[5)=VG!is<~o3NQo$rͷoZ*Z߽ʞ٫ؓR֖LzlsO.aϿSMIotZKKe<2,qJG?z?_Z! Ehs/T>{1[x+I({ⳝI]m1k_[woo=oq( w||/:Jwv _t[[ikYb_-oѷӔ#+Ns}p%ҭ^M!'@|eßʝ$_%36ծt:Ĩ 7ٖ}$O\sy~oD* ?1j~Ehzde7+?-rӯ o<ޣb=-?̻Y[?u}ε ߾ڪ1A4rGX3yU\ZQɽc_U%-,}]C<= ~I[)o|Ck,xSao\3լfMxCW EJ+3l5jqR{>ᧁu94۬qo{}k1hdY&7ŚSQ7c p[]Bw-ldW ??=T~vftxRb<9sVkzJu~US֢m/#/_jgEya{MF{S'3Zέ|[܉]}gMܼxF#Ge r,xٽskҦ֫}aZK+%g:H#go1cLYl|{J]W؇d9[Ͽ߯Ί/5 nVO20o댧I^:'L&mtnns%%ŭn,cc6<>^ oMo'Hea׋+Z?9͕Jw8s⿊tٞ=K?ã}s}ӡ/ 7&<jnu|EF9]kӣN1_9j7&잿=jBڇn`͹dA֍~#׷~$vƶGf mm}\n˽?rpvod~kkkb %m-e¶ +(7vקtBMMgfnuky Un?yc7'q{~K١]xzqpF% Ilh[5}g&m6[R-m"M/<ͻߺNMcRz?Vi -Zփ@~)-:mj26mH0ov߽!Ei?գV\?s7V^gΚγOhZvy=NVczlf۶J;y>wdb7!xf\?h]T>\cn}RW?̪vy_M^Y5+-F{_[_Gù|&YQd˥O'/{rnW$ߣ_ ?ƫC<#+7%ŖS ,q1,+ waGHדu*^6_>^;הi;?UnxxX|iSkfۆcQۨod3 Cv;,N*{?NcN,~~7k}`?4n&/,[x %]_[.5>M7*;ns|iIٯ~,;{|˨jZ:}cK[;cV|go 4zgUE ?3Xڧ1CoiiuAxsm糵O'!;BmoS$}R|?ZɫkZ&7|-̓jRŢ[izLv7Qunv^%w$ѭJ z4,g?do k?~fLxto;ZT;^MeŚ|誗RGFը[~CILwvRXxLU;tZպmе܉}rΣk5xlh~*U5ux#;١$o?CfnfQo$n}l|?tC7|Y]= [[[T9-Ezʴɾ61ZS_/zo_YhWO;7Vu!&Knw[I[i%HQd$mK՞+Oyƿ@kOs oëkv֘v[Io I渎tEޏGD5'O[k\}#L$5kOÖ ծ.kyZˍl.^4I T׷n]_uR2n??\%3k|Cj1׺.hp?W8$06C>[/^oT~ld{t̥ĺO!XKyyeZcoݓl;ze*Ss{[6+Þ'kĚ}KN!>EjV2O]6dI$4۫tDcG0RVU!קNƑī1-^,E폋|/'^ 7/voEi3Y`|.exjtCEm{NX-oX#Y Ȏ#,_ĭJoN_y*J;}~Svoo=y=gg}%ccO8TxOܤ|9~o |L-<_j_c5Ӯ?y6kj 4k'MwI[>𾷩xcJ,FL mEK- G'"ɿ{Cy d}%Z67lÍ>[xdӮ[RkB̅7F&ˏ1#kи4_'u_x[[t*Mn|OЮ5Ph5վ?"oy<o=&O>>?!xEMo]OxC3^Z_j:?ڮZ7L߹?{t S[zÜ{>?NxA&M{kj7mI ,M%¥ssO.4OKZ ;m GoW<-|9 j,pڲG%im$Ι<_hNqp:?]_xQV]E}hPnRJDX瓿*c{|_O;)ՄU_՛=WG۠|_)|= ezF? j=ƟG4,6fqټ)3\^z;ʔ_;֞4!Toׯ]zzgnqG+$y.=4nmvy/ >J[y2[aůsi;;oi?>ح麆u . ˙ui-Udt%& R~MuEcέVyotռmx{mbV/3[OL\G4-g{^dE/5aguH"VkZ?~;+:]cKڥصhKGd}>HdO3!wQ˿oP2Z6ڤ4_ _ZiM<)(KZyl-6w[w|iGJ9ݼGsJ_B&}?XTcYDh+_>u{ ^4K+Ǟ?n}EkIZ5co7n%mmrH򉛏+~}{$Swo! QL8㵾$os\亲o<3d҉BM=?^=LZ֣_m: VHe|_1FC|q9i!鶺ׇۻ5+[.mP;~ޗ44,]6&vc{v)m$ƿi75ukf|i=CŚE޷Es/O_7\'܎IjL]o4+QQ.-J61[O9飑&NxީlDFR}7=&5 Y]=j -gT"G noGO }_C/w~myt=A q+M-?xKUS`_ s;OQeUUH> !tP_]zi"Zih#_6ۙkeu (&}rQN{NN|YmS̼Ky$90eoG\UknRGw|3;R_mOMwHۥg%'YGo_;.{O-ƾ0εsx)Η!"K[Rel#hay!9IB \ߩ4~Mh^{rXxt'oښ9⼃d=6n`e}>DѴ 4ZjRZ 5o Le~BIY,u{kcZI{y,Di%źLkv>Xw7zwgueTQ4fah]w }Y>o1ck7wsV[f6`"wgv :Żշ[e7Rf`?wy~‚'^|7Ğ"Y 3Rw6כv9?kN:dqf{ ɣr̋$:ٮ#J?(N?ڿ:_ C=ֵj%'o,?nf ' I-11^ϷRB7W󟉟>7|xׯt&I5ltKIJ\>]l₄.fk8B-W̝7U~"խ|_OjFI#OWۢmVgmwMYJ v]~'Rh}Oڟ43>6-Ak`Y<7F?-~[]\gci#曂z w}oO8hM6?֕H {6ǦgX_.yptNei$̍$UٳBd۹׺uxg̝]}7gxEH-W:p¶={C&^4ת7_#{h:<O=YkW$P/4DZ/mėF֏{~{6?~i? 43J֣n5 jV:Y 6,3G.f)>i $Ma}"~#fn!gO252Bț\yѤ5}6_ש&<xz]kQ Χ'24$I=yqMi=7[dwF˨.\c"4O곜|Gho\ k0M=am s̛MG_?͓)[.jN̷sGyf5_|+X?[ׯWwc.+[5 ^YccSsȿg:+ jM[fo>(IbYEo;kHyO'Ysuop*o-'^"3Jm2r7jm;_3,˕tf/"پפk$܋$n-GU[kxw5{ẾZ6\IvMäǽO$U]_4w'-/@wum|lmbլ9H[=3nțO2Jy,V,7ߩ1nW!ίNow-w%tnmj {cosư?h{ g6o=&_UoRd;|>kş|\KoxhZ烾"jzlj7VzZGnl|oޑg=\*jkĕI{P|Ho|Z]XMF֯K,&2\-jP<)g{y>[?^VK[_w(B+Wx?3~4>!iXï0^ E0Hu2[; s"oos5?>kj$mğEΩagGq[9k9u K=Gl9fGw駈J;WGȰ7_ "j^,a4&EkIzd>:QWo]|̫zz3믊 NԢNBSZޏjA ֛p$^LK\— 3}r KMzxږMo {qkADzԐPY$hdHo/!{Ďo9Ez}ۊR{lޅ+`Yk7kXຒh&wFmB4oJԨ=/J]ĺ/ Cwմy2073yi>aWY.KiJq+GO>qgu=--ֶ3*7߆H3noYo*[/2Zޏuk5ͩfՕ\̋wYY(~vV Vi=ƿx.#P]^ tZ|n4+tϻi$e>' 3F˹s_}6'OU m'jx{Ou裵T[Z :幽;ɞin^粔Vߚo$jnam#oMsd{;މPԭ/ xĞ,HҴ\\rI3,{P[52[nj)soSխ<1ͪD-Aj3B4;&xRhQ7DnWWSh`#WgMSƹMi^zmđ>o4} h5} Ԋڣ|#iCRK _E^y˦hzIo#gFb;t3₨W%ӧ“M9[O?^<'OGi7"tZt9Uk]G՝xM?MyYܥqK|UjN|˟m^<+-|ΚP[گڻ5}?Ci^4 <쬱^i}LjUΰ$r^}ߒgf?Pke>wYxg>qo?Xx}C}RyYYnp$-Fիy~cfg?'߅0 S ѼC%ö͎s A.VfѤOyV^z~,= Rk[dSGĝCĺí_S{{D1pgΉ<)&T|%q{h^btk:O|AC?u!tԖ5kxvCT;ޟiw\IɼV)N+c? K4O˧,kqh6Oq [Y~]#G :8GyVoI$kgί{_׋ ?~2տ~,Wv[m~'x?j!uӯ.Dҥ>u.$;YDs7%Op azZPIi?{vw}x1VPN}{׹׆|O; ikՑJHHq3F>M;}zؘ(9iwv> 7iNr{J[~kWgjt={{HmkfV)~O3OݣQU:Nqv~Ôu5fM#wǯٛw!Շ\ZmPPKO,qgHt{o1X ErM/cHEOUk鿓ݞ[NxD_|!W^l u;uOȿ0϶D}e~T?5G~)Z:Z̯߯o~~-𧄼sW׼9FQBO6}qW +;Ѯ]6[X-޹wzol_~]|A4}}?Qď i:wudlVIMr[}qoql7q[io[xC⮟nNּGڮcQ+)$.]lzN+Z߱wa}c@.|Y\w^wx&7ZׅKȴ|s%6G'y<䧅U{^op^>U __jluz,lZ5HFtDy)k~W꺔-Mumv<?A¿|U4? ikH-ۭڦKX\gu{v6llV.()ZvǍkմnƚĭ?k֮mt;,9n$WfDvh35(J._]w}࿋ߵxq/o Ynsi0M}Ihu%mGo+UbXzp^gkƿ'x hڎuYg,mT8Mp%&!:%9+_[-Ni[ko8oWo]_7|A4ͨxĚt$]>M35KoIT>TmEc)҄ʗd}=oxW.c}WG!qnW43Z/a-y Ki_f<.w&c.I& ^O (%(붽O%XM>&t{}&K"]Gn$3g6#8*e]NiUuxޥ|bP%c#..}}B}4;tԯ,f۾&GE_290z>׿tE7ٜƑwO{=xº߇lO5[wlmCyqy5o7ӄRw6w>y🄼d."Լ)藟 \z_ ZI|2dk5B!OrM#;߁L魽._o<3Pc|污m>nķQ1iuu ˛Ah}7(c@Z>_k(ݿ7-JMu‹\='Hך[)cСYccŦ4}fyɇa$vm78(0~z[4lm.n:9=M3.Sc.4]+]'_?G⎗oeEwaujvq·v5F\F[|7;vMtBӻpmO~<~E/}c$]6\?\:"Y^}K{{4sK oa%%]-=քkς~7Q+I4nit{Xk_&ViT_. ߿+E¥}|{k^u([Uߩ% ~Z$Ǐ5^tSLwg}Rk8;?9t5.4o;{){#UVПȿd5|iߌtb{ ^j&!htUMB8fR]Lhv\(rKMNMEO?MI V˦&}5լgeƷ}QGM4zpwG'7iqq+xwF" X|5uv ]JMzmՋvei(eK̺'5{[QK$oVw$0ۊnwm;}U[WUibU%?2~߻kKa˽+Z}LKz6iUm}wѩG}\{ܙ&vx-%u KsiX gpLyk2M$hI3:gn̫Ꮗ~'I յ=N70WVGI.wgCpCfH!I_\op.]b4key_d6β%jiwXGo,F֮tkŋϹ F8ƤѺG4s%?':U3мgIi\\Km,WZ,"ȩ#8N}Z?|nVzQQzw^FtVT%FѶٷ?Zi|#,j+mcMд;LMFKm |ouHd䱎=&w]S¿dMWK5Yݿ۬簶Yeci[cgl&7RtZ[{ij9~׍>5lŇŇмw?hx=^ 1ƒD7Ycd w>G9B7lgLpru_3٫7>)%Lfoi7vIM uț΍|-U$V׾."WO7~KO:O_Vա𞦚ݲ#孒ũJ+?%ϙxZSz_7ˊϝ7'&oxkV-e:t|A_vZI$vw摯-Xc!NRU)˽֧7^]?BO<:evytf{ƙ6wvS\M5Lm׾umѬchoz5MSu-jdΪYnn@]{<_4+u yqHFIm+y]m8wI<&wKGm|go4)jD.,wZʶBk";M'rF}/?ēG/Ki%i22B_LQQy,wGxUxtW,mv(o iwMO>L-:Iw g#aKk<4nE:u**k_{ζծ5|k ̞_Q}B 5/ZZ%Yi2?/my#[Zmvg%|EMv=NyxB#-<[i61 >;5{[ԧac_.MrF2[;|?jj4^GŪ]-ڣ5d+Ф6Coo'T-o`OS?~;x_X$7gWs$wRyIn<+f̐Һmkj8-?iȜm%s|S~;㏍GHlg֭ &K-Œ9#d2[36wnoyi[y;FϜۥYǕ~߇fxvZ|Uv~մ:kPmKj7J[M[g]̛!_2M5fn}#_S?*e r 5k=qxs D7s$!xa}8H|xcq1ISO"#MZu?\vC[7ODcA% ͩ4s4-$tͽo~t EJIz_ӹ7Y_k V^nJ'mc43wofRv-Ͽ|!OiZOŝ;T48_r& ~[-t9sj"$I=TЩ${߽?ݷΦV:7[BЫ7Ťo#F'*;7w&~JQ~Kyw@a2I*:FXyITV->m-B.mjfܗגo#7۾R~MZ$޿%rZdHc7Zf%/_Giqk6vh)lKQ~ʑuI#Xn_TӋ~~RM'VIxZ6t>xms#^c-$|I&ϿZYEݿM?>V_6 &ttpݶ< []|DyCZqs>wc,p[2O.ɦ~]FѤ+ee)_k*4}u_oz2X׏|A6^Mkl[5neFm2[̞sMR $߯?LU<#N_cıG5%i~p›Wmy6,hM2[??)Z3gh.}uez֚ƣu n[{U41ZkgO+je~|=xj\ַnmC ľfgY!5$]fnɳ*L{34fjzn-ŝvZ̢ݮ<"_U|Z&G %M.4gx]y"W'$1)߭9=Wwܩ>_kw=zB&>\iSJN3[>-){\lcjGy>m?6y#}ZwCރG36+v-iJigQv{?ĺN|{(hn[e̬-!}>Eoݿ]Aw[5Κ4o#tO m8IGV&I$magҼqnKg!KF012vP}](P,Fegn~7++Y=wvGZ{.Ӡ*KDk+7:O'U6SWvq5jqZo3KrC.?3j;V}}Ǝ =uo'/<;Pk}6M2v] }RY}_.?%iϾz:y+_ot_ |[5mTCjRA[Xn󼩽y2ھKt/h,r,4z5fIgZҾw-mŖu"$/*~^]>eѮS[œkGemi.Vhd].oWDbӻ-{o:>8ws&&6R<5_Խ5Tk*_/3$J͎]y~lPqߟzNTTvE8xA?&yRn< GB~D[R6?JKnevގhnOL%o6~]w<WOɣ?D[-sm %Dr\FvY "<3SW*kns|Svؠ[W]4۾.VTXGyO< E%z!-m翙V]R\Wis`:[3+\L#F;ٳb{ӓ581z$ߟ}g25m cclw[l.ƜMa6Mve|t^xVjwGekm4U̟Oui?Iї̒/fuZ]y=ɥu]w  l-ཅ.l>/eټtduW2ȥ|#~_'.4oƾ:w6Mφ6\Gl$on"kuڪRD}ްxnM/o[, $z=E)ψ2WF)NpA" li'txQgMUq*뷭9Pi~?=#D"h^ -_ºl)ci;Q5ơ4v}ڄ?kMq9O:nOSz/weK[%ama_eV 5)yY4I3[m(z:ͻ7~O5R[Xz}VL /F|Ϳ?گ=I|Ά:R7sMLɭhT:[^wR`[?gQU,m{+"k)ae'~Vsr`h 6@mYmz?5Ȅ{ğ^,XW 7ɵ޲7zna~![eý/w:nef>luS{_}d mY$ с|v\O&Hgw6z?U <'>IPKW~mx'_?{//pͯ|]-utDvգ<&-lG>w/ {(Jt'Kƽmn+~v?ψXɳL8o_srwrZewꝴQ?@Ox{軥IVFE]{{#歵'ޯn3ݭ)Jn1-m-kmӯ4z:y.T襙FxV2VcVy[D$I2raL6H˙w_y7haE7 ldFٴ}w/usW6{C}Ky}!K,{co*/f:;t̴/-y%;gޫݸ)5Xw( Xj6ދU>خYɐpݟjM[]W OaeoVK4{eyuT @oΩPJ*TM{vӿQn~V`1u"rQ:ݔԒ#&s#Ó.Mʜ`F~ߘbӋN lh_E&@Y|#7 Z1.5#'I!q;[z̜z(߯dڿ"Ww 1,*~okhׯ_/;v÷wo-]m%#F`k?5AGdW?W2}VaLyW7Huۿ(Udwd֧w/z] %[C-~Q$rGG]1 [ݾw(>RDiChv_M'w=zogkukgf-E=CB=AY_tsD&ݵJ4"i{IVrѢT?Dqb+gĺڌ׮7y ꧹X-}NI-s*ͥ.:;Ŷxΐ¸Tme,*}Yq7%k l7+n?~\TvMmmW>* CueW:*F-6>T#j߯кS[[};67˪\R(defzUԚZ_OFe➟/hk(y'63Hvjl,{{ս4ZLje6P<HӅt1Uo&TW,_~,ݟTݻ7!>~_Y)V{v:K_2᤺ȲKHviv U-9#6N-㹱RDO38|"غ?ɳ:ҽ>UΏ{0hb3A+q^Uc+Ͽ9'NgǫY=#ucJ͵m.} /_؞Yv8}KFlY`3s2dnB>"iׄ-HFI+}]WHɭLJy~ln)[F[}ySZgϡVMtO2σtZΜעZf)HFdX~m[;yGhƵ/fwϽZ|eR&1wox>&ӄ }RsK_1_&gח:}{yF On1W^GxVYyyNUڒ[d6Ydd,u8{I_? 5Z?Ưo276S߮%MOmu%z\ŚO6\{YL3(yUeˑ诞{&QKxY[bWӟp%|?Q6-U z}οZ:{7oI~a*{+7ή;@\d۟^j=i?]'qoȕnn^?i<ſ5|hg ,A?W}?'NDgpn_fo_]>ףeX:ݾ:$sg?N[/-֊+7q.~6wUGH|+8kcygb:EoO=uog ^Gd>)PW /;Yʶ2gw!Mx_͖~&xP'KXFK|h2 J)_&hW`񇍠\sNoZ'/(wt~Ƥuzu_SNm>dyk/+vz??sW߻C-4IK'Fi?w?W4^RR^ݾ_/g6⫴kKXb MvF y߿洖MƬ}76$S}Pyrcu;vF3nonةW--k?iTԚ!d^K'<[}̊7ES_߾_5/lW%Ju,jŻG9~}ϡȮ?~]&ȴkjdN.h~\ m"Y Xٔm>nڻo_qgϩ<>XK䳐\3oǯl:K?W${eid ]0sh GV-|+k䉣/muy]Cch}[?:mX;[3:NE-F~]O/KX. i9emWJO!зc+lg;+]iOFMhpuӼ840hD[y-a6y!$_2jsZۮ=i_+MznK.}xK[+i /x{u.{Yf%S;d}x;/3"g59mddF?^ݢhh͓Oi<ƎMZshӃk~N/Y&MYV򠤽ǯܺuy:?̷s'f3OglA|U[vCk8Қzܧ5S1[OK ۖx|v "/{ m\&\ʹ, k9Z }jt_ϯsNxq]@tռ+; p?-/>t+E \qŸOOjv^-ץZ?Am mV]{M>m?VSn+ӯUѾQ'Cw]/O,>Ҵ[0.4zرtY-ndmB4E~w\-:-[yw6I~Yݴ~K]?7?xe-!:}LH|;.]U>+O[V椽~k~ݯ{. ē pFOʭn'GW*: S,c|Q "?1m3<жiQjZLo+7 |R$ݣmGaun16H_g$q˜=q8KnokgSZ8/Ec>vj5\Xjj8lty-=%Y+d.U^"V[[-WzKKۘQ.r,vOu%o̎+fޞt^Ti&JɽbotөK5}=œ[s{Xk@ү5?}1s%nC5١ |_GN;j :7IC.O|'+4~9ejPaZQڭu5 [|lf#t;v+y~)%'+^h;6ڥe!OYnu7Λ~$;& UϿJ];~ў%PdT߁ntmAqY^Gu},X>f{,,ddDJyh7TiN-oIgҟO~WtZo76kK;s }}zgm5ftiR><1Yl}˷X{%}gN2ݝFV~Gᮿqy[_[ͨ\D[o7Hպbs/jӻOo^gC)zO;WS1é"Y+wouF-jKyh&N/gws!t&ST~-Sֶq\j4r [4/ᤊ84Q_Z_ۧiϪ=߷|mc{xjg B.Y&O?ṝtvK?iǿ{$]ӿjoS ns x>-l/G}I.t>H5Ԟ;'o&xH#+}]{9B\Z^Q)i{55Yujv:$k}bVw 0#-$6߿o+i>zïgEա.tֻySO߉Kg[KgR ]}dUdYk}܈4%FKk_T[=w'lFxg^4gڗmդ|fvDDMf߻S+}vK7Œ䧫٧h_z/ਯ4>Ƥlѝ^KX[#fFhOY.q->zz9l)竻﮺nojzNoK~?쟢i~_vRKp_:k{Flf6a+J?ov}owӗ2!^״fɟxo&-nd$qEOlM^|_x}"k Eyi0$$a8o[ H$O97|P۾6ۻ<_xT;m.Kӏ3_X|ic>Wq=?!l> Y7zXS:}͌w7G vֺ}C #Gϟ}Om u/=_mǎO/t}q)AB .k7yT[rϩq'ٳR:pL~)^8kˋ,}-{ϸJRH촳UMF:Ug?/ćE7|*$:^gV::-Kyc'7Q#=|a9:WuiN_wO,v-co{RHmz.$i+TW7]?=7ÿ߶>*EoK zgq=7X{UhnV#3̓&3~:PV{yJWVϯ]O|֭/?.j!7F-蘆>}EnQ#̅ҽ6;Drvm]s/cm_ Eo\62ȻM:HYckR=Al>]41p碹jZ=ݓv!]u׾HOmɷߩ}{)[ %` cxѵm&ԛyݳGyv~cΏ"'U:sW\j_;c ׋.n5_ 鷺,`=c$зGtx~km-̞" }~'~og |Ni\NWrHn˄|2h0j.eߡJdwϵx|>ѬԱo?niIjֿ[xQUi^I>$ ٳ\TNSxƍĿtoxn}VŐ$fM5̳Fͺ/%_ۤ)Jzo}v-O>?ie=~NI4öP>$D{淾߄Xc "~d8wȕ ̶]rW~zRfu ByOߓ.}n8Xq3w~}~Sh}} 2#1IVo3wJQ C;c-j-O?: }wz͇m 5"16MRv]6vW:Uo_4V}Z2jF/]{ҰoI]gmnkv\Va~o%!&eJ'񽿗/ޝI^W<4JMRmCor?i95ͼ-n4M8ۭi)s[MUj/ZΠ.mf5ɍ`fk3z+գf؄nI,PvZzCie]znvޟsjvvN-5}JNME3v#w~fڻPwּa($·{Q@ǵ8ݷ{['xBKF v"]z0=?}IOE4-s648x$Q8oyڏo ,\Kݿ𷇼5kjVz5 :E~HI>ݼŚO/?g97Qo_$:wn4+,/tZYY*MmDpEJז7M]gWa:o?^ݿ"A}Seޚ#^lg6O2#k~_w(wUK}"-vi5+X/5ٶ%qngI m?rwt.)Gݝ?dǍygy|ƚwx'z64siv7ͺ{\~gSק/k66هW!>9|L_}AЮ|}e0::X^j!$.aG7GcG]w ~yxg>jǟ=^߅>!Vgc$mfkTGwM!>$jo ߏzƒ*Ck=KG{9/,nd ͏>|Ƽʓ_uB<קmJ7oa2v6|ױ]ȍ^5[xGiwqħI[ks:znǎ6DUiTr,xЫm&MЫ߻s)&_u6Zw?vb˯jPV͢_階csYjz.-M|P;*sm}|fsww>o /ãx֓MqZٽDֿ4vk|m]J&EQ$i]Quo/W2rnv4 -;Te}r$߽Z96H++m}zw:Zn/4x"UI'{h$Xo2Em|\޴1w9=c_<+xJAt멦ml'#./&8>o+ӥ&}rN;ñ"v! Lm֭_iK帺dk{2t7=VrmUSo||uMO[X񎙳P'Qo7f?G?6m\^V}?[^ȵ/Þ$ j>)Kɸm=4!}gǥ6pw5#Lpyo$.|w7*Mu쎙Q[[kǟ[xK3& 7.ulfo&M˼BI6!؝}?T/{Oه?*J}S|A[i>"\IZz1꺣̗#[<\m7m?_ :gcGtI j{}C^?gkG#$j+o|f71}~[>//մ?SRѯ5K{lb!.O&Ia_ݽ|о5oCLjk>Mx[GۭtZ摭o&VM9$Hy'嚺EKEk]~ƣž)eӼGjz$u?ZZ!axZΚmMGv[~7<>>uhγ6iwu{wW0Ax\G7qs"ۣn?=:msS=z}ߩF]w=?oDYaxU^tcZԯ-no.k76<<34+^oyb֯Y{>&Pw|-^HVu.?I=N;F:~ϩ򯎼Q蚽LJ|Iw/r,杩iO }fHp#hCi{~=_Rfӵs>xWW^͋xz7_"SKMд4v;#=&#;_伍Ro ~߈=E<@P-5Ku VM[BFo6>5];V['y=xLǏ&x;Z:vB\f`z,Z4ٷ"[hRi{mV7ʋ ӟDY?g;=&uhZ+!4Mymi7VF7BdyW̓oQܶ뻿m~~ɺM{vW~ Wu?jkr,}{Z5)9$njhVO~ess6znN ŧ߿E{G|Rgs`ޗlA{[Y4j7MӿD{ (e᱔KTc8Y}g/bM6MBm5M&M>[9RἰI𥈣N=(EK~'զv?3쿀??n3>&h׮ g.!k H̰̟c}i ?縌\K&mSץg^s§-xQ/AKluo%Imq3M 'g n}od1 )on=+_;uh3k<+jծlibo.4cG{k b?ϴB1mB2mv Rj ?Ogd ǽ~ڒIoxj&X6褓ZT0|;;j^%Ki"X6{xLԬn&Ck=69$~t2Cm$vy.B)OӾT?=_'S67)׵ k{|;{TUFq} +jvwp$y ř1ﺶPZ}sZgYˍ|Eyk5l0i}̋ ż78I5EFJ^wςohAU񷍥M޽wa0k[?cN3) egFַ5zn(g|u/[_l|UU#iljn*ڭj]7Jq_U~pjN7O:syZ}Nqx>EcSO}Ē[BI^M_E_3!G.*\PEyxumḚlxcxTB U_k0|B4IJX]h#a ՟]3ƫ k7ᖋ= Xt.5lY$i>zrO~oRQoEn󵿫<#QyWg 6C⟈׃O>Z7#V>PXC5s s֯tK^oSɵd45_ xnΧqx:ׯߵI&\jMq2)"g403n<ҬZ[•F߯Ӿ*j[¿xjx:Rzfɴi9/-#O&i]/|ηzkڧ'KO%?]]YfMkr'y[6g3VΌood>UGB^ 9Oevw=ƪt5ϿG]oglz7v:ch ΣOYPIϺ?kyoIqCח7N$q4v5/i'QQwۥ~|~КdFI-gòG$Ky0)dVl0yogok)Ռ5~gc& F+1Xf0U$m+lyt6?v}UnO徽{~37Y'u7歫;h֚>k}ulmٻm-uU! F0ё$䴿m` 5˿)u& gW[t^j36$luq2c߭kzQ}hv|1xGu;-39u>oȷmy<¨W MIݻOЌK..g&)}pjW)m2[u[Nfwlw6$6mSV2Rz=Tק]i"ĺixSdZ]jc1\74hC#y?>Np˯t17S[-}}tY=m6٦K;*}߻68M46Gնou[[[[;.~%wJ\-) 6펈mf=(צSJO l7I꺭ThΙRefۿ!Y~e&kbu޶6aa=ۭIbA DzJ&2e.ccԧ1q.'I$$rsFвq$_zYkuoo$.ۗMSmyW' Vk.xw\u0x>;sۚEВY)mxڎi]]d4rhIfmwмM+~e5٘۞qWlV">u-oN?.ΟrNy;;=R=WwXÚE;^&`]jV3}čIzX[ykoqs̎Ȧ E ˵~׵L#Ȯ_Y˺j׿mKǁY-3Fۣ8|dM?:/GZO?~j6< OO𕥕Pj uy!X"}k2i<*ZjQ]GC|8Oa5 e$3oqf1)ԿIj[~UIǁ|:x'mt%Uh)=WYgq^^/yq"6iy -$vn'/$k}Ɵ /}a;OxcDwnғWl^i ƶhY;쿎o.Jؤ Kt5J i6k~ n~xGǷ#XuAjuMe[% ߻-%p̕VO[o8{/k_>|X];b,gYop,GHS.ԗr7޵a!+ֳ][E~osܰ+O+{i>_cRYºڥ,tҶsKEY>]?w&u:)AE^ޏr qǯKgQXo6hYQVs&ZZuz맯޶院2߂ՐE?րӋXaadi]۸ԚWayČ6vw´o$܎U[h^1x{b73|u>XFW[M]{O}:al?ޒIo/ YzޛI+KZߋϋIop*϶O1hvɲG}5jGØ~ _í/Qm&hΦbk˛V#33kƙ"lDZkPs wtYk3=kвBד][#F>JΤ][gGkz;=sϋ3 ?jwWFd]>iG6Ǚї̸JҜgUkىPyȦ4?VX\oh\˫^#lhhSd$l7g~J:3ȴ_% ^"&T*$Yklق}lyQZk}ÊwҿWv1<#qi:>up ηŭyu#\Gj$rY{/?3ؘJjϕOqnIZ}9 ҴyC7i-gInJ{_W|ڻ ^+bHo:w};r*eO^r^GIkws ,ʏu2;W|kI_QkZK楴*?mAZ[I_v˩:H$ٮ{ihxv]{@+w/bR^Y\@KޭvHmu:|COixsNբGMrA]Ϳ=Y;m E6if/*[G3(ts'Tgmom_SB>THR8DeW. c! H5IlpI(Pz;i]Z)m}_5r{u&pc?7׿5%f턾[BNˑǔ#?z NN#9Izy#~ߛo6IlVR K0"̢·e&mnŸ/J-zS[r6ôK@szI%Qy?ϭt3zX(h::>VolZЭ]ۣXZHwH.~O17] {:گE}M 4gG7i|)e?65ܞ1𞎺m3_-ju9z$?#o%ի(Ԥ+;t~k(֏3o⯀>5XGM9h vj˼/jk /G9yIczΓvjޛ4 6Z{ſ*6h7s@kQY?˶ $ʭR]{ќS q.~4kG3]GD?aMQ7/4wPu.ٳ"#ҧFw:v9YRz>yc lO[NTAnݾ[ƫMlyw:l̓e3͵<3~׷ˆ"Z= zL!Oo#MMjS\qqmHmHLR}6_ow4}_\Sijړ|F՞uJ1a!r$ɝ^o+8}?}C{/zjRkCZR`7WC=вIk5Tw@f|T?{)5x{J7`]iiѩl4%۾ffWUݛɟDgR޶|F5}R?.jQfm=!m,xm#_Q{Yemn`MA%elRB#.7+^~ũ%og揤^Z'-r#ovu~[>ό>iU$+Ik7$}|ܟ-K/=ǽCQ[3;ՅmA{s ٳ4qD ;۶dyɿS'nk]PZIZ{XH[-*qt:c'ߏ;#ݢciS[%T\U#N{v_<ި&WȪ $Lk>xhDӛJy"u~Y-m$>tgw[Zr2\b"ûw"=I4S7EF8+}oԾ!ҟoc'E9뵹ШZ6ճm^F^h3EJXz|P$oaqS6}SMva+R>nX鷺W{_W̩̎#~_ִXt~K{m/ws@^g# jֿ]?K3lÐ.\/?{?ηJQw^oYiP;Ut?]gDj$_iۍmevߛ-Y<'wC;TkKjNg>iS2XZ?cG5yij^ίZxTA-o XfCHWx]n=}.[[-ցB5ȪF,߻bT:ѿ_q]vJzzcT9Z;Ö7}kBoOپۿO]uw0\Ek*V YfG%l-nm}9ͽwUdHۜmL{oq{9SwkE5yJ\%>!}wEUfhdQmo̫Wb 9.??5Z_eIc :GI]FTS{ӋMcO}9>.E݃is$w?|O#si28l>uْ՝NRqs,Dʧ]=mqq|ɔWeROQ}>->o6`ռImi@@ GH?ܬJ/ԾvTԵsT{G=p}2yv:uΟtRRJ5>BtaV/omv΄ٛ%`H氒z?F7wm6 drƥ[{F}>{;ݿ[}m ż,9dwz-N`Y?e/nmf`ķ_iF6{JWgjIQ.sxkE&r:wz/&Z[,)/OZJ˄"ۿ=y0VJ pd#?Zge7Jޏÿ xxx3[y a? 89%E+oiu 227-󭝌cg/$9TeьnWG K?1y n?3 qg/OS?5ܮZ徟?N );_eݠD%Pقp;_):#NX?sV-"h _:K7ޯy/>d+F[ЯL[!'%YG}˥ev1SW^=n}βX:O7]E-ߙ/Ùڤq^$KEL ?w}Jau:}_%4v7/?V|Y}ZTN%'ne2ܭaKX׏z_Vw|?{*ijMIn7axUj8x"\ԅFeAR[jwY9r[o?b]7 v^, S3|emg޳~ewN/_0VQ¿:˽~_w>~#5>V?mȯ[ r,do?ڮ-ׯ1 ̡s [F$9UpQ27 o_S:moޗ9-VTʐ H&?!㪝(o}#ՓVdCFAC$JFʫG36wd֚ڬ/1QXG.3ss~{b}(#iw1+1X}5^a w1܉e6_wg)5¾:O hv妳[-a;gEe"77Ƒ[{u4V`U3m_׽i Ҳb*B7tO_pm7O\*y7~I71J1K*{& YwqOqTdiW-+-6 {F?sεmM|oed Y?8oG}ΞkgW^(1@đaM6ߔ 3.?8WU*^|KsO#CwqM Yw6JJT|Gx_ῇ47-ek/9}0Uq7V|6P|tgaqBa]vkU<~wMU$*j_ acY{#jM{o='bѴ[o?fk{ӿχGGFڣxloy&oX ꗫ+lp%|t`DK? .煼5w}u7 ڷۯ3ߝ迼wfz%|§+~}3>#h o)߆GhV5_s iouo.G޻kF_nz?/2~%&Ю-4X57X]5dF9t~2d{tb(Oom{m}I$Ħb-{YjwomZ]lqO2嶕s2ܣ j}sfuZgU6φl5y`vͻtk'~zd_z\:֋wp^FyZFo/ V__eFqO_M\4|^jzO{;çb(_k>G"(/+xnt}BWY.U_1qU(ۭkNV{|jZjo&,`M2 @6ZYwG ÿcJx*u>]?>m<_&DC񮱫#XE],=U]̱˶oGtw,&]w]źm;s[W->MEŕu;[U/q̉&?˚7 {ůE%b"E׋OR];A~EDY,!'w_7 ﶟejoj~7kg^k+TVue߱=5AsK￝2_k?FI`MTBڔRj7S%ʞrI' :lw{cZ<-i(+ /|Vj./0nWof7oA4θOh~~d:ƏAÚMɮ[q 3L -fC u\-FO5@Njg?RxTi4h:\sE]I{"6>}R;}EZRb2r9ܿw^wI[[b 'Gl6wk"MuO¡rםʌU[.B2_,YcqZήlw]Tj8?B<0xLe妑egmi}θ³5ˆ;G :~$Go |B~ܺd  ]L۶.6[[Ƌ^+\{Θպ?r7eu= z7ϬAmaۛm*[nɽ~vdp'?F\ߩZgtnooO=[W{XZ{˸d??7ڋ])J3|^~!T/{j wx$pG>t*%Cy-ϾSzzogx}>(OiUIZ[[yך~\m~sm?2?.M}fO_2MO KO'|ks:^aãYqqxQ7pn&=M9J|Rq{G^Vj5 Ck:ό..uUcs77+\ˆM})w5[m~cѼ=_4t47R2lڷe{tPy}My_}S[S9'.iiZuse6cl!3\!4~\&dz]O_0T_O)?_z劉Ğ0| Oo47hi|"kue?&?VjPב}moy[y7 j_֡zOXi+6,q[Ru+]s"HuU~>cL4P͆?u+[k(n6M5lZo[̷GaaJun^߷z8zgO>x>;4gu? My- k`4,Ȗ{6"yoᇏ.ٵZ>_OoEwAMA7C';a:;m4CW>' ?ןra]mzo|ʚ:G|Cqi <-i}Rz]C%iqG*G4M S>%L$&&!ӭ<#x8mc9$mgW7r|_*rIi!4SEyi5+Xzm$ڬ6Pf͖jҝ}yiJmZ= G+žc|;fҬIbumnv q C伟8T2m44Gů^gWSX|Fsjkڔv $Fs[og%iS9*}oPK[_j/ >ZVgyj:cnkoyĉ5''<Fqdg]×fws!)AwG$eVsq\Cqy]Gegɹcy}YFomoa ^ݴr|qnK}oELխsw:whPTndK7K8[#OZۏ{vOI{ ߏq/ľ"^^6E}m7B߻ffm6mG$qҼ)Jcb[)״JGu]3P:$Cu.6K.Hc{um{ivtJ.'oy|lo] 4 x.odu;uM;Y)c[_GX.'MjnXs#)2rm齿S8$:‘sg5O7}閳CkyohR憽\HFZuo~>[WOd|$էx :xA4NԦ<Ǝk[yζD_~;hc(Yyۿ]}Opfޖo[?Ï^O>!5߳\#wuy$p0x|dG~^d*keGd~fφ(|]i:لK HC&fD߱d}=%Wit~VSNzzzyw7hO'<eyzgL-imx̼l5 K;}W[;HR ΙetZr彎u'ݿ]^>얡|VVvAaY=eE]x)-̅HDގ?U5W=Qoe1c [fo |A_CnIo.|FlOK|1zj);[_7m?+_7_O<+Zxse/OÚm555H,FdZI<2|tns~oG_su\kZG4E?uM|n+k4׉lHɥtzaGMƤc~ ZW^/h{/΄Jl#H亹*L;?1J*ɽ5iinWr}o|77i |?˨;]Musgo4ј۫# *ȟ},6!>Izy[JZz,4k1AQ I!g{|~#~u2sRQ=굣k_[~gz3x ? uQ95_Tݶi-Oǻvf0M#;X7oӾ/ͥ5f} O4ѝ'*wDa7<ڻA_XZ% q{,Xe"gmUm3]N-~]{osIt<2 fVVem۶VjZrO+lúd56YL #N7xE-*8'>C:U֗ =umniѻA+}֒[ݔ>uϙ޹߱/_sǁn kNS7/ym%obNv|OJO n_З[ߥk#6w%\Ent]HJWzB[{kiZݠ C=ŧ"I̟fTgjz6qkSU!XAswNoݶ8D2,knu_w9̿++$Oa ƫuk,nYûշnXZG"gdRjYB[wf~Xx?woWus)ky64kl JWNsմ*HjϊVfZj fBkKI%y!^hnd;$wJ1S)r8_]EEooK >JhMӗ^:iǙ5W^ϕ> ~=O¿~O&I[şجT-u+ h]RgY.#?"e''/gjqj} y_7[\w,q]3g=±6e١Si%MϮͩ}k~lvkH;Gڛռ]G߁\m{Ślڦ%.Fx^MKg$~fɫԕ 7#j;蝞s菉|W ٵWtm[NUgeibA.#>y$|-yQtRWϕ |/!x: xqHC Q]Ɵ}h͹sI66CSV]6WnҺz+OS?}B/lf7ךE vFym4_Mכʯ{k=8f'|U#./OĂ.Unso%FY>Ͻ|17q|NOcF6SJ|Mo[[6]Zam|<˭ KKyoɅ_!'m V߯|Os|#4/k KS־#zT^ޤ;$24c F&ؚ;~68ͻt۩֍3XO> ֠<= [KNK[]~YVJkηVnfIkxdI|~2roz0y$w?#IdVM,FlԮ~,<'''ͥ&L= ֿ۟ZM- @yk2iy[[4s \LM Jc5oe~N)t ]ߊ ߈!$piżYVtdwa1D(Yz7oJ_uft}'VTSg;I5/_~:N<ֽI</Aꌰile/o./dVxlV 76&_#~!7Kd/h֭j律bI M+GDLV2n6/vBZEÞү̷.whv]>hno#w;s mlޡJOwȾIKŻ+ iږ6jZ4K̑z]LJ77>5G=Ք"ܔy3C/<ҡƋ+5h繖[ /Or{9ɿwSm猜?C(doݿ#ϊ_ A>%m];PoK'UZHE;f缹_hL57wsVh>6vRxR .e꺥ş)/cMDI*?.1Q_ʔR>7N.]#NkOc}syPy}}g Gy$~Z[hZ?hN[}<?̾LJw]5&BΙ&ğMU ۿӅ'._,|(pZAml  Zֿ6Z&حUJTMN?~uymo|9wG1:]}OL~u2Iwٲ=ksI=׹j_NGM>soM2z|O pҮ$彪eH|sw%?~7t7Xio_'A?5 |SsP'듩iEΟ_iZ݌6uz}k;͝yGn-E~sm[|ϣ.|3{/JxBK?xwSdq$oc 5[ t#Hi5oU?񍔝|=[F>=r%oYw Zn%qךn<5\1 Zj^o:T޽~mV6Zuhp{=&WZ=KR晤O3b%)3ķ?"&:siV_?M,|h{6m4M[&/4Ԧ[lII$2\*4{\{[k_cʺ񧌏4T{ÙJJ[?> #njVXt>3+ s5R6Ɵ""y5х6*su}ַ3kXgL4/?Zxn7T4`n-g՚(dKXnliƆ8nW\Ǘr4?M6|o{9|?|=_>Cm^/5[[餷խTv[HfwK<ɞgtssW {-?14h!~ S"}c~ϡwQEiO^C3٤ш' 嶋n5wW^7⦤~nxlu Czm#Xi;&Yyfs<6$qY8c9-:= E8YYǯSuݖFJjWIf]?P 06=k$<'v?xՖ/tsPXm4w+/|cX˧4΁wT'Du0~ɿMS_m:o uɩitcG/6=~\F.U˜ޤdҺ~ֺߥy8Ta2Q{Pφ}"m:HҕLz}MUq}v?veFKU$b =.z[K%}TlM8M?r8/}t]ycf|QmxLJ<wsqkY/M|Xh"G>mJhD o3|7`3,ߌ3^8ѝXriʚףuz8z.u%8rqVWK׺~7 xY&_>$&iMơyֶm~u}m8۬W MZU^)rǚ{óζ':%4|4OGc`,XkOW+nQĞK]jɼE}6:Yϙ?->xIsTe{=~]?Դ񯍾0| |!ާ|%׆gky{g#4Y [k[iV9.ʵNo.߇u??^ ᇈ~1ڄmkodm^XcK$eo.!hOuZ?.j_>9~z⤚ [ɨ_Io[-s.hө^j[OFRoSI_׮--'U-'>/|_q^n-HDI%[oky^Gw9$XhpJ_϶4=R{]W?kqb^'V"񮟠}R4!nKŽ;6oluV)k]~]7tSm_ ]힝6'FWћkO2kXJ7}u2?ozU5gT#y?m._~1~RO4>Vz|+G'$kˈv\ǺyԕhoTkb~[^{ԣ 2]4xVnBڞw N"5hteKyn>x%ϓ;wDK.N{~~O~3q%嗆ݗ Y&y75m A}4?~~- <#k7ů?ki=_^nhTqxM٦l-3|oOn__Ot<mߋ<3PH5>o:qmq[xf;Ix)*ݿVynᲹmFN̆0Rxݴ(Y]uVvpI2y{ٮ׈ ?EtgK;'P=ۭz}Ů 4wG:t/ԏ}a5S٦v;|aʪ請fo{ĺ޹Vմψ~MGSU6,}䖿۞2 ZżB_I>I!f6{\r[PO߀.?v|w=&e64-mtYmWusO٦41\:oS]%zwaJ5)Ԋ}Zz--|-VúomKTg a~ڞxivz~tgPi5&-{mkiqȑ–ޅ(K3mv;MZċ; g5叉-|WeG~{9mVKm?f9?`qEԩI5?T<<.jsxIk(bUaߵvoYDo߉vVM?O ڶ/tWzU8nmk^xZtUԯh&]OW׶:żsEhzHh١F{YqWgw&~&>_x3⯀5]*խ -}KY-"% w]}_٠h7/mg>_xZ>#_E^Aoq6VDOC fKzO>IO*+J~,¿x t5M7\H+mmά |#bL{Z:ia߯sDƝkQ4Ḽ;xkZMxn#ZIgvk<.Qn.#y aVM(~| tS~_S_|Eh> xXJ: {ˁmVkHcfɳ.<ŃUr֥|7ׇmx?5^GtzC,Q|>Lt+2|\qc[ִKoS";517VVIӪ:x&I-եbm7+&"߱o3rv_y>*|7l C/k^+2^^~$[C6 3 d[1j_֛<]+qφSP^j W݅QoGk'߼hw$_FV~甜z ]"=$xn).^Gׯ㾳-4fΆi y7o5Vww_.ߊ3xo8%9+.Wmg_Ҳkten-2d$s^Vod؋\s 2??憚?^խ:Yѵ4k]CNmh_j 1})םR9o xw=x|Uɤ^*Luix<&o1~xfu.ob~hOVѴ4j3G>՘}I6}I|θý`SI_V>rUȿ:}<W֫{+vh -B"@[7WZ1'Dt&q+>י~m~w5 ?Ějn.,u[&.24RYLe]лMш::#.һyC}%Ft5$1,qha?'f7ym'TiҮuxo9u8<Hح'&V4b|"0["Qk_j=ghDWww1oQǹiddO-6={￟A8/ {|] _u_xcڇ(~եC}lBG5Ѵn_{}p꩕j~ͭw׹i4^ߋ9 O߉tV^u{g{)-gD,M$̷Q:O>5]مIk!φJ jxHmm/5+KӣYdGΆaGWu~9A{??w.4GWuX-L^ԤsG50fv$e>}|3熺p7uY)]7wy=/|Kᆷ<=Iq5-ۏ)w}6hgޗ*CG}0ﳷϯw'M8}ϫ.~6.iê[ oMI}=mVFMd̷!\}tU4a7+׊/<;?h\K5m ?Wj*,wnѝ[mjVsަ\pڳgɇFuڲ;#'ϼ{hQNVWY>q^"Sin,7L$>g͵C|vuȷ &s;מv]Bz+>}o{ &ѴU{+)5(+(1е,2ys/~ا"TvuizXn wK;8ѼUU8Ւ5_zЂurQIDn寘yQ}xx1澻2MBieoݳ=EkW0,^F'e%[n|mwzY?6Ěv]c6|÷v# !OT~%Qo< zwjtȾ_lnD駼xv}u6ӿ_C[_ {;@Ӵ@CukKCh IYxcYB2Z?3wfoeEym46 ki/l5H5.+.b N6oo k{LˣۄҬllaidѶ8y=^E9;}'-]ZmeVCkm\GjBmˏT8AnEgUs\dG_1K v}淒pir}mbMΣIj C|&-D,~ K{8DfIfcT}ҳIUojV]~-^swo: oc>5ךtLmJr3)GYuiG><~DX4lb?JOuP/GI*mR~eV?Kd}֙|C;Y 8 F]@Ogh?ܪUw{ǙX\`.nG t9A:B[ko۸ ; ciysVP"v۹oZ@6vC$/*,nVVV?zʹˀ!m6p3~䈥` #`/n>չm(3B-DTBpI(QiN&'lgnQ_{O =GyFwqT.r;-F, # UXPAqⶕ+oNev |ӽSotbQ+H9̓<Ͱehդأ&ktz3#՗tG{=}^gx[^-?Ogo:M 7jYb{~U~Ϙֲڲm^{Vsx+ lgcyhKE,ۊIcTi¯)u?l弚=3[]GMXkKhet\*݈DrIeIGfМ.Yh=pC @77"6gjj)+|$t׍yfV16|j_~L:RkR5Բ4r}Edmh9WQ5p͸Z[!Ɵ7/)2?ŷsn^;𽩩'IYX<jMAhͺwmHPiSINGeh #,ym+n[mmyfwNX{ }ݷɻ*t_5+_K[{gFY&_7n2,*mI&u3ih6*lo|޿GZS_ 9?͊Ty=?ZN<*ԝgG:bտ"[8&hϧU忽Kޝ=̻߳M<M{I8ys1+'Jz,I+o[>36tʶivą0)0[~~W_UE_[}%V[Ty։SZ/]3HT>~{$9'V|~MSs!Rs :s z܁>fe.n+yZCH9;ףk{__R67EA8v\w橸O"׺PT\N#TއVZ_?_1^=[}#~P֔I!KW%OdnOQ0pT$ѻ)DcLz]"W9 +.o_N׸75O[O2:'VMۣT_l~Uǝ%_M8oǾ2'{14q,ɒms_t_1wYRn>V%lcCS;;r5 YTߙB 'Y/zl)w.yI6ݙ"_%^KohїzCgwfO,UU^Σi53 oq_u?U'cGqnN[Y".MXuM>Fd.:9=~YSSt\-*K9k8w{7O9}Y'M]{] DzaJJoT~[5+>!`Fv!V_IO/]e͵D`?.FedV7akYvas_ 궓x~> i-dK.q-(;KyN]o$oqgq$7?%LrwW}S}_WVa#QN]Q{Eqk,^ELsrHob[L -X\lև(I쿯]?#X-:+4,6f?8(鿢=WQYc1 |<5nS[BLF#s֦x9=-?иcmBG7x<,N]* .Ȭw/_ԅuJrx4;|rw!?{l__᯲֭#k|Squ!KKcw_2j_QFzzU΢%H?zzL۟~w2=mP2/gEz?3ԝ3}biT\7U?u*+:GKjjֲ#+BC/ͻdm^un_:Ǫ ,[mSma~}K2¥_5*j:&%DupW ZԧMI;ZSӼ1gwj ]{i3 ȾZϑ߅j~v7V]~{ow 3Wu N<.Y[g֣}>}~dӧ}uY| d2.aekO˶'ym| ع~W%Gx?/|S=͍ͅZڴk2oGwtmّN :^T:Rׯ}|s]Ϫ<^1rvPxF_/ꄧk_zo[k"iݶ$ d7ߊ8ŧ}mCVfiz%w59nx!e27vZ?8E~sGQ5FlYnZW;~7V+ӎ9"[?-{Jm;}[qx*a~UVif;s[}ϻ9 rݳ\-r >7B+e~F.v:8tuG;2we\oY?WUrjSc _O{_϶kuo^Wj|^Nmm=snޝQU݅$6OzioořڌlON ?έA-;^d6Sch㒻z $JN4pIfܽWYm^[6v3}{'=1iYLbw\˺Qm:xdKYA?uٹΡ˛Kk\luoĆ[6@&e)U_WJ_XR&"@Qt(;Yv_p7/|G眞SQ~{nNn-vq`׫tn_;Z_\sjs1GX_֢P_vܞyIݚvڍY9PHF ۛROߎdT߯NX]o'[u㺱۵v;ןSuNGt~ F$;p1kS.)ܻh 9gHьn8j1XX uX(C'F2/vzx,Jn2 y}޵ 3g< QLJc"|ƻ +_yu ۘHͳK;~]{lk,~8ъ=?OA7kyNxlHm, [n33sW\N~{NPn/i $0X-*#swG]d0#|W3E=&^on/uoޮ)(V1.wi6qI)?5tjs6&yqn:erRh=[ny~]? kӮ=tzN[;+]ifymLr>eb_ަj W?参O4]c\%4}7~Պzunnqqk=>}osc+m㍿[S/y忖>Ŏ6d4au~X}:Xmhۿ[>z׿ڣtcN6n>l7|y ϯ97;|߆X1ad;7\sgD+ӯ_=~Lj:SȍWhl+n%0Fޫ4ɻy's*+(Fm_~Ԥ4Aᕧ-7wk^:^k#Oyy#"[Yk3αoouY('Wmo>Li-|e3i 㿀RN7Kuo=fUyd鱕 $JN#k}W}L9y\Ѳt+%lA_& 7fD?.?A$gemr %OSo?EG4ߟC׼#,iZE턊@s5̪n뒽XZN$Ԓy-5kG&ZfMBxe-g1d?oZ+~]~_"w?R"ypj_oMO,G4]Z~M*5 .zmpk5ҳ$Lf_/b"}եUg7'fhM_:O4vp$d2 7u26ZrZr|eYl.V.7ﲭK3rwiߟG{丸k'KW+?swzK kQ׺$Z=ep$e/5f>Z??t*0>i &f{hU\.VD]Svևz>+cICwwOV>FXpZj.5~>tٳooY5H3>(Ԓ;asrHo_;ͳzv _n+59;%ŽɒXYba]&]˄k0V6ڿCëy6qhjlnUYI\{{|5Y!221fܢId_+-O'?\uÝkxGLUE񶑦Bk0G嵬6IfIMp7ͷN;zuu޺xDx$x Avlgmo&󦷚4כvϩ{icRq߁c7~+jgwi0_i}o.k.$Kh[L.8 `_=t{^5M@~~:ciq z#/ y י{|CsZxJjM=<1j<\mldl^Y DؓII<_sֻ?sG_h?73* {vtߙi:,ikq IaڎJn˚DM<]ߡ׫K~$>AV}y<\$oCuae^+uupDGqqo uS:3tڽýDVvpGnٿ]3ӧ8/ʻy;dľ*NѠykijI3oblId#Wt毊toћ:ou:%m.45 7ZӠ[u ȫ%ţo6?-9K>']H*zFz-{5޶#J_gsZ}͍?Z:3}+VGdXvݶy$$]Iy K+;yecno1(__gګjwkzm\|7 qo%mF03lϑ6T0Zu%ig"xSK›COOë5ޫ}XwMs3.m4q|5tԢ&vS.z6>Դ]߇Juˍ>hd> wM${M9$ٶM^ȕ㿟|U| 5/)_[E_c!UmYR[DG}d!EN_o/pu ~Q:N ?$j]sgkggG5)\}Ryi0UfQW.uUN :t? x_Quy.#Ck=ꤗ2\C4:pDx^m{m/ͫ_c][T5+{MC1gi.{a %0Zyo1v-#>$I޼9T'(ߖ}U~Xٷz{7_5x/ƶ>^{/x4{8YvK5p?Q^*wߟr=My~O^QkSxS-xOO2GIc;}>dlp;2?&IN5/]M#VUSյOr86drC4ۙ՚eH]m|5k8}Ex~44g W<>]w6!h< ݷ>8ooxĞ+ku]JkVV4-"/1&DI7ȉZ8ySwg*NoQ|.٫ <jEo?7w'w%"$hEԐܥ 0y;K-mn|e"x{B|=k>дX|+uOmwM.Kx]uu s I'!ZTQ]V;Vp+z߿Sj>1WqRJ?t'^w%HeBmd>̉&<;#}moM[o>o[º޹ h#.FHɺ4V7ƹTekt8SoSҾxYtO sFQ"vR4;μ޲yss<)e)T-]-|~xjw 5hR-W5w^Y÷>͛L{>DO>JQWS-YkM^uޏckO\X]'87Q³~H.):z3vr+^Zx7R:gVivZeC̾ZǶ99#ގMvLjSjzٵo)[3rciNJW?Ӻ&o1&7m{x׮rK/įc˭B,F36˷s7jlQWjEsGIymc{x 8r/QId5#nR #7-* Kw..$YK6 G#~{nI-ovwZm$Y21;"Wv>fkz/}U67߭kxY':Yp7 mTgMS=y.[bsH afWݷn]ԥ;ky'];lX,Nm$mΫE_Kε'7_}&ֱnuoZ_B{d]wM,Օi67$Ds<3Km|^JMs_s?xK^"⟉^(m1hl$dW[yq꿾tɛkI$rISzA]ITW|}wR4VXK 5ZnmZWN?H[44Yͱ XV:Nxt}mQ5xՕ53m؟ .B}ӕZߏ]ej;<=j~~`vw+}'y>]޷[mo+11xw[{_,5MvKHZviݤ&ڿ9~]Oyp/˹sS{jW,^p561sz'i\ov#]yw+?yW|7w"e&OEÒ\G&Ȩd졛j3acO?Zꧫc^[Nkӷ~l~u|;s Z/=ORyc²۴p"4{gr~9PMť(ͷ_kl|7gҧgo_?~"JmKQl|MWz ͺK}b[bowwHylRܒWvw}^?3ifXF՜uM7~M~7< iZֱk>ZOè$:<Ycy?}5'.qFc,QF\7n_5}:P~ћ/*díj\~$_l˝BHt=BkxmF.\4?s:)r;>Ngϭ7s>*~_Kg𿌮 wP>TVk<2Mn|aTUHbS)s]߻.UkU{ygt׈9oOӵRPn. j1 t[&wIIk{tz+KNeJ:_>:>kմ;4i%kšE gDz=>4]3wGMjqӗ~~)R|}}Oͼ8$PԾ.[gf|3gji~W wRoX~3vDy7*ӧ+\>Cl#5/^\%TMj(zlw#};i3m-󱺥n1|8ờ: 2 J-I .yXMyn&%s9%5?i_txDҮZFuI&>n'۬Vnd,w}~{jf뻹7gIx[d]i>myjڅ yGK.wfˎGT\&܋^~>ſoÿHgmw..uF״JTofGEŚ\%oBoosԛߟecZ^|?O[^;^'A[{k=;W;h|3J1D%k|B__//lkIOn{jmq7goe˓65+-w 2z}o{W-^o>kXdAuuyjBдvfԑ|ڕT}ndӍ;Ļ'4=7O'qRhͺKX渓TJ`CJ]Xֿϕ$}ϥ㥇I'C K綼dVkKt06yM'F+zQպQ Ѥmk${lmo9+\C !Tt_ϋ /5M_ u-wX xPlkK|o{yQc~wO#xIUUH{Kj> ok$pi:KƭXٵƾڻ>ޯHv>WOϸ{{;ڿŞk C_ a}x~#$k:8#MwWahi<G)ӵW.=ßU xx#S ] 4FqIq"Jt8/ҬWO-g^YkW.ѵ=GQ[}ȭuo1kcgw\y6 ާ5TC7|>*oX@4=&Bolu_ٶ.!Y5(mw$οh̼xBIV ?܊C7m"z׌&|CjzK^Lq2}m56md.RQ^1?d nN𞻦Y" 4:ϞyZ_Lٯ_j5цa!ifW߇?f#8:6}vM!ֿ 񮅮~,V ,,Y#ZkԯK{~gm I6-w9}u>=~~ %~#Gbs%u$h};N70-sFMkwx߯׶t_:}C75vÖ6$}{R5 Cmr#5ş,ޝF_~Nճ8˯GxcQAtGw⩴\nfDk[%Ikح2;ϱqԔ;|ͩ8?Kaei.o E[ܱKT|϶oGe6; 紭yt>roWZÝKa֬ ]#N`]4o.n- y3[yoMvm^׶g߿S**7ﯭ? |7ᗈuwIqRj:bquZ7lK~F7cF)-^wnS~?0>.KD~>/|/)E.qyfk>Ǩj $o"9fD{kx$\֕jRk˶|ΚtM_w3EEw|@Ҵ\ZF3%5+9/,.,a41sm;;<۪8POEճϿj[5$>"Ѽ-]k%:ֳڳjVu'ȷ0tЭ4tv~ͿvVh2k^$bjR[2v$kb+:r/U]~m<%t[߃m ƷVr*-y c[s>׿99oo˟Q/w^.>|W/<]Ci o i}#ZbBos Q[yvuex(}?[ҤV}mIS<ğ~'twKmFveqj >3B6X=ZVQwrE6~wOXx/-VUN[).]س\kXZoX,{氶cmo$,=pg;_Oq潫|)þ']i{ee4le:aXd-gsl&_#θ3"TZ|ޟv>>ҡܾҼ>լB_ ='ltvWZR{k /w}keI9-oh֬yFuG_|!]g]f<xt?:fAZZBm` !.i XZ/[-4~}Ox࿌]C'__YUl&yk^d:ki˧}6Ԯ$ԯl?ݠD6Z4sMɿy_3"Ķ֞(3𧃴ɾᯇ/mqͪ\K6qg7HI7_[^dF׿|9u=fĻ#?L*WVmm3M;xw\ӊj%ؚbX>6|<: AxkU(ӞI5-Y,dm_^84IG \18stn FZ7|k Mœ}s'?~/|z㿈!&jϫzɸQر~USSz;԰08EG ME{4+ Wk\~.T_ooo? E{]wZt*M>ڞ_iIq7.vNŻ:|JU1Mzܚ\EBUynN>5~_<_jK<)=-هo2C$w"ymQy7Bjek鮾Sͥ*t/]l1|6 Wi>cf5 fḏuKtK9q\e_;YBOk=m{u~ȩФ^5O_}/iW7^axBFpIXxY} tKDtǗynMQ}oMYYI[fM[} KG\?^)"MedfqNV>Ψr=W8`x2ռBu֗zx~6 ̱ܽdyԗowǼ7 'Zs.kV}o5Zuשo~<]4/| dz&GtwΛFRI+Luw wXâɣkŽ5]E nk>ŦxBI'ْۺ17M)%kw=somR-cJ}B qVkU\mI'6fސyq䩍&]~obgQC\fDҭf]iSD/ݝ7#L;s8. +}jI|-b{Xfy#;lf7t9Wo=f~; y~^tŶEƣ٤fhTWsk^k1toவxzM0])5{vYWj~y*J=zvKiwk%6{}twj?>$]:ΏcmJHc4۫ŞH-d[8a?2gKkzq 0mww> aA4V}WVK[^i2/KhsB;g\-ds/umW?>|A#ß|-d-9 \./ݶmXa-}GS>;ӄz/U+lj#_is4m5KƆK[SHx}N"qU=N?#~xofk.yI0x.-[hlttI&8~tEK_RqW*[y_·Ǻ h #[Yj_/-uR ehg)didz/xS׃#| \x?RԮ-n.t>f,!ec̚49`o׹}+V>~%6xm;Rn4$6XhrBȏar H曯]:zћNRj[c7rΟtb<8M&chE 3?%q$">j+FOpWߦxK|-xP|?Jկl;x[wŋ%;w2#ΓJO/.14y9߇&i2+aio5o wWؙ>mk"k'4ѿ.<ͬ}'-FUcc\:76׿g}cW?褜]nnsy,W.LΛ|d衘եŦ5:pGz~[j[Z/ſ i=ճJ@mJ(X,wtu]d=ί\89In_Stb[ks?j'TK7Vek=sxlmgV=0I-uӏVo QM?E?? OZ⨼3 MKx4SM_?5؂/"= uM[eӯk[Shh6oIaddur*St_]/ӳ3zuٷÞk2 2VhPRMlHn7rhߟvg=o}|5#ҼGOF.4Umc49Ԡj+FO>ۧjNVCo}"G.Qӟ[Idª޿ֵ^uo i^ 7 iCWoy7)&n>t}7|җzu߭iPՇtjK k NQB.!5wNPGOuSdΧux^%u/t-B\&G}af伌xyrB|mܨ?y}KޣB~"i*t[rN]YC3~7?h0_Ou=vQm, 6mFRI$M_=ӕ﮺/61xJVO ~ؿIXxfhMwAqx~Sik[*oq%ϦVZ+w].Zm/jꟶ.mnݭVXJ ڃ^7̉ 2Iޏ㜫M wЩu{7NmV=FmRZ梓#$#;*v4Da+˚S=𷽺P8ฺh|hmcyoE}ޞfv]zLC+kG9g='\,U0&>9$[M{dr_s~3_Yyw{]_ִҵ.9Yrid[8eD|ғCs C${btBWo__ښKGOϿc};S-qֱjz-]Ģu ŵapֲH?Tudi^Ogc'SӴ> aΑg&fmgo{{ne>p{GM$iYmyO0r]S+e[6Kh柪^EuMc^^kx{0M%͚&4/$/&sq{+ߘs~r\z '&`h3i˪%ޠw"O' Odj>l}>o/hH \$)kyw$y*nܛvt"浊o߮{ޗƅcς 5i9ޝ|{~f5&3 cݹcnO;%ʞQ_hڊO [;dԼrn~m27Ο+HԲ^z> = ~.ߙ}ZS{Wts NZ/,Fʝi>dVia%2t/~vUcXW] Ƅ "ߪƮmY.ad_0;1mۗfIQIǏHlm۶~GgV{{&HZTrdlYchv+7ɢϳv;I4V{g5$eVXY$܊ۻK.k繝A[iu}R(Qfi>#;4ry{$Yѿ2ST_!Q &NIMFqߛwB{ڻ_JnlIX0OWS(h q<~ᛕٛM_EɆ<ܬ78oS Y{ӯ &yX!|n?)Zݺ[ n#l `ItafѶV]~!_,<ݽCvUG=wބ^e!Z&uI'%0l+A܁~dZ2ٕ!Ùm*2wkSր3&HT eX*n?zݕ˖:dFA =8g4wkΗG8x 3{Z)Go' hdž;z#XFki;ߊ9'{:__]6RCcrJFk&Ttޛ6dL5|G@4{o<  {$i[6ѝ0}檜;oBZٿyYӭn=D^',}e%0Wm۾ v((Tx0x)5O{`O1wyˤDZKGx!(K Om[~'C,:T켷_j6"{$6Q߻kƸ_'雟 Ռem}{~?աgm޿I&Э=>{[FYdI9t7ЯGu_ɯpX95m<v>wǚ\: uSq6.' a2ɛj{gw |}E?o)ѴKihm5i_.DHjR!O󧘚:[_fUc>"|CK]U)3_]%. Slx?tD2ljx/׳gخrN mzPV5R~~~̯/UUCps|Z}ХU>eM⷗>T,xO|۷}/R|O𷙜ܬW'zЌw75.?fB.T܇ov~U8|/*⋝{sFr^=yb1O]_L" ?+/&5'U++ur+O©Ӧ•NIj_ֺ|2q}|w5qtywɣ. 7Oɩu"۷ܭ32fXF7~~꺵]9 %}'hwzo鞫{7ůwMyr. \֞yk#-"+8 h:5NhmTk|ϣxFh֖ᄃgW~="K ڕ:vڃqVahr&ٽﷻ{pF=e )ei]Ѳ)NN֗{; ϲ2olrw sӽ\i5}p=֣|?7ym[cQu^2{WKgCe'{{-_roU]V3ycqϒ~k;sh['RA FirW˃t9[*]>G_me)[FϹ >֩iVIk|5uOSeeܾ#w-0,0}#|mosg.orh_.sW~1mN|P:p{~?D7/1P&f0n+oRߟc.ߊ1 ne HG u5VWӗI%noqBSwL8쬫u5[^z3MY}ޣju[J׬TC= 7}ZI43+m۽]1kニIJ//w%ol{{Ȣ`"BDR')O[) qJ$XIܻZ6fWJi7}4h BX>v푿=YŻiw41). ~Z\ϛS#nm*G)*4\ݗk/i_6P.d.% `0n6J7O/@ױ* f$[q=Kݗz]ְ4?f_ m6)y»;(LޔRk_~|- >o!THTb]273YNTorFZK~/2( uR ,snju[>a7KX{y,P@#wt\VWM>_?HKs^+yԞ-xߙVg=Zߊ*4-E׋4.yMQqoVu1uO֦[^֬H4-HO ɲ bV&-3|>yw|ʆ _aTԤX4pح/KTމۭi oUGX.s<Ɏ8Ƒm;iMt^֬=n D|Z\]`\LRߛFOL랮2r{Ϸ{ӿ^YZQbUq5;G;jFg_2-Z\KՃnI,+p]㶷^#HY32*=f5óNO3Z.c;6Lb !|"֜j_-oMAdyӶܿ69U);]>_VV;K]k˓ ua?sS{n=o |_Ӽ1$Xiey_rjO|uxgLزɳUxT(8t}}RO~l->uMVYi8'~fE_ǯ\9%_h[uo5\I"_T&(77m.eaRiN},h,'Mg-MokjXLR` Ao?"3nֻGklmH]8eY>h|4{v#uUկ2=r>)1%sbKHveUX|LVpRnuTw/ Poo&xm)ת洕]=Sƭxrڿ?6xG +ok$7WV%JKMsxia*9J_==%hVcx⷇+ xiauF5M.m6KIhwb,~\sHa~KkhZ]_˾̏?~xLHt }>=B{?XotwO&xvn#M+["UT?}y ]ܵ垖 Y/ƭmU9Oi[w}/-. m稖E1a]gYt[ccQsi66O?j,mUItəUduo,#+IoleeUInsݬW2 ˽WM Β'Ώ:/gi{ Tƿϻ8mgUּ3ѯEnߋ-0x@Y3Q!fݞi|kF՛koo6mt=3oz[I^w}]P^=DW-n˘nn$h#|3s?w[}VU=WL#\ɻmV`1 iEp܎w߉+ђ$qyJ|ߏz4?ÿ2n5=BU'd*pW)oE=ul/}ǫ-ŽO_C#iק]wԹki6!-o>6~VЗ5nPkoe}߯Ͽw𖒖^73SQ_*7ۿqq'+軝no=fދY[Gh /uI3]U[l_؟=|^}Ȓ]VHYuݷ_2jNVPe| 6V%ݬSNsqO Y4,{?w3g&#uuIl{N~ RFm3S'nY*sO糝u*n+_Nk_\/Fվ(i4}NKga qO4]4g6mӧ,-Og{~/9-/5of4McǍ˧^]S^Os5hR{˹$;lǙeLMH;r_^^dE]\|3 Kݵs|='-yٖ9#·M>mEػc&2uZrۮrw꺫<þx/ xt;?Pzy:\GoFI yrm"':;7X*ѭw<\Cj,~%?=i|6߉m#m3RG6H<8z%mnaglfc :]WO_#֟[ouh}+[cxtmJxJ $rIhi&du8~ԍcO-#HZVdfzob,XTſ!-iF.Ͱ7ʟ>7ktZyU}n\Ӭu{FKa|UX7,˺I6vo3+f/]IjKOhm緌ŭ"Jkw3ۗt3o97OM*aiTKm"gM/ᯊYk;dh-c -W˷_O?߮ZxS#ݟ:}Lٻev:ɒmYdh%]Vo?q6;jU3U7 Oկox{vOl-of?kHw$Vly>Ix4\Z/OKr0J ۝Wm'6?ˮRmo_'Q'o_qiKyg|vZͻLUw #~JiI'CoÖΥrmeo"{r:ԏ2h7OԗWiV4c˗RYͲ6ڿt6ҹJѹ%?kz}>Aio8oJm̬nV vlQ[f_/H.^pN"ܘ{S2ZFu_芨ַ—C]2W͜RO/>[+y{r{wY*'5slmVۿ] #VH;Km~/g>ֻㇾ=#⣖< ,l̻qS}4yz?w7Oŝ0mN}HQ3m/=H٫ iy2-m ɜ{ꌒ:iliidUoc[~MWn_ooG7h6ѵ{;Hk24^qڷ 7|/37jZzLi|Ys&?eM{{ao-̍s'߻D]^yO<ojukqmO-JEl}>>aj8oyy'l^O2Rd 8W?yYez/ZՔuLi?|nw\mWM%E弗vWR#mm-`ήzJ\R`_| {XBmRFג.fp;xکIW^}{\SO>ױ>g26̋o~sv'xr:vwn<޺z]m~߫s<]_y}} m.L"& ۲3YỏmEk_ 4&;Ud-&i' ((ѽ~OBzSWr_ u _4YKYXHEX!['e$7&cä0QKCUoSOiRxgķ?pɧB6{ -+nݏxz_VS~"?-.:]n %śCx|WXT$_]3hN:ۣ>g=<+So]xĺޝ%Շ/v/qpӮnEM r;t 57w{6n槷O{πׁ;x]w\`^÷"Inuo/ˆ6mG nOܢC +6Jsieo|Ϥ3)ڇn/u ViDn^m_)2".+\=Q ucJ73QnN[vmȳl#5ΜOeJ^B\_Ot>|_[MաԼM!hùd̳Do&Xܬ>_3M5~a3Zm$յ~LP?gVpzmk[f4 AO: sFᱺu$xTԄ꺶63ǩ_^j\BjiW̑7Xiҏ{}~!I>~K~ޚe51ekVfgwH_w*G^la+7>{vZ,32ҡmsuE6g̿-̉gwxZx3HVm=>|h- jf?4X^7XC#\_jywz~c—4X㷓Ohќւ׿=ZW CƩ>h5[V<&WeyCo'rd/Lmlke<]>ggoi|+/[ k,u)'ff]P?4/޹?k T{ju>3mʰ.kM;]QZ|+d&TdHO|'g{ZiMH47NbWvv1u_ݫ؝wtG,'t/EaH"Ŀh [㟗sjҜW>I$|Xg~)b1#^65+m4{[ #G yИo!_9~?!Q%0e{ݞϋx;_|yk׺.-=*GX$7Xf_/n^A{_'`RvFN2Gf>k{eQܩ?T՝Za;齵}g:DŽ?ORkZ.Ie|VtFbC'FTiFBuVi:<+k$l5]#Pioi.̿iiϗ'ާN o%:Dgx s;_ xZ_ipi<5Hy{bn$5FXnQ?ѓ /=Œ q~G\~֞3/U~Xx{K%Ʊ>ug4PFoq #-1O&IMӧFϯ G xK]L }, ,אP}o.na9<˘f~99-Svgn/mĶQ_MJ~>yvvq&#y~\2$+.cr~]8'S[?k1/|Qêj&]×Q=&yh-2[?mׯK! my3GoI%xZg/&_]EדĶ2E{k 43N5YG{14{dlmyTkf{SW> oVe֛-Ac7ԭdh連m_'|}.i+;~?~-;Z_&mKkMrNo2ZƭGO-<;h0QkY=|Zg".ğ^ovW#w44vU_CyiwDI?;+ΝNGkZyG}>/xShė z>.EBJ+yжʙ~ |1;o~!9|+ fͷIo%׈.dc!&h^(e[uf?;s X'qSiI~~ӧX#~,i9mR];/P+v#${;;'˒9vy7V +NR~?2+V񦩯G[Ե.t bldcIgXn5%5?3Hc(鿴Qgj}oS5Ɵ?OA[~wx+E"mSOL $1#^X=S|gy՜3i>o~۟' oyG?kIn^9 ڥ"Kqqt82=,nݯs9&ӷ)Y?hߊמ$gOI,kJ;=Jto=5)[[FڥgͶ&pKRnWkԈ' o=3ĺ uoƾ7FKgr5żYڄ)\iQ}e6Ig)\qI>Ynݺu鹫{S~ ]<}~*-/OBifu.G՚T4L05ؘ՜[5i1M]g~_#k+uŧo}Kèmayu%[}yj_qnayt=uPY^׿S ]u;&z0ޥmNaʍc&Vm%iW}r/50G)U]Ooum⦁y^+ nWN V]ZT/^?2O yg͢|?gZU ~s^?ڳ׵okZp^hf5)#Hubþk'{ƒSGnv&U_ 4?RV,w d7~H4zN4joglo\o;N/'Ft?kO>/|#þ0q'Zf#xΎ~!mt-ѥ$0;x>&[=f|=ivX~t:L72-c헐}f1%e]-N_lIs5}ڟy,Mx<<ړOmImKg.<'Qv+i p̬[;IQPXGow[ϯSǯ~\7%n_uz3%x-}*s tw^۲Qߛ<gRsk?@[99i~t+l7ީ^)A+Amk xWUz{0} jtp*chl>Ӿ;hDJsJvc&ܤ^C|' [YOo:6k%εE棬kz,w2\[FדYM Fd7mSMah?_?xCFS~yKiI5i?jod3<cyI)_5KO~~4۽jj:dԄIo"T1mRe^UԬIl~_*};*w莉[ׅ|m >-R8+.[Yi}EX"SWmW3UyZgxWAD`Ҵug ɻKHYѳH ٤wSgR巽~b{ռMMУȈ ڟyozON-z[dyů<y73ki+F!doQ'M~f Oߞy1k[H`d1}YcVdo>ǬfWCM?|; i^+ReH[X|zS徭+xƠE y#M7̓'i'sm9>鮺~~YRx}?*nƿ4?movfԬf[f4AqsԫO]ko޵o%O @/x2Ǘ/Z<%tߧ]<YS:ߊu[wR*âz&aooҦH'lBk/NƓ6խZ_SG&;T~>Ɵdӵ \qm)MsfKG}Φ~nQR{"9Z]2;ٖ9hxGw vf}9' ."[{yZ9!dVTfOοO)}O/xO.MaKso"Gm$ۙ-'N-Ko+ѝNzsVlWrD/_2M?P[{=7'RMך軻_ɩRw{mkӷg~j3xG>.c.5 ;u+ Xku %MF0;Iӌߟcf{;xSc+F˿x~_EoxN$}6dvw fD fyN^^moӡ|]UGwƟ_)^? +ZXmG|VΞkg]ԡf_s| [^2ͦ{DMG\+{f;H.{;UVs'4h߾j6K}坷|IAus^֕q$~\E51nUyϽ[˸}9ן2p}5=MZ1WmB|^wnVu_>m[t_ |H/ ٭E/V,d .n}ok.O-YNѷ{o =/x[:N$zxv +Uj_M4[E[ɮ؏7|(^WZu1z=xQ^еk{{H?쪱φ!y_ƥ}^O/jYy}3,-Fu"n]X-]Hb$qXZNWos9Il5;|UMVk B-ŔY^LVk;vMgq4. df7ԜV7ogӾw7/3֑LjtRudv^}oy3[zI}dTm]MHûtG_ 1xzf6Fڕܻ̗W[zûOմq0liZspZY_XGeުyjvf{̆8|5d[lGV}I[^g>5/f_}Zɒ[Kû|ltsC$9TOk~?uo7t]ufR[끪$1ZEaXd鹤Y\ѩ)-9y?.Ii* 46귖vJF76pȱ]Con|Jݤֶ7}s^{GT|iJֳ5ŬBtfQ+>G Nጝw]ZJ5bźpCڮk՛o$+2YiWN&Ѵ~]}ZV47$zm՜y{ssr5Nv:)bߟ>#_.?Ljw7>5|qgf\u48&QmV?f.|߳sEvz-~ޅ?O |6𷋵4F33D5˽gFIּ뾖׊tM.e޿[I}X_ZVtҬCЖun-EYyH;^F^g_:O j&vAQ!UDljgnz̓{tL5ZWH0_sn>($v\cnͶ})!Bh#4wq?''BSkBefݻ_i]۹/Kh<&[ $JhZTEftޮ7יּ\gWxj.[ 6Ft>kcʮѪuEG)u!X_9#7ʭoYIH(݂V]?zl9;X``creܯdM3(lyQ>l9&,,oy@md.J9cMwĨ߂uVmб>WS{eiܲ4yfCay͛8;ɚu3`>(-[2I3+3doMu락f⓲{4zKWtPǫn&+FHbpb1z!nڮSHwc z/5]@<[{7mX[wFva㻴]ͷ,хd -Rr`OƠrO<$_(W}FyH8su,{}`fKlv*W'=K=`d>&iw|P 隠!9|w3?′[#Nwϖ|/*ĭǻܚ] EnZR>v՛ֲ%_Y+2Ħ9*nTw}bM zYѷ7tn Q- &-ʶ"o7gv2+| Vl;L#.ULg3J⤁?w?5+t?p,1Uvy]/N|*AE^/Ƞg74sz my'ߕTrDye jÎsߞ{u{__ĉFM+%8yvfUn]N+Dʳȧܛ~mWMw4EHbxodfb[nus=}Bc-NN;55mZ[s4t.qqJ׽}|oMc;5/1Uey>m̨ʩejɵo]s_K|3Skx3sU.M+ ?^yJ4<ƃ'&Dޟc}EiHb&Μ"Jn˚7.au?VKOg"[[ugllm&q {0?Y/jw?/ꔪ/aRr|Wfy*6N.ҿ˪gW^uk53BMUtd8Kio\+&W2$᪐ZKZ-=-n=Jk%[[=W"*wvŌpZت41yNcc}'h V.uKn`{ {3kӺ$]~?ȷុk;KٷO#MMh㍓id.Tl:#7=[m9+8|A|mR_x[7'z3}hI%i3qtzr+~E_gmG<7 ѧ>,!K{! 67\m[yC5ˇEG_PgF {dchyN?꿯R]+iODۯWbt/Bh@t'_NV8oC]wo)R_Ѻ&O9?ơ?;Ȼ~h} cr}?Y=oX<00Gî?n;NQ_]>f^qN?#\B ,ɀ=+ֿ_Ͱls:4@rw+n}|"ck,rg󎙭cVۿH5}W~_D~"qVȽ4{U?h*r6ROo3M+~&N*[}f]ʘU>~)_]W۫Q嶷7M9$2Hio.KwkB9{j_ ѵϕ,e7#J@!"?]}z?_;hӼX참cYZd϶5U(ޚ8T~[ ȸDbƯM7̫ǯU~@|ouټ?j1y?/Qnk}:m9UG70\W,ӡϋB9zm-#_g{k76&Gk]yڄQU[~3.⪘.XN~]G>/V-,ݵ{t7,Sr2tsFiG2g$um7MϚQ%55塞_}t^%o4=hһZ?'{{t+5x1 ?nVyV9s'z>g&wߜQy4dY1-%u|9\o$hG1pgwqKX l4{ZaO+˅ljwvWb>~5'%Ot~_g]//HT5\?Qf1DαWֱ&R|Z..ʒ_6R+6f_'2nm84;ߙݍ/T7tX?nC6F{$!)'u{us.J@}ymSyo\ ].oXJ}$`Ou| quU/ t54ľ`zjHy5 3쿯 -B}QNr\gǿZn׶C|KVb@,knq|ۀzW_A?/4r;'̟PZ|/mݯ.MJAK>u[x!XƇ+o_>~ܤ.=%ӱ9~RXF~:=d(C%B[K{koi5mYThZ &W-.6_ҧ"eSGzFU,|If03ޘ U3K#5V?~pٌ8ejo^Un+~Ji;ٿ6"[_1At/l`|ҴtXrʆ[F9եb7׬ÕHLɩN1 뱍'2]wv3M;psԹ뽼~jm|YwrTe}Yi7o'gר未%)A7eO*ۿϽsPI|ͨ%F7]<1re*w7rRwvZy[z$,h1p8?W~bR5ΓŞa-ʬ)cܬ瞴7nx~}:Yセy :+i ^;mګӟq(G =q+NO$y~fj >(yqnʿ/g#NuU:ݭvU[-!X|I,w/m+:Z|\*E7{n OŚF1,e{mBۡ]OE<6^"+gy E`v̭.r\E |+푶o> _'JVOKTO"J^W}1S&^m;#N6::X>H>t$͏tYfr\~Ğ/ \豬ި`e1d_:YG{_3N_Ƥv<;_W_UJfk\|>rvWgI^-7]ҊkONóG52䅉FvݻҕVGI7asjovߨw~!9- hW?7 rg{?XƜ9'AnՑ[?: k qwthv1SoO?dgw+nmۿ SZ~}R=}~ }o:liJ[#̱׮ DWlRMqm܈a??"zJ2QZ;\_Kh%\$So3f@&z9CwcA7 |m C7^,u7zPgq 6HY}<tI;_W53|Uo|ow v7maK=k[u$ k2b[}Mߖ⾓+,yJw:E>$InmjsOn ,G$?.Wdv+vէ/]/uVӿ-&۝9nɳf-I(O V (?qQ(oLju_7 #qݿ8gA>_c5l~+l}Gr%gmoktfngS)ɣ_Lv]MfXC6\V7{s~kV=Fy4s|[Mf߯O્[_M~?# DrZF~`$淌Ts5>W%A 1hXIkrҶ՚ج;?Nkv{zPJ}~{wfi0|?[5HIqfyaeoݲ46}/10NJYS4aaGeioM@}(es7އ>ھ^+Sz}G;IQt-Z@]J4%+]F䷘[ho?$ܞV/_mN-'-QXe]ma^:?ڕQ5W6cm~j'9KD;]máJͦmՐAwhv}F_2FOM>޹6׹qMQu#nj8Qfo#Tv '5ghϽ\ 6MD^ֹxBN<[Y~j$*?wH?],5H~3USZ+]?\yݻUQik75~bjw;mui+tۂd\Z!Q`'=UNo[:~_ZMv=1@UK'x YsCq_R+/*1KM#mgX'vʭ6kjxD~~[WsqK9k?Xk0Ah۹ھgoZh_ntQ:Q - ^hOox'd[ONj:oFlXpUmez)TI[{i^fevݲVw+~[i]{&{m4kE/on-Վٮ$rZw'RQ4z_z|o:2 K0ɸ.*z;;{/%JM; ?>h Q۾:yiYβsݟ^攩{6ﮞ}v0xO][}-4k&6s\-~'KMj8˻X%I5o[uktq]{kލÂWs3/Si+_}_SIEy%8gۗ F-X*>sW+ ~?O]V }yvu3Šj2#*7Uo[oO_m?̈́Wr{UҮz͌64>l/k{02fYkV /tZ7㏻7sǿeսup3v6(2Im̯i9oZZav5ʌnvȋ[7ԙM;,4T7MVvW^~gڿaZӷ?[6}?U.e!h(:n,e8.7߱Flj4 'd'Rn\3cjo_++6w/Qw?UwYxZU5W>ARIo]?'|0 ۼm~HNѥ"ba9JOaukh003vz}':9[0<چW>fNOO2?lɳo3b%yX4^Bov-kW{w"dV6H#uuY6^4(D+Γt)n߃[te9ߩ[,~G|' F;2]>e/㑾}csHfޛ|͒_nGşX)o2j-kĒ4tM?.OQڊoS*E;7u^#io éx$ i/$ff.'sC=שO S5 &+o%ox_Mwjݕ;_Ymd˻>ti#Dt1]0uNJ mo7|wżs HV߹\lm7ι^ۗ7z{лMx܍.¯aLw/6HۤXoɔٱ?+ZVwrӡ Wwd2Icoec$+;-'?W&+^wg(GM-~]-u{+16Lrv>TşvJ?`-ΗY}x55t)eu,˓X/Ԯws_0R27S76k/.Rp͕ w]tpo빓snOjZהRKT30F+9{4i I7\П:{Oij@5Hv0?~4%w?Gg-Ǔ< ph6d]ܢz-XQm}h;+V-I>[k\&$6?aby|hdY7}3epkݽJQK]~o2ZUĆ3oy-sVv37 |ʦ9er5%]4U;1 mrp5-Z]j ^(퍮=~KGeNzEݼ0vjfڬ;;E$_yt~$OK￯zUƍ1V񴻈DMsn&Co3qY_*꿯"m5֛\tH1V=ۙ/O\%o6U"_<- }$zο}V|1\\ )P\HQV4GwwHh5U~+grzΑJwnV2H$[_.6؅YJZY;ESͯ=+FXdP, wާHg¿[m>A[[j~#Pңi.V۱ԡdt_I."D]ߪsJRnuߩU(|_[&ǫk}_v~iC565>zte9_O^֧] .ωwugj%{y!9ahw+yvoyy /ykpᄅj{[̊Փ^__?t3Ko'H,Vh̚;$;*\3vsMt9+_ >'yMn>Sj,;[u EEdiZya$!DE~ok#ƶ.yk}%ƶ$Qc |+%)[?x!ݫIgjxl;MO91\zTb{~!'Mnƚׅ4#Kм5uov7ۖI~ܖ3Gg=jJy=:c{o$kxbѾ:=g[?S6gkamU䵼Κ9?_q$ޝM[}JM_wtO(D!o xV4)dZo%tu[YcSԆwU,zÓ߇hk[{o '¿xOT}uy>Gs J× <{sZi:lr-1{{gtt1cU'[;|;񞟧aM\jzٛ1,co52[l#?39$}9w?kk>14!5CVڷ:ËG9l~c[|;t^&-M7M[5x5;TƷj>35BQtpF2 3$ R]qשp_d۶O ]?q6M.@Mޟ} dmI7ɚusfys\yd(*r~w[z5~ꆓߍ^Ь>%gN]:=/]GQ?ٞ[Lñe:O:PuW_:-%Kx|?Ut: ܚ8QQ!o${goLݴk~]컯i+ƞ#_j<6?ٷ^Cqhj+[s[.RoޱK>jmgvih:mkᖗsˏx4m不ddTV\5I.L)NQp緟mok?]Op>/eH𞇦M:] o ﵆HQw77`ֱ3vmLs4|GK/u.ݯ+}5mKRI_ɆX5I/6yU*9N_;(MR{j _FOY;s=6;?f![wdżO҅*FҺW掝߯.dݹe5ֽ~SG>> O{[W+Ox{H}i7wV0OjW__&$x5˙+;üQx5jM,C(Z"tm׫맟ϟ'a <ZcJћlRj~O+/dhxҡ5FΣMr7gp^GRr^q_N3/xk_&8ԚPmVFJMz{$Ь?^܍%uw+ڿ}#a0JXBU*F_{q #G~#umc_z|Mݼm;RM&o:o:k[Fh;g%e401(GDZy_].˲sêQ9|vnj}~o W*֒Zƭ=Z*6w̫$62<x3Uw% ;_|) )+u-WR]||?eo+H;wlUomI_7S}~pm3 / ibxw'DZ[Vs'0`kȿΦh?^֟1N]v;{{E{CYB*})捓ky{^=T??{3!Si֩suYآ\I˵FyUڬVkV2|#W%umMׯԮmq iֶAhUYY~68+-vIk&{Cz´-+2+\neD|kJ3:<3k!{P&ge]6?7Έ_3Tq寚zXS{3v#s~!|@>!ci h:Vdomc;og㷅|=kGiocRNKg$Z̙KGbK˛4VΒdvv^^b(S~kymoz]#í']׵}{*"٫C2۵i|ymOrߋ-~oU? ~/xKY/[W?wk=*-?MK{{o,ɾK9d=e8u=:~OU > ѡԉmx{Tlp$gMy9O׮E׼/埊G{fcqj1^:Ѷ,̪y{$;>_0iMOW7:x5-wiqyj uxrѬ6ICgd$>z䬥/_[ϱOZ_>տeo׆>$kMrGionGo躔l"k.Rk:96}_%pwufu1+_xߎ\eNck ' }$څ"?i!x~-vI=?1q[=_ h^na5aGŴa _ׯRͣ\|QOxB}[ӴZ;yum{TXVIuK2kH~ͽlwyr?n4ϯOS/|*j%ܙ.O|KԴ>eiqo$UHrDz_^F1w5KYnWxg:YcM?=ƭ.M6un1d}e8IwN~Wv=!6|;^C',&[C^[·7(\$nٺ[kmZz?ڗ/ƋoR.d<7&DѨC}g#"mm 2$}hեNk^_Ӫ~*p_zwxtOZx?HeM+CnLڕ[jQVa1Hc9O't+CCj 7_><}K_;|[qM֏RRb]ڋWz&O/u"[M݈D/Օݖ՞}{0]J{&M-_o;ɑn zt%eb{m^`"Jbǵ~_9E-m[{b%gw̫7??v${&]|.;'{gQ }25T=9Uo^ FQ8Qoht.Bvߑߺn߼k[̮xs k>I&fgfhV$E?h=JFcʽ~;j?K׾O_ t3/^LZoԍb²^y ;v"$#*%&??部_gþ o4pgph$dghky~l=)y.h-ZX쨐YeFgUWg,߼F<3m<چpܫ:04#O|HdfMؚJNL}~ekhvO# ~U3攞v̊ cn0V 'Umq$yx_omAR=.ܙmRLsjOfV#&w=~JJӷgt[k[,o=爭li-MIJ}߽mrMny z槤E{x^\\khr$>Z:34O3D(5Sf^oicA_ֳ/2ǵU6#D\g'S>_t)-Ø2xRU=ݬ. $C&hlo]=B[Z~o0sV5)Y%w+n|"2gXmts񮄒Ŀjn,亵HzFn#r}o[L 6wS.+O_/q}@7m4oaEa<\4w;Hsj WӹOK[%[DImY;qODwLf,%p~U]Uk)FwIᴁf6GeK1fٶ[#+(>aJ+NGjygs}._x pT?xw[p\`~os%iYledܻw+-Da(;in_3Z<.f9eکE-vqwscl(Y-?ּ!,wBmw퓦ro~/t&It̷:{4r#'̛u܎zPk&4ַF|\D2H |߽Vsm$/oִz^O$[j3 h%yPF֓ƥM;hY[yRr?j$JO^t_i,4R Zʑ,,1"M'*ɘ]F.<͉l`״z=:ia7ǧ_Kzޞ/ůxĚ4F'J\5hkuT6ȉ3!E_ysIJk:i;e;H^ElgZ^H;}b*lVϿG$|IX)}~)$yׇ~.Rff,mj.eA\%YdvsFM6֓5K{cnM"|o[>jx̕9?M宣4s$I&N~?VzRM2:M\l! );"ѳm;2++u6ܭwXi$Le+XX^y~Uۼ}/'MC+~~xUׄlt;.u˷lsW q3G2$0'- qJwo|Z--:fffxIf p<O-w:d^"[ohj::v>wiH567efrLO%$}蕇:L<;mՃ{|KҵI^4fCmP\g]вI̎}{Evxo=_ëm,]<> ]65ě|rG&HW6Kyu;gRkcž>k5gm283nfլu(y g߽?|w"+]ꦰV | __){_"خvpwz,?D-\׮*꿯]:rxH8\g#O.TiAh}28=?soMQQpXdžm@9_YO/9c-m-pƘ$pO?uMs&NțV1n7BBO򹒚NZO! I}>]lUR |UQd _zjv[ađ$eW ~lj潱l p[脔owsm.ՒIns#?7vMsme6$vO?mӢ$gkpkJkm:[GI)g5T 7w|;ڡQy'Z i/ƟiHbH%B}#_e,TW[z19d#B\g.;/r>u!beQL2 -KѽyF*Klgi 6Վ775˿ߧ>ӴHͻqVW{L9t[e!7 ͿqSͿ B.[jw*WnmZJ5O?4}n2..tu- ~ $gR~z(.K|wSHĈU#8ZEt~}SbZw[lqI'Xʹo۾y#_/ON42[u/ʭ ¼2Ht՗R]~ovg$1 9O19eiHUG؛D UXEԶ{[ſg|hV<-NNm,|3&׹4G;祋afL5KƣէK?O~ /.-V+kIϖ34ocM`y1r*Nk[_}RQuhvZP${;%6,K C2o_Ӭjuc澷[Q3mEپM/|.|:w .JuKi•_3к>GGO''ΘSJu1vz;{;?]Oɳ|]|UVӦ-ϩ[_\ZMl /l[> ˵e,sG̕<;3ʝJ8JKm-}ߩjjJj2rXayyxEվl󽴯5 enV]ϵFiu\^[RRM7)At_1-0i'lNNMLA'7Z-iGC]Dŷ<2o*0ܮB?'&cv]ʯ${AQpF~oӽ ٦ 52gqnnO Ev0?+OۨM:.BuƯq;\7nMu%%wiȻAX><=m9gUXat),G&eJOk|wR^\޼Ѥ8lXveY$d3>_uToԨ9-7|3} e/Xw$- llYIJxDxq?u <].,Jf5(T)>d#'AAkV n!/.x߳~,m9IF/~#i}is n#oC uG%z2R]JTj=hTr s5F ?rڞ#Oi7ne雎v }`_Ph'8ǯ;/}h8,ouW+#Q<,|GNAϹo?z׿ѧ%ߟƏkQ4~Z>V$2?zhI?~Mm_Ia 2䂠kCұQI۷?:?O7+tE\ iM@ y8;/+K}~IPEz:;Qho׎KIy>eu!1M[4s7n^/tp:g1۳O g.@UIg[d\û/iz퓻ȴ!C[?jGpzmWNV1fi{]1}}khѓZu!]57#RGz̡ZƂEkm.|y'󜺾,n.7p|ѷk]#N1sE~^n's=bnX42?Ef9~uQ_`3g! ?ע\?_74b &c9⡻+eo]R|싳r C|{o˞\sEc+֤L>Y +<]9GܘҲ|{t%ӧH(&UY#l{:}ӶǸx3_eoWWN$&O_|'WjQ.;)G^+&`Y/c1hNzm; ᦫsnڍUZjư۪In7.&{zv׿[Z(B vH̭WU;wsׯ7r˂wG_kk&5Y&ayQ3W;O= ir u=\|mft>-0ಱ’|tI2n>!HM:,,Z<'_~-_mnz_#~,Yl9X;يYtlMO}UvN6L $7T;JNg<__̤n&hdp|̻w_K~f5KQWR鶷>E!\}kf7K>7&WG{,kzFeh?ơҒz&ˌJjVr3e|Yvdj=W){)=sggmhJ!-\ $hնn߷'͚Υ&4Z:l \Jf7Ho/s;}}ß:mLw0lޱshKm~ba}@R7znst&9˗g{Sɾ'? Ÿ꺤6.4O Z}mr<*i3<\-)vo_NC,4mGKF9R9մ߼~~{I$?n;[ZƚL#ྷ˳oҹj[>uBmIskwu^.+V1(In2\?ȟqJOIьwH$2KDF~_˻}}db{i_3Utbv;dRWݾ 52̭OCϬp)Ѭ3[G"8̫&_3}rTZ;?#XY'Ϛn!ZTs{hڤOVaXo/x|G+28J=o_3Px 4T6bAnK ^L,ŧOvq-k{ ]䍋HU$fOy֫YeΕ#lIm6mD>hO+6QKGhZ)]6`žmvOo\WJ~S9'm?yCն.Z\iWjU.cyp [ʨv6<'|TN>~'4)(TWy*$DŽ I>Z'c}~W=:w~wݩ˭ʺ}9(cU#xQl|?wB]ﶣ58 dMx9j8?Z[]u~+' Px.2s?9(MW~˿Nfx4Ѳ O1wk.޿.Zxh;K6GO~q'#kZtb"EQ!X6,˵>zB~J}.5.^r_f/Q1b2e}Ǯ1]&w4YmywvĮ̱4yk$3tgOSa7~_3Ju=z;Kq4wwwH\՜_vILPw*̭"n2[mjtF]?Լ+hmӮakw{+ۦ~XOyҡ:R]ǯ:_Ͼi8ҥa+ڙ_>ݚ.i#7)J0tXk95kOX3:|[}պ_[?uz3EOSTN|;6|w=70̬6d.?]P|޳sݿbV -6쬰Ż@U?#Nュ7.tK}Bx EݺX29Gہ-P?~J%Moyϩta)&4k[$q I!UVgeǶ#Y?56?RВODVNLv]Y~f #*|OOvJpoG8*.v^} Zh]("oow֦eF]o7ZI-g{BHc豦3#Hg/KEk~87koťZ&yT* 7𭼍S*ɻ7o>/ിg'qZ]^z^;*HYU#~fbwn)vlA4v 7-:]|_1'2eA}N'V6-s&Xb6+|sִ%O[~~{V3#'naEY0+m[|oN;l˒٣w*ƪ~O-6qcWCo:oٽO߂r~6:T_u;O]].No&&=\Mq.ݿhXM<|R~|3k?+h_W}#V0֭Ěx{|K<[i.Оt0)my$2Iqmf=Jm(BOO-.|{~ނy"I[MMor7~ru3EwMr[Wz5&w&kFvu4$f#\q5!5}י„,יeS|{f3Iuŷ4n&[h5y% c.%x(K)J߯y('鶺#o>|}o{[zU܋i3o5ԭou4{b3 &?7qD|nڣ=%[PbV;vVhgRnR߿o>dr?ef "oeUW?2e3ee Y(S7:ܷ-4JYm;]ha -Q3mٕroֱ%^-S_z^n_?;ӥn3#4_rƿyv/橀V-r[]_#/ݮYe +JRjw_LMZ_×VuޒwZC#y61Mz ErˑGuosIՏ=F6J6:e4pFvv ?vq՝4wn=OĚLZ {ϗo4ܳ|<>Jᄥy}Y֗عPxYn:4HVvwIpHu:&?\{k҇/O{t~fi.EIKteWr<ֲ{[?ɣ٠ܒLy2+|̥vɱ1{;{[v][]sxE$EHʹ(kv̑O"I/ߝĔٙ-kŽـhYɔXe=jKX5[?4mr[O7ϿJ^m>iv6Uy?ޓ[~r_iljWB_RXf/?2GgӊRסAouOZ`Ӵu*\?yW*^j-?Rm2"^;!EAn_-V9Q8Kݿr.Wދ^vHV0ܱxmo/n֒Ei6V*Dnߋnk1x{9DPDS +uɳᬯwD+U_46نlL?y/~L=.0$݆?Z༯շ *%ti<h;] Aug[afī+0-UvٿɷɾEkkk^ٞjTLIwfj0]wlۋVUU[W );t¤vm֗;]'ĶeMma ɚ??4FV}0rwM]]kPQY,4e (j̭m|ӏ+DfW0=c omyjUmw+=J1qvoWZ|Iei=%5e,.|-$W呲k:#6kz7kYqhڟWM$֖ш!M}**v}nk]|6ZMM5EOO#e?[L[[og5Q_US:v>OmF|=%Q& y$^"cm¬I|qo)ԪG_˗NW__Q4C"SӠ!n5XYIkoܽ,;yԍ~_u}q^,vx4 š-[ZOm4>K/E|ۯ}_x׋Xygj_^\_X,:56Cuu3–3"-ipu%.G;amgrkx.QeI'osOn?7~1#WZ1wPA>QӤ\Ls4;$?g4mۖdm_ET߇|Chv:6jWz<_쿳Ȓ~9>rw"Vq}?'_ouxc?j;ymF߇{ SkזrIu&䶒l/&I&)4qMm(T[k]~;{gns/4>1]qb>'sG#UK.#^''1;=Ʒ(##n=b+_Cq~$qH3;yM6Y~x}}u|:ٿ۶y ./L3:o~qsoZhJ ZotL^!oZGu j>9mˡwqumG{XV&1?-y9_5uOK'~G/:o~>iLJ$l-f;f,lKO;'55U)'OVEQI+ +#r>e~z:߸}NM#|zxSe>;4i{оu-̱g]imHdи;u!̽?# p9o'}BZ? Ypn[-WJ=5UmAFpR\&mg~)0q]wL_ڗ^uԴ~ z:p2J[ί+snφxKᮿwm{͕]'W—Z^q2V tw},0sǍ=1zk~DZXAԭ5?W?xOKTi\ZRDi?m2%<= w洿ocG?_:3&}sۛ=;PmYQZ]Q󮡆h6OO2˶G^#ַ߽&Gh/Go]'|eZx[(t&PK?_Bs}יSwϗ+I}?OO> 4 v{ɪL7mBm$;6-+/d׮kcE=?s z-c7W[Mc&@ކFdi]dUW5╽w`CW::xW&maBL {aGwuOݮjrgRo^x#ޤךVڶZţilg` =Jd73GUej|lns.on2}YU{Bii? ~xC>|/_v/ ERI[McTxgHS&MF9/fNtj 7x$sW0{^jX8ǒ2+{s~/_3IW@ܥկ& fIjK5l\nwcIԌy]<;O τc=nu{/ivZrA[#[ .;eFӦ-̲|2?W8<650s'n]'寙^+<|0m˫eKF6^kj)t0H[t5hk]:"$ɲiluիUZ߾]5>._O?+s_ x1u-*{-+[ٶ; f3#Ioo_ϜE[u~XIC{Ueoí{м P>&L-u[QAq>3/úIKQ4Xo:ekt$S'‰VҾu)Z>|5ty_jwU62UrΪk6mD\~}L&_xhciA.[0s'?<3箈ޯrշ߮$u{a~|fkk[xl4M6ׇXe]B;Bko*)#mUUz/3XNI?_;w<_)|x??UVwk..?Pn.>ѩI c4l3Cooo$# a҄_2'RIuuKξ/xW0S4KY5fلs[>^^6I]x/.|;aNMM̽i'}WOXGCc[Y5 ~9fwyIWdv!<x 3FLͦZH^7WͲ(sG)Ej}_|4Ӿ)wOۯ`wH>)GI-$omC'.[ {!fpK|?QYi~Q߫~GV=ÖLj*-(V+U$>LplcnM ~e7Ws[’=? 6Q.bKNK= P 5 m7ηr^Lq^]^lƬ%_ݗrƻh yWgNwx{n-:=KG&ɡK a-ſbtC^t/{-\R;ׂK=??&Xa?Q3mw>KUsmSDz\>p5Dfe5ErL~|AOҦ&5ɜv?[0 _z/񽆯o-x&|#~mlHuI727i2wc+.F;GWچO IK@yưZ2Gt4FNc5ϙ46^c-MW$R}MJ|Xo!{lO #>"-Ԉ\/bit\pMw+/x:ouxº5U_=5o E¿[:>syq.,3Id|;eQ<S$?'7GC(>[߮&~xV/j6;B)xa5-*9g}#^4>^7X]?WEr&v߿j}v>Y/?$/u-cUAfF_ ۴qu h|vܤ?$mRzi\uaoߧ Mlj6Pz:[c* -#-mEi>dYv?)4uul-2 KJy'v*I 42 FD9ӗG^L''{+^[/9fݓ۷}k{*2}>󞺽Gۣ\BwMz9?SW]w׸8H' fs\^m32?vW%{lZ {E0+ 'mXU JR5Zvp+`),V}*Lڳajn" ⷗[@)5#Ԯ +a'N8$Yy g۟2Or(nͽSѹh:m5w $y#Sq${E$Ac9;u޿Pk$~{yW-."vۥ̑'Dw ѲLѻ͛w p5M ,Ir%yfU$e<ʫ@F agh.D+~d 6P)vlW֙pQژČnw{y :z kŚ'5Fk:u} iw'ЯUEVtGޜrlHw ,%\ۈdfRA*Z_[]f5,O˘jGkh t,d9vs/|j߶j\GL7}"y%d{[ʎ?8_lujA}z~;AA˪y2Ę'T۶oe||KO4ږ1x<*+!N)Э]L&Y"k%hßE>>Oȼ{c6NMDM,7/hw0v۹[?>&Q^y]Os=[ҬOkm ]{J<oOqviw0#I5ڬ/˵eg~ҧ0Z}-ĢWf)VXxnStyzjxu d9!^}{}b&Ktm;\ܲ -7,}E"MzWĒC6f+~OO5Urؾ-ůٮd+67nIB~`_k3ZũEgergopnUN ;_ 4;…@>2ߓg֩{3x`6ڣ]`q^$PDI#ooxWmdyxIMGInrE<'_4kXd[1Eິm,_Z@֞+Y|?],եժůh0I#sBع WU7nWs6V/gO%|o$k:6^5Vx^Kae2LSJkֽ>Dƛmz_}E~$|7𶽩NomGD\3۫/- B\[2 [vȕ9R\?3Rys.NOJ4U^ZH99-6ñ>y>_Vwuz'xz[O:~Fד,bQUԖHXnm2lz$+ݿŜR[? 6V>gmX@gIcUWdTRl[}7צi('> OA>P[iđlo«~|sa-Z9/;{_@hSsMռ4o o]ZM%i^}6Zw:Fcm&&H6$.7Ǟ-_rY~?$7vSjmޱXb$m2ft+$[n*_% 駞|(HM}.];_vh`{}B5Ś=$rHC#v_=r)y?8x_񅞡[oInM},*Ͷaߔ}#W'oݝq_~DCbL>( WE haM=6{~OMtY+vo_Zh/u[RfH峇m "oZ?ʕp~7=]_~Zw"𝎕6si-Ӽ4|-q}.d5/.hawVtzq-^1FInwWIvt_Mdͽ9uo{_q*w0oM49k:ny$C5Ǔ 6H 4;6lO%ߒN9*l\տcxx"{emokE#ke7?:Ȯ0ya8SI`~k [1U3L7.r_z^]3sSۧ_ar$pWvOMI;ϣ>N݄ctnh5d4$<`-/\k BcR2 5 yZߏQT*AG13S<_M|Ý}6bDc$I3>©Q {Q{v1_1os9?wvϽhEndm{צ>5 Oߙm+g;ÿ_9:wկ3Og?bkQxK3]A"noΒowG+w}w *^uZYω-_e֗uե1n1Wt_k>N*Z.ݴG ~Nyr*${ ,~m~tSR[ׯv6xZ6ky`͊K\S*=%6^ X鷎k[Vj>n>cnU_IF6ٝG(E|Y<2h*U \ ϻw__[*t{ft6ޟsž%t]FMTWoTO BgaB$xJ8lο}6&?\U(FU=J)O5ӷ7_Tt]G9a6};T<['75qҮoW'*x*jҨv#|[-z`Ap@ ;@EaTGƻBVSudۖwZn{o*.|Gè:i2[Mv#oſWS6MoJeé; 1Q+.N?}w~_[h9Pg:q}7=m?, ~W(Ef'wg\ϭ/g_˳מx8,bU V[i1\t{?EF _ŜݻΝ[Ž~E^Ĕz_K35tȥݮ<ɔϼ'=1!Ɠ-e`o jӟNFp+u}!pm.cK4{_+OZtOAF?֮p>˵=z?mtӧ)|J՞iIWtKb&ǖY$⼔}g]== xt.{n(t:8ԤTxK4ث3*®YdW,=ᅴe_KNI.%P5z/J]7EJ{֛~OyjZ)6ycxK[Zeoޱuv3>E|EL|(>#ikw&\͢iX,n?sumܦKyeTӺsE~ ~|M]c\/MX{ak[Ioqg"{eh(Ug{kfH^ amZ*J>^O^~~_ss|W5 /)KMВ1y4kuq}O[k{ig:hѫT7O~m2_}n{2퍻yl߇5R~̞뵒JuoWwZO5>gu`Ǜ݇z!-:aEE^~=ϑ0Gyq 1?yrZz~2#m?}GY:|&i!,k7*{kdZ6f{km =o$V}RT%w2b`N3)s޴^C|?;[5,|Svsz@*go?}z?eV]?kY-O}$p뗋m,$A}bײꌻL40;aӬc2Gm֫"UPP&1$&O,/{6j_v1u?3 oT~qOַTFl9S5gPvZM4#߯K[!0q_βŶޡ ^?/]_:Wv}Pf*gźHG}ߊ\`c'/`*M+?]Gt9g#ZFOֳd@8$ y.rƌm_Ғm;Zi^&Y#7x*'&f^ԮcMoO&MPmUܜ?9dVuo*n&-}>kq+_O֭sG?ɒu^|Cj³et&mei̪wҫRVκP{3e~2ƨu%5[o0 6~oXJU6mmoΪl[_|o$#t]S׽̭>+MI!$rήmUio1Uy _Iw^窮do,d٨yr|16sWQ=?=ztO4Io3:+q!3+{ZR^~_1T]}O\|BaZǖ/q4jOFJ`0痑[|hً|j7ޑޣ-~/__ F #NnD|i>VWןɽ}'&2wnj$uQ˂({5E9EV9ff,!cDem]dQH8 G4)[wMHnݎgddk+b V޳FݻSVm1N/ʀnf nUO N?qIr;ѿ3Voielda[%&e&YH@d_\rgOx:vu Ͷ}i9'Z e^5ǡhq@𽏐G&keelC{f}IC[(f]՘}|Y!O[$`緛_{pӭgu4{ӭ&yUfhey$TgȪscghw:wM KK-{N?QMR9E.n#iY&DMҌGMD]ZCfii#Ŀ>/# Zyu+hϺdH|鼛)aih~3X9iN_=MIOJ?]gZVTi$KZjl^B۶=t۲Hv$c;P5M|-ݴoz|J<{ߟ |(m<4uHo#hO h n>donXfL2oug74vVΥ9954- CVs?tV%ּS\{Zw]H46?8ӭDJ[M_u+RGjN:[xܭm#aG76"rIrߧU ߫}z>+F隍47 <1_6ẻ.~Sr!N<8ם5x MՖ0.eky xEo:hHr#{tiKmuߡթEݽ5?ǓK.O^UP{[}C[3Ck2ʭu^>jdXEJww5{wF/gӭ>Uׇa_wkۛO3GpG ȏ3ɻ^SíCK=7?3ۍGm]/i3{:v{qL:~џ?1Y2k[ortn~qu# TIsi0snMgޙeQq$׸~>svDV$I)n8:~~"[u:h#)K[-o]vVrN??>,FץVĢ9e T4ew_ZFs}Ny_eӮ:u&O2vuy.&?ζX_+cPŌ7⻻y,Kyy2lZwjk9,u&U{`U "B<#|h߷F~Pe.#I4˨bIC檝Fގ1Y^WS[g{Dوe_EeVUowN2wKnw:ixt 4MOŏ{x7Ǟ:R]$Ui$u?fiNJ OeIKԼ;{L [!,V*H|oOͣϿeJKmWko6Qd6.mʎoZ? ӓzߞs9X*v?wj#,oҚxu9h7 nd}#..וZrwry\h2%݇.IsG78}>E_"ΣF|;jћ]n-3~G.+ {=zpW_-jkY Qfy^QN͹IHqu^HSEFDon"nd.{su^vV v}Wvߗ[keo <KܚɫolĿ{_8'auUH[9Mi9r =&x8b$Gba&|$ۦv/~'✤vsV]+#3:;C>p1ﶗiwƼ?Xȳ/s|vof?=6lVq/׹b}O}2X?jq")>ҢN5}!>K )M_֫&yo6:Vƛ’_ptVX˔SfMȕRU)zqOt'49t˯ i:Q>/|so66X' U\V?cMt];֖r%BdLЪ_浯Wnuk&aib..,iZfRl'1}~%.m=Ī/uLvm YAP*q&<ٲ}vRO{o^꺕ּM_EnIi6.9vnr[OÙ[Y :֗,yRM,dmͿ夕qROEܱԵ3 DaVѥil*CA+ut~rJMt3'Zۄ5, ̗+pq{m8:T:O_.sHNoi-ީ3k4Co{sY8ѣwNޣ6,Z_yGHLҮ~oO91QjyOCGB-l4E1]Uhs"+6Wym+ ؄]Sfԗ2u+'2Xuiti//mdkad|0l~u_g))/~wq|5y|qPN\]$ yl[>i]q-8'~u/²2lٺ̗@-n=7 4$UcޓB;؇ 'sßѧ+Lȶzm˺Z9e}_sU:;]߯r%Mӵj?nt,SNbR9NhN#D~^ٗM=WLT]L߰]j]իIck-կ?vhl7~(ϒ7;7}mGKttוKB'ui<ˋ?6"nJ 6tml$)Uai7.جyvtyϛGO D6SOZԴ i~y3ɶ4{rqs盕i=Zzw8-$q?*k>3EF7VΒ"ٯUʾ][- #s'YϿu:?_ Y^+2äUcm|ZjW=~&{':"I巷tR;ݝh⑉fzhdrN+uԋLЯKۦV&/6)~On+(>uW]>]^ۛ`.Wl\969}]Ĩ~39R__3~O \[]A}6K Y̒7H|HS]ivuЄaO뷢;#D]Gqh;40z+NΉRo~7|:9MX =~N4u^L8_xcηwu 8U-OfV=c_V]}i.e?SOmlL(pWB,}Me+BƷ2j1_xfsm%`V]뼸fl:BZu_l{=WiXSj5jD~Fe *?D*biޖ>6sT%_Ǧ4FCmy}&5qeUTUgblkzv|mTɽWlG/US^j<7gFL$4y1p:>LcuUMkcJHlmlB5gO|߼XtU>'?eZo<;/$V gh {XiM?}HgZ_KnmR4JՒ6Lu9Sz~f=^xhK$4Zgo,y޿#Gf?u z~d[j u S!fybUUTX LR_NT.34r#A,l̪ͻo}g$T6hUTœo|́5m۱shfǙ2u)8}6\n'4Q:yr 'w.sXԌ'~6= _|LyҪgsmu S~z}:!-Ut: B]7Xj ,U26l#pM;-Gxgz[Vfiwoܨ5?sorIK=ŽƉ>IdLZnmtfMoٽegG}COYH/fs|']#Cvՙ/vZAsCM.Wk}FNm⮣[?hQֿ[GTPu3}.UR=o y}G\Jw:ex`Zxe4h_[h {gYk[5 ~Ns;I2IYu0o_c'vzIyII"Gf]'&R"m{]OE|yM4mIj~{mB[]r 2[&eXGul-.^IOncB}Z?įc9˩g?:Ĺm5 Gӡ&ő^kwY&MSeMLE+Z W;I%_??< ݴ8㼃At?z֡5>O30lyFϝSE6_׮qR^[>?}AKlt T:ψnmBD7?lo.>·yi#“s6ןO_1Fj$xCBkhZ[ ]^5wId- vsoޝu}z[;o_,|xYZCĚ~^\^\jim(BqfԊ^Gm' y>[Gl(ϣP\o_dz>M-[1xKBRu)la*۬2M$;f?h{D}ua_/+3;i=ȭW}CszMςK]χ$SG43\uasg6osp\G4~t):MRw8ፏz>x3yM>\~2$H'Bko!}*!{ *X> w{N&%{>']9?s5K㿆"/n^;uZ߉bgq[oiwk }M;yr?>~tNV׵mI^~YE~K>5/#l8/KReze3]Cm%:~ˁʲjY^SQiIFcb[c:MOᆗO_<7&zEs7$:|7ڤ1m%ڭM4LIqz\Ϧ_8\V }齮dv_%B#_Tnmo_g?Z_W7_lnY[X)5ƥеi]dfwv#H~cJrJ3}+km>ޖ ̮lO7Z.D޷%t:GU}*I#!.&gklC>g#cj3朹zџq5(ҪdnߣRn4_'PPbyfVY51Џ *zZvyUNhu֧||#UF}/>}k%ǥkiK5śMLכfѷsuȖM44݁dۙffKY-ۯr/kk鳫4}V_Xi ^ȶY(q%CC nr`~~?g|V4Oǁu ~ IIȶxVܶcu Y[_LLIKm&'b$7/y\қlP.&2mgXy," 7oj4MR$}K'PwTJr-Կ`(> qo?u=euKy7yop]M$ds7ΐZNۗmﯧ_|A>;;oWOۼaTo.I&k׈mR {8cߥ*k{ywo9"~z_?>[XyƏAir^H דB~I? Itzf\I$L7k^=F:mNpQ3kFH񭿜ȏ$);^i77uk滃˸6m"gMTc W j[kn %vGKޗf+} TԼ@v,WW̉GtIg ۼ(]6<vfS7<3\>%Xu u8w33f؏M{T[|>go$X\Wte$.]-vk&lv}{ÿ̗gܮ Z/un=cj8[?d$>"xT/ÿZG/.a-̑?0C73Gɮ&δP/_vѩ/~7 |?H_xLK^eӤimGQ_;.xЍ?yVJn55[/,{P,$ԧcw[Ms 6_#މm{a)_2}{'QѼu:=YԖv?jM κ~b|^^!νhr#m{"nWIn7Bvf|i̭ey"̮v>zb*ZNSȴ!tFÖ/yx5KnoicdVcm!?/{ i\N Kcm͝~Ŷm4;%[-Z~gMٷ3|#/Ͽz| )_s8öZma{HDv?hϵE<rȉ2#StWoAH5Ca;+7$mz" QKd^KP5iqoMN?6VYWYWY.DnP&YY8-.Lɥ%km ѲFг0f<_{^BIcE+ϷC,_g/iG%YViḅ][DbzT}tĦv <вmį~WA޶Y#2-j#R۰*=v%'ŧ;,CpJ+e~^6g6vfTmiAmk|sB䖱J ]wqѳ@8( _|^C=<A+Im"h?.2+h*+F?%@T Vʪs'1]:{P8-/Ϲ.,le8,uK1[{<{fvw&>z !?ڼ%}K&e_;F%7;_Vڿw,۴ȆmbCֆ%> sgk$S }Q[r/& z[xRSjw7 a4W2[Ac}#\A$_cG>ΉN~ZjLnli/5m]9w#H$cڡ]ww\U_6wjTv=:( yjKm~_Ϲ{҇6_b+IkH;Ew$$l̪77Ήj+z ]t#6-)8 d'Ĭ#%wcm|-巜숶KrOfV[ǷVv2xfK)X2Y2G.H!YQg465\g>eFܿ%UjZP6o! |&wxYMϾߑ?+ni^R F-茒[|[3 g{w") G FoǻV+O}*$Q,p?Vln|~v,QB hm_mG_gj:l |fTI72ZvR$U3N#7?u?c;-.A~$QQhㅇs6ιkJ=~hQm*Xdfq Ư,<'Co&Ul}Vmaï=}.>y\Q X _Yo~MKXhyaZ qc ZD˺=Lڧ&M[ɞ@fv{Den85gm>yTLCO;pWp/7O@ٶҌ,.`}G^^Ҥ߮â#Kv3lrm_?8TѣEk)Y<ݔ*UoqIA_EӭԒHڳ4-339ekomV5x.6DkykɟerH6Ȩ7GLyoҤ~Mz{}y\-VVlj;Io99MSVk-g /P{MZ[biETΛɺϹ~{4wm?[Ge{oᅽrYv͵hl'=+8^[z16<6Ke)ݝg$Ix ImHn6?ͻ~6)OJOϹ}nG_?əZ8е 1r=?RiF6wnD=R]͎WmOAբk4MlH?3vI#]suKfPhA-Uorp]TegM{vIylH" :um>mSWS!Cy7-- ~L`1۷|̱i_`)[1;I8ۯ|ۻoQ7S>*ṆK[:^]Y¬ټvFVqA-SլW?j4`rG4,#7$/WGy~&n {? [XYtm"ۅǓC$#wv{bXҼ;pyMʤzI{gqkcf+#ϳr(j-_W_}m74ŸG"N׽QGcxS,kkip&7 <VH]Z3G'(^gMS+Xt+}啎Ȼ㲇\ rmI#Kkh*ZwܟMD)VI-#SGxf+lAEh+|!{x{͹٘;e>nr57?ZO.᧍ <~|Uji+$̈>5u4v~W=_>8о#xoǐxPңcF󼴿|c7C22lwu+/׹ЧkkHѼ/?xP%O"Vl5GT8fTt2O4D9v}'?Z^X5}(EGiHhxkYIG$2*lxf߽y^)5-Qm55}QRgs Z2 m$4ro$Bi^ewh^#[-V]WI8XKKfdrE$ѺLr~&zfi3+^ƚ1j#uH+Zhw2;?>ؕׯri/3_zFh6i){&=0HouL_.4K<_'Y9mp[Kݡ+qg$v-¯4?gmboGe;4g7l<1֡}sL "],Чʓ3B&|{1Qmwc);kxwNi?MejyO۾[-~o4Ԗ{'5Uu'{N\òam47x>B'.g?#PiL洿o:9%k%:l#GY㉣}+? l֜m-o{-Ty-[zA߇KN%ض-b}ݚq}k.[l#. ~;g@b$ܭ6~V{?K3R}W5ys뵣]{䮎gʝ.~_ڶqq!&Eѯ6߽d M{sXIJ7nmo?mE qmO6;-Y]ۗ~4Wg9xPh^1BO}d;zLmUY~in%qEgr?SS|Ոr.U p/4)joBZqt&VQ.y38Ul7qoYK,\&gE~}k;{fČghEwK~tXRAsugobѻ_3u9b!y̧?uKuYu[/?'ˑNP.W~rrջ56,8UU[vsQ*WV3u-WAӑFD{Y k'͟_+>YvW*zyfQԍoݤpn%Yv¨wߟV]W'FK[|d6ȖRFbȭh7͝s6~_-[t6#pcp jx@Vl?Y%M(3Ҡm. e]m JigQrS#1n YUpMn<#NpE,F0@N|ko{~z:muՌv𯊄 5&nwy{՛-ֶ&9tz>_^lyn2"_jcIu^w=BFdckbX+%s9[;KodvS.߮ǬâIf4n[ȯ|ڿ?jݞ7_ܔ <~ړzLRJr̙mCp¿7{/#30_} mJ?+KLk$>] ry$!#_ƟۖUm V^cg?u#X^(xM1Hq>ѣ{ V?ٯn~Ddc$o +73gEu^씿'{uGsQ/iOTwzݟӏoڿG>MëmMPj +k+=٣#I>C&CSa'*3-&d}t* yݭhQ^GB;oO_#%ϯ}QiV#}g[.7nbؼ퀻YꝪvzT"ޭn&spY$f&i m;+pMF?̜m?u̓-ZdTf~n[rEl2:;+Wk*TBWvێO뚥EM/%{iKo{qeke.u >Gfe-k4\kjsԊ[u뺭֫yi-pXYjPu%2#n [$;cO*ׯ 7we|P?7pwTcQk I&m; {^rc̍ㅶ:oG4wEqo(xpᕝYd_OIC~n_~ o 0A7p$9恶;;sswfr;4M?Lqq'iӺ2ٳO:x?CmDt@f?(&q+2[ݪW"_Teg\PmhGy[T7|͟Y%97?]w:4}w_y̓#8Oe9d rGm /nn#Ic`̒j߿ICWk wܥke2˭Y3ldIKu'6g)Rot54>=#2\kō]ͶQmՙ<Շn~w_lL*P7O]ܨI|Ӯ#k.`=2a/ݾc͵>$.뿝 rKvqmt˂>^@yH_$Kntͷ_~Iܒh$f#-|U>GMr?R޻xCӼF" d?emycE_ȩ]{3xmdH vkȧv7?n'5{ktw3?r Cqc^\/5Qw?n*OLVTզJO>-+o~~9u}E|h1uG YOum]_ }uzU<.yYdutrZi ſ9Ggg<V./ӻ}IS%YvT\+~ohG"ZRkfiYx{z\+Me~!hZVr e$Kٮ&mdě>xwbԛAǀxOJ,se3jגNY2o㷏vߒEIzkI._Of2M=]bm{{)ǘ??]}k5moqk @(2R.mۙ޳}_)$qώZ"Bc@6&c{zVo}S9{]o bܲK_OJfS_miea`ܿҺ!-s -f;SgF-~d;^rû4?oJw4<\ѣ~$Kk&0[q56M˫KJI_nۿ%jy xdK+Wծ!Vo$̧sle76:#ݭo]88{_+ [ K{h71a&k{#4u̥V{-nۧ&8Җ>y/ XGZ/1)˻lU6x9kn;&eAݚEh:im{donq&62IxRQ߷lҎ_W_aqȊ5]f8<`PGf_):?.Nj.gO$ytߠ/[ :B~d2sČfo2^yۿUᕖ Fqhf"3 eR8SWuZ7|EjZOqٗsSW}/=iZGu{pu!Z?co[qo=?]ڝ-ͻo冘}/9j}:ӒZ-K8y;{0Ehojxo"&_3P&w . *\,jWnM"nd}kԎv|gJ{kWק[:UՊ̄>X UvNpO5'6כ߿5λh}}_3(v@&/߉ҍ7m}Nt} lEsHcUV#Eui|"j f.k B;1̬B?;*"Օ+ϗnqvrCǻ*?ȥ.NiQSemDՀm]3]*+G箺ݒxw'}gZu+hX\\0ݲH`d+ǖ/߯f5}#3#747i1~T+溸Y6Ē26sw>*etu;,-I=q:Gľ6?l? Wʲ7.\ȅooWۯsJT\u}O~j|;q/_K2i_H5v'I!+湇XڼwF_O^G O2x?5ߤLvW2]\G 3C#l?'kˑ7-Ҿeա k}m5Zޡk}*5c6fú;!kl}*'5>/]Osaɫ[[ឳc>>Yp\Ƭۖ=\Mm>Ndpa5ϭlPu k#5񭜋_izk^3[[B4Mtʮ&Ͼ_ܯ^Y*?bOg>ésm:[ٮ?r.ϑ߭6W2p7n|#v,Wrndٸo[Fy]Nimg8['m"PWVe7-iEh7oFo u+фnziPo<=ŗ^mO>_y<ŲMFDH}>'5bn;ez7$ݾH=wjz^^Gg%vY(fZ?cELJq\'߸wח|yߴU__ch^&ŞviMi/Xyqo-L3hQȣr4VשG85̓/>W]j.esgv:l5&ei&c$+.舉̇t c/O{G k|MlS/Hs\xwRٞ+][߿/|lkpƹm"F퍫5Ž՝Ͷ9km5d,[ȅ*x~SB%ogw?ae_a-愭^Ko4 jg)X՛v}O+ݔG^9Цc4vZݪ9_x'Imo:Vi^%gšl .KVft;iHoŒi;'Ot}fU$~Z~~E 3[5߁$ӴeE]K}^ACxwNfXZ9O%eUiɥfMחwRk_ֶov}k7Y_KD-6>RO,-hf![l}RKT>51NOݺ>q{|Q {-k@|jOXH^uz?g~-R=͵jMWe_OfF>G_(!ַ =# X/L~fn!?Mi>%7ǩڲ/ʪ?vc:ɝiUZo_vwrru{_3Kif5YuDE.,6ֳ<>ɽ>^+J?k̥=޿|xM4{D0hyj 6 $>f$o_xrWg4%l'Uc{FUlٿz4q*z_;`40ɲ7)nv\9%K?>r9T_oM)4ۖtPFʥϻa*i_wOd'Fns5t4ŭѵwX_3vnW v~\Ozu0Rk e/;h+44'->@1| Y+UinƧD r Ny.sOmIۯrkm{ċ'H o̿®x{o_W5޿ueKuS]i0gގ+v??ZЧѷ5w~i.NTu n.7f/;>]_ɔ_ $7=yTDoE =?ֲR]}L#2_Tԍfi"[\4S ̧Q[c5֟;Ss3jqoBP+lgc!y^(Y]_SίAkve7fs42:m+/ek~?兗W5Fi( #_ݷU]}:V߭uqڈ4 BO Ul_S~ %$wA-\Ŝ?i>_oʹ~/ sr@4O3ZN33몳jE+[I`O3teԶ*Ly&wQ[M<=ۚFmbsWԽj!sF^c%(i:F!Am >ywݧ ? Oga BzО#uɹ-GCnѤyT3V}k~J;34oƳ ^{8&>[/5܌I#o|dO6f_mE=UU֙cu,2DaF0~&0ޟ,ЧΎ~_7-3Ѵ9Qҵ CLa4mJ𵵶6ovcKtM+kj?3;x)߅4Ӯ;wkƟ5ǩBC?~t֔ۋ{|Ȩ⓳߿v%\C%lԺxY$fo-*!ZP9#$;? f_\<( E0ƫwwwrTWwv5J u82[+yNg7,־jYV9F[iC]__#Bo{fx綜i$I VE]#(>fşlXĶޯo4T{;_&H(Qd{ggM-OZ_eMG_!//;gW,,Q+nvmF"|zP{Eg}}znq+fu[56w1LZH36߽o_gr+ukR~]LGSR[\-@wv߿rv|5uz:.&3@̠6w˻uԷh~v_Xx<^}Jm٭|x?n'hOmEVͲF%7HsҬw|5O]<I~x__V:~f ]OSOhϦkͭ|J4KcKiDQd?^m|۹>[O7C[]g^ּ-<1%zkx#|n-f7*gp ԗwZM rz/C6Cpĺ,{Z6#XaefY>a7_8++Z?S1e񎥮z,\W;|ɞ'z3QW}IǭZӾiz_cMK}zX䅭fy,5:F^Gso%\ZN忝F)km}?׿xSN}cY!VJdVγ?,? gLi_NǍ^حo~$5zok%.I-o,]{p۴ivV㯍0Ѽqmuks'gi[[Oa4wZQwX|g=] G﹏-O8׾&|;дQ_n~K ]˵an_&D8O']Ilu}빻Oៀ~ xRcx_>'/7PԭTk8c^4ߴ=Anf_yHG{=x',-.-ZM?K.VH~3]]yr[[v˙<Ÿ/+-& IxQ~l?M$YC%¢uLsl^hd?,Yԗ*Z|ݻ|ԨwIj~#<g:u.y\>kkcofu%c{˔&hwѠy;o_UTVzyC h7leS$[k{xm.<ˆyC4?/"GW)r+vgi6_ j^! gᶋFՖ v.$-jIgxֶ0!\^}|~zkJI]W~ywEw^_v+{m{t5֟;qÿe){Id{ߍ>΅\X&|qy$(H Jw0\ZꚄ,c[j>Wt_g4Κ߉V5CZDWGû[đ.7mZo% \bv5}{~}gs51. k$y]O Q9:;?sl?{Gkm}hZ6[-sW.eip|c$O?ӅƠ}&R4O5w?ȯ_<5oiM}5އ\n71èjѬ(SnxI#}qQV~] s~E]=m l=*RM_6|)AqX5htqXi$3C0|Iy<]G{vl| /v6{}\v^U'3C+$=R[*CK&}(oAF]}zu0iw SMះw=%,?&j2n֯/;Vzl;.fk(<);I=u4;/~4|mRG4>u٭c!xIE#͌a wTm~~iq>xGWZZ *#ڭjlHM գ7㈊/mwWn渺N53L ԯᵺ] -6q^j Z>v{o|\&RVN.[wsĜM?lF? VF1K?--;l;|~0[/׾sԚN믗ng"U>&MÚokZ}x>ηh9Ki4Ԙb#*>wV;?elo>'ѭZ3o=2^I2Gn~J"#I\%mw_]J]]?ϥZ?+šׄԏÿ}]ˌb߯u9+cVpiA.{,fL J}M? %˥/Ϳ&w> oV}+g,j2ZB%cy2zɵ -[)FXY'{KӤ2,u~hw7}smAZevu+K2ݮ&Uٛ*Myn0i輘6%7 2/ͻnsW0lƱw,G-w6\yoaIu${c~j+Ӽ95ݝŗNEbPַUdRΎ~%b{5,|)gYͣO=H h[X?ܲ3/Ͻtc)qkNZͼ=uqK-̻`@M ۸;=В[ {i͞m[O^"ޣXoѲ{O̩jM_~[+:\UVv`MF]u[VB>5MVN9;-gn*0?/2Um_\„c?Sxx $;AsU~(y*M^{$,F" S?_ #.k0I133>|8~6>eAmY؆եوh 7/MKWVNu&#kw'ɿ\K?SH턺J[u$]62Gbyܹ߽y%mWk]igcR˳v׫mUsM+ &އ Xknw6ɦߋ;fhڻ󽗗G]XTPci"&NL}f/'|\^.kshDWPͩM$ OO|ڬC|L.ˍ$zvZ?ϫ+~7$Zd "Z+"2ʾr6Wtٿ_24;g}i!$!y?w]Q~n?Qu 7:unnaKk)Efe*ZGDh\og|F׿Ae~ gBiZ Ě}܂RY&mVhO;IUJvv[OOԤ <[ F&YlK{ mGŬזI7O颕ĸ9=猼yaeeOcڤoi6^cg6E1pۺ+"t%s}ڮ]q~z96ki-գ2r*J߾~d?,V{]Roӿ Vz& k;Xb$-2Yw/ȏ~GDiu=~L=>xs*$*d22eע ky#gR;s 335|-~n!u9oKWզt.[Pm2VXZ7xݷ2D}g{e8>C=O[,ڪ#y{T|K}t5 ֦ԛ;Oٚk|v]C$?]lW_# +Kխ}B( -*JbVƜ)k:J6{ 'FY}[o5o|3֟<{|35+ogX{l2ѵi̿}E]u<Ww-*RVᙯY :dK7yu? Ӓ=few,Ҽ]k>Jf{]xkǺK;DkY;hO9e{>~z o]GD- F/Uf]g`"9B~2Vn\ ]GZ>m#V#|\fπ,u#n"$ ˠ2pʲ\"yGOM"%56I:*i7G┒6mcO%ga3Ͽ|/̙4>XΦU,ͬKxa]Gne&ϑjd,bGFR,IU8췖ȱ3*&ڵrKvnZe:7בY]_3G"2'ͻ?Iu]tqsǿmcKe5ӯkjC7j;~_hbcg_jk[N, 6Ym.u4z/]O[7znifKk Ԋʎ[ȉ$k nDOH\.ߊ2텮m vA$s-VEܭ sݭIlax]jWZm^K#t):'fI#g{>e[]֏PwshT=[?wep\*39_ |ddMЬk3[yl3o?\>Z]Oi-$&[V}gJN3Gt)弓2۷*vfSm_iq{ڭ́& $~T[[c}꼯w}Q|+aϦƾK GWIn y]OgɲE0[6q}Rҵ{ucqzmuc$Z/&i77b:^~ݎR-kU& It"1o>I$މ e6~]̭[%Ƒ=5͝ղ^?eˍE2M7|I^ٵGR:vw Ъm5zIjeyt;)]ӯs~]Y|dbFdY[6ϑoݍ( ZꚾvvC=\4:I}MdVIv}WoUgJ+k߯˼Mi㘼=[k}Dۯ̳K=J0$ttnwVWOAo_4[9%Y]o6n Ŭmq'̉4Fވvl2hSռmOixMݤh7Ѵ[ȭ4/ʻ>'{4D,IW<Zh4x$EiXYJ^mr3,1ʶw(m}6i;u{f 3-x빏qm UcXoj)$?7ӯy)M7}^{:ŽJFdM2ɵYw)k;_).cSBnbĒ7 ;eVFmf=ʖnj4r) P6YqeovQu:|B'rW(FW9en͎wj (c`ʿ ?¥?~/jP\q [(zHŖM۾?=CxWGn 8.-y $e|?!j&H.߲MZPvoᅴۮڿS%ڔRϡA 7>tZM WL<3Tksi{ӹ?VfɨB񰜕n63u~~G5onbӵSRH1'U;3Æ̤.j}܋my#:%%uL+ћ{.X;Zy='ʈn39_znbнB=jc7g[|X+JSf .e}ԋzj_/&}66,n /R=ޝmNcKjziAS QTY;Gm5}wlflI,̾\ gson+8?wK GTRbHͻgbyv+/__^֗>O.k[}bTSZCދX_ۏZs.S8_gսJoI'M?WV,Yy`;NuE'lߩ/+~ˤZ$&FpG^{'<>gVZNepm|_VӮֳx=m SzC6Ox%]_,T?yY< /oNk:d*V>cmz֑F? T"QYJ /lmyY֩Q]iֿ;\mButHhß õewf]1',rۛJNM)%ZރR0/P߼M|+~o?+߯c>aBWc_꾯"%9]?qP|@փe/!yv{;.w1»t.ᄧM>_T{//aO/-A'`݂0Y~Ve1ƑT[f~T\N Vj3]sߚy7߯.~fcsF6sf4F]8:Bn6z,c]^mr;/i*1Ug[}'NR@HU~fk3Y32֡MNt%6_y>įiq≮-&a8<.m k_Ɲ(]ytFskobC^=т(dq쯻精vޗ~/#owNuF+O.㦕DpOdeʳ;_Q^GA(D|}W]_}Ǝ1}?O5$W+4^_esΒnƺK9S Jv>oWwV7p7{;.5LR#rݓFߪyi_]EkY\Eܟ7׏buzT#{]Ov-&?+2?f-kue/nڝlr<#b!Ϧ6s3O=o(5`ZKu%G]4ԟ{Km=e<&/>o4fvĿklZ wUm3n8Fe7G*}珈QݻקO'){cF]rgº^M:QsLRGyY elݹnΟwq =˦Z4~U"yjww.+éN n]Rݿ?^[i۾1n𷌢w(|,MKFa.i7VMf=2}d2SJ=ߢ_p}|O>o~&[.4=jr-VrIw\˷f9;؟6dUQW.dxk4̣sV?oN̻ Gׇ[dfDFHݤ0n;F3COw=8=WOx(.<;%lbc$^[G,؍/ VKy_so㼺4rLGan푣ڻ3H'ţI`go>#[E6o2@̌Ѿݟ.nH_%}R+A{q?idy%*7Il=1.G42 tZ3۷..1M^=G2 IAvM y[?\^oz|4p3z&Lrren<~&#}~8ݲǯEqn6Wę+~d  !u&[5Bgޱ*2?m.~n~Juc;%q__~8V}HUdVhتHdl[,:>sI/.Уmzׯ:k/ɟsƪ"Ȍ::!ZH}kW.L]ji7`*n$V_1n7nz[e{W8һ~w:K\-5.\:7uO4ߡ |(o$<1vݪͷsf~2nj1:I^)~'o;mFZJMɭ~;cʿu0-4=B?Vi-㴆Akl슿~JN7zǙs;Fw1$z5~GKۘ{;?__?U|4cvEug{O׋Y1><^>_ON+*r{?E?bw}<eҮfMaX⻶[rV"D:8Z行7'yZ5ْ ZT"1?4|{O_JC^{\ޝ9w~#6x+ORҢ-1hf/=24]ԉ&NO؏qq\~4'}e֫i BH7r2*~efUKvϽϛE'}999z|ܹmOdBؤOm(wLmvc[ .m~%/CY]x7Hu5f-关nV[{$#nD]r(ƛx]|3=bG _ T'㑾Q$+B?>ϸRq B;FwV-hOәaUX2>eRsb(*QJ#-_AHd5e7Cx?&Sٿ5JZA}v-M}hs? (h>2v (T|NI~bOGvԯJ,UbIiXWs5ȉƽdgϮs]twk7#ZmvC+2m_ZSj//-39n۽R{V/!)m#ڪ2|'g<䭾zS,f`j滰ힵO 9%U r>#yϗ8Ks߽u*1^L_e8&rA|oiߋ2GwөY[M&hPw}u)ל\e_;~qkt7WҮ5-=`RrFo?Wnwߏ$jo-xZmxt(nm.מtu&xmo#;teKKy?鞕|G4-ge}Xf{5%̏vIqaftt?:/[z~g/yz/riz54cZݣ(w6+9U ԩy]??"e m[Z:ۥjGtĊv0[n&o_?SV(F5O29ȳ+)ٱ6$1;ykswn5eiDž<1}}kjܝ?STZm9yn5t7X/䩑m2|*}}L}1V-{cue:lM=N/|U?+G/_\UkWoT]%5ֻ=G#OLP`pY~m#.oyթ=zq%|KK&S~a#EQ=2ï xFz6ohcq,{~ Q~{JI-_wSäMLңTH>eM"FNDoo'kάyP($:IUn~ݼLI__Sόdיl/58'$_w]˯_t[5K m/wW\$vMܯcC癬=]}ƣU6ͭ3~,{s[[Xi]jzkaoiI$w^LF6 :-Gךgk54v-4ۛ{ Ko ZeUEdDV;H89IVF~r|H+ÿ?hx}Bk#6y%ޏԓ$:VYRHau#t.zRqU~rOܽt}]_~1>}^<.r^=&C:x[_7^odIr8bR+PmR; ~Z.x]2V[[?:kXW+7 18TyKu[~i[g;ƚ< 6gRgq{OZfmyȗxRvw,'ËmWP16u+VTYmB"'WoȨ>v8Q43_ZGzΣ\CoԌ/4x s4?o7g+(׮˾9ǂ->m;WEvv6-{a[&kZO{ɒGyO[qm]i}^w3ou7>OΡՒNε7ɓH|)?k~~O׫=(e]^4w}?O_zυt~JG5 }I;?連Bxs6ikHG"4dDЕFW*_Ey|}ZO|5/iW>O#gdo?8i>ޖ"Govp֐'o[+Qk5N?|K5MBLҼ75|kCOojvskg V2_זIC$2yҩ:Su祗'*uO?g^cCi|& ;QFhmǸ|!Dfc^z7،N>S;Ik& xfsViAgu5<[o\jV_M C \&{{2G&J­(zNXR[o~e N}igiZo,/-o.Ay,Kˋ[ ?#lsw?Sb#̝_3k/|c{[Au|jn_Xۙαgb"[M 6GH4s_^_)ٿe~՟W/?^'gm[KCP:&-]Qݬ5 Oiz#>0KwyTW~{I |3wPl"\]j T^Z!Rl4fEC^wvϽ~5n|DCU$4DocM-t[[}ziQ\lȍjo}?v/|O{ 0kRj>6thM%zm-dh>μkmmfox~#xCVyzz}뤭K\I67}>S];%񖉣Sú)WrLmig4id̍Mmy{6oz[䨤ߟ]W&EoM~7 -NOޤGƬYن窩vMpT\^_f^<}FoxNI-yI#YXڒo~Myܝ~_mwwzl`SֶBZgE[VeY<nֲnׯ]١4֗i$k*O?+#+|W-_O~쿯Ɍյ=3m7{s7m7˵֒lsoxP-+q`kF2C#-בyNɌo_?^>W_&O}W-=nC͵afF&ϓr}'N^{5T+T؇:*Zmkڅ1in/xamzV.~?抒j.>樶O\Y'=*M#3og:+O~J3|aK&֑y.~mey![guf i0s ~__VUDuc1(7ՠOյo0E\$KFpkk|(jMmz^ΗNA33?ٙ ~*pogӻq⏊vyv3jKDc?>帑tw}>|+^w*Swz Z}>v^r -6ݾsyWsj^tۖw~ "j:C~'o+b[xY<ۯIە[ܬil,{gfܷ;zۂr~2>&tvo\Msiowov%ĈɶO;d'ZI޿ M:Ko2i>OS.<˨]6 o}ZqKmN3XlWo MnZVY.agmcKunQ>tiu %:w/sz7/żV#HVlyX3|Zr;!lյ4aJ~is}IoxGZ [ovGk|BY Jە [Hܓ;|gVtovi k\jWKyO _Hʲybc?֟=# ^vFxcU'[-Ō 7˶HwQfj: Һo/ރO;2v̪7 V+%(Ye"4 "ncu_mg70ɳtJ NpvV'V[oךm73u8g s!]s'w}]=H^}z{gsoFK%RYK9![-h{?2wiJo]{{{;kXuೌ}fWY mLjǽMךQit'uj^[h(YfVis6㟌Eezal,k w՜EϿsI?]tO}ϙ=S-t+{yeHYmmMmm_>UZv_?:;%+y>>#? ~xsÚ? xŰ麧,m]GCҦ=7P]v“\$YlXU:su}Iaq PZLe[ګi=S|QmޝWd=JO}6)YFetݾo2I>-ܤo^]{C~o 'iCK;SQn,>^[5fhR}ú?i7Q{^w;7ks5:m.WR%Q-߻_4/GzCjױ_3ᅥ+vzNj!xLa.fN5Osiv;qqww0jNJrkyy`|xk◎7<;\j^j>KIb[M%˲:?Ch6x.L5Z>Ѭ#R~$>Z%Dn'$t%t4ɨX.rIuo2#0ʽ芻W+9-^K|T|Iex.q6ºxfNdUh{߼ߔٜuu;=CmZo;_Zx5_q./-LW̷?dϝ~~erS/ x?zEΛ/ZjֺZV$v+﹅HL):Xe){kׯL}ts?7?Sr_/hEw/t_fg{f7 E_gJoO֍4ku=γ/>y`.,xg,vk0~k${$^wrqy s]ZZXL#]SQM}6SA{yI?m7u^lPMDZ^!mu:ಁ-4;rk$$mkks"oۮ?þ;poOqvZ}~O |^~/xG_fwk?/jvhż7VcnchV!fHGnUc (+B7N}~mbqJN?޷{ӽݖ?=Ok~S/x[bt^-?M5#g7&$3jjoK2a0oo`:0"7kmsf7Nj[-F?LOw졦x3NÿM[(KϷ:~=&&׿UkiΦK930eJZt{5]v9Cʳw{9y׺|+zlxJ$YXdI[Q m o&3/mQSm}Sw7,׻߱7='F~$~;kiKc!;̛Oo\L"oN*J|Oqu}^,4dT4頟Rx;jCs&ԙn~r}deM%~D)+kK_P? YkvojmgOӬ&m]~o FDWk~+{tEZi:S:Fu _B$丒h;fwi%2w^3㳾~/Z^!5AEpˍ$VF[]$ɹV1j֔^ӧݿp%NP]zl6>X͹wΫٱ?-#w/8Џ6|VtiKsź?}~ݭtKY>l"sՙv:|yW*5oE/SH4ٙ&|ύ~1j,Q_M V6c>Mͳ۬g)A'穅V?u'mG7 {DFDaSXB~sOxZW[trMUϹ'Ҽfuo}BKjiP[Iֶ#BlrMqC$", A^ӻ'ߺ|K_K|!РfN{QmV[_z:m?2mR1<كۛ]O??-OM?h]Wz|@ƽ?aMJkˋm?4Aɺm:?|"WwcLN_)u|5} ΟZ|#' ]>k]JkVC$an.& :?%|yzkZm_^g/. wZV2a'yƋ_5ymiK?giΙ[L6 (??ſ?_WUd9W.~!x޷| , r&yơygyf{ MmztFUwe8x{Id-.^D74˂[4VKt{LIG_.Nkҋ>]5߭ٻ'|/qâxSK7:mUIP[K}\t8.uz_Ҥm~:{/>5SGm}kqx.K&_ aM,~Wz\u__ϣ7iM5ΚZG훤+f-N_gf:Kw=7WԢW[8}M5qnz#73oa)}<Ʒ?JIլs=vlZ餸c 2<川FFoG <5o΁k74aIաз捦f-?y7׵NUKnyu0m?.})꺌}i4]b>(յ7SG[ocg}Iɍ"$boʝw'S7ӻ~|MZRon{O/zlZ@),ÒĖҌNLOSdP}B9X FXڙrz1'.tCm 4-/R۴F#m7'g]njG- ..-Y-|ͳH.7i_?͐g{_שY\j}z R5{ǎ?-dEXU~SRrc'/p0jح"E,`6^yХe vI7Wik6i^ɥ^\ hZQ}HYU?9Hz*{}f oϭϘ~>sx"}1[K ݣ]GkGu"#LZ8|2n߱1mw|Eӗ5MO9 n 6&A41uiz^8䶸λ!O|R߃Vjug?D76 Mݴ50[4.$Fn$iyD[vDO-G+ܹAI?|~D紎IYl`үVI22#YˑWy ϋ_|0džgGKMD::ٶ= 7,ngt*p/gw<[Ië]Wƾ9}SP j]ְͪ5ȲMmG;,MrԯR~34K_z}ڏ^#,D![{KI.d[;#4{&D߲h.IZ/vmm:p\vWo2m'xF.:GKB B;YZ7+y&G2s JYwo JasWY0w:7Ƌ{nUtDҬg姗 3B ?$Go$is~kgq|0`fq M:v ] Ȓ2ȉ x&7GovNo /Mi[i:-r&5lDqjM7_RelxY$-f߫_>4B|2QnNKrGo pc0/<(~<-* O78 nUS\n`oCf\\\Yi[JguchkѾGOz+I:iEy^;kI;|G|Qqi}vGujp:\%;3C$Ο9$#qX6ۿRt? xᏈm4[ւ%c7Q-mf-s&qϒ4qt6}f5+-Ge&>Ա[on2&͏2;P<+mNT_<#؍7N-[u!8'o|GKmsGB֞%鮡Eky&Ϟm7w*;_Zo^hZx2G=Fify H&_qzjhyX[úuq]co0niH]&ޱlk~o&x_x_Ǧ>œ[tVVž$Yi7yiwwHάc/?}b5NJ;6]D]VFhޤWB9,ukkŸ;vlZ98+Y.ͽ?ϩ.u?i06,<3XjflϨi6̟n]g<׹)>?t_ǥxH4^8-Zxt_Mi!fHadVDs ն%SRտoAen&ԗNRLp6}yWbn/so;IY#w|v;Uwkosz"H[,;o$[Y )ga7^f k[ͷw><5}t uK9Y.k"vmq>8SDJRjǁ4 r_gmqWF5Dk2nˎMf25u[}nl'yb4]YwG"3FX_|<# }wOK#ZH 6ӽW?JYf#<1e*UOw|sNO؈ʣ-_^֎E_ Rk ޖ]ez;y}wGE9=ߚzx-_j ]ᑮ!X\2C/Q(?sZ߿c;}bRhX̍%4ǽwyjq*E.0>h:>"8bա$cVHdF_ˏGtw6.3,[Uw}m\푦1Dj>D?A%8tfZg, n`ϒ&i?؟dz=Vr[[^]yYč6vM~bsNۺue)[-Λ Ťf;Cotwymf_5T?KFerzw_m+n#-b1[ ` *2-oj7z%m ֻGxu?$@/e]AToݶOuߙ(o\UykM>Gh\4FYwUFWzH91[|&d˧6~A#^Y.̕|h?43.62֍Qu-l.Iowh[X䑎%G}8[o#ʳ*>Ss_ Nu4#vfUd9JW8STTC$[Jıbw ƁJ]kPJ?s{Pw_"WXH7}m#Bvh) ė#yv˾F\?~oM~IV}b729llQۛ)ԒZ|ȜcG@GcvpAۛ^ά2k.cen" oq5r}]{(vє;H`J Ov_\"얺/?a2%-Ф?.?\9.S6UdN?~ywou)5Gs0c#S3?w[-g8;{0H#ln$Uv}eMקIŷzAXY|6/z.7g>ϸ[dYf'|Tܯ=$oRH l;sJiJȥ\;d noXO/LY]/VH6?/&-J[=} Ѵ&V7L Ń/-娓R뷓4Nq[ש"y4πdry?ֲm%wn恰eN*=r{h;hS2ARHa_)_˂Ii=d01 )Q1݆9oJn, 9#͸(&<ᄒȕd#)O ?~okcb/U7A&|[k4wm՜(WfR}4u[jyQ ^BoyN%T*FO?|+}1__b Ky|ǵ?ƴ•}AZַr{I҆;1z6oj!VKOe.6 M|w?S{oC9[[W"m7,YAuk2%uKJ8b2,1GܻWr^?s5{Zci4+qYȿ7ʲdw )zwߡ* ([fvPhX{$+}J~oc۞k<^mKIVsy/mՋ|͹I8_;\$ײk~ Q\þld ۜm|i?H̳k_bi"\D\HZ굿%ւ~7#NpZnH97BUwW~Оs H,i;[qVdrZGo;wyq[G5EmGwsԼ迯Ke6f}[6RsgxSQǣo j]/X o;\*ݻO"ooV(FC3?۱{ȫ1`vV{[sֵYl_& Os?u;7q<$O?Rk___ο_\JIlOTi/"jW!hF⃗^iNKo ]BA4"5r>F :%+y狴 ź/*0E&>o/߽Y*mGNukoG&ˇ춒 Kɷw%pTTzv{߹~)G%GM-N3~2URuoׯ/~紿&/As~׼C+ :a v{yU|b|Ɖg9z;v܈QǺkh0;JѭW˃KaIfzukUNU<q^~vv7ļ}{FH#BNE~Y()'>y^wM; Xׄw#δa1yooziYo'vZ_T~|.]}㻭 ]g:Ih10Am=<|4M&"99n_MFv-eWѵ_$s j75k []yr,KyO3c'6E;}gjŶ%ޏYAwtM O?OJZhmtanmիfˆ8M }$V0M/{C.{ߋ +i𿂵]J՘u[Uj;vB~Ͼ7/zO G$J}̢յ"y4hf[xB wD=T~W~ys7>ZlSy\q؛s;G.w64}~7-eba-_1I'+|6#")&ȳu5=Wop6z]&f5-ɼ;3pou[?;g]N{F>bާff6߸HrQV6gg}/.lngMՂ8Vw>reF+:H_~_v4P?3N{O [ (MS׷7RĿv̯,D Or}R嵥;9Ox/A5JYdi7IT&-| dWڞF}rF+y,2H<ƪn|;Zw]o~Ï-.tY5m^Wv)y/{ga54Zzg6e=0:TmeoMu_vhUiɕKi|U]:y-D.Uz+W;^x_TFa=@KUV.;VW^s5^6M?̞&E/waBq}b ao9>'gnSoWfה4k6Yl[1hZE3_=ŕ޳^m-^.5:|`rG+yoʒ./y|ڿyƭݝ<c7 w&uCC;!G6Nۓ{؎iIߕ:ORVl(i %wG#>Op'h_߉,#xŒKW4?θVns6c>'Ȝ|o.wk;oỸΟ)%gdaI!f$o5x:}GZS*7RONl;/Xx3XJlRCh)'}r֣ed;/j/EO;hckVr(ݹZ8lՌG>Y,I7};%tK7xdɧmx+4coks~Z=g9_1>%zRm=vo0I}oxG-$&myk4Z2}ﲬoFmߖ'6ӣ|~osZzOOoπKGOw~\V:~@"u^&ը^[Τ2o:QX *͹EZ{?? *n^o"~%$$Ms(HZ._zӶR>[NLR!!n|SٕYJogw]1=c ֟Zxuu'xͳR^+e[摿 qJQJ_tvLb_^X%{xğŵɻʝ^wxޞcH&ۻWϏ֖)^6}ǓY:ZiZw6կ5ڏ'D~50﷧t˗>_8jqk^piiɤq8m>VD不$؏g߿cxjݷm鷣lA|qkZO[:#(KxytJ__պuΥUo>@ǎ~!ZMFXvuC4OVx^dZf szwo_UVsqvt=ÏTsfւݣrB4Fc"ܷM2m,mzVmo=~󵎪4f|ÞxR$qaw%"rrG5WmISzN>taeӭ<ॾ%MpUgYYyv<ٙ"xR)e('s?_o~v*^ˑy ӴXqZK~eڬ̯k-Q8&klrTmѨ^vN͘%[{f5*3ɷ vȥΥwkԤÛj^MyIt7V"_'OW,)=Zz=~Ru/^$mgwpEw\0I&6ktl%Mh#,e˪]m Z|țz^rº$%y<*$o ,kq#@Gg9Twz;^o:'>D:i*M%#)cm}%pOӞ=3O_+mmki^_)kxmۂ}'0ϫUIsW֣a-X(jF\Ƃ'wڄOѮ2*ZTI6mI(U`>s⭣GL7l4Uҧ^wrrJOuwyG|9l]<]2Z-LUdv3O*b!ӫtƄ_;--Y4Gm/gyRVߚ~_>l(OwOm6}thYO[]"[4u]L/mٽcW[zoJ;?S|jZά5нፔc=\I`űY}LzIZ7[m^i vMf-Yj&;[ks/d?vlؕ;CXk[e;O&񽎋~<YjP]68akG_jj_L(=?ïzÍgK[]C[_+H I<NjȯfWo.gU/>2VO۵)d/UI述'2bQEphk5ştRʋy wtu' r's{.yxj8Om=QS[xh{uSx'Ŷ·SiChmf&9?t2Ԅ~t5u>">+jQK ׉ɯU4}Z`"?$Q6cK1{s|Ko]/~<-X6-D6>:x|1[mgIcxQkx;}MvgG߼'cv.kVZva(xjk﮻g~ާ Pލuw=z-ֱgi[-}&o2I.6lwNqۋiwk۩8֥Ĭyϕ?n㯅w/kHnSb"3lٽһb%kߚܭoo|ܰM9=g=-h(*|I×zu¸4&$oEO3G$rC$(},;|se?য়~i5υw­ZmWJ]y$ /4hvg =OG>Lм\Ὗ,:e{u<K;6??mfۼKq=nZHl{Yd&[轔y9ӷ-ӷvvg׾ϯ|A[x/:-ю RXV-ԑŧğimv$HG>4g}=<]$>U# cW_!V~6Ⱥ/*?O]]JK7Gr;t[=u#xC}E:ǎi]cTֳI273^K-7g =VRmh&Կf _~О7tܷÿ jiM'G1yЬ)76v#oq^_z=+Z|Uoxz$ ֫oq vڗڤ\,s$&nZYg<>W.} ǖ>$UнtNg_CwX:M&o/t攴:zwr|9_ѭ‹}KK/\52Wdqz}{]7oY۵wqsR(fhg%=j{Lnhj[?yҟ*.I8?x6Ė,]w&So'U_>C}ti:\^j9dgC*kIϝo6~uqt31~Wjk ڵDws:6^ح\H, d["{yc˧7A&tЫ_\ZL "W`?:m7o_+=fk Ėwy6`FVo5H7sT:2e|>)GVt;2*0W:}}/}nJW}憟 cO$cMߛQ&[hdO,'.gTmދ^o.8~;/,m7đ7i7 UF!F gaxHό'2w4qXuj#G1}C/ ?vZ-bKhX)27Ÿ;s1j{>! &JzǿWgmS3|d({qފN_w͒3}LK_QJZIfG3oɭ~Σ%fM6,%wmVeU?OJno <{?ŝvlC7/D0e_JΤ Ը7koh]WQ1ѳE+ɿfJwq>%IJ|Zu[4v͇JgGRV/v;j_v wg]:^ﺓ9fgkY';ΜK~:6 H{U*uompI+Qn,3|ەYΫRowO_M%ޫ4V͍H/n_X,EX޿/rW/d`X0.DLne;+hO"eA]^Em?hmM @Wvݿýjz~3;%F+yehX׆hr#[goTN-oMx|%c{'٦HYIӻ;ۚWץA%>-6[cIU-7:{T VR_/nFmF#x$ |sQ*Lo{Թ6q:\[[I<ڑwI#|.gk7|;mǣ^jZPp죓o6F~U]k>ӕCï=RHtv̑¯vW7~JÞ]9#6ym\.>Gګ?6yJKvsz Ryisdy ;oUoROWsΏmOQk-'P6Jdh}oe~ʷ]-ُZ1G2vy_ZVTWЖMLnn̖`}j]O}P]]vMu aԮaJ3SMJTP.Uu44ڵ*\{hm/=SֲI?g]x&(fW`3ۀݹZ /$`-}j$2mU3]k}zۿ.rk i/I=8T*Z7?'}k,Uo}63/|>EF4̒yڭ5}䛕͐:|7ͱA$][V+9kXIJu/|1ihwzĨ$H$1uܟ\ͽ_Re lӆULc}۪T=^/3t߻r?o-n`/- Nd!YcyoD8zX̞Lңtr-\7w?Gݽr-wPos8*r|?:{^a{M6~:dzuwrHи;o{Kܳn4zS+4>_?[z|m|6Ua봰<v $[ j <ň)dmfw|w~4^0kiыmX oX$Fxz*3m|^oXƧ> 5 E'JyWl߹Hռ6|}> EGN%ۻ~/o2m ;ﻱ׃>9xLx᾵oC1,1H5Uk}ţܛ|acڎz3KZڻ붧hbi¥ޗJ[߿un&?:{/gۋu I ߽x&j+[(?ctxQ5 CCѼA ^ijQȩby+46L&<#G~ fO[rIOkg&/M3ndU<[6~|g53wqix~ YCz-~!5a`~DU8˕hy<  R h=j;} ĭkagmk$Άmo]U__/75[O[Ocj7}E{L}m,rm7Qx?ȎcD;f\I8ꗥ>??ciw?CUty5-VVfY.wLqI{ y%dO*Z|#hby^?>^> ^ 7?^X7/4{MHk=7VsI}m W}k˷18{}wM*IK;?R*ՌxxGvϦkiijnjem=M[M5_ˑVqur²_Y?u,_Mh./4ek}68ZO7ȶ\w ϿEϳ=)wt]/,u[Kto5,4𒪮2,|Z|Q:.75t|E|N<3w|CQz]*_O7V4Dn&dg olg>w3jt^6 s-Zqc$VW VIo-:>5c(ɾo|cx]fxSn{y_"Gi-v_?J}Ͼz=6%w}I|mg KT6ڭ<В~FhnaDiG_]mdwz͟o6cxSA3t]#DVtƐ9?Ԧm+yᅴ¢*zkybFEFm?ᕿ3',P-c[h2)DI<Əiʬۮ3뮺߯co7~$X/usuw*_kv0vo vwRK4K_ž\/~iVMe$_oς go o;/j:M]\yyGgkkMvM̂R]ٿҵM__~[~6Ηz5oowOy8h?> :g?>xdq#POO»?5/ἆ;2KoIdqIYۍ{CӡE,G.˚ׯ}}?5-Sľ[r?f 5FoƩm Q߼^gR{G3׳+ +ѳh1(J*^Vv뽽_Wj^Ӣentsy.yox(]˿/ϸ~|/!+o_u_6׈SNip]:_fKk{̎Dw9V鿙iY/O m>3ޱ+oŦ#h_Ci54rI$0C]:Q٤:IEURO^ݏR7W34x_77Z|n?,c2iOMld4wI>MOw[.7bgiW:̐u47W$>ٿ9;jcHԷ[?H>!_\h^ e`Vْ5gOmyވ[YЅU.]5jg:fn0t(í6_EKup3|FW̗d/ yimZo$Y͸k[iaUFoⴜFΩJO[oM6vӭ%|7:-֕lVR!h5x|˿kC*#JIi׿t2dVquIy-Ŗ+%YH0}P:ڙ~=׏Re׻fU5/~#֕t[{5Hl~ ҬmKwr&ϟiK[GelJwOWӪ}@ ]L5+ մ[Ei͖m䷗wWWoupPu({Y>{> x_}f>"񍶵h#ֽ>ViZyI߱O>*-'/{5m[LmO5Yd;xݚ_!!CEkP~]u99-N[qM]q_>m^I&yp:g5u?1ؼ%H'[[^#Oi Ko/7^]C4?&Sg)>ZO^ z8|>~IkǸloh.m%5Ɇ5']=1wmq^֫T]N7'~{S6:uK{Ui/-Sv|i->vA.͕T嬩u.qTg?[eCƾRJM VM4)ɻam7/iՌ\^zweҫIN[[ٛonij NMs~Кo|MF֚eOotfXmc3LL[!w&6rbEo[>B4*C{KM~'<7jVu"C$3jjR"4PϿ<-~"ymkE5iIO/z Xܶuk0ǮiLDֲIg5 2BuhS<Ñٻ_O-oL&2_tRo߯W54w}/Y跫ktºAvIk"3G"y˘fI[)~{SA-#Dsh-ٲ] iV? ik.{mJ7"ji]ưHGs$s:FyX|կo/UosOx_z׆# RZY’lr7~[ԵMJJ婏-wמM?< o ͪMsDH?$U]o-}2y2oHGV+}?d]NO5 Zޏ I6ޭ3\Ziv;n;z'V?2Iv̫Y5;.IW<_ំS- ^>,k3mq-4n& '\NnO:'I]keyzlh}`i%%tA ښ}6[ڰ m57)-Uܿ4R}mv}-Io^ x_ A4K..-mߎ$&tD:BUA8E[~.k®35˭;,Bj׆k{{U㑯,mm]bk.4g&V^}dKuׄu--]:{YOIo5Ku v&Ǔ{+oڿ猜Oz/5Ncskw QPvLbFlry~_ߕ'}eo;&D7_[]l齲Vls< #lUv;gLM'<}tחi KE?#׌~=ukj,q<dc;qUG ym#+J*wj6߉?zwÑ1qZxNn|=uk$巓>,feyxfKlwP9ߏBNNˮ?6~9Ÿ~?C^ι,u Mg#/־ ] *|3\qȉ$(UaWz!zEvZgt7U<__^x[5ƍK4̺jqao/#6L32Hv9UgRVjۭ UΕʯ||G+;n Ք1pLGqq"I$~ԌikBI7m+֕f i~#[[8akxd]$sHw=ُn<ϾBNJNz[7]mc9_Ju?gܾOnHͲxQyi"U:~O뿯NƤ>~ghz|]5$2Ҫ~Ky;<Οͱci JR{o_v8]hPӢ/MlZ& m~QC|;(MEmGƐPN[D.6-nayew4K-~4]Ok~x7]nB|sIE+ZM\An- |ړ#\IDwSM?_Sz[hZ[khԬg"LMLwnb[ xmT&`zѴqjZKtM2[<3lF .4 &tO2Dwx? '{~D'o.ۮw+2Z|Ծ3E'uO(kZZdF}ҧ"Hؕ_8+{ϏmN[xo48<6Ϋ_)mdj}QB]>ų&yOl-|My {[\[2p{C3y_~iN&zNoe -ZZSo-K&ǖ?2hc95D?w>Mo}?_d}JZutRݼ92 eDh/37~#؏]D_'_iIx4f"f ̐ȉ l'y o2Ԟ.G};O_$ٶUеVf/$}Lr|9;NM|_:Շ-"mOLM-B&P7YO/?3~l>̶0\kܗ77mYϖ[ƍHs>ULSەf/k1WU%?kbl*9X;G"oz[ç%}~gúGxv-+= {>kRb}M; O1e~oƿG:F:SZ֖[;mv}5d~dG$7;urGW&_vӔj.W[kx6ڿ2`T궗IvzX{deܟcz5M]+쿹hz~(TןExn̑,{mx;.k;X[{C :~ۦJ5ܞ?J/wMy_ |#㏌ōh.{^ "oOkwY.7uٮv:*D;yŠj͟ox{.fMM 4{[s:۴>Z- inY{?To j܂[ d!`~5e_/mS~JgcwFm]It{_q=f 'oftEtˮdqo Ely2ۻV=AjBE*|ѫ:2!vRAoz̈rV %p^vq>-_ ݟO${~/ÚVnKqFGdO?{ӲiμM@0XVhFʱ6:Oi;˯cBl̐"ܬnͭ?] .-UK}xrdo%7k[}nU&{;eڭR6iˆ[/m;Ҝ[[;vc ֪/emouzF w-v ?-g{+k8-5 J"KM̋$?wtGUO 9%0,q4LT̑Fe>G}3 $i*yWsקȻJ_J-s2ެYI0޻X#{]٧<{eqSi则-%$V}_eW,{߸nRX +.2B`qSȯ,I&,gHg+Gcbm-Z<41d*,ȭ# +.w2{]@˙)>aZ6P3ܖdo[ ቍ1i]ٴy_Fmrڬs{}~ڴp]s)4ލ_\:vP@_aݕ058a jqv:n!Ɏemy }v +hk[$y%@Ѡ N?YI|G#mYWTRwO&|DPUpo;߭hl￘?p [*7'ڼ?Ȗ $]IfwSfeVls}~_.ߊ2.WocK[vquoϴ] T9a6֩Rr~Ww~*0bA,P*M&2U[ m eJ_0&7dn.hԬ&>w++&wbZ撩O;#K.6|5%dyvn~AV~W_KD\k]n;?idpܿWך_<wĥ-PJ4NǮUw;ZZhB:o\ AF۟wt>sRnRRk+Hg#@'wʭ|'|gsͣ٨keo'~B[p)Oʭm]?Umwd,to-VS]Cho_*StOꖞdԦ;o5WMP@,hIv_ j^'}~?|=1c/[sj/a>Wd!FgԭF<:h,G[iT㏧''zn?r=iqլђ &iQq#=]w߾.u ߪuqOZJw_J5_vu"2˞Y^Ng[Ƿ̈ԓzN܆Iewg3Mܗ;{i`rm)_u'Uɗ[` I$8mrML]?ڝgߧt8- )^A;]_ʹ焃_O멼1]$ژ!S6_lx:OZ_3U+Zd5[{*1cw6US5 Cn}rdf!۫H mߝsW/v ^td]7:w37srXem6jڶed$a &s޹dwNWu;ir5֣QIqf06XVGwٽGYJ\cm_Ow}~|'MCP>dvn/?Z/qק3%ӧVzh-%iF$e6Umؘߊ'9Mv6/G[з{OIW m{&#o?^3ZS{/ҽThSzw~kԫO^Jt@IҟU*qջ3>0rґFan63go:q[~n5_(n9[>ޗ' ^}QEɽ['xOm犼I_X]i#SXkyr#ƴբ{صvrg~6]J%{te獼x0 Gq3[S>d{b#>zx!b再oh>wƯ[=Vů\o7%w"I&[hWlk'|"oGtqp$?swZ1ߡ)ik JNyni|ZI+M?wͫv|9"0w߻2>mJ$Kt'I.iVFO;uel?OSmu&a$S͍ʠͼ-syBۊ< Я'ӻ3?;R{:4vzW2nVҼ*Gu}NrK| {۽Z9nn..^ɠFp~g6gVJiun>⯆5Dq6v2֑{zFoo+|ONR,_0Ϊ3w1=_e*ljArhխ y5I[?e, k}9WWvyj{u8t6 JRG 3&ݹo6?/(ԍIiׯcjqNE_yP[DrYe$Hbzs8^O5MT_|j<=hx_Vk+3[k#Z-7y-9J'y6O4dzQψ9!Kod}~Ov$I2={J->+jMß G6[{=6kIk72ҕ*s$ՕɛW}G %!FSN+yHvo{ui2+ T4f>疮.,lMixc\2gڿ#+v}Pm}wɮ|GJ ..v=4 r 8cn [ʕ+t΁G^ <$ |0s}g>V_sG<%(HӚdfX1_#m?Ro5&C V#W(q?7}?h-n Q/z2#\e±(twJ;K}Y5?WR|xCL6%Alڄ{4edXO.5ݵ;"rVok%Њ[NK8,iPۉ w};2yA\W3wM~mm;_9:5Ya+K!r!rE_/Og^Z-׭K [W8(d<.a_?<ֳݬS_&tZ僤O!|XVW_̤}FK6ڄK,ەSjjyl=tֳhJ&kKJCK!O%72s5c&'߮ī'/ө{܉"3*W m˻nf]~DP-l?e~zҸm>PBZ%hͽYrMG]_!'߶zexltmJi.onil$xcVDpƻ#"kW~oߏ_qr^><~!i:xi^XY[Ooi ȭ"-5[b芎ǯK Bh9r7rʝNNM=u}3о9x*ሬ\Fȭ孻C䬊3I>o_B1uܯ*jܼ/{D};S]PM&cy %׆m'PIcr2mZ#}օ**9YGyۿ3udKto'߯ȢXD'2T+̟%Ժ뭿w(e6ZVO\Os-!oodVX91QR3F%kCoMlF&I+6#co\5۲06~8fg/M8+%&\ZRO!3mJxd^;GR . c%wn۵;>%-uo2]ΟF1ɪ{&!)a1`/5EM[2SWeT!Uɏ /ƂIRW~/4! W"!B[ȊEX-~|Rj[_۹З4U^KCi_IoEx.)|+n~_tVwj1[$A2k+`PVݹxioJ7+GOo=~^$HlRF]}>>5kFԾ1k)-vSOxZS$EŻ &cؐ ͉#d/ɵ7}w΅8hDS dxDoDw <jxQVJOk{hdX7`o4wcyV̕.7RS?xYxZռ[;-}6+Ze;zý|khXבKR)Firvm<&`ݫ_13?to+ִk_ $mSM.I5(dXKoy >oNnYJ;Y}65եetީy?|oZ>|<xEF-G+iɬd}mCTy?qt^n*ʬ^[LU[=^߽:A~ȗZu+'ÍS~&|m[,֕t5Mb E|Kdk?1#9hԋGO>5R~=?-~&|#ص]Cuk/]5 {<^_ڔ)]F| 6s],bCoUSKk-ou=&z۵|ÚމODV {+;R{ M\]MjMt^L6пo%;nyg^n>]/=r*hu}V;Zi;OƳttK (mh/#㺚I˫kI}gXfy7:|knw{yu6,Uz黱kޗ;֧᷌{^i/5o1tR4k\E'-;Mf< 7_5 : {zv?S|Y |S&^^]w}L7㏈~>)x:/4=.iu Yc|E[6U Fc`>RRg>0RNˮgGcaro| x{OXx;qIbEԯ4DDy7pqotO^[ ,Ƈ"֪M/wU}n]lh5+nٿΕ/BxOM&'үkg z{usy5>K鮟7t`xJ>#hj?n!%2F𶟢N­*}2nE ש$>T">Zu> Z;^&~w+snz*˶]-ms<ΰ#\evS=:=w7o ^ ¯{>j=G^Q7%2Rmcd{-^mf8a||GӵR c om4K[4qC3*L߼7qKoo<<ソS_6~'|e}=ծ<=u5`hdXcܤP?8:)Tﮗgw_|W=sZ֮ÍcG{m;OmCFEw~%Ω} כkg}߶,ֽuO>|6)>"xM5 QHiCwVV;hD{mKK{wٽBZK_-LU[[C=G6kv*M2mlWKmVtIa[5h8nfxRGK hg;=æ{VLi/-Ktgi4ڗ ;›o`u&}o=޿/BRyM]nIg_huV_֏(e43l[TQ!{ko704eV{}5&2o-[{ wVK+뚍4($|A z;j7XZ̎td3Woi:ҝ}VibF7|;j[߰܅ѳ?eY?_3t|@& ӼGof^"4k: đC56&EY6L$ѫy{J }ɚSwwEȬ_F5[y6w_\H$BO 44),ϔwׯ9kU>{ˣy\!M17 :қbn>_ҥmVI[e,xetۍ6S|VmN2_Ow\0s>L++߯?`4o w ˟I"=3nݷo%F?:UHgZ"^{";ŹY|߻eoo∹=op]ىmڨ; *#T9ޭŽdT\Y:sCTonESYͫ}󟑶//r*C2D/h{đyfsKu4;MTth̍8aWgS)(|W·LG)ZZ"$=m]Wo" g{5g|"}y"H}6PZ?)FOm~7ަ4ܺ?7$g+́$gvE3FnO6U:Mo-4HQT[w|_)Kuoɝcmݴ,VTw`HlU[whࡷ__먡_KvnlZXV{\]K Y<–m_k>uhwxgDW#ֺd ru«|h9Vc).{3k15}V}NܶO$wm7/Mj_76}E]f+tdmt=z8YvǽxGγu7-ѩᯄ^$vA'B;U|FH@}'tڔK Q]}@4Hu Z[Xf4첯*m"7?1< _guȿwܻcJb<=>Oͷ{.OL%YumsnIEj_?壴+RШX(_V}۾~i)> i=]+=ͮ>KWFY˾̥9U[~7.4{ ėz\_G1Ɵ{~eʣrWid:^M|=/s{-gXEQWegzw{gkWs_<%z}3O.%֛qsG4:m9$Hҿ;_ 2GS,L,.W;VE;KC>/9FODϛ?gtxn>+V<=eEIKo%ͽG6ɑ ?1+4pUFN+muJצ?361ܹj%}{M-|G xzREyU&Xakh2ͳzC I͑$}~kQ]{w?+j~'x_#񥎇ei:O[hݥ1_M$mͽۭ$IewSG~ggBwv>{|6׼'? <5|3MCPu%Aj6 ˒{axcKK=JC}͉3ԧ9&z}ҧ~Imxbڦz_2wNi,kv=ۭz>#}/O*}'k^Vxf[ascZ=/O~,)in^?3˛|47]*_ze-tk|!k=f\ 3eoj5 Bv{nTͳSo'nF&ޯ6y٧Qo? XV1V9o741$sMyqf/4HMIXգd_JnV>t]SXѵżqz2˩-w+yg O?$y $9E${lgZfhxgЮf%TDۤa-[o1Q- t|[s_:e;ƖG.[Zj6pyַ6#GEYyf⛻_:}{JԤ4TF巊Ei&do8GRFo8npϮe˿ ƿ4h;I-yҌ4޺tovuQMyZG~7k>:%߇"i:ǂm-IC5pS:[w ͳbIc_Y͕juzvtSz' l_.xWKԯCM6O騺ڴmko [,-W?ݧkm;Y!Im~_=ϯo~=|X_o!owd "?亮= 'f=];~'yq~<.tHi0Liv0HZybxwZ̖?>G`Iۿ9<^/s+kcŗϬh%? O^[I{,S+Cp"Wz}dVe9 [NI3鏋_ %㟁g/>ux1h]ЮdM՞4s[5^,>doܙ ,Қ}/K\ß!-KWY%Nk_rVY^7qom} 6irGo"Gssx\9T᫶ە~J JO>xCJzVz+ZWR;G h8eX_3=/m:I,w;ژdd߱^}|φ:x&+4/\n6;1hn|~joOG$$n\u;d6?VǛhAEmOW9Z\eɼS㿃g]S/]hRL|6\#McG/71#n%[Tv˯ )y7-zm?T[|imMg[lG nV|z׹CRTmW<ۿ.F~#Ԧ;$7^Ljlƒyc}|߼Q%dǪ}ock=>"|*[Fм컛xm- Vk|6s[ۦHft-#|<)MpujUdr-vm~ /mCPNZ'R]I%Ŵ,;>Moҿ{ ?{WOHE孙̬>E*wrojtvSwŭŦ\޴kzi.v-~Ǖ_RT}~ffNp.Lif|4&33z[^"Oi=Fs"cX$+ I]nTTb߷}v\}(ܴodW7vIgrybRocƿ_<-&u.P]ճIsyZw؉8u+Z}g|2_6jWipZc߇5=BEXWd9=AZ|+~wסml#K{-=oSobKoڜVvk6fe.n +}o:iVHKw\pQGwV6g4_:g«9n-X2GՎ|-3gL>gJ-z>=<2O>'| m.o^jJkQl x!ڞbC7|.zw"HvT}[w?ubĞӾ#jWW.)tku l5͟|煣Dz?6{yӣﭭYu׮wZaǨH{["emr3:l6>kPm=n[~穇/~8Sh& 'uK9"'k}=bhwy#W'@^N`ZMIqvUҬ!okXX̶Gk|2'fsqgRnRomK ӳ]Zӡ{KvwF",rI2~M5 Ԗ۵绵s'x➳;TMW_\=̺#LMrл ? }u~y8j/vשcK7KY}X 5ՍkM$:bڦWg۬0cG߼ps{y1_wcS 5T\ҴMj xuKmMf ݿ:z?wm<!gnhkD7Mo<:}6S&ywɾES$na+o~- O)C{gVѴmJK .>t;f)Op(]'}|C!.v2K?_Zzdck;y1HdX,d8~6Z~ɭ]/s~/TBZ> %rme}dd/]T_]鿭cGvxi{-~vw>.=_SKagc} -LyhcΑw_GntJ{_&T׿s_XԴ;Gއ.*-ΥBbo5Ԍvĉ>MH Z=J~W#rM[k:ƣGHldeݼɡj6;De=7/fO>wm&W G֡޳aBN1/٧ >%7Kyr'^F_Snnn>_#oo1xA[nxŚ}ߺfrc_hn56?/ކRS[M_|qdjRjgqp,?=haܗhHgqmsf8ơk^i۬: v+{$~d$O$nT{{Zӯw׾M$ۯ,~ 'Yω/~ /\d sKi8ͫ6jKblMEe_*u{.[uo]bdLIcM'm*Qg.w>uDRww_k{GYv%߉﴿IÑ6,n.t]k462MHѺ:#پ_S~}7˯%ӵNUli~\a䷼ܱOtrldSn]+Tv|בg]?]/]eek 7\Rj^YcDY~vrGZ$wg%-?چo}Zx}q`K{55Wj\CkJe2D?!~_EtR[pi^[xkY~$ܳG3F֫3]`MrǷJ{#d%孽Ա[ɩk{֒:6O-$J:c$~jMy7M]+/[wo5'c4K}ŗr:miuI}.eY?yP|UTTv^OZI7tKr?j^IcswRMZ/-cO)!wXC^tq2NU#_#9޶[-IjC[oMsRxty 6XfxB'f;ZSM&XU#Rc_"kqNqxꩦkh iC.5C2Zټk%G&GWϙ'NQm(W߫~I犃|֊'zO2kԵRC_4lz֗$JR9mgs6̱jqv{4RQy^[⸵yqæ*ZܴljjCܼ~b$0LKɣޕ>!ۿkl/Wk}~{c㦿iḵy<5Bu)n[6^cg2[(W~; ~~Wd*oh+Wu崦O:no%fooƛb߲V?c_j-j_/uK!,iv0ndUi$I'I/ՅHS <_j:_4$zI 7_j.M?/>3o|7es XxEali#I?.pBrgwzVx4;J6ts#ݥޭ]iWhb-.Z(/݅tGM߲*txطc-$j|V{wk9Үa@gɂ=1Ȫʻ6ɹW`hk5M%h"m_xK lx渱cXTG%Ū +wo* RX [!yuhbqy:p_̑LG7jNY]nGjZ{ ZC ZFn-ۙ}&_L7st?hxΕYx]( ;+xRK6DFhV8fwvn=)4e)s~iM7ºoQݴg.w%26b̎#*IlG[me?] huM )uf$w|ttxttomw}kpV cjRŢxIk{yk3mx&C4'I~GҎ;^]=45?h+fM'LDey22$.J=?AS ĖֱjMrq24m#yoG~׿stbE 0;3:mn2:Z$F6{~5x3D?4'ZVi7{#=R$~+#Q]#*G(Ll`[yf?sF~dwVs/rY8C_w5ǀ{$Iqe 1Ly{7*4%Zvo iOЭ(8m>ZfvE?{ZIKSN_ש{hluY@`Eg$jm~۲2ݽoZy{:yԨ4_'*}CXX^X ?Qg$sFv~4fl\6\KsB*GHr__ie9/ >!ϯ^FB.T>&Vޠu?΀,Oɵ;J}3@wT?!;~lzJܐPWOz !k;2Ё䲿dI.H# E$7'"zrl6O-# EUUGʟzj-Dya[h#{c^iR$DA6 =?~$V2k(c?)9ɯ.B뷞wǫe,% $?+[?sGgհI${SD]Op+T{q]W7fkk4yQ\e׹m5ٖV^9?5Wi H=kp*G~򳤒|N|_55,^aA9# 9y?~g_MlsbO rNn?hoIBz+9 qҜ۪OWϮbb.3$YO泖&O"8xw KkX4:WWlˑwe">~ (wgGҳV?r. e.|_G4%ebpv¤\\qP1d؋l%}߯(}n,Q{{9=ȷR1[}Ωm 0T^=޴&koSͧVՙSkZzF?7i!{XWMWRP[$ʿ4mҭ`?x3T  6|n9VK1xs*oy㐶/o?Z {:ѝY5ˢ ;X7~N[7ZODR퍤'-lu}G4(_f#u'[קQoX}c'Ͽ߯:H#oj8e4nO}a%]<_vUe8Cw`,;zt?Z,/Q(oq z*A `wF$pۡl*rxsJz}Y Mkvw"p'Nڊ|6\%+oBSl׎:mE~nm(A˴^Oƣy~g&=93iǿɜ9_?ĕlߌgOȣ=cR?K>!O{a*TSp#n 3߷\w=^[s7NI2t^e~oV\M Z̿ Ր(ǙwQ.EVtm~m-5MUHZ59[vs_>J%:ѕ羽YZumK@{ OJm.?7"#TJ6|Rme{CдOdI][\ -5s{~Vm}o"G&9MPqv>]znԧ uO(öZrGn/maJF[U. mlw*% `mJt+{? |VO72ptDL-wy8cOZ}zXI{mzۯ-g_MVγrD:lӦ23,-Ra/~:P~ۯS{@ڻ \+)=jB}QAl6Iz}n)F08$߿D.n$zz5|3>O1Z5ɴIga$(h ǻnK]fb?AԚ‰v t3|͵Yrt-jΗa}u|bG;ǗUelfmNŷ?I~=xOQ`Ce=DF6[[^t_o?ͳ[_m/oI# Y$|R靴S}{~xwHԎiRx>s$+-"}?-*~_pZ;O |3ti;5MV;.5C3k"Hԣtђ#؉?oy#mͭKSۓZCO߅cμJ˹;Nī gb|oݟͦ; si3P^}T[㯼2P$ lkXWk>4>fsg׿M9\xf+l cwyWDkLV?˛CnPK;%C&h]'1ԯv*E[ko{q"uaY~oa:+Wcn'))ykt/͂Nna-w|cy?7ɽܢ7pjקk;m#Mֳi}(B8O|epctWO ~oڻAҾ(|0w O5{ X43Gi {<983|>*F~'/F_]TJ4zuNWw[O|._vq2^X'BYԞn.69&ޟ_NgG0'$B)|WrEkEOyHVWT|Y6Un?ξ[۸>hK3'//wZ:'Ӵl.֒4o/r<ޞ0B19ֿK/J~>}x M yU-?\\y9,sf:q9{FKzQ>Z>͆#Eop. fns6X9.]|u· G)$@_o|"{}ߘ9_++[hVuȹqe+DUgOn-~f~Ŧ׎+7wB_/y4ӳN^:R+9B+o $a+?v渧IMݿ\^ϿR&;AV8]~߹ F>in?+ S2\-_cIwp7 noHT$Y<y6>ϭgۻ(_^Cȷ۾Wt?j:~{4zM vƭ"],{m6&ﵼֱu9edis*Fcy~zίoǡ/tkX{bܖZ| S3oN}kJ->ip}G_.F|Rv\;DӅ8_Χ'Q{6eI,o5y1|71UZ<!)j>ڶhVze@۾ha^)\g^zi҂~FrkppxG\%y5 kPw^O?OJkϸ$o叇LUOy6-!'ܬܯz-Z_/[|JM~yV35̆GVO6S)<-dJZ|Ξ6z"ed۞~eڻvsiSI{dw?.-'LYA-T76\Rdn-Am u&<.|Bnm=BR,$6o>ΟҮyM=ЏiL5)hb<{fmoX>o[:þL2؍˶?nMtƄit^ׯRUFoh^W+ߙu";RY>~ioEk~T_oO-R^i,KۮIj3mU7G3;{-zU\3'pE{vR2ZNƎ_v&&IϿ}*IP$f01m۶<a? JM^{$K+$x9/_Znѻ3KUۛ6ho,~ov^>GXgv֦*=e`7'Po[Γ[;~%|F{T1{?? a--"2/')ݻn<g+<zebD|s|D0CmrEI"3M˅5{ou;Qu*v۽`ߕ~o'aR;5N6m|H MGN< +n!io͹wZko_/v_ o<kᶑ`].+tXI Oo}kx2tGwfW;\)/?̫JU1yk~(睧{+]ZHDv֖-/4}^&cڿ}iEDp.dHSoLq}yO2P {FnJa|B/m=~Imzk;{axkH7:5;(&dHSNL~_j)^:=G:ie 煮BrI[an_qQ6>E/mlYod{۝dv|#MmWv|˗_J8f|I6m*3$Hf K68}8~?m>s.zk#ZXVB˱_WVlt]^m?m< iaQ{&[%?yEy/_N~_3o%'}mtCy [֖MV-$FmDsE6}fJ3O=gm<,-[z夷P)$$2n!n]6nggG^׷ ?^n;_jZ%xLAOYo7!wH|N.Og}yӇ<nߦ˷,-aQm k=yW q~w8kr?{SN]GN[ҽ][Mu}_thTXվamvEVIj>6 G _*aQ+|+Y_Oy:m= h^j"{ɤh!Pݵ}&U\3SoEkfioKz!ZG񖕢mxGe"ƶ-*ﵷ/s"#=5(k_U}SV?|{txC&}mťjGiY.,5u+yh.`vFe|f1v^9dm>3?ஞ>,TZLҭM"})&ZG{ďos 7gmIy+tw~}Lk.U){e>1~3{/"5}{W بu+9$~Id/[w<ΈN=ڶ|w?\%OIw}䔯G1h:Ox>mg~3sȚ{ԯ&̏ɱ!6[?SYgl&'/te:j_ .> GiWn,u+}cd+404/6<đ r*Wi|i^QѼe-?_Դ}SF΢,Y-:&?H6MIԔm5۪G\ի7<5NJ|7G|3yi-ƴA<7;5[9^kvFyc96<5VS[W[=8rQv>hӼGjIS6K FţW[9,n]_ K=^-+ĥ~.9U( wN.i73i:.gEd[vl\q J/o]&)1K⎷uehrxOx\<1osO$. X>IRJ0U*K_v~xڞ~ϯX<9/QM%CđmښIyoMMbWEÙi[ͻ}wmKOV5aO]_n^nUii=I5hH#.٭dkftEK^~wSf*h{6>{W~ra_jϧ+ӿw$ugMԴ+[z{?6[ yeqSO~.ߧ3b(?agW~߉o>s tC~>m^k,l{42L%$#yMr[]|!J5Wm ϯA:_{SR+{xRO;SYDqдgrm`^yvJSU%{]q_iQ> xB~͢%显 %+yi$0{tMxDN\{4޿ wxwį3_ziXCN!oV+{vHawȎ[9RQ՗M|bkmt;]i.&hYmݧR\[yLoh{ĚwWeҋ[? ~G)>gu Ln<:gx^:^+˝gWKX]Cq#*=f4U= 7'{| eKOth~ VmugZoIkZͅ-fK=aG/5:J)͛~zS_~ /)k_"M_S􈮞 teV5{uK=̏o޴vkGG?UO5b].wfMV9?ԧvg#؉MGkón{U.G)r>fҷ8{~G*mgj> Kyc]ф<;|v?oQOnxjVb!#xZA+#.rGm6n"%@lr3ߥsw‚'ӮDw7GQ>sKr;oo%{y_q4{wt U/Ԃ!_3zւnFf}FQo/;VxYɵWTeo;28x~nu]KƠֲi7.?3fn_ .O3Ծ"OL'V{W՗?M}m|t俫?c~|Q-]>]Z 5k.0Z+3We]6~g]K5uk~X?Wn.K P.w+H׊oe}[>jSsaw+>\'˶fKg~Zn֚[8E_s]kI,e\;ႷViNMrnWߺ۪}MiE+5yN^̴"<$mdn-x;Zº$iKk Z[ZJȍ (4;}:ɕQ5z;Mf FE7] (g>f}=>~ٮ_ W})5fAc>ǹ^Otx׫C{u*?9&Զ +ƑYadFo|ۛu:Z0pw:]NЮmݝf2w=k/l>I5^_-M$ݛicϷ,[wT$?_Mʍ.]}4Fxwn+n7rfϕWuB)H{wkwwkB{MTڳ%UկC>p*HWa-y~o77K1S$ѥlXwFo[_)f0Oj"Yⷽ/\#U꽝%9ߗd^ʓēOevV~ar;+.:U|lB)T;~w/Xʎn摒kW[v'u;_2*K'̻Us)-Z;ꎈT}_],=WLqO븥4׿Ci21gbX.V]4n]ŦS֠Bٵ$"{m+MۍsAcqo]iV+wr[?z6NM?ssþ"fNeiu#tc776niNOo(OuOh_d/[f`V_;6RcC kof_>yS֮n>c,7u&<.$<[mq ۷|Tjm3קh5t_GZ?&O١OIG]w֜0ۭ:^ws9{Ğ6qA4n,^2X$scN8ReŹta> >N,E_s&Mƛ6'ᅡJ]f^Tt{-EOݟRLѫneFO[]!ޯ{hH3<Ƨpְnci>V?׶O${~/ΒF511a2/ͻXʭe<8{{}:]γOyr۝~RdgfJj\ߨ PS~ş eoxN ռ=j\|2\cY?jM??[k?xoĚea fk;32xZ8tV6m4빔T3/lu ڍ߄1ޝijf. &FWj?aO5pqmw߯JiHTo4_uͤz$ry6jq'5$$y.𱨧ۯ}>v~_qz%߇Fx'1q O/r7}Wo[6ES H"ݟzXXs8w[#?9yKd|;dWjsW*?꥓?֗Lj8\k+/=_^^K ~U朣5ۺkY-7 Uɗɓwm6F\qX^x5Y܊˫2z[hn/QdNP\M֨OEBׇYIg&V̢lkNXF<7-wV߭t~y,CXTJ0zo{޻ۭ jM!I"]IU-7Nb5 Km.Ot5丱KYgf?fq{z ~+x4?C5 gk\\GYk&Q5ߧSXQVW1m&hu4m'o'9/hV?-(U5#[rM \|̴TM|ΕWKj-yxdx^P\]{cyq3*G#M32"B;' [8oNZu{!ѭ]ABJYuF_d;;u!O01zV:ek~$▚IO8Qډ!cu:=d؟sjrqku|: ^4MVk^"HnI-dfakTO;z|+;'W&kNs|}LKW񅼺ƯkΕ 55 Zy!޷6ɯ!w{,mX.^gkn[7Uo['+?c_D֞Q.Mj e4vQR9o&i}y8UU%e|mjtm- vXitr5VH>٨Zu5/-9$ǒ^oErUO.n^݋ O{ORm|5!͎֑n,p~Gfazgbƿ'Jjsͽ4?>v5|DUeKh$k[7qo=ò__eғD_׍%ڼ"%wͽV'}MP,]>|JӬ$Ã^ڡ-ևy[0&%BG;2.q ^e&m>Z87~&|7>9_ZxcÞڇ|=^ h{Ņ e;o\[^\Vrnun.֏k)B umu_\Xxz[LIu<*fg'| Mi#9}ɟj=r_kC@3[[^Tᾋ5$Z?94XYYl36ws$]'8[T{_gXwER×md;~GIX՛ˍ;s+嵭_?[=忁#e%lb.5ķS\2Mqq$!sKºmig+G~ Iu-K8nY5idq۳jw3YM~Ītym __=>!𗈵5富$ 0MK4ѳ3}c3ᭇ|OVQk>[ӵxP<#OhKzmx|V-~dyj#/4/T=G_סc+)SRO~~v_5c:4_'x/3Fu?= IZeKY/Dw.7ycoJ#w?-zo|-No5󥬐\xz߈!~q}8mf7M2b3#CnJ>7|gz ՞U&Ԯa]/\\LL߻YϿo>x8ʑ8?=Z9Sپ?iսZA"^g{[_'f~6>zpU=ݻ__שϋ/[7~~˨^;ƍ̯-;l]ɹ]Ҥ}2+^9Iu}{ۡ5K#IٴmIg6嬌Z"gjZkXd}|*F`%_G Oz>KtR$V;U@{=RѶV=J0O> ujO. ݾߕavnW=u*7 ^OԼF.s?x[h:Mn?4 J6(YPy56ry?`rSIE{ߪOc>3Eg~(i%Vwm6mOM6$ֲ*6fM/s%uGE'ݯ&"{t?Ak|J.F^ VVHݮ8ml|p7УgO%ꤴ_=A GIJx%ďx4o ~O>-iKkXEܺ-q-ߟ=34]?Q|@%!'5#NDlM3F:ubm$>eg 'yhUj'z'7XJw )_cx5Ğ$FOCP-˳680ǙNp2/,'^MaAo!y'٭h|Ro_R^n{g?|H5^Tt?8x\ekQyI >є漯vN',d$~p-:mρ{_t-tk&Fmq[7׉5/h#Uwl(bDC#^EյHGFY-4vrIo3,03[NQI]wnO |?3ƿh<3-{Mo lP–%<$匦:LU_3k+K->/c|5f[79F?9jSrntlUJiu_wW隶w:.K$&oK_K+H$iJ pÚ=o'1h%Ռ:O"5oG#|tȒyAti9s[++N톯5յō͖M%HhMd3>v'ڽkkZ'_mƝ!CA r747o},p}26m>wxׇ-y;-Rj ./9X]YvWz ,O[ǚo"~* }o;ZI | 5>?0Gִisiz_2Ia{kgY&4fnw.%%Tzo;Kwgr(d4A#Т:&F.DtWEFj.aJ R]x;Wgiu+x_IBP_i[l|ax~w-FVШǟGo'+|fNDk]^RMrO=ZI㸛OCGGd>wb\iX7*n\Z{}:~xo~ 9zL5 ]=CY6ahv߼f19{;y0pqU>&9JǥG6 ~joPQؑ-VTN$@+y ګ3uN˲w> 2s%7g-y$V3fFM>gZ(FI7w'NmˊM.hYhXL߼I-ޟ3txwF1iF쿼ȾI62"Dar;^g⯂oIoERﮤcFh|DgukZ Օ/:ƛ--QbpϷi̻[ΟiSg[ޯ#pzv 흜-V=V%5$n3< K39iAO汤jM1 yUYFV]^ԃD eT^(-Uߵy)4oz?.hgشXu4j۶.?чH香Sd~vn;?Dy[߹zv1Qo-KhDܫŽofI 0l'#n-z6?|VwXEM }#tN>xVj uٶZY[s|%-|6loُPW_+k|+kO/ZLi֬d7K'u{Y2%]u^X_j'{b|ul!ǀ:?Ι"?+Мu6^y~֗Q=1(v??Vܭ]'ACYȷHXwΡwmgm)9+FлK0y\gM+`m]cOji6*2R_ `Z(.#3pa}srQr}-ddYrA]7ŭ@nV P6`~ԁr-Ak6U)7Ap6#DЪ1|8P##-:'w?;܂2$tIyBz7>!k}Xzh:6K*34#I2j16RϜ&⠃jy#Ս 1@ s8i%5B#Hb W~j-2 gZ_'ʛkbܬ J@PUwwvoIEo0۾ܿcG{1J; ? 3R+ )3]Pl\ JW'ҧ^B]}߉&눝] anTi>oEdt#v_~o4H]c*|mu>(JIF;='=I%8ImO*s0i3OGp&(< G^L8V la^}ZOKTh:B:͹bͳ B U *,|ȯvЋNevLc̬*Z%Lɽm}f_3ٲ*v_R?\ŴRn4쑁[{Ȭ~jzh,ɳ073Q{1y$.ޅ9?JQ['|*in6= ],34ÄEFzG9͌eJ.5Ɉe'Ns|cH2DvV#7ޑob$|Vѝ6[}0iW[Ym]Dpx~Cu#ip4q*FyKy~ nYܻA,ۀO?=3_D%|'qG%Ɏ01Ueo/mW$x;ai.w~B9Īƣۿ_{%].mwzN[;_7_J9_"%t_{%{xRVϢʎuQ' YI_3n0Zש׆lI}I.+2/^ѫ+{k9":Fd3$/ PJ+ZUzC3˻e 'a%Ggm۷c)bWm~ όY0;uـ0޿50/_=Lgn2_ZFKLa;}uP}`ߦLz,ϫk2^`|aOV/t< 2/zӒ=?"u'f_DT$Jr0ˆ7;.+~?)nBX8Njq+ rAc|9 FẈ̕*;pA_4:~7XP}+69Nڟ;slcw`Gwf|{%!sw~ݝ0uX}#UlOtp.#/yjz'*OjiRivy~fgN;uϿ}|](Z /35ne~wq̵}MuCUo^+3a(kZrx;Eh!DiXqrWZդ}ſOξ_PI>{IZIi\7Qdw[ ~mͻW~Mk~ {;Af丅{0V67vq)Z6.2J_ֻz|EմL7pRxU۷j}޿r7f]KiimZIǖ[u$~lf6:Wf8r}_S(?빟4oqh] m-kU~]5߮vpmIfv/K̇ߏgגjH"|.}V^O#9~OZ$Ov+8l|̫6w*;_.}+3u9tOem6=#VZ=gi 2KCt؎II6;HAd*ߗMo99>O3- ֣:]>i`д>Vh,tg$~\j4L~w?0X)QqoEhi[IŻ5:+mI ,aK)-F! _ /hvIF NOOWkxx^*G]nx|sn/OVuMeФht^;y.OhI/_w$;e?Om /w֤|m~mmΟ[we힫msȢRMw}W:;_ש2>S5 Ǒ,o >ّїl|_??Z)+7.~oOVe,<'M3'. C=}6%}_t]'fc)ҩ-yuW[y<+3F;2RH̋ROa&37{v^n 2_dstLjq 커C껙vJZ~[y=Sgb4/21QF##3nG?Sko!I쑰 ׌;xݾEoN0o}ړW^_2դ6Wk(ehVEfD{*;?q;ӵ`Li~Ǫ]\Gw,"9YYEcv|p>P)5cOFκ,.CX[Mp0sZw/'#zua~7^[F/{{{UŪ-Ko[y>IDڻ7?"f̿oɊ嵽zzHuuREiLbVn&m|&'ț߮)wqU #8*v ŕw7{ I4Y^2S:+^>e _II#D>]+|2_3Ri7VYOAyou ݬ~V;qHۤo=f{zTJ55B"gs?w{[^O;|N%y5mD+Yf}nWkoQZ(w՘_~9};ҭ (>wnvS}/Ug_WϷowz rR ^ 짆Qor_ԂIylA}}kA'kǗpV {fj$'o;w,3{kǕ{;Yy_m~Lj[mDJ-?0u.t=(]s4PŲDݏ.?䟺|$F+Z^qd|оٞChs,j#o ZS=*zI~oE I NgHs}m2 %^^$oeH#*0-7$n[;;9%&GN4*ݼZZLo'OQ#Mo.gaKϷ4ދؖ&f )?Iwgx\m>ϛm8EWjijj{~L4{^6l?ϟzFqzsk}[9ey G"Euss.ՓS?:Mƭ8ۙ-'#.<xz\4kmB,W?/dnyVM}1X}g?sxkWm.IZ6g}ZnGaQv[GțO_}nԧ%w}k}}s%sa[RRI ўRkݗϓkz_7|)ZͭV4K/OMo%Fpw5ypfw׆*N7~ m'E=:_[?N~2g/%O^Ǫ_%RFuĵzCg2\?7p+67Klxu ~G{w?E4 _BOM?K8Vշ4k~EvȟzjifF*5F2>ʶQ",GpeCgwT;_Qj#QMҮ`K55ZwZ¾Zo~wD~:7ws_  -5 ,HKp8SUX{o>W^'^t}#O֣XNTԼ03C$I'|^g~]>eվKo{~?}8i/XnI.}mdinn4/wwGcyy~T=:s\.6-zM|ş=W#kZG|3uữ =ixO3G4l7{7Oܿ?}?*h7FP{>^)wmztvyڼZ]A'罼1< Q|鼽cnݱ}`9?:/v4FZ:vM#e.GʾfٝM#E&laymgUXgO>نj /GxsMLl-&^-/QoZgMJK4[YGUG*z&ӡR-o~6xcJۮi5:nwqwڭF_]*=I~ o] :s7E[}o Z~g4S3u%յga,5gKOg5$qMiIݿ?lsm-t~L~/ ĺg^c[4AZ {}ךYy9$7UϾLbU-eקgʼ- wWG]k/Y[B.ھguc#n v2]H[GIRm\[5K,}l߻z3̠WWqkǺfkk:%-eՠ/#(/B #4cJa+[ǝ'dV{DVR[:T嵞$J:?*qSԞ]ӵXsQ{,}[K[𮭫\DYڶ1?qƱ+p/k~t~cC{St~~g;C\hml h5[Vh'yo+-ɕ[tw4K?U=;)&sh{#E5o;v;P "++AҿIWUq by:noMˬ[pY#|o q$Of5km_{mx3T֬u_R^M۶ll۱Ohg۞2[_BM{t#O_Ʒ֖m$_>oݬ4,Sc?,GXΟ"=;M?_:~X8o,`HjIjdM̪'ȞbE^si ")\ǷWhUl} z ]5g~RL R)buݴ}>o_N-_)7y]kl~ u!߽՚R=^v[i^0k;iKeAj)ۏ.(EtDk(,3X*:mZUor](^̛5gʐ7/s t*|KNK۩^xkWh4>l=ʣȐVWB}?3.ILhh5 ;7Zhuju2ş۾_,oXƛ}J[W.O谈.FHM;gk/;U'%v:n*-u8VN|褱ԠtBJGGwlk}zsS/!Yۋ\YkZﲶ^ vV̏_jMPKdX,4w/<We >mm)? ۖ-iR3o{sEI5_[in7Ia C FI@E_oꍩ*:٫Wo^h։ n-ls$+c+yq,;=99[=TmVߗBxx^u ΅zͷ̌ܲZ/̪W} ENi'/x}9<xMsOT& $ܛ[jye|&輓4SdY{WLi$?:1dR$lxZ9+rznE_Uٿ.c%M={]?u~3|~J6ܕFgl"V7.|)(F ;_~ebwݟIh21<1ݻ }b=U>ퟜRM["#G ,ꥲ{?_QYͻ'i<3T]xS#7tx:/zY3Zݕ#hky [^[:<3[M$rF|{5p8\Щ]}FM |M>o>Z_g7 @J5;U x6[=r=~oyq 3*IƃgVY6lԢ+J˞>=gY\Ku c=H$#G"u .;wn߿zoaϝ+t鮶"tX6M>%{xUC|/%kA6g | Gs [Gy4^m$6#j۾}~8RZ5?Q?h??V~Ҥr/%=b).ɛ|[u 6Dٽ嶗Дz}MXׯƙ4/KIg]&_v_/u'ROve)[ES¼KO^ aΕKkkcGx/ c\mktI{׹3jeV:OGhaY享~̓dK[gϽ5˚M)s|%̮| >#h(xZ|hhbJM3m x M+_שJ)jS->M:Ine'7ّdd\G#>鵳-uӾǖkƷw5[|;{\\X]Z¾bG*T{ >zKDk_3| Ǐn#Hu yt:+I GRX?M5,M'pN⭙wi}W5P^I=3_ |Ye,mCV8죶yII4so$.v\y{zƬr??g&A|5O[i\|E[Mu G%s][>Ie>ݱ?1%&vrVNIx . ߍg^tYg%#ݵF[/-$N'f6x˒*O|1~Տ +n῎M]/]ԓPյKb^m[tWJè_Y<ͽFo>zehtT:)j O÷:MOƳ֦_K5X>ۆnahdw,3](s|Kvqʬ^ӿcoD-狴ۿ,ecȗ+$rjZY||]ʂ[&_cwDK*w=w&eU}O %oĉTĵϊi_w:_Y].m6hYui,!!,ӏI>rݼޞ?b]߿C+@mz׈,'w^/5]i:|ʿa[a r/4ϒ'\!Z6b6Z< v>J.z=WO_ |r0:ğV~$rCXMw[Y!nmd3 *4e(SW-׮Ω14q\8ɵ%ꞟ/MZGol|Gq|Mk@#k+o/]Bg_&8O=Y'T:sQͦ~gƭ.IOD_<> _t|YeŲxOtLuړi6fvQ-6DK&V2X|5XȔ4^};|%ʽZd3;^_SV^ bgW1o/4k,/<{Gڽ\[_w|jQSZY|yek}zkIj&̗ΒY~f7l^L㛼4i'ZOf)mﯩ6O\mmM֝&Yn# [o%X5\'+om46no(_AoD-:L^X]&rb#4;ΙV8zwחO1:o#~Md5_i[w$%#ch[KgM?.Kί2EYk{>mOOznJM;7[3zů$7f6ai޷ :n+_|fa)E6ӯah?'CxEhQ}oX[XEUo%aW̓pJ#Arn{>ݽu2Ҍw;龝 koϤ^iΥozV6&/I3G3ɻ|;d=_B=춎moeK5nWw'Rj>7|-NgQKkǻxw>y}u% "}iI?05Eӄ^7S%OC6պmB;-XL;/ Oܺ|3.'Nzii0)XI~{>?omuxEҼu&=CAkw%ƚM$u;[ytciRu;Uk[_]Ok~&vgh. |:&ɷVK#v$wR<.8!W+,ogKI;FWN_&aZcia=MGnmnd7GxQO3C^ۗ3ݕM_#5;[ٵҬEb^FdF[m6t,_}.uٕ?ۮC4T*]gR:k_uwl55.!H-짚oO-Yi6͈Drztj^?UGo~_<#k:$#u% bVy>.V>\i(3oOV4"}f'?mzm_D?Y6h=ym; .Z:|>t9*O_(rVz^9{~_5MI'kI Vݱf՗> N[WN^:ߴ L+W)xWefiknwgvrRJR_xd[׹(6 ׎j2ieuHpWeٖ=&#I>J 8%E(--?Z<cgsHi%|K,r/~|IHVm;ۿx?Sѯ}_Жhm"C$vxCo*mW;G[i~̹d]{3656v U}{53:}5ԗ^+zVjљ p̲mڶb:;yҢWml\Wq~><-s~%&4 SOnʲ,2I#+ɱQki{ѽo3[Oc^EtY%I,7 úgȍ|++[KXemnryiqeq4 ZKYTwе='E[l#0og8̍j؏c/tך\3\HcC.֏jȿ4&=`::Jr;*b~Ix4mp2/Q]9+NE݀izd-=ͽM{ ?UVi\"F7?ϵW5//g_>KuiK%e5o=ȳY ȱL\mXDl5>)t>xEWCI.nZ9Kyo-RݗbMmY$GدYJ6[v5]7g{2[o懠-G,]59 muJGnwRX=G"=y'Q^T~eź՝嘴Ul_YʲGq4>r®O&VOySĤ-b׽BQM-ocڃEυ>:Ю/t+mF[;hi$edT>_.buJ}iӊV/顊V ׿ϟ5>| |Ewi}l./,X,3[IyΛ2l=.~&g4zG);IgmWWF.|SYϠ&{.I㼷hl_Ά6jWJW-[.kԌUs&;}x B5k~Rk+zSs ch|,ɶ#|']vx-^')s? xmB-GYQm9D>*EԣP7KYxf3ˎHcI:)M?%vO ~Ҿ(?xvXY! 0ɹn_)kxΙn7k:p=oV}'90#nṾoiỊ&ޯKoF=Lj3 ~mڵ,o3?7i.&[]d~_5 #nRנf\ZN忝vH,uW[y/0<-gp4Ʈ*G>I<-䎪pW.כ?޷hV?vx]3(1mSfqN)3מǕƿx?H[o<_Fdw~dfo":M 8HN{8n={WrrAyi@,[u6[fT6y_25ٚw_=zVm-bj g+-֖9c+}K<Ѿש0NMt-ynnU trG*3vUn~o[k5wOv&öo#J8Oݳ6֏z:'->^m-provk:bFܑFǯʻ>jjW̤䟗O?]K]v>KxLGmAuѫ\%QA>^Ij]M^~7)I(o巂tyfid崌G"IfMvw79Ń[4msyyo2O++Oq6C驓VmT&7cg2,{$w̭@^[bB[GoTc;X4G<\E/vRi̧?kwжIU:1M&dje䐤0?Z F$"9G??04Oe*goRڏM^`jל|(ؙ7oW?ZI5|MoI[fGb*{InL#`WQZ c5}Vg]Ep="ucw|2?u4z?] {b8_Cd}TZ$8{ ^o~}k@!y*2H¨7@KvXVo$ʍAfgʫM+{P%+idVub>|+h J1daԦI[ɽfM w/ғvWwWj%Ĭg6PdXۛvqfU-E 4# O^W\lkym'a{c 2β|ſR?+;W1F-^`%?j|߻z:ԢV\c;*~n}:~%vŤW!9`0»ɠ\x.%m eq_5qQO{;[6Hʒ'̏+.'ZGueYq,kS1ڒ7Yxe8('}zfh#[/12t6n]C=XNϳVQ^nrA~fO<*IGMFvϻ5Sr6ΕN}7|ssöםoO-Domq)е¯ʌwVEGs|^][l*Y[L"~!T-%Э*7tݻ}θ:Wn|m{NE9| jֳ>.pK>vǺHi#FYFJQ_~ In=˩;_Vğ?mx>;]Iq7~JUmrQwv;9j+׭Tτ[gpf2i|;wUezI?w:;w#+-}}v|lA7{=[z5N]wj av7QrۧZ{iz P%u#R}?_ŕoS*}OIWDw}ϗei_SNtm(,q}|$1:pew)M߫@CX[>B]˻w\_ۆKk/m$lRܒ7!5<3Mⷮ>N OY?RfP\gO77'ggTΩܢe^wy-_/=k9SOzD< 1yQ+,m~Q\þݫU-w9^jVՖoqbk/oo̿6>li>kKץyck≴mGI3}&[Oiv+MSW^>a7μc[}2`ldlrl*_s]5c.ת0ľ]ϜWKk?i]=>:.z,Xo1 \#l>΢U`L荬vtr 7(ۿtc?{ro3o}sgr%weȯxwPV ݤo!`Yd<ϓSH_›?ok?.ro5;hx7D`_=rΣ]:on{NyNO]coXGffrgs8٥%mgw˻r s+OmRk{RU([>or>+l2Os{L?Z5sS45Y;|C_f|~F|iywq] / .ߗhS#7*~ .tDrSOY Ucir]_g߮Iy p<{[ ̑n$+ncu$̿GQ*ש<ޗ]> 6]` F[u?w[_MW![2[\ސ70[q}_?3w/.&6GtTA2n,vgs}9UҬ7ngiǙz}iz$Ej7r`4F߼Ѿ֋' 7MoשjYl˛ٝT鰣76ƪFS? }{}SMjn^IlOcOGk2dzjl}l"۽%wqƛ]oϯmMdddc&wGg %t +]u5XQ+ T#,3~[~Nfu1{O/kq$-$<+MQ~LESǚT0\aYm2c|/l]J]=^~vNyWn]u]8P=8%X_=r}Ќ5}EUUu؆F#$|]ܫ)o?+" L+OYgrw9'ftUK+KI$ y#Y0 `k{TH^\bT[Imk45՜"~[TWd|w]TM16^2JbO<эrֺ9fe*OtCZc;AH?5.]?i=ڻ'χfA:Nwz& *}n~I\E-e_fN,k ^5Y]&ɏzOf9_A-#3/[Vӈdb<4jڿuG,ak׿rrKo׿_ҷFz5=_k䷒+QE?oYGvhޑ_q"˪Ihx[H Q_LKj -k]#OUK8ųm2WuV߻kҟ3ڽխ"^]z/DIĂm}Idd09>^U#_Ϸi<{7iv-!Ӎʦ(foO|־5";&:GwwWlwuk7yc:^|AIy#^Yv0tƸDWâh#aZiSwo j^ݙݴyo~s|e5M;XZ};ưěv;3"Llߺ97z^){uӭM,ej(-i0ܳ wɻo~ ΍9wyz\Dӷ[<w:LezPT۾g/GݮR|m,aj7qYcZ<"3o_~#TN_^§c|!6kKmp>ޒ6m=Av1G$Υo'^fQ/Gm ,?άI ƚD.{.:~ytXȞ]|q6~B6ߩ:_w7/7gu{գHmGKo6;UDDF[,q%k]ιP]m}=w+O4"Ś5׈K4mooZl$~\IľG~_}ʥ I ߉]_ 5k<>0ktuihdK)$B[mqTҭu6kR_{w~g'Q{~ w oZ4 ះt[']YEck8-2G|\Q욼Sw/ ;]53|!>(hHn5m3P^Iok\Bo%Ŷ$rs4KqL*ʜ߯ۚ]%_EoNH]cSǪoߵiF`u)!\Z8nnf#i.#7Gw=WmOg$j:mcX{KK[|]7hndI,$y =v=| >ڬ"2,)!@'xb(-dc%4{RfD({̒Fs_>x)u4otyCFۼfMg͕{ ."񞑪:~kW^Ԭd4-E,/!]deFIc1d}&-oEFJ7}S?YxOC𮷥koZFiw?BEEk>6?s|3S<<}20[k2_A4h?2]g>d>_ɼ2rԧ-^wq5{O.7iVSk_xy_\\\y۴"٦Tm1^N++^jZucjxa+wO_M?_A^ ]^ngmIlmϵlk{ϕVg<;qyD^y?igJzw_O|[kzC<+$տͬqLo}sTHimԥf+G?Oki&OLQ,۪5ռмy͵!~f?;RW}>Q,x^2V/?#ԤɸXkim淒mm 8}%YA%}o<դ֑??o٫6L{ޛKb&nlpj{vnFRMW*>?-gP{?Kזri6qza8fmTKQ/ [,{O'bޗ~c'c_6x7a%Ơ׻mMQtgk _2J3M\~Okю%'[>Z?÷icy h:?-cVզṸ;VUyO2?6cI[C'gı>#FmS㶛{ZZ"]Km?&fΙ兦K7"|J'yiק]IYϷCWQM[;Wuy>ˬtͶMdS|eD>wn$~/tuݏy8ѾV} []sigR[|#hN%}{|׿[zun!;wȫ T,l9NW~5O]#{ߎOG=KQ[ok7FҵдhƬZ24߾m-hIo/ի&scxk}> *m mPɧiwM DJח)Go%J'nO%:oO]|[r|;࿂ jr[Ey[ۓeo/H5;y~[yaJӳ tCx k:mżM0X䵖#XỊIdbx 䤠ש):m9ohM5O k]TeI.,mίlR}?=翅_Ng[I%S[~KS[ Ma%YϤF_c˷ WXw4(?M^mWW%Y;I|_S߉ۿ<1j kmm[e`so]ѻ $4ꪐ4SvpX,iJHݽ>Y Z|Y֍xOX,gi&i& V͆K7W~|;)TrֿdI|_MW>z ."kwZ75KˋT.!-do3;}+T}u{SRz-:7o-ώ$^x]k^hbKYMW}v+M#Umםպ3x7~*wt|uxG~ټCo YK~] ͼGkӺIɩsE^}4>|9<|Nu${.5շJ40 kmaVnVe!By\[[='EdӵЎ頚,+2y毗qb<;n{>lyi:r峿]|ťX|6>-so*kVm/y ;;#s]5`{z۟%֮cmm\H2q 6}ϑwkN}u/͋Öں>x~;[T 7{dv7%}+ڮT׿#GꚒ7X},MMo'"2JMm=uRE}]@m[DH %Dwȯv{U}Y+}{2y'3!utk\3s/ٓ5|Ofj[Go"FA?ubo>?VUOAKgE퍧~5[oV}q;Aё,}s~$hVKtwU ͒ەvw?m~Kg eqUӼMKu)I YVX[#<&/K}|A*6w/ݼ7v3?omv$OR߱rN~m^O(&.<+j,}޿ut*OX|o=ʡ-2IrStl?hyKg}6Di+ꝼnA\*0\K5,0·ܿ5k߿v)Ӎϯ%h|]3yQHՙauf-ʜR}W2-ޣ[r[3,?̻_ZOgj7tZo_)UcHߙXS%יN/۴ ,SqZ:HuVoTR^ߩ7Ej1|̄*̅%at>WJz=uIl[6pR Ty=>|r/ؤwGAKy9~`+.?o׿,um}k5u^^K46YT*.?L×FoRO_+u[D/-TY?Vf?[2xVRTq{xr"m98smݍkOy^q;Wۓnow+'ROv+>i|S,%H>[la{ e.{WeuX A2Q|}0=PuKk9n-b*7ygoڹ>O3W~kp_-DgM͹i޻a~o3珑3}!mhÓ{F *4LZ܇ߊ j=z֍>{ϖٙ6_Z3Ku}Lo R}Kሙڬ77\F̬~څΑlKFiaij$܁-󫋋ZJˡ^¾#ԮK{ioݻ7oh_"GMʉ짚R[ʴ]5/}=~j);k!(oc8XP0Tیv]Cxz_|os_3n>oQI=}Osh/LQ޿7=[I~6{_{is -2~ cQ5kǩ['Kopw$/qtt;[so<r5C(QuYw̭rvS9+=:!ϧ]^CC 6ʴ{r{ڴ{wnKk?%?j_z_j'Wx_iOod4ʳH4̛>eFR4}q4[9_Y 5c9i|n~^f[kIh/!׬ctfdRe>},!ȩУhR޽}W?ͫmFpww}W^~'iZ-ݙH% zr3yhfoMkwk&z<*8y~^7i#լemfY9ɦVyNcʟsz=sO1uwݕViO3Ѽ# xS^V5ɷFfU#Y7/?pjʥxUS擵'{z~I<;Nﵻ>?h_thZ敦M,n.]ZKuߺMu|Gctn"|BӲRVߖpu<+sun)ïEݽOgO7T񟆯-е=kzmF^Yk G0="<1ϟ "cU08j:ri^K~G e,^5c+&m~yq#=Me܌_?^yi)+ڿbaX_dFa Umݟ֡*IJu p-Ҕ 1pRܫ1e{mn L]KVV? ʲ"їȻ#ľ%6mR,糃W?|;U<9u;P}>1ur{ Ȳg|~MM2-JLӴF! ΗWm9.|ˏU?}_˪m@5r f4L_8K#yko:mwݪw}u~+NxR &]B=F诣ˆFO9D{Sə&~tۺ?Ԩ˕G_iCӮ^\_F]Yde_Og5c}u:b˭sȦ}кy76^XT>g GtgV4k~7pxr/I,"Ikvf|>_M@ ۲486ҼO~YHq4}SJQm3\G- ߥέ(ԩkk{~=/X7]|M|q--1uh7:zmɡ9-UU|.4Ȧ ޸kQ_XF*Wñڌk:FԵeQҧXmat)5 8;{q4׏l|NUjq9*cIimϷuLt=>8chieosoIM]YAsT]-T3MKg2Ocڝ^ xS%2fhmO_ݿXLO:V㚮5&%Ϸ]3o-a<9kijY%idkhΟDf>oK U5D~?o|IeݥY.UmX|&Ui F\^_y$o{OOU#w_w[Niru/<V_>h%!ZIKsZI]&?;΅rHdɫM^+~Yx I>#]rxψqʩǡ\G wzK7WT3O.^c9ƥz-ӧO{-wG)fP2QkίjNЭuG ᶉ&g]Kk>&_|?IJ`ttM_vgWFiSs^5xW:]^HtYV6?2EdIwٲd^U]/܎%唹eom_i~־=@z4j]2Gt4#=Ӭ;vYdm))a*k<,v%#')]Vwt.q%`nfTl\B|m7I58EE˧5Jm^|[agᫍumz\)'y՗|q2b0 Q*TT-k}Kj<ŵKLı0Y$uoc3~yto_3GzZ^K %d-fVkx$UVy9dtThJϗu U>>=|SG^,XƒYM!KնG/yIg QqwuhtuwٝKio|.ljFJڲH4̒mw#"&?w&*jqwׯNjXӌ_>t闺V_,*6y4I3[2q؈7|5cq7Ws&[./23~{*uU#uG#S]o%}ׅRI%yi5=йU[d&YIw#}Yn߹ܥR]\{>FqR)_ ~֞?5.vbK;8vo/_nL4~Jwe$j~ڥGk{jk<=No%fXlZ/0,%o,fs8uO3qUnW֟==ȯ~zVg${sriL_5֟$~L?]2I*}F4,y}m>I瑫Qr=:ywϖy?LQz_5_!n_{u;62M}/e5K6 1.Ɨq*I[Vi!eW>r ƞ߱Sޓw{ݼ3>aHSF~o7ͽwDxz*v[/M}YrJ߯Vzt;W<'>$GWٮ$I-2ڬ8o&VGwHU Pi88*ݓs?t1|9[YeK[/a&X^XBLХCrv7|ڦ٫뭝›SKGQxZsko.tH`mO4?Kؓlw1J{ߦgRn}ᯌFZN+kvI,#xyFM~r[Z&ןZٯGnm^וϩ?!4O xCYд9xoKyhOM']B_;[F~N4z< h wTM{oG40}kcGm?.]+qZZ&wO?/SO|e ~В-Zm]G~_|0& }^MVկmc_e(kv}`] [աk׾u^; [Tգ&[}cL&Kaͷ&zV)~qzo[oχq_xoVp&֝~吻|76?fDyySlwrF-KӯOM5?XxkŒi/ы|GIkkm >2ld.懠ɡ&ռ4Ol2L$zlh}fM&vT}i+wwV̵~xٷqtvD+j4Q4VHdQl7,[]$Drgksվmzⴇ_x}/[д/(nծƘhdch* Z^5Sgp~m\uV h|0 2X|12ʑ{{wӳ}/~վ*Klֳ< 'as Kyq} n?ק0y.`3[)0l. EYwUi kH/2IaZryinZ & ãFW_i;[Tj5_ k<+qiVױ6ai Kk|M v>syuK^MNߩNI&_] ~4xkVG}W&xz;˱iG{jj%YHmdtDU"禮h$o#* ּ>|: _I4m~Keer6mu_7ݪMo9ݙ/k-Uķ`h 䱑GC7+QZ[>t{ ѿ "Hѷ87*|o=ztEER_b[[ .u.h 0SKG%teԷ{r6F3Yv~fT!UMՓ͠jG=^s1ErMai?=ZY'nEmxwZ^ocmcq#.Nbc[w3o.4{y.M{?gM+%[Zb`o52-yלI8q~ZF,ot eԗ^4'lfƻw td4֏[걫:JDYFܺ}N/ ['OC-!3̭̑/}͟&>cUִ uyl"YKGR4Ѵ߾*@5}Άm^[qq%ڱ$ѧul_gɮOͨ_˗#v:~5߿sKhɕXvǻ_9/m_qï9Xc>"vԖ?.E~e>dq?>FHw><904)&W%=7r~q /pj:Im6ݙYpm;Pznz$l%kU"x|-2,"<{FZj͢c[{\EC{!Yc&۵?Ģl?Q[f^w~lndYJǖ7Hٶ脲ARPֵDҥhDjyї٤_;+:??GA2Stu+KHLin&^Y#oo~t}˘-{#p?֡A'2nnw4{eYv|,qڬ;X}[vF[͵sۑwn9nőX̻* lw6D9ʻn \֌//ʀJ|TsnV?|N3Jq^<9s:ޙ$a,|w*ooT䝭\3#wb6w#F{\=t-,:o%WLoRW3o/ʖ; qX6lk36ߛdm>MnL~vsZ=_Z*z4V*U-R{ a++ ~fgOoi,EBߥQԕ4Nj46ӯ#e6ȡMU=l5;~?1}0k)4> meU1ۥefbO?ZkvB,wnl&y%0'^zUrK̉-GjhWu\7۾O?8|]>Z e?n|?,z>+B,V54aUa>hd9dֿ7)ɺ_>d56dl$ܬm_.N*]1w/kSKrZ}iWLk14w6-۾]s}Ms8^Wi?!6O~Fcj|]=%pp7 ɑ͓NAǿZԔS.u0H$g}qIS>xu/wAaNHN[뛃N)NNߐ:OօO}>*98#}Ő!l|A)u;Lyg{w_y^_kJ39|UEInE2y\99wN8&o<HM]5wA[uqOzju;?Di8wKg $Lr>9z2/<'ޛ$|^ա@g9c{{}FCvuߏ_c&|"iXN1=~T~&|s4w8]ovߩ3 0;睿{o.aivI)[cGF%l"1ry/V){XYY͌E 41Ieϕ?y[ov?\rKvhI+gžsY?g;uhcI>U+ů\[g^3o:VNQ7t}Vfʋk_cōYYT_uh̕9r=6R[|`6OgMg*ܻ䗻WeЯ[hXW8F=k^旻w7r/ O˭ i|Pq;zae&ܓWމώmg7W m[]L~V}Ĝ֕Lk?롃_ݯ+tԽ֣F7yvm"n|p+:=WkEuC''_MEu5?~~w3zXu˫Z?˷]?zX෶K$EDIjV3S4`W_w T*$D}ۆ뱶6}I6y~ޝ>/͟ڽ]IrIl of43X̗TYW_x߈Cmk@[ca?Q7o?> ]or)a%6wN.L`wrۿס=M[w3X]NKdUbvn֎xgR=WO6AΨI݋?hy0ߚG]^)gNu횑.!SӍfn$~YߵP3XuvP:+_m2-& (8wgޢuuwׯgOi߈ Dڵ q6@'݋:U^7jz}?&u:}H<&Ys#e=g3yhFwol!nS񾤇*ّm_2ɿc<4Am?SkO5D)b6`w6oӌZ_Zy/`.,`m:|wRJ[:)Oewo?C yd#/?<>ЯDӞm \onr'KvTS _ Ay$lve2VO:egmN(B-̮[3[u:Sv]!j>&؛PhJVu"O.k?k7|gy?4_wmZߩ!!kXv4r*ۏǵZ=z-J7B;BUV41ݤ/mvo׵O򡺍o/^8Y5 )h .8=o7+'Q6 I4 yJⴾ?Ee$Zt:^7P'/73i0GVecݹsǛz>;ț7MI|co1?*ɻ?_~*dVW_QeFVÒUb.uo ֿ_|wEQej ȭd:?\Q_O3>')%vٷ/}8Z{'R̷ W!eL)!ɻ#)ɿ$s:#riłIdRNz*!M-<Ե[_yr ,+6Viw}b~ue{^LPmܤB>7VFڥtIcݕRifݻk+~J./|SOi2K?_ڒ{Jsj[jW _Kː |˽│J}>'MK2l[ZX&]bܝfoK^d/j+4 Sy~Q{ѻ/|ZxVҵ i m [ͷ?,3n۟7zlhQVo_}wSwf#\6i>Ҷ& kmۿ~/[R(ZOX]vr;sO'F Yy^bh* GȌ?-UlyE_r閰#;\! @[oSU[z ̷md%bS ]9zKww_/rZߩZh2:@ n|ʥ[[YֳUEv'鯝EżH8_<\U{mmNg\Cemx킏+7*&W-͕(_lW|}FIZi]$ {ywzٶE.}>?%ƿ~y6Jx"$.Nw!Nrokc)J7r~56YhOkbS5޸UEBet{(GvD99+%Ԥ؋!fm26m$˽zi:iϿȯggL4 M51\KvY,m+'7/wܳ.kևG֔;}i|h-g'n籶bx-cySΕ}~3XNxyBj\+.g~9|qw5o4, Cs4rG|r\C55$ c&<⒓qWQiʢ}4~OO}O_txpjDZ6sGu}"YtH|9*ۃv'P|Vy^}NKO<5$Ri^𜚻KY[Y2mfr<ХJXM+_wxʂ߻k ]~&js5սΗ$v7Osglo%CbUl-i'VVmN5-w˥e-u?/lfhw1җ׳Jh;E_=J_[Dpꭥk릇y>k?i oE b(t'rIk}m?nia^Hv? $o+8w1*5>O>5|0_xw4oυO^5wچAIKnmA  _>EXNO,%^'4 o[^dHl4 FkUh3}i5Zg%ص'?Sþ2]M=Oe>,uxmKn.kM Eg&͟$agK_Ufm'&dOšf(ImuI<8 ofo]K5+%vvp'5Iw=U5R:Bϻ9;?w }O5ķ>)_U.jxcEˈ·IVt6u3%74r?&gomٙΤw=cgxVw//-h9mn$_:HQ6$7Dэ~AIZZ~ԫ5"R_Z/3>d~+j1ڽc"۸oγq_bK/d~+ٓ^eAakS;ݻy"y߼I}eFrnq~F|_yH<91j 5䲞fhZ9?D/ Gɷ̐TݴӯlU޽Fgů:g[ Yh 5KAﭴ/_v-Sm>ٚ4TiIDTTH7Zvս7U#%?xǏx_χƝkIo4i[ZiuƟ6dD}lO/t5ӿR#Nޏm>M[^xW$~swu;|Zeik&tfO"zv9Q^ۮ[>5 p-[9: /.:nm=H`.qn#t6M);\' >t%Yy8|Aܵ-I<2Ki4l"w!*}lW,0USxKix;U2k$j]mi_ɻ̓9J2N:hQz=C|{x ,#Gf^ҷF#Mv/mugtUixcci⛱/ gW؞4|~vp 摩KNoquuyj51{pyryѥsb6,oߩ#KM{O/ۧ98|5ƿ|StOShm'TNojNho&s$g=zxdOs*ϟӥu\~+;Xmޙ =Y⻋Rz}:sv/ ^XYžO?2Exe(yVgn_~_x[ D; 9;c4amSP[%ү٦$w%婆W׽?KZp5}G^3k>NeΛkZkV~\?RNXڤȏf^dw")xľ<9imes v^,qs ¶M%IqjQV}R"oM>?e'ֿi݌[~_yh'ݒ?-z oJ|c̾>|eaonn[I-խiۮH-ռo HG G/+2եvq׺ۯ?i6zk2[MsƺduK&<ϱGgr߾O.-DLwwnBK5l.KӡIWXf-5!G٣ٵ9VM7R5Us/ |@DZOQ࿈vVq_mB̞d)&=7nI>zrWM_⚽ߧ|o S?tK^_^>+j]:[[YeX,rj'ɇ$t7k3lfo/\t? x~dL[!.IaKg˒Ox#k' .k]_凁9/Vt,-v%͊_\f*+maɆ$>ya8Rj[E~Juۊvi[]w7io|? Bk;3o/B9H{9$}ua8EN)_'~ 䞿?olEiqx.!Kɡ-伅d̺' >͕`Tj-lCE{sxMf8侂1,جZkXw$-z|[XAkYu"Z4eUd&MkHHydBȟ~nn=>>K_ӵ x]?ʤ_d??%ImIXt+-7n͟gUe}_{;-yܿ 1J :Z"̭3{?? zoXY=cRftZLqRJϫ$MM* CAnd"FdgeUW;尳z7}!cgą>]_C]n:bM%aCo&]kb+}/dDg?#-*in2 8g7| <;}ӧJW}37 |$JѵDi6o\ ")|vsߑwYoYξyp_K۹!̑_WN7qi3,̌ûg^߹/8~2q:K+ku|EVUw#i]^>p^4eukq,&umP_tTe~sg}}u6,*:L[:(3~oS2g~d6{% v;piom/3nt;L3 ?̕e(ltg|' ${Q^}>}f2qq3;O=w~ɬܣ9<ΆRmQJ\J /^ۧc'oT,o鴍#Sw./ad ?c+H͹N7!?oS^U:evO2+ge(uK6i Z4Eo&qVE?"gM/O;iWZk#I$Sٚh,wͱwYqމI-m><)eKQZhR6hմ>Smi?T#4{W1Gmco K"CY <#Y>vmT]ŵ_y Kiej: "+G_gpd LϹj:ê" zV[[I%-b6icQUm4`qxŦ=;<7uBhu!UF/eXfDݣ4WWO~+a&7#5ٷ7SI7F%c:І֦Plg }c>Լ9}`ҧ& ][L*"pY*)f߼ ߛŠm3B>nJ <7)/-m˩VmnE4owDۯ6,jv߿]J[ xKI嶸΅dOu+woI#Wy_Z|>^G d{y^(44:"]QUN]7&8O^!FMr}NWn!}E~O3gOJSDҵ=B,c"RHWc <VףZTG<2}*S_ջy_XG.>%V ͝EHY}k̐xGO{;_IB֍Ӟw<)jt싫:SHmmm|>(`%)]z骿*5vnunG&ێCVk.߼wk$kMU֚5VtfuQ~K/)igve ~y?nVk}COoįŸÇήeB\(;Yr=_[A|2 Н8h}j=/}{~=<-}U53Yk׊){of[Ooqy Fx&fI?y?rxstT*Sԧʝ?N8|U(ʝHKn?dI3+y6 f~DZ~.ߟJowG 6:uմ^ƭk:$/k&\o+T^Di:ݴS<]u,kl~%lRҟ̍SxgJ}W9q44grb@Uaoߙ.ߊ3Kuw-D??qŭ)' C{1G2wʭ' )mvʭs@Ivu2HblJ|ٿ'v%ʹqˇam@¬^?u@p^±Z\2э|+om?))K`TC %üh7aY_EUfOlN)zOc9I=g:MZ; Zl(!ffo97nW¹}_ץR׶'6)ß˸~~׺~8WvzK7k"O*b]d^6|WIZWw߮q)y-#}G-i^Z{lٷVk LM }\c* ќa++}^F3;5hIkkgxO\-Q>C?#n湒UvRʰvP>-DޞI:WOԌ>%sLKuNYdP͊'ܯRB=ZFrSgYs=y߷_̫=nvNS :!ĻO\R ^+,-,|`夎v/Ρ%r|FM7[-g 0Z]zg_z{ ΓG_FR(6mFmyg2;yOII44#NVg]jɥiڞui.摼W(Ko~iĴyu8Ίr8%?_Ϫz񏁴d汙"O_IZt5jF&Q՝=O?7_2æ'<3Q-FM.IMev)}f}m7ֵ11M';z7~ Wiqdhw2 cM1_-Dnm?nkߘМfz.+zt?tkP~4/w0]\Ŏ7&yJJ:<8]K_#5OjFei QΖOeQ4V|ȮW}/rR}Ē\Awcx$iIU18w2W\+8};*O{|uޑ$}Tha7fIQ;vK̟ڬ7uFIyqmm%Oivs5 mwsd[5uuΟ=W#I'st5W7-h ʑۣUmsJ)_\Nvm}.yމ cs{o\q` m4mIFy;(=u=<')'ouzofy<;݋{V4Cfj;Oו^k{?Up)|_ӳXZ'I{q;~Cv7?>+Y} D[U{Xlֽ ۛGXL NgSk=u%ux{o&e[ܧQ^% ނ:>O%{~geL&?[[__&M:42]%jk2Myʻ䷑&wꏿxj\~.#R8[_0Z$rbI--FRO#[ߺ7V~MدPe{/7Z9M}?6Y^Җt2 ܉$vǿz)p%Sz/Usz?s/T<^ bfe1Eo#y{U7/4}߿޻p:K?T^9k璓Wv^F?"xL# Qg2Ī_N-)Ò?]Vyuy֟ij>kS7~߆DQ߲Il՞ɇ ѯ7כ.2i?zÛ9.y}U]џ_~r_xX<:Ѽ?7۵+dit>}4d:I$HsxV(m%9\MWOF_.I3`S|r亅uULο?I.|^{7cԮW[opu;6~Ϯv̚'k隟/(5]&JҖ4MI*C#-$>č?JN!{>_dCJqW}υ 9x_HOi.to`8a!NoY%ܩt6弒ף_}揥--ͽC0s2[Ə,,vb?MХR]-1|a>tv="{PKYbY^yȪBZC/鯲qqNkxG/S|>ׇ.4φk{B5iƶZ{cHѢ $k& >e浧K[:N{[{I<]Q|?o7\\v O;}6yClٯ{w)ԜN3ӗvW5=6z]:=dgP!~y}^ u__Rk]3L4;N53gXhƣ lU{;[K)H?gc)I4qJOO~,qT.&4h7ptGțc7t+/?1kehxVz3i(,b馎7x̏o&J} :5d~g7JY'Xv0osa#ԭ%s[yp\[+40̈[ypXӓo}n[|N~k#^ 2ibڄ7V7Q^G}gsF;c'-~g2=KG5iD7GbnUگVc﷏e+׾׺{ oCť+3&5|P̳\C6s4)mqfߩ F?hcþ`#ih:j;RK535L\7wס*i-5Ss3}mලoggxƵ8CIqEU|YV7howW~y~n{fmƫ3[K=ޯl]44>fe4̫6J<9hs$FCq!sJTY썤Dڛ#:+ ?S^)q,,YѐyeuN־gkֺX MNg:HMUf[xHҵqT99u=BFү.ŠRQwGqd~wg*e'{'Op;[Ԓx,.-VEy.ʺX[hE/v8w0ckmoϽl+7,vU{oqԂx^6bG?)ZMVboBH#?>zsZ ii|buK}dmݝԜz̶F0f22#> %Qˈ݊{?Oz z|s:. e2e`+-&ߦ S:֙}>(ŅqI c$^^ݱ7pO*M~& ٟP[&lBϗ _kZXV3+=zm L.C?wzm]^,ٯyUO􏋖rw SWR?g׷}/Y.¼eۿtFp_gMkI/MalrfGV>_w% u_תSMY_^w"|܍+9Ca/y=\>Km]W7"N I{ymevlJ"W|?͵|ʻ6/$;S^{/OUڝ@d):,P7/ooxƚo&sm}mBe ay^j*UolC0ih<[B3D۷2Y]S:Q{~{*K7󦸹y (slw.j?iZ+kйJSۣ5mYsO}MEoo?-Txءq dvoO I慔X!>Pq w 9%6cEM<²*g17˝{[Uze{uFOگ˿_,4ʿ1ٷr|׿T vj77Jjݻ2FL+oӝwM?h|smJOZo]VӥLvHVIKx<>؎9{4OM:?O>KwiU-C=+hw'-ŽȬ7tB%E֦Z_ͭ/Uo]j[ٙw,q ^6)Jw -ݍ>Hddp+?w37Nzby'rWSNY ;$o.?9L#z>z/}NV_twVIr,;*Itjq9f>_ϾoVeiOВ)m%*L2]B$Y&zS=?S8Ի뮚ͺl8F_-o9B:l*kpGi:7[f>|<0,V?Og\$,Q,9";i4ast_EGoۢ[K--lUvh9sZ^j2\e"đGc\~w}~Aax%spA`9ܱtmWS $|5D{y7ThJ8M^_uKIypە\.0+yjd}˳棔zGCSǸ?~AwaI֥1tY'H3$-moܷ|4Jۑymw3H {qg>7~|Cu,B,FЩ])pog?o_Oif{u,neU7|=]c}ȹKy].o42s\<\ȑM$X2XO&w~dKo??V^N>}:Mx[2xOXh%7" "s~W޿M';Zɵ`_,#s3ߟڟM޺apڂG B;JdgrwqY8s?7Ly\&T!;( i?7~&?+{}w׾Cgxf;(<+6A +, ofI3%Y$ִD q'me*VB^Ro\CiZaa؊3/MdTS\ZzEy/_&>^{+A$ѫO;ƣ,ٛݕ<薩Gc^_Ѯ/c'j63|}RM?ԻOC',Om,CD=yJM4Nf}ici=e-z4s5z^3ScF< ?6{kE+Ewk?]O>Ìo?޿D_=t| n)!8o]?iۻּ8ngGWm3q%hݴ8.28^9ʖA=9'OwDYk`HON2F .D}R}y]7(Xn\=yo_rw{Љgv>z){?֝܌ O ժzko?<(5{Ww$S2|zJKx3 ;$_~o^~5Dk_GH?`35Z]iJnIr?ދ_W UF<BH6e*ͫ%}!-frqkIjc ߷_01d0?^y=V;O_.mjUr@l ])ɦk0}Ab1#$÷UFV~]Iyo *11oOgޓmY- VϨ%}4H. yn$!cH3U#eW}j^Wm~_'j-"y4]gH}{GpU捤E96I"o tu1ҩK=:rٿ֦zCL I$6 a rJN~XJmK %;璘 5 Jݶք>{KKecoEe5MGBt%}S7JYg\lwY[KFlLw):rO4um>k Mrvɷ̈w{*f e;V -eςݬp2y$wћi^oXM|Yj9Ԯ}}:}jq ݗ?hd[n~DDGvr`.vzt3_7m8W36^Rߧ=mskP~xK{r>=?j//_Ymu6qh̄4;3n_oFGq۩[H$<7Wډ_xoϮ7,hf3i/o$T`T܋rE ѯ~"qMF#AZxTF-wmODѭ쥜:?;_kΤ[wVPt? E'lVV#3ys6V?oW;?þӔ;l{ǭޯTkܸ0-?"2曝G_$ÈRbr62=:nu }UPLyz@*+߁Si_r'{w7J~=4gߋ"#i,\HJYg>3__WeLڗ2ccTUsJ}j;fExZvbvR6B:.e֖uկ5~ VM:yPI?%~5_iL+E]G>}J ?fC)ϾڬJ2bD65&~[߻* rt0s1?jSCm*1wnr̊+Y4Qʄ|Xnw4'zTrvԶGǹ mac7 $dIW-Z[KvbEwkmV-2$&,v d{+|^F;2}.^ׯQ;f/a9?vhiݳdGHuI K gsqE݊UWoK)\jq˓9 jҶ̷^oK$U|ˇ_DlB'#-/C_9Hy@ه;QʭӊN-nV3!wЇI,"hVCcEUCH1ϝ{R-7Ԣ_[Bҫ0 Yv]Z%.2r]L'G&"N Kye$i~$_T m"T`TݾHE6[_ޖCGVN_Z#=@ Ǒ^ۺu~}>sb.,fbfts̯ݬWw֭a{1Nv?Û:vՄɱWoq2oͯ y [n&b][3o__za];Fl"PFԴUS|̰~w*I32~xUy TH--#᭬ݺisFv"ϖi$N+_Un|Mckw}uU-zi&]=4׭Jo *\ ZeLᛜo=_3ǧ՟g'E🄮t*.&?oFޱ>?jeߗy}Ì3IyJ{ZM/|[{>wÖ_^̞!֠>h Ib"4JrxPv|j+oZ.mCoo?}?VS6 u?]Ia"g JKۦ 3I4_ϊsKe_IjGyLƷWDW3q24?v6V}JRn߹.ۥxO\hKk8#T +o^6yydG`vigwFiʺ\6v$oUWٽ~zy_[X4_N4^^5RӅ!fv߸{QegY⮳_?Kw@ӼSO /5ŚNhiYd{͖~KqI2['*5E}}iF|\o>5U{mi/.<1+K_k&3[>5%~ g̺Sh^R> UW,׮FH>9~3|~쮾2x]w¡1/,,G輚i7IP9m?뮓F_;uxXESgg‰n {kkWxUxcXXcm$?{_eʕ0~ZMI{hx5)7 [={^$յ?|=7յ6i:uy/][Ʒ6ϳ|[7bh+w_:iԔQ|QN~*jw='0xoWkOiجt#? Ҽ޾VJͮKa]ڣkr4ɺߌ<[kY^]}9G95 -Vk*Qpk~u hwE?@jP:[~.G6i͖K?%d'fT]_bmo$ϱ?]Y܅J`;`EOI>M͹%_rǏ|oxDS>26lɷl]rm=](^4ч5UxiK-̓r|d[}>Iq4^v21x·0\5Z%z4w2xY_z7;$S ݷ~^?5bLpK 8^K8|7^7x=ǯ}~W5!%{vS ØGmZ[oM$yIllwIfBvK]ݶ3TU5Ui:);=b+˛M:h]6Q8f rjlIgsk\6:|]o}]S^zkU~#hz,t xJ Y5{XURLdoFd1̛) ]l?𪨹4>O|=xZ|,Ԧi%-#t=>I-.-|3 ff-y?r,lATjR f_u?_ y3D{d(:InGw|IWlbyӭ9km;u-VI^y Aw6{Y,Ŷ_䮊P0nmFdu^*aKP,}4;lqw-!fl s? ~ɞ V>Ki,]eI°54]:Dyu!njʛw!;v-ZI&㙻4mJmN nZBW}if 2ޛ}&ɕu:?jMי TF':ŖrKmӧ0%}Yd]sy68>uSfz ‹~W=g|t>#ҌWF>Ūk|^ߴYdmϳtܟ~9/;wyܛ3|#Iωvz_; յX$_ &{J]涏i o&L"']_1O*3 Yi4 ѥZQ12ǕTcb8$)ׯO"p%nܫ"tWg8]K|I+{^/ aNVƈBcVd~wJ)Yx_?h/4xTK=2o6QG$ޕw}0^|?[?4,ծFD#L~淸_.K'r7Unܿے?g~7RWgQ||3 =:i=^q.ՑgGP\kɽ?OLJº& '^M1\<#Vo!ҿvhR{oC^MEh|w ɬt%aL6i.VO6 ao3|7Tsj:kkZmxxre7"*i6ěsҲWqy\ۻOOY٭5[>ܬ22+n]z9Ukc9'w$ϱyntn, %HeY?$oDٟ 2׮trM$uF6m_25>y.mxWK& ;/6M"5۽d]f;; yo5l */TdZpc|iX$OݟF̿#uo!-Ճ;Ci,vHLb, 򴌛ѿ5lO^-Z= ;Z5 WtWV7Q2E" ι*ь\%(>eO~T~k|4%>"^ͨx^;k=EUYt[Lk&GL)47߱<łtd=CqP[7 sρ> kw}>N/c;/:IWOWkHVOXCxy2I'󻻔}ַooB_o>޾{)Cj.#F!I5[j2C%֒4iټ,aS~f;z5GFj^ [[N&M7H-.M_g'Ԍש9?OQuIOQm.F)D*Ht&$߽9\$nM_WAui0%$&EkH6F#%T ŧog2xxN\jM֝ݧu6}Gљ7lM:sWJ^&o5ݶZ^j6.q:KZ(ZIF33;5kS~ϩwWfdwDDdD$$=_\9ГT ' m?1c*.Ass}4Y-Yة-?GĚV< !Xf5Y_-߹}vlFOttV6 &kuMIw̒4]-kN_~ <&K{Qv..KEm_1oϹSM?M=MӴ[2[]vO]MO"kdu#_1Ǎ(khe #*xߴoҿg(v~,_D;fIuNfG_Z=cY;_o-"2"mm#m}$5JI#nݜL/Y%wc^yy1%oul -Z($l2M"y'f 'w:hΖoc]D$_r.{;w"ѓ_%{U^Cb]VVqѳr#Ͽ*8}Н??@y sݤ2R@gLc27ޓw_q:ʻ}oyJin% f@z5oo~U,{}gM/k$)ix"7l0_=~9W(6ØpJY"<QSm0F/sD_ik/.x[heVk4|ͼ"fooCոW~B$`k$ Xw߆ {%nKԺx ;$fˎyM2DO#/W_%ox7@c^iy""hTO*KH|7Qo+yÛ_~~zzo>3ZEΡχ/6 4y/I#,fIvG"Zy=%NmԞyE~[>GTUIj^5{×m2Z_ZiHCoDx8GwlDeO}OO \=7~x'cx3↳ߊS]k1ex:^ s\[ɷ\5~iVI.&w{Q̪ⷿ(ԗ<^~g/o,5 hƛrZu͍ռ9!-d_Mne^:='6Z^FU'vI/ӿzp]po_+~6?lm/UJ אַb ${vVdm?{N)& _{:rzyc_JSҢNm,fqtCg$7 7ߑ+T%7/H{c\*$_t.ͺ6E3ƿ#G[!4澎zJ+Krm^?k&k:Y7-n%4k l&I9>R(FI6׼k^B*5IŮU-_IھH&ExYQ~hcy~9߽vj_OP֍.]' M +CbI{uFiiblG78MGBO*ݶDhvڜ6kYMhT>x7x4|Ø{Кwӿtz|փK=>o8QmF89(o̙_~嬚^z0-~ՏMALtVX[nW*6L{"qϟΫ;tZkߥOƻt Y'[Uu_6b{rK%{~XvZ~?z$7,R~}|Wѓ?]t?Dm(Yfgd&cbϧjTd?_oCHԌC5&\[gUܻin\iֵJ:nmRkțl%VF6oW],,|iVM~zfbkm5ҼZ@H~(D2P9i}nK<Ns߿>>YfMEIb)Vfwg__pJ~3y|iH|W]vJ<.__7?>~:-R9M>D63H|Ѷ2z'V]no;F0澫5&m HnukmB^I#"CSֶH&E]I' ԍFcffHټgɚJ-{zpܑSsuuW.x7)Kq]űx\)ȹ4b|'7Rwwk%;N߃Vwu^Ѽ/$ži$&ƹ[gɒr-/󢷗JWN}:c+Kӗ]!045{ݕuJFKH>4̛W?*WWzo|};Jӭ&mVgD4M+/{#7:;|/{~oSm~ҟOtQv'{tM:)FFAvlj؛uQohe~ݿwks'D5ň*V5\ޏ]xJlY4X$3-v}HyrR.˻ <[?Y-]$Ԭt GrZj6["'>\n?fE(NqAyMK>Kwq=)rGHAGYeqb[MvS~~O$~"ѭ汸.7I6 ,VݶM6noy+$_I^K^z-wF%ͦo$T Xȥċ5myXQmv_P(GV__^P湯is9H&]ȧ(;va>ey%kWHMZ%' 7ᕒI-Ϳٹ^dnөRoOt{z57JD蒶"RT:nݻwO RQV׭:)U{~OOAtZtO 2 GhY~$32oDkIjlV5L#Wwow|VZMλx,l.nTUyڬk7Ͻ_MFoZin߉էZ5`}?E3K7G{w۽N{#ly?ʵR|t{[ϹP Vo6~ƺOu/H%BФɎHV7|J*XdDQ_j.X_3 Յ~U%kGo?7lѼ/m_=2m-xmv8cF-T3yuxAI>}_l>FqNmkמ kb[_:G܅O-M2ɻc_:5=zxS}zv> kʣ7l[^oO_wWYoL!7J$V/߻] ke*Zћn쿬_?770|K$"mW}wmmaII>HdWu:hF_7Sq~Ѵ-BJ4öuM1n-Pk2RhdwHtRDޚt-|տ\MohZzxsW॰Ft6OVƺo&jfZnUͫ'iejJ[(Q|2HӵJYe#^ӗ3L|.5)Zj æH̗]s4θE=[[¿.|3ZS _ ~E#hdd80qgFWR4/],2Mikvnkxn了x6$39߾r6M"'S]:>Lj|j U|^\ç]H׊Zſy3dw-R%i *+[q~_]s_'eaj~|%cZ !U7K!I-p$]GÝ+߾'}_1/Ic&5Ŝ2y$G;tA9쿭|ɿ5#돇惮闑Ztb0Q&Qܪͺ]qo~$bZPs"/;_o^sIZ˿\ebk%\#Eaqf0%J,IO49-ol,"­0om/d՛HO>:>3u-XҼT^#Ӭuy"dرƗ/mSvu{jβϧ_٭:34 +$wCto;_&i9=?͒}@4%{HI ̮<[TdHѿtfog|;J)[=ztѾk[{WmѱdqUﯻS'w?܊ 3?+ukH+.۔U_zvHd\?׽t 7c0W/Pkȯ4"'aNG;Х1\1-`76P '15-dWʥGj ƽ|/(__.7s)Fi-t?,3_M2],VH3s*TF߻|dY/mKvJ[Zw]9_slQ\JJF]㐅TfX۶nSi8ԣ}d}WWJ-}Eѵ(~WdY_^= &{zd#$YSm #<Gfm:fGZӧ?? >޽~Vϡ?y_mCof!o7ݼy#.{,d't?b6·c\vcm:ܳC;k }'' (+oJ__s}SC,63qew 2I$tx&[z)>kPjHRVDnq߽.YwYPi^Ѱ#W ~h)VQK[.!2EҪukh^S MLm/i)_c{̚h.&VY">Y<8uܻBܻ?\ߑ KT-ืΧ5;$I2;~Vd|_;@Խm(&+5m#nX~oEksxnM`wrp772C4Ofie)Ӵ#s%ڍAX|ƻi{tq1\xݷ.2=X7ͻhm{s53Il˨.P:6Ue݆Xl;}j9ON?%Еqm|qOxmfC*7ھ^3M?Ha❭+Sf-pw2{mC4PVѩxe]>V[%+2(t7NI"K人KtXU q&ߙ/_gS(6w_)]7T;s%eG$U Z1)ݴ+~}w\-'Mb#~WbjiEe.`fEh$v{{{Dd(bMϽG"ߏSfdkڌ=K͚+ȶmVYJgNj=7ylLOuvG[|rJC&6=q>D?Kiռ/CN<(HGUx ~oiZCu~+LZhk 北QYnKi4II}ē}fh`Pv65T%iVudXfUWDd.f)52W^} k_i :u;cdBn,®oִMۯ6Σkz?{$ibΐ"w_7y;^(gio$UQ-#wlό}*ܝ==AE<^U w~U(V+]u5iu~U[j?'֮'-Kvf14bYTn]6:泔{۽3ROԫg\vIJ6P1:ų)֥oꚵl$4䁌3<[Udv&cN\Y-fR||ב|^\N7{K(*9i"';*IێPI]7/ݎkqigydG]!#{JQ>5(쮽 +]/G(%e,k-#[ƪα/;؊fϞRN?^㔔U!q4u;[QD|YBr2o_3&};z[O^8.)g8ZM=62Jd~ِޒR)8,Cp|~~[vmho淸LG$B7!mq&nS2b;y 0p2FI>cD2O_}_A}.ť-bo#1O-[orI*.ϭnuo.fK#U{n)B\M ơkՍ1_o_eC[;'Үn'KyΗ32y$Ⱦ_ʻ7_o{kv:ӡӮi0M'|EBľdr;Dk&%Aun_? . :ĉ!1U_ݴwl\NOJEEl.HGYcݹF]? tr$~SMf{9fc̘Υ&h܊6jr74MKim?6\xn,,~_w8Vûn{&K[‹- ;ZduYU6׿m:ͭ+_7Ο20vP[nclOswu>x{JL33Ub~UR_;I^x]6է@FbzUߦ߭zYyZ~y;%S}fOߧ72pNG_ceFxUy/w1koYmXxZ|'bLQ~\BΰQ6>cZӥm*Nۿo=)OG|=236@rƿ7_9w] %jŏF^zOVm!ȉAq#Iee8{gCG+y"xZH?柱>KMo-QK21E|·Nye/& ;]ȤX!}cU8 m~o-9u0x7~ʓ|CFegcǽi k|6`P[FHc]ەYOדZ, k;~#&K M7YP??̿iI;?mx6Bm\|/gV|[ ½G<pnk/{_ñ+) ݰ77>9e}Z3E^/_% <*Sf#o7h5_ó'=G;`mr}g$wQ z,C__*G󵝙ޗ Og4wn9ӭG̻2J/Y~&RgM{OPTcqm0a8S_͝ __uj.v#k_7;+|ŕs\`Zvc$#6]HO&h;dUMvueY3}N1}YitGPoEXA8^eofm7_'5J׿.uٜxZ~#GKnf`>~n+uE%~}O;쌙A3~I'vSq~/Œ4y}nJS^w2[$޵"NK䇋8+=3aLN&&fvMANlOPx“)~~U;\{4e)fX;L3tm,FЬme{?_Ԉӻw+^q$_ss߼wZ⛿B3|E@Tc*ee_a.Wg]δC&ݝA"3g9Zt%d7ԭݾ]~E5R)Yw%(f_Ի|P{Kg'JӤ]Anid$UUK '4U7Y% ŕ3᳑}wÔG^Y^kY1WFb6=:'ZdWM*]~^ ԯ{K&y;k6Kf2?g{s]tO{?S%-RK uh9$ ?dToWZ__o%w(>rsz}s֐qmunO^6U$c?סr7;}WI}wgoM&}Fw66,+,dkR0ٿ뗽a=z?&{n$9o'H]OSuqcok-|Oݎ? 鮵[ǻۂc~UUWJI_<ʍ;ȱog;mNgsvAِw^wfn2Yrq >_o+wyޓ]*X^aI$#}\ZSKg .kX us>zh*\g\|M% j~!h>Ywlܶj\kXjIͿJuO %aa8cX_0/yM-~ xYѭ^$ZZdmec]}:t쿯?a+ofؓkl"e霝kzTՠ}_.֚ix% >a vwPo5 o8v&if8CW.ߗΓͣpH0d+y-LCk_Kvs4?Z}ä ylYnV?$mjAj׷= ?>ƻ➓=* ZQ O3M6ɷN,Y+P붗qxwO4ae^K~inR>TsJD,IF-$vׯ[t1Xj{7$>t>?_{o|sA4M+^^hzLp]RQ2COug4^5 ԮͤҔtw\S?iI+Kk^Xoh_fOx q0?n}|i 2-jRM?&{Ćh1>_ T]>񋖳Z[_ykNJ|".ݨR= 4镤c;8wfTw[Svt}]To3?XA}Ə(u*k YiZM4ո՚?YۺnRd|ˏh$]w{uvdTh%Lw⏊sj:>v 4nÞ-H}cMᴝXM&4*yȏ~%}.kRuծ?>Xӷ^Zo :Y=ߌ79 cjm5֙p<9V7oݤh^RqYELMjt۷~:T_ {[~/ohڄηY:igno.qڲ蒟DrPHHŵ'UocOJ7Uz`x{@V4iVz:soD6!?Lގ>~Ⰺ˷oԥ6^_.s_?g'SfxW➁2Q@4k %m%oiZ5y0ai;Z2';k;Ưw{ .; _]| xJGִ;?Y!dogwsmJiE_a95;>+cOEi/O49>kƟngnRmfUėoWX]' *z-WE8wMhcϙ{Gn$&nmͼ_M|]뵾1^KOi[ω>|-:3QQioFxIv.}RD ^/ 7NkOދg )rJ[՟߶7˦|4ү?h_~$ZGNn85MBH-u+I,nc ml߾GHGYC}'=.=5=8(K}CsZW7%ĿOK=(oɍ"$:(|cDHM'kNG^'.eu-b#k~&hϊ<#t䵴WYbV6חZ}]! ;qM覣?V`?韠h!ӴVI-vAme3Y G jgc|k6_s>4ur^|osqyjj_#?~!\6zxOMX\AsIIkmIofdgh;I5jvMeng[[Y5dމ$țDE55̞/^(W3mi Wᵼ<+ukhZ]ۤwY&}8HԄ^MR߄ > N lZ=3MuqpU|mC8FMVJ׭@d;?Z^^UE'9KUG[;YYmKz}^_MIi5kvXxH9 /c6%+Gj]6&57jU(oӯ*hwIIkO^־!ӖXmgUIՊG}ĹI^9f%]:~~>IcP}s@?C̷EO;#M4n 7ɝiU7w|<9~!k|ws1j/>^CaM}i}2]$k^QrS\ߞG<^FjQ`*7ı6͹ |5 ?>f^?OMvsq,vxUI8/;߉ZL{+|5,=-2$z zGfG& ~z|pi7w>.5_[Y4}p\lg5W.Gz9m=_^j|oO+uE{MҼ;N]鍨Oiy[Q#CNŒ~&QGwMcfeQ8uuI:vn]z?B1.?~#{M6-q[G okfhVݑaDD])/'z}旝~yxPҼWr@/~5xk/7U5*IM t[dnNtmݨ3c⧄D\܏u;oвȚ~w)dWU)Qo_aqNku=_᷌H^6Mu ^0̫i. 5t/ÙDAM(ΊFI]}.// [[OoG |oo`]om`| Dk4ە|Gވ"ٻOnB#Pu56n<7 5ռߴ\M36_uj&w~Wb_qO~P |c=Jŗ)g#Y_I\Y4r:"&_gIr$UZۧ~(n }&kwq|yR1p]G//]uLtw}k2jV)w,Fk>fKlH|c#yj۳鿩u4}o,6i]2Ydmʯ'[˧O#Ku,4]#Rԭ%,Ho9;,7C1XhlK *ӻ[wQWVMwn.z}f?I#x$G#ozD=n- yʻ#I6YhHW*ܔWS׫bF-$'|FmR w~:i>gg>p[̩ɮap xv~jP ?e^?zqo,Z晠Ed5:~q"\YBЯrr'ETq޽}|6*'S܍mgsˏG^_k[sv>%~ Ԭ˸3~slkfg9k/ww>z)赹4cQk=Yfao FP¬Ӥps'D'_ow0߻V1u]zg4:6 RTo#N5f6mm85~e(+k5!{[*HխNIMc~rF~ܓG$uQwMum^f.l-۔fEv mYWuo{v?s\B.Ke)wyL6kkdiUS$,!.6e;n19Mhq68wUs=ω-k]Eqm+!?&eV]xAeWĮj>Z% ¿7:t0:\5썙UZo:h)rMt:w%~?Ě|Im inIq$o3|[~v* I~vyGQV۷}࿅)DwBS}έj#Co"2A|,*m6ټ֪6_u3{쿭][EÚ_oqXǧ,Q͆mo$u7vw+]f}|xLB cA5y#[4渆;(dImj~&U 9}WHAwmu{ K&mMEWcޅWJpR[jLj4-Ϛ?lqXx.]ܷҕi뉡䶉':Bu{DG}~ P(4ycf o>(t{g,]7h߈Z+ 92ɴp?5&wrzkhw6^#[ %H,l,WE>_ɹdO\USwm;Ld|ށɩ| 6pUU. 1G߮*Zo= 3-f?靧ý7i]6Zͨq?2-Rs[yo)WO*EӭO y}]>=FѦ6XjV+usRD$X߹TVu۱-ߋ |WiƉ1'-K{X3ǜ/3HH5I7;?4{⥋MAo5ynw~vyz%krn/X_cOK69мK׶mtxWevl;[F&E?գݔ̯o =u^}[}u{廑-.]\[}>^*ocm>82uƭ߂<_iV&"MNvC $l~oa?ΐ5oDynOj׺xB<.٤eG=yy\N+\!~6!XU<+-}e䵊{fVh[$;?:Dd{Wf'Eǯz_|GC#>ԇ|I<^}Oka`mڅ9mp4'l~~{Uu;`yɽduOoM\!OiU x%OFX m o5U7&ջAs뭺OIjMu ھ9wn_U慄4=w33n5EYE%j%nMr?7?n^Kfs+ȞR1ݺILmY?֊1~~{&qxUY4xn$3Jwv;֐ܙ;toe/vXml!cxUs#|m.9q&[;BV["E$hrU'_5bm?M'?~_]~nBol->vkO:xZ.'ֳ_g}_ŚG '<^3X*^Bl/ΑKw]Skl VHѭg73yoqj-o>^#--m/,@G"Y~w_C>,-oq$:4 y3~zyqC Jq_ʜ?}3z]ZXVN=h } Kxeנ|f;6Md_fS }],LKNSx7Ꮓ<),l5j"M5a`?-.6d}u(ۦ83u=GQ-JF7FN7/z}=~)~s5b1=66WRQh̺҄/G˩tS65}_Z9M!9?w"_įigJ4uZ%v_bӯ7;9Ijyqsu]=sqm۱$d,IU9{xf_㯌x.IJt5Vۧ-nySǝk[}ooۏ-W-h*w+m!X/?rWx:QQ=,|\ߙq$fyO2Y?lCy|#:iZz=U#R7bE\[*7#0۵5zu`(=:|߹O;/9mďi3<ʪZd3¬ʬ?s2g~UÕc/߿uG4%7?=q^]GLo5{m\/ UsMBк{뮽SYT|saDZXDhfVdO~:)ʣVpU9*O/=ψ |s^XVHb#{ܾXk:oy".aNCoӗVm%S_ OJоFL~fdqjwxs 6ڌ*Nɴ}_/(ݸGOsU_x&&R@dokd9,u߻~}ne+q9M<gv}kJ7YN~߷O;gA~!Xg7 9duU6k$wZQB{%9>}Îf[=.҄E*FK|+7ֱq_3=Z??fL"Vخʪ+~ֺ#jioÙLUw6Yu?]i_m-m%ɒf,`pn<-os믙zmbw\/_Q+I=Ro_'^ YU$iz㊌<}?uSfe^hrM>9s:ևo]f'{ro}z ][o]5(xoU),4-^M$ 5fo&Vwnߎх[/7+kTRQ1Ꮬ-_ݬ6۞G{lq5ZN3Oܕkk"7xSYqY4I ʰ7$k;Rkέۦy0Ѧw__0][}MӖ;p\3n>bomsf_ך=]i*5I=nYr푶uƬvNTf+V-woURCRhVd ,T۵sekSFztI8侹ݶʱɝ>N>ZƤj_OtwO%5Nϻ-ESNaC?FڏAm*9;=uh汔{}Sw3-ԿNJiRޱ}W[*{?r)U8?/Ղ$[ Y-\n`@G&?˚ݦϲ -==:s^^&6OGxmXmVTvI"w_&{en{'χVg;iod⹎b#|rw'_etUNtӸVJ Z:۩1"(!8To߳kɝ־zJ*I6_[KcKo6w`C(>f_km-&zRvߩNԥ~gǫI*`>c'l[}ѧ:K}m1ҌO]Eؿg-5;Ӷ7-m$_e_ϝؽS:RO ]#Z{D#hHl]0~/]"4oم(_].~ x-xq·hP/ڀ73sr>ax}WRӯ#kGy[D$1[-ݾv#~oְFzi}<ʹڌ:?NжWY\$,*ASYvZePQ.u_XʱӖO}Y3v]4{B7FEoMexv~S9j7{ovi_ڲz!ηvm nL6{;gg IC^8߹,-ϲ<`}Ony\Kgͫ$o#?g=]reN]ߞoV|MKP)!WT,}nGo._mO;_TCsڮ}ޖ|Q-7k%݈K[y̪L|F?3wAtݴ|xt*7˯Z[_?3G헩TGgMR*mDf~pȅ{_%2EOD~geܱkS^~z?lZXʲjS۾iv~'ښo%BG :'״'➡G|ڶg|Gf>"|NmvsbV߭_׹}oLl5ڽ3I5mvqc'n&vOxMy6/ּ4w*no]u_ L*歬PhZ<]Z^\G46kuWnSy~r?Zޏ_/O?sϞ$ӴkI液3[@%ϖnaWeŨȺzOfoGtN_/f޷)G^.7|EO VN˹^IMy?(6D!$o__'Þ8|;EwO^]Bֲ&;r5ڻ|36ٿ.r EM[{qkiW2޷tM>O[w%VPт]G.__S6z[{Z.<rkv#+ouq:&[ʷe!ͪ W}4^l6ѷʧr/~n*֬o{84gZQn-l,줓2*ǺE7$g)O)FosӾ'h>*Qu+\M[mP|S|lo#ƿ3+}<-UIg$#RzBa{>P\Fa~f(o)Sk]wwg%ռgHE;uI6٣MdY6|'m]5܇ގǦjڦyo1y ai%~;ƃWh%`UY̏tn#xݾٟP_9%%u9k]TȑUO3mwlO֨wOgq>8M܁$XzVn[oW/ZgӯzIX䄒|uud|+}|2׵(. Pno޺Qo ~~yό$RQ*mKF[vmꯥo /59kTi$? ?l}~wc]=$iGͻn߽'e8'N0=##㳌s*寧^~ɲaIIaX]bf])S_Fz-;~o}eK}WUtkl΂3D7#gV_?Ŋߗ:x[վg\о/KwMKm";TvR/ݑw&|9Kw|_sy:oῒ}E?.kxd9nщ&r/XU5ݻ':OQ7zt_[=UoKۢ}w>qsveuM2N$}7QL#K LJ(9֕7*tgn~ wry+{v/?H~^M+T$XcDqD8?15Ԓj}9V֊cSU>4§vw4/͟7יW.tߩCeͿz̻4 qv+p%F wXy뮿4B9Q BT+~OVl*kMvj46+"~m&߳cZNx ndkDheRo'~6Q'u"]s!Sn;bYl"p6UHʬ~iclw؉/ܡů5D֯}NF-lpc3 Wbeٔҗ]>廿!x/)UQe]1_nUj+cim'xVO!X2u{>uޛwLH̶1Lc3DMm$IxioOs[2-Υmb' SO~5<=LEVk=Xkw; %g*|ɶ߸zr sW"OH`H"F,y{??ﴧ &"R~_GA`i"܁1jޥ+wܣs1FiJn/1ު>Yv5"[颿Wh)&H 7olZQ숝D55亍/؎cJUW"grn/g+z׌| wZ ϞTͺ?ݩT}vTe%'y;ֱ"K{\{Aコ=MGvlaxB}ZURnWPۍ[o2CFj/f߿\d*N[fxJ2\ۉdM3jWn]̥%MBU5繉o haҮ!6In]^7ڱͳw>};oB9mT_s?4urs(hHݾd"d6\~4h06J9Ww Uvܿw̥W7O>:g[x7qhѤ_iZA_w{3.~)e'ڮ"ps%€w9$|"_?|]y.,o"2}1 _6Ff̳GNoȕ:/]}_c/];S`N4MB+&%17١OU]~GO|l3Ӿ7o$U1YsL}3m3yjg.zakO]\05[[YpX.xÄf̪7g_O:-w4|oͥ/fM=ٛު?~ʞ۽摩|Aу .W6ql#7B; ;9oIh9-Y4lۿyUؿemN;ZԙI+AMUԤEdP*8eg?Zsz?K}S^$Hk;iWlK m̨ i$Aw3H Mm_ϯI9us^,O.^F6v?ղy ֽXJXMW^KPYEn*eYk*1_ ?y9Yomصe}{$VN4hQR+hauws}j/Y/E+wڌ2K]3#G?~hϦSߊ!V= vvdžU&yj"~_ஈѧ7Ϳn,(n/=.a*x7oA=enmxmQ%Zm&5S}{'r#KOdzh^~GYMar6wA4v m4b|-6iJrjzﹰ<slͯeu]Ohc%_NwW|{|`-K;KhJԮo,g[Yy=T!ߞ",)ck,pK\M1ƻw|fϻ g5+yo^! '-!YdMYfm͛jpu'¾ Yo5 $}Y侖k*I,+>T:#u ;Oxor#%-lQ $lU>NxӔ}F)~5NjuK{:w0_c_SMz}1JM/~?|{\NWv sEvΐAy76~T;xD؝T%hZ1|Ka{ӧYvEo,qϜ餞YO֞L2rm/Đwr9|ߎoZ45k\OɧRn#0qz6nZ6|&I#߯?^U-?+L,~S׷_*{7'y?k0Hl=z#>_֨NwEL0'!sQyykkKSyuygu^C>ʎF0GF/]L_WҼ=cq}]{{x(gcYQcWfmXoƑ7vv_3o)&֣=ג }֘5fmhI [ѩ ?'I>C@ky $FH%I͆FHgR":e%ʽɄ(:y^OK=E Lpw7d *w"pJ;oYٕUcŹ*})`W+k"Zr?WWK3e+<{ˑZF-7zLߩ]hxsk8ϨuZ,4^?=̾~]Cʧ9͟ś<4Ծ <-?3%֦4"_s!Ti/E֯"x]ǘr~UJB7~4G{T??u |內>z&ZY? ԯNGfO|*}y8h/*]$w!"8 bHߗj?άF!f8- @k\vO"7Ny8UxPq͆?os޴QKd#!~_@)JVkNglpG%7u,X },ǧK/q7֭Iv~ٍG);ï};4mt9a׍0>nϧ9ʷ/[iJ_g3vBH_&Bgll_ze*ZC~IvW3ٴK1{u_/7-O;M/7$}w+f8~Uۛnd`{n\j~!^`,%PO%o~NO2d잺Knr@dJ);3r/Ȍ6 ?3Nwiw=1b WU<ܻ޹cy+0ۂ7oseYZ~?_2曵~K屝b);K Qwmڭᅳpu3qktXV{s8sǟqW;pJWo_):5mujk3\jq"ČҧffYV{~:_fnSIMY׻f?hGE` 8ջmQL>]e,[(_箺t:Zǒ_(T8 }nV^?Rj}Ț]pch矗/ڟ"UZ_ʲr y8hQIOUb y X?-cׯE.JNN׼Cqڭ$Gy!@FuUtO.u0xR]FM'[FY!MFz|ʰt!jw*^v]_VYChג)m#ǻwTkx__nWᎽ)ONE[ؿ#]Dۗ,c:y?KSjt)>>=3u LVpdbܭM oet?g#䵋vBI-6G|TWZzlFg÷ʻmvvY=kW+7b־ӔbdT. 5{TWw< '~j)C,61a[:60wѿr5޿Sj_xJYbS4imfq7幬ZV![^f=gg Q:߄4iMޭK^O*#kyyS󿧽BSս{uGEg~Ԓ_kd]J=>Vҭt$OĩE=~{~myKm?U뀅݋<G,w4ۛ#%u۷`\{^.5&+giq*2- #(oi&~Twj]/]7Rw_VD \hŕwi igxM]ll[i}]t9~-Nϱ{ %]ѢX^ݲǶFvf-wnkX5?߿GEWW4 Sys'oDG!Eծlf}}́|i/Lm,g[o0m76b)B7|r& 0ܭû`N\3{DֶumW뾟}íhv7: kKxjd~ͼzZzwo;w_zq֞{X*{쫱Iۻ Gv]N[]ψuo|,ӭu} Omnm#QFUZo]c}!^SwM˻Ќ^#oH+4 uxwķz[2+p3Om nQtn#_#I}?u6.u= `og'v']|; Nm{/;j3[?R[ZV~ғ—qspp>xB%VvwocgF҇o{xM?>&~^2ᗌkmKLuIfmo㉬>ͱ,Xo'?[ *ʭZ|`-ּI]Ԯ-<oG5>vے[},4GOjm)U#ʴ}o~>{6?.slmZ M"x|O&tɛ[;iui.#DDJx'ߚ}>ZvZToʟ?m[b - 5Ov m94d4-4(:z~?y'J^vCn+rxB-'Ɵ櫨Yi{2$Z0=ڳ۳^#[X~9i.4!hn-iNa0̿'MҕYͳg'U~ ^x߱OOxNOZr钝Ma{[#dK ݜro2I̒z?]akNNo:1K^][g#D_z+/ʰuma){/ *ssals'XH;GvUs{J}m~|I>xo`ޓ|eeеiRBh?fvcp_2:< owNIio;'m?V~~Ǟ1>#Hׇ HmkyJm.to3~gF 4zqIKZfO Kߎ_ք~ף3YiO9vw[nmy=[>-GzRz-_v9J}ͯ>vxWꚿ.B--$$v[nW؏c.! }U%{mkv(Ԓ' |y |4 z&QC<hˍ<ɤX6q+Oi+Zroq#ȷO%D7h[̍[ȒmysPKW%N/֜S#)7uL_MGbqUY [vO3'Zm_Rg}|zQV^o󟍟=kZm4/ 鷆;W7IkP q2Cs&m$>wI;4mƗ>_Zh%_[Q"%y ̖YIR՝ز~7`UW2}^v?Mw~~? O%iowW^zjB뚔vs$:UKXM33I$sD"~/d֛w?V 7^|AV׵eXC1G\@t7KmQ:i|>HQ6rc7MiåiylږNnҟ?OMD vtAݷk*7vt)Pki~Du>"w.ۣeh[~V"?CN}Ϻ\w?=-|\Z$|M~kMԇ ~Фڼz|jZƟtj[C쇟HW eҩ]-/?S]|[};g5ףN;UmY-.!oxɣtۙ^l+wzXhnߑs<7o^/ .|cNmi5Ϲ$Ȍ%fa(?e}ˇnT}9,]5Xkڥadh$ԣa8}NJqGz:ԣ [}3z~3|#i~(i} $pHhD&Dn>_*a/uo.믙)~Z@[GӮ$od1G'oʹw;W;A}C%9'{_c?F|I^# JbH']O XK3ꏃoS}^ʴԵNwlUclgb&?|%\hFEgxSt;__.&$U/ɆYm!DXOT>A6ý?׎|]ڮ{M2K[+{k>V+MaEH{튔VjYύtK5_w>.K 3Zu֚%m^i\ji{ͱ~[₩ANWsӶ_ϛIj^(4-h|[.+M^ak8f~R:U~~^^g;?[kLlvMW KY.&y!?LΏH*.c Õi~GjVpKie$[0ocH?oǥI-ob'Y∻ ow+|j"դ *(tGn/[48d,.,RE]i]ߓc?]^|6Bd?afMKʇ_^Ԕ yXmyZŭѡz,H)&ʮWr7ΎsCMw_zQ~ 5iq6F]PǺGe<aOm պb`y?t?ّNEu]Ѳ2I$ʻ\+}UKKS#|Ȳ}o2: Y5Wt]Rsxrkh9%9m4w.HfDF#(]_6 h.Ej'X.)Wy%"QmeMDDv뷙*񖙨zz`,fe?/['>._tQ[ܵ&6/ L-Պ~_?wz.}z$J<ަ( ± q?ϯjIE>&tgYBow~Xr3YI^H5[=JXV+ՎO2Y#mqwGGsb~T*{._y߾x3Q?نPj-ݛ͏dΫZSt-܁ֻ_b@wt{ǚïoh6֯j\?+YlJfyоG3v_q~VNܼjz܆Kˏ%f/&5Ο9J5o_xAtmcD$1Y[JA-iɼ}GeAi~Ñtv~#Y{փOܳ"G$d+|_'ZT:R?mm-6츝$.cf1eN6~Sg䮨L%#׬dtcE!ɣ,U~gVumkM˪_dž{?<k"VUՅ+4߾ lM >N}wIGg~gi;wI Jki_mլnY QwdW쮃Qm_oޑj`_je:C I䷙hSghR{~,\-*<-otj+\]7|^$K O׉Vb\[i[o2yvYV2w4߯a<|'NO(XKյǨ5\yd_2ݶQ(dVgkz=<.)G^oF?A?usa:i]\vm!}`M:eD|>(;Ԇ޺WGUOe+(GXψ~1M^^ifӨkՍ+|l9GehcG8jOSKn~G~2OٳmU,WԼ>kCoˍ6&F 8&K179r_֦joo; ~ڰSKmoxk-wmxuj%ż &UtOL'þ)-?_O0jof#s?  K7ӭf}#:,-Ѭ4;dG )o Kgܚ+{hvac(j¡WQvZ &ދ߮>3x#୼~-&RοbmB| M41[o/n_r>eB9_<KMui:gO _[\wlcyir7ڡ$q?h<w9ͧNQ?}[~ |5&>}G'_~ ׍L=x~鮣?n,΍b5!.H^/|gIGR{~`lh-W1]nCogUc.vu}M;ƱM}y V,N6=Բ\6ߕfo.doi:)*^-;rԭM\Oz殡+G@ڽa]vǻeTcڿxr}~t9\ei~]t%"mGyd; =#>}W\ =OǩfxdmeRs.w|ͷw;7Ei2;/UC,y55%|eU{q:Q~5wBݟW1¨?+.߻w~\N[?<_׹,X圖1ca?sJj4}~85lEz0ɲ)Te|sv6q<{:o0f3wo,%*ZrVW2|ٽ{Cʱԥ[ؼT}lVM5Ԩ:<Ԝ<7{ ӱjHgih#};5Vmߔ hhRz%_>X H?q5 k:ud~$O3eb)w0tQ{}708H{zlZCgmpd0 wnc|ޢodkW:pRGk_ڼIƮsw/_Zƕ ^RkUJMG[\\1Id yLx#k_#5j6~_שqne3K~UhE-S'Y|?>@eb R6پo?4Y|rT,~( aGzy/뾏u7ױ<6R7s[h[ۿCy4z6]OI=5w(S]OϿZRkc5vWY.C:3maco^r~ *26{: { BNp4*;`۾MnXVP糶uݡ.cquew Gq\ b~dmwy5tӏkMoۿM.xIS^My=!_NzcssycpF`eg,&MI+4kG=:4hhsJc^ǦLyKH~1̲y$v|;aqO^_g Kw_3e-}w]٬ah"V(mw6ҹkӍ+r<,jRSgko-vfԮn!kĺIXd~fde_w4$2}mm8UAZj~y.h3٧|/yڰɹR=]|RۯqO 7ytߒgħ]hhHnbGe|~EY}>Zf$4x~_,zDqM8#uk)!m2dLoי8z{K_m{kXMB}zi+_hZo,-h!UQCL&n~ou6XEED+{[>o~ק>5_ Ca$QTwfܬOljN)liN7m^Ά/x=?[עIUЪ}ߝ쒱7'ﯟOSVRR6{çxN3˺9[ <{sҽz8f?>&;)ox]/wc_:733q;W=t=}6ӭ}Wq^ ZmH9e_˻{m˃^-Z<kF?1c5M]ǫVy1FG~]Nk2q]c|hԝOugк.nbU]ͽ~m߿ZqIמ|ġ4{u P.ռ̰֯QwJ8[6>Z1R_qO~M *8ވ}WvlKo6+WH-]9UV}b~&~pY?ݞ[S3W>UT-ߒ%Gݞ xCd?=+yҌ՝͎jw]׿Sյ5-"&{ie%e,XI8_9?s`iާ$]wsLju$a3.?F/oC}s˩Umբn/}~9u=B)p<· L-0?7|3Ga#8I]~s=/7M/C[5|c|†bRKeld+gf_.5?oJs=ȫsiI<札=]2lOc{˫&B}BFg6%Hm7D2Wx&6osy sO[me}s[|~;B>+]zLslNOqmWc?ٶG:&>IEQ]/K7S_7\Mu|=𦏠q?e?l뎶MVX۽LXU5N_ס5KKMWȂnX% ]27~r5w=fLyiZmm`Ln {Y6LYO ȯkk̻7ڭrygf{xV#+ed;6앿z$sMq#ق՛j-Svl7ľj_wy.^.z,sjɚdکl0ˍ2RVod(I4O>JFZn!-;2/DOmI'#/o7_xEu5SPk}ϱ+jI{țˍ>CYBmh٤d |COZjzW#IѮAћZHnnnRMԒHάd_wݹS}t>M>y.i嶴MA紟gF}[ȋh3$yior8$Dv Ww,@_k˦>oo$5;[ź[ߴM3=Ŵ[ bdM+*6_CO:,ÿu2VMwMly2uV?O-Yrt15}G5\Sk)""Ѵ&~[yf4}kDr"̃˓yeF\\W 4{fu Q 3ʸnݿ3n_:k}=4Ұyl*~|XI5wU//_~"m| jd)pZ3mbO%_u+bݾk"X"h8c%1Z?.o.M_P?0_~'ZS]Kojs"ǥ]84?lg|;zt2Y~ﯯVL1kߎ1&ɕiI<˿v۫uO&y}:wR|%_vR\Ks"d4Ͷ6u>Od~ّ .Oz^:Ӓvߞ{|ݛMp"viX\Ƿ+o=澵O~6}Ϫ֛Wյ.l[A9UymZ4]vO+Wm}_ZVQQ~MW#'xFߝfI7'+8?pOZ˧x=Xj\}`X [nw_&ppiB]Ne#S[h)~lcx'hfE_Yզ>_{7b7ׯϧzß|mm]F}=@_2EUedh|=SgOJߏPԼU?h Ȣ]o2$F[ގWzv}z>X>Mu=A-ua-HXUDr)Jr\Gӥw='d֬u+s-i_M/]qLJk!{S+yW̏vRp_;4˯y-뾉=[ڤ7!ThdX"xS.PϑmW l[Ϡ4ۿ {PizF\I'vaGW>s'N>sJTn붝k-ť2yL{VFfnwgLO WVo3uI>U=_s&[*aY޻uZN_R32uR; ϊ3[Y%#/Ϙʹc~3fk䞩 ӻCF[BOvWmC'V.?ӿSN^9.懶;8ofʻ㋟QN_57_mu;Uۮ2~oY~g˟zJe :reo7wA!V-Uߖ7m_黇⟌ydIdQ{q>ڟUHL1gJ4ύF=8. m,EG rnYԯc5MOT4^kQ͹a]2vduc.Z߳n^f:6YYx/iF4w6޼6r~/ xZ'G9RVYZ)nd}Ϋdwmf|S/f[kLټũg9 [efg_5+~ipM=Y,]FO;UQR+6PEgc-3}$;~]̱͏W98{/OOSeӿwSm4eib9ow|~z!QKw־=gK}-f-qYF.'o/W]0m~Vyޯ?C7HG2͹DfDtvLb]C]oZ46?~jf޽v2ݿ[%Ԗ+twV͹իn܁ή߫2 ӅOEi={>.?fzJRR}/;^cozίadu}FbnF$m"76oVztV[__tF"}AV3MX^ͨkQf:eg~s[7}tz4BTpR أdr_QGؽ cFmo3g3$ͨ?.;xѥ߷u̒DgE݁%uqcmFI~obo+@b#qujP. ,P۫[݅*6~}Udl< cM9 $Y\qS~ۯ;iuφ4WTRm1ۻsnߑx7z[[}\Rwoou;eWv4RVW%+Gxnw#h<_ dӵxcȐUIyݺ5uSuPĤe캭;uU!^|#gqs}b]x"r[CZMs2}GDX9aվݾ{|*tUϭ4 6Z*ƅʻʹ6陷|ןue>xZ}ͼk-V*no=:(Iwӏd7 5[-6{]]q/fOg:g=iGϲ=O_]]?N̡$o)?Ҹ}˿T^{K[V,%$-CRGXΞ o~]Ytz0o~&kJ[Ri4Τ7a|d~-O?k[uEA]\8FUsBvퟭR+srԞ{rH(p/re%M/~}̚yc"[2J6YvY?4z_}o=͍2$m!XߑMͺ5/fޮK>NN~}U7_?*Tdš_{YGjzU.ͷdSfOik 4iwɕ%_6i|Kv{hϖMrXY/9#8O[dӧOu5֟y?n2XH<$V%I;{ꚍݸ[Y!O0mbT>r~E4Oi֪VqwM4MMaKkCtSoX w7ۿ?BŻ7pSo[3"Id7_Z L%+.2pFS򭝭{~5~/!Gq̗jul,~ݿ~~Mlud?cmoWueHiaOǷaJ[{ά}I'̩ȋq*'^;Ѕ:QM-}ƼuλfѼgZ{I/n57Lٽ%#KV?3:R6:ڕ>_3 <_/~,ĚO*MV=2mZȱDM_$tөOB _^/ FT]ZO)薽?4O,K߆;kcvow_灩UJPz7m75MEX0Ve%dF]6'MЭ~rJKV3|@,'ûr2ܱfͭad'cxdo> 1qĠ) fܬf}j?t>5 [ἘZBkȬw ^w~L9uJVc%,NWn?-ag*ΒBK1%_r>kSų}n!ݹ/{{ޟ''++_?!=Q? wwmn QA 8$a z H$ #zm{{+E#Nv m@\#oo>nqGeu߶H)_B=kho';{{=LDXzOZr7OC߭D'88ǧz9AE%39+ktc< 0rG׮{t!ǯr E/N i6B}8=1|{_Η<{ k/6޿QM__Jv8{wO4{f}Ec)T?ֆ֯OFIߊ2Z+o3r`ʬ˟׊s^BO͋]uS{Y2g@*~VHV."x}oʴm-P3IEb~om3'm:c]ۧ᩵mὤF q!|W]X_&{Ѿj V8bQ4Ym{[uZ/tB[|15;l,oWrm}rLnt:Q[Ⱦ*.uɕ~7_X9Uu6;vLSeDFӌ *F6mҪ7;m~/][Q';AܪS=[{$c䞿{K2kYfu֖Z);K} wZ4'_,=o k1XèړWף2o25XĊcI,BE/Hsaq޾?^Mg<#YXn%owߵsޔk_ߋ2ZdٴRV=vܻWnf[]{L3[f(=;.YFkX;ˠe|B@?nh@)V۱WT΃=4`zk}Lj*\Cn$6unio=?X7z߭R3U~y+EK{rD>9c-wɮF=[s~}#]e, 2/dJ0u32[($ZE)scY=.qoB7Wo`/Sw}K9(XI$?BQ"[ɜ`xE-FRim.^_sKS2L=}xw7y/wwGi_C+J%$h~ ;.x-]]!3Gzu|_5g[qy6F6׍qOK 4w4 OLq_o&GE7wbc\X?:vpM׿s? O0Y^0Bdsksk}*~_oKo ޝ֢>1h$uI#nKc|/O\;r&:qںncY=(mJ[yn9:rn֧,<Sl'"l忹eU١,ki;^>DJ6?#Oh|l~6~~_ Z|e]iYk^ms}.iIqZ䵵jr8[^/1X))bR_=ˡ(>cfxŏvOhľuvzՅՄo-[kqyɫU^4|>fPZW})ğ<~ͭjڐ4jl5뭳ZzǘviM5G$?f& I};__G '&S#NV#PO AV85MItļt8n!GDy/qߥN0Λ~-<_3{_>_|>C~i>xqGFtVQk{ԴO:D̚Hc'S 󊋏-a}|~7g$ []/GOww-3CəorM J{&{i_P%uWw~`/3 HQhA.IIuu69yIdˆiXК#][i֍Yvk]6_3ݿgg?l ^)> Z?oZořtCG͞%kxnZͨ>{G{nvmcJIuޭ8ӳm#>|lu&Yu[;I/5mrkņWQ 5żs^}m~)Rizw γ{?z/xt{gW$=חF+[8gްqpeXmҐJ|g};z" myhz-C,څƋyy ]5 fX2#D:i*EsI o߷r 4=FNQY:ޑŲK-Ge ~[>/1z(?k|8Ct>XZ14k?gO?Moh_,ž 46$W]ɧsᑕI&ߘU_OS֮ޗY'ZMX Z{^YKBufㅦv+#|0d+Ѡ=g#v?_-ϣb_9|42vw.~WRJ}_>kw9Yt~Q; 1S9>.y >}Ӻ5gcVxMM-wFIqV渍MNݭyy_G>,&]Oִ}PY^Ѭ &6.MBmEi孓g"<(Ə߫՝G_RԦKn-!mMojZM )ouFH.vH9zW>+Ͽs[[?wV<דiZlp۴2xXlGM{K9m]\;O"c~xKv7ōK?8|3K}FcY!e]aI'V;;ene/W:l,r_J"[E\Fm8je)hzw^;~gv <-W2.!Yuey=1b׭ucZ4Ԭ.HQM%wߝntdeoxO'Ʃi< 71*mJͶgsnןh= (.)W]?x4O0GV oxrL{ˈD I ~I.G-˭MT4WO2Ͷn? v~ oiVh֭u[ ,sI#M$$0(DM,qCTcO1w;Ŗa}Aìsqmm#|˳_hh1iw>H%B񦛡xTiq"X]^Gn/$աmD:?xrUcW~gu<Xzx6^ Ҽk [[]O;S·g~}%tC/72o1,|COh֖x!?BnElua;5vvqήTܸZR}N*x"[_ ;ƾkċO$r&ԍ Mxv<hӚ:K)Z oǾ*g|?jŗpZ|:X4mRm7[HkKO&Գk;u٦cOx$:׌jE-WQ=|~|{~)6W5}?N#uM!5 .{dtt$y# FzK:[(j^ӯ4MmmGIY|#x~K [y_G-(iGv'ROOEI}6O7}c¾ִ-HOQjz%cO[VT7B-?XX蕯~_UE&k["DQEc%X_y1>q{k*ğ[pf^mA'geė 4m9ك|u?;ڽŏ,Um6);썤C7z/ڵ8Ӳgڞz3v:u! HՍGVf˒lix~W[]vO>4Woǫm^mBwiWlMkG$2A3XL9<"|74FI^ rߋ>5 B|'irZrMqj7N5Ų͵d~=o֛m5;y}cx=C^>i67<$NXLHB<.x߹~8r;^3.^6u ?d_VL. z{k{y;AMguت,eE󣏦Ys](_KQ)u;[tEě SFWwNmO~Lݿ&lĖPHvll^-*}_0{Gf֧K R\tf3Jלٽd-{?EAy.A\}*%_ [6ֶ$2dƋFdȻO߮e{-;E\\>Ci7١#EVesIY^/όƭ=Fo.—wj?l-$iQp\~g5 1ݦHExQ?&֣|Hlsyc ωVn.%]U_yvltצ}LI=ok[<9 1uCI],uKkellcɒo-\"Fc5'$Yht~gwp>u=Vsv~ݗs|߽?..R涛:$YVQdky$_2},*V/OW<]Fdef|Y[v4 I;lŧ6rY%=N_0^-ʫ2Bp>RR}jl}չ_/lmh&AAKJM>y־1Ưt[6Sk*OṉYđgJ'-L,dj4 ~Xc8x;ź^^?YG-m&oq7LB}>F=*o;ݽO=&G||muVJEit ͻ[[h, У?7׫z~{u_YaP;nv>$cu@oy;\tNHn&RF`5iSu<%Vnu's,ʝZS5u߫M?J~X Ca&"j[ɧAy\%ŽǙɒ9tf.MRZ9ůP|*񧄼I-U/$7,gM[{Wu$]lI6+¬muԬ9Ey77&hfY=-/#h՘+m=9Dt%H,{~g>>æQY^+ȐKw*Eu靛:.jOUHo[ZxuI,䁯y"mʻ5>L{V_3޶zu4>m_qho E/,9&rD2Q.~{)[=/[Wkv}*-u{ZG~~_G?|)D#(mMyh׶&MdoNק3 Swkg7į&~=OZ >`nC&c2If\M6} vf*Ƽ^|??seӼ#x? UĹo46;[kfctq Cx_z[M\EvyGd9y!j/7'?u߈gl׹k45kȶkiogΏkگqu~Um?+MBe]w t{3ᮡ}:g /NomMWW]Gw2y y70qGBiNhfim#}?%ݷ!SW~r-ݬj[lMK#Ha&2k~_k|BA |w h3ӯ4ydo&ͦԭζ-^+[oYv_qʣʟ:_w9>/hZׇ5_\ivk^'MMUfn!k?fl"Ooeo.=y_uӮ=S7|g$ٵ E6T_1c!WiUtys?m:S]M;o ǨڛcR2$E-Y˄U?A?'F{o/{qT:tiPA4ާ)kaJlf:=菲m?eJr:|d4n'oxL5ayK!L%̶y{?3%sW}Wg>w]6?:l_~"-ŝ_)>LP2͟g:8 OKǯV|~}j3p}_Sa;Wc#2,]濬*ʾ+~Kn?){9IF6n庅ݭ$+n$ci6+=Β/>k6kmo_.?^G X2=w4k">p:^_K*+ɭ5T+IKF-23nMsտrj[L52> yqf6޿5F1ף>;ʲ.Pu==~_WBml9C[̶rwSnu RW4n&ϯTz¥/ib\._O謮."$Dʯ˰|>~o>E_.kyKgtIGV]{k&G{~x}I.n$H_6VnU|&Ω_~s]\*:,zwu3[|38XSI^qx]cpWw mo=;~_hU'~y]nqw̫&!J>[>_]j=S%gYB8ef:j_Xj%?4E3yʪ_i\oWoS:iWNj]ʖ&T3jLc*oxemsPg74ܕo,-o#"ǵ>[zE~$^;ܢSko7]EA3ǽRE ^P~|m?S(QQ~z>ivhX0k~"ק4ݒ|t[oy6.+/(ߴeʷ 5.)p䅯ueEYa,#ofo)i;QVO"IcHTfW0KV"7>GͮQݤ}H@79\ n;Y;Z-Z&Q_u^onG+ )vœvДb~ss;~3fH|dg0䣧uԮץҴ卭鮫gq/3795(?]u{=>dGtۤ||`^ _sSGy[#(Pd m*oOkiymvsǘf Q^+3ltKu{/6R{Cs;m;~eM>zs{ۯͯ5+NE;m9?ֈv_7euSo3oty伓Lo㸔}&=EqԤ57zT^3].|+:Z[}KI.XۑZ]FabLZس;4oW.+y>M5;KZ|1XN7~;}{hi\25:S2不r$.'绒Vt_|߮+RmR7oUɽIqhҭZ*$kI2Y6l\~qM+{%k~kyk{ k ϒdWw6 4יĭ)Ջ8;zlyS:ծ[km'u.d!Σ[tG̲WGyϿSob)׵뿯mN6zFK7k(]B*Lz9l}{^}\Zլe7}_Pn$!Y%e6B2npmXxxOi5=FtĢ ʀmՈO~y]tT9UO[w-ifF-w4*7+W7-f3JF_//_UƛhKkdh-VVܾdk7̛;?\1U+/}mUteU dǙcr+n-+%O*.\l,gI0͠i٭B噕wy_>?3 {;;2֯:d+eupTM8 vϥiG~O[weZ]:fhd;:?sQ,;__0K[z|&ݍ̚ƋI#Hw62vb'?$n~V ^JWIjb[o|{RSDULJYnSudF7R%wn3mnG!pa[:w?M_zy8r}ǫ=F 适) f۵ϗRzkey!֖a|YU eUmU;uSTu˵WaBa|zor+;f}>V 09+GN2^_M*K[_ƮHnP1}'JW;XCڽ龅8߇@PW~|Qd%(?7ƥE]>_l]_*wgwq{8Egw;h7~ߍip[t7;k,F Z68zE]xNɻyM?㷎t] d([gjV~oNyd8*›e ZogURMThMv: ~(+GRPv]e_ 2 M}WU=R(tߓդ(׻窻_u֟?ۼęxj?;U~oݫ1 ~Z uq=9QQ>k{]~vݟ@Y׾ִ^ԭjQw,7}#.fGGF??Es]='s%+^OZj}?E: rIQi"aefG2<'"WA&Nˣ{}ZUھ֫~F4h #7c+yVF_,5HɦVSzyx͈xgmn+n-CN_]~}NM>R6,Z:G]Y6~_Ե&qUۛw?o@zW]xτ֯J žo4)I,mw['|ϱW!M~(Ц;|yg5[?vq|ծ"akm}"1 .%I%P6]~?x"⎰|5]+P񖷥AtkkZmR&XzRy彿̉AoSOm Vz`Zn$ۣRi L&HSwe'sxAu,.X;FгM&ݶq 1YEOEKS_WҵXb6xkOk%ff[k"4js߿5Big~m2[7Q[n(o6'|KF*Wּ9Y|oئ6"͚ykY&I=>w}|͒pZ;Ԕ\ҵF҄lwu wVftS.l±_㮺t}[]-Avp,[ ̪'^ o7 s֛/W?LYjZx{/-n'乯˲9i^]ZWqxRvRﵼտ^l*bad.v9q:ȟK J1V7e^Z|+;J"^V]k/{ /VT@dݻkS.ڍukwȕ^2Ùڗse3f1++)-万ng]tzd_zz;|F zIɺNN|א2(*7m򼦖փOOzN34SN>G-Kk+s"ۋĻ/p&￟K}ϖמ)K;~L*^7V$G:k9לwf!AF۫ܿidFKBwv#TjV~׫/[]_m7+)?,՛vhk[~'\K˯t`^\v^B6iMlҭӧmƝ^? k2%yY,c[쫒xJ3zejG >ϛfBvͷ3ZʐwI~oɮcKh+|^H(wusSE=m류iiǫ̎-J[oYl-tV/#a޻{qW krǡO0Ĥvczʺm[6^*V_M}^X9^QqqpUv3|6Փ:X:0/&LbVӱ֯ j/fDLl̊皫nr/;>-'yEzHc}(~ xt/`Q2'նyp\ E->m(>ßgYKdVM&_|w|cX Sr noqjrBi5~)ksug2euq 6߼mv͏<"x[ΜeS߲V<ϥq77v_ |3qc WJ#ɳGvˢHfyuOBPn,ZpK*ɹV׏S/S~~wQii^W`Xñ]^y7dpLKhd+vcIߵ_~]o5(J ?Oܪz_q}zU[+Winڭ#XLƿ߮YSz-zӞ]΂Y%յ f|9mFݹX:}jF鿕Ti_i5햟kydxeh|[u} mEQhdm>$)my壔XGy^VA_3LCZ]WPWgiEgV}gagțl4SP?`껭{-C,|ȕrޢݚ$zd8BY~Vihx՝YtgK?EnBbO&v IEOh+H~_:W{>@wɤSN.V+"c\ַ_wc grxIKv;[nɹnv'_3ruZv"xEkwG!z&(mMXj9~{d$qHeq YG߳KK?=g:&wmcsi~uk{rt>O74z$J:~gQKvLwQ9^w<ľ=V2~,ەfgo殈QZ/.RVi~Zw=2hԴ[Ku (`۵@V9v~Ύ֔'sݻ;#|mIih$W&3Т/9:zϮ w罬Wk #N#-436_WwHO쮃Fݜu6w+m=h[1eV_1ڿǑYZB-{$,$ʋ}6^[oN??ΞEDӲ5˰X"CMNvۛj9z[Rk hԵ幟Ėv^a 夓7&MKе ;ޖ{y^%- oou;-33f͉k7FM׿O,ɴKJqefI&E9BYE%OmwMɲ{?1ӟ*[w;כM[nľZ{DX]foF^-6m=G[c;X8>5I3C#jwQR/Gqz/r֥V+X lY㺞M"͵~fi?!ٞ*tc+]ohԲ~#jhh`b߽{n|ʪ~V5֩mFݱk*,ڴbB^@$vpۤح^k!srk]E#;gmwo.9o[ܤCUsi,<*fV޲F}_(jc%r65)$nwl!lmpT r]]AQ}w*2Fhշ=~J=?{iV"Wxv/>YgmUho_k{Bɢ(k >{YgW3~=*T/-ջ!Z$"vQ-< Wn{#o/}sQ.Q4OJIFv*/]>Uwa[rGlKa˪\q3)%v_=QW\͘9Ue}ûA»r[-s}b[wdNo _1m?AZ9 #yo12AIǪ~ykp~lw|ZԿ*{t_!F׳(HU2~#r] TQzWWg1S3nPm@&oe7esJ KO ,Ң#&gl4:Zo 5zvfgxGcցZ ;}FiY2M W;"VQ9Nu/ygu cQ{k2p˺HidިJoLQM/{hw;Szhuƽ[P1-x_vߓ+'QF]{5Ӥ>gW᫭;VӬ]#J K=ECt1(ラKÞ--OPJvP+o15ەȮlBwNfuz]GB|s9#mZktݱXUMXjOs_i;{veZ ޣ{?KwwsMP?3ud߿jS)*wYT߯?̉o~7q S@z1|գw};.N bXdp}O~+)+?'z8byI~ԟgP1@,0_HPj7 rGgk~=w7.2w9=7Mns=s{Y6iNMte+=`"@y+_9ރh~Z sw@8r_rߦfOgrLۀ~5|i2nxz 'Aߡ&vN&X8'8h:7}e1I~ؖ8yNۓ]eR&}~`c>{nJV̈́koI;tT{īkszXVZt{1F3;=}~w޵//9޲Œ(q 0"EۻĻW6Z_:KMGt3d;|IaRkޔ5-/Uu{6v;J*+{?ǺU-7n6TV?=Ry=ļm c]#V >gMiO֥gD|DžfY.O|}j}#2|4u4lJ"b8lw2o}Gr],,p1[v\*?.wj7w yn%nb?ZN_^Ls1u|BSmȮwnsBWup&n# /9=uvE7d2ĂpS[]f\_E˒FN⭃}}]䴂$VgY컇u[??D%N3bVl *" U^G",/. L˸-p}MikBZ'k'>Ϳ^ĉTkwo1o|jUwdVo}XJoFo./e&C ˵ZX#d9Y425{ΓY\kuogvXUܻv*Zƕ_%U󿮏LK$[ok$6YfBck\c9b@BB˷ ~ζ_s!ɅeڭY-^*Fzϑ?7@?Ts=1\0T0G2jmÊa܃qK=i9uɣui+oznDa*`YnPnǽfݟuc6pqfOy~% koOԽl rgJV5I.vk?Xe(IzmS2Fr?{T65OĝFàT;מԹ?E-n+%ae9es|mN-F>ּCLZѬ6-6E_2m4?}1߂/n[^N?,o~:]ǧOrJkcms7֜zzvmʻ}g?1q箛5HEٌ:v]e /mc8B[oϧsWtY旐$ZIzɽv;{8zk;;'}-ogt|y~\ֽx<:º/\6+(ߒ۶4I?_s |.ҴQM%^SՍeW>Wk멳xO[m"I--H٭Pv2|67v/O NNޝxwE~/d]ڔwWMR+Cy7U 4[yw:+]+ϫ>|+Ui#mvQ~y-7ӿ}2; W_Gv̊'-//ggo_lItScJ6ǍOmu;dr.uJ[h٠#$kNKֻIo>` n\o?d摧,z,Le6y=+C˽K_ޫ{]AA_~Z~|ck!/_h !h>+D_mkGMKcnؖs &I,&Gv맗n-T(Wwlwυ,ÿE-Z;MZ,5!eԬx;5$I!G~]Bzy?_]nzQ[~kq.'?<k[!uM K.ERG$5ϓ4ql]u^G3'dv^, x<=:&i4P&Igqk&kbtK7~ab>MXyAV*N&ky\Q_u~۟X-l?a߆6jW6im:EdH4Λ-8+Z(˵|bWewj]A_ R[>} 6д̚Me͹g djIp~p9u; %!-eWF?2ژuv}4wę5H|,&.k M 3_ɝ8Q>MnU%/S|y.oAq[k:aHFY^8{mzojS:frbVj|hfMwNY2_,I}[v|;.v$Γrp$񞍯xv]&m/Uak>tZΗr2G7\#wenI޺ij+zna6+k;.o;oy]jrl]]L{9k.ݼ3_{톏v~bI ,ȇ='zU}:{-'ĺ?|/ _M[i}0kac_:ؒ[dɋ!˯U_&7RRFVĚjw T.6 0&Too 5rCb *'x-oKWgMy:u][B.|!xCT+Ԛea_%ᶰ04=j!wk[m~>FSv~]Jo^~ ?Hub}Jĩ3hv𴚕~񮡒KeI4~]o)Ԭ{uPo;燵Sº _itUII-7-Ԓ7#4tcYrs ߶>G?_Z^&׼Kk6q2^]Юh^Mkwv.6JS79;zdm[a1!Ն.mIJ`3a?}Ғ[Q]?:3HuY.~0%hdKaO-wn/6ybS8j)-od|^W|_>(hϣG{MW/c ynrH{ӿw"G,&SV{[t tw?=8o EZg&k8.kKVp,dVMBd9;t+konEn~iZY gmgkll6ѭq_蜹sӴ<#ݞiFw=U&݅#N&OLm/s  >3x*,>S=R5Y5֛M\[ǿhFdkwa0ʶ[}+wwy<ᵗzFqwjwlj2j+ȰMMsu /'Гf\z3S96?/M?C?7ƾ8$O2f!co2B,R=yl$+^;өR)->~ x[GԮ!İ/Jkm9;W=OaGkg }[yOCBnn{[sIJy3!ةS#{k,xo}P _Zi_zmCT/mC<ϴ'X:] ;{|ۿ]#dk͞gC/u vm;h+}oU{hbxfޞN-X_W Nxo}CO}1x]u/4O </.|a{k<[M=7IY=&ei{HW?]o?:2ڏO>>/6*rho.k74[ 2I=}Vqi=2jWu Ot3\2}.,n̒9MЗܲyiR/Oχi߉jo$ZIj,kw\. :Cm ~_mn4_ G&4[, i\Cxȭ%TUro؝.m3s_V?u? kV:$gt;YZ$B?&Mn;ͽo|;[KmMSX{i_(xKvn/ QiP5ěsE#Ÿ9H|aO{}nUiS?o_3&eTԓoh/غm޳akF+֠G1}vMݳ}%tM+g˳'?sVJ1k=WOAZY_cg$eok'ޟ~̪RRWRKX ^>[1U6ojc.ߊ3_uQhfOk.U=kB$đZY,tK ͶgH_:MO}wwQwS  '$~dmt5(8O/?1I#gS%4aw^fMho$*"-!3P}]o*W:b$XUSBۙ͆ 3_ԴrrX2?F|LY !ܮ?̻~ojV-NRWg~뺐?եm+ZoWKOY>ȗASUYW۹UlH9?~Ejv@G$A2h[ʥvm&9a_d$ٙ>Ѽ/OCgAMkk=n&k6H|ݛ{Ÿ#_27ٰ,;OlŞ_m/l phwƾKw}8Ao|ͩϛ}xU5n~'Y5{ki;INXv8c%gqJe_;|Ulwxz]n{uX{V}RG7$ǹ_ؾM4m8ǯfxPďFkK]>}WZ\hi?wq!VXQz<߼zr\ֳ 2dk/2Yl,r\'Ty[{C,H.nD5Ux٣>o1>OOn)T{Wu x,0+bUnsMť}+lR^FX*3P⛻_ml)kC հ]㺎93k,˻p-:f/CEVQoj[xxݮmi^%0C;.ƒe>d^<ŒS^R3oaW|;_ |Uy%c!Uo*y{|)jqKo? ⯆]嬫s$Sֲy}+͕RD6y%DWL~_"?T;O={)YUtZw yțyy4h%Nֹ|^"k +ԭ%qog3[2mumȲ òBJ.|׹^xJ|S}I}/[:5wۤof'uy\} 5ZgB<)k+;Z-~-h2GIk~[[GΛwrv.>Y>Ǔ~ܞ{=v'4 xRǺ]mSMT(~ʥkz߮#>/<xkW> LjæۯK˸~q,̛E_sI6J5_}|/|k=?L<:ߋ|G{kxCV8o=n'Ҥܱٳ2o ޼>/3Vn_ثl{!NISI~:) w/ IduC֠V5 o]Eu3Oҭ7-~5G9#M^^["h|[rZiZs4\n#1&bmOJ"1q~c{' ? 'MVMjӭ m߬L'I]e|T[_^qGgVws.xxzw@mq=$\ o$OiʭgMqޯ2H?(۴eپog=aem{}{Jj^z#RPڜ`UBi](=+k{7{? sGo_ CBf0|6 'mmq5%̻TU_u܂9by'wwǦx87 } ;]T?1QO%ϑU/6}sZV}Kʇ,g9ڽv#][cvA?o:S^ݛ3kyzQWWc#V*#VYP˿yd*z|֊ u!5+y晓ʉ<*FF7?wҹZ/WFTԚ)rY%1?7nO5k:"o~IKɧ:D;p$R2{ dGUtD/zX{4ۯ|O*_o?_37Y|.,4f?i.mI>m7"nZ_']>RrbZ[hF[N12iws˧[HHnQqT}*'?>g_Qii_ٶqei맘mgק qSͳȕj}No~ ',n6yyOKU(+w^oj7Z޴ZЩ*8\F"'5NIU/? EHBok?hX^ =KTyV$G,]\86>|'VrJ=z%cQ^VkY5՝}x&$u }=+R)#Hl>[i-#sI?Γq:p t˯ܬy5){ÿ6kyH9 a &O_?jN~ηJ3yNB-fin"2GyJ_ҭ3^_vֆ*JKrUmV; } ʏQ6UWq6p}SoGk*߅[~?ikq #0!u)}b{z0<;;/=:3z\iy<D9}ʻUS~VQ nc>k[m}}w fnblU~oxy褡eߛ7GM,+Hx%~rOU9fwm,IdreUR1 Y[z1{o[}ǷƜyz{_5%᝸vVo53)s=u=XKބu{c{)]+Czl%Bk2/2;h‡CU*]_WoԲ#Ua'9 89]w 7$sWA_Jv?+_^xԔdGsn/~<9\RwɌn@e9۴sƣ=2uI_#[îd8+nϯEc*;(䏼[_+kiLclӅVnKNz}5hVP[aVC_r݌櫝~?bϺn?rvQ3F6ԲFm=Nh}=wlElO#ol͉n$_l;ҩVS*\ׯ]Rn&R#Go-oyһɌ, VF66o{s5߷Vɻ__}ޗ)έ@dHV#m]L֮{NM}yVW2Bo t>o}*jӧ--ߧ;74%#293ݹn_eG]xԼ'%crD˲V[܍2>f~Z\߆)T}筗)ͥ~IoncwUO-úߺo=GJ*WJauIqyV?ho* "bU$2nevwAUNaWz~KG$Ina nkyd~Mݯ/;.)_t/VWڐIt{xvͻ<ǣZ_Nel[c_4IHbROӵ}GlgmڕlWbJKt/:v+Z|xkP,dJmky+6]~/y''߿?nտxK>$5)\Z[r4LFxoľ"ѡoL~Gy,̛w >r&] 9 ~kNjxgX֠.wEq$LXZvcBY"yI%kyWUuvߋ%mx[`]@4/[m$:$2'Wޏ{]? X;]y/?.t+ -GZ8vemߗ׫C7~9TM}>X嵷[sɁX%Gs*Fr_QeӜkq EydmFnf߳'w(7O%>#7Ty,ש{j ulg1DY@̾fWvOn+o:c3:MZo6qYXYS$V?w渞N_*&qIͿO׿˼Fm+E4:)3 O;7+zX| ^?u.W>=al1?!?s}O։ф߱1|\OrF(eVY ۙ$5S_4W/Rw?燇n~{t4Q[aR~߫cz8Kw`ru>Ufܿ/+bZ^Sqt?vX7!Sg滔-Jue+}_f=Q$Q D' w7sYom~Th$;d:o VZn"Be>s|WK/=N6ffOwnKlH0'叓̍d3g;ϛup7} E#w}5_ fC3j8Xʒtm_Z_V÷mݞ<jI׫O^mZē$Ԩ^!^&uDea?}Θԧ.sK HaF[Ify|wvz|ᎉfpyFAwOm6KiJܬSw/}里[[Eg,+{H=p-Td[I+e knXvc2vܣKzD,7?c-Uޕ%]f'sH6??N2jqzo~t=JNm}Pax ml ~e]5;A蝻3Ur_OY@,n3}9}z^[3k3_ude۷ӕ޷^:>,%8kFrvr_'/<{м3G/tbqm4yq3]Q-\o?ݶb>Դo<1j{\mef߉AA_PM=sWfxSV$KCU{c$hUc?hwQIWϾR-7WK7z<׌ݕ!vr~:r|G$z1_meƾdk(GwzjRo3!^IMgEe:mjbCTcA[[ߗgZ9}mjvze`y+h^IjHO4׳-I?&y勋STRQ E6Iq߼ dߒKTcS:>9zMvv>bu48w~vmȬ %yK~DV󹓧|ph/$w2ʿ^57|=>ܬ!~XϪ KoF;u%3M4MI-~ х&z6fKkP{6 * ac][?*1O=~!6wW?-Ⳳw,Bao:7ש-~1! ,P"҉!Ϋ&ݴl?y[}ҩSKɽʷ2 Y`xdp!p$H[K%ɿy"TF ?ՄQľ("K^YZGVW"Ѭ'+X޿ /~MuV]#npó${~fq:W& 녷P"S]#j Z?>yce:} (fpUs>kE$24z}ֻ B(V;H>3_ⓊniΫZ n"(U[|uгU>{߫^_)G\%3`qh=e_ݑߝRO3m.h .'$Ȅ[~%_JɹNRz|sJ/ lm_}Ԗ)7}ڿ[WЕ+ܺm.O_c]?|TvR+|ȉ?5_*QoK/.` gmT2}{m-{.c/|c[zTM?OAܨD  d{Ǥ~hz#r nSuWk7eB?Kšb[;8qDIW'RfRZ˧tZg/ Kz_sI&Fnfo_;Z F񒷽}Wi#S!u }N17Uܰls8Wmg5WOw[<^h$6Kk+- bDOcVDm{[ueR$VkkjڤڅzL2**۳,/&rڛj|aJ>߯[RRWt㹖w+J܍{`mN]7&>}S5ybY}buq1TPy`[Y*0O)og[͖i8,~d۸[>a'dקE#tmX-o'd pTy=ONI8&|8?yN0tr'w>ズ8KwA`wN /S/}2WfJʜ8pzۿS7~j +6|pל8h_]wF\ uNq' ҝgĦWBpvO&m}{߹旟r2 >ǯSTUm{#ç\Loky^3p 98x*m~G ۙ@MYϧ%'t2pʂNp92]]ܸFZqvwʣ$-Ͻ_?Tܺ|ҷ+ i~zi_w_ʎoV_X\ =O[~;+6?aZtѾ>޽;~ll>jRf)ך穌_n-?O~_t $泻?(mmnV|cB;zuvH 0`껎?uƹ犛sxзO&~ ci -̱v`ewW϶T_Н5DH"(73]8SwRYGn\fK;m݆>hוvF/D"V#%sTfTZwVQӾopS9,οX.Kk;YC`n-C>KaQ{HKwol*,B{_)owoOOus,Yv%\ymu6S1vy  [͜~i[`RxG}ܑz.`JǦ61}p'i$@ݯMr'-'Ǜy1ѕG@rHUUI9猜֤ Ƀs]MDofp>o{ҽND? /LI.|.oEd!ݳ8Eתq{׋>oLO)1ܬ* Tz?ֻu2rkNmUg.]SPwgc~_k0^B Ƕz_{9^˙/h嘩|Ǿ˭i}r3 ˹ogn߽_ƎJhޟ$ҦXo}摣} ? Ǝ1+g~`mgOϷ* +x4:{o*0kNzWm<=[4whz*_R5T?qVaRszۯo34ɳm ƭ Y3oFvopswJ_u|7f5 XieG Z۴~_2Gwg؉)ʯO#U8[GU{>{ exCnm7}Օw~[~O^nd}ag;K煮]ۼܲn]O4)]6;^&/nuF̦ K#e~s2~d\27QKdr^9/{}:yo#M}olVݧ?w_~f.Mx_Sn-e[t`&W{z֔ڎ}0w?O[^Z,vohzmߺe_:5I{lӧ-_5Q%[?mJ}bmKLjw mvѷލͭO}wzCO nei;p?ܬѿ⼉R?+qM=O5$?<h𑘼zvךNY&tkٿ~{-{kmupw{R"7,pѧ|3}an^hDpY73r3UUk}orFu=__?x᎓O^kwyau Vi#MC4JrW[kRhN?OzoxV|mI.|5 eO#57#MB>F4ڔ&RK_.7{ɢT|w jKZI=,4}5: }nZf-ܿ*O2oTZ5gktB0 j-أ=t%8㍖r}IR>L_֫o1{ό;5xW}_MfIxt_4[ip}=ҭLio3W=tEJcgi"nLZՒ:ZmUg}mg|7ƺދ{,MۿU}or}k!#I! pERO߯]׿ ¼%8=l{_n]JFS-7_"##m+yr/k0 ^tuNJqn>}nj%ԏ4lutφ ~I!ܞaFپ?IOA:ƝiM=@-FZ3"­9](a}Nj?|/4[+QKknE;VO;mm`,NUW z^)%ss-펗g.eX-|ɕwXa9}MI=|m^FZ+i;Z՜wq -oufKh䍒K!wq+ySi_AH8s^jilnds*ɺdC+_љxCд|(vwښY<ۛu!Yo42d{$]^AJlҋ|}Nh|9 m^+.R&H[ f[=RTWImgg>S >}{m6M߈u$ГF]Pކu]VtI/{WhcI>Жi|r#pM.ϯoNMZJ?֬~!~.x.iƯ?)F߾Io2O3>7Mq%GPcINk<|/j>oǺޜ]ֿׁ|5sYMgLyד; \~=ɬ(`{J| ;/JO =ı[~\=ד2%W>JM{:I|/ϹmhV_k>'/"{)u=FZKaf!r;do&Gk_e*]RՎo="Z3{C.gNyOWIk᝟Q˨j#-n rHW|ÿHk;[}ܹ[ġ5A|OiVpp͵#e}}dO&9W5N߾:|Cm@AymcԤ]2*B˾hՒy1eVu"|6u efc-N?ШǛzk2EjJzjmۮ\3,I8! [~_䒵ÛXkڅ!;TOF\2/Vzԋϲf]ַxĖSw-gsi)hI7LBVGɿkeo}#JoK់$ƽhVz4L+ Dž>sIw ThߥT߳=3Z`nKu"X٫mf_ϓˑ|O{yfOgZNߧ^i9Ko]UsgwƞՓLִ Y7tM".Q ZlR_:kv[Iw\/V=#K_ A߽=Y:,?t/v kaiXhc&kX0w'{q'~?]\mVRok+O?t;XLJfkt ^Gmyy6MďhߚMgMjӔtn/Em\xkஈu_xRRy5evMr9!6K'qu-o3 ^~}i^2Q9)/V:5K{P׼]}o ռAupΑ;hm4Rnpvok˶ j(\{Gşzmg,5m-t?kڬ&qim4 M5l5}:Л~~}uխ[V\n-v_v?i>5]C]oQu4l!64iT kxcwgI$6O>"\{u_mhGwϓm>"Av |@5ZMڕX};m[PK=5ndVI GJ=4w«q^_=^ji5kŸ cf 4?ZkO ZTKG}E=Z:>U*M~]vUii^"ojs^Ϣi7vjwʖL4W$w}^=;J>mSѵgBXUM?ƞ7kO[3_ ^*д;Kn~ytvx;nW{3?_2G+jq?9d=4 H]vC«IFv:A]__3+_3.m^ȔmbCco]v"7{ֹjїMׯnGfyGW:,]kM5roZ5M݉>-_r~?翌,orxc¾05! zu.^K] ‰}o28L)eK]i}t4:٧?/z=~P5m?}oUK?%J6W_%.AN0b!m{fZݳǾ*_YxZYdNP'?Yfn`kNMѲwY[|U]M*iK?o{Ƕ<=wwe+JEZhwDHZO1z\rK;pCk{Iٯ͕7{I'Bw>*SW~5cF vˈ8M} rIjo }i9aoo]o=PӮi/m;6჏,77;wst)ru̧y/R OM`ulyȬ/BS[6M>Lp"as3mOݻm=[^9/3Mr>}*]/m;=ߖw&|EՕHJsk ?mDi~NnċjK !ie/DVEv9te_%C$dnJT./_!NIK篟b/:DŽY՞5֞-K#A}Te7}GغG_?͗.[DE޶mvCWL|ȬHSu2_Y-Z4y2Z-nug>}nmQH%]|Oq,۷g2_=a` /Z\w7Uh$#9];wWhNɻ"hs~feV̋_g[rrm-^]p\I%2ȯrkI=ob֏=ź${e"r#ptlZ>>u_qPe|ۻ8mHA\|9 yvi^זĨ"36$xpvṛcI$4s,2B᭮dڗO_1gsѭMi;[1m1ʭI_cMʽyYQn_oz'\,C35X{"ݛdEQYKsWV:+A L̤+,7ο}-^xj^m2M.34(I,q$$n;17DU6F::OP;58$degl`r ^>qw~ SY,U:ou|[_3)wtwu+d?Zͫ;έاaD<ƘGͅ=iHuqm)}[;vk~_˝^ki5`iL)T1m&ߕdTyuoR3"]݈UpZ푇U,&u:i7N&%QU*sw敗e k2iv[6I +,.e֓}>s/_O/,k?ܳ5_Kn.-6y]7>s8v_77QNÏkFB_.=Ėl}x~ʷ5s`dD?k%tKdBּq{{O;ú}_Z;f7,m/ +r(WGvJ^O_T'!tz׏O1|=YԮcIl2n1N mo]E9BN^}w>)x~&&?cҴl>gn5<_#Sg¡WfW\˯w}VѾ }/o(5Pjds}6:~;MtN ~g+۾5c}{LЗL,CxjD|c'd Ʒv6663Ƿ{"<\oyF2?;F|;Gˤ^KY3]BeѴ3*{6nO޲\^Rwk?׈uφ?G%ԓh;{Q-WVn2K_ԏ_ÿ)IAa Mc3MִA jH{-dNI vlrO{ce *סUk&o3i3fܓͦsTofivy45-^L_+셡_/)i6|+^xS\M2LܷZ"c:l\/7 GoK9^x7O֭1M-~3.M&2¶MyygdIkyo٥x^Kpki՞/Kோ мRti-azaӠ-,䷺㶹sI-?ܼխRJi._}y~/>EZk/^M3į=տInI.S{ܛ̗=.Mྦྷ-{ v|l,="H|{ 2Hjw|+޾.׻}W54gs]}CM}3U^GqEm\;~>/jxӚr}ms{}4O\x/ݍke-4Z52N\33=?ɖk&KOQ-RV{w}Rqtg_ zp6 ڴS"dH~}> OY_~M#*Rn{G|I9}1tI= Lv߻{ItN+kۯ+>w';Z@4+WoT^Xy{t=-}ui91F,uqߕ2mg7Ϣ=FSrܱWr|7 6 ^?#.WSIF5%m=4ӹv PU}kVJ_NѮKOelg)V?%͔!mF9}{g֛䮟J_XHC vYd7|}ON6"AHWre˚٭[ek3Rk~cV k1=ݤ,VRэ*|םȤw;4u9cE/%mĹ2Fgֵܿ}9v95a*bij_Q[]^89[/)T?cٹ۫[ʼ,,. %< WMqԔO}E~T0Ofo*=k|wo_ι 2#~P*7W鿵أάٷbҰ'%ͅ_tlX}iTqzo{ף7m-V yfy ݙU6V1\F=c:R[ĎO6G* :[w!WLoݞaJi_2rCto8~W'wo7ٻt]M KoZЉK[k{&6O:R>ONg~eSro&u09 >Yr;|U#v~yK͍i`as[Eymtr fr+^u9A-~ OXtoR:IA!𵺷ʯoyq+ͯKehmK?z?NSþrGpu=z^V/^m%Ѽq_qig,EHEX,l4w+!h_NVӻ VW^_Mq 5eVX0:|"/\0My]Irٺ/;ۻit7\idFߗlۼϽ/*TkS:jUo]}|g_Fo./{k+x/,u'"&ݻSVmd(IGn{<:߅uR:Tl #~ۈduo>3D櫈q{/gRNmwoϯR\-z9+VvvT7erU]ow])-࿵aR]* j.ZEY}"j+{_ku:.8RIX2I/: ۼ?m[0䗼^NR;x .kk41̎F|g6EZ=zU/AkGVT״} mBC"HcwL~]ǦnVĬJNWU𬚶.n!w{d_IgsG_~sҲzlU~pJev.ꦦw&Kx^̉%&ύLcoc~wa+'ͳ5[I\ۯгPC[kûw^%-dMԷkv[z[yWV*W_/;RK^Nt?m}e'Ph|"ePkNmwK飅CV|>BU52)-,C `~r9=_}ks^OS.Q[td "DL[ڬ8 rmwImmiJI5~neP[ȷ2NV67ʬ_5kGkzS}"o׸{6 ,h\$`%\-[~y8~[Umbno9۷۱{7moܧewGl AX|?em6E_,RSrֺy.. (QsFo/[Q:qwtӕ[~߿dY Ib80sWf})]})Nu.粊3@376c/3qNͿ>% ,6ckڭc=3H¤P̍mn{y=,E gz67IJws^#1PR凴QRh)W=AWQ_ySʷ3'o2eixU_9|T}c>{T3SZStw"58^rL#,l۾Xv:<3짯=YNiwvG5W賟ڭU%ןz~MLwA;suLϳ_2H,F"Yelrnp1ˊܿoY(+yz1+5Vso.t<_~=лFHt#4oGu8r+קE|٥S髛[ۻ|'ƳkҕP[yf,-*>>Ug}8:t+t_uw|.'y?L[&WC~/ֿAs$wKrvzD)F)u_̚z[dFu9s[Ƥ#ַ<9-|˶]ê䓝/ ޸+b! V3%o{}M4h#o1 oNۑ=b]WmZW=j#N3}uJ|;V|LJ*s2nd]Wqm\%6|2kh4>7}BW%șSmWBs5QA+w?DZ+>]|YoGi[vynV]ۛ/oO &{ʚQwŏRm^lrd[".^ҧ/I;_k^{.`dbcl{om'D)Mr&Z7MJ xTK`u<-S뭻&m{8y(YCQ2|?urʜ~w;hѮf͝8y0wu_?ŕ+V,֍Wڝ˕2ѼWtDcܽwgҲ?̦[$rAcǯֺbfmJLc,nw*YNݿuOuQrV/ӽٝ.@xbZT^kO2]|3N(k.8yoZ^Kw59=O@f KbWn3^~JTוuo%̩%ɐP 61[8:suf{mn.Q.$CaG_?\ U۷]3[_W}_/5rҷtgjcK}}?3wR:Xkyq,m,3aUwn|cW."0_oFַ7j,q;²C|zF=)T5[u}{_>?xMeql dkud$߻f?~z>]^^K饎-߉|Xu+`O:vYWJy](˙E鲿X#A\dZ{B+w0AG>ejLuF~߹$~f|}c~%ɷK]믙RUџLSܵ״,g{X&k6%M\W~%9M{uRi7|\ίW0IRT5yqoV=yղW?KKG1J[=>+kvi{"R̿z6k4{v}?uwv:e]();?[^"&2OtS4c9-d]Wr{̏V o*5O)4"K_͋&o'> %j79eufdd l^r}ʨB)fS/__-ld FSBAZԂ?OX6ȗn{g:Vgs_[x[}#P kZjwdi>m$4-wϱW=h:}?UϫgwScyEo4KH%٪hGm}$;HZgdvvGew_<>x4x ~Kk&KgK{hw]ICȐƜJw⢣wO0sҼ% hP:ěCV&ag[<Vˎo9}uT)z 'U ;IkT8Ivy#D6߿˭YJ2hvmѼ3a|L줷& avHWˍݲI&$um1OnG+IO$nד,ME#j Ky-z%ɤuuho'v'V7cw½4k5 N -a1_OԇkЬ-5uKfcou]Ȼ 9$Q$#ͫ'rr{^m{}m#ʥc^ٷ,K檯]mqA]|"_סH?]vvZx^jpg;Oc*һ40>d:3)(;% tmsf͚9-ޏu0.-4k4ly_EVmݱx)0"URl.]Rx-kV/{Sݗ=߽}iKO .t,e '$}p6/m~7_J> jw0)ZTaO\%G~TοPFf\aK-/>c7F~U߇U-&&ܳ,Fߛ/{yOe ӣ9! ,zYOqf` NGm{Ժ%7EWi*icM]"iW|ʹ ivӒ+uBԫ&?t6K+hԾtyCfO]P*ck_9#˳G??ܨG^rڞzjq-q ʒ56a*D}g}u=:nQ;N=}ߩoZsc;ȱqLy~cornm:{qv˿^B_Uz捪\˓9f${~sVӂ^}^aj<6gd?.]ٕwrB9)vhu7P;hM3ykI}7{?џ:VhޡmwWׯ-wֺ}l;U"+|7}y_?QE{?K}~|w_:(U4L|:<1r37|_G輷q{G{W|sV\mʭ_Za*WYu(_:`7,%+f 43Yn7y1*32.vȌԪp_fνYɹr{F$e#FizUƔ|*]im3Fqsm۷qºaJ;离swOW̛s t_Gʿ4y~қo"կ[?_Ӛ5.W?+gI{n2{ݻovng??sRו7qw^ٽu$Fj;`A烍{~fo;cc%׿y)t1mːprs=wg?z%uˋMog 1݌_SPo}=w1Mt 3w#P]u5n}H  %]FOʼg=[qW?2kFybc!My%,rZFUZ|D'p&'*NHݳnQȻT~%Q MvmSǽiGմcP`Y#un[rǷO:eo|?gn>B?|P[}?),De啰N~oUMYo0 lT ;szP"t+.<#O0X4;Q|7В[7w{ZKuH,3ǷH66eljguK #&:__J}>_DCt5su١ܽ~ۿ$zճ%9t,,Vz*3d=[~hs/[&A x.|KLw}Q7.ޗ}yy^ɢąw,@ܾlp~+_ufm&n.$Mȃxc3YT+;;[4f_/7W3H@H>Mn~MX?? ӎ[y?'%xj2ݺ;p+|48$wI]#tAuz 0oRI}V\(sHۏ37?䚦9j"~T\?@w 2YZx|nOܮ rG`$)phUg 1>k7&ݞ߭.o奷c3,=mgɳ~s&J2 164G ,˹|ͷ+ERD}'MzJC%%a$]O'K"P Z.9qlMByweB>zZi[E+_ KZZEOi5 vƭ$jⳕTˡ2_xSc[ϋD!s%hm;۲8.gpe/û ɽ PMKO`Yne; ʪ {꩎/_2iќק? hVŏ!tt}BlcOH˹;dxm4YH\\Rj6}jt*5yd.=_W?|_fGt94-#77:loy6g>̫L_Xʒgk?z1$>t^]OT4-7Kx|eo%> w#Wk99-yӦ|S'SZ)Ӈ"[nWMCNsC3xzl泎}:"Zl+,!ᶆO29ܓ ԭ Ae}O2,SI6W>3Aux3W|OV?ཏJDښ1Gx;Ĺ6!W<)jz^ouifԵ BGSy/&fMpK?'V2yS?}WTdk_x/Ho&x\/|S8o q^Hke06 yUcVp׮rN>ǯ0ѼK^8j~}566H-wH~ƫUy^|K?xSKK<YCw Z-ʋC4xY-")e&Gx8Jim߮g*J٦ogi> F#.|9ojxkMj:yO޷qyRzztʹ]Sɿh[@о$7Sk:-e+tF&ԒT%+uhf_?>!WJ}zTZzeh?RLjZl[~yi][C5ڦןeƛէ/k߮ߒc {׽]O}s"qxYkkUekX&Fui<#y>MMN^7?sS뺝GXmoj#Gv|o<{2wWk0M|/joEM]ǯxi.tǤ_}ݬ}5ɑy7'}'_rE)%K[ь#+_s Ǒ1(jė)jz7:ΎB4w-s <{S%UYkc7ed}-vMz5M0H$׭9.,l8n!y~|7G.]~]_už!wqZd᫭M:M$I kYU [Iopfi#2ܿ֟?]YI7;/'o|=UM /huMSս1kb;leowz0b6/m-[K]o˭< +mΧo$9J:UBFyoj q 60лdaۿm{}=WRSRz'u|UЖ"мƟ5>=V=+ödIdK涊hR"9-t߁F?v]M^>5'?7ԯ4ˉ|nbvܾb̻ƻUuP^| oiMD-tkRhUE]e͟-yQuAIw m}K4KFPds;}{hui.wl[;>!4vdrn~}'|YB-RVf6VV[5C42ď˞+ݽ?՚F>$8x6]0om-=Ž ԋ Iq5囿3yr!GtMJwK}=h~/~*|\g 1?5ZꍧxgS} XK9.].|xd_znKUZ|Ŀ1񎏤[I43Tz会mAO û#>Q[O.ԩ9v[c~ 8|Fu^c FxW@KYEt7Gs$;b\c=|K>/-OH-u]W}r7cy77o\gl7&R涛SXhLThY-U jkv'{96\EL-5 ;gZKߟj?zo"]7&[:\}Wß|-6mҝ9Url޲ym%WΗ//}u=vVzy?<>ςK@x/V;9qr; ?h*IouTSQ]wGp|=ữx2μcmRUȆVw\Fa9Jik^g4);s<iq&]cNj:|ic%Ig 4MXiٯ?O$YT#xw.6Wo˲CV6uՃE"#q1[O{ݕp<'ǚĺnjװB O-L3G i3)Ttޯ\"oT}O<_ gjzzx[ú^i͜?c6k7cFHDu?gKguWwoCRzkugӍƵyuHluglv65 R$βGɱ+֑|{h߈!m;&ms֖^+} ?9t?M4٬$+B\5!yӆR[z_(aM]SO~_ u i mtOi sH|'PC]iI mJY.dy Q[ Y>hwѽ>m;ǿ ux{;ww5|1cw [Ȟb꺂xyh[}4K[_yk} O4YY]^^paw&4Gk g}kǼ>rNbPo8*R_o~<|WVޡ۫k/]|rFr]Mo,_ kGo*NQS]NDghZljx>?u} i-' |L!ӡ[j>գԵkͳYll}+yrxc#DJaUr;]yG?k3|Y|4ܗkGLtfx-ɚk87iWV$ҕo~G'7{ܟ&iA/k4C:l[.7y 0SL7N=仫u9Vo˾9|1w<|%ջ]v{cZI5ۅl|+:~^ %7|q'ٿ|șK^s{uVj\ߩ[Z֛qaEїFWdw1r*[xv,uX%2[I,p]?T`\񤲽1({ʼn.QD$sHF5dCMiFf~J_P>$xú@m5x |Lnٛk"~QtG|ZYnu3i'SWiF<G6'lKvyɤ{xH;dd0 +;oP`"Oψ^ j9nåK1I{4)#5/ L~d;+/6T7W,|Ak:~xd&!"mofu'ޚ{372$0}i F6|>kVu#1.f$ njib߆|1m5ަv'4:nKhQ˓{IUcv u/Yon5ROwwImagbUIFq߭,tv%akhR-m*_~^QVre7+{Zp+fo/>f$I_S3Cǟ4/?_j'ѴGFG~kXZ_2If~o!Gٵ7[)Ck3շ|) R_v?a9æ`Q yHγ&o􌿓#/i"}Ϧ'͜\ |;ogdLl͛/y-&w,Ss~em'n]L߽YbD!w+|ݜs_M#s$`OPIE+o`Kf H{:+nb_` 1}JqQ eBf7Uлb_~kp,E ģ9+?󐊌`y\ѵqmwm}(5i= 6x|˨ }GRd_-&΍9JvjuLZiu^ {k1PpOSz}"Ik?Q<[e_Gre#k[(c\$qlg_Hots<5sxz65S{GZ=Vo:d,2B ~[璓oޖ/w _h"Ynҝr?]3ii<mhgC4xow:ufs;뷪|+cjMfaR b9-۶y{U6"c֒%_|jxf V9K38hG:Gin{^HO4;K"U7S ʿ6OQyyasX j<1enef[k[[6[[3U}zgIj#rh~0׼?eu=)]F.m#cDGb:<=>GDRZIlzu͍ 2@/7e1|u{>7Ll?9uw^o&,}$O5+ɵn<:IvQBF|J.jϿFY ?Hہs$q~+t隗qlѺtee+2Oq5{NwĺZ6\&Hy󩑖cߚ]]o_NXy? N[?hvng I*mrBvܬgM}O-sx7YMWPW+(W̚ˏs5n$x~SL]7_EJg??ޥz_}יp-ҫm6.v|?7wΈ2,_E$g/KZZjWM%m1Ŝ64Fcv=N V9ߪۿo]c=9y`޻ۢ~~ 5#š|k_hpUo%^M #tO]ޗmw~_i?[΁mmCnh云䶸I# r[d?-0>&|=Q,C? j׋eo|XꚖjcdgk|hBF!ҵGI];0,:|y~24ium_|g-Kj:} o2|xax̑߿bmy3FW<\<ջ^3~Mz>/k-t5OIg$:GxuZϷg6Z[]$HO"ܱ[֜D.{i<9M2{mRIZ%`߉!BpcvԞgtyNjzA]Ėaw$ h-R&.tQg/ [~~$ռm O[2kMvfM,Co4qjYX kī ͵S$q:ޑ7=./sxZZ1&lgYuJmGZf54˫O.[[dmΙIJVӿ_7K~<g ,-|1$Udk{k=¶>rƟޯF-쪍[={UA-rhZOO4 FxZ9ɨ.ublFṳK1!"ռkl:4ߏM%S5|k7ԵE^:N#Mϗga$Œ(%>Iʶju,-g~_??1\I׵^>ݶoT>|֫ <7cZXJt"㯈'ggO. 6v#&QȅcG΅#g|ܼKk_/'&_{G㤮|YBM#P׿aź4pMvt7/>G<%GNگcqYAI5MJ>8izO-w>E pCM H[ʎ6[5GJ*8Ս+tWn3R]krYC&RYwasmV_p8F$o˯C]Oe[^ﮋ2m NM6Eq ԍUy?E/={GM:Wz:iE 5ybUH^ݻ{aK߿~nvW~UF2͖9yee6ϯmwKe.3{~zャWvr|kIkLj߻]̪֍]-k.9O>]>"6a[KC{\ɹY|iJ$T޿gNv|uu۷r/tPx~]ȕ٧ܰ?(Qϊն ŮXn2EkUA(pžַNVكJo]]i0]=gU'u:tnϦK"yO-ȅG_.2L͟W!8+˽:o\M3gYΝg#lPrTpƭ4MF<^֨9RrI'jˑ{.јlv~jSߟ蘕K{Ր3K~Ew/?|ߗIlsd|&*3iw~uUܻǯ5޶םM^I7D]ve$d8Zu 8UߟurVn??5LG{_V*ͽ6Y\nݴdK_Ц6m8P7>LF݇o0>MBT2wmcPd' TG}ۿ(~RK2=E<f\?Ppկ=Vo{֧cZJK wOi&oAnb[Y^lS+֦-|{OMi+ OUN[Hk h#}[;鹣VEgn_7?笛6KgDsZt;SEm}w.U<ץV/Ew/~[:jj2/,g_;$ߊ9K?ףwf'?eGx'úފwIyf֗/?SҥEB؆۷U|r=cOE[g%9F_7>K"7nɖwcN{~gWT1eUX 0s޳oU=sNKhTܳ,B#2(GVe֑9$4^EKmf?6_Wfo֦QVCЄ|l#`d {<{~?STԶȮV9eG'(Xߝw_Y>n0mZ{K{_y]1C#`0[*c"RG3JFݣIn#Ѵp7C|n˺G"YKʧm~@3$FUV~o^J {-vοcm&[Y͓oQ+7̿רT?טhb #YnE%!u;yFW|5sn?U6XT,˵6]~oXE]/GoWB%L^T]?oR0}"/Եmy̅ 4&L-j d⢮MNUzzmfoQ՘ݵ?gϵ}s.k'.gjO-3<)R)V[sZIF%36?2I!XlE8ҫڧdJJ;oR$epr M'潽w6k%g#cay\u(mmj_>'ki^fX#oVJ{¦˚kiݬx2&R b߻mUb儭$zEr ޡ[r۝Vܣrԧ ==pi]}޼Jż>a׍ds|gJu]=lvrZ? $?xU>@emʫ"}ͷ9xY)Km_wy*i&Z]Mmw+h>eo?aSNn7# Jϙߥ/)U6y~#{y2dI>OJY>%(ӆv[kS5o[E-5ԦcfxexZw ZOONM(tk~?nJΧi{.Kmkm59-b_ܿi>iΓ8e8n{CK}vn6nҝ-m+;űd:כ#5[j99Or's4dhbj;nqxo[N{ɚO,JdD '˶D+|\(Bݹ/mlm.2&u_%EVjY[%pksX(,8fڻk-/)(!d+3$q;mQ5z{h_Ϸo*w}\[_ +Kvliww*d'[|ᄍ-0}y^]J0$n;[IA%uF-WLr!1#n5T~'y(I_8$.OEWvߓ_Xm~gS7/{_{m*-Шic}ʯ=[jZlxu.Rk଱eѾڿ÷K:4E{2#kݻ4>aJ='M^f+yUEr۟oTR|=b߶- c{.ݾ_+?u<,w2US]Uzf# ߖ 2y+"FG&BunXoxBQQn|M r4&óiVg[Ek}׹fo5O-6뫛ǘ;CD sT>Z[;Fە]6^U:u&kJyi4=?}A?k{Pcʯ|-i&y{QO_+#=;˧ݮgFjΥtUg>/T{jB"`-a9\~G9'J3밙 jm~/4cNu+ &4ݳnI$MW&w׏OU&ߟ=xm&5;mZnuCDª)cpw_ UV<7 7qbfϺTh~l$=s-͟?(RcV v3E1{YPWnMc~W4mf$`Fyٶ=еY +;#ƚ6i˴scɷv߃W<"F52\?{5Rz I R5MP;]7Zg}ֿ [ϯa4l4{*s1Wg~tPfIxeu~~]tT]w3WqA 1> L:-z4d.Yc ]>:f ӽRSez<#/ /G^լX2\v7$"o&i帊Ք)ҭ[G]~ogC[T߂MG5Wz}ƁᇝdՎ}[Z)R>7uIan'*0DTkE]ﯽ]Q2 Wğv3[k^+\}~xGO$WTE#f;jS G/o$bT>~^ŸcHW}m<{u$3I0m.rwJ=4U|oMds ;@nXpnZ9%ͫzygn i"*/,jc |K߅uf?|AݑWaxB/Ckۻ??|i.z2U$_+*h.| cj;:Nd鹛Q[:\% vNxZ<11&K:A;w\RRr朜ӷ;[edU,~YW# rpѵk}c}qA3/czwǾO>nJ./_#6n'O{sZsǿMs6;`w=j'$nç~vg!S?'Iťv(k:oY6SKh?I+FqK\ }߯ v< oN..y ԏ_zI^ M?0?hhv5lpqG?M-o呮㪂G{|(OlPpܓLw4$>);|l%psԂ$ƌev2f[JS4[Vg/ҴvȲe շ*n_ԅBWek=Rp0#41o֡6ˢv nT&O}1}?_-|!RRnBd]Hmӭe*_:Fwot1? 'v?jV[~?l6יc4 e薌H+*Y<zm7S/4Aj`$ +m ُM!Oo&½#<,w~VUCϟ TR6($2{+-XBI-i kgʹg3ݻSf]A#i.N .OZ?K}`[tկB qqݻU[P,Zvx~eY /޵R7,÷/'!nڵr˲x{EUU4=T6bk?ݷMZjoms:s3Xi:XlcYvo9jK^sǗw5ig[V}W?x֊wz3j[fvg$.>ַQo]&>"UiIvۿ^*Z"\=̻<:nu5OG17eq~x;AS_|G(_\,i˙cR;(?ϳ(m3ju ; .W; KIoְ5I-ͦwQ͠vY?;-.6c1Own$~Q^)[*7i}G6__kOl{9]$?y*O)nPeY7Tm=2;[. ͎8Z4X&+A7}6Js]5 '-tF]E4KKHgѳƻ> tTy_V}S$z۶צ 'xQg$dO B컖k&I7ti~?/:Q>Ѽ;W=7@4*LRFm6ӆO^mj~.t?>:y(|m=~?KC$߇o馸3Itko3I^} Y|臭)ۣ=iƭhjG+fבo#'"ğ 5 k3ZuhPhbiK;9Vfˤ;!f<%qԋzj|x[C::S|F#~[: xc8mnDb'4/~1&N}uxe%t~g~Ӟ^4zNuA:彾n=bϳK|UZ{J-oߗCM|GA|5ӿc)w?wC]:5֭nOKhm/?[^liTu唵ף_Kgq]5ݷuߒ Ǿ|\`IM^o l?a&_o7yl8fx~ˇs ~ZMޤ}_^OFI%uKJ꿅f|YxLFwS|S]=+;?PVd隸a&/$I>~1rgvoKu{:֭wi+K}O?%[__ [;wLִkv?eBRT󣍯!즆K_/Pe|p =ډ'm~[v"[4N;|(K~R'ocAj>DAM,7[ZԬMܺoWp l6aR^٭up2E$k=Ay-$B_MyݍzGw*7Vp_:Yy[i)^Zz3JQF/]41cu_' vK~ '_5,-mY"r\}4jt0Wq*_b[o~^|!c D2|opZugKtrV-Cyٟ&{?;5r/ymo}/zZQj7? h,ψ#|E[6ͧX<2~M使I/6=)o$d1D֒[z|kূ9{߈ 4w:<:-Kj56F׾Ml4y[VK{뉭κWDYH8SdRsR-Moׯz|+Iowŭ{^$^"A=oG"Vi4>uz|vknl/ׅuZG >Uz|P_xXOo xQҵ柤IǺ+=sKOkxmK Z~Ǝ7Ķ+3O.۲+[Ir+z_w<mt_NbHt _; NMYn&o.k63ñ74h1t>}VdԬt[r<})t]w@9wt$Mr/ԚVKol3~;A+}]~gG* dmK[sm/4I k{˶.orۡE"<7|ɖ)o[;|s'ngViP> O5r?YOsz5ƟVK8}.fyc7d*)oM/W|Wk$$O<9z-5EҴ-#ZKhUiJRfXRG8Q:sMkL(:n5Nޜ#&u>|S'|en4k/|W$ωoc&  4wCxfl5hUOe?~Ri?}5K |s)V=ɠhZׇOXy k"og丸L<ՕjN5>v*n{oᯄߌ55[I/|;=i2MaYj32iM :$2C\~PPuzZJߧ]Gh~u?ױyvLkvKnvI۫lxn|Z4ׯ_sޫ_3$cK3#H'fx;~8ٮX;?(?n(5#? uu_yem/45=+D#iədH,nM'By}bҶ/+~eҋ# |~NKn.+xuYY,a.o-7ܻ yr?3Gz?~AoϠgOMmnT%@{kuv,fn$Rc̎_TǢ5i?sK%ojwTU{x("b[U]W:}OM7ZI{E]["g?> ZRSu ^{e7Mͦў該S^Ҽڔ'?1Bo~ |cko\kI}$Vk]d^\+ZܫF>*^"Stʹ,{cmInN`|gD~>=uOñxVIԥ"?>yj'f [Z8FJƏO? 2 =5Kxj&\jKOn42G>ǽ{ߨy'xz{fo;ῃ֥C'MZݼ}%\khlK+}'QuI;W Ku)Ƥ/>M3|uu{~,o_[oqZ4n&;^_[IϜFJx^+_3ܡ{6gZx<1M jZ捨<᫡75/FfImU-OcH;;|W}^盈d {=7~č>Kgb}Nڄm3E#I G"iI33/-GGo{k,sT9R+_;~|D#,>u/6MޙtךmψZ ?Ckn,mlm߻"Bqve+i-ߚ]yq߈&6a/>HMݜm1x_ҩiz`׾~ ?;Z_ĝ~oéǧj\*CٳH>ͣ]o3}n$bϚO:WqKuۻ>=cYj [OWyaxAmuG<|a&.adE[b?ѻsaַp?u[w:ld= k\*|G 1~jFN?е;z-tMjޟ5V{ˏ95V;9_߾O.8%[WV |$Ox*Dl-vںlt̑voY~%.Gk6Mͯ?}_翲|R<*|[R7g&Dls"ٓ7J/^ֽ7In=co\d{[Cqm<ƨeo̻+(W.?s*ϯ`IhѬ6Rvݑ5)<+fdww91~ojM&䎝?F[ m^*,@>f&~e}gne}N K+mGDjeC |mbZ/o5UoJ15ދ'|NjQE9$<ܫ{ȉ koomJ⫆O߉멯wmz?m{rڮ ڇ{ƸF g0ƫ4AN{z9I4`__zզ'eWm4q7oJ>2HkI^*?>#V>Z/<)}W,En5(-μ%FtHc<ɣJW{}k׵l}{m-dswɥx_o>]j?.Tq?~oS$#¾"hj~ۭyCW|2/o34qn[ng,Si[O5ky|,K¾JkVP J뭾sI{v|bRq~{ؾ};vp_sy˴g3{ʏVm&ϵ+Wrs'˻Zŭ>P)i6ZˬOw<$KcoAoڙiuz <Oj&}mXy^if[#<h"` 8\Ʋ|uvw%TvU7–YY~_[R-)'G'L1A[yy[xvel9ڪjFK׉mFZ퍓G r|/I*2~ΎH_Khiz؝Ӄ)Cu@eg-‚t Iݶ6ܬ˵|`u9[]KG{Z}ͦ2[WhcVfˑoDwozw롤%}/:gm"JKiKotB裸IO7=17~+Fhl~ןk t.K9$},jQMʭ}6Ee'xJW??r쿱1175dsڵ^k&Ql6)P7/u k>*5{T-Peh~iuݔtmQ"yhx[QIIYF Wkq34 .4V)GGSc{n e[xJ_hfiUl:oa1eo̸MvwN7~=KJE\IVL0;Ip_,3^Hi lefV_]s$|˳ltYq'ݗڨ$v!>o*P$mg3R{zߩaxH_L}6k-JlE}I=zIBVV.Iso]hؾbjFZu4ɂ̷#kE7M'UV Jnb28_׾k For.[{%N֤9mlJѝc*6_9:-dm˭vr&}YAD swtܴJ6;;2*߿b*bСu?p{yw8-[>&5 Ry,GټY5 []a*?3}]םtO=Unӭ5]z5}*s'c2""&$;KM>r-); ?SKIdgP$Ubevv_Bm˧osJOKy& "tV_2Ivyjs:ߝCWVvwʚM ؏mKx6*mnI%*Ro~֦5SD;)uwz_ApKsoǧrt|N׼+m_x3K\\jjz t#:+\x^gy-lth_n{nb𼏳?i;Z[IZ~ߵ<<|#}xrWU-8!kf_[7ۛ4_.8g}R^~G,ovM9gۇ"LB^uϴ;ݴ~*?IޝWFycuuk}kF^)4߽̳tKէ_s{j_xš/wZCU.m4-e qڪ^B{myezz}Sy)g|k㗁tKt:7e3վ Jx9GBƞm淒6}¿yҼTU=جsZE|>h 㟃Ke&sZxO.$i.mxawH^Y#6GeXIV i^~.;]{xձVk_yZG ?Y5~c>ͺ]g[O2^iÙok~fY%J]/xƩAe]?Uio*?;~G_8/(i{^?13HRmLvYm"{[K430 #vw6_ _L=ӵr0>u+;G̪ؑ~PZwu9M{^md#ٱT# *CZJM~ϙ^Kfrۤ#2d0,}U[ Sb姕4!ն1˟ޟ&ܵ~k;K_>5meB7bH>FU5}5nz*^KdﯚFvV[$P@5uc]O]1^3RR DpA95qZSQ\}:>EQ$?7?NkKߴ_o5X[ճI>YF7n֑~{V-ӊ鮺ܫ\\E;`?26wm;͙j5>⩅NW 'ԭ{iE#[yw!ڪλGzt=괩E_^4Z6#ɦO0/fm[joaWR1V:dJQ?ըڭhV\҇$'ZXJSt_p>wsm8$4%e l7(#}uň\[?Z]\*+h;.ݽ}VOWRWvQ6Io4^uܮ%KK!3).[E%g? r_oȝsuvR/*&n#E_ۻs˭Þ=v2'Gd[WE'̬ۛМߟ9o>O R;*\*D)@,6jTMϽTi_o׶tHMpYTʫ*m̯⨝Fw~eΝ5+~=4- fߜH2>esekxk7kHTo-ǘ~m>f֘6$+Nr^8"m]M?X؈[nuhsTn28c.#l"ۇr_nOkk<&_-KerT9{oj9)^s.X4P-Q;Vq([!DL{_\_!ӒwרKRi0CSxڅC7]mE7>oD^Kّr,k3nQ{Tk+=m~eė/y <#)E#2˷fܧ[￞so߶ˆF6-'feǵdf?IIi~(_U׿۹Znj^HLF%%XY#2m;&y{=/}7gӊ-/̩IK 6c:HNyܧ7ּ2^Ͽ7SV[v:+i %6A4.n%ef>ɲg#kҥX!9M񯆤IM2&Я9[wE/I\v[ibiNxj~+=/GiMyf\;6,~e[^d5)^56Oҝn7sΩQX2C;FE>Ulđ}]11JOe'm-Vjx~Ctu(sm;yY^FlJ-Vj{ֱň4Z}=wy[ kEX`7]ʼ}clJ:>]{?ytn~gEqurAB'evf~שJV'wz馽}o.Q1|V~<InKޫTEXTƦM_?T;Q_2v[*UvֳX OTթQ-|g_(ɱbaVo.?jtKRj~^:8aVI| ݻjݞֶ&qkZ@dG߅6v^ X`+ܪRujӲT*5=^:%JA9݅~_Z֕y~7_aU%ەc]+2rM?sue'm{[D(RX#(ݷnev:fW=T{_ kM<Tq=顪z6k͕[i%H|TFGޅշy?w]!ܭVasl nNYp}|s_ 5VN}H!1X{w&Ƣ~$PHpp9=+yU~~~gW{O^;+XW8`<*_U(4ok]]fŃ9C)G?=yWv]o} i'?MG|XkR 0|vnWo;UCb'v=zOo ;ooZEz]wԄM1+LQH6`O?:}-eu3P{XY iv+.\Kv/2.翙[h:ؒq)-(٤m]ddTW-ZiJz$l9'ߵ:6˴¬<*tݷw?lFz-#A)٭.kza'UY¡8vd}uȴԖ^7@\_g&<<ʕJ~vN}.ʁc]Q lmﯯ?e7Ý(voՖM#$ LN~oMz88KQߗOM?"QVH f7i}c2%)ajۀaG뵱D?A6W=aq&,mim+-!~7/ϳքٛB̭&o%Fe]0Bj?Qի~ևu9 5km6`yd{U'MV'O#)Pxk'}}J5գ!hٙ.n!сaq&xھ~wRq/Ȋ]&ZG]j_#96~fJ oCw3;C+4nJ{loe [T:sz]q%Yy*jNwF-CD]O3|э;~79˻` ԏh ` ܪ͟ZZyk2(0%W%ܑ˻nv7W۪NNZ#˪׮3kY4<Ģby5ڸ]nu'mwΪ|quX K0::Ŀ׷pNk'{=7SRE EML.[wOY9J[TMsJͼf ~#{]MZktfT$<~m[]w^,귿'ur#(ۂ[rܒSj[]ɹ󣌕TE,Wl"v}4R/뷛4[^;Uv? |KXQ涿}{u:{4uOpgGHy+6W q/_تX~NlC̎I*/EzW4ߒ6׾P1b54ǘp6ϭ\)+oR߿W)q$i4fcoc]Q7_{/wk5vbU|(I]մ`Xuԛv͕["V%`QW֪[_K$+^d6Fw}[t!}sU._ϿUu\w ;y`o}HюCN%bFWr4d镁0"ugoWs/]ZJ8Mg|UWS7mv+>6ۤo[>|Bị9ờKi9hyw{|spmJ_{i[ѻmYjt2Z|(/"Vg[uVx3I/{kO)]7~,|xM]7燾pkPͶ)\ՖŻ~?"5j 5xR]N-`]IoͧDC}?DKm{(X7赶ߙOI5os߈WY^Λukoi&I?ۯ:2hA嶚IZ=Z^Ae;ſ\~~r1YlݜuAN_{Үo [%|w34[77X٧ygnh4%Y]b8VO3|'oӵ~SV_iy}bsyֲI$J.Ҍjr]]?U?(xnO~N?lu e_%ƲFkˆ}Jry Cc}4+d$N?y;_^}w٘[>,I:&巳TGCw/hdo3$i7.3~^A}[ݔ~*ټNco77z ft6QH6(r29(ܠU@bUls IL'ӌm9_{Թcs?G>v\@*;4pgwA8־Rew=)sy[$`?NVV$kLN3 ǽ4<n5qQ}]_8[p;X3Δn7#߰ ,?]rϽIV(^s|{sW_O<8 Y~t8;b8rpI[~-_qܣ?ԶNomMT;< nH=sן${~/ݸ?w}z&|ciZO|w`I7 gwOϯ5&]G Hչi9%-Rof1i ݝh.汥-o>ƺ?n#Jv3Xf'Ώ:;~75lGAiv6Hc~ϊɽ5+!%ڣ巁Tmꏺfۻվ/Tޝ{a)ErFUo|>P"R4yIgVlST"ѵ=IFZ`?A =zz$γ*Z@UFލis7J6W|H.[β˫뺃@#Z[ ~;~o}=vz{J?7į[([MQ~y`~m/fJWz~~ޕկW ɓ͊8OkbL#7tCGӴ%'7xo۹]y{fs/彺}?fIjN;Uq,a\Ȋ?z/QRM;iՑ/e˅Vs0-+${5=}' 1iԥߖߍE~U&V?=Ƨw#9_X|s=zW<ukt*N*?6z$ '*K5Ԁ0D ƬZS^.+ɏ'w_ǷۿaYƕIzVn*oTƽ0_}|m֫F/U}O[c˸s#Ifiv5++um]qHcjF$8Lp*?N~QVE'}~`XҲNȠ*F-ܜ}"qMߎ#JbW,ƈCu\lʮ-73)&=yeurZiJNE-W^lY/M>Ðw7tgIvrwjS^_\-yi 3"fYdO3'ȿӚo鸹~Y5 "}:&H~O>ﺿgh2j 32 [aʅ2vs|7WE׾yFROkw?'V j5,N5_#j_yB _@[_tƑۗ2KyHʱ}nOqkoש ?P;hy7=#r]/_5$/yRyV rtD8z|SKh? U̿&o?u+Ցnftl̮>.wvdt/%e#+\[oK}w*mo|&ԞF*s?]_ ?[|6KUn?i7he6X'iIˎXTrGlugЃ#Ulu)%9eV3mIK/_ijNRվ&ݦgT*^ Fo}r/7_]eKWP}/o=kq=Fcs6i@"+k[o){j0I>j(? wInXubRտBHl%J3@F?'sNj=m4vZ?fJt 7#Fᦸc8E<>̇~;Gx3nĦcŞz{j>foa=",y_)i{&tbGxd.&[ )'fڱp1̿??ya6ͿϮ:a]m=f6SZlv7zŭ+gY&Hdg]#T)KZ ioӷGCߴq|;ሴo>ۭAzlQ30K˫ ý@,o9k+r>f¹E߮j?O]__|Y{cďkVf{f!Pmxom5ϱDz-I&O:2ugxK[x #R.RTAPӾ\(%>c9<{$=O ٭HԤgtO%+xO.|p^޽hv=/ <+uk]Vԯo-EYwI}b])I8}:'˩Vw]cK_t]7WӴVBo5>Ft.-Hv2O9)E&ܺwW v^5<pڕՌǀ{4h.;=J*8tm^gGɆi$0ɳҖ"PN>ݾv͘%-^K+2_.--<-ohZF4Pk[[XXòiҚi<8}zJR;z|Oo>>2W7i?19𯅵=@Ҭ|)4wWY+Sim Cna ٩4pz V*ןצ%Q_>.< r;qGmjRzM]M 0彍2jH᳒M>R?g̾'gpQp]O>~|P|?5ɼA^&Kԭ$mzi4-d ԛ.w$wu0ޞ/ U ny*Wb'?n>x{RT7:a]E|.mO24M ROY_ I[]t^~z (|׾1f8Q >a5[OZԑ|Ios2M"&/1',5<1Mmtw۟/cO*z]**[}mqbmED_c6Z[j&yh-q}|g>&]6:|n6qky/d4Mw99|O/eݝďOCԬ^#յ[5X* MXM7FSKf_>$Q5 Bѵ>(]oXit=Beͷkh?2i<;nd<3Jz-O,Oꚗ4^k+u56KhmR<.@lyJ k0 F\=3~>*RAYX]sDk:> #B2F-ɷ|>:Y%Ӫm|gs–^(x5{+/%WNi,c&nR5qekF~>3+M}eV0_y_| Լ-|!?!76]ϧyݮ>6,l"\;{x96N"39YY;ǿx3EI5Ě 6fVH~UKX"0w?[ĒLUXU^dm~vU'׾_?j`g{_m>R[]\CFmku%m M7O(Il{SPM՗txgG/?: , XZ#暻Bc%u moX%RD}LUή}_]u_ GͩomR+=2 2;ǍV8aeL>}xmI۾ߥ6 彾ZĚ3o [٭ZʺΡGAZ6F؋'#B1Wk"\dڿ<@5A5/\sxoZM ?.ۭO/,fgdo&+kh?DI:fm|T:j~^3ᛟ[Gb¾([Sh{o^[Ꮖ&qgwoY5 y$E;4ܧǾ8cDsG$5OnfnRuWɟ}'II>*m>g:c|/- RbKj .m١i"KYn_DM#ƞnVIͯAKFfs5ۭJΟƙ_]4z^Ϯ`촖}ϡ|46}VvV h!~Ue]:lX;NsL|'O_4ץulo-Sr4o/,-ɖM ~y$iN1jgp.noG -.LO+.mf8R?q yc8T_ }|AmkK0f$9Yob+?w]{~? wmgмCGkqoJ|g9jeWϭ)_o}<TYX|-7wͳRXI˭'P69$w0BWwzx|td}c|ge> _){ZD<'Ne志>Dݺ]4+ d$5EFRyZWQC?ώv~_I A%ƷG鷚լp)?|;\}{o\-[]Gɾ>:6F|wֺm7o40#{E 3Og~׃m şm<+2ZھDte[8MR?r9Jo{uC[iMvu~E ƫ򪟛gSvFq涺޿|3aMX֠+\X⿊hQ,v>b#ǟM~)y|3S}=.6mC%kT]u3;|M%~ۿaJWzt.Zf>db6ɱk>z*.|=JP]u~|C Q=D:fwoq^jP˫!ծmev~+.ew)[wB-3OD6]6En4|^ϓ?W!(JzKJqK5~U+Z'xJ{X-M"K/nYYYfwMΟ.O9&\mo}҆ 3[[]:5 OÔ_j4mx>ek$uw߷q<;nI;tD!tK m2 p pZ°^?]Y~ ޟ|u(j+?'s6S e|>%ŴI'ڒW>]ۙ?1<`.-`ϒ\c!*:k7nbhwG#E컕w"w#\swgqsm!˥-e;X~x\!m[kun߭n料kRNn&譽[c+.3g)w}5[w.yǣg60@.Ss2w2&ַw.).0-5^aq0]FqaՕo=[wcd;㣟GLJ&pK#߰]vH/ǽ:UΏi xEKLòѦo&5Bjho,٭?޹eo5볿k ^)>SZ5&6VR45-tG ̱țwioYƔK6={]Nx.pHS8}h}>}ޟ$/-d' $ڤJᡖ8Hppw?;38)vHd]&r._hGg}Bp.W+rލޤS[v,[Ʀ"+seXc^6mf/ͣրROfr^}2PTtdVHSRf8' + ͛}K*a/}vPo2"'S;@zl;k0or*_JDMMut*=-)OȢ)( NH/axf[e'Ѣ,㔗Wm>5Zw)=_76|T _qruBخ)*^Q6ۻYJ)Ҋ~]/ϛYbuh^Т]ق^bU$ n9%}38ŧw_N wÅەm\)43vh,mj6A^sӭ 1Oank%#edޘx&ud9.m|O|r˰$<=k]Ҋ←`L]7'oO~&r5أ,{褪W6@r˱v(P P|ŞS(u64 VkhmA*rm۾tsOֳm*2͑#ɇ Mdxn5vg&M8ԳMQ/uLSVW4ⳞkmM#IZO/P{H/uz8K݌K3Y<_펟:+Grv7{o;M.`!v{< HyVgcBwۣ-!p#zzۻm_j/$\|vƻwBǿvl@!y--'s4`}਻Y_jimlZdjHу2<¿$yr̰Sʶde)sA|-8`0"Uܫ^g"qk~ɿWuGWŚ[jv[hl|>Hf޳M|?܅_ꎘU\YݿsԵO|;m7m_r\Meu,* 5'ˍ2HOm*/hcwlWDҚXI{{d8;*[z[\GM̳yO#R4_'D}+j_b՜6w{Bqs|>H_<}e<7)SVg=躒Xm];,VI?y"tڿKo9G꿲+CEn|%{EMJu[y.Zߩ?žwcM%X[-g7Ƒr4Dշco9>bF*yt5UO[qxWW]C{iZuduy!]m.1O%Gɶy\4N~eT+}:k۱B4]7~Q4[=Rk|u]Hag#}H5uO՟ߴW_4G~oyo$}qnm ދ'4sC7 Jn.V{K%Y~/}/y({CmgĿl0j:Y:_k[~l~Gxwǜi_/o}M#+rz7>|+g|{ǎn|Es圚fmivg%٪\4׈y}L 5U]$o^9,t? iZ~KK" 5b3t26dJ6_kUrm﷑Q¾<}Ηs<=ɴXXTXU/&hUi2v2ț~r-jG{=^dΟ׿׮ qu;d$uXcڪMȊ~fny'm{>z E]u}{oq]_Nc I*_~F5քjzxjIF}.鯩dH吙,mPt+~~UiA{=~= Nd vҰɻ̅Wt]o};5ֻ-y o7EPy_Zl\Ϛ:=eFyR~byssj}?|˛)QX7̻qw һ[6Oa̖b1džMckMݣ9K+v MP |X|iT~d/N}ďmec#yv.yZ-w[X\,{N`9$9|!  [k/-~ZjqSpdZ^Iu#+YܤO!WB̏>-rKKN~Cߞvi(HسLĮX%vWm8i^8ho$iC#X) YNwݜ]aMݮaUusg9ߢD;/>S ̂]Pǜ#w_ֵ3FVv̯$N$R/βnzrp}?Eód#mۛSvvjקuGyz,,"oEI?PkTnM{k,G @n]boW:%z.e OI}~L=pG=Ihe~Xvhrz_3J[שI@Ue` qdTڻ|סNIkw~7<?k3jʹ׾O_kT9f%tޏ}>淫_EG4)uu%UVFED}ד}z:-ӯsO~%[K;Ermc^?ev:> O^V믞߱Êͨbԟ^5g>9`# #2m_?$_AJ\l輵Ϛb&n~m$~l0 I]W>ףZ6w&Tto;\#yS\O_ztV3?k52mrv\ܽ.UM0آSm̻zmϦj?SjR~"l JUiNGrnsִ_cZKw˚t]ꫜQ_˷߹pmW=P6"QMoX6ZJ6E'-}5nGdpIIjW_F/зiJ„@H8O?VJ2OV{ŪVVz*1eハfֺUK-H)km~w鱝/Ȫ "5/y~_ c&liB*{g%N:]7?/CSmѕR*߶Ե*E]`9Z(6߇sӧ(2(mPmn«xmۿ\_o%{u~K.c{k(PN;}}SISlL|$6;fߟh[̅9onV9cx≷f`[vݾJ6v˯Zsyzm7`s֒0X_o-|;T8GX]noUoQ&y7C. ~f溡ocʕܬDQjgPOznS_SU;)Ajy >?ZoM&u %bvco XIJ*nߏk6 /M.в:+~Q /J9'}_^Q뷞z5]KHz5oq:\lct󍾟_3e7Z/O^QI~+.ê c ܿMrsN^_35 kkwsYZIixFZX]ѷggE)ӵ7Y0,VSJ|ʭu:NKׯjײUޣ6wwW3p[_k ?! eKULLZ8cI%m]j^Y_V)OލͣOMvΎc 2Ř6]~sk78I-i[[rY.?.1w~5oɎu#jq7qѐ6vZP{|ɕ{/dLAYla!m3,|m*pVUSO?{+:|n\ܯ͸_M: ootFqJ=&l]JQyd+( ]kM-կs)vw3IDo,>aۂo1S()vh棻׭~>a$mV2 tgkXke\uc+jiJs2ʐkdotޟ?Vt%}C'V ?':l7`ʍ?6O7 ǯ&/߿ >X04+g\ڨp}˿=zWHOz??O7JK?"KEZB܅d<ﲏ[ӧ$[Gd'ugۢ+Gwn0IYp.w#Vw_֝v4;wʠ:hlP>o|NXX~ZɧQɴ1*p?/}z/UԑnpЫR6ۿԔ$_[^ϯ^~dK, jp1MykW;_?ƊK~dmiKt24j2w2|jZ/d6,ec_W??˹𫦬zör%+s/"Ե+tocܻWfn2E_wӮnT9ܻVafY<"n Pׯ_8+W>`7˻/&uo_!˪n1Wj ۛϭi(3|o VO= gqr3ǽ(x7g]Ωcn̥K|fWo_Xr[k׺yeY^5'!fmzU(}>jxʪW01v;{cjϿR}jۿk?fI$=ޅJ/h^!'g;v@g|n>?rTg̭ |q7oS;~R2nV]2ɻo}rjxo:m۾m3R?ݬh/4:w慛e#o1YX>XOKC«]ו{OWmoyrd?~mU}Ϥ֦n[_Y0jR9r?>כ*R_{PoF^'# ;|뛒]I>z :%'qˑ^ChuVZ* =mT5_štBHR(44GܺY[ٖFwo2R~'~_z}߯⛾mo-2t9m򲺯|?{6oLm_FI#|~go&=]TjJ_{fZ}~,Jfۍġo=\.[KaqaߗOֹ%97v޽)A_W|ؓ]A rF?֑m\OMm_e9@r=1^5V m-;A<Zd^2chNw|smoOւF"k5 I\v;W_Thmq冸-}_o?>Rn? [fjd\p+w6:-R~ht3^̏rb #HٗܮV75TvWF߷NCơe>ڽ-m$6ѳ4vl74qoU({xg>$mcS&yT{gr$s+B|!FU]qk7$}wG<ܽm#iӸrO9Id8t3DzoҴoFUC_u $|$zxS=:l-#_c}\51+WtӠv}_6 </ee[x<:&d?NOW7?2~gƄ puvmͿg7f^`F.~ CS1$M}ڍOn_VO_+_?9V2K$Fgvgt#MEj7Ԙ=m}id$g-ӓ^ZRp6N0p|⛒[%&5rAn[ofe}uE@nJ**"ʥvV~CBwI[(̶}s~}ݔ\KYMT?逾TqF8-/K^Hsj߈u@B>`?{-? JIeA;ۭ.+՘1!! ܬ*+oS^e$շx\,,Uq#nm?KOe%X-wmʑ_?7fb։Uw4m&9f_c/[yZi-*3yo#_`sqhH*?yw泝{ot4N ͧȊ}onC YVMmUF2MB_֟]O@0s( n]nk_&I'ߩ~%cDrC߹߭W%&cTL/FXm.ϓ}cҫr/R%7}WϿ,yӣ #=~y?}Njݖs_'O1n&X+k3#aФ/˫4*WI~~SW6L̖i7>д3E2Bdmz䧚F}_'ky+2:}͸< Ocƶs+Lv"3+?:}ŭ:]|{_Pyl]3^]_[M6HUVGj|gyMs(:uS`q=eK}~y|Hᶽx ƟMB+e,tU8$i]&ymQNtTYEs:T{%ܮ߹,”N:~z={n~h? 7i~/]X͸l㰾gEO[WW#ZXjҡ(Qw.ϿTUʃtgWg鿲*;R^ #kM$V'۶>VWkyKӿM?_s>imvךصQ$v-[ǗH s:ˍu;Ϟu?_MkPJ~,5K>_Pkui-cMhM=ŭZVϽͱI\qbq2ۧ,#n=|[ᆳ o]0gӒ_;=#fԬc5K&H?Kw>gC>Nn]?Uu>$N/t | i0i~7|!9vӴR}3O}ld0‘4n.،Kvϫ9)ͧ}>}|a|ž,ּ z^!붶ii#knK_:oHhK1Ɲzd+COwnگJi+$t:珣:DžM=?1fI>]ۭn.{yM yΏHW/c|_/__WoV^Ɵ2&}o|7>{}{Mr4:7)_{s%ͼ+xnS;a$-o3Ǝ"YJ*w۲߭,MxD[KՒ]OYPMa5Ԗv9$dJ8񥉫쮛\}ztRqyw7?ŏw!Úgk%:i.wqsgkk 2ylC9}zi{U yr:??K~?Oo# E[_Qrk[7_ؖڞcgZ kBZ *SjjXG󭦎1v_Xl6^_^h_6:Ɏ B/~ Az-*};q OKVZ72R?nzەmYK컿|1s|sjǺ/}4K]RATPUζLW;/.?H88PmwHq<%mR~h|j~-%Ϗ0nmݼ:\_xwTtj}綆o"o<\Rkom?zqҦ'64Exfo <vz z8_%fXYIVX(TnmJG]57ǿj_xS]sFJ'<}Vy{H|7c%qZGk9&*u"$ch({_;z{?>HúƩ{Mֿ\AG%k4Ѭ5DM -C4>f' :u=}78&2g|M_Q/)m2 #|s j0z7PGlՄ g|<0oXG >rQ*x;_a3>sPx/6dK»lwZV6/o#;%1q秂ք'n_5oy%؎w0lo9F۹~*{z>ǟQim#KeqjFEeq&$kui#VFycDzW"iZL]l&O&V;{|kgj)Śh2o6ɚd7"y:sI|U#̵{<4 x>MBh ЫEkg=ŸyQ'^a)iR_v8E{WJmwkw_|#s+D֬l'TdXtKxb;29O2<m}u_3W*xhדvto:--O>>s]rRXxOY-gDG^צof}_SiK_ $|-o@~$|Uj#ԧ̎z <(oḚdF1k]MyGel~cU4.. ֩g<.Ii3ΈHv͛hME-l}مZz:友?W|!CwYw%0k YVuumڃ[*Lh[y䙬j#MϹt)J,mzϯ?k% O~8ci^R^R,'Vmv-'C[[MHd-%m?%尺[{OWy,4) s7mvB|XH-~xP_hXHlг,gIO17ͰҚ_¶&vonyo%|f𞙦]xf!n]֊ Wctx5%gT)lP/_}ݻ|B׮4]xcT4xw/ٵkSkVI!ii?UV^~}X~{o9ASnZi}}Jo$ٍ BL~aALJE[8Cq3#O;DzSվ[$⮿WS~1i2)w}3Nn8[_:{{a|˘!x^?29!%0ޛ?^gw_oozu|^6k3ԭ-u{%,=T;*Ȑ4[}7l+Z+s /n2ZݾjTwV#hffԭd5̓C3⦓s{(x޶yG?iτ_u[OxI^xM&-oyy寋&5ˆ7>tF;ڍkas>^mu1^KDTW=^}JERܿ/>Ug.Â'n$j7ȇeI~t+mY.UU*&⬭Ow'{i:S_6 OAue+5kbI,WɆ88fi{{s$~rpJ3UU9rog7z/2|!1uxkw6]>87~9!yO"d8m89.MjTݿϧvk/q{omfO2Sb3ISSD ;N1~}i*IOD99ntn |QǿEe_ Ite#=5!̲Ls4yXivۯnC~=;/'֗X/Ú]>G?-¶g&*'pGYͯ9kNu6=Co.cnGx~Лʫ?pV5wK~&7_T|xPޡiX^M /u3'n!.mQ$K!]z?ڿ~eRJ߯o?o>xz~4~+֯tjssx3ZqLom^= .X^_[xZ#K9c{3+s弟cxuhsmɜRPI;7Aakn=?f*L~jd4I,"Ko'Qƞ[ÿѣfky5g{Qf߄:|eXXPܬ-}=bKY#k(s5]:v8-/o>տop~7 Ov뷍cpE>h[Fyh㵒kIi{uM5{|eC^>>.j2iͧ9mXXcuu6Nޣ+^f*M?tg=+׭ Hbȭ~]'|mbB?/$ZOswwӿ;m|:Լ-7ZΧ߈kHGv28Xm%f3R0ıS<-%X'}QNMny^[p)%vjs;!=E;5Î_3xφ5 GTt+s~!n-5kÚ70\'4rZ7fWگ#z?̥Rc?Su%kO&xjQ|F7./vxSV$aɽ5ַ^}৊~.ho~%kAH/k].6]KV#"!hZOD­hN7k՛Rk{|(~|'ψh/yC,Sj$#v+8'kKNζ_YG=l)S1I͝Ͽ渦<}&h/mtkĖV6dL[f#f쭝v n{_wڭݴ%.ZI#mV6fzWÝ'֚l]e##>mc?1R~/{_d3m$[kp$2_c}M;]* 4dgoRd-mީKTMwLషH N2ׯ_S-[^eMId䃴ǮN:s~!;;4rdn??dTۻ$'˝G9\~ݽXMfq!}թ4ӧDgu{iN< w=:?UT? G$4eLik]hLҨN.Nk9j6p Dn*a_s'JZ#́rֿ>OjVIEKq%-ᡄoVGPwj"so0t]>[ϫiKTRcrshcΗ[[Y /#LWO]5u0I=ecV_l(*1s:K$yn˝ˏiM5›{2M2{u4Ԣ_5m&fe>mNmZF6}jMuˬ~>|+XLG ,cl!|a}+H_j($w7@s ʕT}#ytu~֠47ʧ~YɯOКIOf/ mA1fVss›M dyVʉ|ɸ?uNJ};v*.%$2xWM?>* ?-4eC$o )DeL*xwl}?K (ҳ[E5k;w+<2,42+/^?}y-{}7ǵ0ui,fbƿi>Y|eȬm;ھaxr*ܬr,[2gbWbgsaR+[߭_#(Bm|:>,URTLne #|c{fZYIY'~7oo'?}oi/n] c-gJwOrok>l`ũ-ƣsi)$H6ւUʭ/-k&{&U|O빽[}""T'jG֊kW"+:`Bmjc8owU]I{[*ťAsO[kwnL͊ -i~/泚Vo.V}R>$j,Hcy~P"m(>=wNT}{w]n(bpqsV[\fw׿_avmLM'eUJs[_dvDӾ߿PJoN"rnثI]SBz*NrҬqum#h'<|H߿_VWswqo9;԰*uz_rܪ0m}[9?J|Nߩ*rz~#GZZ}f̥uO \[M+xw)U̯ڲiӹ/{~=?iF!t97?]O+_O/)X씣m\aUYJ[Zy?ڰ_-Ec2#l)&63oqkJQQ:y/d씬h*8_g~8/YTkz|ԉ %W;3xKt*lDV]Dl\)O͸X|׊>O4p3OmDK2,;er>VusUKԨ2{Ot]_/ y%vz[_W?.#ة 7q~kP}_.Ru}w:ۣ F3Rvw}qn/5fkxᕊ ]&^2-fSyYu|zy\hĆ@U|`+}~a-CM^K׹Yk=nc |}W o譮a?=ϗ*odwZ)'k7G-d=ٶ9I `۹~l~]6o]w96ߚӷ&[;K+p̽UV`Y۹?G7k~>W6u93Q[;ۙcBM y~_դ=ZZ~^Eb.vc0ۜ]ya}UfkNv_W yaggr>esKӆ ǣӽwz67#:@1wϦGO{_1-_Iv&v)yǪ~UYI6t&I[1m}۾y? Z)__/2`Yg[4|rݷo_Q:[{JsW'"II?(X,}sNz~=;-r %TWR/Rc$6I+"aSc}[~=o] 0[C!%>v_2&mL/]A^~jj]v17Y}̪RR=WU(ꯧOsR46ckMᑢ@~HWV+UyXzue[3[H6.˝ȧU_c'?זԤھߏ=F()T~Xw$PG]vzEo}:r߮=Hk<_?ww?kfgYYlFdv//]1m^{8_" ûךh0O I-U:1`F0ۘ9BYw9Q$Hbzfe~PKOӯVFm #PYg,voN~-:NoypwLw0ݻߦsIʆ!J^Ӯ|{I"gx[?ͺUBޥXo}zwY\I4Tæ;?bE6 *sm!N_Gm6w~̯fX ?? ,՛)ʋKm~wxJoTy׶dU3=b4է:cR}+l1J*7.{z8qi|U|o|.*s|v0%?3kX ;Vv/jipr~My(Om(t9u2]Z_]inh"y\Y}s\ߖ[m_{V5{[Ѧf(᳻}(*W}iF.ʺ,E N>nyߓ\Z޾?saj-S-46$Y]{~/nypQdS$?,4^y飗n~yq,BH˹vۿ 8}f0tv>ēxWGHCZjYrdyNG$3VU15/afpdcHH۳ww֝^ei-<_ܶ[_M=&}Q]?PD+O-mfEv}ϙk~f# >[k$ o5)^j.R;\0p(Es]tzw%T{F|ufm>7s\u0+HZz(5;.mzN.IB17!̟ןS/u]~] ux3tK#:"fF;]dpZ1\5No_ݷmG-O=jϾ~~ڇq*3Ȼ mO+^G_OVonyw{vʂ&zIX/[Ai+=~_?.R@H]~^T@&q??Zxikwz?u;׶`3,7o?6~Ng_nL\o=\;+RVuaR6O>;bF(;aWv{\ `9 } w(m U#$qO_MI%MvuƝm`H_sJ_yq{~z(G|=!4٭<㐩*+|g] Ͽr8TG's7`cZPiɫ;[B6%'e[7Ȏu{~= j$Vcpr|4{~Nǽc%=[?Džx[Qj]Bfndnl:|^~w4=O5 ;EyUtۏ0ʒ6ʑuosӣM74wX&̊1K ;O.Kח6ʌ"۹} mz5dOoEra/vm*o=FՌT[cfGmdfݬdt'fj nG]% Hb&fdm̳|wb9z^_YQ,-rjb~UeUOzT']euzT][?t2v}Lb㬗fg'jayb]IrFm9EkkgHݱYn0+8oOU,qk_[,saڻ~5Z_+|{}~=e5:<1Izߝa/"gSe2"F?6j "ߧZc pr2?|΁ŤLmNx"iR612[ӕ~{E&UH1QI`m%[Vymw}RM[ZYRKrGʄg׽)v~}u1e5m44Ē#f-i $WԷ8Όd e+Kʞd9s< FUޫuk[ tכLo yPLmjՂMNYRw}f |F??ֳx/?Gпe+;f'U3^YYܯv ޱz+z!}W_l]25y춰͌}v]`Rk2>岰{{V% .>_,D+ |^ͲNOD;o7sZu$d+E?֞Q* 9Uv/8j m=?~O cr|F7|n ?ӳ{&b ' ^FF\7ӢgHtmp /~gG '^:LJN731wȠ[w2尪3??ӥk$K&|kkSF Ƿ=f^6\pOF\2dI%l]YJ1_'QOMI-i)W9 ?^?+h+sM\#3 ;`@+t8PI~]xy76 jzkva|clI8Ӻє}?_T*}}sNm$4\hst?nHmm4Hvwo" =~v}֗=?C/T:e>e㩐/1>q\zp1[,%3Ӭ+ÐKtA#+Y?{䩎=#ﯓ f_oxwBB ,, %Ƭ]:ۧמ }]UY얻ZBu6>_k |K_~KmyWvַr]5?&hfM_X/O޾ɗ~l: V4QK$#7·aeWvo*2{, `OWMw$l6s?牊i~ąI,F?MZ%ev<|ׯ TSGu0{x}HQfXwZQ z[򭭝L/o+*ۇѸ4$6To%SXly y?$ڶc6njԺR[ml;}_M,sV?ڬ8>i%sz=|lvoM,)},ꯗpS.ɿw5qO+ދ\u/?NojvӮn罾A5̍$yI# %1(%{/|^F#lw󴑇|gW&mcP?7g3g >Ѫ>|ۚ3y1]>w=w~~[wP/7]7&Ium7P}9޲i}/7y>M3j'_?ߩpr? Ÿ xj-2]jðj7)x,k m0+Kz*5of[ks2}t~0xU{xs0kT-mVuUau6Λ/ď#׋W0{ˢ=.6%mOOբ.-GW%I f)Zv2Y44#wu]Mem?u=gS]dͣ]L<~0՟[I'k[&C~d}knuti({GͫكÞ%vƀxV~#xZ{Nkt/R[ŵKef~G}|6͡&skkͿO3pºؖxū=*[uxZ.yxxBNK$Vpy$~\j4}D.#z|ڳ6nWֽZRNWzOV~VS|Kh%鶐O=Ƨ\Үn3Z^8U$eql_Kjv㍣}oOto+t_,cXɽFmkoni4[xUu efim47q )ӿtKվ|*sj:F=Z>c]JZ P.PҦZ2ih[s*N螚[_]_ZZYѿ~#;xUxipqBzN֚k:&y.fG:^o{)ҤܗnO^h{<kR𶅫mIᾆ#U7|ϟZ4{ uKVOYm!+>uo ik]1Mim7%;n!kt H(iT__O^'~߳W,o&|oh~"¶wvyrMo_Z Hқ$?q:MY=[>TF?|Ao g M֎/4M>&|R|cXl-Jp&kyPΔnv:߰_Ə^<ߍ<]˙7$:\cmRII+&\-ѱ}IIB^ߧ{8JQso{-n,6|_េ|$kg~z爼+n=)Mlt$Ԯ/,m^#3S[kq&kO}VYs]͘8ԫ'M}z?k'cmq4bǞ %|jmJ9,f//-cI]qWKWl&o=?ďcZ喗/S:l4#ԣu]/\4VKVxwGpP:'ahSOMlߧ}. E>-oZ -c/c3mOdfMI>xXBK|*Tkۨ"-uiukŜDLw˟0nZsw_}:զ}v2+ >ɠCkwuo-KyREMAnȯ`r)m17T`l>Zu"^i|r$ɳz=y#oӡ/}ύ>9~ɟ>'x  574쎛w 5%͹mϙ'P ,[be;r^ȿ /u_Zowx-g}G^U֩ok \6op&gi;4 ״WՋMTZ_}.ɝ3aoNKvz7OA9kw> ]s }r՝l#dtMe40م*ma17m-wm-doftJPĥZS|XyLy>beoݻ]_&vo'@|9!c vT&I |>p#e6Yc>oG)2(rKryfkR>j ^_-RPf=*|iikyE! owJURw[]P|я| Ak~ xShbV9Md6q k}]̒pP֯J^{y[sY"5BNe>߲=@o#O4 ƓZh5MRH?mΫI|lw$HaXS;+I=~MI%CVxLbXRGhzWWmɷVo>,}-޴Xr 5E[IUw'6HL$nn>KN7?4b6xsMĶ]Gk5ƱLеi7&̆8wj~z1Boi xW^ռ ˻$cI+  z$ȓ$^zEBn){W J\/}zID~+>+Ycy šnh_žC4^[۪M%”{imj"oBTFIkO^O#թV_'Q1~<~ _|'%z}k|z%#O2ko$Aޝ}NU_wz?[-^m3LjkSiɶiVX6:4?gk/̼{*tө̵rj(yߙk3o/]e]:gEh?%]~ٟ.O8fT]j%׹I_O>8 kIeoyjUYM4wַZòFfkog z<3ſdYo.T'vw.y3]/Wfq{ X|g 好5iZƤ3wIka$̍'&Թ7Ce}')7iKsRzu#5x.?xLmPHᄑ*'J𳏙Z6-߾_Oƾ0dfuYW>t&ۨhz54 njT)->i5geow5xsZĻ[@h^*w3n.!aլnmr';%5}7;~kjZzgJoOZK=6&o5$N̨ Kr<ptTi?;locawKG?7r3eYΫjZTOk!Vxmkc2Xl4e-uLŒ(8+맟SelgL l]۹Y^3<Ur6 9X 2YbT׮6n|Ȩb$k"7ۭ|++:a#jxV\A7!E~fn\mrexJml~gZ=^hKmXUfj_Eg$~r{V[?ש^~=^Þe֋UF7yZѢ^\[4 )2*=Ԓy/ s۾?u~g_~coku|>uY!IA|9Uߩ䣥r)P\%e-]U7]>G?nn~ho)i JPKo1%vΓ2EF<ޥ9FZNL9/v>%|~'SWԼ TukE߷OM?RwM{:[?|txS$E[kG=?Clqz$ww ܽ>sGْgOhץ4EUɯW]7Wj/65a0kÓImow^Mj.r\8tkзVֱ=) +o~vɭny&zo/?|Nk?&|]N\uA]?XӬjhi&dR$ɿRDtOIEhޝ8{F7:; JeݟsAmokZ,_I*f ^o:]2ǽ̿:|7W<>.5ZLrTdKWu]"bͻw] R]oJ)u>1 ߤe O sw7qu #Eh{h7*G|UךV"QmZi([tv# +++|۱zWg "3Lg=vYF~@yƝ5cF_ i~]Qom şhY_I*OVVf'uh]=zi6dy`3-(ѹe׏([抣zI:|&9|/Gs {eLarY Y3<şMƿ&~sBVV%BI16iݽw'EjG~{i[ϩC&s]^"°1Ʃ/7hG5˲N[}^6_[G~1rKv<>T'sc_ַM=M ^R-ȑeڭ4zLխ Wv"\&®~^s~8˛רf\m~{첷#4ݒݛʿɢ۩:0'ZWUo&Q(6)FRR1[3?hG "JM~Qybvy,}ڵf2M?ԭpn>Vԑp-?O, f; k5&d3˓]VO9iz{sQj4t2Y.-*][M:bsw஝vӗ2fS#/4wh͑y]2[7S[R hJ-4D#w}mJN P]]ZGZ!EɈHվeڧ;|Q{_:R-L "pq[n#yjZI;br۵rGxϯZ&c*owӳ3NXM3mN]$ӦmؗVNq46T+_7֛vmz(,]O}KfEK}?{q~Z))o5f1XB|m CYeܡ_*ŤW3kʵ5 6Q$wfymh̓Xd?Ϙ}ufOBܒ}J+GlXHVHٿղ+]lkom? Ykz ܍NlC=YJvb'RO7K'lz5踍I;|Bnf)^>Dsz=U;7$֭,"dK&YM򋋈շyh>_g֞z.$7񷅴q_k*ğYYf)5?3y]gvQnUWn͔>ҡ%˯&$}{M )7TO?i6$~`w6 ێ2jQߏ O?U;-'WmۘtƂ ѲFoʿ+c|'M~(ѮM/M cݮ,9܏k}̹ţ]=z_d]xEGt/tXl~bێrF4cSHom[(ɧ kvk_%y{f/3mL{O7)ڍ"s,me+m9V{0{"i'rikIO1i>DDKOӳwh˷7t-:ghM#q/۰}kNg+uVsOFd~gL[]ۗ?ǚy~?'{={&\{3 废]s2޾zI^~u.ƸLnW.wzj\M$}NE{osjS'rAy;k4S)^ӑ5tXκHKT_ƭ せ)n ?('⟆K:0/_5jj4mϱo/|i'Wӱ֗lBL#I }9C/u .<8!uVIpHɿ~ĉEw:4Zë-^;&VEt-&ܫ4Ƴ[OfEtЦS9E$'O)X#.evܿw>7OJAnO-i=3V_P?ޯ..F:V8YJ0Z3~Sڧ|ː}H!|oCda! A `N,6F̭+uMnoJԵ ^M6knfeVZn߽&nvvl9gAxIc䰏Go#9.i;Uo,;6'SdrKNw߭:h#Kbx=*-=n,I6Üz;k#u?QMB;;خ'.m߻W[|գ[%6RimaX"7 cY#eo,|&z-,ג{+9fhH/A ̋ Ωyg~j[̭D3x2_%I0]v>6vlU.FV<6::$v-:w'$߼$!|ov4?z7ۭ! k86o"mj-_]9)m5 ["HtrE۸oSIZwdY_5b|Q u+th}[nݷYbg 5mckL{c%2gfbUoZFN4T F%v(eem$l߼wnZ[C?|&s+ j"g+ɱ7xqo]j߿c:O&}m+ݙl"Xmm/ȟ4߯0z~~6o=*R}k?_U> /\Xh7wiW֒40BZ(}ZH"' `Jo9/>yдwfE;n|70dhw|ۗoc5%S'u^3q{K^reGV[3x揖_'6C (s'=0f4Sd]*s^=n8xqJSi?oIeWf;8};Z6>Sic#T˃L@!fiǙ.jS'?=TB>>_^`Zmn޺Nq]~_kI/&DUcѳe'q0'8Om{vԸO1M'h~L,Mݻ5diy-=.-ʘRfFK;wmޜΌ`?׫9I!]~ xR% gFTFRoo_/ܬLI]8zu/\Ȏr]̻nsӕ}~z\J;sS5-2H?7+aS谱e߭6<=RKK3Gyg1UMry{Sz|uyt𐾮WsMN_n Md߈u=*QeZIryW&ok_م]lc,li+y; ?Iٟ>V M39Mֻ6rWmɭRUown÷;\pB?spQIEz1B7m(P Wcs=?:|Vm]|g{I-)9Ǡ?{+[eD~EBatʕ{ֺo/S(FQTqڽW2b%ywwVq >21nr a/C[7{CÉ$\s.H߯R]yJV5Xgr\ZR%fʃ~'X ru=+^t͖uO/ `:rD-޿N.6W{[_dx08}}):ܿم88M{&Bq8o媤m[ђR_˰H/_>.",ٰ?l\ќ{^ʩ [7w-dNo_洼nrs;k,ƬYyos镝U3t=wPUԀGYw6߼[1յ_3x4^m;iYXJ!L_s{y-Sǭ?6@v~4eW NObży$e[(ީtuc>[IEUv\R\z|ְ6۷}3R/m:Pqʦ؂ Uvۻ9#I6M@Ukso_z~}o`$vn9nzN_˯qUj[u{~Z٬ܝ)ln_iz4+_z=>2=•0 U«oZN}|i t_y%7PXzױrI*JwXoe^r>rw~qu}D+ `9#ݻמa-/z6RM/>DֺJb:Mͷ*~{>(-e>W{] f 8ٹUw fVV++҃f?(M[@..ͧ/ʭz롂`ټAt;R۴ ]]e,z_{[nϼpIx=FFrE{kK4iV3#d珻5T!Rz1k7pHv.?:ԡ+ uIKܷdk2;qw\:6/ޟM8O'mZQR綗Z\>4p7+`[ϭj~/&8Zw^\+ªkE?n|'ε&X$89Sܷyw[s˫w~~9/݅8G g#yi(rϝܗm;󬃃F{A&8իul^@ H"m?USB.~~*Nnu˿o( 4zg#3mfS]T__tKnvMpv>NݏhkEά^/3*Jg0f ONܧ= Bm+[ϫu+}%vy&V-20l۷ד]幮E+5u]?wZ p}JdF(^6&kOSB )7ldT*F% 嶱Vqsq՟_Bq`<+.7nڡ͵m?0Gy$FU]N$gJ(^Sm멓&0ƬX]HM.r򦠗޿͔/тEmr([oZ:z]OkWỏ]D;Dyw+S~Xk׾yZ/߿qePH-2ǖ?/h^q*{/Mws! gE0Bi 㟗O${~/ D"gmr7/1~ge _biʪK]{mX[]d`g7oweʤӽKy"uSP]gk)7۱]-%*Fv{ʇ*w?-3k]5feƊ ]>kpwo-M=]>ؾm+E.Akr?αTV#z)KK}\}Wv[UNUY.v|]վ:Q%wq˷}=2jS$վZ~~9.ՎZj҄5{VyC!g'M\w_{Z2SA6[@6/?䚸`S|}w]l\;|W A=LVR/Oe'$#T$a@n*̿7m?ݷG3OH52ʭmhX41ŹoZut|ܬvTu~-tSF-7j/o?RV(+ڿ㚅/̷?S,S_QUf@)gmsX:row\}uFnwp";$v7i7toaW4o⛩%_:Id~wSo%Șz?l~(E3 f 2b2VRkyQ I~=}࿑Gïv[NxV6SuǷ'쯓8Fg[9aJKg_ך>t:}NrVG E "5w|M u8wCu'RZ"=okc\A >2+w+Ͽ=ÿPOXdot{FMO#C$S;Fcq< R,eTZ*-=|zzh [O;[_@mؾRMs^z޿qJM'-_Sԟ։}% 5+F./0G O 'ϓ{gI|4viJO]z/Md|"Lymv4+|5i?[qFJ^{ݞOml`tfAj_?ן:w;׽;25u{vp] ĶeVML6%WS[يn ]QAjDOj[߲.-ɦK e}B_>}ko_'G467Sk]o:)Cm{ϑ'|\{[X[iYH3=\M3.6+Ml (e]wE^YxŐkz2U!T O3۳d QJwJ=5KxGַPq}ǝK;_O.u7_tj:R8_,i]'% m{tXX]7c:E(:_JZv\谈$j"v*?x֒w3j*jս {nrx>o_;cRM2W4y!'jC?@W7%2I0L ƼEȮ}o[6eV:ӪoPٶ I}Mw{o>&4o06-Zݤqhv;|[yU͖O! Ւ~Ծ_.=>?..m4;Kiv% {gmm/dڲ[UFVG}p/XcNJRٚWuFsu%V_.^[l/gR5˪ 9; _Wo14Ւ!O ȋߛTEu?0hvvp_O-~^}ƛqVֹcⷖ[6#yQDVvTڡg)9uQN_pq+N n78ѻw^e+~)Oztz~ 804lν~a)oԻB-jk!FFi(?/qO5~=GtK'cr/+w9X˞Miӧ} MVc#~X]{5R{cܻ&pI;N?vošCm Ƿ_RI7os sן|.޷_wd3_\nr:Wkw"3Ž?5>LFSG'wmtVd~Pz}OP?$Uqv :ۿV}rKV$#y+qԚ穋+y_ӯGѿ~Gi?|Cwp#Y̾c(iUku>`o׫t[^ַ=gKo 5N;(Ur\I*Tj7)X -6Tvd|Sx]G?-/6ЌƠus7}'p~x/L̹5{ iBI51^votvf[jQ]Jw1ےK`|YwMk_ b9dVg..doXP_*5k2Yw2 ̣gf[?Ӓ^BdYY^E#vەZ=Zٽ/rL FfDY[`p/ݝ{g֞21^čᴔXeǯZM'oGZ(J9 T>^wl%nϛP$W39^)~z)렫^F@FSb6MO/j;_,mx%_ t'+'mݫ`7v>綡Mes>Gq X`wgL=}>{},< /%ŏ29f@6@\cm4S?]/[}cԓ!mU1#m?ffgo?y:?v6LI6?gM$[cD߿d};yyT5ѡ? ?wz֕aOy,>t*Mq4)\m '$Dzg*UGyI]OVb|M^ Mio?Oc2iXŮ<;af}SSovG=փrj e啮Cg$}\!o=>k*5~zD2hIl m??\J 88T[EgU0vcN[\\L+|jW$Iy{늴/K^Z&u}'Ϗw?jj7w0,vzUQ4+oh>_o̸ۛ}y)b'w՝kJn3O&jtx/pTԯ!ٙgky>#|~twM,>!_u_[z_$/W*xV fekBM-e?ѮVg_.1& $_щ)/uz:?K Wе_N:LZEAsiy> ɱފgo:^3.\O_Zm=J\Uzg_)'qtu Xb?O%xʪ̰+꫿gɿ~zPxS窾"ON}G ~&sGfui}φ-6ieW_rn-$Ч]~trJi'ӢgULJy}=z39HǗUu][ݼ,5»I"7w#bAwoncjVsm߷w4s t{XO2-Wϓ̏]µ:P_WNsxS:ĖW|)-GLSxZYae'nGM,){JnqSRgmz/Vs5x^i )$kx]I7/!XͨnK7HR丹&b2iBsjJy}{h N m^f~͟o.<).l`.fE;;r^4}爔n?_~xK1ƅkл bY]NL/#exR!ٹ>}9c{sI'|A-xHfռoǩ1dIotM#3l¥jKyn!(e~k_$K[<];&_mR=O f84PB5}ҩFkk{U隟|DDY隫B_mM0.tygu tp8wLU GN}yn,Y3k)5Onm15I#vJmG7RYihū{ qIW|IuuV׵[xYO-m侒}gyXKd2?ei(m:uE(Ӽt>'>$}%XB+mtM9XZPUVKyxo.fqoN8J [>;B~go+D^8hjQZiZ5 05Gh퇓8RO]~K ˲|7>+|$k{5ǎ<+^Q]%N7i}xr:|7q3Y T,g/zmYvاS_lK;o4_H__OSw]'uOmy'bn|~$dMso G ,|^ 9ssŦfRǂXj*ӬЖ|}?h>&u7<EɦfjM&Y{4z,:\6E;UɹlLakBon=Jt8Z->#|fe׋<7[ط,/k_Z]sk mUO2I"Y{ꪕ]vjOF0׾ꮑxcm4 īuqϻMT=fv?vy/gZwR\ӷK[ݞ%{駃<cD$]>;)aEdGE۽oG# =j]wM}qM^[nV^{J%6U|_P}k|> +t};XDtf &7\Eo QnftwnρK:ԁUv6mȩ>_)acge"ۿ}Ϟ~/|?@>(|(\],gkMXךhwo܉Ld:8ySwS3qw]ѯ+Q-Y|oK=:]fM2vmc#ϙI>J޵42ܾvQW>OO|ˡ<7״vűitə<Yk[_ШǚIw_Y oKM`.UvkvV6lrbym뮪>} {į>G/=?F_,_El%ZIj^"lII>uO%{FJmoK|߷~3%o|+QkiZm?=YýK;iclM'E>3< \Omh<=eYGv/MJ957m$EBv5^*]]}i[8H>񗍼ck 5*Mk[CY5>]G 7Uѓ]Wq}~:_ C0kFjZlM ^2}SRE?<21̗>xE)ۤu[ߡ[]u4|{'&஥G4d-l<䚆/kCRd+ML'KZ;Ծ hrx.;/[}3X=4hu\jL/K}GɩW_'s?^N+ߊf㺴/k^Xql\C87Hk5&_WO xbڽVZ^qDy9؟\I4pCR_'K*ׯg煷|xGB]Z[QgAoR{um/ͳHfG?wBzuӃSn}WGg'ôվ|6_\57'VXר\Imgt3Z}QK;_"O6єm~_:9oE~+D{uAQ8qƪss\5;5dZ|Ϗ0~ξZt+yZkPНY}įk{]ю$}R0rO_=7?.> _jRìr|-:>[3:'2TT,h˾e,D_՟߲o=hyK.Uzviammco.8v|{uRJ5oxn݌D7//o\ߊ£o<66ubI|_]~OcO][;SҮ!;}?Roy#WdO.o65yepׇ_Wס(]波hw#s2iڥYr\};Rf7i!}okYݔ}W+:y۝sphwnS:>K*N\nLYZ+\Z<^ֹ\-:}OD٬X-pk$SYUd**ti[y~;uej?_:S:oᤳӡfݧ ZumI.Rk|~JVԨ;Z;*=-WvkmwSA<:?uk]Ĝp z('nf.ݾ_ 'aO h05 NG5yu+3[Y/k,)л2:V.*&_!EN2wW>~߳-MMn\j7sms GcF*I3\ϯ i"#JN;[}4Ԝ^:S㞱7O<hz~;/S|)9hl|mdwm' I_V)ϛn!RACS8j}3ʾ6I<>{M_P|eEL2\%ԦwWIlkwm>8n4[wsR?nA}㷓ĒfSo ;o&폲GG{ߖcIÞ5뫘DOӮWwex 2IBwljW .m9~{~ɮZ,&8 xcH١FO=]o8o/hw}6QPv}:em,/5",s<;w~Y+ZQKS'syF6d]C+v59{å^#*`R ,淓|J|"@tܿ5=ٵji4"Ź2u找|~4SΖigI#;Hp|wسOV3zH4[.I 4ʄ!X))I._/&mWlKpy+#on︛Od:W4&1^=ۋ{ fc֋쐶3s3pҌyviTZs\^G o2եs~. exgNLd{XVo/v%'"{_,ټѵRiPY,Vk]B[U_F-~C.ihSEҮl-g[Aon/ef]:onǽWɷ4w>wV߲SK_H̫Ueo~3{SjҦ`cKn˵~ւ-Yyo-yfDFwm5dX9m/i(j6XOf50KGDy74ԨJM6хXp$i& ߼Y>Y6t?}mkzSVizܟGZrO;m*UT+xZ񹼮@. HBfnmfh׼;XLqSZʔW_avl.et3Z[f ĭw5޷\o=̹R"[+9*}~ꊊ^[r.|C*[j\S>FڒwtFWܮ#>҄?ڈ֋Aik˞]uojI]# I¯&?uNS ]^yqwgc|E+8'K`P\FI'Ϲ~۟ZeYF*bKxK%BnU'*}YZ1w Sԟұ&Eu5.z|;Rbӽ+9JQ W:*}~{{h~62G&J]HwVSkHCZ1kNN}AWyn#),nUlVI|hZ^_mj~Euԑdvv7ݹ3Oo}/͝2At\̗=,0e67]4tW濯ҋv^彖$D0ʹWa}V_տϓ~tۙlx#R.֑o9;wʔmmwZ %w {vp~<#[kB"U$6dlOG&s5B>6hg0ǻqtOO)ƒujxT7pًmKElIwfXzG:r_wiyzűESXSobҪzzukRdz??#&xd;ϵL!Q\|Fi>CUVA#]EkqW L[I.ϟ{l<\/~J2eT0jzj5umkwXM-G"2\Bytyciex?'t? +PU𗉮lnlo-4-,#[v\|dY:[j{:춷FfyhONM;nY]E׭ TexmݟRՀnΣ.c\sG˹~?sʕO^VO<{gLE"wuaVZ8wO:ʺ =堷-ؒY!>mċ&l͉XN6zKZ>lf mp-vg16VB0<.7''63'aƼ7 KNڍOwZ__?Re+|ē6c[ys"}֫y?isyEsU>za\"Ƒ,{~`SvHY xX;m-֫MMV u oXOT:ªd6]3~jmsGO5ވ5hWϞ`G++~ᶟ6mT+r{]!R;xV$c_,aUU]Wڤ%Û[v&ST"uYF譝 3w؛&r5_Vwwҧ9TQ-suxᵇ}B+o2P~s=q5٬yaoۘI;{.w=L$s.˧V;/P 6F3~O﬐" ']RS-ks(g F,~4ޱN-;^([hF7oo?=߯Ԣ{Mx];- 3P J &74M"n7|e?w e~>Ov]L4giv5;8e&0yl6cVW2?_iJ>V{S7q:kߡy&G#&VYUqs]ikV}ɨ7x_i*Fba .ʿŵEW䒩m:pIum~FFؖ0;{\j]Yͽy{ӧPi[Hn aHxZnm1m>(t8&o;a#ik֥7? w:TZ dr2ImϗKON7#/O_KEx԰O(w1\bn֔߻]R!–R:қkmvƥ9i/ͨ!)*Ͱ+.OoFNis^Y#oUO0nDz>o֚Il&Z}k4{GS˕$h],K~۽*ԥoktf ;~Q!Nݿ?֫&8'&3}H'5۫<&)տ>)hU"o~go>ZR?S馫e^j L"m!۴)VdДے_ףr{6xxZi_'d%4U oq75i[*[\:v'

.SOdL\ b]m>o~޷|jZORo;}pe`ycaew*_a~67tsOuW4,tm?-H+{ևU[GʧNPwѬe>[0Ϲ~i2>oכVo__ƶWQ^no{1~#yPaq1] WoĥfI*I!vdfeW/Wn)^^i2+ Tpo;[O-t>c+2vSssMr_"ӌu_= I8'o\?TʬkF&޽w'#ʳ9;2Kq_ֳ"lڥI+5:(*(%?0ݻw;o4^ t^o%@:~UT*6rc8FZ_d6_*o#W+7MfןQX8nwH\gUJMmרAߙ\hexV'?7̿Y%;gwH'tie"U!m#So;|s{8E9EWoR F72اpY6<{qXrKȵV0_^oġ2X ߗU|Rzï@,qs~^}kOfMe(?⑀LfR8W"Ovuȕ4``t>D^#wD|HW*p۹8Nmm'{"*b'/]o+_EXMadz[2*f #ל|ݛvX7k~55CC\gҭkuh۾WQPag5 Oe,uYNyb qvie{WnJ{z~L {lw^k+$`k;[\i;BF~\'ku+K߿(=SKHc$ę;ĵFK|J)6iۿwԷtnמ G͚S+k^MngrsWK %סW&9wR2`G w;~V1+:ҿ'3w={?iq`tnkb_sIM?~]gO$M|GK{׷^;Ѿ>θzޖ:o~}1M!PQ`(U@unZ5Roz,eu[:|׽]nW7V*v1տ(-zu;)M}_孾fqrdbPUr u'k_ eOg*c~yeY}~?Ƨ-73~wϤ~zX.vqn~R嶗vV~LSFFN~C;7䶶m5TJdmtVn-IJiҿo7}dJfhє`l9nv\\ϱ~ݷ%97[U$|WSVܧ#:\,-hR%*yd?օ-[=(fi>$CgٽeҧM{ow2xIμgI.lI!U+$2JݶO?]+8sb!o(߶_>3Z8'VHO36w=ͩnw;av~54&2H΃n^t?_SZ 0?7Xm~g܈ה ;Y9.:UT=d->}[w?{w҇ktM9Ow ;DĶHrjko"5S|_FH$RNA9I=7}hu%Q9.i12O2ğh᮪kdٿ]S|6ؙ+O[~?RUJN3bWNaj1fMyu0R{.Gnc"iKlIg?zP5eZ귯]v"I.[~]}ToMP̬[y-RobܛG!B2_|{n=Mie~O.Fk軡(nH'M{|O~ܹ]_^SY;@me%cI$vXDLr9oS%˳sJm5mf2I ƎK!;erz|/^kmNnJkʷF[(>58}oLZ>~i VV =:r.VF21  dBzI-WJ!?V4-n~Λda`?=kvtЫQk(ZmvB3z/v~˽r5>[8WGuU+~W.)կ˿QJ.Ǩ9ҏ#omluu H;$3Bv+W?'׏Q tNINDӽC^ֻ|ax]ī'*34>+%dvݯ]k,B5%;++wWwauyo0X,pn/UEI\6r>|};ZId$lll[ro?||$鮋-OcR5x[uM"vƬ6?YYy|ȟqyieoߧSKz=VmgF#FkX=wo#b2?7*'[> ~3a,z|Y,YfeX6{UWVd߿._]u2)xLz~+Ӟ+ ;ba2yr;-жǹM[dtQׇZ=z!v՟g׆jx?Pi?j[)u˻/Ocmn&m?&I.>}[!O -։ߧ3lt)=XjXG"}!, }iPUYY++5|5z;=_8lJ_?+5peP4eYToI|VrL)JeߖIr16֜\$0J&v ˵V_!ZRw&KK7UߖyDwMlB elI'QA,ӤX]3XY|N/IKzc.̍<ҫrk͸vS;u>vOui"4{-Iחs6-ci&xْ̒2,VW}?_ ZmueGvha7ONG:Ew߭Y_iN] G;2iw3/Ou*m~4nS˺9kK;ygOZJqyl624~]}OIl,~7.->V=p!Aml'M*%||>+˭d\>눛ޓ?q]\&Op)橆FWVܫҲT^mf=;-.DZR~m#Fw2+$~ok ݒ߁(>k~O50x\]*K&hvn$Җ}:M8K/^ym_-zܭs7x8C洏zk8n5V%_y7)2ݹ`;Yuk [~>dJ宿}̹of,P͖~'RDKL>a#%vZ$O?=zwOi˿0rK$n>yO$moMc7Lt_Iŭ;OkwaGOO'{&ctD@Fz{?? r7]̪' IsM]׹(/}OimX{>}&~[pJO -{R#UFO_塿c_iHy:e}~ݬeRooot:ZOyEvq7/8Iދ:amZ[6.ڬ,`cF__?^J_]:BXc>"K})~řyFvݸIb*JvNIqCIlQ1_?5]/빛.r:5+4nY >o'|qZ~dDg!-,^VgH+Eg)sVTJ go?(֬kE}''r;_J v9 \v?<-$lmpVFoUwOȻҒm,7;37=>+{=IG6^+RAG?/+{93:K_ RؠSfn ni?wh웽FښdD 6x'T/19+ggyݷ֟,{~a05wch9"rNWm6`1KO!9WxtFwk_;Y̸s0s}~JWw:"Z޻)hR19e+r=gO7 qWogaڵ™?,>T?ϭuny←Ω-1 !1nۦuR]fvgF6?$C-#+%jǪWZwӠ-2/}#?F~GK4;=c6F>)~c>oJU$_sISOxBzHY>ݳ6D?۶k֞ՅR&)hm %|~|=?#ŤWoj6~3oCVuҴ6dR_5eľbF7Og:_~2c:ţZl 8new>{2]~?+9صx^P9uV|{s7Jz=57~ЦŻfDuam߼QCqVu]8u~J\Qegvk3pmUͼ# l?G@%|N=+STb޷X~~ ֵjAxn-f+j_O=-46Qo2XL%_&$Hsxs[_i)٩{0|C7WA}Ӽ77Z,7ijm4~Gx~Zʜ:~?cܣj?ׯ_o{D|;Qƥ#Eo Ad\.c%;7p{TC QKݵMnD{KNGƟ 14)֭eg-A4Ю\\ul2l9ˎ6#<-+74PǦwPPxGܕK,eV]ܴuﯟ8s];X6qp3_U}S5>[Y4\87ߎOCDr}_߯K%u햶aX`O ɴn}9]{BɻK_']gIӣTkHѻ r_w z qy3o;bBZG3+[];uRV_f~}݅.mv_[̶Vm?C&yoOx*g뺆x4tVb#4:I :":K7 |Ԧtl^gH:."Zo}rmS^hK!Ko3}::K{9]7/3 e-/;M}O>xg} -?sCe̚X.IjHom~g39bcfIsz(XTODE{u 'Gh}h֕y{o,#b|&by~u: _־i56|Suώ'W&ĺïk{9!=bk뫘fmz dѸRvpIkз s'O/6cY5>\hiS֟z_i[z95^LnG&[vS[2mYG_28ҽ t?ohLտlPjֺV6bE}Fd]qZ8ԨἌgVS}]f3u '& mexn~>Ri=vaKVXzյu{ur,㵒O[xٞOhշ$?#ډcuS[￟SSX4hY`fi睊6WVأs<Ĭe ֦p{v;qY3[@ܩVI/ݏ){/?K55+]_N#Hy,d[+42FG*;gogk_שk:%ƙyyջHѧ&/w ?f?gwsGG|>D&]a5glkۤG1 &̛#?/:`g_ k|;oc]𮋠j;OkQIii י%(͜s~;8yrʴ*RNem֋_;[6EO}o?s?Ν–^JH5{]&MKW?wR[BQO?o,{jWi8Kk>g;|iϊ>7-|=px/If%rMŷs 3y#G@NU*$y.u籾Uhm-KZ[<;4xtfuqmBPm&OMo> y/%QT|1~) jT;摬K XGHvoڶG"FIØ~؟պZou7y1Cهȡpݕ?t|ܤ/V|I?g?QGׯB.=>5FIjLq2)/;_H>~xFVn>ȧ 9-:;}?/ڳo K/w[Q[y/MGr^YIJ;yݶYGMԚi7?^RJsVt?+l~i_5\H M,l4o.M>OyK&cmF?)AF\g|['? <ߋ-=oZNl,;Y8|3]}Hh$sG FU#.gm5u <34$pm?ulkSk_͟-iZ*nvI-fV[zWi;I^mӿRy| rė ^5dMN+.,d\L5>to#X]XZ 0ގ;iow_yoῄ<))=SQHZ u/ w̟ƞw>N=]^Yv}=}3{Z/Vmb-" ^Ec Vm$ |r{K^P9}{,gxJ_5>]#MQFUc-ԼdM(W7+[Gѝ/<)۝ila{]-8cݶ;[u1*"/JPw2վퟚh-Fk Z=4k\]F }6?m-'\+/g*=+~~˞ 5;X㿍|uc2ΗMƗ-e6Э͜>b4y&ytvƷ/w3޾|1CWtm[:m1o4M3Ii-G͘.nSl/k_(.2KT}5ӾTr y,wi4 ^x{.Lu5̲ld/鍊fi<.q|iwc=3Gz":xzl7nMkR]]J[{k=6zu [k f1I|_Թ$ֽT~i}tnUk,H$陚kmiywW#5mv=_o{V(;@ \1,YX'>q5jmiOO ͆,#Wi/%7(՜W2=hhaHcv]Ucߟ浥>A Y@B k*S_϶ - UBL|3m/MGo[~sj6̭Іr7&HM7 E4k.X`HńiFܬ۾udyZߩ<{ qi8ӵ1,w,Vofy>CI3tj ͦEqy+\j&dg]Koٱc?va<{gxk$.pNCѶ[5Z [Ù_GS㏄36J:7ť[j7͵IcG&UH+J2_샊wj=:~~|zwe_mx/$t__x;Kգki7)ˎhp=wV=~]|G>{ >/E,P5o6ֺ]?g&=?v~j|捝޽5Rºt^ RѴ״ݼrmF8f DWV<{<ߩsmerB ݽWq"c˳;mlڢTV^H۸U{ӝ;k~5zՃu2IXvdy+Gʺ_6}+pW{CE.Wӹz-߄7cx^,.6ffo-FՑ.Q}ίmdNr;@Jd]m67V3}oCMN6ɒF`Iu&FbUAtoj'.䶳}#mhs 2z/_J3q+4e­3-:힟i&^Mnfu yoC2GOQRKOF{{[sYF>5:sb>ٗ1'gToC[[H+C&޻]v*#$NmY^;>+s hY|J/̪V{2[&EdFKb͟]{ܨZMnchzTvkyZ6qz,\5jl%[߱sN:i]՝^uԺ^[lm}x6f]?:qRm6[Y&]vcC {-cSyqKG 3+\~]MrIE֨A{_ש[Q {4~:O6X ›̻Jk߹)]۹B޿7+wǭ[vO_^%N}*#D*˸w=?u}eI<`JIozo }գT -ʱ~n?G~?{}OVk^I&ڧ$s"k}r1X~pY'.-Ț;%74qȤ|$rynպv"_*6{rƛ~at\ČFfv5ݶ5vfޛ+ ӷFƝ<%`1(;okuȢOCT%{oF- P3 nLrvF=ւ+ndGpwƶGm>~JnBv I/n$P_.~fc׷v~}@&neO 6[^gd]V*2Lm|o\wYhi6wW i(:J?8NC{z×ǙbϤZZL^dWea|׽c.4vQks][ؼ9dKB2)A0ͽrem]ڔiylDPm}߻DjMhpJOR݇uomcB$6p,.wE>Kf~Q9 Zė0qj/ʹcY{O2Tmz_R\5d4#ٮū۾o&9$ۿtKyZt+kxrbI~ow8K̸.>bkeh<ēka?hqgEsFZYCE{W0 2[pw&ߕ?i3qkt]Cf]fŗ $k /u~=>w$/$s|ު 9TșFw0͟|1$%,筝Tվyc.X6 8dpLbH/ۼ"9$K{;$JG>+yoMK + EyDe i4/*Яn+wz]pdI0$0lIFtU _֟5ɮIwqR "FX;mrMww 䟾ݹխ5甼Z6yv0fh㹸ΑsG%sRZ%o=6^O{٭AC"+y27͹c>Y)j5Ӷ3o"z][َȖdgmr"y6؎U)[UkR¢+o1ef'{b'>jTR0Ȗc*ߗ}ojMzv9}@Ϩܙcwo{W܋*+O{x*.I5~U?'G:uw3y^z}^r$YD?m+'wgn)Ku}|:-JO֠k (wG-G<|:j[s^,{'C5. .neky72.r~Hcaz2+RAG}k<5+#8t<:.nj:8YܺmͨhDv{e#Wׯq({_^ukX\%ޝ<ڰw bmoe$o yoOev fHhXvF̿UD[v\stI 3ykQ&/ڹg}Rm27] kaMUX͒F*Wlr6U]bOwҷ͘?%ΛihdVCݵaܨIsI'dfYsfco?,.xMoin;XquRb'2yj\])tOmO%|VY{kf5k8eR9j\"}]%}eףo^&cJO|sHu xNUe͎~mnWZS{tngg6MOXv߯s]ֵss$;&Wu(RO4Ԫ䔮~kG I"@3FddVufM馞JNmg6{v";GFIl8v".v|դ`]9M.Vݺ_]K1Db m~1澻:V-,†91 i5fwϳr1+ ǀ_{i ;4kv5 o3--ő#xfY2fdIDZL5ҬR\XI%c}3mo1*-:\,mo^aXY#ezu65dߧr?oW],%B*nn {?[MZz9:.s`{7^訥rM96M 3E;F>x&Vm_7󝟝p.?In oC+9_G͹H+}ԍkB<ڲ ƤL1?pZg{hշ$Ѯ֍Wm66xyS'w5;c 5gyIt!bcom(w~^v[W̵-x˿vwldc Һﯟ~,] dmRi<6ƕD޵ud9=mmu7W呱|{nN9幬ߥv7rTn^̰-rB#;OSZAY_D^RwWq jr5đoLͷZvlV=^*kЗ:ֈ"q$RᚈT7{'өv I $7nR /O|WENYk{/â5geuY-T6whnbUv,V_+Sz?j׷aoGw'j|˗۵YZO:I/بQ_>zͭ#K$ W ê*|D+7_}nW#}WՊfKpݐ,R Jܿu|7qi^^l6@ g {~TrN_}s~^ >rv4Z~R7BR#,$Soub륭}hČ;m_5%?HIi_YY[@~cm`qֹRwS1axXހ)/s?U{=e*u/~ol+a$`ry;6j}ȧpەpv6^k)FMW¿IbrT?wCT%/o;ڬ~e~l.Uy<P3Δ?^o?v"ʹ);sG5X>oȝde©9'wk%=7(;nfeخbO_nU\B<ɩHUm%beF%[, |Usʓm3ʕi >^>}J4/-Vne%YFYK bpNzK=_yN-ӻ%̓pB ($2N*kpNܷ7W [dO'+zgKv7pz*0q NTm/^ECOn*9Tc'P?0v?nk~XEz;8+-_v[?/~ɪ_2ɓà 0y5RM=o FjXI dq?ZqtYHP/)g?*Tk_vѮk4;wXS*i%ͥQI Iaz*SV޿[-673|Kjw|iVm_4 'ϐYQ#E Bmo,beJ\zﵼNTvy;oҌ_>jN.<;oUX(RE|jr}9P7^g?qY52YBp9V>]+cGEtv{o?L0Qjp\Uls|ޛLD|ãt\nr{V믕]M"?TY?1tV9;pJ9cI릚N;&nw}H| `4E]7G>}ێAf9Edj"_;*n[M.E_S~z&h+w|˰BɆ 1$dsoI+۷S3ӵEh8C Tymd;[?/STv^B|֦OR`9q|}L4>[U+zddBs.zm?NKkw&k{yT<}pXgܟVq\F_;!^i߭qE}~/,[֢8y߃߯Cx0=Պ/r݂63w77D֖==uU{Ny.b|0bGykk6sKd~~eIsWOt8㋜])b2sv û,+9QoooS86}w|Kp 9a)Ӣ\J}Q[p\qZ(5+Wu!uB2 3}߽nSқM[nZ}VZM-YNjF2禝kzkz~?`ZqJ]w1X3FBn//V;kr+ [n.%t?yy_?ӡۺ)Yq}Iv7}N){^hvn FYo|;`uu7'f^mrY2۽W7ߕg5#v׳9e.j刦'rs}ߛo}59Y`39 ZE:+UP}/=F,iksaFogg̷61_)II?W:%w__4jk@~ʿKTOxx>$2g?XNeT!:M&wNRH!܁ʤiZdKeyN~?ʷVK Sfyvܥp,2~uZ*ו?jjV+yR ng}y}A)k}?Rܶ/U1! иT/4á{wy񤢗ʂJwm$FJn;ٰ.gY芿÷س--T34~??XT'm(ۯO skmKl}'FG;/'o͙2ۖz?-yu.Ћ뾾 ۜ(C|_k%^2@*??w_ֹ'{c֛7~nNmVI;w?\ M'U{t~~[H$OwsNqZmN*Q_\A+I+!{? n|?SodPd1:'q{ßs[9:_fizu*J3*$fV ~޳ߩ֥OMpYq%0mn[iNLm޾Eq A|m'%ޢ%l͡Qkwon=̑ ~J{>He/m0SUܥ>GT-LuۑӟUȼߦ7-uiy *m>FVZuoy>GK8[}>xwITۃ~_ew\VMBI ;}{4r]~y"[v/4nij2V˻}>S Ypzzv=>lɵoڏ~%z@`4HVǙ%2=o'/5tw ʜ0yTpm|u|$ez{o?jy"H7G6i\?n\o՜}7ӆg3dx;m{ÿn.j(XdYwn²nmI?&+0oOk_}n9玛׷zj[/[n&hHҹ >dmP7;w‘zVz5_]T4}\U?v-\X1cQr\Hl"mݻ;_MWWPЦ̒kn>~=[2y%Roߦu ?E6i+o\ϻk2FH+7}cJ** zu_?[F)Zmo[V5T,i$g,Q#l;WY\SPQ}> oM5W^gkJŭ Nv\|CrsmS˵~멳x{ӧC\IpWl\?{vNq}z_tItFt:fE:yF<' Fw7\UkWoTuƤ_nv-,"Jt«"-W+6\oROɖa`X "ޭW̝>sfow,j~m}=:E:ro/W[X[1oYp}lCy$6d_'3}JiU:N<ׯSL_q-[>j*ıK/˵f[Vj׺-ή[5ݢGeۛo ]N6Iomg*oF!K}# \gꤔw.M73 ϤL6 fpU JeZ0{OWzak}NX5;O٭ny6ù!tG'Z{Cow%$Gx3f_AUAQ ?6SgҼvEs%F4RkOgPcai10rO2?㯥yk/e8Z6_/Ы]=cI~׳]I5zd$yjf_wty{2B%J)_^aZNM;S\# 9M͵OyM59w}ӹGzQa}@LK[n.=ds2SEM?w-v6cfdfs\*hպYJӿPݿ[0 K X,pFI3gjoNgUJ}zﱴfm~]- 3e {ƿJtur/>דcmh]h;WL^Ww|_[\۵wQ!7*%IXo)5mzuVuo.xeV?ݷvOW9'N/2ߓ;dWkx}{yHyV|[Y6A?LQIK{I_4@9sM+le(u7qsZY>5Crs8Z|pwy;N9E}ڡ  ܿh~4L7w I?w~fgbڎzZt] X_syڄd~㑼c!4t;?3sjN/$m:(?3Mo,tqKu;/9[} n J'1/>,UIm4it|s|'*+}I2 qdm\OEs'7cEF?u^U'?ed:o\ o挋yhLGnzٖ=ۿ>wU*3'TB@qG۪;~ִXn=2\y&f`LvN?;toڽzZ俶24jd8#ZFL4ۻjR7qO#Mb qsI.VD B圍$}_ *:-4{b왈 vs?hj)6ݹD$13Ӟ}k-xt,NK;W$iܧ6$G1##;~lP}_gRӿo+f40n.!nW;eJnP߾˪_9e\\\#KѾTْ$E-ho{JI/ܸAy￯ftx4{pu?ygf|AK{"{Ӯ!fi-b$n=j+~]T]׭: ?J l2 s(~gopNKo =LM{|@FYs}+wom;gOk:f,7+ cv_:^}Wգ7GeccÖ;Ia1}x?w卦U4+",a\E>9Y"bux"5mɏ!eO&/d}/Ϙ M.to߯R߷}Y_<+O뺥(^HG˕oꈿw֣ g_ץd}^ou~;M>Vp݀2OsnFY5{/,>Ot+ ٌUKp_=߱fXy9FWo?M%s1=~ ]+ς? < z$l,4PVj1㯏Voo-JS|nBV7t8gڽMmo}=sC>3VmGV.$&֬HQ.[?oܗk1FR˻rK]5ea]{w@ÿu;X_$d5I${?3L71OI;8&eyJXiӅ jwՌkKK_kWvuk\Cw 6V<c6M/|fq攴ſɞzۧ#_\emo ]jܮ;n.ceo.E?ԶݏmTԃ[w?{>I)Y鯗G7jIeQMG_.7~fxChk}ҦyE6̎Q=9JowQߑї H,R!`iy_-c!>QӪN4NOOi|{ #Ľ2o (yHҼEp]q;| ɚZ'jq|{?KooOC~ݏ0M 54gMӦCZ *| ZfOmZROq3,Ip,>}(h勊vNoII-V먟+j}b^,-ҥ7amc$h[>@fgXJ<Сk<\JNmne%Z3ɭk?ym,/|t~$k_|uq|:+sZ7Vz-Ƌ43[3776Q×2t~ tWg/ЕJqi{'CG|ahm J_hmC˲hn]f;QpWX*U#\ z/KGvGt(MSkG_+?`?<;xn7u=RCu,uo xk&{[jir\Vr$1;1kP BldKn^^gN䙴3EU)œCw-={ ci| iq4:7"YmnHo&mw>"gZ->NuH#w,aiuH|OO]Mo_^G{hR!9$dυjT夕zUZtah}|./7:n"2߅u{%w^VHk!?yIaZvZMt[kuc JkG^7{?Sc'ZKmmg|th(ԤI^Kwb͞ᯅ^obЮvye\DS/.ϱƕ*sѽmSd >(~^.~x*-W%ckZ}kEcB?~y)7ES5z=X+{Gzϯ}>~_>=xh>!|a'<GO =cB]\C5ᙼl$sW=ZoO=4'}=^C~FotO6_ /&xQS+IolOvX|(B-]kע鸽K_^xO||%oמ ־#k:Ƈ4u:՝w inпִ5KEiMJds/YM'IU*\Zruzv -ZFQ+ |$ ~>ΠJmll- #hǵ呕#}5<ٳz6wNެmz[܄?=>"J"\?y}^Tsn'Zm__Ve=j=2ddAm\Mxi h{[$y]~S4IO }kI$jɹ}=D&>_̕4ݵfvZ"6?&`L٤ݷlq-[4m?o3,h$pqѹ=:i.#ІNd_q{?ҳi 麺 !%øe٧T*8'}kt/!b [҈.Guq5ucõ-+<{ ڲ|e={K?N-k4cֺXSg[&]{I+uoK-䬈 &]+G'>E5A{I32+G[mmodqLyЪ.N}Xa`>{i}ǯ^/}BDӅ%3Geگ|jMeLq6/%2\E2HWsv߽*s޳q_QhjP(< f)<ϛuo[Tյz]Y>#j$ΙռSxsowi=Kd}NOo&͏VO彍`Zu6^յJ[Tlo.wGp=UU}L]o6]?$//"'7f"mR $w??mYش?-%yԘL\G򙙗oV_25ر%%ܨN~oE֙mlʾ_Cr>VU ˻U8'_<S쏓u`;)Q;o/i5܉&_CmJY9!F2⑑wnU9({_ Ok 5;LZMX_ŧ|q4gWMO% y{$9<鹫[o#x-?,Q~/{㟌:=@Y 4i$[kVC%6+73'?Msu>GW%+W==Ǟ"vZKCBe}6wBv7OdJS uvuVH-L:dk{Xfn>DXv]t)C7o<&_9ѵ|߻nݷw2oTsmZXIp՞HۣeٷY:N[Nvv{[ 5s< J25$kM|ͿsozA?)~f[ob궩f7߶gp*۹xF:DΤS Tՠ0O\BA/捛V?kS}{CܩFCtNfI"ݻ6B5J);}=.qff_kVe.y׼]n Լ3oco:{y{#Ķx~ϹXJ/fFeZŞ]jzj]Y .]+;|w? qƑD¾ G_x!"';>\\Y$zx H%]7LȤܲ?w/`旟4meRʛvzZVOK|c6ߩr=7PͷUƍ8mrZ`[1qjZeitIfI&yijI.}y oն2ypI9?Q9]=nߦo#Hnޝ1ZBKU෡\ֱqOtlN(NURU\doW"JT? fydYd#I1ݾZ3t={ Kc#Z >T_ ))ymھDjW*r3;JJެ Xxڊ:5VL*CMk|phviizɪqh6A ;EY!Vu_&5߱w?"V||_#f>"m-l^KV7y6fZiÕ+3*YU?(?u'>I7%o2Q"P˷UgvZGDe%2 V?*oS]FeޮK|[y\1<j^-VCLҳ*}ti߹&?2iZNdXOVUg;Z%U7KTZ/3cW\C;Y[Z¤c>+-6w}X^D&VXqo2{`tIW5:/>I]T&?& TͺFY>˵?JE'=3MJ3ou!f'_fz|Kmױ^i_w# a2ojVwH4<+i0.އd+_ooϾ&ߑQͳn$BmqWc붷 m"ui'GGs׽QN|?#Xؼvf(nH(yFOIuE;Ű]- mxacF쨿"Tz?Fk]Z +M=|-ẛ"@ݝ!~Վ^ܘ=m[+iӓ!2;V6u+$O/Q>V'_KmScSS71]kz$zm;_3Q|j3_550/9ی)/3nTIoѯԴ5]2w$^D(ٳ4OtMЉyUXsCдBo‘-$z71Or'PGLH#navBʱٷ}OZ@1i#WV?6?Ұm+h1Y#\`}W);-ll2?;~eNg˖?Zf}ΥcmNP`lF.5g@jEH$!k=ZrǷL|o9MIgvƎH_iZfAs~zb)a/u3jO@u\GG{$"ixf?r86[;xđwwj7PYAfb>^em/k ݩ2FݱVmۺo|^5[?y;I>pC{~N+coO߿og SGWn-`fj% zKZ-^濳[[7y4m{g蟼a+ cAZ[I,3j3)m6O| Ὲܛ?(opi}ή,£Na?*sr|ۺ%r>=*2uV}kD~z̊/0 a#-MN*.^Yk|}"viPG8pon!ەjf)RKܜǰ#&^'NkF%Ho/iԦkGZ.-% ʜN__.E`k}=1ecX|R|=vh-z>bʌ[ [5vLwo!!I dvmJ~id}ܨ>Wbw`֜͝ y>|ȖM̋d;b?ڸOˏ}hq׭ek~4p+0?1sЩEϿ8aSgܟhd_껺ֳt&קϹkܡI 3“~po }+5z~rè{(k_[M(rzwOu!& ch}G+שY*n{z ##Dv¨NJ6뮺񘔕3hϻ;DϷ#DVljQrFvTi9ߝvdo2@Bۈynv_uZ{~z֗ Cy&? V9HfG\Qww:iS^#?6TuqBG4E@v% JNz\So_Vg6[۪%iw- $g~ܿ{ORdZ}2.8QOno?iunۭ߭Vzvs_wjni;< |.}Z$&%Uwoe40F=~ҲiͿߡҋ[2e,#| v?ݒG"kƸZ[ri{j83zn篿{%z+VX;ܰ<9;-.sKz֟1nf̟m?Jס(97'_e3a;@k')'ufk>߾>&[:!d~֨lDI!:zj$ɒ[kӾ˭N;x:kyk^Q]}}{r)xMo OaؓceEۛ_=[~ӂd>K|g]]n+oՕJs㷧BzYx Âp[Ny~mZhW3o~eO ~e߈˭T#t8kKh{sƦT?N*i_/IJ*rnw4{?Y.}rZ1z}+2FJr"Rp7nwgZ)5Cx|!DD%ʣYAO{_~ƕZqӧ|9@v6~V-jsӌJy#YJ [4oa6ϯRkHrkoש]\}6zu)5:T\,﷮e.~r:]ߏn7ȭ)=-GRhݶGϿ;{HǢc-^8Uh)e'VnFԪ:_k]/Beu*W;A=ӱmZרw3;Sq^l.Vsi_>q4̄I*r x5*[mBqzo>7D^yߵ(Qw_}˩.Eʝ}r8e#^Xoo'͵[gi9.+cqovU([w0?}/Ȓ5S٧J? R=T1 ['g_MYw>Yh_dge;~ls}}ң/zLt֭(NGɏj~+r*u-wn~E}IV!s?viۿ4[4Ɛ˽('*{ַ" vo׻66ђ9~_Wk9FMyw~ߎ7&' 0x_)SM=mTkAo_}\0'-\Fz}ƥm}?nUm[ݥewb\~Nɷh#?_?3_"eeLY91ܮhSz~wvm$\P_^ޕ$5ZSwRs1H3nSjc*3jeN1w_7sǛ{^apʅ?+o>$FG :~$ I^$Y;_qJ➿u&4՗]˱ܷFHë}/wvWiF;eӤi42df"6}{\r·AŧԳĬ81ğysϧ;i6ڻ5wWQB[}vn>znoF.]hە߽m>D"믟˫:Rg>Yt.x#T )/r>jTqen)sri?rGWhT*LJm۾o'V_kw^Hm!h\~ǸEV4&Fn㟉>ŽpmIRnݷo}|~8ٿ>/'tՅDiy5Տji:ƲXI]iHe]/[.}ʯ`^ƿ2CmqλZKT|'o6;^[tg0R˯gk>>`PʐO yk!h^tr8|=~_ѯ _}ovtCA7w1ۤEAа3HքOŏYeM>mDFپ_z3Go{SW庎ή&f+zGŚS?[5GhQM66Yoy딚o{'CBj6.F{vˍtq>:qvul~r]GۑT^%sku%﷙Qu2}}v[tg.m]۷_`rh-/_:]>k~8Ȳj319حr?߈7tQz<9 ׿=K<&yQa1Uvg~و5޽7۳yuONg~7߶n`+vp{6Fosf=y} >K?.Q3Tz_պ?lk=OC]^Z Dy6۲`?pkU[߱3zm=gGC-Kنo d'ڵ8_q\Isl.A} VWn>L o[/.yV|[C]_iy"jcqm pfGRo% 8ի:QOuu>3=JƾNL]I%IZm>m>M zja޾}}:hURlG/,h mDz?f7_2O=sՊ>mv?vyϊnɱ1+}vyd$|R0.e,o_%;J'>< >: 7}UO束g5_*d#sߏoT>OT{%@|>0 > [T31뮦3OVۙI 2m?#Snofk]-ʍv9m~(>?*ey?{~f&RVY䓐\ {>g. ey  >nmE)uo]EI lp⃿͕-պgi5gcgkj2iba'#Ŗ~[V~ѐmc,{b3n棓]7z} 6,[npVt䭹ieZ;|y%2IlfvX*B,v}j,=2yH_Vi7}u7_WdkOd2»;.minZ8 ة2G{t_]ʧϳ^.\gq%4xC,;|3o)ַ_ʥHAm_s~o* Vo|:Ko}3ℒ幜`-Zf?ryvߧb!S{W=L5^KIy$hac>?ΩKߦӟ[YwZNJ,M&BZAy6;2ɺED;V\<6 #y%+tœ#O/CioVVVҬAYhŴ5j>n z=FGaҬI&%T}s|Lit~gĿZxfZOIw}4 v6s#r"lGf2(_ 2O_ׯOgt8} ?xPX&ƚ.̷ſ'"?١GH{{[;^{7XIKdzCcē|g'/l:uV5}ȷ:No3?渓 is}2CXuܿc7kzď7? Xn$1h1{F}"[};wg<Q)T7(-?=yºSu~Ro4;9nk!5e/ٯ,əm_'L0yyor_[ZT)тnuMzRJ.GI/U?Mcxg>"| ֶmmWiff&]*geGlO%dxrqO˧g|PVφ?!5[&/n.!̷q2ǾId \[}o"QS[W xeFӿjoƾIm~Ѡs:.PJXj05?G'^;N7k >Hv~_ ;z[b>)4}"]MkQY.&ei㍡]Y^|G:+~zE=?y_=|_/6HN'ֵ{[Ьuv>ʳ/as/5>; n_KZ[G lOGDKkixt"[&.c7=FHf0kyHٝZV_MLZំfԟM%xgSsɷMޏɬM"]"M5wIh)n_;_۹ 7z_<_#:o-|-IKk?-VmWMˈ]rN|2W~?QœuVmWJO]BuyvKW\t2\$k8&O/qY#$V]ֲRUOj;4{ȧ lf-dfxc7.j}z3#@5k:ޡ+Y/Bedͼd=_28LI/\D4iX19cwknܻ>߫ߏuWOGĊnof[#Gn$qŒ;waMdO¯xRӖF(l76GfoGDD765V2{#˿un|KV_ |KĺeΛe=RkC!iZtݛw?٦X=yxB-rvϩ5~ JZLl,/R]3G0ZA4oeaUc \J*X{4+5/ j\] M>Oxt쵛,[ڼM[#)Iz=e;֊I{?Wx1ʵIYBn/XޑrkVhu ;$fi?HX갪SS浴jߪǔfJQAM)-RzjKj_/x+;4tO?KB١-8aMqo$vwh{IKK]zˮ+*Vդ}~_x~_ fdfW8.$o|Ys RAnYTR +zv~6nݫX!]l͹OqבQ.|gixs\^a ;Y񕟌4_úo0^%$hulXh᷹Movma*mWm{uO8X~)|J^Դodk7i\E5徛y)m5n6?wDp1$6W?3/Ouoi_ |4-4ysKγVXNBp\8nkíP5n|2;>j<\]h~.x])[Y.>Ϫ5~ >|ag>"xOWt›}/Fj|0\iwOqeo2m]V[nG~fʜ͵kCJ5Iiw~;mAG]d<x-]c6}mr* k 2^"\qcڇ4o}V{[?~?cx|MYBBGҭ-cԼkSX8dyvg[#M%߶M\lT+i_ϹK]Ao~to hool<5yiKojnʾ\-Mwc'9_DJwk{^*ɹ|v zztx/TFbO *F+Srz'`׮ |hZAimJJkA HFd;Qa7}6my?׭j{0 DOO:)KPT3L֑~w7OXToVƐL?k:GxuG7˧YݵEc EEY#y~ f~?,"Jxoh9Dk׿&ӽ~$Kg3C2@iB9\Zß~)3>6zӌyMmjb&X"#ھcnfOΩՉIWJl2˻r<}OQ܋ X̠fnS]Y/{^ŏ\ITlQp]O?~tQ-`&U-ʷd n|ɦR)wݑ[Ǿ6o婓͋Lhѱ9HlTWC ) Hv,vۚ+ZM9u܅+. *>bWwnJ /}wI?z{~֌^Y}ɶlOM_q!մ}r. #f6H~U%mG#/l9 ắE񷨤ѿ먖z.k9LsooW۟oz3+߰S};u-Yx xw̟͂7_ΑWd;?aeSsVcԷw~F>i[cg&W}o!wcJsqVoۯK-*LmkMh.]iws=\9>EˮX-䴟7<ͫoc%6ethp<ܻdt$weIS6 Ur .Wn̿u#7iVvgG` ۆ}[sgсc> R\خVͻk"E5ٙ]20`U۲QlOjC4?ay=ᵛ)s巓#t*n_ZxB -㴓X_2I9j#4kۛ]74jE|#28sB_տw!_[q[_>I~VsDwoY>D=iGmt}DZQ83,;w,in®铮mTiŽMxiwMs$3ƒ.YdȜ#}ܖ}; ;4Dp'o+n%{5N/gb0¥Ĩ#8mgE&&(v0ԨomyvKAmbHK<_nR8Fvִ&[|٦adQ_y|@W}w'eSxZJgPʪ&U`=4m$NUX? (oaqs?'$-D vB asǿsh\6cdʭmc5:M^]3[Zxo.Ȓi~2f/'Vl^_g_'-Ji>0uo Ûtfr5ifX{lh|`գעjyRV]O__O1-qrż#fUSVI4fyyeNzYy?}FƚdaI+ȿ,7E?r0B;-_[$֟&]UIW]vSڹ;r'ߙb{k'n FbC(pW'NW[~8fL-;y19D@HMoQwuqM>\6zۧ|JPm+Sʤ_7twoɕ.ozy4rLU-)L2L͓CM=Lb|ΊB1U }싹wL$6~$E6˾YCyZ7mY-S߿^4#Qu]"[IbfΒXY\lO>:4S\&W*;|.=<1;}snB箷/X5v,Z3emݬOݞ&%tk_̺m\BO7O&i>Vo?\Ufɷ4G_{Bm+ǚ~CM֞Awyh9FjG{tINNuevA/xU%N0 WjeN)hog_hնy0#)eݝͻl\3{?]~~^auK9nx']$VVV\_[~_g}uqK䫫xN=2̒'c$n&U]7TmOzGP9^N>uXP"+dh#w :H[YQ#W} &\ppwwEө 8,*0s+;2m:)>d6v{faXK&<8u}mʶk2 b[jȯ~4ޔ^EMӵ[N嬣Έ$Tc 3'~?̮~u'uAϯ^^Z$ f<]?qwo2T(q~l}Zoug_iB߿_=O-Xf1!9Wf~5$[y_9Nފt[';+F6ת8 cGy.B?hegܻAZɿ[??7VI/uq72݆oi3;Rek۵̡F}mgG#p;wLew}WO%kػ] y`o|k/Jzju,E"6'`V_'$To >#6܍K^$B]/ ] 9,eeqN˲MB|4*$w} 4E8.,ˀX8lgݿ\4ר( *.m15R>οc}%e;Uќ/?_=<̗1[x#9+_+}Ne߶g=~dJ@C̀vۻOY\`9OHm͎e˶ߘ 0 w'o@1=g8߭-$)rzm;~V2ۉzr[Y< $t;#ƭ rn%y۲tNqV};9GbC>EqS]6䤔|'V͗)a?yvן\~N0kk26B239Uc K7_Ҩ =]HHۗiq]D-߶8!ÏO?Sߋ3 oU/qj2q ׭O'*E7/w,n(Wd7<{ZIvW{hșb]0";Fs3z'*'9m[TN7-LwfL>5IԵo(^^W_Vʳ=HcUN:Rk(~iZ+,w9(vVXp]Jm?ӫq`!x9wY~[D:L`$kVc={C6Rwݷ7W ¥8Ik^`l cg;Cm}M%tt#Wr6y<NWoΞ6ݿPw ׎)rJ:j3W4QbϴRl4nԓjeCwv*vkVש ?yۿƋ'9'BWi忕^b@_VϔNz믟a^YY1-W5$Iu9vۧWȭ-qQv+e^[>ߧtGR?=$lF [=U$^:)SoYֿ|T%ѿ/wH6 Sny : ޛZƷ4յV?d+[ߏ_#Mt qq>6,O3꾿dvV#_/'x`Fʏ? VE(Fz]z[WڵymowG&6wmi$z?- 9wy>dh)hޟ}c~d*H 4Dđ**n]OKlt\$+?7[9eȶp#{U&o\nv[ [0U6[r_ᇫUyZ~~uyhPeG7_OuuO +:L>9;{)i-=݅TYtMj7oݴ_+G)toosǽ\e"T8۹ֱXE}SvkyiBG2J*GrM+to-QWQWWfO ^L#db?1_/m_^q2׳?CeTz~§?ؙזOZK2eN oWD4=Hj*ȯ w?{i~h*9'esWnܯm LRvuC'>d&)Eh xnP7皟Ov?XZ7m8`$a*J_sMM=2]q^w7?5e[ᶬcsW<T}v2(T)-$A+_qkIu-/Ŋ gn y[}?\VOM0S4.u J,<̎IRvu!U[k Ikdn+ rƌi6F~סuNWo *wX0/4!wVW\7Ugtץct9&c_ 8>XB}]^셴;8($ ~r?7k徾>|i__Oo[`Bܲxr?K Y|_<;o]|[v4m1nwN+9b}аzwE%F! !Æ!~l~J8K^>2XFwo Aƛe~fRVJ9hJ pw(/fm6Ͻx,#k~"xaʨ?:Quްj׶߻geϟvX3\aZ&_k*M|n4r'/M3s̙|ֳ>S_?rv@&L]튻l[~s_m Ѕ}m?'v/ekun_mEeU8UP|VK2/# W^ϡ1u13eS *ʷr[z;2W[ْ ;[ ۟;i8S6Z 䇐b/ Uu}oqRв+}J>աZmm!~o3jXKW ,a[Թmbs1ڡQYD|u[W4*ӵnuCy;RoE`#39~VK';xT]o߿k9 ޲.Qʿ7+7Y nքxN7\jNrdB)V5*ۂvM~O޽}Nŧ۫K ~T+?3nV|--*"{}!s}ߛ{m4^_e}Qtᄋ_ɨEi*f6#6oVt~EPO;%ʷ_Ziv3T5P|e ;# $6kU֗M[J:kW{y"𤭱HǕ8èd}4kZ׭T+^[o{i-|57T&ݹ ;|ƍwvz~;B)Ǥl"bOR|[RMm.iA2שj6rwbg{_1Voz`U#9~ %mw .(co8ʩ}3L~e\Rpӂ/СJ*Җ-9O@)~΁u 1oo_O=](Xki6YX>hߗwg`)5TaWvd~Vczlk]R^o׹՝I?nvF>!uZ[*vċFݕ([.^~hs* ]y2}X2Zdzjʄ>_ֻ ^3+#ɋz61q+ndgݿo g|ܐW]~,Z>q5YX)Z hsGwzC^eVR'7t~k+ٹ,lݫQ"aTՔue|ǚ WkӫOmz[yXxR䴳ͫRD!޵ћ]Y#ũRNW^v]-śF6Ĭē,mWf۹wm~1TOUђwAin9.e[2>"gU]HiM]. kO+Y6O{U>\zk'Ꮘ=E7_9l9mմdvoθ ׿cj2Ӗ޽}9A>7֐Ŏ@%[fHUwIo"I7}\Wa+{,&6TzMk w{Z[i:ZlHnl"̧oӴ_;Z0^ײuBKKu k٣:=/Sk`i[Z,K7&~t3)Ҭ)>[yu%i=L.{NHƣ7sPTzocf~F+m$G;([dߞ#v@pAnI.X+Eko_ kUHߑzq󨛋?rU7+-YYg1ʥUo~t:iOѤj4l>au۽ˣ.ˀun-;V?>Gż/qiq^k]Yߎ2j~_7td6 X(Y9cFl厾Oœ[MrUjo[|D`nn.?~zKcHFOU{z^Ind bH[*bޝ*z&S^{wӷ@$;Ȩn)~͕I;0v~\7r3J?_/$NF*[sǯR0OW_wС&֏ҭ.8jQNX$3lu#*o/b'fJk{aE4z-Lia[_Z64m#ݧg{#yUM6;iE7e'//?{/oֶ17ƞ uk-m]J=sAI4{volvi<Ï2E{w!.Xo[yg?PڳUt?j"?}%_[VnZ6d]kR7[*DwVҟ~9Jn]GZjmb̑fG&tO/azf5mjx<Ag4#Wd[Xr,pMrNm{/kUUk۹<~W}os7'i Nn:lmmlĐzXRH &/#FOu 2]3>߃%_ n6V_`DrGke[q}6.}7Ri~ Di7G"DK\,fHfBw'Iv>O:ϸ/N;ٶA~O+>6SK{{ѡ:2ymcg ˱}#J&}9-W~pxcL%> +ie+'Mkk)+9/!wHlݡy&t}yM^z'JI?utO/韙3iSt!Լ?+m/5=Ԓ\[]xˡڬʈmfa2$qUdK[S^||ºajzxؤV>fxm# 6j_^#,%WuE+a-?k]|RxMmv&5GMdɅ77;|MuU+yZSv׮<݊NKKs^,@I[XI+k7'i>٩ZìNw:^}Ί8IN>žԧ+ӵ++!=[Lј${ I2)S=v_ε/=w>>H9-~"x{඗/F4?MOԼMZ[MmFmxc|^=l\(vq{Gw|ïF?Gk[:MNy{o14eyЫ~_1׊կZߍֽ-=*rfj"פEw:;Hlj[I$pB\hD_k}HXk+r_{_y?h/ ; Gz%Mޝqpak"\2M_q$>g0FfKOʖYVRo{í ǚ\e- 7MC=:y*rfVHTm7̢O_=lN/ <<$ug߽Χǟ9{?|Ce<~MK&RHdfI̚=!;׎|~+kʴ58&o -־!?|Mx[>{G]F?iV{f][i-Z"G;c]r^0x%Oֻ~=%Fz~v_?iBߋ!53 èXh,os[M1g^K6|Tq3/w==J4r};gog=Ɖ«Α[WF6iݾKϳ.o;I=yr%Β߯}z6=J5~ӯxE> i>3׼36_[t"ZӔ%弓Y}ulСm-ws${d3$?˿+I7vwF+YŻ}]cRÓ CU 8̿hw\C32\3HDOc,uUf=>K ӭb0mX}Rkuȷ\mܫvܼ2ѡsN)vѭN,ӓowT=O+_nm延@[\\^6d[s//6_ ʒJwWfެao| {i;K=ϟy=_DHt}vfYoدVwϲ~z'߇k_5|^=ů-CkU{6M3ܙn|ijF>Q^>7SZ^e_'~_x?{_Et)ҵl$,i/,mllپVTe*_go=^/byIqomkoEv5ow8蠔~eԗ3O5']OxO=/4wCXL[%VedxI*nG_G[⿏(+xm|:{k}pەX\,?^ X?y TM-W϶ ^m&1n#o,s"yqҸ-^y'9'/Z'u ='=}QúIdU;IsƯYkk_/5Ov?-7u|I!axၛn&fͲHZޛN^nIu~&@gh=kpQzt<~-Z5 tۜ.D1;ٿ盫~RW_i{3[8LXHg<4L$mwv+T%Zýg?]RS2#|+q{(&#u[]IRxLg׹q^v8ϖdWFڪ0ʊ۸D[|Ϡ7}UߊxO>&xVt_趶7mcq$1ZywKajw0$0olJ)s>#Ѕumcos_ SRRg^]sVG[[\׮+V}qű!θ?,=^&mnޮܽ-yUn_y> /1M"}{ď% ]2[[Ց&}i= ;zwJ}u:-ln$jVIF5%~2lrI?Teg~{uygwW{iOAS˝˻ǭvSk5gcR?,mX[ȧ%=udgi?/_("9'.-f23VJ|޺i]]꯿[װ[ECTKxN~iy{TԄbޮ? ܨ˩laE2*w|Nmiwl,3<r4mnoݷߞo_sDͩ2X-mgTVYvH2oRvIhVh!d,HƯ"1>fz-ԓٙW:tWkX-cݵ_o5#v߅+X`x VUb>jff ׯ?Os ,);(( !mWoQȻhNolL@`Cy#6,eIƅI]+|:CRYCj -][oT^._?6⿰9e+o-۳?5ni}~giZ}K&!XN#po.Eogme5J-[[˦n/_qݍ Fy%VYY<2H~_\-_Jmws&͒?0VHD(s;=~ךo% dPNr=k2XWz9`xVdo<)ʓ!eIɳnݺO=kYF[eES׼CqXl1-ãOᤵٮ>Բ*yry{tG#8o>KZ[ 9~s "22۾19KOp}2si W9} ̍#8'ޢoKw4g>`}WYZV@~opTXf$TRo2%|}G˧Q,fLӼ{]MWk~[J|w%I'~Fݤdex8_eVjNO;cmYo7 UO&7vzÙ.q$l187.U=[-f*iM˸6]>#Eg)}B+fbIXi_8Of]8޿/=z#Q$7}ߛvϟ%W?OOgZCp(?ѥ6??2_ G<kU4(4dՍ1[2[HM[|#(NPmN}|z2[wf+ݹk6ݩZʚjyLGQmd`e-"'/_\Frr4ϊ# a,7˻eeo)QWwvZA$A?sȻ_͵k= ֛Ay\Em%04,?˔msMlkɯiq;r,>Y;Om? }.2϶[ l"w[mnݫOLrv_)U2Iiax|@u/X[Ƨanm!Q{~c¿.vo(ҋ(ѵ.nnn,׃syr.C#t 6U½G~_u!ΫO֕ , R}=MN[_Fu)Z +Uvi=/';+s^ei-đZo߬~\qڲ6mAPAu(;g,WUf_?/Rpkm}Q7Smdk{mbI6.egY#ejkKf>q%Rvf"nەc,ݱ7Z /#J_sjmdҕəI.˹w}ڄWO_E>#\K5S_~qӿ~M_-%R2A},[)ʲ.w/5^ͮ :{{GE?7yxoߝL7oEsojF?, 6L4j̭#nfrJ_euԂm,RGe'͖|oJ^o0w>~oyIt}~EG'o-'vsuCZ:˧K%Skk~?"Y^۲Gr^R\3*uzTI1t N9y $UK||ti5];H.m~D#bfw,;JޛWVSxDЭٵV #E>6dz?;OVXۗh~UeRONoA;FIV@'?^C(M5nP ( 9@ӳF`Mm K Řp.xtww4"(G~~w \}:_@?TY^9 ˲Y}U"d|,Y9HwI-So%B96e?Yv3*[1b|ɤܴ)Bs̙cc{Rٻj,mg ~\z"Yqݤl}VM{2Ⲃeh HehĨ`C; ws}߯ր.uy7W. ,{0W3o˦&&׎kUw`.b7T{O/$+3*k J A]kĖD?=2*mݔ(4k{[-=cNmN՗k61Jiww#-Si6T+ɲw:~qjd#Coh+!2=kXJ?̙G J-BъR++HnϚgkz~?#) w>xKB$O{X|:^pUoU'ƏEX[b&k뫉ѻl,6fm;G>*Z׌ڴ9;;n|;2V&lӯ|3}: +Krkl}oo ֿSAKUGguo?ɟ'z|}樂3ǟOX2<+chaֿT2xXh?1_|sjVڄgUno׳*J-VU+YSCu-N؝sLm/PIddYc]-|̻]9߰N!g>>ӛ͒qrPrxzLuz*`j_v^_?qjPK%{73EhRG%¼f)Uڥc좽;)ͫ_M޽K@F+,`mڭ ImmL(3[fw2[wbM׶/*Ay[E2~2Y?jO^L/I?wy jſ-B:Ffdg2f9 ɼb2Kk'עOF9vvZ}Y[\bλ)'e+oVaWz/uϟʦ*ѾvoV (ya<*;UUMnnfټbA6dW|wO5wk;B}ȮYՋתڔ+u捊H 2DEò$X6OaK  NW^k%>i%~^[\WeںiUCM6_Iqٳ4[~޻o:%{?ӧg4~#x:}kwy=4vjۙuoDW|ﻧ,hkcT4]Ot $M.~ɱ/m/`1FI}#{k3u]}<& JB1 5 ;it$F$Eh[vM'N5߯}w_3M|ʇڽ~˻^SiST徟%ӯUMͽ0T4*g5؊y%d.e+wo$:eY[%(8ܷ'̴zfm--.[iXrfhB˄2'{tf48[|zIl#Dډ®W/ZM%}_K蠶oY<5f-wUqW不}|[kIH^KUdR?ѿ.;=Ow~TekԚ_EA%4)< -l6ɷ;Uң^B˯~֞zYw?ŷ|nΊ_4̷Iv D$R& ϻwy.[{Z39I/wmlڬ0cˁX|'c.n-/7k7Kx?SӮ̺c,6?xc~kH.P9(dƔl׮̳*PJ'HϹ汝Gwէʴϻ%DPվQٙ}}7nU%vziF5XUߗ֯ٸ:)N6NIJ q]^{uQ6%t>"Ao&m[[ f`d,iŭ7hOz{D<)v8?2rYQ_־x#*wnO_w.jpzר!,Yʨ?U8?srRzzВL 3r ?{ȫ_k|7jן|d]v @>o^zwy~R|_M5jH.}ͷmfス/sFr‘\.fr5ox{kvz\Gzwث]?Rt/ϯUԒ7\.wpWoC]=sBSz]l+/ڿQ]9r};('YvccS6ϯO*moAL{[ *ɮI9I{~ls8_rhIț(O V?!׌ooUnyɖ @'wu?֩MuԩEͫZwYdB#n~lۻPHjS_q Tma; Y Yٓtd'#1Tc{׊VNg~|ʏ+6ҥ˶3]_.|=Ve5/;zz>-īBbOɋ/vZ['[r}K0)a6{r' [W꺈PłH?1`o Jno}_~C:?'{{ҒiJQOl6pOG/5 '?QK麔rYæVB:oOΰb>TڿʌXSQ[^_?p)~5d3Y#&@(ew/~J\ڿeFsPO/ły{fV H+69qTR2*Zڿ"Y+y=ӧ}jޚ_m-Im.Q :Vwk|ʿfU(oZJ_?Is7mZar+W4sZfkh/١V`\go{U'w+OQr(Yv%[w-˴z_s׭9WpzKxg>d& Ktb34m2ӻkM;V?Z_"~~J?Kɧ ʠ600/Dqo^eJI=e|w@>Y;z>J/|ѳBJ^;ȹPJ ߀S}~:aB:GyFAm扬Y[mM|Yܷׯξ/mW{w;(ݾ{ߩ|W:4k[i#Zλ~a'wҼqoXjrkM??=BY-rm힮5XJIm#ʩiB7myc]c{ {ztU*W_Rc#PT0t~YZl(>+k|#00T vS}:UGejr_6ֶe!1{mhguR<拿m *S 7 ZF黮ݢtU|lEե{z^K˧mJ\1YPmU~ZBRC,]Y'ȺO v$Hͷw#58Yzv9U'[|˖-ِ(~1QV_um%uyz2>'.p̻>sus2n֋jijד6՚(6`ͭcNOw:c.^m"V X"?.QR)0)sm|,R\* VYWxf۷U>];tΨZ+I}]Vd-*+"0U(zE|?SXeds3FnʼERKKOkb%ew|]=sioY],u8oqweqhC$^F̢hc7ϭsrS:R>{jK"LAra T ϥjٿ<nԩ4'쒫hmY7nSuw#WZ3*JpGE?~MgŵvrMi~߫EFM9{eHYsᶳ*kPW뾿qoQf/W;92bJ7SJ=.v&1VO^.@HaDqt?ﺸ}S}2_s"QT&i!a.GJR_.i^w*?%+"$TF9moe|wwZթ;F+sR ĹxFk8џc卷vNѿ}Ӟ_mWׯbv),.0β!OvֹU<5y;=MqaLxN0 Wv]7h_wU?M2~éM9.ፋ+wO}%ߡnHqsW i śsy1;(sjm{]eޯo&A7+UVimy9n?" %P[/rnf;?M/6uEJ֛;ёYgxcyl8!Ymݻnb[tzuȟE"kU|]z+zxVf)Y{3;޶$HeD&HˀVr]qAz}`KnS_ _u$sWAbHr>]mۻ\W<0QZ_ϫٜU io'KekٌEe:*d,6m nYoi{:׷]v쇴ILu#/!6bY~?%DB;^MXڝM^u:vy, qYSnԑrJ{tO9_T[>.#_ 7LimtE$[owh$I+2y%۷խ+z'MdooqF,eIQOʹS_TQZ/]Aofh" Xm27o}ziX2P5;h;,DTm_ݍ+xgej.iiߩ7ycvbY^%`6oM'}f3k~ӫuQb2Oyi}'.D@V6omsYߠ諯~Sl#Vt,6~np&4m{[(E__ͶmHefιܛݝ>ʿ6ړE4~u 1>A۷*sfŏi/mW_ӝy_26@ ߔvy7_Z/nzTj(߻&z3' T˃6=o:NuWjL+rwgxCDY6CyHȿ7~}ys,#Ԛn}~q{GYN% (vۻ]r*SwwFwgiY0fZ[{ecM^>GjbߗK~_3B_2s=ouyi~ѨjG &׶OtCƺtCvY~~䩞&Oj_SZxwT.(Ա껤ju=;=&n^al-CS$ M7u!m 9ڇo|#^@>ѭREo7Y8%Ij~ˮ{ߩҽݯT#DA]ws9_Vi:|]?WH;UE|wkDWk׶3"Něl;R}HZ+u˹{Ïo8^~_OUNo3۽wn[#>7>nJi 7Nðqktk }>fHB?m\wlƠyPH„Y "]S4i6p-62**p_~Ԕ?>f[9X8\n3~Ws޻wY{ -Fq-_8s$yFѾlVTnֺiUgofS{?][]#8K0U<ۋݻjU+* ׾^Mr]o#=e3]wJ Y>| Mlf|4lmt(:UVsY+ .ܜq`_Ҵ$5v}u2]>I[pK v3+wG :]ۣmQ7 2y/9?yz4q0jC̥nntRV0Y:746[x&uϱ| 7 6:oBagJJ<_׭[w;KxDmƆE+D/>Gz寘PңCm=uz-ޝg?{}\t῅o?4 dXMv6Vy1QL\yt8u]J\ oٿk|85{].4SælA%힙u '#˱B$،diCc#~]OXxzt&'@ }Fkyݛmkxr~BCQNOW_?r^>xkށ m!ܚy궪Z Ky~ .>dq*kvyVZGCu?xSŖ~!Kfaf7-G \'>q\ҤŒ}بZ:gYr"V|߮63^,cepV2f̷[]w3ȏvI;+)4J*S{fy)B7ݺ?C|kk|}{^ 1q}w2۴v3-]5jސ܅=_mۺW*]:Ionz4hZM|Lt=Ė:,V=p4iy+[_|G / cWU[t_SMY[/#|Yt bu}KÖ7hcoC4>v&?xƽ9ƚymnsMR޿.>W.N̗ͨ6+7wM؋3Fd>dts[~ނQCw:;as|k?􊬲}m7A[etC}\ElBV_Knk%s1=j? >O m+GdԚhVMAggnoh_kr>in~r٣V> |l)ԵKͳZ}Rn]H-֕,2MEי9!q^t~bqu>wv cP߉<36#/Zuv4q4+u/5"sxdyyE_P(J} ѿtҴo< 6QdkeUTi7ntyG~J7o_zѯ|n}U]SeONMcš xR76]پ2\yml{2Zu:ս/~]e_?KN/<=q }B{>4nn^Ԛ>eڞJ=8X;?FTSF/{k[oK]RM. ɯ"KvBf.٤ƻU}ϱ6"nhW_ ow@yXR%6,H퟼LCy[^< -HݺpJOɽ:(Üjܙ->&XH4j&g]wsZA$liuCUn n ??^Kf ˇ pj9]^9=jtZеR=ZB Ky2H3߼:5%[6'-?3~*4 ?鶾^k{y$x0I'#gʝ]O0P&4o -LJm[n7A[3 ݿgշYǺ6O&m[~za*Bv߯W֔V_;njyϊ~S{uMxkQTK.Yo.fim>7bWԭ}_N3ޗϧ|h 4|1G>y"˸K7:JJ7>eߔ;-=mww1~t^#Ӽ4Rfeƅ%wZi5-.["y\^Mo BK,|QirJVݝ~)]u]-+UΛt7߉^OXƁjy/Y;oqmXd~єs^i۵ӡBtPNϞ[۷KF4;v7,:kZz%+<0.6dW&lI,l⹳-O*kn^y>MjRt_t?OSҴ~o;?*nc>Gq&76څ坴۽奴೚DV5dܖTߗ cZt:?KD^5YxzKMHдBH/&.c-6-fˎOy)Q?ZؙI_g_?5Ԥྗ"+MXͩo52Mמb4$2~IkiaiKޒӣ9$WOOqլuÚwtZ ;)4Eﳤ!ktx_jF>] UX;_y/ٟY֭mM̭<0p:~!X}{;C"fɚBktტIqmO[:j׫os[<1O ˿ 6k>dynm|wWM%i {}yq<ѧU#MIhk׹\IK贗{u]zxsmR+v9ΑmZ9]`;!3~[FPJU~7ZɧZzouv]mm>.]O:o 뷺DwkΛo6bKuHOms"#1kmo߇+_ |V+Zω+t}^o&Cfm>y#e ӿ#=/ 7Ɨ$7I֩cu}LHl!l\O2y6[[TjJ҅OS ݭ_ox_[_3޽ 3t_zsWw;+|j{xxxSKt&0oEY2ǹ?,~ɨz؈|Ko<p<'ޟE_ww~-t;tMu #"M|^=6KuUrvC|ZEߍ/`Ojz֦tŔQ]IsrHdVW;OEh)K+ZVbWMf[久r<~+sNQmE.8Robeod z7s |=6WNc_ rzZQ&ݕnt#g[Ҍv}Dzu{;<y?շq_t@zi]$mVYmZ]Bbm,'ɾo1ϗ)5"];w8_^K۩̷pʒj3Iq7;gا/kE-]װ]}˧kWi-ܿ}sTn{uƖ}sc=OzE{1_;nc*}?ڡ[ZEkׯ~%!޸ľa'zVg~?m)&kdŨf 2G?+Tf{]èݻ<)w#mZzؙ/^u9áꅷ})d?fZ^3}n Y~ VmmˌϓO=^_Þr*oR_Z 9DdM|Ⱦnw̻v'.h[_(ww:7Lk)Qd{ɵ0"5۵~l3UՔ';9Smw]^zUΩ$o繝d_A#mٕ?ߐG+$oX/?9XIV?Zi|Ko ;=KL-$~ I4AXƑuŶw;˟~:Wg(Q2SU _|˵[v5Pm_qVX[v_w`S9au;.JKle_|(YY^Jˏjq?iݼZ( ..&R@ 1,s7ϧXw 4uGP:ߙ>& (O ˟ǭ .!qii RFeEY!VS7̿6G_?ɊI٥.YaT #-C}qym/S{+[,`}J/4I&[I;0kC] +_o}qJMYg2V[aoZK ?|81_Ȟ3]Tc Z]:u$1#(U͹*> \Wp3"Y'd׃~ ZxUϯ>>oio?ΨUR8??+wI[mxkE,aRW3?c5}zy!s3A2h{_fQk&Dk_ieMգZL@ۃr{O/|,g{fD]l /޿nd]Z+<`䜱vR\ L`{{Tz+]|wo"B/P oҥouNqיVLB֡E'}~c]`O "o|18lդ-3*Gx̚1Wmn~Zn-ooj-8o>\|Ii^kl<ˋCPUXe3;ܢl$m3NHM&K̩xC8e]xקjbtvR9|?5<ϴۤn ;oSg~ri_層amm{^Yi]r6qbܮ*SR6qJN]z~&5[30w;wkHOK{ŭL\号S.ߊ0+v\g'?6?E&? ;P`Fs_5ғ6<~3:FꅤUw|͟NK 孾_^ߥf'um}32_&+{|O̿*؟v[ rEsu?-'+=owcQyFv6cY<1|&j$wFogf9(7[#Gy FcK(>qϘlڊ},NEt0=]o?=α7/i6OCmjڪfgŬ[[.SgU9Z4l|'2U-zt^fbV%%%%Wve~U.; U 3FHF ׮kh>nrT )aKep|NWzœ%~7rw*Y`w}O._i>׮A$0;?~߽ JI>H fa  L!]Rֺc U/ΔIrX }?njtW t:;%-!2#wY=JS_Z1֝8kS+]-🐂kQw,4k%l2ȐșbD5=]}}o맭3B|b*j7|͵[wy.q\}kάݮg*8GF|iyVo[:i%;Υ8F/m4T[AGp+d^>eFxVF^k-NJ~.$HV9Q╕ Woyo )gczg kg Az{KK Ef[yySp˵.K|šdgo?JMǣ3\YjKot5k&|$;wyUg뼾͕&_שg(_?ryW[Hi9+xlIEr<{R*/~Ϯє2[8;zVk^Kƨ/kXYWfe;aɖީod?5i-.gK]'ޒUF*ΏtQJw2s'ʯ_sRR3SJ[ȻHz9O>S^a&9ɿyomu~Is H>>?u_G J.F3I_K^}$v0m獤{uI1"ܳ+w~_XŽJjz߯ܿ^ֵKM5hmmlY2Rq=zY?ypWmLa5aC.wtmQC,f?s94m_*wmߨ#:6_D7ͧ=ܗ6.KxVO8"}rJϕl޿ A%+nvȪ̈ţ60wn]+JЦشr)ɾ3ߓް\J:s 7#wՋnToD3 # _? ~_5e;bN~c %D $,/_5~9pvOg;iB\$S!fbB|:i6JK9ܖVF^>e>oV]m׼?Ь_̌,y!@.߻=;IB=I*_dg?Tuz}z-w*6`24<61s){zmfcigR_>.0x$;۾s{߮p.]m䟟;:K+Ⳛ= k~=IuNԥwnXDa~6ʋӓM7U$8i=U/$d~~~VI[J_4-ǴXD>^Mb: @-sU .TM 7d;YU( |Uշׯ;[O&MYMpH1<(uU\_טI߿A>ed`t9}kV Rpl8 Av?JZ_3m,$Eexmg)4$ݒeC >۵ }ֹ뮿־dѷMCm.gϿ|M^*:Ti_0ع($)o|J5N"22ɵT2mYʤ8:+ݢ.V;bwK__&}_?imԣ2~Wpwosֲﯯ ]./סvw'~]tg[V9oF>#n]ab]?___TnW>;Nm8RXh.nk]|wGx龻Xk34z8#rOZ̪5捗ДmTP8 cל_y*JZ~+{1@ȥ#j~2Zww:].dMUC܀7g!pw6+w4{-}?a}ķ^HY~`w_SڳsigDc( 0H ?_?֢Rovɹ{[1\.ӿobugm?+}>fUM;0> {{VoJ$W}rVm;ۗϽLR:a^Z_2MibUf*6o[¤{f8Q;Y卶H 9ۺZẘ~fh_8C/ΨWsۛO!E_9kṛu}:&]VB<ʨ?O{,]1kqij nXh?R< ϻ+[M ಛ[#>] k5 WsX殭OGfd,O,r{>5 +x&g]v4Kd`Ѽ'YvmfEݽxiDq]˟:TJ lUmBU;]ZШ-yudE{"2+'M+.1-RoSJP][HgaBNžQi̪UWm̩t YX*>ۛo- R]NHRSck$KY2H\ .hvkq|imw}ŦT ,H /?U%k"7{k.W`|/ ֹf/U*z20dLmϞ;*%>]M:mܣ1ܭلsv,z/m,j6|%k:2iש7JwOO-IաH+{xv~~~k񷑜Yo4D`#LV<։a]otB2)MIg䍒,|ͻk}}sa׵Kw=]mQ~s6זi=֋mTq0G|+ "]}2ah8*_iSN*W_B5$c;feS+tkJ9"5^ȯM!û6Ja;_{'m[*{HGly(]?QvWo _5DL<B[n\,ާuj_Ljc"ŷ!ٴlxT-ӵ[~_ϭv.yii'뽴(+Yo7]w2r񩥁RבGW2d#M=0߻;3Oc>_V%_25;[Fl8Yͷ afkEB+h?mƗʠ!Y}yYÿ̨lD3 ~ױEoM_oTpm>_T{z?h.uIJ^JNQ[Zu[]ԳKB+͖ݻ\#9yg-߿FNù|~ɍU̞;nm] >2lcrr|Ш(u{.u'=:~/]TLl~6E+ksm1le(#*y]7?k[m½[nn_1FPqH{מkKotN>oK\̸+՗e.\룏!Č8otY~.ֵ vwaǦw~/\yqe+́|~UבjV-_ИJSEB!Ub+9Pwu~'t1)e_婥 NC2m`ā=+մ&LR#'ϩv?ctwQRɏo+lߗ,CAfX'A'vHWs~|ʱX[v7X-Ȏo;Q&}~o>=aS2];u~Ved~fЫmoJ[S63Iy;~.[@V{ q&ϻYYzS˞}GF/)RkvqmߗejZf+jjPiZT v3}uۯ彭My90.!]7=yQU]"=]IlH47>]ZFc[]55K_?ĺxRwNzlRwrۢnhSF{}eÛӖק.xpwJYe3|gM_KW1M@Ifӯ!qlMݎ3~аn/1seoe ٭O_]~9f0UZRה:Mf.F 'j` _O{V}.n*~8-_sӧ]8ݻfAwr%7ki)*6wQUC&d:#N]Je/W^ތrk5)KJ뽣ݷozJ2o;5d~ׯ2ą4ŇUUVF Ekߩ(Ԗ=KUk1X"oMe])>}kxP)~{}{cú)',uH^for;/oֹ%%S=tm58k6[v tuk]kFB>$[׮fs'v})Kgk;9&IQr,m#V7I?ww9_V6̞V~Gf=:5__?ɘ5տ{HpIY8 {*Ww}wЧ5ٿ_r##59.'fcsw?\e5{u%P\bn|wm ӛVj2\9jZ]11fW ,y 6jA߾h$dB~_14J\?)6>_o=GՍoV%ӌ})=ZRO Zz_ m07ۇwn}YIi7[Nzob|Sm 64Z.>4Ȼwy(mTݺR;۫}~tv>kowL'f84d[m68k'ZY^faPɒ8Tw~Q_Ta=^!} YЦ̛^z)j>﷟8* g5s&;-nXL#wm߼8 >~)b{/5]@i ‹nႊzӭ&X5Vׯ_›87b$$huF ҰKu/=Ig3%o6 '+0SmO)ZޯAR7;6N -ןk qwU+;_O_GɣGapO\tzT1[_!)]?_.`i+Y]Ż? wi e<$1A,ʐ3V8c0f?gR\zz///38YX ",Ey{ nmW:[vz\]gG)~P=f*x:ҭ*v]W߯S~ö,~-ͦiwe⭑{YkI s,=<.o?f~9\Rګ'] mT%IIdB&w8vy+Yf ";l-V0iQc$Ywmr.9Vk2^שk mnvg«}Tӭ0Yuݿk4mmO751u*'k;(NgleMnfH|ZM22蛤cN-dNK/~.&3=_:-$K#k˓1w7=z9R|Oyz,*O~{<~Sam87m7^o7^VֆQzB_fS^kZXz:jKM.Hdl 1~ӯ#|sZ$~f}4--ZKdR6dlԩ))NV}{|A|-qxRz][Gsk~ ll#mƗ?Fd{>t#8Jp ^i?m?_ZЮwCM/OKq5q²My44|#}a䤭3č5O伭{gZ_ÿ: c/47Z^j/ͩE}& /<&Hl,5uVotgKu-iG=~WȾO4 6D52åi5k$\4r^1ty/y[|ZuڝoVU?cx&[]YeNTd6cu6,r#̐›[}Wky^\M)I]Oos+Sվixៈ5^ ] _cWH&}y-hѾm`ƛ#?L,dҿ33hAsF]e|\Ax?|(ѦqYx^MDhO&/.7G5˽"-ս%䭕B/^R+S__ÿL_x^/}\MFL!7 w%/VCyTHY[gy`i4i-ŭǽ˺I-s"o~Md,6so f{vMY-4_^Lۗ{3GLdv&l0ͭgki= kK_5gI}bp{4~fw*}!6&tt~ԗVګoKwiķ j/il$V6m$Ο;VV3sOB/Rf-gf*0UyNzWfy|KJм5GpundI0]VW7:ӝ5~>ˏ7[_~?oHݟ;O_w+uq ۥoiM$q~b;Їt~ZI>_^T/ܓ@w{+mV?/쵺[1UlvKeuiiO#S:x_.dkWr<^2YN^.։}QAǓ4rG"Cp[ov;,PVΪ4$G}|AӵwႯ3auHu;?KUdkfGO›V?1$6y˦M|5Jq[k>n_>$>'V>%S5\C[ǪwW} jrt>][Fm7Eҗ|_}W]?uxoZ=?FI׊u\CICo%l /wsyUe4vpE+9+N1ß bx|c/2ὍΡy^B+jFy$zVۋR>gY%mʼn޻dM)yi?/jjW`Ќm%v.#7I'x4V=:fo Ϣx_6&T,aCMcOoeTMI,+V|ZiI*zN1PdRuG|c5gmu6æi8 Xs,s>͟7#Ib*T^)Y5]Є$i]ly2<m%KlhY_P[pL<ŷF=2}S7Mޥvmmvx+JSmwu?m>Y֭.Ú5aWYWgNށgH]ֶ1kV#mm#GoU TknS >[._Wo|U Ǎ[_6m$m|/mOB6|G{ꝣ~g{%><0U/eDOq)4YEzkO7W߃^}xgF|j.tFᕤViQa6Ь;)7nr[|3&vgm @Ҭ5״wT9)n䱸6gD&#$2sԯ ZTz[_ꥇώioڧ_? xLֵ{M;ź熤 e1f-K[mD-{k JQ׫][Og|0׿`?'OƟ^ºG5\AK2fy-Z1=I%gw>i#}k :4-|M~&'|YAͦI n]Jo!O|/#^1n,gdW+04%U([gӿlo77KgKg^+bs[m] L(QZ){:o1{~mOҟ3jv'Y I'L3[ɱmo]|$^MJk9ߗV馟~qKi鯗s'ÿO&b%siii\skmu\ɳui7{Ҋ__e'}sƖ>-~ Yo$H߻_-r[FtGֿw8s_U)]Mfᛝ]zihl_o ?_2뜣y]mmYK{<]u/Z):vh,4ix'w*ךwn40[MMswg#U Ep[Oǁ} mmAcGÚn^Ex5Շ;Uk}?l>O-W{A^uծmeW|Ste2Ws-i$nxIG+JrH6Hkꕔ)IJNRW^i%ӴUܒ ݖnird3|U\ 0\u^Bվw|shY4/P7M Ʋ BOjmBo 䊞#TtO-n㴏w\uh%ӿbDҥi!m A24lU}kEm?qwhtpְ@IcPH\÷Wqoiu.]rLjy HӮm6O^ƖI;۴gVWھb#rۨҽS#ˊYʹ8dc[#}/ܻ=7/;2Ee%1nEh7&{/\QeRk+q~{KusX3u_!t$s$їƒPIOɯwȇ;=s="}'\o4L2Og$,n 1̏#Y vd/f}R@!H[B5UV5cmSߋ2Ǟ0@u2;Ri_iWjU7%Ko?~߭2L}qn`Rn>/m~̳.K'W2p?k^~~k=R\ ԉғ?빉z=>Lz?=5m6b d, L+H7͵y'B]fM @vF6c|矚_[r%@n?LkG$.~.0 s#'.eIw`߱Har35,}Wn.`H. d 7y|dح<#(4m}.Rz]{-/~#ῆ>ڗ5oyٮGu,ck4Ȟt?,rGmzqGZKmz:]8kaHėP녑T\Ce,~퓝6,,: k$7lR,ۥ4(`fo&5]$n} Hn heb1']Y[Oyoوn%.W~?JG$ڶsbo㹲Oqs*mM~ORđ5%Ȋo4~R6;ϧLMklEgu QXJco1[?F{ wtC0h25}̿]>G>K|vB|v~6JobWh!e*w}~i[fnm~y{\ͦsO2yrƍcZbv{!{m:in?!$gY$-/ޑUf_?8I0c39y8M̛SbsQV [[GPDM %Ho.HU8oB_M٣k{eFB6YUmҭnLqVahOᳳ4A]߷p1מ' wc9? :Ͷl/Y&ȆD $l4ctѢ|]Sw5.*[%QETuKT r6_kRgKlI! /ne'd6]W]jڇ`gOhheMCɸef}#4Oód0Ee+Wt:Q~]]f_4[F,춶Fv}_FfHZܕ}ڿqr=:闞cOKi"ٌ,s/&6Un߭/c/'[Y@ceh G-? D>y*ik^eA-ȴ{ϖo˟˓SoΏQR++?M8Efm^"ϚY_gyk$Y"UW&e_4ieMW8mb[m߿a%Զ<2<1 |Wݍ5Km1CoH:7 K=>+v]Ă=Svwإ#?7[?^)<^0 a*]R|E3Y@$~\Zw2UEb'?ց?&1|29___zM|JIRq?/%[_9(5,z|[0"n]7u a]ڋ 7^"^;k^;Ŏ 6mlC<)i٥[9bF}M 5}?wVF+f: Ic3|}~؊wx7#wZfo]h@dtBCnYWMtJ}>P$K'9mWTMgul~,͓XDpCB >{.zw_މ_C%(e0.3niUM۽WߟțsǿyG<^VWyw~[s|˖r3벖~+miLj=wMX/Aw6j PIHZo;]Y>KR>築wٯ#u5 eHXK)[o&6߾l+bjGB]>C0(N3Wv?#~*|r|Iq3OΌYe7d=K g|ϳLUQn/T{Q,Hb3*Oֆ$|>6S=.ntb?ge&I*nƺ86{ٮim̝ {ء@oUmb*RKm#ޯݴUԴ+糺=Ŕd/7p|jBOxt_3zZq6JYRwnfkr/i(ߺ݅|~^f5׉EtEӵy,ʲnYkC>gW*I=m5IFkZLs`EB7*1avZ嗿]̿┢m_%zzRaUKi >m󁹏_2Q;v{߁J7yq $]Zu u"ڷPIo8&)A(o_ÿZ}Ÿ4ޒ;D=>;x[Hr5V-/ڲ\_u:W7Yُ< ~ԫIJQoo̧qw[DUE+7w}_wmc;gj ci=}b` kIr.~ɿlq*2u~סW;ւZiڲ Godn]~N*0W=^#_֟26sp|18%Wܧ}km%uwsr:߿kR%UIUZMȿ+e&k5y=<c{s=_OH!$x/mk1F]MQߧM:jFTe}7g-hPʉ嬁˷Fgɜh[wkcFX巉i`239󬌬y{+7 ImNkWjBXiT- ɹUyuqT_~_⒕7z~~-k?bDx!2\M$w'xD)ě>zrtuRts/^yfX."A,{YoNdU(M+;y/s=ډ.&,v$~߬Tv~gWum?m '~WOfhVʌ)ei]#wG}Z)]om Z?.ˈ_ 6~?M#/f7o}qE:ηWixݮS޽}tTt}7_:{{ͪL1Sۿ84zκ1ʱD}+ҕO~deUY]cDNY_;ﯭ(kߥ{{dNn_$Eq .@ƪ _w3`ӄ1BcwaWjwUw_K[ܡWo 0hy7~^~e[y9?Ì(r??tk=u_y3qOUoʫuYzNe|Nڀc~F*ߥowI'^I ;oUuv#w˝^qATf$ItU$av^g/X7Ř* X. o-˳faFH9"=ȤYPլ#)ߙlUpjqW8?Uc5+^Һ''vqUmֆ6`I}Z Ք]__ۿbQ'9̛jg'vL즣e̷]ȧ5/V6rwN=j K73- vr3 ^sx__$yqU=],FOo#p]T'FzW{Y~@oy7{_z4i?tQv Hs圓?m=\5kM/ʹU _'lL6cFֳ痯oc?kDhA;K772濗x˧[l,O!)fue{Ȭ(ūhS(E{v}/~v`_<@0_r{rRլ[nIRT̟.ksh{} &ykܷ5YtVE `ATt}V7ڼ)yxھ>k*)D\\+\JX"0foݍfqo9g?{MW݉|HW%|ksMsJOG^lNOu0LsBV׽4طZ~~b"3hʆO1J*zo%yQP',Wwr;߲`ۑw׳dJnZ=ė>^Y[Ȗgw,^xuw^zn#/uO4-٤`Anmf>cy~'Fl2HV8;|t3Zr^/~<_O.iZ6>w G=_Y7\~(=m_ ^ ZzD1’4f_:L-$|ϻ僱;k(\kyw0'vuz]֙A-yX6hٰdTlO{?˂Q^lfZ$NHa}7M*4ܛ{ yn-L,rIdmՖ{* Wr^_.";`de6|ʖ#ۯWO ⹹>C3얒Fn *~]knyEhktf3>zYШvc?(IƐ uF]՞t2r~gfV+|_9֥zkc*xt٥j:3Iٔ n^~o77JBH_ FZI6^-" a*cyjO.1VȓZjBgbLhѫ7Ov]L%}І/X\[,MI%cܪWwm?]hSOvk'B3M]\k !OYZS۫moִXY޺~g,wVש[]KP|^_NR ('(7;zzWLSqn9eRi_Z:YM2Tvv{M|ފZU_FK wʪ6)Ƶn^t2mMng[?tUv_s 7]R-o܊oQXgm`~_;*W1ֱȠm 7/|}߹T+oWZ֯ܲJrJ@} >qg{D<βOK?("i߯JZ?\pUOGệ3S'e8ӔeHUI{?YE^E\5.[n29+^[SPogOU(84Vdfp%rmǿ$u&;~*T?S={K߿_̤f%;3߂0O9/W<#9[Ϣ"2a'a~NNj)uwӯ|T{~7ݾbM&C6I n:ǝoFSo.XHfcj |ZЬ-)'u &ᜌ_SڱQ= ѵ6n^-"]_-nx~۱4lM&w7+7mݩ7ei?>vf TnvI)nݿuUړ*7wS$Ou~-=t3?w?z9F۵F$W3_p?ȼW//RdfT2G8})T[?= Z^wwaZJ&u/u:я?Wn=/SY3ŌߒjǮmϕK1oߛUcY+5HKPM eoO=?6\cQkmuFc,w\ʭi:]yg'<vX|sֳxo:/O^+=pm!Cc<q֥UTҶ~5 dE17~`ʸpZ Y߷_nZKi =LƳ&oGd0>_y>"_]'UI+)t}Gg&Dcxsfۻwn?Rz7k[#5$3y>U_Zœ&}|T {}<}VkwY#Yt7@s6Iii^:ΩfјgE(ns`{i[zy}{Z]~vmV{[r߻]Ÿmr!kGwm[ s,Ѥ;6ӹߓu'AtK_l"[7-4 \|0eow|^SI?JsgVmDk˽QPw߷4xmo?O̒A;O#}͵vϻ2Q[_$fOo&jI+2H9}v0OPi:!9M{>oskjcDLDJv#Xo5h/Q435uAv# ۔ﻟVz|:Ud.$"08 ٓjU-,Em|=\6-GI_c4qd24F_*{A=JcG6.NNKni.!dBNW*8"HB7Ionz^Y_}|Or,13+sm~Lez.ScFPg5K2oex'̌kSUc*oS|ekqI3[-lɍ2Gd/8c%F )i>"t׭{$2[mcIreF41czjNw43|;|;r>wwI}^h颶t#prN@y|wMߵ=S Im_Y]!Q01֥n3P>M2 O#5̇ )w??/J{#aT-x!ur+/HYw765B~2ηo"UСR?v_nۿO?~XyG\9ğĞkO5Ƶq^GɉWUP?ԋo.ED@<ADY?7ͻ>z%5Xkte]ķy%luco3w\ppWJK_9˿j%ᘶ ʀȁsڵ7߮_E\Cvf#ZdC}+웎{U߱9 'i&3Sqc[xkKjWAFN{Jq]Eh6>`03rEB᱓שzHBG_㼞16Nߏ2$0_~ 9+Z:Eq?{}zV^/>۽*27yF{ԝ崽z;'Db:#Nzp/׽rԾ}C~>/<GȱMpΫoK|'۱y;jʓZK]#pg@񏋼aZߏ˯ ODѦ ~VԤg]^M萾S${.?}RR57NBk޿sKimg[+%mUNkQJ_莏AӼC,f p"2S#b1_hm݊ᮉ2i=OEK0$k-O>C5ج`V=bUfeVܞ^~WV+]f?9,|v b}aC*E𭎑ƷdᦸTdp\C&NwW}__맇o>cL<ӯoY,-{cm?n$\NLaHv}zLFw8+~oo^xjzuo׵ m;2>]xZW}vV*$GCwX񯅼71eWK})&'ԍ[̑{GbO ~C]KOϟ~1iWA{-KSk-T59u Om;YGMm h jo?uiB]^s[ڻRxo_qqyk5{ws |2\m%h0ǿG[3fT-""5SjzƇuڻlfY"i *Ms+WFSL=Jz;K{ 8ڞD'ǯ:N' 5cwǷio!-R;?ܺ\Zwv_)>hZtڿ +9/8w<=ZkY#b;G$"%sv]^)kVz+}?}=&ZI>ggo/&ؐww^,鮇g'kG-7W]|H`w$P$4H23M2+xo1tuyG+]9J\u]zөytuĈag3Ļ! ̺{Igc$:a^G ~gnv~X&#jZ8 jouzߩ0KpS⶚_s8 M+;e^Pkǿwo$w4?e[0)7o'ɾoInRZ(W~>| qy\Ag>7qgkuHif """\cSS\/BӼ)}}eyhzf֒gv_E*Mʿ5_%qVgk/}{|'{S|uu!<Q-oVmSfC2%s̟v31ץ two>\f6pA m?ҋ;?G{M]1> l7Mٽ/f$_qzFp[us+]IuWf6scq*&w|YN3Z[}} osլ<[u>.BUbnI'{zc}@#Yj|33̬qZ5];4sn~%':}^9g̖-u"+qͩI_;cbv)F؋rKmJ63|)᧌<;qYKO]nYYkY9%Iߍ:n3)pXOݗNR &w|M@TRH'xGn6;?]kSR<)`1 ߟ4eW~FKkwebT-s͍뚆w$-5eE,;eJS;FMv~`x>xWu>'S\oj5?d=.|;}>[*oǬHdKK.f&kkii;{V51QRҿ_- xo3%a{2H1xk%66}omgcUӞgI&-G*hєܚ)|vL~7VV-@msg,~*$3^*.dgr9.^^tӦ}i'¿4sC/m$H[#CwqˈaWܒ}aښO;Q֕?H )tS1]SW>Zm_=~ko[=FThQm34}d|Jm҆u]JS^sȯ~74 am%o涶xteyo2G)7%OΞoge쟝̳ssI7ﵶw9'ߴ֯u[ܐ/c]6G$/%[yvn]r?c,)wOa>0xяxVYPPj21]6;.~a%_,M=>g.v> _@iuv.Y{-VH.xm5(~Bcm**5M|'VU&;ŋƟ5!<@tj'K_K{+kygyla4GnDRrޕ:޺߶?;ᯁ~iw(_iCğ_ƾ_3Co7dL=ҊV~"?mu ~b.HZ׶WLYH;dC4'ٷG$J7_УK𿇵Muᳱ`y$fX6M3mDv3ҕIA~ IW#@t ;OxQc/KhCoae{[{eEwm&}zZ|nNEZWׯ6,uo\k:.fZֹxQ y-/$*\ٝ6B.dou>_=Jxx$Z@ګx]|i.\jvZ|rWZLuñVm˧Ϥ73ܥhr5k¥NIJ2^byn5{yYm{^~0?io_|U݇ & o.[jCoj|6~S8 S*qeҥi'*ucSRr} rFY^JWĨml[ʝ? ^5mbxk1ϧAV*_fi.5pG?x6)۝Z}O8SZÞ'MO Qx{JCMi_C:55(mkld[ǼK]H׃jUƤ%O}O񆡡^;M5-WK6SE}qn>gG𝎃7-!dy74l`ͧlQG^YIJ}?ƺ.㦱hz CM6&^am6-=ˤO5ϙo#Cwac{kS"έ&,Mg!a|"5ӒyU$zvߡ7[kV7?TUE)KEv껞g59R~}ɝ{~>OJq1Aٷm3\>5ݻrYS+iob/z-"xn$=YI$S}tmM=oUG{~/un2??|pW__ѵϫ[<2²n6KQ!y|ڿw6T}oƿi;VW^O=>cO|w)%Mo@jV3C$B')$z;}lh~W/ৄ<1sY!|LBj=>E6Ԯed涰߲grgjM؊oG[܊Um-ՏFnê|.k1m4}?Ǟ8'IOw Zjk:?Tv[gXO vWZlZ^eRέ$Z}v7 |&HnԩI.so[/64wI 6jQk;X^лn&C5C6vq1܉g'%\Ѓ'&炮q$-$[3̳$/oDKkG"Iu3{Y[ӧ쪖ɶiHe}cKUz?/-}]ʒU%2u+9xc{]_~˗}>e.}OMt:y6=ka5dN\=:$*$o"ҊZܵQ3=ƚ$CHm_aqp>߲mr4MKMR,ӵxHElVEY#dʿ&Ԭ~d`[o~^ՍH~v&*ZOp9=SLKQIp&?¿{im[e)^70 >'*Y5jqw6RaGJ.Jζ\}b#-ośH(_?Gw?,k}ߜu.Yh߇duRn[,]?RcFK(v _mۙW<:]|~7w5fn7hQ bs[Fttơ-2& sNq56_k?Q$巵u7H;OBKml<7[wy7!I)$fu~A497nuw=iiZٴo{њai&WYϺݓ9EeEܓ3"ZKHfTiN3zz|M͚u巹|1$ˏ[M?T2&EKpɷwf[n\DXhm,Rgk\Ef⹵MVYex2/mzw<^/ Xv`~U۹|}?O1+w/̥+t^˖ z;5X+n\֮ϳ c%4ϖlP~au}Eܺ4HI*C_Jќ|=lDeH.nL3G3Jg|Raq*Nڿ6vt?΅Kwk֥urZ{hg@$Hn,o/cȫUyWfnm4~'Il[]"cw:^TWJZհ煡( ̀Ba~խw5mL\OInu:)k}-nePC4BUV=đ~US)hw}zJ-=w~Nz[?l v,re;_Z}֏ϡ wT콱y3م?9roC]jcҦ|l{<,;mk\ۥ߽Κ R Yk,Mnf<|dm~iW_ G6n H]r>h==7ٗxxGu]\_| Ѧ6OĬ#6'?'WB cQWԄڍI+3~$Tݵ!b',Ը>zP6ȐAdbDVdq̻7oOw2Wm-o;!IG 'I_&igɨ-a4.?,eJ ZbjQ)VFmG[9.3ԮuY&Do1<-oUUoo _\;J$e_[ūEE/?{!$/)_!{O/g#i-> +fe/>u٘O|EiWfX u hos7?)I=W« WHȷVur''-ηH+[{&x2rHJUo?rR\2ꖨ{H>]Ǖ?Z?xOҴ5mk3ݘW~1lDq^}YYn_b2(}[VWmteG32 k*L 'vUz 8v "1v0o~#XAuky <൵oQY#'moo]7,CN{~?vS'[}~r $:F$j٧fwFn؏ǵtd"X7f ;Ewn)MGk4?}NE?~RHX +>@/]0ZBrl4z1WsߴnRFs&ToDdGn8gNI]Ox׊i [oqs3)ؖ͹|/ڽc,;|?[>#9M;MtK߯sLM6.٤ Lݻo3k7n12 Pu⾖z?3,y嶶Z_?9>%d5$F1"V>feFmfvqyp]<(Gnk_^e]ֽ5K3ƭu-V{+.Y^;F6o K/b?;dSd 7;t_ST-v߮ޟ,>u=Ico29Oj$_MG'?o;  Tiv>|(Q7Mܔh:)TZSRU\,rou<{(;koqNSRm_3kFvVOnYDfF}nw}1ݮMJ7}= #Q)2*FߛTnvK4bG%o]Hf9b]2jc%'i~wtiܧewyuErgU!.byCM;zB+BRXi}G$#| }E>Oon(/cj\ܼV> F$ѐUoXroU6U{;szb%G6!YSnDQaK:sR6sw_ݶ} 6"wydW*EP ݵy]1~ݨrjyog{'1vIVW7Vk $fՏsɸ7|J)EOgܝE4w,vv=ʾ`~g=rko[;Iܯwk4K'e[reH䍟m_ya>=ίfi[߳~e{i5hdڬv6x”"z A^֪$]=oi,o!G +v)Z{~78ݟ'D H,tY\no.[Xy&/"&m]p^pu5o^(vI~/Rz/]m|N K=WI7 n-g̑ ec.ݻ?N1?ʩɲ6M#0+э}*.z;_z-KI\݌]>cX%ʟ.4%_wvgsC ?/Bwr\UҜv:-#l^44 9%:ҫmvܵ{omno{~mJC2F42C7o˷lE??46I,H>`xouwS}az^u27`!,u?e.`sx6Cc~* ]NyvjON񭍆eI&8Y!ݵ&s'rb o{e_-5z3.7)~\qGJf,l[)- V+w!(ʙ,N8][mN-=iً-5&uoW>Wokwf6'&&-Bz ΂?DʋEmYo矟eZjۿ˝(kW>VZAE!o*Xo⍾oD\|$Ϲ8jWMyU_zS\Ru ۿ_؜i-ҿ_2YvqߛckJNKc$߯KqJLqI \n.ݽS>J^b'4+]rǗ7kdTJmtgJJ^eQcB1?­&|'OU :}֛ o+*dnin͞CE/{2kݶRU0;oN^)-{塂+O]yj1m%s?OJ^WZ__빚ٍn.^;ݱ_ľ? &?R}~/[m1F܆OT_?鞎ەlKFa+ſkAP+>SqBmϱWRݣcf~K;=?YFeiw49o#lj6TΓwշk n_ HoSI zVMʿ2=zj<-ػߓSSI[ B"&+C2|֏ͨ*-۔&O/O}O ݩm-Ƙxy]c16R>qQ8{_o+]s&5{t=?I|5b$Jn$FcwnYE?W]W󽿯ލU7 ATu; -sb(K3yw]OȈ_/ޝq)/B1xez]};o8]vR{wlG|YYdWVWckѢ׭\9fq,=7rJI#[\&w\tkd_RG4/E `*GZJ]Zk!/?Ba)eV$DUƯn֞ QV$]4. h6~+Uݟ_Y/-m'|'AOwr,[DlcM^Sg qnDGxV#?*-o4d 41Q~g﷧szؚPVO}E|w?Z~Q߯r9U?g4bՉȝ}Gۡ4#@X6,ɅxRR1OYb >s YY{:p 6*ou{uxJƊFw(ToO5uU6ʌ.)K.'o֛:{0<,'yys!#,v!>S~]}}+S#y%ѝ1mvUK~$d(5p{?>Z*UC㧭Cv?ǿP?Nu]NG-IR(YQG%]??~zfϧ[θ$аgP#"6oad[vB7?WxKHo5w Ѭ PIX[w9~WҺa]+L+|vLTEXv6/NkJѕ]O*,w oQh#BW嘛yYd˻j>?iŮmvRh_ך9GPl7P_[fRI5׽fVd^A1{. 0ȹfʹoskTO[_ܺuY'}?uGs]14庈s}*??G%Ykge =+5ޟ&Ồp ?~lƴSoM^ԕj\CQdu<cZO .To{v91 #*q]}WևN.w]9d31n[~jt:)w*"UyjOҸS{f/+E/jd8{gp'd*ۡc6կ9?v/6I}iIs gMvS jp]T\ܲM]J<w>ϭ_c/uO;H\Xd[k6]I|_uZ5]5,%~4VF$&W28$z6;S̯kux;~g Y݀ow+g^J(ʤե؝QR4`weO5Ik'졆uӫk͑&@`du1my8U%onH嶒0fp207f>}no]?i+_/ܽoq.PG՗w';T+kh>d6<ȡ˷5\DohzPWo?CEt22YATK}yYT:kN-n"%[;v$h|)9-^>I/dQ yo$ܘOFR[_O]7eW`4XvIe^\{eR1i:7W}PJA4\G@ھam1jvVwzfjJZ%]_iet#ieYLR~e>_I{i4ҽlHbv Y}7Fǭ%Z.Gzi'&cD ?W `W5j]m =6zuIv p<>2ɵv[f5N%}?aIj!q,8Pχ_Swf4z1߭?36OcdX 6=}WZ}_ƥiFWK{l)Gdf1Ym]\hF7zsԛo_OO1cf ,{qy_qhEw@vYw˷oTj6_m[WF0?<&_nvWhw}qۥpΰ|䝧?ߧhw5̚voW_a2>PC)$|c*xk? _z,mE ɾ"FvoS<58"i6O2vݬu}L]>~R}e`V'IpQ|+n=W36unuwMѕ9auH2bin7M7W9՚]WӶ-6^{[؅İ0 U:zS5E]i?qM=YUX?V1sֶ1sw%m͖hgV,ʃs;cݷ7i)'I?4 9 mBuf~hmo-1S/iO*inq%met;r[_>E 4(M.%Ew;G.t[^G'TcI^Ȇ}Mφ]xogugo(f̯q6"#+!SZRC(^]?]ʖ̓6>՜c9ןdʌʽq•}};SZ9Gnk7˹&nuj~ꕺmO<ɑrCO-O&EH9t^$dM7^}8W`e!&'s@Jo 0˒yVKO$}H1$^?zɿ:?I1 _UN]~.ɻiYrdpfL\mu : gz ɕ\v0o?*1XՆUN~e+n-[qq[?^Pi08o62"tU:n?i=,>1]vvoⶎHn7BnCILoʭ}O,'{~^t7>.͞y?·YUbկN_;hO<P|&f4wjJV;iѻ72fm"7o5V*E{O#*2JhƅyjA}Gu ::Fn#s^Ml%H?y=;yq۽_Ꮝ]צ' ȡfMw;O_=y?oѼm k)m ֣O .eηlijڃI$M%2G#C3G?浯 u=l8-[^y+(k wl6Ow]iz+i.t/~l3gsqdg9&eU}Ꮞ^| M;12Z~i,mw[t቗vbU4YK7{ Ѭw[I4g_uW}|{]B^ Iݛk؇+,+X[;fGcte%{}*%EE/d{y=e Z~[,l'{$Nɇ 9+o~&Ew6QfLuýEwnX$4s~DnQ, IaQ}W_E4iF~~8Qj3xτlO< J,fnIugM60Q̹ts *|TqI^%gehm~;:#ovhi7Q5x]?A0˸r6$08֒l{_uZūSӷ_C5ko2zWL/ _JM.k?qM7d_%7+T$鴟o#)%v׹3AwtH#I3g>Y?0yc˭'547b)$Ҹ{/Ŷg--LM$r>x s;S~~t3FdԮ%o͖mZ?ĒWyʳz>׿+}uF刓c?7Y}>*jo?uv_o5|;>3[-ckxL*ncFixo{y'Ǩ"c״.HB^5I<2ZܬLĒ|ta?]Ӌf7x?kƟxK^W<f>o-lK}'PGmk%^$ۤS?.u|]?iee h^McPM:|cmnKd'ϱ=ͧc#[)]Mq5iуJ7~v-}y3xwጚEľ&]aik+A}OG mfCi-&H~6*g07kHI~-yӧ[u]sm;6Gr8ū߯5E _G/J/;.G8||e#tO] },kZdֲA<-k N:xY_ϫsE67~՜cd>':L;o ncku'R&>Nc?}LemO<9ZNSO5Ό8]ڪZzK Kd]7i8M=]k{k{|/<};^0x;ZU>tm[C<3]柤ٟ[w1iGt\‰m4M}^m'̛>?dC>? _ ]_Ghpum5gxfonXJ|RTܭ_A^:_|Ejcm=3UzLаEI2q?wq ZW"5%/}7j~-φo1 t>OA}Fp_yiuk%<)|֝E߾t>hޮG4-Oγj^$Qfgo Mmo\r$;䳓/'C:n+{la:+.-k_ƞ,>|L_cW~(-娆&4]?uwkŭ^"RwThS~ѻo5ßh$xMh^Wս:^yo!ֿ>YK|W/=;Zض߼зcLhؼ3oyr$n]xvV˱_w_> ߆vv]\_! .Ud!?7N>)۱OGoFEuSRMq^\jV ,4zMY!5-nO!T`k]u})MsXamLеoEƑYV }HWIM18W*i_o>#1ٷ7D_ |Gyh^.VY &OWGjN[d)smgnqsl/@֤-oFJe:YyygoC>eU*gwuk_{}~~gK^_o6~sAɼI=CV'qաq'ڦXr-}?&HGZW+ d}mmaiiithؖ;kV85UR8}?'&}mHo|/;Uwki#f6e٬ẹH_ rI6IiջFO-]O03(O/N4H*F5ō7چlmĐmp߾eݦf&&uX+éKoOԘ-ϾS}7jntX%c>G.JriqB*VvV?5"Kw^IUMUީ}Qk?]Iė0.ԣW7eky-'O[.OxwLD*I[z߯sœQ2O]z% i.RAĚk4i^,+ϒhcNR}UsN6W[k `0>Y$doqʔR~-ɼ& RđMssuy}q'漓t* tH~_.?{aoҤҷz7a[}5{)5W9&X&}kIvWzmus3\Α$ko}L[qE#+u5Wv TuyM`#w*S!#FV'Iw}xvC.ﳙኜ0,~O¤#w}*8gk!q1C笡ai#&o-wݦ{VxG 3]OS).%}~{6լyG^gJ]zeX{Q JJ֯v:|uvB!7Q*ߧ{=\ ev^<4A3||?8V36h.鱏?w?y߭k :m9%)C{Yn;}.&nTU{t̋~kEEtw6u}N+pKY\I'"|!toL^W%{JR_#S^`O 2͙Yn#po.G_>~ $g6r_;u/~qN HdP y|c]1Mn;"Uo';uSZ[zCok/ev+_ewZ-j^o|;o&Hs#Wnwߩ9K%ؚ:1]̿/` ԙtF;ku] H`~d+o[?g.dXzW_hZ/.5bɴc'~*89̾Mkץh?;QyQWA;)pXֻᄍ:?f爦 g _,\eEކRoM}?cckub-b,"lᶫ//E8]k+z3?P;PVՔM mCn;4MU<8h$:58׍^A,)erIFqOh/}OFC(|Ѭbi<}Ħ^) 7з9_zljqhk:u׷Ϩ/yL'$D[~YG~(.wm׺;}ȩ?bIo.lյ՝Ůвm$t߳g#AjZuM'tGMCAHwl:,co-x>|חR/+:Oo%MBP]]/31VVfϕk]6+8S]g[i弍@_9fd_7Oj%*9&W[i^2WV*R[ o-WH;im dݽUƒwߧI:GciKEm,Lu^];{z;]sVE}:(Ay Rie`}_%>sQ,GoÚ{XwW1jZ/[EW2\^^jPeyUk;;_Dq>oJ`ONȔktO[~&_[?kuk)-CS Gu$sL.aə652kԷujk?5IRR$#G27͹6u+ٿy*6~ב:<_hwAgbmd*??]z={κ~,v_ڲ4K}nyo6:)ߺc}W߮+ϊu-;Qb.~2Y9\sֺa}&X5mVa,; r*)e3 Ll`?OWɗK-8a%(կ{؜>ti}Kş։%5Y-RKQ}߹?_U]X{oDֽxU>e|XARgP xݝ={48(uy_]zƶS]cͽj%kɤy 1VL|}֡s_۵y)_ק׹z[-eHq?J#EW=)gMb%+{l/׵ZOk_NA^Mm=$]L07˸/1EJ\>-KT;kn>G=F|ӭB㛧xQtb;,>T~UO'4YZN>;fSۼ2;۟4mUoT2j"=nq=t~ng׾׿MWԢYSB-ه66? t]zӷ,!3yKį+rmvœtB#qbqRV9 S[Fy/KjʻYch[]iRQ.w"uk/.}wws$dY1S8ߗGsRWdӷ^ӧS?Or'Y3C䆍ccmHo*]$Td[Y\G+Ež|Wwʿ6_i5u~[1UXg#%-|1Wi8_{c9+Yi$ht$eݘoyJ-u߮Nqj[UemOÚ&syA7qT(- *˩u*/b&*6Vdw{X9Ikm>|o:MPү}>y_dS*qr:ir^%rƒ̽6 j^ԡx] ieY#_cy?V_/K[KJRz}n5\%ාjL[k2տ=oeͬb_ߑU}/{oߩ vm*XNZ=m>O%~Pk{iygKY.c bCFϹ+޵,{mz9BQuyu Z̆[ Fբ3G/O$3!whr u'n_饄Q\Z]N..Lrd|WeU[vћQUm< )G#xB+h|q3]X:qMknϹF Aw@ CУUmc$6 h6V֬FaXY\/)Uc_=?zT+_}oolm QBP/.Ub5p┣Izۯ؞|Fȱ_.vVaw){|ߡ}@Uv8t}yQܩWt*{szk%(BI+~RI2gں%ȣK]-z](g=w.Qiee ēǨ­BUJ+qJt{}OV8 Tvz=5C+T>"c#/G,mS$ϸ 6&My] f.UTދ}>rk7&H.^1[csM"j~O^gz;?sWtoM@Gw H~ʿ߬+/ znā 23+Uӊm̩6 Rw1J9 ?_ʳTw~ҟ;Oǯ-Nvw/Rk[YI[Y[jbzv>jyz~D(YgC]XHVPM#/~\8wSw}I上d J#[G)kޖYVP?ҺcQo}ù暽ˣ̗ۧZ]:o6p\34h mGM?}+Nu4RPvv/=: JHeʴ;G2E3|ͻ͇gVt8ifO]?SХ]%kO}nua99l4ln?6Gvqɺ-vly71Y[ӔI'FYlRT/o.&{+p!e%*u97|O^HtfK|#hZ~^\vݬOT}Ī~m[nui}_og^1k{9a2NK61bnW??ZMhtsF/E_ՔtRe)KfVV>oJԴ.Ϳko'y}s -kpb%;_Fz\6mgVm~Sa]}\Im{ylşlƜ_tT\je]Jt- ]ɹAi |ͫF{wуoVE$`9u߮_Rȿ [>R!n.6#+MtRk]ئуyqlvw7ҝbr_uǬlpy~`K:[}+9>tR3* 60iSo,F_~>ԛo_Vmȹmm.l_獽O=~38̊{_8PrO_jSj^}?Sh^Wݾ{ 7mRI}t^)RюO~u  ʯ |۾SSNmN[/u. dVt9_-J`fmx׽tRNJW^_=GMxFrnI 7_7u}׹UU;"^qʙ|lҔoזArh޿ӯrasnUQ*w|yo&3;6QœC/mS?N7ET/uzaىy 0imy1ZuJ]%U5%IJU$w$(,FA۴oO~Z&;!u{?W@2r_SWli֒nߎz񴁳x{8' {U7ęR<rۂ+Fۺ^~k~;n<Eְi|zOM9i忢ۯf*(kg?_G]ΊS\̖7B7L.>jeίkk~_u;7']G啿kE.Ne+1ɼ!bbsp7gw֔n֬nQ-FGw^Nm_ox*wu{vѧR)_>;Mi-_۬r2l?uYE_-?DzK|_;}Ԣ+5үkdف) VqW|p_Q^=z-o6-%-- 3\ # 6߻fY%3Ɓi }}9З.vS\t]j+H %c~g:m[O]W tZ]WAӶyޙNýygU?^ oG*_ ?pwd24[b.FhYv|'}S3ȜmO2X-!RyYܳ)R$b۽9V%>Z2hmm#)24}Rm%ZzRn)jg_s2n?;|֮A{~/sG̝tKəN}Jʐ<䕲.ݪgvT|A\cɺO?hj?Rڵu/Bûs:>_Z472G || XݰBS]~a&A]m)J9apLΡwc#b̻oӟ^F:AU箷)DpC!k4YlmPtM9^YHD!a1]7}}3J+Y4jDeN~3RyXmܻ]j婍kG^k6lm,< u*%*lTB ;f.wtma-W*d*m6{f=n;ӊ^y>cg* (U\]W{7wȶ^dX;|Ξimf}h3Kg߳s]K8xwcp*̻^{ڤ 8'~T%yU&{2MBIk:j_bd@6͹ulfESw˻?Yi/_ f&͕Պl<]׭to4SiZ޺߱Eì?Pu+я.skcq-3WU5[=]znt$(A |~owTk?.rRݱYV`gw[~ENM(mjJ n9-uSk[^]Al@T[smm?TN{[V!-/MŶKFG'wZ {~m=+[܀o?:6FX$wX%*巟^Iϙr_ AY2@8:~eȼ]E1}FO+-܍͏5 /?a:oݖsYu̸'W r9^0mC/gQhw~tY$u ܸ˂/ʹՔ.(6/޽6FBn ۅo*]ߚY׳gokG2WpDt\m_g^5Tե ?zW(lLw˵]>Ry_K;x]M<V013r|ܪgvƪ/i: -^E%G{*8Do럵6"6*RjW-m_jK;cYUKnRX^_ןаpinO xN]jK~|oXU3xʓi]Tpۺ_=$ `nڧs.Z>^pNil].~[zxHm4]Ny/VNS.8BQdi:z+WtLdqW6ݼD'nTIqʟe]i:|xur YrUoLx:p ?CP|Hn2R;k{͵GjKgg_oRŷӹɢ]XK?is.>fL)VУw{ L 'bVGV;*`_?VyrjΪ=I-|5K3V9-6mݹpƴڻ~u 4o坣ҠѨ#u,G.;Ut߿f].Pi?7UU~:|$xΛn~ W^=zt Ӕ Zߚ..e<=dƷ.E[y>?E<|y{g]4ݭ?o?̷Wr߶.Z1Mo\LܕKp??/ћ'yD./^V}4&1{lbge h>oԦ>JU.-R[?s*ɹU )`}k}u(مݬ e_ұX_tV-w"OD7p,UXnO?}eAi˯_xBrdQYIi,r[/<ˣԁp/$"3o1^?}zWnjX9ZK#Ңi [py[?ĝhJM-VX Vveu2/Ŷ&ʿĬ~S߭m~Y}Xd_3h>oלT:R1w_諾}E[$ߗavWVLi]{ ?vYVVo5U7NΥ*z?~]mݴsޯI^yR-ۖUȵt.Bb :?:Z:R/ǿɿĂK Ι!AttfYJ66ԵI@T1(<_^n%w:msykK* 2W(M=oǵgwo<=f>=x?ס>nV.?~U,I?1nͽNYK}z_Jt]?26G6R̤60z{?: ;3Mݲea$ġU{%R(֗W}~_7J\`C1;_sTT^"W}^twI# Do  Qt׺:o $qwMar~n>_,CxI;BTy;_{X4Xj74뗲+H|'i_s8'?ͯbއuM[\Ưm-` v'-8O8RW?~.޽Eyn}<񧖾{?ʪ Y%u{SooMu*躍?X|~1c,W*m[] 3_5]v75m6癥Wnfw1ZMͱwl^w߹X^ozVFc 6jurK.l;ZN3nU]&60]SMuw34yyJ׍ʪj޻[ Tk>ӼU to%YZ4jo>_ܢHJ:o`P{lyի\{-QA>[=;<+yj|a[ˍF؃~$h_KU5 N/-}O9SkuȒbTB_ק8mΓOXk_&n['s_|}~JyY|̰- ]nrw7<7+ROJ7z[Ԏ[M1)a[y2HOO2FU|6}޴vޯsGQ9?z93HҸ9=N5Z_1(>>łPz`tmz0xxw'$4fk{|7-HeSy֪S}FP-OSUI\խԐF=}+wO#>n]w_y-r9SMۿ9%;4K 8sAJM?q; 2,9ܔHpNH==}j&{q&cRR˹'1z7&֛uM'Fۂw ߾7nu;3/\xOwa[w&+qh~zEz?׷Ok{)|Zi_dLuW=F5V9˛hZc&؞[_7;qy,d}QSV*Qm+OZ 淫\iw^&&II4ͲFkki4+ɇ T._g㰴9ei5^k'߳O4|]a-'w7 ^3]M 5͵ 53Xzٴ5`Cyd[B41wDWszܷE%X]淈h/4Ιu}ZR#y27$Vw #^*yw%pRwz3J^{H}[}:GWJtXt5>UX^%Ԑοeǝߣ[[SHWߗW_4|*xXZ|IKK#Wt=+M;EGԯa漹8\ziS߮;@jqj^&#u+o1wX,\40s4)<lyB ]Y龏NAxZW}>oLq;M XOFc$HďO||4t[߹ \^);c}scI-hem&v5m𽛢?tƨƍ[[VẨbeIݽ6|?{{ÖzØ.ݡcҤ5Xfk!y#)qJUO;tvb1ܿvǷjXMӦ5ύ%7Vq*|_M Y\go .t,۬MJyHX;hXg>̇bޑk>qy4q]ݾeFfiFo7yqoeϧZ׿֥NxakeX[| ;VsZGЅkg3m\x-eW9#~o~H?fM-}M+Iv+`wjNk & e\c%ǿ=}k5M=̗kfS,F9-|mo7/ZPծKtf!s4Ƌ\U8[}浬 -OIvlWhdhNdȟZP;Vrh3g-ݑ桦uKim5 QFN6jm׫RJ7m7]zi;ƺ48m~^6_Q}_(YOIa|!iy$He޽[vfcaN(e&& *S_~O_/'--uise<-'4r5>U#gwo.CJUjZRo6*!x}KZ'WWj˳fy4bG&(fIΰzO~g~9f0BE"OY[e{h7K\]M-7C[VӠχ)vdؤrܩd{dv<[Xkm~O9/|&𗌯-_h:Xo>AIK!;_3~ٚwwLj}}SoxwO4i\^.;xVick6؅ucoi*J| D["SMkQr^YI"ZIwY#>I%)-U[/|[ [^yqMl -3'<ݷt(8iLzi&<#hglIq%ơqGKhRD~xz%t5i _V^Vx׊>+|Ku o>~}CZt6wxC,!Taa_9.u&402|/sF[m5?jN><ÍJ.k=J 41R=Zi5+dCdyp^F~Do*ַ빕_ľ-ΟAx.8 <9??Tt֮!]B`.fn#/#FRnVqO}5mxSƲxUi4fŚ? Ǫ2w&ڪi\L>ӶO2{;((˹SFַE@}Fe}aZͪU#-7m0Q:0R]=_sU9[mݫ ֡mjvzճk{Vo8^8pcrj3-۷; GKT]Sڔv,7hB>ID߾orZǁt\2{+mJiq;K+$,RMk L|M$vS7nv~56+Zuz~|7y Ǘo4 3BwyB}*.0wk>Ei` CX[xS~ċ pƬ!D77}SV{??;^N6??o4 ﯴ?L[IV(L+s􉤸%Ѳt~/ȥ;.>g%j׼Mo!6ڔ4q4+UhoDzQ&9OI>F]߮dSWO#/uGٷ 5;Cݴ p5y3<) )f.#O硉M}vյۿ?ACkW_[ƥ䶟}ַ:y6i^:Cyy:ErtיúM6y?go S|;4k{m'H59FFI}?˅Vy\JNܸb97{z_OO<7πa>-ya-Ėzv4",&ԟ\h-dp zXL⤣9{x~}w~~s,4x|Cy?k٦im|f>޾^͛W[,C kJ|yA{kj|~[~ߴOً!ouFS'ڟ^~泸X^/-tHc۹Osgb(':sl7E*5$3Kwm-h?h׃uIůxUK-Oկ̎U4ޯxO#߾GzF YU.go=?IbꚔ#v+?~>Z%ZCcg+䅤Qd.Fkw}InEV_֭kYþ5tmQ6[.:}ym:}y~\+iw߹|}<;E/Iejon<[qwun I#ȗ?G}從\\}rS¯+`nnF |L?2IK{;ETg987ɚjmߓ:%8s_|3Qj? ,m&W4&FM}ua̒"9CNp6u7Ͻ~lxk4Jž#>4GjjF$&M66jDޒh^?S.v}y,^ׯ`xW.n@p~ _\0&!dIKyiv2\ͷm'ٳziNkS<.iVYAiG?&I3qy9A;ӻ:Nu>H֑i"_2?7ٗr߳\^ykF_tƗu_0:nB *Ī2~fp]W܆w x:nSK. ci7y.Q]mQG溰b[j=_ϷLyMBoEeXy2h|B&j:LH`t{yo,߻f㚸JW~_ob # 1Ǟ=Z兀 2\[F|qS;T$:_5s? f?nxFOi-yH >cVm{?خzt{3J)ݓ.cꌬg6{o&ݟkw~w[dZuT YM7PN sŁlUb:gM'C'~bga%Z4U]̛ZMQA[_9Ȓ"|m[nLFii;$cϷ^*b*+;Z3}F|%Jn_2y#t˧ܪ"0,:ɻ_KbVy +ƛ06卾g=kURWv<'i tmgoB$j;)o<)fYX;>鶒Ij7w6jJ4UC~ћ]~"N4 Y/w~p|Hwwi(ۆ>eܻKsڿGoHJp~g)JV]6f:êf/eAv|/|} (K%W<^>i|Z?7h|z{HcYy<oZXǣ>v.Esum7d34 777k6sڴF/ lmni|w-kVFlrnQOW*zsMZd౫W]=Ng͜gQBpLbvb# #{޿rNz{mbTw7ۑۈ-#*!S[/YEm_S㭿j߾S񅥌'MFKkǻr#2#w_~Log~l6v6ۋy>̊3G|۽W{{ U}~ny~f:~h!F$ª8}%Ivvq_eSQپfRxǞ: ONԵ9㴻֓OO^F!VK7tc]CNdO im048m-RJYL2m⯗{ۯ>?(;_ƿm^jmgD3ϒ̭x<&Z'ۿNϷ?vn7_9uod^YYs'ң'Q+nɲؽa^$:;J[wq}̟4D}6u:3òD_{bC^Ԑh7 en\5!>&ON)У5i+|1ƫO[kt|qh ,̲l4;皆w˓fPo?:~t3gMgbZ B 2 K+/$:U֟3jp]| =S^BCQ:}X'E\̩'fGw4?[ܮkI(˪3?Y?FhJ[4̭q;"]3l7^WŸJݿz4s.iWKzoz_jj`bWyXI&<2mٹ;rGDU:{__7"𷅼6gahiftLǓ *Gs~령oҿ!Y/,&[v͏UY]_W_ڿzCu@oli'Ƕ//NOY[ZK}ϟ~Jʢwo~ܥ+SufX?vѼ)5:kuk*)Y+]wtBֳѫ]cCq)& {;x[*~f?kS Zk˷az}K="If[ʭ4g sRͽۭ՟"/0 ֎Ѥkp[|:lo3zT2ex1_cF=NĄR]՘ׯ+y}\ƖΥnO|}CZ+7( #rK+mmWھ/EyE([Mm*Nw/;=[>bc)u׮#M$l2Ck+$=٦X;MTZO?JׅG龫jZ2)Y$Ɇ]\ʎoҾxEkū_N/?'x5jg{yo{og⏎^3m?P˕ex$gYG8ܧj_ 7}3Ω8[׵w|GLO+HF'd.˻p0ʬM 夌/zL} wqk~g$QeT9N }R>__VU;4aw _+oF[s{(E˒okh|?oKHsi$mAFJR|W_!Ӯ7X`_mn~nɳ0k_w0Wo hW:\ZzKkCyUU}n3J߷ ƔT}ۭ޿4bZ]Ȗ0Y_ٲ$~SIoʕ 7 jyu+._~KѤAa)bC$Ӎ61ȉˠڜ?-˽HQhS2 vU`~~km^*KzyVt5fHN+n,{~gzin,x0w3mg)+6ے}&D/"-Y#Dp%DvV$+_a~k9aЈsߕ??KlBjS.XK&e y7Trt79r{;}]OVm?OR΢qN |m'­iGMϭnt~g;10$nm'wBnvo;Rx_36iAm4jZ@.OJZNwﭮ2X.^3vHu#ȿuWl2r/]vrh1B'~z|ۙ^pn:E .]X$D9v:G3($mm&X~W}L7y/Ӿdɮ[pI:4Iy

n~KԬiwq7.Xm#JSIF|߇yM[7MիR[M Bu̳G^/m?.9ϼ߻+JRQwnuvo$;ڻC Y˙3.{3w؎|ZxVkڇ5 1/B#ybmuVq&$߻cUTm][ius*~5/bwt߱Yib++mmwny,o5]sN I鮚ȍ$5HwMPDg8_u \ȍYV?y+߷%tFH7Ȣ3;6]3BwzXF6"U뷙Yjo-*-#hY;nV䓾}~fީggcͽ[ ۼ+1_J*^{4-ܗ0hXYٿv3M^:JK[_Zg JEkvjvW7RHU`ayv_#t_Mwg%xv#3[Pe߲~f):}~Sѫl+zPmF? kຊD$yklۓcnۿ|oIY}?Szu)uZng]<(|+kp|̹)NJ7߭w9]aMA-nf:Nv-î5f;YV3kf__KylFHNg{?_gIat<' v6H+}u(ǽ{~Ub+ cn~jV_p*rֽX 6nǯZK]-ȉ%]FwM=$~+愒؋.+|Ŝe'u~_[*[TjI^e=o4@ޙWю~Nk#I߅Ht$o9pQ/u;dI] <+4w7߿1e||a AQ{pr?uf_'OdNт  ۜtoq1}[ s[>ԎSb ˎJJ)2'ykway_wUvJorߨy9wb>~k&덪iY-ʃquRvow*y{[7IJ Vmw~__JM}rGO/=ɰYrpA4뾇:+arۺqh}Ig}Cj4kG_$dI*Xw9?:Om^ԟ;rxۆn6VY>_S>U_ PIJm~ZUwטim{_!&69ݷQ WiͣM3EcE0vo(\$;I=WØi6(IL$aٛsykcɭ` 5*%V߭NFg'o! _1W\Nd{z_.2^Ͼ养iBm7ؿyU)O^,SP71Z] &$ެ̒$؟q6.4L*A'^Z={EK{5HYB>ҡw1V0'M* z[ *_8_ЭN6vϨi$}r~Vi-EWOem$04Qh >e\rwӛ߾xq̑r0+Bn=Z5+v~>_0llESsL1="aY+'mߕ] YGh-gz3\3޼Q+գ5=;w?[gVU'͹ӽV"?k~84=-IwP3JHo$ͷ~>D?,$f1u_y)ʛΊXFPY ˶"eVڿ{M迯FJpsXoClP*+VD|3W}:ӊտeKG-N5]ڕ43,gM)ի'˕4u}z3-$%^iخ^nogs[Bm+}'M%ȡ맕ʯ|AP|M.ۗld^9>[;g=L^kc~ KV>$hu}[V2|o?Q[筝O6哇?߉oG;G6,&P~ٚxNjߧ4w_ת61Huwfؤ6zWT/VWsr'o?7KMcqJG y6FZg:^vc[?y( Y[⻷p}SSӽߦ珼dK0)#kq~_q \oNo׭׺ y38=?yU\myHقhیuvk[,M8*S}^sNJԞb+9bwWp'8[/׵펃}*݈g)o e:w_7{0Ҧ^mHHC_Iy@QQ6ߗ?L{zÞQkU{_6,%̾l2ɒK][UROЏ6?ُ6 `PHnWo_ ?Ib>t`?pi%'X1_1.Żi6z]-)).ySZtv-V(#wiaO?Z.o쒥oȴ: q[Ӣڍp˨knX>;Ez~<~_miiyvWryfo(qfsҹ/_NާJpV;܂/.1fof̛V>6yzǮ_UR9hڕ-oeOי8dIn2 D-IǛN 4v׹[PԲ| /.(M={u}w5 X4) N6ǰmݷkUi*yĸ[6-a(%n"}l&]`{ןS~}q؇Ş'C+*|_|~LiB[zFs] q, &ƨ?U?,ZKoS(իN[}W"ךs41-Tm]=JQn鏴U,oukˈۦ_2MB5c[xYb}Z0:]>-K;/_[pv,LO6Ke_mVNS٦>+,/#rirYvvO{qwnGd*>{r?U}RH9Ȋl*'v}ffmީҴ#߯d'y_(c:[b݆4zߚGE?wQ߿>o/ G$.w+H~]yr/M?fP4'Zk릻JoF{ꏒ|[_KQ$mL[Ue<;O^^34|o̾ݟsҞW|]?wj6z2אso f$6I۽qGUjvGYFOǒjjn#i޿ZjCi|mO5fh׍5+JwEg}_uy/ƍfC2Oov|芫k05~_w=LKaTܻ˿ڻtSY<ץC6Yi [zuNڿ2vƥwK9O2[rZ0ekgk|efKOtzjrIu^ZKJ湻֟S^[`J,Yw* [ykn\F0_}r&go0}M甑o;k:Z}~3Z+7S﷟[tDe.$Ndm^p)-)zu8g9Soo]K+lVC.ߕK&y<4% "'.=͌G&UFO^e'vo}>室v_26P݇f;naČWeUdh6w\xNmcdʧ/'{wcQZ UV-r}]J3;U1e +}wo??OSk4h1k^@ea V>7}^7+w:#_=z7fnd5~v|ݭieդ:W}v͍HK$vd$fVb~y5œһ[ۯ%]Sx@ h>[6F*5_W/_ywݙ O-t|U9-+\m2 ''S!>n{܊Ibe 9н}r+,JTsサ߯>˗)%C q'V ɽʍ6qrױ.*[r|ޟkNre8 #R }߽RIzZy'dpʋQ]+<-ˣ ;ze+y܉B/[ +Z~fv,`y=^Qqwort' W(u^-7~_q nnʝ}sA[s 0ƴo;jnhD;[|Q.2zx>79oVhoT~?zUDŷO9#vu3_.k$+z g4k@wy=s;ocI' ?6z T$}ݫ{eB^_1/ q\.+# E/._c;bj~"J4due.i\ݷWgppM[>*xsyukod"V$LGuopn{ϵcpBOXžWާjԪ9AW>fw#7.vn5m7^p?ۚHoW&dY"_W-fJNV; /i? /SκeGfxY_b\d">tgn ^ - VG>ֱ,/5++ͬ[X!E_2H/*:gwZ~=a:u]m'/dͦ4;sU|;y#Uvm$(3~Y>C|$kZmbXԲRW}Td +'kyn/oG#n$Wt! 73F1>DuL}7>hO)cwBds'ݞa_]ȵ(dү,4mJzekv̾Yo9GnmɔۯS/ >ux/MvIb|Yw>55>Ito Ή?}edez_9k{Sg_OIax=?H֚km]uHu)M4KHv:w!DM*(-SJZyg w>?kyS'tͮ#hV=6&AdG#pJUVOΕY'O? |X$oa㻤KMZFUnV]KėUdD>̒~DG 'OV_GS}i}4&_iG;L0>bU 񊒌|pvoF7|_o $aYug9[|Ϫ~x < <hF,ifyYn&K&GFb~=J2K.\Do=?ԴU%S I̟e>*JSUdZ ߃>'熼kZ<FfCOi6I>1 ك<4k>SRNwo=:vy|/Ɲ=|M k][Tm1Gl$jr~DThs^n7 M:+u՟_?a?^-noZ?/ i.;}>)|As=˿ vP$i&WOZ<Jt򵵶~ q] j>1Khw֚p5EUo\;~{y&3,q"baq^T*ЛI=:RWmYuTҒ %njKm?n~߳̇o{i>4Y<1Ggtk :{cr(~ŵzKk_;oI{]GYO𞱥xE.o4oi6mh_ɽ~O;׃qXxUY[nos}gF˙uӷVϑ>7|;M[KoEl1:ZrѬw.\qWw9rg⯉%Mld=CZi4¾u0Fܟ(ɤR*I=:Q*/>`goY;J2jo BKl `CQ?æCu 3lC=sjsT꯷_+TO=Cß| :׈uM?ľ,m-U Ԥl|?k&k6cY-(k}$hHһkRQuv`|揚|iZx ߅3:.u-?GI"I5z r\^\2\ө;woHhaK;W\C'~{i +efX$qm'țkvMooQw_@˕92_sZSvIk78ZW|u#R.e!pٖkeH+#;7/ujZQI?,꿴?IUfiV{ 獭eHVYDně~U*Myov4}oJoዟ<-ӧ6m4ח3^%Mw~zRwbI-/Emm32]9o[(=541oH6ms󣬐 n#>ߚM_1sWݿ>V2.ӮEreovG709IﮝgFzw^g 1ݤ2A17_o\5+)MjoG1)7_~^^ /%_ 73mX}+upT#%gv]oѯ\CkfS|˷ry޽Xœ#ww{mSʛQ7yX4[;M>uۣ,2<}T6!"Wnj+ѧo>OkX!am=5ѿKGFE]l|ŒmG ^:[￯S>x# L qO1oܫ?|6m?<:5vemwO.ggeckc,<닇˵c8Ho|~nzEs4ݿSR;k\&a%0 sYIMh#I zW|z]_:ߏMzpN~VL*;$rׯh1roq|Ӝ=JOM3I#}ލzzyØ6{qF7`6N)DT^DҠ8^I_=~n6OWoR]oٴE_^%.UW+v- ?yjֱrrӬ2od$ַ_ܕ&Ѭ rѯaȑ2ͷv<}jUh''2x Z횾04R[HH`om̩:E?Vގ;):~>]s^u )湻k7Hs.˽wٹϷsVu2u!>`~͟m_v_oj1Ei|e%ʪm~Zսm++uI_2x>ú}Y:uܐoıڎqѿlxRZ'_#ѧF)'w4>$ɮHzm_Mm'T76&CyΟ#ceL`׻{ywL?:>#tW70 Q!ܟ2^pV[}4o˺\쉑e|mU]qϭjIo_tw4`kK-|ʫmw˶6G}iNa' Txxv ױ<$ƚāL]q"oM|Ͽ\SW{5G5]#ƾ 4n+?eygVY\Rf>tBGxO+%6n;Mikwm(1O9)}19?|9е&4Jk+]7~+1d5g]bN~VεFuۿCmgFM83BaH667}׿UN_RVV:ω>"QjյVh7画/y^ׯL/ɚg>xa]BH3¤n6鼨]zԨKE?Suv[~~Nךv/f;w]iQ>֏޽&ڸ][w立8ߞtNGIb X+Ff`t/Sfh^+K{?˯oc1hIr{_Y7rFZ8Hۖ}T8/Kk'ZfwM]a { Ip~9Қ擼׿~,uy?jGF?U~yW|׭%cϣQEu>x~6xVf]O Fߕ˞|M$Eo} ~gg:wg}fzq_[xv[x~/b::oΕ:kyq,ڣznk Mn\VW z5Fh6_'Z]bo#YCo>̿>v%fR'bcOXosgHUn[uTc'kFI] ̭6|v8Q[/B*NȒ|3>bͻvqׯzߖ*7קZN=?8|KXZOZH(7E$jۚY7޿#\nPR۾ZI.˦Kf2&NdkB;YoR^׹Sֳ@6커i!c~?Y;&|Gק\+xe̱B#e*ҹ_;?>\gk{~F-N[J PoyH*ܓ-}q]wwm-hJwrzmWPEThIJ4mm;ڻ5s1GޫoO L[L}2]ۛ~Gޝh[OqWNד=ݥ>7*PQZektӦ.WGTb3 T{sޣƨ*1zٟ6yvdo.AcVDg{u3*S1}ԷAJ?6Zi.o}fq%~zYAܱr+=[?D\w}uܯ%`QºozSRѷ~2WSjP}Nw$<$ b}_){8G]{k_Nm{}|ɯE၍I$PvFm?ww;~n}X4_S5k~oYRHq UWf?cqj {wCa.5N Wv®}hߡoO<7VBec%N^]ۗɍv5<a}#GElK{ikwMcs(dF F&Pǽi7maglD#&Od*[rigw(s8MoZi#UcboJ5 =<o zeΑ͍˫3-«IfF>|ih_߉幾{iy oY}ck^I.=*V,~SZl5XZʎdrɺ=Gm2aIE#֬t6mDTfoWL.ȟ69*a5wwO{~_#>mt;!gx³Ss|s*cKWNwvn~"5tLy"Uv1v&q8|2?ӹ*溧-QGdo=ݢ.8c!ܻ/?i_Mm{$/oM__K :eqĮG[?oO;8!)9]rHRB^vȏ#[drr~UwW%X)=uإ6%߿kv뚆kkfT/:qqHEm:l4U(uSZpNS~ ݪ6s)R+,m zwn= q^y0_M u+ە~mۓDkY_]Egk÷shZ&ln+\s2RWeRwʬxDQO[}k0iݻ:$w_ӿP_7FK{}}*fNN[~}:֓7Eu08GO˵g}Uezݖk{x<Ϙ Aۙ|̨N~MtqBk{a} vg[(m"3n1n7&׽(]_ȿq$W?c6 K!g˵Y'w$o/֥:6W}Iϒw^~g|RVvuV.]õ)[os ;[6\"&?p ux_4z*x?J%ȨWpw˷J&*6o4GNԞOVY#٘ZnfĿy>O$NlQƠNWo?3oBkx"R"e1*αH޿ֹg%47[_@ȩ}h;F[|͟ho+A-#[k_ugV:\Ѣ;%嶒 2R/k\<un幾-.T]uYMGGLO l1fHv4s' wנҞ7kxRo F3a,m4`qJ_ LjKݟm}{e[մdx^Xkmw"/HJVKupJy{y+K4LvhU坕o5?WW2Yr~_s^Ev2mMit^ Us\ݯv sleH,c-) Z6,|~TR~'U]*i"[õY/M/~YVS_y_:ďNӢ30܄W z)=#okh{ySPMt/4>H2m'XO7J秧O%Q@o*w=.}ыNi/|O%(I1˟Z^1z~*+]OY%^#b06֠GԦ%K!yLlU" ][߹wgwƽJs*=߼~tRvr9OSFJ C߯?5Jj?39E5x(.]wՇ]ZݨG_שNk`ݗrצ}5ӧBkkzz?Bf.1V$?uhykԩ%WܗܟowdwgX޷}Y ?^ӱ{UA4=2#J7#E*3~ΜN I3n"Us W(_yw7ͷoBIZpaEM5`QO xsu Ʃ{o2f mS~T r+oGe1>b&~f(G?wWˤ#՝ . a9w;?œ}{^:IW迯S3 Yi8jT:m]۸2@5I>jSGG]͹v̡ڼvguMޫ揠*yu$uI_}6];v=²|2v2 J(lYIs'ȫo|2rhQsz=wonUYfuTiw^w˯|Y{{ G:Oy">upy3*ǵu+yl|ӅHӌn_O=5}Y:g˾ZRVp]a,췗P~Uͱd;GnoIiMz_O;Q& UIooM :O=䰙'ԯ.~Ƭ6MdXot}i,F~?sL.#xKomGKO Ak6wnm%ߞ4m7|q*Z}v {LTjrIkk[wR᥊2,{w2S4\s<$)k}}~SW~"5*se|#ՆՓr?mZME+;%}O>xZteEKT_~&xh^*)VI UY_Ow]O%M+}zMψ4AwZ!]E˲}^7 _QUgžCQyH,Yg4v?}uU:PmJ.wzX#{Zn+⶝{4;شvvż(54iwdL37qJ^NOOòl |`H3Ce1N##7ۺU(}o~烉q˫=GkmYx%6&E,2̌,O=t5gߺuvsUէ]|чZރ99&S(Kȧsc^ލ^y_V;zj̧c=^${xܫ#=a~R8lݿz~wn%$|'ݮJtoOUC(~^fEUI}ySzǪMEϯ Uc *;+|ɷ cZOvrbߛ͜鱹_0;6|޴R٣g-e}F2;$r}~^4J0%ɸg2OesYjQtR¹8̊_ ]E57V vO~}s{y| cunoo/fnno﷧޺V+K_0kW}~>mTtmWUVpjZ?;kȭE/ok̇L$stY7?tK68G}޷߭SEU2pp6׎*iׄ]}MPӶV O7,|ܜ BOsVV~&oߪK0s*,o{>~=gVrYUK0* ۷&Va;tcԔ^תtZgĽkO6QCr4^T'o'TO ߭WmMVJ4-* 2CeJ۾e^42cS_kŚ׈&F{r3p/:{SӦ_w; ۷g3^_r~G^Fy#yobn3.F~d8<N]~ 's9wrr1nȨ&~_\A}}zPTu*׳8`d{Zswr;&wmV#ufhmwDǯ'doDYwn kg'vӠ9M̸`6Wq&}~O}})C/D.1^4pP8V:N7OMD-݀W?/{JGשP￯hX7Ã?5s[7Zw~ZČ'}h̹W9Y| ru~ky: s8m%9[yBNv7}?SXеWӵL--K{"4~YrXw7%/S&WO< Tjsjo f7/4Zx dExy} kэ]zӮqեF]KĿt |GӾ"xKBF>,ҬavUմẑ|G|gV85W ͥn>] guREνo~ڥOZ9%|L"QkêZXwJ6ȿ$ȟw|\f Q}+Vﱯ6nO릫S)|'.Deu22|Ʋ>Ϯߎ~eƴjǯgiX a'~]|:嫆}W :c;f|$O{WE++kmYiTӋX-.fڭsp۹gڿ͏zT%̖/MrX5˻eҴ=GR/jw}$m?JForIfۗRt0 Yvtg#n? gԵwݍs}?3V] t9>&9Ƴ0 g_3-OmuD(FY-bv2nu沜M~-.eÿ?O0ejZdg]Biy$uxJܭ7]eI_/;xޣt-Ƈv:/ھȗ/{ǝHK;^U~-WS/B|xм^?ff6Pȯ77[կ-d!ATKWoṡg<߽[k_]?ԈIOǯ=ZOW_5h\C/v#VmnZ;ɼtDaH;>rti{^EG]:~cw +D9C\E.c'{w+XxUU%N~'x9{ڍ{pdm&$ݤ#BR#tDofM_+4ʻ֟?0XZ"`iv7 r4yD,Y~VI+lS?hzw[?Es˨>Zy"G#lCtшcvlDMGM+'I'g[RN?:|Mkhz=*5-̨蛛ٱ릍UtOO>C׼/bӆl,Y<2e7q !ko;~'c?}!'oĖ3APi:],tHfdk{^+LB7 ; c<=YxU{ƽ/n dfiU! ŇD,b*Ue3OcI{}\ZKNqɵGko|:mXl)];ޏ¢n[o亃K#F+k;=by 0s ]Wn?{oS[꼿ǭiW"<7m[rsEE꿯4fLh,G5 ܜoiȸ6wν㻛qhp^$vwImy{w|t殶m_S4_k0\6j^I"M#|;GmlaY~_{˲#ծ ?"$e8CUԭfS,Owm'or6ܿ^FbMT?ZXPfy>|ƴȶ_R^+`>\;?win]m.y%k6OyN: K}ߦͮ{kvG4iodmޟ[.f)n5+KXE8y\fa]NKLjC/t[:{w9mݏc#MX%%2dC7ߟWO]xq?_c62),W~^aw5yo.O%%{߫.0rax/Mo~vm7 _ynE~ߏzW%I8MR쿮?/>x-kj׾];n!;]Ahu(-eD8ˣ2ʐ&Y-ַb'%Σ{7ϊbn}2SH,Mc mo[LmM9TboJz7~Wk[9s$mvO~?~z53S j^Ԭ,֞V>o;y ;^2==Lq^aKps:R םs>ZIqZ~ڟO~_Ss?O@w~& ]$EV}ͳ'-KU ʄhY:I11n]EWO(IJ9r;sԽkCL_'|ni-[a Cöw;i#C؜R5ǝM{wi[M-=}jBiJv^m< \B񅮩$VQҢvC$+b;YUG{grr%+Tۗ汓n9O_~Ͼ%m+JF ;V;jGҽL_HfDc v'WM<*|;O״t>!]ˉ؋/i!fyuy&y ml׵ߡS/yY_s'KcHKŏּFOKev9tMnn$wX1i#紣^w08F-qGJɒ 7n]+}y3Zo+KI岟J?ĭFҾbaYDF%[(xiz/_TiFV{#&޺<;>*|c&6zE~ ^+\^%elZi1yl莇N))9;/M$~OM_x?G^L$񷄼OF?OS0^eM,2MGw#G54m2G4wo%9:ؘAhokZ k3mi~5VŽ$[gy~ֳoԮW37FM)v_/_GŸl4xg⦇ &Y5=cF/w5Flu5mu'nau里z_}o> uisx_/G~>ujҷa6ԽwɪXn>o.H /q2#\b!Eq.FnrommU_)"$#>̅ͷM.Ȍmqz>}۾smnB1T_s/h:~~%Y_zŘ1P2CegD6DU^?S4zO 6[q חIxrqZrd/ $l]IamЛۻUEK[iկ?ڃyi}J-ds8hj8_Y~jҿ]u+问/F-tgH43˷sI7[)ɵd7W~9Zߏ1l}O6=]:i\~Eس;}Sro{ؿ۹n am*yZxmΫ#I$ʃΒFa;}\bkd y,CgȻc;wybqcRI$缜GDFZFvF?mkg$ޣQodaͮXǶɞxVH!_mWm T{EjÙzo 6"_,(gonZ-_1-l}2(uMZ8%}zD߃~ҳ}G _ϧr5"ݵ[{+-^H^b&emZGoM~Hoz=}N3z reIn^I#Ffy>O-7w]QrPw9u|nĺx^Ϲ,ű2y*cr%}VQS5;+3*UK_m˭zٚ5Oteϓg#ۧۮ.||ҿXy0эzymg߱X_M1[#)de&m3 1#e{zw{'7璘/Y| ڍEMݿ}6:uLrzuN~ k5k3kmLTy2upUFSk:j[BE8Wʿ.?rnS-z^CP򶓹v|~h—,moO𮸑V$A8l/j,~y=*5\e} cRX@>Wפo3؅W(zwySBܑcbpǹc<-k{2Kg+1O<^Ic~ܰ"$)ǹ y\cswE ۉ s9;;A;~ӿhm-2emWdF"m[w87 OYXOj3jeUcduMx뾹M[W箅׵m]ne~U#?)SW︹'/Npt e\]1j &QQiBh h">n~ozo)KܿO)-v t~4wʗ܍jͺ}O,guߤ8{8a-˻IS4~|ɵUa2FɵM:}t#9=Lߧn[E m aW u"gAz|Ok-:mIsnUfF[7w37o]w?h]i5D$r2nr,wT^Ӣ=osGeeߣ毬K޿0|O6L_X;?a9G׮5gGsp"%E%Ud^d[ ]k1~o9˫k߮ lHJAye\n6y6?|]}:voN~lǩZ0j^Vk_\<]|w5q{]vuZ'm{EME/|!}i; .)b -dYs>lG4nSu{?Rs tzydki VUVbcmțfX6co-++ ^(Ҽ-CepgcMK'u:>oU*%ۯ?:gw%5ouUl+?˽oDğ?y6s<:ne 2L4K?,~olrloq]?zWIurig=Q^xðBFK4K+.WnV9OOzG?^&tl5mVE70i.gE,컾h[n?ح֡tԿ^U8ߕ}o$>*F7-EseFVq7F$yvaze]{e :'5!Cfۄz})5{W'Nt"];VӼFڴKV5du\7W;euuo] GOwӴi-&^Ю-w7z&2ܬur-} OFѴ[|!cC 7'߱Xƻ׺^}N+0^&O*g$4^G^e+Ԓjf_ݍ%4-<K{6Vf ߧߦ4kׯ%K y#PftiVk(&~:YGkZ>;?eܞ!ѷZc&9hn-& &z5}|OcU)j/oZVh"l ;^O1Cnio}Z*&7חt*:b_? :Qi N'G ryЛu_vR%orK /? +}WK;%uX$v3?;_g4W _NHa[陡I;Ŏ_/Q{6]ٳ[A+,Zuv?&_VqW{>[Ξbț&E>dqɘj-/sz~wh/t(ַ=:^i`Vmvy/߮RU*f^ySI4kv{[i&$ 1<*>_l}7ͳ^Z+JVz;>}i|ni[_]σ~ xUnDN(9jrVO^VjWi.YH4l+ğqqӪuLgQ-^u8i֞%Xz*yѲ7a=d|9)=/ma&e=> efeX}n]M|I/sx/9GҤ2\yvEQ˷lڨaVi^/GzxM/tO6weYwHз2:l,:*s;s\~uO+ R1穭T˚QUߩFIV„@snUܽ}sߧNr9J2:]_cnf|SYBNܿc Qwīg9ں%nTk{+~k%1_5찁".Me^\r[ϭ`/UobGŋ#WwϾb3ח_-~_3^7WW-Gt̪V]Ue؟w\jKOySu$ns [< eYZ&4kx>uYÿ88ӗ_EKHup+d}kh%{uetԻy`3?]j~?ҠY~o$8/ϏCQ˥ݧ7#y[Ў! )2+MʧcyYmC뽿S9v~dX` _ܿgw:zӅ [g˩Vuh2F-2e{]xm/?՝t봺ߧ:KUxTgbnWUGoRN\'E)˴a(Tə?&'m2G!@s߿lw|w[>e Yc9($/u=eR5_owQodTůe=0^Cn|c_eyպEڑWM_ys @ E նYJWk N8ۗ^_-Rw]گl$"W*XF.:soo~wIz\R`29ApMOoީE-wg,-WSTZ~Uo!U|W}Rܶ彼͖h/QCʹra_VE݆lYSw|>4_5]~(]ɀdUfYNv.Lir7 W{ 4C D,W=FtzAbc 3S'$kVI󺰜_ߧ_N}= -ƜnSIշ asSu^[]3J]:v_^_| 7ȵQs$r6ՙ6-fwmƾyQfeK˿OVS{{㶹#L[>ahVd "^[Vz#(//^fƯi{<7OaowԴYYȊOb7̻lSe5Zo֧I;7극?x~u˽_6 -ź#|KѺzX<]HtX [4:-wx[EM{)a5@$-Xkqҡ8O=ZRI6ĽRI!շy1{^=>^Uڹ)8kuZHn7,Ĭ2[/͟} t8(['rv]l5  DY'I~쌭KY__װRN?}_7rTvE" YW^7e[nէ?4z :Vp|lw-ݮڥߗϗTv~Ҥ'륯RwI<ٶ&p 2}5>I]4mB1ѾȟSt4ѿ >]g.Wz_Z+_n># igɐۃ*8K[OkO{˯  U|{khI̟{t+{} tYYHQ]nG_ ;Xڹ$pݹ~X΢N6_=N<Α;CI+8ve?Zɧdon;6dPI5! -u`ѹu]Vy.xoϷ2~U,[ZՊ׮cBMI~c?ûW:קE,$zAfDfC$enyǫVmM$?ĺj(r^9,Z{oS {Kӷ]Ь#"Ȳc*~9UK֫~_qF>>f\Bw+5;ןo-fSOͷEc_m^3d{tŹYK23-<d՗}œagwI# V .򫲯;J*siպਭ~*vK;So);.3\}Gڛ0rIyz_a5ߧ}ͥ oh#\*ƫw}Юzzn4Dk׺kY>y.l!͟1tI/M{cHF2UYԳXkp5ͲM6r ̑/"̪Y{L~}m*_i]L,6Pz֧ދ꿯Jw~Mv"HܬJcݵ[Nn[+V6>}W9)Ի7צ uxp!y-'}k'~^OF,`#%$OOw}EKS3ZK_!R>\$c!r%i/סMk_o̒#Gei~2GgɽJ2{iӧT׿Y[ѣeY,pH[U޶Tնo_9E>?͡)`j:}п*ag[~C^j 2W wﺬ99l9{=2;W0i{`)/6y7lޜZ|.{YK,ϵFPx|W L/ֈ}go/#f ͸k60_p~kѥQ:!ZA `k*mǖXoG6s9en]jp^ߧNX*j1k). G"RF ۆ_^kt8A|W篟,Rl1!+nn$~d o/Ow VVg}5Q ƚ8E0m=Ϲr/5*:IZ̫)]_t_rQ= 9m~VzEk8?/hV;}ne}ߓ-^k{Oft)՜~Y&`fKx -qp/rW"VV&w>fd@vѯu38󹷾ߟ&U(Ei[F_5_=nAmh\4w뵣_N>Vxߦ"h⹴>/odYZ#6?ߺZtⶕUmx*N^{[Hc*956mIXpzg%ק7%u7w(7p,[9~~efꅬ6Eڍ?j^<םYPmN`#X߿uy[\K|1}_׿mn˭l[t87oα}-nNTk:ȏd>xgMtRNoVe$ϐqr޻SƮvMkL 7˹gUJ W7J}wWp%,[<ʻ~૊M=6|.ou}CG*$lA9;~ͳ_ּզގuV _K`.V FRs1ص}~dtW'hP~]M5Ty'}}wJ6W7%{mfj]{wV߯kZjַVTt{05cPTf486𦯧M.fKy7whI*nUoWs,LI}$hıA#}'߻VFK߾/.|/;*o:G~Ba;nPM;-{tgUyaYӾ6{qԪkvkETuoO7#U Tyc8'="U0|&M.⑘mou*{m?̬I4;($6gW~r<{,jpO~E$a['=z.V\'̿w C1˴mv\ۗ+WG椲Fc2 YB~z>dpj^AefF±vj'.^{ QŸ]w}JQBrj+2ZTUIhVln_NYow);ݶI%$DF?_:m4=8yYm_W߷y|uo_.j7 TjîqlRQs֡Km !ťCx4+Kimhu"~Z|z?ſShT%njcg;Z헗Jfiվ]o~u\J촷Kzu۩:uF~/}aQ!O8,St?.]>-+(jT_F|Eu]Kմ=2d& o>a,N6eyQkvg}uף=l>S=V;|_ǒhtIm}], u46poqx7/]tVТ ֛S|=x2:Dj]6V`v߽ӕ;ۿ~W[%:6w?/G~$ծSe[Dw{z_5(_K+Ӫw9u<:RכKo^<5W$JXhk+*ׯVN[鳽[i_g6%~;M :ڵȪ`vȭKJ__Vs -*nFn7;iT/FT2l5n7w_^Νe8A +ա.vWii&H'u\ bGȉXNMsOu/O.:^7Mci wu#[C3gJ$u?bINUQOK6:+ij[oSVL__k+w{%Ky5$ZiOJMӴSceoeV𖖽ﭿ_?_|StϦD3lF5ܑ1mwMu!K_ߧSVSCy-ndEXΗ>2O;6[dž6ן[0'-{{:Ou~(<%y^\iB8 jwY)wwo]|ҝ8To~:;QbVO8@b/H8ҍM=hy/3 ?Ӫ;/xJIH]oOl,U+~jޟؘsMjG$1hSvl҇68Jcy[λv'uҫOǯ vqV(\À>V|}:OWeG$* 䟛[-~vo1$7+; ,{G+~\r'^wzyxg~E :yvsYAWD6{9Jm?S*4}vNxQA3ee?9J_SXjWz/åν}"bF8B}n5x~=s>{cIFH˵_1.{;SLz[<oç4ki(2Z9`K3n*o:k~LǓQi13 n;6U)^鷕*t௚-F\d h7u]zQ8To\nsw8=]?ȯEw3ԳۥW(89=(]gj;[ϧ)s 4َ$yj)[|1ϿNas ehR}z?@vO~>\{)*q--WsM6z~Eِ 8zrrkRܝ֤iBo,7fl8'_oZI% Ò$oL{6N䛁n?/k(I '{]oܔr[s'1}h6E뽵߫T '^'E_FN$4Y^ 1ׯךJ_2?JMl{9-?|MW3s}4@'ϨB{Ckx_מ~_S5yo%tQNߔ⥦My@1'+"Ǝ~b7/L~nrF)&8<|:ʯ{jkFxpO϶ϭe6ϲ۱ {jn*mj~٨2rH#{"]^Wx鷿wQw˒;V^鷟IeZ߿Kݞ",\BQ$S};;, ngnB}ySvhˑxg9]2sfK(cx/o/[MF~y\#|CnЮ񪟗~3oRO[E g[ﭮ,{}OF'PHmkV ̮Dt4M;}Ѫw=_iޑ/É).A ,$o_{dVc>w?uƴQoTi+o~pدH PIFROlghuiAƛyrC&YՇ4meӪM4_שx)Oj^5O,kM#mV>/?"z:u4|=~-wl ֓JۨI+)vM$ ==d5 =3OR1}SuixЮ/Jޕ%=^bwxÚ74\ywhwM=5q$(c\'J A__O~'<R^K_xÞwAa$nP'$r;.Qy%<)uu{-?iۏˠ]퇄R~$4|f8F]Ϸd"#q;8s=ѻm}]ʃw{_g#᷇n:e5 n5陚MKRWư-c߱F\mj׿4y$_FϋE"`%u׶Zÿ3;,lO&S۫->Z6eg/6q*,6$ˆGVKУ]{޿j~|𿋴:=_Exf ,ȷq'f37o\1RTtZ5y/ >Q.^1|Exfm[L37gCmob谧ȾXC 5]ݵ9y Q|#c2ǭ]GNۙdi7#}lGF_*y1T⿯'aa,<=MV"ǹ[wϿqU>ԛ]_j].u`v*f+dM.w%4o(K?۾n7]LetzcDa;S ޝ? m.iwZy~?&Aפ+LY7(GH|~RRޫ_<_ |A?_C I/t!d1ϻg ];[mV𜬟vsVͧYϨ []n!Xۄju{~?Ma{kO'{*]kJ˸T.e}9ʜ߮_سjp.%֛IkGD͟"Eo+7F6F/f,0K:m(K Y$yVV#Z6M`93l]K~`cmmk}Zps6G,2'vϴ,w%ݴV})m_!<+W6C2P\5J cocw"#U(¬_/~_e/s濢éh[izu7l7}O-7BI'óp)۶^~:ΥvЌNZ;xoIaU 8vXHWJc|zKvO>G 2+tXmn--J\"#_3̑>zsݽc~W2;i>:~o}VI-unjӵCtrG;yG1c%7%Pi}+=SF mo; W*>mw|۶ҹ\kg]tA 1VKX[>>M%ϗSIE7}_Ot/-5^N/ ?GG4bSR[xoFoQd+$rGs Ms[NuD{_Mv>H5p1JOhZPH[M}.hokk/<\}vԩm{McY'~>1/\ԴwX$>$4׷S%?aݮ.&Άgy<2Q=<R=zI[]c8h]-oU~/|uk4OXke[]NTwz]t#'9=~kϕWoz ԲS RY -yۆe?/e7Oտ<^{ximķd~M_-m߽u#7%sMurKsKizhpڅYXV`@m~UG n7 eUgi@qG|Ҳ[vKttW~~eۍjMST -1[$r|sc7cXn<~sW|+bl&ץ2jJ7Sg?;jcH|"']2[*[?~5e qw*2__o%}joOD&Fs̞+/__/[#Zi^FyH$-m`HH[3cZshu 7񮥀s,UT5s^Z>.Y %z6S3mUΙ73c&>ine??HƟfvl<{6K9W%oH4_(+r[~DqӮ|M&l/G[9'ԬWX#E]S{f-+X KmmN[g^tR&8&$ o2 :ϑ>wF0fm6ji.bKuI"<6V|ͽ[w:;~?7~#YWvoFژNU-]nV_&v|sT<"zu} ~?tV>>ief-ae]Ju՞Kr&Aۿg*P^شmFgOP {kSm5{fКov~4GS%K13B;d}rԢz|O0m=n .1awm$;Xՙ^O3cwtU7Δ";KSZwHeg[w_cwRrћ dX~Nӆmf^FV=.Eh2BbykmHnTYO~W|l$:$abGm {QQvnm]$f27lp?zǭ4ؒڧ[WQIx,h,p!7?Ii~nS=xh&Mv6d;9滰)uV u>,;N+}6#S ng}.o_os¯7F|_J+;Vf~o^Q>} *QK/>}?>q|ݵY䷚V!ʮdͷo5ң$_?ˬn#n0t)ɤ"&ʠ7]<4޻Ya9(Irڢzw}jt_oY>r\\k8w'ֻ"O_mإ>plg-q=}z 2?Xjb>^ʟ:"tm֞"K~}ckϵFKdw=3~O:ӣUEoW篙C߿xV]ztq7i_{c8P߂>kqwz3ɛ .O7= MR8pcvoց$ŨFڡLs۠_C?\Ro_䲯3<e~ F)g"4s0#w9nVb#OmDAmmtKg~S/bwNwmuh?,)?xcq𿇭2dWu6!?!os[V,pH?ѕ~N xYITH &NC*IX?-]zz_viO>_Zouid/ގe-Eq~\NKX_*3qj|I}ڄcW3\G6;_ȟ?7ee 7KnY,Ky]OGKeuVf}/o=>.w9!ִkE 4si$k'YczVoN7gaq[NT/VhvbP/2[͵Ffwߞ?eыo; x/ׄ7]NR_G1YH|}?尩 Il;sE馚|Icx/B,ImqhMͼ-vL,_{,drL5)NVz~+4!z:[>kzde .+Z:yr6Ւ}M/򵭇ZhT7W{msX־ !B|5'ؙv+mn(>x߼B4Q|_ktov˥t@%ʬ6~\0ܭihMSRjStۭNJB+k&ٙ|w||#/pyimjcN[jrXw}Xr4ytOW4#'-:>揓<[V8.Nwom#[kvmۣU] j{k߯M h{ߌ? 4+y&k&ey"tc?\VO]4I_%Au kǸGMo{/{6=cÿ{|%:6^DT$_=oxe!Qkmu~atK{y sCq5 2MoG_F)d>Ӿ"xwGM~kV:sO dVY#e'J1MK~K^DomUiPk ax q'9|3]Z"5:~sc"+bO']_r߭ i~P /Mm?oo[F2~fo_VkUy^\)/[ϯ$ze%՗|1s5ArTpZ-!uk*5y~8.6뾾f+YѤoE;'N[;-.Kk˃5<̴^߯g?,:_:k'ᎍm~ŬkwZhZxh;;_dyry'7+7ɯuzmy{Þn|#hS\jg^oj$S{0nѻ}ˏI7R*/vM_&M9I79d<t~/#3eOâ/co,cdYs6o/]x\u2Ibfw79OhWPi}>֓m[<`f؂H͉YZI+k|~}A֋W5ޟGN/-%4^ NX_)_ZğXI)g^)ǒ_Q|Vw{_zįKp5g~ʲG.a8ˇ |'eKZsJGaO 75Eni"w1[?B'{XjPqڷӽuI8Ek^ AӮE'yøɽ>M{:?9c4_yXJƏK_%ҦeCde3|Y^zr=?>g|q R̤˹w˗osK+_Oc[G~UZ# {Xn.cm64_k0ryU>ۻ|c!c&׊XrmwSZe~g|t]VC1eh+1?վmn_(Nw~ZTӳzO^E( [ ~m\t:j?C~QuB["Fcf +ߵ>/K~N/u;i%e^*p{s98T<,Ҽ慤` Gɸm:y泟 ޯWԧhUو$?7Vf uW3leqoX.k5k $ⴳk4e-1T|G֝XIٵoǿNȦ!IRG)1Q_ un߭G%PXx,*ԛ_`\dV>_ns]i^Jw۵9ݜb n~CxYF0a\rv֑sY7}͛[n+cγ=nx߯jYePg{2M?4ӹL[0`DeyNwuW2$DUd !'bwo[>}9ZW}_a5(I="țs,n6_&[~-f\-~}-Ju9G %S7YM~5ӻ`?wXua҉PlN?+|Ͼ1LШ_w#um\* Z}uӌ;]((ɽkĚU7V-Β,~cfVjUd.N{_/xxGW^$H`FfEu}?'Z[ۯGM{1RcX.ۘtlZǗ~Z^2q@_%~Vz'e(F[ZF3IW_2D끴@^x;^^r^/kĺ ˀ=[ c4̪AףIJL;gidtVm]؟sֹt0ԝ_[P-[ZwFm ſMvzqmm _ɺHݟǶ8ΞL^㶟f7mBnslHƣ[Fs:(/I96N>ѷȑ~uo1w|+:<oNf {sĂDh97en]9'X_^}[ x9"՚G:퍖_%~?٭5^9#3EKqMW~oU_W]<58[_ϫ0}2k{"M7l<­˓lwy攜Z^:\ڟ,w׵z^\xy y;w !􅙿wup+;ѓIB}x^3}xWbWsyr.VdK fЅkݯ3HNEp 1o_UWoFmAϧs)pzsZckvzΟskKlmSTddiռX6{6w][linlѵkIH67x>cSK^Uf`N_r[Da~k+1Zݵr.d[~;[d  +ppnkfN-oreS/O]sͼγ͉cV\f>\nuO6"{]L4{'xu.U7պ|fiܫh.LLpw.t=~=P|u6Dp: 89++nΥq_OT̏K xP-rޝkWIѿo(T8 Y4i i0@yV5>@ qK/KG\xexAbg`[TG%}FU]w:%$^bi*[;yŶ[i:X_ƑjEQ%}nv|ܻO&TI˿/|m+t^MOtd-,(11_n-NU)_RsM/u{~[~~kn-Z((#ډ#|͕oX7tΊw~\cRҢz_(rI}[Id lR mܻ~VWc1 i';YzK6%ts~dk23Z+lo2E's|߻?Tm۷o׹sc##,H$:ȹڝk)sK쿹TTy_ 4.&V,~Vm'7$r`{m~~g7 i_mԮfK ŶFvVe7t8{z~\(r 2/VV/owȥ*vg~)r%mt_qcӑUQv󿏺{k8>n?OO.crG(;qkml6N+oE3lt-$}M+i#f]y~mJ[[g#oBܥ1b "?." >QVK_-~ۙ)_afH>X1`'ͷnV|ߍU9(¥*R/"8y)Rs0Tzs`޷:OӷgX2ŵ|~V_F֍?_W^k?d%(wfol{E&iiR|WrnF)I {0Y׾SVuj^Fs&7snqי+ﲽTYvtP# c8oU֤Yy!\J2Xg?}uSG twY4Ee1X̻wrnYMT}]ѧ$R2*E3CˀTܪ_POSxR|޷˭Rr3Eyr+$ȟ~{]غq\[uk6DF}Y7K}`O",A-e3i]NYvI{^xW>0D-G ai6yo΅|]+jQwiׯs9b{[m7kSĺ,0Ϋyoo3m7wr+҂[Y:o5*F+.ktXבLm,o7OEo=^]vT[[rgǑγi#WHw:;ӟ,6J_AX w/m>cE]ꝿ9d=ɭ88&~]/˷9u^ΠZޛ6lPv;wcwce}i$gRIuO i>qX )=~ЩFK^u3?dϩ:8/ʻW &s§S_y lUޠ>D76wk?̩n[׍ 2]ƂB3'*۾o]߭LrO˹X-jӲ.R#o?h׽UBQwc&󖈰VWnJwI4m(@2i]{?YJ.Veo77&9D{7ovY**'g/裏Yqoq-mwmHc #|66(NxT9cu{z鹮Te {7_K޷Gmu `T^m/ޥJgnغ|ѡʑ|ۿZ>TP{߯?轢Tw)g>tUa >k~6iR]qV%w~uU?㻶&UPq_lJG*Mi󶺮~yP_,w$I|Mͳe-w}߽83\W˿O^r7vkw@ ~?ʥm^+oszǨ>mwz:9#k*NVw0Gfp%ys'{[^ni$\xoqӿ.xuNym)C{vtݵt)b}kO =ìɃiIϖmGͫV|ߣǯBmnm~r!bD'h kǟҲjWI?>[':bːgv[Z˒_o3Nu21tU ܺvu3['ͷwFKl-/upt _1vSqo6rBoGo*_5JbQU3W{҄!ͶNu<ޝ\U O0/m'dB=fLNʪo|8N +/Rs˫eCNT2mZ{5wRT0t oÏm1澻0VQ|ʑ[ T,EW#~?nt˱FP'V[}kTSUU^֨$+|ô,7mۜVڨTiHsw֥uı-y_p-3's0eU~OJD,{~c.b2mb;ե$7NAq%{ǯmsz+5!TUmĪG˷?XI$yU+EҊS/ Gj]_˧_蔒 )gdG؈QWspZtW4o[/߉#i^yt.[kS2gY~iWtݏ/+Gx ;( ϛ?};W8K-K]({y~??ÑQ0!=[ݺFבzÿ ZMU ]?-I/ >8g ]&v_ϊs5EtN{}bHn/恎ٖ=S>ӛ_í:VWtsmDtol^a ֍Uk}<⧎д9|pKcy)R 3Mo ;4ȶK_{7۹~}~|'2%>u԰礚mܵ$av {mDK,2D~}͕W9.y߶[<,f1FT}#$uoo> Hk^1DZ1&*f7z8J2ϫ||uz9) \l~oȻ{d>ǦiIPC{;m(?b8:Q_ pJ[vȦlE jtHnՇk.⯆-SUF0\~zwfXzTpPh귶z~:/%qZ;&6gE}h4yR75}~Y"ui86_z*F '.nIosgoͻ寠ҔRu$|h'.3}jkrڤ*\n.jB]6?e%_諒lvrIn 8Ullr{Q8w[6(];  L:mŎ̫M"Ӹޛ{]F9M kX"2,%UmkV~Ч>)T~=w_񌛓|9ȆOyd̈ۛnvJR{Њ◺חvkN[5+}6M*K?6MEg#*>ϳ!C[ 0/f_?SUҖI%L7&"|Qm;ƥQ彗Z8-^Y*EAYZƥI5_}ˢ7-[nb'6r7|?wWoW꫉p~Vk l?7IEޝNWo׿{!A ]ߎ*Non-isez>i%`sPWSw ZIw+yJJ(Uᶾ;W\{t/ԩ5£rp<ʙ7|ϵ/fU=}N"$_i$|F~,Mv+mzn*a.gm2rq|v׿][JoZ[d]VYǻ60)֚nZ7Ɩ'&յlkSmuq&7l]QRQϯ,2A]?e dk_G7wvҍIth4Rkͥ`տA֗؅\K6I,=97J9kYG$<9IŽɵ2uci.oXc{Q1We>!z6Uo`䞇@?ԌpWF~A֍0Rwc$<[8!M1!88/($yw?@t{wA?~e~vCpN9Sտ9͚Ei_1|,JIϭO;7bs$ODOv[>e7_fOB˦UվGgݏJJ]߭mțo/DL P9_jENq攓ٚGesޣߝ ]5Ϟ]Hf  ~ogM[}Y@Px$N~;_k]~.]m+=2 7⹽ІFy`rWz[{?? wrXoHܣqpmͫbq4nO^oד]gv~DYry? Q}N[F]A*n7n#yқboe#|SQo)#F*Źݭ#%ek G}su"FC4dGumjY~] )]~zw^]u1v'3"ź4J^7^|n>va+T焻ݦМ՚~=_<'M+^ԯ<'CXO$Uy2,tw^m|Gz\Fܺ_yQzK5{-HNj&om/}eGe޿Wփ[Rg}I=fȄ( 17.b[yWO3wǚ-/;7Ut濮.B:K|U${#FXM-QyDOɩB料_zڔ׭<Z?|0._ $gkhdk{~Կ+1󬷺m!yJǯ뽛TI([^~~6S5oP_xbm[Oty$kgڗ7r̋d6_[=l4!e|Soj|.yu+5y#m>mؓ;}L_]kw0ʞսnnj:GTߩzǏ ~Zv1}_լFHc[{> k ; [l)\5+\wX1zǧSC;Ggyc[wԴIo繆L5fWΚ-߼I;?:2֝M/߶nmxuhK:$v~ %<+C:n1fh_d#•>&V^ͤvǀ3sͶ4fOPUY]խ\é_2hQ&MFhO?DaMgtf~_ gKq}&75+/Uk9&,v?h> MqB\O|3[\f#iPH³EZ_RN$?8.*V[`[8ma`4T$Ga?W mI.B~=D0)ɧ@A;| ~njӞ٬ԚtV>W,@Oދ9׽ț_?m5!#=OO}ߟZoՙGf9u*9gד>luQ4n_Nܱ$>>7=ISoܮe94'vp70;de*N֪GݙW~]g^РtvBU\J|(}:v_}8MORm&e5-?=*;=~y9;/v٧P&ݺLhaw}u>=_ȫw teI'x|,>=$[C 4뿟)7b|1I-pvrn&o?IѨ_ t{R ?. L/#/ΟOյz_-IIl|+QZ^b#F uNKk>Ye|w?ÏZT6wql,JՕqvĚke}fAֿ;<ź6 ֗#| lԸ_д/%i^ke*|ꥺReo^SŞ8O YX׀uh#[[=A,>ݩxb[[vk7Mfz$\m=ږsTO^;_w975 '%& 5MBͣߧՒ㸊5+ϳ;ܤ+$q{!v}>ևD7>|{G5/1ͯ._?x,n0OL)FE-Rz[Ԇ0n2mtW_ SZkZߏ|K.=3.jPoM3qRg=|VZW}CuD<>tZ%yon4sy2acDMUjVdݶ-=z?g|s`h3xBܾ'fcsasGok:~$nhnlFJt2obUm8zH2clDi!l7w?ޔ%v9UT$rX8 ǟ:d yt<'>˧MwRݿyֽL͸6 Hu86zw{.ոe^>!It}/u1]D$^#gɂ&e*;`ףs+Z3^Km=?.o Ȑr\=\3vPﯪ鯙E$7yh uKqy'Q,$,?b/m1xPWjAsJyKq* ]+$ZG4w$]riGBT1Q4c <],w=|siZM~ 4OGԕ $9VO kp"u8^t;Ӽd*7Wݵygwm6v58~줽fVz[q'k_M z^{~>OTz?ߍ;o>.dvw6>7[+ |I圏{s\ 1.ȷݴZ駇r^qW_ ~ xzĪ;n}]%ww>Uw[+}Kifg#~mq]{֩m|aDF[pv/`ׯJrnK[f#x|{U\)mp+w˲og˛M~Zlg46?۟澖h|߉&jN*TDiy|]{9S_~fi3X=EN)Uq)\޲Vmo?wWWu榷_5vGI &u=wgՔߜ~| p6<= vFyA-7]rGlɵ"XSQnvIRog}15+o^!\68%|oNx8^+x{4wjXSc~[,ϗe@V^moac1M  ' 8[ӫ׼mݟSc^ZL.;6IHkƩߓluFw~SMZ A<\j;kTY:.>c[S O}7ߨlp̽ﯻVݕo[x|daO\?ϝ_"0I``\÷IOo&ROo㷐 ɻ'";[o^I3)+zdC ONs+\y.% W ).i.#Oڵ#ksZry#U\gru+6lԵ5) -@yY&^/[w{Iвcdm7Ud˳sj.um׹+_Gk<{Ϫ<707|ݱ,ە_}Dvǻ֟U{)'I_(蚅׆F,'.Tw$3*]1Y~O'=*UUk[oNypm~~'KOXCMv,v;|͜t&z_yl$R~Bgt6mf7m+MrK^;']ir|hoH֪nM&k:Pz?;oK)+kO_r:=TIakV!&ߕhm?*sZױ#zC 燮_ݝGNnoeG672x~qpnWﭶ}NUTRW w;MFYZrw|m6|^W^z__3 Ϫ|F+-.E)4ϵf]q̎+=&-AMs%_ hZ%V4]_슓 Ysni] ϻ.u+w_s7_fMkΗN"+)\pDuWN>ĦҾn!RiZz]%$vč ^K-7 -MBdfߏEsB%w~~ڼA?ivgjƟ8utWEoE6 +i~rKXϦ}C=[N5{_^ZR/̷*ft}޳[_٧2c']y~gؐ'%WZr5V6Gy$M4vq֨m}}n7)I^t0U^WE9Վ[i;l}=<Ϟ2vo};N32MeִfY+Z2B>o2OOu)&soAGmj_يRJ+|ѻ.ܣ;YU$o-Ш}̊ſ 6Bo4&jwfmuXҥ4g_9dw x?~$ޡseZޞeԭm㼾Rk[y#.K|$ޤqx-6KLtIު;.~'<i> [ Yh&Ll!D6n?2Hdۿ&jTs>wB0TU/|=OZ^kV.ؓy-qȰkpKoI|0o3dQ9{`momRڷ-V`x|Ee}o okM>enf7|7'eUi'wqԪ{n՜|-Ѽwh[^h!o 4XfY;Y͵~x^HիByiݚ{SIl=;;~G^Kooi]vs\ owz>dy|ѾxzڌMK=ZAQo{6;'1rI%y9*ݮڞ/e(Jm> ~;w8sgf׉> jچK?RW"Y..n.]Wb@>&ě0!R4䓛.^QIKSM~7l~N]Ru߼S|_`ҩ/'ӪEhX9 |DKZj&{8*Z?>5ݻE{עwv_WFW|e͖o3yK6 }?wTT7_[L=RT@*w^=?sTw۷RN],]YLm<~g,oR㭯o"e'7ShjRYf?!;~6󭡉qK] I>}rU'o/NDPV$)ۀX?{ZŻKOǯxIF+i'fJx'X.e6PX$3-8|޹?Ʃ+5 2ӧ};6?:"obU LW[_ack_eѯImo" ci?TPJ?5»7FJRhmWW,Ld=^pmk5I$L;v2uԧ+8پNr1o0o;YCn:ge&7}zkM/])]$Ң#n_+ooXf ;ܹr%jn6M5bVei?K'~F4:Bʩ أmG?./3:=>+3ay}5ty$~Tyxy{(T|M[$絷yC;&]oDuYQL̥c#b[?_*.MsL àԟP>Lphcڬ7ݸXQmWftUyW+]qYZ)eXЮM7ͳej^#M:O5>W܊#1]> K?׹q^;BayDw)>T}(K5wkkM~]!XWfX?~?ӯF/~_tx~ǡA[wغp6rswry9z/9^~e; {$ȗJrPYT Z˿[fq_^B[rvy'ۗOR%ޟe'-$ 8guEpّUJ9Nz;CY.G|IxThm ﺾ1S?vRn+G_VejWYy $e]6u V_=|LർV&,o^k6wZMvF#"Fy,",bO?^\V/_Sh8?އs5T;"hrpeˏv8u99-Ym9ǚm-}gO$*T2O[Sj?s7K]I^->p4sI4sH qVZ7= 4m]Gi3iYڻG[3̋WY<$gw~]5"i7Nk!]I>Ilqɿ?58o/OTK/W{z ?O]Fv2mD?6{b~]*QK_6O6G̗O|= k{{ZOh5ݼR`\2nlm'-ҹݾGujJMYoZCj%! kHUMilޏ:>WZ/GsEi=n߿:WX5}%B_$qpTkyj2O?My4wo׿p}J*W7P"˽1Yهxo1yEY؟}rki_7htJu+跾[OXCУK O=ż·>eݬ-kF廝"qxPW9~]xg/uwߵ7φrֵ4/no.eiY\'ыvnE_?O3wyG.~*QU*ݾϷ;Dtɺt̍nVE[km?5{<ђQ^tAݻ4ȡm$Ӌ)WI^VwucߚTc{ozEi)A/_]י To(x.ݱwny&Q#}uyYnC`.q²,WurgB:No_C˧vB:)ӴoⶥGeT~ۿ6̫ p:|bHD _ o1֪/;JZ. '>[~Vh|???Uw*u?3muFm4}Vd6#|KܤϽygmyeb(F.澶ꮣ-㔋ύqp_ߛaY2۸RZ7yȭ/Rʌb!er^V"ګ뿡Ӌ|ԍp*nOVʴZB BA.i޻w?Zztԗ7 F00P!g~m&1Q-nTFI_;dkr{wLy_SQ(קEq$Hn3 >XmVr*rkgsrR`T7**qio]r/uku^~l[+fIВM};RKT8Tzk`d'z`rͻv߯Ұ>75:]?m,Y6#/OeySZP5$KD{XRhȺ`Ow|̻]j~^~UWrr\#$yvEsUO_xA)?MKM$}BY"AYǻwI9=鹃w?O%gгow}0DcXx/0 66Wĸn]Kˉjk , q+Noλ_:\iP烺W~~d `dj_[j?E9ɻ23S$chr_!%W2a]"{ov\hYemx[v?7XTJ*>]53W{`y` ۞6ڿysڢ7{sN\&'8̨6Tm岼4V-ȬJ9v 4oWVOͻxǵCqT?ˍ>fh2H$ry<_ oߔsMZg'o5'At.Yw: ~\|~F.[/sTrZ^441+G1ki{73H6VKFI?ϧh܈%gDefo/HoFci7RvvLZ&xc [;}Z#M7tޝn:Juylsڶb(_ERyG$uPfG [ܕ]ׯ_?KKXDŽ`U-ߛoSzØ:j;חBgFip}k2]~{m-on|P*T/8<d[(&;ߦXbqx%f*͵+|_Sױ:w:_;@:F 4\ZPqz^s5#(Z_-2Wa}~]wI[޽?=|o¡ (C)3[yNqY:q_O˯a򛢓IlKh!6߬˘g1E2G 2/+s|湥-t{uOsu{^_-5_S@nNpOO{poRyu2[hxV0e[v g.MF~eBs"y~&׏O~Az^e 8]3!NֹJ7K]uwW24.<;_?d֐S=%uZs# OfTwuwml/ܮr1К|A21 e.Ov~][hOWsxq ܷ+:yr*˺=>geo5;e)b<́;̓Gqo?ӂM~?"U,^#rX!3`gww|ݦ8nm[#A `U?pGBI[wolIdJ}q5NN1Sׯ-|g2/Pn8 ~VV.f~+kݿЕg@yOrZI嵛 V{`NQyu}~R Twݎ(-m~xrq>_yMm/ml%ݼ6Q07gf?*IF15Mq+.i;kc(]^>6ZHpķ~fU7muӶ-_2_#ΐA%vXP~]|guRRko翙̧OIGKe.:YVe_/v#5Zoꬺq'mg/.4/Gum:fUVc wHw$J*ets (z;7Oc[M?dHG$ Iu}Ufi12h6di?ujI^j>:_+KJ}"k)gdFrnGYOe6~ODg fZk_Na$˶珴PkыX-I^ od_ھboټyT1KYaݛ}_o%ޘm͚ Y{w~U]y7x=+t%ttg۫og=ZiU-wwvWup[q<t[w}]a*qYYR|= ˧˿;i)K."H"d0H *$7I?}aZnqR_F-8+ɵN{ -h'boWg؜-ER Fg=^%濫{-{P[R|cd[_3mm.l?miFF84%.Woǽg୕u;qeͷbI \_'bszvic CbO~ {\]v]}M)N6^?^w5Zu9WMy߽֡_'$W."Odgr${_o>z}r<{ѡKv6}]j6P^^z鑷ěvBY٤UW|MV:wNi&{=o> uV tAykϳF'ddDH׏ݿqEeN?Un*sM=k"9ZǖKos!H N3_.1iůկ+,R^"#`[c74ܒ?$Rl동zyz4sK݆"T>޲57DǙϘ9(i> _r+y/_Q]9~ljQF%]? QTDLe'{Qq}~{_=J,, p]~%(kWmzSO/#s^SvZ=\]\];Pc0Wyzݗi&z7YUg$><.ԧM]?~8Ƣi'Y>vyy/7zeK2CDRkxWrgb.қg_۟.>g>*tITTNY%"3{O}Ucu(-߿4t <KO't=[Ƣ4R.YW 4r}펓-3^}\>' )N϶[:v'|T;S[Ś-Jl]ikyn܋c4rw[)̩՜h&ݞ;ڦ(ro_>W?~$ZKfWU #3+.[y?.?w'ę6_QQ*ٺnH|7Ϩ˳ uiU.[%wMh`+ {{9㽴?Ż<}klf 6zwl{+gpLv\<[eݻ:rk}7=2 CNeϯݩ GAۏD*{mB&oǎk%߇'7:D鲆[6v1ͺv?O*iI{~K]_ܹ]iڒIin]Ѻ/U/g_ӛV};km6݂1-մ/Iw_iWᎥRun˰|2jmIƝq5,fEo?!s =7k:I.PѴRtXJoqVOg[{sϜNVrmO;y<5-Vx_cUˢ'ZTRKm:QIZf]DXjCpCڻm ̊U9\RvW Jɫ`3{ϱh^7d'S#un wlDݟOR%Gt_T9gxW|V<#<:妡 a\_K{td7Iw4U5um;zqsɭy>p⯉仞kk6k=-`)o-楣M m~{6ikyB;>it7߇Yk4u^Z\j>7}n%Nc~ }}M%u ~1]i~%h/;4Oj=S}u An=WKgJҊ]}|vIҬŽCahi$U&&#U0,qփ?z~}z3=oWx|i̅Dh.'<14Ƞ~o5ާavyԙu{Ilu$J E-٦qlFoy{֜m[ wl {ڬ ;r8nC8={tҋ/|M<.+=y0t/&_yOjnk\;njh~{rrS 3_ey>n_ڭ_%ꚈvV2FItgfnyKey25㵟:\RZhf-2lF͉+vQ¬y\;kIQt֋Wb` Y&_ty.IX^&Ly6.&BޏʬƏ^ja+1䫦ogR4}7_MhQiWa"E$g͟*qOu:w_w<DZg.c:R^k\#t=V%cwo_%Vԭm;ĿMj' ږe$ \Ύ9276Yu=oߴ_xxUSo_mxCMψ!'ua $Iqqo 8N|˕HWn_K|1gEusêţ>M6v4doڦEGN8?9bQr=4_z?Ï x^=^|>G#@m?>ԷXDz[.ț渏_VWw{Yܫ/ړ^%G[&}xC{-KOhyFM5o3cɿ~1jSQqjS\% ^5D}4Ӱ:YqCNbiŒ[o=ow=6~~|@]|kgn|U '"_"kygo$Z5^$6i~E8wSכM'J2eGSNDy\&״ >NDUKcܢ[iusqqGDzsr'[?PaA=+}OA]3Y|1M{[@Iu6l&kƟ}_M SGHZ.c%7V',5 VFݤgofQn󬦸I]-7xG-_Rq.OWZ:XFsu}m#־-V9^5{kfsC#$|s;>:5|M,^!I˙kʥ+z43R.Y;_֤,.?k+mҼV'EwDhec@"gvRʧ)fQ&\.kyPvIC;ۙkҬTo>F*[{>bgm5ܳ4%F4i$۵'־7sMw*grWQ5ϙWcOo}5֡oe39>|Qogd#'kwG+''(Zwӯ[M{js Z/|g3Y^]z#ɭI''S{o"3JD$T۵o_>)vjt )g]#gOy%Ma)L]黍o#h_"Ojp (_/=QU{7w~ՊRd[ܖ8ivwd;p[)gr꿴\FwcWE>{7w|H#'JJƿŵ~}:_3z4ݭ,:Oer3*}͟zTZ׽}w_/`WVRއ^yb_#>RdnkEҍڦt?3/)Syu{my`ԾؿoS6fFꏵ?wW^^Vׯwfu*?/go[//)bjrF.6wwV 9nx5Uo}M؋/]i o[jeőϛOl̑Z10bC }ܗ(v~*_ɪnz>6>2{-]O<Ki7\c3\J$fM/ȟ^+8G nw{4si}ctn=7?kIŬ[ym$o?Mq, ~NߎEњLjDaGۉu %OkƩ G]w}NOMSZ)T/\dh{n[S r;@ڧyM\aק٘6QmHqG5NZu+Y.>ؑwaw|gWs˺wU^O}81 :owv*|^u^Xִz]z3O^77+;_;G}%<2?-JbR  pI}9ֻ#NI%~s.ʟ *6 FFG;w7keIumcQMM 2qþqҭLqGzQ{O]2'kϯ̓P pc!?nF_]硔V__~D&+3sv9#h8+^ewX@.^kR=>:nf mی~ߋwn:u-麣>#,yݷ;ndt_/ǯoFW'玶O&C7#fY}گǖGaFɵ{[˹i"BKnܽkng~<=-]:o$(` ۹UiZ)K{op!Nz_ϧ:Zktfk(ۏ_njB\ϲtX7ܬ^Wۭ4޻"X,/][FKQ}e`NR|T.-VWU uK֪Ϯ0;VL"ۅ\U?;~?$ؖ k%Tѝy2_|U$=z!`L/.ӈWyp~V{?2d Y$$>E/A}u+[˻?l<_#cnֹ棫itRZ%5[kP7y[FVEn~uTz}Fo[zt8Il#FW䌰QOnv6[nP<5 eEvԨzaF?9˦,&frœ/k|OsiY>w!9i]3= Ȏ6169޴,V|VLmz-I$~3ּ2~ME͙U*G_c6~Zzu_>"6񧇠ERIoo@[|[$3?4;>mJjIRQoO5 𵱸MoIg{͂F*͵we*Z~LQ/tC6M:L3?&dXm7?"}zayEmƛFcGٿo~_C^:I[}15&"{ɍdO[DwVu迭YS据׿x.-~K>/hZiY AGytβB~W(uT{uTw;i6zNcþ%Ix[}2? "qwkQ6_c&ھf𪥶7M~-^"W>%P}xhΡCL[f hZ[5F?.иI<TWԩ(~Vס9^ϝ'RI(T앛qNٍ6>z^-ϓO淦|6l-]}^yF~κB̻ݟߑKROD6ֲ+u^̫^>:rAj5< 5 .|}K\\7swc}KGHw؛|,9'[N{߾畈* ꧤ˦]jps]+,76|22YT+vO])Ne>N0̱J_t| /|Ϟ.4'3__'׹x)b$Gʬv%cO2ߏ}iZ_>ލ?4?Esnc7"/+8ow]|qy|o;UJ7z $+f?\~PO˷}(\oQK8]9yݹޟswZrFR+_}Dy"IdXḙH'>M4G]NU7Iq7db(Ee:SvӾv;UHI+ؕ"to1J[gwj_U_^)*lu]~b\?Q/:ϯBbVG ;'F5Vߍ]4➊?S}'E`ʪ:T\|wiXsj51O-gN.Khlⴌclh>Bs[SuVc*4iܺ~=YVOڝ"*mqrپw^u)BG_|ϩX~6$nL-Y*;}*eN{|^u9Uoo_?L[{Ki.V4 [l ޿qkʡ{0Z_]{xE<9=b $b5<ɡ w)ؘW"r}6*S|]>ظ/=FI `*ƻY6Uy M:qCoͳ[ osrfhՕ&i?K[}o5oޒw&\ 2[S%vݹY7UӌV} R*ՐoܾXՃ m۾*0l V\]z+[XbwmI$AUȒn B4m~M>$ژymȫ[r/K:m;[W̯- /- gVWc/Y 4wqktlnBۀopo(+^sEWsԬfn&K+8ygVV_|*}Os=ϧRu-RqI#۷?zX=U:s{~75Yg`T ow׮?Z/e9%ۿws)RWxϷF}ݥR]:n{{ap-_2YR=UU\ '(뵟}k1 ye|7!ݫ^9"ѿuAv"4k9;Uw7+֊t5>JN3`]X•H;դAh?Miu+y_3tT*U~fmqZQ]swZ-K;B]fʿypW_:]u%{?ˇ_mCrEnV%q]FLѲ˒kren~:a`^xzMKt"Evubq.w䝿R{"[!$aB#"}7nIuMV{[ \Y%t*|˵?|BV涞ww7M_U[Hvw.P^=ENy>uZ1Լ4AwcUu]wSY[I^{?+؞ള* /!3n6Ai}Sqr7"8LjeeV=w.~|[K_U:߯'Q"ev'9?2ݻ-5a}[*?/6a /_5q~ ?y]FseVqów:ݏY{SɯȖY#[. av/U)wg 8FOV>-֯\G,O:+ ܫqGzX~l̬ۂ{mZa:N2V컅Q]p4#m ݿ6wd2* Cv)NoTb7 z6ޅK5<*ms?.ϗw,a:z~ &Oev#Ҽv)ZWi:{lKٷ*UgvӳaRbKzzS{87SElR;`d9=?yQI[:qI쯢".r۷M2Yo ?-,-:\n  )[՜ӅݓfK7~ݝ՜c@$XĻP#U d]?'tb&Miu-%dHwսzOky3kv$j{ΣV& Wף[HnʀQ<70Vn [VI@1`..\ F}vD#9.w4nt>)mehn"_+mۇU֭C<[q$7[Ec2)v?Ƿ<펻(-^}3 U3l.{g3:qXIs (HfRT'˵~m۷3qn$ #+[ ȧWݿ@Nۯ҄c|ёw}ol#iHBB3c֦x'e}|}{+]p\|̯o-GIMμq#{ {RkKV+ &\$a?ɠ; ]87H;K&k<_)$}WȖ4[8ʃ]^W޶^FKk|wnȂ<ܹۆ>})Atv,LcEI&ouͷwҲqQ?|'HJۤٹ~R;o9^Xjo/HyUov_Lo86q]}zkԷL 7V*Kޏ^FEY|Q< _vWIomCm2IcEo&ķYHNy?ߟZI5e}GjUSe8mUknNZݓ.O4,>x;_K-/s [?')d;!_X[4̶*dd s__\c[z,(IPO i[]zv)Kpe]Ѱ7e|coC++[KX;;/L/G5*w}NT-;u,j̬]wi]y[Yr&X.vݻ NvC???CZIDh lP.劆&{zܛMh~;~"J 9Zo狿7"y68|wsogm7&6):c-<+7i{H}^ŵ!?.pv?M}RۿY|NHB?j=q2oݗO$P{ d}=NPݶDk6kqT '?j璴G|o%uʳnokHu~ϑ${kyw))!yrNT35cJ\%/Dא¹ry`@ U~T9 C[kׯ?19\ 6P'Y՗2Hr &  ۗnqVVz'[tSRKoт7u?{H'Q﷒ع˴7|)_CYFѼ5w{$lO Rb $ѧ9gU9r׶=.g4鷟cּ3iiaOf<ț>uz,8I=W˯fENOv?KY^s+9n,,m#}sv`orgWmȍ^,˓)kߙV+wlEi6`l"2zOj[jyg8>}Bm&>[[-TG&ṙm6ڥo]0W_vRQɾ_-WOdXܣ}ٚh4˺Ob?7%y-I{Nv{~k]IgZc\\ZǽhWdSH\}5C-֯wRn_˫4zՉ+lj,*~^( \Ν)J?35M9 o}|W-ahO߫7f϶/s[oCe11wn|DMƨ$w:l0p|7\qhkRiZ}V%T V:[]|սSv%ԥ5=F]1nMΑJ1JkGb4+z>3 $]Sė^"a/[4Z<+/#ڐ{yiYoӥRR[[8eQ>w<{{I @Zi0ɴo/ޛkn~V{ OE.e/}uU_oeG֢¬ȧ}-ɧ=s;Nlf՘%+ksH߄6%;[%͟%aW6Wׯ]^.e]6cuƗ<{YPoݥ}% )$^1&޺='ڶ^}&T[/l/̾ZBHiߙ_w۽ u!SMw_[i\X#>ӎU|~m{QjroUo]-4ޞT$+7' JΤ=ײ1N8=3^+!ybuN7ͻ6Kwp_M JU(I.JiMk [禺uUܲDJ08.?v8r}䓨ޛz-4 #f4eSnֱ痑s;o4y]ѧˏ6ߺ3-o{Y%; ^ӕmoS 3vyy 3`@Ϊ9]w8*' Z/_޿W"[2]X79#nw;uzJI٦?8=O+Q-ݟ-]?%:>l{7Qqi'>3Rh%_ =iʒW~)>, O<&:c@ _cO:JV|r~w;z*R~_𧓝FC`?7c)s pp1a~_fw{eb@Fq׶۶i[aXLr?/YO/ĞWt5+$d}Mfx0IH)>rG><#;D])n8F; WZ۟7*F_w˒DasՊ^ l>Wp?lz>٨RtH6HUSR?ʴ7 BfZb2X ԷQ^vu(J]Z ~cռ3qȚg~3ZFF۽&Gk̕|.\K/RܻmzSykIG!e&9ju=^/j $j0iݵT˿1$~s(̰~Z*;N.szjz¯)'tYåk2jQm6>wO,lσ8c7oNI]hQzw{iM]4=cujHR9$ўV7L=r'}kX{9eu']_f|ߎz]ռ|=nOϙ' BWkoĥK=>{s@5h |& mkZͭ6սKvEM<7̿zNtzsāMWٍv {cJRZxrKԶyc8?V<{ol\K[p.rx_˿. :6ވs~Y߲gM!m?;)'s1u[];n~|~M:O0ˍumՓVv%NgՕ0I*S?{H3*@ۜ+&Ӷ;U_][1Yx9f*;4rKfroGcʖ6ڈ؅)9VOMOZ0mmwoRSLiU:R*g 3/Ш?n`j|6ag۰Veo?W|ybx"gXE{v6lwwB5Y3Ϯ.Z56ǾΧ=2]Gs:?8#gce~U׮Jwvg^ANWJ?4wgaehRQzxԘr?/h]7@'d& oK} #m7~Nu쓖kwwW{GU2~%[617mY~oo\Ik2M??.%Hy 97ZuN)$޺ۯ_Dt_-me>&+GHѲo5yn?{!is$MiօY8>Zֹ(ԅdWާdG^|?ww̶Rak;[[ˏ9>aGo/YcTe%NI$/?MំvNki}l [Q:}CVGoZ?Κ:nvoe}OZ[}[|?|~G~|8=>4ZxcÞQyiXjg?9h^q7_Ua۔׾U'=%3j_Km ε-mgP4{=7^K+a[O.̵{!m24x+)ҟEiwۧRNSQ__s Z| 5NW-^٫M, #hæ̅>g?Xγ*4\RՇ$zr1a]?F<5Ʃy}}niO 6LROwl*|w{hWצf4nwċOSVi5#MY&cgiY2jy؎ֿDzu+{;Y_E'}O!f7_KjZN%Q%hZ]5teOor߼7>#<%edZioߩJr߁7x'"]wz+dD?u=6UhoVmndyJ Z=o.;.*t՝;E~~3?_mڧ7gѵO;Wͺm[>Żig ǹɎ8F ʽXrN2v뮿wi-'>4]xUn`awvS·ZY լ3G=.2GK>K^zG,q[Wr/##w=~0xw_mk>R|>tp܅f4Ji8mogwc8/_XG^cmߗgf^>òw`c#q]ze4vwEoɊ\cGx^inKfUX1H۲dv5C EE._'zwlm=v%ﭴ_֧N^u99Ty#nﺬ7Q,4WOXɽ9^oDwds*mˁzYfEpfPme}M)b&Kx )-4&o]K[o-ϻz8;~̩M|] ;&/Wٽc򤘉"+5%m_1W8S]{~6>Źd,2ث28+Fە:ד~z +pڟ4;BUh+-"Jٖ64?Qk'}z2to Q!]#4rc *m{u9ɻt{t|Ud+3mq_n;Ldnf9ۗkdoI i+U^o~Uy"{1'eҶS$|?#xYr|=\$(f8ywo^YjiPKnѓ܌anb #3w4V73zc{ou_xٿ)a/̣o]+9_TOCʫ)'ɯv U6aVg}[(=ӄ-WNukBe͊1,atfVUc7ҳߩ*\;m!?j!OĒ|F}rԩ;g^Vz [-,э./32ݏ>f&?ZJ5}cx,>ʍ|~2䱱m*q]{<5g]-_gҞ]VE *I""+crsڜ?hc$?cGuPRWb2NFN V6W/G~%I'F3~zkdMQu|Gaع`y'^\nuE?(j"3go?yJ|]^u*_>}񟎒(Fu`n-?/;yu1J;AٗpUU۳r_綐#̯^/~'ɺ侚@bs'66z}k0U<,E{ӯHsn?z~O6Y-yߺ_E*; ևFiu}= h xoc{?.ר:M]w9c U+98L.$,?j%35;X˹KF5[=Ury|Eُ͞H?k˵2:1` v?wsmVqwԄ̍Q\vd-/|@١97b>E{/_ϭΛZws@;Mj|믧 ;]}̇dٔmo_ aZ{|ϤTwN|-srxI:WS_'G!KQ}qqf[|z;ovh.gA z-̿w>s}QqUyHuRwڹmju{|$3nYѕ)n*-Yɽ#&ȊB8gw]y[w앍P&c3K19ZG|Jܦ6飑7`(ܭ7-GGf<ٌT]C,ŦJA(xݿk)N1݇%[zM՗TR!i%'>>~j?hS^]z8/2>hЦC[Qr~w<9Ž)ܘܰȮm禎Vm2[4Nl}H~Q%nNAe[x}*|!'}*~`[<9}ow7H7wyjۣVdnN;"-h:KiЛH6ثx}~0'̩V/2N﮽~dO>%?[<7.ݟ?]4֭k}9KGg˩M]FֺM >lQ(|ɼJ۟[sz_2]77|6& S5|\1*Ku_?|ood2iڕ>LzǗmy~IVm\ȍ/'z{z-u4cMu{[]86܎Ͱ}+ogBJeVkM:|ZAO mBֲ` ۝ɿyYk?pufч5tjEn1:|?w}f_U7_ӽwKX2%I7]]mJ*~Z .lVW;vQNnb]܁ Gife]~]v?'\Vw'w?"M_E~wx~ n-fV>gJI|_GN;->,izY!_fWz?Q^eAA[^mfm^|k_޶,qeSgVէ Q7ҸfxU,wo:Uy./ij1i3f)>KyVW~ot7˻RaR>[()~kh-k({yyʱ on]vh-jPwFqwiJV2!"$ȏJ7yT}ǧI{Úve}n5nnfNr9zThy7gFuDį-xgIoiYUk-7wfi-˄Ys e~1𮝢B,IY}EVk{=ltٺHH'z;l_Ŭ,X},S,4gxy߭$N%E-^2M%嗀2tg!F-3K"qݮ'FR}q{->gů뗏xYl5~WĚ-͜M/nu 9ԋ,6pȿuD\r}qIz֦.]y^tNsLRh5Oǩiz}iQ} 1Dovo&Įe{sK[mɚSieQӚH8]GLx%ٵh㻳k_,sylZnr]JsVk+µ_|)OS߇?Xr_Rt}&#+5ƛ!&y2 W%h'[^Cth%wVҾt#5xFV?]RMGI5;9!I6̲M:$<3I'"C^/WTߴܛw{ߩb1T#y^HKO/j]Wԥ+L5-Cw׍ǽyr.<;dzSD}]ɶOkJymoף4ƞ$hH ۴z{LbW.M,-8+EwȻ_|cZkFﯕo{&xl8,k*힇vkp/gg9_徾^>O\b}^n=͡^^šh@nhV#0wߢ>Ϫ·Z_[#Y%%G$bDyݻ.zDlSQ7;!d,d>tqʸoۏ*iQGe,[I֝M_5Fydī`m\su_'L yx=Gm%j{]}̯-a*Iv}w7Xrޯ34ܟo.: L_,.r_n5F=jkՐ5s*B$9s_ySw_LWuV?S23+ Jw-}JO9FO[LF\8T>Vn{i- e4/7שE]@nGeNZ^}W]Ѵ񊽴~^ͤC) P2Wݝyifw`B~]F@Zo߿Dp魿wNgc~ d G_ڡTrII)6>l(`p?n]QnڙO )?uoW9U#rW=}g|[J* nJ[OR!-{t(5dcr~ZUlW_<f{Ia<(O靻+OE??6cW -W~mjhF24ʱUoWm)Swo#::Ըap1 ޞw5>[tc!+N#ʒ7Sj}>UiW~~eͦg׿jPK:T:95Z+'}M+FR2zݼNv5Lu7B6|d`~]ۆ99]T)E_滿3/u?Hm @jw6!8Uv>7T2il#JqMoģ*Cw2O"2~adv2ػ*䳷oZ妞١DT,|߉wevEٵ~ϟlfqr}wr-ݦjwڵ\{{ǚ\]n]G2cJoWClʿ3}s}c~_3Ji^R*]:%=ſ-u@mŤZ?~_?c*V^ևg($߯_?߰1Zb0M+a~ךUm;/&q-y뽿RK9nOG_*ἱ$mE^+Js}MU߮Nx٘P.x9JR^OtgNyR.mWmmۇ˄9|~7܊d۶djI%Γkgk)G/vbn'Lk.4o?J.;\=};Oozri{?^CRvK[{Cl܏J?5ت'e,4~vP qێ|ňۙ7?⥽˦~e5+ߴZ#|3.boڥQiOw0Et(H/[ Tnko?֡O4SиH4m.ۻnJWT7^7n5*eQB/Tmio̺;ŵO="B#hf܏|*z+{Z$.Tyr˹sֳJp{Z{kF+ooP_$?mr|Ѿͻw¦֚,|-mпٵ}֮y;IGwE V%ro{&B F;+߮yךYHmW vZӒ2RJmOB3w"R*8/Zœ`R0D~ .+9n2y?Y#O}ڤ'Q_u Y%PUdzw~oyvO73w~ou4β&]_ :2k5V *v0o?y\:|I''fqq t+f~鬕sK7ˮ~򆝨XCJmd]ngN*iE/G97߾4no#*[ P%Uw%~NMtuSKU{Ɠ"ΰ<C-Bo[Ê]~fu+hߪOwonR۾16c `2?FP???Xm/%3= yQ??M))JokiMYZxG4uo$e۽Uuk94ݗg߹*>k(ėWj.M._HYXQ-6'mѰo/Zks 5E+o[U7!uO6Fei~e&ڿm5/B\Wd/k[O32T16[Es] Rtդ~f9|\I&%n/=S?+^~ocŷ?3fcu @F<ۛooTӣ.bk_,r/%Fs w+a]7|;|num~DIZuP:m+/oSi]"Uj/2Sfh$i?5n _ӻ3Zߕ3fhn7$ 뽿O̕^%I?s0vѸ w,.}>QOFqm}?/r;UX cl?*f}㾳Iu~on7 $b+?MuWnT6ؒY<ڕ+~cQHpQvm?ztՑV0qmﻕ]^ ZڔmqjQkNGlQኲ`prF7e{^ߨRmrF N\+k&ykEQ\z9b3hŴ~aa•<{?ԧky.mN)^o%26a-}?yt*񊖭IyUCǶQȤޞ֕H.,J$*nvʫSMGe{]Ik_k?.DNC"7=¿jokBj>Cۑb>_ΤW y7YkeT~_zgޔnujnW&o3bp?~}ZTӥB?-%ݑ+dsjZ׶*2_>: (~diw6קzJv^y%n_L001|jݯ:Y!SXQfoWjCGvykk\*%ܶ?Ro8) xlr]]v!QẘWe2.s?[FV~]LQm4GS fI~oZFW^}L>[K&*ܫ68s[qH>YϫҶGaq+S|m999)=?_)r)/zrn68E`ۋ嗐n馮;Zv^woQwp3r?ysj߉d{Xlb1qqR7f{4.I ]:F !~f&kdkન/%+_R\T^OrI$ GrgEE@2+9*jڣ߽뺪ͽI*庿 T3Y$igzym2Oк{Iګ}zۡwѫ醴ly;|$/NK GwGo\*ӂ.?ǫkOR-D}^ \ۅƢ\,|G͵~fo߷=6ֺto—΋qFZzZ~b÷ h~]p/\W6?Įh/QׯsbK֚^kWuAQmc_qy[ S_ck)'+7徏]~]*6-С1!~_޽HiA[rוUͲ~&*wUc-k8R~g=mK2yrg?]?κoSzt:Z]h ߎ nofmtNQQZ]!W'j.v@wҴ#kUh uV_,9k5̈%RGH3cm/ɿ(s7#UWU|MZƕg4Umn|V\sj*lF"1+u=j8)$>xv,3i^'jnf>X-ߞ_kq.\TpK'.][Xr]4,λofIϻ5u#OF4薚oClfaߖ>.OKt];F.[R] %K.183FjЛܞ<]Vct]٣.eV3 XaՑfثmeorzo%NN3ьiE(ky-Qo`,o.m}:Gٕ#mn8Z'NQwpN;VN6s_t-Ynq6'_3̮:f8>_=};chpw۽' ҬWY;K8IHxOS^=ztO35/r~ɫ2__xeYMGwCuwWF:1$h"p*񏳧{oӾ5:#ğ%P9V7S_ϼ7tqU)I{H?mz؊|})ۣחdD#^mrGҡܺv2A7\.ao&CVI?w?tqM98ᅰrT_§Uuzݿo3?m_,ޝQɻ3U]ܪ_3zVJSqNV.sIܦStXt&I2iWѩ~UR*M}_v RxY[eͫF'ZNOu[gN{_?kd~avWtԠ[8Z$YXb To?p<ԖWkUq۹uzS[r.WU3/dGH(vۖ_Mê_e{~b$5}Z$KbxZ>itTȳnFbcQ1 .IvW:MEy۲nGoβ;mǙtSXt&s~_r=Www۩Yo78HY'\ oۯ]f}6:q;dq3:ϑ)qamƋ>1!]zſ"AυQ~_WH>D^޿g̿n^V"cpl{c:si;7!EFe+S;ʾϷJJZZnd%H@VXm@o51~EN}Y/tW T:7w5MXbA2C@lgx=s:cJN+YkWD)yc׮O?{/ErꗯߧAUUl'<WyGM<);䓀{r>ol9aQ~'~oAf武Z$M'9wvx[~_)h˃gzER7Q@8=ҍ'S8& )s[MR,?ƣn֤qr:v=r7ǀ;T_ΚVK{yW?Db7|ǜ g߽|7rI=KOfg.29nz ?W'֢}>(Ln9gjkTFOPQkϮbˆ;{P9SrˌrIz:_!87ϿIGϘSMIzu\s- 0Nd8';z^HRG6ԊG(!O7y9yQPr6֑D{=y=n d%X0ST7>JM=o,yki Tķz5vCEgNEdʤr1׶ oM,1egVs }}uRkW{3-+)Q ןgO羾2-;c$m?z)/o2o@`sz%-Q* =lC!5ǵD(s@ifC$,\G?{wqMmdi[Eu_ jp3Z͑$W1nەo]ԥ%(﹗&$&[~3|+pdF}2[Q'?iʯf>~Xr:ޣ9^yZď|+|iil|/K}AMa,׏8Y}SNkiAx֥>eͧ}?<go~:}o#dα^hn|=ˬ]ci莒~e^cX48JwK_~_>ڜƾ߻õkW?/ FHԢ+h+𾉨6,Rv*#hyks%o;~i!Yn3 Qӕ96'oym~]Zx_Nn-_ںt`1+5ɺ3=*+{NYB8[Ɠ{6>dԵ)/RgJsͣѳ"{ DFq{F14o~#[o lUt Ec]JHb;t73ly+ϓR[/ F?kgY}ៅ#kNºM͜~Al$ha!;Cs{ۜL^ Ge޽lׯO{ЕOij>~>&-M>Z|Ci DjZnuoj?4gkdq hD}Ytsi򿞷{JOK@tRZO-*$mVSl^mzWL6zmV$.#5dFS}jHwsAwQ)O~Py`v3/_R?`mj_p\}zEv/:$r|z, Vrc?noU>u;$ݭ2.-xwO_5 .h?zڗ4uDK}\ip_kSoϿSsʵoW'G v1:__ OXcvw%Bqc#N4a~zN̙t]n쭣 ;",[lmu8Ʈm}9m7^ѣo4}rvux& Us ohE؏h|¬TxK圤_x/1XnY5-;ėŗl˸vd3ޞ asfJUi׷lx_G[Og^<}wNr+.ּkXRMɿRud4ޅ8eE=XT~Kn_UjR$}oSѴdx{EÓK~.!R\v75Ɇi#I3ftRJ_ׯ_yHo˧GbxR}:ĝC\]czV{i[ڣ4~Nu5s,-4kg 7;$c&*M7O9Ɵf_qwV^%n-\갷Mͬ5y?Ho11n2_+˵/ZE$v~y4K4:Zy {uO&x]! mu,'NpF{1﷯A7_#m?׋| +WwXOӭExO˅Rաs43B8 i'kNPKo:W~{_ocᎹ^-<43M~EУ]GŶƗ%mut.3\&m+h~[./q_ Am3}i0^# x./5A~"'^aK2mSɪ#A{jO_~DZu{}Og=+XG:*oX}kėRjMp~踩5iݡ1giYT_;?<b;N|G;+ aO,}{]Rk\ oYD4[ UF,_ߗWB1Z|/|*Y/=͎%Wc'g$k4?436߿u["dU}ER*V"wW_YYZ]ang6 톩jֶwǹ#nri$qβKKs*umt맛??:b+kj\MŽcBН=\Q ϯ}{|]ιc!fYym}}ugϣN﷑Vm~t?j |i^u w$1X|+p-[Kկ顙&H! ԩ1lmou|1ny O-7׺ҙeԦ_*f-v$r+>e;~T׻ޞ~mugRY;w_ͳk᷏-WƞmLdikm|$j+nM=}NKV M/cJiת߷|R*fQ"vCs+F˸m>K_zaj˽2RWٓf2UݒoҺSOfrS{3:bYmR"öԯR_֛zn`'4K>MH,Ҫa|˻gFUMg5k[u g{M;yy75fm"->e/9Zs++w~qB.7Y^&zRQWcl#U?|>>o?f[.XT}-5p mhRfn$ڣu ߺc5~jw#d lWٿTv綾EyHvOOϭ.iw:=UZq1ۓ-߽_ʶ7mo}7Ƚ>9˭'{R|y$ȿ=[H?:O{/ԸE%'{yϺ yKrlDB]+moǏ5-~ݿN6ݿ9iujO)G![|Vi).geuܹ6Q[^Lk)Nu;$G $l R; 'MkZ}f?=SOoXOhR"yiZ*QG?+ϩWپwJq6|;\3ۥi72ߵ6¬خu=qn{K_H~u,>MۆdfOƶwꎧ(Op%ԍѶ3_x_,+j]tf=64dW]*/˻jG*0jua՜۹ie1ɍw kg]z.8J+-.y/4^lAB]o-k¯Ӌm>XM9=þo cs*d nݔ]rjKH=\.G^Dq*e?"[וRoΧIS+y׹&pN ]hã^cxFOufYćprש-4*p[=HTO/MFz:eߩ$BV2w|޿־k6}+ң^G_ϥվ{kqYq}־n[.mz1uu&.'%}WN)WO¶#֞|c/Mi7,*܏Ybͽ|=lSf3mss_5|Tv3R[ZzrO)fe;דڽ t՝n>Dnr U\?qZ9'nW33'mU.~=:'gr .\e+G ?97_u1)+?2\vv75#K~?{3^6IqH?yvݻi'B܀OC񮈧ZWJ;ԃvMr ~3G/#?sʷ7[~F"d* q'??Lj[I-G-3~V_?xhm-0xߧݽ2k@<0ݒ6Q_1}~kh&bJ)q9 oQ4 Ok-}MU۱'<寐'h߿s0v/~=V *I?O_9i_?_;|K_ObѠsS;|N+߷co_ItB`_vkknW9FHp Sޭ]T_J$2[׏M'v~fTcO|>~Z?/B^~zԪu9Qߋ3;xn3~Q|Ȓ;)d]H=S}pi9%9)tv>i iֺ.ڑݵ\%m֙#3韜|ڶQNVwI=˦d MK-Nweti+k3Gxdbn|7?1V?^~}ߪfu9⶜FC->ҫ3m5}JNI[ ywU%䲖x\,W:nqk^/sKԩ^bVmT6MQZOz܉J?Vt~ɪL"an6 ,r,*~{ߔ'{6[6}\#Q٫__"䵷^ξowok_^ʅK[W16o }ʙfץԿi8OL6Inu8~Ij 7u4V&mѮt7]AzfW|$vGV?z?jDw ~3ʶUiFfO[ҩw§O^ѯYkIl|maߙB㓧ں%Uﰡ.Wh!t:":';UAn%%<a1wH-&y dz+6\N{u'U=/nb Z×̾>%CqH~Gߢ]'wmKQV]zykFm 1_"~[CLV+ |.ƻO|?in4mB͵|RrhNs_.ٺoş h:u++%ma@do3F |s=bd~4SVk;iJ"_a[[[*0.<mG'G 4}|`OU~O5uߏ.Ҿ>-Hxi[nedvo:IǬi9_-oNbQҋG./a9#gE#w ZM_6R}Mt뫽GQ=X&,.B7m hsk˯kϏ5;),!=i΄^ZkWU7O}erWRƢOt?>jVW?[yfoGiq%|sr< }~Kve#Q wCtwsw( Ha_s]n6W#U_yW }#Ds:o$jgX ^?g׿NϰSϯ75Wŵ~[ZƳ-;{H?Ȟgo(Ե$.^~buz5; ?L#mj7]Mf>NノyW|{wwo6SKF}e-KZֿܴ}g)?>Y  5ǘo';kK25| |MZUV?\9-%\彾w}UP/(U#)mnVE:R_.wOTߵ}z=* DD8Q(VeSRZ^Jv{wSm{ygwKmyeڬ[sGf;>aJvS\^m)ܬoN= wݿZr_Ӽ'߭;F$7)+ƪ*{c{k MfM 6en/= 0O̪˹o/n]i4쿭 P|m߯޿ZuŎ=6 H>ۘ•9]oo?ևTT}O v+mX#QI=uቕYFI|?5{i22Vݟsӯ\߽u}g)if IYc|ŷ氩Bۯ/-)Ubo5fHU\n5?w.%r*[;[<{{:ku4(L3[?qg̵_eO}m2ǻ?Mߝ{]K7WP%򒩹w?,8/5y nIoTŒ>otЊ9j~K} dܠu g8FW^wg4)/Mߦh$KpgJQ;PIݠw[/ώ-AuwiR%PLyרI_h׮H|-G<㏯y= _^hq_^{HHm?ST>vw(M*'1Sޟ/~iԤW @ aHI\cwտLd: -b_ ]T23ese?Z{鸩Qz}(gSVm̙->@PY1wܝZ_?_#r~Zm{znU8OmjM7҆\^.W}:D*KrvU6ΪUX9_[̹lL>r ;srz֜zO=ntc!\.q6$1nXKacǭi V}sI[M3(F3vyWg?oǞU&v^lgU|-R$neĊ$ێ֭9_4۔T:@Bwmw27ӧ8.iNIs*amzoBr+f_ʹ4M+wo<cnV+Ǵ7khzvǖЖ>e+;)m4,ccs(n$defm~ߏvm5+ڦ-;՛ouړmUl63g#ӾÖ`Ơchi72m@>O)F7zg')5(n:42X4wʲ+,lɻH^d_-IXUo~J뼝>ӧ''z}iזѥ֏p9ɖgϓ$>fU랬u>jSmomZiڵj"Ⱥ}ݤwHe;N͇g߻j-ϯu6i}ʱ%[s/_NTgE_ve۩4NWd5빂Z-_U멌da0pIhnK|/fpF?-Huxcx5m7FVі#Gifdߏu=:1WB- z7vm)s~G{5UjSkku&_ڊuF >Bw}IS痺Nn^X5o}_#Ojmg(XoiWݜQ5kOr7x5/tVYDRngvT~&UnOwuF)kiߟFPEAt|21q_g[BJmf% bbH9|B4yz]eRi{6EwyZԮUm9J7ͻSO]-!H)+F2{i8Y^NI}{75YHM,4Vs~dF鄬[ݯ~ioCFO,K$@{s2Ϳ*`rR՜_>eU=w?~kօ(O޻mSd.DZ6BwO,{~]۶ԥ/y_ijJRQi]{}mm|߭GwdռaTR˪fVfytu2.5ҼV/TV~wWϣFUYZ[[kk5tSiZt~լ-cYoKLO24w{};c޹(ίt>Sk{f_]--B-L2\I+%2O^%k58%8Mo{إx-/l~c!-Yz.DTw;zhڕO#]&8d(۹U?(Wel?sKׯgJ^~ةykZi#w.]ZסƜ#ۋ$*Xܮ fm)өmz[T).kȹ $;O̬qtag;Kl%Ƌii K \6ګ?xfiAO_./oLl|[o3[k7ӊ賵)+5_|~̒ghC;>E}֤W iH3rjP:{mm8s;}_yz-ZQ,+Bevn;y۷:ӯj2}Mm3$’_UAQR_7RJr>= q\k5@gv?ffvu߯jraIԿk_֚HosnUUWq?(Gi_ ?z~]L({{2($u]wJ_Rz;ߩqjo13;?$M>e빞B o5"{KBrtu1uKX.dgL8.U{DѻvsXU5}ڙ#em6;U{[oYJ`@*XI۴䑟WȸΝo+K HJr^Tc4o뭯͌a RtӮQOޏߧE扢~m[9IZ{kFQ޾v<.I;\n;O#hvƮӹ)e\F\?yw1JksP|ܗd3ك!ԃߛ~UvߩVf.[rų7ٷ~x/C[GwԷDs*Z|F3缶{=;[67y2 ڭ߼v3Xuc4/GrJA *wzp~^y\U͹ n|ޟAYZ.|Ҏ/=U 4i7QӮ?ӿ1j^8N~ARYN+^XhP7k?йlUpw*s=\gƢ閝nB{'ze.\[]6V]:7|#Bd1 ,( _T՝Fym~ft[y.k6M2%cgr2&6,lݏ_u.Wm{o>-]_^_z-u}bRY[ڒ4|WJ6}\[뮧ʕ/gg{~¼UV{Hi?5O)9.vޟL4}r3S/|8_-˒eʲB<ۖ+ȯQۯSUN0j l߯z|%?oubѬؒ _#.k۹QS}+y8x$宖}yWTmf-w{_Sqө`զhޚit=-^U>XgMK+(5C;I)7|6;:G^F'186[%7Mj[m=I暗M0M {YLwnٿg2|}ITW=ϜW䕾4/GvR[MFm@u]σ[+w<;b2',(|eUo|\2o]:(t%.j];-ӮiW+r -:*>f{r-fn>33Ξ!<:zǾ&/ ]IuioU`]>eIXXwɹ#Ѕm{tgBֽHn۽>S |Ax⾰ywi~FVWˍS{ﻷNXF׷w v>^ʂgS[ꞧj:ܑm4-,2*]ooyv U]o|rwKrltގ7Z\t^~ftr^Rwmܿߏ4kyJQ_a&IE?wy]q;-o0Uy3ק̛q߻#X-V#͆c%ft5QY={;?NOY.Nŏs8{isoZ~=֔ʄ+'pCR`T]`~6y} dhoȌfA,TUN?+}݁UT߯}㢷Xbh`QR)Q/Uzg~i:-GmJ4#3& R~?̝HWpzEwahռzcwUOW{Z?̹Zi Ov2:{/HUfNוVC%ql;[ׯomІYJvxpk;Ӓm~߽(U6np}}~kn7v}/i.~lAr[?_DeA$3rGփMˀv:~BIl5w#?WWh_:sޠƤuۯic`;^Zv}juF+;?}d}O q}}jnOuuq|rF>Ssڼk_&Ur{}q0\n_ֱrm'4 ʕǧֶ(VwcQϭ+%7{?x :$pߗQ)E>]7'D\)3kJ&a+'dܰSv\ucOQ[j%vcO_4rwz_x싿-6hUz/n}u**(0wn,>lᵷ6U{EUgf_(U9݌6ǚ;hW]I@v /#&m>D*?RhF =m{F+/?[Ag[{{cHM6{0CXׯOzklK’h=S8i?Qn]uʇ@ gj&hﮞz?Ԃ{$96~"^Fm;S̻7H*veuRN ד~5E,VѭzL_wOW. 6jV",٤i$>]6'kϖaR/譗sKm}$o᥅߈|WFW2Gu&&iA6[kn=gnj6n%MEu+tk||q{7u2 |3S=z8`ke^ Me~|'_!ϥOӖ!fxVam7GnM?_qL<6|rFnosoTU}kSw#{8mMMUvMle?Z:NQkwJ?b%j595Zm=15v Eo-[ߧ ?O <^P TU ^甮]OsaJN\e*r,w<F(}#ī^ G|ո᣹oy|8 ҥR&7άմѥWZ$3E׮wok>_xŅbM տwws4]HM;dfـJ;oǰt? EҮ&lo:M|ֳNNvߺ>/<;Ƒ갳UEBeowG_V|^娿/Nob.œ|ugּ)=}AI-g8_Ϸsyw;J~C,Y]J2WZryݕZn:qvͫ2o{=Mz.V.Ǽ,K2; ){wUeZJz~nrO%Ē&}vƔv*Zky<($m\cWӟ_zq} |6^}I]cok;zuKvzeGտL!ywⰩYEzkӺ6[';CselJ,@VVWG_"[o_:V/^ niڨ@<7sC'Uz$"=ykJM3N^-6GgjvzSHzgC zL,2y>S V5g?N_?Աa ؛t ^j7iln&6RۿsHQuhn9%i~/῁=Aӭ=e%.RYCn?n뷊(o1/qN ͬK%[_{>5[6$kwGKۭB;aXn/#no?w/"4ߵ=4xW@pe^brWiws*>}1dَwh^<׵E-Ε|—Z맳?gugKkGWmHR.pYu먹ݭgQ~'c-ǶxZXgͮsYaiv՜oO&xS$f0JM.68sOO KFm5I$QgjNo$K\M$2}h풾-»/7es{u+>(?e{oxRw^!f2lXoXU!dWI2?1+=%Wzz5}3MwmvzOǟ|`L+DagZ> Euxv!ӞKo4y%[x3=hx>ӽ1G=7Τ˩ s߫gV:DŽ)u䳏Zm2Qob_O[؎d}]_OUU^^TOt.ku|tm_K"krc&C]˒E]Ӓ*tj uj,QW0HE._z0:o۩ɺό|05˽ʀ| $RxԜHYvSQ~:k9)A?~~3Ko5ȭo1[o߻׻YwuPn7$M{O)Z|[ƭusuyuy W3[M7b[iG6%Hl qtT"[wu6/|z_>_[cxr}GӒ_>&YZI~c|$}%ȧ/+wjImGvWn~>0x6Kk]e5Y$ߵWj|}_iZ_?0sBqmkojW:ngw]&nIWΑw'ॊzVݻS0যQm}˿m=.mRMBVMq4j!Xexwmr1 Wprõ{ke8eNqi|39`h ؘoЊ߿í/N|PpƱ,13o?*Qmg0Auv~i lekhֿ_^p~m}Mۗi/x1+9>t'<B:Z} e9DMp7nΚN1>NW&>I 0ۢكy}CJ]SFG&jZ1 C|0˴rB5m徿sdK^b%O intoqm9W{ ͖_M6T*??-繓-??S> evދԕ׺sJ=R;חpWZ@y~jw|PM?뻻cK\ʛm̬߻݆߱bO);;}2Ƅ0 o"1Uv rxn͟Z罽a:RZ>X|][nrj -z0U])rk{u`rIn.!a`BW]k;VfW翞3{dO6e#HҐUj3CW<$j_+/k^V>,vJ$'EOCzsz]rG}>Pm2WCåot̍&|آeMu_T-*~&&=}Iph@3Cf s{yZcc׿hͭfi-6̣?;[*U6{qӥ4}о Ԡ-V:֣o+%ͬmj&OݳlY!v;o4&ǯ>Xȯ7EGP}[3ݼ;ᩣ5RF1'}'בEzt0~߿^:giT=O_5Iݽtz6鎜ףۿN硇[I;o_R;o3^ELd߷,cNYգY$d?)?kCo߯~wn^׵8?uZJ+e8~{O/}nWvRy?m3{]3\^g_-Xb9ܿ+gij~ov(e[ܽT~/|gGv 9,jz_/Hr[{K2 H9 󭜔u2N -R$=fT:oE޶e[kx@pn7 ʭX?Zz.'^imonPH瓮EWlo\J_վ1_C`}sdk{Im;v:'(ҳk[W4ZYBxaX3nUf܏&#ߺ=};jBh1f5K*m o<Soj,e_[x&T6E%?[FcQog}A? jpe2>'uBwuwWH撕nޥfK] ky6REpeov?CgqEv?NE8w:_4haM^;Uw7l;Xxn\ ݷ3wL~ NjSNY̛YQD߱wTZ^F5,½O> h&coܳ&UgZUK~0T;~;xrY$ Jx$im!z͔/m-{}ҦXmr.Sw&/SMm4__OK|Hw9F3FcO-s-ozN+K?zmcDURuYM:/u,O7.o~uak;os빕siݧ㘀_:l4gTO Jz.w؋ox,msb^.WhT~tj{g:Tw Vm=>[&/-6ۿ|?aS ޛm?͓E\zUitHʔhv324kG/ZM=?MGᯌ4>ҴMeAwgE26Ւ8D/lO[ :n7l{[u𶙥_Gw鑾V6n|ά>u\}}}{m?υY7zew,+qlAl|ar"P(FծUIϟλ)ޫ?ӯɧ/]6q4v<3 -um F]i5_Rͧ_PxO1,]Ŀ9Ϗ/o>ό+_u 'f&Ğ)q~̚]N ,:wMmIcooNk~׿CuWr7hmͶOW.oy֏gRexFceVxo_Z!mj_2UݹWVҬ:TJ[.߼H?4߼7=xE ,ViV_x湒&[??ϵrB5#;SNNg.m/ǩ+_{{/fF䍵љϺi0 7?sqhkwm U<>j{rVG78ςF*M].†[ԁPeH\Io_ڻZisES{7O̫%_~ң݅{z&i6.wwmR#-g9PvRџ?Vʌ4w빝sm 7%w)1;n}po% IOs2/X&Y&8e[Cp78O}i:s[C8rENU~~mv1n~\$I$Dloy<ΪTݷHo$=RJ+v;NujҲKN;ObXҭw:&.w wI('~n~Vsԩ V}{Rh#K *[ryMJI--DF.}}?m15ots/\=yohT/tԁz;IfngaMmߧS5jkۯSOv?meܧ1R*۾R~}t}*F 7.oNSb=G+]y6͵w\ynLƛv[kKDwV J Mп+}ni^QNz?vD׷7K*@.;U?j:wx+/-gnN?.˖?zҏ,DB>"ئ®B ]Ѵ/ciJ<4*St6wya qʶCzVw-F)/߯k/iN)i.@[Cdn=3W\;_f^_RS%b);~oI{Nۿ*}Wjp;y'7\ާ]Jk/EfpAl od57{|t]}?̈ !9hz)s?/ĄZB)-~T;ZFo][;>,>]]s75{\u6bV珗JMlkNw[JL8U˷n&Ӻ;c?W_}sgcn-j]KʼG_ :lkNL%r {YI/*vg::U&ؿu(ŽkcFG&MSU-gi4iKnw97J4[uV ni!ey2y:MoֹkP[oשՇ,OyƟwRF^XZ3s #akYnWHVM'VU)T%uxS'M+F_G9߿6Ӫk|EZsQ՟]7vB2H |7+v]Qu*|eo}ƽď=+;khE<~>vڲ%JJotݟr:vתF##oO3C}zKtNMoaոOQ/={*_s Z.x /Ƕoi'ZS2/%ɵ|?/?\zĥy~ֽ[U})جss?_%w~%N})%L n|O%{kSEofO5:4:`6|wNZvMZG~-c#f++wlAS׹^ɯ H5?߽o1Q>9oJ e{gdsn]vtl*; qrZJi}gmoLdRȭc]cXAr?{Vأ;.%bE`^2vmM|Wn]U$)dݵFV]w˟OZv S'N-}:??_& /ok.نH=o߳~g^Lo}ޝ3 dS^o]B5>tY#)ToVNK ML,}鑗]GR>fo㇟]B2+o=)u[GH绍-2*̛ͻnZۚvZשK>K!弶w W~MԂ{߱6v.&9jS,2W{*J m;?&Qi_nKԗNd+?+kBW-V~9b/"[A, 8TjvOgY:bDpdngwĞJ2W?ş3)T{{ݽ_7<6{T»_ {[re(^OwҰ]_7|Yrg/Der{=ShD!-/]ۺ[}]c[Ts-?rB#0Goy~NuUYI|(fuleQ_UF~TY^{?bj>9C??7[f2~f3>i$"rːX9_Iɫ^{ɔ].׷ Woloq\ʬܖջloR-6ھŞ. Jy_9*c}wƟ:wG}Z3C3$ʨADir{USZQ>ʆL fIiVRZ~»GZZ=/:+ +Ɯ[ؗ urEߛj"IULUeo4{:{ޖ'10P2'wo^j>oEy߸B?oSU /7t͏f\7 ~ע*i^#o#H.~t^D XXlwTsխ*wBYظbFUUOz=/}]U߼[inBxkU&uyl˻owK;6}%Ȝ_D?׋pg2,io6/v=WEWe U_+Ooq%)G.7o2/# wѹy_}RnJbw`Hq-k3*slOߖ;?suTZ%6* \,Iq9q<2?,IS5.WӽΪV;0SoBr~o/E%vnvEhڿiK,lG\e.ݭZZ;{PnɿtVzxZ@7nk O\3>{/_2򟳰\) Xcw?ɮ~Eݗ J򿟓2vFwxf+VUkz0#8 b7!;#X#oݗ]?ŷw?s]a~]WwNi7Kց/,b\۪;In2oi'/=Jt\W56ӵ"VZP<))ywG"ʫs~Jfo)yaApItݿ֒VV&mI+$D+Ddw٤kt'v־UScsg-Nn55/+xMե)+r$>V0:SIskۯ2 eðgq%U۽w}k]}xIyj;u䟛s]Tuw=齿O7Ī%'qݸu_޼{U|Wv+%f~Y! F7 R;`'=x9=:ۇo4Kc;BfcȮI5I+_0Ym˵;z#7GaؑZkm審0Hk߻~ƒO*0pn_wu|NU/>'̒EyVbWwXt~Tj:i'?{,_m~ouSNשRuS=>zwwm.𵣿f% !R>Vuv/?jb)Fqw_:Z|Is*` HK&[nןJ^r{?bkD޻F%X2 1 v1WN8ji al]E5ʶm}c;٤Pdg=k8w*d2;[}R1o{TMFKov9O]7~]c,}͌Q#Q]Hw";En=j͵o2{?։kc.G<n?i7n{:[)Y%,ndۗy#qGҷO_#kJ&qϞE~jϻՕJPWmFr'ܳs|/6T.OAa|9Kg c`U[*n+o_?VV̷mj-|/OߏAqnI{u߯1e0Cz3|sWߗV ud03 *zH D+*.u'uO^+|wcPrr9_;笹c _[+{;l e[{T%_/6jWNֵ-G +tSzSVwOs*M~ ]_[H㉀~b4A_vۯA'tDByJ1*,{~gTv2@pO?_zsJ_ֽKLTciN|ȒcPNke~H^4޻y#tgA9o?i_e.v'~ynIbva~m_ֳ']z;FNZr)*3N~]Pg~_3km6~nٜ;P_{?/¶(;NX5̽y [ Ri^gDےRﯴ]KSiz+Y;?nX}v XƤ~ 3¤M_ŷ@6G7l͹xwL~+WQҧhޝ?ǫ5G MJQw]~3o Z6apo{cf)m{Ya_vwwhާ7&/}"WtU Zų[Yꭤ#*ryʬ;x8 gNsnuI=7yy# YIJ]M^9<ȆO+vgo\nSw=<>25Qiv^(&W/=o/RJ}[~>Fo?ShcH)iؿ7͝޽<*dTz]_SҡJtK=z>ѥGCh$2.w3~6wyo__:)Fz맞gv BO[.}#|9Oyouk<-e"mU]ۤo߾>}k؆UiϮ>k{_Oۿ[5+oon0q.K/XoOw5 :JӿͿ/# INi[l1m*Ԛ:<2۞=ۮw7O5x-t\koqqq<`Zn|VYdXoOW=Bo󶾷0RPj/_Rh͛ym|ݿ?~KJ%{7L\We8tEE >~zWUJNFMG$}^tF**s}0F#6\<MsEmTtSQ{ӭbҹ1FW{nMUH)[]zײSv,p:/^}woS-w n)uV{sEHs?q[iNoQ՘m*c7i{)E{J>1?t?7{<e8Kݿ_y0oךּ;83J1I>KP$v׾s=#ITQu9?;0rAn~i(~ryu1TFH_d}~;-_Ԏw/w}а?wks;2v起O 0X8u|4$ދW` a7sYjʆ_ 2B0sA;_^Y+pKcj? %+l﵏{d=x8fۜV 8O҃7&ߟUaj Py:zץ& ]'t?AoFWFCڃj7wԒ5G~} 02}1f*wm>-A;*P1T[t+ٵEwp~SƢROсN 1q 7{x_z`VڷÔ=T`T Ai *ĹjsA֯M=4,yAG9O6EϸߑGҳsw~,Uҧ]v)n{}9>MN^c?]*9y3Q]s3ׅ7<{H<?4kfWXd? =me6GnH_sR[̂ %prz`ZN)}+R-^ hApyzI4ɃQOHQG_gDzV=ͦX_hx6x"Q[ܻ Vfs#ssҦ\T_ЎE.$r,NP6X򻱻oޥT{_{wc\zyU3nH#}wW~ӭBt1ʾYJw}wm{gol)?D s+/8mJSh=~Ou+HMj9d W[mQԻfslëgJPMyUy'Y:oGBrG}'A+䎉b,wkn (S k'o miJ[Y :cO_ʼz3iWV..tQPW6|xcw*,m'*x(+१«o௼4OOt5!gm?wvbJNNߟOU!O~К>ooo~̆e!bکȮVӱ_?͞i^iwyG-(GH&g|JXY9]>qU~F^S]R}=9h_,NUKKYZr5"ӌ7cO?2|J}>oO|K"ȷ6|^J̒DގxLjE.e}yzԫ* G^Hھc@>m|gue jjZ G k͑B$IGJў,mBĪ׳GM|>gauvݼ%YOd̓o$Zc!ܞOu?wwX ,bQO.o+yTUiUGӻgIS k?NJ|qco-B Hs\Y+%dlcv|/q}cU[JRT%onu:a1_mZ{V>>? xkAoܥ:~WK?,De4Ș܏~2e,=DvJO|^;Mr۩z |%~5kvw[;gQč :؃~bKYc ێꚲWh'K)]#}sru ڬ $zmܑj*]퍷mw8ªP^MӂӻLs>m]}vu)|e,ci|6P[nSq\75^bf8jUD*Uܹӎ=:a*Q{s}շOKĖ"`ŅiQy>NEa?p5\ ckgfo-HbL^t,ZB<"ӡ,۶G_Ҷ\)ϯ_=ozΪ+5?w >7鈒k ǍW6\[mZHw^u~ےTv[pySoϣl/?d^xGU״{?UXK><=voOݏ_;GQsMmdׯϣ&X__S.>7brAv;GO|/nq]]]-ћK;Uᆏ=ws0sMݿSXjk.9^-g4JҬcGS#oIV}՟{W4_;h,bKw%ISuZ璺kRR_$e6~]uq֩Иhr,)ooa k{}R}7w_~Ib]R C&lN*g9jOc7j>Ӡ1nok/l,ؑ{yܯO7nN)6 ~4j0[6^yk$73D{y#;*)i5}?CtٞNWEv]G>eĊW">&*uϴ{|ǿ 5|Ecܮh,#׵|5;m6i<- =iQVqR~~!c(&խmJK]j6plY<ޟF*2KZ4x^e~wmDx W̱8eg >m/ 46oaI \m椖#0cI^g:aCKt/O?l$Vuηo ~Z..IXŭNu6 ז#}l,|ٕUEG'{^[:Xo xOB.}i:͝ 3W/PFJiD#5zaR;i۾MI]>s.}<:| wž24m]mK%|\~wu+W%k5צ^5w1xך Ԭ`[M.mAĖ٤uC3Xy˫EVK~KR[K'4n/4VJx_$w~+/./zߓ2A춺՜7X\?x4ܰS Z)Aɧכ꺒٩;wo[_ t;6Ӭ>+6/}GWPHڴ6kwg2M,ھ}(Bcny^nRۯ]g_ ?sIU|yk>/ _eyzM w".?'2zCm Ҍ!6gkyًOƸ/Qf*O"u:ŋ 9uKyYM,.aslEH{7g[=^オ)VKn='emvGI-.iu"MoGt{#q0si{;s[޿uf%H9M¿&Ze.k]-ޯ[74Siˑ*fw`#A$O/&[c(濭Q_[& Jq5! |z-ΧtKm|>.Ѫ*̛3<ěh?(>~Ϟ$Ӵ닍;K+w~u_#lz0uUZrbM]gu4y$ܽGce6JrO^[=q7kuVO;Qo}(仲_WƸ{m߻>i/Dqf;K/&t~/~zib]O{8y@s$?κ}W)^K{3d>j|(Lݞ?uU#_֟C pi~}z[aD8mZ%~_a:j]ȼ˴%މO}tuOHU Invz|}ohY8eGQR>ף^ZRwJtR_ gW5cHB̗Ksw>f8U]ǻO~?jK5w9|{R Ǻv'i e쌻f7+GcCfu"Jw]JFC"KP^c\uoGʽ-5 UYwU8S̭!6{^Ή$_ PZCoaaVHPUU卿/MWJO߾~6YveV$ϵi+(YA+7 W͵ԢZߋvKr/ rX+7_[>w\u髾<9o;/}] ~Q<wz|ݫAE->v9#RoF 'XpcV2r pҝ:sOGzu׷_̽=wX %ӆrQq^vsyV[mos֥I7}v:#‚gY.61Xd5v>.{X\SE}KRcX84T_B"9֕cMEom~V#.ܟovߨyUܰPUNߏ4Vソ 9]aٳ1b:ۿZB:1K$nef 8zoo[>Cq2fr\F>w٤4[31$rN({_^5k'd!ѐʷ̧$Ƙ"6og8n|ԚOp#]Jb2>7 wsK=?7?;FI1>c>qVeu}y9_ub߶" g2 /ʪ0zsD(޶Ӻ+x#Z_+NYpq۷cuuRQQoWԢl7+߻a99mwgKkvtg(0@1 ۤMVۥ%$0Q~a7[ܙy%% 2N{HNӖOJ:Ip eҭAuR_Q1NTۺ=yt4ѿe~ŀW`M۾nw|nkRVq.ʛ7O ]i`W*U ~P?tW>rεnȆY&Un _mŪwo$~t ǃOֵpRWk~C($߿}6=&Dȣp}nȵ_ CHW^GI宽~|Ar>9<Ӄ|Fw_7k/'}]/Cr3Z1Jzu~~_aj-XPp8َyWԋVwu=X=m p <)|k#R]UR ^v/"} hO]`Ŷ>c/B3yu1 A4ڷT OjM ə03~H9#^[p0`wkj)lȈ0Cg~fM[Z[x' ;jMls_Vҧi2Z[ߗJrO_u6ϩT}lҵHea'36oU"6?Oj;_X{MKk&Syc+$־CdmSy߼=|:^^vw$8؁YPTue9AXc/hho?ZJ+dާ&%--{i,QI(_Ȫ\:R^]Z3Qg_/7n~NvSz2+e5E-dʃ mޟ[։]kh޿w)n_f+i詽Smk|Sk˿zaoZvs}_>oo<¾JO.OgS8Ek NUrznG 5ȷ{Y"wyoy9QDѽ#ffWUiy0F2l)CͨΟWuX[o[B60I,WqW >OU^={*:Q[Sl.n..l])!jI48vUG;]ѧ]n箧 J?Nk\oBkzzWe&UTnݳZmcN/1un-}_ΊLZh7VFWfg_0I6͸DXnt}?NwrX >U1]r,bwC7Vo.hٶm{ɿM̸wM~}z6am/SVOG4w?o%чr.Я~:䟻N+gLj+]GE=V9n(-g≬vّNwP{uiz4ps((4GRf,VH].ne6ڿ#W!Pdݤ e<?u<4^}- WsoS--:ZM0 gfN"J8+~^~fX\_A=\ b}R![URD,Ikaqw|*ҥ_y$muxgċXދyG?5{jݶF&U ={yz{=֑_G՞n1G\Ԭv:Dl3m+"C`_?:";G.?MuW:2t1ŧ`62Z٫;yG'Qsy~Lgy ڿ5ܦdn16[lHhBmeW'q^,"mNʏW z~G=jΒmnkoZK涑cq~m6ަT3UQhЎ];WYKF.Y[s7n~2V'E[RX᳸Y: *~m6z{jnxAi̱`I)sGH«|o?y{yW1s֡U=D/$hfOM7Zm*v,Tr3g;:=MJ+Wߠm}ȯ&lrq-9$2o=~JsOw_Rtww쟓i&ghFBͷv1ikU ̨Q\MZ#MdyO-_91г>7.sT] _?[tDidl,6#(`f퇦E=oEZ5]BT*1vfSe]ŻiT>wS'Q{ֽKYAw4+q`(\$oG?y5 I(ǦeѴ۔o˱6,s|沕=OtQlkVCkgܗy%p`odvyv~1O[sEF_O>jj-*?zb;x95//NZq[?D[\\3yI1O'vSW&WvcZkRE'i?g}eYdݹgֳJ_&u7XYO7"IYa[l?&VʄM:@TH9w{YxMXR wRF#jN)BhvckciO񪒊o8wק>I^$$mz/~k9(tWʽi1nP~]WQVg(kyrZ}ņW;휓Cj[/sixVlg>m쬮^qOsk}ױ1[C=EdJ3HXƕtQE&$6wFI&Wv_-=/;(Z;mZYD}hc_.?+}͟]u۹LD7O^\O!Z,B*ۡfJ?{W7޽;y8dկE{Ğú134MH8}ܭT~gJ K_3j>uJS¾ rۙ~ۓ)ZvoϡRT _[z_{߉}CM!ٔi6͵V}:p]WsNqtދG^_/; RY ANwϵVcn]l8/]ziOJ /_1,猪[:3F;EBx;Δ+zXzݔ=C&}]hiu[$g6'bLF]o0+&׾vVM;o7N3!$(;^M7w 8"2øqw]V_7j8FwOދ̅6炧>vW_sMoUpA,UpUcQE=]|8Jݗԇ`ꭆKZʫKE~! o]uJ5PURYA` |xsa7.6c{y"3(!+eU[ini7)8'_q=am?(\*X.TSk͟6\i'7zuXvV\Nˏ۱Td ,:ޞʂ%z@zVq)7-;?=;{?wCnHK]Jd)IU*V/򿩔)uϗDp#j6ƌw :ΊX^uϮ3?4,~V'v}eynuQ~)h YMa\Iqc۱{ 6T-K~7ش7,R2ei`\nݵ[jn8Z MMj?Os*-'—zPv+/">pyFmu԰lGA GqOT_tNwmdSʂxz:/E29B0vF |wܧ?ܭ#23|N2.:gq/k)M}R>? jv>b=GjL3T 7_ iy.0GBT$zBOk}˿ؘ2T*pnW;Sx-~wpSN뷪Dv̻{WrM["Gmپ] iQݕ[.־VGѓ{edv)dOd+}Oλe k_VQTN.啂' U%)N~~'삛;Th;)VU;+:aM/IexmEA-44@X1Q;mJsqJΘQ~c >Yno9ªlo6`eO?vRSv_.ᅲr?_%֧gg٬`{ϵD0y"՛l?߸=]p|]krZ7ht =+y|6~U{!&;=RuWW>so?ʄ Ԩ77oVi[Jqoxtu'+o# {g+GFH2wJ}?_q=͋Ucfv1ĊH$jQs\򶗿_靘|7_6KP_[OJŧH_v~gT䖽u3Rq)}N+(.RX-B9,-~dO/z9jFxަ/5V124mc}۾OE9E%wg_];'3m.Tڟ),7|ۙWᄑwO/Qwo{>ءY}gR&?˩ZiRJ;GmWƴTlӿʼSծ2Y0?]}i<<5jvir{/֯ZݘҌfeFw2uI|M^{TjGϯ‚ONWo,qEdS~LgIh.qsw9M?iE)mq/gV5Z]ocu'6gĀmOo?o~7T_~<]RQ JjOWfo:osF(w8! _Nqkz_2)USGnFUQF?Y.*Dbu*UgjOO}4ܐ4#e]1f)]K;P#{Ww&I= Fb>b9P>0qoKTJ.܁_w};71LCԜW[4w~vSn7D!eppuf=Sxkk_)-WϽKOin ],G< zJzz7G_?ɓ5yvc:?Afם\t9~IX*N?W{_y2M%u*:v_RNkfNzQ+HrG>o59=_;򝜈#H۾ꝧc|&Mv;]k,QeFWf*Uݿ1ЊZI$c?O}?O~%wCinw,OC8ʁֶw0w%^sI0~K7ZI5er|ҊT]k.eoNXvuyuQHcy$U$.ߕ~_]Xۻ;&gOrxjV]OTt`A{#̰C'Ͻg;"iqudƽYeMO-?I͋7w/i}tm4?/ j}*W+>ȧ2ؑ}ly_JviOoث}{E c-C|+y~Uͱ?_;)7ʵJOܛߣOsjwGq; Yfj˹>7q\U%5J \/j:pJ^Zwc"onXD)ed=U$wsMoܧSsF-6ESN`oSKݭV秄Z'gi &I $vՑ*Ώͦ烥J\koϱ`amÛ zt}-l]}㑶-k7ȿM p]$_LeJ)VIo4unh5톅r7nc^.:yuQ];w|gՃӊ>6]jludm3ȻrI"hP>jJ&9NNϷ/~x~ji6k 6Ys}{j|٭+]zQSom-\Ch._+7=zFf{]ۧvrjN!7xsyL+nW%ik[GyհΒu_2ռ@y [wʬrBpjkc2h#C43fG?2~]?ir>d]?F&C^F@U |k$}-u4C# QUtF1OI3λ̍.1۔Owky̅ G ù!4׍⺽|7aeI]2]ȸ#kdõ~zIy.aDK1TX((im6ߧ_{TԠ_6%X>ֲ~#F*}Xڻ ?2C'k/۾[=LkxYJֻp9 GSvZryׯ+[݃zw^_dMfb;3n;S_EBmzi طdLu|kiN |;~&3O]O]gh'&y<<9'7cr{{wSV܏N?8 Zה]տA8@ w}{Rn7bNsI9?KM=Lkrd1=>Rnڳ9SRwdl8$#秹۽d'Ѥ"0wd?h痑_zyF3Kmە*Qxݷ#(o?_BΌKvSAPtw_y`D'o:Ri&X|ϯqOӑ_ CMNgՊtw*2~Ri{2[E;d1je;/!NT̛߯NO>ӵAr/]rO#8%slqs8Kɱ˳,GʾT`ZM͕u ~Srg|?r2}TSۙiF|lĂݛF~9^m=uDR@+)'s}oȪ~'=ȫko͜?E&An[wV?Ke[m3e6߹3dPN{mJl>>l/#GH;Ko#Co~Myy0;G߻c]ק5CXhԵ)'(L͆קO,ҩVJיK8mo`ti'o̓^'oݳ'M7^^Z¦k)Co5},kwx/x 5hV}F++IVMѭ2yp˜]f}F[ai(;>n߭^YsY᫪׷wMQ/k$~-ma#ݤ<fi69>zb)֣YNWNh\Ђ勾ݵֿ  ~< lj<>kZtqO^i1aO8f6>_3 RJpMXc0uaGEe/~;+﮺u>ŋWh|\GԴB142-m>}ErojpgFuc_9(nwIזicգVQ>u޾4o$rEfbq+xmO{[{~gk S_mGW1ϧ\76w0̻dmaXZzs/oqb0sq9GuWuZ|7%һW&=?67OOSSѮsʆ1+-Wsk8&mm#\R] ,.llWzB+2>*BpJi'+6֟龍ў:My&n}A ٯfi?lt˨tK6H:|3~k Ͼ5ʲl95ykvdyx}ZO?mx'O*M[<"kĚŴ7d_,f-SW軵?T}onzׇ-bbt{5ޕ:։oVYr~-$TRܾ^]"M8]=ۭg?ٿ1M֐x`Mk4L4-9#rڑZPjmwuyEN)rWznk{?d_M Qv+9i5 >Uekڳ.tGIo [7~xW,\h$>c2N<[~}r_?z,v܌),eJ_oF10ZN5b8ӵOK1T3v]5M]?'Ij1>|A,{k0=gɸo[E5d\gope<'f8RX4oRZ)W ֎aI;ӧϦ i+- Q^Vʭ*(J:M5zwgEmMꝚ̋3gN?6^3c \zm.i_V1=q%O̯"W[Wv' odn?6G,viJqN=~;m#mYj@ͻ>"ק^kw> }+fK'k^5-|Iupy۴-:GKͫ"UE܋(u|O+) MM&^JYouvliE&h]>'JΝrU(ϯXχ)] xK[VϊcukD7Qٮ!DI&hs \kM%w p߉CmJ|c Vqh&qIon$F-^تty5׭u8ϋ|xf}!IƓM*Mh+m>8naI#cﷹH#M$8UoR~⹻^4v9e8ҩ꿭O>?ΏNehy:'`n.Pˆ[UArіO.$KhzsXB!WA]EuaJG3gkM>[υZt/:.{+suCy$zh9iң~o}?3:.J{Y=W!|⿃<>>/4]ZSij:k oo.ΛXw+˞6'}AN6~7B~j 6<1E{Cu5υln;I$fޛn#$[W-ӜfNt]?ok>+YkB .cy:|roΎVKY2k᳆C&|OӇ-=5~7W*8M]=஺xGmMI2-u isI"%ý߾Gaz26u})+_[,zϤK%<9 ӵc 3g̅TO}pԟ3w'%k~/|<rQnO9$xl;ؓ#ܮ bZޚ:#6g?=5 R÷*=gC-ZE\V[],/-I$n5$;|37}=&3|)vh}r<_fL;;8|fx^D{h9JJJ\Vɮoo_v|٣ᯎ4 j,LloIc ֱ2ë[4,yit%$կwë/g=>ؐ rH9'Mܓ!%WW''&-[i|E ^dsϷ'L>)FݼOکv*7uI=;w|S8Bݣtk'{ΑB/vʕo}O- >;(&-n6;|̍쑏;ӿRJ0[jۯ>dt~~6J[nm\j^;J}᷇ٲ='obO>T ?e^SOē7s<3$ uͷo<M.]-׮sjbnoĴYq?}/9Ҵ~N5_@?ry*)v| 0vgnOM^36ԿbHG͇V22j{u&@s׾{m߷0_:>u_K۶ž~ݢ*-j;O~}tgܤx$vG_?ɝ>5^~ S/]%d}3R롕}l4xހ8'}zQyPu2zts&taWMݔ vG'4?R/.eBnF%w6]1ޭ~>֌)94ӫ qA,C*D͘5f}ߟT/uo҃/^O=ih/ ZI,-EkzƳ&iXwcӆ9/>znN|x8\'gm#l{|$TtZív|8邿(^t}~wk~gse?="A'=*^q̰rp)_~4ds+}mr2͌1_4Ki̵1i +_ЩD39:f4 .WWiXcJMwS'ܮ[vW|ը>Kob|Fd |W-Owș|;tUU':uK̘{a"lf\ \{g~on1ww(Kp;Owo{cѻ;yhB q_KsFg2Bw!Cv,F~^8+tͣKw*KCcuvo~ֆ5[ݕ>շ ~P9=?׭t9-N_Z۶q ]/׭c(ۭu|wk߶O q/ZF. %i]kthہ_r%˫RK=w͌: gT6gqR]PpUdn^CM_4u-W>wguny]ݪ~+V*iֿ|S$sA#.`~U2?$]~wY*_gQy,;r7\uyP{ޚ~cr;3y?L_"hGGTΉ' }knErǓ󧥺߫|n{1L gu_?ZEE^eU9-~M.GmT`bܞoHdzq })5抍$ c>͛;o o3F |q?ۣWxs_7~5 Fqñ-:uvl>;M$ PJM#>w;8/jR6FYȔC`r?ɪ¢>G0Kq}hRnK'_]9JTwuGqY]Tc8 ~oPޫzAݎA< ,T(=mE-m~VՐD.#1-[>?Ϗ׭C,B5<A?m-JWuLyD4c`W~Tp9/;?ϭ'eN IgBWiqցЍ21nos~XR$t.PɌ@ =7;#B]?*O#' @79w*.}:F`W[#;˧s9"Y0FscjG}FeRWKr~\PAϧ>Q7Pqk~fpUz\WCoU5"eG by%F?emT"&~OOzpn4R}&u̞Iyc#mjVW1sJ_$6M.dxf@ŵH/)H`ڙL=ny^?O~Xw~Fؑ"CL`,q*[w5 W]|u%+Z7}FQ9Fv2-HT2G$~>5q_n~$]* H?/'6ݏ]_oxxV 0U3Ocku"cmp|RJW?Oq.|IOy(>_p72F[?VG|Ve kO> JI,Y+{^KjTRkUI'-m6[Bk}7yRMKݎKvgOb %%B77II)y]R<\˽[UFb铱9Yq<ye\5Gm߻*5g [rcxrm>Qoս5(n$,e}[Ǫ4~${I8ov}OXD[̙rm}N }zRz9y.6Hٝ%V_qLH|NSOn?kM62+.YS6Bo޿٧R/J4& - 1Xn_UŹ=O3iČ+4J̻~.e:/+n]哣5RLH'.O3ʿrϸPT*ok?3J3PܸE;w/'cytg/篯r9uurf"1bCޣV1~4ߟ^hE .](Ow;?vߙ緯snTfJĬfϛoXk?-=;nғ{gir[tV"w1YZ2Kmo7}7ouV{~Y|&QoR횇ת/8CmV_km~6ӄu鶿wWzM%E|:r9F\enϭ9>}-_W_,eϹ(J ۤ .ev]ΨۛV_Sԧkq}5ܲD*9۵o˻Uy[`dҏ?_֐&l*jȻ[zJW~֢|zξ)hhYavܯEΟ*R}[X7cz& P->ߍ(KO[/i96~/5:]Z+vH^;RgRI"F{W+ͫ_u/Rq뵊|D =OIs"_4e%vſ~fo'wٷ̑O6T9oϿ7-/:\z]%YL;\vݿpf/z|<nϭsɝJ_я22tʢSky[j޲P/oT(t_?ծ~^/]mrJz~{]nyt;B|;.MZ| ^>ךkWb J]/$MTzw2DO9񾝭lךiiyFcLw|di#NQ3p8miwɣxP<5{ڽG%gQoyq<~JRv.6m~}*7>[5[|*|Ň/z94 s%+B]V$d8YoJ˖q8)y_$AI$zܿ᫧=9u]W~o]y;(H۴[{G璔׿m*DE`Y҅-{_PK{0O'Y`dAy6[۳٬auvRr3#WӸ%&~F ֽB?|#cly?*|[ǯU1{vYS9 &+m}_}|؛EVe6{ݦZMwHQmm{Oим[U9YKi_Ѵk]dr^X s+|W9=Uot% j_/ϫ9-_]XzAՐ1VF۵UY7. ữ0G{md隭HՒ42\DۼܟM/fߩOӾ~*ʌ.TWw֔Um3ڲw[fIo%#8PT#FoG[9EwÙOߧnm$,jwn (^O&5abjaw}%}n_5 3; 2w(Pt[I Sq!K"0`'+=;֞ӧ|y% (޷y6ȇ$oL[NÎs˾ #%ěF0˷w_oyt5ߗi˧+EI#s?hUw̫۷\?RVY"6I<MVMûg^h{_yWP60OFa_\3Z߿c[ynFyJﴟmk|i Ri~$Kǐ)x *-֩J}{_r]߶?SݒDB/!סNZ})4df.Ԕyqqp+)A~H5Wi_?Ք5XK(㸒<,Ȟ^34_o8>sҪ1ss^ͽ7ٽ~!qUGNmkO٭k]u:-ɭ;Xo$}=-^y=;j9,">l{v![o'[bŷaB,7I66+;_7lR$>ql X3cDn^lvo7K}KZǸg\ȸno~ji{JGӣb0rpNS{|TݯgHR"+io$wS˧oNKh῭Htu-2Jemǿ;WdcJSzM*B^( 흟3}u۱?ou׿ʣVkk{?Y/>9H U pªx[֦5ݭy\z~Ñl2 \^jiZSJ+DQkdu-̗W|1OQ#8<ҏxK](kȓXƳ$DL,ۡh|weޏ|y֓$۫ ^ۙǭϺB[8́wnIJyV1W_S\{{k 8f'v؄/s򟗯97QE/G/4bdUmڿ.v֒K=;Sm$敗߯anUB09_[gsi͠%3wCgIJcܿH%O[?7;&6Uk/Lߟi➍?y5ю]òvwY{*?M/2WjtW&}NT׿Ffj`-CͺGUݿg& iE_ָTui~ۡcye -B>ZՊ3ίJM߭k; P237Yva' &ʈFs/eOVN_ rkfN}ӳDDKv]6WDJ] Fqt80Ov {q<y}?蒺ZtG(˙//̴<;K܃°svW[_9˚K-;QGܷ {koe QW]|!d̈<1ʅʪ-ױNkj}_2"K&Jc[0so7H-[}G-jQ,Cfڇ~k:k۷sjUk2p(?oj?ٝ`9+/-odS3y[/~$v8aM{Av|Pz{-888ޟ>d'w/}樷Ir=,˹aEW5u~߭qw~K5vw.Vap[i}&?5 s}~9'ɶi܈H#'~ 9 ww+mw1J~~oױRp[iIvC]\ﮮx+{rA-#ʅ!f]wV~ڷU %EKX0\ I ll }Sk OK± D«oo9[^ޝTw4^Xb1lFMQ+wSkmrY]B6}]'W4v-A!2A'|皣ud[t;pK.7 JJˡJ[_?Zu(130Ig_moUt(Vtk[ZZe\nN:7^<E!E''q}Q5ʅ.KiۿThƩ#3fxoGCPO_y ]!9վm{Kiy؜\S.~_Uc{06}`#eB(+etn~gW+__O??^+WC|Nb߹Ÿy<_$eogo{{11 Bi_-Z&eb]ßՍHmt4vN`.o @X/mkHдy{۷5;_F[ .}b_ysNi;sWK/3)pnj߷ԚdySI͕߭[\t_rMRhYP8 osQ)s[M%߷l%*6ͷ?0FM)Es7^گ& |J7m'm3(lw-׭swceMwBU\,7zA^ߧO'Rn+_ͮknn27͇~jARiF}D{;RHsn?+?{OqY/[tJ\#xɪÓNJrVL\fwwɨs%Ŵ7H;|֒SqkiH̲_vwybEG'>M_}D_+F%R˷Uow_{bݔmο֤NTV~_"  #eX}ѷv'E[!OP0_.y?׿f˫~ˑ$Q =?ֹ]Ngi~&Цo'v31w(2eNk[qª~o5gu7}r68"ʫymw\AfyzWثŪOl$2VWAUFdz}~z$i|,Ԣg?/ѣR|kWݻV|{_ w5-gQsݷt̐y,S.^VXΕ+~mmݦˏFfGo-y?0FؚDr9)e"*uWCį`_:oq(ngҾ?ci0i^ʥd*ۣ]ʱƌ#kt*E$},/d|]L\xT}$ZFFgI[dek- X?w#4${`׻N/{_:i`m%4۽}'t#^.AR忋vqMSmQVms%yb#FfUm֑7[yX|׿}O2y[_}~>Vy~JNMnN4̉&feٳ.I}Q*ҽNO9$8mh7,#ڒcYVm5i=Y7^><#x^vGȬ"݉>5I.·RP{ݭöuBP3nͿw\xiJrvLU.vҿ.?+*-w}w&)>W;z8oŚ ^9?ʳq!U7o=H`kVzO9@2jiqPzcm럓 W;A9\ܵ_`\@/ .v&m.6ɹwgi|OZb᧞z:\V5/.=LӴsogc;7|e:~;_kIs۴Ow|_Io3EKl4Ff$ 6W\ޛ} ~6ssErJ{I0KONk0qT xsAt$_$10?PwR6=Ss`/BN3qZi~wwnVPX2䜕~5Wv4_sPq)$nϥiȖ_̧+ii]U`7]![H4H~OQ:8ܺ~o֕Mq;u˾cklb#,H 7ͳ_rT-4};v-aWa SCVil&iuk gܫ4C [p O.O/ωI{}k7<*{?.|+|gxO:5ž i 7ZjKon/Cxe{7שf(^wOpUN5/{w{r]֧x{>51guY2]VVS^jhgqn|oΛd4rI1%8*Sk_VUg%=vWux[٣|'\y, M&m4mO_ԲN(U u' \{Jܼ_o3dS"Fj}O:7KּxWYߣ4沙.6[xxH}+l6%V{mQĊQԞJ#oݙIb)IkgBeڿ3^kUsÁ!?Qַ%B-~k=]TVG}~J7gʾ5yn]qcw|7ɵ#i~~&ksn3'%(ԝM//x_⿊uѴƶJlY];Wtq2:zX\tW5^gn^X}nQ|#ޚmًyvG]ȞwS͛ţ'NiGuM5=J#~I_j?R5[/ H=r -|E uj!գf%7#}J5?Eq]M'_}K|#־^>a_/-wLWM)ghs_!Ὤ.dՕErpŻ-m o?[ڃ5#]x\K0O[G E-h=&grZ9#_#ޮyJ7٩Eپ5ꏜ\A,&`VxEkﮭYݻ~~к~^ |FmơZM#h#$o.K>c2僼H7txÊX wsKҩ澖 xEIHSõi#OxW*~|3ouL`{F*e$ok#TA3{gΒgzoQմV׎4/qonNCxZt63ᤚgHfgeckS+Pr{a5K ѩ+{Y~ .>]䚏~NkR4ٺҫ4K'?q~4#feNP7̺e3pXʔl5I.Z~6co{9]/PҵM&UuK䶽dh$Deގ~^[TEI%G}'c%0eSJQmE-[^]GS7Ǻ<=-$M4(cV;̓ Lܯ8^YW؉*dzl\aR4jBJ$9ahgY>eifމLymqN[/wYMﹳM 4uQrǷwv}8$YO;y^E\5DWB)+mZO%|dzbH466,#܉;m'DL7=.Z]^6$f|_Unm>[ԛgXZMX$4rJVWS2uy㏇]\dhQx .4H/$kwqg+5>4-zh.mߟnis_MEO_|Cx⶗&J4ԵEkY-Yko$HQ7ygBJK[^:n=/oM_(࿅Zn/F&aiBR%T.%i? ,|uuOVhq&q$3ZФ;[%dsƓ"y'5k0u]Ue;ތ;_wY>5]_H̓|8/ZۥŮSC4w}#G$o#g''Q([MK] OGᵗϊ2~4<}ˣ|:*QK_2]iollMM%IJMD24/o?Zɭt;yY|:x~Z&lߋ|Wu{okjYokRMffcG؈X*X{.bi~ ^(Í*Rόnu wP./kWy\Iusis3mX^4e ]s>oWM=cEmO/>Y,ѳnm[>}orRj饿s9_Fx}CG?_ߌ|IXXgKPC{tmRdpۢJQK멕;oO^c#[CkeEO|E^Z:_C _I vhQe1WZ}MZ$_יC?ZLjf"{.7QZ4)-Y[7<>J{Zoٷ߭kKc+o'&x௎<{} {MCHgnE+uۧ|䶲Ko1|yԎ}*b?S uJ;`X"?9_lMwҕߗAWNmr1_{gc{ؓ"F4v"?+E_ws:>i[E[IJ'cjݸ>]~y$k;wtϬvx#%s,ȟS}LjTi=m 4o`Wn|Fw[a2)$u_N;?{4T=w2ۙm$TrtVQ7G' *m>5{ohKݮ3_Ş1b1.nti=޾=x)&vT6G=~o^csŮsA/4m/2,#ͻeZ 'CN\ZkT$T*U_9o>_s_g U{ :rxGֳt_O6Kjא$v7##Ve|negm?|RZ_wT3sov?\Nt9]^''f?۷9{ne5~o~]TUvV{=k]W{|8Ni*_^"7Saf0&AnhWk JϚQNZO5uEp\ ukIk[S卋OT' =w2)])\O A JvsyY[Rrm伋bC 6mCPm?? l5r`: (6>mGz&1n?[LuݿUJ6(]_ u{į'ꬭ{frKvuԅIuCm!XAoY1^:i''kniUƟeyp,3ymfo疧i<} ZTSu}Q9++Iӿ[057{~6 ˔͒Aww$t'oSY׺Nydc3"Bp)>ߗoں=bwY_է:~著yG#,Ku*E,l%7i̞z?N=6:KXnjX{xD!׷Y+%Kwė˸<Q۶5bqOC74՟n߾XT2`oxғof4boۨDRNcS^ZƤnwm+ru[2 ?x7|7cggYzǹݣx{7jD);Nq>y-||~Fg=o)Ì9<\K|ơʯ !3g=kem/Z^pXnvV=םvei%.)*$,~֫Nzvpk׹FKKw8-עΜްor)V${_X0!F0;r8U/}~W_?n˧S@;d+ߍvBܪz4vz#.VpߧJ-k]w*:7<]prA8ɸ_ܓ˞@\ջuYY{~c$ sp$1:~M(E9^osDe|?篯k7t_<{Dt98Cd5?M?H"}~f8iO~_6{Gma`Y͹s ^[._oϣ7 ֏V̒[o_7w}_Z= kj2~>v6wMv}_o>ַ= |ǟRrk;նY;G9tRwprW]6JN{nF}>qV1d+nN֒ߣ⪶9c,3_ip#u<ޙAzvVA:ATh7dwU_$-t?{ʠwkfɂKw?z.הpzyoG_?ɉGl7,F6>EG|rFTnO\o"i+[,sǿEBH8Uǿ?=kU?&nMQ1jݒ8$@眨$|sO?suo^t/*F?+?{_=oḁ׮8G_֜rOsf?" ?Q^Io_~p*K$t 3I$ECHsqIJK{i˫lD)qzQ)_#Һq;2-C}Viw-ɜR;L\@:5RwO&Rmlsұ #6⵲[ Rm7oMwkڣ;`j\}Le}YEI]"0RկN-$sA[wn1cjԺy)_U̪5+o u޾ۻM<oc,G1A,{~?yw~Do?fo.$)Ԏ>o}iƼ2g2zR{iȄ(_:o??Zr5خIvW6W z\NϿih[0i^ +UnՍwu' DnÈmCg?uIUwj1n Lۏۻsho}&Q̌_JIJֿ]/ͼu䜟b<^hwj98,>^)Ku|yw8Ȑd~j9N*۽辧T5ʖ [ag8u߿ƾS[׈YT w`)f_;UOTS~9ievoֽ(II]^~dLcq\ʃT,mw0knNiwl+.?R&kp|͸ QE|92B9FVX(J^Pbmu2/̭w^=+H?4$Mn?u~v5Ҝ9nMmB)rwV1Vs#Ӿq?Kwl$s ,d~cn_Sj?/V5.m#jfݬwCeąv~[vɩݯa_察rQZ4|1ՔunDRI5~VHew2mT#?0{sd]7Mh̖BL8?wm[vU%??5M-\}%:w5 ?RB$h%E?{]_Jg~OnvBQJ_{߯G_OLBcY#UO7mu6՝ 䶀M$s{cV#>vh*dWO_jtRT~]k͗-^"^X^\5Wn[UUcu\|ydw=HPʺGM,l.VBBkgԥGBdc~hd|wOomj1km]NgV&ZѤV(%I!k-՜7Дm?uTR7iys88FKkOu }6aufVb$~} oq7]|Qok>WG~>-WRլt4iKxvC2]*L,cغn {~,*km$mǺsҾ2蚎IH]cd6[cD$2lʳ$ߏO|hc6T}n^bg FNQZm۽ֽMj5+NdV 6HԤh#Fr %_MV|ei^Zuwp5+_^^{|qXfmŜVkcHOJ=z|{W\1uo'ߧyUFc+}O_kcxEѼQ? dȗxBѴ+7*{7r8)4|'N3j7kyOc{g{YeZfk=I ոYxB$⒳{O˛_ŌMe8چGo˷ϝׯY(O?3Yku"&0e m^m-clc~V5 TYb }_'ҊJ^;_gR_, ʱ``wF݌ɹ1O(Y߯pvx ns\'+ ^WwSԂ7eo{i"opHn~d/=Aiʹ§[mg!1vHݟnT"uw<~l+|tj̝i;-5zzXl3GeI2*`H7o{zsڰWV6|F'̉]b۾lvg>ij]CD$A 0D}{ϣH.ϐOBaRu}Cq_7.sWyeCܩ7~EtsuoԊZk}O-ϑE ب'`o0wvcI6kS}:Ô+Q3ĬsaV7%]n=']eԨ}}Fܬh"BFO^Z9^d9JK{__R)@<*lyMI=4N۩ H}!__;2[;[ȭjVз7jXVO߃ԓlnw79މ8b}÷IDS3<\ܺV'~,!E#s3IvzǽE'fjiZ]r8F7*g(~&Bmo~̽"qkqi[fX7ɻ}{-u' ..kbEw<-xdxsW?uewmTo;PGMu0o?ʙdkظK=~gjz4jAeؑrn*/wTݿG_];jib yqs*#%۾4ZԫyܧeI뺖}eqimiom~C[rƫ+#~#zaԌ^wG*P~^~GU5Q+ ^KZi3/ `yHt}jwΟ%7vm߿TѯuhO:[i%^7mwJ'8ͧ _ƺh27DIEfwh޴o>m|ԧ%! WDM 'o/M5_-VZDwqo;Ŭ&ޛ~Vo9[}틿+Tٿ<҂wߋewm,k[Gcfb}ά.W9o~;3z rr/ve(ҰΊj^d.7U/O~kѲLa{=.xn(-4 gb_GdB.T59%亮ۯΚEzkӥǷ5Yc$bv߼6_t:Dᆵ2^3"^"౶dhӬQ≻bvM]k3j1~Eij[u8 ~lk-E]q}c%gʾmy=} v5;;ogj{nf.{ͻSNV{Mf۽ݿOǯR妏N =BZ43Z|߱Re76n<-"۹JsS:=NtU7Q$ydt B$?eU}=)I-Uzk_Zɭ}28E)3ʲp?ݫXgVEPYa7}Iq~\7s-0i0o1Ir̫FE|t.toa<t`fAoivWjj?"I2"ܶ{΢xZ#o_>t&(v~eڬo:Wי*m[Kif̡T;~o~BrQQFRY`gbw7q롢JֶN#SY$D m޿1?e(o<Ԥ^ޝ:S_'22K!vO]3n[_nZ֗绺/̖ wy!Uֹ+'>dVv+mctW'o{vP<{J2i 6>c?ۏ#?{&jytz,Fb_a,ۙSW﮽mŤofouF>lߛ'QJ<_sVķS; ~B_DOG~+j^,[kOZNMw).Vb*>?1}{)-J~}HXf֣%E,W_Sߋ1Lׯ9o)y2۱[*ScrMcg" }39Uok>RoY;zbK5+o_Rj;nܽSYo]-o{Jt$vyэyWoގ^oʴwo⺔1Ub;=q3nfnSnsَ݁ n1ڣkә^{+k3B(1e۞~7_Gn|Ӣ4 aqq5я+WNT|w98xϯQ)_D}kVr2q*~{_I%]kI"*?puo5~նy??׿ݪ¾7\gw=|žr Me*~Ɗf={zfm\t->;49q2vRK]W´~e_0zڪq^-:ue'GGb+A\V*}R^_ V{n!$W릗#7ר+OPE}=<9/m*m7Ӧ-V5U-.r_o=u_~ǩ&$nߖ_29&rQUqw.瞭Wʵ:Q5Vцi32֪mIE9n~F]r.αʫdw}>ү65%{}ΛǺel/4ĀF/A*e?7L uR3z0^wЩ uHb@۞\g$8{-;dm\ PU)ڪ9ڪ%(>Yϫ$A#IT,Jmnܻ9]Z?/u=n[Eqj3EX~vGIԥɣ] (e'}o-! Z8u _9eHo"[r֒ݾRYCGߺ= RB-y7~&`َLCnW^/jԧvGF#;kR+ٴAu}uq05O3HcUffj 8%~iT_[uN-fuN$oͻ)+|Of03uY5;uӮ$EFݵdcџL9n3>ѣ'g[ȧU(M'$_3x5[tRhБ p)]Ŋλw}叒W}N˺/Q'C[Wsme-?/i}5R0R]-W_3=5-N9-.M֔d0Y4f#~&̥.ZVg^s/x~mFt,Uxݵ??7T rӭ b%i8;u_qCSYo-+N"}ѣ[nafV]'vcS>ZsCkƔo;yko35բx4o0kt_2|.ZC]K&>f3m4D{{_>H ]Iw ŵì*%SnY[t)MY=t'JN۹_Ta1Mʹ~fP\nv5-:ջ], ړEcmVܻoo9W7ZP_,4Ux#,z=q*Q~l~Z+cn岭kQm⎄v/3Bmۇ/Sg{ҝdc( P;~ZXCI^7(N+C{jr;8׹*+<{ˉ6ߺ7DZ[rksTDvk_^hZƇ-nGj3˿sl' ^V*iݹ_CFnՕZrľu̶Wɓ+Zܒﭵ{yyhᔹcemgv3߅-;mn`2c4pG,kջ졄&^<\}}ԤrozQqZk^cJHriwyówH@=g5<{`#.s(;vnsՏ4 "9>ߏSO+J0[HBJW|Ȍޞ\E~ q֠NKO9㯭,<$Q>k$OX[b5a} rG=K?ǀN9''oZm"z/׹8ʌ~QzN'mkשhGPԍt}≉r2oHNU)5.i;=u$XRBd2ŧJN2l 3?Xk\8g?iqa#]%{kabI_Q76޺兊<8%؀?G͌G<1뷿?{Y)YwkUMI]o]op|gIRj/[k_y}QD,ĺ ؋L.[6ڭ,~_2Hv~i#U9rտ_3^2pRΛM+%)f>&[w%RRW{_o~Ԟ im5"ZҌ34ryֱ=_Atc'(KE˧6_]Vg<'Sߍ(|+tZ?ƍc|8|It?|LW<*% k[Eť+i$qW爼 ȱrѧ[)Ҩݵ)|)Iwԫž.IsКMO].>ҼMaJF.nc;b6YU_'fgB ^+.6k9߉1sFVzzlwATVۏM7ȿTtzr"gΚwo[ޙjɪZ+yuM]Lc2y2>>Ήڥ;m?/&-s_I߀;.5-vEҭ4}F58;Tmڼ7. 7֟{5KMπk>tǿt}Ri4d6V3*57`ܟwj:gm]ѽ<|/dn&J;-nO4|Nr]bҴ< \\Cuuy moO-$_OJ ƍ B1Q&uM_)TZu!;sSN=۽?jO\̣+.n9*ϙǖOrpR5pF}sῊt;k(}&{)uw~V;:E_˙[ҥSI8&N/e^gk?'SG|YrZ[Cyq< #KKbwgev1F0WȽ˿7}y5j'OANw-mw/\?7?-oš隅ϳxд{?}nOfo-R/Ϣ_}|Ie?iK[jm[r̾6*xl5MW%MᅲS?r]՞4h6d[nhI7nګh*F]gê.T^xk݆6u5[簃K}GPmۦԛ_l'M:2-K^\kK_?F4 tn^}>vIq u׊ެ\yަחݩ5<W|IkJƳq"iu60^Bj,6HOd漩N9]Jv,j5x%]:>'bV9־4";6#ڮxb)-پ0n,!!/r$.|GI'v\cvt. \̫1-EGP6wvGC/鹪JEKwz_Ko#3ud[Hq&_K@,^ipj0GG|?7geSyE+;~~ZR'C¯vIuj:][iwS?4?dx-KHfN. onR%ocO-#ǿ,xl5 F;]ZVnc=RK=>F7!crNP+>[+m&]ssO|U>kD^qבɩYɮGq oxlkDHalXjեF Y6Mw d|=RV6Eݍi2Zľky#ki]|qocJJXw{[umSVMC<_XԗKQ@$66 6#%ʬ\H0ñ-(9ɪ\jZמvyu%AM?󼛗u9ifn1Qyښw8^2IO >⯄:߄|Kq/I9./i٧̶[y)U{o#SZl`%I#4I&Q{Nmw&rN~mn*ni'^zPK}Ͽc95ku1V9w/?/i(@tMGT]N iLno8$O-;hѾ$h$<;a6^n<69'gZ2u]n;[cw|$IumKjwvQ6:> *%M$wMğ<)\H7o~f/0'IuMmM)9[VWq̎g;rF%zE)z]{R+2KZ앮.(^^v~ɳZ>U*fqoO#K楮S#MFǩ s[|зe>6rI mIk;o|.Yn$čtʑ<$w.mlhyZrݷ԰-bV `|wyV褝׻+po(2YTo=U]~l}=K: t~l.]DV[?s9,]g~ [kԁy?VW?:>qSX5߫}oYr .ьd )?g74'_-K&mvw!UWwVrdբNOY=Z؃Rd DMo*Rw:S(7)^cTz_}d\޶i%Ă1ƛa~UOIۥ_~5xDTJ6H>\[cG'ޕ{|͓Ku>,d2r29>??0Z[sGG 8#Wo}vI/3Ω߯5{mv LIspn[T3mȿ֪5bv0T7kLسY"S4q3:$~eV7.?'U[z]}JN}B(䓌-Ru T/o˿&$ڭ?(+7KyԢvQ&@m2 O?X5ھtZ\e'2$.oፙw/VOWiwK%C뜯1]>d7eDD$gi}c=Mo+\~O[m 2FTO.Fuy]?XghAĄD P,:Ʈ7h:ΏߏUot]_x{r+6M낶-^]unN?SHLcq7MynTauw̾Q|n_ft>[iI Hi7{[Mf^Qm-׸s2wѸ?/.i9?͚W ~?6QIk~3K>[ỏ8sI;h^*~ʲJeWT$~5gs&ݿret\ 哃;~oAEz?NY|Ieœ4SyP5޽zªynNmEi6iqz[.Pt;In }첳n⹝w:4=8.J.z]Q?9P귶@%~_}^l,9WȚY dxF ŻP}!JV_M#H?{'-zB:^}w먓p)*_uqtߩ5eQ;oEdI`0߽_3hԕ}_&n>yc?Z ˕rrM-˶VWv+ ܰUmT4wՔmj"vT#N^'moR1:i@W?^f2p:M}KjIgڪۏ~m7? Okj 5e#r>o*\_Fyiw}hGw?uyn~Yt;r4#HӯYSTI1Ogi>u *FIǽ ^z~++wV8?\_z|V;AOc9`N1G{E!V{$z@[epq@eV?# htMy~FJ9n?ͷ{l̹Bb)[ G^\)iÌXp;XO {lFˮ/{F9g^Q\09 ?}4#nGkv?Ui/$S(m[͆?}Hӌi:/]Wg޿ #H>f#vwJVQU-~ꑮ@o}8-WuSV~.=Å)Sv9?0׽G/3Z-E~2S&v v콿:68*9m~7 X*&iK[ qaoM rv*__Tθw8UWVx*m*+w%OX7ǜnyX*"m]<@H_ϧ]Ql'_p!q9q\;w;~n4ӯR*1IH8mۻy&JY5.DnXO=z3 EInbչeVֱ9m[wۨŧ|z9"rK Lewn_ϵE69ssk+.!$pl]:$~MU)WqصFu "ѸP$lu{ RӺ"1_+_;=Dӣ2v*r@ hFR~?'ֲͨ>fj^"625LSw|69jRK=˞&5#^rۮ{'J;u}K~?JP[߷8u3JϸKkgoȥVK(&Kp0`ѲȌ'gWm+cedcm K8Cpn$#ӕFߛk1ީm=noW~3כY2M#UoH>WDttּD_DVMyt-o|Eo]ߥ|4ښ-ZSyoT:xzd?^e\kяɚ+pZ<$<hwBۿyoSr?JS_]7-ίNPK믥уKZ^|ʛˎ^vמּQ$Eճ:PR;y^o.^*<˪k0| l]GqoϽn~SMJkY/6_\ϻO|gjiyo[2[y.9aݹܯQ:ٽ]tC߲X|Dz(?]3|IBӛ">Miж{xCor{W<3 L)]msw)^ʥֽߧo_52ῌҵH8uci}33?&~`T;9Mnݝ!a=']FՎwQBlvS.}֑IUo-gm4 =սN;Z;ΈxT=q}B+v#c-IͱO^_KSz㽽ݭ}ޟ?}jܼޝ[_c.uCmż-9ݶO.E޲+M_II+I% s&io|uMh-9X{hZ_-?k/χޛ_\qqr6￧`TG]WŷOěy5|mckGVKMcNyMtwII*I]?1xxFp濹ӯ@ExenY<.$Hil:#?vWd+i|FY<Oʻw =׫|j)^;i^krZIP/5M{[ X-g*p>von>U?wje+yU_Z+ެ[ݵ~qmozUBLFQz?-"[eoLgi<"ɑ6S_TҌ*|_wؒ{mB,QdYZ2K+}>VђK[qb".}v(xȧ*ͷ+u{~= c)hĢFإOGG4 +xP7믟r9Js"|n](}/ףԪ.67pBj_͜V߯:m 7C؉*`WwUUU!*ΚJ׽gY!YR9[(łHvk.i'P;Uo̎9#kʝ|S֝_'rʃ V ׌zݔ骢ͷͻjQy ]ܣE%Bʟ[m2'&~H B@̑?wJvO_kk_R UQ;n ҩ?^j)J:s[>k( '$nt,u}߽kTrsݷO%͍rUVpj);:Im3JK=A"I,6FosޱNRzo{XT2rIw5-V)3mnXT訩$Ut9'I 75&ﺶz]3 ޖ7^|M# B{]TտKO}_!+Nnᕣ4 Uv?̹{5nOKQvIJ*~om_pZPK}_z/:?ECXnq].~fzn簗5w_(~V޻@ vߧYk-/:m5vAwRU]Ny;_^7zy_. CrWrt_wW~]OiX*ߍYcS_>>%I >_T8+3 [o/kúXFe&13cnoz[JFM[Կ*1`%Y%Wu__s&^\J>F,0vo_\J|Tۚ41GnN@vr L_&48]W]Io@d|}+(7U^Voߑ}ζa 2P1ȣeg8Gi>ˑ-]4v)|RımO~ooin7|!еGfLFHK{yw-{vj&.ltgyjəoK.ʬɟ6$2Q}_SUo]NgMm5 NZKd8;K#ni?;C;rjv3O_om4cw8)-$6=kHӿ}̮{ir',$B&~~M}~j{Ʈ*[ExE Y 6y_ƻ#Q5w3.WԬӕAF 9b?7{MWuc/PRÐOUwnn5Nm߳/1ny̺l4M1erNݔJ[Yl"]+UWܹwZoDpZm5w;m{D@|A~?һM-wDX[' `]۹2+T+u̾2KC41͝/Xʜ#^fwQY7-<[ }w%G;\JR/?77}}>f[^o8O%A!la￷v~ykou7G{vCR4:(帽i;#(f.QUݻ_C+k龯r[oN\N Lݷ++g蘥Q'~/5+p[=_Y^9-p3~ו;;rݞ]ze=-t^3R*1}7Zun͝f7^.IU%X+Z5ʪuM$߫s5o3Þei'ߣixݹe4K;^ۤ7ϳoݑMMRውWvcVm m;y}q$W |&obf? RQZ??oܯ4Voߣ=zK- $,(s6w+&WUyucFi<|Ek! SOu_ꐙxJv۝߽5YѲ5GKMvf'Z} Wʂ+t>X|.lz{YOL)St_3xk׏LӡOedKulܣ{Лnx2~󹾁 -K#|~}ۿ[ۚ마}zת8U8t0ج&XedH~_۾??Ė*3zB _T/qr[{4eB8 V O={0]in.Y FUu wQ5fV*M)z9%6ӼesYt{zd8܏ݞ2x%{_5< h hGPH toܟc$֯^օWuDkkW3iy/!ius ܧn}>gM-ߟ4ܨ FOawYU$K7)-e_Uտrӧ9oآ2n?ߧ¢Sm{Qqvwƒěʪ9?o?Z]sZVkR5ܫ99o}/өHT֎ܑr sv߯_4Ṵ;4WL#'?vk6wf4".[rFrq_?F R{.ߩ8@͜7_*mߪ_=NZQQ׭I.yէ~zӴ4zww}|ǯ(|5)﩮Vw_Kuجa\RW-`FNޡB5Uſ/rv;qj,{Nv]$p\;rzܾ朧m7T54"R*qϽa'dB6_LbK_wwM%F0zIҎ] !Ew<i9zie] d6B+YGfWshS}˩qIJZ{~ͨ|R<4Go-nFO&\N孈W|wF߮FƳ)/.9ZMwrA}i/_SӒޟ/^$1I9U؆圓6i6.:Yx}WPn?$4 ]E2Ҙ?m~Mt.K_:3_~S7Y\kCrߕԝ_w3I^WEѳҵ f:P%Y ͻGboO'ܬf_ֶ/>ލMN! ;g}̫Jvue%wG.H/o?uHa Ecl"˻ne:彷:UGy>%n]^YՖ5wJ/ȿ-44R2iAn.Ej, YC,+!ڲT\%K w=,XiʹnZ}m~ƾ/ٞ;HwťIۙ '>t}7w MyRQQM[L fu?MM_)K"c唉%O5#e~fJ'ZNmoox9zx|3K][gZ-V=٣&XkO:Ed6s^~}Q7~eDZԫ/i&}3_EEVh*$&osMϚN4im&>-;_Mڽƣ|,cKse"!q"0mw*ѧuzu9ыm[iv\hF|[e\,s_V+7S|3kI?/_k҄U>Ys]bk<+._w2:m_~%.6P >e+4ٞ*RJ WkrZ׉4ygHn+}n_uU(wz5)-t0۬aR0fvo)cWι)ҏ+=mӯJqjXڎ C nH'qg̲"oO2UVo[~G<\IC2x6-E@~h٣]ۮ5qUeJ 'w;8cP<_Vz -7_o}ϒ9ԩ{[WFiʶsQc^v E_䛇$C=k .O{O_3[Wʞ3~~_^x\w{'vAᱜjiBTef%y8+9I_B$]3=99~dJ/.27Sߨnz=rf@1'8{?+9Ck m}m'rIq?N$g}:_^( $ՓGuϏ(&w]j$1{A".%6x9ч"$0V<|1*\~}4T?s(C8nw5i_ɖž?Ѷ_!Ɯןl#$DjY_7_ɣV; F 4_RE*1dz&՟8uQYN]7uqW{nr3)~?/Jo6m_D]啳e9:/A., FîsԯIN*^m_I8\T`¿~Hg N悬?0!]HTɌd }}}h"m{=đMg#wQm맟 -*&˓_o/9MN \;ZG]cG?xwOݤdkLܼ/y<<iB?T*kO;|63=/X_[X4 Yk˨r5H ;,6Nvk9ѵ^ο'SїJ7foAȼʼfUg߳o4ޫK[߹nS'&+~˞&.SG hZMC$6$;;ys}yKU/^Tݦ3 kz_tFP5㺵Ck3I7M0scy?W4]Zk['O7z^"W|EM?u;?E;Hon..|=Mn?gu9iwKk?3d+,|9/͍_wYGk<>M3D6o_SS;So'-v8ZJRӵo'nxu֭p4'mϓf<[[ g߻oGԬ:\}yIRxX46]^ċ{c[u <$lGO('N)/_ʞϛeK7zoוw=J/n"|jSU_:#W?D>&|vg}s|6U+w[~W OH4g㯅|6D>vjo0'վ]S=(Mto=yO}3UUЊJskgO_|Mxg%D+~Pmnm4.z&m\n_V׌W#;Zּ#>&QͲ*QҞ\(z4ygg5Ou &LI7foC *'8:4"ט5߉[_It;[HUhI;{yؓkIyJ:wѿ>.RtKݗ_{ﶧ |%Mo><:Mk/xQkIϴث\_G#7o/G؎DY$VJ:ouC:o>]jzWܒܻwy"_Ϳ?vSKhS2G m}"ܿi%ūfC2#0bO>RVG]~8%іv<^-[ ƾ&!r \m{j;<6?ww:QGK[L6 OP/ umݼ׍?W+ oI=yөSܧɪ zJzW{:k%A:_5SW4?xWD=7Kg8m˿gs|I$1/6ZM۞ۺ]ϧu-N)#􏲴wXe#[C"mۖ7ޏxհ|+^]p|:aI%<%~ǨCEu,dr&ܮJ-Fw}~FkEm[vcH[?>ƏοwrI&oRwO'Cglm<>Tn.noI0_vgjz>?S#D5}z?Ӛ}<@|2$t8cII&vG<퐺b)?菻ktgԷ E9s%kmԬ_^rw PWm|[H Mi֬%IL>_2sR5{~*$F\w[ ~jx [v?nn'ӴZ|>kg&pYT{d~;qUM߯=.a'muubcuyW ^摢x+t!k{.!fM<7%1BWoty5|֝&OMZץ>C|՜P]EG zֹM.VURiDߋ9ɾ^OgWg߹ѩNk'gz_i]~xGWo'y.Ia$ݼVֱ֛4k֭ ٽ2qf=|T"jG]{\Kw?mew^4<[{Ɖc\]M35qLyotU>g6ɔM^LT5:piu[j|_ |7–$՝b>`U;$H[ZeXf{g?wZ|YB[iF=^s|]omx▣cOӣM2oŚYvY*ody&)pQ%-[UK=#úvOͪ6uHP6Ha|k0ȟ4bWl&s2mywڮD-]:dF{u՝5l0̟;1'S_Z~ØtwVy'^?;_Fەb۳o{7W_/G+mi\XCnp}cIrS]<xvLlj9FwYيUxױSn9|>Ҿl(˻WTsi߿pzcA3yV$oT#m˻ʮ3]4pZY7_䭊P_v?3ߋ?k;DY7Jd/cʏ~Y2(Zznbݻw~B|uxu3Aƫ%} ˵c /1oOf2O+l,p=1ĨEιڼ/LJ/5,J#fU||#؉*֝^eyksFǷ߯4i[VL|˷om?_{ѧ ٧v|^zvFg~?TWc/u/c{̌X_}b\z>fz+X]\=1nVk^T߇sRj5la6x%Ym?֌m4unhj@,F9wXNo_>ZWӭ~;UXt0!\ŕoY~~oe5of_DU""Arwz$]F#۽ƍ]$brmGV*2)N~O~Cy?˽ÿX5{))ҭdE9$IiU;siϫT]^ZN1;]Fxp>lֻ^yH˿f1.tX8n>`sm:/메({f*\ 7MXKOWF 7>9=W^&"rNǵFmy}k*ݶڸ[ovA[UOߩz ;xv~og*v(t>'RdrXmpđ}=z+no(_[R\>_j}C7{kVx;PVWZFkܱ{s[š["u9!kW^k <`54V*vmy~߯k:Qޟ=wrqZI%ntR>﷩6bp? Flrr}l/\"sΛ6zg[ { w_֎T6#^M<vA< Gzr7]yTz̯$As۞*O^K#( ~syt3֥o3iSʨ Wnw{7ѯToRNJ'X|hoiۿ[RBKN׭lsv~( nDMۙ_Fd\$o^]kڕNo1kpVl V^k(bc7wqr_?Rw;~qߧ[Fe{} TrIvEe;sZǑ[mPR6{yƠgT,H+g^߿ȏ* %ۿ}=kxg5(ﯮjEbTv ͫm{_14uoI*;nOxjnPd_$g_zXHR6NQdOCIьֿUlBD' YRNYyWu/`0Q9[~^ޯ3X%)]=G`j%ww俭S3L ~{~4'?^0׭e$ؕ 9} 8T8[Ap1뎾OִWJWzta` ?/c? ?ZRo={FNbRylrGN묔HqR)SYZs+dwtQN? m\;:İ"Y[L>O5[uSMo #pd%c*h&.cR*/OcDOơeS?֢ ß~:R*5]'81_ZЎYv{sq'ͭ0b-^3fIoO[䍹88Io<\g{h BYw-y)Ͻvjf8:;~z9I~wQʻ$1[ޮR¯'\Q.88=;mIݻ\o|E]-n$\ZlR wM~}O_-*OrviVB _rx۲/z4ߜO̔cz-~j?9ZQ%WPI?%?" VL¯v[P,/7m*\ E= 5Jm&ŤJ"' / 6 N:wօu(+z[WIHh{;{As7;*GfU1p[^ԚnhB_nb33?'_~x:5g'ʒA[$W!Uy֧hwWkmߩXQ]dP9#R;ԫ{NV{XQ5I!GB`fgߧ˧|JӗJ2Hl}UOšeHlcoS[m`O{[mH}+ c}{T9%~{ht ܮ?wwDa1oMzm/QGn#gvv}w>ir+49U8g1ʐ@$r⭨_}ȹ(Ꮵ_Ȟs3G@9OGͷjnfU~fZnfƟg+jD{lậD$_+n]u2ǐ"¨ïu/?)REmK O]_WD9.G.۾]5*^Pvקbic"Dv9]<}ϭjuөRtaӣ7|zB+5'˯]}WGXՉPwNRjrK'9s6R+T:io_WԠ|KO %~u?9kq : %wW^hV.$![o22fM:' n˛¢[~<ozVIr7y0]+67Z~re=z}{n0}}zm4"-{P[EKVs"4pʮƟ7ɳ*!tSU|ieέgӢ~zz3|qJ_9t.>l\~6o.Kwdw~3i,lۇ-5mU9+ove@.osmocRo,Fh $۾tޏ?&JNU$$yt^]C ;Az;{wV?CV|yNwČy7ܩIٻg|>*0ۭwڟCWIRZ^oAMoϰw S$c̵|wnjy:U)qѿϣ]g*sxY=gx/EMΖfU[-fo12Fo'l5h`q7䔵>v<+t}\'.ahfemy>f韑}]a5vwתꬵve2N5jTݥIW[VvzIuV ][};K޽Z`X21>ݾkvKm0~eRM{5j[Yk{xIWN[}:/?Q|+UxPKկn!k^}8Oes=KXoqIr>秜J*Fޗiu,"%M=<޺3 o)xz{k s.&Ue2],/'RcqQ^+z|n&E;~[{n˪([_V}T}#:vtK gJxGXoO~ T}}Yu~o vm ֕}iMoHGohM쮊5zymg'ԧj<m"mud3[' tfl..]}s`=OynICo|m;{ߺݿ_Ѩ%FwP|4G|?wzuj"|8sUWor2zV;(/gKzJ2kao,{<|qJ177jEx)=Kuuƒ2h07=wYv8wI-?1{ײW}~Hƴ;ќG&$l'K=1pm@2쬨w'{.߽fMܹҋ2>_: I _{?\f۳cV62.khљYNn"+sJt'RWؐ!+Ǩz]^_tNn}=|2ؓ>Zc'_# xϢ/MB?#%[ֶ][UKv_Gp ԯANfmw eBk=OBe2 ovtV"]v.TrG򟛟7ܯg33RW2yh聄bYZvVY &w ֯N1kߥݙ{LU rW [%xܫ,\qF]/Oi.axwaOOxxm'"pBkڻ_N:SE}i9$nތ6ݻ'$M:)ԫǰ|mSZ~}ꢢ?E}`ې6[v~}i+JVWchSeNi>_4&̺WVh#4W]ܸz~Ah_1 VXo#-ӎZOV=ho1ĢGS'ڭߏ5kԈ~g/R 9m.h㑤5ɷsVU꺞+yꎯITQ3[Kok3+Yj秊S{ξY=n鿳cVsc+¯=j]'rJ2Z-@bB`];_z´~ۅrzmgj/[(y $?v9s|zmo GUmn# p̻NIRU~W ߩo)KX.xGXnfס涜UNbffmh kr.d][OL?oǗ^Y_k3ˇy${~R4؟_J_=x*nVvw)^ZN)sepvݡY:t*){CF}-·7Bxwy>X/ͽK63?ڊwRM_ӷo#n5O (YdRG==̿/lM+%o={~mJ.ymQ[FVC͵Y 6i˾ߑQׯbL,[F4I S:c=*ujiE}ޥvHVo򓽕dE+mf-+Km??G ek+k> |< *AA`eWkX|=ݓjA+I~kֵS1m e;Ri{sVwӻ ER݂W/r{?ܥM6_i!Rvu?{wֱi}L9i})p=sI'kžRM/_c[ 38Fe_&=w>AJ^淿tBion YAegqpؿY."PFoUvc\d޻[Kŷwm~6=RIp-(vvVܭ֊1WK<=XKK߯cMᲑ]*c}eVܥٹZVN~F^ mȎ`pn}][)k{9\+K*+q<U$jOĦҽl$%7Ye RΛb/[x`I eOZF"w~߯srWY[4gh[k}ݴ_hxyrs5k4uû!ic}]j|?< N̡B\VF/4=SFԣ@.#mFX̮x6vVP^x֍TyUWs~HHFFYJ?w5^a-5v:;wH&y!秗-\rNھߣM_&v6~ӃK`",kݓZ嫌wva-O7<RM5չѴ[ko5&췗/Ѭ2lqL\cgQieRQV׮5m{wP-$3lWw?v$cwJXIO_;et{>_]C煮#-AYgKiX215QF| //ϧemwϛNˢ;*寡Y݃QDݷ?oUO5{{);[߽Ppv$Flp/Wm?U)s«߯ϩk5L><,w w?4mi˖WŖ jVGl;+S_7͜)Y[k匧JGt|9Uo&4U'[sIo2y6򎏿W*kNCcAYVZN̝+χ^8{%#hL<\'dv <<+ҚW{_eѯi:0V}-_\[rM7'uV{_}{q5#QZ;[TQn^E*dX,ʫz*j6OSÝ?yyzU @$2>PVlw}kk/k &t\3_n<ƍWl7Cy~JF7qWy]x]`u[xxQ?+Mk_I}7=N8{t9o CWwt"m㕋G~gwM87JRtb1MR}{o]{lE ūczȻk|߇lv&R]ݭt256QC$ȋ*2m O}<MZI~EzjFXC撷3}_s'ߢpq6J4ݤ^ϲ5<ͦiŶ0^-14,_^c]ycV߲=ޥ^j AF&&Xl.Ց#m?WSX9RV9H#H3yljs, ֖Y῍mZB-yi}""2^V##~,6Z7ڤ[K(MLʿѿw'̿;JeeO)T<ڽwצڵmm-ׇlid6ڭ8F'mYZ5:eniQB3|y?~e&够?9+%)U^v2n42y™YR%~P_o+Y_G^Wvodžt"ZB˵H?qZ罺<׉Y$c19o6XVp嚗]I{O:ia'̕Rwn%O?F8e»6z唧7g%jϋ/oswo:{ eofnq ߽;v۩A'y|VQ+FoӯoYֶx)Q.Swx5بE)NRD2f)ܐ. ڏwگ_uQPLӖ|E^k܍17G,lb}ݞRkw]gr8qذK{Hb4Y* -2#ݳc.:˯}.Zˮi>l<$ \IkB1h}eIzDZz>iՌ#v]#r,$}+B}߃Q^*%n3yQdkp!~ u]GK~3Q6}wz>#@zwU-ʷWƜSu翟9pVeQ5뭾g3$֓iuiutߛ44?ZM^V_vh֝{=~_|VM/M3,qmk"fevօ*m>E)Q|GW{// ӭ=i{ߕGɺ8~R/9EGXK{x +7{s5 28$ZVpvILՆ?\6$3*J6wS+[UP#WkВr켺;'RwW.I&8$6Ac9A3\˼tW C~M=͵khWLYI^;~xR3XWQ /o3X_zMXG¥XR^;\i%*}zik_g82GS{DWB1ݲ>o?+yS?љb1ef۽պج2Β]UoߛU*3_GkN|;>-׫~37/w'tzT:on3-B2p]}}^枟=H;vݧ-;_ישVw}ݴ/3uP(qӎO;|4YHel?0~v vM[kk}nLH9,i~^aku|50;8cSǕ 3m'|?,H];c ܹF~9\? U95m\ek%r8r̿T[/mE8(G̬wn<ǏROg޶}muXAYW)s[M$'$?{ޤ*;:"*-.F%jl2Hs ۽}K~_"'o 99ԡK,B%}vϳ<d՟RN O[h~3 Ŝ7/$3' ohyqTkysW|S}m4 ZL3-1̙gU=/_/}=kF Kϣ~kG2{:OM<0Z^m$wR.4Qɶ-vl&̸:yRzz~uW2UA#H5m^9a[-v[䈱ɻwI.~MͣFq7_wnzrynQ> 2~'6w? ~W:%i..q4tEc4/g ˽&;8Dtُ4c}˰jqۧ3?ᦹ?P<1n&ɟPk̷pCF7ڼؙG}mm04ӥ A>$0qqc E/4/ox^+R5Oܼ+8Tz}w]O<':}/]#Gi6גlO}~o(_E)FZo_S 8W~>}WvwsxĚeZ .p]wVMuO8EK_OүPxz*xK'uukaI\MwW/Vv\ΎGVq"?>~h_njt䵅ޫ|QFOKXTX7|s]x|MJ6MIs~?J ?/ȟ6Wm[õ :y@,3r6r77s5_]}.]Kujy$PVDܿwro{(.jMkm(GH-ǎY7g{/QZyuȋE)Fl3^Y^M/>b|&{j0}tק_sgϿ|?o~-ӟ<;cc`{+/xbMúg"tٗ7W:.wK3̴SI=_Xߎ翅§,u^?Q?bCS7?hSxCLwZd2ek Yi#&NϑoG N{k߾om;Ś~!|So3}$>C6}Fy fJ;̹#o'ڲ龌̻ ^evWlr>=6Fk^ԧY.uKռ[ɕ!yG1Oرr:ɻ֌[u[sXZ4ỻ}{?ҲH7]]eL {ךm.*mv O+ed啛jvO+U_n(xYt)|/qdTim3G;&${~/"y9GN 5i՝wob=W!kD>cv[ਬtK+X7^]2ܬmmRdt6>v౔$.>~7 ^KsOýcÿQHHРܾ_u?b[yЁ (Y%;#IץgV^~ٜwso ~^^(.4Po5 KR7V=Mf-Ȥ?o68y;k{jތi(H^VWU˾o)-xz^5G}r >Mi6SxjjιvpjeͿ?UN2IǚugmVs?J(>I+O][ۭ}5?51KQw9ݸMF_FaenL^9GV۾?׹?> kP^q* o4wɷ*ZMq7 cx\ :<{/;]۽r+MV+` Lco_9j+T]NZ)KZ;~KaŽ ]!KO?7wsۚzpJ|{ߢ{JVF&ޭZu}s)FK{w;|.okd7viEjGq\;^D;co.?5RWmCЅXZM_>}wok$wJ|d 0fc_q{?WjP~=Nj.s[d@ѣl~_dj7i*w~O]_ 3X3uF}ȊHPo*18۹goOZl朥Iʲi<V.ښMa:~xw_mBN֤2,IoǷ3GHU~tiiuNU#溧vLM%ڡxCyc"ܟ91+tMןsHrTwu4/m>k~U%^]]~V#ﲪ5SSR^핿c5=?Riq eR[wעz8Mz>_헙RKgFaow&ٿ)Y[si;kuWR22{ Qw{?;2; n1dB|Ki/ w'?n%l5O׷;+6mRSH?=>Ne.GMM I|PWEy_ϩqD޽O罉[J%+Ydڬ_#ZJ.o߯}~W5c({׿K=S#\(ݹF's9/{WAq߮̏Jʬ$ΞlܻffvaMb%Wy'C(_~K?&C<k̫/i{/f:v_-z[Ϲ}2N{|tG'ְ2v]sE958j1Oj%~Kc k v^ݮpʤzqrAkY|6F+`K!@_^i6"Si\eA˴sM78M5enD&*8],{N1R\Q]^K(9x[*o^s]Q}l-;Yۿǜ} A|k_GvfXrnT!8,1jZ;?rƳ'vn#1Ɲ'96+׷v=1e$F}u>\<}۾Ub?J)'qTNV}RrwV ^Ozn6R7E+~n;6SM7;b?t/7Xq9RmE@l|Ā nOO^TߥW67^?̸ܠ}^kX++\g=_?tqyd\r3>8JO{+\'NUV+1;[R-{u=t'4HA`خ ݻg=t]`{_FDG+J!&|̓NJ8$+~?׭t4uz}>dN; ^7y^?jkb d)=0{ן+ז=eLa8]<ʠcwWvJm=8` ^ILί$w#tW`ۂ@r??bJ֧?4b¢F36߽jW3^yo{' iGlT_߀d)ecM$*]vhY@p);N#wM5>]7;Ԥ'M'o^G|6w8M>.MB)o'd;N`?_g0Q?_U>Nie@|߽|}X蟯ݾ8'o5rz_ιfުwFNtng(Jzn1sX(7A2H<?R[jWi _Ƴ\(*9q?vŒy/ՑS][w*A9`FNs,׭|ܽyȗjz?փ%kR*'_= ;Y;nT{|̣ܰ9a0?]y9 q[)^A_J\Ì{ko,Dsv>9ePo^1\'@MhJr c1VwМ1z @^P`j&FV~O~sTrKӚ/Ñ$Jr=:T1%HS7|9}~>G܌z{%nx1_|"29jB!}zzIT9bSmQ%_up1,W_X}9J8O$]_MEvnϫG-G_[HI2@:Wzq_|F=^[;?|iqΛl`uzo_φRVߟF>E 98Q]OW_J[O^F˸|IJs5i-HKp@r:u~ow@6QѴF`TS_2FT#zd|Pm9FoSE *SlgjK$Ge@$8Z1+QiilqS[w[Vd6K<BX>:ڭAG Y8r#-ۻ񠺻/oZ~|ȼۏCz1۷jT(_r2vBG#3!Vc܃zq{]IT-&~O'D` Hrc;[f96'Nzm_9|*FўTeo(kͫQl ܁#w,n aK~8?[HansٚWwS&̈́ GF`+d>V>OLq*@a'ƃEvX)  =y?o\\m~;_KՓO:HPٶCoqwOܻBĽzӷR*P* :t~= :2jN=)_akeuR}^X?X <59t{ZqmhGNԒ$ѵ?OҊ]5Mлyi}^c?T06m/]>GN\ז#{yw|Ϟ_kźn?4^YLɱCyQ?G$`a^Vn}ӧo-;sY^w|?MQ^ z?5q$S,ɻsE4{^nwG3 EMn{kxۧ-d߽@emXĭK8#aPM^קψI׿}};ׁtu>t뙄Dc3Mw](O1O]ݵvn} .qt1mok| ,I2}e/VkvිZ]sb}|#)CR溷oK~'Vd⭺I7\MV6[;i,^bw\G}]矯n)^뽥N;0vt#'>Y%w߽}zz᫫-C6M=f93oͷk 7+]v5t9fU;GU|;~ %ߊn.Վ}.tLMvM <\sy$+_JU՟{tZ19cUh˒[{W}+OhkyVyhd/s|¾2M5ɵ㽬3v-{IBg5;y=^N4TP}hgH/ud_3E,w5%(]Ky?iUoM6]{۹wڬ)uk ΒMoCW[-Zg܍OyW^~V8\څJϻ^0|K򅗆ooZK,n.H&UXYOod_3fY^>PU+t߾U>2jO=EZ0ʓMu??O]T=^|xJ3jݺ_}=Gej2um[g8ZY;5~}]7il)TE_f {;)8J;lAU*;[9 d[v:^>T|uk.Z7&9^s<swyt=R ePWoU۶:ͶEX)+F^׷kiJă18W6˓;/TȸPN>+mbӻ8Co]u_q\[rHK(f^v1U7k^,knbi$`K?Мh _9+m46=_K1-ݿo" "n?}=~~SŨoG\eO=o>(ʐë{j>u믛3-{}z2"!3}Zk'ݰw1KSwO2/z[nZ~5W6?T䍣21 `BruT}? 5΢]|u~jߑ+\цw_WФ_gݝvW?օ`͒J8M'̌<'ORKApS%۹Ajey٧{u)[3 #.??yolS ;9=z@s-vfou ^?s+Þ8[]Yj2/ NyInh KKPHn if~V%٤FsJ~'UN/Wc%Zo5A 24ڭ叙eNrw:hSu =)gX՛nL*'f!Qk4՟TTh.$y#s+GA>~=zP緯:-OBbEǗqdo֏NM][̌>*X{Xt[2!.vgRi>֫}{x ?L=āIUۻ9ڻ_֪t5y~:~}N=} n;8BW7{zZrۯ{4UEh|J5hu;8Ԯ\JVV~]-*wv(ZKsU$K\L-e2Y]pJߧDkNm}}4=O41:+˚槈M7m[ _j%i $bo<̲1v/'{k>XDžhXf-?Y3 |FM.x8t_s4ʿ޻Wf]A{[=,jd[v߳K4_ٷ_3*?.wo|-LWV'YDְDɲ;Y7˵7͟2X溳Wn9r.[[.w=^ѧu|Fy yf8{Vux(֧ZOOMWsi+_L2ӤEZ~5~Y6s޽yydP񈣷"b_b4?.#{t›;Χz۶kk~$HU+6VM_[wm[+Uk_yhzy!j##mI.6z>+nHMVz9{/.9kS{;m1_:BwE&o&oWч/<_CoZR6\{cHURվwyssE'Ͽс<ɖ$Mb]Wd+'dt{B(sQ&բڨ{\A+m>Vid]~lj-~k|X*#*{y^~kII{'̎h ѬZͿfz;^{whe :3$ a+J÷tIF[+g$*]%oû_̆ F+yjslaWz޲QTӾyu~fڊZVVz"KR++y,S}}?Sw×5W4lČcY7VWtsGl^s~v9EݮGE[wӹ\6#yoh%rXݿ{RiBv9^]{e8ZĞ]q Hdx.?bgJே˫!I/[f=DS$R[@|ʑ B"?^mI*is?{}OR8B}w.;@l7׶WiZቍȫw>wo3k7;~pTJzZ7OgO Kkso$3[I~__ZqמR#M]Sk_۾e\=-Q RMڬKR[&u vUHӯWG5k˷PPYvGw:#~bQ[viCg' chayC)H]7)oɹk~]fz=30MZg};+^i:̡d4f޿ޅ3i Gwe]&⋙/n#̍2#[duٜ+?mm]nrSoJWoMOhVO 6SIۗmmsovv] io,A.5I> ]Yj7m_BUT{'\:(.aN78w+N-{5mwӆU\ +y֗:fq{?ԁfW9Ac.vh^g%ZRu=vmb'" 2ۍ۷|zҔ_vb^Ewhc̭o2mϽB_lqjZ] Ln n_{i:w]P$ロ>k.;إ8KFUڠQk[;N)WWs>Id;K'$>b+*X|mU<7_ݾƑQ{g;TxDؾ];O(̻|ͳ_Zx'moƪB/uK}۸mup728ݝ'n=V߫Ԋ?o_w6QY$Js C ,8i?~~BI$ݗ׹|g/h 4۹XG$8-yڳW8r{| x=<:V_?xgALKKL G{-6mىH~o>wS\ZRGnӮ+N4_4]췶w#BW42'YP;+ׄaS#RPjr{vӫ<ŋ}qr^2dH.' "Uݾ3țq~hQy"VC5F3)ʊEhh2/o5˾7K't]_]͍~.ԭDW]xZ~hf31|ϓ}(7k!ײW/ow½3xP[h,Չ~M$o8:&N6fM<;/:44M!i@+۹m9ZBy/寠RR+]{)KQWGO=>7mϖeڤ6YS?5gx;^=٬q3 V,!c#EY}z>WW?!;U뽻3,jIqv>_Ov(F+Y}޿4wB%*OTg{H5g}vIaV__NJmngXF<+)?h-.ΆHX[r8>7 T'ᆭЗ.sBŎlbe9Pj=wH}xoinn#*،EUC&C>P6z֐S(Ƨ2m=ڌ0WZ$!fvBQ#./dZUΊ~|m'jw-.Rr8wuq,>z;Jqjdz)+_JoOYٝWH Hڷv/mm=rlXm]#|67l̰҂sOIH`q8_O/u_n6mU]|6Jhe.:7z敥%`%ެou\:"G} 0N~W?S燌W=zog&{#A?M|~[պ7ͬSNn^,Eu{_:Oh֜!7}f:{_uE.Kڶznne Bmo-TGNLחS9A~gf" vmmwv~ cL#XHLҥVo|75ewH`cW;_ƽjx8j}jrZA# q<=}QTދO}ΚD~r <֗M[]>GOٷ~FkOWonKc[^׹Y;*瑒A|ۚF7̢"Xmk8 YV8c_3}߻׭dw|_2깅Xӣ Nm+m>YOU 4 X KcΒDmb'O[=Ρ^;b5Mzuo(YUԫRIi|H;`^3?5" p@9__:w$.~g (Xd'ߊYogۘ\KQq~O>B-,sc9' 8o&W Y%@۰xނy<ɖb7g$Uۮ77jm-` cO$󤤞kk$(mQi~-aLRdG_Ig(3ͻV $iѿ[oѷu`HeFPXr7Ys/Zq=ӹ𵧲ZGj$wK沃$nbOx#w&*p}:r=V m2<7]PԵVYM9#Ha[.wޕ<'n|Sgӵ~zx[._ixA{hoo/dUDiUmd]+9šIkuSүFPv[u/>'jς~֮n#&֢[Niyk$3}z>ՎC$ogyW:sb'K79[^_[6i\z|}MU(4ZقOr Vt&τu] o+i6qc5yqvrVڗi~^%f9,.2I5zZ}C:rl)^)| Y8[NթvMyziqM-,}TcFOݟtF?L}^-զHK*θhYo#̓*)o߳{YL)mEmo&FuKMA&UQ1EU4O#wwv'Sz[W= JIzmk?eoZz߆xoچ.CReaf˩R;YaM]ץ՟#y-χ|!麧h!mJff,3|I]~)ӗ"J-έIq[ynEaXntصau}bK[IZ1_k&7\M^:uﮟ3XN[{۫3Ь>i PsewmmqpC,Vq:B.໛{eqMy|ךcN2I]l><|SmNž(5"}:34wjBw;_w{ϛߛWi׫Wz^Gڟ ?Nl<=j׋{P}&97=jo$+2[[C47%?J}.뿡Bo].O!|~SٯD/5*`7ax[IE?cqY-2$>XwR3\Ϫ[zg'm>5OǺ1ōOCnik.cy.5ֵ-5Z$HQ_/߯vƢ~]աJ|zyyY9q6y$5dىF:3:"8wڱGxyBQr}7Mt~~xG~0:N}$crHʰ떰I 2I)ncWUN%s$ތeRQJhYnzO%eNe~|?u>> }3H^N-}'Q_XܫH+$hZ9<+rOb2zKZu"V];'ʭ95l-5K6@aG\ `?+iSv믯MM5]Gm7$ڍ:Ӛ5mlkx!HmIݣn|fР$k-&|sX>~xg>#-du3鷟o$_$#G%ŵ?%*'Jy^izU}>-O=߀|5aBumB ZaY-fx~sol-fC˟3?UJ.nzzV1zimݧ~I &- C3NUc!DEሩ8omRo_zc|y&/bKյ͵fYMtb'[}c[or=ƚ l3}>2$dVeXadc+Н(SM:Ѿ~o߉^, ׇ}xi.m/dh|?y wӶ̺֫[?Oiu( Zχ5HGs\mUjj cmoׯ_ϧROqH޷l Wo߿Ss\Ӻ]9oVY>&*Ula/|/5ШҎ~sc{~^8& D]6RFvy$mwjgmg/]WW>>Wt3@;ݍξ ((zx/C kǗڼ;Am˟?f B|/%S?U8f`H#w6^(ƓJ+oJӋۥ̛l.I-YOt{4O}u9d|K܂3  .nJJKιۿ!0ʊNKd0kw 5|]:qk~t_'1n! *}k7OVJ\o۫B|,[0?0x&S~IyTjQ};K9Z nhٽކhfMYwg*RS}>BjǧNvɩY.dafo>[j{O,$is(3lA+meݷgYz}ߙQ˥nHBЪaG/v/E/[UyƭV ј*ۊ^[$_a35&5}׍cokVmoy'iNit딒DCۈo&}>r,]9'z|𳯭*rwXk߫Ho8ֱvΑ#$q73m|^Ƒ|tWpNϬeܶ2}S$fO܉Uw,wrVLT'A~ӷf#U%z~;_.q{QwtK0nli34L߻oȉ$}Ӄ]?ϣQN^~w-#ʘe\l|צ],xs %~owjW5uҳz/n䶶ceUcz3P~e<"EXg{v׵UOF5IාQMFeDe++G ?N<\MUB}Ӭ-3lO$t%L^վ_վJaï+۵k~zЋ6}? ~НjmW1u'=_kD>f@Nx{osΜ_s\}|ș"ʀjzҗ7OL\T[v\ω7o x>iu_V/yye$n9eӻOEBoJJn  IU`h}JLɱFF㌌~onEݞ|7[~CAa!@,қWV.)Ew9KdO-'>SӕR6߶j>3?4.jM~B"ƑA6U/{sA~# Bv?68Qo Oײ!vgab08ۿ_i-yw~]jkqQ/wٷ׳2">q Sn:u_-B2L =)O߯A;gpbPyS?2Z&ko4RI$+ FG8>}4,o?Գʫ>~Rډlt*ԧ$_u׻>%$*Ȉ~l,w}h^ϷW>.q?_jnֶ҃! |o>o]=~Ѯ\ԉ!9l<զ~瑜k♃Vm ۹n8^{ߚTvu݂pGz tmeNI/֫EʝsYM$}tJ2=~Pyo=?]=.ڊԲ.z}e‹jnZkQNqϽrfUI20Y݀xuZv׽qwZ\BDwsr.#ӽTo{빻wi'2uc2JV߷i+%I'h^yۯ5 ]wjҊWzW]FФAGVByA02c;<zTw#yVQ+p}`k綛~ug;Zz=Wo׹qoFJ|ßޚ%k[[:w?ûg⨙S7/pR bK3r6_O^Vv.=Y]6F'2@wMDpu_hf\?#oUJ o搋oG Er2 [sޜoQ->éIRo̊< pF-49z}_䋳N~S*B6e$񹋯;7-S%vH$ (m~o[o_M^z)="uI)?\|8k)?+}zpA;ih*|oՉ27p\9ޙqW޽Oխ'Ş.5䲻amy 'f_WR&P$Vmݞ$[i~~nzjE4Mb%EyŌ62+Hfɿ=|LJS~IK5"QYN7(:WD#NҼA6l]uܗv?鳾T-? Tʥ:OTNv#.NV]-uɔn'핎JGe5e?ky_:s'8jֺNs:UXJik{hk_E^4xT-yoYաY#e#TH|$p텏8]v~tάaVPvmukE~ُ kZoc<^\%$!X,rm}I΅Gg6蟞#%èϓK{O=co7m~g}w_xM6Gou^O֓I %;7jRVmom6#ϯ9P ߷t]?Iomr]ii4~bP5#M4Ԛע霿UkG?}|V޻^S<gP4 *uhiwZlmӇޚO5Ox99zVX}c[u7mhvG${וS 5*k.o;\2*E,s",6?fo|'_CNJu]ǩKQ0rݞ[ž$DrѯF-Ǫk5;wR}ߟ\uRT7cvڬާoZҔ6Fkc|/m,KFQgsWTh2=gUm$7_D>[,۾Ͻɽm~}|[ȭeYCFsJϚT'/_GQ'hwխ#!$Bt~n tZI%sOoey5~YvX2 Qބ^fn^5Dxb?vYw6[95WkKUS|>e7p_6?.wڕYkbs$I2W̸nO'q#%a(Bc)E=M(ͭ6]R)а#q,sʞNi $̫AOV/Eܣ0ݐILmh,2得1_f72 ['pך[俯VwKO_O1lOMۛqi񪓻٫wSZI$h%S-5LU%w&^@n??ǚM{(ܵЈrp>]M[8 Ѥb+gi!*s!g *sTsT9TmѦW{WI7+$g˷w?2U"7*G[u}-kHWtDdW(J.K {bKXڅO=Y|egMB+_֋ЋPo,l*yǹXw&ָjԾۿ-3X'5o4aK}]Y]*#b?TSU$^ښV-knBMKky)sr/~N7+'nֽz-cQoV$³ʻw6ofU/vK~͛i ##qX}cly?7ܥ}/ZT1ą#u,c Ec箋jƕ"mxxI">rnH?/_Jo+J?ZӴŠ9͆eei=~s斏ߣ[HN$2G6e& |x~e{o{2V/Qdg(U%e_F'j'_j=z.jcUXW2;o:}?ݝά:}qY֜R?=3Z_ lLZOp4m@۾SS\oG4+Y_ߩ%X0YNDt(vaa~gS{Jedh1öMg어8I+ods Yw!}3_mIFKM] w`_rgGS}ߛo/9ݿJ$* O qms{ s|/^~.=B]B[Yw>=mҠ)k+͟3Ju}c+_C/e#Yj}o-⫈T- 1.y`ZKY$E4+y~e®|ޛ6 ƭ&|R'Ή$q[+e$qmƿ~VJ =[Or{2\ۄ}$*SWnzmߩ5޷isj&crmֺ52cQߚ?s:wWPѮd,a.3#m7G:+?s~_%E{Տ5mHhZzl^E|k瑚{S/ڌ',sתӳ_T){_L1F7v_h8VSiE&gqY[%3./,.N;͹v]O韞Tmg_ޔcZt:8텻qn|I6c0=iҩ(k-~]Z(^g[ ˙;>]}~Z\"|97ewnƔvv=9-ޖ`'K6ӣ>bv)\uok߫o˹0,w5 f˖wʹ^uSktz]phZz\lv >cmIͿy0W"ͯZ.NQU峷yԡm]enu'$╯ﳽyG>/}*Xף(&-, qNft~Βy߹S Yr;|u?o>2_~[׶ۮsM 1in~aytkOEcUsn}5~$~k="V~FѢ,rc+Ω+_r1^zk3^G% !\^](Ʋ?s"mW\P{v9%k1߻L?t:_ȷj&B=QLK::|8+׿eZi=K-͵b;XZ=͖wnEܝ~Mׇ[ wSIKNkw!ͽG..\*ƥs=ߓ7tz8OmmJ^}g)Cke֐ڵbīmY_Tʝqѕ_SJ2SsiiMri~&|ck$^pGmFʲM ׍긏UkM%׶ǃ 0S:ݫUw=?|B nZ1qjzdvsr֦-Qm"+}I]ʬyT]}tb 8Z]osm*Qj/请C:~94 ;;-~k9wlFpwNn1կ=< i!}Ro57Cͱ>,cgTj楋k__*9?'wzMi6Rjkkơ,+ DڻNc\;Mj/ѳ_QY[fM95.N{W02u_{MR99.yCϯB^o-߹Gu K;ʌZXg8}Ҋ?lfq=>ze8ݎݗ̙~*>Du|E$oۭO'hsY_+H/3[; Qߺ '̟՜5պY^rMIl#lOЄ#Tv^:~rۛ.[@mdMl]?*%Uj,5n$w/ifϹ(N-m}{w{]Ip~[-6Yb)GwҟT`_]m.c(u3$3mY:|K?[F6/4o^/<Rܶ_6WO#o/Ȝ+$2G"jmo_SI==k=9=Dpc$FʳFƌ~}"|:od:]sڼ;yjkg>Z09>[nnS\TRvt][m\yWl{n>3WNIn t;0Ӄ~뭶oX񦉩­mgI tFʭǽzDp[Sz0N-8`5-eVt$`|ܳnVֶw*TWVl7mJ8H\1RyK ? dWתM/bّ CF軾5qRO"В}[}~~kAE]'߹:$!FGmۛv)GKoc.hSi-w꟞z)R,~~@Z5iM_HUF$98%%Q89cJ)߯Frpwu%w} WM;=󙑆 2zg5yMn"GF-(?)o>_Z |wt15p$6Ӵ})›ۮ U^`\ ?{}uI6:wW}x;n`AKa~foaȓ_;֌tu/U([w̬q1=TԩT/ۊ(!ÎJz?? *o_VedA'H9RYfu-o_KOMB˞ybT$n yv9QTe+dOYax7bO _{rz~xdLOiok{>\dONYwLxpתW/u[^Fq:qvv};ki>lQi HNIevf{y^42XNW~#0$T_n.tugh"r1#.W?I WO*e|msN}}I;Zh\`{gXxZ6J_7}a]jokz:dJBwgo?7?])aԚ[=>GXZBO13mR3i>eOb'[ZlٝI*IJ{z2ENPvZvmPϧhZI[K{o'fdVdQ?ŨRvweEQ}K> ;F4J#"ڎ9=ׯ^o^X6l:{ }ֽjj3"pn{;k?5~UkܺoXO)Gv__?ԥsi{˦}3xjE~mv|s]frv؅U{+w{W9\VQ)I}ۻn~RkINi^V^E"cOw|?<(-R1yQΎYvÐ N3Jv_ևv __d.ɒH:_jGVm&A%<|k7}6Mg먰̨OO[ϭW"Ȍ}Lgݴ={jȩIYL |ǯf;Zr>#"aHA*\y}j^+pׯq_һH;'w?֯'QkR, Nqmn(σx7 EwkgD}oR#}jRwMU}HY#%:{;ay+˻W_o/U+;7;i/$wx_kwPDᯬfX>fͣ9$ۻgGk1UZUT|׵Gcx?Rڍە89&_soVS|l񶓨x]S\i2"z‘ɽU6<ȑm["WV1TdRY**HPZk۶w9*'Nki٦􍭳龛|ཿo]_ƎjuȱBۣBev\Ւ?&QύSOޯNUgKxJ=+_ĝzC]GG´5Un6h?Ͽ9.}N;>mXm_?'xJ3atM:T<g$6Vp$mSt|rZt]tt^|GŸlW 944Z~ox>N\Πi%m5W#ٳ˫MJPi{i {ӵ׼ooxcVlj4M/ K~=3-y$^|6i )r7'_vasH%~|U,6Q>N.hrߕ^]~0h|߀<xoži_maԴ6h5/./"uF5Ք-{S_ |5#Bo^j708瞟fncO-!Tp$*5R7տE/.ZvV"gEM~U*&F*)F6oO.mjT?Du66\Mϥsԫmf?o 2ۗOw;}~?l!|Cm7r7oS`{q=#FeϸIg-ݵϩ?N\)F3մy6ƹ'V]_ g׹?48m:]v-~;%uܣ80\%F6mh[RFQpg`7NvVIGdw!@WO}vM]˕&a\ G!ʳ3Dwϖ=3x/.F7wϖO]i#BNmsrۗo\0ҍm~h1[zYޏm<+"ZFS͟?cV/^[˭[Ýi&jE\Y\4Iƭgf}듒Po*Qu~'/yN';ˈo1,=xTI#C吝 \Kkܬ5Wu䪆r[~u}}Q~N܉]:go :ѯS"ž0ƚ鬮t k?B-n4!SI4o:-||xn3vg2YNpZ¬?y!tAbGMu<}ϢU\`E~oƞ:|9j:w~j}KY-p*Ȓo}r<7}VW.tvz=+7[^ӧ' aY[I4C@9eӢ B My7̾jyΑfI/$O|v=z=W__Щ79꛿ڞ;]^W:,wQxOՒIźJב4)5vɡ|yy; |l-­eo޺}m(nnm$`j8MHmje3Ho'ζuhwc0cQΎ%ԧ;:k|mX,,Mk&wO|~][@',zQ_˦vܻ{;] 6߻w })˕J{egV*WVrWZi|=~̾9:.%hO4PYyv$woݶ[솝<[[=MUEK/?7?>h_ H7;ra䴍 [q&xml?GTWo"RQ{>27 KSP,ocf8m9;ϴ}Ko#q$(邭N3JJo忧C\wx~-xUZne ֩{y q\CorVhfI>!oJ"7Wk_}z){^_=흚A {\M{ˍ$kV5ܾ^FX)XsFj֕;>Ejއ.Ijɫ}漏o+}o\#ğ e)lu+Pr֞bgyEhRuޏfkcgL$_4m72HƼ' }y~g?瀼K ՌxKBw0EIaۭđ<2W7qf؈S|ms;4~ߓ>p۸H]FzNRNW8zͳFeUGyc#?s\mm^FQ(+o9- ;3Jޫ['}778?>_ -ZڧZ#]S\|c"}B&}?wq#}4A{Y8ŋ|k| :h ɨ[iزMqq[6!Dy<ϴGq|25.]3g;+r쁛p_PTi_{U.wkM䍀G$ݕ?ZS;_o6n>ߌn\}PӫSvwpKu6'РMXW>?\s/_#) ޟ_.%>672oVX_&8HxٜҨMwg;?=}[SiNjuI{xz9AXVwnMdsי$a!ȟoUo_?F#)5-:VZ={fWt65㷊 7@d8U<ͳq:0EǸpuקKzSvomWm[_"vGcEK`Uoka-%}o|)fIJ'tclەP[Ww_y]:ˑ䳻&*1ŷ֩y 7m5C=kyy ݱf\ms\l}B0Zn0[W%^ip;XZNw_̽]%ď~qqmi{r{6C]"IO+;+u)P*򟛻7x5k}&M= Q9 \⼾LT$N2;}IS,æ0)ez>Is˝o㱶0o֢I)?-ƫKV;biy'Dtw^zK*?ڥJ1J[뻸m8?0Wl{^F#%B `7֯.z[WAr@?%j+ϣGd7# 2xݜ~mcs;bAd>ޝ*΅5w|P 600OJjn:wa*:|u!okWkk+߫UG~U}Gے0|ǥ\Z_Bp(".d<Mϕӯ^-]k}"ʲ!:}ݿ}h[?} )i=ՆBeSީ֧mI>뷢_H nq1+ዔ۽"w0Ń{?iobG9p>_ۯ_C~H#ǧP?6Ԙ%%_}v`1m9 y~}nV$+d|Ҕd}UCxw1~cw8UI]hcj_i=|_9ː泄u{Ü5.ۡvQ}q +w/gK.ZFZ~^4=`ᔌnֳ甞_{;K_~dR*8;N _'k ߯j~B?!Y]6Wo឴ܒ}LeKh4jGBsv[S26s:j1_#J(# O#n~߽5m[˱~ܳ5B|QJ־޽oUՖg[p,B~{zToT[|}θ;]ާ|~w VL~l+++W/gIIǕ7_o~|! e/hA6~FNoyn7}:k<1Bgh/xni~יtg}oݣ~n=kQKdu{[?/,+F;ϯthHPszBܤٕ$-3?C!fu#kkk2-WoЗ; :wqkR;?\Aۚ"z̙7Wȼ􎟟j8J\?:שm5^wS >J˨Q瞜r9w/+/;4gظg]OĉT*r8P;7lFO"M-(9\?, z!;s29{ @$cП?_ƒhoV(#9;;mݻ~4'gq܌5N6w[?-v,N:S}MLv2?~(*lç^yk^uٍ+l@p8#ɫ%ӽק˧r"&AG^=~FUz}-++!;x?22}9#;Iyr\Sw;-?^ڬ9#6e]ޠv,zu_oZE+2n qf1 kTW/$A ?ϭfd՝p BdukNO1| 1Ͽ*Kb\vbJcj|{noݵcDېc8Oq~Hvl둒}>_$V#9\{(5zG4d0a>΂Kwwk9bq}ֶkEvzmۯ*(I ©$~Q?0w':uѿ^^\߮wmK޿2, r;?(gꨶחl~mxVAyjr0Qvfؗ+۽?(Cy??H1Z>_3]߯~_1ïMe'_OA'OM驞3f?lye}k#lsz֥I.ߏ{~%.~)-;TtT.D¦1˟w~3U]WjVYRwm*shu߯oI{teEhFr?/~sYE}D.JV#[tZ珟_LI9q3?zUO7" @>+]*skq8/?kx򵶽opz}y\AXnx3IɦՒʂNrĠ'w?+;=p-7WRQUIc=~U\[}cqFe1[Vn+l_ bAqW_57&iRk;z}z%h\H29 w6vnS噔*vsX˹Ik7&Տ8/Ivj/5vUwK뿧A"$6 !wmkJu=kVjKW=~L)9 Hox+㿯NXO3AODj.(ߧk9.eu.6~7'h`6U[=_=3o{Xl߹#cq8^ j&կ{['{p34Uy/4D*uؤ/?. $Go5^@$v_L޷͡(oW%Ίbq ]Vܿ׺5pץ ocJp_jcGZBB3ڬ6*`Jƪʬ??w9 i}o׾M":v>mOÚ74%ukKy3 -UeGD޾JH.=-kԃQn_^ <+)NӼh'[,|k*̒Iٿ$=+o]A&^={_"v*, sMz?s8_O5D9}oš-塷 Nе`KCw? s JVmkfҽ䯺z9kE [^bԖI?D6W-lp[˿gͪQNDOkksuvHh#gbhಽӡnD{;,M$"FfS{X4_k_e}NYr )Mkߖ[箈w<]q X{DY&O9<69r?xMo=cѥ\t7Q6';-u77V&ιk}69/Ӷײ5Y++2'GzVT+ŧfZ.cΏgGJk}=;qxmu4eYTt3,|?{|5q6 ^z=|ooo T)Ӽq:?hxz=Zdc&ؿɍ|̐'1+%(-k<,/>i9u]_1|E}vno5曩*:^9}W_6ðF>ӕ>z2NomnsJzR$JGe{'_S5k[%ԡhY~ePvYN_$mcFZ/W3kkmm{EFE VY_wN_Nj8Sro.no[7s;۹~m}zҖ2rܺZTbpI|b\Jlnij17++}kJou_:ci[M%>vo,݅/>n?߭c4j{$w̐gpamn_>}GV뽋6I\mo3MQER;Fc9ߗf뾿n8ʀ/7_/d~>bh7<67QR<˯}ԪtRaU rF~Y't:q^Wa$}~nT}J*qZ-|ܫ%c@e]XF?+_+|޸:qVHyqJaLki}gE9/tV/J+iN3~Zmj @vIۍֱ͓)|;)K]>c{ G;Q?Tzc?{󪌛9pze}+4F TU#=qn]?)]ڶd(B ~o_XfGn)TapN[*%߿[ꋂ-V]ѯV.y*y)RS~ךizJ??ϩ:M4щJ0 s|{DbWdN3(L,D6LʲXׯj$ޚG_{tvbkF}U֢WiI^_/Jm]x!v}Ӎ?hǎ#2R>~{?q~ JVvR45d[O}#| i3oJQQmwΌ=Fߧз$/V7[ zEg]>_D_6%?Yy~XBRvؓnܫywcJr%]mZP2̲"BSOTnϞQ>k{ڝr K9m$Y-&eslyU*U2+*Tz1߼_wjOqzBMb+wwFs]~%T=}_wr%#$3"wroɧ9n}$ -{n3 So/dp0VtB捗u]:ˊI,vdrBOwӮ_s~$HQ_t6C-3")ݹȹwR|zJEugwNF~͟mKyIm6) nǹmn'9sW߯o4ht$Z&ge=Gf _l6ٙUfdui>>Mߚ")=]-6Jַ nQt96;FݫUq 5.i[Go#4駻M,GU̐߼S&5Y:ݶ={y*GӠh=N^8B,]?ך5t{5E`?[-s4J_*<սm{)bFg|G%#~_7&]=?CnT;멛e?7&BùY7)qn9yg~d}4 UXCrw͹z{b1U}WE|6w)c6v5${~/Ri߫2iK:KffI"IeC$mC"7Q]w;Ú/N KBTJuo.Uͷa>}Ru%WM>wKoq^!O-bfBi"VFwo&%u{)5WɘF\wow-젰Aokn `UUAo_?8~קODZ2iRmvmȖ]FbUN(U]M4_3si7%{-}~GCխ?cfu[MHhYn$inFRK-=};w:)P/WwiivƩmZ)<ͳs}w̦vϷs8S%r-OQ\ؤek($TUe۳yOx+sO?N jvzmP*#ڪ>nxku%4 }"u2D Kpw*MvotU3uY-^cVN($jr+#pqO][ִ\KmEO7N{F-w}o{u}X p\K*Z[yQFR|H3uv=e+E%y.XEҵ mDGGQicWov^e| |g {(^'I|+L\|5֩ WYM&~O%z۽~&5=IOs ~=kbE>v9|(̬um7nv\O92̹߭p䤹_}6#K<ݰhF~?v0ǖqK]<-!# zܫuĺ͕RW>O͵F|ϿOg6Ju]^c`qsU|w^#gim6ZZ@\I}7O2;~Lswߏ}iU5[ۿ%~8Z` W߾[x2↴b: xrhfFhY9IYGڟޜ|L>^IkY_}b=GƟO934@YZE$cCmwil=ϛU'7o'˧vCC}g fWm/z~fj܌F0U;zcՇթ&V誚ۭ$ 忄YۭSkGMϯvM('&Dv0?ܑm;iKJ)r;w9.XԘ#;5߽t9F+O~{H6mOԠe7w>u˙ffCǖoUSU浽<,LɗVeY7 vn>NR]zsl-YK[}вcP.w}v:ol:cyF&H\0Ň˿֊WVj6:Q0H_L 6fh?I)ʛkݿy M|_{}"4-?zΜ$O~8m_fxK?m+4U/יSz ϿnFuL Vb}ϛ I8TwscIgqe1us$q||lNk:Vw %E/ϡ.]_[{h<)e$ְmW;Y̨==wJi).H~{v Sf!cfo|,$z;L(6?(zmy/2~!Y}@Y@.n:؃y{*w%nTKQkk3 V['F]*vo17ѯ]ΰw 37moUI;*זsӊhՅ%sӌ5~wk_^յ |/k/j~eKy&ӼnvV5Fj Y7 =K}nG3qṿ-s9g?)¤?_ ؤh \VW_Yr_|ƕ6ݯtqjr[+>һ}}VmOz &54YiY@V%X/}}9#N~_3W<j2&̪ s53GGcVңN6~z}{#?dyxW LWQۣG)ph*2W3кӡ ^ׯWctH { [BCCWCeUJo~{߿cʄ}wu6WM{y$hĊ"4ޱC }k i {Rivq)X\ۓn}Ik'V#/劔>qZݛ3)UAC0 .Xru6gg)c[a߻W{+'dM3FK?nydpJN jftU·/RV೚T%Uۙճt0+mR2)7]Ұ'/_̺8h[No4FT+`~_&e sŦuBya𵊖 yFc۷w=_s*WX+elXc0?e]̿Tppvmv~_+c,v2{zzTsʌZy2g yrWQh Xs_2O[;oGȨ~S z?֭)be 8[o J>o}E5{r8} e!|X ?wkaϧ5p_k ̨#.I;pߛsG(z۪BX$?mʭ˭rS+7~C)S_霠N3yv'H 9Y:cU.'d:I#`YKR;w)ǟ~{MzlV3W'h97oZ/AfQLES?e8F)Z_ŁmntfůȖ3@#1ǯ+Dy[pB6攚O^.'}{殮'yq_H?vqcy_2{-ο)Sv=?VZkݓUn,lCZ@x",t~r_K._}')D$-/k2r^z2Um˷>0X|>MMCP3Gsr֯e"oYt)~֥JICnOr i[[tӾ< 9(ߣӢ[_rvѢmU} yU^wnck^tɹtw6yl)ndN2Kp,Qs2B&)Wr~zLqxmy}%>0-'K71H6Hmb N kԍV <ʾs!9JM).mO]_kTO}}_ȯ;_xWFI<?J7*ؙN/}WMnkq=OS+$VX+ 8A}/oHdfrF0Jpx׭Tmoqɯy[!%A2$ԘͶտF#5R$(p)!1gā#JXҳ|O}|EnIvt_޴9=cMw9ϧk(!Ks{|Rq!h2s7͸tLi`'s˿+6T?妕}Sz;6ܟ>?CV{dۙ]gJN[ oe rǯvf-9_ħ[EˮB۾Q:S]ZKG残OY]]@wg}嫏 //?#=Z=|~\MBkkG:mT4pySmxجI|^=XgzGڽׅ/uXfi4co#o&em>֒=a)whMJ!ҼM+Z]KMUwG; 7er' Zվ㈳𿈴׭$OboM ]w|.~~ޥb%JKߝC2mp5;OË~:ׄU|ڦkzy*wC4l3|4w.l>I8ܾ*{jqZN^+uzen' V B5˯m w wψ>%W/kqa$:]}=9;6M2s3<J+Pg)CO]Z߮_xuRfX eOrJ8܎v~??Z>š-'񶵦yuVTfO9_~/̥(TLwĪ>ek?DL7Tמj{~1Ϲk k~ |jf(Vجev"c?7z$?,bU׷Cگz_/ټ?BROk O h_g7-EtqkT$V.e1z{Si LwtCR^ע[~zD>]7Q۱$Ov$.<z Mŭ_kpl7Uknmc2isxiIrZ3ւNO#wׂ4ᆑo}OOeKMN8ydm&u[~4w;~N^5k~8շ⼶ֵq^4gRt ټI؉L{iSWx8]$ދzf>|2.oƞm+ n5{\BيyGSҥm{[g|(G^ oS?|{%Ƶqm\\=vO74wOR*R;UMϠޗn6O[v{'9kOw nl5xmj3F.4G&72m_lڅJw|(QTM_?s7/8X5&5k$]ž¶6̾\ql.&eS_?ɠ'xMx:մWx̟%vI3<.So#d5{߶ot(E;wת7).uvR]cg}Iӯ$i#Wɺ{Y5Y3ɣ0#wzs{юK=l/ǩӎʰ߹-tF3ü'ǦG{h{/q~fevLM7v;"5~/ὖimE,|Myg݌voӂ[C5Y$#&u=jcW̷hgVv~^Ϳi_riDVhw#<yfO0"]}JZnUZO6?w𽵝O>oxwZMH}I6oؑ̐Ÿ#xN%Ko[L:2Zz};G]k e-=0.Xn!$_~}̉펌e'k=zwyZnuկ.:~&TK߳k=GinHn,ub#4)yg/KySZ3,t}gf_Uo$?Mm-?3jZ'dco/:\+fMJ5w}lߧޫ]`}~O]OJ=jگͣѬqkx;\Cqi$-Q77| <Ջs\ٿ׺߸QGoiߴwXna!_yF6~WTw ??KTxeB5S̶r4q[VV+:B:y_^Z7|\(kkmi ԚTzFCwUo1#Vڬ\cf_ )u+bFkX Ws4Ho Y}w3ML |07c|;s|fOLzylr.קJnk}cҨow~XUdY5ԦKi3'ʹz=c^Os4Wۿ{;}n M9_N (E֝_~K+Nge}L>M\p3WsfVCO++B?VAqeYIǨG${]UI6lMqS$~[}2'um.kCRT< K'|t->ost)an[:}{=_|>jxᨼCjjz/X 7RXf}6yĥva-fϾ~u/e}JrU81h^O1w\X2I4hb:ɫߡp\ˣzjio<Ɵxo KŦ<<#_1&Β$p)n4is9N[}n?b+uu?/h?d5 ;{*BYfު˻w̭wl~dK];i?Ss\{my~#/ƾ3=HWXw PKn]ٲJq?SՓK쾋O;yA#v O'WoݫqN>_6x2?{_od+M+pzbo{­XZ?ɔ$#gKw]H+C"Hi?٩u<4+7wNow5ޥ…US#FH'mm?$ȣ{=LWNl]3,nddг\sRRi^m:iJ6}_ /xjV3xH{#F4p9cb.߿/5WJ-馉8]9wO|Qh"}^*.rzt2渇̆9$_/|g6-rCX*V " 8Oh$ڙn&WӉ0Z/>a:w5rmv̟q/;ugFYm8sV8iu/z|rV[4SiܤAm-$*~?1ETFG~ե<W.E^׺*5\<\^[}ҺT*< {P_* O\H}6#m7MWN+˓׮﷕1U䨧ytck'w<1 X\VZ=R]O,~Wd#k9([[oG}C8a)AJ^j};mw<1v3е[&tuMZH⹰,_.e+-<ѪȈ#ͻ8G(v}=zuJ\_J QQRi4{fXURin>gvBTKSJkזgJuӾ/5KIԬQMkoyNUwnܧr~g|>DznPw>ΘVmUiΕydsp{#`~c}+E]?/ؽ3${kGOy}{y `7_?SZz~?a Rr\;Fzg7&.INA)0ru~sT I-Tg?ʱtU_{ԅVkOǧ Nk6N?oVizTrX)^s6?_=s5Yǥӿ~mݝU9'w|ϸmwku;7hOU m\d0,?\m 4u`1Y?nֽujn>W灁[rܽ4۷ ]/|Yv`'8p4s&>\¾3$RN88 JSF#-B}w]sK  <k(ǚ $@>悥uʓMCJG{z^D0;o88pM׿rk)(C?7^IŭiICq*?yPV:duCH1V/7<ݲ&knSc/?1Aq!ws8<|yHW@Q2NF9?nDǿBʹ9bx8?u(&.R#ZcyG#ެnW6RzqLջ$ JkI#C8;szoby+0K0<{;w3s1HPqTdg9oHVf^o?w֠M5IUrG_q[E5_&siRylcFc{sTrxõa7:A*i]~lQ?+U(k_JrN:Yݶ$*d\oo|6C=eqߜ}zFO3 %_6 du?];R䗑F_7VW}B&~@o?fUWlW[Qrq0IFwwvS.[=ۯ@n?jҊm56KVG8ygk\7Vd T7g9ܗ^To;ϸV}{w]U*z|,yS?OI/hbֿvk7c\. $-|YN1Ƭ򓐍?I/o$ڶRGnw?*+.K݋w>D*7rz>?{u_fk)͵)?ׯes` ]u뚤ٚUx8]y.=G"|r[X?4pTy6a?b/֚ݻ[_=U97m,~cгs%v0̇gΥKg[|?'*1P#S]J. 3:r،|,d˴gSUYCX>OyCZF#G@wz TFzu9TJ׮//?$8'ǏNopFwww26V\|ܣ'MFZWrIN[ۚf׿v'޿y]'bDeo;V~V+NXcuqo囒^lRZQoԞ/$cfPkT4+ w3 =rgrGlM76 ?/kmeg̙8龽\`0moiGۨuOY^@U%1Sv~[#Vy$;WzWRy5~}bC =z㯅o׾Vh8u[3Ϯ4 b7ͪi2!TThB$2ymEu_>$;e9Kw|m K wWN2U]06sW`SI^~ݾ_9E=?~2Rڷ͕tpm#=[syl'M/;^+îFv_^1/miz.C'{+Vq /̬c}Ͻ3Jvŭz>!त(mo_/0xSWѡ1~gs{|udN_j׻=ٌqS%_GkcQӈmv/ e4uz9қ4Ţ[[>h#ob!ZqϵUF'o֫gnu׆4 _Yx{-͍7 ZY7L{klV8L:UUXg/GfV&5yn'߿V^w|A4R+mCt7vyWQ 3[$~'_et;ࢻW>: &JoN[Go-&Qo%ΩY{&'4Z{4o ]0˚/SgMRK[K Q|m̬6v Ȓ'5S #+oNWn[vk"*G_lCx)&+=E"HEulE[}NkJ)J|'1}~>})%% NXF,|uimbP98`[ i%[qŹG/]>أQ:4'3m߶],Hn&}ĤueVY8?wө7%jo۫r`G2s <-9|Ns'ܮ(NJ}# ^w׿{Fyرo1uv~p.795'1Tg۶~櫮ݥUV߬Tw7p]u,^%m:(;xu nͯl~;2mƟc[[=ͬ \͹/˷fsT~%erߖ\j wcbS͸ͱNߟ9b>ۦqߚ=y1D#'o=a_}A7ܦ!;1bP$m)ҝY-:5nE2P1)y2EyRgR{}>}cT;*n3y۲Ӷ]o=.7ߥi#Tu6)7>youaʶٿ]N*樵Z_oEp /p17b۶ {3KuLbLqBT$ȻGf;f>OДb˿Sm_]< NƏ)~_{o-8vmXۢ[#qVR2#Xj=l*6cMг*sUXۿڬ_>Nmj7 [Mn!M% #{neO%~i^=8ViӇ]ْ9֛nLԬ,ay.Fgd϶s"'?^e^)?/杓MKkB%o,h#og5QIrֽ{{_?cy-α٬(TEeܻ}m/~[hJk_kڎAI&@CF.wGs_kf^XF 6yM UUO M/a%d^E›_?/5{O,2E@wvw&W)ZN3G_1,TMlIfċz-*?W $scrnY?}I5o W_.df#.c7#h%>V /pqI~~M~mr>X;ewm+ש+ΑK$bT3dnc(V }|i{z5,>cEIknS*ESݓ{>pcPkIm/ $/(72ryv;gֹ*U~[Gw:Ele[o4`@2Ϸkm* @PE=6eJ2kWkקF;)y"-'WifoϿ>.TzO/ɩYd7nE~fǓ=I%𯝴mm~|Vkj<.of.tKȉC\+]DJ6ukwc𶣡i1xגα4F]?&WNk}#O)}ľ!dkfceWlq$E_د3zѠ㺿/*vWSapPi{R[V*ixWFH%I%"G{gUIKDۋ~]4¶7/Q^Pӯ?=Vz/^^"\.,Q2ZCyu?+4u뿜mK,IJdu/_F/C=* IuT?e?g赻S`OOurҼ|y&T䛋ҞK]6|a:-O'nz>{&CzR$iQw| 6,<&E6%-l1ŨTO?iFi6iǓ1ǗI#F6;;WRɨޔ5I_dKt=*}Wz=F϶~kWFgϵwף (ǖ^s?ڏڌMxэM ivi8Of)Y );^7VW *bp|2[yY7wsxCZı \wU6lzKP6ɳpg…w|^KooQ7v9S $>w}-v.N4e-Nwz~YiZQgO'x{ۿ_">w;A p]fV^>˻;^_Q%fE@b7{:అ(WwkʰFWˍ8.7,[rm_ԷevqQJͿTCw!1BgvڤyOQ׊˚_NY(BW˷dQ[IRc.Iho;:lSQ{ܚOZl/u;`tT&Bb62?mNJub^~iF;O~l]/W`*YHە}>jh!>K^WkhAbT+N@;o⟺Y)ʣ{{uloGrȣ{lHVa+/q:rtSä~~L=BO 6:̍#uE]&˹V*մwe-[NHдk3j}sQX+~O*oܩך}wL֟>%mZ3( ?:}5Ûӧu뺶̣kZUޙIjƓyeUiVCY:/_:Z;_Ts^VquŪ_鲨H/<Ӭ|-chw~oQ+ۙi۵wYHe+i.^@JnY''9"SPzɣ)'mCxEC2XGuu$-!O-Wn߹}Q~~.xG-[=[zh|u$h fm}TIn p*u/v߹eI$d$ƭ3Ϳ %)OVnVUoľЋmnU!qkԽ_(ab~^>ۖtcgK`gr6vېp]=:tF4+=RmF'hMY-TIBGyPveofp~ojJ1|ђMwN۟?j_fʷ>E_klw~j$ѧ?9gZe%߫l}J5,ӷ]hg4[K?[.mk,o9gs?~(-dR^N֠XYUVedOeOׯxבU|մc morW Wo}a9K=3|S~j C(,?c?H~oN6$WL{ސ|/aZoV}ߒ?ż5>r>voA=mʤk_UPݧw' 1ZW;R7_'˹^S"Jm` l$7u?zPJK>]}FIK)dWmӕn[wYԾzw9R\[:fcXemb1mW3{=NQͮԼJhSU#|߬}G΋XّX̪B WNIv6Z>_$NrAA|(ˣ菲ZVU\q}"~o3Ԇ_9_mn<2LOsu,_h䵷fEܺy>ZG'Sq廅?0+MFQ|<7Rž <=JjPvײ3~n$d7؊>ueh+v}*8J#}ۭ: #W>\S{%{-lv򻖏cB#|V7)B?ZgUTTpm﹁qxvnSNV]f$pF~Ӛ~:ݶhUk96ݭm=NEvmc FV1p@jא&vMwo7סU鴦Vk[< Ǝ5'GkO#<Ik&c)W:PQ5#maDQAi]\*PQ˹*/R.wڰem6kȣ| n[E7ַOn-C2f5oz xRq@M5fef~o~wQF $U(>_=Oڲ&MQi3OwJz^Y^5}nNdK)cHA6Vk|q~Q3,2Ri+Nwk߫v8sV y+G{mkZj$WG:$ LT1gmYљ>į\ogQjݖv?18Iӕ̴iv]u1TԾ!^#LPO_Iv2M~8ҝtNIkwkEQx |Rˣק]'/5K[xŲۈ_jioeotw"~eW>f8<3qu#TCI<|J<~?6}WQ]_QvR ==R#^DenSƃ4I=xº9AiߟF 7C^Q涻kmvt=M++'cFwdpAi[c^E#aGAYV^rXqSVw:5J89\cۻhroroձ"f>'b}R6"Qi#jy*VWoϦSУr￯[~G[>Y"ur|g[-z\,l_} L|b遼.m_3Kٯϋ<]mD2;mX[H#GzBҾwTOGogߩR¤g|o +W).4{D,ٙVf}Ri5O5>r;o늖?iMMkz/qWZ_>WG?V>a#]ikq%XȶjMad[CTGW}z I5kK83֯N2e~kOK}5hI?k{%к/I2'&^%~h]wv}&n/og>&~_MǎW>#KLmu}uU̱f{XFxHaT_+4x߻׫|]i럇u?­07u5O4xUf{ aGO&9_/xiٻko?=ryW޿}?$M㘼eỻv#eVIUk>EKYr6ɡ|ѯ=:Xꘅk|gwF BQvqɠ~_&4ߎ4+Vu MIu[dFMkgi#;j¾!r<]8yUl>0˲<֓NJg:I6ۋke e/ Z{nwkn`4&溸9.#7GKifw㼟+38Pu ENEG^\Q\v&y_%8k_?|Q-K^5; #Ӽ/ڐ&[xnYHar#ƕJx G׿O_•>HRŮu{?> ~'gS-6MgpCK,aXU!UOgdyFrS%{+3.!qpy~g%u}| 5Gζ5+(X}zH]9UrWW$2Ise^1(BcΞ]4J$hݛ['?fy|QP2-[;xSw~wr>pʆ7&Ӄ;Ric0e?n7O:zdZơ5E 5-l0:n\[.SVRjEzu>' lOߣ^/iR[m8XyBŀo[q_eMHE2vk}KBacдP8 g*u*Q]yG>!Q*y%wB߉:?&Mo.N19S_s..*`#|`ȯ~<݅utI߅u`"V~m1_OdUs]TԼF6NXOխo$:j_~'jfVleIl\2ݱg~G[{G&b=vhϖiL %H:bۿO)kygpn{Hnvf+mұ;ʒ+]S|ž<YxlQȖ.:3m._1U#& ˖XS^>wJNMIݶvHҭg8M%PIcxpM331#rU9e~){d^޾QIc*҂6קg׽ϩK?=^𕿃yJsI/{Z38UqJtW3GwzfV.O5m;yVh? ,uMLKr[I_s=-_#+}7,o~oO.3Pp9Iytת:M3{W:dvqYǨKH,#I5~߶91eF.Z3BEk_i%pޢ1}v6Ѭd;;7׹NnG=1l۾䚅䷒iڅwv8#t~fh[W QJn|9iZ̮ EpϦL+5#w#F>\U%%t;9:n˯E1 R]ܴpxPfkBg~.Kݯ70O,9$ݽh,ޚ9v]wu/2IWw5 {n`m?&B-.$4*̬>4ӯ {wsѼ?YhdYOa#y[̫o2ITOk7AYГL]\m}s4,$ͻTS_7oOT!/1OCIM29E[$ofGI2߲Xu/!aiB7_=uԫ o ÚN}4;\ϥ$qZY6q{[UTT%ƛNSZVM|_dž 6 gL&ْQ{Y$Ls|x[os 7)4R[<[B+R|lja~QH&k >kXd&qsI\[mʧ >gb^*אp6/"$7nʻm·b9< Ӻb2맸٦/-U3"ݹ6 tzsM_ l$1{Wcde'U):|_wK/w6:?işm<_':ωl59<)yuq|G;Yj5sL})>L7jJ.:>i]!ק*2#+udž ;Yuj֖)淎&VGhIޕ~'oSֲOϭ}f8EOMt>/#;> |;AjzE.bӬ&ռU;~So}&WSY4'n[~>KTjJ&֚>}t8?h'LGu{nՠ#r+3,lۛg}wet-ߗ׮3 ^גIs71<籸I!]L2fI6m>d\p,WyU}|wu99WnxmN/k 1Bso{|zi>Qt;fpbsf{Vۋ0LeIrEZ^_wz˗`R6KT _7fۣd:QB!'>h5>M:xntޛSڵmc 4{KȠfx4ŗ Q|>M'fURTڵֶ|ikbײ6F׉|!=Kҵ_xj6^K3 jɵ[iߝSnt{hۧ_ΉNpxx]קu~/TxvC kmgUS5ŶcmGwp;V/YSsm^w}Vv&Uo[cmh%ͮuۖ&,{NFV>d{~oGn%}l0ek]v}χqԱb7¶z+g;*?et5HX;2HʫI6HQ}/ÿ)b"Օ}hcn{Η>>)|o$ʳH$EIp|>TMrPr%-%185jqt4կ+;֯g~~"O&-KÚ{A$WM& 67"wWWm}ュohZ4ۭxů_f.<7k,76ݰŵjgkg 21/Kv^GFO{yyՊqYteZ|}G䵳,r,3M~ϑYl!%Kyk{Zq6E|@xe TV}WQn ꯛ'VվUO/wj/~.~Zt:e,:3\oᾧA{ƭ%6s.?wh?">쫍tQoy]jX֌w|sĵ{5kӧVh&̷Fdݹk7quqUx~]~VzwmBSVv|? u;̷iv˹js/_".W.Վ%V+=JcI|d ۣ[trm4r]{uغUnk[?G|#V 5xOMYö5gJ嵻|LeLLmn;m^sF## ~ymsW;pW-yoTFa,$ScPePMx{=Pת_sR3Cg<q9~=JK[z~7Jɷ1qw=*WM*n ';N{TdiU璲{ya GmεpJ3R_ >w #R"~*lzTQ?z;Y 1 '뮦^_֏!gn-ߦ3iۚ=9*士]`, ``|[>w2ay}a!=aEkܬ#_ZO.,{,Phs}*Mto5++|׫bsG vwgHTO_^֑ª?'>_?lV};*M+3*ץU(([}y/G_g[D#rv,w|{}zV60oK^c[10/ϯ+ ?eܯ,e~VO+RqۦTIr߭z bkW8]ꝴjI7# 9zi+ZU?>Q`8_>\PdRķ_wA8.r}TǾsNwonH5^ࠖIܧv{HB);vA8^$p{ϗҧ?a]dWFҜy <{>U{S6eV}w)'~E7\] JJۺ6Ggpgcqϑ_r[s xg%@?֣߃Д`kwe)&FIo_׵vB~^Z?Uu7y%u۳.^_9OO߻ϱ"el}ۀ{?z'OIG[;8 s?9(\u=e5kuO_>v $Q;pvֺ߽9}]\_X n;Oooɫ[8}Rq?p]YvP0;I#?n7ܫMt7#AN0s{(fL*FIQ {K+m aME5o~ )ua6?/ӧzʣrVk{ԡ$6o}OmSn-ׯ\[>-!mQ~|-jK98?>"ΰ.N~_eg۷v#Vxno1߯CZ{|}gli$#8qJ./_%ˮqou6_V5k{ynFd8%FxкSuv*?{;lA*ՓF1?`oBoP/9$VI$PvuNTH޾cMwܣ,xf@TQgȕ 8vB0Ju=#qR11<=/$Q!.wϧ?}B'>]FeyT9=/y? d] ${M䝇 vYsy&~O0J<~&ᤴzMBO':|c̲e1$ =j(bܻI8"sgъb0rvW =O;2*eI\Æ9^]}j좛Ͽ˫*3?Y1Xt s}6ZouNw۩]cIVn~Ŗy= ki :6Hq擒[tRܓ*Dl;O?l1%6fP-aesܾu7n+$,.wq8{k~%q` yX???*_7'fV'87Wg r}ygvOR=D)%YvO$tgrK̘\R/o?wf$7'9_Ӗ)k vx d;>-Č͂mb;n}1P\^^DEncެkNk:8S W_|^V}zo|LLCn?c`9u5g|/S;$ͷ7U;ƿNr Ƕ|/gwϊZ m;SBv+7G$j{4߿}eե~_q Uc7 G~?e\;wewέF+_ʩd?pwv۵^ѻK?;rg+FWȉF~u۫ҁFx$9*{Ef&:|[8b@9\½>y[)E_HQUW /~F>7np w; c4c^6>p1 d?e%fDje HX1 ほ~o4mtRuyvI$ԯ5n)+_Ng&[Ȭcb7v6zf\g$‚AmnF捷_ז`} sy)s'~kcEk#n 9kR?+BH:/^^}_"f=νp˴خ>UYߓ~fy\q }?͝8,JT_׹׉Cš͋4AȒe˻nslLw/o+'Y628uR)-vuOZPQ2[xZ6a6-}T`sr~K]}U4vb)悄[QzJwzk(J%GkYy9x8? $W]o%۸Usy8ޞWU֫*m߹s:sGnyӯtdxktFW7:G{Y{s"|dzV1OFޞg&gҡ{}mssstXCi?{4=w>nRPz5~}ڿ"ip,ƛ"g_o?y+lo[m~L$aYx/W[_u;>vfRw9VRgoX-ק5J3/~ډeVS wRc]-o8<pUVV2cy8n@o|:ɧ?4*$$c9׽R}r{>j׾`q!U۸nŽ?:NSR&EAJJ]knwg?5J7mos75?-mtfF_տzV9=?K_uXk.60u+ר9['>嵂,U|o.wѿ^ߝ[#s ;|?||qUm~↑5_hg)@` «Jִ8%wuȧNRnub4R@DmQ&pUӺ4fګY9゙_ߟb'x#AQyZJ=ͨj}8`a$N]~Uo_J]YkvÛ[E[yIgق3?A9_;;7޿OԦkI;+-[O&jmٲC

]n&Nueao,wngObpۿ1<$O_)9%e2M*jOnXvssIHfmdIuYЅVu޴۷_͙FP]OĹ;[Ϊ`|۾_vZwkwEsG^ ӵ J!. gU;&Htp\)K_gI{'pDĮΤR;9a*ꮵ/ovPE7sGi'nX| I2HݺOjnrzݯmQF1ݯ_,XK-pE4pYHJ.'jNߙiZyYwEws-vߛ*ұQo!Ҝ"65uמkyGi̗m,|BfM ؜WSOu!4m漙n..6C cG?wf?ܩJRߏr!N+I_?u}9~iY%@e"-z+wʴW÷[ eeo8iT/)JN{TSM_[;30b#Uw3G3m=N0)¢2ΡEk8ڱ#P$4isIt.bW_;RRB B~*zg#YZ#6'WƒWtsjsuH9 FP.ʧq^e' ~lneɥB2#}mn~MP빤Ǣks5[YH!p NR+;O0M*\°$o{[OԠ;Zyy|Kf%&bB/kxRߗhI4oM X]6Xdye>^v7#TԡmjW2#u4|\N/5 mm)Fo}jܪ^Ny]~+ELAڦd9D??7OkXJ5{Q ?߮3Y8Q1GV?^Ҳc*G7߂}빧/1:"O>nʊ*w6}S李 ͞$BͣK9CMgʻrHW<"vzZ|J?3<ŲNd6ҷ~>je2iIK5JZ<@2*m-My~;WH9JQww9kkM.P[Z"BƑ[yɩNս/}{'GHCVӽWVuvZbEvqF/`z Mynnm5﹧rWreXw?~~kOV-ꊗEǜя%nB7~Y̳zSZwVbm@NOZ r=|¤eoOP#u[w2#(v:lWRi+5?9&^Щ˿6mR{3Oh^Z `a NV6lnܭ[E$MkUJۧbZ2mI~VH6{dnoߧsP4Q+6_ɭV _QRQ X61r8roK-> c2y9^N7ޢ__xT}ciTmyxK6fnCsZߩf[';Og֢!X;[s.wX~J:sCuKq=*P{7ϏLq+9'/_٫kNST)(T `}ߛ7FЌyfBF<+[~%eb+ikDdjorc&]d}#1˳<ٲk:wo~~%lD2o,~|~ocͧ'M>4aR5!ޱ:Uf;=$b\|YݭomJzmmu:!Dyz\|W4[;"(mo9j$ӷV׽/[e\L5r{g_zҦov\j-jL:..#Q:#6̿6{F44Sn>V$C#^R;B w|<}Zn\W[-Lj.nԩq~Ret;t,lJŪiZ [Gm$!6-y[& Om>GeWt8[/dͥقۥ*/ mU.x߼)T\-/K)b ԵC-;[kH{GKjH7 D!oJ(^O5%NmžWӿSZk8F<;=u1>yTKWٽ%1F|nѠdPd[qVz/No}|uu_2)F9HW+m?\nO=Xoi>Y9;]ym^6MԬ;O*8+ϖ}ْKϑѣu||f.SN~[o}F-VS4_$,/ Iq./#GU<{o\J~_兄ԥ+tW?[O5Hc*X5iY9dH]۾Vޛd5ӂIKשGI;u}w,iv!Xۚ166IͣZ3vkYq#&7d+y']mn6:8 &{&KKk+i/ث)vUܿ./_Q+;z|ȭB2wOEܹiiDy7n6mꇈJկ~O&<_VO+ YM/;}T0N~S"\j.YPW4NW’Z\3qyZ53FWV^ƛ*grz]͍8^1<)񦹪oxig``̭ݯw>U_?/^G5c&~3^6t{nɧwo+߿SWN'w 9??kIF_~G}Sd&I2mgWmx'gI^OWy/VbHDZh-g.֥8s' % od/m7m}z]%v<4qkG*旯}Ufwž.[$6('7ytz:~Qŷu5gvoٺB0]OӏjFߦ>ք`&Β9]+1=k&&7iy>C|i:Ӣ7(J1B:yk6Qz9w(p38QWg|c˫}/Povg= PNI~/9ήoeFk Z%̪WeđƧwX%yXDi8wݞC~w|'Wem(m#GO\HZi.>ew9O?,|Y7m]XL+oYդu[ykfvڰ]cN3^z&% 0qH*K;t4n}kT-4-1OO}fU;M".yϺN3WI}oˢqU)ԩMy}v]V:%e&)yr|wסC-ʒ}?M_M|ON> 𿅱uiZI%;e]#mU|{8lI{ǭeIx9 8 ySȬ"~s,-ϳzo^=zèS}mfS6ױ˛k]z㬢OS)ݔ>w:\1_O9f"[Cq;ֹ1/˯OEwi]z;۞_w|BG)5[hմO2xϷgٶ ޿9Odgt}ko߉\&{.K}ᗑo]|]CAAohW:Xe𦻤Mx!Ed˺o3w},oVaYƣkiIֱ~G_hQ(yԌ-=Un}~I[|E'vz=\!77TiO[]4[k[}i1 a&V'ׯGo=Ę|)\Mk<;su :kkRedivݼ$=Բk(΢ wy1즪{&_4?:oO g#&6LmOo3Uԯ/!S ٺGi澮N^/Wz,zSjM칷ooS˿\?v{e-з5斶7RyrFymn>sXuB^wwK{ :*ir]>~2_g)[mj]xb8<-e~ma5gdH:eo+sO>"|P?h ^RXoúmܽ׺㸺$G_[:}Kk_`rN&Tk=<ϖ~7(<jV~s$r;#6:C2{|`YNjpRW;k׷NQ/e7t=}6uZeC --Y?x~}bg=C|(rۖ65/_{e}/z晎6UΩ_H]iB"kdžwxeRGo.iu;-6oq$VsS|FoHe/1KOiybDykW*-4/ ]=7ڽŭy35hHvCwO q'Jz4}k\G IiZju>}ȭM.̻PcNp5{ާM8I~[o\h#ƒ:!Lu0Ug+FQ%^UnLj+ԇn^;QMӬ/ Bd|۩Mw8hVwє`֟}zپ$߈ռT 70mi~79/wQԾ+ ԧW E(]gYA Fq~]_x(%*˳os+vi~=I^Aʓ޿/[,}oK|ΛG_I3Ĥn ~r/ڹ*jH}57?Sijwp"}8[iן,cg ?_26~'g1:6fB+I+i<{=L~~i?je_ig _Z">y/^[LV_P([]7>5ݶ| k:O*[29.xB\{ۦ{wo뮧S|@- ]CΌKRK@6V̛WYҧ]H?(Zί s?M?Fv]7b-ėwʝؾb.߼X,:V|}eY>U뿞i ;s O"$RV;*,2J'o_w}mw, mx)>9nrƤி.+v3j献,XZ R Mm:t#_Yj [W&ԓ|"Ha˧ߙE~S<쒵l2 s}uK^okK<o M߻iIK{8'O&gxjBo$[0"ҝ Nu?_?|luuEoUk|+|ck(md[K>6eiwaE?hFKՍʢT?3 zl@-֕qƷqy&EpnU>M||!O[.ja4G[kVZo5K3eq6~|Vov;yrIb.W'k߿ojX%tY~ gxZ֫Kis% e,.˝0u>[N7%{.v~z8U1smnߓ}Cg,7s>6^C4KIoo2TwO5chh[OZΚƾKMJQLseV֖:w&t7?+#$Hy7%NϖsLcn^8^W2`U]Ak/~߉Gs͊$Mm8|ɋ2%W}߾*jsY){̵/./W(C엩*MVxźŝtąmoɹ556?}p\#1x87Tܒ=9`pNkrv=M?ۿ4+o k?'5MV$MOO~+_M̺=n5ۅu Moݼkqٺc߯}ON[}蚖wYj:ך̷0ƷBfYD_H{nXJQoOO}>^KI?_,mtFkHR;{,\M${Y/Z"'Jլ!tWywk-)%Ӧ15 vI-y{S(aMOd֟圜N]RK5fԮቓ4|n?noVK࿮ԓdAjVM̪[wM|_4Uc,xt)!'t7~9FNKq(I|3gNO;$/>lߖdn;sj_Xo}_wmg^ʽ iyeXUoZ築tooS^W{Go?b擤\TPŪO3NMJ[淏Ry|2""yy:!t1O[L;7&oCG|-b?xl&u ia5Mnoc4)3I2M4J[INk_Dql]i7[k|ѾtOcgMJV[om<|MRsO]tO~0c{=ePrUEu܎wcgesg<0tWz|ozG5By&ӏx]5{5fO'=Zƚ_n精}{sKj-4}>H^.칣_'aִ-R4dI&S4Q˹|ᐶ;|&JZ)לojoV敟,'{~/~{E{ϱ3G'cV$хwfZosOJy컥jhVE{f_}<W-*M{#][WbmRﭻW~!뺍fd#!yg5w)dV]GBgHM?wOE59QSRU]w}w=imf=UFܫo{88d̕k)+IVO?-*66֮4!Ֆg_{{XsKjw[jqGeMMm L|"O" 6?cRa;+6ռ#? .V9me=̻ng{q+/X:%Ү+CUg[Yo3͝6 $ĩwwV]^,#Wv[/jޟ;7ɔMͻ;$9UX1o}.OHQ"۳kOmQ:ok0\!ݼ KXf=Fȫn8qZGNOc Kٵ|wM욶.W{~G۸XڌlO%roOzNk~;5*+--dKǶ+d'g3V^>g۽{o>ZTs_[,OXXfWkRO{bOHV0HN2 Ir}~%tm.i~vњ>asoWFݮSw<b{i7aT9<({_5ce |od_GT_Gdpkasݷ~^ZuO^ק̏d.G5i*qkm}n⿯͌ievE|ƴT 9FzjuZ}֢r[+,Ӝy__̣Q5wDAA `/Zr;^<$K! *1I$"mbeX=G~_\{WBwW600K1Wo}:fN<򴖾OC#JPǂn>.)ayFQۯ^7@\wܬN;aC7oÐ0g~mN\ُ/KvmQ|[/״6I$.F6=h]^׶+X%uȄ3m, 8sy?ڳjO2NUߙ;6$`zҵca]{y2 f?ݫT\~}ʹp޿8%wy1ʞ$nmI_iɧsK(O:}XVP*V6GnUDw?G zȤfRv}Wb6R#?~[%k>9e(1-ReB+=~wߗf#sc9ۅ?oR~ׯk#]~9gVs[K>f6tiF;o"m:(¿2N[hZ}to]?^Q׷-9=^~|#J-?!Rwm 9_>[lCR}j}/ru._f' Gq_:9>w=Q $q}N}ǭ6~87_3뻯YOh~b#898_ z>++ߨ2(mQ_L 'u#Vz1M]53sw޷{ 䎭3y~ߩ.N[S 9_*>P?[ Twt-9_z.8ɷgIp?z֑[*Q/##wqTZi{ y9[?.)Y^MhVvlmu忕?#=,q#z꩏6-BӵyU=?5MVbwk?; ` #ggsj4N9v1uFͤ y߅hs($ ;cAI'IM sjjܛ{|& ܕf[?j5߿Ч/͖^S'|co?s[Cksd_wFv$) = JroG_w[w~-3* rw 1mjuO+YT#nX9{껿Zʚ]~ r_7ғq#LDpA{?S60-ek^o7lrN{}_xm-wۯKyJςW u3W{ԼHzq'Zwܺm^Vɸ[Εbyw]qh3QM~B򃀩g-mʭ%wٿ@Mg\`n@FYӌbu>ۺ+T±nwӧ֫=3Rzu|QxGE'.nI[Drg`ӎ=[}~0Ww*MEo|O$w?Ga l hC}]q5_[J)o~3u\{>yFן}7JG>|{Ks֋hR2].oq3 ܲ*\RsRKob!/ v >\{g<7-_L6cf 4}cNx<u(Ij}3|/# pz΍Sj 5}2#_]F0:~Raޯ%9uwowX%_ܑ?ww{TQ[+|uR{u$C#SmeSYߍ:'M>뽻i_2%´lG%7n8o}i5{.oobVpAuz){i3j֖oᆱUPryݸ泩Q_M"=5d: X2~o+׿5_go\|K= + c_?瘚JzevӢxv9Y7X(]^1)? fwe:r0Y2c?)o%y צ?ϩOJ~{_aJLʹZP{[eJ_9HM`}OMkIE-u5Iɮh_sMu`vVwNyѶ%?͔;>s,Jwo_y)?aΠ]~zqΨW_hK=v}503N[,`VIZsg>}{Jxf`Ǯ O?<=Ғ%Bos}FurNqrS7?'g|.-4jzr_?OY_yl4BW 4m9cevfMo߲6#)Ҕ-~>.+#Rs)kmz_=sK7=Qy3te2|so9 xxje۟;Tۇ_[?=,-z>J_yv=ftH}ri὜_Uև-I7nU[_m?Vt_G{VlŘwG$m'ŷ[ҽ2O{/n#FTnn_}2 of.Hĩ;$ƻU|kP]A8>Rw( ȋU*E8hzɿܴY 2!~]r?޳mNukZ])BU#w_֊RXTWGݣ2:;Q|g9o35=rY? V Džb%+? yO9l_wlߖNVond-ͺyr_-v}Vz}JL7P!{&B_,jZO%~f[_ͧzX!Q"w|ܟ$;ͨmׯ}b߼\`ڼ/m=>iswӻe u}:/_2{_j(7/ʥ$ק9ԋ{_oɞ5+F+}ݭo;!'|\0sOO^bU9gO?ak|ɤ! 6qk=~_'Ȓ3d+-Uw|=W[/ʽ/]?/UI,={e8=~mldOEg<*g2῞y_̬saԱF:w ?ƞԩNRVoky$>R߻oϹ}HJ1w9:T+1 M"jVҮ4+[_~ƋMXV m\}N;|voӳJ?=m]B3A6N+=m%0HP*X-|IR:_E{_oeMMrn~Q:O1ܟ7FnDj~6kYDr۱ C+|+F}}Κ+oǹ5R-4&!07۹汳Nuԫ;۽Dda ]'F_]}̺MHy@yټ#?/j|ֶ)jV喑wZ6m"̊#BsQλ3ӗï_:eN'kzqiֲm yQƪdk:*kw?|}aӍs5d<i븞fuQYB»vV5Joߵ+߱եB-J3/Վ宵\\L$HTyP4yl|ys}&?q0OuGԧr-2N󙶾⍾U*W/ZZ[}Ύ >FO1}ۙoQ1'YwNZI_[22>oUv{'(~]GBIKr"e;It_K2W_1H!;c϶i4>էӧeZ0ʥ|SȻtF WKzjjd -dwƄU7{w˂MhO~o-UIEӥJ[tq:u!v$ecnoXGmG#VZmn&;Z‘$*.k|ޒi[IΗ-Ŧi`U"4"mOfZ0_v2XKGW[ڷYc4IkhyKݱǺF?t:8_Suo5>g)Mkׯh]?]y4{&uS%AZHeUw6D߳1\K{wQr[o.Kr*75pQ]mwֽ׹sߣ V??,Y˿q-J<ֶWG IYCk_$[t^Y7 Ͽc,ZH/Rˣ{U(RK֟yЍOQɂY^9.!MiVMȏ&=;u+JnRi*dך&oߧmB {qU>q۷o T f(KU BרYTGnB3 m%~UM9n-7Ξx5+1CuX8.uYzu:;^]hR"P^2W A:a/euO=-]|aI=_=hbڗHRE]ۖ<4o9[sIoC^/U!Řw|zUe/cg秞Z6 5 hBH\Ȯwۛ?2}_yׇ÷KԂvF-7lT;K)<5*=>.w1,Wlc Dh\H|{/l,+_IFuwվ )Qp)?6߼p[=?]2(\^$3%fZ1۶z4zk}RW߾o{wyiP37wWݶe\c&vX]">_>n.ަ|_Ikk_ڌmW;Ywߺi?gULDb['K+g 7__~Y5 {GvԎl#\?w={s?e%.cHFa+#~0e6߻n9J.:ƕ¥'sX'ktVW_>ƒsv66DjfzƣzEmΚTc _뮞~~8g8n(a'V}}f5?k-/}jʯ-ۻz+~/n)gkn+1 Ňu(%nyTwPofpkioaTʜ(miUKdOF]~<7=G3m^+1 ꬒJ9 }9qqRm/wWOw#k#kY27GG-7O]&t]xM/ՑW`Fc~f^񕞽z.+?rO2EoavboD$jsIt]{.źQ{[O}>_y [47IdKSv_wc Wm6}QS.Y~6}Írlq5si5 0mW^OTʔ9g-V{ߡYpҜ%Y^~=u۹-NK h_/*&xm,E(Bi.[;j|4q_z i֛"bd5fjzֆSdVwo~%Ŭ˦5oU1oveS99ڻQW]Ji%J^əZ춚&xg0¿* ewE4h+׶(҄\v7m,a{T(b*[]o,RݭV R򛿊=*ur9-{-w5VP:ǫdVđ`d mVWn_̯To׵`J)U{h3oser|/?yG~/tһ8ye0SOwWvV1Td$QכDrth' `kjEvlO3c^&GM!X3_~Gߟ>o6[EN{iGWj4}bFAgǞkc(~I> s_i=Nj0Sv~',~orV{~YO,NTuLJWdfN8?=1..?*@#vcӯc$J_q?#Nx_犀_m!B2N99ޔ7+;6_HMO]~fZ'Kq $1~]fkϭT?T[K8~Q,N|+$ykڒ\gڴl6ʾs/3yq4M;ojiJ kcK~] {)ed̫,,76I>G?:*{Ͽk8qx9{(+ohYʷև#YhN6 ^|occ<\۾T}ZMs}?4rJ|N[O>W| T~vv~ oyZnlI<ȅ7yuL<ҹLᔥ;OOvwmo볹ƯS~;%in]QTTdFݢŦd{]\r'NyeQ5'[}nVRVwR5{Iσş/~9״_H\(}z陞dVdsH;ɝ4/5UIND Z_\|3yfit&8ӯDN?nxWH4MZ=CYڗR7K_-K9mwiWRjKۥy&|a*rv秧!~ xSWϊIVqyuxTZG?dkeDom#Ae0TW'=8vO_k7箢ʺnito~M&V?|H74rlDtoeMhBE\^1SN1~o~~*j/]|+ψ,u{<5{{q$:ʞbgO&o2;m_y~x.Dt~#0XfrP-%e{]~]{;|MZҷ^[{m-lKտ漸ݵ!IaO[ۤ,q8JQEV}[TR;>\/ ZvoJk[ɺ;xd܉"?4CjtR%v6z|=o^_4ph:FOiuǺ/Cw>*YˬzTyn;nUhlwR q?ާGbVsMiֶ^\SJ#'<4~!'hJ[;[o##;8~ܩ캄7V4Dz'^u7K{/K쏍N)z~>^xMqzzUGOos<ۿ|o`]=:_QKc$WM9F‘?3}eyQ*E$j}hsGf_v޵L-NUo9ViƔkգI:itWO=џϿRF3p7J*{<'\F|Y֭54wmDEl/壌R}ygn\Tuap'Q:hyZ?L~+|torω/tRx--?ηxU[?I5mW(iCvw}__ MJq{q+}k/iW]~̓;Njc>NP,E>JdS֤KK_3_*`7Ih/c>voOœLeE"qK/~?>obǃ#c*vjHc=jbkY};Vѣ_ uI}'OO ^:}";f&/?/7+_=~~=BZxڲ42m?*Q}V%FQ^u'⏅}r?ɺ[ǩY }Mpظ'}sj6ʹώ!8fټa $Ew˫7?wʬWhIOiGY>t96M=)Y'w2 !Qg^w <Ӳ[mNj]^w<ľ|Ajz z} rC0ezhbӨ?#PuoSl?:N7oi3 JV#]mᴷ_Wa˼m&/ζy'}>ʜFw*Ƥ8yw]}>Z>mgeկcӜY[L6ZIhY>FevQ/>ϕknZ6XsNTҮ~aYIy4dV3'+_Rwҭx~_ׯaCҿ3hqycsqg2^[CfeUd8i>ʷپ:y:~f*w塒=":~|^Uǖ?KY;Se%kBkXErw]Z]2TG@cҵ]wF w]l>C2δi]^~kn'۾]~~|۫zIWCFHU]OFA貋]X)>6[B̘Wwyˍ^ 3o׹MǗWs0Q_7oS9yv<~!մ+-=ŽSjbImvoraw|\søw3,ֻܫiV4kn48+soi|}q4XU.ɍJ~׿jӅyγ/^vn 2D˒OO폧]+]̤康|7C!^?\ʂ_gk΍< srco/0qt*QJ{xVWUol?5+ɮ&ԖkТ0|\YsQoէ[knGki^6~Eue*c]H3ɭ.?`U?"ff?vZm|aG|YSA>n͇Y[qk42C2l#󼙶tGAVkZTNFTFGZU4:m@o|DVgܰڭ2|\1mx?]}_sme/du? x6rܭ鍮$5-Icmf._>\o #+J<{NZiOe٫nϛajc jZ.'׊!WVu) úMg+/of} qxMlzKAh.߯^|nkK nui+_{>/Hta{w>qnՕDw.#?K8Ԅj'AӲv|| J*s~oZ>xCYvmx'igDW!ڭ&lMLu(ڭiM+n՝|kaM[}OJׇ4{R;AI$I&s"˝D_-?v+/˳~bԚyw[M/-REd7JGNi-^~wԟD[1Dxygn˻y$O1wC4 }ǭ 4nfX,1ϯc+Z߲?IEݿC;b:r z9)_{P^SfQ7NRW#w[Z'GmriDˢ4#Fۖ5v|gzhսữ3VmVWϷ`_=r-@h!~cl6[F|"o~cj55mRjSVkeyyj֝naXBяw+n]"XzpWpI(?}W"m423/Ϲv =RezuxN-z72Q8'x7mvUִMۧ,d=] t ĺv%{rlit+poh}$ez4%E}tG[gzJaG8(o3nkWJI^yԹfGTw( wm?5i=-y)$x\et,;_ߓ5])Ik} pϹGKu9YO$12ȫ [v~kW."࿧ꆪ&jox+XK%͵Uqu[w$qGtfvV>-t+э)NG'~gչYuaxDVv3j%4Ž-VM{^4nn,:\jc:;̋iX[f#ewó߻gkF\ΥY&5.hUÒY|jUZ}|ofۥ0بe#h?mj7f{T)IKW78T$#64ލNQuNAn ,z%Y잏wE9F*Cj^@+gBۚsz:y\R߮_$gթ<%HĖ? YKVGsXuQgsVWfw}F-Xk[vV[9eOIz%yJ pvsN()7ڪk^C/"O#߽i*J^NU)7k_V#!: խ4tw5@U![~~_Ҭ\;wB0_8g?JۿlvPN3ꟻRNN׺O={yxX%K)}:ҺoczkzkGFFRޭcukm-{܊7b ^~e`G𝿇Wwb9&/"3U^X۾nO_MV3ωp%oǿ5Moԏ϶~Sr*3msP⛻4kk6Vr}~'}h/v{E]o~!4ȹq~_Di]>gDrM?Ny!3o/VqO_<%{f*r$\Ŀo6iW$G -ݻMJϧALq`=JJom1n^yVlIʌdq}TKku2E7- Y+NѤ&߮E!VBA]è-͹g{ןuF1\Ϫ-%Z_]~a,byo)8g3*UFG=>oڵi*Ϯ"vp ~_oMq_3Qm 0p?wbi[Ok8'g6vۏ_O59o[_9q*C+g_SmiN1Z^zyÒ;M6-FG{.iJ'u ~ߡcn8 mds ex[mW} $\l~0w|WP)8M4}?}g_GzZlU8w.Ln\6Moz+:Oԟׅ[߽ս=&\?)zujiRV |s\Gn 7M"iXc_VFM=nUy:)'oPKԩG >c G8g[V[*tݿ>h-_ˌݕ_As@'sxM=Fi`Ω>~ ODrI~w5Vefd8##W赴%27:=qy;ȻFo*>cO_[bث m%?+,{0* f~_&JRLO~IWq=NsȠ0`"F{ssgAWѫjwVVUF89goz|ɥ +zv[V܉}Ь-&ѓM$Aytܵ;An)FY:{}iumo1rSdVq NX'{(4o̭'˕N3Lp~Tegm\VgKrz֏nF7}QiAr7ODh*Ϟj[՚5{9U  Z-YOsio]IXOeM>5hɒLzgww}S,.||eOG39JQ{}?mf,{]Nv{f'Ro꿭=M4ޟoƭ]"ZV+ zܼڿmhH|5n|.c(o߿h] $.NCO~5kN>#~%!)/1]ۯU[ϯ0nyyn98w<~}N~EFR>+1o֮Om7Z4}~vF>PĪOK;=xԚ2SߧoN N0˟ڥ&硣WV!voe^kk&-4x9_֥J63娷~Ev$,?TjG}T2e Ky_w4'q!~]woҳsU~bA7-B/j~z`v?{<Viiwb7 ^ֻ;/~wohQI_woߥ<KeW_"zu5wu |8czVrM{uW]:*\onpAfMWk˿ooU2d WsnW|M8}6{BTg`N6Xy}c.F>~~Fjg Ȯ6ګ8x縤t5k^.̝xo޸k7ѯ+qfῄ7ﶷ޺=Z)|K_?n݌6@09%}ʌTU\`Ŕl-Wo-rK&r;%j'FvN?sd'{s}wcô嗆2w.;{{]SȯONAYc`7*MiV~q M&R"r7}iQVzsɧ'^x](9UYiէjKrFWfݹoƓS/ÙCM?1c*0CγnVIׯSwTZ? +T'cnM_P7t{w=Jc:`GT%mݣ Xn;X: RwЈlR` nY]v;$Hi=Κkݿ׸¨#ݝ˻+Qn-\+ XeO8Npv@S^_S[SMT;y)8.5c ]~.,h"O})PQW۷#J5_k>n1Eڭ _['_=]g7 K]}VeWfډM.mbw$ATn}ϥ4p*_KyMƉoK%χ|^JSʾymUl6}k<6 I&'_5s>7iiӗ; kR럻/d(\ܳ2|mF,5*+8yOKфZOo{_jOFJ=b2m[JlܾK+lco?z~ V"5'_/sHŞ^i1-|Vhc?y$?g{ue.t/XR<|ܿnޟ~+{iWIDȌoд,U; ELX֪ҟ-)r5[Wkm_[y/ kק7w/'6="sm|rܖwK[?wϹ3\lpI%}^Qkmqi.KIg}c ۫wU] ?UuFWI]/b^*=^HUmﵓ꾛?xUn,LOqj_g[ŏl~O{ztVI(B9H|FT[sx5($ZnϩɫIw0'["Q*?+{Nw}\;SZH6(7n3nE-5* jZ|R`Xqo.}rM=UE<ĻI'z"|_fݷZWG~wM2ZtWruI[xy7oR{y|ަIntw5i%o禽RQ Y?v1z;zOrO}OΪqQVQgXalyk}ݫyWK_-e]&BYU[u]v3^S|ڭ~Ϳ؅bU#Τ|xOuSU߿]ͿEy%.yqYFڭ9m׽B+ynd3H~_J_9V_Yxnd܎d._5ԕ:3?S4J3pvz6ݿ ~^^~U*uݳ);Ѷ߽)Ÿi>y)-Οvlw2!%rJw;cJiߛ_^E<* l.*+czWD~~i7t66eS/bj*c:/I*[ˏIf|-W̴Jd /$WuJkN:FI, #1Gcm4of&7wkMJEu9kk>4'27Gaafw\.yϗ\SgvcЪ I_Tߪ(nf4uP[^Z¹)#ۤr|ɽ[rVPWG6kiAVCm mۼnc\q?䔦N;֯9ŧ{]gҺagk΢oyooSE/e` w' ++kN]j o-&W+p]Jk9:o]A 1+ob'&{&Fш<7OZE'-]n&sQcBsҭ;ey]} 1(+>)Evb[?`웶kWio15f ݿen-WӥJ]Dv82Zg2k[gk kPo=onX(Iϯ:*N )A}Clg~_Zފn-ߙSJNm: K4dn>Z2roA)YwhėDܧ>_amV/]t}t̢~ [x##@!U:6oG}ܩs|Orʏ"_YIjnw-pPnY[wW?օT_Gʭ'oOǼTY$Ex1w))]:uiK̎m,P$f/Ffeoyǭ\bog)z;+4sJUNxl 6s=MzlO~$b5Vf 6⤖Qw[(^==-Cϯ$䶷׸ۛ!],h#kMo:[nf-ۺ/ ݣtnĿϊZoUd(3:ұ.$; @MׅD.s:6);A~﹩rm-ufѣN׿M⸹Iɕ)V {Ouyk~y9ƛ}VЪFvxs)B!S5}˳"YTL+|oo/ۭvf6-!1W>XVo:hӞe+{Fvc+hٌYƪ~~KpNw_:l^){el@[ŷm?uW*Νww#DU"I/m!TYv yۿ[NL۾s}CA,<yk*3IgV ]?lq׾2Т&[K.p`hZ@7}SwG ׿&[wG-4˟_ 2g̚Ws6cϸpN~GLQ_羺ύl6$L~j[ƳB>|䮙F.7>r'moC׼Y$}S6-$aJ fs.݈CJ EZֻ7Nn_Omk3;3fv.6ݬ|}[$cɔorny<++a럖=~oVީ~(R_ƙ$bwB|87g1F۫voU*/]&E>A+ۛ?zNJme }>nDvx̷!dx kqGD[{}I"SJ:_^{al-4XlKPa4_>c2QN׹uԮek.ﮚ]WOf1C6u}nN#oϷǾkLѷS8Ugf.΅I;n|3U˽J0"M,̻} 5oks9$VŗK Vm̱Pݟ-mWY17?j*Vz5orȥzz]nVf:-ͨRJ:0#/R̴*\;|oy#s%VHޟ;q V}w[y -Rdb7emjn|i&:n?֦1wՌvfCD'vv݆w7sV6y}Z֜RMzmR[MʷRWyhpFߝ[0:=|˛Kg1 k:i/;/Z k#nE33|#/Qh 8W-uח| RKJ񕷽_O6x$!Hkt&mBI!dqʌԢ|ُ͡WQR-"}QyM|^zZuowkm)#=/VLo'=WN]M_-{ <5HJ܍k[_g{""!%s?W:̴ugs!ngOVE .̮pf7}{u߹׭h"FbB&Mlmz~&?bxPʯ**žU#d$JaS b nX[vɕY{^5MNN+<(OϿӗ\ߧuȲ6F܀Nߛ=[&Goӭ3MhZZ,ѣx-bۮ&fJwwe?UT&C-G+z?޿|9+lQN_:r..$_Lʭ3E >|\/Z4XSNm,%6wXnX(;-~;OiFVչ=[ߣkBY[ҺWz;RWsacO/pݿDȩHK).PNx)]7hΪqskqQKx$d'$hRս<}l;Nߣ--4 $uVL}Dܡmѫne rAjFu{=9}U-׼erEEDy\Hÿ=k5j4;3hNotI҂I7ׯwiA5xOp.uw 2MUk2N6H+Zus/iV~iu߉fk߳ t{'rkWqz_wk~qv'?|].nڮ-۫-ƥFq;/<1S}%k;h zNf<ԥIo͍1vi˗yyY>M_UasvUnvMJIC{g{yizm~_{NJ4{f+Wm;PiL_hh՚5X4kߗtOUl=:+Mu^gp1i;=uB^ukZ}rz]AC6bg?>f뾼< tjAz3c_K GhϏ^,񬚁&r+Rf}*q _:9>̛G$Dx,4J#m+~Qt[Z]}mo蟳WG v$8bufھe}%،Lq~oYN8RN篧CĨ{eo?||uozd5+[%Mhk>hݓdGGgbMiܷ7V׼omgU^yak[[_w|Tig/Zl1z]5&a VUU 6%hA>Z?ǕAY[}{?YV^mwU?1s߳t]uI.#nO"Yr[n7Q+*W_r3qXz*ʍZz7mϭӸ6QŮ,y{y,9fV[T9ϳd%Ώn˝tkkt~N )J:_]u'wN(GosjnK4Ѩ^|;l~pY![믆mROF7is_9rquvI?+c.qzQsP.cˆ0Xhj̓ߢkUlWᗀZc>kpMO Wݫ.J_~|>bQN=E|ev?D[_AcqjVO}Li(;^??ԩ|oʟ`7H -4[ǵWXD׽Vu3ҥӮ_l2$H 0'.Wٟ5zjſd121(~f%TRzikfoݼn;`ʿުSk{h8FT澀M${@2Yvljts7߯pIL.W9UYsytRw_3ԭmq o<}sN=9'?\APU&ǣhHJX z΢PN-[{7~$Jxff9lR..7W=5zWặ"ŚFUn!ߥk|r}wqqɛyr?+գ(&߯^tfҵ8Jٮ Kp,.0Yv{e+]5Zh6柨4S<4EWZFdV~N9O~NMKջ߾ȹRqvK> 񭥚BimZ/0\-cͻQcuV\[w[S<$5;䷝&4VY!6{x׺$RϦ^4dPv&|+1|mP߽I꺽_џ~-|c#M{jy'򤍿q%4~J*-~bG?/0xy՗!~ù\nM$/^?~ yw/$FisLgcD3|e֝7oT{'$MA{' j+G𦣬\[FPo"G7, G4wSwFJ^ÿQXh?өmcu$RRTfVYwțY5C|-7[P?-WX|@AY]}˺Fސ}1*0;i~]~& υ[TӼAks݅ޔoS\Dwc.{jTi RM{/mӢeٞ9hMћ˕$*yԓ|k[]~߷Q?GQ'/^|K\ֵ'pY\Q33?wCC>oV+f7]>~kY4 /է?-Ώ2薑W\Hn{gI>o=qx?vu}y3Ÿ'.G]}}_ٲOͤN5G 3xw-n|C[;YϤS- ~X|WJowu>'ZT8om*ug"hervZ_S9^'Glo,㸶n1iwڙRׯj7^nPx[BOӠgUW̱]*a8KMqĻr]=W w'˵8#ͭV_Oã<Fti5upob7Bq+BY$E<{mلB/[mz/ԇ\ԭ&a%ۯScEv>'56Rөe=GĶmҕ,N/ٛ|ckSMR69axI$`ݬ۷nSp5ךemz_ m{6^ 3鳰es-FfbV>'Q5m}JjH^=շVdh_tA# c%~Y?wYrNtH^ZS8Kkۮx~":fuoɓPEdhq}Ʊ燝ŷ]s7-E{[um՚z;_Aج~]fy!W~+סT[˻﹮.O_=G,s9Q [+ [\{J>l{ dD2{'n`~ϖ_mfS^ٗ (#(Kk n ^ I]{ۉTOU/^]{lkm[׍ Ԋ -uJ7д tf|;y*FezUݭ} "5>5g \ΡW$u۵[ʹ'NJZ_ֶ#i;|c;j-w)4V] vVWg}hwn9Pwᗺ? e:MAբnZZF0iv %Q OWGkViFO^~oMo|A11n`Ƭ1~i?tm\]z[ n5G8wU5yMgTv6=^|]W SӥkC?֤Ӛ-5*QvorwjN^T0m+Lّ5V}k01URn7rw|z{#M%ש9ɭ]_jWrrv9~ll:}޾oaҨKM~i;:g8>~_׭)Q^Ί.}RˑV6w?V~/:ך)ٿ%D9B`h˥W#(־~-~DkpW r178pOU:i˓T~ܔOnAwzt+^;KrF\ߕ5}vRg{^"L"Tv#gZ%^OFSa- `I _o*i?͜)wUNuVWWxd}i+oW<[IY m &ܿ6cB "S}mF( ?60R՝u-%%iԭ,2Iߖ-c]y#~eRoޓ~u y'x^~FJ_ yojV=9oݛg/Fue+ԕ_dc|| WԺq}?_(Є[<0dSn퟿޴Tu E.EV7AdUœ{ YX生7"Z?}lI$ $2/mݻc_fi++sonFXmr@kg[}UGH_CQpw~},e={9Gb6+z<{ 6}cUb>l'WCPN2Oǣ$? x! ϟvw ?֊otb lݽbTjIe7T)%Q~+_ZE38Ԕ.4.CO}x5֦߮J30kZm9ڔ׹" rYww:\tV09a6_MkQq[Mft=g;vncJ~Q1vU uݷϽBKiV +P? %}曄fPs.vˀfgsdnoG\k_ﹼJu~)\ރ>"߿NǣƤ3> "S% RY[Fnqr8S4Uw>8lld}O>LY<ٓ?N J\-7o 6+m_;^Tii@w|;(6/wӯu=5U+]z'KuU{u=xYܿ柙CNAztwdM;NHo on zfj\1 ݛNSQz'{L[+KHqCoڋkm'y~?FX#}v*2_wE]9+w)j `3֭y#6c.⤙ =pwSON~)e ((w5j]mX2O c78;テ=\?UzbhIlO=Mu:|@q^?:F/cn}zQl8x$?ׯSnyyT?tO~9.2r?Vdti=ȷFsoC(vYc\qk~?a'9݀; JE-wdM{lU8lyn4{WRaA<ҨQߧ5CԁO?{h4(6Olaz5Q5 ea=8BjsIZ`)+r~*-z+_MF)Kۯ 7/ $`?Ϸ^-7.W/O?>yZ[ju?Μc~uzTn3?6㢗}j[//" @zFj_Q{?f-RHb)bxz ]yVm-t|i,ŘH9ȩԅ/}{يo_#~A|d.?33`wFxm.Dݾ7B _VW|kMϚ~cf8*H;3pTF/ϭ+عԕ;(_8 ]b7|ݗ5Rqm%~=ucS~sSrmkDޏP0YzgKSK{ofM_c9Y`cwnk޵ɿ#):ϭ/m1zkRj/OO/?՛:|?2d8lO8s=knG~?e&m=~} ebxއN~y5wUvaP8kϦgD9VDL쌍 9 EVHKk$F` qgՃ}zw3Uֽ?h0r~F?)/U6j]xO(OG#xbTM__ _{']}Pylzܟa}t:An@VZ^ g.&<i¡}o__2Y rCo4{g\r_ԧ|G.t.V[ws9)s^]hf20]TlS6g~ӿE&$D{ZFW߮rߩ*[^o ~>8+v4eF˧i0G\DS_iԷU-k\ЩzΣ$oYoT1[~N(4u-m\G?ƚWvMNn`AlI%}}jk}k>g'nO& UeVwo;t~V .7m}Q?/_o(Sܪ?ont|>o œ>wY[s(/SfҡTm&vpX+i75+[$'p]7go/ͷ]RzGS3i̔kXS@کm-JV&?* n65h+WߥO_+~K(x1>&^'MO[ uoFT$ri>o:J+_d[pc*BﹾBv}?J.e\Eg \؈f/LcׯC ʢqwԤ_hM?Z}m˝v*ݺG؅ N5M[ysiuu߮w}agb7ݵݛHZEo&L&|69j9F|o/[t%ޣS K+;f.d-H_&e]]4)NttT騮ϦBF+8:KibM dƢ9.<;U}7Ob0$zcI}4GBj*ӛmNֿ#&B]Z'e5үV;#?;<,EIUvM]WҩK)?k-klWO|"u5k=>U¬rgm9w'lb|% 9==>WVYϣ-[O3'xlG.+mGVk~ vɹ>~zB9Pkԏd[]zױ^szH䶈4rGbWT"Ҵ;fZcO~_ROj~kSZJOmh7&顙WcλEDw}dܓzcVr]~}MM7WkRK yrbm&~wOG鏮YvZ%妙~Q簕[wI>M֎:Ju׮iO ;{#[E\CsZF  YUӜ^^h+d=.潵ٻx[ɰ2_w|ܽ_ߗ*ktUC>Kglpr_~x^}몾_[kXѶA ǟ.7ow/*~N7ֲ=IBSPW؛XU<`4z;oׯuo[w*|a'ӊҷmNP&6r6;wrwߞrQ}-#U]kwvk}os8TO?-Pś?Li=ʚק^AGI?{q8n>Jӡ6˾#i/ Ϩ_j.k3o &|cZ-qj{}d2l~ec\9h_ʗZG35(ӳI*Ҥ|wcYZgc(߿wֶ ҳ.mx_det'[ﯙN5}w3u[M8޹M>"2fFvgV?ԧͣC|?w}˖R_=*l#>SqCmZcTVGEqjK$~r7 nzONo,an(~B+1_&R 'tmy)ƥ$BXnlI?2]-Q9;nW\avpn.b O;UW'f:Q\J﮾Kn[Xg)6+1a_ZA}沦vuZ1{!\ Y66}ꊴUY5kD҅pfTN k׿[13_[C Y#2n>W+t=~JƫMQ'yuosqkާqwlU<_f*۶JYi72N)>Ӷig\?N_/}w=zy;׿xcRC{Rl-y}#5o<*RUgZqDo^tV[!x!Te!'}vW\1I/oxy QPDЁV8!d>\Wriz:YpH* )R{Tk.}n7 ;KU?kEnܳBH6ŝ*Q}nyIMw۷_UֹcZ`)U]yfmu~8[{}}3;=<.~h"/vtchWګ]q`p]z0pV,}rkHTמ*-`PYy+\.w1[wkq{|7(.Kܿʽ⪍0UTuwczKr}ӷCR l]Kg{oB{JOTzv8pbS Hے 7_5:+t/rg[.>o3}߹lӇ_pv]%Cy lso dgott L/Ǒw8=3^ӯ,|={we..Y&#:T{NizLuԋRg[{5ۋK#7̫}1ּ~QSzgVk"&] 6?tO}3S2u&u%߳ק^R6 >UV7]kgI#:<+ eyszzn8M򷿫J7r$|I>'NPI̭?:=^ߧxB.-M{dчقMOׯ[F-^}1ҍI=v_ՙznuk$wBiD%J'έ ͹U&åzy-ŽтR 5Y6UVWVQ+|N7<?u}Ѿz w*M%i7tJq񾿢7`k1EjjnUY| Wy9U:{28ۭ,"Ro̿y_okUS/W}J&ܛmDyU'Ԟ?o>QQ*JBW}x%B\Jlq.+d_1;kPo__? F{t4xbt3oU:nMm+_ﵻ*Ҭ&򫸶K}dI㝡$ֿ-:-bRd-y ~ ڮ$v7eyf}R{sַQEd*ܺ۶;߹s5ay_p}?w_z |_Ѿ_cb <' p6}zMuDFR/YhA)bw|>o֕Z=tr?{ǿqFKXnŞV$]ͷw՜\Σnz|2Mywo3|+8N!$1Ƭ v wN=Q9SuIuU@76>_v9=g믖YE>D'9QRD<]J`-j-[0"q;bVS;QWvǷ]○z-swNx-}fÁl=NҕFw?y*k~_ Rm7u.Dpms4&yJU8U sL*|m'Mi4_U Cnrkt~78# {O: e](OmߟX7䷻Чu_niff"ɖǿODѴrsoƥɶuѤK6w@[q?>]lUMW?=K_IZxBI;[MW}]7%tIkUo;˵vg_itg"tvxAѽJn-n_9SQ^a% G\)\6*)DhfϿsxM7B#_-Q[Hˀ~Ȏ̼t[Kߨur'--[!^MA06X*pb:NZuݷ;i+N\՟]:u3u,˭YBEYP\4Uֲm7eJ՟5d׳{=zoNç!IfP 7뷟ʺ[Kva6uOefs129?6XVE>ooR;BI'Ϳw=Jk:H-7يf'vUV_ӄ)[}~}~|kR{kw^ֺ dXăk2d{*%߉ ۤi FI F\ݐN׷ EYxI .m lM6}1M_g,&ݾm|YKum,dHI:ǃnڮY fc[smU]ۛaбoo.4Mn߯?r\߹٨dVa8ܨ>{a,EO_ Xo)s|i#z4 n;YM=cE{e(m5k7Oƿ<Ų8?To)TOoϧE\UO^˧͗"8TVWq7#[KZa֗u!7Hۗ|"uMWvN?~J_Xk1J)9~^_ys># I9?*mګ?뾧^9tf(į.|[jew|_cZ*{u0҄yI,vsIpwe;WF_vU=[?a|Wz_^Mnh Gq&Du~fl~_Ռq~-٣ .~̟fEizUFDHm"?ިU_f1Tܧ 85kVEv_aK:_U&zzL|mv_ kSZ]ܴ+1p<.")ҔQ&=˹oQTѶ;}?>k6WjI=͹F63nXU#ϊV,zk(iOK 8h>һ.uOҢ(@]/sW`ֲmi>*&Ywkei@8T |d6^wn3~]w/S}.3~s -~:,)\g>?И9wk_cNv;m85K[?_N=HIϯ[w;fuyп J}Cҭ*Qkr!4~=y։&מyΪJ{5Zy|QTT@,źo2m^~|˶>nw8'{6o?sQѷ}<>S<\]βֺW%y $2L\2+*YYD̏E櫈0_{XLZRGo{)׆#Z]IK)d3C0wD߹~TBs|O=H*0Uo뭬V=Cx٥1ALcsCUZs_;O-;Ü,S__z]ByWpDcv?⦅k::pw_/_6a^"EZ歬jZnĵ:?1k$K<;- ڙ+ƼOu;%]{6]wKMimQvaǓV_wH͝ϯߩ \~~$(:}u4 eX1[q@:|7ԨFoW;" Ki.fUPT*~;溕%+ۭ^C R*0j~>[xBÞ kkķYm"ȶ/%HٺH%aO O4Iw筏\(Foznϑ|FK|?gmRYypMMhl6̋Fm_%[밿c؜|'xOOK-ᦻ;0{{}=VA6w,#v"Ia_y=N6բ=O1ʮ;Sv=hGo^1]2{O Wa$)7]?jTycYjtK-ϦU{9f_ҼՕݺuh|2Z.y.M wsKxn2WڻfJm_.O^\p,g{I_3[齷{OK4k4RgZX)1$t5a*CM:^P\WH;k ^kw7| Ǥ1ڱ}~+f2W3QK?'#^}3_駳?nbYQ'ocGZXʍ+y'{ϭ-nK{F@xSϱ c' 栉nha]Sr<.U[z~U3_q^~6O4_h>"7>E\񋭪!DBϙl*cu/+9ԕxCWVz |ZJ y<_WŖ߲:FӼ7=gw M[ofΰWb9Gc~t$Wizu⣊Yײy^L_߳=Ck(ԧϊa>[]wYnc1Ž}Z:k^]{jS{?O'x[T:o4@IP- 3ww הͿ}^i?o=|&ߺnƭι?0ʪS$wlگ*|SW8.5KV6gúkۨ˼ktGtyMٖSӺәoTn_ŸF)9iy7-4M[kc <1jI4mJȧMF"\=%Υ|Y,evQ~wi϶bj6a&B?uJX|4tDx NWO'VouцE)28_w|ѯet0qZxPv]l_gz>P"Pa~ XHS6O9UJiuuw} q\4q5lvkW<ןf_x8/ Ԧ}QEڳG56WfOek1v1ׅMs>Ѽ?TNou%Mٷ3]|n|'!Ьfʲ/ڦUE+o'_q+sF/O^~_}gyw/j#Kw isLmOTk},g6Ȯl ׌|?_[W{Z<\WlOwl^moKSNB;c.a9mm&f/{ܿ :_5p5j㢡w}_wX4_O x^ 2Dk]#OU Y&ff??%z&5nҿ^Uo{+/:Uj8{56&xNu9Amf<{>Bz*a~ 8U\t?iτ~*<56\K[I;͚Ck$3I#;ͱ#ߖeQooS8qOه^ףv-q^۵{85bhFc?I=o׳kڽz]O{^EWV}_z^k}ߧZG$^y!w {?lFtqx|DaR/I?wbY鷟µ~~xjoG^czAVHL{ _mܲ$ƍ!$ɱ%_3z#}/i)rjO਍g}}z7AʇzȧOMKĠ:֗4ZLSbj-OoǓ@ƭ㵸U\^E|#qhIF=0c{z|PvN}|J|]BJY3muF-zz>0^z<K.xq"XT-m7]mGu3nʫz)|[ezI)U0- [4临#j] sb|T+y4_}WmQgf~SAݞY#8HW+ oO Q6B;ox ENg&^WU8$c]Hk*U*]y-]t㫍'/6&W펓w4|wźv k2h[M'wM EO9^:JU6NV|\[uw9'߮5yw6$_^en|DXQw2A6ƒKc]yrlҸqeKN6Ӕus{Ǧu3 gvޗ>zͫ&ZBI`ھ#}s5?SݿŮ]O?Ǚ$Vg*M۲}[`;lɳd^%<8#=T+kEB"onNϳ27ߍ~qJ2D.vU;-Z~~{9Mcw~98;@ ˏ_`[ohƄWяh]}RΝ4R02ן @n46i$Ʈ2?߮3;UFLM:srVq]6YK])Rµ[U%}UTӵ= "-*ff#B,|!?mV )9ߑs/~V[|N&'-ISO)[[~y 'j߉~B,O|=wZmʹ+֍o%ed{VttŒOoz&gG1V!Ͻ\Y_妏RG87k~~JާӏB짃vҥ ~kV]OﵭFp'NNwS~65iZ^S"M?TjCa%s`i_-eW0{:jӄgN_ȼٍʳ 6?ֻg{~_'Y"mwb#¶ޭu;%n11Pv'c$׫9kBw ZKəG<Fx>Ѵu5Ӯ׽?ϩ CYy\Xw|WoJRP{r{$sVF?0ouu*iԧyz[ vNX_r]^r+mnIA2s׭r9-Ng}laU[#1;"5 i|?ց@\0Swcw|r|ڥMN_bʊJ -?1\ֈow{-.Oq4{5wd-_TN2VӿOI}}xwh}Y͟*so}oԍ:{$mmӿ[c$;]`{ t֎i0i_+]r ~~ֶJM^L(A4@# ;Oϩr~>򴌘0}t֞9Dfv\ 9\ݹoVQ(KȌYBߍ=_g)4~$EoyʨUs+>PCu!?3 jZѫRmZ z}y{@PҲ狿GUU 2$|=rG__nrwWŽ|w-׿47dmn6\/ o۽[QI/.{m'FFkk{yΕI|-'3&\|QLm+ 䟻ըY9؏0B 7o|OZݿ%E Yћœ2]<SUwY{qtѽ[uLv{yPw?֎mi|s_.*ź*۪7+?Ԭ}3.|\psx -})pBnyZi;ܒLn 99Ҳi{WQ~ RNy~3޶=yo~v1?ZO^-­'~3+aFӸyƳ~]Im׮sp:ޮջNm|;s2dnͫ;^dFyv$|k|Qg,f[y$*'v:w~o{FgshgOɒʹ;z}]j7Q=q$RX)nM_߻}iIkM~ܗ.s:g>{iOSYF'r\۵IY~~ |ŕS.Yw3*֛5A neʅ?A*Ikt*Jһ~C~ݎI?N/5=.#mK1ݽ~ҳ)9YG㐬De#n@a;=Mhd)Ss<6NIRd~iM{w6tbk6daٝļ#TUg̯5vqӧ%vo[gA4"۴bo?9 ?5I%RPM/z y@Lwl׭|o[iuW]?}m~J\wnܯg8z^ϧcڣWv3] r2:^JMt^kЋVR[!pٿzǗJ/ bIW/>&qJݘQ{ï-¡P rzU[Ogȍ{G¹>}r˳1 Ac=G_~?:ג=dv_WۀNR:M++O4s;_jJ0/F1Ii\oDk1}-ۯ65|}(eS 1ӷsAWek&I1s_G"gv}]%m_Bdwn3G֋:x;=?n8{u<<5,n<$<ޠ.WU$Ǟv>]ߏ֑5 }uQIۣQ9<}z%nb)O5f+6nVMÀ9 랕f2w{[̒FsFI$ &8' PN)ܤu-' _!wqEbPFxQZz_QS p1IߛX-vI#*WִR¾ y^)# RH ۀ97Rn~ʛOD[M! @TmU[[_o%SrЌG͒~?SOo$JZE06IqȦ%]~w鹳?r$dEf'xRo\mluH܀_jrkNZO c6ctw޷ߴ??3cǟ͏Wow;w~Ǔo}~nO_sX^̠|p_}ZVVϗJIy+H̐.v췿L|w|3`%;}躽Ri+{?=ڊ(9lH|}Ƿ<;HT_ֿ10~~FVjWKOЕ qݖXN7gtA(V@ǽzzT8߹rn{vkz4G w ־]%E.aًo4_6\iMm/ΥBqsIF*-yDo?5j-m밻%$Aݻnm~yU;n'j>ͫYק@Uc>ww8K$DmRN;g=5؍V)2%d\MYn䦹o שnɤcK];[mF~}.!d̤7V1nXK|ƺ $smu:sM];/1U[<0O_5%~omSZ0_W@G2'̹ ?ﯛxy{Ikm$r/q:mʾT_^11mp8<+d~}4Sy8rﶾ3>?7?Δ}֚]?Ρ?^~U *HV,ͷ^)5{ueV1߲W}Q׆m2szw)84~IB7 ?k8u7;_tRVlcx'gˍ#)F/U_gb̵Y HiF̥YT?[&L~A{x&U4QI{2*K n')ouR^__?̘VW̕;דmKٷ}B6OI"Mdp v{V5ٳVj\9RH?ܿ}n&6wneIN3Mu|R瓻^G uj2,W,%6#gmv Wg FzJk/>$I"ge56 U)j_4\kIt$Q}y&6ܨvsWV˷{k0UZ'oh {m ]4e4F;3I#4|wyw'&_myبmʔ~^c\$8}..jxcCk&ej;Mt$TG4z6:J=87oW2"4O/ku%vcky7Fgo[JRwo[{ogho5ti5M*QS%2ȬeYnU=>|9kNml8(fsSY6mg7΋6:u==x$rG a_9cw..QbaUTѾZ=|SqtW?\iru뽞Ol {_זcfR߼dR;6e}uO{ՄICK~6cޕ]7Te֭U.d_&X6~}MKM_ѣWT|Ö֖que:C}o!ً۾_.E]d{[>_trmk߾q[;5Ү&[xnϜ$j۵{}yW3vW/:^-_ˣ}Loo (qKu"Z_I$m~63!/G~&*{kmumΫH.,":nwkd^re/W1U*i;to{F!㻳ۧ߾(lH˹y)۾Q/Ř.JiN79Xܼe^Ĩۘ.#X222ܪɻJrK!JTw7dR{T4E2nYW\׋{tBo7D['LXU62G=>_m'Y;>3!6R4ή;$[[BSy{_z$dNmXAɗ`T;=ӒK]Ik,E" 8%z-NK=ԘUI??Wr6#Te~קţ׿t}' $mm%/ݡ>tg7<7n8c9wn>Z&8+O."ͰE۸luݞϭEߧCd{?ֿH-c!6eL֊W_N:K=ۨas$|F)VU;M$0M*E%:rͷz|TFI=VMZ'O1cޕM" p/+'uF.VsҔ[>3u[*x<`1n>ѝK9~Gqf4*T1WR3NEEFko|~C>P1Ru{.*H[K](s܌nrNݺ=X^:^~˱Npw?>N}_ެc+kOBG2ʼ*}ݿϽ)7ׯ܎EJ[}oװ$V0SG?!zܖ34*Mom!dP /*(F򍻺E5.8jƟ;pN5+e4l28 XuW~xKWZo3CѶ]s۾oZx}o2X)-?%{ 1Ic_29mۤ;~upiT~2I+,!Id]w7}8;޿]"տz&J#=ڍV7(}NZr?6h#˯jBTyI. Y~0>ON?FEôwⴍY4}B*_b_x6rR=!so[I;;{vos_\]FeGo}g=>zlJQVԙ[zo]Mha,g.R eeyRX{+8K5oė2YE",.ՙWv֮v"woWk茍DԴH]Z}VQr33|Tީl'/ӱň[z{ήI@\_?vƦKU[):-dLIhgby_O]~.NX=~iz3MDqmvi7vÒ\ןu}:u v˒Ȟb˝ۿZ皽/KtƣJT߯:sxI$psN+_u0j711oB#TV ,_nwmVžʘ9eooݗ_7t.g`dEe3rֵUgo~=z>IIZ=^KHo$Yc`|˳_ӝ)yۯ¶Rok /[[|!΢hKmug\II(~'W\;0v++6˷DwӯjkYlJSm|6VHC*Vq2 ʯ镚vse;+["G K R01ğ3nm۾}N)-2 ~v^ps^o~T6`dws.~q^#rF_,?j[ok~?S9vWzd/naHc)n ݍVn摣wok8nZV>ixeQEhΓl}nr_[gBT3i76icGX/ &|1hɭ$_krrZ~Bǧplae`mf0GmUw/{W\%g~2ՋVMӹGWXR 6ю[kѥYNߍISWϾIj&$?) lQf _3jMuW; A }s}1of~=OJQwӮ߉e b_hgqW5KE^޿SMm*6ې{y7)(ג܌[Q{~udäۖ[׷Սfunߛ|WJON*0_.ypwRyGn~{RWZlE Pl%y.2MWw~([]z ]]}N#]ԯn l,cyb6"tEYy8jz?ӿui U縐B )eUkU 9+icdɧ3/ L6lM$m&nݛ7:o;Sk_?[ĚekvoA$c;=[^?O_?Rv_} k[%,upȻ[?|Q̛W*sZj߫[Mq[kG[[Ko2O~q77_&t:܊/vnBù|.yZq_{{m96ew|nݻ.zեmub b\w^ܕzt:T#@9#{_orN\N$NQ_שvCc?õoJ3;p(TԼEiIj2;fy",7ʿ6$-z}v* ׳gSMBl!"?lit9Rz$-MiPI"]D夋mWK=?6gf/g f D}ʭS~sW"%wfZ:XmqPo>Ce7uθW_.R\$#z22A q0SiⲔצ̸PWwh u3ix^Ӗg9U1*߹Wٿd;v{zjN8xFwi%ݿ[ƲA[bgcX}73~tB~_{MjTuuGOEwgt4= OmtfDYUUF;׆ù/K[Ϝx*+jMU@EܒF$HEߛ[5~ݟ{^:}i~; )#w~}w9O'_8VxA$<7Sʤ~eN<ڭ{nMCp ddS[ƕ+k[`)?h$;1\NJ0߻]_LrWnA>e7 Tg54__?[DY 6;:jMlN3˯V?A_ӏ_Jkw̹Ҧ׳QW?ķ[w(@,8nMjjhPQ̖L:Im<qѷ/ͻrkM֋?C;cRZ ͵wǭ55/rZ\&ڷ}|YGv̐fgouv?6|?sUvqzvzN/~Q"{MmIq31_,'77ӓ5W50TEVޝZ`_/ⶲ^mFVT;̬?}ϸ<:xhBg7RRty~oiYF.:W}~LpP*4֮/7T^5Qj6bww߷xhu}|sOg=Siѷ͚@==6N2MQ#[~#'}̿󚊼n۷qY={Lne %#B[y#cࠬ_&{R^[|~In) 94QkJK[_u}0{GY5O[6̮tYhd'[˵dOb+q[e}|S)|k߫c _O.|5k _ e'ooYhFI#̿I/0GԠ~U~ˆMl|qM-iyU3ڿfoYKƻ?JlYXjrY=Z\C$=m Ž 7qzVm7k3ʜ%i4/>h+gRoC%ޝkYHٚ-6q٭̟hDD5߼{xpܶkKݗGd `Q^Xi7Rߕ9.^۟_]K˫ehwl]Բ)T\:6_kb5g魺-?>,ϋw׿y ]YO6wIKm˖T{ngF 5)?>MT8 #\"ڪuOpTjJx-Z^:1?O&fǯ/ǭc.HzS쿿keVQhY[KXWvݻڣ_Ǚޟw6ͼ\ɅFo>Fr%eQv~Mu)Sm5 0fgmj3L VRm_hh>gB1Ӯa3˕NO^kQOWzݘՃ3Q.VY`` NITv_y8O_34.X,㹷%|SA"rG$y ۻk΢;5߽;4xK٧⮳-|=O?W#K=,ffvkw?$.y ;]|l1ղBԔv~~$F̫3a˶۷+X'we~]q)O6;G[31r~an__S^\+5yzuYOD6ݬMpdrO]yבŦjۮg hT%*n4_w_co?dУ_IJOu`c#7$?bk tin}{~~⚴'>6QU9ޫU_*ᏉsFKiZFś*5_?+&^Ӽo?dԧN2Oqgy@|CsLտ-5 + HeAs3$~OO;Do/ÏN^=|Xu&D4}?öwh#-FȭM'-qh5S/:KvKҭOߗvz=Sc_v{~\ռU^y+.VnF/& $Dwb%U濧}fCSճRu5!EUE[T4UKZmk97O3s?Jw2%t9Px9f&O,G-v2Iڤq.u^lʤZޯ4 gooun߭!Q~_M1FP*+R涛H&|)*xƂZho6>Fw`nzQ߹nE*䗅P;"HV'%5%6k|=`0 PF63>jN&31[Y$x?.߽?ϯsMvӯWSp6'Z"$&}༐zS)rKܣ9>>F*~ s^k'xns+I1-ӚyoqsK_֍! _dWa3W-'wj:-ƍ}fC]Bۻ]Tg_[_}|R~C{yO2_~K9dYW(rdrKgG-f(k[ظVdĜ|v~&.eׯU~ln<ӯEY;<ȡoO͹c~}pzsT{wu%2Gyi^YđKlѼ&=xev_N;y]\.d__Kߊ tk~YեoL,9]<}+02x9B߾D_SK% ?gi4?sfUK$W1sJ;/NnT =73C7<$>Ļy%O-8WNxu=,>(MSA[_箛.jrA04JݾskrY]ɲDRzk.wFQJeяź[cԴoC@OݗKv,fc,'.ewg]ƾ Q{=#X5kY, { -̭4? DžxΕ;mo7 _=<}ú֢|kSb}6ԉ 2|jK5_FS#TrteP[}[Se1$aQj17?vK_=ͥ+:} T[@u['?vX#㱓TUdկ7f_3|n H0 }~(}}B`Ӕy_~oEAρ31[tokTGuVWG::lcSsWrVeBo(fo7W.NE-~Iv"mm*3~s,]H?_=?;?4{u~v_4I)_^y Xzω*n{k۫3Z8:~lׯ}|V?fKÑF"Yh~.nn8o5>}"4~r&ci(b1+ќ_||E 5V٭WoՍ=0:#W<#5,WjSz|c{?XҜ.TK|.i͖>,NE#.$[Mpέ LHKT(_yeZK[~ve|2-V{JƟAiZX#G Mw;m)BUN{k?áڴi8$757+ip}{_2OԮmլv[L$?/+|>a_ ;G: 2!g/XxcĺBnWIOYO .u,csY/!mU #GNUv:{ytn{Z] on{6GVH.6Z3M *2Kg{cFZyj[Y Qz&?G¿|=/yk\]}M,m~oqe5®c-&x\ml4-﷗cOǚ__4i q}#źAm4hG)3LO ueԳq\iO8-r)%O}㹣_x&νxZaxƾ aocL7p}-H?9v'J*kGiYJRS~si/>~~lU*da[)ϻv;Pz|;n̲#d!p2FX qS8y4^i$"g#E1ocv# nϘsϓwgysXӋV_Vϧ꧖ʫ\Vn&{^ۣ5_CO~':?g}buZ-~Mϱ'֭WKmW48fj&Oc?GChY=[uQwM^=o׿% paӜָM˭֟3I]b u#O+r o&$xT'nw|˝}kMu_0FI}?2ܥ{ P.1І99{ZlY*nW}H/w72;%[kU/D=Ԯ?y5)Nrm#N G<|oΆ}Ɛ}zu%H/+{Nju:-eϸKwgS@j>B#'y_|Fw~sp_ݝ׶v,Oہyܿ'ZƜR_?8Ԍ$V-Ж}˱1M}I'c8-]|ed,s|n暽*T7󔂏F-pjvSȼ_*_m6AG8> CݯUǩtj)4#PH2IRVV:RrV_zu{2 Xs{|ˎA?o4_by}t*!<zˮא8^^O~W2e巐Io?_'WW=|Yb;ӭ̳ bz$_;7vJ89ۧlnpy?uqDQv7 Y`m?ڹik}3sP_ϧK#c܅:nU6߻t6{9$MK/zO<9SݨqMS7'{?""Ixlk-Uu]wϨeP67_=̭V{#*0m1m͓OooY٦˩J=VϠ]O`W?浛m;â"z/?!q,nj1澥NJV.㕘,䍹N4߸BNM$~?Rf@|u`0q]}vIʩE/>"y$cgo4췺K{zc Aݴ|x~B=ceӣ|չW %=35vO]z}TeUwEwOBp+8NI)/}y_/RsG~:q|TޯΏG$ǕT?7zT[3l&%I&{^X#v:><得kH+:?bǛ ݳ66 9fWשw}}n^hl"kn7$9tGpj__,c>ϧRۿ3_ \oϜΪyCSZ-~=3O!8r 4+wc"$ryS.g͵sTi٦Gyy=F ]o*5U}Ҝbqwmi}vB[[G<04Cn&mBO/Λo#w;j5v,㭯oׯ3G8!mCQfoq$a}S}gEN׻mWrq>p0Cd{:t{??ԟ[@H,I~_^D꼀 '~s#2qi9%"[K$qqۯMo`P& d9szuM*Ww~ȫR1[Ӿu<+^+c6|k08.wwպz煋ĵ_|VJQNI(-n~?7fErUO/g751ux eS:]Oߏ7vW. <.y()I7 ϧQ\VJmT~,+'b0+%S>yԗ_yʕ2yomA{.Hק b:֖r}Uːa~˷LX~G߸;, ~Uz7:$u8ػ}߯nD4֯]lr! -eݿU]U@VH#y;mzZ_H!ip7}e9I[6'q {Xz[oS'ʽwUr|s']{wF_[|կb'w ׯk)AIW3#e*ap?x*Tb&7U9nU֟o,F\X\֮Qk[uc\___5N>lt??^\o\m]R$s wRiZ_fH\(¯٪#$սժorɸ%g9Ihiߟp4@`gn=s4uR^ԌIʰbyS?!;Z3(W}/.~7rgS?]\ޖ慄0avT%v_Y*r6eO 1}׷_M;;jr}o?;8ڠ߻__|ȉ _;2>nߧ$֖9jRm~_֥Yd\aۻo9zzOkݒ ;8M },,.>U9 ;v]~^jr 1ozrW7I}Fjmwvwpr#oֻ_s_yш+o{Ul"սj-eIDlЙ .Uix+s珻{W9Qwt=+JLvcswVHFۿO^F3Mjk٫뾽}M!Y)&|nm>kC6}Ez~"8b٬om$ɒ5bv_}?Nyݿuc&iscN㺅$P (Mh>~6N?W#Š / ot;\h(+~E$l(<#Y9?Nk z3N(=Ncsپ_MkwgKm|׹8.U9;6sWqssh=H&`C|; ?5[vdN8߯o |lvv%+:urZ1w^e3F2 :/_Ͻ(ǛNR7Ў%HkHJ>nw7*v߯:#Fw|drjU7mV9f}߯^{;MN '[o;) 8;PA)%)j9%3*LJʣG.0U<l~UennƢ*O*Rt};z]3$ gj._r/eJ{k}cF!,G~k[??S3i,%mMߏ]_.}I<`9\H$WSmodBQO_Uz]M02GSsJcھ)2l~K~'?\:/፥w!mAŷ r |k[:ԚR[E9bGf49]sխ*Vۅi4Q|WPUEKnO{c=k+BwE,ߏ%mJVmUituL-#^̎xY9WOS*̿uU?^M=W߿nd]>ƲvshT9RJW_4ms4+Nm_o_Bݵ[n{yv]>/odO[hvvڤm?o/JHëO9j9J4?^ӷ~"Ӵm*&3Xu!/#mU{wڱϕ>zmk_59ZW<;(, ۔ tJ|oԴ^oE5v,I9 ?MG8{>]mky6Qj7Z[S~yoonS]?tB-~]st`fcSo:WO2%[m_x̚tڔ-dkv.b6q嵼rU%k~s|EԵ-ˍRa`C=nvFjwVYc3v7=Ԃ~.K+^1濺XϧHy%*3P_tJm_䬾r(#ɝZWf,owaFqſO-Z,Vѣa` s_l坭uytOM~ Eۃu}_#\IY[m9T,ȭ峩1Svޫm>nE]›/X繶)ȑs({w' muR4PxC.[ >oWȻ({Y?}۽$4,32,DwokM/R4t=LG5KnnU|-tl^s?s"V>I/QUɩf gQ*ɷosw^kim] YTwl[0 `)rԒM^;0Uunlg ?o=kS]{_yXSJ {b+P'+t(ݷmfs)ӯ_ B\U;__7n^gHAMXɸ%Wf_WrpV<=*kng HTry?޴INN;y-dFߓ3*%=4ӦM}+=lXX,RyP+Mq,!ŖF݋=:c&':9_I&BDQ;tGsbqëJmϦP|GK񧌮%kǜ\GfN/Eg9GW%7ڝ"S?yvKXFq߭ٯh5ۿt>&+HIHW̏ngSS_j%:kX]+RM7OcN%߲xeq}m\T`T=}L$(PNRߝLӊoƫ,L}2^hw/[տɜֱM%}4it`M4)].'^oJ<ܮW~GKE8V{Umĝ˹c_v7Xnf6۶x<<7tOq#-#^پ_]?t)F-6ǛV4r01-򝻾"\bH䂔o/[8dh]d%YWr.^4ⷍ]oɊRt-atڮݻvc4PkvOW6i M.63?U WSϓut./`$_:h+[Fn_kmI>n\N"w~{t߿U%I+~=w97o]EڍK?V|N\5ҕgBd8m;5_y.k ̗ QI_0˹_ώ0I7{\ʫޟw~ȚFs1RvX:#MR[kuﺾ^oټ!"Ijo-.ܮjK}mkcM\ٸXf?uq8J_˿*tcO_la?2EH(IX؍{fZZ2wM_$A^{oN֭+cyc *4Y~l,GE\kuJ?W^Z>lm\AGp۝|Vo?أ[_Mh8}?T'/-{u:=4l $9 wTka+7z'?wwJoomrbߴO?uŊX{^ I4YWe]߭rKtTtRVSRPkjoU K'V17^kĚnYv :oo}^q=/5)i޾t60ZC S?~7Gn 9IJz>%FPC?Ej1cʯ~?7]u?wV؇$nV<ڤ]/?2/NrJ_Mki G?8 z;|_ɾYh6~ԪnyzT͵OGQ5me/,۾ms7fݍ(i?+!ZH/<_A#\C/c~[lm䶇nߥ̷/8Rszl OOy]'xG>WlamB-l^IHhfY%OJ6/9osn~M_C.U.Izzoh|ׯ|J$Joc .I%d<~XB%A]Mu)K+VM&Zke˯˱o=ss`/͗]{y۷r6ȓ"+gZ5KT;{omzh晫˰ԟmkv=z>\:}wziijvvVѫUO6٤~`zVKvG..k]>]o_l '=kH$swI'yzTmU c|&]h%uO'8<~RR~y՟{g~vMjV}W>cJ|%XEC,[R# Ꚅ2WeY:\#Ԓac`gI;}t%]/ĹAy"$ v_^m:.#ᰑNfta)Tϥ=Gl4Up2LRmն}ߞÈv.kXZ@2xo&`2܀V\6?^W3o_;n_#jwzm|\ >\$k|;iMt}b¸J};YچjxyY_yM]7oGDᛛk}WF{yG\:u߽^F?WW̷/DsFWUՌҊ}>W>K=*.q㪿]%NgGg_;և,׷Ph#:|:ԑXVunr\g&*5iF2Zϻ|_PqvwvD-u="XgiGx+Ku}ږ"WxOxޖ^yd[]wd]xvQk?<ڴpZ鶝!4kS`.d0m{sNljih۷: ܢ߻H- 29L; 8VVw5ԗp/V*7Z*vKnm.ZkͦEۺ=E4r#|6ɨքD| 1W_]w^{O|1XYY=D1h^hYɍͽ?ȕ>qÕhu,n߿?#x4g6◽ߣ}|۹A;x~xSNі[D$tOɸo21K x\.U4Rɭӷ{o OZ;Ui~k嶞gA^ip] w+32n۷ykҾ~IKw78)r{OM ӮLp&7pQ$c ]?wo?LS9RwuL№U?O]ך F@F,YdSLMF1`r$GZ:RV䑤۶C3l֍o:+ ֪rWS5[Zܻy"‹q+Ӟ~?z''RѲ%fy 7sYJ~eV;Y__=>L+yLw$Wr :o5J߿:mڍ=RE?ZO-ݮo{|v0,[u}hYv}ﯧ.ߣ5B l}śljgZ\͑<4[{M5+i-K?ۡVWv< KF[kFѶoWz ['[_%\'+;[/渁ae쇂nʶs^osק^Z4빩qu<6ø}s+{?>6x!Y_0I ]ߗ^ۖSa)s'R)$ַu]{U? '9wu-^:sko xWE[2rLKsuqCrq[2,)іN~Κo.E~-S>էªn߯SGJ&堸Җ)>Y]~d5IՓg4-3nŷ.-q%{M"[~X}ys_>e׿fwy;P$7Tݺ8&m3o_o+:r)~IshRN皟&[Zjp-I%+Y4w[Ft6?fhI7JokZ՝QtMÿqh-KzkѾ;!Fö?%QU~V>JIN1^tܧ519u|Azݷr;WNXڕ/4+Yt M6'u9f_?vNԬb1. n~VdEw''_1Լ7msrX' [77_{7ҍyk$544Eԙ͸3*DYB?ª5Uj^Rif>w}%}ӝE- --ͽ?dqG STM_~gWa2ϯ[r˱u7.)`*[ygOY7srWn)|dqya=gd|\,L$DOFql֭W:<IMR?My~qwM_WsO2[-زFn[;.]6+ >fϳ&_|21F~{[_ СͭWz'w!Dz m6I7ko1ƿ6>S_f/0n]m7=5?Rr6 \T*Jѻvo˴H~ܣ; W߮Gv}ۯ섎.Dntoz]pe6H |c~j4m_% 2̌L!D 36Uw~-zB$һO+ɤ}4?uKVcVXh[lf6H}Y#t>}qU vf嚣Ukq|7}t}8RTjIKڸ}޻ާZD(kcTLJ[q+#Gc(A$⢹RjIzuRGyMI-zwMVf8w'8ݿϭuw3S"##B"8ovU'v=Vt{ZC vvgo)de6om?6N7.osO3G$u-duRWqʰnjN;'~~d2\ oPI}#Uspe§A*c~o߭^ԕo2H ݑ7c?6v\hRM V*uWǭq6ڶU1h9ൄR\Y0p>^O_{*wfM<,)}8?Z-8>g{{܅Ag?߭ԫ$rpN>Sߧ=NmQկ?"7@dVѤoe:]41`6??vV}i{>W}_O3ol*w_Dw]>YO~ 6}r Moʹ_ tǿO5jsEI(7oՆNВ[ w>Z+ p]Ϸ*Uʅ|WbFpW9F*+-~08Bq>-9>g{/[+d$ s7VEje8;Iz}HdB1̞<ϟ-%{v' ?j~_o, `Jɸ]" omNv׿E+7o'X`;W7Ehwo7 ]{~#cvrYo[|ɣMwop?)ܫn=Gc;+9nTe~ Zߩ}a(b0tS>j[_nL%~+\Vu;>{XLF'ߗޟUI[7Nkg2#~k+ѹ?|zZr/2dͯ}[K P|rďyuW ]߆{C/Uuo?sJB' pIUGI7TVMytsn'nџV8.!a$B˻ݿbfa{`ޟҜo>Kޓo]_`|d8Tۿ?B?kVEH;Iv< onzZ<+e gwR?FW-㿧0; \g'8nSjPIr ۰>T:*_;gpBp1'm?Eܳ:o[&U 2OXϧ6I-oy8L"F.yִ.T+im7|<)Ὓg*:o|]GOu# v-_vm9泭F3Wzz|˹avvC?|@ue9߃gooO=K^֗g^*烰l?g|7-HCڧK׷{㘘Fqwj6־O.?)ⴵ_OzΏ+{GN^#r_ONoϭ'zlpzWRm{k]=Z/ɰfnr[$cnn߾RL(Xs~Il9*Ga`~n~i6W_;l{N1iO2yN4i+>?СLD$ޟw[.*i|ߟ^JkKN-)l?ZԛrS}qǯ?P|LwAlgj W-xUFkwwC~_?̕x8_?__J6u_ԦZg w<kc9Iɑr2ĒprzcIcr 9$ce?)4^*cnG|{ֽSq>Gք6{;`^wg?Usoa JRdY'Gy _-IKŰA^qojl[3¨x`t$noX6m$O?cHԌ1Ik1^}#f˷|tQ&̵ wgL1mov36u'+\k-nc9'skH7XŦAJqX}Sw+-^ڦ3ms'$|_Vk7.9Q뮽?xB ^ rCykYi]yE3[NA ?)kkK]~O^ߙb 0zX?>|sowf]{ʯ'޿Lp*1q-u|n3N|}pfr3.~QO}%*j v烊.g6ʂx|zo3~D+VoG|ۛ|}߻F?wpX ?xt;sY_g=w&#x /oVv4֋&2]#]iӅjo[u28'$~oo{O-~RO؏fuӓi.k[.ª, %v6uU3_RK~s33_["|ZW |䏽~}ꈊ}=wԜH6}>oLmv5r1T=)E5{8F_yc9S7~ȚׯUȉO1w 9QooW=z>m۾ A a$tl)MסM7)[#'V<+-+}hsiR_K>O_?EY;=w3t/WdE~U4Z_%JJ)vXn!O+9v7NOI/!rYW_BIl]ncY={o{E )M|?=Iz9ok+|Wj=xQĵӓcJn_rgȿutZVÇֱ+j{:ƾdEϟ6GxӔ׼]W=Ԍi*om#.ƐHnR5{P~}푳oM}d&PVz鮽_Z^i)GW N(FӤX}pJ' |Z_SBCN3ܹv֗3FjtW]08Ҫ+]hɷףϕ9Tz7o~)so[m٥O;wbrSw ]8Ww^w{Yip_й_DpKwHRMoGt8o.{kE3}a6,;9O=gsBv/<zbW}v{~_c D-/綞%/m4Mj n#Wɵ8r8_.Q%wvY] .mn 1[- m-uWe&M?*[(oFD}o\շYrW;ݝѿεuVTVu\dFj.x5RF]ʭm,gZuy輗ˍHF6q, ʬ~x=/wjRyf#2~򏗦6z|۷浖z~W/ }߮_Ѭ68oOnU~]_Mp1 ?nNxV-[9;Iz;ٟ;G_gտ[:j*Iz/OeG2zr'}Q(8Qr~boj ,Afo#O?5iFvLeW=9<kR~שUu|"l꫹\[N*'ߒ񒎯ռȾTF;Fy<_KO5U⺵Kdl^c=i8%k2{^.TF2Hcovo}w^\˸!$!w{OuS\=$eG7?TGUj;KA܉,r+ߛ2Rw}Cwq L[BJn[~l*^~}Vw=|-&if?^u֗M5߯~#UY-tz_g*[gyhe@Vc_3~s88w_sUbn[_ [K+kXڀ8-6ӟW=v_oM-ONy&~Wf~]߻j2ק߷Կv/iw(,R X_ʫw7E]~6{;A}$X{˹U??7jZ/T6Fێ fo[$Ƭe~zu(|Dn,C5QiK~g׭k/Ͷ4@sneܿ[֪t 'G`ڌnI0~Vqo޲䏙Feaf 9Q?{gvU79;Z|v4Xǯ_V5{KQp&'A*d;F *Y:`kR6-2{"%ng&*˹6L98YԕK{+ݝm1[DmT]~Qߗw??ZSjI{NRVK~#PPN6p3j馬:-~3bJ 72?xתJKF黾B˽_ӑmרIFJi@bI랞ڡSvL;LLL=+977ĥw 7'I.o/M5z&/#wm"hwO˔+u'Βjz8ywOo'WY!@Π}o+ӧQ'5oߪ{;^K=oWݰтH<۞~ʿ*:Nk=?S `NIe+,v$rGyEY;M}pJt+M!d4Q-ݞcn}{We8I.y΍IKߎzd\붓lmT3Dnv$i/+mݳڸKkfΔb^t-d:oBE+ndt+m_(u\^qyZkSgW2xzL+[ D *V]uMk,zf ,%Ǜ7~u0̣eU v>P__fjj/U^PImhգ7?ݏ+Y=F|cԺ'-]dr_j:&pK0qW?ǵsM7cU%$oWoɊ.ֿշ=PiEş]Z5P*O3TX n]_m[ Mvo~?)^*\*ZdMȄnUw7ͥ{ NS=biVжSFi[d1k|?{zw5RkiAIЩH~V]۾ֲq{ ^=u+cc~%=aio23R7't˻vt]yTowcgZ*k'Ӽ= [ &!o|*FӦ8i(JW+}޽5NeͷsyqJZ+]kwm*Oש[% #bU\DyT7/&kjURەó`uKXռ o G'- ٭wvM$chOϿ(7+iꤠ߾{h;|?/to/)I>Z(+O|V3ia r_>gm-\n)zU?^\ o h:wfOlJBQ)~}AϯM{GȘ=(z٧Nڿ^Jqק}icw S4RyGV6IxU(g׳2hb\fgvkax{C-,VVo$.͹W5]?ʶ!^I՚}kt@Ӡ;nvf8$֟{ӿO빔0ڶvͧk08&~i&Uoҝ~}Ek7:kƕ:*I~> ;W<_v޿ϨN_SrS?/Ddʅ>#vC{?ҷJ߫ m|u%ܪI?(wKrWw3Cnon+l|?>Vv_*R~Odm$gFKuz,ɳI&wuiG`!x2}z7J\t^a Pq?Ϯ^9-Ug̞IE+~׸Ɠs¯w%v`g9쿭FZ -۠%Čd sV_?4J_n-h@*G7+nf=Z߯Uٹf1nQ7DW8QG[u9}|Eݸw[Ԥ%*aCq]f}7u˛4,{I>ZwzV<ߚ85w9NyiajS\*ihKGl闲j\{}^UXMY=۽3;_xx7nlM{hf bVS\kcObt~VPtSj;y#_=3X-Rs۫/r'#m&Ꝿ__捚o){ I^u]lq5jǚZ?j85fH#\zTT}Og[_*49eo///՜uO)'٭mmꫴYͱw_ a~Wts_k[y剩oh㮩/Xꮵg_^%ቢ>Q9$kp獶I7᫗{zpu&Zotc{'R5*{Ii'=Ӑh&^j*^;~˲MFo|?$~w^#3~oz>㕭|ntj]Rh(:so33Llwñ_7fwӧGny3ZWzm~Zk,tXQk7-(qHŶG LAMg(u^W6ur{}bm}:m%oׄlg7niw1V_7w}=-F*M{ߧpX|? o!$r031_{/VT F#--̋ +yIq#"*w]t)K_ͥnG)HgjeG^"b(CGGE/ςYڿ^jGzo_6?3pS%[ȷWP$QX8J*sk[gV꿯5o3idO4g5c_ +/2Mvwu}?~-!W_݆!+_?TO=qU՜l*m.Kos49ocB|rkΩ]~]gu:\gkN'Ph#e\-ia%ڀ&m|٬ov'1an{GQ$&jy|Nvĺ5x{ƚSyvmw~|GueٕL%^OzP~}J2U)/y;קmާx{Y uMim܈~2{rʿ$3 }7˳ \QksV t֜wKMo HtW|WĭuG]^ƭLIn-m}7'+ġ7_޹x8T|߮ [_3/_RVRI5wܬ.H'ەUoo^_ØD_ztwpr,%ۭ z:CC4:τo44E9Go<3̃7UGg^ vVJ6WD^;OIA++mcXkmYZXBB47P,o&̏o&!3ʞ"I==һ5}~NaR鸵 Wym?gπ?E-Lmwmhr5֋uc;G%k"\#o#3y9V4\qz7߿ E~5h糷m7?&toړ\7DW<1cijj|$w5nT[x5tnwiE\^{\U1l%E>!Ki5 g+6mk`vy:Ƴ廾[[9/PvkϳԥZl"J߰ڟ|{n+:$meWuwKzIN⮭kMo&-&&6oDVI,:yLiߝ7ZDp<\_Mu|+Hv᱂ JF{Toe8tFM_vۿ__3JIGU~~>gZJ ÿ'`#1#KwҨ:.6A#v}hri͙~~beVi!rM&;,pkcڳTLGr[\.aV)+[_cHJ{`D*rsg ImNr &աܻ9Y=V5vz~_h[FHsqh30T]9a,_ +msmoК8ӁZ+7sdWk{RddqRͭ?S|ay>ǯJ5lYJ9.ih}x}=Tۮ.2ׯ_.`,qMXeo3{R]ಥ ߾ c3ih~pTla>ץsՇ2nu*Js>!RMWRDW_/p;|ΔNltG}O:V-J Y,.pDVc>.[Zo%<-KN7l ߢ[p%]qeJ=o~=H5owӡW>moo4eŕ8i.!w+/pκVV;u{T;V-diW7D.ӻ[:{ˌfo)Xo=wO63FZ5bws[J4D)Ekc=bq qjn\Ȫ2< !;m=G$K7F6 4mik_n$G7,%;Y2ۻTW[MgK+~K4o鍩徃xdU&_@۹ޟ_{?]j u5O>$=?f/){A)cx{K٠Uɱ>oޟy_l#R~Τ׽Vn_ g+)/+]U n.e~u[_c&>O /gMJ~ZJߝ=ZZ~?|t$? ·l% !f\2\wߟ>~z,5(?<$/owy~\/Ɵ4^8un~.pJvЫͻwo{*48I'W[ۭ%YFR+W]Z3 s o~i|3/==eդе='Vz}\-^X S6pd9>Y\>/c[5=W쥲V\slcrjPRo3O;i7Mj?%Pͪx{ž\m' jQ~{(cXfoHfn7XDGsL/x|CRZ?yԫ(jSU:4faVq>\NU~ⷴ~$tdR%wl'o޸#f!W3W.l7Qa^:8Kd;|;\)NUehZ}W^h/?QѾ:JcXYj%լRE-g}4fr)ӕ)cvIX:1יZWq_k NPtսڐok;[,O L4??a/pyeY[={k8>_[u/3U.k36]w+̜eK^̯=gtR U8/ۭQpca2\#P*kBqwg5˼e[m۾)ЙJ?r~'5 nvՏEO]Zr7Ol)̕p)uYzn<[y爾/A$*\UUKw8T~}ύ0~՚vkz6zuS[ !cds":o>o/Xp#kKmnn /wxu+^"-<]k iԗy FG?g *N䵟J,>G_jW7<۟O7k,gF*Odͱ؊Τ~.2U];7o^~muhIvF;Iߕ9~9Ҝdvv{4 K# `1rbRwӽ]٢7SoW#I1+mI6HFvs\S+Fjk{po_ƾiڝ fK#ε{[|Y6A>_gYh{J#K[O-vdhb+hs4ڻWӮ*Ŧ:?5}#X66i@z6wvyj+Urז,MV?҂jR}uz+w~/д]3^FgwTAm|oiEc笟=u:Ѝ5RRV\-ۙ޺[k_rkB(;;=y{CS_]C7.NIsK~fm~3p'2csE]KZ^]q\G\Jutt?f[T*]m$z?({qܶpvkor}ϙ>[S{rӛVVnZn"IJ--%3N;Zѧ,^Svː$iMH]N&we75=,E*tⴲi/SZtRnU*s6=w{_DYrw뚸IesfPVwdJa;qN7_t {6)9?.B$?7=>K?[hkS*~5Ps3b7q]JTzLg)Zj$2I,9tlEY?O]O}*som:u;\dfA&IO=?hymeۺv_yreR3rNMb-ZBXAw>ٮjo4'5kwFqv_POkR涛)8ON(^@\럼7gwJ߭nr)T2.Bmʱ#$_c?_N\HqXy!to8gC`~'S5֝vg4'%޽#)!CpH tSk1A; EP#+''w?m } ((,z qiӓ]v񿩝kob;{֮MoNˀ3j\JΧS0U^wMٿu?RѼߓUA_zc?Uu>,V֫rػ0928[/>,%};z]ROC;" y~;FZ׿9zN?Kr/[}{S!Jj/0?ֱS|]7_*Jp` 22ﮘ-/{/th A6ҚNԕzsmeB@~woS2Rk JK_|m䓴ǿ5i}"0qjt zG\U)lm)o^DBpp8P~`{7aA._sU\)5jr7H r;͏vi x iP0 ֪Wz{=EFQo`N~oC|3SsoS~Zvyvm5Im~f1JΈQ,pCt+2WJ*^~FCi@<4^H䌦ުv;hLe$)}}c?sm;zn7k Y> |$fk]9;I?z72 P~RH9' v_Ro:?;!3#ź gxW~]~=Hb[~O>a=HN1믏/$yuv-N9 wqׯ -io=gc$li A^ߋ}//K_L/1:8=Rw>Ɠ]I<%w>˲V4[o~rO:zB n~څ먇ȸ>z|z> |ҊH(}z?s|ߥfz7%;;̨G8:g\&P?{榤e֛wIJױ# wܟ׊_71 ̎["k_x{>_FdBX9Ϧ@ܷB]_ ASӷz7:YI^_AVvv3|}Zɔ?v\ 2Z bIn6W  zZ '+yJ2@;rG*h$~` gfrOO4[[̉ݤU#:44{O/Ɖ1bOԀRz+Q 6qh%_/;GS}K0卾-#SF9>4& !s1wYXB#8ҔfX Q1`~?jӾs<]i:gs_v.oSᏊСaqǥ~QsOoϔ޿|~g9O(!wR[oH`Q|=^gc]ۯTԤG]ܒwq^zJ ӧObvGoS"F%w 8U\K%IP͜JbE1U@̝xlթe[ocM>r$1y9+$jRE_վe>`?=ZRq0ow~!b'k.rr>mz{kSRi?NFHb㎥k^h/)I_xdH|vk3^^wnk{ i0, .Ao}.}UU%kv=|fW3N>7yZ]kN íb |S?*ߧmم%ɿϿ>LdzzmXSWz\GMWpWcgq,9?=y{[~dN9rv߽w׿tD8,?w* #䝿4R¤ߨ 7{-Z~}v[%ܰf_"r>e\) rywvM&ʶEw n6v}k:qzWoC(O]W]p}hQVWZTM-c]vn0܅ s}?դcg_a4꫷fa6H9#p HZ9_9#I'v|QI1;9 &o|NǼuw?S[~<xNwn?fi?ד;Kdzַ];;H#(7,IsuPr«ݷ!T\Ѓ@~?hoAD ˜u=vRd I A>6Y)ݯ𷙵:_-_Ą{/#{r ,c˦QFo/zwfhhE *y ۼkI$/sWTlf;:M;F1^iy?SkFQw7~~rz7ֶk~gyʳ4~cHywڶW]>}S,U[Ous ];ط[תqeA]v*i t ^5i#Ԛ UC,OּYWr/v:ezwխ-ekw~hEӵ6QE.S+;\4{,UwZN*m}Yޥ$VF Kh(6Y}b~v]yg:>$|sx7P:"k|fFc3L".'IE0oԲ$*SOSp}z~_7ITw9MB j,E*[vߗ۵n(Bz?:hkxAs|-oJi]۹ˋܽΛ_>~WYay}U9Fw1O>V3+, >UAUſn+)T{)__obdM5~DJn-ec?5+~Јqv_]{PEy :(@;6v˻v׿jyyVA]$h]c֤{to'? ۺ YKap~\4kׯwМ^_[6j=9Gy;w6n<^oٿz/[a|z[ÞeYx\îC[ӆ03(crIV].c!r}:G]NJ5#8X""-$ޏw=|Mh2;o h=?>k>w^TޗWty )39Z~k=SYƀp';+ml.eU Iwߪ8@Ӽ'aۼ:˙!oHqYYUXMȏ뻭/kJKmwe''jvO/IgkkH74i}$"~Dwl{7(ǣo׻=C 5->_~r>{.$wlcxF*uqFo؟yJV]! # wN ak3Y*ݤ%$sf_>z(㣒}r)V䕤{n]\qx$y'$?7ɳjHF:C߮:jXgn}G=^%u i^=y~E-W̭ ݵ?t^ެhϯ"aF~Ο& 龶MeiSޢݢKtҶ-ɕz+ Ms_UD߳|2.׿t*S ӧZm3)C VRjV۶ȱW=ٸu_{gu,5YEumȰ{Y$-rq}hQwiԚqeدy;K ;P"F\lX Oֺ'뭶0Njww݋ ((+Ň̿ݵsְsw޷NOR67=o𞿯֮ŷnE~{hnpe!ozEeoa8KmRw$d_aki}%Ƚ̤h{  v?ye+Mouw. ^oRR94ńg,[/J1[<$]]1E VS"w|qkyS'/wZ[_=gkPA#eldo V.z5{0[]w֞Yv!33;\_/?UQN _o9V\ܗz2АB9,rT6'ϟ;W·;&+_*¨$cȢ%FkᎽ6Dꨩ`Q~Z~\(TҔ}^߱znj0.2Aٚ?=?L^~3oO?g=F)b?~צE(dŵekk{UWw#w|߻zክSO}Yc, sa+o/ oWP:}ΧySIR=6pwwljzϢ9T&ޏ;[-*܇(Ur .)Pz'߯S N}^w @Nߛ_\Avarz̳][GTS>ӄyݮ}n>I1IDo# =(ror\{ܒ i'ei&Ly~VsoO;7/iO4(O򎋹C޲tH3ѽ~@X;UwziO]yVK.6ۻ'QEVʚ_!@vrUKwYΤ?_NQ;[S=<ԋvq~"BUP灻{wY7dEδc-uK[/mY R?:i:g~0s-b\y?3rf8K }wi_KhE=U~^V~;е+f}HU j)]voI+_J*n{kY#,Z~^ꓻ=h(4({sF]^j6yqD) G쏇 8_>җ׌oZ(pFri{mOt;oGXKm{Bfo 63i#Ti1iTϯO*1*>վ=.^GygjZ'W!n976ݙOwLRI^R|Ԕoo޷u,u sK]2I-Z&U}[Fͽz$D]ik-'p?SXtSmvc?O C }UVûn>'_IV)/y-en-}|qA)Er-.$tw1o5&mуɅ\,66k5ߩK6zzOw|2Fomg<2. <=秊ovn7x[= ~g>x.*O޸j;_F`ެosv^uJ]|3oѿZCUhݺ\ҹS|v7=NOHԎZJ/b(Y+Y{jw%ns{_ڂ 뛴LAtk"eNO Nӷʒ{'2o ˪\>ξSh+~v箅/fvJIz=B/ V3[c%b{x WlEfGcpիRS\OWn߉tm%;?f5UA5߈[?kƱh1cwxw|qZZ]{MwzYUx*-*1kk z]xƏ᫛ص/tԭ5Tk;+47 Y6w>Oղ!eܲVd/OCZHӏJ망=WI_ǡOgNm.K$dдn<{hwGq~꼏ssƅo`43_wi|rPv_>3se7:+;#]-ǘT֣I]sM䧓wq1ztn"yu,%Eʬjc~ M⻒5iDNo4fMs3v>}W*Uj:8 ﭟcOO|bpk6?o5t-'vOuj}_Y8Ġ`g>A;ӭja٧][vAr7^?n܍{-MկrrN2JM~9E|<|wqiZimfc$#yrșfx_\XJu'4s 8 I=U޿S/;Dn{۔Aq_3_6o9?oϷ~O1^b!v߭aJ!]=_O~CG73[]\#yBcF%BѝNǹ9jyI<>sZ{O/zcF ${5Q7O@H6IL{u4dA< @9r6o~9r;6m%~mtcU?gW**HA r>.7wOs+6|y^d͝Jx<ܳvj_K;uAp%9|ݬ߼SjX5g /_텏lMRo!mW%kmUٮJe*nI=WS tsi{{-yBBHgjF[?| e-HlhB}JϞQo[MZjskZtȲÑɹvY\{O; /ӿ^Ƶ7Vd;N}_ĸ$Il\~⊓m~ɴD۩Ǘ\\f n'=(}}w[‹M|>mo:7-+}iL2_ *`KfFwub+=v`yZ~!lBm*"ߗu_xGk/kួ?$t[=JKF7"sf&߱K sʌ?ͽ}ΟGث<=dGYGbL{l$, 'ޓXZd=KM5EN ןOu薫o[]~s_MOۧ ^7O[%߇l׷4hպg[\m$r\\yYOq501beJ*M=mt*嶶|Jk7~ÿVS˪xjo q1㸹l|ȏasreq-_זi~g ]_Sx+~4K>9_"obf#}@~aGF<۝鍊FWS<5(5Y 2'亶P0?5"֗o=vk~kՕ%+Iz/WPie8( E-6{v+=yGZ>s?go$}qZf:lE]#E $2o8oĞP˸A"la*/_s֌z ~G>pj 'su_Z]ۿkgʹ7ju$yX| sϊ5Ed|ogwkᮗs屙}o_0ͯM"C/GP7dm+n}}H˲hz-?xc]Oo5&q9zx5J)k=S]/۾ژŴ(PvCA6Ue6]}!HæS/w[,k۷~^#:_}e-.2'̆ԅi.d(g~ݬe]|F8h˾vZ4A;OpUUVJ8Y><9NSWT%o=z+KqƱV)rV<*SLϒ9%$P͸B`Wtٳf_e|&m)k2Jr[]=O$+EWy6`$jp\̛i߸#Xh؎)`=m*MkIM_:CGrǚ*JJhӺ33ndt e3ڬ~/JVw}BMZɎVMk&KUW,l3_.7,SuryJQjWvo5>k xu|ϞJeWvτt}6^9'~+K=izL 7kn7o>L 6ZTb&VZY]=l8G5%n@v,CF<˯sQR .|R`Crnz7gnokmu+mʧa6+~8I=I}0.221z^OnڰF쁅ߛ|*=9 ,  O[zqvM7}uF檪0d ߟ@U~0 s|1z#kK]/9rJ!g=Ӝkfκp~]~Y >jZtIťk{}Hc=8uI?ngɿϲ5W%p=O[>IyӍIOwnkѪUA}$p~oqV7;V:㼽1yW m}mY{_.M\ 3~S=ROc'?j"G\n<^#6.O`sDl qmq׽\UQ62eYAti2g~.i__Bɴ0f$M%K}Lqw~Ce0[L_h-_AO9$oל֜trROȖ9H@oVpG׮ݵ`s~swzLqU)l | rXvzd}9Mso?=# O;+^_?)t~{wKOAYg֞ 2bYr>޿y?=ke:afCxXČ#nXs3Jf\|o|?a[[vX5EW879+eS_-|䞿>[IvqǾTe{\IjF9Cz:ݳBE1a ~.fO䀶f%znTV*Q1 ~N$ W?: Km̗m#8F~x܆6Tu;?Z/iB>P@sWbyhIt~]|%E/o8Ǫ~>$]sf &wd\rvw }߆G&ܒRNOᶃ.}~r9gj7?h7ROf38nwn?Z q|ORu_s2 s!A/?Re2e @)AtO&UA՘uPf S?RNOd% e%3cw?ΛnNو,uRWKmz ]W'# w|)4isv9I{#nV( ۊ甚sE ;Tԯ`'9iN2KKU[ݖ~}&[ݺcA^?Yo0 M~VWOs,%ޓf[]w_dhFz6ύTn}VnB1a1Z;wgc9k'a Ӟ3{WY6ӻՑȠ^v~lŝ[}߁0mؕ’?{VjM6׻'U[~3($kNDwnr7ya֜te;v~eF K.i^voR_+Vg?$f~lye%s3Mnw2VH:VoF<S|r͌l:U%5(9ڸj]oIZAR3Qe\'w|J__^/ߡJOk'R7/@켷;~?=l]nH!@ rB{GF zrὤ3OⳔ~\Z>{Zw;9nwzH/~&m'#d(q_V-|*jֳ׫qH?08V*[ʎf׻sT5߫_c`gt/ֈu~֥Z-/R5+ݞϥXewDX17i;;o2y߳n98;?~iK^ew}NESI :q%~qU5+5u|zd_SKKj:SOw-[?!Ae?0i83JWwSS)6ϟֳTkZ +H(~_[?jrvO]•.gk˅T88?50M'mg{0 rxr]֝hNF_>0|gg= y}5l6FVF߻ğ'|ڕU>o=z {uw3|=7*mFk&YWΝ6ȷ>‰-,xJ;|EtՔ+?E=?6+ä+}6+.Mņ-Q|e_1'F2߽_9jJҴm~΃>a{+A{%VQٳAiqԒL4~\hmtM,<[7ɞ[KU_|?S4Ԥaxm"="[H̖2*q"E]ܺ'ܯcVmNZi^US-s%Km}mcO/O[\RM1v/ΜV2b+*|YtGqx<=IJ0Y'}٦4;Hn59].g+FtYeFl¿I+~C/1vֺҭY(LDr+tF+Xݶ_7osa$<۩nG"\~\ %TĪ[(8O:ҖKTo8iu;_?W죷knL7#dU7GOVMogFmzf$'hbK"x{'[}ݻ}F{0̣wdזyn~o2VVF.>}-;R(QwGx_>;!BtX$3"B̾w:Dצ>w׳ĩz^.6bnfk,oՀNﻻ{wxN8I__Ğ$Kx)BTߟ'1I?:mMunj&؈䍜_?svS~>3IS}uUCHA=^^I?[MɾW w]a*G;VoxZ-?[J/mK{lwwHbne]k}R]E:RV_w]Cxt;ܻs|ߏ{$Ӿ=U._֝_Gre,«ȟ4̬Yݏ= |Uo=V߯VZ<1ŴvK}oÓEvqvpiOש]6m%Oh]U~l.MũI=NΜe}R݋MbAi,eullYjʫٗ 퓖U){={:4]@yɴ&FnwWs\̄gw#o֓ӕ_yf~^ZTמy/49?Zm4X@Jp.mkX7 [ e{GSogִ_iY[}(w85ɬvΊ){ߏz\>AksТo{{]NYVe>ϩ8sry@;WwV4W߇٤CPysg=(\TӪ"V Tsە׺_?sTc .g{^+ܷ%=\忪ugˣֻWƬeK6y4{~ h϶\9V 0O}~\7OpH7`#{?8FR鮗۹Nþ߮JTw0O=~F)KiLUu۾yH0f:P?~zsͩ)NWRy\иu ~u|WE&+>~L%[W9;P"@3*VVקb ng?3\[,\)ry6܌~Oitƪ{׮>*Bjy}_s&Xt/=qS:kՑ.e̵~#cU,6c=_k|m[ }ߜw(] %m|[wMt哿"H q"SqPw֪z?=.+6qn+m7|sYN_uaIG~ܩʜq?tFN?ջ_{?!Tr `c*y?I0o_^{[8&3}O]lƌ7|W2ppr7z?J[_2`#yvwXQ&CLŰ7>Qe(j:$MX cxY'ksM++zFsϑї79M[6# [1V[[EZ׷[$&3 ر_/ Go~dc5ES۷ޟִiSNO~;?l'6#W6|3\K:w*i=6%M2l8 [knW/]G#O_IVkEUXsozVߑWNR{zZk}UZ2+`gi_&SOױfN() sg'{7^FR7禥nn QwxH)?hZ~{+Ar~^)ւfto_jvp+y1\UfYg~s|ԦA]k]z%M66 c;v^?:ŷ+~*J׍9.Fߗ9=>Yv3qzWcgtl>weuLjTַOos7%_l,2cUy>DgvOȕ25~J}fΟ\frbo16>Xٷ+/̎7 )ƴmdӷ~W8O[tTz/٣ew1!S7*ۛ?&ާzk[,m-EO[t~eҡXq ]Zs-Ba'g|]fh0pvܿ7YosU%w{oPH`Ė,0VVݳk;gWfOYZLqe,X3"~zK~Ӛ~v*G>sx_Z41m;`ejW_W?R=wջY]즦/~zXlS]6-N6mfݹ~v0~r^"Im|"9pќ-mުz=_w'1r2Nֺw~=? mCB-WSEcl2ojr?ﯣ-%x][_s^30Tug{~߫8u?S5 )a{ko.vnn~DWUkCنu(5d_}+k^((2oh$aU?yB=/mCūVW Nt6-u!2]ɒ6PYe]ʩv&߭uƌk֧ƬCWv^Zl;zwV4avׯ[vRK$2|{_lw3 4[]џ9ܣ'ZPz?&:oկA$$3$FXFeb|3mo~ӷyIka滍y}8Ks"$,fvmk?͝уQjzkw~K;;/ȡI\<ӼwW2/ J; n t9gUYfg8]G'7S*k/.֣H.4Ef 3.y["cf][ZSt;]'f)Ffn|}Q'{o8'KoEXt1l?/]~Vb?u]¨{۾kϹԯ{W|Ȕ] mJ,V-nҲ4|hՎ$Ŏ};涣{=EzdgV`ov4{w;S]4ս|-"FFnO¥;hcKO^c!WWv߻S(w[~ifsݕc/2M5ͷo/ 7.06/sRݿV)R_I|6rFGÿ\֭'jt0Wv]|inkG{[J[#Am'FUZoq]/zSi{׿w{\"*O.KFr:Ϗ& kr\iNGg GI{|Fl+Sz[;鮧J8lGmc;mSxCưGm9.oDźMUUM?Я;ό~ʇ/an {2{TVyi#Ppd۷~mWG{5jԪ>mɛXpL99{w}_oz(A^Rni l. }ݪ}k)+?-MU Eݕeog-z1^-P8`k$o6"⪔XpO$ZN4TT  YA2sziRMv(f~.;ݾS5gc8X|M_Pctx~'?{Nk;o1k !I̒ ǃ۔.W)I-__al`ے*ݿn^̒2b rҺ|%޿^H`oRIt>S%EMo}ݭo_Fq%bD2YG;\wi(weu*ݫӿ~cy>,{[_^ M]FAsccGF&IEmΌID^{*pJTwgf~Z~O>i7%ιڧu,6%ZO:I$6{srɡ^)&MU{V37^gW0Zƛ[ZhBe؟d+O .2佢m{۽ϖѾ.8֌[S{8 |ϊUnN /gwoMȞ^o?c'R+mokӹWLiчfjj}OkeL5?7c+O0{Ќauw{GFwҭ'Ol7ϟo1Ε֓OmllXB7_No̵Fj -5X}Ҿn7ȡI$wDEQ8Xڻ_FyN%i|[axQ,Y&?cxmV9k8[1WrՄZpZKY;YkSl{\MZ3몶ݻß/OYď² j: Cin&Sމl_.?>S;X`%4B:''h51ӣFR%a맡τ![Ufhtmfeܧǿ{WN g_˩,$ԗ2& >Ejm  ~eO?Ym%m>Zv>8f|8,-!߱]v LvbRѽ/[5/{ gkRSV~KCיYEGGwֹ%{3hKq9NX{/}߷ ҹfzut;|Ud*'=sEc8)~l{(e]9Sktf-5fKy2"1÷q各qd˷Ԫ+ג'ڟw 4iIqF~e/zɔi(Q6|y^jOuoپ'+(oq Xݑ^:S8_ڭu^-'{{]P}74j%̶[ݽ9oΉ*y;j~ww}ߥZ-'dp3^MtBVOnt޿mi6wo?? m}q~:J❹KϪэ]owӹ7ğ[ej07 Ev7!?UU'w=[>]Ifӯ4t~"9x1Mq e_-|7*WtϾ8*en"3sQQoQj ^xb*ETtv<ޯ \{uqp $JwO-,%~Q dM{Mr[k/o^k u]?3 0s:{8|H^ #[-23>r0w鿙FH'A$RF\<?^h. ߯Ț ~nzh)4f5F@'?۩yL3߀x#_^__:'n^eis.3rO?_˥&̸u~G;A$R8eo⥽j g2#U6ck,z _֓in?3B\ sBiěN3t{\luTmRyo_6 KȻiܹ _Q S_&)u_6}7V'ʲȯ tr&[[]}{dڦ̻ CT;ۛnm{&pqng-,݆[|q]eY/?- XX}F[V~GSh%0 4ɱ&TbDMʬm*QRVe96kyXOB׶ľXh?X<~Mc/rKݶwt}V,jaP<9X|żY?*PfLȷ60A"4>n$mN hJ=9W_4o|.e=vWAH.-ak}kG. Fx&;oxX׮~}_^ou>(F>/nj:߇bځ5uHbMt/6k9y?&WUUm%v=O0}ʐJvWmkg־C>!jZ'&}_3G-e$gOͪiVuKg?f97n_SV-__>&-SmO_mkmܿ4/Kk'psǩj^j&aemb ț]!IٲpU_Uc)7~xu2$Kw>Y/J_#IC{{eVY#6' z}N0_h_}b0mtӫQ$MKDĚF3FG!Y3yN:JMT8tz-nTޡAnuHeXI 0{yj)g4yp?G嗏Jx`cx/v?kn盘e1jӻ.-_Fʍk$7տ3_Y_3qoi^ctGס_UM$奺 N4gmV.?@?e߳Ō-E]_u BO6Od_n;O/;7Fiq]w!\ p*5յuFWkÞUۭn"۹#e~X7StJ:;~s> yOUj9xc%Ӽ;:js huYuLHuWد NQp-ZK ̄cc*j^e߿}}éW:2F[`+,7޿?_ɧFJiےo߫XD(ɤ+z}ڞ!1ګ1&z09IsCF{uK˻fJ+ܗϏmK_Euy\ "Wn6}w_imE?]<*٤/M_S~:rctBFicx,ヨg۫;..j9O ynVYVC$2ܧ|Q˩ҳJ;;]o 3*.X?ק??/l/'˱ysmIu.6yjWs;7N#ӾW߾"mom7*&<'^eLJ7-v-s!}FmGQt&0/˹ao¿"rk7V]_[7'm??-? mrdr[q.N:kG)gHTǂ}TU˷DF=WFn#6L k0s:n[^sI8^ nsϮ|G %! +|/ͻskN}ϳ֋N3iv^g-sI̝;d޾OZ%[o_a`R*V&w_mۧW6}$$S4;.%g25jwF08>_YVG7~LkG IʜiKg[tFo K^n,E\oo Ⱦc~6y~͙8:6ׯNiNmZ]n͟Oᔰu)߹˳]sFEԖlu[X.&hmg'RX,$JQszGz&պ}z&KV=,f头u{ߥ\j]I-ď&];Gffj*:&QWs{k[o B J巖۵p~Qxb!57]"EYΨ|ﲫ:#;I2>ݼ3hf8}zTb~}{ާqlVR)}tICTh^:֙ clkc,~w? WIigռտ9Վ+}ӵ6u +B==zgKD324<#2CJWV[]m+^䁆![" )w~y&YA_Lv3niڳw_3гrw"OI,=)s;4.RG,?{^U_ϲܒB8c?OZeqnQD+0YKZ씚~z]TIv׶^퍊);~eo3*n=.0%IʌN?]K/`W/Л`N;J:9汔z/o7 T~kD?I~P<VmxLkN;1icfރoí5&^U/;q"qם-?_vEwb_ 6s޻:ڊNJS~vt1Q@ nZߒ=gM)./GژsZiooo^aʦU 7vU6gFM(r@8$??1qTtWu 8c_0m|և ӋMo鰏'_VM[ߩ HYew|ۊbq=_V57ʝFzm_ÚI+_ rN;JWߕӽz1Wvo9:i7iVO9M_{C /נ8qgG$uO@1rI U3j5WݛI]0;W nzK߹⟽F3ir6- *.Nn?$]x%n77OJ EbˏVG߹G _Վ23Z|WqO̓pr3GjenBi+IO"o6X' 88O^N ;+ҴMZ_%&U+~n>\whӍo^am'>[nF![o2px/W=%67oDTbJ?*,{i-oנX#SЎ^_ӌ'+h e cF@lwq'k~w..{;}ҥ {wBRN/}zEj)e}jЌ_>O ^PqOo}'f̃nWp' wȯ>g᫩Ek{}ut>g#7)Ÿz,n ~>NvjMu}7}EEr! ̪5%g=[z=J(I\7d`q_)%/PuQyg?3s/j;խrڪ_JoOG{~'˓r7޴ܒ{??,f]wImUZWD1>r:6N9z{ӳU3WO:FFt һH RFǧJ͠"{W`n}BM[mmo[@99?)܁bʠ$qM,r͸b6I(2ihI,mɷ,F;z&ms[?Y?" f=?ȭ9#~U}WǤlÞ s?΢j?Ύi+ȵmm31fW<%GR+?k[5&2фH#k>DO%L)u%S ^9ܞfIj_PLm~~5m\JarI䜪`iz}130H"D.pOS)[Ay~_4Ҳ=/߯4m.Tz~_>RxF ۟8JWkwwq쿨{]m9'ks#&5(k>Gb)Zݮ~\|WϺBs~mMArN{wn}!gߺtwuq_Sm_rvqg}ГV[ԥSKio/#% m_oGtM~WF_npXjekkQM>[wݨ]rr/ON-=n.W4{4-'~O{7+mŶƓ]wY08\(D+㶟-^I%T#ng\=3 \6|%Tdއ)>!F،b@둅oIR*^*$03mrVf~TbH$=t>[R^]cU]g_Ԗ +n?*]>sJ)F]/RmgOli_rQOeB0rrp{R 6<.Km%O9^?IW-qa~' mM#"`NO+Ϯ{sӔyӜg%췰@;px?KƱ;}vi dde>mA.׾Gp3(8;~?1>ivuw;x'.J#hqPU0ēoH{oLMF7ȁÅ$ߝo[G{ݹ.dF6erH?{?sѾ׮Rw/kNݜH?ӷj٧7Qrv}}=9GKi׮UQ} pŀzzu+w:*55{ӽ m07۟]?9U.]do?ĂAtF?J;߰VV7 ۘ``}ߺ?N?Ғ?[#c\Sk8JI'|5܁pvwg J˛doCSp/qYd7_M=[^P 9\cߎʶO9Ud~c:c!15M=Uw^ob{S{׃N\vS__]aᏛ~Uk [G:e^sE i O+g>V`=yiߩx{5avѝBMŽR/.2̪mݹ檢MZo{%9Uuko ~kuH7Q(*͵W;y^v?&U%(>Vty+}77fm8]D-tSG"|~k,=_[[۱]*j(^}}z=[o}k\_mRI}V~O3oHQ6'˟㯝^i[{}rBT[+>;y%!f( FT;Yo_ c+)Z^twЄame}n}EOA2Kq%$U<7F[6ؿd=ڱ+x^^΄jMʢ Oo+k{nÉ:xꐒbײ}tEk&>fYiNPU߹>e󯱩]:wj+뮤!;˯w9hҗ5]ZΛ{[4 s0V6bI&}y~~7yR=mש5Ks}zD~>o1muVM}7/rkyk߭nvܒ}wϗs"xWτ|tMe{\\׷ $*iΎ>~>kƖ>Sn]W^ޟ8l%:qBvm_3߮4l8P7^(ˮ}z.U<bv[ru2ٓt]yW-9\6/T}mv yrW~RFR/Zr>NmEy̲Ƭ>Uw}߽|V3/"tV#Ʋ~/CE)9mC0a}N~]get~W`S=j䜕f7(Wo~yYv*#U8n;VڷÙjUwߪK}OI#!lt>JW~gN}Ͽ'EVC TR7Swc v샜=i9Ӕ-zGfDUC .A^7Q_UfMj{ #','Mտӌ_?)lrJG$wJW%hI|^K.Ud-1sZG̘շk߯ɣf>o_TJ/^e1HeV]Z]W*ZZoג hw7?ڒӽͣ9/D3<(8mLOƶV[_Qz=6Q{Ar6XٸrxnQgQ(Kuk7Hb%_T*q7mvEfr_n~sU>e߮<{>љv63mۿ>Õ(F7۳}~e$FRH@Sa?nKMn6BҼl az@] kK2/̻{nMo=_QIտ3W}G AGSi*ITr;?Qwl ?^ޙ];=_YK_>D86[b};VwSJn';0 դ qoo}ޅYNpv}W.VUmm\mΚ^dqNVQ?{VTRn # Pq e gT1m'uwT/'?6>J䳺M<^\e-|ڬ]D[(\<ަi|͹SW~j2yܥI;S.{{G_¥ wo!_s}GVm:hq gm[m܌6H}:q J+i~99Ϲ @`4چa"Gw2_ҵ߿sߓz'1SNrmGՖE:5otkgjZcBY#[6pww+y*UtӖkCe4!SQv)^g[S!b4S1X.^6Fcwry\ww߾3W_ E[j_jC4i.,Q7|_JK^FeG`X6Q?Mw|5M>=oTn!\O77a&Dpѭ]zv/4ceSEh%w6n/ll-`,KMޔE1Uf;~8_̋bW*T_~j׺]~5w[N[yocOɘ=]X.yr|*Qv w\]ژpxs4%u̚OyK48koC N+gkE|+xV3܋5 {;py~tw#} m>z9Gno 5F~z 6:iM6-m[۾e=ܳm]5߀rwLkxݮߪsaYZWb#]>~n 'cͭׯs_C}pp&kkCCi ulQ#dD˻#:?'K-s5m^=v.cIbA-uYeWe%Myن?s aI x=Z'BRKJ}罺fkBƬҫn#X?g(N9#}S4=_*)5,{spm+9[Qs>I~o~9/=BM?nH[}u|$Ob"|O3LIK^tiF>2GL]F2Oh*7JNwNϮ9c''u}y_O2}aJUWfިܟ3=Fݝ𓮮U׫ޟyiڮoaN@Ly!ۻr-|?9c}Nj+'i>V۝?36|V5$]{v=(B2c쬡G۷u1MSq.?1Yg_|뷚-ų69(AYGW:+LLIUƳ;˹_*9G^tnJķδ?Mvs*J ??׸?Z脤o]t06M}=L-S^!hmǝUe>=Ƭ4߳~͍Z9J7Vz|撶w~yNmLlj0'Վ?݈|~$&||myKzG( Ozpuבf%/ZWI`Ѽ'W ҩtO!Uo_w]V3uc. jf-;_޽J8yI$iɮovKe=n'qnAnJ1I;zbt=VܤPW:ey}ogzq?=1I/:7s\j~L耬| }W}ŷʖ~/tyVgM\lp/έYb+Yۧ˶tS|˝Aq2ͯQFIL}m2MuE)-d?2dha pG?~~&my$W{'inu*Fݹow7o񪪖kk6v6 H8(y+dG<ꅊ(f-9o~oD.%K&\_H,߮b" R:TuVuBlucBMwydX4p«7;AˌZĺceuq݇I+E[鶫֧O`ӭQ#]C]ї5G/?RfZ^MDo^㢝W,1~wZ~}.gBrRH ';e g֮yqvm_=T+ݨ䝓#Xs3noàjT5ݚ1j~۲B2Y!~fݻAV\3ͭNnV3J[,a({yO|$o :]7p][_}Z\_v(_|ό9? i璘+j>KFgq{:j2pq}ّ,lte(rucU}Fߚ¯*z-o/V־Zg'm|Q|F \W%b/$6K8aU&te/|O#Φڗ_[rK~<|(RVKw~[/vv~='fԾaƽjpeyc|-Z8䷹9UhɡeJtT;[~-̝5Rיkl^ߢin=rFg2LnVFUO.9]:$?R 4ysNbId4s3*,gc =u ,$u;cNEnI-Q3OǿCß_ @l7-uEѴF+>]Ѣ_VS>ew?o,/5v.9M}^aF Kk7G?+ E1r`ɯ]ztngJ _?S DD)JorrIܴTAHfQz_>kl?NDKCw9'oB5T_7$p8۟Cm}? sdw6^ Оq&I}4g_c8cԌ翷Ͻsy YX-/P(O@v _kk6wqw^27RrR'ߛ|m$3=.ޫAӼ>au!MZq]iY~]˺ti:ZϹ Tջ?}zC~*x`uo[ [~uU;wW ~"Fv#co}kɫ尿ߥƢ徚iw9=I_k7:DgjC#}ӹ[vv۸\߯]u;^MKCo 4~}NZkɟ6i|WjDI%9ƥGV_3!F>g͕Ɋ%GQ;_n>!3>1fݭV`6 V}jk&֟֨jʲI=Zc7>x7h XnoA}[X̛7׃fQp3w$>m/]X9R8Y=oGGtk]8Pm@l/aUn+jIyJ5;I)r۽[jzÜ3Rmw}yI]vx(-ן_\Z߿ $,sqϽAnkWx}A=bQqz2&;OOנ2f\AuzzkybJ*'-`u~9.[k~cJ7y ϡ=j݂WZ;"Ue w;%kiLH7T'~XtɬBD 1wn6p`clU?-ڱNqZ;N><ݦHI ~j7W nSL۹6f_\ez$DU'PtC^aZ5}ܴw\wkJ*L"w̿]>~G{zNik<>WYU+(%&l~iYW5/5i.5sxU]ۙ~˚&9*E$f#猲_c칚3S4# v~%O?ڏC{_C3|5UfM [{M?Rn,#e6Ym"?0&M)y_8-Yb#]>l;mi& +獳?.>o262?{bHBכ}Y>.OOWZ߭4%H(C}m5MRTw}m%x0S6s޺!*ӌip HoS^V%ۙ~_t:kihzK-ʈY7&ѿϗkks2\Υ j{Z;v~x΁1CgqY-F8vgw{~KO0)~|޿wNg*5'S^|+ ,Wʙzz(_G/3?fTS=KĖEfd^~ϵvkh)A+}~1mͿ_Ɠ]iv"ol*T?{G$5j=]:v)kְ Sg,X/^r\{^k׷Y.rX.ۿ m۳Q:n.~fTZO_=*{eIg2 Wgs*JRR{{Yt)̳m$J*w턔ﭿ'ڿG~/\ԥѣ[gBۛq;¼vi"u'/?CB5*F]&s? ~7Vuo-Ytےꋨ|Ro, ziwgχyc~kxRɵmtE; mƛ׻OS_W>&O ZVKI#6k#hZHk/y~#Ru :|׫g|ٞ&W,[bU 4Z:Z]{/宠IbHд գܿ3*6ڜy_sizJn/& p2sTvםuy6c,ݭtۻ8-[ t˗,~it_.XShw{oK9H$g*rra%g>iw\} ]>U)]sΝ)S/ *03K=vQoX4;p;IUO[+y[%L<0 +ҴR[ZRmoV,S}7}׿Lc}vMi_n9۩$ܟhڊZz_3߽2M\d7Y&Ӻ;RO?1lKyS;bmܿ˚^]4FW3g ܹpF&ՎYI'HŎ7e?] }~( lc˅K? lVjom?)dL)rQMK{Jץ27;H(Fen=\_JՒ{vcޜ ߯_dWRX${޿zrObUg+hCE&3tj>cT?:k_~A+g$nb{im&?dܓ,L[~o|w6WOdWoI9>z>*2M4eKFrG'?1Q+)6,c!'plдw:8:nҷ{ݰڇ|ߗ^ko󽔹m׫9|ǐG?~?ѤW,~V&.sq޴ktf ݿ=Eٗ qu~<˺T/t)݃VQ}æb+Qmן~E.Wܓ,"9]*$3?i9^F4eou7`͑#93~3;jЊ˳ qv{jz8o>P?)9 _M(.[w׿O1I #_Zթ+oqG,z1*2A9߻}϶4֤^dԏۈC/׮58evҺ02:|!̿ϭRs:oF Vd/ɷY=x>z?_YLHd9'`ꚋZtOaͽ}}I\0ԶA;yͷw?'5jI9N4~ON$yX9@3w|t5VSZu~w@?60\락w&>Gя4uuh"J{~jh~ŬJ0s]ZNiY/hv%Fyr9+H)[Hr`8+oIr[i+( n>&dNd's ~m}{5W6O qq/|ʉե[m2SVW a19%Yn[RWtK_; HYZB|Nt?~"|~>Ԗ5U'#wzOZN\6/Y4m;۪7/<(Õi?:]޻xOǷe}/n4:ݝ=s[<s-W_/5cУqz}gОЙ.Bˇ |ߏ5pz> RZ릿~Wmɝ1J=k1z~U7=Zu>)H*?0{kŽ6?M{oiW=oA8|"g߯|ΑS/x&Ndrk"ی[&rxæ>cw\̑dz|+Vɔ{OV=;qA&_y'q{ g]vXHA[]WO˜{s֥٢Fq:({0y7=SC|}z_}ɑc09'C[FM,8 O=G԰͐߇'$5T]<݈ y1*er."*;O>կb״Mv1py^i?r_2Sid ?k"^֛i$Qa~Vso;WI~vߧ\`¿ [D;*d%l|*34}}Ʊ s ÌEUhwko+-)`!L_~ml9eٖR͐==j9erJGss(ٜnr>U<|o1rhիۯoG"TU9nN9^+ko]ݿy>o/7:v*+96g5ԯ+-njt{>Gɭ?8BB6a=NlV5VbŹK>_DF*S^_1DTi_Wm9WMOޟRFC9w{v52V{)$/V,J*7yz ߧXGmvc rZ%?'y]gjϞ^ %wujϒL%sr z~bb.㜕͵s5|DMֽ:ّT1޾r. mo䍕kv?|TnKױ2`Rq'O-)Ο"=;nWk{Fc,ޥiE7ׯU;zmegCɞAU oykjmsMEk[v>y\ :p28;uZwBϗbN  qb[Y5]zwGct$$}ީQjMGKAS i\r>oM1R|v}:QI,Y{&)7~tT\Y@NZn˽7 GQ0'͟|>V{/IWЁrcl=A^>cc7~yS<`]=˧)I{o}HȻտ۟Kn׭Z`d}K`Hm7~ ӯʾtz~uO$ح;(#Tq?W)[ފ^s:[ $#31rz6^{?[cأ$w۽^?J9~PK/_7$ _矯I$߽.;KN>A\;~6E/>)Χjv4-TtlmrFOt8%:B{KK rT VTvR~,v߼d !v53iϸUM;kn7֚̈́ɧ%ӺS*̭wc7$ࠥ ku,YxR&V*ӱh\SlO^i|e_? WH.-~/uurNA$G m?%}#$򵰳9t{8l|Ԧ>XkGfYN~+O,wP/[TE$+HMgn<[~͟//դޗ[>Wba%[4:<⳵M{AFD3nm~O[c諽R[۾Nj^ mBVX]s'qg2,G".+M#zލjq?sz婎IG^;=WϩZ0\?5t 1gbxV52ffʒٿo,iQI|_6uһ鿫#ү:J̖lj$|&'LN~ ~_+^j-6G'?0O~֘)ܽrJ'@67 mjC "#qdvU˻?SM5M%-鯧_"ttMII^[=߱j%pKc.ݮJӭzfS*q;攣p^e"1$!w) kt}?ΩUoklB,8=irv.U7K瑶ӿgJO>{7 I!s;)>{6Tׯm>{x%߼~{ .ӳkGkկIapm =#6y߲ +K^]?5q\V1ߝo;[ϧĺv.Hs?w;g޾*ӣ^Wmv8_w1Ș;;|w׌81jomw$kT0?ݟ֛J_掗$*) `FU_3R徿sMۧɜĶ \ ?^t0Tv;#I$f ߼TorTպ~v)O٭?$gy/ݛoPOv5X[wWFh~eֵJ2|̫ό3yH7 |ۿڒyי4ߖO%̑lE8WSZJWޝ:rڇO!;I .1y \ןJQWpVmn`#lv_7?B|yzNXEr55n^F)*'[wֺEv;Io:yi cwXݫe(.T&=㑒@dz|vRr{i׿*s~ϖЦJn$&ϖnֲy[{,ݒy?&E"eb0˒Қ5[߷r#1f;ʭB+fuj6# ճUȼZF_?RI];}=^D"򬟻Vf錢m^8ueV s4~-XlкK!ݷj/Hbk)g_ ([m|zeFC xN8/+Е^K^38/m{`Fv=B[Wj7/W!tPH0 g?{mمiJ17[ziCy.sumM9Zi+ZȐ,9b2WݟS>%ov:׿nʫF ~ުqw 9ۚw׷1دT?~E5sssIvb2 24p>\3v|zWof'u/AI temݸP'Q&o[{|#g۵H[ן|*EԽuҬ3KC&4!RaUٷoJ4# ^t+__ZčP+bU ly* N ;~_%S~|(a8v^V>֝NC*K:U?ww?=Z}Vwe|M}}c^ϡꪯq?ݻt6''d}uϥFܳ׷/OML]n^"6#c}c_/z۷dGdoի*۽kc+:koҦ(j2Eo2\Gq, p?˿S w^EUy>^XⱶK+iFڭ {I4 bεI%mNTr4ھ~ZkZ/fS[ukve Ȫw)MЯ'Kr_Ϳ]5cTj)|6~߮34 jTX6j[yZ<#2>JmFR^@ŦxS崓I?bHA"e(fDVm}r^Ӓ[LJRzw^կ14} N֭/'Ԓ=JkNUn!In#P"md8|8g/u{~GD'6x{DcT"J_.Oh}O7c}~v8g);5_FDXQ.]Se7q[ai%]/q^us.{t~2%WVW{ [iieWQdm웗Yza5wtѤe7ͷk; -o'Y]'f'";얲x nR?Ozhחq3^n{T. w"Yr:U*Kk$Zmkwunkۭx(# f ~do|<Ѷyغ믞=ȮdY [*7U/Z9*MkgYZs!}-Zk˙-g8I "2ov_OkR\.۫e=oa:tu ;p _^ wJMZz.S?k8ۥ*v눞%O.#m_k6>|ǚ(ĺ[ut˵ c$PLuc ̛tNӶ߉߷9;/Rͦң"|?X+*'3kN]i Oݓy?\oWl]]4&h-l<{E tC?ew~Ɔa妟5_?C4˹-=Ԍm:}(?"ac&5ϱNm]ׯK_a w*6v__z#ES{v~6vŶӑwm~ U%IP÷N;Ώ+3IjQcϖA"_}jF:^f3JO?*o:?i4ھי+)sv?GDάmݥG*#[7eھb}Nxd)t}3r좵dWm~Mm @RDYZbYcf۷>_p¤U-\l+9&JޫZuoэgk7=wcu *.m+kcuJR\_䵶~VtHnz0wi"!6hf1ڦi[CR,PIrc6a1Ƭwgqa7U9~m]<_Cʰ18n_{-;%OP]Yl4& aFki+miq2٤O}=a%y㾏_w^Ϣ;5q=Ǟq{;݀R7=^~CV6Y~Kh6MrJCK/eW{3m9}+”9$7|OJNI(۞־پufڃ Uݿx NZm^={Þ#^ к2I*+wRGHUJ¦&)2a+۝CEm7ݾCXg L}{_}'([[uݧae0~LeZ/{QԜ9 z׹vx)Vwտ=MJhGJooteͻ|#Sosg n֊uGFCҏ<~:\,uI~č+mi3Y0ty"3wm_8l AQh5~{qh!ӵ+v$v?ʊB*,O?&z 9Wvwۻ:؜$Fq7]&<6Z\W8vLMpʰAY,#E6Y^I!DwwȹgV)^'?M=EQ/ehܲUs ?݋[{u;>k}6Xe_.8Vi#Mx߮׎ݽ[;{˧ES=GeK]4/P%h,+fVj~y{J"hIk=nnQ7(wo]ֺۿo5ߏ^ #uԼ[=A% /.v?gKۋxehPpkHuvcU'M9KDS_ֿ"xOx R;vHg}.;k5gYV>W挤2wMߧs,"Nedw~+ 1V玵]{NfD3_V [/[r!I_+Q̰J+5z |P(li:]hZ]B5dKgIa; uq75j=gOpfYZԡ ԓoE~_?xz_i:!%f.d67Ά72  Z~M_WB8_ch_'ƽUl~ፔhV'JGO+5w|ЭŪI;YΓ3<{+ۢCq2Ω˝_G'j:%${6-gw7.S~ދhrEﯭ΀-*YPw~W}sVM} Jp[/ҭE{/[2WI37Vִk}{Of.lך;=;P,6r1?\V2J鿙X[Mv걫;|?*,B[6z6zyVeIľZϽe)&^^JIW__s|4M >_ŕ7Ȼdmuܛ0_{wb,e5kGmNP;2_}U$>u-"[khUԥ ̫',2Z eMund%;4~ԡr@FoI_ *sQ_ozX YkM-vk>f_mR>+ϩ.Xe%N zk{u|Xx i5 g~ɡ%֭pyMaƴa+î>s]Ƣw{~GxQk>jö%tDpG%Ƒnx$ʼn+[_޻)J+4wMk2KxvڵRiZd;[c?;Y>y+q-mOv%>fwЯo{ }v'{o.C,3nkvX[6SM*_ЪVu;o.SAȷ0ڳ[u䴑|^4ot߭LEzpgxg_c xF-le>uk ,]^[֠.6fB$ShpZql ՜/$ӊ;\)uiaIi$o۟xN6֜_kz}NUx__Oq{ftmmnc[8ʿ/&EAUO;nWQ}R.E_[n)kWyZ+v3q]k2noѡ.e׵o۷cѬ7NU,6ryok8wMut V}|{쟃U#YӴ? ڦu/T*B}_ͥ\a_ٯx z%Ʊ*6ֻ_3oY>I}C\zo,ڲ sf>ԧt~~_טrFO$A-'&Ϲ$/נKcf }xU|&2it G?5u: qަ~_i߯?stėwC_hku%^c  q=5N.?Lm^1",yƱm-&uq;Rq7LwLvLqS?wgT{I['gsxV18}{ߒms,.aY6 ݵyk:To ?gͺ>xpɪCdɓ- wXAʓխ?[s-ǃJxpmkkJ3^5-~=B|{J/IiY$K$8o&Of;i143' ʲd{sL fpn~qi5H);+^%QovGw._Moj~"jLYZ-\^Y$:Ś>Ǐ˼4GЕ{^E mZ-)7e|5 5Su]~;q1nړG"E Մq{if.8OoF6"NNW+>}WG[ܾ7|F.+Q4^[Ccu6ݯ&}ƒHMWSNS8~=f4 x[WX#TahD̻ ~LGb?`H%Mj߯o_jT+ 3_cM+zF+c!9-Ү[d8m%&ϡhʤ$/|L+U37_mn|+Xx}[I׵>uftc+|>O;\aVw5c E7+swn}Uo_i? e񭗉'%ψ[ufX͎f!UtLФmf;:QJ3N]+TcC;(N[鳇y+ :sU5WfEwz/[|?m4o9#Vܐϟz"H_ٝL+Fհ4R>n9 2ѕZg{Z rYY^_#2Ul)nv>5m-b^># Ƣoy[W}զH=NH ̗wIU7Vߵ>O³yʺnJ8ㆥBJZݛ4ύ_C*,>Udf\]UtwZos|)//7g,4HPI7-{n=FL4/YjZ)/麒KVϓaEoiY֕ [ժEvtz܊.w別:)-kŴs?q 23I#?sXA++/cyn,Ab}m;~UJzsWcf%Krc8շnS*ow da+,_9)&oƷy|ewK2S* sYNww_R3(9NA,)ݗp;@-GUt5KI8\Tc.iE6| =r[5,jwm,?'*ծ_O^:IҪ)Zҋ}wȺb+㾍㌱[w~Vdms6Wevkc\-j>KWܻ_}O0_BxxaqTmVϫi\xPWd6K}֭J4K{ov}vVw>;;VU0J?m;_w'_f-J2B*/*ە~f_GүFN|VҥۓousԾx+#Σ5K߹#XS}|f+gFpu^磗f .4qsThh"[6ȫpƩ_׳FЂZ%[e_VRO[E"=q?/ːJ_[6_ԧ5e?"~%Z0Lr4,dT|e uQ=~ߩ4R*d+ SSeO`kZ/!ewwJv00Ioy?y9ԚS?k+޿k-οl-`3Igwvnx)(97ѫGѦdvO=H}2h^NK7E ǔyȭg/l$O cKyB0MŶoQS5--};V `PF6 o?̒m?ęwR,"qOpg<:rQQIB[k=}}˜Tq?2k?6ĪW}Ӵ =nzʤzlt`k6flD;sǕW^]:ҿ=E萅'$yzɶdj}-[Eڣ yc?ɵ&mԵpm8wvrW{ȷ 9nc/|5Ol4 /$w_Ws_MeBCQ1( 껏R?.Z ϯq 9ʣn~}?ʔG"+|ryrzOv]l*27}gnh{6[zgp(w22_ٷֹ/ΎIrYϽwfP 8fo?qg9]}UƁ;ݻOk-%.BT _o@9b?¿;~ZKTZK×i}uko}KjYxY4 Go[r]C?OҍZ?9[Pj׾?Q( r3v~ʔa}RUuoԯ"Aߞ>S?Qkm[>N||b,#,JÃZY-V_Q`m@oZ #+w"_K v?[\ݬV*J*F!7~lx-۽h߷eR3!ۑo<8?֫ 化rۈl8Z-rDV6Ri#Y<orqOZ'm|do+B;so\R{zZ w1bqak+0 _{ⷌ[9R^ClIvu=J)8J}W$;VwRk??B]wa=wN;?M7$eK$asI*7qk4h榚oẅQG;rql֓M{FLܿ.}j){>YYӾy66m鸯Q~մ:SF$u QXrLr FT\q~'~TTcm{Ƽv(AC3|?kO9cKOyzWk\}OӔyTc{KN\ h6ߔgŤ3z7M]r0I'<!oLVb61 z~5_[nE(JW]uH+|Qo|ķ{5W;y9%㫿[t_n?f<?!?67/O叭Jgk6]/nȉ0wɭ{eʖ-vnYz~I[~(̰pr[[WMY8_PW²RqJ0mmp9#Tj}Dʏ2ߏ@,wnz{osT揯k۶NP1[n<jKcsK˽Z|]zսǜrx5N)t{f1+qW _I@Ī Ͻ{O/ē30*Ii.nfp6J'{$w^ՔH^I}ާw5inKԹaft0+ye(6w違sq)VHq`9)rY]n:^N-Mùv8N=2O#Q6լ5_RFO q'5c}^ߞbQTϿYr]+HFÂ@V.:IvW:(Z*nf~Aat9_ֽ./&RZP%q6$Ogyc3+ ^xa[|.͏:'gyT跭ejխ=YYʻ|c_O^eUٽ:yѦ~oskkwvLo?/͐n>ߙȦݗ<_tЏoިԧ=8!qz <Ԑzpt9ow<]~U|j|s7jT4_=_7u_?x8mņ kp93+/G_w2SCɤa.x۸{_WF I֏eckM>|Ndv,aNyہµs^y9I{ɪOgԋ9k?99JwpǨao{yR:'N {w̝Uv/ͳI"K?SY8I^=V6;gonݕ,ߏԥwcZu)5kۿ[~b2rۓjĕov?'_rM;6O=Fަ ߯IRz[Ǎ.TߜwhmY0U ~Lx=k'.|/a,'̺m*Bk׽j_-K%"oC|۱ZJZBHʀ 𭁟} nQ?V1eeRm9}}V8vd@f]7 w&̡V3WeWbSl[{ %~^ΰwaju{O01(QHOMl7:qv>=YS;rƥK{;]$̿" \׿<ԨY7dKkuz909tu=׽ή|%$/zQN=_~%rZō1|z;_M0iWHB?{_a5g}~oQ꿫?")`mUm iiN*.  A8A(Vkϕ9{ $<ᱻYTw^~{:u}ʲ W0ozY4秫}ɩ5SXovEbk~BIa+Ş?KB2' 8*p*Zo>k[Gnb$su^q^K$+pʟgvc}z9}'9U] jJM߾|üIG4/h[ɓ3Ls*ȸi?NR>hOOѶsC R*J-i#iKmn"<y*I۾d;3ZP4{y^]Qoܾܭ7mτ5M,dė~wFmm?oȟś\~)Vu8sI|[\]JSRtL[H~ %oE;nOg_GRZ;jωBRVzw^{]Ԋ]'g-5-⑥Q.m|ʚOG8pdg~kx>i>5oyZhzݤrm^u+YO64l?hu^F)Soekעzu^O?vXe:]̻<ͭ#3H"4mՊJa]%{IӯhS<}{|7e_.D9~et:tK}|L*|מ̃·Z6}G^1[=[~cMWwY%ϭ:jяQo[zl?Vv̚KA{H߹[lϿgGfua&գy-{y/SeEIUC/ ^:˳[9+׫ק\ռ#FuMvK{y.Rrf1G]+chiQ`t YW{c~syNtޖh̒ӭය67H~Le,{nߏqΛ|!k6XP3a[U)ƴ=~դv{Ú"> Ҏn $ Rmز2{~S- }_m~>ѽ]\wӿrMs_j/eK[]oqM+羽itߺs;?Et+4+)uX&6ۅ6I|Sl:xWowצ=(U_ O=n]-TR. v]SsFgoץ ҧpbrq$]^QNױZ Yv=ҝ:|_kA1Q/ vcoGy2Io{}T Nܩ ۃ[sZ.{kJMu؁flY.[՛~UB"~'Z)5uY/-}?Tuvfq~{3(¦z7dH@h\*`OBך܂XX|7rikMmoO[uE`Ks: 42PY6vws34[_z|J8f'Wt҄b-~(;Xwz|MHI;k;cCq9ns-5vgBoOǵUGuҝSo U[2n;Uuc/ ӽe+kuw{iU [۫שX(!wq뚴܏vk9p@z֩^[DTnV{_^~dSݭlݱf5U߱ZVwZ,AL0G={V_p}[O  3smstE0׽pI*Π2[wG̿5O7+~lf;I7ʛN0]˻|ϥ2k{mul<[6|ʻYz⫝:\TI~؁' s0V망5m{ n %F'.pooSQyyw4/YQHPdw\o=ʌ}mÑUU,rx;.ʷcLjTp*p89_8nB~C` qǟbV`Bn]w|g o֧RuoԏЪͿ{(]ׯ~|_5qo5id]#I,$mVl|s5M/k}x#GO[wEhmkmߩެ{0?[\ܼ.YM$M} w_>= Fܪ3m}}1jdլ5h0/f|s?{oՏTcM|}}J'<;~wkz];āk8l̤n3%~nBŷdߛqG[~Oi[im>zCFJw埕S'to EH{[]RQ.6R9}_7pY>_I,#ߢy5(Xsg1sx^eg~MԠ\jpG'-+mvQ%gw1K_6f.fgx6\|7))59e]'O2[;QM7-_w=kE5oyS[;?u߹MN ywJ}X˖m*wϯ_+>]d-$ak(PۿOg^ҍ^%2ͱ9 oߘj%}nw^3()6[y4'֖ $7"7m&%sT8J/tӹQ;I};=COFmjLEFr:2>v=xpz}}?J8^/dBcah@14Q^Mmo5sƳ,.W˽ΉϟYS 䟗e#tiխfŗzxEr) JqW߯:S溝PugV.^;62Y7jr&-5xf܌0u6V|]I{EN1\zw=>4kGHbЬV?̓gEj0:i~*֊_d]I|rRK ,=ރi45B4;ny~qq^OGGiSùΧ%I'o1n-|:nƶ8&hC+Fn_Cӝ44*+Esst9[O'S˧~ש\hZ5m>[ka#}QYUD@B-jCȗWw'_xmtٌr^[ZDcݶ߹Y:luӅ5o;_/˝sߗ}#2wi(a@~̱V{_S][h|}ʟdKK-푀U݇:t[^"4'}NoQzs_jwZJ8i-*"|;)QԚs~OˣgEigV$j}QmVݭy?~Rp>qߟ֟?Ix=9yWdmo.% V3|{u&_{z?کͫ,|G;-&$k)a.[x *v,ݜԷ:8(іI۹n^'2H??=v18R#]jTHn;!Mʉ>]ۤ];/s~YEſ7_yzm;7 ۹mŎs]oIs/z_C˝$[o߯^޽cQӯVVռv+=<*wf]#M:w߹ai¤~__PGmBߤGqh2#l -M94mW"G[6vok% w±y.c:/㲽x'oE{h^4\I;c ha*4%ͳZ+IZݭgԉg?~(c"e8`ǏjF ].Ӻ~'g|/wC5֡woZ[6f7 IOȘׯSa{{=4Z;nM;G]3nh-oHtߓߟަ{u4'r]_`ִ(.)%|s w_qZ²׷qJNV=j— ]H#?+2:U]TqO:d*hEڤ/+:8pcd4Ô-庒Sc0G˷t~ߛӊZZy{yC$&euVro|%3JI螞El+#1J3;meYEo?](ɮzO7O];/%y=h}kВii+lF*`ֺ]:](U+(BۻkҧJֿH.V ۢ{حb9wǷ^kNU_nVo&ڐnn&dVhݲ?{6EX$ߪJ!B#z&b_rmg嗯(Gle9Aߑ'޺b eB>.Nkr3^}xz x<yi=ve?.jg*j*QmY6U[ij}_1ɯ;S -ޝ1~mXh~Th6WүF]ߵV`ea]Z_-u{6kO+>1"ۙqy䅓؏?3ܯeb\aV:vNy܌ejxJm|䷞s4};Þ5MzZfŔPZ}pW|~g~߽l`({)zܖyS䱕qytR.WoW#ڤϨ^B[T2Y&՘}})8_z᱘UF}wS-gH1.#.vQ~D_UFQWE߹Nmw}j;,?B7jߩqm#͸oݾmRڏknfƄ.9ҷM6zлEc m1R: &ߟ}k7ZtזeP!hc ;vzy{7k\gEgyyox 8^.mEgro]vw3DO ԮOtS~[>?O{~w#MCOtxOZ{\j7a`z6M}ߟ<6{Xm*-?y[}n}O paUV_ z]+]}O"䓎4_jӯ8ݵ濗{M|~\ li#N3}Y#KY74"H/]㸅ƍZr!IK]-}7{#x)c\i8ow~9o)b/zfj9lm.KUnon|H[{8n~+7ԡ*8YJU_^V;uף:xPEϓMk/2j ^qqI//\-Ǎu-֛-G=CqervGiɵx4ͱݫ5)4wzn9+\ FjeyuWKFo'/j?+R-<#? 躇`a]C`˾֦Mk)ayG3:jؚRIƝUuO}:F0Y6Z6׵_ wG.|L_ w* jmcWb[Y˷iΙ}=o{113rW_3,n\xkWV_Å?e4!ÿ|{wxH?̷Zlmhe ͵#_YLw?l~VaU!qG p"ori=Ϥd/+ƟaiyWVl'O K;}OTH|7]͸q$1ux\aZ\u9pcZ>~WxSkx|Tqx#?+j+jM嬗_kn}ֹho->7LCʪB1W|4cӫFIGVQޖX~|[>x"o <)gn5ɬrmJm>=jxm%.X4iJbv略dyUxjبϒ kկn߄3o{O,Юdvh5~]k[ºp۽ɥ=+oA}i~BY7Qя)IBm[u}gßfA~%s:/ Dڮ5;ռ?4Ueɰ->g[.hkY{:}:G85JN^ֺ+|V-|A/ 8M6~[4U/\\i3:B>{9_muM.;9-4anm [#pG{KC ];}G?h*W>j^?y/n[k]5u7/}\_}ɽ~yBMTu[s ? o_ HwiZơ% ȉNR\ݴFJu<'~5lf{@t;9ݺLiW[aԶ"y>u'JY_{.W |^=`ҴoZq FMy4e$mkhmhlB$ĬtgU NINh ZÚMևuZxh@wW0o6IûY<|$+k8Ҕk*Vg*;7w~nh죝m0 5;w/ 72rwo|ލГQ`T$̊2o^jc 65zJ,&6BT%| }MV6]^hǹL*Դ,$Enrʽ-w=L<.mZ뿟o3mFe!% v3ןR=NN(Y$y.*wGo?nj_uЛwש,aEc=yϾ3*k[,z s״ t|p8}?Z{0VO)WDn0Cw|[~O7k6QA;&[|"Z?InM_s>&x[DPK{i&b7EV;:}PTஹw>O7=mt՟.-g^ƻ";UF3 w,޿bӭG;/}<8xW2x*ΧY[K?edw,ĺTkuF-_2Cy}JW&Iy:ޱۻױ8xԃm?~膋*[] nId9U]NU_'+iN}o=VK>qj_)xPmfx?œA윃Y}RVW$7[?r?<,#T?['_k =D?kˎY| '{GD&ǮMKۻ{*j.kiݡXO' t崾kGOo&heI$2I"o/pP|]+Ӝc}[Cgj m[[X۬k|~m|ѿ:q~:QtKQOmؼKp7}ݚi3m]wވҪ2Q~ڿi;4öG+o'%ޏuf,lDEE7f_Ԝq攚>mOr6evնս3/˧(")bŊ̑q'wONiS N-s-$~kĴ.Z9ofKmwnŠ0A G(#V8|RQI/ve;v7 q|U~ouv˄ZsI.k]]>~ (? |6@Ԯ6&wa#mkɱƻVOG򱕕,=Z|e;ujSUGI7_[cc?i~l`ѯAs r_<{fo]|,Cg'|FF=t{~罉iގ_k7-}JmJ(KnW+nyf~wMi߿t% ֿsՎC-nRPoonF_騽;id-GT?U-2M bNO8cVڒz@39b1I;"8`»ORr/&3(? ۔=b4]ǟ4ܛ1];u7̋sQ7?dO;9~fsq~Z&q76W}?]^gT#-;WjzA!>Pڅ]GB]r~՝%=. [QSqʰ\>^xTucGѭLEQZNJ3*>>_Ʋm1&SD若)$ȫ!eG"OUӴ ! y$aUAm۶w.3WZ۫&K)l&S!SBﶿp9;r}fm*r:DҖ'ZkK=,7w".ɳݿ/\7esΓt+"vX !_/˟[vU#=-jrwp2 OBH#Jͣn\Cq~Z#4֯^;lo>f#c~Cn?Ͽ&m;k;7~A ٯZX5 žP?&~^Wd?Pݞ79*{ݾv6S(v՗in7o~׼ӯnHk[M, "Tpv2ӭxK__iFW7Ed˝?Z߃Ǎ5-GVl7GX<=4?<:߼GMV8K͉7My78F˾v?VJo^=|0qZ>cG#jt/Mr7ڄz]F[v4Ȏnpa={ݧ>{k4Ԛz۽|w8.QtR=܋-''c/z G߿۾籆A%kS蟅_u|476>_2m>X>ajld7'8Z=wQGwu^g|D/A64v fM-nӴ-'<1mVDEx!+siIr7z/SȞT%n(7-@Lvn|G^Mc˵MGM{~_s߯ϮSۯ_0G3Okq=,ΖwLyaV/ٽ!_\7=hoV_Sok-"GF_;vo{X|<,d֍Zg9^K^ϧwH_ k:5K.-#ˑ'q7& 7 "EZ/io};*Uc{}{VxW妛C",5 f&ݪvBɃ;oq/ٟ*RaFkfQ>+kφEL[%xQwdž|s[m5ꚥ|vw3ix$DZdog~squձT/gm!ݝϤdYn =<5>owUN_m=e$Yqmfxt3t=b&i^޾ϳQvJNڝ~:cz{hɊeh[s޾%-a%V7{Ӯ[[5a+ԅ>~:[WH]PhkfsirIn$Y&cGJ( T髧;-v|.}Ôa(YYO'_?C=[[1Z>fVݹysZROZ{ۮ?%QSFms:eҩ/iN]Q]w;mJʭn hr۾U][^v#z5VwE.oG9/|ĕb7ܻUvg*Ko l ݵ[?]4S.a&䤻zm}u>p귐T6h$vGf5uU:U6[t~gq7boOq} ֏OH?&ti8ۖ>'7mek$I4l$.[9C/[qxuxo8a_v䇗cxRWsuV׭ݳ6kŚ8: ILba[(pop"(#QW}qڞٺK{W>?O/9SۆNѺ}S]S]r|->e=4Qq.ijOoxycSR٦]~OwoaVjRpwU-ɷ_4T+Q4b [A>xbu$q3lIW_ԥ?\ᣏYSu6]K6"[@N?5VrpahBSR_˿M]2X>PWoOqXG}~:tM;j?-VaNqsjkzB]G!@;??^Mo_sE/b 8/f1;;'bd#oRRi=_swZRzțW 5v5͍o9'tɚ-Z <]eI&bw4qֺOv9xI|N6C`cnwi˿RR߿3gNgDB6>(_~yJn= iH[ʒ̊'}n#;'o6ΧI;8+}%x ڬƲ \n]1UFN~,y}}}~1FWek+T;y]ĮK)_+mE__n+F}o_˝ m/c]/gV,&1v Gy]W5\^^]4>c<8\pSxL}u:jBEQ/jS 2Bȸ%zpO9o34;]}̊Bhl翾B2Wz|؇ T[6cU|OԈs +ztշ^iʷ r9{.;߉-+qdp?'^Imv1A ͻe;޶bͫ*m'] ˜r1ytmN|m>ٕbJ <岠v)QR1xͿO㝄#}~~9y4}._1%]A9~o7{g$C KKcB_jY&sէ(:!\*C6?1 Ż5 );giuU_*|f*3whw/^'y7?7S.m9[~2姖WX>H%Nr?*9E%OƔ⩻7rr M'{#/W/uA1# \ۅ;7VnO.y/ﭾ~%1 ÌZoc8hiZr͕'Z8"qw6W]귐,F37Z$ޟ~yۜ_3oݒubR@bOMnֳia}:\KsƵ[u;u1jo"H 9\woyfR_0Rzuʛz;_^p?7|֩F~GvTnl|۷momI^)Fv}V]મy?3ߧ#}? Rn܍U}sM_x $8҄lm_*_ٗXw=Xg?s֕c̷b,ҔoМ(Ie@z=뵾qETw_+9s'~p#8%޿lLk~d% U o˻!U&%u%eڃaE5={yӗ-^{7W1=-5㡊Row9Po9^76Sjro@#ӠSͻjΘ:=wȟq~b<}))&i%oIe-oIF?x_ݖ ($qz5j*v2xb_u+~RM4󞜹'/x~T'ns_sKLծ,gW,QA% =8,D4^kL῎L!dk{s }ϳb5v~>I;Ҿ3TW/[m;ߟs xKaFs?۶_Fv_׻g0>߆/zGϞՃoB\SMl]*F ^ kws%.Xk>'k)G ]_#,JB_m+뭿_먢L9=zm`1z{p$ 3G~)': .'gj[6c?] 1,XU0?3gϮsZebKٗ?snI#<s_5FV toX|,[F 3}*T/ZEx kVv8{OP >).&RG`?\6=kЍ8(ziCcY/זQ ȩ#mč![/*؊t~W4 շ7}=ំ^nQfgB?_?^wRM[U~׿;[]~1xȕa|ڭ&\oޅSB61״ǔͭl͵[oj}fgRW%*,?ZITog/AʃvY㏔PbBۃ=O'_CqKjN?O֭+M/aUm7k~>|}7,sc&,{=v1KgwHXՙ ~?w5Q:K`to\?_qvJ +|[K7[|9~u* Fw*_7zŻJ[mK=|P+pWjᾧo-u|lOj:.o1neg~]tjҖ:hN3'S)Y̚\̵۪_qy0l?ׯ>?a.d:,.v2!W,3-zKntjӔRkwu]Q@Z6^H2ۿ俭-~oy#d?YIq4fg%Ul5f.br/. m?*Sv6y]#0?trO^9*\ק՜Cvq|s~Jm5k*|!ܐV$/_ nϮ]y)l Kf@>l~[q6>m__3eᘂM<}m}ͥd' 0q?UsIkoTb1˷}89Z>I7vvULGNI#f=+(D]z_wשY݀# {9Q'`wN31qzjB"nz/#5OmV3uuMw+,[Klۇ ?k(BIk~Cvw`g'HJro^bYZ$9eemI|jDo'FRwחv6heYa1KuZvoϼ)6KwT_uܙbg,J}׷zsVOO_Ε9y=1fHqrJm$z8\ I<|7^^\Pݕ%˫z>Ϳj LnsR# (Ϊ\ɫ,Ke_-A%\w]}v=OfSou{m|1cefضՖ+4Gy3C={h~fWtbn+¢ԫJQV~]~oj =ٚ4Ib4>FjH~{ח8ʔdoW t2)_"GT{W4FmƍL:|VKebq5p[/}Ķ m#_j+'^5hckywJyWi,$Ik\ק*ҟ*Z߬:z_P5Öoguf}vx7⑿T3IGOf>bo\S~K†F_/+/⟇~fH!3K&W4E:RMǗ]}SXաXRU[Y#fY14;$+J. Vv_=_Δym}V Z\[%m"o0\[89+sBZ}+iڭƓoƹT#'i-ZMԩnEmkȡWHAGna3ג?E#7}^1X?vZz|eцtĿڤj=W}?< y\9ʜշd>Օۿ߲:  6 YEQfBܺmor'ռo۴Un{E{J6(ߐi_t:SrOZwbԹ#$ xW_΋iOk?#{+*U}QddpH=k8Z%G}3o,xgm 7VܻJ^:nm48'}{ܒ(UCw~iQk/tRkUw2Y^ ?;dy?Ҧvnrbே F9fV&T_/v,ju ~ w2)7es _f706W8*\}-s_VY$\gl-gߺۿ;*M~ƚ|J<6ijq_v|vO?by&xg7A&J6+^[^R}o.y|e ) @$hm}9E9]J Ks)>-2vĞR0W?]bЊy.ٝ3&uDélmۿ\[~e|5Hbw{_y8_wj$&D3ه_o_\u۪JPOӿ`gɆͻ۞=L(=޾M\';}W[E`v(*iۿ=Jї뷧sHEZG/xM&oqmwGUEʝd,sWt7_:Ŵ]~|U [ǢCopOdpEݻ,v7nWՓ^=ym/_W~0Xtm}ڴ3Ge}OOOc M,m \6vjɿ#)T޽z'2yO7|U gckNx/bȢ6vyC'lףOo%[GOIz?M][vkgygr3k*o?x~zitOX߻W~Z-2-sᦉ@ml-GkV[,JƬ6qXy6rݿ_ץ˦לw8xO¶G;Hpr?֬j]CmZ}fvy<-cy!rӼɻ?zu:Kt6 ]+¢;9m`Y<o:{67~MFm3XS~޽voW𭾹R[UNlmiE~YחwDw}C*o~jvjOgI\Z'=\s7]=Ns5_ն3-+KsFvMnԢ+^t[ ϒv U\sJwemdnŎ`~R~enS)YӷMyFRWs ƶ.el¥'u} #-s_J~it(E_ysiFw[?ڷmo߯XԨmmÝTh)I6j>$s+KSanJGov gȏ{=a<ά74gK于UY!LJO2YۚOmm{\ɪnwzWLwWŘ[)݆f_wU)Fܤݿۮܷ}o?#gp1\_[ʖɸH;2mb?~?%y?v?=ʘl=;rέzgty/fk5snڡmmL?({꺳ϩ\}RvuV>km]#2nc߽O7WNr+~}'s-{ \mfEe 8;;}8l_S-r4lB 𴌾Knno'[e28@@G.+}\(nzLIwDLx@sqWRq[~('RZ_}6x:U} 9DY$]_4~6n>es֬E]>}Oet{߳{z_/u N'u iT6b5GUm >]6m*z[f%$Ѿ]O[[k1iU_RmVJܫ]<^*;_X ;U y gZ,ctakL?mN$;r}Tz2 n;ZQv'u=EXMbqoG">_J2|Ա8fE:m^{ftr|7++K;M)v]wܒ+ߎN^4$Tsج;Y֫vh| e#`,N󏺻O-TJT/|3*|u߷ڥ%V'W4Nɵ]ԧ}?_}ztIY ыo.DŚf'?j |O_o/8s=մzf_EZ\͑AY;X7ѣMM:ORJro?K*ɫcqQt{W^:qsޤfӞ餶vA|4mo߻+5YS=峽7NnS:WhKW}~s8KK{Y U 6"ƍW3dٽ=zz_Uq>=޷o#*z%#\a6jkUGd[^_?y8P5wgo-U7BErFbG$$Z;{u4wDzZ1[tQ>ҕ:xv;W򾛶_t>SSCo5&mCW3 -8moO}R!j=9?$.o\M]F5/WOs[r 3O݇.+{u>&qnWBXnR0w&hKG~66-mcv% (;4IUެR5z8| YTMF˹p@Ml=({YoO2Yi߼ |y)^V&ץ_}? ԇmו^ "ީu4J)%Č>_5Mno}ΥIqٿ}~2\֧uUQ99yv)V8UYx?ɿһ=A$~YkRaVGvj]O+s|Cs [\h0ʮbaWUnTgɳ7Np^(&4M/3xk'Yk_Etޚ>=uaO_~'ǃ-:<3{Y<-)k?ZCxIȶKoԞI-y3sژ}_)BM+־zzvJSSaiBtꖫn~>xB4Դ x N0RsV+oOH*OUGI{4b9M=aer7ggo'iP89zgeag)TP]:7ks;;Ohӏj.lNЮHL$Y`|,=JW}xܷ8ҏ#};mfhxrú_l? E}ƹkUaOֆ5z#̓yG$sg.+x9imU?RaUCߍvk7 ~,ê C|>uG :=ǝ} {[xIЭ8MbaI6VN_b/?=j?hF:̶ֺ>o6iI>ҞSJj ?RW]ƿXu5Z+Gnrgy9TTkV'kvzެr|.5M+]Oڏj{WPhqbCf׭|2Cgf$g&҆kkY F\'uO:WĭGR<-h>%$lPXo2Z{ky&L>oVT ]馋߷^ajf*c5{{!xᆑCm>Ua[o>I~#O\>]mэOhܣul'E^"lKڅoY\bSiy˦Əoi+K s "\{w׿BwOo:Pm]|g?hzvo eׇE2hMad[}KBHގtcsBZ6kWZQ0|oyz8~Ͽk7Wu|?fַuyqϡVijsLppdwOeԱ_!ւNս-_ptq\q<]?|g~#j2k"gڞMu /TKKYl)4/$)V8:{O?*ԍ4vϫXH5 xoj56ks#qg%y-|딝?'f]W&%o->g%y-^|A/[P~/s\fn/t-gGqu47.]K*_M/ק)E4򵚶8}㏇>ncwNӵMntY.---5[[xu)~پo:өJ*zۯGݜюmZoGKtivz׋N.=[̱m.MYmlwx$><_͖鍑vv+e:}o%7}΂q8uc2d koSs<\\%ɻ|v<Ŀ "GAʹ\[koFq%oCRWm=t<,fVnl{[M3Rt;Xyg~Z/WfQ3LʜZko П$ݧv񷉴[}_úEk!u wF2Ɖ85B NqM6K]NQ=DŽ|E{u(E$rU|29,vUR{_`kBvgL^>Oк5"}֧{V[H 괧 ߗtM/ۏo3.|i GǢ[C!]͎H2@y^_ǿՊNI^G:ɼgwH`ҭ'2cRXm-l~!4 >;JKraHY[C48]?f?wM_5zO{6Uw~9K$1hþ: ݈4e3H%¨NP +=VWGq>ޒ)O^|wU-+vF/4,mLY̰|2;לlZEgeN5ٗO'_şu炼Y{OxGY5 SSfI5Y.󤼅]>m>dzE){/'d8)l׷ּxSOig$ k3hz[$;5䐤Mdg6}tσ%FMRFH.r$2}6~V[vdH|6|Oʸof=-{|3(FTUKuns}0/_},xg9ͺLE~& {uq my۷6oZٝ,*\l~_y FxLhKm-~K};>_Iyx4&+p4ݥulG$\鲾#0XVײ>8BU׾os_ ԛ|>^NZ>E}^F&2<fY}"hήϩf|V4|nZY+};HR E$g{i]W~.iZعnD|[w7:繎5aFNiN\~S#V?{i{mmmz>%$`.ᕃegMx(T%ߖo<,Fo~]YΦ+򓝭ME%(_]LFcfoft^߆Uz~IeE8V 2q9+9Ƭ+*AS?r ?!Kbw l˵A|}{PtE(.f EE ۙ[~jye<뷚]HIzRYkz`s)+kf-*w8s,4.%;ն N_U$ѿ;5{GP[h3<]?E&=;DFd ޟMk~ IrNG{Pk[,$q2w'?2Eѝݟh:̓HvsS&s)wYʚt6_-6b e\|2WףO>EݜdYdXC+m~v] w'G9q3r=H֯ˊikv߯Q!ċ 䎛kNEտ*ǹC*0VlOUK+o(gݷ>qի<$[]ؾFqq &Y?-eQ7˷W|WV&wP4|k6phԮ-d\ܢ\=1'JT`]U_a`;;Z_??3?}݇muk_nf8ݗMy>M5L%X:0ȱ$W*cq3䢆;TzuiZ{N8]\Em&S2FϹY߱ΦJ:kʧ_>nt&ͰlDe\˳svc3>rԵJFvNUzT^-Kw]^$f`ed ;~/1ͥ$1TX?Bs4ʻjZur}Anٔ Ov#ޢkKZ0jMߗ( nѶH…^f-}Κ]RI@Pc~I%ӯ.Y>$\g ⼴e'J2xȳFU^Jrw[&ӷ.Y|Z/'tKXWd<Mss h{Z*1Z54KXtivޯsฯ'ʼSwzm{oM~1\ ӌlvzj߮DZ{IӇw_X9wwY+_3ySNo<{⮫i,@L78|yyy&kaӅf[_M_&SRvVkyjv-vyŃ<>?+կ_)U~wv~+/B.\maim \^K)&fhcOvo~WN4ܦ ?Qҭ9ɶOKyZobAL3I\4-*5ud:z_]x%}VMrpN֖%RBF^D(Wa Jr*:~?>}ݎ9h~[ KM߮ޛ㥋VSdo+smwV WԼ(e}Q}c|E.]Vv_I|roN=~;*xR~^2_rdFv\/_QVR:oE?y-ok[z^UqfggqoDk{$6bi$Ws7敓M7+vuWBtjվuK v3&&r)-~TVcB}SlQm~TfTUmمĵR./vmgUӆEI&~(n je1kr_cN-~7q%:4 gP 62ܨ˵O+0sk3BQG>[F%'~CO)$]F[*U27VYb}F^9}y~.Rkݔ[pfw,VakM9IkI6~{VY2ۆ}zE{/КtխWֽ&h +kzNRu߿qY;zßE|!u?KԞf]V͝?M򏼒>f| BN?ɯkst~o ҄}ܽ:Kx^wdo1c㝸_oޛF}y>Q]OW m>{[dlV[וj6՟kiO314%:]o߯^4|+ge ZfjZ#U*^[Ɠ+<'90<)\x7t JK^oViqlzSg[ zq. /n,d{>Ͽtb|_\ȧNOJ֜NK3qWfT mZn {[e=V JŦIs's]<}|:4!(Z9EL+9:R޷_Jq~>+[ !/笎MT^_#RÖYhvݫִMjF59)IlxTV+;`KB7}c&cJ_< I&֋կrSo~ZSWվLQݢ]_]H|o41mw^x_Oo_Tcoׯ_>|GBbvF S?*6z'%I6ĭ4VP'%k)WQw7Y{n\ 76fz{}޿{$to۱ՄLꭼ2ufe6}St(m~}3iv)eYb3q$CՏ,Vwo}3qG yt +PkZ7u֟ۖrdsrp}>o ynVϖW_6mAJkI^&B۾.|2q+{?a9j*m^qu8WNuUsJw;t?Lt=iEY>.dI$2?ٷ&8^p r&Iw&>*RW}}>LF`p>V]V峿ߏS/)\*+"_τtJ^w8<Żzǖ]v#ir 66ݽkʻm|f+E~A|!w|sVz4~L攢^ޫvt98d0}~_d/-ߪZ>X8' <ߊ+{6:/MwFxo[{>Ww+1OU~ۉ 2yZ)Ymh-;~7cD^[vUK`&RNQ[h;o1H0pXWxV'婔ikm]1Ș'n\g?N>_Tɾ̛)_b yw۟ջjRZV}m'dL@b@r?-R+kwW{2Ix.7+nQ+W~OsM+[^[$bT;Y$}~ ߷w_h .Hx*6[׿R9de W9l`sA洂~O:qľO2NYWsrFTU#n~74+[H,Fv w=}iu~%+___T;x;^O?qSRW~+/^<̥rk*wQN*K_=_U{,_֭I%~i4KZQI2~@_~mz1Q"Fg!<1SWL*Ÿo~# DX\69?7r-n0e;?RrFq?_+ 7WBo_Xk*<wͧgk-5[m&)r6z֐Z߷rZߨy`m 0_hݿ[p:u*vVnƭvWh Ã?@{ (rT/%?Q/M{ܐk7/_>.6_Sx6HV[U^_v}icVwO{~wYxD*If X? |V+.{X3-59.l!1>ǩGzu;5ٚ%؜!+U,{~f-VBH*r>>SwUߗ_ıj9OZO3W*d˞HG\~J ;"<[O?Rk_4}~?Uwk[عROq*c 2\wU/ /gO%T91?Q__0&^. $!__i˚_J7H*Tjoם}b[/ I$+E@/nm*3޽LJ=^qwmU- )6(nժ}Im|(2:O xomn ѴU?l[ @r>eVY(>8W|κ.Q?ֽuQnvQ[P?i>U\~Gk?Mk6|~&[鹼j(oo6su'xW|I#t#4Z?Sh#kV3x0}hyoVye&y _zSZMk?u>l$[ & lޢSOw~>q'P#c!M8k|.e7_K?7?éLBGk _zo[ob+#~o_qJ[?NǖWȢf]ۈ} ?ۙrw-%v-pr6kSեttJޝw-N:׫Kҟ'}[r*[_ =Wna9öm$[0~\ΛWܥ^-u:_(R[`7|s~'3:ioMz҂>v=[ZFV ` zF*u?&.jnA8<6?_pH( `0z;?ɯWaN.jB!qDw;%+-DX2I ĖbkD9Omr ) ӆ?6~l56MkY QYHL;~m(8j-o&I ֎1I~/2+Nr)?/}EaW r{Ws%'z+UrXh#]}ޝ}}?͊4~)~?IQeB9# #JV}2XE~f.+}ݏSț/Bj:.n(eUSg>SU_~z[R.o}V+RG8\/sC%)5~WLE%8e'w1$<[D!;sM{l`_o*ժ6wdvOk@ﳝag }eR*+߮^֌wo͚,#v/+rv^~zvJ1w4YB$w_V*(mFq]<0o$vRˋ<P>U"x+_=~w&8ݥ vڛ{I`Xyn,;iVi>M~yрY]/O>ƥEK|?^iW1og4'l>n6qY{i/^ˮR+%;[o]3\K Q5^jHO/˅F?͟5sN]^ >D^*z6p]EwJ^'ܸ`!F[?9vΉ󢯙UT?tңJ4Y5S:}o2KdFn3rɳrK{oPunjy_1^N<@fmF ˎgm|G}hc9Yw]NdiI6Q&g10B6}֑w_4d_#quZ|ڽӹkƷ2]Ar 2+1-)834T/ n斿m_{Oi>io%͎#}KJQN# ~U~M拝:? 7XR!Gi:::]Y_e4,̍߻̯Bc)]i}S (h2 6eɺUĐDۣdqe7xkۯ *PJMy1,?PK9=ib!^MuqȻU^GM>i?t0ҵ=썔Ys[?̚4Z.%J|,C}/io2GHʌZw`Zq[nL?ijG>Ew*}ϙ6?}ki){G]k%v^7 YfS-ŕY%e_UJ˱): pV~Zë} KF_14j_߱שgR.kO_uv,h7]W&fU-VG>WL}۷opt6V֣wMm{  7Vpt!y~TI][FͺIP,oPg__F[0\&VʼڿudN.+Mkz)j\z0K:Ipo͵~ZVm_ש}5]?C}ոY5R{xT[HnH0OtLb:u7imO^7Gty϶f!o̫վ릍ۯ_jГ_ B<vm~R_6b@LuiZw)?y{dpHA9ݻj5JoG Qm ^NQ*Uj%8 訹a|f/Znr{lSK l.3fz EJApپ^kCg﷗dR$/ߘ?Cw(e*ŷ>{ޓJ&iTD۶ǁvZ^6uspYw aA?ֽ5Lqpr2?_.RnVOGm,krGȨ[c_4^wu,tv~%,"L6$LG򬟹7U3G߷^uFmw!^]۳Hv+c2٧CG?:F p&nw-v߷{=u}%v;D~sq<{ k7̶r)=j.f-r:7sX^~Nw/un(q ʩl#;$Z-y{0;6gg)s[Mt,v `z: #F˴g,ߖϥW#J5{01.@%3$/Efple>|mH}Ż -EĊ%{w:lB`~_>󛌒k+f,#/bO|)=e(^c|Ujyp'D/$~2 0jKșSq~nAjK0wcamK>kΔJ뿩#[q;y;co]yȭē_ԒXc?0wo;!ֽko]oPt@-^JVg nZUOӯ]abX]moy9s=tѥN)iz]R]n0Bx}vMOI%/5B^nv}s'{2 JFBv-_κ!.ڿ̷%kI'i[m}{RTPk_`0I$On.r!M_y"*AGY~kyШAߏ~?2`ƒ_X/?ЫZOrN.HʛY[ O[;oj)T忟Wj@Y:Fdw9Ul]25̻7vן}|#).N6ɩg68I?͕F.>LPnnnkw$ XBĐ˺O?wag6^OM?9׌_u}M].$Xf^.n:~kɔG=?y3[{'{[H<2++e[_ޛغpIjlTc0ım8k.X0Tӻ_~fʷ3J?97ڞqxJۻ Fp?ܬ#~{v]^voN{KS$@YC1W)at~l*ӛm)?2{xvaw+mOío[T%foѿB]Anpwv:/}y_TU^סoo_>bmCfrͲա] {y}|Wb\Nzo )Z։GoTׯW/e!Kw귲mAln612'W:^9qU_}zyh}mxhVA2pЎ_utkW%-V}7c,Pm#(>WzKZhxR|<̽q }Z{ ,.$|~MѮߛlmScouk|K#iB~^oxڌK3Q]$7sJEEJﲈ:|f*ܚKGխ괪у: F~Kk? |^Z^봛]!ܭU&5QbT۴ۧcnT劳]#oMzVks4~o'y>_oj$qJ_}n$Wf繿^+ :/z]Ėh 5KfYIs׻ UYMYoMJl5RPMr${Ӿ0vUK+{?Qml=I6mͻr6ߓ"G鲷:-} wudjz%ŵԚ3[keDHm?T37٫owas4%w>4?^׿,wc+8ZO9jM_כ_sJ;h얗ai5pmS[~>FdxeZ[en&ym B$Lw =Ozw~m_{G+jZ$-t|? 5jWO oNO:5x Q٠[YoϵX#ׂiN\?= 9Ĥ{Y<{f;YK$aav:6]ߓg/{80}XF6e$kߖ|mͷe~y|Ϡo߈-Ik/}_kf2koN RrkHk}<_Ei.vOg45eo;2˓hxx6G ҫ$GV~™v+.%zm|VM7gkmm鷖_S"XjaMO6|=~_[ZRe'{⦅_:|9{Vߩ/ٯ_W[6;jֺF{II47CL?%x٦ ~/W쭻8uUBS]z@k|!/[<#guYڍA_]R.mcG$^M-,el";B }m-G^޵Y9T}d[_zv>?dspx[=L+BL>[_#jj^L)4h}3% M*\_4|Q;NS潕ڵ/$|ZAO_ >; u-22 [^K~.Z^ L*;˹&i<1?^DU|];k~5 Y>$횖yal7YS?f<^*\[|n_ zI}v~}m]ٿF[w?~q=Ix/-6F7Γ WI{u,u{1M(ˢ/W'W&c]zWS$1Aj^#&?39W{f[mZ/mϛZ\Yj0*^IзoMl>hӅ.ˮo i?VRN%homLJU𾹤G}$fi _Iygb;]Hvqr)JJRr:Y׫.K^M^mmS蛟?ޟSO41|M%["a2,eƕ/F*z/.]aiN+[֙oeeZC=H,Qo ("Μl.'oʳtį~:jjR巪3 $iV |;KxSR6$״՚5 6boG#7p&M<5k=orH-ox1k e:t:qJt_.5_x+^:4^^/57WR5Hk}-Ro%X]4R8oҚ{/ex4}giƛY$ףM<r&|koxQ\O|:W՞$-]斷2i̳+DMy~JTwڮw6ۙw 3[^0K> 4i js[']Oرz}\qGw}R)9IMt_{I<3g߃>%`~!hz.a2pU>^;=cMY> *?MïSPD~K>g}g? Haоx0ã+Ck}o%^MUfx8 8GtNmFN濯{u ֽAeiK2Fha[Q,fOs'Rt_'~9}zIz.7i㳹;Ի`4C̭.͆GӦz:cUIWק[xWޟ$ngHM4[Lp2=͛IngWVտUɫ_}HV#&v+gɯٝ+ts-CtHjmΝosE֍Gu>$@dl;K|qY54޾{y/MCMDo5.H,mߟ-.~7}Wl'Nf[KĎRr?wsv{Xs_㾑>lW]k˯hrn:EWlh<ݷ?}3ƚYuV6cFl4dz}-v'`2#<~_rWiG^ߚa:w|vu>CVs0ixu;R$R7Uog;k{JWۗSxW:X[.}O-zׇ|?k!;Mjy_Zⷓo~_ y(ՎۥFmi mWv^i(}?3g5E8'mwo_xHw"8w?wqiB.ҹѧNӥuT:vuWA~ ]cPw 4|Kk6wk7ڭ;U[ޗ?f~w3B%:Ah{vkU %Ck㿉WWMX4-jF%Γtefۻlj4{?q~|!,mHT/vm[}OzXac)߲O õ}bmtԄܤR2afg{2qM{Vע?ʳ'*Rm?Oį~&"jVS֢2$qCyrn?^>#h`:c~W}vjO=W[m^ ]WW$pŠ`F]߻Wr|+ۡBi Z+~^^T"JMh+}u8x=\ #Rok5C#f1 Ȋ\!MHk:cFZRI߶X ⦣k+m~/?bxj_AϧC~*dkG4z2hB<΋%&hR3̆[lSn=Z>üj`#q埜{?߄y}a/\x>W-wL8SP[9?yoqmt#?s5~oq8Lj+K^~O}upV-S_Wk[~/kI?Zi |.XmlGk5ד\/ò9$mCapTs,CՒ+{}~Vy,uaB4rz6}}?On֕^%ޣ2[Ęռ)= My{ȺYm.ϧQ>|ESIz\N[gݐwS7&6zT凮{> oYsmR1ywPo~Yw_&2gFjiZivq%ڂhsWO~>4U`k.OSt/?3g{#5XHѕQ}UܭXyE|?6sPqte2G3y_zٻo_D8ip\_K"KW3sQ_UW\þ$M^iGw4+?z+ *ܭmi_{=\ۥݛdVP ~ߞzW#Tj~cѩkko=?dwúU=R[qMߨZݷvfF'O\T*˱Cm>3:;idfB@ty?̞kk{~s_}x;Y$)m1S-]/i*;E܅%?Ycw;V?ϚX^~fN]?̱5ݫ!1N#`NXK QS'_3mnwu,moΓQ} EٯS+Va%+j9yu4̷qy\շ}֑6pz^MDʱgnUVv_+Q3Z?S4osǿi 'G}mukie5i7Qo}gy sC7Ή6$ޕհ2VU 9k~k׹?>8Ţ~<ˣ͈Sń}om/é MYZ~ǹτ-5I跱Mx[k=NK}oI5ż;<_%b"C7uxk4vk]F㺷O5s?|@IxzC|C&aE7uhm46or~'F-wdu{y&}y|kلy~k"qcK%ܜ܇Rgh>]˅+}*fdntľdppӕ%;l^7-S"[w9ڿ{|musA~n{i]˖ܻfBwI>B _mwV*sOO>K"F'6 +|;}k#/|}Y/~+]O2о_Ehr[O".eY4[{օౚ"dV3o9ۻ_qk^dҋepNbRJZCJ{򽶤`Vm"ŽYK̥M4kZQ;ߗ~*-AYu_1ڶtgF,y'ؑ{'~3K-otN̼=(E|ZԤZѯm*;,Qβ+,_k|~j8JZwN-{JYVRm۩?7Ocd na*Wkj4~K[#|v;R}N{OK>9oPg7vJ4S]/-|eaM8t_̨WUi~k僚h|ko ^N [jwb^׎,lۿɝn)(W8Fvodҗ{\g)ea8ϛymg?w'xLT)}*EoV)Lks*85vIs~?9Ly~&U}mOFo[߶;(ɹ+LI#3.Uvzl_+ý~ou ;=/g#%)fif9?{{ t/}E9|/_J"rSi}zhfpʘټ/7˿3ZOSVI{nߎMy yz֍7)ko}9$g!O_ )B|ޮdR}PsߞkXmuQ?|?3cnK/T*U%t+;_Ka< BU}^+g[}V[~}f=`S2zs_!mgqj3_|@D !;HbJ߽:0&co.'ۯNQBqdz|N]ʽ|r3u="P;n3ڼj-6twj__$`F 8-W$O4iwߩg91?xu~С'XثsXZW+HWټ~;KX |+Zܴvښ l3}}pJL8WoV|a;*Iet pceMo|ıTdc[sTF*rҼJ,7VzH9-".c3vMUӯ/e Bo$ȞaRn OFDazFy8z޵Udy|_-#l+Q;ִUv >_?Urros1m>7G?W6w#.;,?ޯ&Zz:]w][Ưwv c?(_{}ߞkLQ?Uj~'i~)>K}TmzynOqQr-. ٙO0NI{veЧ۫6$1_kH$-4{=~zt}?j? E_/1KP7څf޿i7[׷ Ġn~n1MrZkrQv/Ӧ *>ߟQh_Ƥ֤ڏM~4mr w'?%Z?MNsdaNNq:Ղ^m"{]~ݸ!HCZk%9s;>~~d)as[6em55kA1G˓쑻ji=*[zmR DlXz+ʷh[uyԯk߾/;I1Jq|)bgy~ZQ;H@.Krt{?QnO+}'+-۾<.YYÑ0y4%kh~+np m͐. wogcyTV~i"G8`O߁kYݿz嘯 6Ę +}NQש,G:w5}?ZRO׿sNu/_?#t8 L^ۯ'DeׯrK,vb Z2n/fܖ( ƫ$lORK6kpR;G[ԺAn~NosIK{P3{~5#4eߗ͝ޝq[k{Pk}|"sЪ*5%._q,<X䏛js1 kQ;/RQM}zUC0mzvR$w1ĦVg.Ӓ7g/jtXHow>ߍG&r ;jbS NO9qՓ(u܉ $ SNfʒ}qZi/%tdW^I|txgo 3J ɾw"Q #iS&wo~hoI%i7>*a22_Mmytm?{{|p2G?ޱz_$f*.,P}?/C2vkki,󺪆(f-+Uz;5opK2vyVy;\QR^mcӲ{ߗ<ėWMc,ݕc g4#.ysUQ6V>V:ԡRVɯcjܼMM2ǹkmί/NΜKCԴn}7:浠]nunc eEF;J)]ßCOI?jvZ6<]Ek d_Wdo9w]do8I5뵿yҔɿ齉|aicE$6+خ|6!Qִ((4a]HKu5?Y>qadZXxdiU}޿?_񡇅4}뻷WҬvi|| xŚMX,Ѻ$>OD`>V >%^ɾև>;.Vm[emP\%hXCo^eIll&k_{4ٷApY sʿ eUoݶP߹窫/޷S/< ^]mw}jVQ,Pkm&Ů:SǭsB_}WS4fT]F)lw+7 m>פJo~^&IQbRs]#mUgDG'g8-tݞ7ٷ뷟9[[Yڙ-Xos4V?-Yf7v؍YEg:/o~ζmeˍmu+UTmgvU[_;_3>jZ-<_(ӮෲZM#=k#k*ܺ> g6a-ot9/Y86oQ'$oȥk_|hj_fքڬRga)d*v1ק׹gj1E-r5@qe4˶eNWl }iBRRqYo kYd#e#}Vڟ'/;u?[xTў_@.uE*ݺ9hD]MI/!._i'M+~?޿cuuGX.ZX8+f\Ym?礥u9ޝ]a!m#حh yيmwO{ޕ4N׸T^~^g'` [o +ϟk+1]i}9}ӯE&{v !xەS xfVre =TebiY8$7+z)<ҴZ^Le'oԬ2 ub\~ֱwnv7u%ͻ}#oU;m1пwכ5bǷe_'MRY6~-nƒ";J>_Nk{Ng+i[nZYr[svs<z}~HԌK#׸meo[mᅰ&g,A|1(J[}?I4mC9 Wa z|jR[ZJj_R7򜜷p̾+>|0 mݹ:TwSn2IK1A^յ_1]Ջ}خz׿q18Kvܾ$Pe ~m=z4kUowר?˃0(v9CU>dw3-C1Qzm?z~$jK}ZܺǓԆ7{oul/ӯ{ jæXm^ߕ N?=^_З2ęq7?_P޿v))SvBT3o; Ͻ_"ceW׿Pf`K6G5 yI \,yj_]qO ?ϹUIp=qǾkxp4~;ʏl"s,V?ZnrJm.UĊ#)M# [jyy]uzPM;/>3FW8Sqi_J}GvZ'U'{6ݸ?wsg 5FI^>s24׽7GKͦ{F[|UqUgw㈻ri+*܏Ny_Kl-T ZGw:irIssk}Dwe ;ϯ-RONZ^ȉw"o{|I-n_;LqB I;ۡ(T]m[z|. Nc_~Jz_#1n*>sͅ~kwIl~hܻsR;zvޗN&{[oUP4o!vmtsyqfSXr4UjߧOڸ.>X(?_z[u9(w,GM&^P:v/B{"W_KKpyI۱ך!ɵyioVk py=wOop=: sa~ol{j\⿯ su3[^gOpRtH$xr2y<˓]|^VU"_WOs6uO /'ζ潿[z}Wi!VRntpۚ4owL,rI| _s3,Ʀ.VfS& vGlJ'͏sm~R}tgݺz%f"4FVõ֪=rsVeR5 #_w?m&JAkhЉ4s()fVWwoKYߝo;*FPVʒ6mb۔֜ ,Im}_wo·o9|գ>kKCum۾' <d]3k]wmw3oYِz* J-_f1wJ6**,}s+NK-O7}o,CPe#=?/^I7"o՜m"e|g7?_^;'o9)S|Z|?Q! %*ۅ:}j=+ܮj{DIJ{4R5 vGj'.[m:)k.~)UZ'#=oYs[o^:~ebY2|Ɠ2}38UQ(k}|*ͽv_SNFV(7FaHWHF1։77>Y Q֫TseurB uoܽ{єSյv; (<뙼 x多;kuv>5{w~{? 6&HM6=B^ݕY!툏VA+>#t8z5+^˲LmGf/K=5}z_$Y-7@GJ2mS5I#fò)f.N_]^OWwgx8BP^[I{{奻kvy-sc Et kGld0|tPkm]uft)$ۿ^i}N1|۪͘qr)PSm+rY!JԡNWw{~Zmچ1\Mk,ĝvdmUo(aTP_j;nmӔagQ(=k^~{ ZIut 8G(rd[w'y_#0ti99&*[~G?iywO߳Z[ ռMNE[.'gu&VO繧ӄչչUNcC+KƝNU>С|E%QI/"7iF}ͷr'aUJ9'6'6mN{XьmNGӿ $tgUS YUo{ `Un|}n8}#SM\~~g:VhృrƏ̟yVcWyDZ5JnwMxljN=dYn#ۆke}XQn|[WjNW۽v"?gU[voX:7mG줽c_hkR|𽴨/,kgߞ"v}G 5M>mk}OĞ?i|Gd=Z״l5!hc;hn.?.DHYm'-> 7\ WtQEK_?-~m_ RIO˾>!wZzַW<=q4FQۼ~qqto'ލ)烈}cfӶ{Ywo|E:|8.<9—^'Ѵ3és%&RZkP76kLrWN7K_ǒ枟{|G믄ExAZl$jFֆOY{oH/ K |*qIwմ|fE{oL/^ö^pZi{98f_ɸ7+WOOǧO{Ίݮ-vZs[3 ۄ2Inܨۓ;$ǙJ+_[/owNBk? Kx.umΪRm=_#F4+=_m N+Mw]oy*t{Lռ=@kzm擨[42MaE%k$FMu`qօzm)BQ^qi+z_bO9)''.yĞ,uw6P2bWϮSW1T{EGIZߎ䶳s[(_եfvk5avmd[4$>\^ɓ:u+/%k'~,VXҤk]t]7#wYu|5)4+xOJsM8lM3+lwi#DO6qcϕyK߾7Oxk㦙{WX~.jzq-%g4>(fcgEf$FBLo}ߝSU7{^z_~?zN[ufoew}wI=:J~-{y?_5g_nSU&ZWq$:nk{B9f9>%kU#ew󦃥xw^)5Aiq\ VHWK4X4wfXr:<\69·?=ciU˪Ztp{o1澻9Fh7g$E_0߭X[) C}C_O%NK5{FToRoG)/6neJn%,t|?͹xoW//K_Lbޒ4g7I*$yYMu?3]=tiEukrDڜ^M3( dvv?]grΌev4,0݌q<ET~*+*-va -OO#MOx >T(YVH'?2C"MIw*߼I6V',Ee ſߩc׿^ʚ;⇞D{+ xI&+?0)].*QK~|^j,˩I?dy/u--^ws8Itw׵o{L@7X&;3J_m.vFDsY&O^N2Iv? WYe7bCeeivi,ř1ky=OBTױˢxgƫ/?h2`Ŧ1&*Mup_mwXv-o/?N߮[d1^@1km3?I-(\Ρ*Gmom$rHc٤VoUXmE 7}^痋#w~~?S?MFpo(Z}mͱ.nr8ze9WvwnꖧSO:zs9h)y\܍BSv^(Hn,I7LwC K^'tR{Y{a7+9vOߍ@~sM.k*h[=˷eΙvEz+n0?dkV>g*`Tm~{q\~^}xWjK. Mk2[۴M'i#Ml ?{<'J]7)^W;u+T|OU?2EW- E}iCoaay '$*,qkx~׹V8lz}~2S=:~V֯]?$5xg+USiMgfXu.SQd\#w>#w٭L59Х.{w/1ej|^_+o+h YiM<[\궷GhUH~TtVUSi|3]ҏ*i۲~qCT^6e}?#7US/,,[iz'6u?}L[׺Σ5<[%,R?ټV7=Ⓦ_|?5sjVu/~~o.kP+,bj3+|!ϙ(_mV}<Þ-Fmo9%IrͿsj%Stt뷞7u擄e߭?D|W񆎗M ʏ̟+.)piݯԕ9jz\R$,_ P6G 6;߹usjV{nBNyߏީQo{_xfuyOO]:c9lK)$07x|VǗճ:HGשr\; +wf3/^[B wvF:WE!+˯2o~{x~!B֕dz/⏃g񆭤8aHofx ;qT[Y쿮OqT+x~\YGS?'r"oYyU>x7O7sfjZewM{WXiboU}2ɽw~=c{'ӨN)-t~]4]ऻ_w4/zʼn}MFV-ocNxhw[˷~W7N n?*Oީ9Ʒ eCVMBir=\ͱ|'U,>&9iB*^{;Vwf4j9[Nww>~#& 3Ưrh&mۘ^Ua*PoDZjuʦI n}%P=|L𾙯j^ =Y㶝EJOZ|;E&Z'ܷ>_3G 5^$/}V>7?7Y>Rz|x_ϓM)^ߎiHS܏xdVpyfkez0`j/Ҕta3g?3޼-T,oq5;|rL/Ηܽ*ڼI%lBKczO/fM~C($m]/c 5ǭhNR{~_fحkF_ o}멄Z~m௞!'eLM,9 R9WVmPuw w8q9)rs8?h id@̭]w|q^ E_߿Uu{~# W\G$ls6FY@۟|"ʷ8ݿ[7m_;k /#Ul=ɋ&VTtS =}]nrݿz|;I~MBė4yXw|ѯO*v;}zkO6zvN+⏃hg5ɵK(igȟ6=+ZSNiMw~'eTJ[//h?f,٠YbѵF.j-ߺwM_qփu0<oWάM_ToW{5xZ"v}1wx#';V|];ukk#\mNiUi)9Q{tsu>J?g/_޿o7ğ_5V]ƻ{I$ź'#i+~Oh]<[˓^ʓjQK]s&ͩjs8ߛ]V~;;V+{lly&[B&i3$~^Ûߣ{kg~[붽םבQ4JcyZڳ>x7M;a/o3ϩ7&t|2xQVn$m=ΊS#yU-iƄcz1Ymo`$qZPzw_&nݿ[Hp9|ze(YtI:FK8?7xokq3^lt2:$lbr5yR<'n};h82`1 ~KR'UCy2謻בSr+7vWJ{ϥUi:6%>?xXyI{pT7|#Z<~Gfo_>)l>id?w.8{+RSm\TW4#}Oqm~]z_Ƴy].Emow߿\X]t[w v}>=#d[xc`ZRKgnu~}߭~A.hu%w|{Jv޲뾑/5I3,*ͷyUG7$I_˿qK$,V o_(7}-5O^*|}~۟ ~ާllwV 87O{ oߋt=>GV͸Y|}5'4 ?{o㫺M{~Zp_Vִ /~wGlqo1 O 7ݞ- Jҝ}W?]j|-42+pIg.I nwpWUJVs%[mw9J5ja z'۽^~z}:4[1V۹]w1qg9NEin◝z^ߛzúOe.|Esc4VkD-ڪѼqq>̯ysTe-5'S ”.s?՞w_xĨ K|<wvoohw2#2ϧ*pmi&Դڿ^+:K^zi}#&+jQ,њB둯 Xsgm_x{f.YJv[ޕoͯ.n$^ei>iE=5Vtww߹sk7h0/pޛ ^pl=0^= OQ+vI[7:hxG}]K|<++J[xU$v9+|Zm۷WcF7twks/o[GUEVSms/M]wI-CoDo'ܯs)R8`=W3y2js[O׮Is#m Y1#ݷ|=kU$&kjM~PJTmK^λDi!;_^I*1(/-5 bqN'yr^쯧ԼĐk]_ۈN->UV1; l"8B|kzߵO[/fxyŒoZ>hK4 ]K+Vםq}IM]_9܆E1o]rkqG'/wc& Xs&ߧCXW|=?ү|b6vV]k,ۿN?}zU0rŵwG޶u9:N6+~ZyiClْ n6Žr.F89 Q~*e=k5)OIoK r0U9?8!BUϊۓ'IJc|ŶQ[{t/u#QN/]~orJ9׻~2v[Q|w^:e\l~= {쿦2WXdm(vūx{rY#X7I~_=NdW;F׺]Oo3/?{|F*JϯSyr՗wm^Hb_[?NnNkJ;t^wbJS+ |X Yy;ˢ{}OF4+VJ~4ѫ:oHHd[Q[Z \\F~f Z0G}y:sY9>5|]ռcEgn~t(YMpyo.-ӿ~).%K;/ySK7;$Ӷ]<΢^V52|k-`X!%լ|6쑫&Own?=e*Vԏ$yZ+JGz&mZҞU/McmvnaJ˩ڳ2nO𺼞ZH`90˱i-I:?ZkEm殺|8_aҔTmtj맽<č6miEaKjf~Dždm񎳡Va^MEFUkϻf\״p*.Ir;Ż'w`O%cTFqg|{?4.~@ݓZ^-Z+~ղ@O 2 ?/^d}/Ľ/\y>#uz{OtݼlgJ5E}k5Q,c$ګ{Tv_?͙F箞oF[~z)>ƎpnvT{rhp{g%ZngꅗpI^ԴoIlnIsX wvXD!f%\s}{vI}{O2kZq2w_5r_[(w6:#\1s}:܎]9rk;HBlVm~}C6J?99M7V2¥_U b ~pI;qAKL# 8{ajp]X{W)p70 +>rF}/?%wG OHEwY~gBӵ~9՛-ToNI5 Bŏ#q~N}qi߿mƏ.=jNrm's{,r\_5y&NNvې; 緽6ou_3 NT JI1%#cvyO_a﹧j&#ݻi@-w # Rau^t!ޮ\$O?/_W]1u7c[, r۷71It;oJm!qq^*z|s5|rVxpO~1Ϳwa t#?V}iJ[4U6_(`NFK={_h[{Dk|d.hv G˂wo'ʕϯY4Kw'V@z{\Sïf$$I<8(\͜7_~-'ׯP_g#fsn6wq^n+ ζ>rSoWn>7@D1Wr%wsn_+9>%I'zݿdO3b[?{?pVֽסi_}o ?9gg_%\o{wsѣg#YI}#;kiy~N߷dr2OzU<;ߟ:}{}- e`{s 7^͔Rզb?O|r_fƨj!w YFW79ץQ~?h7SNzu#{iTvS5&lC. T2zT3|g _xMiGMq?%Ws:rZw[u-uu >YxoA44X;5Otec}ycRg*/].^AS-E,v`…jO:&iym̅^y[v{% o׹,Ə m[kI̟LԦ~> ZOrOY8k jR Ic;JZO>ӽD|RGQ6 ruSʗ+/9KK2݁|q|}9TV~ZoK~?~{xA|_5#N/$|Mp~6uwm?3)ob4Hlo=A[UBÑZFR忯~NMts_ywacr3ʸ<:Ԏۑٌ[_~5~Жpn8GϗUi&_˿|[+:S-<"UXRJ}迯2[>P0Oֶ9fpK0~Ϸ%_z6O^? YG>@Xr?o\ރcR<}~V*g멯5+Z4˒sF~ұPrM_}~]oX2T AhVW#k677nO#&_2yW$pQJ]*rU?xսw9sSzmʱdO5Ս)"!Y7dֆ.)Nz?{lV  k>O3)Etb|'$6U{z҂O0vqK •^~w@6?'75.{ס]w>eK?Q^}w,r`|{ҪTV]Ra+}=>R-\!߳ܨ߷9yvտ7v>\&'!5vmzuRGǸi+u]Qu"@";)<W(sOU̲/|"ɱ[jsֹKemk|8MrK޿"[p9;:pR?2b{߹9?8kOtN_acdT-?mⓓvCD/wYs铸 )kǚ]xAcWa[FpΩA3[o]Ń$w-m$da! >2mMA^~K[C n%žljM=MOo?c RnՊx0U ۙLc|}mGvMuz~'xU58yXhX83tIQ>w'gp֬t^G~1W7Z0̹Ls[#kM5e/;x:ONzپhl|[I9"3XWMm>ITmY딡*qq[nꋷGP48f.h 2Xoﶲ_rsrr.I_k鍊u$ۿKYbVboyg##6[~w0ޏ|㮓^}UgBj*/&yox/3iWڼ-Bsf[L!Hgc6{ה~+poCН'$_vvSҞZ8'0,0bܥe?+} rk׿*Oyo[,cml 2msm40rI6_^ykW3ڮĄ3XB@.݊?fS#9yuJZ^UNжG."k*&}O]M'SKMO{w{Ku$ݠw@]v}OFFoM7oS垍o+_s rvpIt.o1d]2ȍ?}>C䞫O>vaI4I-,M_KmVŴl^o VtG?[]w:e˚ӡi^ )ntRԖeC(l,Cp#JSiqn7~w=嵼/DyWk2nmOje~_3HҕynP\Y\ fF=|V\vֈ.~>͹dT6!чnAS~l17קsV6yu(u!m.-x[=VUwyr}.1PMmo'RMw+kme?t#TtA!K[߼laZ9.ߟ&rvO];{^j\hzjiMʳyoI$]f{<1+YEokD.ϖm۾m?ޏ:ѦR<k~b.KlLKaT|Ʊ;W J[*zk|n*(xWl'f?lWLW*g*}?ǿEi1BP[oeoj>LUEݥ$vE8ZiΕNiiש2,q#$p?UN~ӭ&`¹'Nj}_Qk v~QSeS:uM\8#~~t&nU9J_f_|xb~Ugno?99ocЗUHePmNܳ}ns[+]y+#AovirǷc)]{ֲ-g!yin(ͥ{'b۸_OʳNw7(v^ovw:n_뺠jZޚ$q`U8 :}~M$̋fn~^{.UZ~-%)naUʲ˸ֱMG߂_e]If8 cw5U9k q#V~oe#rHN0X?7Ƞeۿb/*⫐w/=P8c|x?5ӿ&#1̬n}7xJui~#,yi*y'dzI$^E4]̠'#W vR( P'awVZ$d?yGnzy[U,n껷g<5joԕۦ#'O5Isqo+G m 9yz_E5jYsl}o4Mֽ{[HyL^{iv%F[ehM󵿭lM'޾ʚR-zɒ֯}ߕep=n-wjBZ~ U]ߟpM]4ߝŗ{ӵ293{v`rdۿ=k>V]4,[^Nsh[6zi)-*1 ~Ymo?NL5v m8B4l>3K;}^wz[w8ZBh՗vެ!Bo?Kt⢓]{ئ;1|s#*ԭ}6K.A~p'}4E|_NZU_~ v~o׮kKױ0^~'hrN <_)wSE8FVݽ4] HOd%8mu{9$ܷ]w[[!&.lci 'F wKu]w+|8;?îoFs)4XC/S1Ҍm6Do܊H s7{Ӻ*nFjקrS̍\ lVTxר>[hmt%(>Yoʖwyh3g*D9J;/{QQ;|Y&7.#p ݏ9r3ގ%[-Rn'ߛ̶3*[w[ȆV21kviP6Q!/ r3`ʝ|nuT*ׯ}ʭyV2G]uWg+A_r#'ʔR准/KRrz 7j6oOunxovYizhaȒƻC\3}7'yJI}VvTrJjҿ}l<7fR"" a]ԏnM=ɮf̭+ߩ#uqҞu-|6'mEdU>FU]EK=gc&ޒZݻ[i*˯mԱywiH't'vnR]߾lW*kWT! vm"M/OS2rm=?~-ԜoN/}J+nūVRѲʻdJS?5$+:ǵ\'o s=9ܟ_ou?M{.>p3"*klzk_v5m~~UI [~b3kgN.k}W/f&Vy % 1P~N[wm鶻?GC&)$P\ mVg?zF)ݿlTS]A0$ 7 t `?ǻVSmNWOb#iSܯQ.{y4}7Ey:XGTe8U&[#n׼oh鶯;[Z`u?/-}Q+7'?:RnefޤQgo4kw׿5̤c;>i|++Eݟ$f= vno#֦\~7#{Wͫ "NB8ݒXwlٿz~k.^]-sТ%?1$-FCG#'XY[sm_O'$~ʇ[}mD$a$]IܭkH^??Srn?w^̝@w6V/TkXJ_}Gnmʃ ?_G2mQzzWV4Bd)n&a_-waw}ι%TwIOFZ%]>%KMGv]|u|Nյeˤ5 #|~ȟŲ= ڿ/>"C:4Πg}V~G%anz[kO}&uqLem4qG'˳IO'%>W^\1uc?f̽LS]izGk]]jE\ %x%/;4s47ȅ)c*Xy6Zjݓr=ve}ߙ t!JVkr%ti(^9kK"fF6Ɵc^LGHN*Vnytƚ'6kz/% >Pp1U{gC <Ƴէnku#5Vךu[zM[ڵMf] $uln3B*tsֽZ&%כ}..矅ͨWusҾiL 5% Wv !?|˵Sܿ+Z&pr/Tm|{NiS4w-^zft:p#K3nLlWڿ*c~|־ђzisﭭo뱎[TؔG7CH45 V/c#/,o㿞kJ_O_|| -/8{?V?j4o{ӈʷ#lo]%|f3]{Y]_zy# ӵ?/=~Lv75MF$IHe {jxy1՛娥vI:뫷K}֗?i<ڗK r[vm,j߇]Y.%JN:&sjNRk]~_Ϋ*RЭm վi=H%Ez 7?Bz2]륽z*hsNjBkm_}KsTKC-R8ZFLjy}>FxZtkK-3&/['eDI-RQ_I$oɵcN~I$:יgN[%ߵ־dxufˮ_O}x?zM;QPFe[ʲ5m[C<02y/w[1|szg%+(uKϰ zUY>-ۧ6$v7ouӏخi:o}S /BxKXںini6ğL8NvU>SOXUhooSG8_ \(+wV3|L𥥼kkMGGuk9<i<1'ym 5$Fjo_;/&ahң~V}bwW|ho%^}k}/0|Gft{5hɎRk[ғH]'_~<8Mݦ妷zmXB'ϥZK}c?t8(xQŭ2Ⱥ1h-~լ6vZR5Ķy. xm*Q~zz8#JӳvU~=t]VO/] hIk.GIo"C5ok7oG糊t~ݾWϻ˲qģ{]{?ÚƱKƁ2ãxV ,kú-&j4iVk˪K-Mjy9:XyNڵュ?GU[ݦrV׈c!mu 2#/$8z)ZozR}}~_NX5 ZNŪIqq42C'smll;tnrFoRI{r[ˮK\[AsE.׽խ/ş-Yk)5-GGukSbAiZg[捼K;v-Gxb+K-8uV*tӧ-}ne, B|T֏3R;$=ouڟ" 7㿌>i :5cm_\fΟxn.{yw/2y?$r.m8)?r+TW_s,QNr*O׻}}E𗉾/]|-ko_{by#S˸fEo;ȹyĆ3|6RXUx~?ik^$k[ 77I -) Cg6IlZi 8w)?;!Y;պ[͞qM-o~OHKo;,rAc$;۾}m}E䕟&U>Ng_ ~]7YiڮjV_l5>6m.eU5 ?߶_&ʱRO[J3Ҳ\+K-«\ыމJNo|O]oyvgoė 3Ih^I!f=:%q>{x8t*P+Ϯ]b1&NN\k{66{}'Ð֖V5Ʃ#o?$_4ZH?ZZSFQmJSBh?|A/|9;Ik6S|G+[ b/O–~!Eid!ծ.ˈn~gy7>}J;㸺&_yT-xOS֥^5(Ɵ-}5ӷy6~$U݈}ujљlt7|b9~>^td殕4Mkъ܍[࿍~tK V"5dƵ8)]K5/!ӭ w#]F<;{9F 'R5 w>C4K|5}%*Gf?0o5`Ka)G_v='?4M3BNu(g[u!_%3Y>o?<sK{N6_x-A+Ktg4w}9kQUGZ޾y'{X'V35VU+dzxXT+-mnB"2{qogmZc$aU IuV"H >iы3-hUR{]|1?\Ky.-߻C3 ~{^Ϲ_nSS~˫W1J^֧~T{7Ķzí]|xzs>~~ƿjQ[BlK(g 601=cOMߛwoKSv]pwh[-]jxGJmnLw, yYMʧZw?&T/^iaqh6iG~m֮=|KK Uj^zmhۯsO_TM&1cioDƕ̳iG+M8jcu HW KmIr只~޺u 48m[>]x_~=co/o.n-ZQHcgjmg{H^xVS[~Nߊqu(QCe%M=X8r˭9xrFJޏSC]L?ŭR+)e4v\~-E۽>q#)=Qnw~eWS0-zO_[~ju/ JPfi#q2g_u+ƍWqQ-wh}~IejZ6MgoxOѤ{mMIrCl#BOLFkS3N{8+iy}ǣ~]\kNKT季fzM+ѩ5 ά* ޚ|6+arѥR-FjQwVi6j6j76R̐&L:G#.&ݠ.ϊmz7Fe앝}fSaqzuc({KrgՕ·A.) in'l=rl$14wk-[>W\-NNѧ۪?B>VZ vW|y"6۷D}_N $خnE~hm[砫䏟#ZRYQ{ vm7[..6\:=8E*@co;+?~ԒInD/ĐIvR ?_{:- y bA|$^glk82ϩbT\HCp,w7?sVR1Ϋ+929RܩaͷVJٸ͓J~R$ 6>c r}qT޷5bi[ S?rr<ׯ,zR<^a'SI^g~Ojd~m﷍(yq.ʟaO6wO_)`i.g.ס|V6rctݹ  +%}6OՔ#?'l)RGIU!C7^=&w3_d؟`kJR}57o ppȿ7fmq|{tkt5T䖶}}csY+vd[gΓqx\7MP}z{XmgC)-_dg|J_X??GNMӾ~ϩ()Bm%ݿ]N\Y-9+o6 Uwۻk|NJekbhΌ&޼z+˚[톿x-֮t4M1d|xl_WSsA{Uo篙_9өqymuEz>5YvfVPXTZJr81MjRs;UC}ťާjv]JmCOMG^k泬Ji>z[k><쏇b;tk?\K}&+r_M4m[CV?q~s#m9V'5c$ϖ 7!97/[[K~7}pm-aRRۨ"-#oV"5*Rӓ}Rn/sb*QMɻ_}^!G>{ ӭlJ$y!VVOɺ?s8C%a#'^6Z{Mx9GY祙4ڜeU?Fk k+SSrqmzZȊH\ew҃q_ǯԪ _n 5yLO;D۾e/kѧ.eyަ?vW#tga?A[w[c_~J6]8wow*)^i1z~:5{bX]I']{ÜuI|碹ri̻w]I-4ytE]v_ʫg/^HyRVU;X_Nw)+ROvw&cF1<݌mjgQ%?wN"${ۯ__SWMf/53UBīF_ יKoR`8fyzgZcOd޶3Ժƾ_^>kY^[NSWkߺI7owZ=[s;hei^FUf۳lrv!;B.mOUz|I4n׺ixGJ6hD@&Wh)Ifcm{>e}VUͨ҅UiN/Gyw SQV||z^{q] jKT'kN#Ku.ߔ6\Ϯ+Nyw"N|s3d צ˥}MGoTЍC3z֧ )ɮ_tzJM@r۸N2wǖ$Oh:R2KJ1˩<3*[wBTVQW T4x2LT@t;od`([i3N8#c?/'9$-Y?^yO@Oi*Ҍ?#͂TndՓ(5Sۻ}^~I 9]EbO1w`;_#)@n,ۊ[r^ז*BK6[6Ӛͩ7.PJ[=m7lq(껉Uokn)J0~޷[ypls&%*sZ?^2E}X@͏zws6ۿ}NB1jlQN6?+ /ta4ﲷ,X$s֚Wv<ړϫTXrNߙ~_tP]]ISNQ XCyٶXhlkwOsw3|KuXWN@76vscK_}>?,?3`ś_|/+OקKsb׿g>׎d~~ҾS$J{+ۯ-[Y6)K>>mkpz/_Vztkw;Uڜq=x(}>OwE}"ԒHqXw\RG[ wz^er;Q'dgCfLe&f~Qؒ;HDF/!_'y)G~G#VWVϊ-<+Y0W6ejclmʴ'8_+3]c |\;:YCT8B=>BF|ŷUر۷˿,+įV+˩B_ׯ\ൟ=z-3}K.ܱ4yoWo[}߉O SQgInf匒1,5o_=une5a:DbZiꉔ?QP` &p~O~p]mG9{:/u0CHE8'ߗCԯmȈX;)ӓ϶N}zPrv9w|y_0K|= S%{kSղ 0~`'ʴ׿ W2_71k|~jp0*Gɭm^#0JI_ 0oBUu_g .X^?5~ѩg[bQ~V۟5 s [~k,_J dv0Wn>os7k73>H*7}SWo{Ri^ro[~&9~rkWg}tWwk̭Np0Ͻi;O}pG} %k8sa/TI Oc⣛eS;4_K_w0e @2_Z+'wHBߺֿ÷N倅.B 3YrPdǰX ѻuԤwM%Jj gh,H+Mj>_;rko+< e>pO:j-;_3'y5~9nC| ZNQI+kRaOiiP*)SgT޶ćdۯU\b;zc-ns7{-AnF+X{=n{~?SУ$֠s8?k5 VGϷx߁V6Wԋs'LFsy&Z)F3_wN  _=7K~~Κb+(A?'jiYX¥I9j]ImٴcO?8Ӎ֚T$r PC+6 !G $y~9BRwm.6$yo0_[ink ;ſskי]`<;?Z=ޗ_ʴ~'r712b7A7YoWwBZLazci&lq,OGl$ܻ6b 5~lMA^DN0'W_nI6MZ_}md|^>`y_~usvoD0Q[7k~?)u%A=Rj3mlf˲Suڳg{9MVH ;kp ]DZ$ 5fߺe~RM".xku޲9zzu+_/1b9PrT|9SoW2>͒Ճ@' ou~_Z4▫^]N%7%'׷R/JMvv5̚;s',2iZNwјJ|uw{V*`$YͷwoNS-uo%B8XxU4zMz߿Шr]o ~ #XV746-"ƞۋI~Eتnc|=y#t%K/̪|'V߷_n.cIbK3؈q6p]LE:qvu#:֞[Ziӵ_ׅ#u{_hQͦogkenz<)'Kkvqqk.KmqukȭG6!ӫ[&~o2`)֌jߔݿ{ϡ 7lWӝvcn_OF{{^tWo޷[tAّ~`F~cq]qoWg318ww}J%8_ZGkZsIA7{2Wo$2Mkgve/_Qww5Uw̎ė:UvN Xȥzf_KтI7ΓVғQ+eVU?};VwrPgk.tVF6ڤK bcXwgroM,Ȯ5ޏi:c{lM|[y4<9irǥ}KK1FD'sbn1v?g ^뮾W+N-Z}^]_OQ?Z6Ag 8߼箕6Z_3wAidCii=妻"Y̫Zw%xn}DOtjk{yz~yܝ6e_?1j>U{>"B7y}W+ȸ snj_"Upr mnjt Z/?1"'󚊒qWfJ|7ViO|(N[=(NM[ةzr٢Y ČsWv;\rW;9J#C>[6܁~]357t<\&qܼn^oF*mD-6iA<ӽA4/39ܻqr֓in9$"p)a?ws3NR~ያA7[̨֥@;[q%ﮣ񪺔w9o5$o~ۨ%mbǸgô_O]Μ~-bwz݋SG`o,wwY{QX7:p7Ϡ[JV#h;'_P?JyӔݼר,QĆ* So| ~cA7lz~52vSmreܬlj#.b\Z@Yh9aWvpԜ[-!;6 ,朣kkκo6keym6a11~ wۦf+mwӾ]b`0mυ8'o/j//~s+,U(d\q*}zh了A%gYf̒!1y՗s*˿ogEN^hlÝUtƧ1\R6q;ZGmkl3fFz/ o6]ˊ:HF0 :YϪ:2 .Aw?7FvFo?k1#7ץ&kEy"s m#h?v̺|+ ە{k5fVJhHwn*ڿ+3tSnNyՌ-o_'1i6LK͖9ޟ"י?hޑm].mϮ0L"k |ͷjܟT={ad߳gQw@NHΣZN3i9r6y~S@N{$Q_rݓuϗc:*v}_3`0c̛W+:օnSM<b6ݫ|53=޿2vWlirqm LW(fe{qWb^`M{K?l?4CSw<~ɕH푶,"6uҗ[g*]$7t{u.<-.]Xik+?y=znߴݗ6VUrd.G 3Wڿ2]_+rM @+[*q2mVrȿ9jsR֕8E|缙%Xo-R<;H{;oN{~1V{ۜnm]>t_a2>n̑w;ga?.O/o Um{n{}k*Z}o{m$lplm!_YයhO&w}ksYӜ/mcúuk[kܼZ1io6#U*nO}Vѝ5Ju׺$$h9 3/s+h7o3-[_3hlW8ONkxjmnO_]?P0sc J{攕L-rRMe|7O'wʥ.mZДFm'8Kb-kVU0 a{o[M-.?S{HtɞU-NAfUW֫D#0R[L`-_3Y~]budݴ;YZ?NigsyrgWpmmkM]kv4x٫PHZm$mmuG+48\vyj0Jwߞ(m~7ʚoWA^DGdC3K+,qy{ӻc%t7kES3m}]O?9|b݆mc;PZ$kƌ1k~fXvJ~ (Zԩק:?i~Y,zv]7 ;'̗P[K"irKr4VY2ڻn?c1xU96ړWr3)SSSmkNg{n/m)cũ)oYۖqNw>/ iY1'T?hv>dq~F'?uB.du1*،dbq5柼4xz9_-UCyֳEeھrȻ?6oC_?5hTUii]r51.엯{H> ^:R[ǃcE:u|́JԾi2|]l6ד]uvGny N $.kαr,qmfgtw2_߮2)2]Oި*UBzW^ZzAs^-2N^(rL{~ojxJk_o7EJRvK}ߩN{"ϘVV'*6no~g篁Os8?u_NiE?o/FvmgO+ qc4Jn#_iVDO9EB5{lxY:U5:s]95w0Ƶ iZ;o]ݨ{wwތgܯ#S SVJ)JNDv߹e5A {կnT[f)Pl"M6tƑo%g+5}{ԱV復n=%\t2I yX<uSSR~]vߣIQN+-藚=_HTk)[>~Em.ӟ|/nJ__/{lR;vg7Clm-Bg'-@˷d V97{x[H0w,%-O;bi֏}0@$V+Bvh RND6[1N[m=Me[_xoO%dnM̍jy/m+;7ͥn|"5 StM_Wexx,kqZpҷ6~N6suogج5+[μ.nZz2YⳏDNsȖf$=˱ݻs>^|'Nv߮<֡V^ }%z?3|37?ST[mkw4u8ֵ󵾗 I3H|C?ષ~o_ٿ 5c{yְяQy%^#M"H\F^c~ZO2~w\ѣ㵧W‘|,<7}Ϯx?ihdfh|O&LyՎ' 多ګ5NqJVi_+Q>~οh x7~'Ϗ/A4B˥ 5|Ȗzżw(uҩ_%:=>TKߑfi/[:s~в==|Aqckr/s|.}Į,u x颸ë-5oa3j q7xԡ]7g)}];~ޜ,-W_G~O?eߊzωC/5 : /V}. 7\Iuu .6w77iͲ~ b6>.!Q^_?x1< ~/xs[x~UuR=JfR|;\ǧ4kkyos 9tꮷ{5RS׷~'?চ,- д &Si-47&uqkkkj S[lG>X4zR*$zux'[~_55Kk~E日M}f3i6Mosf"li-x~OJ3]%}7V*'/ݴkmںoU ψ^)xJg+;/=澷 GmJټk0$7_W,_4ײw{=ַCPRԹb}컟_W]+X%3j6qkǥfEd{y TJ8Zeemߟ筻G?UEՃmsk;?v|wkfnI"]&O/<,oA-gt{{t؟TS>k;FKmV{C?k9 h<7i~ _K 麤kou$4O-ɬjmwyɱ&Ny*JEŽRIp.Tn%/~/#*Bf;~i:TMx~\侾͋M}tٵdҞ&oS>hN(I-^[]* m.~^O&_M| ҴOj%{#i,m^Mi IY[_y=u}Äq1`k':U vM4?x_|T^}WB]GNy~z}ׯ YdysܒI:iFN-:$];=/{z.jًNZIK[wV} t-–7jֳWe5vhv3?~ͽ-}X'ZeZQ}_ěZtOOojwzSxFTӒ9ᰆm̥rMki]Ό.tO xX%Ʊ47k8!fA.u .i֖)jڦw_h^d.]d}**i=oߋ>oYc-u]'C-[S,ż1_}cMA=/{~nvw?4_'OUk~Om|}e{<|X׫jR~\)QioPh|g#,YN?^g[)%kn#yk0q~}kx[t;NG43ԮBHP3|cwϽoI8tw:IEK]W9 cH{TIZ~wfڨK_-UbJ~nqI?^zGkA-ɶhmK!Y/ʭkcN;5}/JKɾwm c}yោV^BAqɆmp̲ >)l[vA8!$J^֢vp[ӭfWZSڨwN|F{Z[g+ɝ B|#dgX 08u*cm!}Ϧ˃SisKgM.㯊u? h1lZ9mq{Ɵ/﩯*Ɗ%)i^}99r{;>&.dB9:Z%'Gz QZg*\4fmǶZ9Uٻ>wGu~ӯ5FOVY`eVm8_SȴR٫z5SBuj>M=|5hNa+}wnbBa]{ܩm[~EX)Ak[V[]O,/!V}#Gwɔ UڊoK_5F(ӌn(i=OίZ5I.]8͵UwmݷW51xNvPv[uiuw&)a(Fr+=1цH=~Vo׊w{5}ar^n߳=^2/K%iibCp5i6+HlMުcp/Z{_EZ&]vn6Z>HڤuU~|a*BHJW/gѬn-8V Gۍy|>ymCo8)Я Z5[-u!epn,--w24owq_(Sÿqk׮\h֭NJz-eO7`@ mX߭{T[^ yjۚ/. T\ ݛ/ջW~ ,`/˟u&US/קoG)[Dg}IGop8=o?NM}fJ~[|.ܐ}o>W߸IZgKʈ"o}5i % ?/#M;Jn+e [a|/?ww=?ܨԌֻ?`pbN2[ >7W'=;W{_Cpnu,@ ?y3/I[oUZRO.>&櫨I*ȧoϹ~~'aҽm߮? b)<(;Eemp겴FЬoo/_ᯞ%ch޺~xK`VKyXjVE%;Wdl,wt{~PRW'Vo C}k$$dۖTU>ozxӬmW߯Y1ݍ@vv0@7.g潸E__7}VZ.@!W*JQ'$ܪ5>6DM{p>].wtCyogȭ}o:ym}L#$67˽j\R_çrvơ{۶t,m(8Gw]GOw kKnyX$Oס8Ku J@k/xv~+q6-x?ok_絑Rdw'H?jE[]Ivk;]lMUfoLW4(AF5_ip,EmۓWA`Z^75BV&wY\HFuhm&ͿHb!RJtj]-w軜8#ڷ6my[g-OԵ  OFYܯMeTMQjɵktKp%^%Η2RO]:KYP%Y~бC,$swܿ&>Z\YrG[Gg}nWA;9]&u|C.u{8U;~괒'̛~?l|씩ÕEsFZn/C]rU'JGn67II6Zߙ%{,Iz}Fo}5]l.%edoZEִ[ך+/cUMkt,m"ODG9O;QuuZZhĪ%ewmW8;?/ / )[9Ary4^dڭoOxV%Jx}jޝWͽz,?`k{n&'!=h4]F]!/4{ey漌FJinm4w`\&.?]{o,Cȸ[ wneo7;Nλ2w8m9r~\?ւRw>R9s#z >m~Bش+$bN@{cӭmO~oRM_Oe }w^8ԴE,ʒj3G0hWg̶ѷ=~MQR ӊ2}nҗMuW>k*8< =Q5~KS܃o#oonzZ3:'ʠVv㪺\׿um> Ķ>?|M{woIVHY]WOݥ~)_ s6 {9O[ki{_>0֝N/KknMc 3🇡ǝ6VG^:ef&U~]QŒ#h%{wy9sWRVv7{wu H!1]9d}OxmqȇBN.30`<eVlvܑ?+(Tnk.c&m3|-j][Q׷Icxۜ3c`'̟ßV E{FMkC$W?;Igӯer1V]ww3)%|C_󵡺a"4?o>իBj ӥz=0 )qOgj~uo+,N̓6Ѱ!w:'_ݯ&:iǓ)In^GT`Teh7{}{5Wל<x_P7wGXSs&پl+;Uf}4oIeF^my7}}~w䧎@Yc! YT;ߦQwӦr͍e|tEfڻOt0^43G)Y6ޑM}}tYl7,ߺ]dV_a߯>ON ڴ]q6qRU:S?%{|K48b#E ]Wo_x]tg,uh)N_{jv:DZM .2{kfj7"[[pʬ*w|Ϗe:I4(Y̡T0>cMO36_qVg:{k{=9D_m r6mR Xe;aݿkpTZЅ w{[~Y{Mϳ~GĚ.[LIbU_(NR|OdoКհg:*i[_]}~M[({IiZX[Hq  W{ BK[lZcn՘ m kBp卛{2ΈaѽegMɧ鿿1VI GeB_?­qs⦥K~O^ K5wt{f؜ګ_M/_&jA_߭ΚVmɯGjy:[F[b2/̫kZ57Z֯sѤMWOt&D9;nUW,D&u߽x.gum64ffp%3:n6]FWaR(sj€ԖmWwv:U{*aW:-QH-vLŝl\Y|cuh^߾zOr.Vn􏭺u +c- Z'Mтv4wܨeFiy7ļRх#9gVS}\ͅs<-SymHn3x=tK_'4Yd3Ed/~oΝ3rTЦV嶯{~k=*=ZaFiɻ{[C/ C{lSڣF<:MZˎta9b+B=Vf}N_rKEYWw]/KtIo9zfwg?K ^><'ty%$n~fN*q )nqu[dɿeǑtpTNֵ%?%voج ҡU:/Jgg>5W&; |qs0bqrm{k}!ϧҲDe?{|q$[aY9&=*5W}uIw'&LuSOz(d&+FTe{A_=87%C#Ǧ8ߗֶrK=~Bwo拰*&H G'?'-p5&"Mi{_}o Z˖~g߱gPHl9\|o-MSq}nܹ>Xy7@YECYj)ԽWtQO5 }Xڔ[却_>/ߧOsöח\èjZۣWi[hZ/v}BZRVw2b 7-W+ӽECKNbQvֆ@˴*Ffؿy_cR(U8_G*]?sk֫gܛ;5tML+Ohl^5Z4[VXdo`>]U9^o<هtiʧ'ױnPӤ2@sȾ\psy(V/&:+4wiv5 :q]}z|٧ ۆx{}?wuFQMߎUUW(fV] öuMZEL7Sm^vnceqay:Rj˼Z#2Vg5G Iԛ1g_΢m,SKr-{9cHwb'$ٞ:ɱՕ >cJU3wӢۧ~>|ӥ*ҿ,g.Vhtp~Leuϣ^cѪt޺2F8ܪ\ ߻Cg4mSz4k[ouoq Qcn{}?:ݞ(+y[}@6 Pyl[ ?ZGznڳ6Q@9w<)wMi˥߷Sntk~FW9c{Oke9:_ƨrq2rH?nU*}_g9!v}n4=3RQWqN P7m9rhNϿ5>B~|sNUmhќv:~ dn@ycvѾﷵT-wߧ~}<<1Q1s9wsKhӻܛWfI~b=]+hwm_UF+gYE)KrsJ2\`#+qa}޽g}>o^vVhW)$z3{2Vt%)SWqw oNzs|_֩(SWz~zлOv*nm~oTLnw?T[NiMzIVL[!fۅRQ,4%;)' dz=¾>hiOnmӧ^'.KiOc./Dž&2Oճ_=ʯۣox>2=ws |JɄ…3{r%xgGk;U&R;||IoC}oƉsgh|}~>b2}uƧkoqO^.#};*}~w׶hTŭG}Ra.9 H:^_)s|y$O%m_ b0FH<pzZ~7 29ASlnAa=Ʒfծ~'=ikjynNy`Fxٻ^5.zߟS!Co<'X^V+ݝ,*RUz]z}}={tg?u}&Ty͹i ۬6]ξ'\`R祗a9;n/Oֽ)'VGTdZFe_J/y\0jznyN=Gz<ӊVi߮\˷kp[G?)ϯnon `R?g5Qrٷ1X¨ 2Ӌ5kU7e({>"6rT_QsXm~=?R,NAwWD~);pF[ҴgO~<_otֿ~+I͜ Lߛ[t ϘTFwl8y5*J]sJ[~N7=NYӌW?č&@ J~\fҶp{fWo~zjb}|[ݸ}ֈ߿pR2ߗv~e !@H/{RPi~?#J[>bBR[k*%,jͻi[[G媕ӵve[_3_3J0F:|ukG^/JZԎBٻ7bj+zh7w%}7߯ :BH9^\=Gڍ{#0hr6ǽo+[85,>]]u*vW e;)^[~%c*n4ϥy dG˂?YE=WSHsZZe2FC>U~O5nWqCyx.^zxLM*ZՕy={w9kOdmN[뛄>$$ƫo7r%|+bsIo G4[ww|?@Um·$m{vWznKO.;~oHگ7TwOӧ˧̅P/wK]w[UOѥ.#[Џ;eY6Y}->8W~j^`kv{t6T])26x@;/ ڟ2?auvuK+{[M>]s\LXA$*~ɩFSY6߳2N-MO:/YЌSvNϯcOƲjB v4㔊@Im۶'ϳ>Ac^Rz6Guw˕|3_=wk~_Gںfk=O׭#x 3{ٻlo_Wx'~ϋ ^}oϮeB[h#߮{WSʨR ]{]تYT'm7 _0km  WZ|?Mm>w2k} n&F62Y6sahwX./s/k7A$p\#jaS?;W\۟>}_m}5k>]sy`?td3rU5o~7RRi߯kojj7'|S2a0ʖ]J1FoZ%Y9^߆}ǧW>е ۗ-Svۿv#RP6ynk~ZmFKm9_l++&w3tIl]3ieJ1ʢ`UwIj_}fWQN.c-ԙK2["v~˟J0Soo?of^1% w#oUݽgR^}~8*tgz73x[{³ͩZϸ42#n|luĢ__KD+3KRvpzp|ק7;g*kϩE-mvB&aʫ7?ؤ{TNkdظr>n:~Vug?7+_{VkPF@xVޛj=T}?=;+I]MQ%tg[wmj Aq%[9?[5ٳ:I4`Tϭc""M~mq߆/ˑvߗϥ\N6k!m [Yp˘⛔zz[22RᮎΈUwֽOsF˜끝os%a%,}oXCȬWsvWrQB]_C9lO\ӷ9R)}t;Řn'iy79pzpDhT*U_z}~_vH$bQWo?ZR=L*io-/2)\uv}߯]ImEJ{Ϸh\xQ;9o[io:,,SCd`7*Ni #RXw|URq6? <䟻|҄mJQ']$2wd}"⟺8smb'UHUfVl}*;/_!G-^/#k>+ c=siI7n(ӗ}D zwRzRd>P:w7nqIl[T嚳O:;enn$҄DHcą%Qkt"|ưUK[~{;kn9/e|-11W6_RUN9yrj.֨6oo_)`ϿͻZ K.r9ibnqQEnZs+o+,EdT.flgvY8?.ם ޝ}X-gh6=D."xK~i72"p K=5^Wm(ańG݌$wqzռ?#wQ]*Ot H.\~O溡{.]NIuevi] 739 }uZS)7B$poޯPeU:m?ȵ I 1q!2\[rW}"?e5׿oLo{[9,K2G>^ܺԂjߺSz\]5䚐OCNӶ K߼}9G~\=LD7Nt[?wZ.V Y#I.pO-_oȟfތv6]z^g^ 2g95}-3NWO[O8v|*oJq~v?>͜.cg9Sٕ5|/g??3KHf;­PԻB ?=6/+s-)]EIm_'^gt {~6Z%[k{Mu[Ąlr~ԹVSML Lp y=z~D)wolY[*/5m%_Re`}ܯ9+ulr\~ϩJt+ZWmOøl?;r=oпm3_ǾcD5ޖasq 0٭2"wO}}<Ͱ^{Ջk}NK=zi6s0|W"&mNinד/WݔZWyk~U^:[VzzVSO iH-G -[Ѿz7iibhEiN>mkþV1:edLFgIil)_/3Q(sJVm[]/8Ν'K_p^2Z8].co}*s{jQIkw90JrWO~oMTei4u@g1 o~mߟѩ^ӂWwVC -v\~vcдȧV:y= 2m4qF2I_QqR6[[uct[9'nE>eQK i-$tVCwgkwv:٣M>eF#Eum{zlrҵ;r5WqY.n/-=+ϻe5mʻ5R8jaxx)F?ݯ;#/*%EG)W~zI:mGTս}N*lH]Ofjp_g˧N=,LqQsoת۷͞jD[IQB võ|#}7 _GO{syeMGRNߗϽ5MNe$P!f{{7C·8t۟[.okVT̻}/}KZ$^j-g}CN%VEm>4_'7)M^ID<^uZWSC [ᯍ>sB=þ6ǎ%;xo\X~}viG#i_!R(є]{+=ʕzh۽wSc%⿅Z~jqv]CA]u)Vucpfd4.&/線h_0W)ikwr\%Lvj߹Oڧ/jŵǍw|?Kxndicjvn4A}|^2'tkjo?]~ֺm~ӿ&X'ƻxË}W[oï|A;OMt)5-KO/!ԗ^,Moy$M'`85QZkioM^Vu^}7ggKMq'ǢP:}GͫCfG3x?f;wv72m^73q{NV'w?Vf??o M&G:v{;{ż]%RnaKg2B!27Ruo28k;OT~Ɵhzf|1lUxJ՛P}yod7'exJJj>Y]֗Y/Niv]zolBj/jڟ~| GUDO&[6dm'ZLJxOݫ ߂<5x'SG\5{Lu#lmfWvI[ 7a,Rroc9sҌ_EϾ~*!>!? 5]+J&c_m֗2jؚݵh|I!+rĨR#iˤRkW Wғ~o?ϋ~=S/Ż-n GgS/嶙+]?ZsX[o??ۇ!7(Bn\ܚ&丹-3#96ٻ[MO _>kL~ɠX|1/ \-ֺu%1/=ǘfɲC4u<%\'QOW_vmY3.ujE5V'̪sI5umŮf'|p[Xpe V9aTH~::l}{?W֍iu^ʩS>e}<_3mmyݤ0}KXguJ:ҔV?aU:Xx5ry/}S{㟆~ )<)LόUo6yq&^og5f.-{m}4)Vo=W>+1t(:W]y}O -oU{ A_ŏ:oj ZShè\y[j\Mm4"~+Ŵ|]:>jdMPѾMOo٧Exᗂ$/[S|sssL[ RlÖ́rԜlݟoߙuwYwY4M?ú/WQ&iK3LMlr#QN.٫'g|ԍJ;4Of{ӹ/ŸgxXּp~5vP^{WRM[YC~ۤ6csz*pBK[%^]aμ= 4#]Sѿ^w= IB߃5)Cg#Re:Gҳw>uqGJ(Τ/zX5tv}ِ4Uҧ8KV Uczn>RօVF&;{tmKkqFiJBs4: QV{>IFe$y}۳_tq_pI+~>/*ջf㟅=_s/{=+}ͬL#ugݯ]>`vGDN~f&UߞkތW砪^Y7翯Pf9u츨/ku}}e ʻ7K}sÚN_3 Mr+kwf?.Y}xNz= Z_˰ZüY F 5!KϷT|O^~godHYgop D3VV.~;FE|sMF^+ogkvx1.HNMAMiI=7Kg.[v|1B'uy 7}y)/Vo?<+o[ߙ DtFX"*BIN~mCqߏO^10T9Vm_/|ZOdY wmo#3m<;#[ _潢iſM͇! qk%G{h4::.7-R/-˺?:9>xWirǖ*/]*v}ӢO^w ~Q:dq[AiZF^FקDZ IUiiۺ鶿}\ʦcJ1BɯW]#ߴ6'GX ˝k̫?խh6k7Dۯ.YuR{/t13lU^mnޫ벾'4 hZoly4y#c|S흣~rMcN?4I"X.e[yQhReetedo_Y|&%[{45N1}9?W>+nf}UDj[23%vbe=y_oUЄhC]_wg\)|9I8vy~"߻` 2wU8E=5͎Ӓz~w\e?w\kR KU/?a }Qi5Qo?t3sw V^Wﯩ*rV~,( _]z(h搧!U°}JZn{>Ҕ +߶9U|7n?~֠wo/CuTU@|~o|ߧ^9ۙݿ rRirvs.kx98jws:c){i{LpgF3(,ϷWXps\5}ڭߝ̡mk?-3OڵgO "Uev]+¼B_6w߿C0dSVo_#N^ 8'%1Az9^[/]s̭;hv[i|z-F[kW#ۿfoi_q,+Aۿmgߙ+Q./kTyÑ 8:ZӋNI"U%k{}ס$H<>Z80&}zsZ\QO߉? V$qk|:#Wի}nWjLUrʤ'<OƹTOkU%-vׯkF-+IM彤[Tf]>_ȩ^6_^Cp ؘ.U+?ye{E '’j"tb7Ǽ{3Y})u>£`#BqkO_gFs:Iuss'<39 G^޿%fuqJV_GUmϭ;j4gl#%SaYv׊"I7iuY+B*y.LVkGTHeIYYGwקG4ђtԾW3M(_?=~f襴O`Q.o[˒E*gRwv<}9ION4wqk 8-gU[o-7/#_3iOy9N]zw:G[^ y-H0 oWQE-5WAQ)y8pyGͻw?V׮ϫJ-6A伍Y@xv_z{UׅvrwϙkץOc_2b=v]rV۝ҿY^T҆& m߯YӡyM^{w}w>S*˳\5]9=^ڷ󿣶Z{K~fWھz[GGO^4-ʙ2Tsu{IiUVz~KF-.~]I1n;kt׹}-_McI%%drȾZp]u qZ9&}U=utqbt]U+5[_=.$Ѡtdy1c/iә~ZpG^G7qү3却V߮ XùHڳ|JY#w>VZo31\M]zgo4n(m02W_MqOIP[tu#A];]HTUnw~7J1W]?ዩ6斞}OIl?x2 皙R\NΚ6W}~g٦40mwɮ,TZnrƻm;t^cj>5w;YJg4u]S`)#exN3\ܩ5}~5{3Nyn; VPX|Rm[aZ:AٿkۻˑUweiqKZ)IPnWm?}o龛c825JtkOm>wc<W^.]p+Z+#;wO`1< V|Z8Ox`鶵Mz]lnfpb}ٽ9R{-b]&|Ml Xjq[[}vB}c^S嵳9%/+UwH|qqViya%zm5O*az[?Q_ѥy~gGw{mo(ۻ֋ldR*)ucn>>ry^6zk>|C]kO,3lZ34Js>_BtcRdJ^c6#5NJsB ;-W_Um/F|YusuyqYelei7nͳ_ϸTuZWn/3&8B1Q7vKu^i8JoY| U'_]v;`fMtvv~q(牖7( [G$gv5_=6W~GSE(ڷ'_G~?<2NIU={%NϠq (P*X<ױJ]Z +Y)OrǛ!y&mДׯo*pdo߹zekyr[6ifѺ,;7]Zϱ?կ?~P~͟?sx’Imsڭ\i ˏt ƭ?U_O8_\_q-}px Ag/˹B{֯ x+O G JP}նo|gij`&Es۽?WV7%KwoөV1Mٴtӹ_h6xJEf~ZWbl-&U[7?Dd}%QԜMK=w//_/GXyqo˹lϵsKjVX)m~GVoۭ51u5Ԯ~Zh6F5ٛi6O|,nZQ5[_^#ҡe4r^o֯o5!O{<@,Y~|%|6[O>x$_v{0a1Yu۝5Op#Cz"m;ʫɯRgR#Sѫ5{[SK__^ήfyc/$2Lۿy50qS}qЧ;B?}=C4{dR2Cߥx5+JnMnt+%dV7j*w|g;+{ Zs{٥h3BA_?{T{Y_%Mmm<{0*#Eƻ/ʗ;˲Yt$L{*[} GQ<_p  /-wmSNN|ﯧWD bԯtvҵ tyͨI!Fo>G}Gh {H%oo?'c9{|M>nki Rrݭk'/!VM957HnwwvbJTJ J-Yƺa>]-koWc<e@kI &wy%SH$v9͏d~v];/xRK)|6'SmahWw}\J9^IkjV2?i\귓ZWI7cn/lw 쑤}p#xboSŅETlIsԺ{+wlκc)}Z+JѫN՞ _:kڝܒ:fBoaVګ(կ˳2s%ƚ~i^2ܓ {?~o_NYx+ZǺWudG `eKuRm[wlM߃>*n^G$߯vc*T*FU )[W];}gdr\\@;( X˵LbU]Ѷno_2S`k:XmJu*~ j]?Cʵ|>4cVu}'ŲVl(M:5VmvG{;(yFf=\&WFXXJt%}q%eO|xF}yi7dYCUVUkeuo\6rT|T<}7.ghTvoe-O2rJ-Ǹ|7IaPFhu%K2۾۱hռ2y+2v3QdFn0n򍬝_E՞|It*_پ' :sѕb< J*gR_=;y$噲áW2pѵvJƛNr 7SwO'K)A[~۷M{*lġ 2O-7۽ӺZz߯ 0 c߫|{> vq~6?;zs[oAt$֟փtqvfwgր wӧ[=B:?"ߗ4N\ǜ"`OMDky-\ow龢|Jmw}Tk&_O_ԐI2:Io]To^w^2/ X=WkzZ_ǩ(>He1=0)6#x%N}F39e[qC[7G~R< Ur?ùrѽ?{?媕=b˯acup7yp6uSȯN3)vWb@w ( g⢖Z},wwrw [LTo7˸GKg<~|&EJr_}ߒ#a.$`c?vZΒJ,9 lғ܇RP+~$3bqb~鸟UWodc-p^pwz}b(:~<%AE,n*[gZ+o|%Y)Z+VRI*9+llY7m}z._*`gwRrKfn|{qUcVz۷cЌZi̓ñe}:s*ov' v95k뱅J.:z1wT}COZ8}uי$=_\AĄsjƖ+QIp׮e;r_RpϴOSr_f eϹEARN?KqJk7c9t1&PRdz|ފI~'o(hX֪5k£Q-~eW{8;N$t,sP[ʥwO_E8UR$hןjJK-y?0B;9U${8zϣ=_h[<žzV]8z?z_zQM(ka;W v#ԥk?g#]}%P<:<3_gowo_sKu:@׷˒_~Ck(z.p|kKW~y5ύ<9;\-=_%{}tq/u;Ӡ g?2{;Q\iߋ3ԃgkw&Pnp,4qbնwd뮧E(Ajj{'~ c]^,h[= !Ig箽~DJi-M=O4m ᜭtyB][7|s1䝻g0Rkug^V|'3fbo7ܻwC־/ʓQ:~j>_*[n~^gƞ:񾯮o!x6a$o2&_6>ϠM8-]j]x~֦ 1Y{no0c%9ӌc%z[>/Y}n׳'y =O,0ϥzvR7hc*`7k[y_tӔT}^pNrɌn[zk)JV5+c 9fڧ{'ٻbʃqm?7jekkrR~{ W%\=jʭ+{Yp۹27da_{]F4;[߯OBlr6X^/ON϶Mo1ZԒkm^[t]fp3=Gs8P~nQgR>4vgoW/Rmw0ҳ_zyv,m{R{Tl3Qp_cPqJi~]FN ~]~s0NEl%B(x?u?ZvJuFQZ}nET (I?ۧ^mYZEiow$#nGS|g\6oFQz?7{z!6K1ԯ{[r՝M{MCda?[ǿ?bMw[} 9|.O^Ifz(/gg>?lqQc[ۥo}mJۙo}0eІlg[s.}՜4rmu˷o+q;Yw/ojwMȺ{bۋ/H 7t~4*NYZ_u 7|wn;T/yӎ{׹VG\e wϭLckS߯ﯘ)Y~nÍ;JT,=^k._d>r] “/ߧ^7cOZx@R匂TŸ?7qEݻY[N}CR+ eTwH)J.)J͚6v5MQ4w4U!)jgo29'iGߡ)J 뢿ʻK%YV%c[E/umUiH $5~cO׭fJLr唫bMt~b˷pM#hםV,nD5߱ N7o{]~]Tm O4FhvG#k*m$U6g=!4sEckfr VB2#\8?SEjqyu<^׌]>ynbI2~U͉kɞ^k^ERSkKD^S>&xm kŏw|Λ{ܮnQm?hrtŽ5D|'|'g ҷ}tۗ;Lȟ,y+QR.k[s#^u'=%nM_}okgs gI$lyw|WԨ߷x[O)p^02zWvgҵx|2gm_正WZΘߔ])89\{m$o qn@9;m/N+nJ\׾7ٮcInmd|4QoZFtܽ2S|w`x4Ɲ\ڤI]oU;o|YׄFO%se 'uZ뮺ۮhY9/\Sw,ҭI U|F6m>Lq~\2_{ҽQmyg UCeJ?o݉¤o/o,xԚ*/OX}eX >1˅);ظc1ZQm.eyYd?.3Xk`ʐN SP}]Km}$faU:m^S{m%29 ^(uܘV7Om1!K 6ssm_M!(oA,.k}=kGˢsvnepqW:!e1ʲ1;X\?ﯗ5q蟫Y4_x 2eVM+2K}2jղ&D{b\&ʝ~WnWH8Ǟ}^کE՗=Wq<=>^n6M}&bx° ᾿zNI~}IV22~sʷ\ܯׯf'SWyz Cs;[Vu=vh@%NNq_T;}蒽;.M VU؆R՛M=GB`&wq1m$ uƦ2k_鍎J{ןME%g ,8`pHh?=Eg~qܥk߮lٮn4OQY7+msn]S?ΎuI$1cy[5y~_z;+߽z5k~?\M6$Yf€MT|[yس®,=N0>_⨔{hzܒ_ޥv %7\֎Eݚ{vϿ9sþ }j7i[UnrJw/E,rD|sWW׹,zW=֏h޻_d0N97mXwϻddl`[o8mݿ]Fz9>v[ֹw8w?_UkN>[+6wz Va-d߫f3ϥRJ]I/{_OœcϿ#vr9!F,XaoP&~o!PTKӅ=yݻ*en/إG̅p6=?5wk87~֟8@sZrIofpB oVw%IR9/s>V1_ߓ%+`޿cu{kv/FG00͒w?1o o^K|D78??wXYt:n2U ÐA9s"m:9FH]jn޺w9l{z83,jUw;{|W?խ<ѕ`v8ċ¦S'_˯QskteV˰"m򳪷;sL;k[_Iig=9"IUg/z(GvEնG{l hEW44Nfe \^VW:R7VBf`@u>._1袜JJ;3|̪(]7ksU7e5''̻gK ;fy>w]`$i77Oε'qLMhөʹNY/ߏzXecO)$%Q+u1oڹ<`}~oQZ?Wn-wJҟM/MWvzǃ5;:t%q,e }~Imɿܧy 'V7|/Y hNNyolշVikiq[&d NN}0I'ǜTNoY=ߥGxum>X+mrnEҢ[7-o8J,n38EӥQy]5.݊M$3Ou nd ʻvWIbsqcR [EeizTֈ$%#E}U\ ~ߐcWkVg}csFJQZ-Vz;:)<j0؉6D%«7]߼1YlmkâE,ҲvSwO?3{ vO=Kְ,!7dX#2$ae(v^өwګmڦhj}ePy*Bѳ/~-͡iVmuw۪nYҫRKwIw~ NhAVOߺzXҏ$kr_}tθAQwtۿwmt[{{hUro #kjRn/T]z3Ar3egSM7ҬoC-SmWeY[zs2ڙc7 {7{%_9F:7T۲z=[O h 3m!*Hy<ޭ7m%'eT&~MF)ɞ7#㿇~%φ4?CĞd25q4s"\gqqzW^Af!|Kimտ<>]Y[k&jt 6Xdg'|qsyl_>w'BέI]5M_^w4> i?UzI_q{??fψ摡xWԼI>-^ k<;upLMbCu=o> ;o]Ϸe**-7_ t}_V ݑuhl5͛Kԧ۔{mP#_3M:{;J{òC(o? 'u2G^1G Vω]S«qsx,lKɯ&wNJe.zn OAIzt}??cឝBhSx8EKmgV÷YU[oHO?&hn$dp!B#54Y\^ H5oT=|<1^|w|-m~>nS/wu4v^T,kgfXpea!Q]_ y̳4cҍoM[ ĚF&vn緑n㾉O:Hlm-kݸTk,^>SU{[V՞?.S__n/R)tTej~|}ѥo%U ƓyzΩ;{${pudPBQwW~yF/b*(SڋKMI}޿??k/'x+[aK{i>~f~U&Ux-!v ש)9Ǚf]>hlZk:`+o~[Ga[ᵚ(w(1䟌ceW %&޿\-LƤe:ī?M WI&嶟7ےhmtYo&K<4_.SVjokկ^J-t翩읨%-x=T|axM﵍ZCٞ;Xt{?u%w7){x^z2imeIl|Na^ߵWuWNS? 1x3E>('iji!ZJy<+y,i=v{v\FSSݫ>_S1L\OU^}׾(xO"Oh.烼;ZE[,Nge&'uM2CX.aEgydO٦~ކE eU1P~4Zouȥ˥mw]|g3 Ei ;ߏt ZY.|G ǫlriqMGIwqm"|M);;~+m?>񧁝B]wՏgs~em|5|~'u"8,Yu)#I abo?yI^*7Z.{~}-|j!joYKkko\ח.\_8؈aiyf{Ϡí,qSNZ£e=/SK EX6>%|/ZamCOX7ض4Un$_:`MEoEyWСW -Jʔ&hJ~Tmֽ=j}bk Q_s6+앩Zp~^!-_xOݎZƉ]M2ɨ[%Iqngq c|I^oX\Lwn[_qX}h#wtv^JKﶺߦu9fZOn7xY߳qw ߽RHd_?:\SZo߹УEe}O&7=gxKi%׉,:-:}Io%}3 ż2l><4'jf8{F=/|NZԒNy]deK6ݻW6SQQVtooo'~u^Xkφ ٞPG~2ۤ*yo~h%ѩ+֧x{3EjbkCvʻWee);uAdfQumZ1cnKjo֜oTnߎ5V[w}Fƫ+?ieD{Y3 @$l?rW̪{~Wx__{;[ĊUsq>_H2j8{ϚCwQpSBwY ~O]V\׶Bop3dfJ{#cJ|} WbqfUl{جT-cQZi4#?~E?X._$vܣq2N,Z,&ea/_3oaּ|ue/-_|,lմ}'3֫$BFiO47:gF8wMg3ڜζWvZ}nHܝ X7>[țWP+[[y_8NJ'WV=Ds%8m|/=\__Njm_o3Yպ~ZOgl-L`˻^8^jpAE>F[vyBoc/ڗö-l̻5 yڅUS)fe>~+jܥu}Ý9&!qt.R~]uk^7xo2g6RIiIª۾$2#G9j]a)VZ ʇ<~%Qz\/ë_ \_J_ B0nIr>n ʔM7}^qpi9WX%k&W}O-# (fc>ھ":^7h%x;7kW{]ZAe&ݻ{/?_rJMO;Rʱ3t /]?}. ~"yjXF~_<5B(}_gE Wgh\gYKe]3nك?muvWz>W u+/fbd+Ee+wXcYA=lx,Ly.x5]GYcHxʨ"7~wjU^RNߎ4Hemmevf}͜׿k瓔}5yFViKSR;ib\y]7hOvHTFtZe4NȅYw ./~U;Z0{I~>g'ݟn5mG#e:o3+ts+.۷/ة8ŽWM~O-sǧ%7E`I $tOΊ?Oj#_u<2t+y"C0|vH漬VgSR~O󶧧bjF<ù4et[6ȡH۵dm.>6Jy;K 4:Sw^ݽާ5JX.XFbʰǹ_Uzrev]v[C  QvOz3c8FiWhvj26Oz&͛oݣ0gZv38a ޝژ$ru*׿?Lv[[bkf%M@3yFHg=Q>r\!.=zԹ'^kͽ^nVqV ƪ%9Vi{[Z4~}z{;Yl"+qwynY_%e1r_ɷodO jf6޷:|/2t;kUn};^, e~o/}k:M'{!eb_ql5N}"U9z "ʮ %z|w{V]f䖟l~b@ a/SqT\q4|GPfBb@Qr;_*P]?˪4gÚ̈$v7~i)+6rMk>u/4J/dI7+*V<%Y>xtN_ R3VqMsi-,)XuVM˻owz>ٗMY_e~n]ykÚS׭~G\ͤ/1ӯe[H*2_nwɱ2W/~a*)ގ+yRKoV*7;qڬ͏0%5^N_ׯc3YJE-\<~]Y]%N;#t}ۼ۴I،x6:+s-n,C Sk^EiߗY]×u}v F_+ׯ^w~3vۿ= pE-z 1Zt 4qY=񑊴|/bD' STm%u]<זsX<{?|  hLO"6ynf~j&_5  (&ʒյZu>ϥ䢣w־ٝ/#c?OJ9M+7?n|)RI[n_?"~ Zu%"Dhɶ۳|7(RVI|wV-g+C8vyzN0j2u*7U~_jri^kLNϖ3mFÃ/Wa1*רzo/”cc};-_Ws?|f޼ (ݽӣ6|_w$.֭q il*}k8n ̹[5;XNJO-n[eۦ_hz{k,vJA-cGhmw!_gգJ#œ}9WǼ;ɭo4Ưv~ О{J+?<X^Y$hZFUݣ} ^GF[y[[,SyEA({ۭ._zߺ=M@Y"mͷm_S^e Gz]ۻ[W>d8.vm{iK7\Dw?7ޅdo2ⵎ.XՅ;%~CtU3/:uʡexy#wͤ9*U]r3۽Q}lhUnVzd{+_.dOndoCv$;nBPQݗo.k~a_Uԝ[e}C>*ti$>eY$vۖvR+Ȝ5imZwE+G}{Fe#`X0U tRX{YZrOvZ93$`H8b18MIu;!$_4wE{{eB6ǟ֗WI?[WDi,+dKR4~:_!6C9n ͓PRq}稶fI˒FߙqUj7FAYcx|B4<5ػҠ._ğNQ+٭uߩqap2 V_ɮfmWo16ݜ w?޶JIߊƬep#g$m#m;+ZN<ŊUkɘƨA%Z&7}S:E'mZx1m7K[xQ7t{h ^#nNnSm̐!m$go z~fPޟ:mkgqYo$HbҥmYcWo|6";>{9ZW3Nezi~a&|+o7oW|>'x{x3Kus DqY//|m^ܯ'o.GwO̯`{J%.e}_sGc1b/,,[䧪mnzt}OX,=7iX// i<3\y=7mOc>qro߇u]|aq2Ji;!/},mzW7vh>iBesG'߼Ʌ9?M^6xi(Kۚݷ8{"Z, __}tOF/|Ӽ/O~|lۚ_2DkO9$cEgJt*œe2RMލg2 ƖsGR 9NkEg꛺֧dzqi"6: X~?[/k''v'-߿BVxZ%{n<]c񫺴r)ڪ4by&WOٮTԓV+u+$ҼEݵ5;v!Hz>|lY3b!NwUmf#**vܷ}z7o0|Hׅ nZ$vşv4k'GTe}˟kv3ΧY^qϫk=}^ƷOAi=b9YŪk2+Zq"ŵZocc"zCjϒSAN)l4.G|Jt P_TL:o ˽ٟtyiγhu=\ww'qdtrZ,)+ﺻ~~w <$eEs]BU/#mL2XfxLJQI)}}K VToH?m{ =%y~gSJPQR7tH%寛&UQnbL9J3ѿ}jV'-RMҢii,fRH%as+}?NgsrߧOv mPoۻOS9' XIg%ϑ_?IsBQtcU%UT+95'rq}[?+qx?6qǚYIJlbQp9ר={&U=z= >n#le-J?ӕ8ۿ^Umۿ9>8ۻq~ugEEr~?+Q|1w4M4Z}Hy>ae\Yg\b{8kftkrFu<=M4֍1p_ 8[Ny׾l|S}uBO_ف|属ZԺmRY3cbIz{~%W.71#K~}]~޵D}w37믖/mqrrݤ߱h{|q``l>JekWjķ_֢._λ+|g;r;<}>}<}nvo;{?*&Uw`"hѽ_?Ybwo06wjz096tu29ps:5T6WT'cc8#oO S:pN?~޿.^['Vfui=ϽD]H$c1~ni>Pv8ӎzRm-tQ tf+A86Rt߮wkP3 F6?ߥm7N"c[|# Jnr@ eۛ|uKK׿\ r#?ִ"ooTKF!/sT7mXKY%!\ awuނ)S\׮},Kn *<')U5meVߞut\ӟ\:L-[[]":/%kOdTnm߯o^~.]겂NNסC6ĥ-yf(O|>}}Jiek=O2X{m|'b#͸o]+Mx^ӿStm3K*{?_ִ/~5&[ϝ!|@9'w,{Y95oxBo[gc_5yf\rUخSR__k\(T_/EQכ?czx-HZB]s8*Og__{?_+n7?wg$m*s1.}G4R[z[>SzQߩYQ ?'RԚ/ˆ_aA!:A#o?ѩX~uC7#g}wkW&&Q2^YT` n+SYu}]{UwL]@9P,2G/|S\5W#T''?(7O?ZPi^ȶHpd97+.H߯jԶmsך'TgyZ [y:ˁG|ww*Xm>U|llƻTqzԸ[D=&;*G, jNdqu\EAk y翺$ZNtS I2ǹݟVc渫*~wzF}ﳋoTyg;@'IUYII$0TU:ԎOGqتJ'SR󽗟Ot+Z'X6 uVeem/tzq*V_os'Z__.@ҵH* FdE);Ѿo^ V(Wz}}NaRomVhO,x?/ {+9Er?>#NCm**7#n۵uwrK2k,< wXyk1ڿu~b7I^1GsOo?y%֕2Fz97I,r,ڟܮ|L9F_Vp^+U C(UĐUc›+`q}_~gzwSY%-k!Y7+)OVܓziJJ7vqmފrkq ߻.Ѷҿ{m˳aue87u_s"ciiM*ηyt-hҏ>}B?2N{n~߬kVEZ>.rwvG,pn?W%'CU94WW!Un=OS7Y:5VI[ BWoe%v>bG>cC[SռqNm/}(ROfBg1\Xt΢OuӦ2RX*9)sףzfudz~ 9b~bϣjҝ0%f]ozt]"tXLp |´Rkikۭ LWiڅO%~V|9$UO>){>].ʫ y75$es+?I媮p0ہwc{K&OU򾟖z# K `ҥ +i1QӿȰl 6Z_:!+)-z|a 8 =?r;dӊ}{:j+'o̖, OʓL_3{}UT ^߹SQz'brÑ~׷J6_ՈMgVnF1`/_Ҕoku ,s?kSߨ픕 n>p>^c/f)[ _ZFSrּvP'>ץKֿAZ|?`;F~}}iFN#g&" ;rSէfwm|ӷ r7tc矽~n+r#Iyu5vw=8ëQ޿B#*=rO]W-{Vu+v_Qߦ)XrNݼ۷='u{XTW5܁՛/8ܿ/2得R.{_Ȩб6慷[_WV^LCbbp:~~9[gnFwyNf{qp.Nclzh~&qU-\55cw_j)۾8%%} t<0PVVa;}Tޟ9"޽ߣ_2Y*P~רI^?-T>{~\ȿ}~c擜eJ7{]E3^By)lך#UҳFn^eUT %l=dwރ抽l;FX Bg,c:%b٧rWtn¿31ַ^LjJ?ϢߩWʙSibYXs֣y~&6w?̪cW `0qZCJW2NZNgg[!yGkj.*s-m?"؊٣ۛu:TNPM4۷3u/]w:6 |nǪe+[Oq4leI#=Ww=glԭוZy1Q۟ssj_^rƕE+/NV~$YSn*?۔9UA+z5t+߿C:RwUsAۏw xwb/+ E[@˹Y$7vpJ?w﷡ 1tU^קZ5jo.oyXKpm#66ԏSb~5Gjk7yѹf  O>^Og۳|؜2I'moݸskVs)5t^Ւ^wߘB cKwQǖUw.].]'^{99sYܪ7ΛxkʱxX9qo~PV"|OW_X=^Xs_HJYTہuL%l."Nm8;YӷP'n}ߦSaZw-`X_#LUfkqimƼ%N C=^/~$w乌רiIm_{y~z~ځ<|) wc<0~ 0ҩZk[/&{\ΝytG#'ǒ~ݏ;owX5-zjYǕS[7/3.`":QىfWQ.zÅ7I54|@`mʻNNu}5Rot뿑 't(b Ddw~_#2Ꭱ*r+w{kl{Y>qZoMߗTk TIK$j%eg'o_]~yR95ӎϿ>:^e Y9uTTZJʶ:uΨW&+d"Ww~lz# *m%w~-M)b*Esk_4&,'$r 6Ukэe7 .^=O!Tn0M{Y\__}jeee_&?p枟ߞx)(*q[q ]ݭ[zx>;nb3+3@=6J+7~e8{R馴wrh% Sh߿8]'LM /JkhfEn-i dv<5 SO|{-t;Rosϕw>ApęfX&~YF]~v&ξkZT>e__],C-Eq1Kh[/|VUc)Oݟ]*_MS|9=f{{>\[kQfiO q^]z2m:tfXMkj<[gi> ^X<&պaVdwr~x5;Ko/;+)ߡ? [Y}K׏ ޣmA|AǥsMycuW Z^,-t7qo2"rUJѻ_]_L%[B)[s_~~ec?W>]WCK>oi,)y|wy3j^Io$u'NwգBI[WRj}#:gaT$-!TբFEmG%4®eQvֳciXuiJ{{졬6_x_ƫe%.I4صKMsC°sC&tO}$njҝ7U't߇a X?_oO"^'H8Kkj,KEtq\s 0|wC9b]?vO[ C%VetFook?.~񎭤jzrښuoHՖצ.Rhf{?28-}Y%I"Qw5Up|6WkkQG"ԵǨxSM~>+.j[|nG˛9w$w,}cxic(/inkzF/ZpŷQ;촿]>_5s [7xN]CC)cBYk:[4+qyI-:I]Gs,R9Jp^~oU:Nr|M~ϯz}?G4Ym/ćQs } ٶ^vXoC߻gO^P_n v/mg9Sr%~l~>W)';Z7IZ'vKP7um j_my9M36ڳgn305M~F5|~į M$W>K-)h7RH^Yܛo'(iM8 5c$}uO}So/Dj?esHg&Xq ƥug5gkrICjV{8ᳶ j2JQVWOsm?h/4χZW@lۥ,}iz{\_ {7+$=8S \׿R-5[՟T_ St~:]uv '~!_-" [M\}8ji4v2z]^\ZgXyވdMhEbk=g& _zU-_7[_g桡Xּe۫m;zsq\Kvtk<}9y姖N*k_U癏Tj>Hӻk~ <Ek/EZk7x|}wYC7<|~y>xocF&wשy7O%ҠvooNkw6,>2%7V\VZck{}fb4Or2xhז%{owsNDI+z'wJ|{NkxJmG@E޵мqwtH~o쫙% jV~y rD .Voo_o}{..}/~ԯ.luK=buZN][^Z*`n?g qY.VB-tp_uy:2 j"m;/yE>}~ҧ+#ǭ|Lx|+/3WмgizlEQu-\%ʶq qJeOApW<9+']dV5ydCuu~^yR累 5Mu/◌GPC {wZh h3}xi1|ǾNk{[dL8~xZHѨ4ӳg~qSG I~ͽt <5Xu'InuAKU_Fwͨlwpj5Zm/ﮧh9/rVlk_;_ǟe|/D"E^ky~=ym6 6_Iq"[&_XKvm|VQߕ],".IOn[= gGJ6m*w}wMgiAq5 3:%\ȞOwydhЍW(]=vzgYTiYCUW{/[hRg He^;Hb%584aMSx`5~4{U[weؤEI}߮IJ5I}hw2G-co3Ż,*zWRxz]O;!Qm]6 *G/˗>exG^Fz)%졸18Ue?_6S޺uOgxNTa[XO*1+b6Y+\Un`VOݿn>h/ku]ՠ-9n?F9W)^,QJ3-_ϟW].9^.ik|CѼ7.5TݻI o> Ng9c1URRV^kL<,V \Yh0O_7۲l_Wˣ.u /~6k{/5h^ ,?N?5}Fo9<$/'n$ԪJ=n۶+Ί !˺Sj~,-k9$on_ ,|<8;m8e4y:g ۝U$VP1/25ﹾӯ0U=cmY~ ԯ ܪ=[.[T,|ӻmylr>{^O3 `+|=JW/^RשgS֡mzyV<#v*Ihkg=io,ms"?᫶{_qՂo>Xn.kl#Si4}[w77Ji&_[kK}<ς>*JPu(-lbR&ݲi>S:ṵ]o >+9m%o=n>I1kAFX:-k ;D3F+yudѢ `G}zHr tiY/q}fgTm{.֧yu;YHd܃n۪צ7*UUQ\Z,f&:k]ozmY ZG~Q1G3F/tZт$b众uw?γYbի}~N.Aqǿ8F)ɭ-U&シNа pFnk} `}認ZwѰ%r [*g5zu!++\(m6Ҷn6v~\~NOM d|q==kMI9=w/r69vTe~&QrnX؛r2q{o_ ɦZen|.v+PnשU'7yY9W, uo/A'˯]NKWynY~l?=r-9jrkvݒو=Ie_~#Lz}[;iMkнWU^:aI! |6_`op[ UGdv{u>JM+N?Ws)u(!6C.?ʻ}ιQsi(n?+lj׫|_2VkV#jڿ36w_~IН9СMH-uZd/COf7:]ڍ³3^FM~Xdkluaszfֿ u26Q -N w!9|}Oʼw7ӗo=;Y)%{LKcnaʎ?^pzm^"Af I>gxZFI+?f5dדE&8\sԃtߟo!J%=uܬ7JRW8mG2t]F EeF_k_bsn/}种# 0$˼>\},oek}iM-}[1(eDorB~m{>VvVOާe5֦$_m7O;ߧ?cʖwA4SM*3m}ut-e;DY&UӯP9GfLQەGg3!F[ikf[e* *w5v֯GXIB{s}jUG5m-ٵj~Dfpߌ0mvc\ѽW.[uD 8wn}N77$ߨpߕ}Pܯ׽t!*vco <Fpj}lB%U~Vwwg}[-˯s'F?jb #7Oz)Ktc_Ww=z芥0זV_}Y4wk~dBdkX+w*HS/_ƢGY$/2GGe˻rii~߭{9 <%DKirIY9|o?~MWf+St+ify;}-FJ-$.v]>V WzP]Au3 i,ĩ6Wf8~gT:qHiྜྷ?flFZ4F+Vhmokўm$m9g I._9ݻ>4k,:8/0(駩rwIgTV`bW9޿n5NR_5c*0,ڴS>xDj~){vHH 66~Yeޟ_έ8^?ywўwG RQڲw?Et"Ha1 "@UUU4]EEFvߥ-w?εjZI>뷩SSt]O7XeeDߒx|\Fmޓn~g <\iSI]&ӧx6LSh^WQP j+H_W_(*ʝ8߮_ufY&q,Hc{6b ,Fc^U+TM7u|ח{~))Ɣ)œbVW=4iᕾ;\/yӾk+Yw=n$\Y2 Ncێ2>_3]Z^\ׅU;6-_zN4ڄ]nPNVm-?0Qo'f2ST&Gш6dgr2U$|]_J%N8y%e9u4:~֥Is&(^׮'?j:4^Xi{Y'>}3W0œrr ەwgxx]Ok*Muy3qoUWU~|1lןZUi5RIoXerBRPIYj޷~i"Zl5(j6]D+6w#n~jܒ82I}Ro=w?2M^i7*11YIQ~PU+K޳҆wӧKk>cq8 rض_p[׎kӎ!Z8VM+&zm_qP*jҋ >gi5} %Ua>okyh^7#9Z|nvGVP?;t<(QD|3qּ.YGek|iJ-^z)g{wĀ 8B|~?)g]I-_ަK3obJ1sb>n;}{wW8 -2o1Oz1徟ԵM/WUI~n7ϵhG_/3DG Unw1}?5*vVJZfi5֗LgNխot/Q ^dW"nU?5wкMf|m =?^pwe7bRA##H3V3OW}L^wb=D.ݧn5,]XԌԟN9muFPF;5.bL;F7hqfkOԱ5{//.lU0t%QU8]sQNDI;mۛ+c;pUͱSZr{ΧDy8:ca)BK`c L߯^EjeJ;n邋o[s5iEbۘo>z減mf鵳/$Lہ^}b8# lf# =5ׯJ-?̎{K kcE aoꇧu˕og1d;ۦYU^(c2q<P=،*#6O㮜'`'env~eB4_}Uc |: OZEms{nU77Fnoaa?[ጷ UkJ.P\SE[gi?->7qyUf>YbbI4|ϵլwLKׯcn27%~koOf}3ŸPaiiT[lK܌oGr`8+_^֝{m~]"Oڿn4Zk:ߍ#i#絆L>KFwZ9M>_X՜'\U8CiǮs\-FPӿ+_՜<]_~':gdX+?5,Lȟ$fH?;-'9*bZp8r(׭^LjpQ䷺yU}uϬ|~O: E Yh_],~f؞Os쇎ڟMJ8j'Wk^~ύ8yK,R:uN^KG45__4C^ SYa\L7P3">/gO5ZQSw\zs_O7}O8(V줓t~y[W~owkZ)S+fH&N[iZͯvI4NuG9k'NմZ꼭gyf29`t_wMy{;Ů1p9!>my|rBM==?4U }?Tvdᱸ&+})Kiĉ:rIrUxP\2fm.EI;ؐx9m2qn/Y%n1R$ӕզӺ4j 7??oH YW^kspg=sӼey;VvUVNKyslNJJW:H*v})݀ >]ӭuFڿFNzky/1bq vs)mܻV}EY d\9h[E*;_opqp2rzoTm4mhODnNBG]hg,=}  ,Q)-z[J]ZV9+בwj}_^w8b%wtﺽR,/'5SWkd<cۿ,y$\*B1m}FF`pG{jDT _>$ʰ YFN=[G_?͗Vqk{zR `l ~_6rmJ)pp^ww:^{yn1O9 ~N(RL _KNw_2YNzq|kNˑij{i LsIks7{*,a7+?OsU ˯sքaw׫oӹn[X֜6ߥv$,pޢ)i_dR\^>t#8ޯA%-< m8!v*1i}Mq3Uuxyy,?nN&U_8Û޿b9 lל5~:c}_16w! 'Oʿc8M?[Ƣ_TK.FÆ=c7{2jBU6w鯗_¶rXgwcvJk~:6T%m{<1=N^_z˹.k*''ro#jovߩZ{?_=z|/G_ [ne)-x/ӵkg/ yl^6׿2N2ta͞Ԃx oF]7G3m{Km{ŠTe,2OnS^]L8 Z_w^Lh8o wZO__zk=c=8/U>Ax;IXW Ok gK1~O7hR38[exuˬ/t,t:~"$={9"zXl料&+2Tգ-{wϜ|SW,G͜xrRK]~%osyONj.[{]Ď{ \;owrR)}?3oVvrU ۷zNko~&YKW5n& ,n c;Nkm_3y/ UE7ny'k޽&V׹_~ F1%u-z}x_TB%g ۶_](%켻}-7~_/pN'h^8½XB=] &*'$ˀ~;Sn-;[ӓ3a8 MEFK_wݻ9*XR_ZO}}F6@ zwMn ޯ~h؟1gץ[Goo;y6]Fr[ܻg޴fdy~Y諂FqOdߗ"jؗN1>{?ҳj˕w >_ų?kssLSW_%T7uԑw/RϿVgMUew$3Ozh=:j+{TARnj=se ;ʸ;bhr.۽kJtWWȭN>⬦BY0n3)_ZRI~o%Cy|?sYeb_YrꭅH}{]{oE;^|U }{ڇM7ys~}^ 3X:sܰ>˖ܯZyv۰%cӿj͵kiק;4__@KnN⧌d/n_y-ǩqz'}VV o+3߂vW H 7aqSpwr1F6.rosISZ~6m_27}=GK[K9e'nz~]yjjo_Ou_~㛜ygi,8T4ߺ_L*MMo_) G'il7gFF_{b#\#=ۿj$ޮs>oO=߹ꚅxWyl(Y+v=ZSv_~3 T=zNRw)C'voD}pƣ߿m1HoS_߳9y%FWVeZqRz??=BU c}SEFެ[vN>o֦ܲMsʫ+n1`Ul(_Eg}Ws:Q)o~맩l7Gyu]7^amYbYcф2'mN]=jQ&jߪFmtY\Dyěv222V{biNQ߾]4Osgf|5}tR:;?龚(pזoffN}k׻B o=xPtkKY'ZmwבR{~7kNT9^kvyqE{C%ޏjq3y%jʿgi&+?yߏ~ǿ3`wk=6x7OqhbISQDm?2Us9M ѧ$M~JKz^Gwӈe͹-m\תΓ({Zsiӏe/e%qu~[m?ū[{/l:KKx%>bwMeUݹd<3mxj;*JޭtWدnbHz۶a˶b{fy_gN' W}ֽy~}__xPą+.T9ϯG8sMm`NJq%_H{K2sgix$d !prn7xekϩN^|~KW;hE]ٿ^6H5Mv#X ʲǼٻܢI6x_G{wY'H5pjtQV[KUf(/$sm؏X٨?{|, 7r]LӇm߫V,y~$/˭wG_?͞}H{-/K0u)淌]~Fw.z|ȿQN_=ƱKY\Ŗ$>@]ʻ|m}\ݻ[Rf#de}'w>JZ;jMI{^k=hH-@ʻpUT]J<~8UwxmWB1rV8Ekg|ӊޯO~7{|%luZR,v4.WiNmzo[/4$NoResEo0o9$oܨZrz^}t.U[_?bm$mU@7-w։ɤv8ݶ}7bP ̻yV j;t) >-""aR[nxM-w_J^biH%mc6=Zimyʼb գBF)*~ZƤUVrk* vkJ:ي7%#s7v;kTDu~]y!9뚕O۝Ep{[ڦuomMi Lr?YӞo‡iጩCk%ID &ԗ$m߸.ߕ>*rv;d 22o֟&׿(d6H"I]睜ց)V˩ {|˟]`#}mj( pwӊTO?ԥEuL' ~^>m0gyGOT!.e>-nl=W<|ߝf'{n1K-I*6^y^/gwԊ'Ux }AmSm6BdF`9]I{UDzYY/_.HQ=6gWϾz:y*KDUA^ťorOoWA jTţrQpNۿa'l뮺k/_0HKdc7[|ДnӖ߯oƾ3%11݂wt _FqTRs"YI4c}[kKlge)۾/.M ۝Ae[Ig;(-v˹7/leJ{Q<o/dpaQHXܪͿk&>BuWiMw:gR%ߠx, Atykvw׫0T\>da+>n;ui7u̾ԺJ _:&{\/ֱW^v6y6]IJ/_.FI_sm[w?Z^>=|$k_}gLf2Nd K}[o='޿RuZwtm$^HIJLRI;KQtoͭ~[XԮ>w|Mrɽ'MxEU[EI2;;YCnV{b 5d]'HJUQn | |k9FRvZJVw~zvLȅQ0l}eQZ/ӹ +Nfh&X*Wۻ6N ;܊믯D2+%d#P`9^qf]։_cZUW.*b7~~MsIu{0mSzKIr{^5YnEY;\-yfHcW|ϸaP}3sM]QiԥNS[?4$i"A?"bҤ9-^ZF[ NKA/;E?=6sR;*K$LsM{ ~}˚\8(k)۷O,]o&bvlos2]q7G]O} $3{Þu_tٓ|i48*_hk|8+՜[jo?^yَ6xXSɷ_g4yGRSKؘvIo6VFZ9~MG͛PRxNsq枻fUqά'O%k{?5=k١A"o_}zWdYa(SIJ_ VMu>gVXqZ2m7]s ִ}_Zt!֟h(vjc}}S?3̲VeZU][~2\w{7]z;ei3n [OHK7{cw*UGfi?4}T҃&uԵge}jte&"oUCssֹƭ{96-|D\ j_ozSW0i6w,U,2m̓wW_Mc1t8Om)(7ic)=YCD=ޚv>CKZ 9̷BI _X(+^rWw_[cq jjRR؂T5~']fcg7^Re_3Z0 FwgxDu۩ B#*wO\g_iA/i&{2K~XyeifdnIjNy!rnR2u}cwmdI})oeVKE|/Tr=ŗ,aF=̲]|GZoǨU)^_O2hWjTzoѿ&׋/u;淋}~e[.$cdo>~눱0:W.mmۖU~% +O|MwWtbC4I4Dqio4ʢYOپ'1q8h4yjOO-Ypl3}zy_s:]i/4X[c:r=+1SQ-!;ke9miNo] cgRBC2Ρ7cǙּ/I5׹-笠Y4Q+GjdX$sg։bn2}3q\_?;<uej~̞"Ccg$n!/~W[za?>![iwb;+-sTִMAuK?hȾm7mwtFXyϕ_{=H*:m֛Q[gg_ٻ- on=7* gAu-*K5V4/25dDm5| n thjRTݣgvzzIK4SRI({Z rn/wvjjgW;<=zޱYˮy:}Ь>DЭ[\4qyMZ |1t+bx)[*3׬֩<&ҼT棣IϖV}E<mW=o lZ-ݍ;9.KKm,f(/mm $&)&bMWio}mߺsXm_[;_}6?h?}?E1ڍ40\5:#k];췖!ںŭoNoW;y}ZۯF~g{gH1xhh>1"\CwXֿnuk7UaaKoipW)J&_˳!S:[77nT؇⿋Kue0|gc8_XjK~41G?6w?C kqW{סwXZ8:lD~(W{j6>n{~I2]jQ]:}xX']68~؎?6cdײz访j|a8c)?]۷V_'xsh>隻qwy}V4[faϰ}f6׉knZm6S䌺k<3O iHAv}-_V|o e1Ռ)wz?]:?.w{TS[Gw~ReuJ|͎?1+xDX7F)Fvuׯ]ؙsT!*T맑#L_#7ᴎ [K涷 Y!O}?ORUoos\†PGwo)~សG'{dox&D΄#G& %5qIk y&|lI2Q߽՗2N0j}Oۯ&Oo;A>=n:/|A7Û.O5m>&W_kmCoqy,5zpJIF+n|VkOGߕ~O37ńԴַz%޳y>FaaZI5(r =0|:+r<^C8CNT⤝NgeGfbQu+p7.=]?:~z4[.vzތn[I:ŊI6qa\]gQkeN^NX<-5tyyy1w3S| b?7~|#B'@mmjmc.h׬_.I-7Z\4TĻ߽3=>U4{=;u_şY>%-:^|t[;M-tM!󮼘aHZ6빛Ώsy Ia)"a_|=j$4}ZC5[mbhla-5%Λ`&oq6UQt&(H<_yğgxAxb\Gs:w2Ggy7xܭ)4;>f`BַvG>8aړG~|d]o?G/x%"c+?rk$ 1fϟ?9~wmXj9WNWH"$+ñ]&t|[X֠U%Gĥ]7LLy:EM-433}ѷ9s^zst<]>Cៈz^Gڍ e[c/OQ]Pi9-z (Nܿסwzu{M{mەZ[0{xP]KVz$(iքӈ+Gp>L JoMa*^VC╱U<5_ye4ZA'EQzU^# ׳S?+%sv ^W{o1u?[=φ~0Ea"+ci0*oq qm=L?֡oi 8i_3!w߆/_{i$4oZE$x5U83HҚzʎnս{?榥m'dhx,)b=$3BHO_hlvJt-}:gj+)'nmm{>;_췡RYqI4˙㍕ ,;J;m58QLuOi}YO3#iAkx^wf<r_IխvR-ŝE4JȾ_7^_=v4^%nT=/m#3ΞaRYCF)6\ϧԒ–è$m%ퟗ/9WO|6)JSOK?C^SS 9_S/nY Mn6ݷv2YB[+_6*+R*)FE{_7~]J'7CҼT"_;{}}bVB/٫;}6k *6[y>|# Y3Zdv6"wdY.=ZkiQ_emRA+z;?%V6R^6o?^@ L碮~P~_J1su:}_aI q_+]LD< L/͓*TJ~?~JUv''dcon?ѩEwg:rޝ?>>W2:;[ϮO_wJ {-#';+zs嗟}7ws2e-mm黦>\ymuG*Ҿ/ƹG5QQk]ݴs͸wzòz\%+m:T~zIr\PVםM2_-:Ϲy>ŎvkYk1Foos߉+L]V+Y*x3ڿ :X;k'߳[y?snTA˻z?>s'n GWw˻uxyugF7~J,]zX,lm hVcba_t<օ|~1w_]?ϰ5jԄn^7rx_c/5fӲyq϶ew)$ۓXlneT?/k~ ƾ% ]wY@s'X(]o_SxBʧ/;O}uDʎCH?o}-W~QBK鶯{>cw**Xp1o?6լgJJm}յt6NQC|w}iI;~.*Yv+nY[ HQ'Xo]mSͅNӶ_.|}ne>c}.KO[O&v9մƪ&wY^߉aW~5ɉƬg%];m(A(4uzi> naM{GYIbU,s.j˅0u$nOԾ JM4W_s,f,LhEI[HҿrZf&JRkUc╎&"V$}8J "Jl,{Ӽtdu}Kv>U%;;3E#K#VU_)N)ÞW]]z9n#{}6qmmtrG24@Uq[aQG''9/;_#oxOUBQ.n$_0\}FmRjE].ᧅ9gwkiY9=e7+?o?S<"ܒRjjoYZ|ӯ:)IkͶW߯6m3Rۖ+F {n<RsNSi:km6;{x6qR9S[>[<Ŀ u{]ʳ^M+|QC,G -Qww}|pلJf=95մ 9&hS]ݬ $.Św,ݢ GF)sN==:*T}ko)bSt>{:{~D_gvޝqrFcB{I6TBO RpV}~I-ܬjskRsӧN:Z)GKlލo_7S&}<̱pѸg'rH#p=tVRK;:1g[[>-3K!kxQqϘ?mbfZ?uեUiF+.Uwet|ag~EYy'[U bmŝ2^/n!H@Iܿ1n7o#gQ;Hħz?:/X5^exy[~vd_|A]t~\~&}#;X+_V2Z鑳4Tݻg_ղ6a9F|^kcH[ǹ摗jn3qմv5NZ?}1e\#HWZ˫{^r.CF'9dfeaw||u΅:M\‹#۹cw 1؛IN6- ׽j՝8>v+mtjg΍e;M%דa'*HHGϟsG U-ypԯRUog O2+:|t+^yA=i&-;Q}7d#$H>`0wj-i/yu[\ ۹KYKy]?Vr2\^^+ߋ.y#Iwܓ_5zZT;q%JoˏHmzXr~_Ki 0\:WϹk]ZD&rfDu;|ۍ̘v}XpqV7wRGI>ֻukrm~}ڃC!ZF$kGsǫ͝NSTgdڿuxn⧑^CQJ=呔7^$n5Fp˾օ#`@#.NOT~lWڢU%ezz"Q"tVr)To[ۯ ~*.I0_L}ԝjg*h%[׵l_^|- XQsT軦wzdb:z̈́q1w>kd1zu0q D_;MZ$cbW~k?犸+kW_һsXO~je&~?kſ>WzH\,_~oVm5nU~lTܠ}~}K\e>\'׾oK19+f{}_4ؒJyߧZD$_> EE^OE$;?Js!VmF)W=LO>z;qaRvVNjTv9Oc3ב[$ؿ7=JY"3^#.}_vwק]:b崾o'x{L%Fw~n?4b躞^#3>j'KN{׹G,Jֆsi|Ln1pw7w-^GϷ\9]IMœW.4͵Sq}[<7O,rVny J~ c"X:im_֪zO7Ǿo#as11V'nzL| 3}DWld۳צٮԝ=7O_3IOuǫnL-W*[mVgi ^N?*r.J5MJPCo+K__ \V?PpX(`OuY)n{MhvZ۱YXTqG^|~O3Z^w3!;¶ wz8i=rqm@9zߚFj[| pXn߭4tW;Cg N=8;?̐>InY:7 F nwz>I4:)RO]|KyF9$ No? lkzI<>ߟM8)9F9bʁdevϛ>iJV%*=?=o/v@>8(qk'=*SqW^^dk9!l^Os/hLq 'r?^~rq^G/V-mU s+st[‹~_O?ﯗZm'2;R S{qBIlsJkӿY+d~{~o\dz_q6{ޅtw trz[שySvo>L:0Lf5}:Z_1/#ozKw^j;r6 3sR^}NeNJM6/$}{R]ծ' zg9P Ŀu+nD++(һè;?=jZ3z2s]RhmsՓ͖[w_V޵I-UJo^k]fKXhX^βӖޫ>f r1rTa2d;|#deǰVT[+pT_enąyTzwsR|wn7 2Y4Ljmj7_u>4hsxM_a_8"hsnoM$^e=4M?3GHeZu>Vݻz?)Y(_j%Izzw=:rUlk=vy߇jȈ-c2Yfo;Mּz[xэ:^d~GA$>&6B^s%y~ZeEfY#6Lu^]htz#-K/>^פ^ 0ĺͼ`KffWWsiFIU\4+f %~k._w~gMq)D*GZ,iEI-C9T{Ϣ3.V-?5$g;\74kjͱI^هV3N[fMJ,6Mܟ6IZWܖö6OP%r^X"E_M|hXW̥c ߚtiu;9$-.ђ?w+B)7V*މ5}6Y4놂OEt,Ѷ;gnxtK_Mj-"k\!usl*~]ٳw$tsCmg_46Icxeݹ[k+Iu~:N7ӯ6EPkxen"#=ͱ_Zੂh[wh11[Ж_ݷ?LVӢ}U qWRw^v9-6AŸyw:ݻ992!Il};|{DpkT'f~{8]NX`mBKK (++3Fʻز)RV4 Eۚw[߯ޣz{.{ (~Y0۱Zd׌_OS*=vߧs"tG'8JSpO3{_c/Ym+W@W*wn<1ZjkOv`{ܥ[˥yabY5Qo?M vZf~]6y[COasb6"ve~Y!6o+3uV-kzghpjz%ͪ[I#ܮƳ˜⸓3B۾w޹c6f;&\}UׯEyhs4:-RI*MܻY>dt>%vH_y/v&oZ3_]*NCI9Gץiʯ%z6^Ao-[Np<+?٥ JMh~ݿ25+K>%*na?oG#L9<?WuU`OC~??5'wW]F_=E݈'Wl([ܼ+tɑ9FkT~?ө0SjaFC~5\3s얝 !Hez`}ݭ}k7RK5W}]H`FXvK|Ⲕ՞^ܥ^/L֯DZsSޱz]刘<,`T:B^kcU}/4?*Ǖ#msXInY%o& @>皯iOy7[WR )~l4d˙iobv;D` 9 v{r.jڽ )BKӾ^}Ěk{di$dlcggY8J_7sUE8קosV`q!Rp+}jmIG~;N$Il˝[r>hj|} %3.~|6ѮT׾S+Pѭ\O2E*)-̭;;ӔﵼFW7Ewqu=&SJmt)}}ZI|M~7tU7}=V^'B<9ߌnV6e?Ǒ|٧ySR^ۮO\k>`k{->aeo__VQ8߻ :S41Ȫc۵&r^_n Tw~rFf5NZ%KW3WkϡE(/%7˲J3lGm;Z:6m LUseo1}Q7);t~7_RسZcX(Km۷;.A{*[uMV[ĺBDep6036nYܬTin\!-ڽi}5nȬL:#+M=꜔N;K-77͹dd[VM#7敔_^>JNOoeg$wriV&LȬ|ܷn}ΟDvISp䋷C]YZ{$1II$}WݟvsQ.I?u'e;{57W{%"`Apϕ%N?iw6\I_V_?a la/ܮVn-Fzui,}[: ̳C*nپI99[r[&&mS*̧迺gm5A:OǧjIz@fmYv[nߝӪ^*Q۪K]m.W^ߩŧyATnmy{'$zr6O_9oʱ![E *]{5boi7O]|JIoth_hvwݞTj'[+[i^%|6VeHҮgܿwgϿ*םvfF؆}rфzWk|˟d(OM>~Rowmnԝ *~oO?s?ZҜ>?۲"kXn$V.,T<럥Rz_ORWZ+b ܻ`ەOjJs*N;y3O/qg\뚥$;{ex@ۑDx&>_A'd^[p']B2M~oڗQ5FtP(ݓ[qWb"MQR)Vu]4Iz}O\j*XOuOufޚk|__[KLXa]/˷cҡor7FUF4oޯ{_}wdw(;/تZMs7{+Vվ;fzmbI|8fUw|gŤ{_}$m1KelC홊/]Q`Q_~^u62Ӵ40+g'|ߌ lK_}]w]g6'+ZJroTgܧ/ki[-IFvƿ|7^?=+ wos{a˩)F-[^vo~&Edݵ_Z=3Y>㟿ǁ(ƔUķ~|%EUT)F7Kֿ66wOp[{xݤ!Kt:UnWvwﮎ*qNnVm=vE O7Q&Veo\ʿVxNiɻZg{u9)ӴWw}ե֐Cou5W(ib+6WR]NY j |k)Ogor|?F5NͿғ0ﮍ='~t+iZ$t#DXUf^x-|g.7Vk7;QMzq,~d6؀r|wV\תžZQoe~C n*1R_GeugߙI}HwF#wW *ң,Y~wkW z=ajjO]40n:n?Muz~9/Wlmf x 6ܤ빦o1_v|QJmi~kOZ[E ].)ku;V~cys|eJI۟ߝ&(S{ZuԟLFo6Xd4Rm:ɹw2yuUtWeUj)g^ ]9E8Ӿ(y kgDrc_i;+WHfi2Ko\ZpjJUUy9^'W;N&G]T ^jQ0wXmMzu{~ơqn5R%~n=>rxl><ܪ5Gmw=SI+iy:/Gxf{ ڷrMCE죸Koi&Ef^]ĥBKm{w~v"cFt`mmӿ uY?oO+_5+Mm ~'};Hmc[]7HdκɶE&!o*yqYq)Ѡ(S=; ljSrQom.grϚ.|%1t{~G4[Bka]O2kf&p%y)-8Q&gx*9RU%t/]VmwԤK{7}W>]%<-Bxĭ/9uzRMG<$7)=/eG4ms_שu}5*ԹIi6#R<h'z΋kߊ4[{jFN ;9xad?y99ڦ}|2z\][{>?G!B]'gj:y7RZq<ˍ@[$1G4-5}6(SOѪ]2]7㕇(ʣi[nv8*˙[_[OxHգuCK񕏈<5Ei}kcD2Cl]ɷ4_Vg9]%7Go~W?5?mo7ş閗^͒J+z_z5'Mg-Hæk%4rL{x?W\?2}h}<{I%f7_ f~![]xTSS`ihQ̑ƶ|KU<ܒ{[jY;6Tb~XKdz?J5o_O5$z ѵ ,p)wZۏܭ'MR8K`@W]`8”kSz^מ5xkN,~0Z>ៈ.ٍ[T״o^ ix&gXQm3R9MSItۣ_Gf?>x>&[A'>$YI{mnOw-ip7ts~m c/9&¦hy%=?u1!Q6+.NΟY'^Kt{"%y32GyR{Ut9^?{ZEsrwө7^۲su2ͨM+LGIy7 {|tkJVW_8w}K}[?O__Ɵ$[h>*uyc_2:~m/_[gpi (G"[ϳj RT~|2+2*0j6w? [#<_r3GM$Zm_^\AH YDM?:nM}LJu>dּJ_1P6zOaߛy\n<?nUVmX$/ߘVl9uOϧ߯ݩi7i~+K+xW[)UMuYp'WOD_hC<'(/-sέ }BbxvtceX26_nUuGn-#%$S9si梥.e~]6:Mi,u}jF2X˴*mmv6]@LdF8{wl%eo~`xW}V~)-Ni4xORjW26BW ˽wgqںれOO>>`&}g7֠%8DW,QAkO~8b^o_xǸ2cj1 f32ѷ;z4Ui9kLs8-㹕wXhv-Tjihx]_ʪϽk|![\xs_>*nl.->/yjcav?muN۔aho\BWwM[V->#geMW7k[iXئ7ɨ wH5j71I$}b}QSe |>_>tByVÿy_iXY[daJB) em ̾Y[|ƛ}kիu8J{n~';VE̿ca_ϫ_x혴XkH"ڿؚS IZ{V6{W]4N᥽,׾]ECҭ/|<)R 8l^X_ܺ5S<{+P:|5}ci6Oy,"Iw#ĹM{F+[{>2|58*^ڔO[WkFkW *}^}>@*TMiUﭞ5$OhIҧQ.~oEu{]׃%Btg[[ZϪOuD#v{Wf*oϽ|. Umijcz3蚜,II̩}ߓx=k=%n:dy3u5+jj|'KU~㹬%{ߒX]7PUL+.*~Am8~?Zd巟R‹ IC+}ܳG6~{huStn e?2˹Ӟ>?N~UIrSۢ_=|7,Fpav!}?Y4WP\v3u=6K5M3UnHI9c5iz:JoB:mQׯugj3wi>D<3j-I:BL;_b5|77{tSצyC VJvQrK_ Wrimm:sW{9?\ mW\+?]`1]&'/˰/N7S=w7k>~6.u/P{[,=Ιiz{qVe6sߥ,ޅi;NZSk{NI6Fծt[w9V S̻X7~"eJOϿ:)Yn~34%-&w޿wjھop6s1eI -}M_ z3`$۾4 #pc2f~ףOZTܺwZ#I_7: V`weqYiJs-n~z#׊OOK~::M! .#9/z﮼fpz] d%)z]̄[i5yy]]yhs)ʚM]|mz;J?UxV?1u[oxx*9x=ӯ~eJU%](ל?+[,0˄$88~U/9_/*{%e-Ad Kϕo>Y#}߯jU~ȓmUZഄ)0ϻ c,s/OJFmy rΪʝzݏI9-נuٓ+yRH'^9Y4#0\mҀ4pۥ]acjeN]Ma-X:2QeݾvZ-_S6wg,B;q\`\,lGɵE]?;x$&VYiSVq:~}x3ֳ,ڬY|ߴQLѦXdp|WbqX*.eutW۽ ^1¥J~%.Xkﭵӹo>gDEO{m,V[7FUpSmzy~Oq7I_H} Q4PEy_zӕiK'g Ԭ '&q}ȿ|esj;h7O,60;YO&K><?ҿ\XKFm;KgW ?M,`cjYXW͞m>rU\J۾گ_2ݛʵϿԥh^ONMKR9br$em3m_Oך|oQrŻ/ #J|Y[|uyt5C}]f@-w,($ ɦf_U#_>jNjcd̟>jz|1تx\3/s;:oWZ=[)g{YnH՛fݻ{p7":ʩSP"wmۭb#|']YJ Q'1¢y[9zWZZmFxkVRnt(K*#[k7}{.7J΄NboO~)YiR5H@u3˻_drO:<kaNw{> Dg ]I:\I.mY"Z dXSvnzy½~oֿTjOZE^KR>Xgʬƹ 6\I=7}ϕ8_GRVj\k5Ϳs`F.V~/_E|3jK$Z"GfcvGpk N5^T},}4z~y_)B1V\GrJGR4J2}?ԧ'Wv꯭>GxH(WLȪہI"׭:28|vo[0+Zw,Bgcw]_~}2(ni7R-{e6.Ws{o~nXi$b&0>7k{8 _UY5,Ymd׵wSΊ_צ?c'yw36;PldI;k9UG~o5Kbhca|ޛmV"QI6NMP[UܩSogv֓w}veMm<yo B+6o_Q|&T^~I[""9Eoܪn>޽YSsW׶nr{^g76tY˵vmk73 ;HGrcrŚvQ5X@7t~tSm4㶕@pn]QM'}*(`#v'2cyۻs[ZKzoBl~mw] qN=NieoXxR D23?wjں|s3$p(i7G*:;3QI,o>moe |+.ݢFgZoyM\5*О&<^{/ˢw:H*7EϊK[U|(lB[9ݴ޳z7_FMg%޽ԓo`M`BvoZBkN+j!"uh\YKH6 J|nf)c?k/`3\aw?AeOwmM.-g[Ua{9c'̲]\y~O1xg_,f_Q)Eg%OA::RW_eڻ$m89=?dh7MK&}ۻotXU\)  \*3)Z_3S˿^l.Il}4A6*E[uo}V czwk3u۾ ;epAyUiSmkm35Gi?;a { ??ujtLc(;_V^278<%Uz~9?T~U~R-Ts1[Tq?igy\-۸\{Z9޶}3ZKϷ_бm /_^zwyNj o} $g ׯӿ=?Z-d}^R) f pgs-o=8M߫9%+n{T<ҊQ2[vFwN}H(/_gwAkO]u֥f$X䞣?tyK}B};q칉rU1G[N\Z̫FJZ5^D~k&rp`ndzJ0ӲcQݿBk!U$-owVYXTZo^cM1ns9'!߻2w䎄mӗ36GG.]nUȥ^}e`ܲ9^4]u:˶ GJM'.mEoO1 J 7=k+N?8($=.!I$$ v?֪~_~3t7Nd7?Znz>Y[W` 珽3PϿӹħYOb>qe);[y4U]7 K1;_:R\s{E}z_"v+aN/1~wԚc߽߷,HS+]=>oGgjn:޻]̮[+mw{C]]+I^/E!dEۗslFߗnx?+]WWۖ =_ ~gι{VWd9JO_r;,Pv2b?EOh}5qo#:A$'CW;K2sI&„n_}\U!,dnH͟*wvf޿'ʌONv=[EEn[.\/[;S9f$~o5%Qk^+.h_[rQNI7OɿK^-Yjck릿/Jp@<v?׵\qvu^S(f'izk]ί%._p'#,g|{:xUMw~OŜtI^];3Df;Xwq|KO4Xk}w!][o~'_-+7߮_Ax8 ߯rqވ޷S\Wr'10,c?şRk5g'}=P>I Wxry(9/y|œ.#NAm+-.$v{]Z 9<:4\ +Y~ߩ_1NǓ)o+=V߯N_ ?#~os9M|X\}רH+Wsu/zcղuG*Nwu~&E7@mUI|3Ʋm%cdэgy_sNњKҺvn!NA$Ue{ٿ@`xcUzI}jedeRI3,u5t(Y{w۹#b?w8w6$Ӹ=?>o߾yHԳPQ+s=1$ҩdޛC7{'/ʒluuN9C?> ]3>czwZmY5JxF!Xfݜ?7OqM&݂Il&Yn#v?%vdgh'ާ^Ci'Vߛaq8=OzQi-o9jUSO&q1\m#rÎݰ bʡ~b}|3A۹ :©, kY{s$孶k wl2-}U=}MYþI0I͞_Ƣirh^,Jn|+|m+{Þ7jDĨd[:_'{zEٶ["h+g [$^G=Swz ߵ67sQr((K_ϰ4w239;>j+w~]Jт{})ĿQB ?Ͼ?J x3=|O_8P]]:qr%Pv;W5߯_ʑ_[ <(pSwW?2]mˡ:sw~b\p6[!Pmcwh7}-7_[.wqxfm7Q*MS˦e2br(3՛a(;_(|_%[j֩EG[_3s~$TfdsV$۟+5&g;>o%eRBR0Hhs9a/;¥ⷿozܦ#ޡ$I1Z->ZJB4L˸n~Uoڼe98{}}wt-:ÏhI6}Ag$ ; nkTt궣=KׯtϵWKYyjw ,^32k%VPzo輽=O3r/sO;^[3C#&Aw)=56,x)ݽ{^Y$E #m%Sbo^=S5.nmacsgb]:7.6omGʨ۟g^u6v,M7N)jɍѣ:&tь~aSW Rri1XeMN߳VGMv|Ӎ!_EoaWM,%KO>*{I;wƧC+`nHzm k~o*捬w]ق,bU d!&Gm̟eMvޝ}~_ƫUE6˫B՜I ,(-cvfX=]:aR]zзs+ƀ˸(9e=ǭnOrU)Ero}gxG/`EVI4L9w.>-WHlϩT%8&Z׍in"o+S8GYv<>eOrwթ:?w27(O]RUv^gC*Z\O,8iͷnUk8PtE'()/%_\ w=˻pɻ>t}{VhqO]?5}V&a  :̖4r/$N-_Tgf R'o/kJ+g8n#~\v~_mGn*P{e6Ѳ]ͻܧN*o_@M駞^"m'XM({Fmlk{\$4Qyo|BmxDvJwgO9?=={Io>ߖT ȯʌ}pBn)Q_?^9R sO-nLP/Zk9*K XXe,sVeGkPy.>3:)TO:_̵l Ny#g'ޡַůmӌ?]WES9ۀFGvA{_ש)s;>;uԸv\>nwoI96tFLcK`S5M:)料R'A>J;h{߶ ' eiAosgٿ_Đ RC8vHw]'_ֿxZ;Gݡ0,䟗޵'U߯R; #8OZ}Q>yt{ûK#ќIޱm&~Nm%]b)r9UW^9jQ?R72 ڸ^~8s%Obu1+%-1v;Hݼc>OGC_[HcErsznNM7k܈ddRs yi+{NerO̿}sXХIK&T'iSy-3ČЛ[3E;7 [[@#^=2ž^jdoR'_ܶ߮~/vdFhkss+> |q_wc?/z2*n6;;Wj=df[3.$,QQSsyX?Ty[BW_s+HdEODCovmۿoĝe +ɭ?_$AI+ q 7.>V{ז=X7d'FʭSj>~/z!#w7S\ҦB8զK8o;~g#{S;RT洿NI rsc?Zז[v>*~_1|wOo>Bto?Ȑ^` !#&oXʓ6Z%a.clLKoU`:QaGwv7Be ŷn'Tz{feUYk/.cïpP77˟ҟ"-#݌zÚ} =3wE_G3v+멤HN_~6?f\i$MX(RBpsU*iV3VWO(]pȟ6۰ݾ{VO_q{K>O3uo4J[u?0FVrn\Zvko?3I#}ߔi$|ͽM,ojPCroe Yu]8woMz9\r5&)'!Wnܫ)gܭou }4jieZx}汧wg}|ͪWrz]8׼fDĒ 9U~M/ZуZ>/{F>UyU Zyd'mS*a gޟ]S1$vw)^]Ź>њm|(wnC1-獮T;)(ǽUIoβ;[m⼖0K#D@fdɵ3ָ8^W*8gt=|KYXٵ #o11Vw*yվ/[d vcΏ{^B-Ho2<}ѳk32U^>MF<+l I5ncsYmoal[^5x5 u+3#m姓*~A7^gFÜxT~ϦhE%# Fϸk'5{)[N*%zU`:K!r5[;v}3e^v?Pb_v_5?!-լO ]D沫^\/~fp(W ߾O6::'vExc,']^ΪH{-V:}\mQ㵾5*bUf_wo1rK.[:G&c[vpYB>_]q}Nx4ݤS&RK2ϑ*:VWWn9o[kڍ:DYJuE8WrcZRj_{~!ښV?O]YjwOKAŶE`*us~*e(5!Vӧ^/B4w´#F?qRsI=-M}k #!F}÷ u(+{bZ~V\: 툍Xձu\'Ӻw*J-/k_?*u=me :Zn_/10zNvޮֺ}?3xCa׌J%&wמ>&'y摦iٲYn6⺙yFi'k+aTd_ -N[" Xȣ$6ؓ|sY΋ReN}4ק]_]Y[/PX+Ŷo_^EI76;z7kr)g@4~X!I;oN1/q:~߯l"ar@4lINT/+m_멄[|L*6'oOU"ռŤm͂^UUz+xV?3VZϯR6Xa?s]+%V76mDmI,`|6Bpoˮ}|ZT(; d:%ڼ=nf4Z5ߵ?dyT]*亵-Gʲ)iHS\C5bAu?$M:6UGi÷f{gܼ*WqO3gy_oή_:tݤ]6^=ߩ c*,{-_?&ϒ.t_3L2́o,YѾVΆ.wYFS=?PgRNX)%ͮZ}=ż2^@pҲ̏k'|3ʎ.,^]uGJSZ~;ZpO]]o/ g=ޓ aqϓ m读D:ri:2Q:[sE^[v iM'QگNn_o׫1|OPU Aj_*j~_~l}k7֯Zz=LƟrT_0ΦE4%2I$bT$[q?:V&x*7[[FT^6}o4;JZĦζeYdvMu*>t{21Ժk={ړ9F {(ۚrߦ;\яyr,|yU|IR'Vvw{^gpG6'N{luߡj{$v$nc3+s|l)JSw~{yU\\)ZRRO'?ɨ|A[xKѹu >XњoZc\-l8f$x><$VP5I[MyU'ͬg}7>ma{ƺgtVomDžӏӖM_kY=>_ӱgV VXiSYϵߊǎ2~οhϋ1gĭ3 |]i>'5fmZVMV8-+;?쩮$L} {B! *$.>{5[1TNC^л/lWsÚnrZizugg4z?Pwa#j(Twsl_P\׿gY%*3jOeOMm߿Eww4x7/i/FoK\-jW#ڨ[;dg;Ml)Ք-gӿM׭OOSA]ow?_G᮫|M|}X-oX1ً{uXE5i3^-$ÞXOݖqQQp}>}Q'Wxk'KG_Ω&\vaO[m.-2= ơqtGRGk׿=nt{ǿ|9h?~5k-^ZkFK{{XoXs}̩2# ḷ!(Yi}?UЕoKwkهş>_C--Fc'nHemMlL$8[uᰔRyw^n}] TJ7z;~ M\>iZ s} B̻^HJlevR+k6_~OCʧRuU'4i7Փk[7蟷߇~J4 [dž| Sw]s_G^]jZBp|7Mq5[[I[įxkpGN>F_33>SQK jQoy뻱:S|!|I:T'4u| ]5u-6s#M 8cX5Pn\`%jUuQs;;OԖTVm{׫ T~(E< [O \>I'Ky|a;yRtO2OَAcpvvǫ> a(Nm_u}{|}g9&+߹gx{ς~|+qQ5w\F&b۷lL{&G:lh`Zi_;apug|}`i g$ZեEyrǧ2ku> 3jMo2,ޕIQj{v~zyb(`URⓝ}'Ǎ'o >@z,e\𧋤ORO9$vIrž\7g2^֬3 5j5]?W>?>xc>ΈVo5hVsCo&}qo=ΟYkg$Y۽Ŷ؟lsɧ)J=jomu֊:~|\ E~^~ M_t}pL4*U#>ZZRQkNw^l]Dn+ixs'~&|izquI2|Aϓ7k4roMp\E8Y+uWՒvJP*ҒGr6i{kM_)x>:EmP}M7Qm'J242\f,=^㈣ZU+хoiV-wkt>ˋrf+(b/ܧRW#&{aH5 7^jj:ݢnMM*p{l4hd'9TPj.uk]\&s\Z^=k /?#ׅӟP퉼kf;y9kdD}(ĥ:}0=,TZVs{yDK s>~8޿.[Ka!d0oվm֮z5&ۿK穉wN{nNoB5\eL<[&MYtȬؔvdtWT'qϚ;»# ssZ\7>~*JId?֭ow0Om~HltuDQav7nW*7uqNkoɯ| ^zÞ&mo<#ۊɨq԰Ŋ,oRdUQBIzkgZG)>/]CJMn>yp&Eh%߼Q[Kt_zQqdvYӼG#,~oC }ߛu~nMT]^ U[|M?uݕ$|d#i_J>9Uiyw)5D7*(k3>^ǭ/kJ/go7]>2eWR縙62F?N2g 1ik~Ϋ+$j|ڶMVIQOi~L-VDaGec}F/˵m&I:Z烘cg=3ѫRҦ]Ļ32(?e沂LU7M}$y>v1l45R}moׯO2U'NgZ_]_-- . .,c2u $<߱:,3ӜߛQܾOٻ_yτ~_վSf;O!7M}kTou٣U֦>ԍK6agqwh-r7Nǯ~t{߱{?>xr]z-5i~;OB}YG}3Hq}y`<…onk:R־wgg_Ş+ g{]VX &A~Uٮ'|h|ˍѷ/-_c2,ns毤ý`*Ui/O iZĞ% 6"So2yHVoWOM} eʭJWp}4{x ѨZ={V[u?G,b1& 8 G1OlW}୾wSQCf_ޣ]>;Y!F!oxy X̚S#z3IW??OW^,76gkc&~F[n3o&k{[Y{9dm CϠZz_,+ƢmNvk4* :X?/mEfׯtfȬ&Ӑ>\#w܆ƥH9ݟn*X^8N7Xa`/֦ [nb@7Vrá4 7WwOM[RK~iN߻p |ޥN{'G-R40!r.oL3mfgqǧ+9g;-s*SV/_t~ߪ5 y?m+Q{']_ȪUF247Kڜc/.AY%I^W(VoBղ2 c<^q[桦0 ^p`%mC|2yZ%/3kpzom.#Dff`P* f2bGho98FW멗.HEav'N:mN>S~(X'kydN۳및?2=Og5nW}άɌNWkZ Ecq5񣣈dg_}Ƥ+K5+?|pF|QO"Ty/$6Wv9vzMGIKGѽ{դH6ڼ" $\n[ƤM}[}NIe$vt;c,nߕI)]nS3zS~iX[[+=EVmg/pkex)֭(Ӭ7K|XV1*_+oޕ3uO~ E]m<0#6V 6܍ݮy25TžWϮmkt0~ICTis}jmx⾻ⷸuH^~iY2YSq+ $m.{f2<%:=ka-6/ٕO0u̲&WfSz]b﷗{ 2wTξw^!1Y,҃o7^Z':߭빷-^}Ī*(Lujp:SW=/B׻=})okM{y e߷ݰuN]B4:leӿWQKpgYgY7ov,|۷n15jbkJ_9>ׯMzS TN9c%k6wo}Gyryɮ9Fosׯ_KfҸA $N8/ yW Sos72 =cyӵRMe L3U}nO_5n_59v>o|P 0b% o[wsIsApzۿqdy&Y7aUso2h't2ZhVKd2#CfVA"HKa`ƿ7Z9m+ܢn]n!hk ܿ:={2qwMj6r[c̗ft+P2**>bqk',iP!y]rO|ļl^tE{GI0[uo/3$\V?z9}hRZiSRtgaJ ĬK}T6ai}7Gl)o l;g-l ?󩴤SB޽?~p Ii;~*H1*WJ}8j#啀WG8n@fﭟB}5{uv~eM?rI0ޫ ʒOzNP{LZiJ v?_Lmͤ4v!e{L#(Oo/ʩ=/nn)f!RGON7nG nwl1 (r88Rqfީ+LQ/Wo8@sA?T´b!WiCK0 ?yIu뽈]ݜk7Ƅ9ޞEp8bg|ۊZM0}9BہTqeof;M)E ?o)yy}9JN/RٶkF2My~}zC񓝻>9[NLjUPz`~m?¦dB0M;^8`rr~n}=9UxNmwUI Tĕ?ַ-sN1fr w~_NIltE{?|2#ׯ}kH'{+Rz?Md0˸rsmVm5~Ea,NQ8=̛\ <܃W}?Uj֟5`+}_FƼMo?sYZbVwCJWo%w=:$~N^ݓ:76qpIө~Øӌ=WOܠ/wg,?oE~1ѭ2~:w6IcX?z$Z-$V@rtAԔomz.Q0Wv~}>i_jo6H@\~̾_n-#rFݛ~^?O֔[}peo~^lHC"Snwg?{I-RZVIsG"@/<P{꫔Ӷ֧?.x㺹0GGm7ȲnoZ_T׺ۧcrfۙ0h9I[~~uokNPJ{.\4׾zoÆ??Z)&K wU̱ LqP ډM/az?_{hY #n0Ͻes_M.+~² nb2[Pj鋺M]X* =2~]/y_b՝uo_?&*9U\w Y~oo}:19'zE8,B 7} f3sE+CU0I.AZIaB`hNI#t{vPS[ラ`Y˽[#'o'Q*i,_XOt*1-ܷztvrJkozۆw -7N0qfOM鷫*s9cVm/f^ߟV$l9 N-m#wHdScv rĎ:wPWZ7;EF׿uLtC TUޝXk$X(N qABۻXsvN\myc^hI8_{?JU.p|ͷM'edR]ٗPr3ך)_b)򷭖MHҩ6o?wTk|6qs>f޿n{<%wwןYP]/[sԗŪ ʹ.N  Bvw:)Ro}:w!u@W@:ct֭ZZ7w9']v*ʎ~fd襷7ʿ9Q>?)7u؉Bu[w?*\ܺ5%_wcLJ!;;r?UI4*v}~O;${mӟΪkT8ʌD73[''_B`*19,o2?cu %pX*ed)x/>LfnYK=YR8}-V9}JrMuF-]KԬX.>V nݞߒ7Fߒ叠_ewp ϮyI&~3Z۷|yBHݖ!X_r[wރd"N@p/Ojrzԏ{zcm=Q_jIV F$7mw&߻sXМ1ҨOOǺXBWK{5aoC0eyoF+Ne忮~,jS6%E6?w 84R)j?w2,; ;)*ͽ VmI?cRïӯ_R8$`/5*Z'wkN1}y~F0Ke?t}?zɽζ- o?ޅ&dS})K*vs[{\:Qɧ-)H!`X~Йs}y p=曛jBkԈO-p0}gIs]~7nIc*b[zsJ*y^k:?^ۮH qA=1~Bkʦy]?'R , n &ٌSI~vbM[G#@@\ۛoλv}䨬FeNޏ꿮bRXu{b~uUWu_­ x}Z$B0ե# wJ&oEg5i;Wb|V{ /ߟqBkkqʉ]Hle$?})r=*T_)ȡ TqW*Ԣ)7oG1QMąD.>oo>pzgvk[ׯ_ϬėwR`<«+,m򟔧lW ?_Tߗ]|[|SD浳 sIw <w|>uQ>kܚԝu?濥/nT͈"'Y>n"¯o=wgʪKwZiCo4~"iymvs9_=_f*Wv;=0GH,W-}yRovqNײy6s=Dm]ʿ+.yќ{eo*>Z#^AcMtLHyy1wU%U׹Ն?;K ƗM>UoQBNN1/^X./fei3X_wm*iLvN3]4zX/E]@JTE6؛>Wل8|iϺvkI%ff|Eq?皪/OўSS#},ɵi#y3 XvIw.JXh'_iE?WqEGB-)H1:d+w?Օ+s/i4ͣUӧTyU<3nknM.9%{eBfĥl/I ~,wS}]O6ྒྷO٦ڒAȭk)we\7gozuZ^s7k/VXoiOEVd>w{+ʫ8ʢ斟>J04"lc%Wݱ2nVU,n3ϞϿ_S[>[UhKee5k4{r.W_.+m_WG[O2\S#nyɻZIOegJJMh4 )m"KbKX{4г3іD*i9A/[ Tn?5oG9vz˚>Μi؝I<VM)|_?<` ?**û-NUX{"?UqOw"w?2'ͻ$u=6UW֩SϽ~OyW~7#sF5p߉={kDa\pN.qZnIi>o6d_û;i~{ܾ(TnBAX|S럹߭bwQ[}O9=} _s?qk6ǻq+lg >Lq*d&kR_Ϧѩm!ݸ\Og1QIN/~4U^rߨway$_2=Qk9Kweŗ0l'<{]%Rtߧr``͌WBz{wk'EV舾ņ@*݉ާF|R[݂m JNw A=#=7@6 aY8'OO>u٘ʄu#TXWKK ؿ6~f{꽧wѬ8_r.Rg #/UwJQWO>,u*Kmi>uOV^}/}^:$۵ p ?/ɢ.Ouaݛܑ1!C S?ZW6O/_4=a50&  NG_/ڴn)_#Kxyq%N1vpu;8+9Eor.T;.?y~dһo3;X,:9ַI87osvݷY[D9%y=I1}kӓ/.}[K ʂ6gm?B)F *u.<ۼzs$M/J%l(zXT}sW.o~͔̏ Þ^cSM߾rHKŜoi/Rw|PYO#o?tw?_Zwo+X#xnIÐu~VTri' OƬkePnS޸=8o3o}$Y'<Ѳsv- JE)brq{>RFKKnT}K316mDh1N_֖fIc8?el<3/߯3FI!-;;ՙY|߽YKپׯĺ4*_T2hl ?2!4&kXC_WӶ=4y5konHo␷_S̩޷nR960}Y[*Uca2ץnkwlE/>td2E¤yb+p߾QmIM?ܥyyݬ8˜rK˻3}ޓW}9M.WIn}Gd N-ۻw;~j]H6_!)Kン؞kbfimH>XQп!%&ޗ{~7:\O{wꗐ,UU73+{wbv=Էz}7oKxki <cDTfog'E: .gM+A(;}> 6#mB~&_qt_R>Lَɑݐ͕_gkwv!5{fr 1lOn`)\%InzzlWxi+{XBffܸbWO;}ۭabEEY-m}ctW!'7;dg+TT~' avn漆kq[q' bBv[ʪn_vE%~N6,~v8TiҘi o~?rzh_FQ&?̂Ru+n7negҸ5y3Q˧]}KWrj Pwmo+\ sQ{.i!Pկ%#TYmxSnZ]ofЦKӯ'*PdoP梬wi/5R!T.U2W~)jFinxlS7O rx5[Uϭ~Xj p@SyyϖVm=?Ka:ΓYwknI5i;~y#‰N$Zs}^=l^5u_~jα-B- ŶmO&wܯ\x)aj7?}:k0԰uIM{vo7g,pՔm6l}=Fͅd^{/ҿ6zo啭TӨbE{O&jQ\L#iRF]}+L.xѦ{9^ߺWZzq^!QwGn_8`wmyl.)`oיy"i;FDF~E]xNo۽>~KS%'K.޿yɪVheY(Ջ cu&nگ;~u*!'龽j2O`[#.CxIh5O5kǙu7֚>3iϞÓ?4*۸QGMA#*n䶾4/.{nBo'ozfv%e߾CNi==n{,ZFx/Y}6Ρ'ȗ ?dF~ =c?ϧS̭E[w70ܵܲƨFeh'Zwzi}jJz߇ZޫqmrƓ~эmGg_CEHV8y^$iNUϩ6;;dD/P ]QFWֿpN8^ gKbq1R]z}odf@$~-;ߩ(N./}^շ00ҧ6aylWpܯe}]bXgTaiJi'R[^y3毈z^oVT{X3ym&eەc(+3*юik/OF]U:]f-wyY$[[OkcH3rI]Ȉӟ?)]fS%N^hKJ?JHni[u4}+#w5'* 3έ}{,%Eݶ+/{|H^/+r?%|݄s.'|/紛~F_3x׈RRJM;8[ßl/MEY--k}oɧ麗+-] >U?i~Qd1<͕lԠ^>z를 |LTq5V^қju@_|7şn48 Xផh!ԮY-H~sguq ) )24p8ikeK)E߯s:<4c-{kzkoo_=3Z߇sw,tkjY5厝 >hB>پH{'tfS>w_}tg㘜ڌsYFEtN馵v? wUeSukDĖ7PֵP#ZEk ǣW=_IO&hr[,$"tz1MIRk׶mibsqvs5yO1 |KBHs9J~ P-X^(nVs[[M.JgܹLMw}=o֯_>;xKŷ_# уi__W1UU:ki6?OYkxȍ]v{Ah&QI&{\[.Y*vOTjP[q~g?|8?k!e BE{fuio\܏j'nꞾvEԎ*U$}?Ƽ+c]OMxBNxS%ơR %H,co.$Mo6mD;ˏ1x~ΒTw_6N{yIyjнBQDCBc?&f]GէYͨIrU (Y|NM%]V<*o_ o8մKo jq;Fm?TKmo}5/a%IeRT)V\hTZ4}pgS֯NԫEJZu})^1wWsh;IֿdO}]Z$>(SB~⥚c4oq^h?pC'?jUekR*sJ=]uݯY jxƔq2Q;rI.U޾}sĞ2|u3/?x*v4t{Z}-żcwMCR\X`1t)P]'׽+Iu J M'u5G>?ZFkǡ_Ҵ=j]FO ]7u &i^hnt؇eoʣL;VP^m+}&WZ#{r~~V}?VxAj~%Z5}"SZ{X`6e;;ė\>s(᜜ﵼ3xө-wz=}Y?:bnr+kymno sTkcPFFMg Yo_c"Mk~&J2޿vW;IxcÙ^M\."^ֵ>sml>ʧ/%O0c+5{U4vߞ{-ìKb{{2x$dEq|d>{ص'uߖNv֑?Wӹ,?j騚^iJ m^Vz/[<~o'[>6-}M۾Y3mҽ*ui6zѵMQRRfJ_w^Ox&"3nfJI#R϶爤K;!`»|)Si|Fe>KK]&-eguRGE$JTisP$?7`'M klQ퍿xwQ,ʔ_NG+J7`ﯕWmX~>:w֌*-FRvSQ\{v_>Eޱ4j,qHP߇>q.Ψ򵜶Pqٳ ҫ7_~ bII{Q^wzᶙbULᔌ'cg(Xv]m|4+k:Kʹ>$(B`0}y_m~?XHEގѼ+{ۤv;n*$>_R˽aS)7.VoEӭ o:ֵay^ ҦӮe58ev6GuUs<]H>juu[|'B[T䴿:>$%^$dH үv߼?Y77ϲkw}TuzVU'JN T]eOr|bbmC/hI>V1 vOm̎9:#vAb)YM-vѮ sUNf+m.߽l/ۦtV&\ r2.֍c}}%4tGK yﲞ¨xk]{>30*U=ݺyv?7k_x ykhRCwS1D6\ۯښbF$fwyx]Х)Q\kt~[_^:x𭇇pեk}|5%h5&d%խOasƞ_ltp%G K]O 5u$\%kM;麎G*\q[w͹>[MY,Z|ե{[Na__6So:*% YF3oOtWu~ecB^]߹ZZ$1F4"\EFu?1|ѽ~VŻh6%{O] {?|W'({y[etخbd/@QX' J9u:>UuvSSLT(I dp~ь/nߏWoV﫵Ij2=:Ή+~s+? ]uoCԴI 0|2 =0ʨ":{nØFXTn񒵜/ws5էRZ5ti#jpnR5gmq6kgZu"ߟz77ZDd=Gȫ2sw̯3mҧh+=5K?eVQ]n׉%)$nm#~V+~|:8ϖWIv>(I^.BBnFpUJϧh|(=i:ǝ?~k7R*)6p_#_߭ZoońҎO"VU_C 5n)1s}>ftǽT9ZksHI}i%EdUo=WxfsvxuwM~?~G\L=AۻZ^] K- < (pP3>ܫ=?L{YG???MM SĐry$BrKq2>D[ysJ;m5douIsnɟǨۮbr{ͫ5PV8_ b$4գv"wo>.cgeWKhܣ4bF mݱO~?а|V2kW]N-N*J:~_ 71Uh9?o5{_Mme44(]bmx8܇}Dcpgk5sO-̚-흘-B˂c۹||lWLT~*6 NuawZԫkemIn#r ʶh[U,~gQkNY+Z_>{j,xVkjkF;]BlđLY_Ui>Tf)'M~} &2RW7m~[}֤SHȊF%?/$> m1RǐrI{<;{ ݨIvRww'7./]Ռɖ+cݳZJ}P{ N1vzQI6+_3)9& l1gt~4o\)3kmco4$%I5{Ќ:Tmm.k8C.f TIN22VM;KUپiK+կ[dr_.};v66.O tGy-ai#wڿptN=snE6wtY&xymdխeHC%H\1rKֽU_;'%kM@o&ZK׮v:%%?_#h Sv_<{D}1FJT]wrpGi̖#b 5ᄋͷb1݌➫]}G?o}WW FڬqWMupN? Жa=>򹩨VԮyқ%^?O5cnpMoG6XvGA#kI}ݡrW8Lwqw}7TJ+Z{9Rw^|vJ#osl'-?;T譶bwlu?W%fWQCV 2.Ǖrǽgxp(2wߙsw֩F0宾WRocT3X J?^~h^#BmbN^N5ߧq}/wJ. 7o!y8_])6rkF))o}VI[d&d?y&C.CoRWi ֓d~?X n~njg]ߣ򹟪驨M.Iг"ɇm\ҏ7SHw|6<6X(S;z7o羑o74?=3H;?]N}U{>"hN*{i'٭M[Ԉ9ow}{ܰ$2A(A_/c}^}/~ϧQFUIdc;ϵL{|ɋQ~ogԕ+=~ʿ7[I6Uh} C-wT^Ava~$]B ;w4VDe 0 |{}}h6NP?NdL;m\dzvO78B_×yRH3g?6_[p_]䒗$nE3Q55PZ$23;ع'o]wRy^ƊJJOtF8}XÚڽ?O6u{Svۀ:i˧7v Prmw=fރ*(==zd;;L Fw=H˔=?O(LdvJRc]m'*k9Ϻ{'M8F ﯯxJЀFn3~oϭK^lr[k?ЗʎJn9I%ntS߭"al:=~5|\)BV [I<ߟw){~6tғI9/OkjÝuwsuCWo9iFCc0Am?};U}QqvQPmEZ)~ogق$ d.2<*i$(8; B[fpnج\vҼ~2I\9s_3|RKw+@\{q|3=u_U0h,(=ݢ2mT);?2&Ymw9fJ-)k_Ui9<3u7vt?VImU.=?Z(mVG']^1e,7`1ew>CͥQ=; f;yڿE=uV`c@ n;yv"4_*߷xDJp2+"lF`XǒN?? `w1\~_>՝V){ kZ4ݯ0, ];mǟ^ϖ[]{oh5}˳!nO=QRROGg]ɰvӻϿZ;{OB''o3cNsQ-=~vnߘ,'+xeqPC\{~zbzy5I"{Y'ߺG#me尾1~u8wHi9nyϮJM^ߏ"QpUot4^f>{v!d@7sOME[y5&❷$ O/^2g;nߊԠ2):LҔ\^7oxPA_szEKsNWVN '),+T3mVSϽyTb[y^摕Zvw5劘ƭ,$*q7XF_|˩*Z}"ޫo_AOtÚ7׺6m;hA 6o?}~׿z҅nz{{pU2'k*ld$kq#~NNI60O,6}#n8o#"m[n溙[]:̷1E-ݔq*":?w\T*j: '(G8uᠭ_Judݖo׵<;Qs̪/'84(ޕߦiD9\'t~Vo?}N<"k6Zܯ꿭4,e2 T_S|INwsEexX'U9u_)GoPBZu6 }꼼FX%Uvz5{ףvы뽻Λu+",0Inڿ]Ȯ>ձ޳X6:ayii7uѓ\Q2,"`ZO{enSzN0:^}G;o5wqElLkms|ٛjȍ:ά~ ז}Os]t>}_{㕻73K-jT&VI|:?-3geJ3Vϯ4}βs]-N +Zc7mɹ gFhEZo/Y[[ky%S~Vٹ}*4_M/2KԒ9>%(aT6>djV؛:Z{&N}1__O\eNqOۿN)ѮyG߹a Y|S+@Ȇ2QZukߩZwEVn%4M5G}ҺgG#T3o|~)5Q)^tx51<=%n Tc?7_Һ9ygS;W˽ d7$n_OEiw{/ۻ/S"T`w/W֡ޥTmOϸVE ͍;7nYY~{2#r *io JMWV_}ḾDd#VP~ku-/Gu{͔V{{>Ismwbv3 (ޙ~j9eٛVMCzF[n`bv?ZkhytIOߪ4# Q_{g+>;K,ps _h]n>i]%O1?Jz["$_6z`t*i~c-!@H$s~\ɷ{|2I*[ u>mEGۯmey ~Pwm1Qތ__[m{":ڧx'_KyRO_2 P?'3~Cn3|ኋ3+#'}>ec_r[x!Gͻzzo\~];2qѕNg;u߻]7]ֿBw =G<Ʋ4ߖ;]KIٶ}^cEvvǓYOg ޿趶qBcߏYt8k(Tr~n6պ_bK_F(ql9=}߬F~_O7o9󵗳n/F<4SWF`Ia4 i;}]-z=*jϩ]!=2wn+e'{g<ְ~4ԉW+?u*Wk弝Hm}~v?+`*c)ٴsՄ9aN~_T9,NwM>o9F]SӷAYOR3i{FO5j?^"V\rov\/~j1I9ormYW9!QV__;BI;~5b&_v"$h a'hTw~W*n^D)'?擩_םR)ϧhYH*w2;{_d;][I/6=ɷrѫcƔZ[uƇ4o箿>GjV#ZZ۬k?g:יs-'AZ?wCu=IŕAȻ[zo+iRww]Xv]c~BZ;uYSw[=kU~m?>_o+7u~_l6+ uiYrYW1uFt]?Fw$_tory#{Z6i]5K/;*7ioo_ױ.i{hX`klwt-_E{&¿MQ̒+9՝!ۙIo~eOF?=7G=}B{+iЅYWcWMtuҍ8mۮ3֯md(,v61 qY߯r\JMo}7:d s?1r[|N/Wu](9^oCUޛ/}>DrkF37d~}{5F-tJho_W:0_[eYR ٶ7ƲY_z?Køi]$l4p[R^ۿŞ*owN[rzS[CO$2܊z:׏uo*{wtv&¤eR-&Fu!I^_k}|I_N?Sk[f駙XʍXnu|n{o))s[[ 3A;[Tᣉ$,?29oXverN*r _z^̖$LUvIe cчZFI;_p{>}o~ĞD>YY[k.\UjZhi' WWҭ:|usGjҶ6wB?ݕR徟f>k)Z,PLi4ǻm;y}li˲ t?ȈG-K ⦹$v{:}f(Ʃ:ԕs}:]KKgʍEumnmlFu-|w}C*i^Jcuwz?%Ifʪªq?&[[}O}*Wq?_Q{ߵ>:5ir~\Pde͵m6g^"~ky~/Roei}{*cWp43Ƞ6CQ]uxеOoS,.&uNzOmY)JT6ߛrJR>dڳOFjtեMk^w׵Y~Zx[E`S4|ȟg]Ѵyr}r?WzZJʟxtU]>{{GoB|)48|Xo˝d8YIxOVmu?SIJPju/5{}{&cetKNooxxf?x'FynϺXVfrfж3x\|qT~eҵ߫./Y_[y-nb׵3$z=WimgwMZj\^MN=]_vot}x &s9>_+`Vo6*)h_.H uQ>g{+z.*ZUvvV.0)ܭ{4mϥ~h0Zh]WUbHv?7O5~u宧kK[ϺKՅzqW^[j64>2n#|6b>|L1)I]i[ZxSsyum!(aP(Pv:~vSG J+ۗN5*{I`r<1g{ irinކFm.uoU>"|>E͵^ZG'+",ϻLD]n7~4pwﴷmܼ=iki|DSXmD_3ay} 2ug;wgck*E?W~=e wzLiL2ɿ̎ݟI7cw4n*unk{×| P/ɮ= Pi%Ct;n3Z6ʸnpY[rF~esqZՊq;=5EtoD:L.zk_+/u|~E8=ZW߿^u3~0zWr n]Tpľw@53gNS6ѭ5U^KN".}}? #ڎmq5X|߻"\&޲}?xLgS~מrQ%h+weJ_ZZv}?J -t[m,.Z{i%LyvqȿvO1~L/sZiT纻}/xH(KQ/M r#׬+O+L5h~p4Y^wM'Zo=9Q~z߯⏅>ڶHѼ=V^7ɩY"x㵑o%ZZ[^ЪbpӅMW[?Gռ*x{j$gnv:ll.dy&gfep“II&|KUw뭺FMJXcMrk4S o~|7𾛨W];խet/m^y4Y:B,N/^RMٴ?`x 8 8oW^nϦv{ IfM.a$o2]NIBֻ|kkYvw>5utn}y{[|S{k#zΉ >вܭ#[>I7̶Y52I;WW ,ڴRwNiuV:KJ2JZK=#ud-wʾ*m?mũh&xE_.ZMBu=qn0̛7嬟O7VCNE<4ۜޝ4k ގ?,ףN^ ٶ*|I˝K?d/W^o]&MDM.~[/H|u+-炼cq|i$q躮?ڶϿ4_L?cq>+;6OiB/I)s-egx*]8)%BV|ܭG?n>~ >)heW%,~ eo45[;? iDKi渳kWXԣR2/u{Ze[d4F;_[;|_J|_⯄7uK{gLwc4X#[4kāc<\~Pq#ŬO̩_Z>ougxl?ᬻSt!?RT-{^KK x|=ת~ < {!L% km_Jմo#o-գ乼K;_70udqW{|Ғ̾ gOU꿮3͞9ga4>{ZkkEJM͜i[o>;q6Qat6=[FR{u||&A%z]ݢgz {^ݽ4}4uW:ϒ5~:UcVPyz[{mb*m%e祶]^W!7 }S 5WO,Ehl~,ڜ6IyIGٗɒ;[ml_f!hҪo5ɥ׻V'F.<9U;r%_0e|*ppӌ^u]}dUS*jq]8Wdϋ^)5 Px_[nL-՜zV4]}45ͺB4d?9*\OYۤW?k5ۥ}_^g <{O߉ ?xrQ+TfFKmRh=Ξ;TcC8r1ï^tT$NpgƩhŏ xWQݵZls5ْt׳o%?8|.u06;o:zgw?xO1<+886m s<5_nS@3X|;ï=t"OdԼ;Y4nV9?&{j$%ȟ<LrUgNQn=rlU*zMy??߯FO~m߇W,m!_ 3TğgTY˾{ko8S(8ƭ棬yj߯sRpǶhs+۹~h|WiϮ|h4mRC:O[6YxtR!;4~mI.jmWv?k_O뿙M_K駦sgQ .W{W>|<{c+ &kEGۇEW~^sA<e0۳1$}҂bw/?t(1m%\6%;1 sO?w|vul׃qlZNi=̻6N{ތgo+dj^;' r®m7{ /o,7W;o 3'&u?)ЌS/ڳf&e)l}5^RzO:?qgp8s`s׭b_y/A_EݚqA2 ,z&ZgВ[a;k}_k^٠|;سYY 1?׭rJ[k7{o\Nݷs>|#[[ZQ-0,W[m]qܢ2y2߻}Nj9KZ$Mix3POO hZ۴ǣ[I馅YI7IO9ȏ4AqskZ:Z/}#w&y\b_D{&@SM/^ chd[˾>#fQw}xB9R4Ocj7ov G㝞|?I8Zy/w?og=Ћk~s(Vk7/{?k~n AAgK(Q7p#cBWs ;ϟ ع`JTj{m~+CQ%8Ǒ9}o9^{#_- FfI&}!̮C"?os, S\^g^~>x7~Я# k7٦]F]5J_ZJL)z[9`iͭ(s[Ek=%lBtJz'x^>ċ^$m.ڊnbX.&T |7INJ.JBmy)<XK.+W61+\ƯpG{H&Z欽UCU&~_oK>?x?/֛Rįhi%ey>RW/0̪{:?oWtK:N87uuig_<{; Gö`6}i4b+q"r2FDfK}foKF7"fmI(_ӋڗF QNv]]&Y㜀z=a[r-~;^iX"Hg9vdᄏgZ+f %;GRg{MzԊ}:bݷn_zY $Eޮ8[_ւ҂ZZօrI3696ڙ6Y_Q l)Gz܉K/Wg$W.޿Z_b+;_h_#Þ5ѵx&K[.m|Y<>GCݿ3[}5=;f\5XN\}Uo\DfՒL$~kwV]k8/Meg~tem3|,(bjKz>i>Y0k1SC|ܯޮ13%omkv-qy[WQ} +;e?-<8c*5uWeK1RrP'M{ۻROkr\F#F޿2_ʤ);kno?lՆ+NQpSWݹ%3}݌q[c.}QcQ"ci\??|v[ȗg|1e r^<䞛ugKm4cdmn.5ߧy6ު̫Eye.@ G ~5\)6$rz7<])]ZTןA(X6mFߔ`qLZi܅#ځ6Q6G)Y;V}hj=sZI}YGjOHwbŽW[OOPur ie~Gm 5mI}~{_ܲ _ݻ$!G$~Zi#weufxnYvYv֦R涛{?4{Jȧo- TPޝ|^СӬ.oɊ1泰_m|~w^sE |Kdm&aqYe鿙^6egU3m@sn۞>_Rj?q<ev`u n<r?xUŽW$[+DԞ?\;H\+qo}怄?VG1a ARK//FȖbcDзdۿ] Tr$]E?h?7 ւKQK(od0i=KNoߡ&uu#|+{c?Ts˿yp,-\~gߦ'&elg%Y¨8%+ʹK rf\Q3!27Qm"oOPnGPq3t|oѩV|yih=~LR(JJ0y_=+k㟈Wi=ͅ &=Эn۽y?g<ޢ|^]:xu1-$J疋u}~VjZm>Fu`%}?xy|Zs^Fk>}Og Y(ӫmwo^icw$nDF쌻v}/ Gdtj߷u*WVߛ=s\/[KHUyڪ~_d?/q~K*TҌImWnYmIYSoOw꺤%SKw#Q$m3*U?h־sb3RJ#gkh. S٫yŖ&aV91p_ZV?g2YY}ϛca853$N}nly\JTĩ7i=?~5_)HSTn-%,V ՍUv,W{}ne_%)J Kӽv 6ˢvqee0i/F|_u><˦߯;cG_R}]YFΪ߼6YcgdFnf3{T7wp/b$ V% ~ed]ܲHȑ \ߝ}:T]}O̳l$0ڔ04O>]ہc ?saN{<֍5?y+]:,{ 9]ojei۷G*dG?T?yo=xweb6Pr YZ:5}gnu/hwf~ooִ_Z6 9}F3bX/B/S_r 1-evɢjگduөYϷX8YOW$ܚ]z8es/Ym 3JVW2 ̎9`}7S$5QM?{3dݗ?)]Nm܉^>fnRŁT=ecru/ULP 9nTٵoSԃp䏛#/MwgS;?~A_o'u'n!: ps?hմ?R%.]Gh0NNvUt6+~rܑvG |ǩʟ{}{TZ{:qz}z9ʆiY8n3ϒsSoO5 peIw>vR:ey-| 'SY/܆YUwe28FF Q7I;I;FT=4FM}LeN2]DNH-z֊-&^7뚸]=~o>J0'w穔4~WZw] gTOSԒ~;yZPTJFOJ$j9H];ϯAU*rBֿ:?25X7JNzu;<ðm^Fo ӥ4N}_a/0on9+uh[_/Jm<8- ebn^Q }RW`٭ׯG4* Jf{_aRi_OqcFn+cJvzk 1 Imzw)NR*߿#8  ?*\We(ׯQVKU̳NYt<r7QP]%|F8rwV?A]߷s\%5Hʏ:oӟOb${K] ٔ ء;eZoaQON_dB|w.'^zT%濯^V|t?\9#_#_?s&]dg{Ro+n_1ܣvI?{?ϑ/׷iN{~w%m@//Wf뺏E]wL*[ }iʞ}~ᘂ~˻mZm/`/Lw yxZNn~=St]A'8 ɵoΒwq;w}sߋeUæ+6x\92դ=JJ0 FFFsoc] 5_뿙qNKM !#9q޿5ܤniNS'3MmA=j.s6Ր1uu;…-j 9eْ*Ő#76jzRG5qEݞޗӲ78ޯs7QEJ߈f8S׿?5{J+oON|8L/'?uI-7cfߧ؉yJIO{]t;wۿoKwvKY/F)9`%q? ?z+l\j!V !vAq/@nIMKӭmMV?_1Ѳ16O d{%2~"1r0y'8÷?\ W~w2&?78(/$`gw_=MY2zyu!>}@:n| 3__- 8l9V 21tΕż!TJ3q~q>f2OècJg*-{|m۝qx zmfY+}WE$ńBUYH5d*8lw3X7_O_Yv?y_p^w-t?|T]m;>Y|.}_ !CcwUW[#R屴}= RTyzUAtH$~w~Tc O?Ή˕K0~綟 ew޻ƭ);)_\In!0%V&†66v>U#o_nE sI}M~V )SvOa{Jƪ]s(䆄FKn|Cr߯]Ʃ[eyC#!Fx'VmzZUsO^ZFV~O'Q ߸U r~\u9${I?ZzA$ʏ+fD'7m]1~Z_~yq2|;|<1?g*K~>G pRO_O޿fuqwo嵚G8?68wIqi|ֶOʝYI^߇Y:ll*3[@!ٮV1i}?xmf3?ָ+JpZ+R㵗iږttmm )OׯnR^̳-C %Hw_5ҌZoVa}/ߪ2G eV+SHweEV#*3|{n/r;[w\P:Tgvoc99TJ?-wnA IB|[+_\R{wuoc%ؿNAmW*ONnCSztsEyorY.&XJ#C2mw|*ԕVތH5 E!e 2vo0W' zsc9kT_7Y[eo7dtew"nN*i/J_fԮpfUossmK>u.iiwwW+ua1bXeYx?t?5G~]z=୾dNt=ɾΫLnuWo+ew|UoV%R1-}?ԣ_X4v}ofQ  07?,}7PW}CSnO\ZŨunbTvV)& @eۺ?}kJuM.o>WgMij>u|+{WվϧRNMrw؉ wdE'k~kgZ"41\h֒]<3\"|Z/!gnkh '>N0>Fݽ<ƅ4Z,WqܟNEf+{k9ۈ`~2Tӳvvo])(x 3Uk$gsɧSJwzZ+'eadfUW۟\SvoEz򬽚k[ɝtzy_,-J6|U&yΫu5o6<1L%ݷr꛽Ϲ)mxK%ԤAxlsp;|+|wYgjhztpXVZIok3nHRY߿[iNV罾vM$?UFk"j 5k-$P̫c?u53н7sNrP>w?\ֱkH9Gg|9$3+?iۢ~Uy^R6IvU[E+z*srjzo 0[jnbsz-=j^ ׯ'Fn(e_X7_qqT3v$錶qW̘ΥFg۱e7(r@3+YR-K'E }y/ɴ, VU cwQmZc-]d"!U\#B/P$rP uN7}Zөm;codi(bǒszU)51^/v>wd+ip6=۠?ʵuO`߿ /W]6@'A /?L:-cw?, D&R#ogS%tTiD{F?:/[ :T nK@nYUIvݷ洹oWtMҢ}V-V}VE&y/sD`mmIrW߱R+/-h;9>e09mq:M,FM6ț.᱾euɸUbZYߺor[ۀO%D͵[vߟۧN+Χ6c*m6n'nm ,"E.;}R>:9U#FoK.h귚>_ZOu38M6:Pu2.nYDm8FM/Ɠsdz}<ǐoe"|ߡ^-kKfݲ+8zOf&SMylωl"'P#G_u‹s7eq^Ko*lV.Xo Qoʓzu|RGsٗ2ߖqֽmNW*%.Ff!Y[km^ӊHz#_݋ݩΥ5[ʑ(\۵nڿ]J׵zw7.VS:f7.fq¿~xj6￯MS{=ow3Fn6"PQw&w_+u%.}–2qo[~wG]wAmQZ`NYw&JbC*_,7ŭWkxznlgo߿ߺyJi-W;x*3g}»)_߶|,+__KbyJ1 v+/o-v=tN~Vn|je2 >_͍7= oM4}y~gYg%-$f#n7}bE_Sx}5~] w;.q{z\V:%krk۽>] *|[v˳ Xj}bP7KC+Tҵ2bM|ncֹ~;?ǮX'{U[_r΂R'7!XRNߕokֶ8EݥR$:X庹 qvO4(SbU5=QR-|ٴY];RrN%o+n矓BkzW6b5]6xnv>|.z.{Ԫ(Kv-Lԙ"yy~l|O{+{|v׃MGCH.D!_Sr)W#XY|-ʏ>54;|6]zGvϧw6f΢MJMO&:Fc+3?6~o)-?L^&퍼x?yw*n%׭;&WZIF%fw?i9S[|!V~__Ւ"ho۴?uUӾk]1B,>s!8~ZY_j>Ke,)Wd۷ʟ:2}Z/=?*-COY%.Dp7$Fk}~O LT~/]wv>>=j"fWM$%ၙ~Xɋo/24|7Q/y_vnϿ~[ۻ[Nvg$=zۣf[XQx}~_'EŘƌa(:1䎞m^vmF_;[ロ|v47o$H|ܰW~u,T&twS|V5Om.S&6 *_wLL\+7k'm6צ/nB&)VWZHfOѩ]nv;'?:oLo.?^SĘ<tVO G|@]ώ/ -;Zu}eU76ڇ<2/wsmlټ$ /TգFx Wn{4{u ~^|Po|}ƓbUNWSywlwkkycsg\o#/ss Uh?\m7}~ImVO|IbN&///4-oLt{VG~x֩Lv~>nf)ү+dԩe_-o!oR.QWmabEi$UڌWI7o8)/gywI3l NqKWs:N} $YE|VF/|$ȎGV3lNsFZU%|mO$Tnoַ%Oq|isZJ P0#h| ]*o2#(m.{JĿI-~xQ𞭧ޮ>}q.x5Jt:tsuoؼǚ~7J :ѫ.ޯ>:XW'5/v6]m\zkKf!ewKQx5I4:[vlttf'&{? u'ǫj;Bp^yNxQI:-W}ጚDZjDG "hgx7{9D[$])x_{5Wإ%[w?Nwku/||kZv>3K?0׼7uy㿖,i&E}wbQVZ뵾]_acM*]Vz|,eוQʓNmߒOޕ}])#:^nJRzꟼݿ+=և_~>3w~#9op-_: ?cM&i/ǫ-岽;&2D7-~kEB2cn϶ \a%%&RӗU~X~5'Oyx_Y i5=BY\Myqo]^Z mJ,#͗><k㣆N[]_>mU*kB-7vc xGw^2u_éM$-bf[Kv33>^~7,qS8՟Um:{*\ZѧMug? xC/5VCU %^K%]kWi?hmґn%~3TB6J약{|zo#L.gFzQi6ݸ]=M[υ9Eu(u 7z2<&>I>o1x-Ǘ?%j^:YԭZ2co+^5?kMOīMVJg4K}7K[.C28aխXw$/y !.qa=<[m_omS3!R崔[>zV:'f77#4Oi[^~ ZkWJ ˆsma{?WJla5F_wQt{kWw- Ɵ~s IOOop0Z=nk{KW47:`_pSR3or6ն{5۷1cQJ^z?/Oͯ؋L𦁡z]OJ=2Vlc[G)2y3:%~{ijxJӌծwL0b*.Xsjon!* =x_/n]^oԑ4UYa7^RkfT5i\_%’@FA+Ӟi˿YS|_!NFh9T1ϕV{U)_q+}sFT^&*#s= i$ ?wރ.G~?GFvy#])5n -[cp:9o4b\F6+Dǿ5.Inq^Ra׌cz|35MDSxr@>2337NQw_ DŕP;/ٚ iO) }|1Ƹ;rO?I?&)FİT!UJ ܟ^D-n cړinr"ywQՏ?JG -k~#7)ܸV\7-Z7_M:Q[=7H+)zw %ݷ?>k_[@ĚαomgUI̲GxFάq#nAf?-R2ʭU6ݧӹT0魟~4Yk\WW)9 v\ghwopg~w5$II]-wfx$񭶿}whz^-,%ƛio߾Jg̥//ᄃXo_'|mx3KfRGX$V;Wi5dd0L#3I'&g82ݺkwn/ýi=צr Ο ދSRѮ TGoqgomsJ}{_~4^w?h ࿇dz=ek%vkfM3G&pۼE]oiM#y&?ZCFm mw}z^IIi?^D62"oݴmdܭH㬏{Nю㯊VתvSfGeѼ9˦ie.eF6<"$?m4r}"R{3=NPuR4ogv4 'tߺ[UKςq⋋NN$HHҳ͹3>duZipI%}ϹNrFM{8O%XvWK]o`?^yW|=/q%<5̛u](|?kxN[W'z}ψUݫitq}n^BUs?;קJ7]zuԹ3Z%Gicܡr 7mt'<ʔK~s/-.~ߛ9cTp׷婅ITuK%K6〰un$w|z}9&>Oe~Gu}jrr2r1md`N߻6u4gvќuJTUֺuI񮙪乎Zh{߻ؙ[rx?$Zns:C`jTzW.,l_wޭ'|/Wo GU鿫_S/LOء2Mb[y7HkkP*q]N_5BKG+wݮS[k5C< ĥ;|6;*xNwon>QTOh0q YeI-o]}5(7}[y.jo_E~$ v8soa F稩6 ?(RC/Nޔ9̚ZlXd^W?7ԤI%c ;3c ?^>s[%ea411(ݼ{Wnz|ȃK+'4 ;>͎v lU[T[nI$ ogT}DA$ B]qϷȪ=ZOFi7HaqUPy}$O]S:7~OeMݵ-wd ߻3>Ͽ[[ʐhۯ/?Ύ8N^Zosg7gk9_̻ߗ5%6ۋkW}kbMIMNorɾ&mdv/گB1i4ֺ[e2*2ֶ.3ѵ}o#0ury8>Jeג-wvV_3?^ Hv_jR-qȼ,2>+]b{g&+OIktkoN,@Ķb9|Q:rk{tj*oF^ur!ࣿ㍲.ۿjo[^[v9K˶{HټS'fw_۝0vd黲n(FUӽA|ȿ)gޔ~%:|Cf;iR3a˷颟y4ux^}v vEidqaP77>ܿ]T]%ע?ʍnZsїq rGN<[w{-o>;mfcX /??imhf\F(koy.Js{SdQ,4fSLo9tON&HSrԵB-cj]o].d9\8R۷_rΰZ~Ndd^y?2}J-2O%]v8Tve؛M'ϳcx,1sA+E;ߩ8oZoKuK.62A,gȁW,5Oe-ӄQnb]!קgY86RKd]i ~R~Ԍ8  3#5Q7P!P2eY w9#g%+k+?Ƭ1s ehR[?}je٘NW~$t9Wi]Eo G̟\Pu-OțIO [i)mF$++a~`BjTR7og,=R3+[6JW#y_u88_vSv[;G#<APluzFyN-yڅa7TРzNF{ς~xi޳=B4wP>I!;V*69W̎hjL*sG EN鼼T9);~gg+gIf;M$4}/|%zVok U(kk\$ŚA hm3HZ?~\߫{z_=͋}B v#Gn$w%cvHo2rE(릌_2_EzT +.8}V_,~v-w;}k1m/+u^[GvO_MNb{{mZW'Ym/|vi Kc6m?xY1V8HKݎK+~з + 9=glKY#V&8&V~]ƙ^[jXLE;JR-ϳf| ϩb•_c)i]Io϶*&yv")nw[;~uz_?Iij_2-FheTΎ8QNf_)>_w]w%{N߯CG]?)_g?.%v߶e[˩Q|amo9*Fpzۿqp;_R\OM(#m@ڶ˯B;1ǒݸu/zP*̚ .퓽}uQ7RQn#ӱqo9Vt5 rzspwBT[ӳLp۝2>3ϧ}J3>Vʝm}ͣ(;H3MAھJ,rMư|}/Zs%Y`,mGtgQ]m`MZ98md S.!V_vqw'J}p*_[[ş,5<ƺUr5׭>%"%^>eႝꌬw>r+nӚ֟1圄 h ~9ϾQj/Zzy??1 \7|oN:*N3VCv[onW4TOFb0I onZpMjrmvj2 rHێ[48+7}(0:39kagwY0U7CO)+{[U~} qup~/#n3u]_ mI xgҷcW_rr7y7|sRsՕQk>4L % n\a}ֺB+~;_,I د:֧l[CԬ~miNO͍kZk⍗Mmwu߯CnNwvn;!ݒ[?{s9,JIW)h ްMosz!k|j>Jd˿񪕤w{ݜۦ{Z%H) ŹOʑuk^oó1FNIAC?}h*o2"Fm_ |wT{i$  ??։A[Ewī%>n w)v*۽JQ뿮י74m}v'*I],?k8VtFI+?R?0 3G}ֵ^Z~Y%"QV?+/ͷ\#I9j;w7*c1n>?|Zrϗݶn C< 6jnuR48;*`0an'ҥWu zyעwF,0wܜz B3|~](4-R4rO' ˸}}/bϙ-nUJv.J?VN =ެy_o`@; 1Xwy%_#Z<\}>9V Kp{2_MU w܈brހ7O~uȫmV^136]Ƙpנ}ZSIw\qTO믐nR1gI.[{5wwЄM[@L7|Y [K p{|__3Z5 UW9Alj|+GeTG>o|K[^2ǖ;/B|^ӝ{pm'[^9ƉFI'o6^zÑE|] IsMYQ+3crG̸I'+1c{t82 $\ͷ|ǻW=fum?)S j{Sѵgm6ٶ\'~R/˟g沣Z9xGMM d'q!xzu_霼+f=L)o1Ae'*+)Sͽ,?vdtՓ/ԪUf[oK9FP<;OYU!~Wdg}to/^)m"? dyWy_9~gQ[>S?cuE[Cޕ ꍺoUg~uӫ;෹+e25w*'?sƺzx166z{׭kmf Bm+Y"H*\6>/Ӈ,.-]]}dvץ^zxyu]H31_XyeV!-Ԫ9'{>-ѫY4Zz[wu{3hwj2g帍<>v|tC i'yU]]Ml啔 |vڭׯF+%I))^ygd49ݹzނjBͿknחrq:\@P+)R͹AU(߶yk}?"ҦP>PvFUЦ֝?Ejoml>iu5o{eއ++UyMJ.5jŸ"w_ok؏a,Ł ͷ_Z 5i;1wʾ/O;)û9b;d̿ڭM=v]5n5)''u{[EGQm?.K}{퓅4vW|Vy .6_1jQkq [42C27]ʷFѣ >[+s5WR;e,X=|{wE{c?U_bo>ln*v|#5sJ:{LI:)捷赿嘮e ppݼ}y ւW$2w'R{rs_o%wP}䔦z"72d0NIݻmQ6{_O;q \}~rj~T(6ooUXб }g?fqQ=^?1ZD 6$7.vV;]kTweYVV;p;6OzYf2%N["c#$[#֥+X~eVnW|.KK؉U߯o$sʇw?w_V3֑?oChZ+Y_Oa\hUfkt $ZXě~U~mC-Ny Pgqn\}W{<{ Yr>!O7PP ͆nHnzҹ7w/k﷩J<2AahUbA_jG:TwzF2ֽW3O" `][p۾-xݼ] "_Ɍ+I!g3c0_{s c''f}{Z~1<&};SF_?RjCG;,۶vO<=:E،(!O 0-fbpM ?΢Q涻{&6<Čʧ8}uZm)V}4  e-I6ON{tܭwe 7+#n f?:q}?]>i[[y :$`H(F2W*ako3ӣNziI:CXHn8buSKL51ݍ:3akoe;V4}߾*忯(u?tbȗD$f>l2)w*o˫ۦ"ե<%-F۔r۾V}*{_#Z=e: ,85"XWn_4MG+pmX.%) }׶kSiZTWẘPմ)y;RI ʡJCf⛾R)Z=SPQe,Wrg cz;_By;_Ӕ ׺7^8_~ ru2afFݹu_]+kw-VSԨeVDaܮYvjz߭iwn1#bn.cD#}vp>eds>ɫ\[[Y0 [}랬[;^*_r:Gpmʦͯ ҲozmӅ~ִ\ZzI\c++zXm5}2yMH.S^[pז"IOc.Jn!?:U$y'6j}~f0J?zkXjZbդu}M1?=)[_^:/~aܨ9PK 9s{Ҿz*׮۾#$DMc Τ[nzj6Sכ}{?5)mtHZdLr]ۗUD?oԽqmndHG "F}㵿ϭe|My[&iiۉ],Q 6nHfeUm/vwߵLejq-<t3|&NQ-lGmĪcEF|~O壽}wS/E]?]ϖGz?KZﮇ_sI H#ol8Fk3mݷv__B9۫O_Sq8Y9TjQzCmKN涑 KıH9R|~30XǑnWי'\ JӪugW ˮި../IU[{}}j˔e13o~J~}ngMAxwC]i[#IYcb"soUrbRjr܍O+Z綛l v6N5Ziz><'m6NE ʳ7qpxrL QVZ> o]َ.U˧9>%z}<hHGA#*?w^ZZ>վ}W{h{+߶o ilP#6rxy1튟*u%/K}#̥V!SJ2ik{}k܇S&#c7z­1I!UT<"n<ֳQm)i﫫꯭~B4k|xkDö_[; :)55kTjNU箝m}xCx-I2α 6˵wj9e (I&ua1P쿯Gmy-c7cns!OtĥmjKmc: { A*-3#7_x_=*qlWۯh'+IV }=|-oIoo>ԯ;4qo%ŵ3\M\ #ּEXSNs d*w{?;ُ5;> W]'L~n \C}$slfΒ7Dy3̕*T}R/?96RN7wImPt>ڝ3YiokhV*TpM6ϳMGp:lpG:nZGw+Jz)QJ򳾖/>paχcVMk|_?/%z##MrI6֝Kv?`_|;Oڶ?j:w<jo dw/Znx'K+״$l!fo#-ak$Mik[ލ*W޻jzu?96|>?g^Ğ:zݴRkm3q}sY6wڅ$ENb1|7'^*ԩV]qĭ#vYEeou&2}i9;Ɔ&{xMm \uN*۫'xظU[[fzyk=/┳O'|}Z4[PVhRkWGLK; 6JC+i};WI}#Vɷh4U33".~O}2n_OG zrg=zylf<;/~[X2_t#ƤéEjV[}YĹGm6FOܤu,vS[/:)Ta~9|VYS-:9`VstY>JoMWkywaZOi:$=#k7Ӯlaլu MBI#VXCx*qnCpyGw)Ϭoӧc8I^6jq{4M]hֺug=> qi{xbkEr5ֱsgs٭~\_w<.&XTiuoP|ϣ㇣N Rn:9+_gmw~GR'b޷kG['z/tVĚnx Jm-#μ)c&oI5ryoy,\}~/ьp=)%ͭﲻ>Wяԩ{(QVڿ/ogm]c.|=-#L.4E.go$s=#Cj{|jq·m뫷OYNO?4/xI⛟.ogǤXYԊ#Fg3>zhi('C_|)V/싿bU֦X]_$JlGdʏr57 \񍹝ޗkm_l)T$,GkugOZSv~.x-SA7v L]B[.l!D/Moo:.hѿ..<ѷv|+.Xzt{o?f`>h-dեеy卻<:Sٝ/q'Rt/T_hwI~dXڔaWGv> ?mk욮%_V^ M͵Y-E{ɕ/ylfY$k8^6_ޛV?;#ӯ^sc~~O=o\į%JC%ZºkmRDIh.&/nH1K8kb(/-{ާcVe[ +O5XmaTAwGOcWe%][_12}cz_*}?C3ouٴ[ AewzvjM?QC0ПIF3[ڽzW>(aѣ+Ԕc?y~kSPյkWm/\ѵ+.-{%?K't?taB2PH)s=mtz3xJTƤ);۳w[g)ψ>%DPZ|fo[e6GDiG+lm<, ]mSZPS+9-oeoߴt^7#7,c5< 1uSzi˿2OWɴv}L>ܭJnwrkn_?hg'gÍW_eyiΓ[Ku7o4}W]C5e}~] I٤z6"4Jj.6ӫ_?sO'Kqj^8 x xGy?i0OmYV##kHo-x$o4ʖ>Jjywy>W QN)^]3<# q?W>_]o& j0c?#[I_!'i~{zt~%eiP9,(?{]SKѸItfj-tHwZw߶儲CAq^(*0M+_@ P[bXx'uOcmЭ/P[oojj7y-O;#KKM.[keA++zJUt}7o ;ts BzŮilY{n+%G>?oB 맙 [O oM6RX u]t76!Pw{}vaNI(?6{fboyj^.:wyOa@]ceě]UH8R\W?=䐣9z]ߎ6xn;I/-7욮ysp˵$v-}_u$v:K گ<7^&uoxy"e[H]חQg0+ک8BNW}l[ʟ%9g{u~hHѤ$-hYͭ5*A4֭2m:8*iQ$z.Kϕ_ݷWuegqY8>ʞbdu6J좥;'K-u?u6"1";hg~V˒I7q?뤇e- %||1:;;wmuk$%|yʧFReRk8,l0yJRww]i-lACUc=[/~ ҌTbb㲾Y>xDr|M.xbDWr4^sUG)Ҽ5zu~entrnY@sk~a焋G7vkeL,A8}{n>t;'Xմ {{6M27Ǎ~>sf8zq(;*i׾ӖTRx$]+gtϣh־-]5m<[ uw$%·fVI#?}GyMZ4Vz6o=l>YG{ZeRZ'}]Ə>O i-[_7|f6;WzqӾ\jʺܢ̾^-| vw {!#TY [jڳ'V*5kw=4% 1sJO/&gdX3#+/zw޼K8zi=osye"RJXg*? l:kpvN8fgj֮MaVwM8Hb۷~m҈Gk|bxddaϻO*wwou:|@)]@[g $V`-\v;rנYv-O%h*L1 wցYs0o`{\}빶{@97J8.Օ $2UsӚҽҷqM$n# ;IO̿2֒kft^ ƣ?h^kBH37ʻczmB)RM&徽{խ4eYS}G <5xCHFnWPsꚗ^\7v"yDq~̯.j0a^]?lxUKNM4e3)01^zpoJ:ݟ{o2;Ba_#m]7~R֎ӷsV]=Hgpa ]G_UR[۩pw|+ǚI\F$+ߛ淦⚳w׮NjJZ.Kݬ cȟ&CdU۟޴]u]N ݝsY*?s߭\T'}[@(I_/Z뾾LRA;&JG=NlW/㛔/WQJ7,lO+N Z8Jvo~H昜^ ;_|}ok)4FT.̑MtXY5ϕC;DZ]Xb|nRi<ߙM%FSp/6szۧ}o}Kt ~oq}PPu.Y-H~cG*˧G$ړNNVWm')g9(ԕB*)rIt敡|I!\/Ǯ?Zʢ鴤N]6#wugn>e^w},ڨS+a=O3B^$98A {ؿjM]-GV#``7Iw7v_?X qVrvs CpK%=W U`\4x!ydvy-I+ϻg1Ux^}Oep4%'!Gvk&ޞw}4R{4ǾFi;w7mhz*GnZG Pޜϊ}t^Rs[W2=B;d f۔ 775MozF\UOwPw*^F]Ŗ5okl{=ƼW;?7֚N]vR1WeU_nU_N+ "p(wooT%+E_W׶Oپx4f8ZW1/ݾd2|dH/Lߚx 4ԪJ~7N_q V:Q-UW?;ul~ Wu-(C+0߫$]'~`UoI'̰b+vS^/Etݴ]?8Ia%٣,G=y}Z^=+F{{q.pN6K>qkRi$u1nm]^mv]XͤCɶoi FI6 m߱:ȿsezXl+sk^w8qK-ǡF)7);-_ʦv}t ru(t~]9dbPp/^qXE_h˪Y]yv?ZW]_yO$;Ab,Kn.\7Ӓ0~,[r%UG$1]?/c}o9g_m[id'w_~|ۢ_g_޺]܎u=ʥ+˝$?3Xo@F̌3|Eg{ni{Br[o_Rj!9ng\+ϯkze%dyweƞ&U/ף:߯mʻ"h@`r1ܭNtO^J_q˖_gl(yq5U@ªw4j3mUXrώsN B[so͊sOp淽o;y>i_qTF7aUJ)__2zݾ3٥g@6eg }}q ŭ־vN U10_oQr I#;*OޘW~֓mկԚt((|S֪0_x[1.[ IWWןiI4P IIUr[2pU9]`[U8_|?<}R;-5U; b~(J^RS}zzMqr:^ݷ׻> KQnM^zk Xl#h>4]~g U'kjI=[~ g:_u:uq<]<:rRKEm,.Rm]Ƿ?ƵQr޻m׾]%vmbI )խ#WfmGwo-zP9;qۻv}:Jw{?䝬~~N$8mxQy={V}MY9Oot.cW\2v(mٵ8%z{ qP pJR}IJ/Kt"lp2>|k뱼U$uW߹Or#?6q޵j u9D>SeF =K{VU)[mm~ܪq=:MwvpU`on>n{oy}jf~dԌ>RBBr'=1K}egGA~?dm%̴~r #x&҅Dɷ[ϪnoymӮ딚W=1ap7o [T7w׹ ˙_ZE+rơOw:c*"9S]F2$ [#nz)>1wwؠ2[g;wmn{սM={9bӼg?cdži%9;Q3 nVBH  u%T%Zs]I5ŘEq]~l%G_oҎ{u;Қ_mbmm{ѬvR׳}w9x+%vMkj; ,p\/騧m6{~Z$k'q]y[E{[o. +՛Am-:e_>{bvH<;|_+Ԋ3^ֽ-{鸵_;/&qzZ.d-rK8~R7g?)ϯFy/|Ǽ7͞O=h߿;%Qֽ5_1~P2rNKTiT~4c)Fu}rʪH^y?߭LU3XT|lrFxmJ:fݧkc:rOx럽wrrڔ -WI,ci达JW˔_GS=;~cMs'mZ},=7w'p C׿_~jG_FFXd` w}^՝Mm?ЧR__aQ} |_C+A^biT[_?^݀Dn>fJ_N*Ͽ';9$dYYꝻ__7oq6.9<`=W+V1KW65Vv90-?'۞3qvJ]ֿJ'Z͹+7\Pq1 /-k7M3l|n;xI h=y?3n~^֊뮽7Un?"5`2TcįEVSN6M;+۽'p\<Ui~䭉z/O֥pA 7yʪ"T8 w>*[|u{/qF1)ݖ<ni)5%WH@/#(oV_t|on1Uvqvsɯ~_v`bTr˻cYMk:?ܗ7B!sm=*bM%?ҭGW]U |Qn(i_Cd 7)9΍w~Mu;FAzTeg)hѮ#n[]Sr]t0(W˾kϰbb ik~ws]8w(Jӵ u4ss0(.sML.SwjNUp7;yڬ}Jzn+r鵿Ƭ7"v]sƚ/Rtҷ`ѧ͐2O'|޿[$6qԭ*=^B2s@ג+IJw">W0$vsis5б|"rB]t){m[Ë/n xJ-]"u-GQ@e?ns ^3}o[uB0<8f?Jʥ5yߝ6'ױVU $尩;Q3*Q.몽,b:W=pyO5IlsGKLqYIԣ+m-kw:R^O2ݗdRUX??ںk/+k-ZĦ\(M4m/?œYƕ_uD8`weXSuNbX4JH?/y|PU$RXylυNI =~=? km</^38žzsԄt:oo?;̽TQ*2y~Z˕7{~=LY]]zyޫV;[G<,3lbݵaowo?5kJ~wTF*Mjwf֝]*.λ y] 0\V1y);;Ks>/Pśj[4pK 7oڿz*Š}ח0Hcy}zu~If[8tM&]edul[V/R)TwS^C[ O[Ͼr;J K/_ź)'ujAPתMA)7`v7]DhҖ4xǚ|?gk9Ṇ&$Gr??'4ϙ^}e}z=9}JRo-P $r*ʄ(ʭ@64.8tZm* fB[e κ'uuoxjAyg05[INȿ2yzֱow_M] ۴ auAj1kxwҥ{K6muxq*dqv~Ţ~vG?+F! ?{~SS{z\ջ[}D@6Р\`\6|q$Y$ftp;LcG[t3j:E5~cGjx _zWWD)'&@Nܺ|7U|;~(dXnmຉ$7ފeg?*ꡋ}^U?=|2f=*qwz?מErJK| V+5h#O~_=sRկc5I?A8b8b>aVVRcȫywȧk6cuGNơM=zzu(}B3cZhFJW_~9-ppr2O^^՛o䓻j; ڣ8>. ޟ*FY[;{/׮O&ӻSۯ^հ;/Qߛ=+aE{/Ͻy_}v))Zv$Rp}޾l[ђrMaq g|}k;lz0.acB@~1[Ӄ&z,(ȪAS6+nڴqw~?7m/}o|R#*i7оT`dzN036ǐ)u_iQ~صM5w؂MI rx*u1GR :;u(]̒:If;UT]6Dտ/>sr7!/nm K.[c/||[rkgz2 HO,ؑ*ާ|/3\Oo_%8׾렰\vrʄ!ݹWHД rkV~f$0.bEFFarʻm9a[VIn$Ӡژ¬[Fܿ{cm"Tw:sZ#4vVi|I̾f߻篽.I IDi-$qH1"2/Yk|>kZt.g=k5[I+8#6o|(ott.u+/:15e$kT-#l+/q|uL!ְ,L 8oUN_"[]<pB* t /Klxej4vI;K*|})|Oע3wRem#WqjzS0gn~NCe:ץ(t-? IHwosK5.Jkn|Ʉ$`7Wo>fYz1[ҍ_AEW-->b^sٹֿ?_>HpN2ן7R䵽>/q!U P'}5E__ߙzKKoBaܷ)<ΔR6shWsd0?޿7U}~VUkݾB\1Sn>jJr:<~e_'u_;;ӊo]h ؟NiYJwr@+:Q~^dO롪Z**X{wߝvb r8%Vկ$*]pxf`ГV XBXG t_u%xvg;zɽϧJW+]6P7!{­$>w1njQo=zw/Y#3^G`|7vj I7Tt#O˿Ox5X58+䶝~n37{?+ȕ))4vRg5xkAۣ[{]V|߿Zů[lӋn14gO y& ho0\ww4_7N:+]z~&m,SrĮXw?J_W2R@Ѵrm9d~o[uK[;u{ tkZQ%ʯy8m̻dUǭbEwx?vNm՝U&4mœga]EQBޒ[Fz݋;+[47,?6+94JV~'dpPO綯F? Q oJ*]db/˵oh[3x`8h~eKmijW2_#IHa_ZgY|?+x UtRˢ.Gu}4H7gCe QeGok8eTwÿ؞_M)gӖMTj|T*.,w'̻ޕ8^j^o}[`Q5>}wx^V}oXծ #HFݪ40Ƌg%̌Ώ.No/1 [ }K֬=r{ גG{cs4mwnΛ6kpsĵoϭz'֒=E =-y+K-CGOaWVrnٚ% y~JtOlS-? jLVPn)¤켭ׯrѰw|X(W7yuO"%xI$(Rks֖{m[~50e}y7$)fE|.zdoRu&꭭~V??԰؊uawW]#zl4RbUexپUZWҩTQ*5w~-O*Цv~e/ï=7Rt&{9nE'kumi_=JƪQj]nwU᤽Nm-R+Xjj3tbV]]Yk+oyJ9ej惊ښ/Ms>'Y]˦h}uw2`)MyK#*#1]U0Thjmw5sJ)p|w_k6#ٱI+f>yjk鲬4":Rǧ>|1`^j 4yu.V(R=4­{][_߯ePig(}^6O`9 &}WN~9^MEl\jz0YnFgO${?kUȨե!7n_{.篆ի#k뿟~ v?E_iNq2o3g>TfQ{ݷZ($[۪=v)7.~~e,ʾ]~SR ;7J._wx&?׈uKy4b.YWlq,ws+`ؿrӻ*04i*W}kmkih%;KϲùlXDm^_Nc3 djԌ=/7O?o/k ܼiM*iQ[r_'f*B2'-;t^ߡ]<ҧ(s-Eu\tɊ X#'=b;f̡(^{-1uau=Sw.6 kukpV)_1n۹nN=,Ms<+t&+nϏsh9?wtٵOcܷҊ I4yu[xfEVv۝ﳿҪ*e]-o{۩Ǔ*Ue=mݵ>Wg^24mOܮDl־C4snu 骵mzΰ StOjjziS/oڂWfU[v+os_ _%*滎.SUuwׯC?>m.hM9YzZ 5sF;H$m3i7%^=:߿+)fF?mrOOM\'Qiך6hHFcoZ,42MzI_%:y???{aVJ׿?K׵?~^&xWǞ3-ΉoNVƚOO7LO6&[}Oo%iFjjW⾏ /KgyXLGp"&b)\z[yVs}=⇇qxoZ#oڝEqleg-}f?zuNiӓc|Bci6^.{YFw丷DW΍X:MHI5'N V_輏[/(˖'=n?eπ>h=w\-J5(t-k_|0V9"[=&Pi4/wț7Bb0sERmwvׯo*iKKU~_Cͷ>ßC^xm,1L[4/#M` 7>Hy<-.`㨪quAr{/?[/a+FR o3:,Z9?g:״]i"Pͅk7]#q%3|狫tٿ[3XfOgcd,yex3\̑Y^:(Y&g}QτR-vu^z߷?ת|_vq⛘  TOmCygGܫImr,m ~veY˨W|ҫVsx<^t/i-v5|gMmOxɭcRI$I4e o[6&x</_wi>$־klkfpVtm% ɚD;G^Q;*X|+3KkyWCaiRJ4vO?/OCgmf^%Īx,[͟0ȿ.v|9bTE O5Tf49ru^5V?L~>Եxom>jWWmȩ$r$]+36K2༶4oJf\͟n-2,5&5:|afΟtG2.mnZ .^qophs J_Ko?CTֶGPվ,|< kXе{[=J{Im㱍dh䷑|<3Dz\BRm[=94{?W|^u'WZ^k6>gb۵ 5HdOFIkmw2_3YnnQ: xxE+ߣ~?R㕼i5նU1BڹToJޟ,#Y-/vy[j˙?io̡x's7-e׽FiӮΘ ;ᄃqǦ\ 6x^2ѷ˹$UtcrڗO_2jWu?wϽk\>$m'<_o{~9vYIx7F _{Y(Š34~C\Poy9UZw]gq3.皩UOfsMi`|_zsYmgَ}]*^}}/_ZfֻU]^}}=9IHi;0Z6 ؑ{iwXm#Agߟ^)976QK׹`*<sEWK{* =}}})7er&O[I!ۜTWw>Bww=fOS=:5,\dؗrW[_ׯ w+}%[;ulAkgom7 ߫I0'mP[wl ZӷuMTw~{?H|cZhrMFd$eUY|Q\s ijy0kj?௞ xw|q"Zy<jHo7o}o1Y*qmK^29)5WKZ??h/|cs1;_$M?G7/7J̒^\l۳|d_*ՓThv{l(EM]o_Skg5MFfo9`6_/IK]M?{~e+ͷ;KyXZyk|ǒEvG/qΥVUCb Uk_}:g=W~^|S-pk{Q'-tξo1iI>_oAJZ諭U7엟wxGiMWQn`=dmȻOzs^m[W7||A3גl"I"liӲ]K3[`c" 8MyURˍ9uzyzZ 8VloqS򿼾O2I'ق}< g9z4b[u}zXQmO/U΃gT-Ur8eYVwqO/ʤBD7ȦS{|ͳ>9^Yxӵ_m^9:kϮZᆅxsɧXvyufAn.8YW?x69_GG˫qN+Wko{KdFn]~ڽnڕ;j =;7_.6d7@b۾gk>_Z4!OIfu߭:)=n}~|QDR }fر(VUO#6b d1N>*w|]]~J+߿^}:DFo奊;A$˦| @˖mjڭ^o:Ӿ=#O \nͿ1>'r=j^N j&nm+޿NK J)ta9IE[E_fXÞMw^“g.L?pdܾ_fG5JeS_kZ\r~h}O񦹠Q{é8_ ˶UZ8V87}_/7s:t_̧[y[j1 .m)~c}ҾcTqJW>d 'I99Yr3|6Wp#w"uuu̯ir 7@;?\uim}*<\me[+ٿƤOkXmJI`Ce g8yF[Φ˨Gvn@yNß Q,r1\V?T[O=mEWL|d;\!$ɬdK_(˘ϊim(Ld?yV_[SinCI8e Yõ(sgaܲ}wv^!&ށo)!S6@wUs_M9vOf*%\7<I[\Rg?ŝ*, MF+}4vpM{<9Ԏ&x r<޽:8*OW{[ש?$NT;~Q?izo~rZsIx.U G vsZB u߷q<ڎ祖6bp~w#'/_ڮ09!Qݷn+ШСM_F~lwiR_+QV4ffǞ_SOUZkUoǢ;6ClC{C==Xソ/_') 8*qh..y/wnf {I>eq¶I)Az+jQ"@e#+/__R)>oVx~F B7?3|~1g**o8O qII9kgƫ .D)fv5~_2!cˎ[G"˙B@ug,@Y[_M]kydnc9P~/U[Zkw++0oBo9jPSS9r-_^wCgQ6ܯ/q>ZJ#AN_K<3|Jj׶E/-mUvݙRy{|i9 >]Gu=<NNJݹtOC_O -zLZ K$2$ۿwwaNU\9,]u}_bቅ5TRz-^χ`nѠWbc-7}5eY^ka\N._MMN:BZNZhNV|ְ*7fr~ſZ&ݖCx{T44'Os{Y=xPFK,(y$nBnkzdvzE7_^}WM%ŷ%Wi'[1o_ÿsc|=ti֔S;9STӳ}UI!&u~uџGh> ]iګ1Yy<fo>^*8{TI([_ϳ 7V/>z={?*:$^ 70ȲyfD_3@z6ݵolR+JOKͿSؘT^Z{׵u3m{77z|&{pZ|fm{FQtއViOT{h=:]{m>[f`k+o)-|yL#|q6e T҄/kU˯+6bVvYkcӮ~ iX\^vEEia sn_7rX RNw]:;cb-*>RNߏ1ujͬm+Zjq]n[|$jq׭ü=Z*er8%ǿyYyahYI9^zzZK^W$,Q 걿 3ϸwʵӛoTL?t$xɥ%u 6uK+RK;% 5"ƭXYۅD{_<=H6NJۧCh]SUi|6{Z?[w1;7#ڻoO\}/;qO_kMK;P %ob߯ X9?}hc'`9mó͈-l8.fD{|ވ޾e\_8 #_w̭s'_4oV̑#!*OYmV5fx7wsY)a|"MûUr*kܗ-rnIK.0:|onz_cJixIؓ6 ][md^)j +2:v/ ;͹,˧sH0?\:})xɨtG`733IBz3om{~eR<<td|߉֪?M7uܬmż(.~f /RЂ:eQ+\estom_]jܷ^RNWS(0]cNwdM۶\V:)sJ{"E,0_zekWI%Ki mc B7~h.UŎ$!6ܽ u2.s]E-[-۰Kwaήz.Α@/+aVVo?N՛M=K3dR|.{/Vf o_ S=몍U 6Mտ;̥);Fj.֕o&^zZd@+yu2Qw,iUZJH5eĈh#V[oWNK_;$۸3!`:~o˵~tcksl`Tsdz e4}|9Ia]Cl 2zOT$:1`H9l¿5U2ab{m'ީuond!Y€Oc|[8c9$,6fŭ1Qi!v=lFSW/sWRv݆ shpUԭ7ꗢz)8fb˚.T֏ۦ$ _* ;wwEI*o;#n )(A]?Ʊr)Kߨн2v}:~gNT%r>8 o~)=S1ߞ!HӁ '$R$+ g*%%+Zw3܎iʢ vqԥwaJWpeʺ֗h?(GfF?IQI+V.Zv# s+c>i=KӯϠ~g$cݾQ5},Ԩbߵ^w+rw8'ݷε[yQU:"mR÷b~f]x2?|ӣkux/_6W|HI lP~ki-Z<_~2.c7{eZ7g~ݻUX2@}i$uS}./] 20zVr7QJ\ nj$u9PҞ^ۍiY`2xAZIvԓ{N3~?׭k|;v+]uRu_֣?ǜ2n6s2ӚUnEi77`<GSwgⷊIi|5J qjm]~*b h_Զca̛v9:9!PŜ{Aׯ$tRFJQԌ9;>'T*K~}|d`H,^vm'Դ~gnꎪ Cݼ&nIBNn[jRw{:uOun]>,7g??h]s=_$ݱxcǓ-ߏ֥B-S_Dm ~a?J1뱍R>FdnR1Ozލ?20B;T/Pw{^M5,zzKY[]>k7IG}o Il𨌬w~~>dʠUp<9{5Q;~{ק'.x\qՕޡѳ_~]K6nV?}s^ʓ*"p)a]\Q9`|͜}?venow?dn#]t`K~5Dn/R) 3kB;[]✭5=?~Vm?ݱƄTS;z5)ܣ"KŤԀ-&9?{}5~:\ҳDp2N ߝKaw?SXEVn ZF =IlJsOuWGr r}NFgO?;"Y%g(a㯫|֭Ǒk[r"*woMg(%f2U#hغ||l;}͑'̬;qʿtvnL`;U~ξ)|#OD:T㴑c{I-|Gww!AovGZN)T~+h~Rųxӯҳ^UbgWTgi}Ӌ[?[9'&ߢRs1PX gtw;%IŸϰy6wo9Yk{ќM"Br\ _uL%7owN=zфNk̒Kxdp#vnyc'{KާN&1x՘63=om}~g=ᅭ&rH!;NۿJr{~ѧn܅6zSS[n$)@>䏛o=9KܜDcN wۺ2 9u۹@9-:fJֶcWMw;Kr ;p?Rzcl59s^w^)V!wA2\l'O[븷FWcǦݿ5"zr1eʔOK{6U\*Nkm:X|ڹ_gN0I~V{_3̭-_{n`6*wc;\qz%v]P}~v8kxFT_6+t4-VcϏxp3ܾ.ޚцkXXKM{սʶ3nt8gkXbɷu]+L#msb8Qh6=xZѥvzwYgxtĺ$oa,5M`fXj*Ms-ᗮpUV۱>e^Xxb-Mh%2 lf-.Q޼.sNU-_[naS?R-",wr?s_E Fk>߷߿sjS[7}_Tw`K$u~n#]*y-_#$|UR6qOU~Ւ(d+o}sIto7wQt,$tUZMu\Ϳ:'5ӿOkt .Sn$?Y›Nb$_< jbL~Ss֭MSWxztAvIۘ^RU2iR^LE4R]$z@6||On ;ME&īXHn1Hv[dz>yEH}>fJ7[i]<7+x/mAc d^x2H"ݙ[&>zqt*J޷_#cӌrwn=]V)k+&3yh!mbͭ׃[`(ԇwy8u_:~$3:H|nybU$Z&=~WgkϰY{6jwn]i-ܩR,n[AǗo%q#o9lvjWwkOǯdMH^*|]-_#]vȽ fIJ!@יZ"GM[WJ[_w8E:(S$)wnV=~RI=>gDj9o[F!'ۻx1pMw-ШU ]qP{I64!}X g8J8k @?<(K]_yrIrCo+DOPl*|Ϲ'זOkɵYkbT䑂v*+w/̙WrcUm;YrM_]?yNX_jx~&m5?&K2f~nBSD/汭h_dlq\_|Urݴ}JS̀,6M[<{΋̙A;i}Ü4l#v~nWyl/%=ޫtƇ4.v^v3$qnݿO9EEeR!U+9Lo/[/ QZ[eaf,9_?/$RqTVS_70eNqV}XB M2~zpųkyJ72e?yϯceߗWeQJmRG]ąx~F]OyOg%p-#g,-k+;'JJv^tmEVA3p?zEտ!I>WoNDݍa i**SJZz S*vp_=K/R.+_ׯo)%:vwީR0ih$e ,X+?肌:Zܲs3>M6 A|sk6Q} _o_%@V%`_m^eS_m2}ɀ7r;_:sۯiJ2J+z뾚&РikGelʋ#/?{-9jQph)xνx_.'Ҭ?$EkD~r}7wGx~gO6'E~opQ#{-}OIɠ8t|C үO.e_&oGιp'_}͎irJٷt-<ǥ'  \_C AI=l}.3toMz\]$X;+}hg ;}csr}{Tn߭I.#[yoxjJo}N I[M$(;6Kd;步/FI{ޗn_^fd]˹?g}.h̦U1|q'%NZ_֌~+z_%X)\ݵW>P^xj̽}wThB$b6< 6Q 5 TFs?cvވU8?0'? n;)yT)?/͹{nGRKsY=6z_R؝T;sz+]ĤӴIDɅ1^FIŸM;^ֶ [$H+|1uq蓿m#J\ۻ)wߛ_P꿮\µHk|Z&,a?^ӋfiNsoio2WZdOƑ_;1+I^]h*9_?6rRxNޣGkw,RH~i!o47{_w*~V}-Z}C ~ uY4]*)cHidP۫M{>_%b/W=\zS۷t,"_#ռgh4㦶xQS9>ḻSHڋ}\T~9JjIk/6hrmo77ll~"hz'],@5M q|1%3)ڙHU)zO7_zYmjӊWYǐܟ꺣_۝M;<l6I$kk|S]5QX5̐,}֍$Q~M{3l#-zM`2Uc_{<Ś1K.&afon؟<¡5Ui9JZŸu^zclfW$9RMJiߢ|]t} ķ|]mбOrȟ?PV"x&^4}O_|-W5&Snt1lȌ矚B~U:k.&bzB5;enzA˱zPdݙ}Imd_i9l% :7WzKZ}Y.j}`ikOtOyhhw6?_yؚxU!~7ON92j5)(X֞(@$k.-rğ &+/Iʜu^'kg,"ޝ 2OݻJ"ee+{=+ +SV[ZqWTmtzg3]u5kDhCG Ѳ}&65(b'_+h>c3TK7wO?&47/^L{'gMK(+vӦyn'^z敯GK֗ƇAҵ;+b'HV)-f+kSWfyooʕPM2;l\wfy{dxYv߿f?Ppn߯BY-xgLJDխuBlZU}'4^d̓L~PFIi>uO\&=UG_w?tû 6GM&p?-ŦZŨi>$>kBs5Csm^H$RׄӞ3_>]6{oYzz߁/jx>m&ĺ]y.:zZmA{>g٬EXxyy/Op2vN_^ez=Z L首FxV{5͟ZCfZ4a)T={4Ӕ~u O?~/Gk^/Cɤut7[t;9-kkki;Ǐ~g*t{M$uw[:2 ¥'uyy}z[·_?f~SǨi7Nemu $Zoٞhn~~Fb ]JRjOIw>uqʕ)E{~:Ǹx3t__xO᷈'[G Kg[o vo.S˼UKףRU*Zk[[?鞟ԣ?|vﺿ~5=F_ ["6i37\YZ6&VNI_>ffK}_GSkNӫ|'wF7GƶmjW>m;Vk{c5V<>[ L>ֹͽ=>*ݟfjjQO__<%,;WUemow>r~߳i[XNŞ\~#uXu+K&߽{\',NZ~ލR.d䟻uu/G{ m[WyCl#YOp&xӊ#te[ɞRTP CcWQZi/+='%ߴ'aS ^&⋯_0{{8oxkk;4xbvow1\ Z~!ŹpT V<{jټW^Q^У!e63^nv>|ؒ~>,N0U=LZTa)>G(^U<5t!inͲD,TGsklk6&ܯV<}.i;üCx$ y%GP~gfo~U=kߧKz+_xI(=O-_zN{]:WPI6W6k&3$#?XWF4_#J9b*P+׬g7्i>ExT "$Oy<{gk$~Ӈ-ɱy=QQY~JvKw}ej{|=ؼ޺ڤ]l~{K}?>!͢mO{mqy eF5w g5 W(k ZZKzn[[ho`六,4ݪ>]-~{3  >5h$/ٷCqڅI 7.ms1$??K Z5!;jW*TW9^wۣ;~W+?gH?ڻI5e촟_9WGo/՗]$6&~7SG$mɮuXW2i^>v޺GcjqyZ12]|~~ >2xg]u_xb?hSqe Mq47;U]Jط?5ĉ4<:]7t׶}ՆUiR۷mB=G;[[I-l[X|8yk3"l,I޺th[}W8pG.S~)k*n~ʧDդMkHs.0s#}_ca%h[K8(}WɏC ?ԼQk#97Nݽ7>gϵ~ÔdVW5׾u,G_[v>ҚX-Pʑƈ ac]y^pZIM);6Xm!ϭw9޿ԻN+.ޘ9;K4mwaU[WϞkG;2H,dIrrz/~VW_.v?Kl(2Ny?Zvi:sm+=& 6NNvisOO^J.UkmApMc~ ݭʀp%YEݖYm+2H#'iONrs4QK$jr8u1F~b7c+קsA^uO!X,f?t)}1k,v3|wM×~roEn\PI'j$-6r=oWO:`cngl_a)ڿ_C^H#X3kzи 8ϗX7mjqkkW{zNQ^H&}MnԼms{b+֙co1!O>S0᩷)K[SˮM %IB:iо"T5B(5Yco{Bd|F&r7j}6-0S"-zM槥붗Odtwyyq&c,feM_s'SɥW'w=JT2=7;?tۘ5'A-зݳ,cΒO/bo8ד_gz}u,6WUm:u>>QmCTf'XKVI"&$伉2o$)ԯ5̺N3v&Žӯu]Y'i}b)WHwE$Yz&~Dh/,\ߦ> ԩVI_~<xb,-c5ռluy'ݒ_gOpYׯ*Qkleλ?~V|H5^_̡mydʇSvgqrM)IyGW|{ԸvY37˻u+ۥ-׽N|<];Or#Ntلݗ[^[Vm=o_Z(>~'$+y}nZZn$2f@տ SG[M׿ 3Ƭ#Q6d_j2ms&'wgj֛_+l:~{?O˭swsggsr P}ۿ֐Z_n{א3ڤ, *GuRz=mZd !C0!VǛ՗4v߮?ƻg7~^8XE7dzbrQv[f̻ 6vݧgVՋWi^z?7Ru%+Wd>\lw|ׂJN_Hu>KhSRK[>_ &M'eX޾Tyj-SYaZ+Mm{%׹wګw$FPџWvo;f1T,6϶O-cLDT^t<[R翺WO{0FgnuWk|v*.nr=No}6ܡ[Km)}*SfXTtg5]Z*=m7Fk>}oga FY],ǖ25 pm_:#M97w-{3Ǚ|y̻~w~K#)Z|wMZocd{=-x]׼ap%n ʒ(<1+ g+[.խ]z=-`Mٽ~;߹4Y!X@fyx/57Ko{p:F{h]K1 ȯwͬw+\ |r9УEYV ɶ| <~Voj]0tZ-yFx?ÿ⳩>~m~QISBZ|w.``Ҳ'ojLٷ.Q~ 얶]Fk>l~doމI_)sI{璘Al6nXXJVc$-{ife@I_ڣ'_m޴טŸ{|ūI\٬1b_.p0^om^}^q4Zw|5M?Bmsumf /->F3ysIۅavr81esOA~}?gYJo߫O[~2?!\c/ŔU>NQソ^HbTc?uoum.޵廚 iou+6D43yý6|WקJ%6䕩^shsnOO3o6w cZuVH~Ymf_79Zxc*_Q9S{;mykYJtKq\źE~cxmUUAo?Yɹ_{^/y;o? 餤8V[d;P#2l1w;+a=ow̚vdPk۾ [ߓ++43n cp'/53wzz˸4F\|nև?4{A83eҩ]݅v6$DvV ߟy~Y_gy:Qg)U}~u+uz߯.TRkU~S_g?ιiE9:KHKdB>r q|#]֎wbLcWmT\'{ZM7;ϭg {jozwD* 2[oתw_.빓_O%Rlۂ]FY/E_!rG!Wx<61NO9]7nߨu KV*nOJw%ٿR";wyAv8\ OEޚimw1#bC"+n|֧xԧyxlJJZMrٽUwv߯gArvnNӷS;5~{v)^J˽$s1yK!͹ʏ+U%-ߏN"U4o٬vQ48( m?ww\wr?y`KٍקVN9in;',KIJZIr#nZ~yCʶ۟R"'rÜ7WK4M+vI{;^6Vo-Kˉ23hXcWRyU:2R1撏{.T߯r$"ܓVיug}5| }_O{ڠeׇn\ZC$~bz2|s7hX?'yaUy_sme]yR)I-~޺Ϛ>#zuMV@b." $97ʻO<ϞVw&.1 {}lխ'BS~֜~Z]w^oXWJ#b;6ߵJY?f~t|,qKދ8$R|Y]knS]CAMԏMu/O~k5w5zy_^g?|U 6ZɼQ8my?n? ,_%N7NK~O2 h_EyKSժl:Wȭ[yIXcEm[}`_2IzYoQ*tiᠤUdݯۊi{_B--qmڍ}ŝ-5d-[}1ֿTž;N8*i;mc*Gכ:@I+I,B?Vos>^.?z!,}JwW]m \~H?ֳ,Ci[~>|2NJ.hbaOŠk{Vq~b(l>.S %Fgzx,SR%wZ;Zi4T~W|@w_ڥƙ,֩+c0YtMWL2Νhݾ^?lxҊ8ƼUIv]w:slG,a<¥37?O5ē{K)&_b©h^ͷ߼WeҖ;ow^|NM#KnZpI$ޒ='#ƐϿMJ!Z~ݾֽߧSNWVo85G|SxAw/o,Wh&eTKVgdMͽ?ϒ{2~9TR3}ԕ}_$b EdOϥ<\wut_yʢK}{;DtTpUp5oDs9ɻM e/aR2M]5/s2ߙ~'Wcokr+lѕ->}6iMfߘ8m,߭Q}UE"v03(d"]*ɶ8Hfoߟgm-IF ^fiKEER`=ߛnv}x~.L? mc-u{=RMRMz Yo%Ik [)22?#'{=%z$#VVz,泩WyjTt~ QSx$FC?4ݼym_7~7xŔL{Voה-moGeAT>ZݙPw/ԘX˘RXo{YJW=cux_vV Hx)!m[杯Ђ9+Cw|WBm{c8ӳn꤆Ul>3vZQm-;N1I?ӿ6PKg#89{#/gVyMV9qﭽ+c8^뺿$(p7վq{_ZVo}7,^c3e$:%_tf]_ 0A=]9O+|_d8+7.OowQ/ln#'joߝ0}?7kfMFrBYk|KRucN+^# H[?79=3UyAMnqN?6| |wҺԹNq2~r3 =ף}м5/=7oo__Bn@<ߓϥeRkM??{ SZ|=~}`bW.!ˑԝwUm=? Ty[ݖ\)GO[opʤ[eyNh;HB^~ +J鯿Q|7#Z${tJN5o{_>R;1Aw|ߥ.E^"__t%r  sKIeRwo,ۿp7mXgu$Qb [T~7:#j#UeUv]m=5GB+-oNV.ܐW[|&Œi̜e{0~XNIk}GMu3* x59'{_"\Sѻ1 G}w}޵.~k Fj^D㏜~{1(P@یscoqU.cR1տ_'݈0UH %R2le Wݥ"JvKon`:ϥ!$ O\MoNS~d ˿󮘴o= gu/+Žrw+kKDL!;{wHvq;~S?8֟%%F<{Qp]ʜgT?S<7/Ͻ%$uFssG~m^J=o>] cyp8ZR[qv[N:0ٛcZOS:jT_Չ(;Nݫw?V'M7$-iuyUb =osׯրkDz.x@ ܂ û~5:Q#4yV`/DnR7]{_͓6U~aɐ{p9ZWB^m}uQ5:[u3/MH@WfKxsW1UOǖ _Bzk];Ll6rwnо5 y8 LSWoͺj{Qڿ?W@ ;pwJ!;>r#*1>mރ9II$?USc[\c-ӵ$ֿs*nEc&RkY)rmCwaqlDj%z?D3r:rhO[:Ue~Xu߯{webY2ԑwix|_S%vo_:Ӧ0޿2o vҪ=>}<#]Tb6e!y?uJ+_*#_'-*#_ֽH+rF VH$x̤IlץrVo#Ԅ_VOU%1@[۷~gFUݺ5r:z:eN+ i&IH", ͵YY]Jbw]Y̢QghscPީqo);ӗM+OCkZ_gFA'?u}qJ< 7~Ӑ{?ҳ|FjrIsgjyİY;k%JunhݒUE_3]ZUg¡&+A{YI(隗&;xm5 :9F^Z9[cˊxo/>L(2_G` p> kP^"*pyh1ƿחˬZ^lꢧVnX~TBݯ#_c_S/Jpwk}z9t `R8.RF>d*2ۻ%rS;_f3Jы{zn_$o.wׯPP.3rswn\Q(-W-c'ֻetF.]yeׯ`M؉Y#b 9ܹܭssFޏw. qZft鱴(_{w--J G_2vzܕA lkY&8_$*wѿ|tzL|? v/ܝ.𖽺g*[ɷwΞƵU5Oy'ӧ2Zݕ|1wc5K}-5% ^mѾ,~epө.ey?Վ$ۃ/wc XZiLfuhYcev;w13X/_ws=:RҤ/wiwv]}+ʹ@p7YڒU?9j-W7O$~[I lߵ7)cnIwߙTu_ޱ"E_jetSWeMվ Om[Hd|̱y+4{yU巽2W|?2Mx$t KXi.m6fmXhS烦_/̹Μ%5o[Gmxwty,i7ˆbWl'^!F2//3X*F]uWEu({1)p5·-vί;NVGoSWۨ"5;#\mH&U_w8;k~,mϧ^σ\I^&6F-_eYW9O4i^?xi-gZ>'l)߼WyKڿïۺ KxorkGM' l_^ݽ1یOrqku~w2jNc2cKH |c6MuV}z8#iö6ӌRuhM,ʪYvmml'5Y+Z=7q6u/i#]}GK3 $d]YژU׹* goޟwy#n/dm!?JqfE2QH*}}kV[cȯAsZ[hJ "@QvW/5<RbC.I9M]*1}[('u׶z0S"Hswe&nR[~Ўu$bX`9޿֦~_Z1[?M]8%c[?w*|hk__,fb pI&;֝.g߷uv#?($-^N2ֆ9;v]{t#kP ۍmDiY꟭~¦"4g{ywJ( Ki75Nz-4~'uWK. I Uf]|v>˙ߧuM(I[ee=Z+[~жA(X++1WG?j_v{߱j67̑W6Xo!gr??'ָ*B<6^zuG], ;ǟO7;X.. _2W2BK{zɱt=5GݕwziߠX«'?knMػ]3h\L;uͺ=qu Ӥzyo߷9 jM#͵KK=ZAuVOir2%]ʯ#l0Vw2uwg?3o5kM2hn1ȍ:tR {o痋O ڶmo91es8]Q~z۩溳/ulqڥgW[Voݹc 6vwj( 7軾E('~v+ ׽im9mcU4]Î 탸s7mJ /oqoދ0 ?mեؕ# rX q}qw;N*7rz}]J%ȪQ=m?4UyRoM?m0UȌawZ*6wTKEFl\ZrV6ULY7m]̌e^[~?},5xvz[[F(f9&|ocx~e %GFtN[{a0X糏W޲vpЮ-U.ޅ O6=y'HުhF4X㙇蛇_gZSRݡv߮4J5&-ޗWM}B ^/\ FIh7k ,{_:?syW-<ՠϑ'~ki}m}xXS*1m]|X%x#6QRmͣ[j9,-SdI3ۦGoq)''NmfW_;,.Tҭӗes?it20@M,I hwP's4'ə>iK32nI[GV/{}^WBtz~O-xͫfk#%k{y"ݹǖ6_j0b~m~3R,D҂k_>|#vKZlvk8-k~UwS#1^w&kZt^՟%M:|#}j7z&OA=ƙsw+eYy^vޟszH?>]֧xNꬒΞ[;Q-tumЩVnR4U/Sļ7iiN"BR?&yjO镏<&<|yiFOD۽zcIU*Ji쮞^jڟ44QZۤwl{B߹IuOJo/fFܩsեM~[ZYNoݶ^vos/7z~e&HjTKYn6ƾ^ݻ^,ֽ|vu#$O/z4*רZ{_Oͭttn-(bq,M+3D/p}ȯ³W 6&#{j犌߼r܋{tw`8I>_o}f354ڻo뮽YFԦ,SwNB[}(O$[]:2~_W ¨NU=ͯ?P-{_K|6Zڶw˙ Wo]~WSሧ/a+N{zgR?Y%}~\#𗅣ykVcWtۚ6YcOP]izz~]Oʨ[>v޷96Z/b{ 5{(wKdG7y~K|bM}^05䥬/kߩ2Jsm_۷x|W=֧yw2gs[;lF1̛t´SxvN<'e{_(`SPqwVvxecCa5KCkLeHVI#Y$d]F)̑]yoRw\q͍akҕ QiZeMݾgfF57U_F~T%ξΚw6óܸZ)rZZk濼ۏmBΥ>5ם=exdo"|v#3到_,xJV]km5]jB4״I/O>24ja4ym%->d)>~}?\J:J'm{߿c=\S8Տn+G ռb[F'u,dVgf;<c/ﯤP䌒ӿC-%rrWm=ɳ%<3ߌu{xM$4~e;}O"n誗\ Mzok_n矓aF (|^O|Q{V5`G(c"o-c>ț_3ȑ3c)eJ5yyl] F},fK{߿3n^Q[j2[Fu-pƬfjGL|=̥x)T{_=Ʋʰg ީ^i 𮣣\kV,[ٺ9Odɗ}gKJm_;WpWggoS|: YGcտsizΛ]]iq)3$o#\Dfo]_} F8Ԓ5oǓx6cx▟Xo⇋Miox:i&dHlfԯ$Hkc7thMmJ>9?U xP|o n1Xsjz:\[^FlQD{+%7>tp*Zu٧Z|dk!ZsFùOm.exdRf0ɦ}>(CGk=+c0~ޯIbeYM.j[ͣi}4EYi2B^}pn &m5}~yY}I#zjsWŸ.M TK|OP-3iz] ey}g q Lg- 7=ج'A֎ӭ鳵I(UQV~g1{|k࿅_>}-܆ž&1jRf{H.4[H<,qޝo~}9ym?vպ|GȟT-|hi>&">ۛ˥~,Tgԭ|Iok5_ܼ3q$podJfޛgaZ㫾:_#.>)xz, 4 M~g ˺h3tr?>}aQ9kx߻OS̱^^΋ӲOױ/M'H4꺍A$- x-䑷Y$ɿݾv{UxV+]I"ڳ=u~?bozW!k' } ։]ܺȾbʐ7 35noeul4jNJɥ]onx=ZXӯVYzYm a/ [Oti$JTK[l#qy'd)jnסUkTRnO-ߪjj~ڧ zF.5oW}ş-nc_mxoy'Tݥ~w}c ĐAoj}DwHl%fGHk6V$u=3`18NJZZn|q u_.Bus-fk?[7ۮ4!{5U]~t/gRU:mVO=β&?FXsJ[W/V3|T𬺇 ,ƝHlC5 =B4PKi/wہVtfJ!^V-[]e0K)͵+q58Z-^ovЏ2Uu}oa鷃Q 檂 i I$_.۾O;sY>sgϤGZO:hٞ9Ϳ~Jq؊ ڼl|&;2kfTQVui}~m<|Ydn! q,RIYڬc.Ud۾GOi12Fir7jr%٦Wr&*qukN? }tf/vy`=twof﩯C/*8Gmxx}Y4 N6NK^<,_xIkeiy ݰ6}l8GK߳~}i9v֟CxX|GWIͽ wO^`լv:X]_3tM jJ+yK]S~kF%ν,z(&C̟SYTѬ<iQ77<ϹxLU;RrIwVq1PxxyZ$b*~<|Q>L}h3mWC7 ^G }9.&a2F 627}߳CrLnB UW'Fiu|Y].nV΄=qK}vߢӣdyMz}ߍ~W]U'Ri|JϪOMt~fg"&P.{]4^}v4@MdSca_xVw2X&LKk DSMg%>m60fG&4ߧ^R̗UOvAd',}Oq$fW<_ 9e٘ Ty4ΜI<͍mm͟/-`!86+#IIJ靭? D , sZpq|;;:ͭn?(9{5z_x{ .Y?OWTXBU[voί^~}̡FJ۽@OtS {Sɉ/nZIw >">>z|5;uvߗ}nSt[c㯎?"ҼE{!sO&uO>}71֭RJsWꏩ +[/Ou/4 aiewiܖ:r7ûZ?"|#OW勲u߻TZz_Bէ f{}n^V[lm8c~}qԫ5+߮GaPDhGI]b]hsL+|W巔M?]l T{Jݺ6#6ToJUk_颱xς<ʖ)F̒H,i`Ugg wv6|fau]?ߩ3j$fv-%̻U1s}}N⣦~|5+gyx[A٤}!~oSv߯r0[Z3׭[_VܶΙ z7lJIlIn 6 :Û[,a B |}ztk"İ,LK+aaosk.-ߩ5?.#]#'ZǷ;wУ ɬ@a7܃lj.Ľ d|w9ytw/CrxnF}?|T;sdBHpoޜݖ~}_w5#/;guPK>(ͷN_?b5@`#q5![Ż[V,ꃾ܌3ִ;432w2KM*KՖe} "ګ2z~kZt覆VK{H^U^~>kZLR2Sk|/vr+ʧ*jK_}85=]{fɵ]MIn>mѷejҗWO?gmo!ʜT?umݭ;_=|nA#l>ֿNII]^^xeM(Qwim?R17US'8/YE'ڽD9>@ׁO?ƣٷSF]v[Ik~'|1Mγ!1ZI«I_ut*ӇD33E'^;MenX?)voT1Sę]уMzݏ;(֕k[Bn9,T4\5׿T $Bq'GboS}/6]9.t|#F*_oO>eܙOQ{߁[,3.Wz^ws8ë:9m;>}W;vG2JҨdT 9ማ\>H;~o]s{/;M h lο7zZ脚|(}hg8:VVZ_"Sա4^P[y$oW{|ӆTtͥw[v2F]M>? ~Ϛ֧kɥJ0=JیčL>t(VPٗå[_מO_|$-M^c](>v2ԃ0rw?sw9UN7T1zc\I|ʳ(RWnTT7^}Swm-?῭Y,/[hįGSYUM?Qm=nQ |er22ޟ3QMMwj@$6(۷+7}Np_ӧ߿a~d; w`2+7o^;޻o_:Fg,k%wjIJ˂9ܿÖ?ȯ>"֗O]&R#" %IkEcU2\ZB$YZ6cFm8+/QJӕϪvJiҒjҍM7Ux?eO -%ˉᤂ?ˆOco}q6Iu.}> Tj8=Hj~Kl.&V H`ٖUO1QU6)n 4*h{߯ɟOx%Tݵ_O{]sZΗtza$Jo@F]۱ޏFFNZU#g.> `JuӶ9jսŘ>Oڰ=߿ݹj7(0rQsB_랸*e+tΘӽ[:Ͻ%w_bgiw&]JEo߸F\Dz׍m-[($]w;IWު"܊#8q^ޤoNOG~I/ؗ¾_I~g꽊4\LۦQ~USjaVg9a<ծ*ԪmVkxgZψ[+\%& _~n߻fu ^d乧ή"U!Gxܝqo_Zo<7zouŔ3*5^鶷߿W͜wwg]ڜ`Xd"mU+~YWq*XGBU/U65 &.QOٷ}/zY*I,X/7_bf73m~}u| ]w}QGvHWinlNٷt 'd~oπ:zg 5*겾yn&G Md_3ؕ7f*ԎVIow饽~gᡈVvJ׫l'Hw{}ﻳ)^?D[ӦyB;k ~8Sv^_9CV]ܰ|Δ*i%~X;ꗟPh>(}MլTcbxo'?[ 6MߥFְܲժөt[=O/?u_0v.ϳo?*ѧyB55owl7by&k٥'ˮz|o~dO{fF;d_Ͳ|F[U'>j+umS.~\g4MC]ՒMPu?rHlF؟}ܬy+ [Ӻ[z|VON]?P81% $%xwx#5 s_MeJ*.h]]khiM|zduw(HE6fX&+!}/]­Xҏ4Rh^ `tra8x79BQl֛#8߯>Ѿqg_>!v/`7c1ΐCmdyfcQ5KeٮN]iy}O4iI:Gg \Vsf5B-3~|~^GGW~)|!pw|?SкjF+ț>ׅV+V~z8U5'yt UEyFN?WP_{ʖؐca~ꝿݨz>YF3*;u6M8mweQ96[h;cA)ݵU*EowEk7/VϺ2An%u'nSoo]?x<{^i2%Z+ݷ$lqT5x٘w,?.B 6U¦jrk$~+ڮ6vs]Pݴ$[o+/+.j+i9f1\Y7~\  #xY_ƻYf>', uyB(o~&>6|PFb&IclbԎ2MvbÊ:ƛI:Tmc9eXU%;ɿ6 l?]oU5l 0Q&/Pݹog]5oqTF\{۞}:וhM[`J~-~^Ԩ{_^^*++ևRN\|n׭ȉ`Um/{{^s^_<2K`n`x?wooK^~]&ޫ_#KF s;+j8K1\|08OO}֋wȁ۹Hݷ=֪^eENmskdz<;Oq?z(|܁3קDm݁Py۷2ғ력N1MGz 3{wNEm|UJJ\]I͸+ pgמqXv)oۯf„cbUpnvkNV]y8U6{vD6/rX[?fRTcvr~l'?Eo_đ`Wio_v޿~32䜟=i+9q5,ߟjYVrnr{7b^+rZ+eBms=z8|-oĺuynyx+9U ?._ޟ"([~kQ 9mw!_֟+=SUvDvwGwbM=()}t UB oٹZj2_k9O}Lw!riɌZoWnYPvܐ}[k98O]}}_ydW}|Rk"|3rxD]eB˛1XBᩨMwe{~~VSH*PWwܩ~z%m. cN/UʦTMٽۧ#}ATpUau4w}ġ Mq}sdrz=qL{ o`]'?FV~O~ Kq#yso[W9_J%XO 0|y?m{cͶmZN&we~*&1VKOg̽* @y2өdU$zƃtQihCT3݌I%GK-ثslgY?{|ǚ~R3:T$5XFOw׷O'nvs|ҷ6tSSLJce)=~mFrgabo8w}}jfifԽԽv[vFb[bҳS6tg~NjW}nSN>6޶B>b#V{=t׮HRyo|/T[koU ]\w-Zib_-Ӓzg[v1҄]ׯ}Ίj2]Wnojo|T|*rz);?̵N jW%]%~VS+W *:ɯӷ]3ߍITzoB=SMw;+f2Kswxj뽽{$^\Y gsɛ+ߨ7-EqX`u3}=hjTѫh??" NJzzfۯ)E+_! ERx9bq~kV=k~K+pWィ Ωr6] +aL`_D2] |l]<t{mj▿yӧ9J~.'*YHȤ,w$VgM Rnݑv5|SWÓ,a~6{diƚo#,yhݒp|D-wۯ?'˝wT_m^F@l㓴s?\u>\jҾ5\9\ CgnGCJRtz*0MK߭{r`U-;zÝpÆ*OƳrJ.۳&vz A؜evկn91+~U?94s_kJipIm!TݧwIPc][Wk׫_K+b>bvYI[:S6IuG=NjRK_4COb?38u~tkNp w;kvk}w9,nk"k'H܅"1g,i6{JKwopɒAs2w=N3-Xxq4wrU[ˣ?wJjYc{<ѳy) ##+6/Si:tnzOlBCG_\zJ\ӹ4ub$[G>q*_U;8B9F~;tԑU0ͻ!swnmw$U:/޷2ž.-=\u[Bm>9+җ++Ȫ0Q[59kk-e3n- n9ܷZB;Lk?y2m8^OZάKn̩ab7{G2+4d,I xg-cZri붷J~u=2>)h=]fū_1]\d|{?\kE]+&Q[|)AMģqs6sLK\~I5}vۮve\^yRiې(l3-zwu7F;2USZs'uߐIGB CmFRM%_SM7|ZZEĆSnJmݻF㟐I_[uJU/;ÚÂNGU{G#6瓂M 6U̾SDmV`TwoO/ "6BS&V'#A.*&kd3+:EڮץMII_9Ӆe*{t:.hoasl)OUdU_Uj_>x,.}Wct SGy<)"IͲw^#:;}[u_oj^)ׯн鳇M7pWw6|MGU~,󽏾7]˧hgXN䝥ؿīwW^naU4k~'I5^[j2i){4o4&^3ɼAW-=P2}>mW/* h:V/s>;ck25L~^1?+n="һV\o[5h>$FoPHYOr>eZJNK.oo?ۂr"|z~:^kO6H9Vϲnv2vw: =_m:'[9/k6:jA[2Dn_>"Qw]}6zap*];[ާkY\ZBa/ efy>OFgxtY+U!ԵU vo81ʋtO3nu?\n3Bm迭LzgY2^n"Qj{Elm%m9z:]B;k.2/ _\^^^ k.i‘[E 32kfiwO{qf\NSR>y^[s| *JT׭{|Mt4i4OXV6ۤYfbORw4LJ~KmΡ+29|/{ <}^ }FVghd|~|&/9t7rSiO]Gj{:o}K;(/ Vl2$~aW\fX{(ӚN|>89!rե^]OsugE-S(Qm&fk3.?ȹi$: ԩZtz7K;Stµy-b}?}/G;H5YVOܫ\HWlzL_=|ҩPFzE%9A箟<1ukEo%Oc^\&4ƒi,``Fhc]߼_%w"|~eԆ nYC6mmV]Vh )UOhzʷwP^}g``q)Mu}/ |q]nvP?4Ͳ?l_2D)]NVֻ>qEǖIo׮}AaIxKV#KE,&f?.|YhRmxsѿ/r<%(^9w~izΤ(b7I;f(~oOlG;}&ח`ӫOI~|=jOm+a@D6-7ﯔRX:_fǭV+Ӝ[o_CԚ) /iZ&Ɲ*nE߯jQIo-5cľ4WdBe2biU6*}.'N_R9%}^}o ~Y|pS>vgvnmZIye?meFmc0*{jK{ϩخ[N]u=>zMgýuXcмXcnUv^#04aJ1wr~|'/Ys"ZUygatu#Ef;X;F}6߯cJQ]I[jxx*q,\ ŢZ߱5ֻ\^8󼿼<;jз>-t_֟[AQ'/=]/IIn5k/O4/B+O/<֮.k[MZ-=B#RR4_84KM2q__InIc8l_xzB߶SJ_7ϩO^"]zny/Xxj[jky 6aʷ˱}>;w啨-i[[]w<\V|"~|Xͪ_ZT+qy_X[:"<̲}w=$-7_ny]>{k$}C#gk-?$ƅ:]Coo>mbHZKG'O9^$}R<g7z7_oe9f^{v>ojIb{Κ5 < qQԒO]x9S,ή?Mp~; 0<~k_~I?x h^>M~o2iz4r2YgH}Jt!R*Vڷ寪2M)C~ wKx¤wcYޯ}q~,ohRGgxoĚ;H; s%I4Чԭ쪭*&[sJxШOۯW@h/_+kNn|'+k\x~8S$iuxɾaHya, S}m]re]A+ >l>(~/5wW⭟e;;6kI-Bo.m*k~xm"X-约:\jIKݦOOe($>ZWo~'|UUgҼc[A=I& 6dy;}5VG{̧F4fGomGbTU][}Kϖnطb<+x5]+>uMyvMk*.n^{ i&s-MVKS+m>^_RW|嵻S[EAK/.13λ&Ot߾Kk??=|)քu+;=}5{ ๧^-9)vWn=u=xPO+ީ⛋ tZTwNt/su Mllז 2I#ۥ~[p_V˩TTo&7~7W; []iYMsGx'9Y^YQå0oW-rg%j2[4j_\4?C_w,~N ?ӏ~y7龿֖:!F tnO{{/"K]ū* uZIyVV$wIq5בib_lXm~7gF{Jwn mκ~O[w^{#Ҽ?Zmh,,Ď_OoFhٿ(dW)(MdzחwxTBI-$ϩ{~Ӿ1+;h:'$AVƔcee/h}k?|2Kºxn?/UKEh䶸֡E|!9Sq9I羿ΘB:.6Vo۱~moZEͽ>]Bj]տhiPg-7Ӝ^cxy9Yrn/Ǐ6;KVEt{B[m>Co h"}8wj&gCF3JӊIGjr;a3<ڎ \oJ vw- _ğu|/4o ?D,4BY6!]i9ǻ)fqW ܰb1Qe_Nr9??=?2)S`:غQ+U4g>XZmm_|u?j~;W59EԼW[U&{wOhz3Iޟ[ǡiqڶkg<&'reͯN^J+۫o_G}V ;i#E3[$Vp=k- O"M =8(*ﯫn\2캝Vky??G~m^u<)o x&mWFIB;i&󶢺'6#U^ENo?YM=gx;ަ,ǦI.5Z5>ouݵ?ت%Tt<^*ͫ<޿ֽ)BG^> Y_mQM.eɀ^fo\z'׾1IR'G Z xPW|!*i]};Ɔ.8]Bnj6|OSⲚfmw[u&ouO|G53ͯrxKo:Mɸ=ċO'tvy:K?mQʜq__\]u''gi=6?$IQD$`6 Mb?=RUqjNS|Z?ϱTyjjMYkv&C(,ǟ>ӽs4TԴM v_'BO]:i}ط[Fp]WaJ2O]v4ӠXɝұ˳yx:zvT])3|m,l̑[E>6ڿ9 \[^[=څ_" {T~_`Tmp꼚y,Ln^ߒ|'^%*wO,4I-oȉ \IEv8'ڴIsu)v-DW=}=$fqdcpӞMw8+P:6/22G ⶂQKOUs _$}.mJ]U]csozͫm{[J/sY./ 뽺~%4͜s.PH'9ϯaum廓le<ƍBw}ޯ9Kupc$67{kqn['_̄+~`.֩4h;㌸ f*ͅoOW,bNV/ǧ|?* j]-{Z>-ռ3&j@Lٷ&z ;nGGR#f,: >nss秧koBw?>a֩M7m^Sz|Iq:Ѫ_-U7}]2rm#|H;#>f6ڿnՔmor[zn3|ĐDX67!ac錒[;,s7}A†~V^jg먓M_b$QHұʀ]v~N6}nKh^!5ذuW*H^/ceԒחyz毊N"~)_][t{}ϳ~|Ԟ(Wَ!he^vi{"oڟ_p <"lTa:^Zm{˻l(W,5xKKow{>Ҵ]yHF?7~}IP7'u_?3MV6~:NqQ&T,J]*^v')UJ֗m͜>~vn|ٗ}}/S_=/>O%̤t{z'M: a(I..ߛ}ҽhaaN<vIM5'emtc283_Z*GHiu.fKt+ UE^d7e۵kd8jnpMߋ1|^iY>%Q-Ε4N+y>feX匿+<],M%74oVr:]=?$rʞ l8Yq]~e\w(Z3#J^]>bWվ{uetcT=bBnooƶM= i5o~ϹZ`J^+h׭mMuo>iwy" UNoPg{ִm˧s|d.O ̟3:u6`M);é$3 =nm^dZ<߮AiS1&wOQw巧뱴[߮HTglD\c:'w~_S'?w)%Բ0 ~w:*ǓXEn߫U7i1NJ~U8_+Wkl,r۵vݸV۳s7R2|GױD61k5RGN.*$[lYwy`o Ra*jNʔ&BE`^A]E'{~~ֿ;[w$ 9#Kkwo]Q|ZkmtKQ)&PʱVTeU\֒v&r}_i#JHaJ~Q?]H4# $eݝYz&w?4;w|oWZw r_5 I`͜必YߩJqi" $\e ~]_jK_ 7O/ܕ 3x?weпa(^O_Yn A9Gu/kZsoO/yom c>ky$0܀%=I;bּN[JjܿnJ\;ZJ֧y#]Mt5e&7Dw~eܾdnʮm|q7|o]O{,N7+M+5^d|{šisraT2]3n̞Z?2?89鸷{Yixϫʸ0ڞ"R{[mL_O tq:+{=^MuqMmAW~|Z_#ʧgIv~nџYxh?~i{jEuVg^|u/vKK^3؉;o]ov9뫹pNUw`>5e{URVkWcn.#,湪]KkwSkƢznׯ/wi}wp#6FF9S8WΕ.[^ɶvnVOI `*)H|WT>fo![jzw{jŒ@Xo3w~O_~/fQ;ۡlq4dޯ'\^K=ԷO%ܒ5ijZY3H}XT:};VEWߡ!{kή^PԬJ$r1,xeEtU߲+nIS4nK7uFN~VfWz˱}V(L#H4m?5c0J#h)%G"U)6~-{i/%աߛr+_n?μ()NYI^˦YUUF_=^ tgBϦQ`&4HV~xg,W:nuASk*{}]guKWko~@7z33n?<)j4)%=sNw}iY@bs1w;k*:=~8kI7w] G}\nVZ;_$bzx.WGJ?J3)9nF;U?kVQ/|F.9 9'z4(KQkoWm*!#ۏC?/4;ZG˽4۲G~:d%%*7NӜt;5}uƭWVM~ sc1r[;u27SxɪW^!.LTu_wgwޭ#Nq1y wMڷGZǽ zgI?﯒szT_/5moW!!~rh^[_~+_x䤺kkTG*FAo5~sSnֲ:^}>'$OOELOGSirgn'ZJMlgk7 lUBћ;)z|##oXvs2~8w$uJv'S~-/\ͿO_JUz;t,K6l@9?7Ԧ֜Rwo`X(bJ߼WUoW|y^_󸑪yk%x?y[YNуQ~o~Tȹ/~_o2PKq?n:|<%>]$ߣ9an7y}u<1%-bb Tk2I>w0}|cj, ݏO^*M?Њmo0p9N=vz6oI'|ia~T*jOoӔU˸̫1gRWi?/=J~}>d [y]?A[UWa ӽy9l*G?wnsΝfߺo{ʆ, ?4Tb)o&Gn8-qTS.Ҡ/oͧߨeU)YJwZTe~d)$(n?}oM[[_6M^K7/Y{84]98#MokeF,jUv'6u-Rv՚qn}ֿjF᳍w|)I9n*@VbW$ޟsJҝ[u 4I6sh`~.c4 ۧ߿QQAE۷r15.2]/驔o-R`>\$H䃻?T1÷s*`>qv(".N̞ P. |:ax)X.qv?>Y5;ΥZK 4n|7aTD\Fpp硫P]]TZߟR;=v.R}MRn7o&w%)Gf&m[H(Gj&~M{۾W#/]Vy3J]-Gv?uz_ưJ]NDNNw23w3Io.( \o_ޑ F+eM~~}~B(ra`qv>_QJM%?$Hʳ+9@?Ue^: *oO/(P&#ˌv%&ީ9{׌y^v+e0/\w\~{mn:,>~x]%_箫6g,1჻tCA[88sӔߨh;k}s eln &Dvn݀+}_Cmsm&4pIϧdHMqZ#aJ?^ed2fgU2܍کW0{p '6CNI5ko̪8E;ÖsXs Rk{jW+;]fRmߪ&qD-(pqs?VݚƝ5c"_5)eޑ\F6o?? xϩR*m-wӧˣ-\@!}1ݫRwoO]ʍ|>z6m+_|gotJ Z}֧Tj뒌D VDF>91z۫doue{U_Lj&BێXƛ]EǪn^BnO3z.k|܈Cg ^},oB7:~@ s.4{Zvei]vS.}kaw_!YB azE+9%'Mvm<oOj#)9%{IZ"fd`@yO9\|ߓVҍrqD Go%W_{ӥIfѦzjǷ$lOo£v{o_֤--r*ƂWC$Ån(q׿8ٿսĎO1UB6fj?t]41".R{s⹩m ՄrKX'vy?>)-"=2Nz'H"IZ@27qO?mWص+cb[t^+w(^_1.;,? 4o-{fd־F $bT7)w;5W)| NNO!o6[cQry}~fԔohݎN/@xGw onRebn۶̧kc'oS`2 4Z^׵?:g߿OJݿV[4zᷦ^|ƪ^1w_c٤&i][\j1+Gw5I$|fT~mg+닧}/ߩ2qMGT_鶚͎$XuG-NOWyJI;[@fo۴>}OEwOUԒ[,K`*jO޻p.nϵuȎog۷sº#ME?_7eQͿ?ϦK=̪Zta3?ӔRwۯψᅲ'(Y+u_7~ $o?<{saВttk[OVRX_*'V_מt-[:bekKW54ӯ/繜)'#Xfc%7km:bįik?חMCI9/WrW_ki>O`G2+mooMmW]:))E[5.,o5{%cix*؍\VzmwQ.ڴot)n,5fV+o6fѪ8yyl'NT|{<5%D8@>]s}J}ߞ<(I˚}ɮ3 +Raj#o]UO/]ú]˗$/9+K7W[*}:Uʓ,Ȫ?5y$%xI줯V|xYtUg}OV 37'ϧY}ɱIfգYs'|ɿ?a,*)QE[M_?-k?XXF/VY<TnUeR=/ɷ7~^OR\ZjV挟6rOK QmrtվIe; mmkq{ɓ?zarNM]Ϝ 3,ݧOy] k\AwZHf.[n^Sq~Q`lB^K^﮽|Fԙt˯0hD4Of#sY{4ofAj߹1\d=VΝ s11ykm-|w{L:_˿|Ĺ>efi}ʙb̩|Y[ry߽wμ5d%߿grqtu|YBAUv̿.z|L+4x*Y=_#~u<4|Ey{ӵ;IP[}9Hk{[2no3Ҟ*0Z_ϱ ƴU;wx/ͼwi)T_/p\߷B #RF'qZ~O-82WU]OռO  8 \4(w>uXG>xּ\}FK 1]_z:hב1CZd$/Ъ_g+A'~zkcϋݯ}Ξ/_iᴺay!́,1v~䕾*E(/LX7wVm;?¶Vy7ط) Ti#Vڳ"'W*jm~f83nϷ kƓLbicY|VqQ2?c+Ya(Qwoy\e:\ќ/}׮Ǭ|;uK}(Z͑!?;Ϸ?Fm[ΈFI(n_w׫:VLQ>۸<, -,ο2?^i-{ڬ-ء ؎H|vb.6*O_qm+XғwWz3+zjZq{]gKjvLXq7 -ݶR2MA=:S{#.nme{{3FL,țGkW]xuI'uޫOԜeCAQʧҽ)V_ _Kh\r2@# ?'}٢/϶WΣ@, q?Z;:=+͍'x۾n3N勵A_$pAwSkm/uԕO-5?Ԉp9#?~>i7mY_G*7 W#u; %}|I8 C8yMmf[v#b?Q[=:XzJ6 Z]ƙ&t/mc,УYF)PmOk=}f %Ὧ.t뵾l-ӵbV;k5mN1껓3&I6I6okJ5RKI?Aʱ8h<7$; xem(H^Rj]_sVNV&ik~]QڲoW_ck֞]a/R+~elƯռe?=Gkx"5pG}i; &mg[9;>I- *2支]c6k˅h62^M>O6mR?;FKA_K~~f#(ba{O_sZ?'σ@%ֵ_s35kKskx>f${~Guʕ8B~&w8~ϖ6Vۭ>^̺ZnJygwX{ Om.oykjvγ[\̒Gt~\Ok{ ,0w9.]z%Chωl'Gg ih\C e-n5IvwK9l>?W,>.9zKZSTU]ywOO|1'ܥ΍yYȻVK+ŵffTuq=?KZ3UghucU98֍Kg*~y>q'EryR__\FA,̸d[D_+%k_-4,YW~^%9?gWg| ŭi$1mq kjŞm o&HdHdpr^gp*RKx|O/1Gx}ڶ~ǎ-渺ݬ3I2eyu<6p%U# ק9(ni[gԼ=Jlt*j8?o(_? ki?Oy.|n?\prdp4GO1pJ9~ڜՔu?uxjTÖv"-v|+4 _V+x-ƅ-f6dxv^Cld\g'$+v]㮇gO9Z]{uw>[gmwX[h?dk]WR[u 6;hkcC49>.dmnO"ho^}Ͻ T| 6o񦟨\6i.ukqq5ě |L.ͱ}h*t#+vu7~}ZUF)ʜ/hz?O|1nvcjQAtQƨ9DO/W% ?{z?Sϳ]-+~_>~>- ,EzHԴۨY$hxf#IཱིiSvO=y6?w=;yi{oggef.u':H,Z]]jƣ2 ֥ 63˲GgY/Bg~>_/i-]]zJEqow ?[O.m[:}ʰN i=<7S WKy?Qoe9^SUC(SFaSybo+MEk y slOd|,šxDY+}:7{^vG(y64jb{o=Q+o¿t?/wOW.eH-amƋKǦ_eD\M^L?YKE{>>E*Vk[{]OߵD |P-nx{RԎ OZimjzBj :{?4mcm _J6zOT}OWmm~z}+CG>"j.cۦ` Zǯ\JWs}oa"C27٬>y/grɱ>*2\˕ٿ~#gNU[ xڌRn_%I>x;K^1>aekzڄC<%dRd0ªz/įг,¾kxeU.+i۶j6qbs}jRJSru}=ԕ]L7Niܡ-wZOaw|5}zS>mKV(;cE4y8\w>yM\SN^z~~)~|Pofi-Dgeq c㾼I{{MUfq'IwuT?xC\q&ٮ5[ٲ^]-{odi3:3?Un:q(%Fպ}%C=oM WBU0̈Y+zNI^~nY-ɾv%Nay\z7ʮ8hm[OhOxnP9վmqkc'{?'qibۿ_׷-a1x2m,{#Tk>N]:ӄy_/:XYǜe=v~fӳZj|ͯC>MVZϙHdY4ɻ+xutHAPXbsJLOu~g-m\I&^O$/MKyzTTRw鶯Gezϙ)I?7wRQJ+[rU-;?w3RvKv:z8˪.IзzMO#cQ7r??:$ݳ*'ACi~:xǯ_SI.O(xZGu ^Kӭmf:}r#&MqWb!wq^630>p_o>(4tCm?:FF{ZiCIc> 7k&07y8y-dpۺ?1q=4z.3˪K}ӭVSU&z?_`Ե & _ܪ{]MIzPm z.k/:.t:.Fyrk%okVQy$IfeL|̧>7]^Yl_2iq-y?znz_04bf*Xe[p3{}~Á B f\]eՓ)[ŵw;Cvʪ'ޯ^Bnd3J*Z3_R[,7[IS+&g%} >ߺuk%&KC?^|}{_M~/ ^yPdee6ڍ710nov[j+-s<>e?Rmq ܟҿ8$G~ǚ_]|56~KfiBLho$Oֶ%JrwEN#iu}KU35#$bN?=Y$oWX8I_W{zo߹K',3'q~?Jԗ=ᅴJ1{~ܠ]" QNqJ);)]:kl(xݖuq׬zyyC`_ڹLf}v+>%PU{ZpWLZc'C싲Ellv{ mw-ygUf On)VzI]L$F2) h1ˌo39餇RK8KUܲIO>_8n4/T\_F|gg8PT}Փq)gZ>zYO"ͬ zV$f_Olq\XTĨMASrw&M}+~ܧ{Fn_zIYMwtc n["y{H˶FVٻw'0,4cm{7wz!q +tOw ı|t{˿Kn^zK~/X9wucֻaQgɮ߮,ijeVk1U5RQm=3avI3nwc'm/S6^_UrYi m_zZӒ=e^3߭v]HO]lZ >EfjSQWWp |x?;bX'~-<&[S第U c:1_{]Lk^O{쿭eq4MHn/waOqiW+rԎ5\ox:qֿ~ͽnT X0?^0vEiUz}ܖ@w2˿_'4yhwe4ᑆNǯ~>f;[+Jyoїt_wJ#drl !U~zjuEKWeFٕXe@P?P5%+)~^nuxft;p>e\h}ʝ5$4DlT۹VYm ʴzo)_3پG24qwZO9'R1[6YmC$Jw^K33~ރo~Qt/>:d3,LV.9wnoSkͻu6W,$76G=o9sY? QjMz{Ie[0 fe۷wh|>r߹ykaM+8A#zY%wcOb{oTvBO6mazUJw\ϚR[:۟'\o zKúOڥԣ;J͘щ#]߷uTFwGreAsF\{[ɳ>u]>Ax{O2ܻhF$lIw`M{rD&.i\]*9M_~ 48'nye6Eݟ:ok- PMo7}yzyKJүZN:o ]{=>k/wͅ1U՛}^.X.{k\sb?>g)䅌Ydp.vQ-eGӯoɉj?ݭ_>~L6S9׍7GӞg!5 ]4rƗ"i󧥯~π?iIx?4"i>˩Y ʻXV'A lEM։uyy<)*Ԋ5?IFh&{w׿v}_]Ӵ:vQȫq"TVgwg,n:*2~{1սugni-|?b+>(Ul ~񤓿_ .*q#kݾk~uMK|EnkާT]Mdu!,`J)N6w?~U맗_4嫹r+Ylf07}ܞr>WA*wr2F+QUO֎~}#eo܎P *u{~Q8>x j$iލB1-ݮ-A(7~ɦ22w?C>Z< eŧ8KkC v~a94Lyx>ubXC(%=-+->}ٿ 1؅[k~^]O#< 5uokwR*iZA#dxv>Mο_5L<%w'۾y~Oa,F^V}~w|l_nhE#FG T[^~!fJa ~ko+zM^^9x!WqȾW,4_-K[3Brý_}b4 6NNJwznێgnk8^^/бaXOM!Uf孽nk7~^߯]|gUNIޞ5fWiT_d Hz5M)_ؘI:sj5~ڟ*i:QŷsǛU_޳(mbA#?Zm;wtQ?_ x¸?yЫu?urs~_֛[Y2_j{֖7H82swo?J5*._]0W/rgoV玲EooyM)AY=Jmyt]FԆ [p}{;u̧y;[ϳ D #yl޻# mտЉ_sQ\HZ/׶hPu}NS\ߟ1P u|/&T }:}f7T\*ܩ{^~Ƹru?^_QgbCSueMO= s zu|Ҽu{BV@yA ak]9#bԕK#v[ u{g^iMujz~H]7&?_ܷ˶qYg,~~PhׯOm1(dr/':kբ%ϵ1;g]&v;]{רHrK~l$+y^VM}%ِyoWzM7m̥)A{ߊ}]l Z/$\T;_Dцp?wsʒi{ %p@[oNM%{=7Fڊ@d*)#O/UMӶ-hM[(}xdMA ;6s3oϵi2% Y7ķz&J.m#{Zy+1uR6.gZK}?3Q_Es ٘UfUv}MU'5kM˩Zs|y?rH^TA9nǿ֒nM+;烴_Ch?jN6(5;n;nd_z5IGqw".pNBp>R~fu>̡)BvO$g+!p_ֵݿ['6u%E?g?ZÑ{hE/oqb031\4I\W__B769'_מZr roM~?;GڅAPĒO~_?VL'/[.? sk׾|RV[;[GvDa}]:k]zk+e?)9[9>j^i$~_r5X`8שk7ƓW!SfrTRޝ^|~vx^?sˣ_}@'q^FO꯾[nRrbOc[U Yzr~v?Zޒ^o&+voa.7FK}ų**\w߰b^zO2]]{z?'#{ZF{]?k{yoI`UUo7(r+%Pf os.JM-Tn}{A`NC_{nnh!W߾r~hrpX]yϿAu{= Can.H=m~,Pn\zw:({h|ir_Wj/nœfw_1SɋU2ˌ?wOR' w@8*?~VMew~߭ 秾~{T7(uy;.n!lvqE/7]}=}?O򹣕8zz_̄p͍c'#/i9뢿Ί~_-26`Ijnpi^۽I#8w/V7ޟ8t_ K ';z)%>ekØ*q޿ 6=w|׼t[ۈHXW2+ʻ_o[ t=_V&Oq+si;|ιTVv(zSpo_IF[z[hw6%'{wG~QrKΧ=dַ&fʁ#]Ϊ1M{|[V+q(A|v#q䖟/ÿ k8l=j-wuBW[Ddcq>($FQܛЏ}zk)߭#w$8@H?wv˥SZzĖD UO 1m1Rz;z}d#ߟ4:hWS{wq۲)X 7R< ~KPnH䏙?jƮt TGsns_4Vƌ_56'$m'a@'net+eVPm #QZFVk~8eF[} G*ÝKʿ+}z)gE.xUϧR!.~_|Σֵģ.mHEb=1vcD[{FQ_-{2[,w s[vUm+a[t~G-C0;brWo4.eb;&HXFS١-|λsՄ57o\k<~l*dqGrmC̻_6k:0!zgh;vUGEi(VUL2ڬI㞟֛kOK9MQJe5h70Q?=k5_.T=? w<6w7˹hs=5$ H B|w{gw~/PW]}opq9-MG_{G+O_Ud$)yd3g?wժ!dX=rG$1Z m"i.i*o]Ӯٿnmo Aa}za'%~dԟu4Ak(*>p[i_j_Q:Sz~} V6wVP7J3d6䵔9-GvƢ]z޶2o1kTom}ykg'{/3>;7{N6$X1?Ί7c*]_:wH5 eUnɍ e{쿝>_..Rʺ1%Hm銽۟>wY&ϗnyr'y>սGF+6b綉[ytEŃq&CN9c^pХ uVt5$f2 -XO[8o,v[,>Ny6@ʥM7o={y|.=}{y%cwe qXFcY'i\"Ȼ~o6eySUTײWc8B"J7kzwrk5x#_i7s^n|Z^ҭwuj,/OޤRpXcl_c}; FWgU4!%]kߣ;} kCfڄ&R80;gD?IԼU^P]{_rQu=B+5rr%mo1U}9%m9=ɾ3R+4*JQE lHZVX#+,26z҇5vF^=|CqadH[S;ٳnʬ淏4ٜ/&D `bR+C +|\SjR~:f=^" /w;w>3Eϖ-_pϯ~3 mԫ*~sg;76& ;_;o~[dmW/~>Ux$r9-&ݹm3|YÚڻÿv%iIikw]Xմ: 2}V]\sIsŭyY˃];ʫ.5QFOu<Мonۗg+)U7{N?kl<#R!wa=>o_u$ЅIlo-0v۸?fpMOEC,Y6WǽBխmt -UC|Ҳdɸge_%R}F4 ~_;kԙAKWMr=C/DȦݤfK0_[N޼Uxѧ&g= +g)h:MKg,Zjߘo42M>֍ٱg|f&q׷⟮|U~MSǯɞwȷ]zYOrv*bjkqk}+')=t el0v\;v/__SWϧpc/G滒Y;Ԅˠe?/o73uz_~~>ewm3浼5Pj$5tVг3,䑕>]/ԗB#^gx~K8n5נ*f6xo6wߕ̲H9ܿ=ͩq?Sw^=V~}X g mO ^Uݳ|ʨ\W,F_rcvc^3;Ҏ{jhFq{r sɢI6F*;oڻS_crF#2J.]גsC}цrN~_ֺRNSşVsMW5m|8Ч\7 &Y_ja)T'6{W4Ƙy'r hkwj1/9q$gwmuҦURv_;0V\ϕu]]EkZxX>.2f6ڲ|a}M>uL*W ;[~z:gMTJJ֥g5z~{^k>fAw3m22]'1\Stק~}фsQOٯ˻]a钫[R.ne|T_MH;T=rrVo:-b+th՞TMI6Ho/v?}:aZ|{90G5yoo./⼶B:Fh慣>[oY^6&sxϷ[\j0}oEm{];ݙ͵wB%m^}>gֽnE}1WT+ƴN59:Z|ْFՐQ@ګuVPR>ĥR*o5?}/58UiIQg|{ DKM~"Pos7cj_j[KK.:pۻk9mܪ_$ߖ?N̓ -F77빿OR (To-&j,72]f;eqE7?'ќw^__oi?&K3<>g|ʭ,_fws7+cwn}czփyIj:E2ڤ&m>\no/lקGwr>i٧⤶1:w VAƤR{ߕ\!'=/Hk.!v6|6{O~;y w:ZmPr|˧^br7(ۻp*}~eT8E}ޫp~ct$Oo?|Sm-FIY~_t{.e E \WA;~ڞ0u# }nߟ{iYԮ\ k5pqLcZ+k۰{,4\\ Tݶm[Vu]ٳ+3ە{׽z&yj}|e^+-QɓH~Fݷmi>_+~~^iyQRW-9%ڔgTk##UV]ڿ;%ZJִ귾*1.['y~%(!)῎%Ͻ>FxqDuӪh;O]{i]ũ,ŧdvK*K>?KG.ky빣{M;R64\ȶۯw~c׷*BaZҺKT߫4i{iR[_}x)&iVuwo%ƏwChdӭaEUf"cwG=}Lif%1׮<)Yɦ>oWZWU{%Ev32{tۺ,\iӟHw?Aʥ*8x֔7ߦ7_4մoJXnɠq\23+F8ܫKk.PN魝=;?緆ӫ='dY>ס^; Oo̿7~N/sz ESotb˴}Ȑ6 nf6o.?Nd[UZm_]mm>k5ʰ78BO?/MݷW^N<;֡-լXf}.O܉Wngu*s$w֞ZmʪѭQpWzҵK0k[2 TPgjV5V sf6WnݘTC QAԔt[߶jzY>TuVTi?kϔngk^;f1Y6l_f|]lLBTkxt~#xҦZMErdwxC^#vn]k{>kPu}E2+Ϻk~Wo_'UC\Kjq۶oz"?]l *SQO;~>c.Ֆ+oo,4zl`IJJ6o?p>z8R{..nt}'ZZSk$=F 4]7KM Yo1ޟMn]{FM׻?/SzM>k%ʓKnLdo?J*{ɨ٧no=aƝDkݧyW.X5uVyO3: \q|hB*wm;i׿~?AjЫ(UVۯϱ$Z\XMmd,qXu>mnXC2+b'jsM6>{z쟪7|;c>mFWHmԐ2:?:'qS&,oe]-V!(D>g|g|;cPռM_\Ŗ%1NzJ٬l4|gx\Ѿ痉EJw~wgx;č*G?Vaau5z[6.KLKǚdIG[ޗ^wn䨥R:z|I_#!._TPٟ ,|ĿZ.xYR2I&շɹDt,o忓^|n+Wɫo:[ɥT};7>4Zt}NV~[ݾ[[ɱJnVQSj.iF_ߡ<}I:ZS{Gm.(H*܌9;Y[ena_9w(k_K[Eŧ]>>xw!eN%#9(dԿ$NFlaξ.*;igʴV5$􃏯].!{<}|)7~!tmGRR[;}Bk8^i5%O&?*4#J׷m^#x 1_gj|)3 S-ak^ bN]?NmK7PfL_sw7[ 8uײ95_~߈ |y+ýc#Т"ž0rۼ!>{k ܞd5JWw *ϧáI@$| ;o ~dvvCZ-Su2 C!2U' ٧w}g ֿ+tS?g4 |c.ֺxzGKHizz|4{wGK8㹎m7:ĹS^)$e/q2Nw+uM|+xS] h>m<?uKN M[M]#[»4߷i}|e1JWn]=l664ZW_n_V%;-}VOO=WSՊ\IIoq5)e";=cǿ9Aַo*Wuz_^ kv~7xsXY%k/!ue)rJO:6DI7כQF{I٧+xٿ;YQW$=_~3?fھǞ!e xG]yUouMBI$Iamgur"uם t+ZuoýJ1JKKt^{ڧG,.<+`tߊK{{>6.mhevԚVkv帛YۖͿyPm<_{㯏/߄mT7mo? 嵜)&D[l4ږ ӒiUU DM)=Z_?V] &>~hjC8d6y;eϝ5$1I_Kk~BU?r^Z'^3s]mk_~ݚaq&fI0 #;#ٳ솜MGkXg|k?Q~>+($FmiYw<͵W4RiiV(=릯pr\ofzv?%h M^ѝmnmG&Ʒ$>rW6,58ӭ.~7| N7Z{_s*xV6Q3d5%!xAϒdgBTJm5F`(0Tӽt|U5 IfêFif]=[ˎxfa_|'6Rgf SR<[[}ᯍo5CP.x;mi}k6h-IshJMBϽ[>ak=C TpP~=IRoYg%}=gf?s?ZFVcG$5˻hxs_l^s>wԵ`iƇ!ݿS1~1Q b#qSRμyFҕZ?/un,!sTݫIIA_RGa,@cuݮ_i%Z[o[ 8a޻ϭ9r '`8__m~t?9XI&A?ϧ=k7V1W(kW46pFn%lT{_]e[Jo3]7u}3#ÿVxVIȝl<'!wnwL~e In?wu:)^P{ƚ]ަ}śnipO.K/kͼL4qA cMK_7ƫ2[i4gI>YYi$ex#7؞E|ֵy%IgOnTB}k[Kx42F,ۮ8z#:4xv}e{^mjcnIZfZK_bҴ4xT,qmq%g}:'fL~I~V^K:1RwIMz cq}=vڬmw?ץNEԽ_-[ķ2X`3_l{4/5ַ;O?V0rv5Т3yَX;_皠4F ӟ/€-®ŕy@O˜8=2Mͫoy9۶M.{hSj]/3Bh뜃6=~ Ǣ{O2Sl.}X?̝ZH˵gv]ߏAs뾻̫"zwΪ1e9r[(Gm$=9'ͷJI=o^i)3#+LrF[BL-ʮNʝ]]>{_) pϭW$~+SI?DiX1@$pSnߛwW];[Y[ٺ?fk|qVl%U5^9'{W;c Xś,/5jzj-ZHxTo__|~qR.3M]l 6 |xjԜo_?@8\m4svVV]AYyp˃|ֵnOv 2i>o Ìw6IGz~ʂվI"SnOg} -/df5-,]6ٴ26w4a_w~UJ-_],bg&MrRd+/]?Teo;5ۆ*Pe9v曗2gܯbΒFHH1PJQhhynݹo/y[hk?پ+ϤG~ #I6ݼG_E:u5O~q5Ӕz{]Ϡm1@21'c?.vWOF >O]{?8JN׼__İм*w6xfO^nV]8rNjE"h\&C#iviRR2ս<сFe FWk,7*:Rv=ǽr<-4o}Nůzw_~>wqTQ:Ź#z}/<=>W: ߒv׭v8,VdXYv$t`kZOKT.L|A~k݃eEd|6ϸ}d0?i.K;^z]{v1uo hZ&m6YU8!΂8EE(6m_/fį7pd[YxUWM?oy-RZۯC濌?f Y%i$!] = :h{;Ne<_օcl<\[GM{ú>(>zZ:uf\Iƨvw>|?^m"'벾?Kq6BKz5{ww\vf_ylu8(v-[UO[eo>9䫹d7@TV廷qӏ76x־0P{ SBDnhR:|x?_W: 4zuz5}],rקU4~mo߷_x֊؏IAx|=ەZ9e~Mu*<4t+IWT;iy'QYk<Y֞X^]zM^\wv[WG~m6G~}N"YWRsu`5m/99zMO͸Z_^NRo?.n~gt xf@ѧԠdi6GdđdϓM_-*1^ Wk_$V~*-~]E) sv|«8Xw/޽lImwy( ff`gh%{?[t}$u).+wl*Hqr}ϗgl[_BW-]hYdlaMEr}|뮖cG?Y[vף\M8_W8/-Z .w_7 ~|)_7gp#Cڃ4""hڿx/Kiڪ罚۷zE9KFR~`~Uڻ~n)ٿ}-tb ]ͱwd(~?ZɤٕF21*H'}XJm;Y&p-_M3N?yk7?][tm"[Uoo~K(箺O,;e;rG=i$c Dcf`w? gsJ5'9m}ocPz?z)Y_~g&~cvAr'?{=jb]'Eo bzOgkFwHDďv??º)(Zӫ'#ubpK.< -UhH \9)]\i;vmzְKYoӿ^=#v뺷m}oa9 Iwۻ5jQ{;BqYo<}sF8ar67Uw7BROWoO]ˌW/j(n{ʅ$TݾZ٘IJmz3+o0 kTj8zy̵|?Z]=]w:}{P8X 7 GV53)'[u?׹.SR?'zqd!s}?ϯh{3;;,/!I$O_jE+_ץʣJKU?WL $snyow޳:wʿ7;c?VN}/Ϲ#qn ׿jTZu ]F_o$r{yJ_E:_Uƻ@RzdRQ]z~?̨UvowGRw}쎟twTͦUTj#,D4ܣRJ݀RBw}JkJWn~9u~; I)%@ߎo)U}v7rN$]3wf]nxJg4aϿ )'v{IMOOף1]`B/O}>oGLiCXb9RHP2̿N)LJ]w|An]ă}?Ɖ)g= 7wtYU!-x>ZxghH7N ?zK1ǚnz4nW&1Np@ZsǿiM]mO?:N0 }\ q3hc['9}~t9Ep8.F`;ܐW2VI=_c*r /WO.ئo{ܺp^?hY=O~5FROߒ?ӫDpTXxYJw~].[mz#vcXk7>/b$}m/ϽDoA =zu¾4 hb8fadbB~7S:o]nw V`@@$Ԫ'#Xl ܧzRw.G?.v'nviZh_wG$F4 |͟_}'uKzZy rjg?롕8݀FMGl_Uwz_w=FyUƠrzT|~+op)= ՍQv۫Y_ںuGzoN=G*UXn2W~MiY_ĊT]:Wb28YHprinw%Ƭ5ޟVq*9ev~0lKv9+ݽnP d csuwWa>k=+Z2F2[+8=m Sh_}Uך3qjx~eg׏\Si-{oR;__= ewr6I.LSkZ[S'M <ߺjTb_[~RN;ɃI;;_!Suy( Wsv?~4BFL͂>}Wu?Ғ{?cpZϪ}W-NPb %F|mSHO8L$UJ}{;ogkVM2gz'1+E~So[kos:F{~暽hE{D^ﯥr:?Qu-_EEԟc[Mhʭ6E;><\/f[}/RV|~[IĪFW_o+mouuϵe j_mi!ˬ|דG >f]N9JUwt w}* [n~]λRKV穛BRI+ujo?>ūYjm4l"g#nFV'lȫ͹|ݠz93סCOm}-e;xG 7HE=S|d &?}νK=oN?>+̑tDZ3ƪ.fڭ'fϓr4| w^S^'H=gQ}&H}FvYa;W4ڷ® S}w=|wvv+{h/ѵ+[;iYbHnPy4rL^ڷ}gUYI\(m]:ד4ؗW]"JW1ZI-)}kvsfTMh[_5bSuktɶXei;ׯSYSե"}Vӵh4˻i}81FCmw+ .2z_yʼnT2kt7ΐA #lcܿ/j^2eO -^~vM!F8SP{ HmsJۼ#ldt"W,O=k{%l<3}  %yGkv_s^dguZ?RApq ;O?סvKC?Ts1lqܑmqn׭Z]>?qA[riNYܳ(@v=k׿6ߩRM'i@iid?>%VEݵ}Jj[o5axGsy&(Ѻ`&DtƝ)A=M?eiJ^,܋Q">\m/+T*JWw]˭Irm>>bB云Y9n5UU8ѭi_e_F{o¯+K˫[M;I*yo'1Ĩ#7u;cZjQKVf>PEc 3-X^Emȫ#މ n3ڷ4׻ܿwl-͵{.fi-C4vw~ʭ.M&Y?keO%<9 ~ͷwS]W]eEA+zub|7H,AvU~?ZÚ}1a'mj7~.Oi(ُoi|R;XW)ONQ^"Ҭ;aj"1ύASr~Lí_l0՜jB^k/]wI5?h:_l..vh}2{yl>j.e<^JbZuqk"$%ͤɻu3E_b:'?'Z1J|u7VpUeKjmo:姇d=OPմxi7ef;owP=ӻF5[~WoWDO-2u{#k 6Ƒwpvhb*hԫ96vTh&bQyn?eVOWK|yaoHema\wsw'u~Pe_/2gq}QeJ7oO>~aN{k[K4kGŖn4X2Z9>o׃_2|֋m߭vK$_o; 4V| \y$2} ۶*s8eWV̉ζ&ь-^}:zφ,Ѯt{}a{i=6<$}´~gkIӳ_C^M|}_xZmzO] l[k#Xp\;kr~ib}J-\Nx-SZvxx.M[n?1HY*.O??VJj*˟ th+NJ._{ڇl}*8IeXng|)~ hyXjJuUk.}AӾso}= ҩmG>kWJԝ뭯_TS6F˶o=g^ž?u&')ﮢ;> X\FMwɿg߯s>>>μIni_{CejHգ;.^=xզi* Kҷ(ܿ g,=Jkcק(AJE߹vY"w.Wrors^}o۾3jun}feDkJ]^~F6,2g8cvJQ[6K_ӯ_Gյ^&YY6 }ѫ2Ȍۼ+06?~^ oV}lpB:Siשo[B-'6odHDi%گ&͵X:o7G漏ԲXӵ9JJ׍}{pn>ۦ[?oϥxsο5$"#$6E!kS̓X4휣\_Ț]lUX9Zy[]tK777Ki/mņ^BJ1 L2mH?A+B8ﭒ{}]tg!deӧUsMCŚᶄD^8$L4vm~6?^k'NӨzvNNRnj)h>kہIq{&Ԋ8#]I#r 7 9u%o#17%G{}P'Β/aѫI+ݡ<%UR3mkkNYSqqfyחԶI v.[Vpk|ONP[F6iӾ>z,]:Xe4>+{[+]'_Z{$VUX3ZEN?F.~~sߋz^xoO.#Co!fUگ嫷>w^'6eP-]>+QA[[}z~|ygAk,v34H u ᛟ,VkÞXM(x\ҷ~4m.Q[ kA"TYFmZʪ=yyO|u帪_|aZ\> 61[IwyswXQnkS4 Nֵ).SAY>iNdž)$., GqV44[HkTPV>x)ZOc>i+]OTOכs8nO :ω|Q5_kӤᐴ:|lgC5wG5ğ qUÙ6#N51WN]{h|Ny8YLG SݫW+f{[/_׊uϋ7|?j6&G|cm^I4/ IMO3|Ϧ]#HG!Tv'>X˧rƬݝM|ZZ7ݞh;@uK,ng?zks8Z˾JtmdM 0)f%GVgKm#vrm'$]uZS49^9֦WI_n2jg{ӽ㯙|*WğZׇeW^=iu N%>drhJ&𲽲'4ut{ ,mniGF]{t{s vQ_FYk|B4x# @8ckXQ?\04>Jx;+w?_FnI[khPx?~?$%$C񮭠mG[=u-56:Yϩ~˹Ws QqZPf}N_c _z&o~?exuᯎzjXlm}VouCcY${s$ }H1T+:,ϱ9>i);Y?K/$[-Ε&qԳog'5[gMY? /aaNJum|G*Rt~Ɵko ?i&>)fT]WϿu]BKB9$hfmJ3%$FwxَnME^￟[u:Xsյj/Riz6ĺhjPYY'WZ-Ʊ#ɪiMo/ &c ok|2k{zo_C؟ց9_ΙmnUԼ-o-m/utRK۾n}UcGq6w 4iΩ|Dԭ{nv}OcGZ /'k6\DԮ7%rii34oEwos*(tUKﮟ<\Zxᅵ ]j(lb7kj_g2|wGɵ*9$.~}0^# ]%d<wφ>9|%-׌4/x"_v!HI.4?:l/>s-D+¥m6ta)R.Z׿/~|kߴÿ:xOG<=A?\y:~^Mqg"k lO arIo*JV/}?[SeX)ߕ~,|6ּg/_4}oOIM˒mغ9fyl3YoMsO-թQA.f^R`S/ GX5U̇uN0mtoj},zi96[ M#c37?ޯߏ]yϫjQ ).HdHfo? w$`k4A ) mk桲VI`C?7#8n'=4k oyC;wiBT_ZI}aan$eI,l궶2C۲k]xC[d^j}]wjxU{ KW%T5RG^/3I DHQ2tk&oߵws5NR~O~>Nh~ i^_c3A$:^mVl[Ilo2O^5<*sJ]/ěE#IFxǒY~rwcM}՟)u۽jvWFč.ɭRme?)a@?{-IcH9,?OiFRΧ/鶾z%?'p&AE3\r7pv]N|88WBo_}o4[kgw#4`Y 9'7<Ӕymr{~63y9!7uvsC~_bYY+[?7͓EmN1WzJa]-3+ޟjiF]u︔[/NP[1̡doͷ/s^҇*y{?JG}{[NM_ke+O_r0WQPm]Yz>^g+ Oi>޶]6:C0e~o8e{]sbTu%&y[L|#wwM;ŘQG-ݽ_E:̯/3倒J/oGGm&G3>i-.|?>_3|ﯼ}O=qJQo޻?UРWڷ ,q;WCYQ߿7Ksҿe֋OO_SN/\6FDeɚI{ѥY^z\8SVa8AsH.)j*Myǚe]l赶~|Wh]Ko$]cH[o$浺O]"5zߧ̐d `kȢ2~9`Ԟϯȳg)P8-JWEy_vө˥w/8/Jcև>ɷR{J9 I }e}ħ;5&ӺOR0A{vmEOF3JU!붯y @8wyR+0g>leJ &ӂ8'?5y_߫O-,ر]21ީ$ t{nd_LҝO2_LquS0'T" ;ɵWpJ qh*8{ރIp@؀6{wDV8(KhKԂwlcbOovvSi}k(RKx _ZӇ7U ׄS[u$MN ?|[M=LiTIMd Ts/?tp~6)7g}z[] _/% T*¿krӢ/ΔmZ[nϘsnOZ0u~F5]>[m O+Rr3EH;k}Io_h;tR>fw7g멻wcv]P0Xvv?/Omz{WϿKpq]]ºav/bOIKGzE;m60.?2n)/[f~D|q+n D[k_-uYru\~V_{MUϿsӺq,#3jfWI/Wׯ:npi7{wf\t)D|^P/2k%w+?b Y%p6wۻsb{TÜvhr9&,|Y3}^}jGOv_/[u:`_ֿEx窼{}O/U\[ߧ}9/yK3ߴg/[ѯn;[!kLTox]|j.qqis:-һ~kO ,V%onzm_[^ i4Ԣοe~VH*3g_G+S RGOKax?S٭wϹ-q(QʏݪgʾkoX]N]ΝhP*þz׽gUI3$?9o:"c/{CzpڳNO-jjEMܫjvo{V8E4OSMS4~ga]ŔgK1V1O{;]?fe,6z5^LDc;JɐXnasJdEI)Ůt{鹲ݻ3P?%W۾m{qUZ.7ao R6V#*Nsԏzכf}:-Z~do4(~QoBIl7멚&)>oyE.I;3>fy%T/7FfjK4m[<ÌmݒNВwTlo9hk;Z\ŝ̉;ʣ#?^?l(}x:n#7 PLb(/ 8w&\+5_7Ŀ]?X/FT:?/ / I>bݪ;~4\\oZ[7$}sWWc*[HϵF@¿7ѤWd DHCm:e~]۾o58s4>>^|7_{I5#%kr6Uw:>5购E'jO>Wv$HcKXdvC)la8Wʫ_G \#m*0^zB?S[?7㓖wвȈC(+]ܭJKq`0#mYO?.¦I,.T~RI7Џ|I7Ίqy&_KGFGߏN1德{[{}@P&8nNw|>i]ؙ]} Ϝs?w<\_T9"=zn*rp|1Z n&_ae'8' ]ޟϽQO7o.7dwT\^G6n~OSQoUMjRwR <񤝚ei%_qc-[;_FߩJ0]^zj1<$rs{_^is4izwi/ׯDѐn>cCultovpUZ~unM:dP[UsYӎ0p9qۺmv6QW?ԍ˕9#'qʶ?w-# }wf斍X2I$m#o_~Kɿd_w^26LjNɤfOOn8!Ho3evK_wE)uے[,T6:uZEm~sקga撇i` ړWzgknDsͷ;B>~sԊKey)9I_n(6@mǾ?R_jJNVԒI<[ PN?ƕg3S\"$śVs['t**Qw6ixe$n;A=ktbZMr:8%}LvoW3* ~׏[>GƩX=.BnfSӾy#n >m!~;[k^_ r>$cԌd{K6wy/ϯrw@͜=?(IV"2:wN@;;[?=j|zs\ZFX붯k{JmglU)3NxFwυV?875U'o?7g-$zڙJN{Ye3!+ ]7~=*۽iQZ)k{@U[#nyen8]?5Z<2x%ؑn/M&woF ÕvpHޟ?DefׯcQ?}]l#m[ 0@݁\|֪Rj%r~~Y|@|ciS|S)[ {&l`m6pU^~"/ĖONֵk:NH˽r7q?] iEkשk+OYQZr);5;;w2Ucxr;k9Eu:)&& `?O>ksI7 /vq vz宛g+$(P͞Wt~S.掚KGo_^̪pz{O5"uRoЙc-{G?qh:h4kG9*->VRsvaP]Fr ??Dg+ϯcTmHJ8#ۆg{&{ivHĮ{=+dli5ݛYF7噾myTR_'~_ץ9;ZW巯OyA>?}0\ }{ wur>o_Z\zlmR5+;2@ӷe9R~i]#®r?ʞ?Κvw̹dNhR pF8-M*фo{ȑ?75 Y%ntU咾${x;Yǂy??/ާ Օ~{Ӹ Sw{HJ I;߶Uݸ9ǯ#(rm>Ճ)ۻ /ݏށ;Iʿwvѻwdr\Skeg$S[6p pI>{οT[OE~SHޯرq%~_W֩HQЛX08Ͽ#KM(In׊Iyn搭|z^=h£[yFX_?6?rۧ]5ʒ͕t?/RW/̻^+y$T-J *..)_{IgO}Ǭ@2ml6Lg4wvd$l SQrßY*Tۿ߿8e)=W/lzqM^_dVr|;4m}w6tןm{wFvXJgOcֺ%+=kU/OQRHն|I8!~ﯯ.wtGWH%N?.Oܿ޳4d sҊp{gkoޓZ3C-\N Uio}QJΈU_F[ԩxNGֵf95Vj3H"*̱mϷ?MOV.}3wJP4W5wz]앶$w?nztAZ*rJU}!ʲqoK/OWW̍߼p9_׎yk;"C.NO_Z(վN捥}>JLHrBpw2jI+fx/-~y$)9|ďuejm%JooxK!<{?=KwL?Ԯݝ'Zw}o {o `T^}GyUZ]%=Srr=y}jyI[Gdj:T:ܬmNIe?ݯ/ MY=O݅UnFlH X \x|_uuj?y}mEFA W*|zݯ_vG.MbtVoݏ$Z[sdx7;,]rR^k==Vխɯve Aڋ{-S.C#U*#z*:ʰX54+k#̳ iUqm<;*~?=+-j{b)& O$1HHݞVIEKo,bƅ+"fPʮ~j"_6+T5;IzTݣM?yOY^v"N++_'3Ц=u}zyac*#1j"P7g-:sr}L+bj׾_/6g`N;A?_zTׯ_Crk7@RFܦw YoןdG9:VH6w|.j:zwaM)h1'}j{&;K="?}fgTy7)c.URtSUX]:i+6Ҥ;H\bpdv['+8/.$H!7y6i\V|G}B^~|Kټz#bĕ>VګgQ}Ͽ UӋt44oK(%{`.cY%V r/#˱ιa){8 ZK^ q]>RQ/_22GoȊSֱ̾xh;e//B~pK[|exY[ڬxV8eZj.K۩1R57{^g>[-fuD7l|q³7߿y50u%-6]lzgʔdխku.ťA{,XHoefvl-8Zӻ_gsgq ǚO?ߧm{wW[TҴ]A$[]Iѕf^pϴ>Nj`SM\mr잍Y rhGs2#<y)?}tFRn\Of;R~iw<6c,"*mf+21EɵVzjt[soP/q-bK"k+dI9~/'{pZ {}廘4+a;H1NNWOMLo( K/ͷ*˻/)YO᯴Y#dBWo^'O vjϿO^UWX6 Ubv{Zcl߽|-vYSf])?+#+#oJuRtzy'N ^k-&F)ei^j$yy y7W|due*FJZ\>yz;gGt; cm>~nHFh{g}Ǯ<=3*]ۣ]/ijƋj9 V~wO^3m|Zl)ljv|mз=kR_4׫֯__~"x:(4 pkӓ<;Kh-gΙOnioEGPtg]}мqRM}qVoYgdkkK-#oe>Tt{q1Vo8]S4zHcq5ϢvSTu4o׭Yu-!io@%T]ۛ?6v~ۖMW{gYa[j 6^IXOsmnމNjj*;kqn~hhZD>'Ӭe* |rI6Y>ck}2R].aQ+Yv]L׸d) I#I( qmC}߭uFIs5 7nZ>ǐYյx;Rt;D;YeXqU'sU8|K&^P8[^>8ͱ~m\4~|3׎oGAr"w{'wۿ}] onɷ^ KJmH45# }_z8^K1Q^6ދv߯i?|3}?Z^GmE|>n{([lD`ۻ}]_[YjFgӏZlѪ"jц=7A_7繄ҿs\ЕM"7ofxiKk~c(Qnrߊ,qA]H2_Sf5pIMJhkw}[y6}?_WʸUUhQdn+u#^ow``J>+{?ɿ?ROohCr1y ėvcY=_c9_UM>MWg;_QF,nJ򪪬7ʦOXx5WmB޲ki{u?ڪ闱êjVNL^}J}wRTWNw:QHE]??wo~Mzsw?9z]]߿S׼+SY0&2Kdx$Y16z{~xiQj+c/þd=?+=Ec4}2 -~HsHޟ?&*NO}/n'&Ӣ.5ݻ@3V{u馹~)o\KH|BȑH֐#2Nebȇk}6N8ߧag^uv"EIgXPqhcG7#}~]{~.uqt{;_[>ooiq7%Oqn8MKt2rŴ߻=ʰ԰m%4X_:.e ͨj p@U~Uiw2U~':mvo.#}գn˦W',|9SuN$͸X$|s{f+e|΍ ʚynմs)ɣ ԧ믞*|GKXLՔMɘD!m ȤC'|>?~R5zt|>_-=^<\Lw:eXNkIܱJ?3vOj^WfG S8˚Փo:)`j< ;m2h:N{}$K%F!m;>GQB|ؚ滺K=z9u5&R/K_ǯu#tfb X ܴ6ۦi>ߓl^ 6yKnZyRw_ܽ{{L*x/=OCa_dv_;ƿKz|~'Rj6'Vƅs$۾xQwcr߯PJ-%ޭWf|g wF:m_:V|4 F`w *Wٔ7ǥ|F#Zc7$ֱZ%}$s,; +I WsM*٬[V.K|uOeCGm}O:id^g/\֭t? 6kHd2)d~:8M8j0tϜq\]aiWiN^Ҷv8GiHt*=MNX[ 46y4vo^/[+z.z{u誒^{.I.5 OHH!F-x:e {ok^ BjKYG6ޗt9+P:]qo$H֏zsUSrWV=NXƔ}nݯm3Cox& yg$i?r7˽%}]/z&կ{_X-Ra.g%[{i~&շVip^#m͓ Rg8 m/[5mj;+#u{nlqZEvƿ5\\kP%OEk.ڮ4}F+muN:=46mcK G\e>]q#||N8˙ɯv;OFV麎;-uH4 忲ʹ^K+Zw}˽dʷ,{l- 54BMw}[~VuB~O[ƝWCv%hMc*[c}PTNm[/=L] 3QnGu?YukK4mo!k܋dSGmofϓf~Op8_B5*GVןdݝ ?7gO VoNѧ[_{<%$d ,\ۏ˿nIieTio.60UrIY>_OGxGQ5s t{i_H,ѧ 5q\'Rjo}{Zjt*>X)_~/l/mH_c+,P-#={?ZZN)S=wFoe5OVO7g¼ӼA}ojݠTи쪖$=%}=޽Oլ 3oUVvޗeeq鈑H&32˻wk֥y}MI#ʫUw;^sèjRV 7Hi份9c8"$|'tU<w9W-ߢc^^ak5vzs|Kn[i"%˙Tvo5]ſO|&cBU{և%so~oxŷ:Q乸$h|۾mݱ?WK .c?nMzukx⌾~KQ5[o9d9OۭLU*0^+Z+W*ˡEGA뽿]uk+~,ҴͬphkZ*GΠ]>K魡} (ǾBqŸhP:kWקC2[ʩAosgׯ[O2ϧ|AE 5[i-|d{^ryYf`3ʘ.SW]tn\V߿u}w߱o}n#߯z+]>k=oR_w^7nnk6e_YH?j q}O^%sim+t翔UF\ϯ:xNo?ݾ21\B96hqqfvC\(dD7u}5p#s;yϽ.?m#/|aۏj2GI+[x~̷Ck'q4q6IyLߤp eXXB/r/ɰ+q}B.;%tn|u};V:tkXKӯ ݄vIn6ޮd1ybCܢw?:g7^f~W}{m_.H#_Vӯ5Xo56i$h|ąt󊷗l}O'=zk{YՌDh/ey_ɼSu|I4Ϗ^"ox3 7Vz4(Gu-uuhlaq>f8zt-]Ϡc0Jc?kKG-?T|Q0t^x{)<⯈dдjVvu}nMRogky[>?K V=/v8Ԛpg5ٟ]z IgE&oyv50pMOFtNϯ{yS\ї.m{-_+C'yk@7L%E֛-!t#उs | bq\z_m->F xn{8s[w$CdR|zߒ|˯M<=.&ϗ?jOd>}}4ٴɧXaXfs Ů4>wٱ'6;<Ύ]潭խd޶_{?Ay3=յz@k LO3g>*k J,..n#ѣj]{fJ}ɤk4>>%RV,wo5^9E8;V3GH4'#~tHa[]6E+[aSf\*"?UNk=V7<79BKNTiy.5ROd U]WjH6:җ.kn}_]~F.oƣجf *G3((ȫ>Ti=^_Uw;vjiSd~KZImo*q&uo"]CDzkx^I-ϳXN>5Kvkh_>Ү'XN)?'_/_?ƝRuAWiu -̎ᙤQIfq9^Zt%7S_ w޺~oi*pф(|wڄ~ׅ<3C,o k͖Y2$;y_9MO߿|?o֜\;]>|~|K ?4/7ڕԗ#bf7u(hɣY5 xo.4J>rI$VWMev?4'"|eYn VQVo9=B|nϝ|ϟblq)„։6rJ6OD8>=<jx{OIufյi5 Ui-&g~L8c1ДWRkU}u{]2-j1vןo=_C iKᇍo4վxDVO4K8[̚Iy#Gqqm }<ҕiBEoooϚdn/kZOW|ߊ_~KQ|F}i>9]-fo i^!K녇\m#MlK[k?j\pl lUQ+%v48Ue{jG2A]A|Q5鲴7vsYiK.GsL6jp^}Ll_eiM"Ԭv=/&CL6i Ǩ_RYcYR.$q;y'FFwތq8ʕ";zeRo[Z =WY,{du%xٿs ﹓veUu+]o iIFSk{;42~~>?xLMwFP<7.%ͬo ._aODp gϺ|uu)z?GhO/fGukyG|7_GT~WMҿ35_n~H륅]4^#CL9~Kxs} Z[!-Q/Mhc??60JI[5p,WDӯc'Yx/I]xndm,$ag1HS֕Xm:ogI`^xOJdz7no^εu9ceysçZ~qϦZ(]<y5&ƟI$g>U !=v8]Ѭo5+[++Hf{#5ff|V51J_}af_?:&Jg/V7)okMoxk@rr[ƌ4W||#{ׯo_#ew~]~y e|PM>wր$@̑Yy*,&|GDߺ?1O~ky3?8F9Cק>&r1Xcy=~_|L@q AYɷQ湿hfY&lu!~<|<*^Sپc(Jh%k~K2;Υ/_S׵+x^914mCF^)=.~>̱2/ۿ̫>"6y 3M傷mnm?<>_oGJ.oK-z$E]߫oij9,Aw1X"Hw&|Nhw~Gкg7& C[/u qoi繱mU/ϱy |^Wן4]>2OоW-tzOKk[d X;vH2ˍ={,,׹%۩k{IZ߮?5~!xZԯd2+J0I.6T-yw]y&7k0sUla;?*`vp[S6}> 8ip[__kNG}}|C#hnou)]ؚF{pp?ßOh )w h^M?@E${i,ÌO iVMzfd39voYm *r`kumЗ4X&v8"7h${]~_P Cxdc_ڵU-̥J~K' Tk8I^3mE:;|Cϻl}irǷ8J}fwL~cQRߗB@ȡI?]PWBqJiF2Xte{(SU&Ox}ே_V ;Lg3e #5ʲ34rm}~SUh Gm>gQJ[y璘{Gt_~w"eEI$o_~t.5Jqәwӯv|63hӜ#O}:32t;]g9n0)Ӈ>W$y& RT᭯>77+g/߯=VS?S\=:qmw|⑥f\XGUݷw>Ҏw?~=_obw vN_8kϮ4+xr.ܛ,TNO6߽?p{$𴔛t]qRmE&5~V edr~ïqS.DmOdiAsF1Tǖxoxhk5RVZM~k5lI\۵O' EEъnpo;~_?71&ag .(ۻ,yj1]>u78ׯ1Mv>\D:1n[y/DzN`bKoWgNQkz7<[ЂW 8;1Xz*!׷[i:vI[Ϳ4B"#] kɽĒ]vRd9 =Tsݿ7>Ɣ/u}^*>e/1r!XfzN_dH. rQ?j.A{f4 [n,8'w7oϕ{7ͭ !egմח>:׽Ct Kmi>?+e\<-:{.:*9̣sI'NI&u^w6VھnVm;I\J3vVTs_Rchkpk/WǦhnNM'2/y]ug;1Y)G~ݙwn.z_m#9vǞ SvnDӱnTWaEb*Az < eWq;^3]W=7kko˯tzz/d #loqk~FekIQ[$~?Aekӯg!tPa9`iyOo ;h=*U/WF=ћ.3[i !=L! Kk 0+㾿hOӯߧBY }FݼƪڷsJ߾k|.].vtf'ܷeXYr_qC][^}B$|Uث\|iov95mgRj;/{}Gd ]QÑƳY;[4iO篙$L ݓ8g:4MCXd$Ӱ`RFOPJP7(K`U:ޞ ^v׾jIQWv>mçV(J8U/ӂ_$ b6%G|7שKw  ^Z,F5;+zX^o{{wDXyO# 0rWwʭ-MwڬokL6B4*c,ǧnVƴ~ZFS2}/n$KlNP"׏_빝:=m5}^O'Vl/|?ɭ/:ʫ $m#ɸGo'a׿*Z-v}EG-ryk_Um/umo}ߖ{|U%r ;{{W,۷3G7 gϞx Y+P.W+k~R$5k^K]+&덥\_h֗UՍnm7>7feXԧ^̮z=Vz*9F 4]uMz|M{uMzZi #Ay)}ehϟz&36=~F.w(EQ ^6Z+p!FMW߻>Kk ִucon] ^E̙&~|ɼݱs}}L*Zo̭/aXM+ZV[_O+;f-Ex0)Q&DWԝWNnmTtS8k%E%djS.uN];!$XԹtbAg8Unaw}zyӢ}_6z;M:m6ZRK%$oU]|{_GE`XÚUַV}y]:SJ>NL魤mñ1/8J>^<=+vԣ+Wߛ[~ FI`p>\?mhى0Sot$cƄ31@ߺ4$:f˴nG=!wg{%6Kvܗ~Sn`i susVm Z6G%Aտ?q~͟_??ӁC(p`~)߷]~͟'$>!x1AUo{߮䳶>g<쵼uVn"@YC+9$(k;umchZ?͏XسnCqz49%2%% dRV}ŊGfy7\go徔if^<8OOwqs@ۮcG!PzZC1z&*tiZ1}?3"xձ'}{[#Z$KJkh_S?nRm=޽DX>oʳ\o3huߘ vo?U;+[U՗oc\q.vUmA/׫;$`I)/ӚfjWWrl&ܩԲѯc]@ }ە9a봖ҴUe+^oO4>JG vҭ˗0tg}ݺp~[uW9׻~$eV,Sj >SSoG{gR=ouL@˻w'O]N{^SiF1[Y ib% r#oQR-oIiI;YFNΟ3no]m0vVI?5nǟZϒ_:gODa" ~'#]]=G2Wp {WI=iKo ۸1sG394vݨ@9=w[5/en`M ČmwS 2G2UVV6۞p^8?ve ~\Ef"{ k(NI-5^;@I8eCo+/k{]f{5st_h|`  cNҠ4'-|V][v>ꍪ1eJ[2uar z6#jr{EĨ*9=gPD0 |'O؇hmw~Jgv8z7(T-e{]ݏg8 s'T)Fn߫%Uq*<*"KvU:Rܘ*۷3IgM5`Bl m~1M7ӽ!ppx1-օ{DBAwܭ}?LA=?~ k'ix*OҔN KknIb1 Tw%YM7k/NnVwYS>cҩ&e9s6uhd(۝݉;-^# +|2:+zZ{??-ve9r )/?I%n]87/ $Z=ٕNTߟ83Xn?zcISO_^K=6RO~2nUޏ[ Y'!AߗbKcO^k$Tj䜷8ZQ]j͡˲=rR HN?rޒF8zvփ2RW_@]c Z7jTOm_7[(ݜro{w~iS ??L&Tq_iےg{<2m2A.x8A;'>*/5>iNOFp0Eڀ7_ӦqI_ѥ>T篓5sp+=?=[(63jv}QAPɻk0`@~]O7cME{{iz898`'?^15+?uZw|X?TgNN<Íܜ3n'B1Ɠv?zǷ}qӽ^WmBG/ήWpS[o#l`sp^ަR涛ӧ&?=Ete!)8_w4F\5I5ϧUR06Yw׽lp%wnf*70{߇YK_1T^U[ˑ 2@k*KyjJOOn&Rwn? imty)/ ɻ;}h-Cw_> e>TW*ݻwO:Owjkܗޞi[>ۍEuy+.tKO{||NJU__֯] {o'}eORcuRhrA?w9uw޻ %NרO*T\R0)G 1m=Zq~*W2ׯ^SMEh ,Y7}ێZJ/_3tݤmq .uǚveVwy^ߞJtҼW,zsIJ+VԾUmkA$>{_Is=q5|6_ {X,\*gcs[*I;oٌ+设تjʥ2?mI^ͻ\gIԧM5׮]ӆ]̀ |v{#X44ڐCd^tTׯ['B%M^w)v) _q'^}"'R/"9 ķVwWw&1MH b.NNvM_ϷM[&ս?  *q|le~pv_(Lp#S.q]~{+u/'u>o:ۉg V^W~#)pn<]3~[$s)pPJ [fm韻G%o%J=}Wg.-彤K4V\āk*\tF[ԭ'iO>4}U5;0q54X_`eeOtq+m]zMJ5uMZt`)Q,وVVnV27挨Vqu 5'yia9Kh\.Ѳ?%|%j߷F{K:n5^V'b jɂXc8# pjJzɿ[zouRRGgo` K/}Mz#o?[Fv)0}̜f/?sz-ZcW]G_Y/?N +G*\W{?|V~/"1}<_#W֯4:7H"iU&W|S%Mup3 NZMҒ?uc:T jv|6kuosĒ~G!ew7ޟ?< R)'k4tu6:үBn13{v^!$$q{)BKMz[9+{kk=5xVYddfm6oTr/]wҮ2~m.xSo1ضe<!XA3[\wMns|kY#7t#IFo͵mΥl|Ye;?7ۮg^;a/w_5ugi,vڄFx(}al]ykN6׷[oMT]_Fi%_켵i)YyFoj[y*)F>?{rGM6 D/__ӹ@xjJ6w%)Tkn~Fxt}hk_3fzy+%\(i7Jן🌵zZȝB7mDBrlEO4.Yڒn&XBviw{|Uc B跴o۶#j!k+l\I4=̱{~bd^ UMIIKYsTjH?x+>-i`54_+#HOV9?y\sQZZݻw 誳Tjʤ6ᾍ8|?k}N&壆wiZF+$k<,WffJSEi_@ҚX;vn^xG]λJ^*TMyuSij9wi[7%j l Eq_Kqym_cFΎt} > *PNZ/붽|1i_ݼ?t= lɸw8B;uO7Z*$'ַ;MkN;;X-ፘ2CeowI뮉K׿uƝ9)s4:|F洌KWv~C}g'h֕N5ӽna ҊTJlkMA5B nݟ5zN%%n{Wz\X[`۷={^˓-`QqL6UierD㥯~[]چ%¤Z[+~i֗nQnۥ+WpIt|&>1xx^]o3t^Sg^Fb$eA_፿vЄuV~g4}:u7^.v.Ȥr|yocw^׹*qJ>BIm.$綵=?weh6wm5ӕ^z?=m&PyJXNc l]жo&鲲n-_ǧ_{8_ [-4rKUqazєn.vSu=~oS͔=wss #rB)? '?3wO4q.b$&wI-ym't}جӚ~|o_$\$Z=?ï5ML%0*y)o͵~o3GMZos+>ש`Ww{?#յVzuZM;SY~S" X~}יOFG*Wu׮3SF;ZYޘRfyy*#2B͘M8*b I8//&| զ'Ok|EaX!e$rqvI*kѣS7MtLP[^GakưFl-RK8UbG&˵{舕Ɉ{ܱ{|Owkvv_ OÓ]4Eg40UwyFO:e_2J߉ߛ[h籾^VcxVka,vE y2۾Ywy/%xcJ(?yi}wV۶s0aiTWii{_g Kk9iGhrcQd>mOZ>vsZZjYsE]]ej/3*;;|ۗq?|^csvK7_?b#J 7ey~,? [xojx~k;+yʬ r\*yD2ކWl—իFM[U*NT$ϥv[y޵zw1xn(! V~[Gu儝U9$=\ꝍV5hƵ:bݯ7gY?tWSMy$"fkWк)|i<&Ԕ*qoki:F.n]<~v7Ǚ%cVyyURSl W VqκݯX>.NV~ug;>*Ϭ[*4Ţf]? YMOاksokz~-eף픪&,|vGxO\<;rGh.#u$x.ha2ªУ0V=}18xџwzXpp|FNUm}:y۾TҼQoxkAI͖k X-aVmB=˽̏# ZQ㥕/iJ|mln]}%ExKA\ hh, H+&ɰsJ??*Rqm}>}Oϖտ3/#L2Kc%2&s3yg׏J`~ rgy~;iqN\oޛ%}>MW@ѼZRC}n}Y{di8#7z#q+24S#{>U{&mV|_;^[H MsWVNxXLۦ[6P>/4ʥͳٷ_O.ᦰxh򦏓Wd]m߷"Əޢ-Cl±HUN)/M B^*|&7~>E4E"YOt_g_K ԍ]662p̺}wwy,z\2s!8v?6+2%^;wn}KdjWzNǫKshې<0F|<3?queJ4I'&߹K{|# *rI^M^^G#?]ӭNI%[koa$lۣ}Nj˽w<Gs_k8ue53KI־M}mDz{mCbܩ~_S#TntwߩNJ}_2֥]osy$Q&FDy633m^]2y^0~Muwi_'>9HY ieW)0 sԧ{[4}ߗu9c>H-׻%s<^]'XV LzK塎Mɻy}dGD7 >&TfgZ׺=<]l5:t$nF8fo.Gޔ$'X1yh~xncTm~gϤj Jvls'.U:k]ު} x{U{u$d8|Kwwڃlq2lu:~Ҝj]6+X*+I,7ש"A"-=|6?sHJTjq6p8%*T Ij}=ooލo?m C .-U#Rw~e ׯîYvgw2G=xgFUIC6oޟ:u\,*mXg;km_ciIѩ5ovekmᨤnZ4b:wb#}uV叴mfۿmaM:zݬGznj}cͷjm+Є"Ķ-mw/:_%o/F o3}Ϳ\EJTĜ>_|7q IN4b{+׿Ϡ|/iǠGusebi4,6/^m}>W&*NV[|, :PK鍊~ϋ- WNuih|EuZ]\F[Ho5&y-cGeGby$+jQrn>R&oG?r>!MPo%(G$cHwCZGW[wwu nK}|"!eR\ihދE箻Kq!Zjܮ}|ׯMw>6n5LkgJvqūzF\Goq{swPصu;k4baxׯ0WM%}zop_a,6hг' :ޝ&j;ՌM7 %候/<6ͽqUg&ճ*Kktk|aG_O{wλKSCkz7~Ѵ6 m?Tg`F{ko֧ЄaddOۏ `/u;Dֵj &h{:2wPB]yf\~4fYN"XUۙ^ϻ_ם>r?kuQ}ͤK~30W }oqfךNHRkY<4vߩ֫dv.jJ{_ce dRYE=6>~@GLjt j"goxOSmecghagMmm5\1Keu~8ӛ{Z;~z~iş>$񧏴hp.NZ6[_.{؍ [' 7Jzw]W8xs+arۊ_'C!o׷V+M}GxHEryz-=]ɉjreݷo?tv&U<^>~oK?~ w,iPxzgYRWm>im O /HU>6U=N_GH|C %\4,KѬ*i%i:o**+FZ53~kv:h?4 <?]RX$ _iogtSXӚ9{k3CH).ek¿KS+Q=j'MToė-Z-PGȐǾ\'^rkU);ҖMK upuV6Rܽ:F}zW֢)}+Ρ^:ob~k{/uVtɼvc^,)\{_}?u*ժE&4m_?^,f4۝I `>Ѩ}f,pyf76I^V#:Ђ{v]<#1U?XxU_ukEq6i&G"B'<'̎I3|1PPkzg|b\nߢ~OGmKվJk|afo?w7\.g2糅!y||ϑ6~m^&}/~x: i/^Wuσd'UjkGTG?mF%Ʊ:wٖ{i.ƛ-}}Ǘs_ʡVZt{^kY԰+~}ʏWS~+)sg>i^ԣ)0\\B5ͼgth{wGu}^뫳Ko (VoNՏ?l?[ο焵iZ>lcӗMּEuMG2c`C (4s$7apU-՗.?3Xa.gm^w]=z([@ |H_x6SKys I%@Ѵk۬0HS_!DZ4ק￝-T*Fʖ]t}>F߰OW/=Ś߃-eHCqAf43}Gþny?iW迯CX5))iku{w׫?b۟L]Mv:_VmJZ kM$?l|IG弑>Ϩ5,]>7{~sʫӌTTϑhB 'M*ojՄrcYΟ,q &ko@߼g094}-P{R~[kю_rwmWZ^|oj:ooWֿqүnRnz׈R7y/m gNZ!Jم:7soyw:]I4n~4e_ iM}o5"vgO({޻uGIAJw[tݟnO>#,utDM6m#\y'Uo3ywGjzr[=6m~k%&Vsm#Hnв7yrN[OnTV-6H_h<5ei%p󬌲yp7L.>M\u2{;2Jܼ]mk6<<9~.v/716~N?9si}9S|ֽ?^'ğڳŰxnǂ4[[})dfd<~k˱ Sg߇R`a'z[3oMz|ş.GaC\NG4bXEʭHwɹwC&;\{>p2UOM/Ugg?ZG\]Z\5?cEQow;amݺ^GrFFӭgΓ\[Yjv9c@6vm7P}/U_Wo;;!v2K$žf|ϫPv_~yuwAns׭_"PnשKD2p{zVӖOZ_ҩiCpq?:!j֯3KhNY~o5om!$ UT-G^ެRR[..mʮp?e&V\Ӟ=fmk"[?0cO^*KvKn['s>[˳8žG^V2wm1?R;-98>h]Sn?߻4j{ XݴpgU{N['|͈ԨPKPW?xJ6{k@B-0Hޤ+{Ky9 gwnku!ELi9`sgM=KV{/.2c;nIL}aٕ{8'hڤhͻm6|Tʿo#eqҌ8^w~}*V_~|*]2ǂm/Ql#+j?hno~\~e4j?p+o}"׿Z?oգ-aV-.e.X.&qɊ:j/i rin~af8<'Q?NۚVgX;[ZBE5̷OߗdmS?,6ˤRZ%tzجƶ1ssZۯnsG%ƥ|^*q{{뇍 El|woZZNɸ]<:K~}vzyy8ԮHeaopdn͏sݰj4Uͫ^ۥۯs*uKnot{%"ČNOB~7wz>ubnefaW rnT{w'є%$ls rAf+?ֵ\qQRK;^(Y*}Z$g mkSeE9n}z|q=/EF_!R0oUm}֧GLZҽ빛<8ea{wji+fJi?rރ'܏j nVctƢ[uz-) #$l?Ɣ{\ªkh|]튤0C_mo;ӔM+}B~Q ʮ_XF}/?ZTowcG 73PF/?Z.)m#ԪmDˌN;~zr~m# 6,pG|{։'c)9;ܚ9d@@tr0~e_sy.[opŸɗ` '+cqA5^_I$1΍GY2/{sII5oY淍$%b6mv6\}51/-RmnQȮJ1nxNTtd6r?!Rk~KtMR%6BF6]zmL҇Ltm؆EIbtӷfbm++sΔmtW@<[vߗ5u{ޟ/~JUk3oR"vE`_tk.˕J uguҫͣw76Vud1|n> ~#yOOIf+# F;@9xڭ;S?[ӕCeJ3(En;~Uϭ)I7Sǣd)"& _0iSB:n~IvaVNrOMhV^_7y;nJh#>b߻ߛJR]ߩK_O:M!k6$Ź(}ܜJ$vƢPW_w..3wlQԭxKƄXy|!WwT׿CWgnd^i|̿7 ֱ4kOq9r9 /~V_d@n5^=N{~w[B7Kn=+ {k_x.I=^=}zgx“jwk{uua6w aIƤ;oxZYQ+zm~vω=kCd%o9 ѧ̭+(VOݻ-ͪKߢs8c18iQs9z^䵚h.~[n6nUqJuZnO4+xFt wӿmϡg[hޅ>x.XO \C~kSe**S$j;|?i~EeR.vE>od;&Y{|z7oq/[þdCNqov&~kDEąpٙ3m׋ͭC\-l5oFݤ]űΟY٤)3+EUTﲶ'GܶyccN7dz'7t{=j2IrooӹP\#{ߏ\S El̒bwm8cj.s{61F*Truyk][ׯBXG$'?cҔo1'[篦Ah/̪vWw׿9e'-o=zpv?۝:շ%Y 19cD[| G7: do?ʳPJ<~5UZ}e?1{Y7u|%o]WˡX+.G-w,?/ZM~oTI ST}S-MoԄ[NÕj~~[ۨlg F3vZ Tӷ9(?*s/-^N?ݓm{22߼ϯkJ@T*g#y4kgVz)[ݫqxrѠ`$vW~tu} ]u+({6aUlokΌ=z 0)SۚךsiwaZQ[r-͝g?:/L{| ŲUv֡^~hǚmۻzad`"۸nxF>35oRyw>lU%ftŵϯ+!)F6{kZۑH#rqG2}xN&g6y\sӽQ͈|7~ϟ'd!?xwS([]m>~#rߴqKz5[Jo=K(y@7oohwq= O-d NPknѴQj1s ["3Eq,R M$dە2 rN/{ߧNߧΩQ)=ovEMRe@%\WD_t?9^~VdeO?UIf 2~~U*\ZYYBĕ}QYJJ/T×$ۃ&R73 Rp{~ɕ0${q?SrG7eܠ(Q~^De}?^UV,Z04rǷM:mkHf~^߯^ۿU %dwqܨ2,s?7z4u-<q$n˹c~uJ뱅jj%枻`BUF7qz7}I`߻[ 9V9!zS+{ϯs?}I¡+`2Ǒo_4W/_FB0?k]p]YSqM^8˝v*⢯ukӿ&v,.ʷ tÿL=c~U%4_vdrLay/k5N5%6KKݿb7E~'AwTT)cͻ%Έ+5_=_!gʂYdDh+q׆B8'/S9_9jscIWp3ur:rZ\̜6r[;zV 6tROǫĀ~߽DV}cmH"Ub;d+#1T^֚XF$BppÞsQ(Jv~:q|}߾w$$ܑϯ8G6Zwh1Tn{)ț_31ʹav^j?ɷ~~"Rc͒גM^g=jUͿN,NB);`F6nݷYM;/~,f`,s^w֚Io8B'n/>uIfϷzii|θA-v_/+ln\.I-޴}|NR+8'm3Yï2G}W)]`~~]ۿϯhۿ!-뾟9;NN}_79]J]opTe?Q߼Z4i)^Ƙ’ *rKd[.S빴] cY1COm[sΔ(vxצ:ˊn y^+8E[!vnk&m"Rӫ!,`P+$c}]c+thFmncL&בb9'O|o]#2h .ߛwkË w|mQ$۾~Cї9Fm˕#Hϖ5OIaUI쾽_ƶO^EweF pRvC[}NvwWq2˟' nIuTpw}Wԯ/\`$d/v>I[b%o~2Uu}j\ɖ ;}}9WY~}m,Xvz/=ΩMJ)̨{XHڤ;~Y㞊roeߩX>4KLX n%_~'\Si>iG<9,t9] _iJwo0L cVF1m&n!_{REG8H#=?GZi5mso{9b [A<ԩ5'k$b9\jjrө5Dm&ϺX\mRp}|l8s?ɩPz$wJhGς8xg۞JܙԜch4A]Qv|*$o?B%9{dI_z>^Lianr/t$F#e s~[wwRvwT6H ci)s[M弆{R%I Ahmo=ﯭT%gk/} +JZu>ߔp>:%'}? (^A$;ywuj&~&O]<j 07$[~<~Y|R .^@$"WwZT[|j6}H2*0eܟO#0T@fCnn'ukZjro!}:|_҅N)}5oӿ_%-hQùQ۴uFvF iunVi؊K>~վ_̢ھՊ_zޣ&{6\ᱝ{kV5e o]_F@bp0 +g{{rE,dq1 ?R띻<攩kki*g̚$n ?*+nРv~6TTz?SM&?ʟ3:"Tt>onÑMod76&L/ID`-|2Ȼ~M}WۯMg|u|]K/csoڱDqClF|O3Wh]+~k6۴eJ/~mw߭tI7}?9dua5MtIm/"r#Io$|oM;g9 'u(G?El]ϾdfZrάz~}}^EtMOpyԣt33ftG64-/ ԽW^V$^0gY`^==e/OMۿkT/}_wgybcW6=?ui}.ݭg{y-df[sm刑=`ws Zmfz}1 AВ]^]o/S_ ]v7z[sl>Iae~i0˽Gu2`_Os%usfs?aNJ K{U}W⎫e=JJk4ŗLfѓUvR"Ō)oz~gO.i_<7ĝgAO-g;&-5{{icyn0F&߱VO<=^_}ST%^wz4C|x7e4i-R%_aoΑ<4I5S̵ӣmY/¤#y{nOtivLy{i&y}&ϕ95ay擓W_??XUI;[v_o#׾yڻZh=Ռka2ɿoɳzstԣ9.zߧw:hc*F?IA5 ɯ#ݤ(y9lXJ Zy.;iFֻZyǨíM`ny>cxcys 7ʯɷz:G4Eߵߞ̶ϿS~8 [Y"Y6m[~?S^kzm4L5}_R^/mģVE_*/? S^6Kk3xۑ>sퟛknxMhv_:jwɿ,n6+`a_9As=_J3OWo"BFШAϖ++T.FW߾$~ׯh*\1 Y ۳kicԛKM-dHK+޺>uM(gkYBnї1ns?rJϡ ʚ[_{^ m NwnV`+njnƢ~n:u@HNQ_Kkox?htEW\SPv-XٖΑX6~}ou渌6RVU֮'9ƩsSѼy? /k8&{hV$m $~w)nogRZ5J)Ou}|Sˣx}{t:Oj%^ך>~ dPtjOovhԱ擛ۮyu(FiNI[/z{+R^#y-/9n.nGuٽwc*ZqK'^ƓK[k?7Wwr\I0Z+c~@\~dURmnv8nX^NkVס{ L(ᙤ?=޼EGUm+u/[̸%N˖og߮צaamI\ok}:0嬷+#&dS(_Hov/sYa۬=ῃyo,nbkqݥ/|6~f޻v:?(N~,ƭ:Svio>^ aV7_z?[6o%Er|YdUYsOe_]JpWQi7}{>Sf(Vz_n~ ׇe[(-3=If߷+ZY[)Uj{3Woζ !M[0iZ.(游nHI~p31=G/S_cw~z XÑҍzy-^Gl:q>AoZmv+\. Rj=ly2c11InRKޚyOOǏhYiIoly$U. ]yjsUS-:M{j808l"B=^Y} YbSկm\h]Bjafmscӣ(Prz;FiW-nc+ko;뿩> @h/*oVh[.>@3(B8|Uo'g򘜦|KFp\wEww:Guxt}@]jS\#}w[y<.\ˎN]{U%G~E}O+>.DFԳ-,qcYMɣ S:i*2OI6ۯK%{LVktTe܃g\k~+پo f`:M*e[Q6|I?:8jz~_?> e̪F{7=>)~c5kgJo.fI5IH8"FQ(_7_:b>jNWսu{~eIB;7e][?-;\:.jkO$mqnUV3۲M7bVQBVoݝx [Uh|Mng4axbmsU"h4R}5޻Wu!VjSŢ)EOG ktO[nyIF ^{_ƔW-ݽ:xթ+nמ> oft[& T\nٱ]v32# ʗ2]:#J" ӥ/3pXkVB__ꡏVv|;בLmJʕZ'Ftzoz[‹3^+ඝ:l5{5İm,w0ؿ6ͷ ź8ek>ַM:ʐ$_÷__Y̲"ɍÀ>oƻiB2Wj)QoO}O3rln\`\6a}WJ ڷ}Je5f߯UnIDH!S_wSM} 0ԟ5ߗn=O*YYv{|oe.[ܿy 1~fse_o א[|R/olގﵤW啲b9WOIi{߾۾>xU%y=sZw5燴{'V-d+fd3'.lYI3ol&ĥK_/'멤:9(Ѽk{uwܿm_[[m84`f庬]^0ְOof˯|~c 9GQ_{_ݝt}o&᫛Zǩx>u- 徆լSGZDfKoE\Yo37]t0T߽~-{OsӥF24O^i.]?sF O{HN)onu 5mWZY-nndw/ \-oexخ:fY|sr9Et˱00*1z?z/?s~?|;> cM&wGɾKHdR{s4oy[ܥߊciV4}XjsJ},⿮'Ɵ^𾵠ZT֚g/$ I$zҬ[^&w/s$>\u.].I4_O??67Eh_x/KL_蚏|MVۥi^]^}$}J.^f$-b(ѧ JrTa$u/'ֱFsI}?ox'({S{+IK.ΰUB$.*1_e:sZpR:i(g}-*ryP)!W=MJilmFfFohN82i/ӮI֫h=޿;Ooğ ? |c8mg櫨G^j7ۉ]!t}ɶwz8:q~z/j}^_`7n~y4~![|.VzU݄j 弉4wNr#+ܾlR N v~ֶ)ud_"kOk>Q| 9{?WrI جF>1o4V*y%O5I&)XDsw/|'&O.LSt#d}^˧o_3 x᧎[}k>'qmu,Gsku , 3C5B[\Cp%UZve۹18ͭWK X_؂dz{Iuɧ_:<5f2do2G+|>[W6i8潛lW iQ:Z<}7//xO~#0տu|9Tn୚?{ /^$]?dNiͺYi1U<7lx?RxzYKpUyb}ݞ~m0UIW}m߆~߶x˝- 5.;{! eXnmm[=oM]G|Xp X>um-u]O.Ye>&6&t]tr~߲>.|A4+x|24׬I[;9-א woxK19uVRۯR>a/{)g4j$!:B =9oM~$~~gKZֽOS:/5hG_ mi-͍:|z6ܢMgq gSPʚsr\ד[߯b(VϞ )V*IJJ)IDv^_W/=5xoh~]+ɰŞ'u_'Idk[xl>gmcX8F=]ks7ƪ-ZجQ'dy.W+գ7U%}>g9:r?NS诈4t&]@4+i\,LѲV[=} ..3mE~گvԣJSO[Y/]=o~??j˯ |KjмCaïXW֙nìAxGy/!//!gt>OyQdjtTNnJܑ_g?Fq9fea0AbhTZv]ӭ-{e'_vڄz~%xƺ}7z]ρ|!u ?}}y{;[ܻqwc>O'X*,L9S}e~i//ηQBxg6'~,xOy.<iukek$ԤP-'IG5^yTqYrS\M^z_J|Ά;}/ |?gJ~?>/ϬW;k=#G.$\_E៳mI,1d>My ߹:xX,(~0K߯vz!֡G i}6yW!KxlfKmN L36$r_:?$7Y*x~߻p%i~KUgɍM|ݞ7#K]:_6~ |ROi^866:tXG4 fʷ\E5<.Vi]QG}? _bi'S^Co%ƛc]~nty>y?v_ QGuU*ѻl=76GnM[ QImb/j=G_3uKKRZZI ztmX"B6]rbOk_{ZҼ ƯxDh"r`/fԴWN4[yoi!--.fI3a%^Kfuj穁=|=>+h$'/>R׉!sxFt۝&7ɷu5[?/!=45 apu/SW>.:޶~޷w?"յU>jZi@Yi۬[L{ѻuRU%Kmw=ᮓ*1Ѭm4GD඘x\\C#Ei7&ď iڟ6gnխDw6ąh][oJ3,S*QU!J.˛Uoǧ>3>.hY_׾ા%O|+Wա{[}rK释eBoYƛc!ihOyhѭ ZJKW }^STՕ4q%G*Qiˮ7fPկd-482\ۺ}ym ~}w.+ʔ; 67*FT=Z]oRk~㽋T]|o@W|0˭jsFHwk۽&Sy6o^9Pm7?sA/߮Zo?-*N_j[?{_6xSi!Iܻ]zԨSn9e[{;v>Ѽ_\ FmM3/-y.Dq#I|x~FY׊ͺE<w&_]*TE^OouuS)-_߯?S|' |O|c,|i,:]W^X|/%;Uk?]Jj:ݻݟmuҭyon$h%j*uL};ϣ¸GVz}57RW[O(kwavc3zт]3S;8Ĝ`G9pJ8QJY4>Ha.0]{՚(1"eWbI,G$+AFq3n<2:3֞2}Rlh݃*ûrWoɨwOA'#{0%~ZFVu aUUmZϸi7坙Ytnxy-m6J#bF89쿑((]׷tv6H{9Q`[.YrP<\ҽ-i߲m21 3/u4o#W$eC1*+/Z#^2J|AִI--ܲƘ/&:q|U6'?/My R8jؘuE$،6 ˷4/IurLHqVTƬevj:gnmk %~lO/; ][KXOSBbjg]Lm/#fn ╊%d9&׷}Xg8y T䶏7}{%̌N"UVeܻOWJR,(i=]{c7m=s0e,3~o󲴌o~e\_o[Zېᥐ<uyNXiy}M#OIFd06KnbUo?kS}zu߮#rLb-9GGg线fxά5շ^}w'jz\aܧ%ǶU']/%xFJo߿sr+S1Ju( vz.> JFywqצc/|ٻ; ƹ-H"ڻ^vwWmkvðd/۸.Ҩ[㹯8ClD_vkg\[tovV}ycekFK\a}t!d֝<~GxLԖoMDe ðfz|Goǹz2m7yWi2nbH8lVg|>wmZV|I7B{#xNZ.i3-)nT?v}SuzS0*I%|:+wfS_{>yn."tvZ}RN҉2B6#c _s^v쥤5Ό#$ox#Ȝes~[Vp˻?ww~.e@GˌrO_\.]_Ź8EW7nrU{U۸?{'u4[{k_vmpc ˸w:|Sv߿Ĺ, }ssKGt#~VD$H w\g>a=N,GZe>?uƛRV_.Rv b~s?},,.6۶n?hjw׿T|龾eb NJw/Sȫk|:RSVG%Gʼoj }IF{+= g6 ͹ToK.>l?.YZND4Mj|Um n S[w$ݴ_>]Nz mt6!@JtԆ$yR,cLa G_\$К'Kr'jxI4z"tᏡή?>+ȹb֍嬍aWJhJU-mM7o% %BrNڍmFz{iz=t w%յi Y0v菉_tnXuT[GgXw .ߦضz 4PFfo}}k:m|vZo\'f,[1UvMƶE{ۭk&sV ;G_6^jzv 2(MN(HEW1<g8G^7Z57Z~^aJT/;?:|/csB,'|S 3m_H߻>ݯ2Znmme{cL^iCATeʚ&ףϺt{w-uyqm23LC2ɿO壧^?9vEF$9߲~W昬 JIF1F{4)5}f OvX?"[e9o>+`0𒄬(CFݾ{fTre9ťT~-#po:>Eg;.Cd ~n}R{഼_,٤oJ@ 0Aoﻟ°4.m#p/OCs3|~ӳN%P 2I<fS}t⦅XI#Rv\b+TzmB_[ EW fg$4һߙWWܭ(`W ;㿅me1f$(aw{o[빹yeN-_(?Mߥ7J mMTr0#vֽ~.(DU(Pr۳ T9$`#Iy =3r,"&;7޿jG'-zz7*yjAN[5uaG_?͝olaQ'[#pw+~|RKo6pc*J_{{nM}q NҼ*7eȿ^^]MɡN}OT%ݦ:wK}9i&X[(u78jyK2rfy-2|Jnu,ck6;lQicknYZ[kemږְǶWnkQJ6qI=#nڧo%ʷ=iM=W޽=3s߮}sJmNZϭXn8y4U6JrD8UsKN-4#±#p _֝5d'(w`Q۷›mnCc-m\#;̀pKd96u h` Ćp~og?ZR}7lq8^M^[ԒH!w~lhSWVz^I5=! *:7}"eO$;9CY?i:Wk~o_bfyu~^Z_BIl]n*i _{~qM4;\a-}tmkb|Y`qzQdJ2Q~}X;W8 z~ӕ?r^Lʲ t*A%}vm/#r79|alzIE'}~g<5㸯'n];*o/ڽ_>hSdQ .|ZmYFy?^ĨpfU$eֳJ)ߚ]Έq~o7!ve Y}>յucL_yܻs-iUM+3/cVoN;~nB|r^{斱~hPͿ?R@i,̙ʻKͣ({ ' B'V?j ۽8Y1TX㑝Ǔɦ9i.gtH#&m;_Zʧ{i~kEJ-];|?{vQM.. FVadYo5<%Y{v=chniZ-1iif 6a%InL]|VO#h9}>v1>$8''w緓ؘ-^q+Z%jgJ淺[רO$Іf2]]ܗIO; .Y?6>s=R믗%!K2|}u>ƴ9].\67ݷw6+ǕnNJ/O |)N߻O-~m} e);/߈ͷsn*1|loRmzm릭kۯܕ>P\ eVvӍNUm~^Tr@~֔Bm;&O|c5JwZ;^߸m$· _ߨZi T2XII5} 6W#8랤v]K_2p!pp~o=b-k`ӵlR5q[z۞]n ZuJf;d mS6}gQ_Mw۶߹;w?7KFD1z rzvh)o5G[o)i"y $+̭7ҼcjTï[q],pӣ~w~,WӯP22d:Ye/蜓I, ڤm_l{9kVNDv2sqvUZO_R[m-t";ʶpFeo֭>o2ter~[ ;00X-=kzwB)W-VIbV-tDeTl&8/19s^.3+ْ19I}ĽkuJ70J;hpw|:ZuڊW' e:~i))t1Wwnn<~mG&`P U>2۷ꕲo|v둒F0rǿ=4Iu :%TW;6U??mХv.$VЬ n'Kn浓Mh]?S[[GKh2d~G5+' r^{jB #T%Ppwׄ=Nz]O ݴ}WCm9A>+ 2©8ۜƳw*4Rw|nO{w%ݿUЪODzrEMr2G+ >;wk/ړ*+ԏ}}Qw~Q?CBUpm?.8-R8/Vc $t?,VC /EυGKcꬊeSb md/}7E-[7)l zFZM۶=w?3mz獿Wk,v 371֦5~tNi-{lHٙw1z[Yi7S1Rz~LR8g?{v~8{?HEԊ%.;-<ۛm}n eiWs9.WoV}&AP(;;4<;&K;1jpDM1 nyn>Mgt^?G3,&K( Y/+O?þ9m8f1syMkymG7-}M }9B1R)ei6(=?;Pg$V7LׄXz^꽾_QkԂR|J1E-߽*ROOS()So򄷑 (o̾gϯMS*we] >淒XxJ'Tlݳ߇)aΤ~Gد):zhF\ㅂѮ}SG-2 {]o'0Y;~jI?$jQvrU")Qief ,FuawRO;õmuuskVi_i+\/Dw_/+Ԅk/{ꮗ>lBU8^߯鶳iޕO7OJ$vC4r~ʓ.ϐ +\Ӝmwxw}uOXKEz6k-U2u.L33~][y3>jpoM~OzQ6,}4=h4 vj&d çȻd~Oݴ2>߳qǑ7˧mow릧VZ}[>ofo6]܋L_q~s|sSBVzt_/ڞ1(^o&w>i {u&iphw&n_o^~]Ÿ$ ubKϪdZn4[[~;-_^.#&.dմ hY߹v>ߑb3cz9;ӽ޺>~\԰K c8Eߖo[zx%3Ǧ[ǧ;;KD{w:l>_˳9s4Y+ ƪ&zO2rw&v'm3zXʢ}ڼ2%5[k Wi"dڋ8eѯxmfYYɆBϳDiwQfQiijMuup8Ÿ{#[Bo`xbSkevmmp<{LU嘇gyq疺^ַÞn6Vq_dtmy[}cXPDFUdcy;o:n>.URVjד[?-ՏTR~ʕV-b{h<;fcs4n!ٳ^| BśktvMם;oEt6~!-OE]Bh,w&&^z#]>uЧ9:N.uIu3j5[ >My,i^O|w+ymΓ:?}jqzio%]YӖ`Y--#ǯ~-l5& CgΆ6ui<7q58Ӆ'ZrB=uV}vTN.6jzxWd9GU5䡤嵼mzgg4RZ{?]^qUS'{;o\&u-;mm}Kkr4*sHʗ;7p}{痹K/'m.|3,9{z|-|ϯh/V7vW:l-$W7K~_߻o޺uyFz-L˶=Y~viIiok Oyw6u嵾w9?ڎ-b͒mu{WUo5m si'-|U94nz5*M>_~tDW}ޕ&N9մ]YUE)_[~zoWqhڽ Cż6rvר487tߪgv JXt._[-ϛ-4Ӧ^Ӯl<|m߼8'VV|4vDMa'k_WW|evzyr3<۝ȒHk]sQ3z7>?ywkh/?'5o#ui~M~cf"mvHkէ ]zm]4:|E/{-^٧z}wl7hu]̈g*Ig۹X?+*GQ޶ᄎjTkWmWpMjNL'iıoEU/"')˪kӧUM9[Ӳ{~[_>cuencJz4,v73M֚kK޿s`Ҥ=özu5Ђ^'#[m:ZEZ-"~wffWcSɈj6rNmp'USxu&ޫO3hCEkWiKkV|#~=,/QTnQIB'uKC*Ti2kj!MoyZ=̫'i8rO|'9|)..ľcyѳ7t|x^fKᏹy(9\;+l%m{ zxk6;h vFc;ob'̙د]tN% ZRz>f!WJ%v۴_k/T-[I T"&)##~m{ ץ[9n?1}]K^R9v?'^ vr^4yX5XS׻ HW<}kԥ+}_i/Wyןxz河j٩`Zk?7V:M7}m3R䂳oWOSg{+od Oe>|~1qԤ7 ~B>~t߇ž#B;VPɖƭud(>_3\ukz۶umnW-=5{z|Q_u/'f,sj~OHۗ~ɶ.ƒ976Q\{=l~3r;sc^Mk_ -ѕmhwL?D2kff-o#ԭӍ98nFV*-.R8 dɍoG=G.98au|תU}=,Ry!u{'nN'>"[_<kx}ΟsW67Oo,Ͼhct΍+JTSrm{z^4o=ݿ=Jy;/Q@_ZxwILOwSIk57oy.5?J0ꅻ=w^Qs?h~ -6<;_L%λqt$3D ly{|b~=6߯s Jڮmiztw<5YN_'mWjyqumIֺ?En$lO&d%&ᶩkj別e=?s?HbWROa- guE՚VtMs y7wWSO}jF)֒q\vj۽x7fuejQ#][_GvͺOY?i89TSFRM+9Z{f?Upe>;|O[I+_O?ӏNm/xC6V1$nZI5o$i'Isg |_R8sIu3cO5~[z߁4u{/hwډyah#Y&tki!08z!{~Y[NoT] ?{÷Zſ[SҮtoOk+_Gu4pv<3I$>5{k_w20tB3Ju]Y׏~A t@tVY.q\5nŮMUJhVɵ}R>k٪uJ-]c?iO?jo:z TU'Ru_28-/&gYC#yr$SZ$˯Sp sqV׮5ZCO^7cY[^k ut^9ǧ[4:eʓ}OG6/.&mYSSJGѵLmB[Mگi>yx^I+-iAnmz{]+a^mu)-vO ??W^cɮxS>cqcf6ź[d?"HG:P[=OFu'}9{=%Gοdw<9x{KKoek \V7KK[ϧ^n(&cOb JS*}}R}C^u_K[Tfuw}Cul'k]i-\\kIcsmg{4O3 YYJ8SVtKkNOhJt;_]{z;#z>WޯsyXowQZO=ʭޟo}4 en}>HnldyXwJqs᮶[w}?L| 9_Mu`wo݋mnM/ |Lα{þsarU7Wj :|GDcNe9Js+{.?(R&#]AdmhZ>mWd"$=O Z1QM^ス{V>[4c٥vOv wcߎ!5> 3F ^d6k23þiaܱ\?FUc8ڛ^٥.{O1Rʚ&ףrwϊiskiZ;hnԭv743*-r3^{M_Ko;,>۝m|oMs?n?]-9 |$B"T1㉥ƥ_>ծim6KxȖϾ&ϒtôiTZmdgi9-:*+I^v2xSui'Ρg= 3[ Ԟv&VsI+;ƝIP%o=\ڕ:XB).Wo ZblmyEݭ֥x/<-wtG ${77)߮9E˵o/<;GJ7 {+j:}InR(cn#[lm>{Y8MGK4ɴC>i:vJVO-^8~#a檤\ϩM_sW:|Eo/-tx֝M+Sźk ċ;xfFn3 0VpWIs,5)-zy(Tj:w/|$|O_|L[joSNMZ8Uu (VgRSsG,~~n{X?[m~_;>$w?bx&Շ,M%o;̼x3sx"Y'$mqkiW߭Te8j\ITt׷߷x/هὮMW"5x?>x{W^[#M-lp*7/ki.aO9`'M[?QUQZmz?Oÿ|o^>/h><1:LZL?i- $owɶ?ݺWY>qêQX0њK^z5|A$i*[Z[s"lm{nkz߿揘.hʹ촵޶_>Z>Q6gšDizѽ$iDWyw;l#:v,8䟶/ǟ|Tv|m=Eݽl丆6d{_-i!HQ>0ITvv{w3[_}Zš۴V@[>w;̓|/Iz")Tm9ݥս,|W3xI溷2^vk4k_-cIܭ tis:5'8J<֛<3g)9TSy_s(Ǒ:?So xHōzyD/Me>+,?fW_57""2awVO;a?m:GEw_>#1䙚MϤi-HWS6M$gl$ƨ1fn"꧸J*M{t_F8|=[Hawܮ,cSr?iUƽ5Q9.o~WM?.~$hhiusogwy/q|\Zs]ƍ;y;-^Y9M9$S/Or?N;`Guzʥed&ϗ ZE;%zw4Qﲎ)i_KզwX|{\*L.|GYjH!VI;ob#ך{giA/L6qum(gnDwMI/7nuӤֶs߆Z<3$>ڮ{@m$x!ARrF˻o$]fJun#u(O ό?hç[7Դv]aUmw{޷;i7#}y_>M=W[yD%mv>; R6ro9RGM+ {E&\?wMn^$(&{#wBlvOzE_Wlcrwm C`1ѱ3#nw,0nXϭ2I=>,XّuuȒkκ{r }Z}>$֩*bP۷3+3v#(sz J6֖e1ѳ֮p߯VҺ֛ò(F[,y-/_z}lgyGש:Y$ub2U>`:ÚM]7woeʀO+[rkfPAbpăݷ##s l0_f:)JVvϘ |Nݥu:>6[k|9 |պϯs벌UjFuchǷKgͷzMwtC\1.fݻ?Ϸ¦6Tjw|OpUBa$YH@Ff=>?=sO fɴrS U:*zwUW~#];Ԑ\yYƌ~Bq|֔}{/˟]44eY5זok7^vyu-͋jrf8キszV~}Uil nocvM>$ͭe]Y>:\\ ?W۳jZk`]KhW̐@o=kz:J2owhzo=Njܿ7?wך^:Ts^.a-U|δgh.6lksdۻO9]b1{k k^Wqtr0%n$2'![oo?X}y;1Ƣ|};_^G?BӮltPUU$co[#ϙC MѥzwR4U?W֩5VBpoo^k<s9껵^<_x3Oڵȷ1AwHͻS߮*4Y:qwrzlz^tkb(^dm~:>9Vi ء@^Mq##9ړVv듥6UPʩn*N5⮠I%Yw%7i^%s]Ź&6`#Tge9%<= q{{.dmKoeun] o /¿I?c,dI<?tat]?Q10=MJ__ϝbO0)UN/mciJ7MmDٿz[ pHk ]j.g)J{ J|7Q^_==|݄N'luM+_שs𛖾xm|%QnϽoDhb2d}Q獎n~gR"6m.۫tw/H\P{gkK_Q6kp8_uC` unⵌNr+Y."F0ҬE[K}r[%بa9忸5Hyc %QiqVIW{)stԶ8>V}sDͺB2Oۖ bSپXY&앛2o[jQ#7ve6o=3mۛ_%tshžŒ >o4k)rK]=D.J̿/?瞵wVݳFmCfU T?j)T{~<ߛ1K{<2P7!~3ϹNR^B)+{a1OonSچoEԫHzuo8_g^]ߗ_?'\!E._{\6r (_fyl۪?}˭0`m+?[>ߝi_bmצ#291 rG4ttǦB ϝn\wK]>SLI]O~{Yٷ#FEo&IR7g'cO˻PI-:'s}ixzm?M]udA kϠ? l´\O]VEbX{jZ.W1]7;Inz ߗӕpQZ[WaVعpO'I8Uv/cK u9g{~bFNI _{lIZi u?ޥ7{?(uo܍IN~ ܎[_#U%ߏdB8b%HoP՝tќzML I_n GI˯mLpY}M &[o#2)Ny0N[r>")t߯G#/ԥ_ ]m/dỌ ?יo+`s#[1W{*+vťJbx͖-7Jm';}_2*Q);_-i;/f9[rzc]OZ%a I˯oԓ?+(8$|KJQS7qWΗlݶd~R6sW?/Ujsym6z0?.[&Oim(/ bP[oS5k|FvPW$ߩ~re5_d2=09:mlt۞;;l'YaYvK}7r}AMY_ I+7`(޽zms9TPvk̅P'iq^N `y$ZF)?%|c;1}Nqr_ w~f1R|}շ~;xh} p_/=YW^k]m3RKWwr/n)E}55%{ko/+ dvR*2F8{t*>nqԚvѿ]KH wrTj!{KZyIU$G?lSc+v%+'1w~2x1H n;/}O=6 p{ 7i-=%*Uw)c{)Gx=uʻMY___ĝ.x\wsEIu[@T_k£}}ʊIeo_ʉEmMݾg?aۊ**r˜}eߟ qN_~huV۪{ޝT[Un]o.Ma7}AΪSI#>){fh-|TA[)*.] (B⦅ϻblſdWom9__O.K+Bd c?7}I]۹Fܖo]W`>fo9~?/nsZN>W'6+oW.o^$T߆ˑ\* S Soq$|JRFN+G}ŊE,F7nyVQUN?{~/.c^;wϿfv:╒V9vO1ߟi&̨J7yk܊E%"pۀۜO֩6gnorxg+&G$UߨF^R䓄fn .r_Y]Wp8wLn  /ݠ9whᑹ#~Ӹc[ 2I+?[2a~mo׿'YI`B?ZOU]^q$nFϽf&.Oϻ^$) _ZJJ_mP1-wdP2 <μRսU89t?Rj9ޛTW~k58]^wW7kE pC0~m6}}NyF*W[}@KeI#Iv+8@w$_֔ck{m#F ۻ*~WZ m$s߁?=sS$ݬk-a wU)ޝoSh'v!V -u^dpO"˹qpGf+ls窖*G;4ro?>4䛺ק{m\ےGo,/^"=liUmu1 Ay$Wtwymm d|qwo[-[UΊc8߽G{8*j=r0q?nޞwe~z=#@lp@h|ߡ'f_ru3**?Zݭ:匕QR{tpUOۏ Zujqw%O]YGBO躋noӯdݗ(0Hcosg?BNɿpk}ٓNmܥWp?7n}~շ:&s5aߐy+ywOyrƃOkZ[ucvwͷv_;}~~hݭ$?̺y[`2O4]MK{wԎL pAV*~o={r&b܂[v nۇwRMk *DȲ2>epzݹ}zemnY. C:S:y #XܢZ7+j.1<9Vbqo5u񃗗ohe' uth嶶o.XέO^{GA9-ޓnoEyZiF;Cbx?x|ߏNi5{-'$=w޹]j kc4sO$ro.Dwe9G~M(:KoZOBޓb}XȚFyHi='ݙXmoWf\e?0={[ n6q-~Ǩc?0n5K[kC0I__h~}ߪeKEeneA9 Q3iӂZ=ww1Tb{})JN{{)SzkD֬ \pA̼]}4u%FU~+gيNpp}sxݿ[Sigv 8#+7YJIypGZQ(cg۷gf% m7 ·UGg;u|̡Oz=ԑ)o|~iwk);[nٰïX2zי)+ɒ ĕfwmmcTn߯St+k~_}mrx[{=B+rG? RQ?Վ4ʥ˿~xCU5j֯e_uƖ+u6}slMJ׺w%}rf־WZ=xN=Z=Ƒk"El6Ɵ.͟&v)F-Ynf#y+wݿ=:R;i̱G-vhi<#/J֦\ ҟ/o-u;E]v{my?Io&-h%ٵ&}z%cN8JV~~fFm_]]CJGoQ)bOR׫MՌS}|OSΔY-?Wo}VTU}Z};h.m|ٳԟ < IӮSݯ>ߎ>Vq BAkwmDsZoc?ƦkuשY{=u͢h:^L/"yɲxci>eHտw.w#EiNʆZXMNv drml,Y_DM~}_Rs|)T(ׯ7e;.6[^}᤾-d]~D_I뚮Qn۶[RVPk}c~7èȓM k9hWYjߋWL0wa7[7_~mlNIt,QyV#x>qsJ_kWVtӌlv]W>7Z>03)$7C%ylRY#O> -%YͻEvw>?1r.s/ĐNӴMj]8deF[_-ɷy\%(5wךVk6՝xIЌ`kW~.gjp[E|: e6o.5fF|3]9|ko};6>tvߍnKN4gfHВ3|#c]twЫE5*ln]-ge^"gohݗ;ji$d -PSsF)gWOgzgU~ZFZө}vOã> TDW~G]G)11HYB*]˅zjFiOپnMEmz,^υ4VK׹H%?/YoYy?,;?v3ǫjaRʞkȓ֡[B"vA#\Ƿv5n-ƽ Sz5Tnab ^Q5Simn';0F'myߟ._]K՝q(%r;G+wi.Xs{]n޵E;uo> FtҚTD{* 퍦EW޿%z ArKS_ W迭B9M{fOERxė%ỰUD"Mn>UXV_0LƏe|μn_?2ϠU(J]7_XK/]2I/?%cV+/o.]_φFZReRշnnizHaXk- F^cݹaLnM빿5HKc,**\ezn{<,9*I;.?+}Ozúm97fh$m ${Ys/öE{_vqY"U}Oz ;jo}lih.mhڜq&ζX4*Vuݲo[Z|UUi'_oMZ^{>տc=# Ah'\*.:M/+7ݗ3ZR ^f;G?sU*./W[έ:^hD\kw_ݒ+m`s,6Эǫmnelu#eA5L$|̊9)5~*z^wԃCA,hv+$?ڼ!oݴ-mYEˮ{w|xw:tcϰv]Cc#.߻M>|Q*[mzx 1okϩkO] ^c36e^;;TV}W7/đh;k{Ձ4On?2cYRIdDE2Su]v}Q`V"J6>[x Mm@nHxGBrtѥӿ1ʍINqK_ kc]ڌN7۷7 *kHElƑczz*Nsn|oy3ߣĸ*z8N{颍yy_<vᛍ1,:\'_BgI̚;eyx4rBzN˖ֲZ۬]S9R~E] [^J5ޯyevEj#l7|[s~3Ya5JC{znHI?{=%u#Il&Ig{w{wI{vXk̇Wr;NUN+m?Uu %ov=o]:B iQ]_O dI/W[xzOwM Zt7}^Wc,'\ a+~?]w،ׅ 38J3obmTUn2xgLb{o:hX\E$rFCoO7~O 2J*VN+2UWa}5z}Ik];>0Ӻ?b4BYwbi$mcw"l'pq^/ҧU%+9N>\o4D~m'4P Co}yc"wpxy⦡wnmmj?ϯ]\ϢӽڍZ|B4wMj2ûk\y3on>D|Ͽ+XZ8{;%Q;Wuz=˧^M{x}Nz5:K'1rj!>ǘn_׽~1nIl31YEL>!wߧ_?OțNХma5iu(u4VpR\ֈ6ۙ$jv!5YU$/n}ܸlQPnZݧ׆t}[\O\s%Hohv#W:ji'g&wӍ\U$乣}]MO4'BÓN2q TY߳voݥpL6掖,}>.Ȕ$>uKwO=e]W}no~j7;7+E.w rvZ%g} r_[D|*5UڬMsN'L#v?!՜JrEgfQa)5_[ݿGwq]]['P`]_-}}*qQzi~?4sçєjN/nxkݾl'T%bIXõݷ_.:ukNvroW6۱bzoJ^>0AmR#ݒ0ʻY3mp+ZnuFBYK浟8_kMJ_j^\mg|3<ۖHYG"|Ϲh-kugLTizߧD^5'ÚZN'iWٌr,$2͹}ڟ!qRvr[+jK]o5kn/㟆'3kaIrT崏pjqǝ[ OfK6t-J[ U&'Imzw~oBQOצשxg5/ &6Þ"d>'=6˅U{kkտw Twf,6Tߩ}-oo~δm4˽?Oմwib$l6s*H۔>l_2?+x9U'z)7V+\Td˙t{[AiH#/K{E?oFm$ֺܓmPEʅټK˄؟%}Oݓ[s=w}Od/O]uvx+۫i=Km-CKw ufHi6o{6^u<7%|]iRIB <5{yEfWyl:m7pXњ{5/Nͽ%#ݞ)Q?I rT[K|0@GԭokΓ]?+=GXmn?M7K5KY#-1[ǜ( [‰ˁ5woNjKܿU>+> gi^ }LA=ſ5,3~O5c2:=}|]{:-im~J-5?%ߺ}[>!Ow஭mW qmoQmKK󯣱 Z8w~kd[y-#x!,F.w躽~|N RcI~WNͿ˫>[-J鹼KemG"7̵aQ4WuTjܱIN2;^gg#|B3~~[o|, hc:)p&I +2Cyqd0'!NaOײ0\}^kp"kNJҩ,T=~s?fsz7Zo!#[i[mJ;>Vmn-fWHgWd_q[S-̱4e[m32jm]=ASjO ͤ|E_ Ϭ,:Tv:?K!=.PY6~X+^PtyoxL5Z5)Gs/ǭ+kfvrD w5-+T9 jn!PX|yyv0 mğ䔸됭Z]O _k6^4A Z5 =C-Ӝ[7|&{3+be>.P~]Wմ'POfmI>~͟AW־ k{V>yC4mmIol/{^SU_4rOYl:ppBV?JSUt̿|Lox։5ْ54ԯd&~kfh{s^oēYOBST馜W[?VfPa]|ӽ/_h?>/|^|/mmCbOM?ctí5ixfk[ۢ$isՖq3ת崭]yKGuK;I<x' 4wEI.f~HSɶØ\׽JZ'nh^| hIi&}3FOO'/M5$_ZKۏ k:A?[mmfdatO׳ NW\,ʣQ/sV}/sv?TxG8{Օ9bz7uK/.m_K4ξGV[ꖶO%Wm|_OuŻkҵ-ekI̳lQk y޹%Ztz2]m{ޏ5z^i'pvkor?ֶ*^˙-߮JTWѮ-?=O/'@~#桤 zbH[ZRZOj^wLqg$;߮Fomeo>`fsǸAT%)Y[=ٳֹB~о-k: [Yo;Vhu&kyia ZY}̵\6*S~M_ݿysRPja 45Cݒogu~,xſ5nT~" equpo;a6Ьv`laK7}yq67TpEIJNڷh&_;jP\Xy!U`dKݴjcn&L~M~wMZQ{N~{RpJI8꼬گ|cBUBKT}_ntmzO :\Wz\^z_~Ԇf\4z6, 6ՙ<~w\fèŮ}-ƕ.fo2ox;[nq aPdhզ_d=?7x}4}ߩO;Ly{/tuF!6ϓ~:|"S_^U,D+S;׈?7rx{Lo'#DhUcHvH9hNm,*ҾG7e_z[oۨu:nc}Z*aV7M|\VKx> >.bKth%v[{Y6Uvoy{%t)_U]q_Kx&O}&¶Vy9mc7~yrubMnꗖL6Z=H-7,[~|ߺ߳{YjUc w}[Dӵn^Q"SkO:8I4T}XRVQKߩ֖Qx'b\Ǧ;7.㛪; )q^KmI[.eJ)Ÿ^_x>xZ?jדmţ pAsxlȰ"\I#ƫ$> [e亜Ԯދ]ZY׊ Bm.cBoa#fF|+޾iTWk?DiRa{us^2KM_H x~I|̨kڭ؞cWDO;3ϩ77޻w>Cg/) QM|ۣ=QloFKW#/hΕ5(#Jz.@']MG H&B"“zKmzHJĸRWV^%~뾛W33yZ/Zj:<:-\ZbHlm$֖gVwٳߓҲ9K¢N8KK^=hu Lf+-],D}&6 슳I#oG߻Nߌ_zUႋ{V{?Sp\+Fy׭$Ӧm߿?ۙ H~ٷHەI^{”iK^ 7C8#w_:s]tݗMQTzsg+?z$!7fU,7 8+7e{\E%Oƞ6b\,q۷wQҜB!{kM[DBv.-w.4O:Ycs¸#$mLpZ_FJ#Q|.O🽻n~hܒ0K6|ŷ:Mk(9e.amq,H~^_ޯy޿NGj?Fe,lpJ^2Ȋtq7R|f8[,>WMh];Vx [HAV9ǂmxZ~==O'9sYݶ]}{nȪ zvmg=\ݑVRns.=yM~o?^/Nw~T.؀Llq}+NO2dz|r@?/zMiVbt񟼪۾]*Znۊ߯yw%46#o n9;~uzm\$_bn̥,wjo[vle)%af!_trOi˓_>p+Q?}j'6믗SZUw&yY`{*_¤V?B+"I a8T<󮔒$JRﵻsy$GOzO=j ˲{߿ȯrAP $gg{z'޻_3JHR>VԶ^e}<OS8NPwOԿ o\T_i?]@0lgv{sNMfq2Ub6yW&]_SӥN)^O_&夊Ƿ[=IǙ {z܁ɻtgzǿA֩9w{|m0bU8"N@jU" --ʿF!fVRxO+H4cw߾4toEtI@aWP;mߟdZv)92O+Wb7~o7;+ok?K 2'̛K'I_jFׄĕ?ɭt_ןL{uel2]ʫ:nNJw]U܈˦ҨYfU+̿_*~{x(2$~V/{|eO.k w M 먊uAK[|ѝƙmOndp";M//8&沫KtIJk׷M~msq;I4b68Օ fS4II$zjz?ē(K wF.]U?R9^zy?oP<\]JC*2!nUz/ZimoWoW].d$1"ʻmBvm_6]H!*0pvɬEwoKͿ*`F¹n)|.4I=k6>!׍ξZ$üJ䓆\QKou(:^F5&c&o~_Zԭ߂jO{=la ə\[|~+XSOQy>g_fNyu U-3=nUw'o;LʆJ z9nMS48]GWh;ZtnZ]NIQadew?5:SOGw]lr2,Tg8ӣYhi:7Mg}7RMG摡>6~# _mJ(oחcqT~իUuk=YͫyfY,xQy+G N+W_zYG&5! R=/U>ُe7t??|M }:WNe{^}F]KߙhnFO4?16/ޟavK쫽ڽ!1*x=뮍[UᯃjIiPp,7fq ᙤ`[(#7q5ܖo[w˭MDO W诱RAM{Qn%+ FYY4+&_[".Ky 8Wmo 5UY%kr#+)Veݵ?6k2ԋoW2PwPZ٫oOSk# Iʷ]QYEm"LﱓkLtӎR|x35QLO/RRo[B=G_]fhl-Z@ye^0r&FxnS!ݚG3 \U>5{Ի/_g/ 9$!"cv_|hvS_9=Wk2Q,rTlM/˷_NwIriI>g"kl Y^ǽgw~߭i=(H+B۹BMֿ֧,ޖXmQ"Ɵ"]Y9Wvhߪ"n֏}z?`ῆR{gk;8gSQ `*sKߺ\x8^$m#?V澩}ehmoZw>&֒]k˭`6;O Oz˖^I;5dE @K6`??{V|۹N6I]N0XVpXB>W*RUҲ{WEFNHya#AI/6gN^9[! F~?w+)5.ntBq| gfb2N?Lµng${T2hj|țqqv'kwOwNK~Q2 |Zݷt%qJc2&WK]YGCpfڣ_oH=GUR$sYWrM Lb{A*qcք}7~J)l=_Ќ]KwaJW仛PկwvDР'}H({S _jv8!KrGp3lH{H78wnN\7!I*@5Ҫ?' =њyX) ] t?{D}{_y:MG>',?P(ے׭e(u;![l(Rvc;i_4*uxj1R岷ﯡ0/=?睎IuvUeľH瞭󨔚z/6څo;dg%T罙9oO $!?=\Bj՜UUu^~]~?J\3痯DK.7:mxϭSIfϨx\ORo@|qԎ?zV/˰;7u YB  ci'V@X3eԡnF=fr}ס3뼆 d#IwNz>~I BAPI muOjPzۿEkicBC_޴qW~:7{ok!xqr?.i ~VB;rwzYV?SZ3>PvyO|9/]澿^Xp\pqңN7O{z&f_5|ƕ.7rq>ޘM' $mmﵷ9+h[5'n_dGLdrsՎzޞj#kBrJ/yλUX߽:Em nJ1ZRʫ;:ku{jl%f~?_Hln!y> W+6BX3 |ViE?ڿ¤--/O7 H1g6d-J0_H[z*zx=OI/͒]ԓrV#/Io_ƒߒرI&711~b}+3HR~^PXnkj֕:|C$3Qb{w+-v{IԽ,0AޟOʔ-~wFNetiі n9?֎va:ݴ*1c'>f\-~^9k7}UU#m/|*ƩdOU[-*+^ֽERGZVTu$vja#pox JIo*߭Ͳ7G_^N-ߍdžns˟T# (]׹cFQ6yڥoНw8G[]: Bu}XM魿EʓIh?,r67g~}AL9\+߯ZQ]/lO׿|ecc+w|w;yK}ߥٽ&޿o1 ~^2=pn$C# x)sp֜_[wpߧq1%OFiɦ_~] vj q;}O%nS:RB|+]Jo]~SbB줢 'r>_#T⣧{p;r6Oo]_1`1ct>]uMeJ#…!WVaR;>pνWMBݻҟ5=R@ Q-s&cfa`xN.kw׾슰ߧoQry3.v<8?ϩ7?a0_ G[>(QKDP8cz沫 -c'MM#%OI?ϧv'~_zWsV ;qtJ6sk-C1pO`A什I߼~hZ30o͵YVj'vHu=V6ӵgD;T4Z1BYdڤym?98Ӓ_-ljwʊky/'j4_]+}7=g;[ϧsG)KN` 6 >(o^Xo`$c;r{uLj(bpPܫ~]~Z/u܄Gb6 noj)_| 嘫`HyBy=_{zt$vwf~oh|}Ρkfm&%|޿uT4);ׯB'BA9 _hDfy~Ѥn߫q$UMJU^Jߙ$+WrJoe:(PmEɽ\VWvn+ݽ̓F6udbϛ#֦3l˚RwTio',6" |nU߭3I_F;N`?LμwoƝp^?4,ϧtT$mgݍKb$.嶲*}=~'JN/s,<.~zjJ?nlf_jW[L``apX>sڳWr1?y=VצzGz]r#w?^NS{ml*Wi+\֋NӡFVRu\33=Jm߷km&|8*vۘKv״>Cdd6^:BI[u,GndU;w7wքvM˧ ~e^~ݘʔ-N$vno1:֔FKõ+"]~oϥgIukyJ7i09ubM5ץV r\_qZs=̕ݿ^tLk& 3b7sf-c:N W+zw;rkMK>\x>WϋHƌUm*Bo߷yR*Ҵt]v^__:qӮwm;xdQ+?磊T֯Cs^vw~}m+*Y oULw}irKwX*qftP4xIKtګnu(T6`+ZJmyulc&iZF,y&կe#HcHO$ebl_Sugjg%LJۺ-luk"mM34dk-WbOW9._[uṔ}W+){ls)uOZ[c5Ŭ2"ݑxa6>lץʥ?y{/ vuˣ֨tE9mfb-i::;g7&ռ{5rpĨE_H JlqYԕI[M%k~sp=Vg]?bޒ뭽??_犮 .2\EI5?IRÒ-EyK}xo.QmnӿF-Sw A{cqq8CO$y.Y2^MWQ~M͆x狄OG}מIFVcnT35.k :SCkؾ[3opѻ1EY~ JmM엩,xӄjYs>0iӠȶgYVs?/oFiv:YY5߿gw-~imqM|ډ>mb:.<-r6}F3&7=:^[;z-e_Wn}t}woo--:KmFۈm۶6b߿y~V_ѿ7g'}(km5?=O'¾*LzTsq[j6?ɺRJn61F#iZ[E=&Uͦ "߅Q},{ +*c_wc)B>ٵn_Z<8{ןSյztۋZ{E#_2i8 dا#_kaiҽF%wg.&Ыe$JZwvާ ht=&kH<׍!ot$Dg߯f!:t=[hY{^Gr6w[ms]`Vts*գioݯk3TVǿOO30=b_+YƼo.ngGY#o6Y^~ryi _ {ʔwӮ/=Ė,GfĒElΟ-Dq2MF6^Vv~XƟ3>tקi4R`-euү@NȻv#lDTeFԷ}ss_Ig Tӝҵ>՚K󹿯jKwiӦy,f,e/5ԗ[գZx{;տ۪Qӣa o-ῗeK [^moCu ]@Oq ʲ,hkfڬʟv=KR'i$ﭵON*ѥvZܕ־־}#VIӴ/ kMj5-{TW(m$EJ4sGK랓F3v9k9qYuӯzBDp<[;6-z6/k=6w5OL A C6O4eosG򽞞bwtPW 1Zu;{}=LVz|˲B.l0u\}6s|>fS>-I|8q {H:~Bmgd?&')TMMu|9*\{oX׳=G<*Uo;Ghع+v٥h{T˺{t~i7[1 T*-N_&$+~~wߎ*7Mz]mQ '[o/_Osg~;G}.ˑr1#;?>*&!jU(s5+[gsr4pR/gV%mGe;tOW^)Ĩe%&|_S447^K2%@dw*r^&j|ZZU~)Svrzu2熴CTo[KEʼ}&}|6oc:%g lhҳ]}m_sԴ[Hר]mX6ym5<͛זb0t:8~ίϿCˡ|ѵV_q_hzMPUmJUfK}"3G ?gkxoEp{٩_vݟ8MZ /9x>'-9cӬY!HMB_VOݟZI??O;è~/i>nܼ^sr= 2[I'hvk;Eմ5 -xBY$h<˄s65JLjt+ѝ&'^3J_/ -iq5sԩA "vOtG1r[OqW*e]*Vo{ou]kon6`dun~Y]fuVuDOSR5{|, ,SB{^_Ki{u;vSĶ:W5h/3߰h,H`zlw;-=iѫ8R+m^-Z/]RT"Y$GB溛oTʢCY?7h6[޽OʳWwk;wOs~|dܭ{7絇idg&_;#Ӥ_Y%>^e, ;7򵹗k菓c|7_JZy=Vs_A6זRifHf#]6[c3"{_^ z ]kZ~ڴW#+njN]/;^-kjw`2yqjI i G_-[{BQy^.q^uiSWh-}V C vQ龗?6]~"i*Y xs"ʱ̲m|߻/X| N+s)%]^^]UkԪY^7{VQl|~-ì7*KٵEu?>jؚƿW{w}?ẙG,nPv0b۩exOCZ2QIӞ/zىn?[Z+}_=CGvF #Nd͹Xnڛf41v>GbUS%յn3#QR5߄̈́BWQ uK2]DZ|鴉 ކ"JHiNQ~IJ˖l=?V~$K5i_,Cw&o?![J|(ѤҶ՗gso诳[[7 iŎbsVYgڿG ԣ/kÝFӥeuk>Λ|$j3lVk|ѳ/sC# FUk_ӯQ|i]o_MiwP$ͼ e6W즻e9JjK:Z*0{=ZU[6.'Onm6<cfVr>O7+_eZtp2Sݫߣzu9?E,LyWv+o_/aV/so4Ќg>/(?j:Tڽto&p_y(>-cI ovɬ|p#)Ǧ.{ j^Ӓ[{ 6ݾbmmM?afow)ӂq}4mu= ö!ռ]0+V4,խ\ k˫]=kyn+yf 6!o+dS΍mHٵ{ӱӕ/.?#1wt ]]ͣxQu'͑H՚I܎{_!:0>v맪8/RS|wOf˽GIWcxU~"=ZuBN6u"{Yvq$ΟٵjqW7g9^V /m?vV뭿]S^>)>XG%[c3\L[;Iė{U IKW$毳c~msQHԓRvQ__+~|/'?Eo iQXַ:][RMf[_\y;o+yImgsJ4)Օj1YRi-^~&ɱy:Z|Ir벻~^jw 7>#~k 鰎E,|3.;ǧ~{D2u(VJ1u%Eqm]7_/S٣+Eɫo}z=['ĭ EϏ|jl~# uO!t,ּ LSIoWyf"Rws!Kk㉜h&~#w|5>8>:^(_^[|fǗqumoi:ϱo.-dl>gNY;~Z+tgqLB~/K+_~9| Ҽ~%ÍO/I,vaw^[&e].<֯C+MZTUEO_]>(=GSW*X˯cP_|?iV* hzp3[OlheVGJ~ZyeFV}Zu_|N>xƝs/-GPaѠ$[R;Ct{XcD?=|*Y>k>c9;ÞOK۫?q>;?ß> |Ag[hYlR9JX6-nIl}\?5 )6qn WoO_si`s =juJ.iN 8Wt[9|:>|DÏXb>&m\ċcpo$ɹ2I5>)PcS7J8{'9{1aUcrJ#'V_jN1[]ht|iuͫ!>{Mht;}Yٞ{kk$DDњZ_O3 prվ[3 aMK_|/ţsj/Uoii-ffKy^dH~ӊqu NU Ά>1]C8O*t'bZqfiߦvi3x_]R7Zƽk%rG:L3_跗uo"_y0ysFO˒)uߢJ'w?H|QG߆[Y7j|8/~ v2I 6u>ưLg ov TvØ}e.R[WQ]~~ߟkxbK#.5mK.mݡ4wݣ8S/eن_*E|MX 7cDJF[|}[g ~|'տbSTz"ڥEʵ.$km6Bj$o=yLp٤ONZNV2jE Wҥ]ZO~7?f~_MEroxjVqY%}Wi0NI!Jg3pvƬhӫ R+oۃwdڇjv'yiU Zv:^$}kumxws<;neZg^g(E}}}mYnC[2ua 9r~Y|@[)+]gLd+ nɵ?*H+#.$upNɫ5kV +z=]{0|}7VǞvksǒ+/C{hf.ͅɚx|z? ldp[sZ;$|>3 ayN[]ߴG>0|MKZaqad61vw>$SO /7.$/4jq{0\3nho}mtȻO_xQtVkM"36av>ϝ|VnN%|(e.^kɮjO?`>뷖sGkH-=&9`[*MKϟUsTO]> S&y٫[[wR~5/^-%[[JgArm t*T&^OW4_|J|ӝWge?[ΰc/#a/v) Õ/ֳ'Xu[7N>qgaԍWΑ]: jiuMZt-Su}o6\rp"d8]7WZqW}gW鯙I_ƃF[x4hcx9&C3l=C>ҫ UTv>DWC+">vf]43*lach~u۫m^s]bv/xgZUox:GX5]חFx՜e>,z005o3"zo_Mﭾg?'◆t.؍WK97];HͶHU#hڿsԩ;_}އY]o]u~a|@c;X3^vߑ6ҥN罷ߦW߮n8?$6m(*Iq}3N}:䑤s\jmwK; HS@~qa@'A't,"HK4r_\Po7sEfa(fI$ n~WnZXg,/s29J[HT'{?΂B1ŷ$Uhs>ൿoJ.:TZo0gM@!{<|Ϟo2;Jz'jV[~3.d JAzRRM3:mk>e>˳z//&!\H$?~ [شF ̯v{s;eZc+ei~>^*Q-ug>HȬsV{?~v7BQmݿ/OYzSr`gPjG䍤OWʻb22s׆JM?wgq 7<?*=+ N̿s?-B6wOA\tMknq\ݿՑ,$Hwl}sXwn7ɧ/ET ciconm/sb6+8$$qnM:R>D_0:Y鷞\~VIy.>U[S ]%.1'E\+%k'ݱ,Rђ9gw׾r;֤yd8U s׏Q _]~7-N|,p̂L- ?͵[$߅nҷg7"GH*Oo娟:ǭ[߳Ķ ,լL W2Mk4ymD+4y>~>>GF8gmgw߯-dk,b26|ۿ|彾?צСp6`y+G,{~gJi_f{]< 󎵼"kzJMywZD UA.P2wwJQ?2%9]'i ?I7{~F`*[ғ#j_R$_~~}JCY{ViiÜnI={nI\0lpU~ë֢p\o{"s2G?k}.y)۪hpb1.2)OsڔIYw(Oo} I_}vy5NwV-eY rcQPg_{*]>LQswnݽ;U e6H+c9} 1[_o镥q(ñ*2ȱ<nW<֫[^ հ(P>~Ooji$be$!GG3OZtңkGX댓O4)?׹fq i`c mm? l_f="rB)P[]ͽ}~_35h#([7sn[VWzw*B7vo߰;P qo]z]Dj/Et!sԪSpkwJ5}ydՕPnOwo"OH/}oq Tv4.γC wpvg*Npwuã5Q+CSZlM$*Y*p^⵵+#֚@n dS(ws# k ׀Ob2ے${[_{B McNy޾U&ߵB̻~|௝JaG4麞vg~GK_9I4[iٿJ D0IfWB8<ϕn-d>ew?Ϸu~kX G*po;)!F/VtVMޗꞧ6K >8ՖVYO_3VZRj>I/>csdvPYFosMs.,LaYXHU7sjA/~cG-Q߸˩<˃&[o)s?/̞%W2E!%q3_qu#H m TTWO5dX|ۆffW}߻oX6Y/I6ݞȜUP@ I,XAR\t.}63&V},+^of]S1swm믗sG>+J^8T01dlgwݩ$,˞NʟRI_/'\&/u2tfœ;)A+ٚo݌20-$<澿hQFZL! >}y;s8ɯyNSb,W;8T.^M)՜<)ab}RWNNwr׭{~$m"#䓜s룒]dNijrHg'W qgDF~}{I# b8^Gͻ=M>IyY$^DB[vӷh)E5{bM|džã` }kxu~֟--Ӧ2?68*NwWVFˀ Wr\JRk=߮BF8 ˕'i _v ʟ>ܓyc_W;VK6߯P(A]~L'UzyzrRsnq9Nz5dM_q Ua8_v~RI;hms`i/d,0>pĐ9fpMu3 x-y߫d-, ߟ>3M=zMk^C9.q2A&>[ NokOvDS vq7]5e_ X;=/NHI)q,l<Mߧ_5穀]_KT(p.gnr=;tRMׯ6 GԻFǣ9Eoư2 /]=YR^1zN p9Z'&ɳni}_}^䛎+r9'7b֭~(Һ\gHEâz[3qҗV]FN?O/1EEq*[$᳻.S)_EoAoCS'#-Vi7ty!^u(W1x9W#TppNܞ B?/qQ([]Jw_ G֚VV;'Q/կ(] Wj.c=m:~lGc/8wn?o0UB@o?*NN o-6k\C}ݣ}н_9|=1˻j8l7Nzsyy\z[qΤ[q $X6yI>j&ML|#׿Zi񳍾rU yQ~6$ێAh[ 6=NN;~?̙R'.)"Rč`O^<{ U_̙RFHw gzFO\4p%36x-8hו_,l Bۀ 2-~W;Qчo~}݅?V%PNs=hE=eM=naSh$*O\?{qi?\}ݿG ю?sϧY쟺?tj @#>_@I.Ȳ y9s}hoks~-ϙ>dʤa?S;n͑ 1>rolGop~D/̨҆RF |7ߎ}:bjӃZ56HA 78#Nޱ}!W˰1w7?k~Y 9fa9wp.e5_2J9+nc(tΧEt]+ 8+qZF\b#[{0pA ӻ֗0uuGDOcqx?6{m-8o8'ݩK=o;wb2r8?}w_Lܥ?WX1]ݝ~rg6#J(Tu?6w}<]ꗭtqf__aw%_'eӫ )ߛV/5GЎY9+F_U1ooڴp^~[>aJ)N2 \gfoA1kϮŕ (Omˋ康nK׿8$xJM=osRMEg )kݧkJQ,/;c*\b4u=7cH=oz8g'w?kGK1Ac{搄\ϯ(v_}nwZסFJ)(V|bYy{I]zW*_6NUeHw}ߛs֦Է(hbF0@'?Yd{!VnVQg%;z+yuguRk<ʡTn%Qb߅fImM[[} DĜs~ҹ%r]&m;!}z^EtҪ}-xQ]̪Aw}ooNw K/8?kхI;Y߿էsvEWpۀǵ>}ʫ]7ĸB][׮aKLcroϽT"ntrQc7 rE5|:۾oF3ȕNVeW@)hU.Y}jPTv{Z2ge'\om~]Ռ?Y]WfPbV29 0w?[QRi?\ΕX':珘9l; [?O?Y@ WvvKn\~~FPo m;z}NvJϸ/ߩ~d}zhMgj( =X7c%~]KP~⬹ PerIߟ&Zk%;@RAn.qǯDOΧrUH+`miuU?^?ؿB/mzk6H7%+f2vm$߯.*)lf4jZ/}GF99}𪍭U?hߟ~DTd-wyzI{G7'0X\qԩo4d_?S񇉗p6E$\cY[jyy-OZΤ)Fvmy0NRL_|B{2 p .؟=k˖a{J;*B4N:o{w6˳Le򥍢͕˴?.jn{[6"n On1?x}Z,т˙0ڽib9m仿롵%z&/%Oh]56ԭ¡5 Vo;.u'o=Tׯͮ5=^o=bXA ̭Z47}[/*ٜ# 'ug8y:jץoG1q.j\jp,}F;3D:Ckd4 LMٜAKћpt}o\ [zŖi:}mėBw*yt*/ZΝJVӷÞM\dKt">0exh]Y_@]Uv{I}މ8wvR嚦K9}cPZhZ捧jՍŮ-יI35jx7ߓb5jq{(qNTZ]oϭz>$ -);Z"𪫅W_ܯGqֽ-~_'<=\3ٴ_Ylt.OJB$?ݵUs.[vfZyTv\]|..~իl1 {Sӝ->Y#n E%ai{vSvFu7y_&Pƕ.u=taԧʗI|.['Kh׵sW2J:yjv썮sP#GYBvk|mlyq50q(M4szEPӤp6wor$%#^SR,?J5_KjvaseZrw$>_~=;S4tkI ]3R>]ź#Is7[v>aJs:|I{7}zkգ8J`6di6E^wom ynH¨Cr^u,,(TV2ՓѾo4z*U p:]c(˿xOL|VC],r.$n뇯o*xTuak{ۿ>&j5!OR}{v׭͏xZfZѻ^i9t!i$X|wϟ{ rh(ߖ:kvUkm^#lte1V!ۺm[s̟+Th{ەcTټ0l5%%{_tW vIiA G|m*7ݒ:تYl5,:p;mom{ح ܦ&fjv˹cUfR.t-߬z!Z/MEi{]_^5ʱ_[To{gz[uyc 9IFo'g/?1_[A9im>dM;O_z~{y>LJ|9:M2\ IU?L~_}Bo 5.5Iߙke8'+~O0`ңc,S̎It6f=Ҧu6co1+^r sI%Vu-floYgy# ?3r:::~{晵9Үs/tm箺uOCE'u}}v3ݮDR#@dGYj/x\ҵ췺zFT~W{3д ]5$?kMFTynG"m6?#\zӍ\D[J߿O' ҡ}e}mnYzzL6']\yL2#no_Rڵ믗s/ON;-/_Q C:e}BP߼&2MϱYz|;:WIhjBhCO x9UܫM6>_XI.%t&c}QڶfhL&ϑ+t#N)iH>|ڹy2xNJNYtMN\aX-vw̧z`rtױaײm<^7: :tQ0i#4q<ۼ͉~|erVvK}qyN>-<KtG$H.#Wy;؊2ެdRWhoх)EW̬Y/!Xje5 [Mf}9y&VI|2G:6jXUU -au}RZ򦵦O"_XR9Mi̭gJ't>մ? )8 bIc»COI{&Y:4IB Wi՟[Z?߻M]5ox!+F/,3vRUgw>Ϙ{ʍjTU93N' KݒnsZ }"kDo-|[ZIiYgeziMmU߶<&HԣNkFg Qӌʿ;Il䴶ӥH<(]|7^}vE[夫Rzݿ.|7?öpZv"d_3sg?֝4]Mޭmz|>K с)Z{ڼھd&㜙2G ۶fwk_h/K L!2Anj>Ywg?Kw(^꿞^z߶ D, r'vڿFN*zmRї ?H#v[=NR_oM{챍,BL?{w|^/W{.isK'~?K|-ލj8k@KCcKn4ϳy|>*TjJ饔߫n[i?뿫> S5A9.'̬{&>\5\E^#gR˓ne>~Ik BcTywNW4|>|EwS޽e5_kt|GèZ<ǤjWrv! ~UfVVMi]>ⵣ/wOMOK/ʍ¼ykv뭯?\>"ͥZ*=YAD3*4̓~DoՂp:>QW-5r孎:4jז&ӷ_w>:j6bBAr%ޗsiK|h3loni?YjyۺӕvhҤ"-8r5KK)eČr]FA5 NߑGU3 'OgMҶ3߳檭ѷm}/6t1C8}`fs{Y.QENRӚR-vۗP^NHutmKq{cn}R N-EUl/ѻ7ɾUjjmweE4B1g? ]OC|{؍TȀ-&8#A̺w}{nyW/%o^[Z1] ,{m]>tKhQ4Lb9 k2s6ݼg_ڣIb]KG쵿߿C9T{/E)*2 “GF$oFd/(?y{WKFrojjO,:w~( "/'kS {6¨y}6*~g;B9jIe?NȲ<- Qt{g<%ڣkZd7wySG onߵou,Sj_彴gN-|o3QC+ysew4o<[#y*ZF{ѥ5;r7S5<:êrY[^y#hNv'}wuۗ?dԩM3zk^]wXŒg5V;wŃZ?ZnqmyD;t̓j8$uR, oS]>d״?M]׵JwЙRZ,Y"{vmC^I7χ~Zc3ҧuג^ۦ#+B;l^^kpc<$mhomw,Fg*U!7)5{7-ʖIiroM>nokhn8eXo#~zi_ozrIO+s;>7RiNoז~>{øZK Ir`Ya_W/RiɧMGRƨa`(= ΆB'^)u1e4b4{ՇoͳaoeiΥ7|[5G(ɶ?=~i[ՒTRdwنIx*jtzw=2*FQ?7&k۹,5-6{X6zfŸK\7:k\>7*R8ʚ\_{f_뽇:x,=i.T,mǝ隄7zٷӤDIaOokI|ۑ|lMJ*A7g mv]u=WFqkI-{h=uc4IrLXe|hyly3䯣nI[ ]4gZ u;6 ,w^[kUhU\,3=}N_Qj E[Uz%xC3:ti&FߙZ)ºeƣnM̶K>I{eF>J_3"Nu,ߛkkO],/rQS<$eޙ]ÿwZ㥘JMǺutfjcHogA|Qhzdl|锼c laoFy&fT8c*Q3 :K܏{^oo??r$#wnUkK$jrBT}:WV OZDžmIOh Z| U"UFVY6"}sjO}/|oy|p%Fu%߯_?"J?ZGxw«J?ОG[Sl$eo̾vϱ|;]%\|NSnnx}#\4)cKTbGe[ë_KoxE˖ԓW^߱t.-LJ,4ȴ;[K)`;p^ҏf7|m*|gN2jIZۯ{pY~J^i?WuKo-brǹcew-ɾ515*TIɦ^?̺\N0NN]mM+\xxGevt5) g{x;6$$;>Zݞ[*Z|zofg?Og]gFxg-wg/v^%,n?4ۃk鑙a3I Y/O Yc*zqο.͞aaPu/=o}/>4xſ A;qiǏocq rIy-ٻ;ᗺWetU(SOx_o_; my' k_O(\P3tick[XUr_C}k5FY#}|#_zYѵ]{yZzW?>5c=ZFmigĭB{yn-·ԭn.5mpMLs}3WjvuN;8O2֯.URrrvGVڏ}5x#A Ԛn]B!k$sCky r?ڭ,dDeD?[~)*EbeW{.ᬧK)TQT#KMw?|I>GKo#Ew\6W .~}YaN,t[ەi|f&|!}m.[o-d;i!ui_ɳ|ˈ޿p%FRkϧ?oBciJ T[y~hxz<~͟N~?\Y9VLE"񾷨umkMByֳI!3io7$?eXj7SI[N?}|E<n1z\u}:MGM+MkYn9 Z4uhdd{i5dg޼^")TPoM[>+񸊑y۾ڿ?SGOm*I1q"hKO6\M]Cc 3M#-^;<\D!Zz]aI+o#믎zo¿KHxZoG[:~.cjwy?'>7-gu #V񆧧ivuhEo.&r4q"yҥσuu_-pPNJsEX'M|;'헋 :  \LЬM )[to9M8蠣8#gwt<~vs],Ik'H ;/GUHlr|b3b%yS]7WzgXdxQ}N{|CC5żwwVik{Jo:Se#{znys=ӿOK**>-x~kkMAӼ[0_ G$*[ɚRK{$I-> +)k_ys3,7 p.8NzIԇ,ZiK_SbZ:-|ck?\Z~j>#{ nPkGRZͬ5(cyO2k8oiu+a~ SZfr}&+_**7F2v箧W:S/ğ쵭?_,'rz}g=Յ?5M~?f{Xn#}i94~Z4*g>vyKi7os-g컢~>xѴM׍?[{uҖ=]i3_7HG8Yƕ*j2^ +{Kkk}Eo*05`4ue~9 |A{çjMҼ_j~e[AXohdKhh;^cNoV46m^}?OaՔcyWwuuG9wcZe?|]qݽ˝J5O+Q6;Y/%>jm]?.W0XGqg:E=gisHr|kuEKx-fc͉_'ԧU-]^g88/n}>w 6<5zV0]_Tִ]>[wYƷ/lDc/=?q2t4n?fXUo8gY< $Cz[6{?jjujvp/lL?+I$g UԧFw +rOe3Ls dر 4l|/YVg{-tUխKnk۷=sEq^\hv0˽y_&i2Mr<_#Jݭ{ӪՔҧu^u_ЏxJkIC㈭[;<ڭq /}:.ΞJi i˛˼ǍuCjo.Oh`ˍf6?}ܡY OY=:+dHmb+%L!U$դ}?Gtk]uÊ\kEs3:k Qr[s$۾V˳`v?}wS|Uf4boK뮛s>|6&x⅝캅skOXdi<ihmv9߶O*N~wa-gt}_֗4ޫ_MNڬwx]_#KT=W2}} *VkJ_O樂*,8T򈻳vmwWbʩxA^5'.M^f BglwQj[r N?UQւ􊽿̷+Gؐ f_VQ5{4jȞd:dn%zzi%}m$a(+23$+pXUwv_ɤI$S?wׯ&oy&IZ'-p 't'^vCdܟ#*ӗ]VhAPU%~qћ}u"MF1 ngU~٤ޏ~TsFwZ oevS)Yy7qZ߫׵rE( zޜk.E'vv6#Q`sa{kO֌z~qYT1Uw_9%2Oo_~]ݱCsuߏz4ߋJtle+R' gQ)\Ç׊ ;~Y;Qq$_w%{~%y$E8q}dW|4[w <w4#lCyܭ,6@kәUB.ڹ]~?ֶIha8.׷Z#]1’_DoN #mO~^{f1o~WrwNv֦ܗ^YiEׯ>K,۷'͜*M+]zsJ%K` ;~U~Iܕyᄻku~n(?Oh}{NvAjz:vL/ ˯/ԥ9/?RܺE<C\+G%_8~<;B@T}u`x]]sGJ袺O\ѵφ68X/t;m~n$g[I $i};xj/)V+O|eة(פ]޾}n{\ec@Ww}Z֎M׷MjdZz_ZdYYAFSۻΒiƩ7_ϔu]3z-ߥMiYY;;nYd[a/Қzh9di޿(`$ jY{L`}w4+(䝣JK~&$rHn<I{?:lҕ8]o`H!z!~]|Ҏ;w:+R}WBg%t>Tro-m(8S2ˠnkއRWw%yJ"<|>PW]vMjGѮbsKy~5RfKj_2IE HsׯIc _goS=rۿK_%Q7cۻ}-w!l4'W2C u(Ty3Vsd 'Fbr\aƜ瓝XU90Xe_.ʓkom*AV/u?JM6wmɀ}wTvsIZo3.F~woµKʓ{ uvQn*~ooT9czmVk[KERF#gjI_GEجێ6ۉv<G5N_/*9#xx;_b*A~柗Nݚ|>r9/]ߟi83io5O2w"w2ivo![ q[:/P@d`䀹??qVi9?͙}XS|AV<7m ٵt$:U40K};;R= ?+!ٿgMB]~/s)ǝ]uwN >MdYat:ݭ7O빛+dBSA?[\)Qzu%}4 @4JwO_?U+_2#qf,Ꜫ 9hOPnr&o3ozI/w}n>gk> ;)|ܥw7̧s(t~x؊ݺ0_ShFwr̨s7wҴm-uF2ڻս'yonngGqZΔo+V)jԲYGl1?-LT?WۻOS"ӟGW{y>o m"Y\HGl,HιE'*ʬTv_J1pJnZ-6}?Sumbl^p-!6{Uyrď{[/[a>T9)wӺ7ݭ G|71IV\6iMYKmmXzU-T(=y#gzu׹uIwyA [fI>Ѐ7Jn''μc*X8P}'to?_jhu*{ԥN;:YK]/ X}AİOv/zm0ҧYwVgQǖlkYHHJިGSW~Dܻql^BOϜ֖oԖeH,3e6f}44e00_IM-!zJVRxiKdlDrzN~)߭̅eu\eyթE_"G4|JlrR5R _WFQ1۸oCMnJ~L҉[UCn~S\}j$w鿙Fqy';Q7QΔ^&QhDq]w/+++kOm?5s4)-0Q?:g_{e$$ϧu<|=x~ƺn!mZ=* W+hM^cgq ea3Ӽג? 7lx -?;}o%NbAf=Iݿ/;"jKF5K}[PU2~6)K?FK| # [qMRNWDJ+;FCsmMfzue]Y}{^d*g~rI'T)(ia]N_9;7?V3pz_~J%ܹYyMk~y#k=wMo]oԏn,1!~_M(~b8͎3MZw1\EXU1nt*ՕկӿZRӮޟ0 Ƅ_zLRK{w{2bVVb#޴_pʥKtцF6GIݶZd 27z*(YIO*솾Q _#VM]XHWO$v:QjZsw.d~rֶۗqI뵺$C \W_43?}D(?]sa n2ïJ)yFz_N17q9o~nɳHՌ4zӿQWRCqc}?j>.QҠk׮>RM=D#W%9Qn[^˗OJ>UA I͕ޑJ>v3-W~oY{({ 4TKW@\nxb?kW(#pWoo~Wf^=>_nu*+G$ws^{^e8F0H䟘u 9MM~+gۍ?洌Z6_Gϒ9;㞞.I䏛 r̊ ?w'~e{;!)E?6ۀ;u6;HjG^\1k-IrJzꄌ挃B''sFkYUX2s.MΗ+ !'g)5Q[o2[(< y7sm^ V $$)[#+w{-~4{d(I#ing)JW]`2 +)>6Q޶ïksdÇgC[\Vw1QZA}S~BO5}nF~ɳX]]>̐2`ZpjϟK}Dewuy`$ @?{={͛41 d k\o=37m-wnfU!s`MUN?(TOM,mXcg5Z)t_NA*@$2cp?=zq߭>7>{ZbN1vڔoFZ{exnp{R}~ʌ^L$(Pu?m;+O]E*Ƥ7<0o@{YI{ׯ_'{E;XnVi_کJQىW%LpmR#*[ov}:m/o-nk %${+FJ<w[_4߷ڳTʿ/5:>Y*<oz-5omr҄w_6KOY-4w/ w~V$}߼~Go=Ί{>v`e[rzBvP[2ֽ,EQrnvvˋrV P$i79ϻ^Ʋi{oו~}V=3.|7~múc)%멂ۯ_SܢfCwX|g97oRÒVO&bԑ9SJ0]bwo}4:֚I*{/^ "&Lo=T2?;/>Ӹ#0vйSoӻN/{iw:]8[uw 2H62xs=麏zsTMjW)}ܒ({_Pv{ aoN+EzW6P]u#8#үGgo*SpWEHrJ_M-_sTK;Y7 v唭RM==}z}˷ rFqUodT}9W<q<یg~?O4v eFo_zT*E/1S?1w.-J=GJi$Ғf9͟MFS)ۻ" *!>V6wFKc$bA$wʹXg7)4S޺ǯ_x;;OԦUz\δ9#u'WDx| ۟vlҲtJT翝ᲣUq<9u2+.qvr<)9=_'>e R?RB2]{II'L9nrf\IVN?#ů9R/dwrHvC׿.֊*:迯ꌩ_v ؒI_{n~?*յZ^MIn\8P!zm?z޹ܶjJr~LH X6gT~絼+=/krA+Q c5q}uO7MWK.8#;NqZ,/ޔ%nW{]{FPq[XR{ ~uhG ${ްqׯo_sݎu^j>Cr\'[J{+[t si%V@ n_o̿/gzI|>/_O/#?.$BIH1nϧ5_I=^TF$1-n)ty1Z`6󌑀 Ww %s ^0͹p@xp+E:`!z3v sny?^\\ -ssu.1Wpז_X).h]h^_[M땍.>PseE'{\[/S+ĺ ;Z3kkhr.ߛ4jq5^6EB\^Gzeagq[qw Vy3.REyVuji'o#>d=sEu427q8Ŗo1_.EwٳȘ'%6gJt9/wqVޝ\xbx"5oUV8w}d+iӿ_|ha_Nׯ|eƺ爼Eްb3"2io2I&)~4.hzuezpJJ̆Ϭxk[du{;tYMF\?h~ߑ7QIsߢeF"-.X[h{l [8_6tߕq6+qjT*>[6V7P;[v׮w Ku\[O x vIYVQi~}̤BUgȦr}Ls '`ݯKMu+lu>#xMҼ6XvZX]f܏w>SΩх5GV)ogo#BLLzX'%;nuxn5Kn?1f]_l#`ߴf2u „]jkK_-~]U0qkD'sZy#OW&*rv{?D+ 7߯]_304xV6w6,4&aVXnvodx{[NߝՏ+sI'_Ϯii,#yKo}p4$*ln^(jvOpRUfݷ^wU6_ŪEh@dM_7P-IҞ]|Sr7[S}xFqtS9Xn܌2]_xCxkn>No\I_ tA,dXffHyuY}s)IY$w寧붽.|w^92vW=R 6Kf&-wKp&1)QN*~^죢ͯ]=^q4]9*mݚ}]:CtIIWv㍓v}M:|PM$=׿(V#sȼWпꚬ:~QH&Kq"m߹sb';3],|TP~Wb1DU"+}^˿Wڭqx4!jFߘU:9]?w׽85%im}}[9 |.Ik=][8OQa'˛M6O{'-/JI+SkXh|U{gl|. .eg罼;<, [S˚iN.M鼓V|>%7ŬHSxe󙕟l{4W繛S;T^WV^.*O}Wfh5<2532ǿY7n3h?#*u Tz=_]r%ztp%N|^S}ricrl0){T3ʪ CoSf߷6Nz;Iju|ƙpGuF-o捳 Y8黚¤=mOסЫ*pi=76<?jz Gme;I-4!dp,~wӥ&wcҫ:j*﹏=[ f2hZ|-V=|lV 5W[{>L?ka%ӍoZ>z񇀼MQnRKȴy6܏?ğƕ O)徟-ϾɳyIFQKI5\[}{E/'6*,2:ni<}ι,ER8NQ|n6)W#8/o={*PӖ8'gWXdܾgȼwi_ITܽXϡcVuw~χ;{ۋQ=Ο K!iI!fUEis}ԿtK}3ʍZNvNaZKEVwh<nQXj{?to__W*)V媽mo"dԮⷲز^ $e_>T?5oy# MF|:=γ55ܱ WpM͵~h]߼{8Wyx-_hN;mߩj-,{XcGs4m'*̛[VcﹷuUMJw_/;~& BV4Fcn}3YF۱0S_9 ضhb3ZocfY?s/rlz,{zzU|k{u뢼9I6W&Բmfo.I>oڙK7f`S1 *8f%>\~U|}\5w.,p6)Ue3MZG/="N-w(c%oAYo+{UmKHU;haz,qJ1ԡ҂y0n//v0]ukϿ䎾Vu]xJޙsm)KhC{#nVIax;nvc,$ڋ.hWwidT:%lM1Udr+ɻz$I_]F/{<,2*Ҥ^tiu^ѼC]?OլHwdH|[rHvۿMlqy/'w<.#v=w68WSnmo/3i<[̱w^Ɩ?$iۑnۿsاN*J^ܺ_Rdž֗\jZO{<w._# dݷ{>}F*֥_N:2Ν:5ku,v:HQ]+Ede|b?ׂbtIǿ}FU0xo{N:[Kծ/766#7ͱw!tXiƓkSiy5,mjRP5m-'nh]|k/4g̾e15ofs~>{Z#N/U?ySIkNkON,6`ΣtUBº}v0֬FO۝R7YrzYkgegn39S?gQj鴚U7g Oyyoo=ȎM4kd%Kn;>M|Tg*|[5&[+ (mfm~zo+t KamY^jrnMg˜Z۶Tmϳh>eڻz_Oq~\TaJN4ԭjI٥x캭DҋUb+6H??Ϳwlzkѣ\ϵ}o_t(ԍX.I6i}?MNmgkiZi#'̳Gv709{tnLcg*t]+'-7l4#Gh#]Ϲv_ckO.lSM 1TN[jwLU6zV*Ro_$C,&\"3vԚ}EO2id\6Lmzغ"+''v/acon2ub7{mn_uxMh;GݝpT4Dtcy el7R*u,]6|8gȞK/;z?n|)cEԣʼo1kYs32$(&A|T/OG [H}U~srxSL/ّ߳e%۾GɶOf]xT7_xZϢ繚eiAy\]b{OĪjũՏ{wt6Xjq<;}1Ω;ċ'<K#3ym}C=6Taԯ^Jpŧ+Et_~݈N/~{6^|jQ6R+x M&vrZ' N&xjp)F+ZG2˨RjMQa7ݿqw<5 =&NҊė~z36y7W/oH[=,/Z1!}y|C<)<>9! cdZ \>e*N$<|j`#JVv5m'ෆ7SY්x)B.<|cYt1 z7m,xϱN3qڍuӼGs(].Hthz?1g]d{+OV ϗ֏}c%,g)]Ԕ{?7o^idSX5[^a$ܪ?|R}^mw<ԡi;um͟@Ρeiue %5qY?wͲ=d'dq]X|Jz*qգZ:i~#x3G/6y6Ji$| D=:~]Jw˹ WWj^O J5D, +|ۚDoe=QI&hVtw{v5Q|Oy}oju"D:U15##n=1#P/_*-MgR=oPBK$C%H1xcEċЩ/_oG.I?s/d+[y.-J JZdV"?>9ӤZSKu~}p9RN.6qs|F>--)4KNrt]|c~*_|3? SJhCcRP-dMy!X|eŔy{_ã5{8hZs/X/ZjjiG<;kX)ufn4/ Ce+Ĵ~Xϯͯ>>ԧR筼~?OmK5XzW_vJNNXBkk'cwX\: ㌓QLUV6o [ۤo^KLZm>*O-έqoK7RtZI.mǨ:\PK{~ܳ(NFoˮt m8g_@e8g?cwh}kGaek߲mCpC55 rWŵx.+eUx8r;r^羚\~>&x+~1|-:+ xR%WԼȬc s~^8~p:u5/I}O NJxi9BI4ۭr~+{k>1=.Ɛ5އ$ZɬyM4qȓ4Hf{o߻H-jTi[Y}_];&[,UuR87hWC =oZnk3i:L4ܰ_,k-s+3n~gqwq-*o/_S!jnT=) u;/R1FG,eM"{ _΅&H'5LJy]Z?'X,.wSN<~WԴxM#ԯִ4|;׵~{iq r}wEy լv c!sŏoր?mM6}K:C2]oЄ޽[ct*JkWec 7I=Fk]/QҴn|SE4hI5循~J_?fh֫۶zQļLlw~/'ȿ0|I|so_F52OIխ{IɸXY5gHmwG:|[M>i}w,a.g+ݫO؇m#oi|W.dt-uqgyI5ZcjWef濼[{yVIxRZIvԡBp՛OGn|ijk\>KየUtaVTh,oG+^i>˼w~;aar7?bN?[RWt+_'=r4toE c2Cn5*t/nt=ςo7僅)]{;>ϷNm'oױOQ;i!&ƛ",U\% E)_=-JyY'o]>*>$!~^??<7j:UCumsms\(Rm!yK$Ug}y[I]i~vV҇]~~|sN^Ig~͹v[Pw<{gmCM8|_Ky}->P?_>\k:u{CEhچ|+,o,c-n[Rk"Mk.ktRW>#sN))8ZlcfJmuMN|KkWGK66x|?ElQG:phJ2/Wr|l7c⏎t/<)|/{mxVjm,k\cxdt{O3˓CI5ӪgMtֺ>V yM/=ۿQ?x/gFhe!o2fM>K[M;4lΏ%Ȟm3lU8f_XGVz+m-K*RXGGŽ2ş<3X|A}quMg=,sXiNf rvRy>V^{iY}|S>:~t-í3Uly{y p:e3zMZƃ~|~:4jc)&3of^跇Eڇ:ï$|F[k_S9?fԤg_o,oK/̱8Gb5[뵟 z\F[T4E_?S?>VoɤM>b{[&W-$pM2)Bheٲ,Bi9+kKK5qo5j9ky[h>>sLu5.%zMt<ƥZS=o{k0x+ 'p kee^w ?{Nl zYr[8lCyҸ]H| t&wf .uOOػ|Mī/> ]?_XL֗{lc,afoBۤF}<'^]0ϫPNz6nZ'Ԟ?$ZϢ]E][-ƶZ _-4?O>\7xasFPoV^Ћh~m7 wgiFɾ?-.ȝ]!H~nUY>oG*St^ǡhQx]C.4zzx-㑕6i7mGy3J}kKó[\^1`gTqknζ?;[WJ޾K )F:߮6y+gwQC'ڐ40:2U8[̒T#x1#C}N N_DEQMSiMlV07wu^Ss/}~Nsz5b}A&*FF؟>zv˿Co;wvBE7-w8d[xuUQvtwczJJ[j/w~u|t.tkֆW <3Y!v?)zr^(s8O ~__Nϳ[_סqsëni ~_4!\: fΝݭ}jM_]9?$w_h}ZiOeh3S5u~ߍʌm}wQIOݸ_k"=մVIV8 t_~nyR_H bI&?zΨKY+-f)kycS_֑j7H;ԢpE:OZ,.|{P?Ok>? QMor͋W#ۗךOJvw3e]Ȥ=~辉v$VCgx@ XȄvi.w 9י|CPQ;޳ߩwᶒ"}?-۽3OY[~#|nZ=CV_P.ypXO]fk~0IQ #/˭lvm,AC>N1浿˚lIo,s޵i[<ܹ;}Y6?6eٙFÂ?e寫Tխo?ɊU\ meǣ}ߗՓq攴e;aBˀn%>l'pꝻYDSI_߀׈ωdCqjV7qi/UI)_m6z-\HU^+;~geH?vA'7?ޭ!$:q[#ADPϪ{t8]}{_v}#ztT]^~I7n=K+*pJ_nk+r̴׳: {_? H.S;H6}k"p];}y7.78{\-9J gr]ʦy?{ ˯b;t}썕|u~m)?zaYwҜ6nW+F1ջEiwnudwr{}Y,O˓<ՃWo[`s'Su_l1JϷ~kI:ߗq1}c9#|־> w#k~_ʒAą ;z-o{Z7*߻;|{Z}՞2$FI#;ݏ׾kRi駞U6_& gRwWiȓ5N# )3~525m?Șyb fo n4Z7OSqX0bb c#k[_K_4>Utk|9V 7#z?甡mSryToM;_Wu鄥G|{%We7?+T]Xݞ_[~9}9j+n}Hl\ww_uU^>=O6"K+2qoOt~8XM6ϧУYTJ2wQ󅝱 Ìa-ç?ORֽv!FOfP%GvN=kϒά ![8qo*~s/kmLˑJ>off$$g۾_]H8zv348K۰f-zIbm(?EG'tYܻ[kozp_S7-w*<"'Cavߛ۱4N]{Ja6M~fƚɣ,>9b˻s5Nu:Mkg7b6,r ;]U/}oN-Ǘt=|F({_^\v,޼r.d% +sK3I?/Nm5tuP^$4L*66~v6{c_Jxˀ>$]'wܿSR I_;9-V_~.#-gH\}7I=U=g|7eFtV4~ kZrOGfi~{_Mu0ԩKԧ9mt~z5[+;FoޔYù}M@a0F>—^3lnZO맙^*񍅵 $Amfc׭t>[z8CV{궳.xV@ڹzeDzVԣ-U뮦kD<֟r$ 37K{'>dwv#K<Q)mˏﺧozʚiR}7]KBwj3 ON.#[ȠfWf/k0uK߯cqsZP\Gӿ~_5o[F.'#Dcm|S4,S*T/u-{nzhܞg[Eew*[u^ߍfēêe|k$ʎwn&_+a1}:u/_N繕Uu{ϽZy_![i䞾k^{.j;f4-,6 u݌Ziw*}wr FFXϦkYdB}ރ)nXkWQGQps]*Իɦ! j: ?WgEXh( 1u۷;50Rz[VtrstwDjx/˴uRMc9r%er<5PyʹzuVK%ζ"Iq Ibnmk};]xy!EȻl3m?7ZJ7~zC,IRWj9Um{GNTns% 2B~~{fL_M]T HwfV4e̓Vi^k()7}w6?%hVvȰ5%_a,(~, G S J:IGN[%׿ 1|"]OFj_Gm",5YKߒ4t`v|Mle\oZqm$.@PĒs_(^^XiC.Gv߯kVZvO{C|섷 [${v8Y'oIe1vx^_OJO0&܊r1Em/'iA+_=: "yWL}+eTGw滀 .9޿5dM%_N?>H? F{3i}{0,H?0z{?/=nEWdNH$g}zGL]吝y NOz_qk~~Ov>.O-ղ \}e-eX1#IV_tqNȼI pgq~oL5}0򤌙\DZJ+=:uwݿ!P $Om)>\n>CHJƮNz{7kpPwޭoԡicZXBªh61vgeb]yMj=~orC?19/=Mn]&V!UUT`C?wf2QoE&*_38uyk̝`.<G}sZ Pzzo|fLǕ^ޝ7ʟ3nU njwm_wsDwڔ4-u-Ω~_i3l]F PV_Қ6wKYo̙7Mݶ?+'N^_wXʎBuv_ >)9k{ $  _y:ZPF?7]~g=dckHr[8/?6TN{~QovL @~>W~w(iC;,F;-ߚ;;L7{it !BҬU{ն:E&#Fw|~^+3ԧouY~t0]I8w}VZ㤗-G1%>cRvoΗ7y5u߫&ڊ w#;wmڈ??ïoBjSTkϯe@%F ǓϫcmLR*oN;[9V~Ef[3:5oW]_^=2rߞ=uu"\N;rnb#o=Im*Q5:KȩwlcsO5"\j.nFD_ %x<J2得b d'_֣U)޿{Hq+}7vH9;qqm9I+=$@:Wo)GƴW}/Ū%N9v7L~nNpWv~]c{s5~ov޽J#?v[[CZUdݯkkq{ l~cM)6kԸBOg_@ 7WmVסUӒ}qVgk\NkO=Hثw2/PkWk^9Z]o};)/N,Hbg{Vu8g7w{/_^n-o^/kٹNnr▖ouz!F=4)wnFӸ0OXsclsW'o9~_3vy|]B`,ecFw&}~o+oƛ+i r2-S̩F޿.y -#T~GBR{=ӡfKGʫ/αEoPP8mnZѰK!mη@g,sww:S~ܴ6]y~ߗ?\~Nfoo{*{C<*Wwοy%}wotzՎhBd qf׹XJ膘 ifRO5P/o}Kt^rԏ~6=+ur'h\󎅿V5U^+-lC(@l~c~=\ɭ~dRʥUߠ̭}kkZ}UY߮}}>{c,K %wٵݹ 7.z\說Do0l?A5}/۾H1|]+]=/ԪZy?"61hlr[]zIo,czr]I6<ȸ*s͟>vw:J.5&.Jۿ]iN|pOW}SM.c}dwUnFȒ71)ON>TջTڄnoP-rF܏u{8$fgJNS1ݦԭpz+?Ey6=Մh+$O3o÷ެ޾YbE+Wwͧ^~S~MuK_ÿ}WW{=Nqc4h6ɷeoh;Mn^=uZuUCז=6^]_nFtZJ/:ZOw<兹B<)۵~*_{Hת>4V[NwZ[Nߡ&wkcqo%{;iUo4{qy^=ܿV{glJQsK'а[xWOHcI1}(w(Ud297$*aPpu_=6\S+뷮]m{z_RŤ }COZy KG$3iB $;-[.7.h%v۪{:bӕk'_s%5nͣ4Kp_&O-RE]Ӿ3W8+OR2P\WK7Ѧ_KՖ=֚m1cSI|y?.\BWzﯧO3aVt9zJ=x]4:u&:H&1eo2UsT؈ch.Of՟kr4N]U/Yw~M-B;)>ɴ4J̻UUU\n;ד Ɯܬk;T=\=_.g6[{xV(|;dz}yxu%ҩ8}G-3x`EwEks{WlR=k Vzx.(a6[s|q~ʕG)SzF2WK[}vƆk̺խ~OfӴ5u?åk:XsoT0"kxh6CIG\`[FSvrz~f}OYڹF~{[G]M.nn5{eXZ&-$,~g|3=e'N<{w<4Rwn D1V%դi[|OUF &j<jxX.:.׶wI|OCyh̋yɰʹ̾C^2}WfWVmFs_m_}jsxRɪXOc-V)^P_oX<3fS1gBky_=][OJ}ڎ]WukۍF[X m:Cڊeo?M'-wzC-]5~W> QkCYgYFe3>ݫnvE6W[qS|ۿ}χ]?5{XOͼڴ$Q۬f&ɑWpXVEL|Wc8SRԗy-mvOѠ>EMsBRnhΒ:v71ϳ~y^\F5krnSi{*ԢGEuBp\P5+h9nm8\no'M#~wၴrhk6~L¤NPֽܼ|j{wa͗kdYI&fC|o".D_pJ$\t_oewGmiOeRrV_}|8monyb/c鷲ѳ~wCp՗ =kʪS\֩Mϳ+PM7 r_3O (YZjR[5Y!Yr˳9_eUhhmqѩVIo>|oƟ=oP6,|Hg/T{q4xw=K/?GeךUV|ڦ-$XMBNdEfoLʿUY%워ֽ{ctckܳJ}=4K-0bX}{nmw;-w~wZ%. ]w3*v]O(_~۵3סk}k6HdXm٣9!hʌ滣zتYFs|v~U_>} c(4?M;W.im[k_[@ʬHv>^ ReN\_~?^0s֭|W/LK%P5#ȷV34Sy,Yrh^Cޗ{:]ս =he񋄝[z_+'|e(Mcx.5i-.жv?Ɲk-"z:ۮlڦ%svnoaj-M{,6Yt~E=J[u..< ~oO:;j~磇Qr=~ Wz} аȜW@x|͕UrY~M3_3?j0XϦiZurmw7Tm־Ymڙ}|7P)PzE}OgJkjl|9MFX6[{"XPB̓rq#խNg{9WRv_~<= Va5k?%mw>O@rbXf[&Y=VWooG*ԚvnnkW>O1{yK#Ny_Z:Egݼ m-Ks~O,"oWӧM7RߩQĺ(jۼO\QNHDA4P3[[;'MI%{6'zQm={o}Saк^>7z̚._M簖l,-B[o6nh}':V[}=~{UuՏi8?ױ ]~ft\uMlWsf}CHӮ}*N, s4ŷ+~"?7G.oTueKnhߙ_՟GsoT?^H^@IqG24w3M#Wy(sF+(_V~(ӧFɥn./5궆-mdKuu$c"li>M,ku꺲յo}éT`W}׹AG] 5s}$7 |#;'ȐُYßE;T[<*t/Ir/WkYľVux_HngHhLGM;}gk^Jﶫo獗jƵFKNm_Op5е/ hU7U!vjn#yWxcpxOpQ\pZiogCJr˿U]SPִ֤M۬h Ue_nD;utaUr:}v]]z|0Zqs[t 6 {dxo\&#E]cNt~Z~g,=9ixlݗ|uw]֥^[IgF#'ԯSJ2Uv[o"rUB*iv+=gu6a +14[lobwaRw|jaVZlk6V6:Rdyf̬ʨɿ_R5iRO޽|>c,jb*+.o~޶5ׅtiKx|M;FIҫy'ck19gzoʹV&49V]J^ Njuӡ[yYgT;~1f_~̯ZᆧMKki/`6t~㉗d  ŊW38՝?7YJ[kw׽ |iḆ6Z9dhGmb#sJX|O=vm/x=MS<jIZk6M /*|IWՊ8(w˶h`*Z{{ナ}#O5fS_u[Zo6h٣~y;>`-G(b)QoVIW} 2be({oե5}kk^s0meq&rS3Y}vfzo?G%֧xd{?M [j|RꖟVx4K{i5X ]@24{o_Jx]'N:eKUͮUAJܯ{6kMN7ۮ`A=#[|sf?i]O);%yy+b3:rSPd-ٻ/\~]NF#KaݶGjΈOyow‡Ѽ}oo]5:M9OUI^.^[}ί.gLӯ/{[9,~dmM_c瑚ww̰4(q$5Q{_~GXFuO޴wvh84X۳bf_M߼7+W_[EP]lOs,jUӧIE-Z|@vyt^XUon[n9UFIvGG߿c~޳G%U0j5k=]/_uK2UfɶY|n6Y?x>wdb%Q5';.ݿVP>^ <4d~!:,:/q/Tc6oe6u~_պ^&e칤u~E1ZߊoJm6ku )'xo.?H(S}o]Uj(;O$ }5ZKٞfUi|ZBd?㯚̳%KT3z_j}(RœuKz={-:ORR4ل`v=7lMޭr%%'%6Klo1彛];ΞoxcWϢL @2ffU0̪Fb";[̓OSZQ벷g. 8xu%k[ߪSɓEy :];᎛|L;NݚEI{&;;ސdjslRRi(ۿݿ;՟٭ ^ O?ioRMj^c5Cqxmmg5KdįʱuWwӪo>>7tӜը/67w.bo.O"6C{}iI"Wwoɽq?d7sxCrŦַ{w^vTwrIm"5rR [[{{-^Њ֥H>)iM'J I/]2_~+hߊV⟌'a Ŗk}}A#٦լ>yG ? aLS+ER&$_2C>nrQ-d|so_jJgۚ^}5Thӓ~V&[eׯItKr,_u%`,iMJK2O'{B7;8gNE*j%$tMpOg]IwVۺO' [B<-ƣLaӵrëi\y=̎&X7Y+Ԯ燧̹vd?iNT?_ScºXXc^׵O kp +KK9]yXuyD/̒_.j2hgk/O1$$m{uKъkxH/iB="ج=4ڲk ${\p<%>Ҍ\K{tV/Oۥ8t|mj~}mu]2;xdܬc|rG_DNٮkQ+[Tݻeݔh߶%ໟϋt+FtM5rjkg2Gnk$is{ZIfw\߄8^ڥH4VG-JYAjі)s/#CZt=Ožjcj6-soo6y$7"ax;}A>p0VRNiկ/x8b+J#_뽗GKC㿆KSn}O ϥw +jC–o l&>#- PMg4J)7IٸVkzXc>a%1Ri[}_=jTau{Ho $[9$j2:$2B+jɨi Ὴt6sjMjmwX]o;-8).# MWvz0pf3 M:oݽݷ/;GOm$j~{.? ,k[]kXoMYM03Mܞ|r\^~'5SS]g9s|\Q_Js_K7 JY|)7 n.}6k}iRO2K8nj~<|<%/ k|y;OOռ??cE7ϲ&$g8&x{2INVwX= Tڧ%i?G1|Mܞ/s7]cIu]٤fD쑸#0xӛf}mv0*lPw_ϱz8iM#Pf6䙶̛Hd옯67R NmB1t)O{qQR׮jU(l[#^Y|R𷈥P/ZH|ìiMy7xtUnc'߯iN~8G|B_+?\ӵ]>O6ٓEC, i7spd)ׯUWg\䫍JҤv/?֖4in Fo.bִ(໼{[k]׷K^^HۦɮLh>}OQ[ޟ+f(AIݮkn޽|]q{ Z/.m??zlg άe~||NreVYPv;65m [UΫG0;ק\%58Z[w或:Vo?|q׼UKqjR 4[tt~ BNmw~XtgOK[^wN]$jKh]Mn'F>ѷ/g|B+pU~co}I=/Sg/b=ױ)ór3mUݹgo }^Zo}WM8-. ?Iu= K6ϙw-*Pj:nteF.丐gfw^]oLwϯ@s>ݟr n9,do߽8^W=QwK-_Aeg$]]Dl?}E$ryDMh!At^33MUz]M4wINfڦ62<{.S}o:z]9UcѴ6V5X4HeI>xV쪱u3y$~Ww3+vЭ){_^]X xIaY\-G|k$[}D~vլ';*>g{lxNj:" A4W8c\+yjdwooXJ:}3]cRMvVИ^8mQYVo,~x{Os*7Z4SBt5ᗪ~|Cejsyu=],, 򬛑Teبl{>GNIow9Qͫ{sW-WDMD .빝[߇F)>O~tF)ogH[.$?»W59d]e@RX"wr?bϔe…*?hQ_Cl X;]$Jd8?7s?Ih{v*M}oCon-bX|#<iVz;8s{m?4/~J?$ `y ..2!Vl͜zP g8Df )zӑ}?jr\^ T\Wov mcM7t[RpB*m1&-jAq\l9֜~=Um_>F{L͵"ky9JM*Rm-,g5nly_n8ר*n_',Sb%p/}f*\C,Az9巨K+Ĝ<տa֥Ayyn-7J%s?Ric(Ds2v)m'132?x<Ƿ߯K62s'Tީ~(I^x0C%*JL@,7{렷&~ "죯q5 "xy'$< 5.ypP2Ƀ}|r_￯ShWuI [;[^ysI$_Ĩ"K2T֎nw<.wIva9ReP>ϕ]?_HmsldԷmY$f07hmǟj^|]4+*lUmJaWHڄ0w7vҴvcvRN*{쿭J`j2iWNSI}Ӿy%Q[9;[!{ΦJˡ[y=;k/!ۄ@ʓO?Rdgk[ Cq?ߚM[Wϑ٤[fXAsQvڿ~h\oh{k-EH>VmsHyZzWxCH]]Yy#7=5du{ty{K|ǘ[Yn?JJNOoWr*SM/PIU{|[nNzCMhnlee$~Յ9w9;$ 9Y<s۟ӎ!I(߯P4 זz?nIoziyKi%wP 3=IWo\_{5ND܂ePШr|+;8y_?^:KNo;NP2Hܸ--$nu_ٕeY.`;q{54ۋ98LVVowi[c8M-qpfyI X|woYG_p7{xG>P ۾`/x?ΩY=̅.rض/TfѬ5o>{4m|JTd\𱬻>|F4[[ޞO-; 6{?͹~o+_pqMIݟ͝t>d뿖97C4tM.I *ƪ4(iwת`2jxEfm]wʳSo;+^ ڒRP!–UnoW!hv._3̝UM&72mm>G+9V+3;G&]^XcT>wڟs'͸~:SMB;}vW}ϱ%,h6IYjlZhgEji Ram">uc~6]^#9t"u9ebw:YL~խGOCIU4 ?eM4W2{?]s^>#ĜiN-Uupmk՝]/__|Vdۢ}(liv}ޜ;qlk9hS뻺Z-~穔p.psZrΆJ-rڻVg_xά9[{پ{Sz0usTT` ?ş^^WK}FZZ^Z-Zdm=6&?ܯWEק~8s &2]nʹ$PNkmVU'S V[ޛu9iЊZ}_+x[QIfG~c׽^1{rU51B>˰Esxsr]\H,X^v3[QT;|QN>=n~_cW7^ !4Ŏs'N2_ܟ̛3]+|8c)QfIrB7v23Ek}]sJH"[(X ުJi#F(;NUj9U\Ey2qo <޾ֱ:ԝ2Kcjffe]"Z;߮"ݧۦߙ0%/=}snRUwfו[d@ӁIBݟ]g%g?e-6 FUݶ9  `u:r7d2HK&m+~=kh-t~2^1|Og{VG}+ag۾?*Ǚ~oCJ>{^PBѲ .wNÛFw;a G:!ـ:?rcJֿ~+,i$N@he9] SvzuG+zϫ?f+YZn-4wTQ%k6dd'GOqaSm_]Zje;>_7b9P6y=i-/u%T^}|ЊY$Y[ @m-e=8gr"7ެ>pWkZr-GMI:Oas;r0=;T7-5gMIϭEui *ʱ\}wQI_ ӕ>w+x8;˴'YYwRN*_϶׸@E w)9S37tP7||6InMP9yI|MM[}agygcÁwuҲrjw..*v}}z`X#elu䶻&_ޟXxǣ~˯U[HvA碌|{;ʢ>69 *c R\^1(GpT.HnO_[]J{Vn.QGk{Q7pUrG8~I)J2"W`8*wvRo=3v Y4ދcVs(cWN-' ]K#68q30 }޿RVV!}߯ g~̉caS$_gmA];]8~F?6޻:t!ض3 x'<}i(wr cnr_oC I/z_OS>E&_hf1>w; prnN߿maA'==~M8}/o+<(A<įO]JW*)Uࡸ< 9mi8}qQz/Ga| 2˴:錛3n}wI7۸zNz*-I_/&mH廱w9SQz0|QB7qUYO!.In+^謸v㏺: 5)Z־N&:-VI$Un=F*KG޷9)i}>]Fnp>L|/Kmݮ]N)T^[rGʾojqԔn{̝9/gTM_6TTMw.p>5;~^E*DBw #nv%eb9~ZH_̸?T(KOvrF3wWsJ\6-;v32sY{W/us8Z]w;nTvz)ߛϪ8'(^O?ɀcgwnsQqvsR N*JϾ\sv r#'WlSste_5rQIQs+/jRoݚM_76"o6+ٮd,uB\kӯלԨܵ u{+ׯc)o~1!˴$6*g~緑n?#ff\O [~*ϩnoQgz_d s q5'}AN?,,tKt=jesR/>'O\~|/ongNo 1l㎿{ZZ%,;~ЕY|?|?Nm_ۨy[lpy$r Z{o̞4?0$ORZJ=lJb1e{n\|ƳK^03dgFo0[^_2RWIG{mtvw0:O}ds?O1-:d%a'|zֱ]3Tj*[&X9AS'yOΜ8nޟP%)o_ͻY);I/?{.µ7NZl,7|JaJIE 2ݿϯ8ܐPncO7֧]< {ӏsMT$m~$C1wc/q\ѩmzVdգ+ݫm1챲v ?{ӿ_j2m~{9[;~0Ri|p>r #Sk̥QKVwVdu*HߛSwuKuo}]) r~]m/,"+w#1* nڗ3Z_b)ӊ=v"ncѡnn|MM77Wo>CO>Տjbןnem3**G?"Jԥ~Wm_93\H<e˭ʒZ[,qƴG:~={ߙ fA u/ݒ??j&?-W=k32{zc GR}z$Q弨Ah ۟+O*J^[\19S݆?7~*$F8` c'eUںvf\_ĭ8#%M-sM~*OvFUxUڹSy[t$I$Ӏ=rvwڮN_v'pp]~F-E^6Aeseۿ[[9So5}I<9yT_çʭ&mԑb˸ `2S/ ̻o>w$tE1e;y#89*WuTN >~͝g *@Rsnp~^ɩpD]-nԮ6l>bMֈ7_m.du"eڊWo[֜g8I{TX.9}v{~W.5a-?d!Jֹȝ96_w9V#L"Xa"@O̪{f:t?=Nz>éER{';Y|Ujzi:Yv'MO(]Uٻ,F={ᆜPVU6uv룳{`+(ʽ9iٵ/kw:^-.my {UL 5{{o51 Uf6տӵKgLu^ HFkg~C 8&{(.a{UUi.# B+GݑXeGҳՔk*u{ӥɮ%z_7/ /l(|۫8Y&ZMѪ7~RaT3WZceJR2JS߿t]+O]A'_w1]cOXڻdMO>h788’|mkkm/.LެQ: -96wߖ6_ͬgJ丼Fmy$x ,vn\4URZ>ն УMJkt]\h~ugy6Ei74˺6OnE*SoeonZK^wGCufOq[KmՅcG.]M˯~3NqW甾o}/c̫,hs!5K \[_ FK}5-I!o>_w^:\!9)]v3Ɇp+ϳ8_7522ћi#[FY~diowO._ F#Z% UWGvySPF5/V֒kk{myq]oo%,4y+p)YҺzk~]ϝ&߶}n+W0~-m{K isctpV؛f}<`o4Mfϒׯ lswudv9*4y9/ק> Rp/Ky?.[\LJU`OG-4jVcG/n>,y;k r__.ÛsN1߼uz }]̦ `eX,cvmZMsOwaHZ?/g|ZTQM^׾y:lxGtWCȚ\7Q;o4~fY$V(?ο LnMO 'f~-+c02Ns?_۩Z[[mɌ6|g~ʪm_~gƹF-RZY}K،*;3k^>: 3+iVևrZM.VW1T&eK_~^.vuYiimմ.^l݆ 6e; ?(:+vnȎ2YkSޝ=-{KiǣMZhSﵣmo}opOfwN֚X)K׵:GEĆ5ZHXdkK.&.Ri99AnƵr:y#Ko#$cվOFqr"gYjPSqRm}[X 5QT{~%4[fTYXL۾X_*УSpt͢vۿ+OB {C5݊G-2'ܭpT]/w[߭?ؘwzH{%u9 %44:~٥ĩp#l$·o~~]q|> +j8Bs߫J{s7kkwٮHO٦PtӘzow=*EI-Cᳵ]ޞ}Lv*zSRyޯKJhBmWPH_$1/:sHo{=ߗ$brьdm}w<7ĖrOMF4VW)n|G#>e՛;ܭ Ye9VyZM~~, (Ú\WWINw!dZ#X.&Yg6ٳ~roidԽR~]UbSr'-tN[k.Cox~=mmmM12 ۼ#VQG~ǿ g<9iו+:ӕr뫷E-fCt+G[Ez7 n֭I4,}ϛ؛+ˡpQj2`ysc}%t0k:e;fu5=9o4ۉ,lsLMoe#Kkh_88-g-GɼjmE;=-/-YkOk:^]t&xqZΑt:M"$ ogo5ý|n0'9\&`StslowԿeQ?ȷ4E=Lfͤu*"?7θج4Szw_?PF*y_N{_msoG hW^h4g)y$lͶFڬ<͵#$5<6.xӴO>5ONuKv?b=/ .<%[Ҹ[}GTV$72$߾Dh~Ѳ@A 4k軫}G2udޖ^>ùc( k1C_yErӺZWzI]+;屃Kc.ہ5j<֍iJ ~gx)u}'ƾ43/'#-5'4ņǷtde1x4oi#էϧc8yΖc[֧#_>Ś/;]cDk{ZK}=ƭwoi0[ygX!ts ~gdENJxʷ#TjPOwy. ]FZ(5M_ܵ(~oso{b#nό'JxԮhM#k>Rl闗?̘nrOTo? %ܭ8k٧:gS|_cy㋏0_<)UN6)4co&c7+q;v#4tx߮kg K:ׯe]Śmι f@煼佻_-llFk3ɨIr\C~xW'+SkyͳXabӛN)wKORd5_5o Dվjs~ s}C2|?YԞ7Γ4z|%~^4aNV;:~7.ZsqrIIew?A@eoc65!XiL=ԋq"ڭI4id0*幆d3W,ˣJ$ugj&^zxCrj/_wG'Ot xozNNnWWD}BKV?ךoMCf^W RZ澪߭>(ʰ҃Vy[}7[߻= +X|;ÚtU=?Gh,tyzOiM5naw 5NUCzۗ+r}ZS*!?K]:wmIZ⦩x {>?W]Ocekg47ۦm YiME6ELWZ<>g }]f5٦Z[G.Z{z Y猼#R Z)͚R-&U$.-ma3V'IOԲ|d]N[c^.m>wom_K?J>TeIWQVߩ~$cpxv-GI^)7> yK?:5WVohDsG$ߊc^?:սnn_w}G渼T\7-[KSMwԵh--Y\V{]*`9yYw2?&O{n[VMw/;LX|U*n R]/>o5{\4=jwiuu2ұv4~\ZWlʮ[O-=( Q#g/f˶WlE\ZSQvO{koĞ* Y. 6Y`KKo4vp5+uoʹ3|]7(m?3p(b+7-zߧeE}i{vHّY#bdoWom>Yb k>nqgQՔmWs/?'kY(1m#4ƾ]坲}Mas=WWkwo!q B4Kz?)m Gã&[+H#~6)t}ɸOJsۿkZ_6޽(՞&{ ;LS6Zxt{VK{mf(~a|vG)r䃎]Z[(M)k->{y{wf#+ՒHw3*|yiems4]N[V۩ɇ͕ t_׽k^ZGR?u+kLFR|Vv21yI#w1.>-V6Yc0B\IG X?;?:֗[|zW<ŚNk9ټK^y흔vߗknݻV8zNgs ~ӧ~-{.4Bg?V-/KTUZM+syq;Wk/͵#y^J®-ϭ߭mo՜#sz3| |+.edΣ~ow~%t(Xequz_]w4,c3]+wn7R&Zk]kh_ds{~f=hRWMޛA7;vY[n^ :%{]M4Rwyq^_h]xjKO-wK>*-}Rs2y)j ,/M73Z]F}ǃ_,C~ߎt˽BFؖvOrDvWkledLGϝ,9KVzjfwz\,+;ϰnKa7<f*x/'֐R_I&@>>2l)->i߸^P m'8~\R =C,`+XAi57 ®]`%`2L1cg?颦]|TRn6'ҫ>o?9FHn>QiO=1r Ҏ-_1<~ϭ`26lUVb1Ϊ*˩2Y?g˔ʺ$NyEEW}⫻o˵Nf^Y}ܡwm`]ߙ9u|nT`wEg)̼gv!A?{rܻkFB.~fnP~Q+<]o 07If>JrM/S۾KJwnbrBGE'u kʭkX@;(cMj˧/Ⱥ،?`n"zR~[E7 }}ʀ-r#yHoo׌pY7;Ca?pM%!0݃7w m:~R][ůn}za҃뷙{ֱ2ɧܫd{{jaRV-ۿN/LyfdK7^9oqT)m|.k4e6F`I_5c({ZMF7Svw+[rGV no_^M+}s\} !4`3|õ~mWo:ӼwnD$Kc}Lkءlx,0}[h7I? I'q7־_m?J5(}uw?Rxx#'֬ME~2yl|Ř279WnlޯvorREg2' J͐ɕS<۸ַ2)m]c{{A:|ݿG1SFg#%WqV=}+h+)'d>>Ec9<}ݿ/·UEnFPd4浿Nܿ%߸䁅zӌWm W_]S6 m;JEn}Y?\V=wz=>>. iSYUr^|9;vQywvE;))V?7 |͊]_/RB?_ׯ_3}v0MZCH Gw(){#<Ҫ1~]{:^[Ȯg /Eo}tv'N4*mGjr+;h5;qD +ymNߛfݸ'E JOOO$6``p3|ۿ5i7{;rVO,;89"}ߗrjWwFҶ䐩Ğ3ނS_A,20wS.o["w#|+uhKH1uIO}S?ZƼz$Pm1\I}k _J%J޾}7tfHyRH\0۔?_z$g^ԝ^ǺYBu돛c{t֎O2!+ƒbH2vY/%n{H76/]+4ݻSS~ovw ܞܪ:3v~v089+{|Ĺc11fr %]O=bنiP p) p~kؙ6]3+RK)N7no})%eb`?׷̞Xr7yCw UJU?5kڏ[$'SvߧֺMF˾Cq Klesm _ĞF~Mj{M\2:dy3!৮zy*vk~m{r.{; ErI30\yw5L2\]u׺6NgmM =vۿ^UJU~[{9J*J {_c.UήW]zm\gN훝qʍ÷vw~UuYKcgz>kHY'Ȕ[z%o=V%lTrͷzJ6M߮ӿ+"ۇ'5RNM|65 s- *Tefooܜ{KWbm-x -m;Kv's]5]H$hLRQU[j5B!d4܌T1[uo4NHm$F{ %QRjM+Y­ь&Gnr_.nWԹqc?j 6_Z'>1崭B k09m_LjG%p(rԼz{PgyS;|Ůd_vo?4}D}0\ǧxWi϶5Ἰr# l5Ghի8ߙG~wYaѫoi+ .E䎼VQO:t߷9.O#d7U%'4 9WګϹ5!{/K_dl;q}^G,%>ʝ~_\{^)~RiV}6#V}x2A릪(;}_Ĥ Nw<9z^~h aԯ?ImT_wBE6ܜwY>oE Ccf^jc)AEICͿ?(EaHAJll1Bi;+|{~@ '#??ĵnJ8ikcKn[F}򨻷u:i3^Z>FU[$3a~c"Y6E厰uB *y67r~__D_9T_*`'lwzӔ_*kc'eo*)Fԥ&>b7 tM=:Ҍ}zy-G7$p?6_Z胲MyoAc{JQy_m꫆ ~^ޥ4ٯ*WɎUp d㝿Nي1k7b&bz=s)K|nEH]^ʧl6s7?j)5:[VIx~~R|_?M!ZŤ\Tֺ+b̧rۻ Ǐ^ =o<316pp>?1qwf's2M 2l\77n2}γ]c%y!^sdD7V 2fU&O(m~\{/WMGe \arC9?Vݟթ&ZJ3Rr' YY,XWڴ{_5I|$+kE ͿTc_25vw%A{ n~<֐ˮ{9*o WwCإRcɻKfQ;ewXv>oovmʟOn=}O5+]nH7ʬ'co woS{6.r‹U}ֿwk3qJ4ZOR׫zGGRO+|*st~^zc `?W5k:h[m/̉RΤ't{w[-t_LC ?7_y>cQ6+[V|'nZQ~~lpF]oܙxG pݿSSR7H7o^bUg6\?Ҵ V|z+2]Kv s=?ɩm_uʮQ~Ze=>'rϿYo3O=BSrV%_~oչ_+]7܄,Aqb[_5w3ښwGH\ 71~e?~$"tSJۿ}EUY72JU4^We@w ю=D֗ӊI[망ɘ*3d-5f*SV/(l7¶8//¶\=md y`8'8ݨ捛幗i~Ny `/#9{o'4dV^rSki7|X8wv^]>l8ݿ׺ 8Cj7vۻͻ? {ii|lK2p3ǿtJI3f4d]R;ɮK=5˦_83:䝠~?ӷ5*%MUWe(c.Tewiwxy} e+hL#2.t}/TmN"m{]Gyz!(FI6w|Z7ߋ*-/}4'!0B2]27^6ߢ"a*A-\ZWOgqT}4Nn[g~�41t^{( lMnM((;K߽gqn.XA!ry'w >o{!R=??UHyr6r~o~ooj 'N3 .ۓ 1M+Rۥ|I v9sy_-ۿ *$_Aw̿^hMz:~~"W,z}~)si2ocϗUSdݪvsR}WkO\8?y}8j;o(hԖ+h~}kh+' %%}wϯտ5E,=6GvZO[v*Ng}Kڝҵ]=n2 PMLaRj>ŎU$h$uwsU:6\Koo,BjR6 A<'nNYRM+_> 鵷VENꁷd~N}tnQ\gۿ2T,D6wQ&}"6 v8_v?)BrkԌ^߆v^YaySR>gZvߍn= $F0G?wU vM o$>qF A9?Cyy6U#7hՏbhRB}f4ן]BlvTz 15 ܕN.{1Pl U͟ToQmJ#ڨN_8cmTe{]=`뾿xA Tv}:ٟj6}_UvA?û;mw>Μvv$"Bx܄\\<42%P=̋%P)4r/ʹ˻UN߭ѕ:{MZ=ZJ-BO6{>b͹v]ٟjFO6]|[MR+B"`zs<JBKjԜ^_֋}XH+ S|5+yOo9ʼlqWkZ_ ;\$ ZY՚Z7.\{Z9w 4Nh)[W*֭rEF)ΫM-=u>(O뺽EĈH\.feB]v}tVZjեnOZUNY*1U^k}q?yXz,|; xC={>Q^w˱u5KzZcSeVRh˻wwI~_SRJ2Z}~AupwwM%v_fI n,}-eՄnbV9#hг̈ܮh§$r9;;-ZsխXJޭB[Y-jϋť*n>ʷhU$' y7T:fG ׫Nc'ˢQZ/NGRk,vTK ~\3³4m؏?zꭉ q:^2__Vy/_?!|Y 34g.Ù#V4hUEݻˡ@wp긚.$\^23a0xf+ԕu˿_S+kx푖'bc_WiғTU\5mY?lyϨ_jl#9y n9-!Df?W,:m}hNM({x^ڭ";UBr?׏~?g ThW澷V廎= Z_[z7K$3ө+,vj $2݇DEO~>Oݏv7Wô՛MɴMm?TĻҧmRעIm߳w\{wkt4 %Ao:MsHmZFXmqYj S[YafiڵMuVIluKll2nm6S]g+tqRN2eFӿ4m3_gKg&[gz)[meoxqUtp<kH$П`@.+C|/̼-ݡqNW jMJj_K׶o>*|ߺny__7 ^66W1]_2_2_1C2#FyCgJzkO;QqZkO=WC-ΐIe񪹍cn˲O^,M:і_ךXz֔]8kP>w#uws=崰K洰.w6q}~D.M]V p[O{I[Bvil)yzdk|s,kʌoC"r?1aa9ƜܕuC:SPToKL?o&ҭ-33Gr|߼F~JTjT)N^%ۻMڿ;}CZ0ګjV} h}fhZjY]Oo<k}G#7?cuyTjIFs?%Xr9WdՆ[iGy+[Z#io{u1Q ~GS*^W릺gc;IϚfV|@M2UdpqV_֍ߡ,*_~y>MdΊqj6cJi%m{t,|CxvH8=KnYdKŅr,oxtXimEem\j$e)ܯ<ڦ:\:ԩߒ6ޫϴ.4٭;v{> kk KE{,RIsy$U<ݼyJ&֥\/>yN\VwkΎÚf !.Y7tϻakR2ؕk} =jRN/jߥпm"i)F w,Oެz[u=} v[m׫_mvup$}>o6^VxǛ6ƙSzzծ]IaO]z8w*yϮXn$DYn`Ik3yyh?_+Y֛%NWpKUMiND= pqm.$~x6͕CUwymn>}mk008M# h޷_vǭ$: [Ldx2[i,wѬR,2o]ZGrz'_cRkY]8ݩjV][ziEj5 mY!hmݗFq\i=n/C sRU*ƝXrG]|k[io.fWŵ;ww' {~J*i;3ɫSIۛ>v׼h2G.j۰K) ߓ[yvЬe%}zhUYV|ݛ5~$X-OEfK,?mobʒM"*?F N/ [v?[-<>*oZ~+vy};sR&i=Ŀ;VC##cocV)9QK޾ͫuq FkO~O&v;ҼYv-'dTg*|7n_Ti9'n^pxnooMZn QӴWZg0"U:~ l Y[o6w/fKR۪vw,F;:4d9y_Ϯu=nc[[N+ m$qDe̎Dv˓qN87j^kgNZRvVuz__+Zw xn!b3:]>{~FI&T؈螱7:T[Y4V6cqq'RKow}]x o)qqʹف*cwwRZU'ToMY^mʰQXzM]^><9\ֻd*gXf_̓Iovr:w&^~}ob%%MKUսu>3n4-Rh6H,Hy0ʻs<2j|jwN",~QxxR-^ GCsiWRBJȋ#*עAt]||O%jտ'h~>+jw> |7iy&T3@$'.uO$O',\B-K|Z׿oCkTKڴo>[Wש/?|мc [<.tF><}Z}BP$6g}䴒[Ɵc%$*v{ҢZ%}wb+g+mk^hO PP5-Bq%k46Vv~#&c?^N.*Vo}U~]A֛k~kg|Avil7@ֲo-<6_q6{ONQUm-S{ڟG?m$6?هAu;MA]A_Lvou/-ڴ>]:JY'aD~'*kIͻ_ rJsF>{Gѿn.Iw^5%jVCoyoo}$dv\lt9U{y׆ Bգu_~mz~Ư{Q>:xƿ 2ݪrzo}gyjir̒f8KhU5pT[[u>XxiT8Iޝztv= M-Ǎ5hwxA4m|~uFMac;k o&H<Ȧ*Um7>+3ԿWzxKGCFf2~:ЭVoK)w+hST]?<_[_mZl9+>cai#l]iҨmmvs|E=bUeX|{k}Һa7ÛU>b4U(L(YiLgcOV"N=cUq\yz4O{[6_ͷO>\5[H/<]%ƹG;CoyyaGb<`Ͳ'J)k[G{aq19_6&SGFO[yEm3kwU/3pI{>E)G+|Km~Ŀ~/NhΥ%I Ihj?ɿsũUO1U*ck>yFROt_[Oߌt]*뤢ڥ܍vm|GW' ᄭMGZrk[;ebpui-kYr}t]V_~ޟ7 1_|:A/c[WM>n^.It?,[Z5I [̍o&G2}I敬弹=;;X~9OoSO]|i?|9{k!O}(Kw2^ZK.K],odyNWV'YWQ-e_ݒq4rcJr*ZR]7gŞ'xBӤ-s$m9Hn+*`^tudo7gG*r_?/?n4VS6Ֆ6H[ٽֳ.֛y/;JC:Q;K|6?ϸQO^ftq.^oq|_ibw /KC!ʮg1'ba_'}꾻.ߑJuȺbd0j3>ߙvmRkET_nuUB `s;meyt0t}}cfIcJ>m_n2[Sd"R$UDsi~”?(I&7 ȿxTo}E LRɃ.ҳX_w?VWrFcap6UߋG H+gm܍ ,{3|nh9c)ik׹8w8-ߐ¸GN[_ Ř\8u?}{VKJ_Tg9ەNnٗ}ݺÓ0;>PW#מ.uFqϫK.6 [k S5?waH;ܣWZ7UYE?^ FXg~{sirpJʒ^ר-Пcy;?usj7ZoTy*q9R=~g R Qm*ܝڗ&o _|2߄Gl!ۛKweks$mmn37y>Р nSܼ+&SYk:^%׷mƫqp۾Y&E:?,jJoٕLMux?,"ҴƷڷ-<$p?tɹmwz#<1?pdUI٫ucs9Bz+i_/^%/^K.5Gc$ljЧݯ`ya˲>ZQ_M3ߎޗwks$ U۶WtGFH}t^[ mU5{w|U.vHfy-&ֽhI[T}=/9<`Nz>]6KdDޖX?F^ի|[}_d̫#n<5>+ m>)XеK,}s;W.* ߚ|E8I_bKeB~V\}O̷! NAegg޲o~jf;Ov ɭs1oQ_> a3ĹE$ 9'4nCowgXV0i*u1eF(嫲V|G־#˩Y{k12*RT:~"&i:3ous`ub7է`˖tcZl'YZu+¿>$x[Fw$pCT7$uī}ϛ-T*tlvi}>?GB2Y=zl-{h/JE"C4aqּ8M??'Jj~[Fㄘ!cy^V{i \Fpc/~R[=gk4Xi/]<߶=O-䎲woҜe&3}=| d6[v2(ovod[*_HZٶ {5_]|~_$m׌g_OoZV?] ʬ\<{N8岒wCTc֚@2[mVo#By+Ʀ_wuvwOjJ8yIu__oS3PT#0JPxݻg>5Y8ߧG\:)OT5 0wl>oGmVy h2T3sv֫Կ%ʿ}{+2{;m:y^zHFa8z~[ߴ30'4 utn)4,NOUw&M]. ?iE$m :omm^U9v16OZZZM#pTڛR{og OsEoo.:_Z_t%ߖ:X>ܞA>7:~}~{$x\yM!ζ۷^?BWdUKci2ڬ~eo)w^vܹ'j ͆R眲~owj~l=󾿑JV3(Tn~hGmȣ? 1kw}lgm_RĎX7_M߯kI̒$;,@'8ͷkcsz5O0k)w.:Kw՛B oO9?XkFq{)4X hQ=>VDc¬?O3<}ƶJ}ol؂`GT^ ޚ.d.2?/S}|MR{~5oS[(?1Sƶ\[} soE6pnAm'pm=f,NHdC 77ו[z\\!q@?QiwdqcywA-~S7d2Sג+KnUٟ?S4*K[ii~ ~fJ?kouv:Kfأ>cZ)u;Ttmqj3!ì E;-^gM&⺳r9a3{{z-5+ޟ]R+aӧg>2ʕRASGRm;yR/Ͽs0.TPvo[OI+mm1|ѐJV~&vVO-uߦe # Bo*ۜIёp_?R}2 P!|ōWVOR\2 IP-F =~fMkȢ֫&~]$}n~oP孬NgJ҇2ߞf}̫11m.͟_Gh_sʸTyu?*Dpq۾ʝ^qJV]t<z{\N̨Jʬw#)QIݭjucLiRm=tnEf쏔OiKҧtk96+[uҼSn fYȓ~Gҫn ^޾gf]wVD\fcw]-k=o%t_f.V;'1G/$N,sM,qdKYyYIF+F*TI[Gʭ{tYu Q]>J#1$,𢬛mVfG}ml>;/)k{Tmv~ꞽwS=iJe 5I^}2<}?kUfh4$o!e]2MsWq aFudIwRZ6}|u<`14KwChXg3*I"Jy+2?rF4{6lןYΌ}ը[ݤޗ޿yOaH9r8?,~e3Gͅb1m}!7A)C$vPF9n53 XV(crJN~}޾g[6:vi^M8©U]ZW_k[io.KyQdLUWNNK$5mJ0ӑ7uY'wά Фؖ3`dYS~s6%@Ld%qd;Yt1~?@}+h<.]OͻWAϫv}ːmf,cW9do^ 먧sgi?']ʧ_zܷ֫D6w%+wޙi/+}qBb@7Imޓin/P?i@2LP-/-_+"j]6lbO ŵY 3 g~8犉O@*M"I#Oʾޠ H_!7m*d}[u4.Uo w#Z0p洢MjJ1SwZr˵}{Grj|:6{*KX*sHn5)y 4>Ul1x>Jsy%K_M~g^ )XX4ve6K_={}Tڵz6R6Ȯ5][}voA$wg^=7wFW1)_h o9S+CPok׿r7gc\Q$rkH^cępXwopOg4~5}?_ksy eִJ_OZwUݸn_ڵRVG<[)]Ð3n?7ZJ2}m2`{[T#o$ZA^5Xbr2ru_֜T~+4⩯yuV-3wvش߻O0 ptQ?ʜ5m]u^~6HClRm/Nl\ȉp!_n6N4FW9}{NQH8e@OZf%~Ȅ1@S7gq[(DԤջ7'tjml}}:}Pks_@b Nޞ=z˭maCtcOL囫ԚRj.ha?/C7_կƵ*?dUiz7~7k(G$'MM]<_Rvߚ~>lo~o޲{~tƹ0R |vslXq̃M+2wg?2ڼuuVMA_aPv@vKe͆nY/9Z׿N5RR_w^Uٶ>Xc#nߙ-:ⱌm;&m6t'~NrI2KߩVQ+.yw&^g-$$ ncY汩5ejuwwgqo-iA#2U[r[r{jhqzytltJ>@-В13ss]|m eې@<_o֫j8Oo}=;(px]~o¾"Y9Rx?*;A?ۻ|z;9M|i?i=gu|+> "`I'nߛM"ҽz_͖b`G Usp6j 8]׾I8$`cs 3w˹3,Jv~\gUFO{jerO^{UBk^-,a/s_W'EϾǙ0xv1D֎ߏ|ڥycQYUWN7c8QnnE}_vS)gs.xW/[Q_c_ߥ;IӻZ{*r=s?߭g)o}:QK&eY##S+μ+SF׿N=B[q>~gNx_wOB IRhAzKn!He2r鯗V# =Osket8IFj:߷[4*9o?ֹެS7]߯ P*DDTөh˺vAm2JE>>ΧQI;1QFA۸]SMzXP:e(=qm&JoKw4e);%H@6S 83+tI %X@d?D\7ߨҳ۵݀w݅{"F.'o0,I@NIRo dʀe],<~9gTdI-N~>ZS߯_*_2@/,go2^vӯDdRNO'g>Z2rLag`~`1 ڈ-~ʩݖoMmjX uO9I'P[]oD?"NV? o79B<׍ m$ݟsj}F0a/U[k֤3o[`ǧ~c2j^>[/ą.$#9!q鹿ֵS)I ܫ29?wmEH p:i\<U|܎gN~ 8;KWk?r\gЯY9N]L߷#Wr?N*H'$n e0_;kv19;~9>Ry=o槚=3hS.zO^o]Ig<3c:*st~υNwOBr1o9?)^~8YEjOKoשV2M.= `RWj?t?oֵJ{~d{}v,I\J4^gFOAJovQ['#q$Bm_Uhmd`)>R9=qӧY=>v!Wzt$?jgSNܗB)?rFU%0zO꫻wөhiq\*˅ ?ĭ}Eت^Km X+'ş5FԹZ\Ͽ͹G˒}^>^k+7`two$V_[5WV"rj}B[ z_`Di^~!C4RvvAi#(sp}Fmޛ]%2xc}=҇'0FIޟsDۥH#qVΒK^~d Rv(  XDiw2(QMTOyV{I/Kv],Ό*?|/2ȥ7t.5Y  R@rG޿5}66ޯBXH&<뭕Mlw3cJz+D^, }zuy5uۻ~}]>Cm_̧\YY&% @>`Wc゚_u'nW؆k+43]Np=zIY4Y["dhX(?+КRm}>ݩ޺kFJǑ6:Υ.ZNoԑaJ|bMSRw߽_ɃG5Ӳw&7kyhnJ~og'uKR}>i H<ݏǿMC?9cCnyj;RF-cwmJεG?C%׿ruyA܎r+kp}wb]\gI8nGߥtI-}J匒v^RVEowYqj6)6[~eik 6wPWʎ/1~Eo.6O7:W{bl9UdS+hZ6_~f׶v֭EOzNϔo-z;Z8:)%ܧ-- h 3*/O̽=JQrIu>~h`LJYn-/|eY՗|ӻw޹q5U9i>ivޗ[7Ͱдmj{85:+P(֪ʺ|d|"J\׾߃2Q:K}N%-YW6^O\E-imi~hYtߏ&S5֢<{ˢ4RG[i{%y};[y,n"Zʻv>ׯZcԊr%]>jj)$_Wsy$ZhPMNH&߲¬4!Y^]qu} oyɯshZm{i]=Az~6] =RArG<|M5مtOIwz/ȡFP{/>ݮGkgթUμw^K0UxU5?`e홑3I寘ę??װ.>M5zH K ̟#_>I4+_xaIB2av7emO?/DRҕ㬺=4[\~m{>jviOjtMGov~)|ʡG8o5ޮeZ#QO\=O}޻˧ip]],khټeo?M߻}]얞N9̕jۭ]C14{+x >Y ,ݧOޚ߿vxV|KWoy|ӆ$C$0+7&mbO_g̺컮t}cOioÃVt{n4qǻo|2΢ӓ{N> 4kϽ['./u{k]Me%?nn!3m۵ԯI7V*f׭\髙.K}R۟غk%Bh]v\rw.8 p傋Jݟ5V:{Gkw=Y^,^8l,v7oD/ZTխrGSI9j#R$/{t&b7oq?/gkƪO{'--}m=аM,2M[[(3再}b+Ԉ]hK4{ɖ餷iDz5Q Xtae5 ]暳ԫNE_~$%c/'.inT4,͝WU_3qv} eԅIM>mncեIWO].u~ki[[9mo~jTo=ޯ67w}zOt液[kq懑C|QUCnp2k3,LqZ£ӷnaysĥ|mePcb m_҅;Y%u}oIU$}:v}Ujx'V59/My=N #fw|~9ל.oEN8x)?5mz~֧з:Ս6w%96썶ɻofoy߯[G暾5'? 6gz;oq6͡16Rhpꛙeo>^?XO%=\$kΓZiͮO_M2kV!Fkhnv&C3FfWm)ij5GxaO{nZ xMG-Yhxxe~r#mZB'ɿz-yׅzN/.nmV5B߶No9qI=Q?YJԣeY#gvoM?VRU$Mo_fF!)M<1qgiPy-泑O;tdʉH(U81t[=R©JG󪜏ko뭵hh6^Eoa8/ʓrMˆgY.vcy~[09Nx垉'a6ӵ_|j+uZ^+8dv6?Ͽgw_@b1;{~-REN}sgmwM5 VӬ^74qͱٖ(w_'b$9鮮y~iGO+W>׷z+-wFXK+"H4t; swi<7^sNyKv;_ky3s7+^ki} Ŗ5޳40ŧgcm6m/6#+k#~ѵm#n..b)mm2<~rdO2DwWtqym>!h_G\򭊫Z\^z>tQT%TݷMr+/^_S{E8w~+/?Vj^K;z.|Q].㷾ԠY^<uɏl,<6|gx|l9ҷ.[p09|1x% &᝕cnd$c%>/~8:I{>ux'^)b*F\ml>ޮ붶v,0Ln[6ofE_~_pw5{mSg'R>Uf{3EH%pF0fDU[?{q]*U>;_]vP `|UEQGk.O]}:[U;!]X ?*"̾+*̟k׿}MEI4u4 6;AEnT,nmw$?ݯƿo:t_.NU޲xv֐FmrK"䪯#K.<&Ϧ]PR_N}\dJkc?[MYeu_Yk2O=R, 2÷$m&?|Z?i:~}Ա0'In箽5Ju{ٙ`t[keZ. y[k3rA'ɟ3׼W[w x u-vk7:"f4Hgᄲ÷c+?#ϱ67߭9U8/m{pQWMuף޻GkͦxunZIN~{ٝykೊN-rOt+޻/?iF4pU5g+_ME|&恧z[Mc~lh#FѴ7H[I{>7aa5Ujm '>&{jMMWϑofWh^"P<;~sbZArŷNwORIK4~ MYvҮ14e!F>\}ɛ7+kO:p8ҽާ'-[[z!6j6v+,vӂT *aN<{_m|JMάޝ4uX⸋LmwmkYUqQ;n]S FU~w]R?a<"BjI3smM11#4$Fw7b:ZPhJ1mnպys<ouJ(5/7^пr5;{Km7ʛȊEyٗ U_>сFjrHFޕz~b!Np)JNpw]{u`i΋j֒wjb[zlQɿ篮2y}?gJJ<| ~ OTV?7x }WMPfVo1v#oh,QO+НJms?}/5qP+El{2|o{kvKkawq[HUiitDCˍ7=tfFt(u5F_ /̶vѥ緣;YeK[;Y4uxa[ĊafHܪX!w*QB19;Z=gMuw}'Muߦt:|?bֱmN˺)(?rFY7LU['cBsSV[M{>yJk{o4οz=34Rʭa,fKV2,&齽kEIϧ?Ş^*95>X|ua6sup&:S@v갉݉M.aZ~J:x(Ev'պ>k4Cwmi}zƷd8)MkO(ʚyj_[Ҷ aVuѤiDžtmM跳3jZ+ksxhWl&_ir[jq8)T~K7|U7 {u;XcUUUUuڀO⯭`hQo{^enaӻ-k_>8ҟB&,U$lz>9Мr{^ki|e8b(N Z4K-KxƧ4$Y9@{k~|WzRmkuזzNVK~{g1f*\|ڿ69UZ]Rt\ܿM|3<yt˩.v?2/_?圞a_yb"+:ZT^v[0U}-[_3yxijhs[vHX،4wM˳sWe6xc^.TH;zi~N74IB3wGM^xomUc[+ yeA;)GMcݿ]+VIJ2i~[Vn- 9IT:?{n~]Z ER}_V9ϯGn?SOm$`ȊLm WKG[/=m{uYo*2p[ﭟ[~6>g/|K+^mUe|b el}fdџb0zH›j*ٷoXcX\h,+f4Ina/"?$gZWF]6Rou|+"{LxGltjɾ#]|o#?%7&^ ^]ZIROu N>"X鷶1jM^u3,G9 6tW4y'oet_硣5AJ_uKkfXm{E~-i7uKZO:X=B?^V"swzv_x(aR/ޯ.Hi:9֚x+IfOi 7^n6J_V>nhTy^juL{M🇢L <\XAE$U56\s_Ȭ3&wY0TpYՊM;ۿ=b/ޭlw[yGi֗vvm&v7bڲo]~^+Moy36/ѳQVmfԮe%U`2fzf⭿ 8To>C0^G]NMvnn[emWm, (^\}ˎ xxk{Ͽx*+֫vsľ״͆g~tV[8'h?s$i9? t=ql#M{?%C\(V^^Ak]4[o2;IMfk;=y0\<_Fe;iuoZS+<6i{Vv= /5Ҵ; tbG:Fťб; B7V99&~OZxwZk%?7Qa~&> ? Q:w 7MO|HEYm*ժr\ Wc}q&d_75}|\ީ[~s=YL4@!]zKH/3tmBZkVtv[1YAcď7G4_e7G^_cjϩ~ƞ:׵ >$-']C׎fڲC ζDy!Ioj6jҝ_5}usbRSޫs߂솕AuOs Vz/%Ih}{yrCl⒔e׋o_6<uO|U~ w؋*6n`5զAzZo~ &K3@sm&|d(k1ᨨZ瓺zi*tV=ov+?+\ }-m|/邏{,W&:=cӅ:pYBGޟ=ooM;RiA֯]Co߶rPĶIᦒH'|xoǻyG%Ңa4}-lSJMA-}:z7'_Vѧ3豘%4`I|?x8؇77v[9s+kw7}.qzuٍFLw>6Uio9V[wg-:+~^fZ\Wy  2m֩p+[E )rnno2yaVrݘbsn^J @|);I^{ӿ'-s xy5Za`ywjۛWnR#~eޠf_>=A鯧ަJik|՟},4RW pydfHdY>DG?Fm{vS  twf {^'W-lgo$c> IhmL˅M:$;&- }~g)Zni[.ͷ:𧄾.|dއh:UIk5-#_]I חˆ񻣬f0xov]%qno >zno,Yl.%o.c]7ܱo]2̗Uymi:צ:+_?/;/Jj2I3ʁVf9|lRKeyp;Z)El$S2X?/<)]l_MIȳUd5 l$ƒ{D#w}ˍ$0/Aַd+@U;(#' q=g-zK$pߗjwִroEK,bpĞ !ۻT $ ?M꼯]3D'?kshݺ?"k{bOl>zL~?̼r#8v?$2M)4FF˱V +Ei#\ &ӿ4vZrw0*`}V.M|3d$LWߌ2}n~|8or]Uv6^f@ <>[ަ%+z\S!YLen߽A$ֻ%h9 m ~o| )'w: A@u>⥪zy6\r?kTYVvhYN fwEU\9dy(rrVKשpKE8hzcj ]vuVR[z=)O_"X A}ܟւ\݉rK(lے;nhe}w0+xEǠ\tB2/׷ɲ\R5p~TVv ʫv7z鯘WiV}Tӻ ofe,*޼ջ#ˍF#)bSoNmm4O_wc˶KJ;?wIeLT O-i|6viAk+.Dg!~ v˿_#ydg 2 v:? l_+$`o)m*\h;Ci;czVi7j6 HXR_?keGy\ZQNfoRyZS~\{}N_gZD u{Ȃo*_?&X rN_Ϛz% }} [K; ϯŧџ}Rwl3f?P-OU%}]h>*XLe++|qʡ$[ON<ʹ1_+4؇mRD}q0*?7;m?}jov?g˯?̷G8+羐[4{#A~.s㿏52\YԨTA#1gg=+7~oUkK~̀|ϸp-򞕥ٱ7WQ` œ?5~ت={ ; @3y_שr\!{򼪖?SuBm;/w: BL.GQ[۵'Io:WI2 Vd9慾Q/۹ųFw}ߗszmg;rٿ"n2J<:Zimk w Oˆ wk|͝w\:bPI -noron}MYgmݥƮ]ـI5ХB2wmRD,H$uyovg:)4׻hl*D3}T{td֏~u(.N+|]<}~:%OTz[s0ȳ48fr ?ON{~I_pN ˥D]o;o-o߹,qpO}Tw8}Н|83cMV;eޛV=qt2}SX9ZIfW{;'R^k{%\zkNKz}_jqr-tWm&uWW+6H͵cEڿ7|Pի,6WO/ڵ9]vx՟e!Zj[=^|G}ksxPAf|YZeoa瞷x;7ۨ'9Ie텥,U%oxlC.N~xl*zp-+,N\ڧw>k-O(,dro.yU>Ue8X )Rڝ'e{;]xw+Exj鷯M]Oc^ovd*aoɻ͝R[[}?˹󚄹ai N{텮g>P]_n{~mMvN7Ey"2¥T6F\Go=0]JICPYגWDm623mׯY),Ӊd&P< bI<Ue;B?.xL0P4ݫz-Ӿ9.]8Ȯ 6$WG*4lw}JŮ'u0AS(d\u?Qirt,rnr\րoYU wl/yu:|BIRU ?lsp~70zyFC+J~4 p#~pvؼuKVwo͎iwV:’>V%pJ}N}hR] w^:5#8Hp^Ib5wvtk/"MjN+xdk{3[,ˆ~RO-tm)_ס+?1R)b HWk pkTe&ׯ0&8i]o˟Sm42ZrZIB \~Ԥ_O O8+&{nִ_A~?:'y"-VWG+NSIV֚WtmVOɧVn~boɻ+<.Y(:)({MڍY?8xR#bk^XC'"hUI ۛr/jE|I5tw_g R_>@UI;^Og8jJN\뵾y^~[z|Üw2.Q$Va/YsYk}Θ55$rƊ GoUnjM^*p{[Ԁ`r~>Ij՜jJS]zij;02 Ty{gDym~}H7ʩnϭTok{c-׿M/Qv 6F~bO-Y&ӺiWKs1M)'=з/['us.Irw.k)Ҍi;$T|?rɦT.JrOO}MKin6_[xmsϙvɂ9%:?p~Uo.FNn3}_=[k{۷/u0pFUcgw^v_o餶߷6G7$_ԓٜzkm!\7O{:#[, Kt'ik߽FiNc:5%/}o˿9$b‰+Wո^JS_񒽒d^k8ϯ?&~omI? TGog?Oy[sγv/RpC&@Q6zuuo:[.k_wGoٷ vTכ3~e6wתI8X9<(?FZ9fѢ{XҒd_:) |/Fi^y)jj~' f5*m!{2ߗC8T}g 9*qZAE/u?/-ٯӳvy#~oWNzץS)qȌ Es[iSWZt^~dʫ*wF`/ҹNRT{X9[~IwwtW~d_n3޽RUk3-Xwβ' Ǩǽ.um]?J?Ϩ0 ` rsU۶S_A=́ǯ^IwdvwɲS+7?/Uo;]fw~n 9[4oI6b2 O ,KF_[] ]GPKn#~wDcko!:mʞ?7i%9ꦝ޺z2`!99y?xB'\Oy$uQ :Y]rqvs;=̡Rt[u-]J͂ }?=R_>Z&d`ߗtڳ0jJIPJ!ѿשoGrR 8?7W Ӿ܉Roݿl@!eO86~"*4վz:(:m}?JG4_}ֿShf`rqJogmQkRӱ *ij12z?DJ_ҩ)n~l}eՒviSqoR+0NNONr7?߯Ry~GA8\/ Qۏ>ns>benVW]u6= UAVKdUF ]31b۷_Z>~o[gvBnJ  FέUԊvT2ῄgvSVjb*L`[:f14kM~3262r6~uޒImtԾ$'2;qaWs⦅.hɅ%ܾ~Ȼ6fSI- w۝.5{KFǟQ\__Lּ=-ȅ:=XEGM/+|~*_ߟ I?xG?(Khc9>?Do\?,/%[WM$JM_llc+u燐x9{+9~_qi_Asi/O>nHqG[JuՄ|c4tkZu9B0J}xCm6S rl~ NYQ 7`,|ʺ#]K%oP+% >_$?iiTex>dN`vǙq?oX7񬮻 Z4}|I;AMp[Ltw멟. +<"^WG9J+0IMfnVmeW'?u~{r|V1wpy+ #ݽ~n}SGzFq;ZReVVm]Z1#oNfM}w9U_SkjiJf,QNE=wn礍u)n_=_RቲzZ$A6xPc[juuMC޻H7]~^c͡,0n1h歭=熊j=8 @Ҭ-ᵋĴԮ?yc'd¿o8t+BQuW._6%T»ffkɜys>jE^m}Cԥk{k; K+!7)mHop]:~߿Kn#:gչ*=9.u[tiT4%K6+&o1|n{(˦T:d3^^j&NUoGs7YՕ||^3/OFiשOcMumjZnlB/my[&U]ᗉ h#|~[/e<\W}|dMmcF״kߧkMO O߱_X5szRK~x9UirF"Vޫ^M= xMBoYu;NҵIō;{kd=*Y$>~Oݦ/ˮ&; %ʥiy8Njo{/Axu5/6IbgUW98a67ܾ`WeLM9{շȇ:Ms~i~7=KzeLjh/umJٚq op/vDP'jqWT[󛯇tň[,v>Rmi,xlْzwr+m[,=*U}McSuDFL "mGߟuJYRv'KXXjѝVjީm[mmj ooݻ0Bw{~qfͳٯ[[VU|6+ExJmdlt{{סOSIVQӮ}u_N'i ߚjk<q:^"VOita8wn7g͓y*XYfc:wOk_?1cYe%OuwI}QúIڬnٮR̿4&dwyEwcêr*ԭZ׽^Ͻ.³ѵjz#V/mjJ 8[_نTrZ;^OCAǨzs@,?Bf;MJ;/._d+Ԅ۽J-o{MU,/6IJ5\A nx<\^sC Z7[]-}v6WRT9}޽TPz{xn._Z-"5ۓo/'į"yFRknӶ:t,2l5kzolT(<>Xj]DL,؟?ɺ=f\(|Y]>ko(ET;m~ m_P^$S M30;b3ubt%)n]ߧ:1i;j>^5}cxM9MN}~]>YҴl{A<f !dW_WbaEU5u=<߹0wiگI֬[ 馻oUTKjeC~O2|7 Z5>HWrm]}|5~z34^[[So^tW82,Ww!/%T#?+2T$[{}_-eFZ/k}Wkx>$m{W5 KUxmȘVlD8ѽ?/v}ͽMߺ޿}AA^"Du({ kN_ oټGw_+K0G9+[O;Oou^=WZ_vꚭ),UC˶ʒde.OO~=8֡ ʊR{_~:l{*koM5;mfm. Er"ʿfiuu'عS?vQxwUd׿mC:?:7鵒Uah:LJ9شxGy EJ6.흪6}Uˡ(M[n]o<\"9ʬע/t}[+fyg7ٕwCˀˡ%/?PM޼߃oW/xu[ciD$6spU|TƼ[rrY,;J||oi^i u +$'HlHȪ{`RSҴV>.kz5Gʟ/vdw! ,Ǝ8#>TFrOOJMv9#p`Z|ғvz߯_l7mTͶ*l-Wz&7׵tOk(ٸߝ>}{ovBm<42kZ.?"mv_1''QMM{n\|)$k}:_|i-SY%|XXqɷnL.+Ն0ϹÅIo}$Tfj|Zm&\Gq|Wɑ?\-U =[][~ϻlh>n'[-<2b?ݼ[SLS[7oOK^>0뚼"[]-;H#4j/oUQ?kJM/k+ ңB4$;sK+emY-PRVʩ=]8q;߯k lcY _޺k|Ҭ{j|q?JI*VN^򽵷ߵR0\L/eyf+~KUE.ワ?&_Vuy6#7ax{(Ɯ>G5<=9jkOy?:ƑkhZ1ml}|J{G7)uh,=?X8\k&嘪+Wk*Oӭ ql |Ogki}26^diy,Cyc]3g֡JߟoөEWQ̹ogznO! KC3G3FlY!t}(̕ PGIN8u_ }t~zO;4Jy]ෲ*ξfݯ}qӭ5ME'y󷧑J+Qѯ~#gu;5kU&ûk }]3|ݛz l4Jn<i{7T0nU}{moSɣZkQZMF9ƛoxWvFfEZw* ~v~lZ:mݥ蹷cAY^w6j|{s/v'`Pt \*~ކ t*RyZ[^oc<+/Ti_f`8ɣiV٤X/7-&wMV (ƽYGz3c:zpw-/.hz~Zi6VGqo[ Ω7)Ow+Pmf{>Ucg:%{wm:_ˎjk^~Us_EB*T۷-uo̰dN.__3tg"I5]~i/UC»\~Z|}|ڛҝ],d],,h[eK}{5K{8EMtHdlN?tRٿ~~/ϿϝK=>x^ҼC[5]_YUy4fo$c]ͶOz$;syio8γ/O>(Ɠ|^kA^isHee=ʪ26ܑTOg8=GkFӷ}R'RͿ_o=ΥsO }]xwHZ/؋!TER:7{5DΥw~ZuwS~#5 "DV͵x-,gU$fH|w|FOtn.t0ܲ}>hӗI`SQ Dx)&!JZ>xPӮﴛ&Q51#G b|3u(Sn6$zkԏ,vtpWƝ{ŚΡmڌ΋sspi$c+n+}j({*n^vў ǒ/oSKk}JCd('v^V*nTvymެc'&z?_%f5pIw¯:v㧊qPMm˥~G?e'~gyYZQiU帔U$ǜ}m\z9--Ϧ7bfU%N~z!DFvݸ.^2+gKݞ ׷f]6:ѥ qgJٝyޛՕrhY`#_}]NJ-ߣߵrxjRvm,Sv>!y:oyk׿O|>P1_÷ $Hk#=SX_~'EG)6пj[?bɔ[&@OSe{Ԫ}MLjSr%rӶɻ6NHZJ|~;ie^ņ5|n%(u['o-Z\z0(]N@{p8A^w+V$$_?Ӵ֫o?7>- md TdϨoVIJކI3k֐Rvߛ@ZmYzcZVs& 147k~N1#mn;$`7~4庹8}_ǹAg\1\|k}֦[|oo#a7w2 n'grMj$9qzk&0|W$ޏ3J8K.NAh6_#Om>l~?^(;9 wcUw?W}&p*sxx75$|wo2AI*ϘOf2qw_֢Wksv2BpSޛA-tstK|&Le`Xm{oh.}z~=}LgM0[[%l4ۅ3GZXQZIWɽs_ʸ\#\m}?nT|wڎVt q6.<)rֿ-z2XA8mPN_oeY D1P?=B%{ifiĪ]!Ko`gm.<uO`+]J[Љɥj ΙV؉diYXsYMo^iG<ߛg|z$,͌e_~s \ɄTb O= 1wտ1JV,ZDKLͷęx=HJq]-b_(q8ǃd>zGh^ҴdU(bVH"I~FE~vVgZnKUkv~309IڿŵVv=}rw_?e%t`NLkVs5=< M;]Eww$~EJ7wo_&Wro9zcն8˳#oi{rA*ÖT}Z9Y|-}/m߾k!RJ`_HjOS^c 2WDyVӷSǖ!꛰$7m_n '_R[Ao=M;tEPg%eN?ZN-nj29nHp'n B̡zЪ,;J *V{vԷK<I+4Sirim9xޭ^g4iI۾1d$[ݧ*?m E-׷*t965D7A6~\Vrv_gD!_?o^mA]/T݌QM7ߟy<$sZ8-UFp|!؛H oOڣ֡țOU˿^%pq||?%6};"3gv]?NȪv~wxXٳ{Di&߯P|?|)C20sZ߿9JIt2{С̽zZ'ur+Xݳ7[sw6h7^˺3E8 yWCwk)7o)20[]?f%+"TH,?mܷQ8neJJNrp+~֒ikj9IHNL͜ۋ7?M>2 }_ 5L!;w>P@}L=Qrz~ǝ&׹>=I)SJ7R)өy0涐nwq6XY4W{t"Խu[]ŏh _1Y&ԂT+ywM,\C n-wr}+i[o8)PrVx]VSX|v_Jލ9>}[MBq ׇ͙dP$bo[ϻ[N_(~_Ԇw!HDbw9~S{h6ߢnDu=eum)4ŷ-p۽?q9q=/ڮ_5QM]tϺ~{]Xǟ#ֵGY JT/-'ʨyw4ɪUBs;ߙ|M=n755BPZ/ o.}oZO.mAgG7Vm#ީ㝕T+*U)(OPcWJh8뮞/,]"+i-w w' sJ'/v^_џQ9(ֺN_v{h_Nln'y\!V' ɳn̪o߳b3T2䛲s< )g=vZ= o~4Fĺ챏 ?/ކ)(˥<=~gZ/KOMm~9n4zIM4(̐Zyq#WZ._So߿^.KT&z5k8Xbc8}޼k^GNzt4+8ʤ ͅSL/۩7lNjMpOic6I&OY;cbxTC* ;ܳ*;dnO#֭ #Nw:>$޳%YXȞ;ᕕ|LEՏz~W8Ы8ڍwoyrj7UaMnܩ,>6U) hUd{ü4#]N7u{}eC E%)'#?$'sF$*@ ~y犷6վRwKfTB9YJ\JKl%۹2K/Jw=i^WV%"TRq{#WozlYI!SK*{(۷YдYPoܧ_J? lnW/&.w|z(R濐vvnU#aWv?ӓi>fu:|BF6Ôl?9_Zwner$__VAyr3*:❗m??z/o=ݏ,w ;̺1۾VV]¸vyNy$[~=yCJmQK2)؝bIo/K~rL,G, +Q(mz/=i+IY;w_{=K/<{^B_E̷lk|" 'j;ܟjkkl.( y>Rj&=~̛آAEhTUګW[]i{1cns}룕't~G$*$=Uu"eID'%@g~eBZ5 ?/{.R) Ω5+?TUr''w ϯ7~5e嬾*J|GQIozœ}ϰ =s^LM>Zѿ?1E#wg-kۜμd}Wo=uܔ6a-xg8y?^wr rG?I++VJ/wU*w9i.t'p)?B'Xa'_j~E%/?5J6 uGw۽?3cNwsK=޿#VK}t9v˳w*MNK_T֙^Fv#/I ܿ+/_O=FlIa_Γ{'VW7տJ'?[%m{O]Nʁms޳+tz"@z#~FM?ߩPKHal3?犉][j*_p;!GO1YY.H`?%wm=j׺dF>wXHӁ8Rty^ڵږ^SG^wO\c{K]~Z iZM~mtlw+0 _zqjWIKiNhD1@CL峏#50%^*99-Z{O/xVOF  Dwv5=}n3VOH~P71 I %$ݵ ~V[|KAIqn32/|ʼn+0 B(X{MKpw;;_r*S~^oHoz[{s ~ W͝4ɶ߽#Ocw#;Ghbܟy%0Q%eo/á(Ďș ?7֓ok.+ܽ]Harp0 g,w~ӽo|LTpOTIsl֟ͻrhIg =T|uP%em=zDoyO&m׾RSy+\yhvgVk:1׻O".o+c/?Z Q]1؍ ;yy.Z *Ԍ]᥽WݒFe;A>?ڥ [[B6ZN#˖'?:ԝI^-}O5I4mzsvw~z>6mftWO穝%cJK¼߇Zg#Rzo̷*ZGwn$6_ՔwN֖/E-0Bw"h6Yћuf\fMcRn+OUgD=M.ھOlgc} If+&7̻߻2yȫJK]߁cNW۫Zo\sh0Cj/!h 89Oߓ<+jUz^?ΛS=/柇k Ŷp.%V=>jڹNܮϭB Sۯ:?$A89 qi JSZ3eM_k+ۃ~f>֓^ztZiqUK[w]klb kZ]}t;)F4|ZjHԀQUJ7o6..wqJwRq;_Neg/[k} PI g;[sw'5J:=C&F~L{|7׾}s'E9rm߯f8K$:&/^>;w,|F8Gpxk?שqO)[_Q` Th\_NW޾}tTq]|мMg\v;o?wMt&[`T+g dI6;jrJ<܏ܽ>U͜9_R)f+zׯ^3rwwV`#,JNxs&zNE891R|Y=rw5<^: ?kh 7N[\u%&cȵK̝SQdK$eEq2՗sVx}y3SγՖWF!U1_CI4ѬY[):$nyƭkrJy%zzMe^[hHGuccq;V<}bl2~N_(to 7--:[H?R\2O4±\F}sХ7Q˚ݾIyIro^/suidM}+;}OȐFnП3b/}~7 R-W[_ t5|M[|Wiq=ͩ^0Y<4M6ҭ&ݯd\AETnP9:NOYˮKP_HmcD7Q(Y$O7LyoUZU c{Z{&QQs5M>YVy[? Q&AInM%gg~UFV!4{ %HfLʿ7ěoew ]'}?"{hhA}}6d{[W7i$Y<ƏMDkCеlc7I.fmus5e_k^UD3_G+ ._.6xddoY̪UVmKU:5{[zko>UGw5xKk5}וߒGJG}owiiɮe2,m W{K|1$(gvh`j0$%[wt_R΅=zDWk}0jQȞLGTy=zX.]BWoI_}Nj!cMjEmocs$,w!G||*ʕIRݷRxpIrzM3KխNKy4?=ںKun̒'؟BRM2')=4;o:`JJ裲۷ϯ~ j>}W@KIoU_g&&3R-ż6"T v/uF=7pPWNxGw򿧩]^z7ŕ~VvZ1UK݇{?ỵ K>ϲOso"I$c*{o/񯥢8q֖>'JO@tl_7]4g~s*o_o_0䑔M;8n$^ދmug|Nֵ D c7Y`ɴ ܪ6<}>fg<.RVNu|;RiUi4Ӫ-O2uin1VỶ-?EVPjTRi&m{_[W*҂:WfVӮaԁ&9|ZO-k,roˆ"U!VKWBoyu1YQwwge'4'HJ }B%mlVە$+? wv\iiG!+BpZ>]v}/40x o5{Z[wڤ?U>Xik }f<>շ%9몞;+k_z[oŽ/㹹BvY<]ʭrVi]M4F)Y%+Movv7]VE{H5 5E)ɐ.t2H>rm̟^yrI+Zֳ7|yV1hK[n;ex#Ӌ="K4d7+xe,{?qWn:wk[Es9.XZ/]VLu6:߅.I :L!4e؉UFWv?̐5T-/׿ױ Z2Rro~ߥTB[LB}.Vm|ϴ1c{ʄҋNu_ѳ5~v? ΡnФ:cg+ioܴ{W?Oia]Ww._;ik~WȲ*Nh揖_S#xrOOkv?<_~4iW]t9~ylh.W;7l߾n+ע] _ik6xenݻpQc55iPrWd5kF_m7>nеwH1ݿ;$VUj}Ms)N}7#^o]wzOF-Դf蚵v]﹨~^>Nv抝_ݵN-cgj Wce(ʺG¿'3_<ծU)lԧ-R]VoqM<+1*<*ȠbzWkF)73KT\7 U}=]{e'4+ syci %A2FW_^5`fq2PU*Fo_{/c­K,*$O%s^֧-ĐYi|.r|~IGXaS䦒|{nmzs ԟ4jwYV $iM߯8lf)JSyI~nmS5MT朴z~} 5VڶdV"R {6~k_/8*Te7λ|7/[];Q[MUno޿a`!FZ7T|vo._Z7sqvnʮk>%̥kx:v{~k|juBֿ7IBmRV7Q\cX7.amdS?vky(պixݻ^ p4im߻_y.-oIՕйY%UXUn?:N,ȿN3<5ZM|vzGiR F?C*E,7 Goo'o0R־wK.5WZyv|,QwomorU++s:vwI4vbs:^ͨ۲,:.n3Y5.g8H*8pv3zz_U|T֩Z->}ʞ5SYM64Ƴ<I"w+mWMS_|=R?:kz̢*˖hѥ+FynaP Kʷ $۷4*ߺM?w$uasʼUi-9myrx|-I9ٮG~tˍT҄mjDQkowq+UΥm֯ǵzRrR6w:y< l-6$7o' 5W_969+ 5)RmrE[1ӵu~IR^{NH> Yj/k-.;K4[h?3߼JW|ܾt;x_*~ӧ+?p[}-x |ۼԧjb*PV_OuNNi]w~gCqy"HXry_n] <w3.r_k`V<B xYv[V;~b!K?i#Y@ 6""/uxN5;Z[ wNjn"%]/0֧q^o/+[óiW'4IO׹mij,Z,.s+H2۷/|λk8XnS}T}5Ko2ZZ cn WOڴTD4Eg`;v;VXjWZz~;>fϯk[w LƧb~_v^PQ3H7]I5gS^Ljﻝݸ,Lm$ӷmjtoO^~%K"#&IRGi{/$oHEKb~sr]/֐$WւPQhUy<>m? 1eQ? y[^~Um>~etܠnTOm}}JM5R~ҋJ*`xVlpG[~mS9;[wӱ*wzu&mpM|w __ֳ[_߉LF!ɐw {,oFo1t}*]n}?]w(=Ռs,DWNSZz"[S$vk~<ӄQI 8V=2{{5,'ȃs/}~=yngJZ:K#[lw9׽Kߧv{e/~} !{{2RM*3/{ZhT(NOnbTUUܧfu~^r/OdWejqK(#e>Ue :^1Hؙ _ѭMO]|6kLOdj]TioeߧN׹ygA|ky4^Swz,Yw~_s_?'; _0+_M~oKY qn]ojw'_G sL0 ||wԔcoqN\oߧa..[n34U'3^ﭿS"`&<k?ήSVw_jK8 \gqa\Nnקt2.PL}0ӷ}} 9ÒF1_ӭlLD0˜6@uϯZ&$ݱ% ʟV鷑e"DF.꫽\9k}Ec 0T61|~_ʮU"1N.z6EyVl`0FU|zeS][|ʕ-/{RRNK x?yw}nyynݚ hvw͑@4BM˯]n+noJX̌mד?zӳ%gIbΤS8?wvR/z/lc bY2/om-_|V?IC7{̏X晤{ab\#1j*Qp_wßt_XzsӾk gi?+VoSЕwwN̸og;֎z-|Gֽo[ۀ#$w?37yxT[tSo'\lv |~uw5~y ]pwern֕~3@1$zjv)R79G*X .e?OzWD^wAn1ZetR8/oe_zb8*4qsJOn޽*{fݙr]V3˨տ_=`,209{cG\4Zkhef ?z~֋߽ӯͦi؍9_ǥ Jmt Da.T_Z )7e"))Wme[Hп>()S87nn<Ңm{^_&t*o?\VvP[ڬaen| ?lB'WteXPF0v~c?&2wo]:+3m*Q~o{Rnъ[yٻ>U onڷg;k屺4qOD'zZR֯CG| 9?͗ϥO REfp3n^~O읤-3o>PnoKwIyvBf1sGʥɲ#;oƆgid$)jMƙ`lyQ(o\x(ֶ9^߽S7=t͆n%FhmPTz|qQt. uަoKw,gMYUqm>oNsMm%tNU{븖|yQmP Ï箍'=}YNϥg{YnbCH /SnM%]g{Y#UUx<?vLIɧQ_M cilI ;O ]ի>yjo+%+12 T?w{u=7;imb'?b^RwI=zƭ7}s{q:̹VpN+׭/fXѭw36af8Qr=/z(Fiy23b[iuzKUBc|7ShI-}dT\nwS9m;od9.i ͷ_QPX9$~Mu]ZӹʔӴGo-_߽-"킼V^UTł`mE(5#{z|;F9rdO5y}wfNOen+ݻ5]6kcOvB;+dV /sjw1nS[w1bo5-1sof̪4o_M^oȕ"EpnO3+dF-r~oj˲mK2=]e;MX > GfWor汒i'b5|Hr ~]׭]:\~Jߪ}ny,ӼD'hYo-J餜ߏsѥ5({]/mVzx(m2㔼񆈯'vソe1oO-v6qPV7>~XD`1~ב*m;-ݭyfixH֯3(yXTo~=]tem߉O_z~z^]#}?j?cnos|31hAe\06SԟYN;Ҍkxrբ 9Y?o^~#K~ U =Z;oml_^Q]?g'}/0\gvʑyl+nݹF糚FJϖ;pF=y}Wg},v7\s-I34J2̡~.k\7̱F۴;&Ϲ_<:e7zwzpiwwdܿ7/!6^." ˒-vgz4bo hӿuėXv6M93#|.Ϳ1V8өek^וCœ,mm׿7[k˻y5Yeryo2;}v[o?N*JRi;:]u'Mʚ;WI7~Dm4!m3&I7 [;w3|&,SU/zV_Lf+1srSn;=zg$7 OFK;($>F=ϰ˸qH@2[ !'pŊ(X-߶שVVy$w=J;e_p , Tt^"uz& ?x=y`n8z2zcϡ+w#形Z[EpᲜ4˧%&}I*r>>cښtӗ%1ʀIC{֒N#*ZOmu_'(,w`o?TZ7ۯ§:W魆yLAR?6}҅4M+Bw>c;Ȣ2澛8&[,])M-8|ߖݟJx$$!}v瞵ҽ;T^߭qA޹ۂpejͽ{wb*Ss_.>2 s m/.ۻhoR>W7-Ѹ|7|ަzm^ T (5]|?ePy@\(w' \__èIMI^ZS'=?.;~՝O例i??"mW]략e/2q^zЁ7*d|5:|AZ1;9퓟{z=j.o^񛽟߰2NcwP5mv+&sX ˚p?;ov̤s~h"}/$>q?Xs\w:N|Rd_/9>󿮾$l;sA9[uԱ+h~zʵ O~?"E۝Uv2Lp}a#!3F?#+onqJJ>mI: @R:˿U(Y{\=tQ1g?3*sv~{\t_s*a8vW er-(++;<U~cm/~rJnk/Qcb[{3u}g>]}~F] XOF!uNZ~_qq*Rv?+e_w~rOGtRӵ{ G͕ |/9Ԝ>MQa[91^kDľ,$xrdoO_S0R/墿})l_~bMnvW֣v7dS>VN䦞4#g*#ocpv'طĔBFNy,0wwӟ%e^4޲w_8 =+;fnٴ"\~pΟdEAo.&,X n?IT(>T._r"*ᙲFO.zR+JK~ײ׮ud쓏ڃlEMKy 21=8?Ʀq0쟨ʑ1U*Z [EvD,[1i_J1>=^u{cwn_ZA&1֟PPd#'o㎵|8hbGL?k9$ck+y_ȝUQ۞7v˻ޔ _dw{;Wb r8O msG}(-`2rNA?U!+~w5\1#ӟh^՜r2TPv7X 60wЬ7κps;BNG͓ߙ~_֧]OG,ԤKPq`zm }}(ruAz_~N×7BnܝϞ7e.rGwմgTiɮim7ɤs"RASIG9'OMWRbOC8\kNnmoC)MCܓK WE9;۾>΃k|;߰;W伟÷Jy~&e_zM9cTڿ_<֖&PV{w߿@h y #33?ާUtzBl o<2innBcɈW'*7M4_vیUa v~-r߉"A>˟o?K[I??!0>빒Q^wHerJ#O]#Zt@'ʣ#k`d`iF0 =oLlwr܎:cR*wَT7esn;G"ȍoX'E▪ﮭu*%$NGx铻_ ۯ9*~cV ' 6U:{j]}p $'wq2r52yۂW?N>w}vC1~z“1A9~_o[FWlDE _b)3OO{N}"1~L9h/' co?uen}"y~m:RM[dr ˂s;oМގFoԙbBW r!omޟ"9ӪGag-׮ߗޣ?hmv4j*I_ E'za1ywu96k06+wv!R UX{~Z϶ldIɾWa$`6z;?IIs[Wu¤bF>֤p 1ч\O/~{n>5YvF'kew{>S]}u"J_K 6ps W6V_טуÒ˸~?ӖQw~"ьy;b".Hѷh+KO=M6빕Zir߲~<n?w*<Ϳ\ksFׯM8,?n?VmwRv{[̉r1ʝwb̸ݯy}}H'g=m_S-{}cI-WrPKC9mrxmݿbq_*Ԩ⢞A4۝2n4SIm;q [˵v[Dz+JҋsJq)z~>dʮYeܨX(R{wζI-hW˧h[$T9O}h?/[o3ц>lۻ'gANJI[_.y:<.͡ $wָjBW~/Sʝ+K1 s>y0'7ߓs*|n~V}oo-%GKܯ'{m9鎭*4==ddYp|ow랕q_sJ=нa#|k$v%Cٵ =眳rۉ?uRocn]5w_D׹f/OjߟorΒ_*$Wcq"w9e_p}lAQ߭9?)m7YZ/ZN? ?[u#L)Q-;ey;zmJ&d^L19:ڷ QKwkp0-b@?_b++"jێ͵VRwmҥlNA#H?El\__^sybJ;P}J1_߫:#$k|34{%{eu湷?C/cF\9{7>W\>_ioCkZ+ݝAv*#m_7TRqn?~wul05% 8%{/t[sGmi+ȾXm%yU䚿6?zZQ9iSw]wPuRc#C)3%Y;HUwSw5R9JS+wYuh3pU eۿZ5E Ck%W|"}ϟł)Wem굷VeE.~xFoxIm&#(դ;lo" Ӕg(W颷߾~e8}f}yfShӭͦڨ`x̻?W0/e'IZ_j/|L-4&gw%Η4b72|̻3"tX!OɫP䔮~W[ZǭIpYl;_jpIJcvﹾ^j^muˮBES/&ɳׯcžux!ә?}3I[r7(~_殺.4(J%{;WZ0bU﫵nӵCjsimsWIk4$c'q^e|\m 5M:4k[~_eT(+Cd~=B> gIuş&9.-drpƔDo؉̍?ۡ,%h%NWv7<z%$RWsXcmR1ɦ mZ8}Ao/w=S䕚&l+*v?^Zm۶[ߧ}-u g~-ԭ`ף<}['uWVWi_fϿm+«-~'}^w*u{%ۭzΥ[cp.QQ1l7O׏x;Y~h/z1J^~{^γ,ziLak"Fev6>H0xxrJI7O*{=hr]]꺭5%Hc̓snm͹q#g4̥w_7*tKv=O6[@mq<׻BQKk>&OԸ97s^a*ʨTWl)D9a?2w_ݵfԠS];[VIo]%@?+I2izkqZo-WiN[z6Kv~gVϓe ;_c!:u{Iֳ7}QnW.]FH𥇇V ga UfԋOGw }Vxa_<*8nRYז'ޟmc/Xix0x_Fzuʰ7#9s-|SUW4ms4N vru\׿ϠOoz_ j{g#eyr"ٳXã+'Rыni WM׮R]bIXNe}?Um.|f6*W $NyhʊNx=@v ,Ѧo-ʱ͟%t`3Le9F8&N+mJޫSzVuMz\Co.o X`.H{ibZt.h-ytz8L |~F?-%[VvEYcJ; yJj4)-mR7V]%mCs&Ey bն_/eE.|JnY]hῩڔׄy(ӗ-wOᮉkkXŮkKmğg[bѶM7|*ui380'{k腉 c%XU~nJ|[E'5%yh~˱+e;'pB5svmӶNh<ۧkM+OluK wB..]qylѪdzOھ'bu *m.ߺ߽2mJwn]˳[?5\yO9:ok<0o -³o>oʾ71JSVWW=*2Qr]5&ӭR [rȦFd/a7~5DžnSqmm5~.T[me2yzV r}4fys*I6cv|B8F^8|3{v^Niu;̓Ot[QgcgAjq/Fa4.Xvg˿wZ$MR?).ku$y҂Mۢk}xx[x8P hv6aU~_/+uʽI/?_"?2PnSKtWuR-{kuٶH-f]4uv79jMN|,9]/介}?N|7qJ,E%/Ѯ-]k:͡Ӗ7#eb3~_ښ(̑ftDAWZܨ'ջ.gC[ 5u٫}tbYxcčy<- i6eYnO縼]jvWw~wCKΞwoѴ%mn!f0@a[̥^^WA[IB_t\=@BcT{:z,EX%'zq}o GFvc~x#kMoݳ{RVsݴψiE^w[?پou:e^TշBӟ͹+f/u{zSCA7TA&գ!/CIZgdɽ81]+gmKRZ_=z0jF+Ʋ sy}&ujvo:~Wܠ) LTkoŻc*|wqj}U6K4EtE =~ܫԬCoן~}uoȚ##,{79;Ъ~ӌb?q8mǷ?z$ܗo5p8M\N,*OryJEN~䛆FYo48S${- e~e (S)nMv@55*JFiUW_ro͖dK#{{ %JIe 7_)J2v1/mɢ5% ߢף2pi']42 -tIں!ֻm0p2/G'#9ޙu4:Z?^b@c~@_$k:n.Zܕ`XrnGmV_V(TJ]z lW<^/kCeF~l{Rwkood~oΠx7Un\7m8Vww]KWWs#S:ƄW^<۟+uME>m?u Tv~oX5|Go_8);=L9mIA,Ŕ#$oӠ깽oƵ>U]$n˴2Tt_x%)I=.>11WOwSƔm_ՙ!3!7^L)_MMZۿ~]8xE-==ϭ5kw]E/!hgi#T1[ܟ1 Iש3zq}󹉨ju}yq߯O_$0ZF9A8&컽_jѿK6t:1DN]=O=Ilbi )0줳s穫Qo_̙I[. lb6>oX*`[sMg'[xIcrϚ!_o/>y; 7~E뚾TZZ߭q]7]?ބv]]VIU>M*&6ls^_'NVIy|J}׭ˇ-;Odߖ?|j=+TI~ZϱjH ,s9k! |onևO }x+?yr~oO;BVV2d *{5/o.{:rRUz0rFx6O=ONr믮ѺRn>S6ہ* r_:VNé}[-?Rh_܆o[*[FM{ͯnd;`o|xTTn׭§{~=ȖF;9$}{Rj_^`Tݻ.y__=f0G7')E^ĸS$8gjS0G•*yP;m{չ[ep p@[}mkw*-[ZߟQs Jy/-7o[/z`- H-ԏ5]/QmY͇To?RKf\){[úxdc-*2?{+קou汓{\2OՈ=kOgu8z",dYY7S=S<2[F|A9C}Y5EH+Eo'˯B 7!`?kU?{H]~BBN7~Lڍ5^KhV[\A%kL!v8q|п+{^ <&Yv9vkH++6yse'/,GB}UtaF?; Fisky{~8Y]ɝYZUo䷌'Beo.ݿ۰zosTg{n-&?6^ q,-׾jD=ӿ۪98b|t~߭mmsptݟy-u6];7{Ǿ3-7ߪWEAٙIaQ}vOQ8KKS]W{?ws&m1cX?ϵTO\P´Qۿ[.mHÃeNߘ֜Kwo뱲~fM{BUw7#w˻ۊgYr;|7u9#;?m<,s+G 2ƿg׉rcw5j|W}W;.]rI+UUpl/,WıPu=Q^fetiBjM=.n^}ə55j\m 22 ڽxםףK+Wׯ鞮J[o_u:;ʧatsFY!opQU&zmsQYK4C2Q״;h!g-^oXY~ocsU*#jS{~<ʸӔf$+v}}?+Sx,vu. ROU?kNSE]n]w1*jԹ7E了<92x#Y#1.н񯌔R>yf"}i,dYJMZo*gi$]Ǧw|޳]˫0d( f?(Tz}ڙJнo 6(Q%T;FSVwfK(v$ UI恩ȿʪ {~(=tf4˒IPuwJ7OW%6U' ]5۷}N )kϿfhߓ׶d,h&f~RwUVox/QZ)NՓwotVߟ빯s8;1HTU^&tWMmU[le&_}M:x4I|+ ;H_wuGV󿸎{_SyO8?xj_wvݯ]ݴ>xU\|-E1I{}ַoş$]ka@#in)?֮[=/5M+`3Q4?:\pu|5omTj8y>D0O_gT[9Tz?M7 ʅTrI5%U9nW%ǺzW}?+* ̉YygҵQ׾ȴ~#iVe O U<ۅZooi) UއC(>~/&˰8br W[h6@$/L{m?zițw~DE)v 1?{R{ݻ~V'9#oׯZQI>cio꿭Y07c9yM̨֟Ss__"W?sS)st~G^wT3g{"}RnM9Yw2Rr 2v~֜yַ]]oߡ\p̓3;-5eeaX}sPw$bJGD9+~/~dHrĖ'瞻Fosiɿ`A4r˱`'?>i "y3,H~y(m-٤_m3s6pH\|%*zob(eI ޟϥ7_?ΈWWvrF 2;wf FW̤w_^KdO3vKnwyg\bNR}>_؆_ݶ@qW_͵~$J2Z[]omN^߇mD24rEM|Ouh m^O]UuOq{.!?6Aܬw(G!Ikqq+y^4.Q/K^wC#y`{rzjm~FU붾t|qI(8Rgׯ}Nu/m?Atn`BQ9?yK^iϽ NwOL_Oދol*s'c( ʯ˟[ssMk~ N)o￐*%۾f;kTտēw1wwoΚoSzhWx;r el?21.%{oNRO?k 6Yn;wÚ ӷ}J.~ZkԍPakQ~3J07&J0'a%nS>}B%¹Pa-ۗwze&խk8!&V?q\88䟯!kO&OPwsbp%l] i:ZZ-V\d}wxn]7 gwOr)+G]c R˵ޝ?m~쨇-˷nGA_Qv'# ԟAJ0z|HGmF]o_?Vs>k%kWpw&uT7/oO5jN7~Ƥ=m;ݾBă+j> /~ۯAdd?ϯץ*IҦҵ˫?70sgwyJ;i(/G}wBNN<}}:sWN.Jd)l uίG=52wqWPRZ]uZ޽}<͹y*Kc0 v}Խ6[oey8wN}?STӷ[kprl,xa|Y"2cw^_y Tj>ꬿ)4/yUm-#Kd32[gZOgu1xd6y|NO9cۏ=ja7ѧh=ԓur[ OfܟN/G[O żBW$G#n?UHm zSo{~*nbG9YJ)+gHX\ڪB>mf(_w{2ɀTN'2IYZ8꟦N9񣴙d;cٗ{9.Ir[sFA2a6߻ZJKu:Hr5Ԇ @B/މOe%,aOVo>_unƜy92\\CF>J2si]A-03=mܖju~lPoo(ŀRSJ:҂再3x +.Z'N˯C.@?>/h뱢rmk7mFQG@͜u\kMUow[eFR;Lc$dvS}_?;u3xl5[ѦQk%g%ܪśzl}ZJMZ=z׹% ~:zcd27 Y\sNW7ƼיC9'(_sOZޗߧ_|^ҋ48mWkLɻ_;a~oZ5FR}q%^vϣ}O1ԧG5mm]o]|y;E-SÂ]*]K4%ċ*6mȫͱf֮Ru)GoYTvoFqq!_gy;~WkxύcW5Eͦv)gʆ*ʛM |'bk^˕C料}˕ t^]׳2 o'K8bkĪ-pW֩Jj'#O5j~R>NԯSZV,T}6Djͽ\JT|M[_w2UeYo?lfRRw$"n-:ݵnTEG~3JWI={Cui-}u-&v%Sŋ;H/m_I͟.cVHj"&>_݇O Z:U'i;>mgE6N'^ݾͽK).;[:}dt+&3Ά5XOf'(҄墓W5)IFkic*J͹co' ^TSmn;ku-O,Q8U9(C/4_-]_tԬoMϗ'|)13k pw]i(3wi|ZU3,&{kvG֧mƥw}s>|7‰}4Dpp9!j7{?ٯC&ɾQs/i_oC36_v-uLx&붖]BЛkE/Kχc#W䯠aߖ~_apk߭FkEΗi5ŴL\G$o]~ml Sr=nWka!ʭI5N7jO͞bz.a# \UЬ{xSQUm " FƊ:Irs=p~^˯LaqswY[}Vo5|2 1R(IYy<>M"yPYGַ3sFF߽Tf*d UifC˱N0Z)o~x^|i"oo;HI_뾾=Tt=9TlG,:q{MyM{P7< }qNOFT*z|l,9F3KW|sZJ/o}u=;GyOlKP ѴF:#o{o7\ lee擪[玽:۷^#3H4/v];yKw#-OIkoi414\I6Ъ},UhrQwpʟx\usSV\gk}}Ot`[K-,`8E<œ|F6'׀G 7>O7?15;isEkm<5MKVk+&>|c;5F'ՄslsyJu9׺{yv8 hC1Z]]W{/BeIr17 f_hM}?1>DWofwoաQ*Oo}o|SjW|o>E vfUe><Ǜr:V5ʟѾFOɭmu~G *Fk LZ[hd5KćhF}7~泧ON|X~g79':q进K{7 5\۾i%9#7M1>f7}e4)J1O~,szYKߓ.,'K \Q^XH\2[ɻŽ߻䅯ɢk慝Y%~nkm}ǖzմ}..k5c_/ɒ6Fmwy>2x^mU'`9V_'̣i jK$mmug26i$m#I|77dMJwwyXH6Sm{, ) ͓R$3e~^ ݯ{>RԔ-lѥX Yۛdv2+mo?iWF)9v= T1dߋOi𞹬xj3ߡTe[lks'vW Rwu뵺G[ͦ{mQO ivKĸ ۹ۆ-߯MfV٪v٧g!ӛK_3h y<=sׯ^I;%iKQo^~gpY~gsyZqZ{ OS>25/ w`Em#VW˵n>o"M+i_zKJ4\ny,|o_>&֢.eE+o2o-X9Qoݸ߷5hBisڮ> F<%QjxէM:f3ll,uyUܾke%uefggyE<Ҥ`uAE_G}k|OT^}4C$!hP)9.VE>eud뮩ok|(Ҏۯ_`X,yBmw3$K ۙg~|| :q^0j΂t ԜFY^;I"b~syVѧky9Zq}om;k_ٹRJcywnOV8Z`^<꙯$//6z'~xGIlvffo2O|~_Ox9ŨY/믗ħSvwnǫj \Y\i#ң"Ip<}g뾾Ό$om[fSn;ya3yGŻO* J׎_܌ ]YIuO+;t5 owouܮPG)S*3]+'X%3C߯W Py=?r߭EAp QrΣO?(wN}ؾ.>ȿ#67?z1s}65|H\=zM.;!\/2N/l)˕~q w?/}Kq_+Iw}OqOו(n3m5%X *>ݻYrIm;]=Zr/ y||g~Ѕoc;ɸT/d$3ַ66Q,@U{%Z[QU`UHGʲ[>?^I|?+oo$MB 8/;֕*k_uy)t'o-{j+}}ߏܒXr@9=O*K./7R:+ 5Y1#wnkʗ27W=8Iom0F??޳Vk{]y_!E&͓oƴk|8N2o[`qɕx8?] ֝׾B=-3T˳fӒ ZY=nf[2YT RC`|GDڷOÿ]/p [$vuj =ez ŔBRY~m9&YܖYRsUK$ w1l ~J+=6ƉAU';T{;ٔzd84m7?QAKr|!)/Jiw3p̫?6y皓X5Q-?L6't6b KX|p}r%+nI^&9 f*~ 9'ˆ$~}Jk~J-/i9  㹫34V@UT|?>̐QXfS/?\2So\dnh$go{m5rKre8FΊ\/m_)monIy$=P:49Os? l׉2[O֭6fWoץ\ob2i8!n]Z#\vc';vM˓v"'c(vjj2k˥{O/u#dRvB%ɿfzr_gM(& J ju6_*Mmob 8o}O[G_?͘uߨ]~ld󍧷^M_S21eэw?Twɯuoujv9-sGwCSm__qN]~ Vbo}I ۙ$= *^{ۆס}VsP a8#|AujnS[ZB1v$sn[^V{RHp8/_|I;;+4ZĤۜQ2pX66۶*y4[_} o?5\}ON8M]_r\IC=9)>Wm'k0WAy֮n}ݕ M">qʟ|֝_0,jͰry#=͛^M$,aNWwZIꚷ 20 n[nUySi_ Pz~Z1*{#?΢ydɛs(~3*? gkI^:Iu(@`z(J)寞ЎIFoZΓ^{_w^Wg+)$vV4~65yW3^Kuz-ʥ+s_÷w~>l&19Vӯ}a#*a.Ne{ϱi7/b(/rcߛI-u_.߽ݩQpe;?{]]ߛ3NWK;yh6х$Go;H_ҲQo]+ֺwf efv#ݴ8Sji9}:/3ͯuPdf9?]}(*3SmQ殮|tD+v!oG;OzQEiB4־vhxtNmO_kES޳w}^3Gm~)g,!_kgpQvz:y)E:|T !Wn`gnwzɫ;{(Nyn=C`q wo+xEͿS5M{Ocs HѐhݻVg[tpSVoǐ=ґ-rĪ_^֧ۿKA_2fITLTo\E}}槭>)3.jzeVr\E aIs+*Mrg5963 jT6OO8S0QSR ʭWx2]anՑ߼wsҬ5Q5>t1|J_W)ww箾ng/wm`o]c/[/uSe6ub[K᷎hFXdxY?^]rF3MMj4*w]u\}w<5FIEwvjp &]oGSwa 9Þin/UvtL"?VO ˿gZE:Yvn?*JSnۿo$z&[O^yuO+~ 7nQ*é?-e۵RkcD]]]&Cej7e? ʭ#/_ʀ\c d#$7$}QVӉX2U^?Zj{ 0ʼn;~Z|u$n}Al޿;OYlI"w>ҵO*%go^Lmqݨ-"4>0y޿_e$}.zZ/z0v.%o&,o۝ʾΔo 7esfQ!i7;~n?Z/m_Ż%TYqQ -/ٌ֋Ekk-ܑFnZjЂ}b] G؅ӻ}NU87j}vFls\7eǙŸk61.$"386_Zw:9e<`id支 UArG}Kvj}vuQmr*5o{8"F[ᴆ%l"ﻪoueXwPE]m7UaΥNnn駇t] úo&kcsʡ=y3oi k*˨aFwdgW3|EZp$Ou%@y_?/ӽ}"JNiYZrߡz)릝_]*)~bH8wJ8]Jqt|f"’F~l2oJϿsI Ǒ<%%PPmSۻʯrk9ne5&r\w^ٚF~$1Xt_=igsWM$ވ$K'*xmf|gf)-u@RzYӯB$?1 wq_Z^$$x⥽nx*f({_^ɽZBJ'sڦR^yhVa< p7u7?Ky~?#|{HV{R':e[)bң.;ܴr(kf;$ٸssڒWvEIiuӿFN63I$?pߧrµy_?28m,A?oߝbDʢt˯m6J6w篧'=x6-h(ZH$PNIF]dz N?Ό#No0,0F3(*xǥ[I6ݖ%qٿӏľ0ub- 1z~lkN|u}5 %9a'lsn\FOrϚ1B:}+7 /T2řo A;}p\V@A05|!S).pk&gk_:m^3nf#͉?ZFj+ץ”!{|oouFq]i鞦RJ2UK fk{ط&:]i3u^[4UTӾחqv? <+cxy<-m`؇ɬS|V߯cԯ⫹9K^$$Wv=*EHV8%B8ծ{i Oϯ-IW(m#vп/iȐ'9$ӟӽf՝]u_e\󁃹W?oܳoOiʦOO1(6~]}1=9JJ,q V#V]6޽{Vn1ӾYtNsw+?'ήg oO[|g'UnÕ^+n/0YIwo  v1R_:51% s=ʤM5_{|ʤd17VWOGs8rKߎK)!Iշq\Vw=OB 8K󸻛oR#_=.圹'69>bk(|K9^ϿH2pz~"jƾә5FA [%Vo̽+.zH/Rű͌C|M.++HE'8nw{Eʵ{STmoy"}ȾIw^W?έvuRkޏ_0` ڼt4E[dԵ*aQ8mן <~%2$v}#d1X`/IE/&id6Jn:uwKֿ$3o_w-/n}N5W˹\?ͅjҷB:Kɴ3m~y>@q[An߭ň]{ V<|Ї_]KI_멅;]j>lqp¹yO,*n;r?}utœm:+𾝯o]~d lpv˂OU]3fvڗvY#GC^^FTy~m^#t]$#NTaދ+|h<%_Rgͽ[=~Z V6+c>x$m߿TԹ}׿̈#u]~_D+ SrMz ߯Si_섹$Uz s 2]J}֨Iɽ}o7yq?{JpIpI.*Nv}'?Ν={^)_2u722y5%d}G;?go)uQ߹-9Ei~Z 嘒WnT6Јɸm`219b~A+۷_[]H<,`0;m*tDwOe!<~VYV}~vrn_ocRV# AUׯ Z K6qח5KmTvIA*1jO3x-{?AF0H1z}뿛ȳuq%1Us:_*יbJweic%X^&̸h=s:փmc Er|Hw|6Fl>z­>~~=;w<nZ~m v fb>ovcJ){I;̽ek66ymYU;3m[vhm3s* ֖v):Yo*coc)8SkIY{$KD̊v\ykNN>Ίr9}Bahfv6#" ,mؿ/ j֬_~ek0'X yy]*jDtΦܴj́mR$Y[>ґ/#bեHs笪WKk ?ع KWGWPIeԗM8 #zO+9N7(߷|L /_rҢymaicdi]̌L̫#)쮟~ŅRĴw5VHeāvF*ޗ;kTy:*/?ӹkwIHGs}ުkMuɜ8]DQf4R\l<թsdz9.~c\!Pr_V_7ԴN9gpT9žoMZ/A{z^ 9噟$O9_5mlδW[K!ۛ-RzKmM9Roㆇ/'MCZFmk 2l?>|F+ & 4X~~>g/|FigR6֛E;U*?wB.H~5U|PON߉v7&Y̓.$j]kKӿK]:+*#mwO(hwZ\}k wj~7g+]zY_6<UYb-óZ6˧ҨIӒ"4Ƿs8VOOHZWv* ;G#]w˶5M7_au0/ii뵏a1kӋ犼eߦRi:gP֊UhsY4K{~Uo1vyWe+"3ĨMϚW߿cT$ [N__2{/ m* >h>i|vi2y;osbUq_;^VvF8HV BkWd}gt=A7&sB]33efmo8谔RrZ;q'?ghŻݶ_ >i>'r+mwAy"WF_JZM9[mf|c1KЍ;?-ߨjj7,cnY0V.8j*4[nߒOSϏ%5/rK˷gMtmRjm?hG%_N~ky&_3v6ǝZq|o˫}_Zb4||IEZãZydh?gVOJ\ ]ZWe~K,J4޵#7uSaK_I򬁾pI"_0«i~^0t%xoNv۟%kԯyӧzm_iQKo$+U;yon~~gWOK9ROidۿ+u[߷ֿRh5,٠IdIȋ6?xqv}m0N嵝kۯ+N}+Wkmf-m(U',߯b3nz|*J׷{z#dU t }kңS['u8(7~3.Uu%##nߕ{е_zmct Gf3n=jrQJYW .=Q/^fy/_S Mk[bqͶ=T!Oi;>o6RڥkmxUBmrf>ʢ6U ݻockJpnyU榬{=gw_TX4kZ7u |ڮ{xvFۿ~^aFte朕òKs8b xsM!Ka 7H]>}~V]IB.Ko}?T Rٻj{#V62B&ӯlc2&;O }vU'iI.ou<#A.?+uC-͖]Ʃvn홷Kn*s>_Qx<[xw{{5,nﮗ{3=nO3\Zͬ$W鴼"~ϸ.k08v\W#QMWYФ-Jk[}Ft*4ryvs0~MxyyԮ&ztjkWK8k;K΍nCGkѬ$-së_%)Χ;Z`n;^}wG oK+-ztfGk :iΑwZ&SпʟgUJ 4_]ͧ^5Z6i]%?]B%xdSw xefk_\2rg#tu4&:e[*f1Gnwͽ6>tW'(rhhsT1V'OO_ɞx5jY,dRƱ矽zlշ.<~ <Ͽt]uԼ=L1y="LvDl}>nu/mBcoR2;|W=KK-kc^+4+ms[ Tȹ![fQ-znׯ喹Kk^ҭ2< y߲:֯w'{}.M;_Gi>-ѢxԽ,* L篙W'+_U}z /m'u}LH hP^f.I^gF[mn}ݿ OZ G,- .e^Sϟw?xz7NNԄ.rGa<6m~>Oʏjsο3zo|J̅Q8nY~QsWg>K?|񫭙t?tMW.5<&}oҕ[|穤%Y5m`p6.sr/ç~]U_dkծu"+ݕ<K-9/QG-Eoy$?%vW4 O?7GOv7Wm⳻if9#m7NyUnQg+blR05]Jm뚉fwf =_\] (Pd$a}F-yqǝo+Y/J2pPF.޻wi6 Em^ Oǩk{kv2}cHŗG~jIFVA%v_FM%b+*or{*Is^O ?5GnWyvf泖)kfJ#N%ڝ];z:k#k]iwM޹4iu?y}=^^2>c|ggnj~uTԝܼȢҁ2.>+=>U^?;oRY˩^YJ})M i HU7/)={4O[{z_} zr`im|_ Y/?MZ|[ʣo@\ӝ˞[~2x9$t%r:C{ZJHȁKksog_Mur+^RD[b{cI/eG(^?R\iq眦_qvieY%~~u7gX:wbutoma)spM'+hq~GTN=t±{uӽrFWqͿZ!.{ʛX9Oqu|+Zm^B{~ȝcҧ.e՘ 8ۿ^|5Jq~v۠[naar۫'{%8{R&.7]ۻm(ɷtާ,_uc2bQ[%*}/YK+g=8<?+vע{Tg$z]*r !6_0Ǐ+%tݖu_5;ywV'9>}^qkoSV5#`Qع(vd~]{ҹJkN}3|9 mqֲp+UdTMUЌn1W,:w]*)zg4[oA Co۴ҟ'N~K|+4lCͻ_53"]=}{v:c TA?eZߗ|θo,j k _ε]%憕xq `kpz U﷧Sn7# ˞~0OEkzMF_=%#p4ۻ~yۭv2Pw3)r =jyuUэmxv%+~kyW_M׆/n9psDg&ޯO;tivŜn@?m+e5GzS6X$H(.1:k.T^].70`zRwj0wBr],O.Y.Fc7wֳܝ$2Fܿ)`pGmmE&a:k~%NAZR{|~ynb+m2`uبqWZiO1dսJWW{;smc@mϾ+;oA8TQn?S7./]እe}_VI|Ul~mJ{+ۻIܶs}6oE~t:~8J+*TCaOZ]5}vfR\_wvnq|\!kVI 2 *X{vۿO_9S]/cw[-]$) ܝ)Reק[o t\#?7v3ҧ.X{3GIYu k}9#N/uW{''xO`RLpOL[_mgFuϖ쀀}ϿhJJWfC\H:}+#wU\ Qp}]^~V#F |goԴdrc; NCKu@dl=Oށٽd{@I^|`A#s_5Qp$yggǢgik}irrg~'G,REWr1gwTyoԵĞ8#.R&X k>Yva}/rEKo┓kq݇9G_Ev_q NUm{ EUf,ߕUg359Ym.w)prp;N?Lж'TH2rJ'@~|W$K%õ.BuW?{_%տpIdDf(0#?2aS-^lolZ[B6WO%_o<OIMʻ[6^F@3r`rzݕtwѲHTn!sww6W?yl :/֐!N60>ߝm|6b?#vqC.{go^*ͦ5Wo%6,l{?jA9꯶-k0rOFO\;Z}t߮}<`_EPnx&7׹Iߗv%k|)E$ݝ5l*_W=Od-;[O-mKi̕ nvnecӂVW^|]u9}^%XMsu۹rY kw%-ݧm̅®Q_?J+/׹RN}K~`xЛ!F_)ߗAnF.!OEڿo殴v/ujl6whګV-LF"5ܥnX5i݅RPRrU}z|ѴQ5U*\q [B ,X,*QIJ<޿s"v~Cq4E+_wM|ʯ,nuZd"- mzԶ{9-c}]e;?fl֜c)un}RrƬv6GM+LWSKf9'ɯߦfNN7wl_ˤj>B̫<{Q]w])vs>YYrFvd1jiF&[N帛Hb7pUreF)]M[k`|_>b{s}޵{qQGqYuK_빔t2)݀۽1T_Ꮏ?c龾"<. ;ܿw9kww^yQKdl9;oS=tpG:s.e~IݖLnP\?$5lQM>\/ M3^d s}uoSH3,p߇iOC/w $m:Zu-ew6PvmVŽo^C$zv^^es³Y!s{q{[yS*!W=_D)v8yju׾?sm`9dGwfogdJ|_Oӹa{^|zsE7{Bw XnuݕE5myR/{ns)Rx%:?[oQ}3Ҵ\nR\[Y;GΘRӿ=GG#En*U[=+*ʯ۝־vאpW* ?XrG |ZE(d;x# ?R+- y|%be,}?J̈P=w9襏1Â8`iU#yIKͽ]{2¬ﱼ&}fs=#y]Oe]/4b\HBF?3%u]'KG?wmFx2N_^3)Y(_;pFmݭ_c ai&mrO,Iv6޿{G'^qVI^={s|k+cyL.=ҩ)΄-4ݖ_ɵ<7Vo_Dw,60#JI$v YfE'<ƽ*P[s=z|?T^f7\^lIf؈1oZYv?/_~߭-Қ;7oUejF{ـ͸)gL{U$}u*rWpom]/ZF s> vUdqt+ {y~ 8;nۿϥ'0R/ikm~{y?_zy\ip9gjekZTzFU-5+{ϑ#0G5ζn[:4O_m{e8bacߍ"[,H, w^q{~^)J1[w5KgtV;vTO_ǯ9]ח˧3oxD)(^&u ۿrj*>#(S 7a)ym 6=+#};2, 2f”AY>ZFĎprx>BV{?_[GAyp7?ϊd['zJܿw:[x1VrYݓ U++8w17/뮋KkmF;r9wOUVi%Wܮz?/891_}ove]?MCX,K}/kg$qjڷ{,W-T*\մ"T[f*Kh鐷 Y$ʿ + &=k.yytjrpTcCЪ%Jj .܊B后F@ ׭a+^y/_^bpX q9>~%Oߨ'+7nɳ8ӕ~`Jпmy̿0,B0UFȗk e22>u?{wml44{c"bA#vZ2I+ϹL'7_맫ȞAm4AF~R4q;}sJUo VӥmeGud[\2 lѳ2ܛ|޸54__O仭D,ɷ#3{_p8M&ֺghb1?{v-'m'Fn+_.I$.xOG%엯AŲI>V8P75cnnI;z-"!W۷?_¡Ikw1Qr&>Y 8ar+IEMoK<-??tXIcѿIFo?;ofP?f³z>J2^WEF öA;Al[U}oӧ߹);,۩u$ONzW' =VV4zߧFrGڥ;+=tjB~[ySy h~UWףBFnpߢrKvg u[vw^Υp`q))&~t0A% Do;cN$RB,qzN% ~kԐA<[ݵ=RG=MnT9-ߗn) @bXsךNJM^}2v ۶O;b(JW3d-WnHSvɼi⡿_4Z2}NWh娔P c>f޳Q>שF.V}>hF*I;ߋ;gJ{-h0v6q8*wq{Sw݆^dvrZ]M];[Rn6 soSmg߿۷ZYA>o+ȕIOw%V\{>&?4vfO$6g_Ƶľ"5o9%UPOҪOiFdqX^2{;]sᶺr0B38hd55230}\tyz5.d}o"÷ '=yQ)ջlpWwܝr7zzeEl@dnw@ɗ`$(ߎ^jyM}GYokסiJ**Cdc#jWN*ѾqC0BsϮ~o< 52iI߯ǹl+w7i=E>a_\sK_SvbwdnA8m~/_f _8N/^I-WzLS uST_je?W:M7f?>߫J(e9T}/_ֲo3*ӒQ[t׸ d0pi?tٔ>vG| m,J_i+'6/ Cx9oܳZ.v;W'dק5ޫv7ܬ*ݸ^=7}>FW o7կ 0$ ;rtAFm~BsÖ9s{Wih;oacy0X樊)fOA/Pr`w-qOEio|ےUZQޟv];og_`lqζQ׽0$xiW *˂ݿ{o_zR(v*{– ]ĭa.ӹNWzu;YrÖךj2]mTuV]|m$O?V兤*oI\ϩ\i{p 7>gSRzzKc$u?7˟և=hTKwybvXk2 st5-Ze{u|İbǞ:>N-jw9suNݿ6(rX ~RɎwވr$잺Ⱦ#HLۧ8ޜVS%R\?LvB<3g{U7;E*WV$J7}XvNJjK0DF۴ɍđ;KB ?G߻"4$ӊ .5`\;x a?sO޿Kؙʤ4z."w.NqIe?$Ɯ{?EJ؂1\׭hnSMB[tD9# ?+&nʹS߷cIc?V&_d:v{ubwc|ǾNԩI]oQ]ݓgIvW<V~If!qkt]ׯ)vNIUcLg^Q}fCTV2I$s|b0%[m^qcO@ȞX4ÀSWvuzmݴZ]-AnUVfV?SigIMRe]G~MgTw[߉62y8GH[}?9YՂzDeNn^=B4.eS0Eܻ#({M=cOkwwkű՛$'[UƋ|:#W~?iQ)#Ky`_6,G{_9Мx_]^gKu+㙷`0Ywnn褯wX֜(￧6Fmby =STy3o?B]W!rSa'+jݏOjj~lM(/ms"% ۮ4kHGk3Xzۛo4/%h-֗`S ګݾVއqȢ3W*TM]mI|0r3OpU%{|tʔݶ2N6~T歿'Ur/=9PqoM_?S/jԭgwχ~{.F纰+2n<_e|qK߿sgUJ-7| b5mcQB7fg˲a'-kagiͶD~\Z[Y^]b&xcDUkc Cǘ%6-yN3v9y~V^~sbI×O[>{ueЊw֚7ᶿwu %֜xmK,&XY/_s_1O VRq{붽Qx3%wV2T9n yu\3y͹ ,c|ﻭpfk½F4۽[]z>/xh'ftS;hzCSbHGu8L868IE[}&jxhQ9\Rz;cUХY\]j7c)vIlk2/xr]XJrvS*ʥ;Cwk1ψ8t淎MN~ш[v<~)gwޏWO ?T T_ǭ9*'K ݯ_=u/ᦩk %wp]t\4ɵ3d9cNtmP&quMrԧ|tY.Xn,ag|T򆶛2x :*Umwn xvh:|j[{R8W/s+=˵=kh\N}3IqrJItk}߉~47ool|I)icE}^䍤 #)V_b/~߉Xg:K6O_[|ԧ Y.I}m[ {fQӢ w[uެ58 I7Vku6Oֶ66sO4VKy0eW"7&͟/9W9TZ5mgJ~𵇆d;rfS!{99&ۿ#\n:UtZrywtqG>!_JJwvW?(67yz:)?v)}z2FbJ;3]GBF6r[[>Pww?\NviCAiͭk+A^۪I,8ٻT}U{yy~fMW?OS> h富l=2iwIZDiemr:}|>G JTzS{/M|hn3=ݻ8X#cUYQFI9s]>}oSN˖__=w_kd:\{p0 DvݻEvZHMo Q{^WiI/Žr׏mZFO웗`4ж6`9U*68XQ/i$nnx^lnۣ8In̻j/j<; bԧ6wtצVY'AZi+muYVxL3nfs~eJjja:N.5_[? @W!+?\P9};aQ~.ݾ/ hD^[Fc/4c=W%o2^_X͡$ۢNRMNHx[`>뾼U=\^BYtq*2Y``z|}/nQ'fT@kh/uNA[g_wf"%Bӆ||c>UҔ)ߊ8+Qmj×ƥH?73~l~YAfռy)mOeR9ʍyfRǿRy5=F[mU̞=iSvp$}nk5Spij|]\!吔w?֯7_~.gMil˃߽gkYo(8߯^kx~Kwܡد#r*>l?'v,P9a Un洎`nogPOҴxS/?KP5-~I&!++r}q>?1mYJXߓql\pOʸӳLISM[kus1f`@'wu[]?zogPU$_߮9Gg)G꿥|+m|?7;z.+dgV.QEĴ܇I9waJJO~$շg G͝);){km{y ^S]{ө}t؂9bFݻ{;~]/P[_}3t*oezQh{9jќ{]GeT=O]A$o<#7~{Tm~?ʵ5zncM>r=ө_wJo͉z~V/[kog>hw[h:(e킽Przzj_FHuo֚g~wT\`~ziy YJr:u{~%$p_?:lUFw_'t"R$P|ݻ\;)Yz~;j'y pIݒ6ǚ'muۮ30sH{X/v̫4> N9O=gɻO0]dd0|}3V"n_!%߯d]Kcc0J/^+~gE8}7} *Oc.%fѪOpi8`a`4aã >7erÛVS 1cw~hRc(8~:WB>];xn7?>3Z_c \L Rv{/#~Yƥ׺UOobPO9#}{tf}mb|9$}CJM_*6_^s~7,$Db0pn_α;u~?>fu}[~$R+\([l/[iJuf|HQ" r:VrM緞CP`$gz=޵խ<˹n9EU7oO#$s?ޓOYzFu}ߧ2Y |o$gq]ۻsZrJKގ}ntYn)66ܪ|.&RVfa~+FHY꾵 It~׮M85}K+Pղppێ[ۏ^+Oigߧʔ"ү" *6[JOiy~{)T)&\$ǝ6?ϭ{d׽wh'_|I>9}Wc-6jqW^ki8ċg+/7ܝx*W׾TjI[wf]NN:fko7+Iݿ]7n!=̠}~n*%8;Ni-ݸJ0_ǓPo_g?=zKocp#<nO,ܯnci nѲn}W*~͟ԩT{gxC ;~_Cݯ_]|vU & t$6~oM&&QOL_aGzF#ا[s:a@->QS5#?R;I,0cQJwF2koݥNJ7(޾Z݃MnLp9{Dg4nߏc(% v>fj=o꺎X;q>>o?iIۯs /#XTri;`T\n]6y;ILmլ*5wFU?LDW%S{ytlHe1.k|{T[HC%~>ⴜ?69NQoۿe~f(${Z3ѫ|ٍFcf, }᝿.ެk_m;$~^MͿP?F-o}e2Mg99UuK|w}XGי]Q(es|0|N_O+J=WaMZvN#?9M߯bEry+j5w߷6R9 󞵛M=F6>`'Ǜ - q9k٠h2ؑ\ҿgU!c?/#?vK>*G'}ϧ'{7{iYۻ\ϯƴKM{0Kv[Ij&bW__۷_F\2Kh*@?:});kߡEMNwl3qǭZKM'YxCs~?c_C,F- 9>vՙ-ַdI=z.\"GSf5ARi4c /mbHON}Ecٲ\μ{gӃN]Ҫrv>lQm_AJ\c)#ig1\y)#{]^v߯SKhұR@jQo,1wwOֳrOo'/OZs|ͷ*JG,2.ki e|s*>e_ǿ#H+2I9$u>mFT,y 0siwpVi[8 $sH֎00[nU}_ 6MmO_)GZ̩EjׯRydI)9%Gڧ~?(G^m[9pOͻ?/=(~_BT[2?9A@[Ͷ46~$$}Uk2$Ywco;^X6{kUn{6tֈy݋,JOY5kudM+XI!H͌1_~)9~Tn\]ܢvWtmcźݶXq<*QiƩk/k*t鶛Z7{߯NxM< T;Ymnl}-Mp%-ڤ=8'|!)+?;5,ۈkbΜ&RNէ.RvyBnWz.8(zeM%e}޻߅]H-ě .Wke~"7([y6FX7Fot(:_#5'[ȧ*LqX+&?(M|٤o-:f{y-,veF&+h=_Tюyc%-L_SOG8f_r]fڬp_o[1‚2c޿Ӹk}vf}O̩(*O;[kIGG+#F 1Ae3wn_i/\f?]0`;Pێvo[zoHWKJr̨X~\f;ӗ7jv{ y\;w'}UXN_TTc{_m}]Έ>V vݿ2i+WiT4R@VV!NvjMz{{h60J^늄W7/ܡv)r?m2U?+\;]N:ВJ"ȋ q'Qپқ彿OCzheߐR;j"ܯ|Ω+{צL+Ī1¹8;~vk;Ugr7'gi$8ĶNPm?ݭ z?~O8%A8q_δ}GVJN۩LHr˒kwҕem >;~ST1r"v?MF2~̚JWɜLw7.a`y}{5oꩿfԕ645kP6?zuv=wxǙ-? - ?$dKWoe;Y7BaNI9s󫔔w2[Qۤ!Y2{3?>>[CiZwW sp))Z빚n}leL6Չ^Ng՝_ҡy-~]~V޿Uv-RK= Q#3/Jgu_c7Qg{4MlG]}H|vw͊vzw%V*GmܽN׬Rmݦ-;Wvt\Dȯ#C|3n?5RYЪPPw̥u3`|/+UybĔ2퐆k6Gi=茶 &1 |۾QN~t*'z鿕jxfF\+|ߍ+;.eoQwoȴm;H9Z޶{Zy]@m0\W?ŷCʺئ\|Bkj:uٮ;cm{d۾}+^4̽%F>VoK;Kq9+򍽛˫|qp3 yXp̃{grw߷cxQJ._;zkϿo͹9zk^} QՍ&1${R@~[+}$_ ˫6FWU*wӚrm TozRx[BK,+k3X{4 R[Gwoau"4rwl6VXaKeI#?N?cd5W{K.y[;~֤޲92|6kyWoU|zP\~γDx{@tmxt+?J0߮ȵ`dDLck6&ꊲsbgȕv"ɵ6ݟ}Ȝy_Ngo6f ¤w_y:?d[m{6#Xݽo-w?˟^t%);mnq:]YZ,ɍT?sQ9]1k]FA|cE(tpY#me7ٹ~˶2\M88`yUXG}$RjWYյ8 ˆ{H /!1[J޵~F^&̅ԧfCH)v|۸k[˭_Kkχ-5k#EG{fʭo7޿Y5;MSIԭ&w0;JJYw#JZ5eӔc/k^NeqUpm >[ku+o_{_(eN21=(ysW>{^cy[Z-!NIOrs]\߯﹜Sj了܃m࢏vI'/ס*۳ղ'#N3&f޹ sF3&a^K^yl;1 nCmz=j|E_/*0 ʁUփy}?JۋIQې>ǽOgsko{-r]ۗnU%+s[ͪ s=#St7v߾)bh]{~7]KIGB6&7mQQNonF)#1ߏR{Sȭ(vR0G8d_Z %_fI^ Wqʃ vH'zpsqb•J);\k_!fdTe[(d՛ziۿU.09z;1Wv b\.z *%1N/RMǟ`ϧߨ9Z^9`b;sAIͽwۖx1Wm|s#zГWnS(J4_u~OoE^gLVi2dbVRK^z+]sj#A%120x)dݳ ]xZVz믟^qf8hҩxKvߑ|;C1*dG ?֪WG%y8;KV鵟~.n ) KͧwTU_0ƅ>l0 >sw]',ܩ$wUgnJ>zRݧWqܸo.?PJN}7۫М+}ĪFӜETcq}1vʿ˴ m8Uj/4??վÌ[Ue$.|}Cjh-Q{ޔz^Fv}c|q.rNo[> 6=Y$WH${h˚_Mn_}"B <|*j+o_ަ%+ۿmq/#z'gsySRH*syhc<̪RMo܌G 듿bsƑN% To?5wW2ݯuFf_/'{^;V_!Nz7Nsդ5Kuo;wm ?zk)OsԔ[vmڡ'8lg&q __ov! BzbmӹmG ?u֕g3? lO, 8O#ϩHOӪ\GbwӖ^EyuwXwu7jrpϊi٦i.U?~7/NFN?IiջVPj׺^Dlp=榕=l &OQU2.8V|վ׷4;wed#Kwׯ~5/m_ry$[K}0Iǿ}(k~ArsD0طUΜ#Mz~"Kp>R8#{֊_q o *)tIŽv~dad~?Z,?v,'R >:e5 //,"Iv%]''eX>Vio^^AY~_72{Z 擹oەَk~MKk+w_\Տs<}꿝sޖ|w)r7^IݶuƤb|Ȉ@@#]Yǿ\xZrԍ8˖ZeRTV޾_Ls+߿=cEEE6gݩ}Bj_7ߺ6l`] \~U5W^ >}Dc^X?|!@$Ǫ qoRq۹~CRo@6w>F\\qZ"Qo!WX 9 /wo|/N*q,'pPs]瑷Rkf>y=,r?,!eb۾SrAmwmmڅ{ԦһNWA^N2[*-k׾ceW9AӌmZ2%Zz%&K/͵~3wvTdoܟ;@Vas-AA/g~~! #qƜdUM[$vqr{+rj܂FV  {gך#_] EL|`ۻLv)Yw߱_ۿibB9P>δ9Ũ-߷}W~c)l±;|tέݭ"9;?{iuQpqoOz~Ge?>YCGd"0#N!SV_֣ݷ"n*L;;L5uq $ϭT}_MCCXdrNU~n?Z=k"Z]2ysL=veYSo2eRRhK D-D]io_Ժoߎ,f:~o*:WNwO~tGpʂ@B!/nD]ͮf[u(>7̑_|W~W3?}?Lқ^˾ h7K-VR]1Um}[pZ;X M{}dWjv`O;2;q[s>#3GsY_YY_[H碶۷;(&-c#f1<3#O ։@p~V^~_oRjG';rbVWxZYy}#,O VO=yIu-Nqk!c <G[K} V& ~{>ȟ *`7ֹ'i7῭J97mg}zT o=pm_a⯫_$E6VB9$mS(蝾]np>%r sY~;aӚg4/3S[[W>=֬KjbIUeUSHmO5Yzu<۩N[[ RibJݿv4gYŧP[ ~ege]S׏ *VMO]Umq_+%pּ{}[.[6Z :6[Ic |v̱J)-5OTod9-vz_/R5{}>KK-ۚfofϑ??)gGc" ZtL)_]svo6oĊ^Xo^CJ JdwdmmzO}j5>i6Ld,[6cU**wc&_͜ΔQ>֞KvhCE4I27^R0w[wO=qe4eu忯f0麵lS4H~kZe'.$3" % lf?=:<%(ҏ-isZ궿Mw+:s1q}WzS?Ú^m,7#Uo2H|͎!؟sVu(F1\?՝W}r9ӷ,IxYwz- 632ܲMǺJ磘RQ;y[_˯SKN0t䯯v9?D:׈d6%{{F1Orx8I˾G\qVeY-t]}ҵEF =5^Iw䏩6nҽ݉ Vhݷ|̻U]ڏ3_UiӧK3sy:i[׽wWm;Z o}FFEgmG?޽{i_GO.)SQZo}G> BO}Enc,j {~fݽ$*uc1{Ku>Qm5i5Kk3aƓͦmBkF{ͪ&24;dY6|?燜W'O]<ЫR徟/_:o_[dmlS8m<|9˺nk.Eߗ8g)5(em V7塀2_]g}ms||?Ҏmwm?ߩ\4t_:,yKlUOyݻvO5}ߦ&c'ӓlGT~R}~sǶj>9b1P.&cʖqf<Øu-OOVe)OO~ڳx{7t}EZ߅4b2~yedm/GEcg%k͵D2lɌ3[Niby?Wv<&Tv;ЃP0:q2Yc*4}~JVw8I/⍚("ܤ 8aN/z 1˵COO][6/G^pG9N&vd 0U,'3~^Yvu)a{~x;a "X/eoMgBºw"yeve?3/׭ru9=קqj:>̨#r䣜)P x}wظB7W6L6Xߏa<~E-~&Z`p>Rʼnm)fS͵9y_s6-[GG1PE99fKݯ}}[:T`wpq_{Ib]mM{tZd`(2P2}]E)7t1W̄c ~r% :C֟3~_"ey8?^TjR_֟.X(تIz/bRN}Z}ўqwPpwc?Ƶx+GׯC%@`nuifގxR˽Ib\mMJMzYUS[pNϵc* %Sq{6?g# T{0vٵ[RFFVi΢՚{^s6RG!H럭pJ^wgOJ\+m }x7&~*;Ϯ^qS#[t"t -O>^W4^0_L3 y汛KP%p6tמWO=;;su4[@*I0Ig=]"vOn6$0$l;wo5+2U!BoQjW "̎rܿ,zN+[;^Q8 .܄yUμ=mz,pUW=$ӡآ7kFJğި2PꥺVӐal[5XWf_J;_Aݻm}U'῕d*S'nsZZ.Wt~;4 ʄ:|Bv?<2fvUm7L&wi(/zi9Ѝ_ZMuL 2I !C*  vvj0~3 B6O{}1Yr}298l(OCZ_Ew]IīIG=^Z타+n[oʿw:}9M7m3kK'ePΤ! {f_4nwz۵d0P9 8?ϵc~*q726borrV[ cF#1}Z lKpIbP0 o__҃"&a;\|9_a^\/"6IcI>eW.e{5|$`?x|{{'󮃎im]3w>zuwaI$ d1O<[C5w 30[' qƷݿVԨI$tqoY Yg]wY9.,C \,X1?KDvLo[_E}  asm=7kO=j*6O/gq {7/m3Yю}?-'@rFGߚ%V2=D̿1(2F޴}{a]]Sx!'(W9o6w/}sMҊV_ǯV7r"HTBܪ.߼~o&Vz~?y⤛R/ۭɣgV`Sjr=e`%s?nJmow8uzKH#=.Ìs\~ݽ/c++Z*ȅ)W|)o^?iOQP Skco-}=jܴzGݝBz͕ԥm/{9˨hJ=J}Jf2@}6ﬧg(ɷv5sO/9z/iWi  pLmpG[nGDT`$ޡ~wZQJIk߿83.r26ynyZ;; ;o*zJ`?'ZAouuג?dryCT/\fR[ܙC)=ٹ{i^`B6I|_3Wx[obo/M.w.'- cgQ}['#8Z=u5O[oMɌpGB@y$ek)ݶX ߵfR֛]S_F*ŀuv̿qw*?pS}<V^VgP)b:IfQ-:mS @e`z.+XXO<֞g)J۷c^[ .eߪ i`p3:|gjoc"H}2rx9~2vM[dNcc'ppǧϯc}4s]2%@\go֭_$]u*Yv zˏo$d'.yɔ\o=g3cO>ӔŒl_HO80yw9jJJĭf7#c{\iYjɯ2ߝsYbŋA9l=kS=}3ѰRv`=N+.OfQD8'9K=fvzEg>6sK߷K?w)I=F v{C'$?nql"¬SOV.Cpāl׭'$+=em*Od-=9M.n$oh~K7U7}SqJI'w W>ev@8qג<ˑm{ך&֭~(YK< 5)7k-__Fpr0sg|˟yO2ߥ7>2IБL@AgYMnI4Q. 3~҃xt{o԰J~bɁ׻sMZ[(Jz=Bx ν[襣nofR˾k} mj+'ʴ_䉬er 1 .O/eBE9랦>mCo .fw} c{IR)mzs-kX6_RV]0#o>#S}oߦ]in w6uCemʤܝ[|m^!5 66ZR?ZM"|/ҽ\(fU#r'ZZ=MW믑U(-#ۮ̉#ePfF~U-ڭ?6i}2|jfk撷N.Z̒_ 1r7nW?Ż[iҽ8(/}|NpC89wtӍ&H;JxnezIGtW?L]4j y U?8ZӅw]L1/KvyNh2Ţ{.i^ז)-5VQ\Wh_Xvg3e^d g:;YRvck<#Dc#Uׯ1Z7e{Ԛ JzR/^+&1JNS?w?^=!QOMmuݞeQ-_jI) AlMf=ҝ>w{Zzy*_ӹ\rw%Qտmsִ4z{LRP~ݾ]ɤ'*#vZ%.J[s;|ʒ@UqK~-_sM_Wnש]}K7cv>l|Tь/ĥ*~e[AgBԽ_mVI {j_em7we<iUhp[897}?;~1YYo -{]I7(rnÒX}SJ%zJN3M>mQ$wS W/zSQ^)՞FQMݙ1 ~l}s\ϑۿm{uGt6ڍ̩0LWaQb^}{}ؖy]_ 9 3\j7vDL$wq23)L.ݿ?ϱ_Md1K}_3,iWK??Oyox26_h SKdb}7ٖ[[UkO_O(Ωf)y5}}=;6Kء_3q_%Q{)Fw}EnWU뭌>VS}~_Z#)I^8GYݼ>񇊵})-4٢%&-_yl͙$"/K,kxCن6SҚr/O^w>{6XXڪQ]eWҡ%/v {ZJf?s ,[;Wߕj#wC۝ǐG#}zYM4-t87wwW9Hr {ܭ&%$K[i)m"V*rDӚ{zX 9 9~^.{~Bi]7!/ߏi-Us__R9ne+~6,,*ϡfzJmU¿˷PhzgRMs߸/RIB7?\QI_ZI_]IC*dxrVKwKPmݿ>iψl5[h%! nh7m6Hj:~k̼6?kNNEwecIogHg#ǰ/s߭mMJK_kcBNwm_=KLYqqϢ]9G?=[FB$ߒHWU[n^G~?JR?,I?.>\1񱒥_c;KJԚԥM->]^_2p?>i=ypH^qj&Tq8bs67i'ѿ3;ܙǃ; K,YW~3Je'B~&qV|^svS.T_W lv2z=).[:jN^MI>#&+Ltk[p1c,5Mݧ)'{תE~ovMZFi+; rNs{v-FQ_>pqwZrYG9l6=?*jN葙U ҉>} >.}H;8۵xeU_zpSs}y#0!cPs江TICޓzBdf(w+y5RoK'oykV 8'rTd庻՝0'g;&Ʉ$ӡ?W8{~=~Db*8Xޛv~V<|?- ſw#Iz~Q q/QKM Rk MrWY9B u^j~>zum];8g8zI?;05žވF} N~^Չ#M!}w.޾b@Fҹ$9ܧ}҃ mmn`9 {sw{ѵ>2 oQp꠆o?_³7ۮ֢:@Ojjj>kaݑ=s}L뿚{]N5I%;T2+.e~\fwRW]zt xnI:8g{7(-b3ۻ{~6SQ~ .HI;w{ӝDկ~}WOo.kmeB=?7}Vz&p~0 )8e|}ZVO_=zw3('-rӸ}ƲN_"|o.*61t9jsJ6}ﱅ|րq93sԞ"s Krpp\ y)C 'XS~m+h1P||]̈„r#; :ۿ/ZF_o2"Tp˴)g^+(}F`;ێWR{9)o룷A1-׹J-쎘W9P@cOևF9%ˮwv+0Ͻ8z UdG[z-[i^d{֖!YI`cno>ؤ~}"R0{#D]'A+M%ky)ƢO_^B\p݆N7nNmO3qV~R#h\q_:J}e'j@ 'pztl? ')Gh?lD&o'c?v䗑?ݵN?%VvY@?/GкxM?Q!<<|/>ZՒӱ]F(;ΒTם5dg.HPG*MC8O_zFD30&Nq+Y-dݷ鵺3qypmO}BYKd#0smjtnZ]w6M:z?vI'|/Ф|>e_VVFvTrۗA9-W-# *sa$6knynUe$*j$Hg_NCls?Q{uƱUb&P"3|/Kq—WO'͑I$(֪*)ߛ1')۪^(^7UQt~Y_T*RQ[yog"|>b wťl۵,*Pc}v@k yqylfWjK=e Xyi|gKGklqy *skOy/&OQz9i%W-6s~% \tKf?ws֩ ]? Sϙ"aU]{K eedk:_̜n?U)QmS~iVjvxFv+]HMeS_?ܯüOPݚ{_\%ͳZ~l׈t1alVEcrƱ]&QtO_cV(Y?緟?d<70'JYf/3__)pw- [ގh?Jݻl~7m'qK~_.3_KZ\HU2J.Zt߶xeZ_j=:[{Fx^ 5QY5;B$ܱ¬TkOݓRt+59O.͹|b*K~M:^GOwlфqolǴD>*?_|ҔۧVz[T~L6΁e۸+ow&U9|[|5%iFm2ssOr~M<%6˶,9m`>=0[116vƹ^:r{3`aJ+?ϹN_n%Y<*{snmOU<΍?^G ߖ"#$Mt6cךX}t˨Q<ܥ~|0}wObZ޻* w&2lUem攳hg ߿}JduFg%0;~oZW] 2vL,ܓ|ͤ:RKoqac {+Υ'#K3Rr bWﭵ537MVzͫ3WT(!;fEy53YZ7v]ll]/Mud׺st*ލ\0}?5o>[ewaid;:ǩce%d~V >~_[;?/;:|$KL#`?cZz xyoo Eb;w\^}XT۫pWZyRon~ޞvߓG-JMeoq"pem-7 oɷhgg_>Ė,c7*+|G^:W,*]sjڿ5ԳEq'n7JTVz:ӌ7Z >ѵ@¿'rnWx_̯!f7:gxFW ש"ثC:**I|z\N5:SI2T @TܿlvFIO_y-=[SOM'$b$8s*<]~eqEaC_S1{kr pۏ6~c)IGw|iELC"Kn*dqN}1f▟v6 w?X{K| dIyOQuo,8]`k\#{=2%" W-oWD3^f?9_{~w3Ѯq6`[]۝޿ELo f\=&'NRKwgf Ww]ƶLSPUt{0&8SGfvT 9s^};7Bvntc#ok۷CcfQ:w r=zk_^L}ÄL|};?{oĹF[].rX@_ך mm{34^mֻy_5,5ܒnC.r 755i4V=6ԅ' qzsIhqwNYxѾ˭_3]$+@;-1#Eww56(ۉ^zpoF-ڥM,uv65IBSZӿsޥ:0`&tB{@ R1ݕ9䥫j"՘0̽A7?poN3V{ sk~TJ<ڭJYPVe'?tEk~;!{C,I9wMץ95ku9]t~c1,Yֈɻߧ `(2|94ZȂ5[?*:G 3P|9_ZoyR:N:ޘU Jh'gN,BY O?iμiZ~?^ӵS+t#5,H!J`9rΊo{[ؤ6)iiKo]EAow;(I}۷Ĭ6N\U~(bFy#~VMB^p>bOo-{8K{[j%#[&nobq`ŏ{4kEhs?__"p1py52o/6OM+5)Q0l\+ogZzyz6i}jX˫QƗ"oro:6UDAr6JN/Y?kܮH]}];G~߯o^/[5  $u2=ʒOšvwEYʿ7_Qo?DoRUPy)5)lô_O܏|%Bwoޥ;)J{|xwl>r9+_96$]6S*y擒[)Gmb}>A?ɬKB6;[8BędߍuEu篑\nެG+䍸ьaGY R_i6[4I,v7Voc^ֿe-̿X29Dm6)R_ݯegre܀c }ch;|k_Mܥ2oxՔG䑜Z5gnݾ_VvČp#2A?{k/!Oo_Zm 1B3g9F#(=GO;~a?jƪw|k&0N# gdM:!OVׯ}1l6[p)_oϧoArB,M#|_sFSUbݹWT&_¥wz'3c(+Wտw;mb0RMsuOȮi$oAn]zt66 A W.*\n?]?ًP@㝤AKID?R_tJHAV\?YAt2_le(vwV. /޿jz VX۷nUh4~}eƊ{׾ߩ ֈa9R>S˷1]4]o#:U;oߣ8 $Q6|9 JiO%/)b0>^I3p}]o!.N6 }uw|~?Ͼ>_(VZ_Ԟ]H? UMrN7|uTbH.0>cz/^ ˿vw{ąP[xw<=߷~IB3O~~mv͵I2X 쿧}-es-f}? ɗ9!y |+7؍b;{frYo}B ͽ#*?~}knZlG` 1;z;mo~J.m{ vw~5BNP _沞m0ݷz)d/pw_Ʈ1Vk˹͐o˵S̽?ȥt#Vaԓ۟>R5Ν]]z[s,Fzx~k9Gk$rƮ7A>_z\WR<$GJy9u_b.BsԞ$nZP(gWb ?q, @ח!T}vV&dm~>VSP8)$=9%^nmU۵{_Xϖmm騫Z(/_߫GE(:-:t(qf1)9?}s]^O=ne^j[[PKRX!@w'Mw UVi??}\>_zҕC_?kgO=L NeyF89fBG>ZP8?uP&һxwTJ9 >Vڪ~EMx[;B3w&|Scpv8~mۿ98!>wij~OP{_'Du+6ݻkDlJmvDiA,HPqs_w]iv{֣|n[sVsd7+weP8 <7}ȯ %w]mW*ď߯t5m•(j`h^PWm7N+o#IKٽz'ڮVbm'M͟RQ\޺o3j.uk}߭v+A7zkYsi. XJtm|8*ӓ||=FG"Ƌ6Hf| fE̗&~^e2)mwqeOjk}uUޯI=I mX}V^ꋊ[1w b~~r2ܽ7{kǷ}{4^>3/{v;1sZ6$ :A_';msы/#4tbӯ>JeSF[*A>%ec+~KvW1}!O/zМ`>F^I&C#;bbV.Wn8Ij:J7_wً{+8 ~Vu_ZBϭsiEBeH>sqW:3ծnNw+7OIGQ9I9or;պ\/c)(ӧZot@,͝dol3}VIt?|.Cm5]YϚѩ8tI$G 3׭l9N?ztɹd3~q|?Fc%%׾2$9\ݬw|ϽRZl]IKnSAp9ov{JOSzmn6v˖abAMQpLִGw>d{Jw!C$rTxz~3E)7 g'zwuvn r{c>e!8c{Y8$0;> æ{}=h:epZ]}2Ag?$Nv$n?Mh7K3Ujs+=M!a_m~U.\~fsrgP0a~8w^^z}z;Xh\3o^v9O>X}}MK kS~& TVF{+ <'ݪ;}6~]$JR֭J}{7O;H$c>~85񒨬7^ppN8-/$@)oAǀEr7]c]ϓQ͵;2VqM!)_17mY{O_qZ0uFvRe#V/mϣ_sXSTݥRguothRwt߭G) m5Khd[{[P, l.Ύ6gx\)Vԫ]|+QӝI/}f./$U 8$ZMgcmVw]kNj+N|QOޕvDxZ*q꿸}>t(i?4}!õG<ͤEq?{s0e OJ>6V; e-jݣO{ٿN]RXc'~{OzT[%ۮW?AMOo}H"sNͷx;P[ѓ_֑В[u#0dIv~?I uf%Yw)2'ӯOIHОE)B??m|6e55H̥PsM+/ $rqg歩ɯr%TrF fnu¶o)Zۿ9o9/>m8. 9;#Y>Vfbsr;kgվMKty\\ym#+33.?zW^ Jӝ-*[i7_GH<7RG<􌊩y4`o=o.9liSչ8jt|X[t iˢAK;mF&GeԤim6}==27g8,0淾춿~(VKӛ]yP̒d*\~>/%ۓK]C%Ύ(-'+FSVU;_f%`s'ۿO]cȦW$Ppg_+&ؿv _2)ln?ʟ7QӒM?׹<9[zhaQݧm˵Vɧ3qWa*Îۏ:Rs8&|e@‚~??/{ՓNw+On7^RwkJ2J_MdG8%[p/?>´ymC|?~:29ae9?Z(~>˵Tm./+wVg+zޭ{c5QZ{_KIԓ0`Aͷ=蔺^MZ?u}FS%-4kEM5krA'ςN3哎}7]>~Ïp?vIpv.4vznOa>䪰^O /.2Kfm4ʅn~f-Tko}D9F׿^4UVAQ̓WR!'_fgG穌m+wcwßO\Қ}~$v~R:qs[Fe||[/1W}t_kU]{ @YJI%n,45_dLeaOU+Ms'uN k?Kd$cf]<|+ya̔2ژ~O_MIfO􀣨*K1$n?+n=njR`H6t?+4ݵ2榕>c⍗%+|?to[9PhUeh_)[eyr Yw ɒ;~7wg:Q?{ ,Q);ge#-`-m:P p\'^6`Qؐ<3~gYJ2VCvoBS)7[Z+_.:9)ݻ|o"g0D_M)ud %w/vj)_r翩l(O ۻ߯JRRr-{o^a8fݸ8䏻֧Um~ۭKr.rxWvD*Ko~ӂ 'W_4PneNk9I=T"/-^h$Ӑ 8˻oozQ_O8bx~n}ht:p^_>Λ9$\V^Rӻ#2oB~ƮQwk~soݷܬ:?D ho_l/w7Q_W|bSaѿƹ9zܧ GpF!w|9?/C7ιR;Hnpm>'S_%$ cTd[\m4tn "8~U ?7w4$q葉3e\3֯IpZn`߿zn#M^s*!玄n,֢.ԟ_7j\u ߞ{ y%'/4qI%5Ԍ 9,kz/N8l?wI|*<RGET7pAc9ҍ'U?:qW_'?ʾ`6p~BR1?u'~gD(M9{~}7.;aPŜG_ơNimArHO ER-vʤlUd:p8#nP_ԫYӿ_U'#};Vz[sRfӕ?yYWnv~Uiy_Uw g> gMEe/#@ziw}؎3%t.ޣ/&QtQo6(B,ߍ}=˳dvo#w@@W'x;OuTw.sӕ6nw}ܥ6r l ]XE˕Wklr8^|9GܷV1od YYז_hW,B՟ȮDh^ЊaَV+ga_Ri]u/ǠVzNc).͵z{ҕTwR*Vݿ,( pnT:o?(jvw|cӜ/m3J0kbc0mzȣos|*٤bmdSwJWu4_z[Ia1{i냖?ϥL1KG^Wә]{-bqsӇ̿wLqqi~hxߕ׿^c}|ח΢5ozDMY9s}ӻg? {ym Kt>U`;F>?Zyoi?:%'eG;eowze֫3Oii5ͥ .6x7ۺ랮f]}\ꡗ8y?;rG{TqԗRhWnwWHNs;F\0*}NY--譻^/UygV5L,suorJn<ɑȏ*7n?_oUwfϿ԰HwUSH˻nN?ZOvvƟ2ߺrkv1īǖ^fmhbnY?Ђ/muz;ze:VD{V3UU|7ެJ_k+0n?}uw4y)䐘Rw szp뿥1ϡF s.vy<$+S4}wh~`3hשN~g`~n?>{3U?OW{rpZY_вtQH$yMM}4}B4nli[arJ|n9Kw| A?YG 6wYƋ]]F 8;ó6kO0dmݎۛŞ.kyR[O>N.{1# ,p?{l?u*GZ$32G'Z*{|iJ0ͿGn8v dn~5S_nw9M]}jAu/̿uiF-;*؋{)}|*P 3?v*=OR,(wVoksz|[[P z2K_|+sz|[[F[_ףI$oF<oӏ_YR_>Zh&۽_C,C2pzkԌ[3qwr>vT0|ԴR_;%)bȡq{ⴄm{vm>T+F9W\t0o__SPmNV~%f/Vbwm? RmAv ?֪2n}z."α *vg{6Vo]̈~O EuQ-R.KAm]۷ cn?u|2y%̔38\HryٵpY~v:SiϙoLTs7fHpﯓR9[jl,8`9;kdׯ}U5[۽qv{\I~y[oԔ1_ 9lk_:$ޯ}[~ $r0N?߭j}]|·H%Fq~U]\CN]մV1Ye,ן?b~3arb><9<*v͟*P8?__ï>ޭ? * f!YK?18nWZrZenz??").Vا .\i||담lmbweXԹw: ) p %5m^t;͑=ֳmI$1 m򚶋\\S]KP<(o -4)6Iol6%O͏Eݜo;G `xNOtVgcI@ٿ=f&>fdɠnIo}IdPXFBcr=?2׻S:( dpON52?șK~A.9y'ޝ͉+ RCT0Qg*;{MU[xGCjc+'́]p?ں{-A$k ZRW^~dI=vEW1@'?S&QiAHl_Um9n?AbiO 2N8L (0&9oߨj{4_Cp@o$$_YVK^2$snpB˕v<4oWo븒;mqyNh߯Q܃#Am/yՇ0g[g>h1w}u׍[ 67/w}7?4DN-Y2)rC]c8w'_RD d}?4J\F<2弻0 v?=(~MZMOCr ??m&Ϲ{p$_軝^>uQ:bnWr T}[ 7l.#)gemo"cVSk>#EU+o3sÚ/=:ŖTEI$³b.ߩk(I4~gTDܞu]a6Iy]۷spFݺ?C˫N]_{B#|FBF%[q_z֜-?S׮M /X&S |ʸ^+u.oԪRJ{קMݼ76v@ķ-?حR8=gPEac ۷6N9%6uἮfy3'URblպ8Fwۡ|*l,N#^w7)δ{SNiV,q"忋ˊ'kmi{U)V ?>ksu[%FFUR@m8l^?W'?˭m$]Sd*W$rw}e|Rq~_׻9$vx?ߺ۽= ⥽ē{Im>c1UZBSd>k;1m}|_hW巫M%% h);~eܿnx߯!N1q Z1E۴mVZt^-|S #T^ܾv^A_3~oߦzoĨIQĖElA͟%wcKž_y4aW8*_]n({~dN\m6d@wMfђMfv mW};d~1, qa}\/oF;?/o[CH;>o˻E]m;ʜ/]nz 7q͋G֌URⒽ8ϓroRϻ'qnG+}[fm6Mm-*}YTO4Ӷ9D/ō[5̭彽B%˯ף>usN ^jkq#(O̶[~iG?!?_g HFWi;K^7gNGb2y<<'Bo]ZoU-NC]Ste dOHʻ~}59jĬ5olMo#[EISmr>mUs|=:/5o9 զJۙ`o6r'g^]4hO(q|_vV'0G9~RJkmUzO3|OC4KO+!Z0ROf\;ktZ? I%ޙ̫b&WuJ}t{O3r~{+n3\Ñ곏 t$y|6tWk_vbmœ'SO{?iª?m~[eܹhZ(wĞZƙcVL}SZOЭI5 l,~"Z 8Γs}֒OakW_%kM815 l#D#7R7Wj/]YTMiI?/"{;%c6p:o3n7oqS_i4Nf~i"\n^cWt#/|+y7^=uzu?,.k[]^}IJOl~>D>T(]m~\avT\T$ޟ/# @@?~?֔om~]:}^|tlY9&m~(pJs)돻}OMO߁rz&^mR~]/^~4޺k Y8Va;skwuRdwo]waĕGSevӚտng_]?!Wt7 YsJv.\=w:d|AG]Cz~>}͜.B%~4:T g\Fscձ=:5߱>ߝD79!WG36E6sII{~*9%weKz=T|׾k %#ߛ-o+;?(!2E ֥+6.r{ 0X =ovfkIz_~Uۻog֑Tb?^ +T~kGt5v .~p珙m{z羗O?~DPVz[-c+}޿z;[Բz^=,n#v܎zRWd:_~VjE]6O?t[=nu:]{Tl^Yjʥ&g-SGϷ s"I$s~oo+N^Qe.:ﭮΪ}E"j5J:zb# {ݾړ?wwzVF8bpA'nkhǖ8riˁYn~g}q֦OWzuW|kcakXXyJ÷;-\.oy]M(-n$8uH8>_aZR77Q5yyVN[Owy2yfU=F.Gg\:r߫a)SIuVyK<F ԅ7Mt۬hmݮhbRVj3ѭK B'Gqwog}쵾jz[sBm?[Җ|iMwܿaIn\gyJ].`r}u=*Lۉ7|8G;}\s#.\??_0.y*#-AR~1G/O!;N>8kAoB&w]v׻ϼp {;ǽCqf֢7H`2\uoڈEéħ'u{wY \>PįM7!ֻdB77% İ劑ɴ~h Cr-I'kz{G<4!ISf>_o˻? b'}|SK_+k_U;?'.믘*/FQ6?7~unJTuw~X^ xa)-ޜMg2NQ~`~+Y/7Nugԟsd#~L!=}/H<w)8{?Q型&`*;9M*mRyw,{B M=3/hzvX~o|]/y; Ǘ﷭b 뱲I;{w_ִMJzR#O$ l*'w9> E+{UKS`3)n3WxʯF4-#>$Er8f*ꄮTr=fݭm:P%>e#o:} &=jTx^A$;eO>gַ~}ߪg6"ik[̙T>xW'ߊOO6ҵϸЪᱳ'3>~;)JkE_ B-}w,R+`wY(5/w;"k"&7lrz7?y;;q1^i8Ssma:*r5mSbdd<oSH5̖=ƁP[UO?uk+%9O7 .W ?cYF|+?Ys_Nd+@Hr@ޟt[ݽ_3޵+/(mYyGm)A-zlH7 ă~o?ZN۷v mRˆX0ћHnC#OnK9%r9> } YJVu}:_@Q9.1;~Jvv_;Ùӥ9;[y]vu-o}{!uP; J˟]5 7(C]>}v쓱:_攣nl}ӂw?t~ + IGyIC ƪ(˷ݿQ;}~Դo^zue`}'_[zу̓v;?~oYruTU~>c0['/sװZto_4m;]F;I[#o?kVI{ۥITlIdu|Cgo62rW87͑^-_ T q+PֺW}ʍX]-?R0`䟛7nm_2MA8/rOB??-gg2V#P#|?kf5d?T@ASvsui.^sI-hjT6{;ˑU*wiWk(vC _3N1['NR{߿RВ-u܉)B:ս}_1VGq?4־nJ=F IS=wU$-(IDcPp' }I֚j܃b鹃GX=EKt|0K (ߛ׾kMm?"4,~\wޒ|Rk2E.7c$w'̗.c- IoSץHF[p2ZQ_k/_3J.<]tH v Ctf_ޯۯ_4e~X[gp ~} b"Û֦qIk; 2^~c?sPk}=[3p7?#ٹz)މb# [}DrQw?Ǩ*1p]~šݏJWH1dN $n翞IjG~]Rqq>eU[wGMzyym}z>s9<+ɞ5;D(M{{Zn%Ϲ [iu(cn+FxV\ͷnww^3JYZݣhd5xջo͍i4p%qQ_1gmizk(J:ۧSyl'PG~\ri❿&k%jiuMvWlcVJwU#|͹T ysNIz};MEiVoYGk,vۻl_k\sr)IU=ܭ'vEvBY$忽zW$Xiijrmzg>O f?ֹ;Oi Oލץhڌ[1 ]ˏ[s}kOjK-zӷ_=c$oca R<oZyejΪXUg{u q_-UXN Yg dH'(dw|y?_ZjoW)M}}zq I/cc,۳[Oӎ[g#M|^zLH+(p܀nʮ^Zgkw:Jyj߁Zx}L%6wYw595xDm ש#-Q}ߛU?wXg}?;_riJLܑy}Ⳟc'vt4%nO4K%C oC~s/׽|hXm&9*TQq~o5M_L 'h$FI n뻽f]:} D1Gnݹ\ם %ߚhIn g,3_{v4 }ӷ+W+;VeRnɲa!xWU Pסn+D .z}TRQ-Gnc$dVsvE_6 ܪO->"{7_}G' /*M=h{O$6䲂T!7P~_֜b 漺kg;z" nA~)I?WZR39\/,})Z3Nc6B>o_tG^"Dw n%B _ȉ>[[{NHTg;/eᕾl_Zבy촾PU\[v[v?M]51^ X1Rv8qs\·3~7'M'#9 wbgKҒkI[( ?_5^gY2&If.߽ 5_+> ʰ?7_Jnn US~|+ʻݸ>Ry*0f_L`ۃpNmw։ֿ%TtP(vcoaAa#^|yZZBS:t$kx[{bׯb%eaF ![9_l9G6߭ﰯu|Y<6wrP v(ʧ7}kyv7I-6TL(1T5/RWo= g{/xV5$TSG4UQҢOt .6NHϷ"o׭󰅁&ۮӷ:35r^b۵nwcwOh7=Piffm˖ܯy_0㮻ߩwڽ̢3!ٹTyw) {hZ=o>!9Y1|Uvun+w{>K/ǯJXۃZ[N}k]=>~o.Mw ?+ ~79{U ?=k]|sNR}/~0{B㿵iȼIJWz?]mԒI m8;^Kn?׮i^0-JKYє9.IqVgD\V||[1-V3pǭmWI$<FC6NуC|y_~&z/ۛqhAVڳ]_>CG2udpMaO:n%`TF~yRIƳmO[Ӯ\#+{żeQ"#2LߚsR޿SsMy#hTe;'T1/2«2n~o_Zs,$O#@Q*KQڇ +s?n{3y/MeXpz69g2'?l@C ]|ĭ8-ݽL_J /~vWX.|_.U__kG~?uέoܵsRXyZPvmo?5Uֺze9avIxṶWk-~ztV]́Xg{:__k-]yt?u[[팪}W֎*[ܺpwzH ex0 }ڝ oT֖߻ף(\iQ2/@c6['U=RC +~S_j\_?b2 )}hWRRW_֬G!8\[KnܻD|YimӢbF%I'y/޾wQr[|?|v_/5ȕ&B;0 G_Y)^V(v;Y[wX7%SrQ> Wؽaew;U5Dƭg]lyҚ^hG'}0Q 1|sMt%)P̳-E_#>v ?cڧ;^3U?0~fMߥdpFqzg,̻yF}ӾDj9]+>Ww{Ps{ZV#9+J>v瞸>^~OoP( ?6fUm Wmvk5O=zwgEQ;nkߚRg;:V}߈3T`=jk}XU@g*YLu{5I;K%c#ɭSs/gӹaYKrx?7mήVʘT@vvK/_'-Ȕ\o=F[ [N [2T щOͿg;EWz_3^z,cp?/}[wRi~'dkeߵW,\]F\ |8D݉ 8{zn2]/驿=6?pd8x]{sRkcz/Yf̓*>lmza5;oFjOo[$be Yy_enןjhf^ϐ _}I~Z i}{ۿ^^hϹc*'p[s~}!Nex6W RMvFl(ך=3 ihxl:Tw}y=2BWj]=Jdg;IA>]JnV}M<IUUSG?7^sεQϳ5t> |gnO?\*N*_߿J\[^ȮSnaaz|۾_yv߾㉗nrÜ~z +Λ]_${ʸݸx*U=_ZuUVH*zmc/ߜz<%oO 1NHݻ_?Z3IT(a͝ gոaV. ~]Gls{-sOowدuǒCg߇O<|ׯ /4鍹1|u>W:m{m dn_{ݤ%SMԷ MvuNhoO^*o~C"FoL?7z>RW}ogt 忑Si %2Evi*U>IvW'tX?ΤȖRl쮻m5D9';yt;y ߢ_SZMJpx_zn'w_y${ w~Ǥ n4d'>h')+"OғM.6b xϠ5["+,ŋ`suOA2MZI"2G$_N?rgϖlcs9cCMň_׽DgeQ뾣uR#Aoϭg{3E$-FoJ ۸$sGr0Q3XS'Y5$8ݷE'Z_0rKs\"0rZ=Omrz|dVnp@.Ip}?\{n~~{_[Vܒʪ#}{^;KbhvY(2|1c}o>)5TE)P~?Wߋ0mp[H-QBŻ?犙G&뾿(#2ac$mOzJLmV8[&*I;_1|܎IoF9?U n#'{vZ213"F瓻۾Zg<y%?+J[j-ގILj[կmmK;qi2JemߘKo"ܛ}LUyGgֳ4sJ^ybAc|7;>"s2v 0vmQ(V$i72|nuoM6~inxEi=i˱$z6m jwLVUgy|~NeSS_.ڳ=AO]ԣESVmY[գui֫)oMOS]PpETګ)QӕkXb{?3]U|ݪ0 ȿ~Uڪ63Juۿ]sr$ʪBs}ֱ|neoH->Tv\7>]|*tnAU9U}=? :Q޻y]N%B.(Uz2w5<ʔk\C+!Ī?_k*MmZ~,K8x9 >c/Nw?23g1%#Ä]~s泌__IV}խ=EYвdFUeoǪK 8]ȼ ¿Ϟ?k7~ktխBmtQ*ͷq 3}Ѹ{zG^*Kzz_3XHF㞟/?޹-[o>XKGk}~c`?Si{]J._(s–?7R-Y߾"d6yJmvYxGH^=|D;6ݠ ֪2I!o^{odmۗ'SOfSPu՜;fG?0;mē2Ksɸ7[#˸F7;r?ڧoOWt* yI.xuֳz~ (T}+5_}6I6f]>f?/sq\믮M[O08_S~<ҿ]Rvku! SV[fzZF/ݿ_NVwO72Yp~.ӛ^> #d&-A}߻?5/ kou/h@;P,/斿"qDsnv}ϾsХ~>8>](] ,?t۳sPhܶ |mB@_ɭUᢺ߿Lo:2mnL@GwM"kYK/Nd!F1?5N?S/\€}7˵g8+ϙw]צlmQ MZrl5 \g~ƒ)}w~<دw ln'U] io2?z c)*dRW|_?s֮YqmVv)?4^i|*u,_}ǯj䒒lR1~YEPzV^g(uRe.kiZLڑnLJIuU^ڸ=y8I_{;[=B8^{5;y1:=姉`'2H.qy|oWOKzwz/_م|%xUPdwOmȌ7ƪ]͓ l𴊛v3<OifODW&IKF+%̶KunmOz^u\ˤ"fJƮʾeĒ2BHvO좕z.nNVk;MxRQsGwi7=φtMzMԝlo6Tn&r$>n޼,¯B\ӊICkNm}ϜI[vw~ůuw_q|QYBkػvtTs?<5ZrKX8sUj%$_T%o+>^Lc; s.~d}2[>ۖ,V12˕8WzI=pmr1,Ļz? lI7 y@fdReT`3shʟxߺqv_j Ѳ n6?{h5¾&4O'1uxbFAVm M:7. Ż=h xZlv_tT'(V1JIU+I%.o' F#[[~kRo*\]]Bnu$fnx{VrZnޤy!8[n?1ۻl=iZ7拴^/%PWpە񬣬};yR"-" Ż=78ZIjz9%F)-e+ֿ{GSKہyݓ܋_ƚݡҩ[w׿sz{q׭F\r{)E2CqrA ǭQ 8˖Ͼ_ rF9n=[kNi@~F;d?7>ҕ݂s嶶_Aݍ!n@ڿ4[k{Sڷ_^mi`0>_5%F _?(t=v7K^!E'86NsqVץ%J)[5T[vN6*z^ǖ/k+zpwpv YS[$6cf}{[j@qw;RM%;@={ZrJiN)@F?\g+LVWmq% TN)l_S)s9O]Yܺ9}^$عNO~dnOg۽=}~m -]܁ A?_W~';J!vnQ"aVD4mM;KT-q: :~BJ&'];ts[Ka@%B~^; Q/m:n=mr0MY}P,rx<"$uVxBO7W^ϫ/Ѐ͌Rn}_obj=oH)yQv'}Q#^zG$[̻u^TegD]7}@gۈ:޿/Z_֧;]rA"cNͫ;i~ZHÓ˞K?_o߽jV]nБJya9ldҜQ(<&-Wߑ}yegv?R}Rǀ3S|ܲHpJ)/5[[9e̝-Yvr?7T'2_ש(٧EWW#x {.J{}U Y̐2e? lsB eKt_ss ^Xb9I\墵j:v}IG n= ?6nԯoN?e*I\ssY#5R[?.y ?.ߓYrKmms=+YN߽48+;gX5̛ 6'Nk7Q_﷙m\Pq'\/?:6ޟN0ZP/̓z_o7~iʬ[g'O6i=c,)i;*5+gڀ܊zw8'olrP˿l@ ܖoǿ5)/tpUIsgwon^.j' p@ʟ)]r qndi%9zq[H2X~n㟚bv__8,~RpAl6Ի-#j7&moPX(90Sr{.K@>=;-sTvm/TuX#.2#w˷?ZOo9eJN_,@ag#_VL]l\ IPݳv˻:lt*)% YA`T9#j߯Uo˲{_xo̓g?_ƫhwwتjչo/ӭdX^W=Z_קPϿQM*Yʭ?ΧWծ=>VbPXg99}-9;/f79O\*_fU/7.ma8;rswXo^Fj3.^_7oEM2Yi*d~Ur9ڊO_?S`jr/]~"G̉0T9m[׿]w!{{X%2<Ȋ,C <Ժk/˯~#IV=]#,lj#U?xE:).G%1.GwW穜72׼=˶?4۝WG*z|[=|ǧ,8s|Ur?F7Ne<W[l˯yvş'!6vm[t_x .)˦[So_1G,>ҧbet۵K0U(EeKqViiu:!QTZQ~O.&QQ_ԯ~^mL7v;>gsEG/NȮ!}9*Id_ε+[|ʧM ۮE[ԧ9{+oߛkn6a_Xk%PL>atp<*婝w{TtVa[qM|~ݿ5ߟөO [+,BAݴ)[i޸?g_gLn-(1,wFUS&s}yZO׷R%?Գx>ʐyʆk^=}_Ew{s/sxrT'w͚'F/_ש4Z"Eܘ;޿s_ӵCxRV^&$-*d; wڱ:-uOmvdTeFdgq_nߌKQ-k*j.?sxpn;XBtqR_﹛vR֋jFV`Ft熭a'iFڭ|}(Y~NQ_x_WguZyգ(]I +*:/LW %Y^ufK޵{q[ZCQNNw]pUr{ w:ow,dc90=vn)tw!71Alu|yM[gmnvyo (YsNOƴR_wsI7宺s*a9^Yso?GwQ-en|cnpYrq.v~rtFG_Ɖ!Cs{YJ\?4Iݷ1rNH;z5__wHц=?#gK|Uɑ7|ok^NW_vq7ڪJ᷒v5߯sx%oz(KU>_Ϟ]iJ2i^`jwF93&suSzm5`f AQJgZRv}oA=es]Ew)K۳Qs#g g'?m)ђJSgIs]o2۠G7}{{b{}tZfUݑ}YN)Y=_yJݾ]|?q $vmpW)KK˦ߟr[y|s? WgEE:H[v7w=?jNjRߍRAfoM龆+O8s޴ֿ洷v5mIs=goǯЦU*N Ԍ`<".5# ow6fU{Mb\3o~nƹ\.}Z?_dv+t?z|zUIk=J #];U_jԹSEߪOL}ꭹD!k,g"QWoua4՗}v*-osAݰs+pBsjBVe)t1:"zuq~bNﻻQ}_UHq^!'k3% Fy 4:~(A6~\}~kH4_IÝ. s:Rz-&ѿ?ЦnUd*Tg'; ?}٪JW_ĺ6` co9zQrGRip_gPk[47gsII._ڥ8uF/c?8F=fE;`kKU Bۗg^s+XW켯IŻ+6|~dU{UPͷoˏjS"ה׷m)7~PUfvK?fw_v_-潧4R2Ulnv7ShI츻5wk?zDKo & mV5T`vKuGIkLc)h9~rd즹ji>[` %N DW=;P뻵v8k?~}Q6A ~Vǧ<&SW'ڿߊpʂ<( G$uߟz urۤha*wmg[S_Z[<6.pH7z_s9KwVm ʪU[{vke).j.Wܕ'i0wk1?/%Y~c_NSZ_N-zVt\($3?._Q2nPӂBe\~zWJWv1pW_ܽlS$N0_ߧךʼZVTDbUw}̫uwz,nVITul{X;7܂G}H>DOd䝭eS .DNnվoǷ?M?_Bs) t˷0Iu+|3YSSsWпya7-^u$iw.)+_\ն{_sForX=3[?N_lA8SO%)'zשQhB\xJW߯s鷾rPKqӜ?i~߭!'M~o^+m=?\T+]=~Qy)c==rܗnש <R:H3DX.oo^˯m5n+׿^baۿo{-ϴ) w_û&Redo2ݤA_޻TӋ*..2IPOsgo}uWU r?S4KOrck~14m<uo+rԤ~}ws*PV{) NϽkŭk>F՚$Wڙ ߛמ}MC5z/v^}oܢH[iaqgccu8Ty_aa ]vNM(~^o120`%ARs?/ k.Y'ߧJin}8$amve76w;֛y+^YtoRH#pA/z\ֿ빌{w(ݾ(?{~_ŶOy_S9ˌ,y_^4#sVeŘfe(_KeUn_3|lǭǿWs+gDr=;[MG$)@ݷMy{xw75~$u$`y>^ev_>fvoS7VhM?^dV6[: ssu~_muwfT29/5EƓo[| {@w|JrovW7/[|ʿeI7]!+GTw×ViUAg?/9?{VWoiFmyzyہw;|q;XI=mi^f͑b$m'[=kHTvJ::QUAET .J׭y fUņerYY"v`唆\'3|>^5)r˭ɒEl+!SJizKqbxwqo;p# )?Ԧ{"Alr_m_wp{'h|?쁑1/X.[6qkVj1` w?o}wn*:rIݑyv"#1;# tv槒=gDjIܙdn]Pg; ݛz{Rcf_'Q?6p3>O]pUw^o&ݟ<|$<Ͻ%O60ny֮4co;:q}ky2v~JsJZYlY @#UܻX}X8NO.jZdN,Gcz9;>f*Q_9ÐvB'>}2{/ma)@n c5I[[D+yk?(+tn}Pt۹Km`wc 2?^*S߶}ʂ7368],?Nk2֖Z7O M) =yo~fpn~l6ݡrWH#b={*~EcD2%v+`դs{SѮJOLoD՚2qI_֧y ۍU5u~{~uiko=gu#9aNy?ϯ_I4wEF~wnj'tQZuTo`cJt43c?wrhDXP1?JnCتFэ<ԗ$: *H\(C*7|vR7|9hӆ?wA27RJ\#nt Aun_4ᷬ|ciRWQ[ק_pe'T0Y3a\Ìj>fE[-<Io>ZrrV߷owb pA__]?^e+($ >c# ț'?/˓vz?g@[wr0^;ހm-L # {1&Mt*q[g䳁0-xR0P˟n?e6ϳ %FNFz/$TÓnVSIbH#E褃q=E6g)%ʗ1˕N`zn|CMn#.k/,@ı™og~r6uיt2\/}v擔Z.¾#cp sbĬX|ܜ nXv?~ן$(,S&Lkivz?LGq, A1]\Nqo{d9c;G[?u]?|>=;ϭd73DJ!mw)u_sdK7lc)#*[G_?͓%~]K1 0vq-qTn.̯g87U~ﺭz~ vKɭUv0k]@ďcyiqt`nb spm,?wq'ku[7̷7Y ?k8-o5ke2шAn?rKʥ{|+No y[S_bH*Ƥdž->po߉Io~_2qIBFIDԒgitX%chIQ~oΪR{XvC2nIs[:2r8Z˧[dwy ˘wϷwV>^=O.|M5wz[?7o?J5+}Lc vv㩱oKy@]Krj%՞:>mٷeko64k yqW/*G$*Huw6HySTr1joUf^ei31U\U8$oH5%ݿ6Vga2v|4CשBhNRG#աq;-ë -STrY/\=uwj,JC^w֩EyܙkL@3HX1/˹s~A& (.|c% 2os沔wr^_6eXoׯZC9^e}TSknX륧;;ɺ ]',;ioyE߿Է"\n?.=Tٞ hvB`oUO߾M3y9'+iJ:ʂU\/7|~tSwQ4[Oܚ5߂}>zNq11G=jާ}˿aR>c 6$6WzߊjiOĔP˜q[u.)sT[Vw{y U(l:7?7d~.1v7r:d) mB_~} d_?T{}O֯]fʶ_gWP#?;~o[f}W% {0 >o?zsvVk aw_V_s$p2vu?ldT[R@;I^uR}6U KVw/_&Upgڍoz}w5س Gh\eNtI{vi'lJA|Joڳ_E` MaQVVXܟ6{s.Or`__SLZ'(l3/zB_nϷM-AY/25ML+uosҜb2Enu?j <>Hu$2IqqosF*}DpKҔyrp['wNqźz5Wǟ t>^ L ɟ>c* |kcakʜy9}.=Y#R$EvlGdXŷ eٙW)I^M]Wc {YWgEx^Ӵ uc%Ѣ]տ}#+jc”#n;c0,.VدMt"O 21 x(1j7:b?/-Ҍt{\[>w#c"N/nZ3XjwW?6He#o^%ok¤9N2]ӵ2K!2?g ~ ~eԻԭMN5ܦ&ܹY)# $qACBL Jk5,kي ]#3:m5NtSm~vO3c)`Z@۾mye'ɥ\bY\;68e}wןJm^hQ]d{$Th~fH!q_v߹՛EF6G}JP^…(zrǺF*|'~ۏE~{}GHF;Wօ =M]X\=w܍;.z61/zU$ȟjxDlgYZAg_,pJ$Si_;[/&5wu%In;mkmNBv~/ljwv1v U$3ѿ]gRF0pF@~?̞E;{ƤLk((esCc+io х!VrS~ou_ϧ vt8Sg:S`ҿO); ԟ _kvquqcSc5f;e8 ~?Q(ۭ]E }ﭻ,n1vގgk~:BZG~sHVXVqVs[m5Uie<^N5Ԍ-#/ܧh҅4;_hO_{ӧRRtYoe4ח[Ø<4h/A[m=k5O{yҰǐ@-ߝ"^U}_\X" O6w/wy~9~t&_R3lcVw~ϳ N 9`?.ݪ99Mm[y K j|ۦ*mۿh*FW~g&u*n~<w43u.۷'p _mtYA(߯j/2KBQ1ۻz}zI7CwBw>)(<9`U/Wj-Y|"A]C'>&֟֨kE2E*vg<54tb!}[[T!v[4Jm_qk{۫<9oHP`rgOuoANNIs~_!Dh,R~ocG?3抜2e `;_|ɤf}9W}__Cv[tEFi~d4c~1,ye\7Z;'+~tkً.Ҥ9b;mB+WkGkn ܮ2/8#OSYo-;y0ȅ'O޿'tO]W7̾Ÿdۻ=H]=tKNUpſv~Zon4k_ENb6oWMߧ~m?&_do~g{UG_mW}9ܒ T~([PRXrNNHr<KOĚ;`m`rL=353_GA䲒N0x+~k;Y;nk9Fq* q՗wӵh ro߸6;F9MwW$~w6J8ce2vkzY4[۸Tlدy֭NzԤ_ݾĎ!vQI_aRZ_T]zNrx߯杯:᭹[2FUF03_N=.Qn*]rr~dݻoךo銣n?;o)_U?׾zVmI6 W9PJs^p3+6 26ElmٿQ)6ː>j ;_r}%m=_[@aR8$޾zN-?Ko札Hр8,w 9FC@$43}{>wKpk-b2 *4>TթV/ϧ]7/-/TXW|%mN)71?]ۗs\ʭw?=W4UJ i?md 9*mM}?w}gʹ~ ~-x,BUsV]:Tuhw*gOsy?=~ETio\:O@27Wr5sl:KΊ<3 'w؄IWֹgzu~;?~]|zl-E9 W+\"zA5w, ?Ǯ6sY60|Y? QE](Co'ʰ/ k^#&9 +)¸EB ѫ̗a}o{_wok&6ί2noYv=!w=|a;s4@/{s(%K,+z.ٛ fRG?/{I})hui2H3tݵ۾֝LVm-*xyo맫OEd~UK}̫_{{zz(v~GEmj܌۝jji~vU⢵N[-_FhǦ!/ G˻V/uMS,78 0~m4刪^3$FŞ'x.pNosKFtipxH x6z&;;:]9-vy"Pqww=?Ʊx=mB *0o{[GO x}ثm,O\{v3mqT*ߚwgm~oM={&6@qYsE΅$N|=aq{uk) h"2G9ϟ_ZՓ"O{~@hw7W=Mjzyu^E%m?/lDZIo:-F3gjSm}yW6dflkHRvWSi1OB)2Xt#1[S'~9Սzz9{˗ ?ϥtITqONSU vnn K3>?~2}ȑYl@(͎X߻rj%v}{Isr?+Ne°Z]}-O+w܇ɝ$ep/_^dzr˳"ː7eٱ|WZFWB־vr\+dx!x׿gÛDB]~bK/?{k!8noAv"mJ6} 3+\{zى%-$~cJ.?CUo;t{m>buz|b-_+Mq#U$<|y7tݫEuJjϷ­I.ˎ~\s{e~f+[[y%| (6gUK}LA+L c,Nzdk]oyyq]?:a`iި뿟Wܪ{n{VegW=wbL&Bvכ96:BZ&ԧk.w1"nP9K\Gֲ̿p)K˯q,S1`7uG$ {FN=}w\}|% &\ri?^zR}n۵{9P zs}j'm4-Jmtu9_UewCo,wXޤg<_,v_}ò/-0{>a(4tuQ0)&00~*?.Iyq{ y_\v_?͛$n̡+aуe~.]_Sӻ^}eݜ0#d4rW}̎XsloKw,xՁ|cpsi%WhמwǾnG?< '˻ÍߟSQkۯ]m&.zuo jZd>A%fFª|6l鹯o )\#n?o)BQܞCpH1+Ji^~1:nValqco+YwnWu濫$؝?>Zԥ^ߧQoA&NO}>RSo 뭻5f!Iwnr&)ɿN-,l'wLUs*ϧ>)*1?w߭'FN9ݴ.WP@]ɟ/ ?/c~nts{H%H'^_E9_jҾǧ}?36.?*.ܮj~eE[V# Ts_~oUo~-?bq?JFu)8nϧ.UQ(eەc{AkW,ी-Wwju_h 5T.6wgjTw?vʀIpvݞդ'UqN5zVSe}ío))Z빜p޿d.rx9\bۿ͠+1'% #nuUSvO*O%$܌[?7OFZ`Inh<8'?zgGi;&BDk$:uPȮ?ԍt:wS{^-8rOVev3[ിa_ߚ`Peorw1m[H,joq U{w_OG+|NoGoĀ@͎7F-+d㕝JQVrkX[mŏNŝʭs\WNbr'.*C+~?ww氼ϯshRТ<u{Ӕfܑ  Օ{mڿΪ %_g5U7 + <|sI_:q^^o㴒Ebwwd_~}E I2WRdC|~U4_39%QY?]`6ʼ=OUOSߓZV :7 'b02sD7ϡ`}{kEʻ'# k-iorߦKn~pFWvz~8rKU{>ƛֶbM8!$zК^f*~gV]B}ߓt-;;HdВwcwuO2'?3EU7{mxu?w}:~g3VK^H<81_K/veMv9|ߟ5,o{^I[ei,OuBq}tu)+m,Lc>X,oSQ{K-Yk?3gyT<'_ߠVd!OC%c 7~U?IlEi*@U[ :_wmoM0{n5BQ~\27_) X'r azA랡Yr;o^ї-ն=>Ln9/WW?1܍; j\~+_[q<@d19'M:B ]]ЈNŗ, sWqzY>'ԲӨPŘQ==j{'qʔR8f#j V<mֵ0Il:i~n/J1w?7k%k`nzdߛ﫺5IZ_v5樓m{?\V} O\Ur3ox9B e)+s&_n3ʃ_Oz{o_UVoT/Blw)ԓz? ۿ;[ ;YkE,A G<ێ?ƜgSz;QJ #- $e:5?;*~.c%K e>o?JSk{)/ѡo'W+L%l;f e-'vͷr-jOD_ՏSӧćw+(J\W2\-t\Rs|Ď@_rzGo${m I3nݷ4_[札-Eav!}FIK#qw?4֑[w^_0HA7ˏq_a+Ni*K> Vy;l_CVv,əi 0rhPg%r͆?ޭԓ2U} ךv_!kYu^A9'x֠Ԗ7c2.vH'f}e;˧sQb<烓 EL':\Gd`w8choMJM?pgNJ =e.T]epZWe#[ xYUoSvqR\Q9@36N:Sks[krkѝ+cvU穄c{/Ёw_ ˎ\}_9N[-͕p_α70o5#zD2rN9_Aa}^/ygm5=_;;Lm?zz%JwV_;Á21qu-4ebj:t!@nq~5+G,NprWnK]mO>-;߄j]x <\d_T6_k˜(ӫQh[+u^mug 4eFnبM߭M:qxnwm/ž?7URBܫrݿ[^]wӯs >ݙN g~&hi~e=z#4b#\c7~uxQMI_9їW_E7|!([yv;d_V%p]Yb*.TSѡYݣ+1+[~"tkGi4|ﷻzWG#]>~":{f .emw<Ʒ8I_SP}4zđ%/ڽwgTcEN(;z'Ԝndp cw.Y8nof^z}^w*F' ۣ_wc.MK~cE UHx?Q*u[ ϝ?+[~lzJ3bE8?*`~>kEͼO=<ԯߵ߰sy-+Nx v˽m [ϯ=6Zv_-1Tbmn㒄"ݿJvVT!(OWQ$}ϝpwn_<{fRK-@Uz1o+z>rzcc G$Ktrq7D:SG n:?YRApmŷ63ۼm[gMl-->BH䏕~_ǽ)sG#G^gKKuۇֳOMO'~-_ĚbŗuEcHT;rpC5訮JIm/֫ϙΨ-;G3D ج 6I*7=v~ι\{߷c2Y3@>]kW)w{zyWKqvocSm?F~>wr>78%z/7l[8\FkꊥOJ ip]?0tp +?Zi]ؚ  sՌnoFmL*vu9 2 'n?>Z)DR䷨پWnBN}Vzk^Eg{>~!<]ڈMWM=n'KӦy1bY!HlwgVhxW~实oQaex>yܿ/̬?k9G/KѸ'qw.r\׿2";+]ۿyw{e%kv \u7go5\6wmJ1f@~,w?~;EYVN!*og/YsAQ'wM"_7`;K=׷'dڨVS5}u)l:d+oyzU\meoK 1=73RZydMs?1ԫc8ǭ5&u"Nŵ eҜriw5<0*wgT)摫^;,Q108C=qW<mz2$k*:#mru{N,[Tveb <M("}ܥnoZKkG_ɖ#̸f0fQr;ʯ5-nM;^oѶC{BBn{{g_tMȼW*ljSWOit~"ky-%\񭇄oO*J~ߩɩ9"e61~_ VUJ9sSk{;j0w׺kˣh߀ykElĊz4>l ~i#?qg Vԕz0ץ%u~XO+{D*r$n,ZzˣX'ƞbKo{H[] ߯88I7x--yWUj^wny3Oٳ|)c{ k̲yhvIHآM• f\~xƴU[uߓ;i0YeӾӹO!]ooAiqoYiuEգ<[d&jXWs?\Npnu8utvⳎ 9RJ1trVZg=g>gZOudkd,2yd}>Z*:{4-ݾZ78;8}_7_5SEZΙh]ĘlH ")\;&}>[ZvpNf¦[Ԧ5k/M^' b@r[k?GZnmgk`N"H%ʏyC3}l$K$Ļ0 [~ ^ɯb1\E'k"3hoT.Pz_iiQݯ,R@FvexUcev֟9;7,]_ !q-7?"SI#i(y~dWvYFsnq۷m?3|z|$U#N)^]KI? yL;v[y1'>?"q|KU-{mU)a괜v|^>a 0{٬~z%ҏWBə@9:ue_Tە̻6‡}~ZO+${Y++{o?k GQܐyi&,p\%>ۮ<4Gy/BڦRޏ_)T;G]wVrWw_J͵o8e=u$E9qh'q!%\MY sSM.fo/G6r2X78ٷoԸo={.㷅C y#C>eӂKvz|2d`MJ}+ *>Oޥ9TM^) e\X{lVq.w5iT;H,{~s4M;[mLB+|,Yv;ck/Ĩ /?~S 뿥"MsC3tR۾mHM=uɑyMWNň0;sTTNnn[ԩJ^3_7*SKd+?_3o\;= J8[J2vtlzmWRD|}G_*2_kt$%]:7F*/9y7sZF-w'k,*r_߼ֲ{Erכoa.>2mVwI |1|ΔַXT'+_M|c,5 gpi7w[LԔӧdT9UtNQI)PA|`b~m}Am&Em6JO_Mu߾22e\o_riF+rOJU`Į8z?o?% (,vq31FՃ_-AzFM~q'pU`[ڇZzje^^6ga{sCS{ɿ_s0ݔ_rv7*Um\m# G_DTO ROX]8a 1S*.|ߍcS0G9lmׯ9~.2+nl;_Z=sb<H_2?X~)vr6XdP|*riS~b?͝42EZiW3$wr>o0~UGxCO#ҡЃKO^2*3Qr;'_ZUOy{=x(&}+,q+rzx~C?U[r'pkC{?)`^~*>pʹ>pUUN)io3/a˙Ѝo,G{#ߘr':"խ|u.l>fo1~"K-̅|mg?{u?:̿ӊޟ?4 OO3Ĵw5I-Tneo I''JOR2\Sש f I*?3,D[m>]m=@ou?xR`۽Js1j[PVO&PyaGXoGMWm>tLAN.Zږ%ok^ui'kh_w9w[ikWf?1 R>`[?nQ?6*ƬgJ/vNLp2d{5֛ߡЂM+nNG V,KeAVsnq%ӭO` Eᰤ?`cJodݼ;a_zGljڴ՗xkR Umo<]KwELP͝çﶅ4ݵ2yyzXЅ`+9/Ƴ$^E Om~1uNIR{lwBmւgw c?~viRR1Cofz/o FH@ѷWJ߮={]] [h'?ug+uNOԃhl8uFÕPmW9W?73l۰&8U ry>k8ʢߢحs!3nwRiی~*\GmPo )EߦżL>sk~ksMmZ~)DTbxtkjm?.pV!)$39\m:-]0)EoBvǖ̟?O,1 K.~;8=>=KҴE50yXV~w}MiDz:vhUxrntuF6o atIq*2OYwZm1$ݔ+|mzEٮIyȧȔI*'}2~{PZet?RSkݿV{(`H0|eꗯG9,{諞01Y;4}: jA$c;[Z~~aT!!Ap?ŴuZ}EB^n:<&ۂ~Os]ήxo~\16'ku£;rN;<8hyQ+)/k{c{ؖLےH90Uc˧72 lSђCr5f`\snU'͍U9lU~ֱ6^l#lrA 9{sӍ;koԦ7J9;?Ƕ^twV0[#*8ֵ߸&t s(H)Jj_X/FgimŏފӶ2ZjTeA,[9F:t_K F۾||ߩ'>ً$^Q; S;~Xkgg[kϙ]pտNVϯ*g} v"*<Һyֿq.X-~>M(zN3`⛾Jy!Il㑖^*싾߭\E vjp.׿ſ2I8L-~r?*dN۽~oׯ\)= 2Io.lЁ?#[Ujst߾7.;w ;meU ۏ}vu7_~V_~8k`s]P׵kO nm}~_F-B(K">|ڿ+filbNk_2À'tqʤUs%-vpۿo*{uQgcJW{~0nF,kӡӿFx;ycנ'T)5g}55m.+xs7^~"ۻsqwuRM1AQ}2Qy)?.27fwZ'[Quw̲߯;Jɵq{ғ䲷:#} 啘pom{]7{o"a #q;@{ր{WIW޷kӻOH1v9w_%{b6֊V1\ ]{kW*x>fr0:S~Zǚ=3)ODӁ7ֵ-]Ò]eIV%ocsUL}E[M<6.zq̽m-Iu4$o6uq,:BNF;}]<鴝nkYbbXcy/=+Ц޺9mz@ d{k[Sq(a^Pz[r-6O:c|VFэxe;2Tsn?<ı. 70۟6wY:QoΘT3DNҙ`=~oT-MUړ^v~mFOˌ}wW_Deӏ36qyڝ"_=~}`>c:`}Jeo3̵߳NOP3XN/}SUUrkk %  VR]7_2mJnnv>wkשڕ#i6ڏ2??tz^_-Zd^HeWn;MH]>[: (uo$i|_wvMhc-պ/4o9uV$PG z#yOBh' $%Gm}yQZBR{o~ɶI2Ww/?Eʲ eUw}(p^~\jEK),m+-m-_W暶c*X=G.Z+cB $_i(ۯ%c 6CFWv}v_]z}=}F orSv[c|?5\dBrV%Yi93*9ֵTUH_dɨ+V'9\wJ=?RrզFͰ=vkhrk׫{mܩGl9*) (zߛwO{&}H%vfQ&v ;YU'Ly9={ĉG׿eV2m_n[~}t%nQPYTſ}}kHFZq=kSb9 UfO׺S~B:B+ZֽݟNu@8*`mum_>n0c2o[(U[OՍ$` .0rNG\>so-ITZ1EG*xgnWk}?*)6Ӿci4Ҕo=~v9r~Q#[0xv:>k31,T8,ܻW~KmsZ5dӅO-~D~tPr~o]mȦn=z}g3aNX鎿_wzⶳ)EZyEHnw]r|1RocQ:j^^djlߡ_n?ZZo[U߽w?6YVn߻m:i߷x iC ܳ7A8]k׫YpujI},g(4>^㜮C'k*iYlC pyF7|=d؊Fϳ1ĶFv+xu&QC>Z2rz|6wzӗ,ɚƃrR]_W^B#~[ gvcWu5x{?{=orA2ӿ'Q_~r:wu峕@{.L5m'䒩u9PA/u.ڿԏz(U8;Oi7N~[ߩp.BY?n.Io-/+(ZVB vuj/[__]bIϸQpIC~+]\T_w3rk6 go]uo9`|{TdM!S*۶?};ϠFn;~sN:֚yı ~`ŏoOڵԝ'''Z2ϗC?&ݜZA%ի|޷I/_49C]}֜v{Nak~m9gTdڥ_CQ+MgJ'":8eL骕MRDs~_ӍH˿VM8N{y}#Cln\:޿J\=:}Ή(fR'?$3+9ҳo Ga(MYJrme]I@q'>I>B\$Srl2A7^ⱍKW 8_ֶ5boqD%.Yo.zV Zjz= UzT&d]vssƑbdV%+Ss4Me>fpK4eyvOO־ iiv޷~lk;k>#Xѡn)I̩eX>o;v⻱[k?_>5,N~Zi3E]ʿ83WԿդ}OS1^mߗvlh-\\>XYbs!um̼oSv߮VVC.VWzrum %Gjr/Q77L)IFQGY^qQ1b4d֏YbqI45k8]{w񜈜H/fy.mS]V鮚?3S/,,~V0'jbwq{owU{[y@ >~^hj/B2PI7=^z#Wez>oZ e9#nw}u/+J+KkQ#npkڬ<^k+`7m۾_su׿?~z|/Q/'pᲫsZW~z."Ős?_c?LoVoN^^Wwn_ҧOŧcq!'jQIiM"/OHnE>tGҫ-d3ԩbw>qčF5Ե XVtI3FT?=}kHWBIN+V}Y؉BSqb_[]쥒XW\$0meelw9SN__uiFT沲rN ?ҠeW/3nb*m_zU.ޟ,UHĿR6-٫[_]D-$`Rq?ZQٷ,m>!XwǑNߗV"9$]ycEUqIz3F}z_kzvyB pzhV1ݾm}GGRIϯɴc):ۉ?(%'{Ӛ|I6r#8*I;~.?nT9(1ےOS5O?_?>nϸL+=rnW]K)T,grG:|arG>T*n̠A}=r4RMŻ7̌3ܟg֑''+[}N@=inB{^Zݙpu=ճe?+QKmXuֻ֑?yDӾdcr+!grB9|7U>o8ibg/_ݛ(IOH Y딭v=I Բ}ijV >Q.M:?[|T@wrhzf1ѿ5[]䉣);@w|ۿw<ƜOOO,.k[,2H,’;Zޝz]ti;Wq(}ݶS̢_מK]VV/EIK0䂻/ϵT?J穘w}OG,_ï]K1HN8's1U./NaæݷT>c#p{lIYvnn\_7;OxZԳKRN?y zs|^[rOoK[O*GlxoF7*e^zE 9?<O*xVpf E*T[2/bb:'ܲtg߫~9v D?հߎi^:_Pʔ(wmcnYch s~oe7k:OdqѪzOC;5N`W˅ .7?rw5U(/;~_a,m읹hY_q\*Oݯ4mO,svt`^l7$d$>rz_Knb0IJ;VLm6fdmӚX*qSZnfO؊EtQN Էm5\ok=ez;l#0۷p?i/k.7Sv|jm"m^Gﲧꬮw&ﯭaSzU,XZv,NgXqoF_ ǞՌ=UgP[ߩ7N$[]_~>,I/?9mK0d0]ncxzYU2_$"~ZYFO,J_'N*moo}aB7RÀ|ٜ'+ך؉l~^ΥYຩB-p}xoCM 2J[%kb)6Rj)hR2|vXzeUQjRKh>ZsF[w.wޢdv#lIˎHגy&iym?kcRЛ^7irߌ}YUg 9?/(dK1?yy=Gzx_߻V4_;[q9nI>\TKvKR{Ć;_כ[=~?TZ?]qH*'ʻ~~E6D]\n/)M'|`̓qbHo޳sIOiۢ~o!\ppĮ6ԺJW˾,m~}:+)\ԩ[]#n%]Sv^7?t%RwE`G0~|I'wǽ5ݬb[[VOrxr|ғK]dn$7S_R1!W )\gޟ犉M I\If?_s/_y3ף~zD2m'qMzY;+^ۿ+pp0n|ƥI^j߁b6nzZ>F\q@?Zk'W􈓒 Xޘwp3_kkok U;[]=oGI v?/N,M4GzȒnUzP߭~Ԏ2*/dGk9OKM1V 'n=)ͫ-od6}1cJÍ?nVZ?:r{^U`^2Xt(ܻSo^]-'#,>jvwd Ol_?|U]%9e)>:CWy?{7˟W)Bknד+^ZL]w`傎m~k. wt?("t]_DÖor +鿏\RN~uJIBmY~oי7Oԇw嫺3V8$Fmt]^Ujq]v@c >k yDVFbś*pU<ZIrO Wr8?/;4ʮ˾{|z$ 7O)]~c[ݙWDyW]^zO D#%lc!f=} Qqw#?tNqoĨm8`|`>|~ZVKV]mc K>Uv]W[|:>UCB[SVq}oRI]HDbj^~vpO wm i7ݔwOҋeTG~rɽ~ξtkH+E$[7~ɽ]o15-\d#,=~+uζ _28S?zUݧwyÜۧrʒ)clUOíQ87=亮ɑddu|ݾ~ONzno$?]Bq)ǜmU]5rV[J 0yPOm|_BSVoK=<>`-~ֹK4e}{? Ȩ9x/5ԭ9oߧMZ#了wq}Y;;}Ǿ*cUj*s636r9''zZ[|ٔ)'׻oc\PY ?^|Of7~:^SJy-:a~o]ޗ}ҥ%fsH#>~*' LRN3/Oo2+t l҄*n~ɥkW]e؁^]z=kZ>g"w7vZ]j'摔vV_GZwKr=Un+!X N[kkjpmkK麿r$Urۏۿ+_N^fAtzVj?$嶾 r> J?Bp\~U%ލdDІf+w?ҦNk_pi=J؀7}Ri&A۝9RKqY&m?{KaX9p ޻Se{D76=:ozVДzmN5Hr_判Vnbzco?wL߿ Ij_ء8i_wH8`vsT/Uoӱ4V0Hq^+tq]+Pz/! =UkA6㵓֘8nI\IϾyӝmȃ;T?_E-_ssNNy )'-ʤ%{U3h*rR__ĉ;l]kvtbyy/q7V@ wnVnxt_KFg _oŤ72G}^mo슛zy< I^O,?b5([WX O8 Zk}]:c /y?b PqĹ;IWojywzat,ܐǒ;v6]m}4XNx||I{\{(J wzEU|u@1 J~aߩ'W~{m+Wo%K8`BWOw}ӓo]L}M7قKBwpçVܧ߫ҝ9E_Sԕk.|pPm ?O#}>~О}k6X2mOT$o%4˻laH?woZ)n~{^ʺ}/&,ܕ l9 {ֺV'w3U]b{mnHTͨbUQ1y}Z6a^wu~~Vcf-Z٣* 9%O۷tc9(ռM=f u!GŘ>Z/M7bk&s,^ϭfi/X]O낿\qSqF 1GݟS]>Se %w,[g{_޲td޿L6\$ g G}j4V]u(7{tYk:[A"1cSwHѿE_ΊpK_~"դ\[)ss޻(c^R_֝>g.nL[mʍw?RN)ky橽u.ErR7(+;z=w~"mJkvEs>$E7665m{ᄒN]Sz v1}~_jH62z^~ii]YI*[ TuWݻo=+/i&;,;yArF 6vNh_rorYvݻ?~<g6Kemx'9bI#P[Vmn,TN=FjI]ov[mܠt `#oOͶwJ/OR)->A8Q5zZ k\wU C?K?צRի߽!1*3;gSIӺƦ[^qldm?N 龽\Wi_euSݍ~nުtk^ km?R$)`oS+smwỏ,pq#ooךWZo/f޺oh P}Vzm^ u\umw_M[h99kӎI;|uQkʟ~@p>P ;~_z~?7(g0e[y3Z(Ogbd| +m(  m=>|׼f{?wm}Rwo9AQP,|mۂ;s-=;MoΈ=W}0kƋ!Kgp]z^+(~3k;c!ٶkOoַ~B^I,ϳv ̇ G2y.4`;w_y}%%|2jj6ܡ,~>GKMim6MbF>ۧ[?ߖ[vWYpw/?ZlrsvޠgwwB=SӾzÙ/0#v=p?/5 oFRKWȩ.$Ioo٫RV:z_g*ӷ_")cé׹Ýy_2/1˜9]뷽erG5Ys?>;|}+o ~וo~WHLo+n%wG7/ͻY6~O1{;1Hguv%hWo5_1؅I.Tmw+oY(s#v~J~e{WApݎGSʯc[)+w_܌#zQFFrrO'@lPp0̀_}[va0w~~s'ݳf%f+ %{̊26 \c9{i_$Βvw҂&'nTd_ր *~g*Q!rqY~q_7~aӥ z(+sDՔc߽~o}]Q6-#{ ҹe4r;wwsIݶv~EWY̿yvvZiw~yeG*@21Aurֽ.w(mޯ1krϵ*KM5o]N[x$Ӣm?t].jT-;?\ -6_nk ;}YN)Shպl1E2S"F b!82ɭީU77ދԼo# c?o|-^*i-`,Wo'])Z^}tKq9hBD#w*dz;]So e8l9`CmwJW/XʍA #-t}?Qr_7I,Kaq~kh˗uWk<ͅyfECvg&q1k `]I0cv-vyݚV^ yvV w'ֶ4?[} >'"FP yy+JO] V>I%Xaoϯ_~egks TSv1/޻g_4{ nII]ё16_mߦNz_|S/nofI6F+ )nwߎ~]X֑8BY(!D,Fvws>[V8RQԟND!ff,8 ׏>ovJ_ocvAH 'ݜTFI^o :U=?|(D’6uvws o~rO2v;8:ۛ7<ϕ:jr82>mnlnM]L*{&};f1|T4z/ͳ8ZmޡWbө;zMM UZ׸T$+ e}{WoAp6S~/]׵WWlFW-6;v_(Ȭ1 _(bž+J&}&6YI=2~U#oii ~LykXݗt]=}{|Ϲ~HW q }TT_?y<9#ou3: r]̰6|˷ _5*N:?Ͽ@dWF 'ɴ7~ERW?z@m܆=yݻM |5U`ŹsǧKUM42 A8;H۷{VRV{ѵ3ܜ럣qzm]l_w0s,do/9}eMZvi rI_zrz97:w_?c!8,tTc5]\.Z'>7ml4~%Nj/ݺ~}oՌcl9/U%_¢Rk/Wq@B20[?δIJ)RIw_N̳ۘpI[㭾m3u&2H'x'9'ʇ'-' 'n~Ю sm97roy\ơO d[iUe-w^Zd/6ᘱmus5[W#iwŘ)Qp{|F3gU.Ih㧕sa_4]^ QUn"jC'{o;rTwO^ƳQ_%kkfJ2C,O$Fnta7|Yc.p_0jr"*\+=k.:6 s~t 0~oensT>3?>KFz;~rpE $Qxy].4=HYqiq7 O/RMiz?)Ju$cN?}ϕJ&4LCM)iYx߇6Mٯ*sһi8:QA ,[O_Dcd]}W+YGYGcj-8̨V""c x9;8v$Q,Ƿ?eVishevyyG;6U??;G' gGRTnge繴\Z]̸T7ry^pysF>3NMӫnY+e187~v5k3_d\KZ\\CBof>'G RͲLzy-R__GghcV59ܩmVV cϦJrѷ>]ܮn_^zۣ.Ca3?֝N?Ҝc{~8ڿ"?{iU_~} Wgmy}ڑ4EvNqw'&1rz`>ϭ5KGC8Ǖ=~z0c=䗑e}?NmI%y=hs9Jrn׭1DG,;AkwU7S2mo؍s(#zSKdZDۓzwN>ߥSjrV"Us[ w [oǯ}'^\)/'˚߯q;+0K03,Vӷϭ3$8CAݽ.b//?吝sr4׳˹ ]QOr2B䝬/6\__nM2 UKt:;h}jrzzZQߖ!c>Va88S45SPeig*bdvY#P|u27O^kyC?V:.|O-C"14#~3g?5hP+6ew<_]KFm5UgU?m:LV :pI%xn)F+vKNŸ |?p^;TSm?Z캥9Fr{^r#kNj|jRtЏUoo&M|ӭ+{~k4C$^UHQ$jKMI|.Hwm/l.VΨ˞JڮSU^#*YOLm{]Mj&An>*=8<}ZׄSvΕ_1 Lc8ڿ}N&[O ;/Eogu 5c$mQ4r3 [~_XOE=}|_O B RNQ!g.6o_S"OOLUi_z#"2Y| |Κy%k6WD ȧJ my߳=r8b.yÝAk w./7HI U`ۻgִuZZ.7;m9w0iI&vUU~fۍQk_N~woe}}Yi!ܡ$aƓ&pTקc0K@yf.^b9N:y_k*ؓuofOSeT,ow//q5Έd}Smܮ:P!}{3=iJ >r 0ݶY>_m#Պ=:4OQڤKۉ̅߶Siuq J/]N..&~fwㆧb^:1+6;3&X{W۷'\>u4Am 3ga-?\3\smT~_yR/^mVqw]{ʒv߮ k$sߩ\r6m߹T$q'ee^rҳnSOTLn L?kOJYM'^Y-NA~\d{бR|\6I$^ȼȘbI n=jYܲw;vqqy>߯icUX;J2Y=}׽G:4:|ד:=nng1?}?zt**KY>ѽfvo5^}J7S7,*I z]΅F-|)J$8'{x{Eq3> <_ַk{fp~^ۂYBz?W=IvΚpV9=EpԬmҡfQ }z߫_{ms8݃}z?r^g;iV@aOn矯z\[ݵ$'/N*ӏTLl~[=~&߯QM-_1;/u^po޺`擶̑cEݎyۃU?E*P䷧ſ?2;oq'3[+{_̒od1m㞘_ίCegoihbq=RM?۵ qsx9]7~֦߿r eÂPvD)m_"[i-WRP3wu>a;ߞk۷Ƞq@ہ{vc~>rKiNVo뿨.6hwֽZ0nRV~exV;Ksw}{־/SoY?'IKlU~R2]ݜ8m]Rcer|oST_=Úr8۸۶.[㨾v>_yF+k #voּOon+eX$`0{y˞=i*r{7&M QSj}jJ+*d0bLu_j'}77:~ՑU7ƛ;@7cs=kΚI"%v?ºb"/~w;oI}߯u)d V= +}ߛݻV߮U]O‚<|e./f}tY̠~{kRB)Xr^sqRW/5F}䝿0Ur8#oC_v)kNu-־ٕxwgDJ_U|yD6OQ򬜛ܔ7mfΧ7IӻO}/6qvzק] @Be.I_r]ΞE:i|vrAsqﻊ4dz=]KʹU02V{?Xm_wtƥ׽*>B6r9{wM"r߯~rGQXc?/x{tՓu(j>H%,Oo+o__'EnkﱗF~chbH_gmz_ }m;~R7Sc|7ܖ"K~r:SS gLH;~lcoִvr'FNzmK*M?*#Ǯz˿д{zL@ܹ F;v:wp{_֒AoB<3vs[bsʟ]_?Sz yK;Gc] uM)pؓ'$ nT`^[ X'_]|I2?0Cv6=<7Y߯Dx=_$_ fCwOZ!~^/\rogק}64|S0g>A'պO:_/3#Xvd?G}[{֦ ZognAQ/N2O]8|#4VZ[h%G9yo_µI}m q}I?M~zrJW䈡T#yRPNרW'ؽFA "Bc v0N),PpAqZSO f9kmA²>`~wj]/57i\ʡYH^>f_g뷟9NM.e};wOST_%2e0k~WuynOWzY"W),?zƥޫ^|rQRsJNUۻs9os K]vC_-~㢷Ic 8.~=Xʍ?.԰!P}2+)SZizʦ$u9:*/¥]o!kܖ^k/I?u?ϚW'8uDR˼&E2O׏z%~dNZM#J'GoszR- )6ڿ3] G Rko-F5W*±oGn~lsԲk[ۮݍ(=u~MmΞcn;a[_Q%LjR p:5'~vԪPM[=w(|0V,x?6՗iwy3 |[9cwntQqVt dLIC7d[k}]}GsZ]~K1ɐ0NKJRM1wDv7ֱ͟IVM?ٷmbYsNQ[ ^} ";ο1_]o/OsIo}}KyuYc=8-TnkÓK}n a(Io|uOmֵl9z!۽*T_]$/Qmmث$W{$|GF7v۷;t/Z+o||h6='"+Cs37QU[\.'Ŕõqs3UƔV^0qk_o؏0g%vw}RQ_U*[9 ?n?ÒUN|\S1jK)R*[)JOөI},V>NG9_f9ަ[k&/?xIl6%{/};ߏNl* ,%CuUɬQ{_:Z5@7~xm_ʓKu_b*FX[sߧ6݊1wM;'dzǡyMI[ߍiiʴgyaw|_Z+>ߏ-{o࢟빶QKmSWQN]ol_~k)QZ29I{8͐T>miMk?;ιq]c kp"Ul}ŸWB,.0?_Z~6(?E$q|;s8пݨ3WoX7flwQMu]rw]u~y:com9/|T%Y5 ,MO$|?OvFV^s:zu_Wt @p,sqYs6v^H! Ͻg^Wm?i5gwܖ@ o.bE'v^cQnJ+7-z汓|W 㫿x0ۀFmnNy/tkw/&<(B8 pÑڲZw}?N<~,ʄR䏗,{k b8Ao/ztks|ZvV y9[}wV~71Fz&ɍnޭ*#şݷ|kӌ:Z^ʙݜ)?.M>~ק#bI`?QFNk_ߪ;\ʞfB_ w;[ҦMwA* &whn{| ϼ/#_ߚ -ѽ;F_ʛ~aV;g*)UV6յw~Hcb~mRv6o.,%mB*q|UWjWz[:dN!wH_ZNOg"HhClYT)2Y;ć֓wۮ4 $ eY18>O,.-hlؗf58__u8v$jj?ސn}C7&坰F}qFJ,,p{h#'y(e8b!55N.!E"Z,mAQ ../more.kml go.jpeg so.jpeg po.jpeg style.kml#style model.dae libkml-1.3.0/testdata/style/000077500000000000000000000000001263603257100157435ustar00rootroot00000000000000libkml-1.3.0/testdata/style/allstyles-f0-highlight-check.kml000066400000000000000000000000111263603257100237770ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/allstyles.kml000066400000000000000000000033201263603257100204620ustar00rootroot00000000000000 #allstyles #no-such-style libkml-1.3.0/testdata/style/dup-id-normal-check.kml000066400000000000000000000005371263603257100222000ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/dup-id.kml000066400000000000000000000044051263603257100176350ustar00rootroot00000000000000 #dup-style -112.2550785337791,36.07954952145647,2357 -112.2549277039738,36.08117083492122,2357 -112.2552505069063,36.08260761307279,2357 -112.2564540158376,36.08395660588506,2357 -112.2580238976449,36.08511401044813,2357 -112.2595218489022,36.08584355239394,2357 -112.2608216347552,36.08612634548589,2357 -112.262073428656,36.08626019085147,2357 -112.2633204928495,36.08621519860091,2357 -112.2644963846444,36.08627897945274,2357 -112.2656969554589,36.08649599090644,2357 #dup-style -112.2594359071773,36.08469720347697,0 libkml-1.3.0/testdata/style/empty-style-check.kml000066400000000000000000000000111263603257100220070ustar00rootroot00000000000000 highlight 12.487995,47.969918,0 libkml-1.3.0/testdata/style/iconstyle.kml000066400000000000000000000012141263603257100204570ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/inline-style-f0-check.kml000066400000000000000000000001411263603257100224360ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/inline-style.kml000066400000000000000000000002641263603257100210660ustar00rootroot00000000000000 folder libkml-1.3.0/testdata/style/inline-stylemap-pm0-highlight-check.kml000066400000000000000000000003021263603257100252670ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/inline-stylemap-pm0-normal-check.kml000066400000000000000000000003071263603257100246150ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/inline-stylemap.kml000066400000000000000000000017151263603257100215660ustar00rootroot00000000000000 normal highlight 1,2,3 4,5,6 1,2,3 4,5,6 7,8,9 1,2,3 libkml-1.3.0/testdata/style/kmlsamples-inline-style-check.kml000066400000000000000000001251541263603257100243150ustar00rootroot00000000000000 KML Samples 1 Unleash your creativity with the help of these examples! Placemarks These are just some of the different kinds of placemarks with which you can mark your favorite places -122.083959714577 37.4222290452523 0 -148.412292262804 40.5575073395506 500.656664107225 Simple placemark Attached to the ground. Intelligently places itself at the height of the underlying terrain. -122.082203542568,37.4222899014025,0 Floating placemark 0 Floats a defined distance above the ground. -122.083959714577 37.4222290452523 0 -148.412292262804 40.5575073395506 500.656664107225 normal highlight relativeToGround -122.084075,37.4220033612141,50 Extruded placemark 0 -122.084578742153 37.4221507873776 0 -148.412668494623 40.5575073391805 365.264660698032 normal highlight 1 relativeToGround -122.085766700618,37.4215692786755,50 Styles and Markup 0 With KML it is easy to create rich, descriptive markup to annotate and enrich your placemarks -122.084578742237 37.4221507872684 0 -148.412677748817 40.5575073393087 365.264682629292 normal highlight Highlighted Icon 0 Place your mouse over the icon to see it display the new icon -122.085655212402 37.4224281311035 0 0 0 265.852042425002 Roll over this icon 0 normal highlight -122.085654575525,37.4224307740546,0 Descriptive HTML 0
Placemark descriptions can be enriched by using many standard HTML tags.
For example:


Styles:
Italics, Bold, Underlined, Strike Out, subscriptsubscript, superscriptsuperscript, Big, Small, Typewriter, Emphasized, Strong, Code
Fonts:
red by name, leaf green by hexadecimal RGB
size 1, size 2, size 3, size 4, size 5, size 6, size 7
Times, Verdana, Arial

Links:
Google Earth!
or: Check out our website at www.google.com
Alignment:

left

center

right


Ordered Lists:
  1. First
  2. Second
  3. Third
  1. First
  2. Second
  3. Third
  1. First
  2. Second
  3. Third

Unordered Lists:
  • A
  • B
  • C
  • A
  • B
  • C
  • A
  • B
  • C

Definitions:
Google:
The best thing since sliced bread

Centered:
Time present and time past
Are both perhaps present in time future,
And time future contained in time past.
If all time is eternally present
All time is unredeemable.

Block Quote:
We shall not cease from exploration
And the end of all our exploring
Will be to arrive where we started
And know the place for the first time.
-- T.S. Eliot


Headings:

Header 1

Header 2

Header 3

Header 4

Header 5


Images:
Remote image

Scaled image


Simple Tables:
12345
abcde

[Did you notice that double-clicking on the placemark doesn't cause the viewer to take you anywhere? This is because it is possible to directly author a "placeless placemark". If you look at the code for this example, you will see that it has neither a point coordinate nor a LookAt element.]]]> Ground Overlays 0 Examples of ground overlays Large-scale overlay on terrain 0 Overlay shows Mount Etna erupting on July 13th, 2001. 15.0246893755712 37.6739516794167 0 -16.5581842842829 58.3122865289071 30350.3683843891 http://code.google.com/apis/kml/documentation/etna.jpg 37.9190419268166 37.4654338859814 15.3583265374221 14.601283697467 -0.155664079949624 Screen Overlays 0 Screen overlays have to be authored directly in KML. These examples illustrate absolute and dynamic positioning in screen space. Simple crosshairs 0 This screen overlay uses fractional positioning to put the image in the exact center of the screen http://code.google.com/apis/kml/documentation/crosshairs.png Absolute Positioning: Top left 0 http://code.google.com/apis/kml/documentation/top_left.jpg Absolute Positioning: Top right 0 http://code.google.com/apis/kml/documentation/top_right.jpg Absolute Positioning: Bottom left 0 http://code.google.com/apis/kml/documentation/bottom_left.jpg Absolute Positioning: Bottom right 0 http://code.google.com/apis/kml/documentation/bottom_right.jpg Dynamic Positioning: Top of screen 0 http://code.google.com/apis/kml/documentation/dynamic_screenoverlay.jpg Dynamic Positioning: Right of screen 0 http://code.google.com/apis/kml/documentation/dynamic_right.jpg Paths 0 Examples of paths. Note that the tessellate tag is by default set to 0. If you want to create tessellated lines, they must be authored (or edited) directly in KML. Tessellated 0 tag has a value of 1, the line will contour to the underlying terrain]]> -112.082268001314 36.0982558933356 0 103.812043204497 62.0485579627633 2889.14500769047 1 -112.081423783034,36.1067787047714,0 -112.087026775269,36.0905099328766,0 Untessellated 0 tag has a value of 0, the line follow a simple straight-line path from point to point]]> -112.082268001314 36.0982558933356 0 103.812043204497 62.0485579627633 2889.14500769047 0 -112.080622229595,36.10673460008,0 -112.085242575315,36.0904959861242,0 Absolute 0 Transparent purple line -112.271932904318 36.0889063345089 0 -106.81615459986 44.6076371406326 2569.38674439834 normal highlight 1 absolute -112.265654928602,36.0944767260255,2357 -112.266038452824,36.0934260883867,2357 -112.266813901345,36.0925105877688,2357 -112.267782683444,36.09189827358,2357 -112.268855751095,36.0913137941187,2357 -112.269481071722,36.0903677207521,2357 -112.269526855561,36.0893217148729,2357 -112.269014456728,36.0885091606047,2357 -112.268152881534,36.0875381359796,2357 -112.267058817603,36.0868268526257,2357 -112.265737458732,36.086463123013,2357 Absolute Extruded 0 Transparent green wall with yellow outlines -112.264333474253 36.0856315474242 0 -125.751869866882 44.6103866581258 4451.8422040681 normal highlight 1 1 absolute -112.255078533779,36.0795495214565,2357 -112.254927703974,36.0811708349212,2357 -112.255250506906,36.0826076130728,2357 -112.256454015838,36.0839566058851,2357 -112.258023897645,36.0851140104481,2357 -112.259521848902,36.0858435523939,2357 -112.260821634755,36.0861263454859,2357 -112.262073428656,36.0862601908515,2357 -112.26332049285,36.0862151986009,2357 -112.264496384644,36.0862789794527,2357 -112.265696955459,36.0864959909064,2357 Relative 0 Black line (10 pixels wide), height tracks terrain -112.258043855138 36.1072674824385 0 4.94742124955372 44.6132488204334 2927.61105910266 normal highlight 1 relativeToGround -112.253284515335,36.0988694372912,645 -112.254046612114,36.0991957046526,645 -112.254734666947,36.0998499836618,645 -112.255493345654,36.1005131062175,645 -112.256315709847,36.1010844194342,645 -112.256803307644,36.1015972208809,645 -112.257494011321,36.1020432354287,645 -112.258410607231,36.1022913199565,645 -112.259658898797,36.1024000128636,645 -112.261058119949,36.1021317687341,645 -112.262628526279,36.1015701143722,645 Relative Extruded 0 Opaque blue walls with red outline, height tracks terrain -112.268359433343 36.0988436214491 0 -72.242715517684 44.6085544513956 2184.19352257147 normal highlight 1 1 relativeToGround -112.265663418136,36.094452147227,630 -112.26522389411,36.0952091612206,630 -112.26450799864,36.0958076386491,630 -112.263882742882,36.0962857228406,630 -112.263574683541,36.0967927595124,630 -112.263571182241,36.097400388719,630 -112.264029653183,36.0980491343554,630 -112.264327720538,36.098803374003,630 -112.264243656227,36.0996364479029,630 -112.263914868704,36.1005538111725,630 -112.262689497347,36.1014906282337,630 Polygons 0 Examples of polygon shapes Google Campus 0 A collection showing how easy it is to create 3-dimensional buildings -122.084120030116 37.4217401192548 0 -34.8246974008128 53.454348562403 276.787005376405 Building 40 0 normal highlight 1 relativeToGround -122.084893845961,37.4225712404479,17 -122.08495809792,37.4221192262686,17 -122.084746957305,37.4220718395262,17 -122.084572538096,37.4220900672968,17 -122.084595488672,37.4221593270089,17 -122.083852111827,37.4222727856437,17 -122.083792243335,37.4220353911208,17 -122.083507665662,37.4220900695711,17 -122.083470946415,37.4220098739516,17 -122.083122108575,37.4221046494946,17 -122.082924737457,37.4222650399039,17 -122.082933916939,37.4223124284309,17 -122.083383735974,37.4222504608762,17 -122.083360785425,37.4223415922875,17 -122.083420455164,37.4223707546064,17 -122.083659133885,37.42251292011,17 -122.083975843895,37.4226587309378,17 -122.084237474333,37.4226514397252,17 -122.08450369495,37.4226514386435,17 -122.08480204608,37.4226113391631,17 -122.084788275051,37.4225639505512,17 -122.084893845961,37.4225712404479,17 Building 41 0 normal highlight 1 relativeToGround -122.085741277148,37.4222703315526,17 -122.085816976848,37.4223140883235,17 -122.085852582875,37.4223033746974,17 -122.085879994564,37.4222568613879,17 -122.085886010141,37.4222311076138,17 -122.085806915729,37.4222025017386,17 -122.085837954265,37.4221402705868,17 -122.085673264052,37.4220869021441,17 -122.085602292641,37.4221488542904,17 -122.085590277844,37.422128290487,17 -122.085584167224,37.4220817196725,17 -122.085485206574,37.42210455875,17 -122.085506726435,37.4221426794982,17 -122.085443071291,37.4221278384617,17 -122.08509907149,37.422512824076,17 -122.085676981863,37.4228181532365,17 -122.086016227378,37.4224491885872,17 -122.0857260327,37.4222923960425,17 -122.085741277148,37.4222703315526,17 Building 42 0 normal highlight 1 relativeToGround -122.085786228724,37.4213620888697,25 -122.08573129906,37.4213693598948,25 -122.085731299292,37.421409349109,25 -122.085607707368,37.4213839016656,25 -122.085580242652,37.4213729955087,25 -122.085218622197,37.4213729950432,25 -122.085227776564,37.4216165650827,25 -122.085259818935,37.421605658944,25 -122.08525981855,37.42168200156,25 -122.085236931148,37.4217001786035,25 -122.085264395783,37.4217619798258,25 -122.085323903275,37.4217619801391,25 -122.085355945432,37.421852864452,25 -122.085410875246,37.4218892182373,25 -122.085479537936,37.4218928533705,25 -122.085543622982,37.4218892179755,25 -122.085626017804,37.4218601349993,25 -122.085937287963,37.421860134536,25 -122.085942871867,37.4216089859004,25 -122.085965546986,37.4215799275914,25 -122.085864046234,37.4214711500296,25 -122.085854891121,37.4214057132618,25 -122.085809116277,37.4214057134039,25 -122.085786228724,37.4213620888697,25 Building 43 0 normal highlight 1 relativeToGround -122.084437112828,37.4217725300309,19 -122.084511885575,37.421911115429,19 -122.08504709998,37.4217875512154,19 -122.085071991339,37.4214366302316,19 -122.084916406232,37.4213723782212,19 -122.084219386817,37.4213723780163,19 -122.08421938659,37.421476171615,19 -122.083808641999,37.4214613409357,19 -122.083789972856,37.421313064108,19 -122.08327965347,37.4212932884059,19 -122.083260981921,37.421392139443,19 -122.082937362174,37.4213723639988,19 -122.082906242567,37.4215156977887,19 -122.082850226966,37.4217628257647,19 -122.082943578864,37.4217677696964,19 -122.083217411188,37.4217924855269,19 -122.08359704301,37.4217480074456,19 -122.083945555677,37.421693642376,19 -122.084007789464,37.4217628381585,19 -122.084113587521,37.4217480110439,19 -122.084076247378,37.4217134129238,19 -122.084144704774,37.4216788153457,19 -122.084144704223,37.421817206602,19 -122.084250333307,37.4218170700446,19 -122.084437112828,37.4217725300309,19 Extruded Polygon A simple way to model a building The Pentagon -77.0558013917814 38.870832443487 59.8886556173822 48.0964607479739 742.055250667055 1 relativeToGround -77.0578845766097,38.8725325989282,100 -77.054659737567,38.872910162817,100 -77.0531553685479,38.8705326779439,100 -77.0555262249352,38.868757801256,100 -77.0584405629039,38.8699620650694,100 -77.0578845766097,38.8725325989282,100 -77.0566805501913,38.8715423979846,100 -77.0554262596082,38.8716789034408,100 -77.0548512590102,38.8707653539779,100 -77.0557767743315,38.8700868658145,100 -77.0569116201754,38.8705444696335,100 -77.0566805501913,38.8715423979846,100 Absolute and Relative 0 Four structures whose roofs meet exactly. Turn on/off terrain to see the difference between relative and absolute positioning. -112.334896915755 36.1484553321492 0 -86.9123503756691 49.3069542389419 990.67612010871 Absolute 0 normal highlight 1 absolute -112.337251073129,36.1488850510532,1784 -112.33561286884,36.1478154058902,1784 -112.336816937105,36.1465867773438,1784 -112.338440845754,36.1476277891408,1784 -112.337251073129,36.1488850510532,1784 Absolute Extruded 0 normal highlight 1 1 absolute -112.339658681884,36.1463761864751,1784 -112.338059765431,36.1453175187135,1784 -112.336825423779,36.1465959624461,1784 -112.33845550432,36.1476262176398,1784 -112.339658681884,36.1463761864751,1784 Relative 0 -112.335015249042 36.1494312307742 0 -118.92141008485 37.924862610932 345.516911367981 normal highlight 1 relativeToGround -112.334946314593,36.1498870576772,100 -112.335401954068,36.1494110839837,100 -112.334442828915,36.1487849038131,100 -112.333128949291,36.1478084013244,100 -112.331701951695,36.1468075567836,100 -112.331131440106,36.1474173426228,100 -112.332616324338,36.1484545336465,100 -112.333987662052,36.1492657052207,100 -112.334946314593,36.1498870576772,100 Relative Extruded 0 -112.335158789238 36.1497924712903 0 -55.4281156089161 56.1028050373959 401.099727971252 normal highlight 1 1 relativeToGround -112.334878398376,36.1514008468736,100 -112.337253534563,36.1488851755389,100 -112.335606892795,36.1478161267928,100 -112.335003480797,36.1484646902418,100 -112.335835386123,36.1489624162954,100 -112.334588830137,36.1502622937251,100 -112.333793785628,36.1497809602646,100 -112.333179820842,36.1504472788618,100 -112.334878398376,36.1514008468736,100 libkml-1.3.0/testdata/style/nesting.kml000066400000000000000000000016041263603257100201200ustar00rootroot00000000000000 normal #loop highlight #loop normal #loop3 highlight #loop3 normal #loop2 highlight #loop2 #loop #loop2 libkml-1.3.0/testdata/style/remote-styleurl-document-check.kml000066400000000000000000000020421263603257100245110ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/remote-styleurl-folder-check.kml000066400000000000000000000003211263603257100241440ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/remote-styleurl-groundoverlay-check.kml000066400000000000000000000002501263603257100255720ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/remote-styleurl-placemark-inline-check.kml000066400000000000000000000001051263603257100261040ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/remote-styleurl-placemark-style-both-check.kml000066400000000000000000000004611263603257100267250ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/remote-styleurl-screenoverlay-check.kml000066400000000000000000000003731263603257100255610ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/remote-styleurl.kml000066400000000000000000000042101263603257100216210ustar00rootroot00000000000000 allstyles.kml#allstyles shared-stylemap.kml#msn_ylw-pushpin shared-stylemap.kml#no-such-id no-such-file.kml#no-such-id shared-stylemap.kml#sn_ylw-pushpin shared-stylemap.kml#msn_ylw-pushpin http://host.com/style/iconstyle.kml#plane-icon shared-stylemap.kml#sn_ylw-pushpin http://ignored.com/style/shared-stylemap.kml#msn_ylw-pushpin iconstyle.kml#train-icon libkml-1.3.0/testdata/style/remote-styleurl.kmz000066400000000000000000000013471263603257100216470ustar00rootroot00000000000000PKz9d:eUdoc.kmlUT xUHxUHUx*DMo0 wap\l: 躢i΃j4$ndZ%߈C]<< m$:~S ux.:Ȭ->3VUU4!v&e.:V(n +Bi%Z\)6;}oE8(뽏QtVi)Eɦ>'/&Z9/WQƙ|7J;|Cvfhl`2 ;3iM!"_+k -Z8^-:AEm8[Z M]oNCu'%;g%Th/yKX)hWNaE~w(Dy*l3~n!^PKz9d:eU $doc.kmlUTxUHUxPKBlibkml-1.3.0/testdata/style/shared-stylemap-pm0-highlight-check.kml000066400000000000000000000003731263603257100252670ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/shared-stylemap-pm0-normal-check.kml000066400000000000000000000003731263603257100246100ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/shared-stylemap.kml000066400000000000000000000026541263603257100215610ustar00rootroot00000000000000 KmlFile normal #sn_ylw-pushpin highlight #sh_ylw-pushpin Untitled Placemark -84.9685883948144 40.80358609429204 0 7.124237035088234 0 11001000 #msn_ylw-pushpin -84.9685883948144,40.80358609429204,0 libkml-1.3.0/testdata/style/simple-pm0-check.kml000066400000000000000000000001121263603257100215000ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/simple-pm0-style.kml000066400000000000000000000001121263603257100215630ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/simple.kml000066400000000000000000000003061263603257100177400ustar00rootroot00000000000000 1,2,3 4,5,6 7,8,9 libkml-1.3.0/testdata/style/style-with-unknown-elements-jb-check.kml000066400000000000000000000013231263603257100255330ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/style-with-unknown-elements.kml000066400000000000000000000077421263603257100241020ustar00rootroot00000000000000 #current -77.0533,26.5467,0 #hist2_b -77.0533,26.5467,0 libkml-1.3.0/testdata/style/weather/000077500000000000000000000000001263603257100174025ustar00rootroot00000000000000libkml-1.3.0/testdata/style/weather/point-sarnen-abs.kml000066400000000000000000000035051263603257100232720ustar00rootroot00000000000000 59°F / 15°C http://libkml.googlecode.com/svn-history/r178/trunk/testdata/style/weather/style.kml#i27 Sarnen, SZ as of 2008-07-18 23:00 UTC: 59°F / 15°C 27 Mostly Cloudy SE 1 mph 82% 59°F / 15°C Tonight 58°F / 14°C 45 Showers Early 30 77% 8 mph SW 8.23,46.9,0 libkml-1.3.0/testdata/style/weather/point-sarnen-green.kml000066400000000000000000000032771263603257100236330ustar00rootroot00000000000000 59°F / 15°C style-green.kml#i27 Sarnen, SZ as of 2008-07-18 23:00 UTC: 59°F / 15°C 27 Mostly Cloudy SE 1 mph 82% 59°F / 15°C Tonight 58°F / 14°C 45 Showers Early 30 77% 8 mph SW 8.23,46.9,0 libkml-1.3.0/testdata/style/weather/point-sarnen.kml000066400000000000000000000032711263603257100225270ustar00rootroot00000000000000 59°F / 15°C style.kml#i27 Sarnen, SZ as of 2008-07-18 23:00 UTC: 59°F / 15°C 27 Mostly Cloudy SE 1 mph 82% 59°F / 15°C Tonight 58°F / 14°C 45 Showers Early 30 77% 8 mph SW 8.23,46.9,0 libkml-1.3.0/testdata/style/weather/points-puntas-ARSC0046-check.kml000066400000000000000000000040211263603257100250430ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/weather/points-puntas-ARSC0133-check.kml000066400000000000000000000040101263603257100250360ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/weather/points-puntas-CIXX0017-check.kml000066400000000000000000000040101263603257100250620ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/weather/points-puntas.kml000066400000000000000000001105201263603257100227320ustar00rootroot00000000000000 -45.0 -56.25 -78.75 -67.5 256 -1 32°F / 0°C http://www.example.com/style/weather/styles_new.kmz#s29 -70.85,-53.03 Punta Arenas, CI as of 2008-08-04 00:00 UTC: 32°F / 0°C 29 Partly Cloudy N 0 mph 29.41 in. 87% 28°F / -1°C 32°F / 0°C Tonight 29°F / -1°C 29 Partly Cloudy 20 90% 6 mph NW Tomorrow 39°F / 4°C 39 PM Showers 30 79% 17 mph N Tomorrow Night 32°F / 0°C 11 Showers 50 84% 19 mph NE Tuesday 38°F / 3°C 39 AM Showers 40 73% 13 mph NW Tuesday Night 31°F / 0°C 05 Rain / Snow 40 79% 10 mph W 34°F / 1°C http://www.example.com/style/weather/styles_new.kmz#s29 -72.4,-45.4 Puerto Aisen, CI as of 2008-08-04 00:00 UTC: 34°F / 1°C 29 Partly Cloudy NW 16 mph 29.59 in. 75% 27°F / -2°C 24°F / -3°C Tonight 34°F / 1°C 05 Rain / Snow Showers 60 90% 1 mph SE Tomorrow 44°F / 7°C 11 Showers 60 78% 4 mph SW Tomorrow Night 37°F / 3°C 12 Rain 100 91% 7 mph W Tuesday 40°F / 4°C 11 Light Rain 90 83% 3 mph SW Tuesday Night 33°F / 1°C 05 Rain / Snow 60 88% 1 mph SW -45.0 -50.625 -73.125 -67.5 256 -1 N/A http://www.example.com/style/weather/styles_new.kmz#s99 -72.3,-50.33 Lago Argentino, SC, AR as of 2008-08-04 00:00 UTC: N/A thermometer N/A N/A N/A N/A N/A N/A Tonight 25°F / -3°C 27 Mostly Cloudy 20 77% 7 mph SW Tomorrow 43°F / 6°C 30 Partly Cloudy 20 68% 8 mph W Tomorrow Night 29°F / -1°C 46 Snow Showers Late 40 70% 10 mph S Tuesday 40°F / 4°C 14 Snow Shower 50 67% 7 mph W Tuesday Night 23°F / -4°C 14 Snow Shower 40 77% 5 mph SW 34°F / 1°C http://www.example.com/style/weather/styles_new.kmz#s29 -71.7,-45.92 Balmaceda, CI as of 2008-08-04 00:00 UTC: 34°F / 1°C 29 Partly Cloudy NW 16 mph 29.59 in. 75% 27°F / -2°C 24°F / -3°C Tonight 30°F / 0°C 46 Snow Showers Late 40 79% 8 mph NW Tomorrow 39°F / 4°C 05 AM Rain / Snow Showers 40 63% 14 mph W Tomorrow Night 31°F / 0°C 05 Rain / Snow 80 80% 16 mph W Tuesday 36°F / 2°C 16 Snow 70 73% 13 mph W Tuesday Night 29°F / -1°C 14 Snow Shower 40 79% 9 mph W -47.8125 -50.625 -73.125 -70.3125 256 -1 N/A http://www.example.com/style/weather/styles_new.kmz#s99 -72.3,-50.3333 El Calafate, SC, AR as of 2008-08-04 00:00 UTC: N/A thermometer N/A N/A N/A N/A N/A N/A Tonight 25°F / -3°C 27 Mostly Cloudy 20 77% 7 mph SW Tomorrow 43°F / 6°C 30 Partly Cloudy 20 68% 8 mph W Tomorrow Night 29°F / -1°C 46 Snow Showers Late 40 70% 10 mph S Tuesday 40°F / 4°C 14 Snow Shower 50 67% 7 mph W Tuesday Night 23°F / -4°C 14 Snow Shower 40 77% 5 mph SW -47.8125 -50.625 -70.3125 -67.5 256 -1 31°F / 0°C http://www.example.com/style/weather/styles_new.kmz#s31 -67.75,-49.32 San Julian, SC, AR as of 2008-08-04 00:00 UTC: 31°F / 0°C 31 Clear NW 10 mph 29.37 in. 87% 28°F / -1°C 22°F / -5°C Tonight 30°F / 0°C 29 Partly Cloudy 20 91% 19 mph SW Tomorrow 42°F / 6°C 30 Partly Cloudy 20 81% 14 mph W Tomorrow Night 33°F / 1°C 27 Mostly Cloudy 20 88% 15 mph N Tuesday 42°F / 6°C 28 Mostly Cloudy 20 72% 17 mph W Tuesday Night 30°F / 0°C 05 Rain / Snow Showers Early 30 80% 16 mph W 31°F / 0°C http://www.example.com/style/weather/styles_new.kmz#s31 -70.17,-48.78 Gobernador Gregores, SC, AR as of 2008-08-04 00:00 UTC: 31°F / 0°C 31 Clear NW 10 mph 29.37 in. 87% 28°F / -1°C 22°F / -5°C Tonight 25°F / -3°C 29 Partly Cloudy 20 89% 19 mph W Tomorrow 41°F / 5°C 30 Partly Cloudy 20 78% 12 mph W Tomorrow Night 28°F / -1°C 27 Mostly Cloudy 20 85% 13 mph N Tuesday 39°F / 4°C 28 Mostly Cloudy 20 70% 16 mph W Tuesday Night 25°F / -3°C 46 Snow Showers Early 30 82% 13 mph W -50.625 -56.25 -73.125 -67.5 256 -1 32°F / 0°C http://www.example.com/style/weather/styles_new.kmz#s31 -69.28,-51.62 Rio Gallegos, SC, AR as of 2008-08-04 00:00 UTC: 32°F / 0°C 31 Clear N 7 mph 29.47 in. 87% 28°F / -1°C 26°F / -2°C Tonight 25°F / -3°C 14 Few Snow Showers 30 86% 8 mph W Tomorrow 40°F / 4°C 34 Mostly Sunny 20 75% 12 mph N Tomorrow Night 33°F / 1°C 05 Rain / Snow Showers Late 50 80% 14 mph N Tuesday 37°F / 3°C 05 AM Rain / Snow Showers 50 72% 11 mph W Tuesday Night 27°F / -2°C 14 Snow Shower 30 79% 10 mph W 34°F / 1°C http://www.example.com/style/weather/styles_new.kmz#s29 -68.32,-54.8 Ushuaia, TF, AR as of 2008-08-04 00:00 UTC: 34°F / 1°C 29 Partly Cloudy NW 5 mph 29.38 in. 87% 30°F / 0°C 30°F / 0°C Tonight 29°F / -1°C 46 Snow Showers Early 50 74% 7 mph NW Tomorrow 39°F / 4°C 28 Mostly Cloudy 20 75% 11 mph NW Tomorrow Night 36°F / 2°C 26 Cloudy 20 76% 12 mph N Tuesday 39°F / 4°C 11 Light Rain 70 76% 9 mph NW Tuesday Night 33°F / 1°C 14 Snow Shower 50 75% 5 mph W -50.625 -52.03125 -73.125 -71.71875 256 -1 N/A http://www.example.com/style/weather/styles_new.kmz#s99 -72.52,-51.73 Puerto Natales, CI as of 2008-08-04 00:00 UTC: N/A thermometer N/A N/A N/A N/A N/A N/A Tonight 29°F / -1°C 29 Partly Cloudy 20 74% 2 mph SW Tomorrow 44°F / 7°C 30 Partly Cloudy 20 65% 9 mph N Tomorrow Night 31°F / 0°C 05 Rain / Snow Showers Late 30 74% 9 mph N Tuesday 42°F / 6°C 28 Mostly Cloudy 20 64% 5 mph W Tuesday Night 29°F / -1°C 14 Few Snow Showers 30 70% 3 mph W -50.625 -56.25 -78.75 -73.125 256 -1 N/A http://www.example.com/style/weather/styles_new.kmz#s99 -75.1,-52.399999 Islotes Evangelistas, CI as of 2008-08-04 00:00 UTC: N/A thermometer N/A N/A N/A N/A N/A N/A Tonight 37°F / 3°C 12 Rain 80 87% 14 mph NW Tomorrow 40°F / 4°C 11 Showers / Wind 60 82% 31 mph N Tomorrow Night 37°F / 3°C 12 Rain 80 80% 23 mph NW Tuesday 38°F / 3°C 11 Light Rain 70 77% 25 mph NW Tuesday Night 36°F / 2°C 11 Showers 60 79% 14 mph NW libkml-1.3.0/testdata/style/weather/points-puntas.kmz000066400000000000000000000052421263603257100227540ustar00rootroot00000000000000PKf9C Pdoc.kmlUT ZH [HUx*DnH*PV+&ݮ*SmEA#NvĆa$TZ Ƽ033}K&POᝢ,KyiQ8DIOP"E%r;);Uތ߹ʺΉ78x1J1~>MO-/Q]W Hc?Z~@/+s%U Ӎq\}(2TEͼsU/[b}C LK^HMlmռBo~B>>mMULҩॹJWEA* F𝧱?_D 8P-zKQEs"zQ.Z8k4uPP*ٰhse0OQE7r:jT>#KD Ѡ& AqhE<WqZ'!`%C ߈14Y &14M)ܒZtyCZ9U *y!I5H{jхYL!):*D .ϸ`Қ]6{Hy  ; c |ƭcf#Ϭk3G5mh2szd+grV9F+G8+Q)CɎ  M~g룿"<>Km9&E@jR)TfDU2vp)Ҕp*3Q;` V(мA춄5O$Zr Ȭ9 lƎ-;+C!oVecUu;w({ܗG!:w;p}1qzQ'A aPK2;@Lh  @qp3|̡Ɲ!{?pPq3t\B) a>¹ + PkButY]Amͱ_)Ynp)-}5-ʺZg ),et2:'fc$vR{"b`%<*00z[ jbkV[9N{ tTdrZdMĒ@FEEW]l> PKf9C P doc.kmlUTZHUxPKBJ libkml-1.3.0/testdata/style/weather/style.kml000066400000000000000000000023451263603257100212530ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/weather/styles_new.kml000066400000000000000000003125741263603257100223170ustar00rootroot00000000000000 libkml-1.3.0/testdata/style/weather/styles_new.kmz000066400000000000000000000033621263603257100223250ustar00rootroot00000000000000PK9z`|doc.kmlUT a[Hm[HUx*D[kH| :IЭ)]BY" c[$7q?}G+kl!w3#ϫz«,Jv{}Ry\L|~i}ܾ"^e*'e_udziW5DiZy;lkPn>_ hú?S+.j{Ί仺wUYJrMZQs:́Щ/=Ѥtv3Zjvi/zq=eT"ʢ.ds*cG9U?8*tȫ]}rUn9y on?usVh&L?C_eT) j\/hNvslwal<~'Y?*VV)-жo?ϋ|Ze46_5@v*nwutsRUժT욛_I^ow)VrE*'^d:\-tt>mnw*FdntqL"}2_M~lE{KtqoGQf.? ݮ|\}k_@G twݦQ: uvTVRQ>}nv$xvdpd{{ :^a/ƦnvlYv2N;[ӭi==DE9x6Φ9# 7t6 g|" D"@Df! D"@Dxf! D"@Df!" D"@Df!b"@ D! D"@f! D"@Bqf"A D!f!D"@Bqa"\+A D!pJtI D" ¬JJ"@ B "JtI D" ¬JJ"@ B "JtI D" ¬JJ"@ B "JtI D" ¬JJ"@ B "JtI D" ¬JJ"@ B"<+=+A D)0+#D"@+=+A D)0+#D"@+=+A D)0+#D"@+=+A D)0+#D"@+=+A D)0+'D"@߬JJ"@ B "JI D" ¬JJ"@ B "JI D" ¬JJ"@ B "JI D" ¬JJ"@ B "JI D" ¬JJ"@ B "J H D" "0+2 D"@++A D)0+2 D"@++A D)0+2 D"@++A D)0+2 D"@+/ D" 9 +2}5:"^e!=<PK9z`| doc.kmlUTa[HUxPKBlibkml-1.3.0/testdata/style/weather/weather-jpgs.kmz000066400000000000000000003050571263603257100225370ustar00rootroot00000000000000PK p8 icons_jpg/UT كHكHUx*DPKp8jmicons_jpg/.DS_StoreUT كHكHUx*D;0Dg K4.)pn`E W!RP%yViO_ 3>6!B}ctvB2ts:vc2]J7_#LC>+1XW,pp?a5 !~uvK@🅧nl+ܺOPK Ui7ڔ-8 icons_jpg/00.jpgUT 4GكHUx*DgTi7 @B UDJ<4i$R  R`Bޤ2 UHU:0g˗O{19qn~aqi/;_}w .C BaG.[]Zg sъD>kնDy r owK/ؿ]~0܇w*_!%nr|]vܾ@K3W tŕ#Gƒx?ŷ+"jx]}etJ0k9]%aNS8a8'A6^nLƘW|vx瑻+Bo\l[[Ǫ!mv}\F9sex0c`+}C]F G^PZQ-5WɦY3zM~I@",%Tn|/ |.a\ۤ<]h]2 > R9뱪1o}mK;#!F yI|(,";BVPHy:*=%շe ڔвV]8o`qU૷+?~1=%q)>C51 31Ιovte7lGO16n2JؐD7˗PRËy rc7;^B;4rm|_A5G<42pP]\%%zT[q31Ϋl?D}iŷ8jMr?q}J&H vHncEF2 "`- ' ozonWkI,^ˠ}׫!z\FkkcFw5є3ýf4gz~d)\9\ӔbmGi>ݳ7ku '@N^Bc<ExŒ\˵'摍EZ Z~NPjݯ_)[&mЃaV43jS4gҧ.5Vj_b\jJ ?;EsGV@"9x&r3=6,V^kt|l{ţ(1k+*ZZ21q{I/FBUfc;$꒝ w,¬zn+2n>9J6VzS3pK>YRdHMOc4ϚV#pJwex4^-9H;/   >ȊHG PI 0䄆->){4RVؘ:N1 މ8۰YPhPK Ui7ڔ-8 icons_jpg/01.jpgUT 4GكHUx*DgTi7 @B UDJ<4i$R  R`Bޤ2 UHU:0g˗O{19qn~aqi/;_}w .C BaG.[]Zg sъD>kնDy r owK/ؿ]~0܇w*_!%nr|]vܾ@K3W tŕ#Gƒx?ŷ+"jx]}etJ0k9]%aNS8a8'A6^nLƘW|vx瑻+Bo\l[[Ǫ!mv}\F9sex0c`+}C]F G^PZQ-5WɦY3zM~I@",%Tn|/ |.a\ۤ<]h]2 > R9뱪1o}mK;#!F yI|(,";BVPHy:*=%շe ڔвV]8o`qU૷+?~1=%q)>C51 31Ιovte7lGO16n2JؐD7˗PRËy rc7;^B;4rm|_A5G<42pP]\%%zT[q31Ϋl?D}iŷ8jMr?q}J&H vHncEF2 "`- ' ozonWkI,^ˠ}׫!z\FkkcFw5є3ýf4gz~d)\9\ӔbmGi>ݳ7ku '@N^Bc<ExŒ\˵'摍EZ Z~NPjݯ_)[&mЃaV43jS4gҧ.5Vj_b\jJ ?;EsGV@"9x&r3=6,V^kt|l{ţ(1k+*ZZ21q{I/FBUfc;$꒝ w,¬zn+2n>9J6VzS3pK>YRdHMOc4ϚV#pJwex4^-9H;/   >ȊHG PI 0䄆->){4RVؘ:N1 މ8۰YPhPK Ui7ڔ-8 icons_jpg/02.jpgUT 4GكHUx*DgTi7 @B UDJ<4i$R  R`Bޤ2 UHU:0g˗O{19qn~aqi/;_}w .C BaG.[]Zg sъD>kնDy r owK/ؿ]~0܇w*_!%nr|]vܾ@K3W tŕ#Gƒx?ŷ+"jx]}etJ0k9]%aNS8a8'A6^nLƘW|vx瑻+Bo\l[[Ǫ!mv}\F9sex0c`+}C]F G^PZQ-5WɦY3zM~I@",%Tn|/ |.a\ۤ<]h]2 > R9뱪1o}mK;#!F yI|(,";BVPHy:*=%շe ڔвV]8o`qU૷+?~1=%q)>C51 31Ιovte7lGO16n2JؐD7˗PRËy rc7;^B;4rm|_A5G<42pP]\%%zT[q31Ϋl?D}iŷ8jMr?q}J&H vHncEF2 "`- ' ozonWkI,^ˠ}׫!z\FkkcFw5є3ýf4gz~d)\9\ӔbmGi>ݳ7ku '@N^Bc<ExŒ\˵'摍EZ Z~NPjݯ_)[&mЃaV43jS4gҧ.5Vj_b\jJ ?;EsGV@"9x&r3=6,V^kt|l{ţ(1k+*ZZ21q{I/FBUfc;$꒝ w,¬zn+2n>9J6VzS3pK>YRdHMOc4ϚV#pJwex4^-9H;/   >ȊHG PI 0䄆->){4RVؘ:N1 މ8۰YPhPK Ui7ڔ-8 icons_jpg/03.jpgUT 4GكHUx*DgTi7 @B UDJ<4i$R  R`Bޤ2 UHU:0g˗O{19qn~aqi/;_}w .C BaG.[]Zg sъD>kնDy r owK/ؿ]~0܇w*_!%nr|]vܾ@K3W tŕ#Gƒx?ŷ+"jx]}etJ0k9]%aNS8a8'A6^nLƘW|vx瑻+Bo\l[[Ǫ!mv}\F9sex0c`+}C]F G^PZQ-5WɦY3zM~I@",%Tn|/ |.a\ۤ<]h]2 > R9뱪1o}mK;#!F yI|(,";BVPHy:*=%շe ڔвV]8o`qU૷+?~1=%q)>C51 31Ιovte7lGO16n2JؐD7˗PRËy rc7;^B;4rm|_A5G<42pP]\%%zT[q31Ϋl?D}iŷ8jMr?q}J&H vHncEF2 "`- ' ozonWkI,^ˠ}׫!z\FkkcFw5є3ýf4gz~d)\9\ӔbmGi>ݳ7ku '@N^Bc<ExŒ\˵'摍EZ Z~NPjݯ_)[&mЃaV43jS4gҧ.5Vj_b\jJ ?;EsGV@"9x&r3=6,V^kt|l{ţ(1k+*ZZ21q{I/FBUfc;$꒝ w,¬zn+2n>9J6VzS3pK>YRdHMOc4ϚV#pJwex4^-9H;/   >ȊHG PI 0䄆->){4RVؘ:N1 މ8۰YPhPK Ui7ڔ-8 icons_jpg/04.jpgUT 4GكHUx*DgTi7 @B UDJ<4i$R  R`Bޤ2 UHU:0g˗O{19qn~aqi/;_}w .C BaG.[]Zg sъD>kնDy r owK/ؿ]~0܇w*_!%nr|]vܾ@K3W tŕ#Gƒx?ŷ+"jx]}etJ0k9]%aNS8a8'A6^nLƘW|vx瑻+Bo\l[[Ǫ!mv}\F9sex0c`+}C]F G^PZQ-5WɦY3zM~I@",%Tn|/ |.a\ۤ<]h]2 > R9뱪1o}mK;#!F yI|(,";BVPHy:*=%շe ڔвV]8o`qU૷+?~1=%q)>C51 31Ιovte7lGO16n2JؐD7˗PRËy rc7;^B;4rm|_A5G<42pP]\%%zT[q31Ϋl?D}iŷ8jMr?q}J&H vHncEF2 "`- ' ozonWkI,^ˠ}׫!z\FkkcFw5є3ýf4gz~d)\9\ӔbmGi>ݳ7ku '@N^Bc<ExŒ\˵'摍EZ Z~NPjݯ_)[&mЃaV43jS4gҧ.5Vj_b\jJ ?;EsGV@"9x&r3=6,V^kt|l{ţ(1k+*ZZ21q{I/FBUfc;$꒝ w,¬zn+2n>9J6VzS3pK>YRdHMOc4ϚV#pJwex4^-9H;/   >ȊHG PI 0䄆->){4RVؘ:N1 މ8۰YPhPK Ui7/ֺ* icons_jpg/05.jpgUT 4GكHUx*Dy8ԋߘ2aF )K5/7X&D"JLز;ƚРPD  -(W?{}y?{4y̍͌@v pvNŅEaD$1"bb2rXei11y-jrx}m !-9+ a6$wBAG@l`g:h@`0 B >AB078KumGdԯ*?vlK_@gr*aI3TzV7P{%aH `~R5۶EOj(d qbvR#zkA eF ߬!e6&^%b\d"a. {ɹᑽIYC'~H!]R(LJ_+trX[?T>DM=CgTW0&3'ȴNE0 B(Sc69穰^h̫k;Yvh jZQ^rD'0H(9W'f~%ܩӠoPucm#:bs F&b1/:'ڍ=<߼ s{n^atd$y)~d 3Y²Rte㸪 y#0tTsl7Qb_ȬLq {V|-=w_: ODV8v[~`OGmwXG m kobʆG9Gk=_3L,k>)ԙX88(hD7d^?$X1p@7]/ׇܹ^ z}0_nf_1g*xlM$b1IHZθ }9 $N'п9|ǮK4^5w.r˲նuXܞfZ[4SKHI1 d UAh +i } S6(6'CjK]2TU޹dpNv(>Q\ɼu-?ԄCġ+3_& YHrܫVW v|3sfuw 2u+Z3u .ZɐBxm^@L IOxObK9)\w'|wqT0O9rqkx+ܹ2|XYB+x9y5p1--+Xy7w9|tE8SakO6cU6z&5zf>C#•,C{]KVGxwycўG5+1FW*iS{QTwgTB`{trJ.Ӑ4@WMTkRI5ݠh mja,w.+ڭu/K>1"PK Ui7Jhicons_jpg/06.jpgUT 4GكHUx*Dy8A2uFԌrȾo4 !۠ѢPE15$nCZP8:]{ߟ??|^y{{-@qS #0$CDQ(AaQI i)I N #T544t tH5H?PAA I'K@@r A{=a# 0 #| (vPh q< %e!&bN}h|1X JZ:z?rvqusœz\@`DdzKo$$޼u7;ܼ|FqIoe+ͬO{=102:q"wiyeO7|?]} @?\ 0 %;"΄ȑ␢&E|xub>~wK/ؿ]S ? w2uCL }<4OBq9_=/ʾ:hů8M tx$g(f""iC%e{ET^IV&j֬SnLR7 !o(QTz |l,]ȱ !L4ڒvp7cdžUsGE:RߜCϊ(?Wy%bvcgl]zSPfTB1`FrL˔E~ 5X^$ryt=<%z:iMd Bs9aAXsyMItwYŊϼ+QegH`;{W%9zKI/á٥72dۢwr-/&k>3m[+6Ҧ^|&;zWxiݯ#Dv契T'!^C5`,(#+3eF2 R8͚ tes{ŌP v4OPsM~x3%ݪo,?uYfkV\H轋t߯6;e跊bo9=O*3^ٓKeD_eͯʬUcuND0c4;A=LA|q%KOJ'zNHT@+ޢQĔm赝9Fnc@Xgh #T|{}&Qnu]|!$9O '$z{y{d>QDžgfX˿#ϱϵuq؁#`/k+b;{֩ iųe"~sc8Tרs^jv϶c3AmMu̳&wgMq+(9i&VJ>'n&fb:H)7:!0MYR*9*v3=|ɷ 1cʦ]c?\"0%$OYq`/&M07-,V !EٍCg^2j8ݻ<7V3$K>jSXF6֎I)m^ެf 7_RKjK]X6<~[jRIs^Iw1HCqK*pm03@P8v_i+QR@&r"Rx ,V`O tJ}j!54x444UA\k@[yq8$AMYtB`#UvL*<|ks -7,*\[hZà,W#V̓F"doOPK Ui72C icons_jpg/07.jpgUT 4GكHUx*DWT/$ФT(`C E\CQPD!HWBXJQbdѕbaq-/Ǚ3g~gf~5_<`P80/77a) i) IIYMeYyuQUuzzz2F:M]=_K@ˋԑ7 8@` '' ..~s@~7a@8cBxo|Nrn9eF95Ox KT ).zH}䨾49ĀȨظ+WS]O'ݸYLSU]S[W?4<2:6θ?|:ٹ7啷?mlnm|u At 8 05 ; aaB:pa6:{O).Q7~wK/ؿ]s<`|9t0"xAP2:bׇ&eɣt4ܧ/TP--Is \.JL/i.oILܻQ8Db3y{x[r"<. q:,"UoGBQUu}eo"5 Cٽ"k!a;_}lJ:>HNM7y~bY|7,slϺ>1=SWڷèX0u,*Gf71rj$o=585]IS5D/f涷mWPu<tMZU,)JK \9{IIWʚTUT%YQnlTf𦅙U\g%~3m1VjO 2Q_;D J}gxM MSHѨZC60e<6ɮ»_^ݘ71pU֘Vs?v^q2oǸ-S0,:oIx]Wxm#/Y+Ȏ!rYqskB(v, oOϿ'&ksN/WczlFs!fZЩK+?raCGTW^߻o$Um&.Ӿ,vSfjpa:C棬nȤ|QiHcUAZtNZry^tcM7Pg+#wˣf?ʝ[8@QDH{X\y`B},}mOJx8GȽ@Z kJ$KXwxS 4GA@x*-K:r{-#_ɀϨ:Q̆jŇ}Mzq>Y+·%leĤzuHռ,U.@s4Y"-2}DxLm3oY5*BёB n+òsM1 (L1Qon_d||0RH<ںݖ#՘,>qSrګ7ڧm<&&nyw*G-\7IqҒ)EcXs2 Kbϡ"Jp-*iujf c3̛Yl׼ Ø]7++ිMB9 ;<-"8d! *VT7deڕ؊đaI!RK,ɖYX@w~=nJ.ةO6XGFZm43~?$[v+M!EFE;߭Dftg$|,RPYR5=BU.ؿ}mII=,楹1fƁnfѤswZIFǮDJ [1 o5(cztsnڭ=>WCWKU،K0\^ KҀˌ]yftתzk1ۋ G|EQ`٧;?cHz-Cg]HBL)w&T*jjє́ڣ6exhnIfdon-pd['c`QLaLoCLߔ::H(Rǎ?9XlwjXr[>cgy|1-{"Wdr&ELfV Wj` )--1I[4h/+s=>QB-5r_PK Ui7Ao icons_jpg/08.jpgUT 4GكHUx*D{8 lI˜zrfDNIHI)لђPJFb%ʹhk*EyrX3x\}};`a++V a0AaDQH$JfFvN, Uݫ' M ںD¯% BEE XWx"F hf# u };A `(DH ^P8 L1 Cއ:PZ㼒Wx|ˉ>~sQ)\Mv=FRzƭYٴE>=c0465m`tl|brm_,.-r. B_.4TH/Ü;&HcPWFu ("DU-`_<0V\Fyѧ=1 RSsOP+OƖvh\3^W^D蒟wP'3U_}1[8/3UlQa±F 1!lX5 ٠K0qp?^QY-:;695ؒ{m'GAvѰ#PHٞ rKLyp (:D3Jdjpf8EK HT%#xВUj]HfJ6G-{KXҧ +.҄2)S=pW TUiʒfWAGȩIGEܢ ^gy2zR#5#2K"0 %O=av]\8^P!n_Xف`fԮTg]V-ƴFx:3DRHj NVi#qCgt59I@zQ=2*7X'sH1˽#԰ʬ_DyO! 0;MZ\X}WW{n*^K`jBہ|Sc儭Z m,!踗t+糂 F"Ǔ,Gh&>k%{k?|_*n<7'jyƒ̈́ugBxevG**ۗL/iYړ(uϲeIT.8[4M6yn\pQ ԩY?bL'0c-:%5<[r)YwQ?xuwt>~1~]̗{sGLBOn dzX/F/+.zJKc[v(laǯcHN: (l5GY׈wB[HOw>=}[IdwH3f䍚7>~.HFgze+KHD"AIh6b1шGl0$KPK Ui7Eficons_jpg/09.jpgUT 4GكHUx*Dy8 3c51)e;c!$3Lh\ԩeU([S*dNYXFH#MWs||w d D0 KKIJHH*Ice4Z @7 XM \ϐH@ $%$QRR(:Z?G 7 Bp"!3(G"BE`pNC A((* Tv)*n`%&G" U 3!o恃ZDC&$S#;{]\=sܯ//%%_NIv#+;'yE%e8=o6wy5oxdtl쇹 յ?7l~|uAGr%Pخ "ra U7|#puV!mE9 '߷K!`_I< X %Ty)d.jo4H"ŠVzLm(Nr؛~5AF׼7< i67lV )/ -{1>Qo_9uyɇLwWQEhĸ4GBo_yt`;G4gTG\9س!.@5ԞKh# |u$gTYq=XFlik5{eݘH^,<}JS{HaȜ3PDq:vY t" 7_i.mOvb#UB c_K"Zkc4c\WcwuKdμ0iMŚ^*gn(S( 0FÇʐtRyX9y:t}n8jܱ;Xzćti_Vƒ"ƪ\o/*~;_rǃۊ'1sσJЖyԂ=c_r=I*݋]E/oŘёr<)ݪ7=y|rOЋem-Jgjm7R8y"-r||ڌSkbz@Ĺs=*ǬŁJ׳UG:Z؜G^]qs!lkĽcw *1٥7 zÿ>4d a'U95N޳F<n{$o `$f, uBqo0혆J1FCW+)i\2ļa-% ~^ƾ;xۥo0kpƠ*]SIC՝|(SBI/-m9T%/h -rZ{]zu:iSgL神{gM$I.gmF1cV|W@t d#/_'&~S.e؜™ N+Ҧy-e=H{:_ s8h̳28tiy"oh{LDp}HqUjcy#8/̻0[6 -q٬",C5}ȎQef8we$`'[+h[e<ȾvރAْL% V Vd%]Uh^-x~ Pt'R;]QXo)'Atu|\O#bNwZɟl飖<7ˆW/Nh'iVKqS\hO%T[dyaQJJIƢ^lg}!^ a-v8;~xPK Ui7G H$ icons_jpg/10.jpgUT 4GكHUx*Dy8 ,fKLX>S(;AB!1rtQYfJJ1Bfaĵˤ\]yx{<9biemc{츋3Aa#"/FE_I5jrJꍛgeͻQJf]Suۛ޾~ɩϼ٥յ.3хqPT 9 ( ,Bx:LyQXIyQB)/-` _<06zdG89;w~.p18_zoՇ</szs%9N ޴vFJd%e̶"v|mQf $3ta=bnr?{{9µfid߃{j2%43y,Ԓ]WS5<ޞ45p'w a3'c>D#F]hR8V!?^Gpfnx ^"[c|-5},D00f#K.MsHp\g$rbbH/&~ꭊ=.f/t&mUS$Af vNK%3QW{$-rr%*G hR, Rs%x]kR^Ô{MFIK}5R~~Tƌ"_,z\1}pbߠIyVczXj*#]C2'x'XZJOoz 4Izc%)Tҧ<K.޶tςy]o^)'dk]%dg yh3i]ܭ)pa{i0}w[} cfr|={6A s {FC3G/'ǖ"<'Pnye?Z}Ec'wz>^#S,-ɋfvhj>t(#1Tk$f$ErYCcrG4[tBf=a 1j %?[C| bm9YrKu&РGLnvS[ͫr1/WWGjcD=^TmdX8VTj nraX,w+ aDR䃕sN4[yutyX 19q}{ o^wǓ/nUϿ\i4Tjrs/}ИShVXi[Z#B]rqŢI#dzPK Ui7Qicons_jpg/11.jpgUT 4GكHUx*Dy4w3Ð13vYDȾd҈+1elbnȚdD )T,-cΐqe~|z|g{`{!Zpa@ xHB!y8~4ZL'%.WJ\RRF^ #ORr4X_HMK[sw B|hQ~~QMYIY9 nPP`@(~H_!PD 0B`P8^0 \HVÌ i&!?|w,y6+,"*&HدopꨵqٙrW_?Ȩs1._۵djZzFf֭9%w/xTi]}CK뫶o=}XSgfpVk[.ߺ0;. !v] $zwj9 <°r Hyj×}ZxϳyY _wi,_;-LOQ}mp@;|JmsE܄s&;//~k6wjR/MQ> zrgY%R;bs$rmD "=cGmFO4^LV=ȑ;[@-7F;6wF#ۖ*k7U 8_!^&o&(FbsGNlN"0q~Oi5bx!ʗϱ+6X>@_&Thj* 1n4J@U/U2^f@FFYrLkYCSb?)AҰ|Jֲݼ޵jR-1[~(c:V5g6eI/)mZMegr%LW^?08bD>.u<$h#e8c,<٠H3o\C145Kalӷ]3,Zݪq"J~7 šz@yY6wqOyvo4xX,%їdIGیjR~i3kq?Y$Zc7}2ty{(8+a/j-Zo]b}#)eͮP1Cf +MNECy ;6 Q_RyR-?!("pr+m*B'؆~f_o ~in[_F><OM^["0@x|YPM#,*ߝJsC0ѪD@ތum{?HۓW(}Vˮ@qG='PK Ui7N5uicons_jpg/12.jpgUT 4GكHUx*D{<63槍έP %wLPH+JIbZ1gKp:"L;~*+~sqyy>ޛC#GpMp Dp8!"G!ВRJX^M:8,Vk.=}ibnl`O0^"RV\\@j?g@^ @ l  B(L.`@D ЭnV`hU}KaI'o0)["86s75Ox,BTZFVN^]CSkn>c[9jckA!1-=#3+;anAaQRzYZ&E}ëw9]}C'&g>Z\Z^&vg B!P =TіNp0ɝDR87OxaB}q쿃_pxp!jlx˸%BM.g(~̙t>S/8j:_ ٓLTeyH^I%-WrnY>X'H&\;g֛HjrΓ T-_A5i 81q>(}Ox>7Pd(zF\~wF ҬB=C<', u~ S<^^Xp/FQc97#Μ9IQ0dܥ˯e)C4 ѱI]tcƿ\C!sM YMdULRŚu&.kAu(Dgbk8e8A)@BTܕG9-Ztޘn VkT}q7kTI^Q{-¹q^ь:aE9(MូߢRo^ghqumcҬK'L:2EÎYc2IYIlNס3Sϝl]A> N), lWIg5!Ͷ͙- K\r?6nO:KHO68Ч}k:LIXD٫೓b6,!{ALTp[>=5vz vr/6jj mdm8w{YAV Ljqg}0 Uk=%_ڍ;I)|Pj5UuKI3k;.,o|ڪƵi].%ӊ@6ty$fd&je}sIZPa%k,&|@/~U6 m{mˣgD.ZGtkj;eJSme/_Ci .VA"6PK Ui7O<icons_jpg/13.jpgUT 4GكHUx*DgTiMD `2E fP& &C B(sEDXN$zl svv|y#lmp1p@!HD"h #+QST5"Zd gN502655=lyvĔDY}4D`Q7  BC@cp $ -#; P  Apl{ypE5B$h٥(ʱCoL#2*xU5um]=)a'llv߹<}٠Ȩc.\MܛyKAYyEe^c~gG={GFƅ&DS3s Ko߽_[qkPGv0 `ap1Bњ W"Qc٥w;7C2*Zoh;X%.ǃb+`cKZTqgl)hw:1\/q:[']'|;/e94ut @;*!k L+K c $Kz)FZ @Lz_zs?6^5AVa_hv1Yn٫ Mpؐ:0zӰ;Q"מ7:#c"lh҃,*idPbN$\2][q ڟEq%8TǏ_ڻ嫿 2O6hZSl㫔Kkt8|&o}hfB+)mo.:ta*NUp7}ä:j78C8G7a fvES%+MowvkLN/Sum{}2#qV1}K[FɘU f$\(dh ͮUS:eOs9u7BeKĶ 1B+E [U\(+6= c6t/Œ/ѴS?hw 1*~񮼤~uE,ݕ5sa37D|HZ;rLs\@] z:۹}Xd$(-\,wAjW~6$M_[[vo__hlYꢫ[=͟F7\5j(pIX6az`7qnebNddYwG*ᔴ52j Ꝕ_h8^{gJeⷙXa`j~\樻\mr˅ fvwI¹3|fT*W~9nhDq\^ oYvjBS[u#'x  kUײm;M&oM[qo#5^S_x4@:Ry~eլΈyW҈|4KEdUWyFB4HAvX=YZd n1Q>sz`ubq Ad3"+ h3Lֲf6į)AMb|Q ZɎQ-b1nçuWRWsV3=zeNjig/L9{*T^q0iT\UFH2-jt?hE? *uN/>YRP 8ؙPK Ui7cXxficons_jpg/14.jpgUT 4GكHUx*DgPM! %1( ŀD ,zI@BpAD RAK/Jo,"D)~9Ιgߜg< 㸏A)B D (RDKHqrXe2@PܩF4 t )9ӄB޾DPh YN `B1f/N8#?B0h  Apl{v0pYuc19" K(AjvɻjP J8bΞa?0;( <ʼnkbҥ)Y9 nnW^?084hb񓩧3 K/^.z-|O] l 0vW7qAeHmFImJuU>=.IYZۦwK/ؿ]3 n-$2ϫY^C5ZgϊPlpAv :fhuXI!#Ȗ!А:n?{f0l|T_H"|r2[~~e!<(@pw5z>^]u ٷ7%LivL@9˦˫ĂYU3Yens%VN!Uw;OloN-[@nt]V%ǫiQj =):߆衦qZW`5++D{Ao k8h9G7P\i[S'_fϧNu$߉KS"|B.>+6h7w06lޭ6gTKph+២XYe _5"J=$3QJ<*zZk)W6y!Ǯp;G'wL},ѯ\&ЖD rNJĺ`uydK1WMp]M;q;EfឳŸ5v&9%n𫵐͆*s.}Kpv;,όgHեWLj`#pŞB$?uY8r=1gOH T ruwi*ETדY Ȱ+hї#t־6B;&F='/kMHMp*] Zf#;gS(ӹ2A]],dgnH)!h?dbVvd:kgqbG.k 73e VIw:~ M1=4 LɿG52ixf1weE~+u[qa}"xxyr10XsBbUC-W_<݉)nҳQiKe-o+շoqុt0}+[g0ipj~r T\:Vh3Y(G;Q#_CS!F!0cOoz/,-U]cwj^)A&$]>?dJL@2M 9ښ%ŕ}9\va%B*A^wQP"Yw 8F+~9`"83rR"&yF҄07=4ur8^9^k-YT CcF-{km"¯pI@Ysn8i3ܧaxu8fʫviJNã>o5CC)uu FebrCذv#.`dHob$D񅑣GvjRwI@tu@)2Nܜ?S8[ B~Y* 's)HAezӯϳ$ I5uǺ(PK Ui7]r icons_jpg/15.jpgUT 4GكHUx*Dy8̘ c!KT(EPٗ$$[GJ3TcOv}H%QYNX)S3Yo_?+W#cb~MrVjF{Y<,,*~\R*+ZW񲳫{ػOs|㯬.] @bP-3LOLDO0 jۑmo^CBRJ:3w0%.ǃǁMUYUj=!PJS\?.:LjU [9~|S\g˜L,.i:Co eC=ƷY],)/'ͻZ-:199+?D!K- 6c H&&6T 5؉uKoB{Q9/F1S%B1sT~M0,rG_<2蹖gNd[P{ _+:૯CYG22ad 3-%Ev(UgiTGl)KPrP} %46H۷ &l_424c_g]a{7 NQ!澽1Ba[x~F"c_PdtҖFmxaZWcsgoqQ\d8@~EL#Ѡ#B^:ՑƼR2}FL[X%OG烙(NP9R_n=ÒGQFbmhs#/ ]wT)qYiJ@V][a-B5}/s_\cWB.8df-ip{--CB7N&G.)Z w=ΊOeNR,n8emI~buyƏ0GK[QkkZQWԧCVΚLjtMV/Fh^= N}9zXk#U4":4:t/r]]d\tɩI3bxZoAv&f̧?=5''*/:jbg=.h4wi0j+^~_A\2 5;jf1Y_`{l:dz|$olQ~O#ar8q|Nm3!QKѡ*] 6BG"ڹ "]4`z!Kћ7HL F"( no>QxNẸF>v%Q8A6P$hpR\W 8++:}x9`U624bIš_)khIr9zmyLүO,RBb0V\|/;fYBzh`vRc|E@E?-^,N=M>g: #T\’N^!<)e=YUq 7buwٙ0=`RMږba#4Ͽ#cmP86C Nk۔3T޾t0(bWX_8#(ev䫦1xe$dq#6v!2אo| At!] @@*0) Ez.LW,s]b T~wK/ؿ](<006YW\4нfX'C%As$\oNgiZ5d( q^k\INP 9'z>2ԱEkdŚ/F-\O42g֠v{HqI_7wJXuXōSvq?YVVB%#);3Zda0]8Bv<GLQ2ڄA.n 1K&M# }ŀDy!o9XU}?cփ*NÈeY1rM"2iCC?trm6}IL!ՌUrB}RNNLpudڏc=8(w)-@Dk;^iѼRCҮGJzzMk'pښld&XO3k#)0٢(iX,er>xMezy@uIͫ\n@T0μm"i]gItILaP8R# %6fW;G+ N&So<=5ivflPr^w/--B@KõDcl?ᏻ_G2?=b̍/X)0KMFЖKaؠ!厌.g4̧eZ'Nw-z.r2&si >T,@љK2o:eEm~gtSQY /u)~kJ ζy/&4g6wP^z럈փ﫺=d7^/Qni@MϸM ɖu8GxծP|gupaYton`>tz/nmXYźlǺA&ܩPzBr9^bip܁nݍZ^'S3ԉ) -dSb7&H=@Ð6EjosVp r(\zHs$o&SQ`kFD;C笵D{)}yHg{Ez䮎vQ+\=Amy)srQGW}66eS:t鉃;Lї3CUVC:oJI3a® ѪP>7$^f<~?S@S(+0$3vFB<Sqcz/TxmQϩ+/|GMEW'JWFpbsG,7ֳzfbv'_i@EB=+g̙P2KC ;^l*8bZk4wwJNTTLi*̤1 NS6m `=!޲Yfዾ]J >0ٽ4 _bD2m vq"E=VMnFz,#J:8Hob\ PK Ui7ڔ-8 icons_jpg/17.jpgUT 4GكHUx*DgTi7 @B UDJ<4i$R  R`Bޤ2 UHU:0g˗O{19qn~aqi/;_}w .C BaG.[]Zg sъD>kնDy r owK/ؿ]~0܇w*_!%nr|]vܾ@K3W tŕ#Gƒx?ŷ+"jx]}etJ0k9]%aNS8a8'A6^nLƘW|vx瑻+Bo\l[[Ǫ!mv}\F9sex0c`+}C]F G^PZQ-5WɦY3zM~I@",%Tn|/ |.a\ۤ<]h]2 > R9뱪1o}mK;#!F yI|(,";BVPHy:*=%շe ڔвV]8o`qU૷+?~1=%q)>C51 31Ιovte7lGO16n2JؐD7˗PRËy rc7;^B;4rm|_A5G<42pP]\%%zT[q31Ϋl?D}iŷ8jMr?q}J&H vHncEF2 "`- ' ozonWkI,^ˠ}׫!z\FkkcFw5є3ýf4gz~d)\9\ӔbmGi>ݳ7ku '@N^Bc<ExŒ\˵'摍EZ Z~NPjݯ_)[&mЃaV43jS4gҧ.5Vj_b\jJ ?;EsGV@"9x&r3=6,V^kt|l{ţ(1k+*ZZ21q{I/FBUfc;$꒝ w,¬zn+2n>9J6VzS3pK>YRdHMOc4ϚV#pJwex4^-9H;/   >ȊHG PI 0䄆->){4RVؘ:N1 މ8۰YPhPK Ui7 qicons_jpg/18.jpgUT 4GكHUx*D{<ӋlcblB.12ɭPfBr+geJFԊ[gU\WTְ1B:$(Gwy^yכ3@*` pIH@% 0( $(iBIN^kۉ1TQ15028 &ֆxK@p8!PV4P000F6{;!?+ 18D KJm 4b 0XL ou[}@ 0wb(ج2}}'ڝ5ƄK*lWTRﵰyLKQ?'$&%/(Y~n?*YU~iljni}Y_0?zT0)}~n~+V?}[.1qq8 $c)0sS1&0}VY}'\} +Oj-)`̿%.Fu= YЀu% %BpK(P#IoY7>UBh@aKx^1?XumG0KϤק2C֐IpmEpN|NBKm|e8[<UsNgEúS~嗘/@JOuޚf~" iKEɢDg9?)ï:uɼmJӞ`gKE}x"g-/:,ȯy>OۜT9yj/,ٍog*,n5 "%>|\(_V.,X*Uu;ᔜ@!z1O]ia9hh.dw{^ClVH;~- %, d)|iME >'73 &}5Q7vL穚NCixSdh6V= dV-5Jfͭ{d ]}/]ڈ` I`UsדƆ'wDeqxa*e|;"cx1X(LއW Ԉlo\!o==Vv:By [YVA 4aaRsE*7#/:N8\m[PkVP\LoIm{Qi30U+Cwy6#!Dˠ4rʌ&I Xt=Q $^^=w?/96P/zr-^-%TvvIbFKbQ`x3g%?.'-BL7b8i]gX<Q"wFkǒXoz}: {$jkCj3F~ݘh_̼slna7]5Z)_1mע3$rsH%&%[:+r㴳֪>rMuT19-g7}Ղ1{]tTZ+{V§~%N4i͌#.o3)uX>93(sوESC”g c]ol*rVZtϷ1БÍ7}IR{p:u^&FPEaZ^SVi3nbSҮ:՟s&֯(+îi7 N͛κn沗tO Ҫ֊~9!2u2߲Pzr=yz\3@q2ZdCL0F mP.W{x3Ʒb8{YG+%iCMީES\J㒣|!(HjEi S+iQ퉌v'x-ge8î[ Cok"x&MKy-U-_ճ,5q^8=& ߏvT< Fd۴uH#AGeIyNՑ3:37auWy뀚1 u:{嫏>@bd`f/FrAVEC6!@Ba%F 7T6 TtKLG>#cMd 1n103#Y/E \ZMy,W`ΥŦc{:km5 Vq,eշKB'^[ihk!I;BTVz\̹䚝[EOXҧܧuӭ['hϲ_:}MyqM2in5d~^+a5mj_+}6=gMhZ` ,[9~jϞ~YTY/)+`mȉ+MxtD%.}[Oo>2/{} +վ:b_[ mWt[~JyjM=1'm|:~}v϶W;CҦ,^lmG1;dLM?a‘eύ%rق[yt$xf]XTumKSZθh^ O4,aJu+1˦unV2m[js:4֤;]lIt֋I|I bXtby.@WK;:J*t\i~4` tPK Ui7ڶz-icons_jpg/20.jpgUT 4GكHUx*Dy8yo 3aưa VcF,i6bS#99GB;Fhرgwggy!1E5h"w/t_DcdwwUj,=}C}+k[Ga'g=9{ـsA!QcOJNIMK_pǢʪZaݽG-[pPpx 3#1Th+ӌ-]s!u47R-B ZITIJq#7nuwiQ>2;t|A<7͏ 䬼x }AkZXHp`J*Wx5˽av#08@XA -6)y%גŹRN=hJqbATS,BƂ_fX}w]A؆#>9&ESAyr "qi̋;eV6;YK!uAH&M/6ĵBlL?R3[{嫏>@bd`f/FrAVEC6!@Ba%F 7T6 TtKLG>#cMd 1n103#Y/K&0|zZeق^ >}(![ wF0s@Uе؉kUƄ] P=`4\ƢL+O]MKQ͚ip܃&NR-הKJn,2K/`|PrU,uK3-K?j5_'<+ӶsgVȵaѕu~:ül-gΝ\͏糭]ucw7=r+`шYufM 3۪|p%-U[,K#b.tZh9Tf$ϑI:r˚NHXѼqaEKXrr$2:MӨ8ldB~ƅ&VsLpx53Cs'WY2(KAߕeũҚݶ.ɚ;t1(=ShSYΰ%7dX h˜dz&MfjPYRoK /5 麹DpcTPK Ui7o$Licons_jpg/22.jpgUT 4GكHUx*D/7O7FFF dGGRH_DVJ^NVJFFAEO]AIGYFF\SD^Fd#'''7/AXXfF%&AFfAGde(`dbfaec**3 ): &+5N\ȡh*IEM\bRjZ&fV.n^!aQ)iY%eU-m]&O:m-^t+Wmڼe;v:tcO{嫏>@bd`f/FrAVEC6!@Ba%F 7T6 TtKLG>#cMd 1n103#Y/E \ZMy,W`ΥŦc{:km5 Vq,eշKB'^[ihk!I;BTVz\̹䚝[EOXҧܧuӭ['hϲ_:}MyqM2in5d~^+a5mj_+}6=gMhZ` ,[9~jϞ~YTY/)+`mȉ+MxtD%.}[Oo>2/{} +վ:b_[ mWt[~JyjM=1'm|:~}v϶W;CҦ,^lmG1;dLM?a‘eύ%rق[yt$xf]XTumKSZθh^ O4,aJu+1˦unV2m[js:4֤;]lIt֋I|I bXtby.@WK;:J*t\i~4` tPK Ui7icons_jpg/23.jpgUT 4GكHUx*Dy4klfA[j%d+ȵkeZ,m Qc'ʕ%:d #dfiЈtvyzss^ [g0\\p.# /77A~>A Q)I Qqqi9e4FQV\\^㈢*jhN*q{K@H$GW'#.p^h@@A N3 {O[?C0.8A nna2\VpL .C!e9א("E9?m`xcS۳vN^}|HWCB¯r#39%v-_PXTkʪgM-W=}SgfWV>76\ +BP( s!{h(LF_  OyXހU^:؍ÏZ٣}7ص% @@A`-OF}Q0]K'puDv}{Te!Y[|Υӵez5ODTF0=֟cdK7$}ff+KC$V9)~ned0vGf%:μ^U?Zl3d3`=wb;kqU(ܪ-m(i nd{f. ̿K,Ԓ>3o4v?c! abY:Y(fp8+ҕ(*\@('8l\$?Sa-,*5)C? y0oA53Q{ĭ*GVz5g5s>ouSt ' ulbG u%* GLcliqҼD C(]-ktROt1.i#Pv&UH G!]I,8O9~Tf/&!uA:\_>I(.z ;w 4[H݃MZ 6m soڰ±oH5K zh0R9M;D:d{k~Yl | h!ZMͰ>)FY: .Rd$u1A[(^_*ELW*m+:uiӥJi 8Sڱޤ>GH[V3Y:TEE[1ȴH"{TwNu^)R'3O>o/W\f ZPK Ui7icons_jpg/24.jpgUT 4GكHUx*Dy4klfA[j%d+ȵkeZ,m Qc'ʕ%:d #dfiЈtvyzss^ [g0\\p.# /77A~>A Q)I Qqqi9e4FQV\\^㈢*jhN*q{K@H$GW'#.p^h@@A N3 {O[?C0.8A nna2\VpL .C!e9א("E9?m`xcS۳vN^}|HWCB¯r#39%v-_PXTkʪgM-W=}SgfWV>76\ +BP( s!{h(LF_  OyXހU^:؍ÏZ٣}7ص% @@A`-OF}Q0]K'puDv}{Te!Y[|Υӵez5ODTF0=֟cdK7$}ff+KC$V9)~ned0vGf%:μ^U?Zl3d3`=wb;kqU(ܪ-m(i nd{f. ̿K,Ԓ>3o4v?c! abY:Y(fp8+ҕ(*\@('8l\$?Sa-,*5)C? y0oA53Q{ĭ*GVz5g5s>ouSt ' ulbG u%* GLcliqҼD C(]-ktROt1.i#Pv&UH G!]I,8O9~Tf/&!uA:\_>I(.z ;w 4[H݃MZ 6m soڰ±oH5K zh0R9M;D:d{k~Yl | h!ZMͰ>)FY: .Rd$u1A[(^_*ELW*m+:uiӥJi 8Sڱޤ>GH[V3Y:TEE[1ȴH"{TwNu^)R'3O>o/W\f ZPK Ui7Y icons_jpg/25.jpgUT 4GكHUx*Di81c4leLVVc,WJ 1t}A NqcTADFd/ cb?zs}ݯ~~qtp8pIH@p xp@ <(}PhbXb#R Y9g859E͓Jʊ? H>"I9;\B.~ؽ{rC @0n8ɻoB`PnnlW`g.R$!Ű\i+2J7=Ñ=;zE=}CKW 6vnqraģȨ I)i^,,goU5o~ojnimk ~2L|_X]co6?~ ſ0Og?[ \9‘$(#[)d"|ӳ2O_5 ǃl^(/vpGۭj<+D:o\X5 oMkH4ho% :H Or횥%3A jC|fU]\Pd gV RtrڭF[%m4gxɵ)(ډq쫚s);̰LC);8%5¼+e~|^e=Bz>mN'3|}r`kzk,vdv-@zY_zi\\lO|ws.6̌}Jf[,Sh.}Ūa{O^JMKHJIËoDKX-5νjMYaBzEuc_G0v_>FzF" ૞:n}gSŪ^ӷ+qS 9 1OiSovzjnDF3miR> K+xc>Fopr ie͍&:V`8Z@YrXs  4'pƀ4LZ3hiӉXMAwRlOZ3=": oJT~VAu^*Y5gf# #نe CuKiw%Wi\+9h2ʢ/K0…j64_6{mw[G@(xy/_S?~JL [أE.+8! Y0B^cv\D^ja)ՙ$8 BromveS췉-cy[npZjO_wc4GYvzxS4 ,ܕx )N]o[|˩v:k5-_6 QF$-Z,/MO+e9kj;JZ Y~#D?M@}s'o\_"5H}GcO5uAZ1߷K8OՁ2@WpΚ ͏g35yiTF"l??k2)N͖>9S y6KazF+~Mr*,ח^REuH5>\yj!>ukbsmR]ay]́c9V>!+vS׫=;d 60tz箱%enc̹_?ȟPK Ui7J3l#icons_jpg/26.jpgUT 4GكHUx*Dy뎾VikP$_/= >+c|]T*λ`P5%)w@\5ɏKڇfd4+vya7Xdy/>P H3?1 vdoi >`t 8m 3n 9Ux0z zBڻNN"&C<4q)uZ7*³IbVD0inhRhF%"1WZZE9Q3أzkw3ʝc5./$Q9v** Zn]$Tr1ލFkҎi>'Õה,6fTTrj1zXZAFd́s5 %Ɩ &8/.l U&w@m jj-9L&t/ φ%r |J'ײr\n bdB1IvK@_cSә J 4y>,^Vhsxew/Zk#?'Ʉaj+ QPK Ui7 icons_jpg/27.jpgUT 4GكHUx*D/7O7FFF dGGRH_DVJ^NVJFFAEO]AIGYFF\SD^Fd#'''7/AXXfF%&AFfAGde(`dbfaec**3 ): &+5N\ȡh*IEM\bRjZ&fV.n^!aQ)iY%eU-m]&O:m-^t+Wmڼe;v:tcO{嫏>@bd`f/FrAVEC6!@Ba%F 7T6 TtKLG>#cMd 1n103#Y/E \X2oe6\ *Ӌ7Ihod&pQe'./냦SVoxMռV-O/:<|^y{#uur4۵f*Ko}#Rc*0⯫\qK/:mUˊf._`/HcέɅ2>='=Srkr9ѽARf9T~o39suV?j?Uu} zmʝNU?|:ovBΤ.PcYZ=m!lh(_f[5{ݳtqë3$sH-xzf* QKsMJlϏzVݜiOW_оnz1B%O7\Tz>.vË|YeO%~[yǞ}>ͦx:M cnhVԓ^@i-*W%mrV[>2iz8z7yo?=Y왟\2:ن\AU5ݻO8XP:\oޮPuG;2-hX53-Fh ~=Zxu_'קE ) kU6Y?x{;'ƪGur&a(|%%룉{7g͈H?2?7uSH"ovp:X9: ۆ'XI}x#%{@Wͥo5hoWq寫Kn۽kqve֐,0[t@NW:ްոay%q`7PK Ui7ȓLicons_jpg/28.jpgUT 4GكHUx*D/7O7FFF dGGRH_DVJ^NVJFFAEO]AIGYFF\SD^Fd#'''7/AXXfF%&AFfAGde(`dbfaec**3 ): &+5N\ȡh*IEM\bRjZ&fV.n^!aQ)iY%eU-m]&O:m-^t+Wmڼe;v:tcO{嫏>@bd`f/FrAVEC6!@Ba%F 7T6 TtKLG>#cMd 1n103#Y/E \ذvBaսL3H/"5ikgxS_ʣPix΁g$MKK]yb/Dgi60/ oO󼩇{&^6چ#yu'S7jdEIWmrM /14Kإ_m\jtKt-iF44;W;M2P\UK“,Uao69;F.Y|[OUt)'n<]=bGCuڎI{8f֏bm{ܻ]ΨZ &-&xVx}MKބ^y^>9~CMؼM|~g1}_ 7 \wT'/t-p'6К/'5yE"OȗeMh sᔛyI\-<:uy|}l\6gӦ-h~mUWxӝh+=>@75s-W(z) Pɽ{>9knUsܸJ<[yˀg ,"MO|nngM<9o~[!gW,ZB[Τh@֢Wߐ >@EL10!*?(_b+s>:%tBij^׏ l.EV ;|EQettyidH.fN9;QY 4ċ^m9'pp=7C{Ne.Nedl(Թ^{3[M&şwFjey.i&sGb-l\41 H2Lqmѐta©Y]CªZ!9sz:D!s8 6dbje`9O!'N{ 1Ye:\a :_24^ Fw[MP+\l'ΘԬo'59q}hw6]~c|cPlfhL%TC'Ҏ_;3ț-۶4^mi𾮈Y;V̫5g;xM냢 tŠ=3rnql P|6æ%')dH|##G 2JٴI[6S6p*nnW9gd}QWgx<1xwZ|G\C}hBEPOLvuwPK Ui7Dž{&icons_jpg/30.jpgUT 4GكHUx*D/7O7FFF dGGRH_DVJ^NVJFFAEO]AIGYFF\SD^Fd#'''7/AXXfF%&AFfAGde(`dbfaec**3 ): &+5N\ȡh*IEM\bRjZ&fV.n^!aQ)iY%eU-m]&O:m-^t+Wmڼe;v:tcO{嫏>@bd`f/FrAVEC6!@Ba%F 7T6 TtKLG>#cMd 1n103#Y/E \X2넠SŎRێåf8q)gFY'?O˙Tu_,>lzRӍX!_bQo̍2>:G.ڭu|;EOWq̱HBxJMjY(?ZQIUM_1r8u? ;g}\uim]T>j;pg*g.>w~گV4OZRe|R n卪sk϶p'=۝vʜ,]Ơz6UR%y&)Hqe+WEWN{mϜv>nzY曐s7^JN 9Pn:{Uֵ_%Eoɾu9%g꒔*ױ_8Y4 Z210N` t@oPK Ui7. icons_jpg/31.jpgUT 4GكHUx*Dy8a,3e#FK!/2o(KD)dPbR2LLmedQVYJvzs8|?<׳vw@ ;<n.Da||0IRJvRJFF,(#Vpx@CBa|0 ~~ <Sx`ݗ9@G@`N.noo*p`N0'^7ap¹Z>plREgo}#bRJUЪ8zx}S3s K+kN.n~ 2*:B+)W'޼UTQI[u~G-_|E~=4`F޾45=3;+k[ۿ] g sB~@ѿ\ZcO6G$N3wQ߈7b(ܤo߲kA{Fƶ }36d4á>,sqxW/;U{[[Ptq?$Ϗ-w?2:=UeQsQgdc]Bo/Dλ\ i`bm j/FnNJ4:-Xej=}ԓAjB;uU{Icj`RooAoƔ>.iMɮ`+<,WFvP͸ G1VZ]̚2w',]լgbG]c!u\1}pf h%K5iL 3jS9 #Lc#bfjOJ٣J'}\;@G&kHtlRߥ?-B?BA];Eb;7PG >OM]Bc4d`si3!Uo~۽3w(NXk ja#nĽK; >;GD=-Imv@Zڷ 7kLpjR{{)-18!67sȢ}kkfv-fHQ@AhPh>%.k Un3`Űw9E<@ܱc  ."s=A%̔f].٩yxAt`R4уښ4 犉,EO/JȭA1N6 YFho6*eK Cªޓ҉]uEK.'wE5ZORjq\dʴGhϞgv Lk vh7ؘ̠gQ}^Ov{nE ֖o)9{a?tЀs0Gc([QՂܶ+Dm*e҅X/EV9ڲ5tɠwDB5=R7OL&բ4hkXTt*lJ Z!I./Dݼ/zV1ayPUqbnSN^z !b<BV%RQ>6g.sU[RXw=Z>] ՊCnȔNOI}洩p/}橤.U]ti•f_qH|9^;怟+R K|OPʅ8Wa6Ɗ_t` oP3KX?15fi9]0+]r'Yt ->=oU[r Y"`N|q̖M%Z[˖@혢޶ |UN1hJoF:Cޱ _,@pSF5ޖ8.L:,g*'7/lMب7[(| o1J *D$7G9xpLo{嫏>@bd`f/FrAVEC6!@Ba%F 7T6 TtKLG>#cMd 1n103#Y/%j bM.]9uβBbKrVm>՘`ot>*KvK.]1ssᤴ\nW5.omT2 ULIȚ1MiwrŢ]g?}]֪/os{|18iW̌qW΅|Ug8XK~kK5Ղn1勛pcU&6!M{=v/pmGViLozj.b2uVfIS[=wh5hWjW=:4r1KJrKyswќRVn_-]Z*j̞eqVsJ/ZO3ЉF^_6KF5ek9*Ef߲lE[wm,߿ \[͵4Œ%ەW*&w/Ȥyz+Nz֓2ߤEGĤyj<.Y/n]J67Ǖ^¢/]y\ɱIR5ڬ6gݰ;W'ifse2TJtϹ>FmrjKw&xiq[ۚHK%YtaeЪ+5kƄr}qU$yVL ݴ=vvq|Ȫ ;n,j-릶p.͎7PK Ui7Q6oicons_jpg/33.jpgUT 4GكHUx*D{8{fFMC~,*TRsTx %I%b!fa-y"8fM9'.nvs||}=+ֻ:8 À0IG"R( JZ(aFi#^Yi#aYEM_672655o X.H$J #@Pũs48jAq_}$-% PI^h\H") vSV-)j +vCHBC3۰9 4 56kn13$:8nw{^o}CBG?~lƹYyW ( 7+*UwYMw;:rsx/G±7oM̿ʚ  _ ꒀB!P 86JylP#"0Wh6 i/%aZs~M`iK7@AAЀ-]vZ껥+^;kʼnV1I%LOP"GĴBi[[zB:2azOy6}V2a}*r :ڐ5[C$^πպ1`ܷmW _mS&nmBP)DMXt69jlD%5F_?g?N{?\>82{L`פ=K&{ fW;99}lB4}2@eʢZ rlx[C^m8l^x,gĮqܴI$#21sLҒPSe0]%4*`Z9;>)&ދ*>f-^_t{mnգO S7G$yÛc߆ X s ?p̚8Ws.:N=#1?8bU>| ej=bo\WkY$H 90Y4?5Z`Ǡ=dР\^#սJV^ wvP◯c0*{m/~F$5 buOsDGKԖ:y Ϲ;9@Y6ЩCB; O+PK Ui7Td$icons_jpg/34.jpgUT 4GكHUx*D/7O7FFF dGGRH_DVJ^NVJFFAEO]AIGYFF\SD^Fd#'''7/AXXfF%&AFfAGde(`dbfaec**3 ): &+5N\ȡh*IEM\bRjZ&fV.n^!aQ)iY%eU-m]&O:m-^t+Wmڼe;v:tcO{嫏>@bd`f/FrAVEC6!@Ba%F 7T6 TtKLG>#cMd 1n103#Y/E \ذϥYM\WdL!r$4m+l51..Yƺ1lQ9WV_S4JҤ&[l/\&֥Z UᚅhPY8[cޕFX-xKLd OYO$dWIZ+u=L9\.|wy\]S_nzpc;էpz^Lm'92f;pzrmegsJՙϐb&mY_|Zd.] r鑄w۲ rs-4Q3rХϓ^hqoΛ ]5B>hp>ӳҷsi?K^Sؾil*XDMw}2vJK.=ƺrΦ%1o19qn~aqi/;_}w .C BaG.[]Zg sъD>kնDy r owK/ؿ]~0܇w*_!%nr|]vܾ@K3W tŕ#Gƒx?ŷ+"jx]}etJ0k9]%aNS8a8'A6^nLƘW|vx瑻+Bo\l[[Ǫ!mv}\F9sex0c`+}C]F G^PZQ-5WɦY3zM~I@",%Tn|/ |.a\ۤ<]h]2 > R9뱪1o}mK;#!F yI|(,";BVPHy:*=%շe ڔвV]8o`qU૷+?~1=%q)>C51 31Ιovte7lGO16n2JؐD7˗PRËy rc7;^B;4rm|_A5G<42pP]\%%zT[q31Ϋl?D}iŷ8jMr?q}J&H vHncEF2 "`- ' ozonWkI,^ˠ}׫!z\FkkcFw5є3ýf4gz~d)\9\ӔbmGi>ݳ7ku '@N^Bc<ExŒ\˵'摍EZ Z~NPjݯ_)[&mЃaV43jS4gҧ.5Vj_b\jJ ?;EsGV@"9x&r3=6,V^kt|l{ţ(1k+*ZZ21q{I/FBUfc;$꒝ w,¬zn+2n>9J6VzS3pK>YRdHMOc4ϚV#pJwex4^-9H;/   >ȊHG PI 0䄆->){4RVؘ:N1 މ8۰YPhPK Ui7( ,icons_jpg/36.jpgUT 4GكHUx*D/7O7FFF dGGRH_DVJ^NVJFFAEO]AIGYFF\SD^Fd#'''7/AXXfF%&AFfAGde(`dbfaec**3 ): &+5N\ȡh*IEM\bRjZ&fV.n^!aQ)iY%eU-m]&O:m-^t+Wmڼe;v:tcO{嫏>@bd`f/FrAVEC6!@Ba%F 7T6 TtKLG>#cMd 1n103#Y/%j bMZWR5iUlfE`۷gKUa2u 'W~[7%EAK]޵+ϮawJK=[oq7ݹyx˽bݺ8砮/V^fZJ\t܋S{~*mqrꭡ+tS~vY_?;U:6tg 'CazS*tFiVoZwQɳ6M _غ\uȭ݆W/uzq>7Mp$`lp153-[mMLF. ZzjFќS/zojό@W#m ̸ʏ%G^, 7;϶ ZpE]*d&PK Ui7FU' icons_jpg/37.jpgUT 4GكHUx*Di8d_ N:BS UʒȒ,3T54ʒ([y\gys^s}sLG = ca0GYQ,,(N.vnaAQaA!!1FYYYTJM )@YY Ss$0q@N( 2$B 3AP(r^=F&ĭ~.[:Z%8<.%-sBSS704:C0"Z]pus uF|B$R%3+;'7/A'u TZSsˎή>[c3s ?-.-o|o8t1A ` {=a19q+¹u׾@H(YAg$7~wK/ؿ]c :<0~J?("l} Ye93~BO:]7}%Ept9,]p8RM!Bդz0jGdGy.'~q4v¦}ryVwSј"{/Nł1? v{SfZMFv/ȳEipҝfmW.m|KwBT&>^[:m奉434HϹlyn})I"8 XC&)ֽy`|: I{p/dbiPlq\hykt ~ո6RÿJ &PK$N&؄ıS/WZlGĘJi.!޷\.,wBu4Ẵ,$UG?0W gdb#ēgE&{l6$zW4W&pC]-!5XH͖W.@ $٬ZNJ#s(c ID?%1݆}~UpmW̷rNh+g|}F-"6=̍|xѐ`*Dxx1B06rl>*W |gZaRiS^]m#beon"}GMAݒLbkd i8wz[tnX4"nܽ(SG&Z\OOa}>_䯵hYZs5rԠouݏ9A;K58Œ$Uye{i,NfaSj\XY] /!&qRŋL48בyZ= Q5Po r$XxgG󧗋B29u!ڷi 5 f~:1U@[ =%]L 2LgM-ᔤ@싎S:lg>?ёaʠٳ+v ޅIxD ]<,C><0ldD޸y3- PrӍo;w -$VgU ~6ei* ;Q\Q2v_mI3GW['O[R#˧C~BVK}swY]5 'zs{eWϣi74[r-C%\wJe"b+]HZTPv>d_Z;0yCq'$MFO)$׳,H1j쎌a&_-5fwsI; ~#m,Uɪ`E*d֠+Ql^t8gvN 9-,-/2ȥ8 3J` ERLB^TXI$u칦Qoezc3c(v!VHmi;78&SNHs76vG AY 10alfM:UcA@\ZཨunBYJ>$*U>+rʞxLƉ[$Wpx[yKƞݝvy\ViMG񺇼_g^Hx{K`-_-5?= S4 ";kSQ+jlA60ǖnCoNgϩB->Rx.ddd?ޏ~;o2d3>_+4@JPK Ui7FU' icons_jpg/38.jpgUT 4GكHUx*Di8d_ N:BS UʒȒ,3T54ʒ([y\gys^s}sLG = ca0GYQ,,(N.vnaAQaA!!1FYYYTJM )@YY Ss$0q@N( 2$B 3AP(r^=F&ĭ~.[:Z%8<.%-sBSS704:C0"Z]pus uF|B$R%3+;'7/A'u TZSsˎή>[c3s ?-.-o|o8t1A ` {=a19q+¹u׾@H(YAg$7~wK/ؿ]c :<0~J?("l} Ye93~BO:]7}%Ept9,]p8RM!Bդz0jGdGy.'~q4v¦}ryVwSј"{/Nł1? v{SfZMFv/ȳEipҝfmW.m|KwBT&>^[:m奉434HϹlyn})I"8 XC&)ֽy`|: I{p/dbiPlq\hykt ~ո6RÿJ &PK$N&؄ıS/WZlGĘJi.!޷\.,wBu4Ẵ,$UG?0W gdb#ēgE&{l6$zW4W&pC]-!5XH͖W.@ $٬ZNJ#s(c ID?%1݆}~UpmW̷rNh+g|}F-"6=̍|xѐ`*Dxx1B06rl>*W |gZaRiS^]m#beon"}GMAݒLbkd i8wz[tnX4"nܽ(SG&Z\OOa}>_䯵hYZs5rԠouݏ9A;K58Œ$Uye{i,NfaSj\XY] /!&qRŋL48בyZ= Q5Po r$XxgG󧗋B29u!ڷi 5 f~:1U@[ =%]L 2LgM-ᔤ@싎S:lg>?ёaʠٳ+v ޅIxD ]<,C><0ldD޸y3- PrӍo;w -$VgU ~6ei* ;Q\Q2v_mI3GW['O[R#˧C~BVK}swY]5 'zs{eWϣi74[r-C%\wJe"b+]HZTPv>d_Z;0yCq'$MFO)$׳,H1j쎌a&_-5fwsI; ~#m,Uɪ`E*d֠+Ql^t8gvN 9-,-/2ȥ8 3J` ERLB^TXI$u칦Qoezc3c(v!VHmi;78&SNHs76vG AY 10alfM:UcA@\ZཨunBYJ>$*U>+rʞxLƉ[$Wpx[yKƞݝvy\ViMG񺇼_g^Hx{K`-_-5?= S4 ";kSQ+jlA60ǖnCoNgϩB->Rx.ddd?ޏ~;o2d3>_+4@JPK Ui7g;ficons_jpg/39.jpgUT 4GكHUx*Dy<o~3f00a 470XǾ}?"K&!#Iu"'Y˖f;Cz$C%A9,q9s8~y=M017@#LJCH$??JB "Ғ2G%d$%Y1meꚚ2J:S$ M- IɑuxA a@2Dg@G!Q B n~c"r|HXrBz JްG~Q7N\/tLYEM52[88:9 :y1})&Ĥ7~y'#3+nNn^iYyʪꚦևm>Oxj޽_^e}usWf!8¢0p:y{Q95L/iװ$1&#j)9صKo\Sa=u~s|6ۓ*Y/vҬޅ(x@x79橍Y E1"eKS|tw/kh}4} J#IcWϩm*](c.ڼo #3Oں7')0N8c]כ%N{HI$lᓛ6)g;:3ykE_L<<)eѡ*/yiJhh٩PVgn.|O 1En,p}o'\ľ\V/ɷ:=vgF% >Rc'q勴idTƆk@ qㅞDzhW6-ʂ>~Q }7[wP9Qh!܁WBHfTH&SM%q+Om T"[\&}%{}~B(nViq9Xy~RX_vYR&";ᩦ)6̹ nwj%r]H4]`B1X9?RmWU%h8]Mezka8 7h%$AbBȸ޸踚`Ԓnfĺ#5Z]=5,g;iBF>w8A7BiX`2胍cwϊmi'k&i{홊'j.'V0Qv k{PK Ui7 y icons_jpg/40.jpgUT 4GكHUx*Dy8ԍ؆Qh3^ɚeMYBHS1%%u2HЈHHSRzs~ϟ<9llLR$kf%p@ E0b($FQAYIQUPQaZڻu5͌;~/XUV<OH A4hP޼+?C08)"  `PffaҪpP Vmu- ݲUN^A MzF{-XY!9J>w?5\Dd W&$&]cgdefݺ}aݣzvCcS.NwC#o>L >~~cϕ.3хtPG@Capi 'P5ٟVX&({*'77/d AX^txUBGb, fSN?J[VrM=K.gN& ʦS[!նI8ECGs \%V[ҺY|iRn/9H&J :c@p4l<0jNήp9dGQ]KzOS7PFNgMM=ѝrpKK/n<>0u\Г|!-'yK;xo,-AT`OrQTitAmoO]-e9FEi5moR{+TE$33mf̋WZᥕO`}˱n 3>OoչCS^Ԇodr|YHP}tn-R31:-n*7TCf&y|\zbYbp'k,N`綼PrV)G~VrU6X0g;Y=|7w6|O /V \g B/]IE͚ H7!|Kb\ƜOJO(z0j .?G0^^SQ+,fM^2[ECg3&Wt:ڴ+P*ɉnYafiljl >+|Yu;aL8 >e8%EáZ*1$Lف)k[,M?gn@E뻂7s2JJ\SCAU5fu \s/b9=ֺ5+,e'] AS?؆q!C?/h]_RT3?gRr~퐭\7@(C|w8 5~!gzuC3!pC/к.|j`>GuGHys"fJ ~Mg T f+9ߦ 7hIR+ 1{gֵЦ' ;9>_͌YFhC[xQvOT6`. b!+ jW>i,QMKeJD˞"D:w}ZR2Zvf!UgܫfLdyY!,UOh;32Lƈ},O9v#KT9!t9EKm--dшK%u0^Y𣦝|z_\+Uޡ ٶ/G,dr:ojөe&6'"dZ MReMDy2.X0|:&dl;PK Ui7גjicons_jpg/41.jpgUT 4GكHUx*Di4$$"J%Z$jLŚA-F-Jo[tVZh6M;T2.=S{T)qw<;?m(VTHBapJ!"@KHO++aԕT418Ym]]]Eu"ِ`K8YF dEEe ʄ9G-x^` 6@NA H „"\q@ @q7@fBW*(Bbv sUi` $ E˩zDykEgWKWv[Q1wRRHKcVyíohήѱٹE򛕷;v88q0_.KC'.@"-$a*BHeԴ ctXYշ'ϲ5 #`RGk:OdRgwxJ;aI7i^A:PZ8*ēɵ:jv-0\ З3t/O-ag Ӥfjd`rɕxFA>^#l91E`XҥLkYmR&ʇs`-󩦄Of+=V#߯Hk#ģ6rЄTMODIS ? O!A30t!df>[{!˒TOP /8S '|M?lyw/q-za8<Őr-؇Ehjc7~2B_y7Q=p<V`΢o:{GRxPnzC?~ɩ1,+.͞ioM3(OEs*okRn[j-K8 Sv-`#vzQQd ނDCJȶfێ 瞙őey] qcʢk!I㤟;+o)u{rU9$vFAtN=4#BǤy*  qNuͣY3O4/p nI]L͂'jqoR#{63B݌ޤRf.ɕݥdz62uڑV@C|bb)}xtg&V}eqYCUD=);Cr Uqm™> Xǯҫ=,Pc!JqFOs}Iɻsuy8>ufT9e S]NpsLBnzkGizdWeCMtc5ğki׻qlԼlLdxV&_n3 N k>\u[hڭda;h 1WϞ!Ք_iťR5˥".K]ԋC-dZRLS*>B-\pONJg7ZZ֬6vՑvzVݯj{[A7F3;M'n vw[Xz:8KM&o!'Mz% Y#o>%V&3fQbn\}3w!,%UYl073}󯾏:2( vjcoqJY8TBɑlb(SNo;&DN4Z]=MΦ teEΏe(yĭ9Lj7)ŧTqu{>~smL4`H#f6p̢j/ī8II+jD*nԩh"M~q]aڵe[D(?=iVcKh ]@zӖV*ClC=:`E{Y@h.+ BSբJȎܿ4fzF;-x;2iY|KJ4^NygAIj4̅a6\^֒fǯUOYNjsݙkĊI$B"t@5Zaeis9ʁI2bKfԚҖV=SKC=8R.Jwtem&Dr2iT?\9ێHabԦ &''Bf +`%܆D#eטŎQ1^v!N gS%Oxzw/ѓ~͝zlH.S}{KnDՅKTi|O^7Np%{*!o@lE2TRQwPR+޽JYq:YjO,gUDH'I\Ͳ`1.;{7ƹÎ[IlH꒳\C9nkǷ/ƛ>ػ!?2?j>esčik iF'#pVmʅ]˝݊*81Mv6&}_G-0Qi7_jVӺy$A4l6s>3$/|PR#IZ{_vmj 2n&@4,"o]@$.j%^,j[8Ap 懕e^Yok3 X F!kѾAԒ:/deۼ}"4M/_ޭ\ ܧfKsF}3kݪbg3 +e"jbfY/ŁudkنA.Ml1@x*U3T|a~;['PYW͓})Wu@%N.بG0=:a͌tQI& rKыrO!һPDAg^U i]6*1J_"CgF U;OFG&,;rLwѫtO2}ZUXO`'aDm$1glUm ij$eGg5|Mwe1 &Ox<+Y1YKHXup틄q:" Il)b:;PK Ui7k L(.}aqٵJ‡Ghh4V1ojКX=Z4]"vɵpѷ1Z熶l4}ÝOW)950O'G!Y-TWվoe]K kԨf~̥kid0;+EW{t-$ C!Q9Bzzwa_"VZds2u7j;iUzF,4M||v/>mVbNj74^ ep.|Av"J'W4:#6\$^OB]C `D%`h^h$6az.5ȍ?1Ne69^~ &z3n*]篸 Z&"Rs*Knua㐯fQET)LNuYr)}Oy5^ \PʭGxF0pQ1LwLGH]=3AgvB+]DtC$ж:zkj$sq#by;,0Xt5r[W`~/-w!kn7{Q閻[r=BLGF0Wn~vL1k+Ff>LuC-F\B/z\>Eš;vw;f=OgP@u_ڈK>gMTIꎩOz?NN,Z^dZ}M/YQ xd~gn. lI=W˺4]~KiFvG-U WRi{/_Ya)-0)wk댱8he=]s"4R}*[긥{38M7W.Ec;6vn |=xP&I~]O@C i:cU"(Kx1ژ%P10|$]e)vkҝ1/-a}M1A7>?ڢ1{E.TS|lMU:^+[3`^`xqz9͔oRJg6rCu>jhsJV_ގ?=QfLM8{xðFTs^g~U 4h3)|7-DD  "2'&[ZNvSh=^Ǎc%1f/[f3t֨NnUeEFtEƆoG p,4u1\ ]~:G$,dx/VRN#uY)\UrgX,84 \f 8aBuU߳^ˆF=Ujg4))̤d' Lt"_(>n}%dnj5cѩoJt7F<BעyJcrF#,hT{(n|M6y&ef>+ukJ0ϱ<= ݋c7AD\hRwںU\YA$ִ;=pDlDY8:J)Zf#$ IM#unԒ(ۯdY򾌚Z{pٙ;';XL!EmKv.}{9 jo c:$ri9rh/~T֬9}@,/"I9;\B.~ؽ{rC @0n8ɻoB`PnnlW`g.R$!Ű\i+2J7=Ñ=;zE=}CKW 6vnqraģȨ I)i^,,goU5o~ojnimk ~2L|_X]co6?~ ſ0Og?[ \9‘$(#[)d"|ӳ2O_5 ǃl^(/vpGۭj<+D:o\X5 oMkH4ho% :H Or횥%3A jC|fU]\Pd gV RtrڭF[%m4gxɵ)(ډq쫚s);̰LC);8%5¼+e~|^e=Bz>mN'3|}r`kzk,vdv-@zY_zi\\lO|ws.6̌}Jf[,Sh.}Ūa{O^JMKHJIËoDKX-5νjMYaBzEuc_G0v_>FzF" ૞:n}gSŪ^ӷ+qS 9 1OiSovzjnDF3miR> K+xc>Fopr ie͍&:V`8Z@YrXs  4'pƀ4LZ3hiӉXMAwRlOZ3=": oJT~VAu^*Y5gf# #نe CuKiw%Wi\+9h2ʢ/K0…j64_6{mw[G@(xy/_S?~JL [أE.+8! Y0B^cv\D^ja)ՙ$8 BromveS췉-cy[npZjO_wc4GYvzxS4 ,ܕx )N]o[|˩v:k5-_6 QF$-Z,/MO+e9kj;JZ Y~#D?M@}s'o\_"5H}GcO5uAZ1߷K8OՁ2@WpΚ ͏g35yiTF"l??k2)N͖>9S y6KazF+~Mr*,ח^REuH5>\yj!>ukbsmR]ay]́c9V>!+vS׫=;d 60tz箱%enc̹_?ȟPK Ui7Wicons_jpg/45.jpgUT 4GكHUx*D{<l-a4^\~k̈́\YK0G)ͭ.$$ʭ'Y.z9?9<>|Ʒfd)KJ$p @hRZ$'/VٍUU٭GG]m2'046!@ H !)lup  YX%焂~+ 0* #; ,Cv7~@drjFvA0(4͹7t)xR0S/ٿ`vMH0h %J-oWHޥ|z~Hd*Wh˷ ʶS/\Y1-Ni/sp5Kd.ZTMͮWY(21ZMwRMNz[E h٠P󁝵Yn[@MqVq _溦v!hDGYV5sbgYa 0WdpivFWlZM}ܷ1ɺ?!GӼ{H335gn X;î!JрEo e;}B, aG{kew$I1笮~2Axyq/zRԟZTFV^ 3 t![K&>'䏬|>-yUS_\2qn|X".s0Iƅ iu'bVnM֥z-r Opa̤rp(5ssDZ0@<c3BQHER(^ uPu{.}Woj1 R!P+)L'ʑ?X19k ڿoXqvMBOwf?B^yS;B*Xf7)7\m3EE(#YRKOߛ7%L>xx_4BPuajQ =<Œ7qj ~5~+ax>όs;hA 5 Cxֺ2i[i< z3>-S<Ǘi~r'^RxC#/cZ4.8'P* ϠxzHJлq/pfqlr@/5_e1rHY^Plw԰BVtj;Gɑ Wc cEEU}kSs~'̷ef>୛`4tz^>]~7kQz*eiR'>]=z_㨑o48ȌXFltdyWw(4ySgƤpO1a]lF 4q g6Gq"/d%:V]Cd1WAEr .#0֌L2 ^%8h HQN9ʷ6M'q7W3SC6&ƋA v6<,ӨcKJr+z0SC]5?_TK &*raD]JWr#̬w~:nG7=/ȶ}+K.R̀L`J^Ķ3 ?U 0vC٤G/Lc}nv.nzzL\hd>=B9)rPY"]Y-t!BK?dt^0?\}X6O>a((惒[iIJ2NM9 )_T;M #"lKܸ&KwGy391eIT@j3|R{652H`:=XW6M6f_W߫ބۓTi9>>f" }om? OD<)5Mx{] O*9+dD:9CbsK񋞙}OFhOn.ֳc]EPN>$ƿHoעދ~<懁8',Y|6dBREfFOB~ӻ, jo(zwqwTM jWnzoP/\'Y!-9sJjrO"!ǖى<ҭ"5y|:r&vcJ dzTYvXyO/mޜkw ϐB{fc;}A=֞XqUSL-Fd)-K-M*E$պ7QwY~{$8{ɋ(?KAkw%PP]faKgtjb1I2b, t$W ߢ5A-5BL5w}PH)g͖%ӱzϊضQAz~^}6!}2Z%]`}u!C GYV^(&GE΍bO?sNHQKlp&mDz)ls+#NZ\~8aWBd9O$ c`Bo_wn1/"a\{/PK Ui7K icons_jpg/47.jpgUT 4GكHUx*Dy8ԍlf}&CF+elCQB1ALR:!NdM5"V^ǽ{<9<``8bd@0@ p8 XX,0geEqqrsxx0hQ ZXI aai'N+++b55唔/rsqr ) )9x =``$w@G@`G4  `Pa7@0Ӻ,fNpq>s5m+J1lB(q eU5u3 V6D[W7wO/o'-1)9#3{/ںF7o;:{茁C#S3fϯolnm ?.0 @H(L4 ɟW\1w.AM s@?o_ p@@σ m`{ǵ֨D4ˋe\RlUO@i7˩.~r"*wkaS2.Nz9,?İ#ArJiw>֡_s~J=Tsfdzs\kK}KI5*{u4nڮۙoɠ~!oe,laj{~>{X=\Q<|Vħ8|EJlqtW+gÒUtG/V= %d|5#GZ]BuȺyl璘o?-TOR&lOq\UsL/<$֯pnd};tf;w{8;>iZkciKᵚ2I"K4h!9}N}˴|Un{գ7Uh;kM\NN^s']r tRZw08_CBz5l)QG.7Xziݺl.*-]!!巈 DAR),LsU/"W6MyI;w+Ik$ө |/8[GY:3ν2:,YA,>KnSU#-\jlҢ~g;goMt>u`Ҝ9ɕv)Akzͭ45&a~^ ѳB@i.P'kxea(ɭ*yfB챑`,VOC,W=`^~;Cyw*,` =r pXBؐÜr@7R)xpeRY=O~FhN//D0B) LiH`y`>8Gy?hboY-e(gj ݔI8*ǭ?H457ٳo;ơP.*5~UvjeO\Ǎ6xp٭! 7X1%>e4 |a9IUǨ_S˫䘖4PЛ񬹎N3)uw;Ѷϟ#m#SbV"Ug-å[]0*iUFh!tޞ";G\Yhr5eM/?{KҊ2_9F:vT9%UrPP>[9S[k ^ͥB2%wCs 7Fͥ3Y]hT9bϥ}ZHorA F8cC!oz)}`Fj[ 58ȘU|#@7ə+5jl3] C*1B&m&)VO=콹!Ӿi5/SC8G*iy墳7m؍( +v) hJo_cS#C3rZ`{%r]Kܸvȝ좐v(`ET0owG̸e %b;mR8ԯ%31mAx]|x/Ȫ;;V.@X/.5mR@$?L@1uю[/ Kg>ƗShRZlm9)]ն"0NFyJ5voh>id׳iy!KLߦ*V0 )aP8^_5gv}߶K%$֠Kq ZwҮ#M8jm˷ Z1LCeiY(6uhT6)TaLda{]j4Z䮹p+SI6QlJlԦ\Llq c8;7p[o|ALE1K }^o) fB 4~N"KVVٍZӥwzeG#j%(mv%Fc5##PcB1b&}bgqrn#ϫY /^g%]EO!BP*sB9`N}Bt./3FGp7+s^E~AYy◭=Ru +JriPfw)C+gxJ ;KXDM`v,V c->:?Ő0f7BD@PK Ui7@sicons_jpg/blank.jpgUT 4GكHUx*D/7O7FFF dGGRH_DVJ^NVJFFAEO]AIGYFF\SD^Fd#'''7/AfF%&AFfAGde(`dbfaec**3 ): &+5N\ȡh*IEM\bRjZ&fV.n^!aQ)iY%eU-m]&O:m-^t+Wmڼe;v:tcO{嫏>@bd`f/FrAVEC6!@Ba%F 7T6 TtKLG>#cMd 1n103#Y/E \# PK Ui7G:icons_jpg/thermometer.jpgUT 4GكHUx*D{8ߘaq12d"!ƥr)& &jȖݸKȥɔp\G=Ʀfq.]F氟9y绞w=YֳDQ@=0``pT#HRR,+'ƪ԰*>mux `w!N|`g@J" vavJ @ @vO( H  2 Pd (.}+\6H`㭫_Ȼ 4 E%e=F&flڑOt :@ <q9+?$%_K~9y?+.yPqMm]}iSk[{Gg7[໡q짅ťW7v\ Bm 0EL@AaVp?A8ښQT' %4 Ǵvh,/, Bqr伿[OKǤ(xӚ;AFtUt#&זHT^ШX?U uWpB"F+c{$R`ߘ/" EHg ?^ mQU+>ǥ S5ѭ4;R혽=iqί5Z}К]AaƓC̱‡ck0fHmq:Viޢ2ԾJ^ o=Fg'3[33jI珕3 na۲6,/mAs/։A]Sy@NqQr 1֨Α[sS1z̑ޓݛ#~LɍR$OuC[N7A"ml.ia@9z̉W쓈 X|殙QzP|.Bᱏ0&Nn,z3C|{5W" ɺB5/z9NyjfL{+ҩaʜzz&% ^s;;~z_pULGz~UM*לt4K*b1}i^~&ZoTLv$NS60vK/ApZiI;yt=>{8-/|3smnf*\3w9h~)2~!ō 5G2eHN1z+: 13VL"KnZ1gX3KL#_A.S>FR"6K&o0KD˰N6{)hg%j4ꕉ>x LW2Bo_0Q?m#p<.cI,W{qupi'/L-S'WB8R37 $k-X#¶2(na,1xe :bYXXzD\iЋӿytJفia&+ &KKu#Dͨ t*nmHCu=Z cyzl&-hb-[6Srk?uwu9OnјAC)&؊..j·S.i=V/_rxo఑aS[gZpի CF% dĨ-3ul?}H(څsԪUg6g==fYS#TKJ_q';6G4 v=]\MMSß}Z)vҵˇ(74ݍIG F] odߵxG ?y|0t6I]mM |5a?PK p8 Aicons_jpg/UTكHUxPKp8jm =icons_jpg/.DS_StoreUTكHUxPK Ui7ڔ-8  5icons_jpg/00.jpgUT4GUxPK Ui7ڔ-8  icons_jpg/01.jpgUT4GUxPK Ui7ڔ-8  icons_jpg/02.jpgUT4GUxPK Ui7ڔ-8  icons_jpg/03.jpgUT4GUxPK Ui7ڔ-8  $icons_jpg/04.jpgUT4GUxPK Ui7/ֺ*  -icons_jpg/05.jpgUT4GUxPK Ui7Jh 6icons_jpg/06.jpgUT4GUxPK Ui72C  X?icons_jpg/07.jpgUT4GUxPK Ui7Ao  Hicons_jpg/08.jpgUT4GUxPK Ui7Ef Ricons_jpg/09.jpgUT4GUxPK Ui7G H$  Yicons_jpg/10.jpgUT4GUxPK Ui7Q cicons_jpg/11.jpgUT4GUxPK Ui7N5u #kicons_jpg/12.jpgUT4GUxPK Ui7O< Rsicons_jpg/13.jpgUT4GUxPK Ui7cXxf Hzicons_jpg/14.jpgUT4GUxPK Ui7]r  icons_jpg/15.jpgUT4GUxPK Ui73P  icons_jpg/16.jpgUT4GUxPK Ui7ڔ-8  $icons_jpg/17.jpgUT4GUxPK Ui7 q icons_jpg/18.jpgUT4GUxPK Ui7o$L =icons_jpg/19.jpgUT4GUxPK Ui7ڶz- ̩icons_jpg/20.jpgUT4GUxPK Ui74&РJ icons_jpg/21.jpgUT4GUxPK Ui7o$L licons_jpg/22.jpgUT4GUxPK Ui7 icons_jpg/23.jpgUT4GUxPK Ui7 icons_jpg/24.jpgUT4GUxPK Ui7Y  1icons_jpg/25.jpgUT4GUxPK Ui7J3l# icons_jpg/26.jpgUT4GUxPK Ui7  icons_jpg/27.jpgUT4GUxPK Ui7ȓL _icons_jpg/28.jpgUT4GUxPK Ui7rG vicons_jpg/29.jpgUT4GUxPK Ui7Dž{& icons_jpg/30.jpgUT4GUxPK Ui7.  icons_jpg/31.jpgUT4GUxPK Ui7bހ. icons_jpg/32.jpgUT4GUxPK Ui7Q6o picons_jpg/33.jpgUT4GUxPK Ui7Td$ ricons_jpg/34.jpgUT4GUxPK Ui7ڔ-8  icons_jpg/35.jpgUT4GUxPK Ui7( ,  icons_jpg/36.jpgUT4GUxPK Ui7FU'  sicons_jpg/37.jpgUT4GUxPK Ui7FU'  icons_jpg/38.jpgUT4GUxPK Ui7g;f G"icons_jpg/39.jpgUT4GUxPK Ui7 y  )icons_jpg/40.jpgUT4GUxPK Ui7גj #3icons_jpg/41.jpgUT4GUxPK Ui7%  t:icons_jpg/42.jpgUT4GUxPK Ui7Cicons_jpg/43.jpgUT4GUxPK Ui7Y  Licons_jpg/44.jpgUT4GUxPK Ui7W Uicons_jpg/45.jpgUT4GUxPK Ui7]HKh ]icons_jpg/46.jpgUT4GUxPK Ui7K  eicons_jpg/47.jpgUT4GUxPK Ui7@s picons_jpg/blank.jpgUT4GUxPK Ui7G: ricons_jpg/thermometer.jpgUT4GUxPK44Ezlibkml-1.3.0/testdata/style/weather/weather-pngs.kmz000066400000000000000000005323431263603257100225430ustar00rootroot00000000000000PK 58 icons_small/UT eكHكHUx*DPK58jmicons_small/.DS_StoreUT eكHmكHUx*D;0Dg K4.)pn`E W!RP%yViO_ 3>6!B}ctvB2ts:vc2]J7_#LC>+1XW,pp?a5 !~uvK@🅧nl+ܺOPKh7>nicons_small/00.pngUT  3GmكHUx*DUW TYH؃(UlQ0؂(*aMw @@DieXMOJDT@"Dmb! I՟:Nկzޭ*gc:#yӻ.=JN Š?-We. fw׸/zРCMudM~[\"eٶk!^4S?*! n,:?*PkWoDȢQccf5xYJK4NBq{-A3gNjzDJF ތTI|C^p8⡿p4~l7~Uѐ3i%XyRѡ%rrr% kUJsϥF5cwAb5j1C4PH\=>>B~?|*0Fc"jDpFgmqJgT=)="2!WbNIT#Zd2bz6nye񂧓'6!̺Rӑ">Mqqq&H$~yCDxU]4LЯjŰLvhha )l>7An9kbBݸu+ocLûàQɐ쎎C|6ױUV.)B?ΦQp UV*V\>:w_V/Ϻ$P U!ի">BIV Oc$62޽%r/-/?&B,w{ʭ3$ ( hcZfVK$΃ (&z0`?͙m g1$B P(whrLMM! 41!#C3=7 7Mbx<~O~^q\,ccc ͉,ظTd2Ht1ftwżCOLPƠS400H$FVXcpx< #zzZϷPn ?,AucA o7<揠]&؜m΍pOoˑJM:e2W\ga!gk=k }^򑬅<x䔵}:-‡ ccv<-1ܥ|bNF7N0wW n&*]wdx$*%.'+RzŎw3܈zs{|>bÖ.~Jy\Wj~AIfkm)Ym S4Ξ^'~p 4H^WQ cTZHGB:if%*3 BsgC"_ 5?k^ (dD0`q)9V֐H,RK 2]*aeRußeebJ "`=CBcA z mzƦ+KKVk*mU%#LSA?opuf /dxK zM%׹egO;qy{Ѕb_ {O+3>AѪNMㆮ'fWu|7r}}t.Ş)רtwC?$;AF2ʍk˺褑nA~ 4 PH5>,0K)E[Xa?o: =?OCPi4ږ7/nڼB3@7~o05c`֖aE 4YQȘ4 x~.amY;겿nvu-@c*5Np$)ؙ'eٳg} Ǥ8o,"cbJ81 CJ3rAW?g;Ng3l^$R# * De!M&l>0'0h/8z4|Uҧʲ]ǧ>8$ "w666dJZLZw%2ti2}zbȫhV /YeC$ɤEgGoeZ7Iz|f.Y;C zBڸ7=鈲R`oܾˤ)rFF7k>#43q{wbIHzמj;]ރE1+*LH{+*fLS]R :zE9i$_Fk/X4ovk+,ni>a6nS{vpu#;,>E? `~ {Xh+RV;-uhhxG |UU3aWޚF XWK=oPKh7>nicons_small/01.pngUT  3GmكHUx*DUW TYH؃(UlQ0؂(*aMw @@DieXMOJDT@"Dmb! I՟:Nկzޭ*gc:#yӻ.=JN Š?-We. fw׸/zРCMudM~[\"eٶk!^4S?*! n,:?*PkWoDȢQccf5xYJK4NBq{-A3gNjzDJF ތTI|C^p8⡿p4~l7~Uѐ3i%XyRѡ%rrr% kUJsϥF5cwAb5j1C4PH\=>>B~?|*0Fc"jDpFgmqJgT=)="2!WbNIT#Zd2bz6nye񂧓'6!̺Rӑ">Mqqq&H$~yCDxU]4LЯjŰLvhha )l>7An9kbBݸu+ocLûàQɐ쎎C|6ױUV.)B?ΦQp UV*V\>:w_V/Ϻ$P U!ի">BIV Oc$62޽%r/-/?&B,w{ʭ3$ ( hcZfVK$΃ (&z0`?͙m g1$B P(whrLMM! 41!#C3=7 7Mbx<~O~^q\,ccc ͉,ظTd2Ht1ftwżCOLPƠS400H$FVXcpx< #zzZϷPn ?,AucA o7<揠]&؜m΍pOoˑJM:e2W\ga!gk=k }^򑬅<x䔵}:-‡ ccv<-1ܥ|bNF7N0wW n&*]wdx$*%.'+RzŎw3܈zs{|>bÖ.~Jy\Wj~AIfkm)Ym S4Ξ^'~p 4H^WQ cTZHGB:if%*3 BsgC"_ 5?k^ (dD0`q)9V֐H,RK 2]*aeRußeebJ "`=CBcA z mzƦ+KKVk*mU%#LSA?opuf /dxK zM%׹egO;qy{Ѕb_ {O+3>AѪNMㆮ'fWu|7r}}t.Ş)רtwC?$;AF2ʍk˺褑nA~ 4 PH5>,0K)E[Xa?o: =?OCPi4ږ7/nڼB3@7~o05c`֖aE 4YQȘ4 x~.amY;겿nvu-@c*5Np$)ؙ'eٳg} Ǥ8o,"cbJ81 CJ3rAW?g;Ng3l^$R# * De!M&l>0'0h/8z4|Uҧʲ]ǧ>8$ "w666dJZLZw%2ti2}zbȫhV /YeC$ɤEgGoeZ7Iz|f.Y;C zBڸ7=鈲R`oܾˤ)rFF7k>#43q{wbIHzמj;]ރE1+*LH{+*fLS]R :zE9i$_Fk/X4ovk+,ni>a6nS{vpu#;,>E? `~ {Xh+RV;-uhhxG |UU3aWޚF XWK=oPKh7>nicons_small/02.pngUT  3GmكHUx*DUW TYH؃(UlQ0؂(*aMw @@DieXMOJDT@"Dmb! I՟:Nկzޭ*gc:#yӻ.=JN Š?-We. fw׸/zРCMudM~[\"eٶk!^4S?*! n,:?*PkWoDȢQccf5xYJK4NBq{-A3gNjzDJF ތTI|C^p8⡿p4~l7~Uѐ3i%XyRѡ%rrr% kUJsϥF5cwAb5j1C4PH\=>>B~?|*0Fc"jDpFgmqJgT=)="2!WbNIT#Zd2bz6nye񂧓'6!̺Rӑ">Mqqq&H$~yCDxU]4LЯjŰLvhha )l>7An9kbBݸu+ocLûàQɐ쎎C|6ױUV.)B?ΦQp UV*V\>:w_V/Ϻ$P U!ի">BIV Oc$62޽%r/-/?&B,w{ʭ3$ ( hcZfVK$΃ (&z0`?͙m g1$B P(whrLMM! 41!#C3=7 7Mbx<~O~^q\,ccc ͉,ظTd2Ht1ftwżCOLPƠS400H$FVXcpx< #zzZϷPn ?,AucA o7<揠]&؜m΍pOoˑJM:e2W\ga!gk=k }^򑬅<x䔵}:-‡ ccv<-1ܥ|bNF7N0wW n&*]wdx$*%.'+RzŎw3܈zs{|>bÖ.~Jy\Wj~AIfkm)Ym S4Ξ^'~p 4H^WQ cTZHGB:if%*3 BsgC"_ 5?k^ (dD0`q)9V֐H,RK 2]*aeRußeebJ "`=CBcA z mzƦ+KKVk*mU%#LSA?opuf /dxK zM%׹egO;qy{Ѕb_ {O+3>AѪNMㆮ'fWu|7r}}t.Ş)רtwC?$;AF2ʍk˺褑nA~ 4 PH5>,0K)E[Xa?o: =?OCPi4ږ7/nڼB3@7~o05c`֖aE 4YQȘ4 x~.amY;겿nvu-@c*5Np$)ؙ'eٳg} Ǥ8o,"cbJ81 CJ3rAW?g;Ng3l^$R# * De!M&l>0'0h/8z4|Uҧʲ]ǧ>8$ "w666dJZLZw%2ti2}zbȫhV /YeC$ɤEgGoeZ7Iz|f.Y;C zBڸ7=鈲R`oܾˤ)rFF7k>#43q{wbIHzמj;]ރE1+*LH{+*fLS]R :zE9i$_Fk/X4ovk+,ni>a6nS{vpu#;,>E? `~ {Xh+RV;-uhhxG |UU3aWޚF XWK=oPKh7>nicons_small/03.pngUT  3GmكHUx*DUW TYH؃(UlQ0؂(*aMw @@DieXMOJDT@"Dmb! I՟:Nկzޭ*gc:#yӻ.=JN Š?-We. fw׸/zРCMudM~[\"eٶk!^4S?*! n,:?*PkWoDȢQccf5xYJK4NBq{-A3gNjzDJF ތTI|C^p8⡿p4~l7~Uѐ3i%XyRѡ%rrr% kUJsϥF5cwAb5j1C4PH\=>>B~?|*0Fc"jDpFgmqJgT=)="2!WbNIT#Zd2bz6nye񂧓'6!̺Rӑ">Mqqq&H$~yCDxU]4LЯjŰLvhha )l>7An9kbBݸu+ocLûàQɐ쎎C|6ױUV.)B?ΦQp UV*V\>:w_V/Ϻ$P U!ի">BIV Oc$62޽%r/-/?&B,w{ʭ3$ ( hcZfVK$΃ (&z0`?͙m g1$B P(whrLMM! 41!#C3=7 7Mbx<~O~^q\,ccc ͉,ظTd2Ht1ftwżCOLPƠS400H$FVXcpx< #zzZϷPn ?,AucA o7<揠]&؜m΍pOoˑJM:e2W\ga!gk=k }^򑬅<x䔵}:-‡ ccv<-1ܥ|bNF7N0wW n&*]wdx$*%.'+RzŎw3܈zs{|>bÖ.~Jy\Wj~AIfkm)Ym S4Ξ^'~p 4H^WQ cTZHGB:if%*3 BsgC"_ 5?k^ (dD0`q)9V֐H,RK 2]*aeRußeebJ "`=CBcA z mzƦ+KKVk*mU%#LSA?opuf /dxK zM%׹egO;qy{Ѕb_ {O+3>AѪNMㆮ'fWu|7r}}t.Ş)רtwC?$;AF2ʍk˺褑nA~ 4 PH5>,0K)E[Xa?o: =?OCPi4ږ7/nڼB3@7~o05c`֖aE 4YQȘ4 x~.amY;겿nvu-@c*5Np$)ؙ'eٳg} Ǥ8o,"cbJ81 CJ3rAW?g;Ng3l^$R# * De!M&l>0'0h/8z4|Uҧʲ]ǧ>8$ "w666dJZLZw%2ti2}zbȫhV /YeC$ɤEgGoeZ7Iz|f.Y;C zBڸ7=鈲R`oܾˤ)rFF7k>#43q{wbIHzמj;]ރE1+*LH{+*fLS]R :zE9i$_Fk/X4ovk+,ni>a6nS{vpu#;,>E? `~ {Xh+RV;-uhhxG |UU3aWޚF XWK=oPKh7>nicons_small/04.pngUT  3GmكHUx*DUW TYH؃(UlQ0؂(*aMw @@DieXMOJDT@"Dmb! I՟:Nկzޭ*gc:#yӻ.=JN Š?-We. fw׸/zРCMudM~[\"eٶk!^4S?*! n,:?*PkWoDȢQccf5xYJK4NBq{-A3gNjzDJF ތTI|C^p8⡿p4~l7~Uѐ3i%XyRѡ%rrr% kUJsϥF5cwAb5j1C4PH\=>>B~?|*0Fc"jDpFgmqJgT=)="2!WbNIT#Zd2bz6nye񂧓'6!̺Rӑ">Mqqq&H$~yCDxU]4LЯjŰLvhha )l>7An9kbBݸu+ocLûàQɐ쎎C|6ױUV.)B?ΦQp UV*V\>:w_V/Ϻ$P U!ի">BIV Oc$62޽%r/-/?&B,w{ʭ3$ ( hcZfVK$΃ (&z0`?͙m g1$B P(whrLMM! 41!#C3=7 7Mbx<~O~^q\,ccc ͉,ظTd2Ht1ftwżCOLPƠS400H$FVXcpx< #zzZϷPn ?,AucA o7<揠]&؜m΍pOoˑJM:e2W\ga!gk=k }^򑬅<x䔵}:-‡ ccv<-1ܥ|bNF7N0wW n&*]wdx$*%.'+RzŎw3܈zs{|>bÖ.~Jy\Wj~AIfkm)Ym S4Ξ^'~p 4H^WQ cTZHGB:if%*3 BsgC"_ 5?k^ (dD0`q)9V֐H,RK 2]*aeRußeebJ "`=CBcA z mzƦ+KKVk*mU%#LSA?opuf /dxK zM%׹egO;qy{Ѕb_ {O+3>AѪNMㆮ'fWu|7r}}t.Ş)רtwC?$;AF2ʍk˺褑nA~ 4 PH5>,0K)E[Xa?o: =?OCPi4ږ7/nڼB3@7~o05c`֖aE 4YQȘ4 x~.amY;겿nvu-@c*5Np$)ؙ'eٳg} Ǥ8o,"cbJ81 CJ3rAW?g;Ng3l^$R# * De!M&l>0'0h/8z4|Uҧʲ]ǧ>8$ "w666dJZLZw%2ti2}zbȫhV /YeC$ɤEgGoeZ7Iz|f.Y;C zBڸ7=鈲R`oܾˤ)rFF7k>#43q{wbIHzמj;]ރE1+*LH{+*fLS]R :zE9i$_Fk/X4ovk+,ni>a6nS{vpu#;,>E? `~ {Xh+RV;-uhhxG |UU3aWޚF XWK=oPKh7Mcicons_small/05.pngUT  3GmكHUx*DM 4T0 ce ىlE"-2!J6[ /Y*J(YBFJ} f3rC=~lpVq##kxn  qLDp<zɍJ=Z%8,VNAox4!IWwۋ^4Il6PB+-{%Jgeз/ $꬧B•ՍOo9 nI ONg>"%X3fKrc\7ZSDwqq$REEEH',ȍRxewC{@oGe$^rM0o?>Tpk^Ih ሒE.ïF fŵڹ}'GHOnsrAS,O%Љ5 PBDħ!l?|ش9JlbB&[nİ+db芗/[-ap$ 9q@ 1S={$eddSSS4@xya쉉)$(*PW T Ryd4 :u #N9;]]]Qo83}7lNvr|mjߦ%;~sXD@e_ғZN*ѕ ,NT&e |i C0 w#~A/w+%Z;_vK(2$WUt: PGۆGfL7S4x7ށN!3XB@-+{XwӧF ""Vn8Z'Y3-w7Qd>mc,;~YӘk`66ʰPkdͥ=Cif:QH\ Z [/_P mjG4. U } AA]p7TL&X9Zǹsܤ6)@RRo}$?lg EhKTfDH|>9w>7ʧL5լ L(ukSλC9m撰lȿLE^b}M>=R{Ɠ&^x~"4x2LZfr/d:tYnO^w%\C'k&Wn}kvg bvaNEP}_6m%nIJ~ޗ}}]-* 6PרZ- Id}aFG75xx 1TZR^XAׅ9gsr$1VV}w[|3l:NZq8=-))iuWU54f,(f0??e:Zh`wQ\+u\5AL3Șl̰qqSR0Xb^pL TJu? +~71ϒ TĈ>Jb; fs V|geʒohs,60j|2y`kJoˈ ]IqcUQpCP3 ;{>eȠe 74^Zɸ0IH~"2OavJ,=vf$7wÅ \k6+ڵ\]yE [fc> o3HR btI堻SF蟺D UKQ͎J]5cqsss. G@* +V3wPy+]?K?hIjeۮk'>5:$Pxi5%\HCU&nx DVaoODd>֬_ GZ‡¯mRp|yhgL~ݦ{X;Z=A\zI{_ `iIT[C۷%Ymʒ>Zҏ׬RG9"/Y7XrF#Ŭ @TW[@s7OQOɹ 'ι @ lN<'DwFͮA鑓ǯ'ˡdz[]/xw .}'].Q*jT yM8~AHo]h[Vڍ/k _J[HEseno3dޟ# 륏7%}lZ >؋5_Lճc_H+|R y *d_38̹H+Zgl^I#:%A5%# e9-]Mp"blq&3ɳY KAY \[25@ RŞRΉS>NY([4Ҕ_{A\D8s+u0]Z DrM;1EEEpM7TʈL%^ufT#Φ,dvO Jz6E;Ychbc!N;&K4nR:~|7#eXԁ#Knz~S Gǔ9L7bdz`b;اZ"ZyJ8⊏y tt״,c1șf hb^`]\k<'д1roGׅ!:;,fi;jӜ?aܜQ$D6GҒ^ $GGGa!4;B"q-&7W58in;zçg"7)6NYZϫ.O9~gEMih<~|"V`_hī`O//}?}s$Qf:U:L!)E.ib6uG5~6 !چÙJ.BO YaKS(fGda" HLQ9V}pb+˩ 4":o}6wdeH\*Ȑ.E\tJ.n(@op5@ZZVVQ [:^@)_G>.,P7_\::"x@N2Џm1o_yar )*I\[`cBs$ ;>1NF9q̇o$f=nmws$,ؠ$aґbizS^қXV#X5Oa4F޿7U&BbǼj:03?sVQ%$a{cnCw{, +|ژ;qT mF?u)+?moHũU[XO+<@ݞOv/|z[FP<=̇oo_u8z7̍ya9Io/!QOW<{}틝b'+?X8Ld瓇ʃbQp.2R23*{"4wضT xφո)r) (6~q*Fxs|G0^Β7:!od|qxh6Tgg3*]i16{RBr;Xm%rlyRPKh7FQicons_small/06.pngUT  3GmكHUx*D5W 8c%}P0,"R&C3$egZ> Ō,cci0`Y}}s97qGI H]m`3".n Vv)ɂ`6X1/(5Kj.Pe~Zv, QVV6WQV` \6>DI9D6 &#m*OݭM=ivY*  |m|ud8KM6H7Mjoj<&B:*;$]xod@@>ݫ 59##43zۓl(f˗-R" YTn`_ #Y<) ?Vܺ}[л:mn|.zyigA 9)T1gL,H9YY2 @e;* ?Di`@5|+tY=0jD`sXt6xh;r{6y DTڧedehh EDToKl+je(}MM|bD7xQU=D忾Fd711-'p9 nK^[F98'eN&Q Ue'gCgXPC.}Xvv0~) vbkoҰH*--t:ќYXxvVV7p߿zx1hnhK޿ Pz.QLL#w3,-ǡ[;8Yfm,˧uP&'JPo<9kkJgnbSSbxXct.# 73mad撩/rN6O@(|y⺰cdz81*ذZ2ngjpl].e:k.Vrx;[\mu(_bgTg{1l `Ou`8ygˊˣ#Aso۔#l=q]nu2tR+dR` Ѕ8i/Ny*"/ ;OմfARަ8DoxN): /7OHlِ޶l#aP++RAE[6H.f dmG a!XJ* lx<  㨓@eL[{*KM8O vek󮶶d:ɦ7Rc^`&o%q)S59 n2}+KE{J6K)Cr>*@EQw5\~4*/T2K o>Ol!0j^5mUʉpoO9F.g}}{~ÈϮ/ 4L+hZKtcĂIjC]ÿ*wn\Uco弖6xT!eE0$h&oK}FުWOh Щi7v Sfcm  >wS2UfA [[OJȿ݁:# )utcJW gsABi: f*O(7$LL>r>EF>103VXwNv~($;cӊ.E? gLG9|=;-;L{Oʔ*&rwf^WȠH@mqg49#4iOkH4>i EKnLəA'XXXDϐ]A8Ώ~ԐƓPTaյ)ms1Xqu&WYգFXϏ=bi\Qn5P'ȼ2I+9\^B Z^JƖocxJf @k,μmgDؘžF߰ۻf:9ĭ.^;j%{Zp-A B"@r Ji*$'`dp09KQQ}nvVqvӒ-[gg4uwљ@*_GzP$%?C_%$[Bxjꏰz m";{򢠃i]0W ):xm"z<|5e8քg{+QFPR[&%/VÅAÐiR'@9 [2},2WCJg_߀q,b}WL<}t 髇όG¡HOWy6-7W)hL WvwBlഉY%6z]Qc<8=.\'Y e)/c\Vۉi}E_#ٽx):J:KMJfdLP(*E9L{ ~T žNbX އC`%DX8!JH'BRvc([sR>fKE˅R^^,!\5nEH7repVF'7V18#vYqvPKh7_M'icons_small/07.pngUT  3GmكHUx*DM x@2xݺgB=J+^nΙ' G_֪&~WZ `䁖Gُ2JK3LNN7'--,otvk>}hE)(ht:f D5A\] 4y~?%Z@5yֶ 62!D*WPig)HxJfAJhTBDry93[d۹0m܉U?S4,VȞry?{F4 RkƼKW=RVfӆv;;wuuW.(LCX~AAnUς%.ę9jeuFCsg6Kuv1 X#N_)Xo9K''"UTL;vD'"AeV<) c/^s}/KgJg}%̵S4?KS:&/RBZH_TN$TwT-S|{f部yŜكg1ܤ/KoKț*T- {ӯ/<9`zr:>Ё<~ rȜ&:8}n ?u1?y`R6Cu"] ;`"%vQ LͪÍ&Jv"j10uX)eW~#IY9kDx7eʰGؕЯ8Jlvګh@RQw\G/ە:U}yY6$D+7m-T'|ڗ)~=Oq9 VbXՔ0#[}cwwʖeɥe}ep8L7%0̛.P{kL9| bi {bKҝFFOm^=uħ4 qJO\^=y0"\i8y(n!g*u.ڂZn v vI1 cS9tW*>6?>y"(~]I7E$ʔtpj޾=hvkxɜZ("bWQWvphشk^\pbTFX½_88Q y Cx3XI=1-,D16܏%_>1G>eBUe/I$RNέ .;M%%0g x+̫?^A!"3ŽG75G@껺b -2v** -q 7ʋ3K2 jޫixk)+}IJgCNʘ@v3 ff GK*Vfb<G  F`:8S3U8Vjeeԛs&BRA p PMe"|D`{qՃN{~.@Qd Q.Ú.eJr̓( |nۅ9<1̭C, Ee>'7m{`ND<(&ϸeB& 81 ҰIC""᢭t%,% &N&d5 =z uxW1AHt б`B@.YWOZҐ~$۬V~Α\m{#:zHA1 t~أI-// _Hlu@1~kgjvfU8r K( _zUוZג"OvpoR Mr.FтZ oޚ8b` vAbA Ҁ.Ă]:7+k(9rDc5Nvxne瓨SҗuZrkHH ޓ*]͖H1&|s\ t'_ 8lW|p?mkD&Jņ-ipRCi}$zI1{'qrNc*;*M;WU;9t뚳w/!텅_|ޞJcu=  8p@_JJ7M#UTUElm•eMa //BEEEnJj̠߸ Bh4;H h n5}U { g---($@P±1t$(-M/,.5( mj,le OӁO'tȱD 55i2 zAAA<o#]Tg9XO#`$,QHI~ B99Y< ́l@O(O!ZZ@ggW]^^.^)L\cD!8B# AssS5 u>NvE~el v/AF[W`+_EG9%M $ Nr02;Ooo_eD.ɍspi ]9&gTWG'k,3Ag޸qC&dsDyx~i$:0O.U<ݞm4k=kVA1zmK]]]@~~>իCPA/-BU`p F b!))i["PKJJ[HOJJ$~#8I _|r>Ras0qQQ`fn *%Ro(z;u"c_|I}-Ӏ# f7.񯲧ZrT8Ho7T^Z 乫,KG6'd-rQO.&1 ޻=Bi23z UF6!֦[N8J5')e@~|uz_ 90hY Z2޴}X2E&ʘ ̶'M:R3e{==Y1aRC2a1s vzىP&he4Fxy֪qgAԚ[_kLJdG?;m`YK*|u4,צ)y.6$C@s9,ר v*oێl=$_R ?k;71̨o :2FKA99[Q\&.';}|isDrXAd #YV}[NV1jon/BQA gD7_u<[49"ܒPY_cDuQ`.ʈ:=$lX&HSu?H 3IQ^KUm181q3 X&E!Ag\sz}Qk!]կoG7fɉv\'Q-_K%Yeޑũdn.EΦa㝧xe`VG|AMS"sJ~[q ]2T"JF;౴[5R"*"]%NE |hZ/{EL=_ʗ q>\Z\ `'P]g>XQ sc X6&ܒ351SՏoVFov3TSUx۶ۧn:V99ӭ{zsIK"+Y])Rl+> RE_lj=?J|ے{yy-ꥂV="bxR\{G6wb^m gW`DCy!%9"gx"}0Sb8X#yXM=N?9dELuUdG|dwWd #˥>s ƹpKv7c %sJB/UM#89n4n<ߡLtnըH̑Z?y2|-q|6t$~pXZn`2&**m~3Wy\$Fyh!) X`YDIML (ly-%M,@"Q5Ѕ5`~X<AB%]{Wdem5D,--Q̥ɉpcvn>-,,K'#+#p84\QF ب@BM -/-Q=#|>O  ,.w6Qjcxmmm Eg͕Sd2ٮ+zOhN&A(;ZZj5ޥsoOمǓW%$ߺGm5:41]_Ɉq))'y Y¦ ET6c-_۪WRlKGⴞն49x?91?B88#^6:89SrQ"?czzf/Ytl eTI#^\_˒7n93κG//H-ƣ.ɚj,kֱQzɨٹ|a*J'RIvzS~?(|&K3MM kgrrZՌ GICw4 ךּѳu?9(mvO9mS̢\ ׵գ,<}U˹ 5R͆#xs[(ʛ(h}F-y14$Q3ˏ41rzV?ٛ~_7(mS4։G'.bzPѤ7guB'v<'Ƣ_Gε6 1ϵ\X,Yk{2Sh G7`-qw0@] HYដ|m~+ p c${y(˯k7EJ)|Ϋ wLQ=V'|=1;=qWi9g+!6cFG+K3itwg.ː^N擅eA5+jy \عL(sGƚ8LA1@ P:\9 |Cs+͛EȠ 򾺢4ppxge8(=:pcKQ\6T4aZ}xlEh@!FqLC#`Hw.E|h^yHٍ2ܾMCQD,.4`xdx+Cmd9Sk,N?V85"J5h?Ƴ BU=7Eas|i˯5)/fyZl0kc@&RA lľ}5%JXB:Uˍ]ưz9xV]V0F1@{yiwo[˃/̼PKh7_Gicons_small/09.pngUT  3GmكHUx*DUV{8[~̄(i ʩR h#&DIr69&E:`Gv0N9DSc̖013{zZu^J I6SR"QxЬ:_ߍ*,}Rk%-7ա;1L,¾ϾIA{ij6=%h1"6 AMKY[crDtK!`kj_ab@& * VWW1qm jjkwijzG`x5r8cgWkbn*FE_od3ML941Spy$ɿѱ!+8:Qh=n0|r莒n=)u>s ^_!;7 B"`U#j.U8Ԍ4c)II㘍6[dJKM 熭ڏ(@rQ'V1Yu咗3- i=ƴI;9CIZƛOStjsI_d'R>FgTi.do (751 s֭J[^௭*)Ai@i<Z&$$$䤥$?zUªP ,~^N^ k%vk[IIjiPYI ̀SلÑיOuc,HA#QG|Eij9/)u@s{zVCqnf)"3?RG'zPwe~$Hr̓+iYKJ|FD߀MOu>;ƞ~^Q8?C`X|,]9m[mK}y]TSmV 3݀]58q Nez;>b>eXT'9Y츦 QMF.JjQA1x -d1pjhѝݒNwf N:Ly^ 8Yt/*ss =ڦ6f,|&XiL;R?4:HMsu7Frxis2ψmWwG׹J"&u_4Sp+=^G*R #ؙ2%# m=g$!z}n_gۯYlͺ.~6S+>wg=Vq5ȐrB#?\OߍW(p MXKT},W *:uG^ӎ6s/V` KM'v/kL4^_ =| 2266}}{̆ G#d!4:^Jyi5]j1|]Rnxx$K06Fȁ fM֦u5ٖSsAéߢ3 Ni`ɓ<8Y ,ogx-ñwރw&72kmX*]ߏ  HzAfeib,bN{O?xb⥢բkڻ?ΗN=,-tnG{P,:1|eŋ( 1feHR{}MbzZ###޾>~IsAKgC~Bc!(I)/*$v5ۚiB ƛ*ko/.`fgfsV(_92(-1?&LSEݱ1D%t u\e"[xWoo.ۛXc,BD|\Zw1Y_4+TEXK[;^Z `NV0H?EtuwEl; ]ٕ 3K]E"O'ّ jŦ?MƵe6Ǭ:??6䰶f3}C휥ĝˇxvrvzX<7M`m`>3UaдťmPCY"K){-rm%$MmX -*ٹWR]$a,1.ȖeK1ƙ1}=.>h>g r{۹zm>IXLp2z ޯuWthRpOO6)N|@Սo!"Ċ% ADw:' ArH/XUUN5K4fī\WQݗg6xcK/Gk)T2Z]pkj4>DEPȱ? :ϝvX%܊$B"{hvܟeǞ5nsYqyJzݯ'lrڒkGYD[-8|"܀h4sjGҴt}b_܃fsx8,NB!?B֮-av?_8!cR?` b[/Ş#oRqoxJ7vroB7p*fG9=vZPA,hE4p(ѓ<61 $''HήLS^?Z-3mԋ,ʷjD&;~NFJ<ݞ$BxSTu?Q 7<r+t\ŎPDHegṃ/zJ^ 3L/I]) G7ׇ$)d>{Xh& "nv(X^NxZ6au\>K^\HcsMrJ<[;0 ;; $h|n'ltݹJ/~aܒ</ۭޙ79VbBW槍kPW x!' O9٣'b=| Uw |gZ_J1^_ZDLRPU=|TF֊͆8  .&q4:𪤄M& 4$AL& !qp5 eD(T޳a$IpJJX,FLȑXq  bDxV2i7jY}JB5232z54zh,+o\ S)an)8GyTQQ(i+% JwN %2)˲;?x#)++Eaھ| )!ä"ބׯUF!CffkK焩>gݫsv笭fŊx)dN78T YӖ4,n!:S̬, 242Dcww͂愼qtR> 5a@J @JMzTT]]N!i+),]ER4ay)))t8K!!q.3!ܜnAw{˄2>'(d'Gdh%A3>^ή/-p )]{ILŌ@!( # ISPwm,N'o1t+-}ņ>%g lS'a|4ʮAFcRY(TV&!!K.h)-,Sw@77wk#{;>`P(t=iuXh֝q\Pl 19T|@0ՠ!rEԽ䙽E4p*[&n[/ MD\a sD/@PK1yzPэ1ku(fj$f7u,gC,VK1b OF>wΙbWʓJ}IHpBL'ȗu&\WRv:HI{sߎvWMg9mG=G>[xm$9KEpMq&.6])v5ޯ,ܟqoL'gZi,E3xfL| MnXj;+ZW2$DMu]^T[Bn1QU- {J)ݥr}TF@3y/ eJʭHs6Dzc ˟ Ye\yw6L+M(]%_J  }Q?L>KM!Tb&,`hӧy,U*A J/oK\o*;Oz|LX 3?4;]Z\j}}s &wsBûr4ș25zOPVo!+M.N_okhVv@]Z"~66=F^^\]]%nn.q%& ky`{$&kvuz}P^ʞ`A<¢K.''g7Lamƾ'jb0@ǧvy>N):}Lb@]=ۂ*}8ѡJS6} j̧lhVrTJ1+ʄt6v=&mJUIg8,4}#%Bd޿uXyS|nh2B;&xS$ę'EvUztI,7-U9&5$N󲐽>h쒯a$s呬 .jޡd5U:* U\ UE܃Y"`4.|5 4))n|i f-CZ̏ rm]]{Gĥz_8MI3"ƽk>u2CFdZWxht4S>YqlIGέʱtVuJ$ 8DGQgyps-ݽ?P}Nmp[?shfݑONd@4hOHɃvb eBFL;-H&zhtwPx[]DBz#_4x ]c,k?)9]ku!~R\sM묱Te B&a h2~ k$,Bژ7!iȨgܺsgrVTstSOVd\Z2v^5@mԧ>N]lXx/'#.na44v9R㲦!C##eA×,lvni*m,MO<2hL6F)W+44i`ׄ_|9shfn)~ԷpPBS]1jov|)a؃M \Med&:IۇG{%5LL3Ir|5*W {ӱְI{3Rm 9ٶx yE\9,AnϮDD̜h.HXPpaM(s%(w{{ nh`n޻OPKh7 |icons_small/11.pngUT  3GmكHUx*DMW 8T?3clM!KIeD!j$*R"^Q%TTG+k]Qb%23ƒmflNyyy>W=ƪu|T{ԅ |P l2ؐZk!q~) _ JNO1n?_taZk7ae1FCQFM`;^J@H.M KZ. 4ӓc6gϒ͟qp 5 *iNGDk@~5ZRE` +waȴ96̤VCuV`b7~1 w.> #9srQcŊ5FW.F y=>v4a+xDZEv)w97ߛ_\[0-a.fGT w܏D-Yt^/ewj7:-/gosH |Q 1TDne0*C/Ÿ5m2 cƁG摈N?u쵠.ݒ 2ޭ[؅15FFXXDIMMx^ЮvCT qT.Q㓳0=<,(h1ү_<YN8ijK֛4Sy# J |7KvW좣R4%rSyK0~qΎUhUbw q_L@DG)Ԗ tHJ*= {N&)AVP]>DApk.J}KKb Qg= DP(`9A| 8462@r P(ttR$ L b<=Ua؋DV>Z䭺qnߟ:Lfݨ}*F|b/~6bR ?>ԊܩBuO©uL][\2; p`U>kN:-LxQ_ RRR~e.4 ah6"%%UE#A]Mv$Rqa/ ``~?g#8񦗖P?{p4.8cgbz$j"#hb\'CSYkII>J*J8Cց٪a(hbMm}M 'ΤܰC!i!Me4xGJSGVK]/k4t@t^+(0Fc>0[@iH$l$AK\ƛ:$H+vܸ:ϝSt?҅{67/+}>('wcs.z/ mjvzVD {rնtSJ!84DFyy^MM͔<5hijNq"RHTXv]d"b/Ta8PerBs2lc&-|WikFMuj">O U3HɡT 8_bG*er贵DSx ^GFGª?J{ٺFRKawEu~SKcMO4*GBuakEoWA,< YY'φzi3 rЉV\NA ^7G.ͥtB|hkD& e#x Q™ʰ{wETlⓝmPsmw01 "|brRym2FqKt#-ۭ!FiI~ꗮn|n'pʦDAc{2C$v~#TŶ(XᬮGmג\1/T4tO|h#g|i/áyOJzn>oqWLh+=ϓho:MeL^Vס::8Cxqwc obJA?2h[׵]ȞAKiMXg䥏FF]{# %4IuE6szV&{|jAF;$pa=/#QdôlVB޷IzM߲Nzj;!/e`?7FxxƱF áZdx*>b5X-Ꮪ ?fZVD!w 4|fJ*.UVnXO#B@݅ 𱣥;;`R6 hP\c׷~R'PKh7P:IDicons_small/12.pngUT  3GmكHUx*DM 8Te41"uBebƈ$KJfB,IroBR0Dl,c0YT~>|?|:6 ٹ@?ML_Ғv6'sv55T&(~0| \!] $3lň@[+f󏇻13[ i-=r%Ԫ}۬Z1J"t [C,:K㲹0Mp5` 6ltl?{IV@ړވ7._HiWEـZY;bI o_?jļœ:чҼC!s>ʥQo G㧿,^}Mы=`sP_HuaƲ|@@o+cI VJWsܒ* 0#(4l;O%>+*":s@?K  . 0iU_+y$4żFTZRTTJ>5*Fx۩H$-#h"@ , :w+/// .+ ` F0u5u *:z HDӋ45؟?,-tQ(M Q @@?MM LJKtQQQL(..?OPa ZFZF &K]M"`} !wn0887 )6 dakC++\Q#:}   |6:> |@4G@@> Fa+pAKþ_9\$!~Dh-߾n'O۷z~DD㕕?Ɲg_++1,HO5d3I3ew+gT$XԚSY+]ɭ4\R>P i~1i|X[J^vTӽ>F/?,ҟ8p=>Z|nI7-]/'`o_Nza>XeowV q~c]z)FSơqGBbB3* !:,o`U sl/ϐ;~~9Q]EyRUZE|]`B^B8/O`39u^MG&iꮌ] 4i!&A7]7 QX-Xv0I;+r#E|ĬiVǖ~$^>[P^۳zz$DLB!-cCU~6?sQiwjRryqoXQVwEbAڀ^G;mb ةVvYP[5<VI!+1fril/W}Ȕv1ɴ;cM X^7Ev4{h5_;_wpbgd&$"ñj;\՛9Z;eb:n5.Q:2D<6Oň~3*Ю"r[ʰVyjF]r$r/;XS4nf f7FJh̠[`q,[BmP,t (A%|o{ٚ-Tzk/M]%?vw5lxPٿCkJ8G!W S;BY5&O%gI O^75DQ2 ȸv!Ҷ?Tn Dm*wM ^ӊwK(uv$|ϰ\2<{(8.hisdT')@h0xO+'Pl2|feqV=q(US <2oQ.WE2%^ NXo&c0O KZ"A7$.e+U5gł9T Gpscu1!zZE55Nrޘ4۹'a0v'3Tr:{V >b^m @&Vs%8JG˗?QyxRKg;Z;v]]ijVWzխ3_X4'A68KU0>cwИZoGyf']\l "ɰWA- Э _^ˏ4[*NֆMpRi?L#s68k:Rk>xaZv7 :&GoFVs߲T15G jST  SrpJUVn#Cә S)8uLXE?1< d*yÚX|k҅sg^{$njQ^5ce[,|wǙDD.Z"LfQ=O@C*q8 :B`s׌c BjU}>0ҸQq=Ա x*.uj+LACmϕ\Z>-u;ONfh|''֭[&?UАp51y!Zpէc R-I#\ ՁoDI\dE&?7 GɚИx{{P.Ef3t.++ WRR:(2MDcm/$Vmq (k]#x>vnTkP 7l6F ]~Voh5N@T)i#,~:;ٕPKh7b f icons_small/13.pngUT  3GmكHUx*DMW 8[nj}ZF͘ tCh*K컋P u"J:P&{rŔm {<==s~;yC" v7zτx;w@Ɯ`r1 c>^{MDHh$(2Ĉ& c`1Gj5C1o IBIʏ:רV$$Wk~dF ApApaJ TZUlO93?HlOCDO7C 7=ܨV-u2ud{zf>/X1S%q VJ͛vѕzOp?$CV+NZ^aB('ͭkT8P+ɖTnw+=ǿ{ݡV9sEIu8^5g8 :JPxd=#N[얮1< 3c}gcخ fZȱsD~LO)!f)X2}>5a|^ 6[ ?9H8bbĴQ?)E9^zwe4H1ġhtxs#mu=5{`ЛhAt 3A}t>J\" RrXMͫ"1YaKKOov~Xh踏jKhL>5 mlQ BV]_Լ#۹eeiwM뉢: 5DZ} gQ^g$˭K/ 1 ჈qW!#@1Ng ~<9v'^{ <8{,sf|CC,e#B,(+}Q\\Dav3Q^Gr|}l,6 B 4X[Q\^ ! {T" WK8&H]dQ2&p@`pE!TpΎ<>>NgS(u9U\_QSQULK,I{R}[nx40gTU=qCr:5`n%/j0W[\ o_&Z]bࡼ+ /4trN18` " 4łwSzs Awkeq(n|=ga/UpKJv6$.JeA ޿p:Og~6yJIJҫ+K{z}|O'iTL~I<=q9h UbyAi1k~57bzFqnqq9x< jٌymmma/ES4/91V"'y~vsc ʘ/J=j&ua3?R6UZ6^O';_z<.3`oUU]*5$:A+>]X59]fS5=t/Xﮩz4Q!¾ܰvfP>>iZA ;RĆm~e F]F,)snt<l:qrO*X6K]}o,ͯ,Q.UQ/jE]ϗ [X@ra %>5 殲OJ,2PK3f=R23)MMfss OHD;N )Q|\;:)_Dn'xrS_~O,ey5*o~ GfHW =zה2O$<$NcK&]0FPBq)W-4dU6D?Pΐqzk\[okVaI\rE?=tBl򣻅Ccv̀K'rJUO;1NITѷJ_ ]D7vcTBHZ3̛̓[ >Ku=%«,ۂC=dz9|v2 ơb U~/.P2 !F&\yZ*)[d 5=RgYc۴M9w畍zBwEPۃ0swfR " b}W-̯Z []viӅׁ3A*Wz#5x+N%LƶD.X<S珞q[VKJgC0YS{Oa¯'+XU%7G-I7{c|Y7,̣,# Dv=j 5@8LlȾ',%px%)d1v:؊Buww7u+c?29FZgr9 s@^WWwxt# Xկ3NML<|3EGFDWϰ9hG+GllAvss9uB.y:l,N&w:h7GyxV'CD Bwno|aTpcc蟼{®?`0g̥5,kteq %51a8H8d*E؋mck -U7+8m6 d ?+{wJP\QM͏~$R'p.F{yooLJJʋg΂ܽ\]^5br)pt0^^:k(vo6{A^ ;6Ӹ^޽zΌw'2lzMR]II? @ GX!=g'š܋ӧ]~U"wV,ik_o [׷DICzDI4%8lـ֔q5]ɮ*_6Be.U<"2gJJRmlfJCejiC~_{+:5:lz;pm(U]$O:}5mDUAViQ"I%Y|W&bY)r+=$ eЮ^3r;iaLkt _<6Oj'''ug Js9} hfBۥeĹ/bΏq!Z[^_˹g6` mQ7ziinKmOssD:wh9 RGmWC03,Sm %83Iu_(j,o4 ⍑ JB$$2_ƉoAܫ'(K˵6xTZR"+RЭ݇l^') Os1{]%U"qi@= |\rky4?YRw@}D$"RgSY(leħ2 紨f+u%X-X,qG~7$K1g613̔ 1(ȒJ*,)/'J 䫾FET*)D (ƬwT{]Ϝ:׼ss}/mݠ_@qF'w5X ~4.mre"*}<lLDorDE|Uݒ=$7%|u-5eKj gbqĆF oBd ~HnRq9>FL{cjrR۫{%&d J1!ODTR\M(ٺYRR]۷_:u{1vUʹn!Vίj=1%@ ϖQݧp#]2)x_ffO* |)5'z6iu:Yfi@_"s]qɛəg#GF& wZV)!NX `&Wm|&ohvYn nB= LUF DO?|9!SIc zLzkR޹hҢbXX>Kw~dp)wC |ϓ ^(<-8}3kS}^o7fviM,r@y*=}S& rx3tݾsͻj{F^[RRF'CeeVT;n]+L&?xNUuh萟2&HG6\bB4M.?g!F$ F\lpN(́d%EPQ|:!2&䀞6HA}*PDUUZ.@Ww/9u .!CPc P "1(c૪j9@a:œ3 4\^ 8`||0 ЧO@*cc Diuuunְ <[hL&CPKT#a&eȏegeJqxT,OΠVY"#x<0<2 Ccc|`bj~8P(S(PV&#.4q vPBCC'O k FѥO-|bB0DF]l ё1V}o+c^q~E).=*7%^G4\ /]k>:u*:f /jy]_9u_(*řR1=#^ro4ւ=[OtSYNϊNwz,vFj_0upQް27 vȆsGXP֘rUٸ2,_28cVa>JX[N'UZ66 'xl*ն~'hU%uCWe24*"שOaEx1@%Xm/;u6(Vtx& ? t7~DË37ӽq.h:J{|..C G9r SUMVa(Ë*Fʿ/Vx^yg/3C\ ;P}{9mD4:2;ԇe`vI'C)b *V8g\5 p|cF YI H-='{;b=g{G t(FΟN^9^'l;U'ea>QϺBX!{h'ӋB Ο2^hc 8.6Eu3gɱ|Q-ԇ&̟Ǚee>^:#;](ό0[CƩsc}D$:TWѬ&p olmj$TBr˳SüQ/,L-VŮ v088K ׋0>pk'BV#;:72n̝;R؃BsrR ...g 5D I%v0B ]\]U-rJJ @LK{z>5F"C榌W^;STmgΎީOҮ-kW,CC m`[vk%znt8+{)PF?}5_͝EwLΎ*@>4V0 4‚T5\ݶ NJ :ZTyZ&.3+N$^6`"5K*vj柙l6ۯ,*[}Y&q CYD~ppo!(**=dE@˞eÞnߖmB:'㵐45 &gr+/Yu ;p Y ʟ]Y,"|YnINJp+yҝl. 7A$X֤S-O^ jsLLnW< LB+(%kwl~ Z<}]ZƦsSY6zwLAMk}pKK!޶|m'Ⱦ9!ɹwu\yfEB"$?Zlۭezzo'yy}oɱӀ&͎Kߚ FN"۔ ȕ2%PHbh!C:::5i\ܻ5]c*$FMLie^?wAo=ÓޞN$G.~Y_UUq%5ܦ>Z CA};!bw"zuj$m{tu@ AKNXp-#K; djK57W0sU5̄{H|nkSSܜ+LoP=T ́C Z'QRji5lvqaVxm V7}qw+v̌Ba^Mue(|uv+2"zSwsɜ`Jea3֩n5 q->HrnzN7֯u?7%q ,H o}ZQfZXV>`.+3fyq-t22_%1Zdd2ZA|};30v ψՕv䨫 gUK;7OXՁ旳G] 9dJO?0E9VLɈL#Uj`TDy#/ 17A=0 zUy'*WĆ x4gNE{PKh7icons_small/15.pngUT  3GmكHUx*DUW \Gߞܛ @ B!(*EbK[OV^RhjJ[-DAEP%\r䄄d }&;y<}K,gW϶n vLY[[ͱtja~.3MVuIt`>3h wj+~rCO)z[`ݻIN|c޹U`сgrmSϴ=a2Σ㥧>b ;9%~A7EFl笘ۚ188*ʺz6oLOdo/ vM{y!O~n$VnE wOSpPYqʒS67/oʜy\dۨ|s'@UoZkoEg5+?eY ǾS#{> S;}9uiyϾ;q;݂DAH><% bc1SPqSSw4u} ֢z; BƓa`T&EZ[& G ܭ>bZD\vsó*Śz@jsP ƾc3EEWt!fX33ϴku:׋Vf3˦M6?`0rר@"WrH\@ (V#-jzoݯ@Q/BEoϒJ$ziua#PZU^EODw5A_KM@oo('j5P!%3K-Rx*yb(b;88lݻ-$IݡM>KAMm; WG^_&Ryx@% '4 /g%wJ:m#"Ih&9S,|G"Gx PE.A;8%Z9DgW/s{haxN6 %ʤ lv[q! '"|'H XX~KC( e(ׯeYQQv7))IT ̼ٛ[Į- M /1d4c\ڍBM8Z%bx)WFCqAAaa;pX40̌  z:H$"䣳gOp#ƆcaK;REuJcD TˠL 6 T7nތ3% hJ;w_p씪 f˃ܺf̉|}|"53Ɂz[Qٳ`xfK`m/U}Dײ/c17-Y7f<6_Y^c3>="m~((kXB*rBBu: ypeb 0&8vwߞtϝFl޸C NJ΍ ў>APv}y[F`f5656B!F+P`}I#|εkc(^ )`5*(RӁPe 4Mpìp:(_NU~^Րq׬Iri j^7ܲ3A{a r «\D̙hlHBӈ8{zz=Tʗxv׀+M;*̸&77w].>>1&tJJ{^,rYgJڸ^細lcɒ5 1q}@ =OcP_W$TJ,Reѥ^^̳ʇ`Omm칳l!\fqSޟ:==Uq8o BMNl+^`߳gpɒy6Z_it K)'OXXİmr&Bbb$" 85UM/j6b µhę"mxѢ+XH }.p!u\ @0uE`G[px}䲬SS=r@xk={w?zVjV eY/w#SB/_HrDтmrׂn}k_}9ceEVYY5խYCFFF.z}΋ lz:#V/M=wD`,?gt`E+^O䓕j5~aYZF}|Fœ y.Ry\ `ww'7"2r xVhW\Kn\FJs]==_Oβ,֌3Fj#@iE \cJRľOY p@4D"#@V{xAȲt\DŽƎ.ȥ4#|)yi[뺆I!GEB7+,cx̬Ylݳf/p.伸0#g׷fƨ" τ3yrozo"!`?rIzA$p1M ES9~|C\bҥfsY%u0Qm6W RuyBl?|؄M+ .q]VUsϕ فAKN>/^ϺQ}/B婡f׀<1qyy/w0<ޮ<~$--Hzz3u_ZZz}mS.޴rco٩u 7s.ݾ^EWmxx~wի>{X{DϞ?|zA+ m*g+f+3KdyZ4zMo۵tkƝ)Q߽1D+߉zXҬOgםV8T4 !ހy6 -̹1/PKh7P'sIicons_small/16.pngUT  3GmكHUx*DUWy[:oOcTcs <.R>]M'vp3]zeD'֟]NW!Yjk񀢶C }K$R}%9wlN64t 4)pwB_FE90~({8 +)|>z}rrRuw Ihii`CM @B^t /%D deeٙYD{g7$-- < zFPSSG;0ڲPVV=wd)p]~g+uF 3 &LL~S/.󅤛[O(iT q8͜oonuZUZ7(ıBtP/h"[$UG:<5~lܜ'>(ٸVͅһ˭UT^~JxXP[ܝ;;vHz|J(ZZr%ބ}n<{jRbdc|]b  }InGeh؅Y~\nx@w?pɕKA soB1 !-mY{e^U՗N~489"v_tEs# [AÇ''ߢ8,c0,4ij:[nm"]LKO?Nd=7 Pg?`qhL`,8ǴsNTZ>nlWЀY~jђgmΡsߜMbn4-Gk JF!h>+w5;)=5+ya:fnǫ^ׯA͋əj@UGAE o@4vO_htpL(Ty`* +%@lCCCŞ}D#6ݸIVo"-*BDnP_؇ %BFmFA+O,v)tN0j!>+T$ܥ_MI]|S6{ RD 'v|d["r~8hBX2cKBC$җa(>/~lq06MX̪"XHCzҎfd8e҇d]R0Xk "B%(ʼnyꆸNWꞗA*x4Kޓpw~vd`Wgd| XG|#XO *ۚ2RNKY#!7Yǝooof C&UV-=ۨL=AIJl}mskD2B)鼊ԲC+˔ #8zO@ {a:47+HO@ 533[?g&&8&۞U^0,(3 by9ʎZ6/ÌO<78Lգa/ͩÔз-ohB(_ g8_AG,`cb{%кdTbFrC&[΍`KnghBį&]Xq~ϯFwfAj%eO q,̏ *Js8V Q^n"kt|W]pA^-y y X\323?(.Wyu6\@ *gٽ%'{CHq}Hq#xkdiח!riVp<1(@xzBB_.m2ugoX3 k /OH8`ص󘤄I{{;^[K[LQ[[1/I,믻qUC_':H( (\;ws}/Rā5~#ׯOHg-4n=XZGoVtre::EIַ!)ƻhp_OYc͏U[1s8t<:[cq0~nSEFGR}>=Ţ㔔A 7Pmu /"4%ͤ!xX<.D ~P޳ubou]'#u71!󢷗E,b&D51'\-Pй:,+ucgmiCЯr9M)3U\O L 'ރ4:K":C[3Olg(T\DDhZ)XXr7"G$.U^$|u94>>MBT޻P8T˹,>w쏁E+38X|Qςȼ|"N_O mTSPkOu@O` sW,#.DMRuϞ<~Zx;?s.> &!|-:柬hjj: >kRd-Lle(53m‰IW^*Wm=ntý;Xoԛ#o ϶+.WґɝQ`k0k"9Џ/o8]o2}WQ@+ǀuuدYn\]LƊ¸Of7'7NJѲǜaԢF@h;f6V&t{re 0>\bS<oAyIJHoAwBmKXf2M# T 'c(z'%H3o/t^cnCL{8&ٽ{w:nicons_small/17.pngUT  3GmكHUx*DUW TYH؃(UlQ0؂(*aMw @@DieXMOJDT@"Dmb! I՟:Nկzޭ*gc:#yӻ.=JN Š?-We. fw׸/zРCMudM~[\"eٶk!^4S?*! n,:?*PkWoDȢQccf5xYJK4NBq{-A3gNjzDJF ތTI|C^p8⡿p4~l7~Uѐ3i%XyRѡ%rrr% kUJsϥF5cwAb5j1C4PH\=>>B~?|*0Fc"jDpFgmqJgT=)="2!WbNIT#Zd2bz6nye񂧓'6!̺Rӑ">Mqqq&H$~yCDxU]4LЯjŰLvhha )l>7An9kbBݸu+ocLûàQɐ쎎C|6ױUV.)B?ΦQp UV*V\>:w_V/Ϻ$P U!ի">BIV Oc$62޽%r/-/?&B,w{ʭ3$ ( hcZfVK$΃ (&z0`?͙m g1$B P(whrLMM! 41!#C3=7 7Mbx<~O~^q\,ccc ͉,ظTd2Ht1ftwżCOLPƠS400H$FVXcpx< #zzZϷPn ?,AucA o7<揠]&؜m΍pOoˑJM:e2W\ga!gk=k }^򑬅<x䔵}:-‡ ccv<-1ܥ|bNF7N0wW n&*]wdx$*%.'+RzŎw3܈zs{|>bÖ.~Jy\Wj~AIfkm)Ym S4Ξ^'~p 4H^WQ cTZHGB:if%*3 BsgC"_ 5?k^ (dD0`q)9V֐H,RK 2]*aeRußeebJ "`=CBcA z mzƦ+KKVk*mU%#LSA?opuf /dxK zM%׹egO;qy{Ѕb_ {O+3>AѪNMㆮ'fWu|7r}}t.Ş)רtwC?$;AF2ʍk˺褑nA~ 4 PH5>,0K)E[Xa?o: =?OCPi4ږ7/nڼB3@7~o05c`֖aE 4YQȘ4 x~.amY;겿nvu-@c*5Np$)ؙ'eٳg} Ǥ8o,"cbJ81 CJ3rAW?g;Ng3l^$R# * De!M&l>0'0h/8z4|Uҧʲ]ǧ>8$ "w666dJZLZw%2ti2}zbȫhV /YeC$ɤEgGoeZ7Iz|f.Y;C zBڸ7=鈲R`oܾˤ)rFF7k>#43q{wbIHzמj;]ރE1+*LH{+*fLS]R :zE9i$_Fk/X4ovk+,ni>a6nS{vpu#;,>E? `~ {Xh+RV;-uhhxG |UU3aWޚF XWK=oPKh7 6icons_small/18.pngUT  3GmكHUx*DUW {J+pH:{ݷEP(x&IOm鍨`]Heӵ39܁z}b9I5[Pü6Q߷G G:LٹOwXh~r;kK4g%嫫SR9PN9r~ȁryZXcgQ%cW^4$ྪRA2 ]f ,Yc,;D3 @h+ xl/eVjB^XE\]__LaiVI 3DǧN_=YҨELӮg0&EZmMfqaKUTJv7[C.02=s$O,} k"s#b]n؉-bF*QȍSjOzH A)kSmO[jZ^Soֶ8>łE.NKtb}@ح@ldC}FV,|@5ɜeB $_Dm#)9/offfcd}P|>5<u+0Itm͍6FI{!!|@7ꡢ˗/;z{ojkA*iʧ3c$S 1*.s}pzHVAm ݂]z6/*l J9m.K|KItlH0t`qJ,b/~ࣈOyc&>֔2`7j111,2 g`kkP@9(M(&p@PRJ<"lZ>=S-ީ80<~Geٟx06Z)) JDI: lW@)7߃O.:?R U;=1_x햻NFHCOVXzj T.04ŕDq pPޘR겼6G+BLLyeN>̴#R'p5 )9^z]GrNi /70ub҂KioE"D{;Qt>Ŵ$/D9{ˎLCwsG7|/y;kcWq}q?mCnwtjz!:'!N.kyVr8}˺&ك'|˳-!圄됃Q&F RجaD6Jq-NMDHs87C yfR/?ߢPL-Ac)$ %r8_@"cD+L*D, D  KA@ D"VLLNs)Jjh xx2حi|p+oj.LA2MbU-}C]$ ?v#hnVT+GR;m+ &)THjKa<?`A~l^<4q\w|AԞ5!( H3뙞)p3}*1 *W,rJKg2#9LDO N~E"Y!E$Su87m 1hɸp./춂N2e9e|<@qrP+m˘#K4WLa^k_\+S#ǟzP UI@zdZ*w7~jЯ1Re7Ƥu[wF+Ќe_[cG C;XX߰ 灅W6 A Z&\ %d Mƞ_X%Fg;wRaBB՜'T J2u B BFA*j}<|nnVXHu܌w} wcbXXQ?=o5!tzaԁv6 kG&6ѽpAsyzpfXDSϬ,:b>ˤZaodR<YZY6Jwz k"55Ѹ~Dai&?$ d?#:JۣYbha`a"g,sҿR`<1lJLmߛ sχIIND,=+tgp $R!h44.'>9/ 6)_wB\.wjIaԯ*gmK;s+f/<i;J# 2]@X*Æ5 V솊߯YaVݫv&QX/h&`_ORXޒKӃ. uRz ?Q@;mjd³&{NIPKh7cyiicons_small/19.pngUT  3GmكHUx*DEW 8 c0,c_FBh&Kl,9*![ZCXlBDB'&ck֤CBc|Iu}w]s=)glgieϲ}!-&v{`n aߺV, ŀ3&~v)g|Q➮10t _cRW8R<[Vxϋf{@2vmqX‰UWOQO1җ=u 1uJxe9|I JʾtdWfgl >'8 s1L.2^hJ%\Wm)~./F"1|zKQOR`[I8wyyzѕ:-<6xO@0ODTbŗbdsBVΝN+ !Bk*uVIo I qRWj*g=ـo .ƭ}UFBfMI RFR%tDEb)]t«*Y@ph*4gL/Ⱦ5f~JPA>Nz^{WU9&h<  4"$xyͻ}j`Cē'@(swѻbk7f[Z'}eyXLce\n _^=4`X kGe bi(U$e[ XXMB~ֳan\62WqW8-,WaqGL2,dj *k@ ; EN? ׾%yڬ؁f45rW|@@TwQy.OlF" g‰:6˽AؚZn2ur>\5 ,qU6L ')LW.yiY?5{ƅfSo*?1RKkr'N8(B (4KN_Ymɕ^[/Ǿ k5!ز $Ǚr+nTm5Orvʵ酰|mʎC~ߚ^ \#{?XxHT5垗O`Jܥ zEV5=`|dl*hSRֲӇ6oWTj e`K6j7XͰzkF244>':q3bفѭqFk&_Za&*b* s>Gx@{Rmt^=ӆ}ʦVMWcP<(O<Pٳ7'ZS9h[|R>n.N~@8B `@L&=3 @P[_Wi{v:hΙaO/vcInoi!eMZӼZlodĽ-6"IGZUj/]5Grsc`0nx11'qF?fݾ@a #lWc͆@gPnho{!vn2+$?J:VImcòU]Ʃw-vV{&xyxhFM6^Gg-@ s_꽿C3QVQ٭Y<A#Kz_G|r RmABqVY*ȑ8 T1H'~qoq.R Uj_G*(Rכzb8 |/TcMBx- PVvcCk[V%UyaŪkHwo Bp jLXpA]d=h~SVO~N| @5b0"@{P#{ޛͮ)ŤBp|~ɀ5cm.%ma[)~Dȡ""T١a`G۞͑ovc/YDI 'Hga`s 5qP"q÷D~ : 9 _f/[ <4LqX^!9!< <vIGnu,gRCITXy/H{u5GyMV|"йbu,^}PYUM|e['PKh744 Q icons_small/20.pngUT  3GmكHUx*DMV 8TjLhLRF"q\jQ.f")vRB4#H$$D Q12Y3sl:[:/WkO]G;dO>}iRbWyORYü ;dI^;%oЃO_Xucu106TU:LSXSes$1?f3 WzJ1u~KûnR t&ႫT OLY5X܎Z`0; %#|EUNUM} NBVꝃ}z!::,tϵA+sML#jyʐ|ipw&mjޢT1ăX1:(2|_&@WG@"@$$LrD52[@O+=JkCTRQDW~-p0XU5%?8ɼFVQmuScxؒaM'ˬ>0sw;y!2IK;.|RBEɩuJ"Atm ՛؉s:L掽`{qiӅ.fzyVzNo;z庐{65•9a(3(kMquu I1# {)6i.̺ 3sC4SNvs1tL=Y7^ t7.x YlO/ L63+X. yR<HT|)"!?3Wd:O@ OIui3`~붖Im^qo4UȪJf./nw)jMq .?$ 勽FT'M Mtu\L/v̇g},琷C"PҐ#[^Y|dguk jMS`wx18\zXw4۩fEIٮnۯ:hUdȃUAT5 39gcBw/f;YUG1Bߑ]ߧ9`/Ѿu^ݔU{Ritfܬш U(!81-#|cdZJg2^j-)Uɪ(̨ۧϲݹ"]Th&Bq %6Z[P[[CRRV2mmm2YV~m h )AHSՙ٥ +Ph ^,M-4dE–hy,HA‹`;уu(׵k@خLR/TSv@6( 8}xymF <^tY @W t.~%Haan k}jp?- צ8ԑ Ih$}2MOjNYmNa=C+yi&%m +?]F&i}o6y!fz˟0@q 5}rl"+hI*&O8dećNfWV>$qk0͂UfLlmh?;z)_5}! N mIyn兀뎕vwfR|4ʼ?qc\Tjߍ) Li.[S-6.ߣ몽e9<<tT諕*Mӿ~uϕʛu)y!J}T``9QtZhkl a&8b8,λj8!EFɮnqԈ;޵r[D}+q}1C^ʀl]F-kU^Q-&3D{|PI8gUl㆚YEBa͞#" GGZ3w0V.%$_=k )GVA@\5_@PPp@Xo6xPOKjdq7~Nl8?vIS+x z^<8[sA/'|DRww H5Aƒ]N.rgoW:~6-mڔQ{3j*Z^;]926qOܱi ɾ0[?f8mcWe5!օYg%V]xkhyߨ6f8N+yV0( ͉dŏX&wpXr(YzH,gTLjeY ;I鉉d2["XUoyx|kvC Haep΅Xc'.qd=.[Ce~vS$GDoFt5s(TO~f#"kIuXZWE`2*ّjt3zSvsu؛My戋mnZy6{~ W3ZYRno\P G8ܹ8J252H A#f?YMp@G(^M;o6BW_Ur׫< . =m9H/H/PKh7փ1icons_small/21.pngUT  3GmكHUx*D5y8TLJaŒ]dlٲd/N%KBvN)$%B1cWd;5xFf ߹s>\}S,.2@ fc[UfP!QQ@,&&:6%rL \! ]45뇠鴈x>2RꛘC|XŽ}g۶!mA}kGYsnc>>-|^Nc%\ )C?NOO7pMwgie]ZUZHp~dܾ zƲ\AZBZYB䂭!Gy ǐ掍N+  %O('M71 `3Rǃ*TC9ڊ6bT7| HHÃd2ѡh7u7`h'J9)yvqǴ ~ZFZ^tq^^TzNS 1Lǔ# 0=n&9ؑGQwGu84N ,rrY.,8PN?f%,{_о}VoQ:`cnIuBcj+OBV"Ţ W?OaLG0%f'.߻'k6hzʖJFZ d;nKsBWǙ3 ?Wc6P/ qhޭjOttL0j8-mGRcŶl5ֈW[85y[.*f8E1 )?dm1(SXhIG~ ݌l|c锅't*k92B S; r^ >K4,>P}y 9y;*F {*H[VqI Xgˋ FH:V[>8 ;)AdD]̮e`ڜ`ѺxZڽ&eh%O9|3>+K~a__bϥ<}\|v{+PSC/f$Rk8g6qeJt+DL:aA'f (s3[k)TU3s9ysbyS64§?4{ǜJ~G }H4xlZ5$.H%8!!QT4;cJg5=:2X@F*%Պ\΢ϢWfI 1 oq+Vm~<+>< lލU"]3JꑊZD7dJXE.aWÕAyx8x>K B\>5'IkQ M-Oa|ޣyyeZKX"/9yhٮTv ΘM<+a_5$>!MDQ5&Z9.}9wC"~ʡYTM~1'<@=]èwhwRd֏H5HP% yZS}2bKXpI}9HIn)xtQ+a7N~Z:J%?ǑL|:9ZB󥸘1Rh=ACTh}ke{}}'C/g{c٫gUuʁWp7l7}E֌~w% n$Am;@y[6ůlkhх9yf"0x~խE ̠# 'm UWbF\~D֟1n61m#A%d#mm:monۡiM;MF&zj BvZITJ<۪2UJLt͟tYcv+;_B- H^XS'>. yTBXC91y9Y~ۿ~5 B1L?[`h.sͲwZPz) G/G+*>Ȟ9PO]R=п͡ލkT4ZeMѩp?qVoD6Ո$MTb*`}5 Йՙ zQG !Okhnԯ ;6؞/`g儲Fhvsj l70!D"o2XN;(IxYz[qi(0=<lO[ vZ/,4:+ގS[Z3؞rFN (f`~! Wd* > RgYqFpz N?tEyr&̉7ܦ}#סMm?g'X'~0 f']w݊??N̤!_o] f2Ni?w&Wőv"pK<ѱSGJI찑O}kM17f0aO 8uZ Ԣ`p$luW]חg?7|6`(%2;>Zx0$>!nEP2 u]{,v^F븴?sBSeAYQ#סu\+vW\-Z(x |"<6OOY]F yx Eeme4cazH_|usUma2 }NPZ8 fI0vMɵp:Md}1 \M0#2`:?,Ɂ& KI#Qi,kuS w F]0\{d shVEp 4w:lp 'dδ86w4R۲TrU^!v\ ._P1r"ƭbþCKX?J&mWA~[)+Znp;)p窌>߭LFha!hbrbR*aX@!%vӞyʹ0 ot5-a4m5+Il L|,R}eildSVJ ܙCV5 ۃ{N']Tг31[LN %)׹lX 'L02 ӭBKZ'h&k!)w-eU0<9ze/*3IZf#[F]SˇyDŋcEvx01G/jj}{ROB֓{2 ǹ.EŖk#t,&t!O1ȝ^/{Cws|D7gm~yRʰCGJ{h+b%Zʁ$ʿ>ݮd3j8d q$dҿ%b/g<9&4uf㕇\Y Iz0|c}ږMch\W5Yk;:A$ܥ+hdc\dbT#Or12J!VЊoJ-n^W7y2joxjŅObD=veF}ƿşo`?ƃD$XkF7Ã5) ${I0)jc3sAfO_U}@X@PKh7cyiicons_small/22.pngUT  3GmكHUx*DEW 8 c0,c_FBh&Kl,9*![ZCXlBDB'&ck֤CBc|Iu}w]s=)glgieϲ}!-&v{`n aߺV, ŀ3&~v)g|Q➮10t _cRW8R<[Vxϋf{@2vmqX‰UWOQO1җ=u 1uJxe9|I JʾtdWfgl >'8 s1L.2^hJ%\Wm)~./F"1|zKQOR`[I8wyyzѕ:-<6xO@0ODTbŗbdsBVΝN+ !Bk*uVIo I qRWj*g=ـo .ƭ}UFBfMI RFR%tDEb)]t«*Y@ph*4gL/Ⱦ5f~JPA>Nz^{WU9&h<  4"$xyͻ}j`Cē'@(swѻbk7f[Z'}eyXLce\n _^=4`X kGe bi(U$e[ XXMB~ֳan\62WqW8-,WaqGL2,dj *k@ ; EN? ׾%yڬ؁f45rW|@@TwQy.OlF" g‰:6˽AؚZn2ur>\5 ,qU6L ')LW.yiY?5{ƅfSo*?1RKkr'N8(B (4KN_Ymɕ^[/Ǿ k5!ز $Ǚr+nTm5Orvʵ酰|mʎC~ߚ^ \#{?XxHT5垗O`Jܥ zEV5=`|dl*hSRֲӇ6oWTj e`K6j7XͰzkF244>':q3bفѭqFk&_Za&*b* s>Gx@{Rmt^=ӆ}ʦVMWcP<(O<Pٳ7'ZS9h[|R>n.N~@8B `@L&=3 @P[_Wi{v:hΙaO/vcInoi!eMZӼZlodĽ-6"IGZUj/]5Grsc`0nx11'qF?fݾ@a #lWc͆@gPnho{!vn2+$?J:VImcòU]Ʃw-vV{&xyxhFM6^Gg-@ s_꽿C3QVQ٭Y<A#Kz_G|r RmABqVY*ȑ8 T1H'~qoq.R Uj_G*(Rכzb8 |/TcMBx- PVvcCk[V%UyaŪkHwo Bp jLXpA]d=h~SVO~N| @5b0"@{P#{ޛͮ)ŤBp|~ɀ5cm.%ma[)~Dȡ""T١a`G۞͑ovc/YDI 'Hga`s 5qP"q÷D~ : 9 _f/[ <4LqX^!9!< <vIGnu,gRCITXy/H{u5GyMV|"йbu,^}PYUM|e['PKh7|wHicons_small/23.pngUT  3GmكHUx*DiPSW{Y!daI0BeMY, HUb F`VT6Y sf9;?#"~З\-_aq Y )cR2jƹ_*SܜETM=k>Z2AUәoE*[*t>7wC£N!Bʳ.t',ҧ;DċvPOxʘx'oB6B~qk?e 4O֘-t6\`ȼtc3>Jpl#\Mqp x<ͱ<+Gi{ |4baV̎P[jlN˯vƇYY/F(rܾr'.'p5]'NT(UU&(mO ިP"j\ Nqtx/ epLM4,x L:J%2LLω?n`mVt1 |Bp^>[o-[SMA%];?w cS4|ntJD20N/љedlM-!5H&Cj٘1?$ao FTV}He0i@F6F$xn~e2l{ Ғ +TSRk՘YDPh6m <7w| K; :ˀ ht ]\26] $ZYGW/mwO,YYL +y.^dO|pgj>&0 ^T0tewT#&.HR.VVD*f&gSOc JЭ ׻ښ[ƪ:Tb=> Y6T$j&$`BNf|VXHzNxkNRV2 ~/*Hni&!:ԙW0!]T+SWn3(PY˳]C%+Ǡـ`لCe _3&ǎeLSY]3Y-mx\bQ7l&Eiyù,6ϪoB 65+dҁHQ$f;X|i(Jڦ=Y;;)[g Us%A- ^ãS[]O^-̝E7TGΗ΍ep\l)!c3'iv{-uu^LsZ]ޏ.xBui&qg:Fs^9C%I |FrxF;\K=6B3^L6?eW9ޣVР[PKh7|wHicons_small/24.pngUT  3GmكHUx*DiPSW{Y!daI0BeMY, HUb F`VT6Y sf9;?#"~З\-_aq Y )cR2jƹ_*SܜETM=k>Z2AUәoE*[*t>7wC£N!Bʳ.t',ҧ;DċvPOxʘx'oB6B~qk?e 4O֘-t6\`ȼtc3>Jpl#\Mqp x<ͱ<+Gi{ |4baV̎P[jlN˯vƇYY/F(rܾr'.'p5]'NT(UU&(mO ިP"j\ Nqtx/ epLM4,x L:J%2LLω?n`mVt1 |Bp^>[o-[SMA%];?w cS4|ntJD20N/љedlM-!5H&Cj٘1?$ao FTV}He0i@F6F$xn~e2l{ Ғ +TSRk՘YDPh6m <7w| K; :ˀ ht ]\26] $ZYGW/mwO,YYL +y.^dO|pgj>&0 ^T0tewT#&.HR.VVD*f&gSOc JЭ ׻ښ[ƪ:Tb=> Y6T$j&$`BNf|VXHzNxkNRV2 ~/*Hni&!:ԙW0!]T+SWn3(PY˳]C%+Ǡـ`لCe _3&ǎeLSY]3Y-mx\bQ7l&Eiyù,6ϪoB 65+dҁHQ$f;X|i(Jڦ=Y;;)[g Us%A- ^ãS[]O^-̝E7TGΗ΍ep\l)!c3'iv{-uu^LsZ]ޏ.xBui&qg:Fs^9C%I |FrxF;\K=6B3^L6?eW9ޣVР[PKh7;kټ4 icons_small/25.pngUT  3GmكHUx*D-V H,O=EWDOφ-{-7 M*0#MپA OKU/$JN,b{d۽& Ḉq=F+5hhferF[ s2&th7櫸_9:G#/70Ӫug1$擕gGWWhgղ0,DF0Id P\4Bh>nG[4  ̈醋x[Wf*qaF*(͋`6^GR= kׯw&Wlbͭ)ΔjRUaO?v q*`/|7laQU_VZې&MTbB&Y"lkiiI[W~{ 7qOGozVꢮ3 p<(TN\᜵RьF+Ȉ=$¢-,|G̊+Y:,(@MIs)Q.ąvt?;GA`%-0"ߵV*R@*'b.$V&,4"VO(sn_[Ƌ'NS\9^"_' u4w>#f7><%ʣ12J蟞n à#.Z$Ei'H' '^HP0mņYв+bFb0Q{>GB}>_yX{?/5^k%K ~|l4?a5YBT<160/w;Ɍ̴)<|zCTKhUϻx]/DW5bte.R~bffίko/ڒ 30pTuح6]%*072DZv0?W2Ub}ֻʚ )>Qu[U@^-,ԇ A&bb}9#־CAGh]S;!0iwe񰢤`ZQ.ڹkns]5rg";8ukOPMb7[v~穌D!FE D kMzB -.?n&nZOy?Ɗ[I%9j"P/٣ v' > Y!6iInöSmU/ o;\Lk:-k\"GX5妚:JQӷDP˺oIn.H{| 1@>ڇ'$77e˶T 6%; JW*,FfgW+g{Rd)ˀ\g͍dA!+#yy9hiS NUd`9f\$HV((Ⱦh.J_@t,J+aPXM"$W2H@ )[,2%eCN$35"̍T1m7In"$'O+c#L"C80`Bm[ rqtp?kyHY"`Q8#&O49G_ȤAGB*M`gr '1fiY\u9Qɤp9{RB %7_]эsa\ϭM|O7}LNuT#<{ƺs1GD8QͶ)2QJ\eW..=ZUh9H J+" Uzj훠?sv$}oSfRP~y\\0o:Ϗi2Kij d njޒxt%[W6q<2$7#_{ 'l?hbLj M Ɯ(UZPkkxO;HWT.]gw@"@С[)YYY`HC=J,ojQC{/H&C OBtT9Xq7b/Y"_ Mu iooY`8 ӗ@UMyP ^U%; I _(:GlpVp8з\*hURm3`gmw'F]pvMdZ]o=޽2ϩy?aiCs.<'-߮_"s&4*t:XŒ@Gu EDs%[>hhL]WƜ;@ݱSPϫ,+԰R+muc$/۴7PKh7'[  | icons_small/26.pngUT  3GmكHUx*DMV{8[︍1dRL.)ʵ rIP"I } IE( 9(H GCK1Y{nY: -|âfwt!78']IYhj{=l~a(C.?ȰR9qXv% r(曉TA ImF3mZ_#a Zپ:1gmMSl`%=v7=4nsL%}[ZbG4Skә.0B-Dy J:AHķܙ/a)cEcu6(JI;:}f5*ٜ$k;6^kͺ6zRcPԴ $ &?jvji᳤!FKf;FȒuԋVa{\F=95T goNd,vuIbI3޸7P^A6N&ҹCS˹|Tɋ%XigYޚ![.D>{e?oBK~+k>&xC ZG(K]ux|n ;(1 zzzꪪ3[fF9q"/#B]fDuklת [RԄW1 |g,,ꉈr>Ǫ2a+x C a!'G蓁DY,v@L\1ihnn0WRVrr()(,(WE"2rv%jk{+⪨J}DP ðP$@1`hCY1NE'CJ̨DeVѭb?;yC 5>CV.F_y2F"8w,W]m9WG=[9ںWi/[ۜB$N/nj*hiULpޏT쇆iӟ6Θ~0޹\# UuD +rUU=<+ 2C7MfjW\R,n:4yf_LO&}}}׷DD1J?w#Xf Z[a:=CҶ$tan~244>y"Mg;r PPW', ~ PAIOOuuuZP0,2^j^Cc<͟$%a:xBDxđ۸$ !!yyy1BKOLcb'@E+++@ H!%f존1&''FZܻ_rvvVJ(<$Z\J[EE p&`Y $W^1M# \_|zztw^i*R(F!+E7 x%3I0ٗ"|lWYln~l`.LGa1ĀiI CI)IFGw?Ņ;85_0ڦVq53dq<]I@ADS:1AF2H;OK8(:0fkqϽr;Lj*ѹ_`s9 l'qteָK*]4s0?=ۏ_ [:siopA.ҩ NzS~b6;f;V2][Ӻ`0JSW$ZW]Ss.d KyI)NyN'S(덊2܀RbBh;e$/-ͯ,{ij#+Խ.Xn(eDβn:ᏖZ&>{]\BzRzEsOglZm0ׅAQT57o˭N\!n5 7M:C{(~,p;u6z:mܶH^/RYn9/ZׂC kIftUKM$ugKsj \O'ˡl f]NyX5~%rg橯|QGuKׯ']=ޙ52dl| vl\=\mњɰNVBJAWI^͋SAynk9?lY^Bx)Af1G )^"|M{Kngboߵ|?rb|x,{uD\GOO}R99 <:/Wvj9tfeT|ûא0zQ'n?^aA|0#إӃNWW+\ht0|"*z!9w'es۞EJ}[a˦ˎ md9pnB2m]VCeC\QMo/z:OfP19eH<<[Dvʹ`l_V}菗XU*붃:ёCpIUE܊@ O] +rfF Lܚ·?l}4q)Vv'IY`{{,#fyٖ6Nb-QU\ro0Z.# w/^hנ/ 0T2Aϱ~Ii&`.'䩇Z项$k:\kgGHk Zcꓱ+ʱ_^\wX%aYVǫ>,ywPi?PKh7L`6 icons_small/27.pngUT  3GmكHUx*DUU <-4e:֡&˘hrIJV$$RnP)ĆT܆f:~>=y=I?ᢥNhOEhid?.@iB DYWݫpv%/\"i|l"K@ QR8?YE9 S ֥;=7i0ggf ^| u^S. Akzfզ Z WcG[@ªe"p^^sdL}D2FΌkڹlvH+`<}ljmlK4n{/B]wh6Jhe'68rV08xJ Fi9HF7+{w5hm؋tU8CQ W1)DVnEU+ZҰGrXp*f ?*Sh'0Xen'g$5G/q M8pc~C\}ei E{WǎԳ<~T)ʤN:V.l{ @ṞE$AxcΑؙ ՙۄgwqh@#+LI;: CUyb&R32 tۭГg["7|>#ϡ,%[E"yx ']O&?}5SzPPd0+ |iu1LKύ;:66P[p.9=5!^6 ;Ckf^/b`Dmϯ׿\^wǎ?6\90e:O3[+ZI)|iYgkkӜXdvL)"ߧNʾ镛ϐmӾ}/=B*U(aj7ѩ⡘Q'$_yuvxW‰P:#;iGtYafdw5{2MmEv4XH$CţպIwX-#sG&[pԇ N[xGdECٓWP/ӿL;S 9m MbF=#kN$i;̦[æ!ķ.:`X'i+T/HU4?֌Q}ukCzm?>> p^ف6{e5@ q+"#3bE|B-1=0qhdQ7Rpиtj{'weo=^|APDU=:21]WxiajzQvPYSAGTǧ>z Ee?#ٺ3{lٕ`~B˧.s1L#CcI@yf]1ZoqP)hݠW./NB'm)q~v!mt4[v:^)aR_z^jA M37:JŻ s̭4o;ݛ7al2vݡLiB߷/GUvA+}ָf M\W(ÙUOo!ֆ6>C8&:$PKh7I|~4 icons_small/28.pngUT  3GmكHUx*DMU <ͽa.E*JB!rMQ1J+e#垻NAD-s)DKn/:y?}|}7$B;n|~qэ7@mh3gBv L e)7tpV`+S *|)E'q/Dz Uvy9)@öΉ(i=p;[q0\-}MQY<@[/uF E,ڃ,k9%y`GAk@c_\ .ֱ?f& CuoxͿw$ m6> ֗`e_'epqxu18abgeS~[d?m.N9v>L7 .yɘJqq/ <[aA#H 1@%,:Ybd/3wPmE<{hv)ǒ\7]6h&qEFfQÇS蕱8Gȁkkk-p9/TW Kun+`++-o9b:u`ح̱_enK>H!kܠhU05;0̨=iэW཰X(S/I %Ǯ7ųv`Œ2]k7@ރ r~BWc\ɶ-YX<a~~MV/OJ%y3=u\-$YuNa'8w1UB믄,ee'97Uv2U |دJ`_ wv9xkn ATDD`uJh+?{PJ=gd!ZO ,XA/Kx FAf&5d 嬀{3A)T.xG">;qހR KԯIîfVDrX wxe6/{b ϞX9Ġ ~7Ð<<:%$GGaQ=㍝HŽG: :8b s.liifg o!U` RyKޱO5=74'454+ gE$bD3ɵFACq c~n{L%)1ܴjrL3 TwvmM?)S$M]S3{0 Z27=--C F ʴt{772ƆV:u~F1(DٓN kT+<17dzY:߲x$I1,k煗/^\5(ЀkWz<8q㷇SB=q5'Ym4<\;YbD*BE{ec3g,=Ύhl0Lvb<Ҟ죙{3#}eF/qt ^sLΗڧ{CWǕ#|TWi3.b}r9Z׭,0 1AiIꐤ?͵< nI"&Id^u?x2LI6lM;!s vYHZfΕ:ӳ%_*~69[8J.i;w0G't;бJI.CPaȞ@n (s>f2ǘӂ7jT:Vy\u4G3VЙ8ZcV߾lZRt*p E-PBd3|B{5GڇA0vӓ'q)fP'8^pQ&1(oX*tƎט3kAW1CO*Cd=:cAp2>6S3K=@Y|o/Y۫9*(i[)+oFdOH=2nDሪ&f;wHdVDU9{ L\R{Iҿȼ_3Rv`GnV7Н@ S{ןŽ3:`.b|4oO-w=!syWS2 ~Ǚ/m_$(;^k]쫾Xu]dPKh7UD icons_small/29.pngUT  3GmكHUx*D]ViXS=7sB &a,R j j} *cR}R,8W+`E "U!w^g߻s֭YK3t6` ($왘< -*o/WP yؒ^KSNvqL龴rZJ5<wW "ӯ8p61 O88;ZƏ1&z~)phzQh|o;m쾊C.I(߸qR_| gEQ.πKJ/.wď8awfE> ۱ܼs-Sc7+(aCg/(P.WQFZ-yyF"Ϩ̨j@3E=mgjF2 s1 0eh>VV۷.\O"1 0#`zZrdZAW˱olET*PROR@=Z]]@") @ Xˁ'F_HVoABSSPJ )'$R)E*U}E&bo  >>tttA 0`i%6႗+kcsJt&PX@l "JdaR<&"P* A1\. ǥRjQpve96I|  0l\$R0 ];WZR6A ,b/7nFL%(~zz-DFB^Mkjn*rYo2ID mB'qJlnn?+w858ZMY1=\L&9]J96k9E#^"Ǚ8/1[ ~!w}-ԐE  U?G5dŲTrPzFeh%>]+zb$VWX+=Uu1xH=$$Ebb P&&_fӚdKPm#;K?1pju ]i.ֿF:ެZD*j<522nXKh_m닖N3y Nt|ZX#:uO+YYƋ@aDz ]νN^\fˡ8iupdpY,sIe=I;JD}+'ʿ뺆B賶& 4YWNuAI h,ug~ғfbC^dtϏ|RpnR͜n4_7&-53^N1zrrIh3;\oMI/Ga{fJ^rubYg.ۅI^]HWl9mbMoаzG._="re=fэJ ʼnXI[x[o|db}pUngC36 \)jeB}@CLwuku!Oydt+wNx!:oz>5ùZæ(ڷ>ܠ[nǑ<6o\?av\aÜ]&~QWF˲q{PKh7٥5 icons_small/30.pngUT  3GmكHUx*DUw\gWU(RQĀ F JQF%jDQAX!(]w{} y/yٙΤm\牢 5ﵞʷסBT>@tjֻq917‰G,rORTڹgggLTp^~ls\O^Gyv4~SKkNl <1L5''sŞwkЌEVZ A ~&7?$b6 "u$Cy?z!M 1qׅ{l q V{\+*YZ&>(WϹch|qȷq[?}v4?Vv5om%x[/\v)u/؏V}$ۂ/T+{"ЫG-9;YbP˦r{S۲O6\ƻk/zWvɏ8@~߾Ka``c" \Ҽ@GG1dgP1+M\eR 33eST0DAӦuhk 3Leuv177qxʿx{B .B! })&Ahr64%4<(v@>}Otp2$r?b dj&Yabbwybk+ 0~ӳW.gSJW@L_17@ij*| ”°! k1$0g17a@g#imX(rhT r&b)(Y@ԴԎ*͡|U+ľ}kGoMz`d1#(.hmkH̑vKWLiUXvΕ[k?s4~''#FY%'Nsntzӹƚg4yA "mWvvp7O5K-S3iNsjoo>pTAZ/+QGqG>4uק&[P6>c!mS1 ola-{?3fLJQYb,M]Ya8" P1H g " I!W ))zRyl? g(iDBDi ySzn+ @F>BbtLac3}@42 (@.c_D")d2` L̈́TxQ[KTb{PߕS!whI6瓐T5~l? *yz 8>EK? J4(Ǐ|k!$clH+Lg:l'Gotv 6 6\3Oy n9X%5b#o{~W(yn̼-%OtNq<֏/GGJ0؝L#޲ i-+RՓF,ZBgFyg''Z/8tN wX[[a_ObCe7VzvZQ:^lfD!`5/nUD"\z{:HX8lUܒeX=z@痻UI</s2I·yNakµdSED{ry+wiC?]uKp}z_ikggDZ=pllme) sY"#txМ@*~~Shp m:E4!PKh7j2 icons_small/31.pngUT  3GmكHUx*DMV 8m7+%+MoBXCMTe!9m 9EEySo0YRQa mN|O^w_s=O=|a'G#sKIGDGXNv`:p{iףLb#x-uB~T'D*΅ ; t:(B"T(vp2mzv#nRVNswU$elO1J؉|?/?xtb꾿[N_~yo1ߒNidxe׮CUUUX,U.F|&#Uh?E?¢^84rߞQ;i>N`J J iKegNa|H$-<*g{IA$" NʴYZ=w4J+.nSz 1) "/(V+S 3Tym*{5IȕY[W!N5E(=^ PAcܺ{75. |cgoNŒ},@T5kxo\\ !7>߆B[}_vչfgPOVZ,~!7:YyMgIREoH~qvZpN30)ld^[WWk0Q;L`!.Gc"]c1ojN mVbҝS4+H`x?LG̙1URa3(J6$V6Up>r, 9ekRD"aʢw b?'^?x 9G RI~TĜ 3me0\6xR(k4FQ3FPqGgt >z2PY2),8:OH/;%(8A5Sȿهl>o)^;.(TSٽ1M!ZuH,ĠiuD 򴹌trB0!߇n_e@GΛJBdi8DVE$4!ҏ޲`UZ՘qMjOLS; Kj4@E&9{8(XŸ@8Mm0q+8w0NsX(5<֫9f7C[;Xʽ#q `WY)4x"?$ߚq1XparM 1F̎;P jFaȭL63XRqO_lCF"*u@Ft;7hw 7 R~p[ PKh7mvicons_small/32.pngUT  3GmكHUx*D]w<qG-d7{degBF̯},D8$glO||$jA LG[euHw  騫#r%zD([#n &Uh6*?:)| ĥ[iS?E4oӛn L IGa s't& &o۵r#G$GxG>㉺kIo(п8],^ʃ2ߴILpqmM$8H"H%lgWyCV|h^n(eV\1[91֎B"ݒ sЀqa|l2ǻU?c9hsf}]>Eؕ"Z1uv:@ dƦ>-*7]اflHd7`GV)gu;^cƜؖPOBK z(wPl{6MA*8uqxSg-  1V}}ѨԲZe1:\Q7~&m$(ūf][eH<uZ548.8ҷ5PXerra6=esi2Ԧ9/2ipMMN4>k*e;^*.'镥\3I5Pn$ܸ`ÚȲJpKϬY x&Y3&WXGOZnQ\EhJU%?/ p. 0%+Nn Cg6i &b%7 *Kw I{Q9FJ0bϔg}D::T˜. ~{76(hCGO| gqP.&; Bh#4m1O<K2tb8{/du,Iٓl0!=>Sxt>qD' _x}՚*||2o)ra[88UQNM{KLRp,z_p;ǎYzf*~"(7>gĕ*,z:y|8kO> 2jTNYz+ԐG_AwyIOhcN'PB7|95Gyy_N"k89I6ێqWZCJQs-zZă f Uz.G4Iw| e]z7N`{hF1e݀~sz*E^L."GCԵn\B)W4ٮCL)+h |҂_"nlng]:WgPnGCis$auR%/ͬ尲b4`!̴CaA4yF.?IJy\~bVeDW l̆^bbZK豙 O4 peBe*wZr %q%@6t*p2 ` F:$׬{U'ce>But%G}"Uy=y{ׇ JKk'Q= .R?C $?B؁$ct>S6~|~x'I7xofR5ͨ&:-T`Rb!'\Rv~Jyz(yNo`6CJ~ RԀ EVE9eir*[o=-^G:^`uٟ?b6V.NP&ΈiB:Y`*Fz$.z>RI@uG׽2B$AkU:F->|0Y#7'\kcD2f\ ,uUP暞yHa%ȕzh}%cG(oJ{~SWMߍ[Z"hhӨ̠k]oVtcFYy+OrB*Ҹ{ɓ߅mâDoC;#d&%6]k l6BRkM[yףC}rPSiGj;P\ijMz`We+ӊJ1p|R 8l˻˗Y_{soŚB%2zDE,:s?.S,- "| !',旣ޕ8}陵=:MȵS2WJD«ÖTv<䢌ޯcy ?bI  ;(( EUڢ*K)lﮁ^<ҜZ|bwI$aoGB츄N, ^;Js UWX6`èFnZ2 QSG<|1J); .mu@E'`ch ؁G^ݸ]8DiwوPL~}ߗ^O?GKiy6 )#%R%1` ÷"~8E[J;f` K!F>{B@GPJ!?PKh7V8  icons_small/33.pngUT  3GmكHUx*DMV XS-$@eBDQH C*Њ  }ꂠVѺmnh슈"@L/{}gfg̙l_w%6CG%Eyy2ĜaP7v=l<~3".Jyڙ\Q+CC˜㹸C%˫uŧsL _NeѴis+_ M\{92J ocԻ(zw]3 KQ.~2 w(OxeL>N%W} M'Ȇѳfس[q7h ; ~ 3 э\8j}ZT.@0w+/S~MM1թT{giߺ754,?{̙Nb_=924Nvdvwe/3gӠ&E&f̓kT*6Y:YLH4 ӰiĔ*7*_Wx<)11WהBi抾D'j64Jc]]Ɏ2rʔ=6 [{:[Føpɻ)k~kiݑiK>>[ q?7Ⱥˢ-_7Ѹ\.uQW{ "Gg[ 9me6-3FjCйH`8.Imadh$}j*?- re]ȫwH#"##7yJv-1HHX>>>:Ex!!85*|UoٺT4.rDPM\y3#|γ'=CvoZ}WO8::f|oCe/B4VhNp|^p2JRC#"ݨRY|}sIJ E)6`5y5]2ƻgr5zwo_-124W[0*3+9܏-}3tTZًtX>C*#J[  :Ԁ% BJB`!lk޷"葡p~q UwfL=c#kdGaSc3FYEəc0Tyo`@3ӐLoߙuzT*|. P1Қc#È" (S`fE 0 !hhy-7w%D!=ݸvEUSS|(^8Iڝ#Ũ|x0<,0{ǦFDjD bdXX!D"bu}B& d-011 jjnpXT(.  "+#?} _fOkt_[wb?)vYg?o.>g}"Pcm%eMbxx*WWH?6cxe"`H]]@ࠅzX+<4ፌ*3b{hRF + 0?ÃEL_w - j$>P΂tδ`,}.k,>dE?nӮ{T)ǣqX+}~t1(ޜE~$:;S4+ %q兟:#8lU{u =J[><Sl􄇧ZIRij_TY$ E4iEag: М|a"V&sXؐw0J kI;Z雭5?5VGѩPC#iز]AĬ:ѥn}6ܝO3Cl@=,eyzv\uxS|J/^M+=V^B V,6W:/C?P3@Z?t|A;YǺNG,KF=Q8ł_,z%yXGimU^eJ]>%ot9CȪim6|+j]I@Ak(T~\*ǺwW:C Odb؊' :\ +oeuDPUJaS.\;lϤ Δ&5C}%]OWf{ PKh7 icons_small/34.pngUT  3GmكHUx*DMVy\L?gM55$M(a-WۆVY"M"BDeE_et*-J*Ŵ4|>>99<<{v*m*An܍鏋LÏ 7˦#i .TM+۞՟N7( X#S4U1}̨++ læMhrj=c滺ؘlONe`8 =L >svΌNMlgf?xz{w;cruIۊ7%xsoWYsnDJֈg,Io '9+v#5zub'!^9%W0/n l=|jA@ceYѬtYGoF꠨c*Φ*s@Qy;mH?zT(."r8"H0pU.t 5SO.Gz΢1XQ!OM0 lxz2LTGמ( tWcq]2a8Gv+mQfL7׺8CSigJi5)©5|G16%e(agz:jEc}/|@VQ񁂦V8Ch666QUNKHp.C \әT9ls yPw_U(%ײL]S7_xEsS/˫$qYxV["Xn7˶u;f6*B5c*k+WL^Wo~3139Pw^Kig Ky߃P|6d|-h` &Z'!i,d|^wD-E`_ü+P8?|"xn<*0֩V'mbc#uwN%6} D{B I/K} \xlM{g;83oOrgY ^rRԯ$¯Z_zWV Ĺ4 ARM oӰZ6XWӃK\ZS Oeo]l2ը?ÝR V>IA߽tdQՋgMX]k7ؼL_R% jgX _A+}YFS'loz|h/L Yjˮ:=A&^zopsǝUV}PLpp{)g,>m =]8L3/DuN/r֌\54ԲOwEOZXE.s/ewu87ά|ђyCO}9Eq#^XgJrj e|ucK篶;S~ΏzwpM=$f' jP ƨD a@98 냁Z D'4"IIJlJw¦q;]au!D !8lR[SI!H#пTr c2&pZxIxBt4Z t@j " A(&P` т|n1BԷ_a߱Ҵvw@ Ievm)[G7|kh/H]lj,[3La26 p#;&iE) c# B`IRPg\AQ PP4P5-+:oQye EW,,U{羳~Ѫi.w$4;ܚK&/ R6xpj晼Gx@롐=d b#!3qL(rDb`0YOS @.Nͦ|"`Xk !ZS0T)~HB\~l6J4l?tbM5w>Ӻ7vE6}cb:rM~f{.Вk8_*cv>G{XΈt'뽗8澛}ūuy_)4htl c]ox.gkhg)9xK}/1}se c Сx=:28>o0SUCm'*d;ޒB68nΜ~dK,wro :Rlϸu0[в7˚0ީ5 |]=֢B'!t9e*qnnl4%c+W,E'\܍ hv뱱A{ǏQ 5͛da2335֨JD'4>.1jG­8xGLvXf_Mt*0Z 4?t%#1yrM kh7i,%{y{棬c Y'\WȦceyk5z5gAY6HƖh=S5>`tބ&J#՞05~S~f]ʣw?r[}7PKh7>nicons_small/35.pngUT  3GmكHUx*DUW TYH؃(UlQ0؂(*aMw @@DieXMOJDT@"Dmb! I՟:Nկzޭ*gc:#yӻ.=JN Š?-We. fw׸/zРCMudM~[\"eٶk!^4S?*! n,:?*PkWoDȢQccf5xYJK4NBq{-A3gNjzDJF ތTI|C^p8⡿p4~l7~Uѐ3i%XyRѡ%rrr% kUJsϥF5cwAb5j1C4PH\=>>B~?|*0Fc"jDpFgmqJgT=)="2!WbNIT#Zd2bz6nye񂧓'6!̺Rӑ">Mqqq&H$~yCDxU]4LЯjŰLvhha )l>7An9kbBݸu+ocLûàQɐ쎎C|6ױUV.)B?ΦQp UV*V\>:w_V/Ϻ$P U!ի">BIV Oc$62޽%r/-/?&B,w{ʭ3$ ( hcZfVK$΃ (&z0`?͙m g1$B P(whrLMM! 41!#C3=7 7Mbx<~O~^q\,ccc ͉,ظTd2Ht1ftwżCOLPƠS400H$FVXcpx< #zzZϷPn ?,AucA o7<揠]&؜m΍pOoˑJM:e2W\ga!gk=k }^򑬅<x䔵}:-‡ ccv<-1ܥ|bNF7N0wW n&*]wdx$*%.'+RzŎw3܈zs{|>bÖ.~Jy\Wj~AIfkm)Ym S4Ξ^'~p 4H^WQ cTZHGB:if%*3 BsgC"_ 5?k^ (dD0`q)9V֐H,RK 2]*aeRußeebJ "`=CBcA z mzƦ+KKVk*mU%#LSA?opuf /dxK zM%׹egO;qy{Ѕb_ {O+3>AѪNMㆮ'fWu|7r}}t.Ş)רtwC?$;AF2ʍk˺褑nA~ 4 PH5>,0K)E[Xa?o: =?OCPi4ږ7/nڼB3@7~o05c`֖aE 4YQȘ4 x~.amY;겿nvu-@c*5Np$)ؙ'eٳg} Ǥ8o,"cbJ81 CJ3rAW?g;Ng3l^$R# * De!M&l>0'0h/8z4|Uҧʲ]ǧ>8$ "w666dJZLZw%2ti2}zbȫhV /YeC$ɤEgGoeZ7Iz|f.Y;C zBڸ7=鈲R`oܾˤ)rFF7k>#43q{wbIHzמj;]ރE1+*LH{+*fLS]R :zE9i$_Fk/X4ovk+,ni>a6nS{vpu#;,>E? `~ {Xh+RV;-uhhxG |UU3aWޚF XWK=oPKh7mvicons_small/36.pngUT  3GmكHUx*D]w<qG-d7{degBF̯},D8$glO||$jA LG[euHw  騫#r%zD([#n &Uh6*?:)| ĥ[iS?E4oӛn L IGa s't& &o۵r#G$GxG>㉺kIo(п8],^ʃ2ߴILpqmM$8H"H%lgWyCV|h^n(eV\1[91֎B"ݒ sЀqa|l2ǻU?c9hsf}]>Eؕ"Z1uv:@ dƦ>-*7]اflHd7`GV)gu;^cƜؖPOBK z(wPl{6MA*8uqxSg-  1V}}ѨԲZe1:\Q7~&m$(ūf][eH<uZ548.8ҷ5PXerra6=esi2Ԧ9/2ipMMN4>k*e;^*.'镥\3I5Pn$ܸ`ÚȲJpKϬY x&Y3&WXGOZnQ\EhJU%?/ p. 0%+Nn Cg6i &b%7 *Kw I{Q9FJ0bϔg}D::T˜. ~{76(hCGO| gqP.&; Bh#4m1O<K2tb8{/du,Iٓl0!=>Sxt>qD' _x}՚*||2o)ra[88UQNM{KLRp,z_p;ǎYzf*~"(7>gĕ*,z:y|8kO> 2jTNYz+ԐG_AwyIOhcN'PB7|95Gyy_N"k89I6ێqWZCJQs-zZă f Uz.G4Iw| e]z7N`{hF1e݀~sz*E^L."GCԵn\B)W4ٮCL)+h |҂_"nlng]:WgPnGCis$auR%/ͬ尲b4`!̴CaA4yF.?IJy\~bVeDW l̆^bbZK豙 O4 peBe*wZr %q%@6t*p2 ` F:$׬{U'ce>But%G}"Uy=y{ׇ JKk'Q= .R?C $?B؁$ct>S6~|~x'I7xofR5ͨ&:-T`Rb!'\Rv~Jyz(yNo`6CJ~ RԀ EVE9eir*[o=-^G:^`uٟ?b6V.NP&ΈiB:Y`*Fz$.z>RI@uG׽2B$AkU:F->|0Y#7'\kcD2f\ ,uUP暞yHa%ȕzh}%cG(oJ{~SWMߍ[Z"hhӨ̠k]oVtcFYy+OrB*Ҹ{ɓ߅mâDoC;#d&%6]k l6BRkM[yףC}rPSiGj;P\ijMz`We+ӊJ1p|R 8l˻˗Y_{soŚB%2zDE,:s?.S,- "| !',旣ޕ8}陵=:MȵS2WJD«ÖTv<䢌ޯcy ?bI  ;(( EUڢ*K)lﮁ^<ҜZ|bwI$aoGB츄N, ^;Js UWX6`èFnZ2 QSG<|1J); .mu@E'`ch ؁G^ݸ]8DiwوPL~}ߗ^O?GKiy6 )#%R%1` ÷"~8E[J;f` K!F>{B@GPJ!?PKh7Hp icons_small/37.pngUT  3GmكHUx*DMPSY_ -B$B)6HQ@E]BSdY * (vWXRK;BO;sޛwgޜߜsq֍j**or!~3%y̙9twqywUKmsT 6Z+# t(=Z~gymK̲6oq.KfRzϭ 5O'_(FځvnrD)՗޾Zw; 8e#joo~2b dTA"x@d]aؐ!LYu=Q76bXM ކخb٣ew@Oŧ&w zJ'O~{Y4=s^*헬~FoE.eqՐ-H}'ʿ²]ڲ,=kYTV￧U"{o}%<+Iw21LzaecuWX9u35p۵Fͬᑂ6i+h3qqqqT$Yo¤ZgD.H@X/vs& O 2a; fgc a@ؽwݟ%t0HM,3Pg=-KJWz_R(Exbd܀`!Ih#GήCY4`#M^c(;lc@qP,P҂XmeVUFj(( Jh@@ȺJJ*5@p+!R 00s@AA}nlDLLp;$BdB@2 U{E>}XUDn}rEH|BF57H#ڕQI>6ŗ)$뀧**E㣛H0lr_.Qjxj:߯Yk/mUβ;?ki-8G̝w"2{_1ԟ6ТOўxSs=6pI~q@Ƹ}XP x٠,ҽG۬ H'kQj˟P:)Fa۽OrP M}Ol[˟ׯ@?O%~<ڣ?6ǯ;uaM5S?KtwuJb k[e}7\z34l:s@Q]>^3q [[v^GZ.~Iؙ itnׅ ӊ1>IterxhE`)ʆ8M7ta-ο%'t/HtoW M䌾L;&F]߲W;޵{n7&0GZz]}"hXΨP !ɐ!5!b'ݝhr OBCCCи\F-&G.Q_м\8}F v"{9:^[F RTUȆd+wFQej~9P\] X=}^ma4HH1PBT(*LՉ-,PݳRq`F0TV)s[] s3#hJs_,DB܄@L}ȓ~ɛdqI1T\TmkSqF ϡ(Đ AErAH0B"UA !$h"Xm A}#SĴT`tu}S^P'+xSFPި^в8^u>_M{ N8|(JF`J> q3%3ț;c|Q}ul.gͿ\1!d< ?uFYD !p|͝d;pjx3Ya b"\WEY,>ϯG+`f)1j;)LzYL2 IaT"4F"~N\ƕ!!V@X>/ƼA"y8΃yTN5(B *eihۂb0LJ{K=5ܚ*r|3߯`9JEaSZ|\yexA:9,ib;1Fpϒ`GfQDD$MɊR2ᚫd,IM~tiX« ]nhc\NUƺtEq?ӆٙn,:W. 7Ķ4"+V2>g1`z@3ߨp7`3 S3Yqt(=C zf^Xgˇ$"ٱt;^~cO`Uw8AM &^͛10JX1,dԀoӻ^JiR>ݚk%P}v%tfEG}8 ʸ0jlDDnrȬ-E3p*um1 pYoMآs-{d!0 $|xe}[Z3/`C.h2ˡdS0XنД,l"i4X.>ٷ^? )]w9 y mΓ처JW:ko#9uWfU{I?!r(M_SϘF3/,-19+NS3Z& T> t1o 4Ӂ]/j#X.hsR45PH5v9=C3l5(:5̟fߖ4]trjfIܶ@êP:rQk AG~9F 'gv~Il1H Dҵw>Fwul\A^+ݽun[.+^lUu0naGgutT X484t@*JUUCT`"$V<`KY'F=Y{>Ṹ=X?GdH3hgc.k2;~Mм򘮉JWhQ`@V/EO"6E }= 46#.dtUT1Z%,fQ fҽ6 |~O'DE/\W|1VuK; ef% euuulz~'R\w~ ՆPKh7Hp icons_small/38.pngUT  3GmكHUx*DMPSY_ -B$B)6HQ@E]BSdY * (vWXRK;BO;sޛwgޜߜsq֍j**or!~3%y̙9twqywUKmsT 6Z+# t(=Z~gymK̲6oq.KfRzϭ 5O'_(FځvnrD)՗޾Zw; 8e#joo~2b dTA"x@d]aؐ!LYu=Q76bXM ކخb٣ew@Oŧ&w zJ'O~{Y4=s^*헬~FoE.eqՐ-H}'ʿ²]ڲ,=kYTV￧U"{o}%<+Iw21LzaecuWX9u35p۵Fͬᑂ6i+h3qqqqT$Yo¤ZgD.H@X/vs& O 2a; fgc a@ؽwݟ%t0HM,3Pg=-KJWz_R(Exbd܀`!Ih#GήCY4`#M^c(;lc@qP,P҂XmeVUFj(( Jh@@ȺJJ*5@p+!R 00s@AA}nlDLLp;$BdB@2 U{E>}XUDn}rEH|BF57H#ڕQI>6ŗ)$뀧**E㣛H0lr_.Qjxj:߯Yk/mUβ;?ki-8G̝w"2{_1ԟ6ТOўxSs=6pI~q@Ƹ}XP x٠,ҽG۬ H'kQj˟P:)Fa۽OrP M}Ol[˟ׯ@?O%~<ڣ?6ǯ;uaM5S?KtwuJb k[e}7\z34l:s@Q]>^3q [[v^GZ.~Iؙ itnׅ ӊ1>IterxhE`)ʆ8M7ta-ο%'t/HtoW M䌾L;&F]߲W;޵{n7&0GZz]}"hXΨP !ɐ!5!b'ݝhr OBCCCи\F-&G.Q_м\8}F v"{9:^[F RTUȆd+wFQej~9P\] X=}^ma4HH1PBT(*LՉ-,PݳRq`F0TV)s[] s3#hJs_,DB܄@L}ȓ~ɛdqI1T\TmkSqF ϡ(Đ AErAH0B"UA !$h"Xm A}#SĴT`tu}S^P'+xSFPި^в8^u>_M{ N8|(JF`J> q3%3ț;c|Q}ul.gͿ\1!d< ?uFYD !p|͝d;pjx3Ya b"\WEY,>ϯG+`f)1j;)LzYL2 IaT"4F"~N\ƕ!!V@X>/ƼA"y8΃yTN5(B *eihۂb0LJ{K=5ܚ*r|3߯`9JEaSZ|\yexA:9,ib;1Fpϒ`GfQDD$MɊR2ᚫd,IM~tiX« ]nhc\NUƺtEq?ӆٙn,:W. 7Ķ4"+V2>g1`z@3ߨp7`3 S3Yqt(=C zf^Xgˇ$"ٱt;^~cO`Uw8AM &^͛10JX1,dԀoӻ^JiR>ݚk%P}v%tfEG}8 ʸ0jlDDnrȬ-E3p*um1 pYoMآs-{d!0 $|xe}[Z3/`C.h2ˡdS0XنД,l"i4X.>ٷ^? )]w9 y mΓ처JW:ko#9uWfU{I?!r(M_SϘF3/,-19+NS3Z& T> t1o 4Ӂ]/j#X.hsR45PH5v9=C3l5(:5̟fߖ4]trjfIܶ@êP:rQk AG~9F 'gv~Il1H Dҵw>Fwul\A^+ݽun[.+^lUu0naGgutT X484t@*JUUCT`"$V<`KY'F=Y{>Ṹ=X?GdH3hgc.k2;~Mм򘮉JWhQ`@V/EO"6E }= 46#.dtUT1Z%,fQ fҽ6 |~O'DE/\W|1VuK; ef% euuulz~'R\w~ ՆPKh7O$"icons_small/39.pngUT  3GmكHUx*DUXlgawi.Ei"D$ xF$*HbA4A/Q>ҔH).Je!1ߋ|͝s;>]’XF~K]gI'_߯QdR )X꽧GA@ X{!P=;Zj\$zlE*B: cu6mT ڽkoxir,,L(fL:0:9" b&O k{%MMN^ZzGO4} yvnW|τ>@P0mGP#N.~No f#a@#zD(:>U;4$Z"Ҟ;.}͎Poػ_hfkSblsy>)sk8T8K; ̾ca:?u,XYLԅ.mHOǬsTIuj6ɣ"?]]bgH^RE_3Zռ'=9p-ud_و vyVS%1/=%;,.K>vIuMEb,xa'e-]Y%rq7 7-50j/n,佻"!h!7(.ȄARz4Y@(O;D b@+R4@h yWG=V@9A /\11ш/Pşyep7P)fo*CC)4RCVۂ(M`xx4 XȀB q1E;)* 2vրԔV\ dX&a˗q ֒ Og.qEDM:P7<7 R--'@&cf'K? Q BGt8L3Rm\L&3hoݼcnҨU'X dXLf QB[{{᫄-BcСI/ Bi. <"Ӝ P衚@3bOHIO0uZ#٧52$KSp7I#6>jS} liNc)7.?ܡe[kgX/m߫;nиL%罃?Vg͏$ޔ i !(J1'/:! p J1j-1jM(|.b2o#W 'p J:689-3 Qk)p68L8[#r~}ę{( 67LK\`X2yWE瘭&HEk%ʹS\.XA)Z(FLF bsU-A#uuHcC{MհkhςRSy^>K<`U+LJpR6YZ9sY h&S0* aq܌-D,`FmQl2 5F=XM3j*I˛U~@cZ3n0Q<\]Q j 6fn.`NC!y\.% MPafǃ.Hϐ)(E3RxN9~\:oQT:δ,YKc1i&0w-OK3 Z-&#н ˆ#qt> Fby:n.΀#B'\@$A/ @VVql~rt\7]e{wgg I11K|z×rbƔQOSgEZdD^n#&G#clRL%lDf1ܡ%GŚkև!ZEڸÝK G8y3 IgrV!ƭ\Ս;U@_!JL!$thk'&_&&ģ#U=h.[{;ak> BuV\eЈt44-}⪌R{S}|5^c$DXQmsH|yxٖZ.g-f(&*eƵL)_@󊷸ȟ|BQ3EE;̹nM2G{t1./]ϖ7𸥡u!O,__J&7*GoxT 0W'+ &el?W-cҎZOP\^#Ӓ?>L`dhx,h2=\8=XHbQx41JꞫwhu;IǪ:zsF9[gƬ6N^9U-SވUJbe(!1ݻYDA M1'uY$"M9R[yJd24T|LqkWojojWײCvH<~\y`}obx,~,0rX 3X&b3ͪY'H2Q0V42▧he>bbOoECC5Oc[Y%BEl?Qlux#osn+FuN̚G.j>//:y< ޸zETtSG(f57W9E]We+l-HY#:<}#orY Djz7TD d66S_{\U&O?O$*ږzʼnH' C#7*];u]gN 6n=.T76׉_ݾw'oWWF%qqtO{Jri$SO@+}CRqNF]v]z(lwXRY;?3uߜe}<*e\Z5=WEYErU*IűD>miգ#`9PK|[rO.E@?9ikeӋ+++CJ{7HHV*=UIBbGK7O9'S;@y9ZYf2hkQ?ٳY4J&b""ks ?W{NMtu{A^c}f`R!nbbW葌 '1 Yb PhGsvvqq]+Rm.#01L('fb. }|lwpf+B&;c@(@6V0+fa:Jxp[G`4;;0 xl-s@`T!X ѐ\@$͆"##ke2k%¸2QTj5z/`oJݾ[7j[*o_cuƧEInz_Ls<{':TxCt[ڑ;J9qC>Y|fL?׏NM!7sٖ GCS<_ 1laEwCwDܠ0phecqDPlojL~QSANg}X&rS38H )IYbd&gg''ĐHT@Aq~ 7MKuctFI@LY.׬W:}r!Q\Y;|+} x<^D%UqP(O-m* wtl5 a!4\׎\Շ{SM~ٻ21)+( hdkzTbK:xg AWV'^|=ZM E7IEkUlNuVٴξ>(a؋ѝ=Y>pWnn'mq("̋?Vkii<-x߾a S\Mii9@֗HDb~sMhx<hjtO?XD_ph?UhzꩴNoCo+3(ԝL%79Ց)N>~z1eӝ4Ւ:`L0_<*hىFc< y]WUpW܎k?^* [{jcb1=8^z#V]ZUcsww,%?vc˦~ى/3ދ\uMe kawm2]RPPهXͅtт{g?Y[hSvܾK /I~Ceڪm4C^z'"Bjzc.*c(rYq$ɪz!EjkYuC^ٶq:N}ia/AWP!v#x634C+Y܉oO [yiΧ7z]g-N3+5!2\Qڑ BMy{㦃:MD lލs*9cB JekVs]zm2&[{ktn֡0UR2\GVlBA3:k ˫;Y -#ߑkH*ʋ9!7>~ L~E\Q0˖i C, RAI 2c4 a>QaT` ú҅>Qz*}0aM=2?oT1^dF{ 8u m+Z-W VFkGx$ @Xhl0VQ La}]Mxph U ="85HbdAEYI:<ߪ[ )YfN}}NBi]?#_0H*^3'`sf܍qL-m+lB\VժueXi ݎ`^fWSO\/QRx^ߑWE˟M]oG{e!7\?fpH,*Lx0Mn^Cx8cQ)._) ire@Wi,S]=2@0oWP.|qYTW69enm:~ixAq Ab" O ,4M|r#6,P)E(4La D)*_EaK]vu2V՛ϒD:缗V22y [_0=RtlV5fNdd\*}(Lj"l}gIus АY ( 1|{_$9  xeC?zV/EB7&J,&S(l߼ISΝY1 7Ob(TxZgG,1W5ޜ_!ے.jnġzQB! +;GSk[ ws # GoX sU|Z"FFi$p}:9oF{1p_<x`oen/~7%kum rǷ/=>*Q1 RLC!q&?PTvRh{֩9[[Y(6=KJ}VMˢx!o"Ĉ%VHG񑵙| (G:vӭ {άI;? ¡WGUo` KvN, !4| i7Т̖E}z4Sl a1CUpW*IYf/__#:O rAKx-@t9օ}So^Ns>;m D2ExI0W. ~kwٜqN0W77.#N>8\;$xM:JrWĮZO۰ۧۯvm)T7W7sR/_ֹX=%04gn] ՝򨿂݊(٦]QM ]z 2vi+^>l6=0a|0 –01ymsXneqMZdp8dѳ<*~ɺkߏmh]PKh7l@ $icons_small/41.pngUT  3GmكHUx*DUWXS?77; ! *ȐVb*ZJ[g?-X jZ7(*bTTF@F$={>{Mnr9mȈY oǏB%;RRE [;oP> |LaWv3kM5|z׶=F1x=y>XQpnn}St]Tj^*&F>c SKɬ6lM?|bh\eCKmxAug3çrqR\IINfΑC+ՇmJ*=RFґn8j?^-\wO}sx̤tkuo<=Ei~lUeXYLYGyeQpWi526VJJZ>l `ޚ+WϻI$!M" :Uy8}n]~Z\OWb!L}:`Xrr\z,zaz,^ -Gmm-ӓqU>З{T+D)ݓa0}FQqo6?}Rixyy1̌Iۂ*Ӡ^"1q]8U?;:D~>P:qtMm fZ?95_b<.m~Y0- Yg^o+b6(,[.w^cN;CaqK:̹rS,~6K~9B:#[蛹;YHi T`P=(fT0p}%T0 bdH(FD;vm2&'FJd_LPUJ!3Bݽs0,HCApwgk6S=y{08^v(@Z S?R0n!5_!]-oL]ȴ_Est1HRDRC*6oۿ0$^#硜47Way9m`;YNZg=75Jm`g WѷӍHdb0@`; "BL d:›pb@=:#DQB&Ng*`GtwG:jr,5w1z肽T:\i~LHHHNH(w(UGIkM%9P|aiVtz!S|P  ϯP.X[ ޾=%HI&6U~{۩!}5|^WW6!H: NIMPՄ/ϟU%cA4!oϦV V J'yg5 blo@cE zF-^UjP:M[DwuZ hnjCg8_A Jpp8l* $RӐBEh8"bZ6K:>0O:KrmX{{+xXTT$H$ e5%N& s~Stt4yxP܈;xQ }ZSsfΜb4UUU;wg/19'-:,LjCjLarAng'bSs3Wc~zwqq-8I;̘[7kжvgF.?a<;WP\\\Q.\ 2xOSQxQ#rQ(K/v-Nllzy{M6ܾݻxqG|ʊ bll, |}}Ddxx!p06xB|(w(,~$L&CX Ux`RHdboߚqGp:mpp0moZM [rhii闆19Np&,o@(ۉ܁W]^8-ܥp^}`tǦ'n?>(py yPx̰֚ yY`soO,hcްdטKQ_VW+_BOn7pqU?kLn8Ke|'"2Rhԫsp[ƅ͘k~z_NfJݷ4']ݭd^Ͱa;dwݝp't4Q/D|6Q`#qsX^nu6RtbR'L㖴$e1aB]ǞȒ9QzBj֥x ,]oyi·%9K7 ϛ٩Y‡waNC_5g{n/ݪ%pgC"!"7kRx 1Ns_8)Cc´Q>vǼK=6'd{?Ie9yw "&[Z4k"S%0^eUJQĤKzk-o>aU쬱rظer0iiiG︀S'OGvΊ&m {|fSLM0 =0->)N~;?~1I=|$3 < B0;4{FP*9/KW9͵Q[[J| 3\`={[_𱀀fO_PKh7P&wRicons_small/42.pngUT  3GmكHUx*DMW 8T?g62k5)KupO%2!!J* uCE٧;Yʚc 3>jp#>`Z-d&ax"7m8%UIR8$( w K':+|<0eSp'bن4eRឝ{ȗt41vޮrT`յ[rmB8'% i+8kDm;O9辠g~pVF]#$M~(4ox-T?{|xb6ry;!ёjy]}b!-8zv𚯯qqeM =]],u}hnaWfLRK,EF=f"Eܩ'O;r~OĢuh4[oaaQf(Y(8@'HP@2w$400()4,b@JJ 6 xa&@0I:́L&Νmm/ndfk BLqVG"+2ys-?5Z!S[UO *L橔t v:5ׄ外'bĴH1iXβ};O,Ȟ3x)? EGJ00(qӳ8fz8UTV9GV c0a¥d d .#XFV׫ /~d^"G\YYY~trmHM|o&s{ѿ?wS9_S#s1qd:+^k*6_tfc(؄${9T&?+W.ط82[vM Ѐ쯖CqZfZP.U{8Ej,Y|8qNX>^?vr,޴c ?HG]BNɓ-w0a4/EryZ= qĨێyF@Aǵ#Gd̉^-5_<rƧ+RF.)$!‚jb7?>z?\ 9w/TȘ.e$$D f+]Qt΋>e~_PSJjbO`S!Q|ߴtxO4U-i1o= &B ӣQWO႟>}2Oz1^v-H@rÂWvyy-2GJ|<  {@=3W}+ׯ ւ A%Q8qbl/,qce{L܉umH . 9QqP/І_@k%M[$(dk9yh`615@4 SD-#e8n aLˢ%Bfu]]hGW!_ì[cbb + ԲGFFn>}ÿs~Z_d yt:&]X*rjg/ZYYᜒ@Hw}'2Dp@0D+Li'Irҧj,3HĄq$*~̏SN=(":=?n3er&&oI_ԄzV!޽}ۤ8l~}vɏ!5Q% jhi<8zPiiijMxjȶMW+g%$ KjJ-^q۵-m-b _o^%q`O{q|rZǦ"\ |v !a΋*6?PͯO=7E2p86UF]AS앱SWO),+|}s$jCEI+ a=3oB8'N[|laդ'Q% 5씂:3v\3ᵛ;Q65}8ٱ"Qk/{`!̀rsa"+G VQVEFZ)U|Ywh\ ~/63ۇ> W=b`XǙlU СƝcy >{k/: @`pppu+~Y!jAli xi.:551<#][Qŋ5w5oHpF -W iwmĭJKuvv/]cM1 Jf1=`" :-B0hZZnB<|p]28pz`J"Ih3rqÓT_[ѣ`w1iaUǏ>qv)}0-97%\AQ_I?J#_Zn:~2p]i4m5nwp8(An̘F%]FWO"(*a_Tqs0fBT&}=P&x\)* ?xyyVhllhNn8+nmEEe 31fAQ )$Rݒ%?eXcʛR8@"< !H vE l,2ƅ3"1`Ӂ`zA-cTӈXmm9_>ъ-,SKc.%1s8?yronPy :da==o;z J]y)sʒu1PL.Y~FQSٳ9#QQQի$ :X3+33_ Y,:%B(s؞9SPTT/[bemPUq,b\5*4d#JJ'ypzFBwP0p /5455CB~ݿzTT(#(+2Re쾸e L& {ի}sbH"R_ 悧)#(*By-4 ,J8Hh\S?A'F9 @VQ]klԍF1LF3_u_%(5Q2/!oaޜ26Yf}C{ɕo$W;xB^B@*l8sh%IQ›UC v 󎱎-u<[eZe. L₽G89ZcqO",^ H <kBhw$Љ82ՁAq(^AAwk`WW?VCp|hiCPa< ?uI1 Z[.ml L ]XXwPal,X*Y:BL :Y d ^d+.$,y^;YQQ1ݫ9=-#[IDXQe6E/p/ T(#6vV&mhC\ܦՋ{i~!ѩHwh2P23 ƺWXDܾ9;V܉Wrr3YLȌX(f&Ȭp֕!!$%z"˼WA]*\ ܐ7AE%@y= t c0`[ͯ_9`!o"7|c(/ ]%狕WyQq" Q ;!| w1qJ=07F8.ZjSE"7e7#yymW#[;TJ}}cF"WE=2Oْ}2`d"%%qěP|uKE:ϭXt>66vUk/CDoe!5* qCwUN'^^^`jj C"#T]*עX ߲y<-m]b_7JW@/& MXv&F,,4T4:ٰ DR]LN6z^e-:B AGꦧz_»?OL"Έx0wGg9BeueMM[ׯ\Tz+l"V(+>_?O?I+-'O,Bebi|l#J1'i7oꚛf:Dajtdݕ],--MelLi?_^d csٳg؀TXm\[S[7<6D:6ong F[8wJ(.{ݢKSBICM'K) B3Q"ZE|>/ 2Pᙱ He0cMys )nl>RFd^gV o]c<矟O=Se*3~f{8量|#ӟEr ìX`z&>TXczZL,xm۶kR!wPS]=-EdžF^JP\fgyZ0}kn(,tޮd6AP=-zvKg/MJJ2+1W q3TۉG:ZvLuo^R Le---E??vy~׉ʸs5aZڹv6,s27'ӱ_MJj\)؏Kpü"7>*8;lp/9=T{Cc;tRxp\s۪9x>XPKh7;kټ4 icons_small/44.pngUT  3GmكHUx*D-V H,O=EWDOφ-{-7 M*0#MپA OKU/$JN,b{d۽& Ḉq=F+5hhferF[ s2&th7櫸_9:G#/70Ӫug1$擕gGWWhgղ0,DF0Id P\4Bh>nG[4  ̈醋x[Wf*qaF*(͋`6^GR= kׯw&Wlbͭ)ΔjRUaO?v q*`/|7laQU_VZې&MTbB&Y"lkiiI[W~{ 7qOGozVꢮ3 p<(TN\᜵RьF+Ȉ=$¢-,|G̊+Y:,(@MIs)Q.ąvt?;GA`%-0"ߵV*R@*'b.$V&,4"VO(sn_[Ƌ'NS\9^"_' u4w>#f7><%ʣ12J蟞n à#.Z$Ei'H' '^HP0mņYв+bFb0Q{>GB}>_yX{?/5^k%K ~|l4?a5YBT<160/w;Ɍ̴)<|zCTKhUϻx]/DW5bte.R~bffίko/ڒ 30pTuح6]%*072DZv0?W2Ub}ֻʚ )>Qu[U@^-,ԇ A&bb}9#־CAGh]S;!0iwe񰢤`ZQ.ڹkns]5rg";8ukOPMb7[v~穌D!FE D kMzB -.?n&nZOy?Ɗ[I%9j"P/٣ v' > Y!6iInöSmU/ o;\Lk:-k\"GX5妚:JQӷDP˺oIn.H{| 1@>ڇ'$77e˶T 6%; JW*,FfgW+g{Rd)ˀ\g͍dA!+#yy9hiS NUd`9f\$HV((Ⱦh.J_@t,J+aPXM"$W2H@ )[,2%eCN$35"̍T1m7In"$'O+c#L"C80`Bm[ rqtp?kyHY"`Q8#&O49G_ȤAGB*M`gr '1fiY\u9Qɤp9{RB %7_]эsa\ϭM|O7}LNuT#<{ƺs1GD8QͶ)2QJ\eW..=ZUh9H J+" Uzj훠?sv$}oSfRP~y\\0o:Ϗi2Kij d njޒxt%[W6q<2$7#_{ 'l?hbLj M Ɯ(UZPkkxO;HWT.]gw@"@С[)YYY`HC=J,ojQC{/H&C OBtT9Xq7b/Y"_ Mu iooY`8 ӗ@UMyP ^U%; I _(:GlpVp8з\*hURm3`gmw'F]pvMdZ]o=޽2ϩy?aiCs.<'-߮_"s&4*t:XŒ@Gu EDs%[>hhL]WƜ;@ݱSPϫ,+԰R+muc$/۴7PKh70_Nicons_small/45.pngUT  3GmكHUx*DUWXY׾BBfhꂸ`Y bYW]E_׶EA, J)ҥ@zd7>wd3ܜ[ :՜ SB!CǏK` p,uBb{xM UKR@ &Wqj,qUpC4V}ό'?[Qslwr̓< IyBDYĶ/6\RO S4 ݑ' ||Ä,%Xl A M#111𹻧'tr1Z3guy!0G'9;m CCCi>SKK-uK8)Կoղ%$ҴꏐVr$u) B|)D@ (..%J3oG,XJjh0>2ZۀX, \4{ѩnOs Ovx>i1= •flmmt)Vi~c]YdbnnRɜmE_X}tuc:)@uKV5ȭ64eq)0ԲM<[9>1xsoC?h4g36[HήQ`_N ې '2.\mLй81OwwC1dOq{Iumӳ;#vU}P&&?M{b'.y'VRwF_#ttt.'SG@ Z1N G]ih~?͟ 29Q!\kLj5F0Fadt#!.;B V,شk7Pt:4551cpll0 4b`7Xp8 L '@[S3B$р%)lR@Q%B'AL" i -R-Qόoo{M\1{ž&= ʨٶc6ŦJ+zzy=sb53(`}=YQư6$}lE`ªҧqe詁̹g8Z~c>KPpd^ <<̎ +{+'Vd¶Uf_ i' dPD k-Quuuk5 \թtA;YVVVx1LBRA.ZÀY4b2INMǀq?sh_Bc,,٘G1wխyG=)u`A5Vt\|oɈ'*;\nln=NUW' CuSWD/|ord]}Gn)/wS#SJ/L. y-4bL75͛<ڨ&&7ֽou qIp0F#>Sbdiر)Z"Nb6)fZSaC v~T&'/re13\glk=]="Q%K[@t5ӎyMlSSGQWWש)ij;EY3@dÔJ-46d!tGD$L2C]DY%G-^jeF1nK cÂζ.!`6ۗ-\3f (L5jT)\+HV4hoj7 id_\8 `wp ĠFk/2@&tKۚn<<b,ϚGQ19 B*T[SӁ!ǚp q INȥ~t ݡV9tFP^}{EDV8P㖡ճJkzbUe5nHM'$o$׿9cZgYÛ7wVcwgt ¸zڮ]ʊbW1NZAi=k{|\.ܩD b9Mii>NNĠo淹xǒ]M˪݆*'_E -hf?U82=Oo\NU**J|)} #ukB0 _6m r^S*@T&'Al/ZU4CumU9Őll1LzzE?l5p\*墑wl2GXPz |9 UsRbYaشEI3kָ&Gr5R|ZZPD/Xx]XE7Ů%0ʫ o7o+_uid+ߺxzi1qapeݽz+C8i-v[[[oלS 98L)\ w]w-: r _p]XQ`,mu\eZ.Ù,VQUםoh,+]998&|BUV*)}3l0ƟvTVr]ƾHܝ'~ǡԍ9<\>xt\hgVׂ8_|ڠw֠$h3݉-HV8%0*|dN}"6ez:%`="¤~^PKh7d' micons_small/46.pngUT  3GmكHUx*DUW X>g@a MdQâ( ZDRqC HuE*mjA*Bk.X֊ Ud%lIHb6"$d=QyL&wyo%NeK#V㳛i1E,tQp |Ȩ}n B+N[R'.5r߭tshIMnʠ=3E;4q7DOOƚ_ҽ=(,xfWz}GOW[t좇M Gx:}Q5PoE5k1WyƵb6nlTI_ޡ'"!mnh>z.ϫ(z\]^ժFdêCnqw LHRa0媏oE!9Wbō|Ѧ%aIIaFL Cڮo9Z{Ͻ.Af[x o I[쭷%iB%|Â[%:]={֑1g'$%%W)CSo *<0%gIM^ciT1Fa6T&u}u#USg6Gv%} 9)e۲l^s]),,Ʉ4@7כпf\gH\m`^>zNw@#JJAr~,/OʼW!o3m((/mƽ2 {< ʮ/d<⭲nQj ׂ=~-**76_[T;Usۯqdwû1un$v5ߎ[iPqZw|X'_+!V'pq!2Mw5 VaV]QP陡{+_({"JNwS)B߱G2zu@3k,u9koȭ"#9je{jG`^+ g[{y)x; ݈:ھBd=}ʞŋw]; ;>!!A[Qm>$ӈ+z&is&7\TTTF=?ptiLzhk׮ \^m۶ꫪޡj ]Kžjabn^^^vf$BGKtR-kƓ/dFy 2*zYdtG PKh7H icons_small/47.pngUT  3GmكHUx*DU XSW˾H"0ZPVkQ[ej+uP2(Rn.V  jXEH’;8^^/s;ɚl _Ni3)%EUx_U++N%VR_Nw|=<ƭeB"IorZ6tdɛʎt/ᥴM_Gxev@V0 a *s[[ٳ|ȋW> LxnےxOd)S^utsss1FE:oc X{ r˃6A%XB֭[c#_ mS Ig}moK2}3+qgW:FI( -xTٕSoHOŠK>Ŝ }I'VغdkcFij͓#vPU(fmxt:o RW*UQ| ?o֯^u+mًǕb qlqUIM>3ѬBKCQM{oaAXF E,AHڸvTߑ-ķKX//?=&&f_uE=a==ΡaaA6]*bG`2+5ّBt3PAR|Ӟk2eIظqhO,4{zVU44ԏ+%50$ʳˍ)۫uΖ4)on_Ӽ8{={d!P[[JJJ]0pTO7CҀv#*as  +nn^? ^Euz5J!JGyl2!DVSB^6*ŋ@+<{RWWxJ;@WArISp0pvsVDD#\7ZʁֵZ͈hfWHr`0LFWRK~~R"ԋG&m[st-IӺԅS "GĭW=9waN\}@bGtsB6wҥ֒zVjۏ0̚5 uJbfq1/b{g*B9kTJ!D~}H0HO/ÎN95pA4+I[I4˒@\qQ_Nv˚ (lXR-%vpl<\MՖYv[:mEqRor>>q h4Zws>OTV,(}l6$)`dhҘLьArlA ?ߑa(r9@"Akka@l8\0:V]_p Z}m,Y̘1bCJ/*u?T:D\sC"d h$H__7@*GG:455 Q@3:&J3`skH،Dy ÎPn||a8~\$n \@P +Bc10F-Nr z&UUO" F3vf @-[-D 2S[[(˻'ԷnipՆx0t 4#d OĻ \ttpaXQQ ^]ovLC* z ZZ%͛63ÏnO0 |Px̙30ʹ$0Il zyE (2pASSX\z{{[6)0'`P(zLfH$`4\zeޱć~*6e=\‹ʤr3̄A\~dH j4#H`xxN`iLd2sZ5fL'H"OXlKaҷ񠓓 tvv&<~_(OmNY`v͗Sn-nZwBs"fը͞{,*jGop߶uYu'6l'13J'|w8¥t.5cM[jYnT4`ݜ_Fym>NQVE%liQXQd)=X%śoxgu|Ҏ-|mX #/kGSjZ; ~|GQ+EGS^7-e<~P f'ONϼs[2ATo(ӸEIH wtF&8\\#7844e2PW<~5jV}xp9YsAO{w#PV" 3}ނ[x Bcz*"N;W{ !]͈?[V3 -f n|6 6`χ&*i? Ǩ1TLTѬJe#&i``hC$[l[BKg?ǟJzN!+ԘapXO"L-y ̀ ݽJȵyq@F&@q Ȣ[k*ko;,ӇgN kTbHkz݊2>MsMfCm$`\@%@ʇ+ Lwg@y?dhwGH > 1]-:ijU*bԙ IC w +0)@v¢inR8 %P«Rտ($2 hT( =zJln0 !uvV7MPT`@s(粐bpD=L~eHtӄZxF;HiyUk (5y?O7&C gټi}mu+!:!FgxXO4fQ>9yK94Iʗ+BBLJ*IPcaK¢!E"J3%mQ,H֕hdΤάIYFrEpة^xz>f5K6!}<+RVd4fσZbff:S޹}jѢh}] f)G0gTy<Ņu/t>I{ñO/5FvwF'PP 1F= ^^˼)GCw'3r#սpx5YW-c evc3J!Cvb[Q#jw4 M?,㹧>|N*YKJ+ %%*jU 1HK0k `2Nz2o7 3hMu5;;Z.]&lҾQآo-n*={us (Isa05IФ0o;?Rx剴hh`͖M_nR\R^V:'y{߱X{d$f93̛b;B#;`nMStJ\ ʽp/։WRS>\Y]k[*aɓ^,DG2 %oGo M;"m&?8Axؚ;KcPKh70juicons_small/blank.pngUT  3GmكHUx*D sb``p  $000x8TIKJHJJ10hY ʖaJX3CqcM|<eSBPKh7:?icons_small/thermometer.pngUT  3GmكHUx*D5UiXY DD 8QP "6(Ȯ"I  A[$*:&0l.@;#CmE YMAU޽λ tV nGWcEѩ@cȮZAC_,:WޡzgD}e邙 B<ӦybWsK'@&QH{yELޫU+\M!i;xJ18y !o<663[ @OL:s5)~glGˠ ;E34S\wl2R𹣦ba“iiu矡\նB"y=8Fh~z7.R <$‘ZrtǢ?61F'!eՇ@-[ZO/^_IV&#XХ2[{Cؼ/O iw.m ܖ{keCcAѷ?6~!myS8ò n! {,KKKh%a&^\Ж8ej83;w{+i긤dCͅ_ mLtA$Yv'dRS (0<{K.u#2ܐm"T;XZuV:OIT9y&|1g0y2žPoT]UP脡*ev~GZoB3tYJKnOciP..- ~\3r_% sʼnc-D_ۃj/! ݶ?4<%&¶-?<>axJJpm5Tn`+Ow 3E|qhLͻN0B$'G"C+IA\226f;,kS7V||rbbfdPNIMeWܪn9} BASrYQJ/۪4,BIZI;h4 kO^=81:p;PK 58 Aicons_small/UTeكHUxPK58jm ?icons_small/.DS_StoreUTeكHUxPKh7>n 9icons_small/00.pngUT 3GUxPKh7>n icons_small/01.pngUT 3GUxPKh7>n icons_small/02.pngUT 3GUxPKh7>n -icons_small/03.pngUT 3GUxPKh7>n <icons_small/04.pngUT 3GUxPKh7Mc Kicons_small/05.pngUT 3GUxPKh7FQ -[icons_small/06.pngUT 3GUxPKh7_M' Ejicons_small/07.pngUT 3GUxPKh7S<2m yicons_small/08.pngUT 3GUxPKh7_G Љicons_small/09.pngUT 3GUxPKh7X \icons_small/10.pngUT 3GUxPKh7 | licons_small/11.pngUT 3GUxPKh7P:ID |icons_small/12.pngUT 3GUxPKh7b f  micons_small/13.pngUT 3GUxPKh7uM? icons_small/14.pngUT 3GUxPKh7 icons_small/15.pngUT 3GUxPKh7P'sI icons_small/16.pngUT 3GUxPKh7>n icons_small/17.pngUT 3GUxPKh7 6 icons_small/18.pngUT 3GUxPKh7cyi 6#icons_small/19.pngUT 3GUxPKh744 Q  1icons_small/20.pngUT 3GUxPKh7փ1 >icons_small/21.pngUT 3GUxPKh7cyi Licons_small/22.pngUT 3GUxPKh7|wH :[icons_small/23.pngUT 3GUxPKh7|wH ,aicons_small/24.pngUT 3GUxPKh7;kټ4  gicons_small/25.pngUT 3GUxPKh7'[  |  ricons_small/26.pngUT 3GUxPKh7L`6  }icons_small/27.pngUT 3GUxPKh7I|~4  Xicons_small/28.pngUT 3GUxPKh7UD  ђicons_small/29.pngUT 3GUxPKh7٥5  ֜icons_small/30.pngUT 3GUxPKh7j2  Picons_small/31.pngUT 3GUxPKh7mv icons_small/32.pngUT 3GUxPKh7V8   icons_small/33.pngUT 3GUxPKh7  icons_small/34.pngUT 3GUxPKh7>n icons_small/35.pngUT 3GUxPKh7mv icons_small/36.pngUT 3GUxPKh7Hp  picons_small/37.pngUT 3GUxPKh7Hp  icons_small/38.pngUT 3GUxPKh7O$" icons_small/39.pngUT 3GUxPKh7_9 'icons_small/40.pngUT 3GUxPKh7l@ $ 6icons_small/41.pngUT 3GUxPKh7P&wR Eicons_small/42.pngUT 3GUxPKh7sdؿy Ticons_small/43.pngUT 3GUxPKh7;kټ4  sdicons_small/44.pngUT 3GUxPKh70_N oicons_small/45.pngUT 3GUxPKh7d' m ~icons_small/46.pngUT 3GUxPKh7H  icons_small/47.pngUT 3GUxPKh70ju icons_small/blank.pngUT 3GUxPKh7:? icons_small/thermometer.pngUT 3GUxPK44 libkml-1.3.0/testdata/update/000077500000000000000000000000001263603257100160655ustar00rootroot00000000000000libkml-1.3.0/testdata/update/california-change-linestring-check.kml000066400000000000000000000027651263603257100253650ustar00rootroot00000000000000 corners A -124.351985,42.026641,0 B -117.170966,32.493215,0 C -114.686335,32.749747,0 D -120.049643,42.002328,0 NEW A-B 1 -124,42,0 -117,32,0 libkml-1.3.0/testdata/update/california-change-linestring.kml000066400000000000000000000004531263603257100243020ustar00rootroot00000000000000 NEW A-B true -124,42 -117,32 libkml-1.3.0/testdata/update/california-delete-ad-check.kml000066400000000000000000000022071263603257100235770ustar00rootroot00000000000000 corners B -117.170966,32.493215,0 C -114.686335,32.749747,0 A-B 1 -124.351985,42.026641,0 -117.170966,32.493215,0 libkml-1.3.0/testdata/update/california-delete-ad.kml000066400000000000000000000002121263603257100225160ustar00rootroot00000000000000 libkml-1.3.0/testdata/update/california.kml000066400000000000000000000026441263603257100207070ustar00rootroot00000000000000 corners A -124.351985,42.026641 B -117.170966,32.493215 C -114.686335,32.749747 D -120.049643,42.002328 A-B true -124.351985,42.026641 -117.170966,32.493215 libkml-1.3.0/testdata/update/change-california-a-check.kml000066400000000000000000000031361263603257100234200ustar00rootroot00000000000000 corners A #red-icon -124.351985,42.026641,0 B -117.170966,32.493215,0 C -114.686335,32.749747,0 D -120.049643,42.002328,0 A-B #yellow-line 1 -124.351985,42.026641,0 -117.170966,32.493215,0 libkml-1.3.0/testdata/update/change-california-a.kml000066400000000000000000000003671263603257100223500ustar00rootroot00000000000000 #red-icon #yellow-line libkml-1.3.0/testdata/update/change-placemark-geometry-check.kml000066400000000000000000000004521263603257100246610ustar00rootroot00000000000000 This is a Point I have no Point 1,2,3 libkml-1.3.0/testdata/update/change-placemark-geometry.kml000066400000000000000000000003341263603257100236050ustar00rootroot00000000000000 This is a Point 1,2,3 libkml-1.3.0/testdata/update/change-placemark-geometry2x-check.kml000066400000000000000000000006301263603257100251310ustar00rootroot00000000000000 This is name of the Point This is the description of the Point 1 relativeToGround 1,2,3 libkml-1.3.0/testdata/update/change-placemark-geometry2x.kml000066400000000000000000000006701263603257100240620ustar00rootroot00000000000000 This is name of the Point This is the description of the Point 1 relativeToGround 1,2,3 libkml-1.3.0/testdata/update/change-placemark-styleurl-check.kml000066400000000000000000000004371263603257100247140ustar00rootroot00000000000000 My name is placemark123 I have no Point http://example.com/style.kml#pretty libkml-1.3.0/testdata/update/change-placemark-styleurl.kml000066400000000000000000000002621263603257100236350ustar00rootroot00000000000000 http://example.com/style.kml#pretty libkml-1.3.0/testdata/update/kmlsamples-change-many-check.kml000066400000000000000000001102211263603257100241770ustar00rootroot00000000000000 KML Samples 1 Unleash your creativity with the help of these examples! The Placemarks Folder These are just some of the different kinds of placemarks with which you can mark your favorite places -122.083959714577 37.4222290452523 0 -148.412292262804 40.5575073395506 500.656664107225 Simple placemark Attached to the ground. Intelligently places itself at the height of the underlying terrain. -122.082203542568,37.4222899014025,0 Floating placemark 1 Floats a defined distance above the ground. -122.083959714577 37.4222290452523 30 -148.412292262804 40.5575073395506 500.656664107225 #downArrowIcon relativeToGround -122.084075,37.4220033612141,50 Extruded placemark 0 -122.084578742153 37.4221507873776 0 -148.412668494623 40.5575073391805 365.264660698032 #globeIcon 1 relativeToGround -122.085766700618,37.4215692786755,50 Styles and Markup 0 With KML it is easy to create rich, descriptive markup to annotate and enrich your placemarks -122.084578742237 37.4221507872684 0 -148.412677748817 40.5575073393087 365.264682629292 #noDrivingDirections Highlighted Icon 0 Place your mouse over the icon to see it display the new icon -122.085655212402 37.4224281311035 0 0 0 265.852042425002 normal #normalPlacemark highlight #highlightPlacemark Roll over this icon 0 #exampleStyleMap -122.085654575525,37.4224307740546,0 Descriptive HTML 0
Placemark descriptions can be enriched by using many standard HTML tags.
For example:
Styles:
Italics, Bold, Underlined, Strike Out, subscriptsubscript, superscriptsuperscript, Big, Small, Typewriter, Emphasized, Strong, Code
Fonts:
red by name, leaf green by hexadecimal RGB
size 1, size 2, size 3, size 4, size 5, size 6, size 7
Times, Verdana, Arial

Links:
Google Earth!
or: Check out our website at www.google.com
Alignment:

left

center

right


Ordered Lists:
  1. First
  2. Second
  3. Third
  1. First
  2. Second
  3. Third
  1. First
  2. Second
  3. Third

Unordered Lists:
  • A
  • B
  • C
  • A
  • B
  • C
  • A
  • B
  • C

Definitions:
Google:
The best thing since sliced bread

Centered:
Time present and time past
Are both perhaps present in time future,
And time future contained in time past.
If all time is eternally present
All time is unredeemable.

Block Quote:
We shall not cease from exploration
And the end of all our exploring
Will be to arrive where we started
And know the place for the first time.
-- T.S. Eliot


Headings:

Header 1

Header 2

Header 3

Header 4

Header 5


Images:
Remote image

Scaled image


Simple Tables:
12345
abcde

[Did you notice that double-clicking on the placemark doesn't cause the viewer to take you anywhere? This is because it is possible to directly author a "placeless placemark". If you look at the code for this example, you will see that it has neither a point coordinate nor a LookAt element.]]]> Ground Overlays 0 Examples of ground overlays Large-scale overlay on terrain 0 Overlay shows Mount Etna erupting on July 13th, 2001. 15.0246893755712 37.6739516794167 0 -16.5581842842829 58.3122865289071 30350.3683843891 http://code.google.com/apis/kml/documentation/etna.jpg 37.9190419268166 37.4654338859814 15.3583265374221 14.601283697467 -0.155664079949624 Screen Overlays 0 Screen overlays have to be authored directly in KML. These examples illustrate absolute and dynamic positioning in screen space. Simple crosshairs 0 This screen overlay uses fractional positioning to put the image in the exact center of the screen http://code.google.com/apis/kml/documentation/crosshairs.png Absolute Positioning: Top left 0 http://code.google.com/apis/kml/documentation/top_left.jpg Absolute Positioning: Top right 0 http://code.google.com/apis/kml/documentation/top_right.jpg Absolute Positioning: Bottom left 0 http://code.google.com/apis/kml/documentation/bottom_left.jpg Absolute Positioning: Bottom right 0 http://code.google.com/apis/kml/documentation/bottom_right.jpg Dynamic Positioning: Top of screen 0 http://code.google.com/apis/kml/documentation/dynamic_screenoverlay.jpg Dynamic Positioning: Right of screen 0 http://code.google.com/apis/kml/documentation/dynamic_right.jpg Paths 0 Examples of paths. Note that the tessellate tag is by default set to 0. If you want to create tessellated lines, they must be authored (or edited) directly in KML. Tessellated 0 tag has a value of 1, the line will contour to the underlying terrain]]> -112.082268001314 36.0982558933356 0 103.812043204497 62.0485579627633 2889.14500769047 1 -112.081423783034,36.1067787047714,0 -112.087026775269,36.0905099328766,0 Untessellated 0 tag has a value of 0, the line follow a simple straight-line path from point to point]]> -112.082268001314 36.0982558933356 0 103.812043204497 62.0485579627633 2889.14500769047 0 -112.080622229595,36.10673460008,0 -112.085242575315,36.0904959861242,0 Absolute 0 Transparent purple line -112.271932904318 36.0889063345089 0 -106.81615459986 44.6076371406326 2569.38674439834 #transPurpleLineGreenPoly 1 relativeToGround -112.265654928602,36.0944767260255,2357 -112.266038452824,36.0934260883867,2357 -112.266813901345,36.0925105877688,2357 -112.267782683444,36.09189827358,2357 -112.268855751095,36.0913137941187,2357 -112.269481071722,36.0903677207521,2357 -112.269526855561,36.0893217148729,2357 -112.269014456728,36.0885091606047,2357 -112.268152881534,36.0875381359796,2357 -112.267058817603,36.0868268526257,2357 -112.265737458732,36.086463123013,2357 Absolute Extruded 0 Transparent green wall with yellow outlines -112.264333474253 36.0856315474242 0 -125.751869866882 44.6103866581258 4451.8422040681 #yellowLineGreenPoly 1 1 absolute -112.255078533779,36.0795495214565,2357 -112.254927703974,36.0811708349212,2357 -112.255250506906,36.0826076130728,2357 -112.256454015838,36.0839566058851,2357 -112.258023897645,36.0851140104481,2357 -112.259521848902,36.0858435523939,2357 -112.260821634755,36.0861263454859,2357 -112.262073428656,36.0862601908515,2357 -112.26332049285,36.0862151986009,2357 -112.264496384644,36.0862789794527,2357 -112.265696955459,36.0864959909064,2357 Relative 0 Black line (10 pixels wide), height tracks terrain -112.258043855138 36.1072674824385 0 4.94742124955372 44.6132488204334 2927.61105910266 #thickBlackLine 1 relativeToGround -112.253284515335,36.0988694372912,645 -112.254046612114,36.0991957046526,645 -112.254734666947,36.0998499836618,645 -112.255493345654,36.1005131062175,645 -112.256315709847,36.1010844194342,645 -112.256803307644,36.1015972208809,645 -112.257494011321,36.1020432354287,645 -112.258410607231,36.1022913199565,645 -112.259658898797,36.1024000128636,645 -112.261058119949,36.1021317687341,645 -112.262628526279,36.1015701143722,645 Relative Extruded 0 Opaque blue walls with red outline, height tracks terrain -112.268359433343 36.0988436214491 0 -72.242715517684 44.6085544513956 2184.19352257147 #redLineBluePoly 1 1 relativeToGround -112.265663418136,36.094452147227,630 -112.26522389411,36.0952091612206,630 -112.26450799864,36.0958076386491,630 -112.263882742882,36.0962857228406,630 -112.263574683541,36.0967927595124,630 -112.263571182241,36.097400388719,630 -112.264029653183,36.0980491343554,630 -112.264327720538,36.098803374003,630 -112.264243656227,36.0996364479029,630 -112.263914868704,36.1005538111725,630 -112.262689497347,36.1014906282337,630 Polygons 0 Examples of polygon shapes Google Campus 0 A collection showing how easy it is to create 3-dimensional buildings -122.084120030116 37.4217401192548 0 -34.8246974008128 53.454348562403 276.787005376405 Building 40 0 #transRedPoly 1 relativeToGround -122.084893845961,37.4225712404479,17 -122.08495809792,37.4221192262686,17 -122.084746957305,37.4220718395262,17 -122.084572538096,37.4220900672968,17 -122.084595488672,37.4221593270089,17 -122.083852111827,37.4222727856437,17 -122.083792243335,37.4220353911208,17 -122.083507665662,37.4220900695711,17 -122.083470946415,37.4220098739516,17 -122.083122108575,37.4221046494946,17 -122.082924737457,37.4222650399039,17 -122.082933916939,37.4223124284309,17 -122.083383735974,37.4222504608762,17 -122.083360785425,37.4223415922875,17 -122.083420455164,37.4223707546064,17 -122.083659133885,37.42251292011,17 -122.083975843895,37.4226587309378,17 -122.084237474333,37.4226514397252,17 -122.08450369495,37.4226514386435,17 -122.08480204608,37.4226113391631,17 -122.084788275051,37.4225639505512,17 -122.084893845961,37.4225712404479,17 Building 41 0 #transBluePoly 1 relativeToGround -122.085741277148,37.4222703315526,17 -122.085816976848,37.4223140883235,17 -122.085852582875,37.4223033746974,17 -122.085879994564,37.4222568613879,17 -122.085886010141,37.4222311076138,17 -122.085806915729,37.4222025017386,17 -122.085837954265,37.4221402705868,17 -122.085673264052,37.4220869021441,17 -122.085602292641,37.4221488542904,17 -122.085590277844,37.422128290487,17 -122.085584167224,37.4220817196725,17 -122.085485206574,37.42210455875,17 -122.085506726435,37.4221426794982,17 -122.085443071291,37.4221278384617,17 -122.08509907149,37.422512824076,17 -122.085676981863,37.4228181532365,17 -122.086016227378,37.4224491885872,17 -122.0857260327,37.4222923960425,17 -122.085741277148,37.4222703315526,17 Building 42 0 #transGreenPoly 1 relativeToGround -122.085786228724,37.4213620888697,25 -122.08573129906,37.4213693598948,25 -122.085731299292,37.421409349109,25 -122.085607707368,37.4213839016656,25 -122.085580242652,37.4213729955087,25 -122.085218622197,37.4213729950432,25 -122.085227776564,37.4216165650827,25 -122.085259818935,37.421605658944,25 -122.08525981855,37.42168200156,25 -122.085236931148,37.4217001786035,25 -122.085264395783,37.4217619798258,25 -122.085323903275,37.4217619801391,25 -122.085355945432,37.421852864452,25 -122.085410875246,37.4218892182373,25 -122.085479537936,37.4218928533705,25 -122.085543622982,37.4218892179755,25 -122.085626017804,37.4218601349993,25 -122.085937287963,37.421860134536,25 -122.085942871867,37.4216089859004,25 -122.085965546986,37.4215799275914,25 -122.085864046234,37.4214711500296,25 -122.085854891121,37.4214057132618,25 -122.085809116277,37.4214057134039,25 -122.085786228724,37.4213620888697,25 Building 43 0 #transYellowPoly 1 relativeToGround -122.084437112828,37.4217725300309,19 -122.084511885575,37.421911115429,19 -122.08504709998,37.4217875512154,19 -122.085071991339,37.4214366302316,19 -122.084916406232,37.4213723782212,19 -122.084219386817,37.4213723780163,19 -122.08421938659,37.421476171615,19 -122.083808641999,37.4214613409357,19 -122.083789972856,37.421313064108,19 -122.08327965347,37.4212932884059,19 -122.083260981921,37.421392139443,19 -122.082937362174,37.4213723639988,19 -122.082906242567,37.4215156977887,19 -122.082850226966,37.4217628257647,19 -122.082943578864,37.4217677696964,19 -122.083217411188,37.4217924855269,19 -122.08359704301,37.4217480074456,19 -122.083945555677,37.421693642376,19 -122.084007789464,37.4217628381585,19 -122.084113587521,37.4217480110439,19 -122.084076247378,37.4217134129238,19 -122.084144704774,37.4216788153457,19 -122.084144704223,37.421817206602,19 -122.084250333307,37.4218170700446,19 -122.084437112828,37.4217725300309,19 Extruded Polygon A simple way to model a building The Pentagon -77.0558013917814 38.870832443487 59.8886556173822 48.0964607479739 742.055250667055 1 relativeToGround -77.0578845766097,38.8725325989282,100 -77.054659737567,38.872910162817,100 -77.0531553685479,38.8705326779439,100 -77.0555262249352,38.868757801256,100 -77.0584405629039,38.8699620650694,100 -77.0578845766097,38.8725325989282,100 -77.0566805501913,38.8715423979846,100 -77.0554262596082,38.8716789034408,100 -77.0548512590102,38.8707653539779,100 -77.0557767743315,38.8700868658145,100 -77.0569116201754,38.8705444696335,100 -77.0566805501913,38.8715423979846,100 Absolute and Relative 0 Four structures whose roofs meet exactly. Turn on/off terrain to see the difference between relative and absolute positioning. -112.334896915755 36.1484553321492 0 -86.9123503756691 49.3069542389419 990.67612010871 Absolute 0 #transBluePoly 1 absolute -112.337251073129,36.1488850510532,1784 -112.33561286884,36.1478154058902,1784 -112.336816937105,36.1465867773438,1784 -112.338440845754,36.1476277891408,1784 -112.337251073129,36.1488850510532,1784 Absolute Extruded 0 #transRedPoly 1 1 absolute -112.339658681884,36.1463761864751,1784 -112.338059765431,36.1453175187135,1784 -112.336825423779,36.1465959624461,1784 -112.33845550432,36.1476262176398,1784 -112.339658681884,36.1463761864751,1784 Relative 0 -112.335015249042 36.1494312307742 0 -118.92141008485 37.924862610932 345.516911367981 #transGreenPoly 1 relativeToGround -112.334946314593,36.1498870576772,100 -112.335401954068,36.1494110839837,100 -112.334442828915,36.1487849038131,100 -112.333128949291,36.1478084013244,100 -112.331701951695,36.1468075567836,100 -112.331131440106,36.1474173426228,100 -112.332616324338,36.1484545336465,100 -112.333987662052,36.1492657052207,100 -112.334946314593,36.1498870576772,100 Relative Extruded 0 -112.335158789238 36.1497924712903 0 -55.4281156089161 56.1028050373959 401.099727971252 #transYellowPoly 1 1 relativeToGround -112.334878398376,36.1514008468736,100 -112.337253534563,36.1488851755389,100 -112.335606892795,36.1478161267928,100 -112.335003480797,36.1484646902418,100 -112.335835386123,36.1489624162954,100 -112.334588830137,36.1502622937251,100 -112.333793785628,36.1497809602646,100 -112.333179820842,36.1504472788618,100 -112.334878398376,36.1514008468736,100 libkml-1.3.0/testdata/update/kmlsamples-change-many.kml000066400000000000000000000013321263603257100231260ustar00rootroot00000000000000 The Placemarks Folder 1 30 relativeToGround libkml-1.3.0/testdata/update/kmlsamples-delete-many-check.kml000066400000000000000000000562251263603257100242310ustar00rootroot00000000000000 KML Samples 1 Unleash your creativity with the help of these examples! Placemarks These are just some of the different kinds of placemarks with which you can mark your favorite places -122.083959714577 37.4222290452523 0 -148.412292262804 40.5575073395506 500.656664107225 Simple placemark Attached to the ground. Intelligently places itself at the height of the underlying terrain. -122.082203542568,37.4222899014025,0 Styles and Markup 0 With KML it is easy to create rich, descriptive markup to annotate and enrich your placemarks -122.084578742237 37.4221507872684 0 -148.412677748817 40.5575073393087 365.264682629292 #noDrivingDirections Highlighted Icon 0 Place your mouse over the icon to see it display the new icon -122.085655212402 37.4224281311035 0 0 0 265.852042425002 normal #normalPlacemark highlight #highlightPlacemark Roll over this icon 0 #exampleStyleMap -122.085654575525,37.4224307740546,0 Descriptive HTML 0
Placemark descriptions can be enriched by using many standard HTML tags.
For example:
Styles:
Italics, Bold, Underlined, Strike Out, subscriptsubscript, superscriptsuperscript, Big, Small, Typewriter, Emphasized, Strong, Code
Fonts:
red by name, leaf green by hexadecimal RGB
size 1, size 2, size 3, size 4, size 5, size 6, size 7
Times, Verdana, Arial

Links:
Google Earth!
or: Check out our website at www.google.com
Alignment:

left

center

right


Ordered Lists:
  1. First
  2. Second
  3. Third
  1. First
  2. Second
  3. Third
  1. First
  2. Second
  3. Third

Unordered Lists:
  • A
  • B
  • C
  • A
  • B
  • C
  • A
  • B
  • C

Definitions:
Google:
The best thing since sliced bread

Centered:
Time present and time past
Are both perhaps present in time future,
And time future contained in time past.
If all time is eternally present
All time is unredeemable.

Block Quote:
We shall not cease from exploration
And the end of all our exploring
Will be to arrive where we started
And know the place for the first time.
-- T.S. Eliot


Headings:

Header 1

Header 2

Header 3

Header 4

Header 5


Images:
Remote image

Scaled image


Simple Tables:
12345
abcde

[Did you notice that double-clicking on the placemark doesn't cause the viewer to take you anywhere? This is because it is possible to directly author a "placeless placemark". If you look at the code for this example, you will see that it has neither a point coordinate nor a LookAt element.]]]>
Ground Overlays 0 Examples of ground overlays Large-scale overlay on terrain 0 Overlay shows Mount Etna erupting on July 13th, 2001. 15.0246893755712 37.6739516794167 0 -16.5581842842829 58.3122865289071 30350.3683843891 http://code.google.com/apis/kml/documentation/etna.jpg 37.9190419268166 37.4654338859814 15.3583265374221 14.601283697467 -0.155664079949624 Screen Overlays 0 Screen overlays have to be authored directly in KML. These examples illustrate absolute and dynamic positioning in screen space. Simple crosshairs 0 This screen overlay uses fractional positioning to put the image in the exact center of the screen http://code.google.com/apis/kml/documentation/crosshairs.png Absolute Positioning: Top left 0 http://code.google.com/apis/kml/documentation/top_left.jpg Absolute Positioning: Top right 0 http://code.google.com/apis/kml/documentation/top_right.jpg Absolute Positioning: Bottom left 0 http://code.google.com/apis/kml/documentation/bottom_left.jpg Absolute Positioning: Bottom right 0 http://code.google.com/apis/kml/documentation/bottom_right.jpg Dynamic Positioning: Top of screen 0 http://code.google.com/apis/kml/documentation/dynamic_screenoverlay.jpg Dynamic Positioning: Right of screen 0 http://code.google.com/apis/kml/documentation/dynamic_right.jpg Paths 0 Examples of paths. Note that the tessellate tag is by default set to 0. If you want to create tessellated lines, they must be authored (or edited) directly in KML. Tessellated 0 tag has a value of 1, the line will contour to the underlying terrain]]> -112.082268001314 36.0982558933356 0 103.812043204497 62.0485579627633 2889.14500769047 1 -112.081423783034,36.1067787047714,0 -112.087026775269,36.0905099328766,0 Untessellated 0 tag has a value of 0, the line follow a simple straight-line path from point to point]]> -112.082268001314 36.0982558933356 0 103.812043204497 62.0485579627633 2889.14500769047 0 -112.080622229595,36.10673460008,0 -112.085242575315,36.0904959861242,0 Polygons 0 Examples of polygon shapes Google Campus 0 A collection showing how easy it is to create 3-dimensional buildings -122.084120030116 37.4217401192548 0 -34.8246974008128 53.454348562403 276.787005376405 Building 40 0 #transRedPoly 1 relativeToGround -122.084893845961,37.4225712404479,17 -122.08495809792,37.4221192262686,17 -122.084746957305,37.4220718395262,17 -122.084572538096,37.4220900672968,17 -122.084595488672,37.4221593270089,17 -122.083852111827,37.4222727856437,17 -122.083792243335,37.4220353911208,17 -122.083507665662,37.4220900695711,17 -122.083470946415,37.4220098739516,17 -122.083122108575,37.4221046494946,17 -122.082924737457,37.4222650399039,17 -122.082933916939,37.4223124284309,17 -122.083383735974,37.4222504608762,17 -122.083360785425,37.4223415922875,17 -122.083420455164,37.4223707546064,17 -122.083659133885,37.42251292011,17 -122.083975843895,37.4226587309378,17 -122.084237474333,37.4226514397252,17 -122.08450369495,37.4226514386435,17 -122.08480204608,37.4226113391631,17 -122.084788275051,37.4225639505512,17 -122.084893845961,37.4225712404479,17 Building 41 0 #transBluePoly 1 relativeToGround -122.085741277148,37.4222703315526,17 -122.085816976848,37.4223140883235,17 -122.085852582875,37.4223033746974,17 -122.085879994564,37.4222568613879,17 -122.085886010141,37.4222311076138,17 -122.085806915729,37.4222025017386,17 -122.085837954265,37.4221402705868,17 -122.085673264052,37.4220869021441,17 -122.085602292641,37.4221488542904,17 -122.085590277844,37.422128290487,17 -122.085584167224,37.4220817196725,17 -122.085485206574,37.42210455875,17 -122.085506726435,37.4221426794982,17 -122.085443071291,37.4221278384617,17 -122.08509907149,37.422512824076,17 -122.085676981863,37.4228181532365,17 -122.086016227378,37.4224491885872,17 -122.0857260327,37.4222923960425,17 -122.085741277148,37.4222703315526,17 Building 42 0 #transGreenPoly 1 relativeToGround -122.085786228724,37.4213620888697,25 -122.08573129906,37.4213693598948,25 -122.085731299292,37.421409349109,25 -122.085607707368,37.4213839016656,25 -122.085580242652,37.4213729955087,25 -122.085218622197,37.4213729950432,25 -122.085227776564,37.4216165650827,25 -122.085259818935,37.421605658944,25 -122.08525981855,37.42168200156,25 -122.085236931148,37.4217001786035,25 -122.085264395783,37.4217619798258,25 -122.085323903275,37.4217619801391,25 -122.085355945432,37.421852864452,25 -122.085410875246,37.4218892182373,25 -122.085479537936,37.4218928533705,25 -122.085543622982,37.4218892179755,25 -122.085626017804,37.4218601349993,25 -122.085937287963,37.421860134536,25 -122.085942871867,37.4216089859004,25 -122.085965546986,37.4215799275914,25 -122.085864046234,37.4214711500296,25 -122.085854891121,37.4214057132618,25 -122.085809116277,37.4214057134039,25 -122.085786228724,37.4213620888697,25 Building 43 0 #transYellowPoly 1 relativeToGround -122.084437112828,37.4217725300309,19 -122.084511885575,37.421911115429,19 -122.08504709998,37.4217875512154,19 -122.085071991339,37.4214366302316,19 -122.084916406232,37.4213723782212,19 -122.084219386817,37.4213723780163,19 -122.08421938659,37.421476171615,19 -122.083808641999,37.4214613409357,19 -122.083789972856,37.421313064108,19 -122.08327965347,37.4212932884059,19 -122.083260981921,37.421392139443,19 -122.082937362174,37.4213723639988,19 -122.082906242567,37.4215156977887,19 -122.082850226966,37.4217628257647,19 -122.082943578864,37.4217677696964,19 -122.083217411188,37.4217924855269,19 -122.08359704301,37.4217480074456,19 -122.083945555677,37.421693642376,19 -122.084007789464,37.4217628381585,19 -122.084113587521,37.4217480110439,19 -122.084076247378,37.4217134129238,19 -122.084144704774,37.4216788153457,19 -122.084144704223,37.421817206602,19 -122.084250333307,37.4218170700446,19 -122.084437112828,37.4217725300309,19 Extruded Polygon A simple way to model a building
libkml-1.3.0/testdata/update/kmlsamples-delete-many.kml000066400000000000000000000010161263603257100231420ustar00rootroot00000000000000 libkml-1.3.0/testdata/update/kmlsamples-multi-update-check.kml000066400000000000000000000113541263603257100244310ustar00rootroot00000000000000 KML Samples 1 Unleash your creativity with the help of these examples! Placemarks These are just some of the different kinds of placemarks with which you can mark your favorite places -122.083959714577 37.4222290452523 0 -148.412292262804 40.5575073395506 500.656664107225 Floating placemark 0 Floats a defined distance above the ground. -122.083959714577 37.4222290452523 0 -148.412292262804 40.5575073395506 252.123 #downArrowIcon relativeToGround -122.084075,37.4220033612141,50 Extruded placemark 0 -122.084578742153 37.4221507873776 0 -148.412668494623 40.5575073391805 365.264660698032 #globeIcon 1 relativeToGround -122.085766700618,37.4215692786755,50 Some new Placemark Another new Placemark 1,2,3 libkml-1.3.0/testdata/update/kmlsamples-multi-update.kml000066400000000000000000000025531263603257100233570ustar00rootroot00000000000000 Some new Placemark Another new Placemark 1,2,3 252.123 libkml-1.3.0/testdata/update/placemark.kml000066400000000000000000000002241263603257100205270ustar00rootroot00000000000000 My name is placemark123 I have no Point libkml-1.3.0/testdata/xal/000077500000000000000000000000001263603257100153675ustar00rootroot00000000000000libkml-1.3.0/testdata/xal/gaddr.kml000066400000000000000000000032461263603257100171620ustar00rootroot00000000000000 1600 amphitheatre mountain view ca
1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA
US CA Santa Clara Mountain View Amphitheatre Pkwy 1600 94043 -122.083739,37.423021,0
libkml-1.3.0/testdata/xsd/000077500000000000000000000000001263603257100154015ustar00rootroot00000000000000libkml-1.3.0/testdata/xsd/kml21.xsd000066400000000000000000001010021263603257100170410ustar00rootroot00000000000000 version attribute will change for minor bug fixes to the schema itself. ]]> is the root element. ]]> libkml-1.3.0/tests/000077500000000000000000000000001263603257100141345ustar00rootroot00000000000000libkml-1.3.0/tests/CMakeLists.txt000066400000000000000000000001041263603257100166670ustar00rootroot00000000000000add_subdirectory(kml) if(WITH_SWIG) add_subdirectory(swig) endif()libkml-1.3.0/tests/kml/000077500000000000000000000000001263603257100147175ustar00rootroot00000000000000libkml-1.3.0/tests/kml/CMakeLists.txt000066400000000000000000000002261263603257100174570ustar00rootroot00000000000000add_subdirectory(base) add_subdirectory(convenience) add_subdirectory(dom) add_subdirectory(engine) add_subdirectory(regionator) add_subdirectory(xsd)libkml-1.3.0/tests/kml/base/000077500000000000000000000000001263603257100156315ustar00rootroot00000000000000libkml-1.3.0/tests/kml/base/CMakeLists.txt000066400000000000000000000011671263603257100203760ustar00rootroot00000000000000set(TESTS attributes color32 csv_splitter date_time expat_handler_ns file math_util referent string_util tempfile time_util util vec3 version xml_element xml_file xml_namespaces xmlns) foreach(TEST ${TESTS}) build_test( GROUP base NAME ${TEST} DEPENDS kmlbase) endforeach() build_test( GROUP base NAME net_cache LINKS ${URIPARSER_LIBRARY} DEPENDS kmlbase) build_test( GROUP base NAME uri_parser LINKS ${URIPARSER_LIBRARY} DEPENDS kmlbase) build_test( GROUP base NAME zip_file LINKS ${MINIZIP_LIBRARY} DEPENDS kmlbase) build_test( GROUP base NAME expat_parser DEPENDS kmlbase;kmldom)libkml-1.3.0/tests/kml/base/attributes_test.cc000066400000000000000000000230241263603257100213660ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the internal Attributes class. #include "kml/base/attributes.h" #include #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" namespace kmlbase { static const char kAttr0[] = "id"; static const char kAttr1[] = "fraction"; static const char kAttr2[] = "xunits"; static const char kNoSuchAttr[] = "no-such-attr"; class AttributesTest : public testing::Test { protected: virtual void SetUp() { attributes_.reset(new Attributes); } boost::scoped_ptr attributes_; }; TEST_F(AttributesTest, TestCreate) { // A list of name-value pairs as expat might produce. const char* atts[] = { "name", "Placemark", "type", "kml:PlacemarkType", "substitutionGroup", "kml:AbstractFeatureGroup", NULL }; // Call the method under test. attributes_.reset(Attributes::Create(atts)); ASSERT_TRUE(attributes_.get()); string got_val; ASSERT_TRUE(attributes_->GetValue(atts[0], &got_val)); ASSERT_EQ(string(atts[1]), got_val); ASSERT_TRUE(attributes_->GetValue(atts[2], &got_val)); ASSERT_EQ(string(atts[3]), got_val); ASSERT_TRUE(attributes_->GetValue(atts[4], &got_val)); ASSERT_EQ(string(atts[5]), got_val); ASSERT_FALSE(attributes_->GetValue("no-such-attr", &got_val)); // Verify null output is well behaved. string* p = NULL; ASSERT_TRUE(attributes_->GetValue(atts[0], p)); ASSERT_FALSE(attributes_->GetValue("no-such_attr", p)); } TEST_F(AttributesTest, TestCreateOdd) { // A bad atts list. const char* atts[] = { "a0", "a1", "b0", 0 }; // Call the method under test. attributes_.reset(Attributes::Create(atts)); ASSERT_TRUE(attributes_.get()); string got_val; ASSERT_TRUE(attributes_->GetValue(atts[0], &got_val)); ASSERT_EQ(string(atts[1]), got_val); ASSERT_FALSE(attributes_->GetValue(atts[2], &got_val)); } TEST_F(AttributesTest, TestGetStringDesctructive) { const char* atts[] = { "id", "placemark-123", "unknown", "somevalue", 0 }; attributes_.reset(Attributes::Create(atts)); string got_val; ASSERT_TRUE(attributes_->GetValue(atts[0], &got_val)); string got_val_again; const string kAtt0(atts[0]); ASSERT_TRUE(attributes_->CutValue(kAtt0, &got_val_again)); ASSERT_FALSE(attributes_->GetValue(atts[0], &got_val_again)); } TEST_F(AttributesTest, TestSetGetString) { const string kVal0 = "val0"; const string kVal1 = "val1"; attributes_->SetValue(kAttr0, kVal0); attributes_->SetValue(kAttr1, kVal1); string got_val; ASSERT_TRUE(attributes_->GetValue(kAttr0, &got_val)); ASSERT_EQ(kVal0, got_val); ASSERT_TRUE(attributes_->GetValue(kAttr1, &got_val)); ASSERT_EQ(kVal1, got_val); ASSERT_TRUE(false == attributes_->GetValue(kNoSuchAttr, &got_val)); ASSERT_EQ(kVal1, got_val); } TEST_F(AttributesTest, TestSetGetDouble) { const double kVal0 = 123.456; const double kVal1 = 987.654321; attributes_->SetValue(kAttr0, kVal0); attributes_->SetValue(kAttr1, kVal1); double got_val; ASSERT_TRUE(attributes_->GetValue(kAttr0, &got_val)); ASSERT_EQ(kVal0, got_val); ASSERT_TRUE(attributes_->GetValue(kAttr1, &got_val)); ASSERT_EQ(kVal1, got_val); ASSERT_TRUE(false == attributes_->GetValue(kNoSuchAttr, &got_val)); ASSERT_EQ(kVal1, got_val); } TEST_F(AttributesTest, TestSetGetInt) { const int kVal0 = 123; const int kVal1 = -987; attributes_->SetValue(kAttr0, kVal0); attributes_->SetValue(kAttr1, kVal1); int got_val; ASSERT_TRUE(attributes_->GetValue(kAttr0, &got_val)); ASSERT_EQ(kVal0, got_val); ASSERT_TRUE(attributes_->GetValue(kAttr1, &got_val)); ASSERT_EQ(kVal1, got_val); ASSERT_TRUE(false == attributes_->GetValue(kNoSuchAttr, &got_val)); ASSERT_EQ(kVal1, got_val); } TEST_F(AttributesTest, TestClone) { const string kVal0 = "val0"; const double kVal1 = 123.456789; attributes_->SetValue(kAttr0, kVal0); attributes_->SetValue(kAttr1, kVal1); Attributes* clone = attributes_->Clone(); string got_string; EXPECT_TRUE(clone->GetValue(kAttr0, &got_string)); EXPECT_EQ(kVal0, got_string); double got_double; EXPECT_TRUE(clone->GetValue(kAttr1, &got_double)); EXPECT_EQ(kVal1, got_double); delete clone; clone = NULL; } TEST_F(AttributesTest, TestMerge) { const string kVal0 = "val0"; const double kVal1a = 123.456789; const double kVal1b = 78.90123; const string kVal2 = "fraction"; attributes_->SetValue(kAttr0, kVal0); attributes_->SetValue(kAttr1, kVal1a); Attributes attributes; attributes.SetValue(kAttr1, kVal1b); attributes.SetValue(kAttr2, kVal2); attributes_->MergeAttributes(attributes); string got_string; ASSERT_TRUE(attributes_->GetValue(kAttr0, &got_string)); ASSERT_EQ(kVal0, got_string); double got_double; ASSERT_TRUE(attributes_->GetValue(kAttr1, &got_double)); ASSERT_EQ(kVal1b, got_double); ASSERT_TRUE(attributes_->GetValue(kAttr2, &got_string)); ASSERT_EQ(kVal2, got_string); } TEST_F(AttributesTest, TestSerialize) { const string kVal0 = "val0"; const double kVal1 = 123.456789; attributes_->SetValue(kAttr0, kVal0); attributes_->SetValue(kAttr1, kVal1); string serialized; attributes_->Serialize(&serialized); const string expecting = " " + string(kAttr1) + "=\"123.456789\" " + string(kAttr0) + "=\"" + kVal0 + "\""; ASSERT_EQ(expecting, serialized); } TEST_F(AttributesTest, TestSplit) { // // Expat turns the above XML into this: const char* atts[] = { "xmlns", "http://www.opengis.net/kml/2.2", "xmlns:ex", "http://vendor.com/kml/2.2ext", NULL }; attributes_.reset(Attributes::Create(atts)); ASSERT_TRUE(attributes_.get()); // This is the method under test. boost::scoped_ptr xmlns_(attributes_->SplitByPrefix("xmlns")); ASSERT_TRUE(xmlns_.get()); ASSERT_EQ(static_cast(1), xmlns_->GetSize()); string val; ASSERT_TRUE(xmlns_->GetValue("ex", &val)); ASSERT_EQ(string(atts[3]), val); } TEST_F(AttributesTest, TestMatchNoDefault) { const char* atts[] = { "xmlns:kml", "http://www.opengis.net/kml/2.2", "xmlns:ex", "http://vendor.com/kml/2.2ext", NULL }; attributes_.reset(Attributes::Create(atts)); ASSERT_TRUE(attributes_.get()); // This is the method under test. boost::scoped_ptr xmlns_(attributes_->SplitByPrefix("xmlns")); ASSERT_TRUE(xmlns_.get()); ASSERT_EQ(static_cast(2), xmlns_->GetSize()); string val; ASSERT_TRUE(xmlns_->GetValue("kml", &val)); ASSERT_EQ(string(atts[1]), val); ASSERT_TRUE(xmlns_->GetValue("ex", &val)); ASSERT_EQ(string(atts[3]), val); } TEST_F(AttributesTest, TestGetAttrNames) { // A list of name-value pairs as expat might produce. const char* atts[] = { "name", "Placemark", "type", "kml:PlacemarkType", "substitutionGroup", "kml:AbstractFeatureGroup", NULL }; attributes_.reset(Attributes::Create(atts)); std::vector attr_names; attributes_->GetAttrNames(&attr_names); ASSERT_EQ(static_cast(3), attr_names.size()); ASSERT_FALSE(attr_names.end() == std::find(attr_names.begin(), attr_names.end(), "name")); ASSERT_FALSE(attr_names.end() == std::find(attr_names.begin(), attr_names.end(), "type")); ASSERT_FALSE(attr_names.end() == std::find(attr_names.begin(), attr_names.end(), "substitutionGroup")); } TEST_F(AttributesTest, TestIterator) { // NOTE: the keys are in map order. const char* atts[] = { "a", "z", "b", "y", "c", "x", NULL }; attributes_.reset(Attributes::Create(atts)); ASSERT_TRUE(attributes_.get()); StringMapIterator iter = attributes_->CreateIterator(); ASSERT_EQ(string(atts[0]), iter.Data().first); ASSERT_EQ(string(atts[1]), iter.Data().second); iter.Advance(); ASSERT_FALSE(iter.AtEnd()); ASSERT_EQ(string(atts[2]), iter.Data().first); ASSERT_EQ(string(atts[3]), iter.Data().second); iter.Advance(); ASSERT_FALSE(iter.AtEnd()); ASSERT_EQ(string(atts[4]), iter.Data().first); ASSERT_EQ(string(atts[5]), iter.Data().second); iter.Advance(); ASSERT_TRUE(iter.AtEnd()); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/color32_test.cc000066400000000000000000000201321263603257100204600ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the Color32 class. #include "kml/base/color32.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" namespace kmlbase { class ColorTest : public testing::Test { protected: boost::scoped_ptr color_; }; // Colors we'll use in multiple tests, given as AABBGGRR. static const uint32_t kOpaqueWhite = 0xffffffff; static const uint32_t kOpaqueBlack = 0xff000000; static const uint32_t kOpaqueBlue = 0xffff0000; static const uint32_t kOpaqueGreen = 0xff00ff00; static const uint32_t kOpaqueRed = 0xff0000ff; TEST_F(ColorTest, TestConstruction) { // Verify basic instantiation of a default Color32 object. color_.reset(new Color32()); ASSERT_EQ(kOpaqueWhite, color_->get_color_abgr()); // Verify construction from an int. const int32_t kRedInt = 0xff0000ff; color_.reset(new Color32(kRedInt)); ASSERT_EQ(kOpaqueRed, color_->get_color_abgr()); // Verify construction from a specific color. color_.reset(new Color32(kOpaqueBlack)); ASSERT_EQ(kOpaqueBlack, color_->get_color_abgr()); // Verify construction from a bunch of RGBA uchars. const unsigned char kA = 0xff; const unsigned char kB = 0x00; const unsigned char kG = 0x00; const unsigned char kR = 0xff; // The components of kOpaqueRed. color_.reset(new Color32(kA, kB, kG, kR)); ASSERT_EQ(kOpaqueRed, color_->get_color_abgr()); // Verify construction from another Color32. Color32 color(kOpaqueBlue); color_.reset(new Color32(color)); ASSERT_EQ(kOpaqueBlue, color_->get_color_abgr()); // Verify construction from a string. const string kOpaqueRedStr("ff0000ff"); color_.reset(new Color32(kOpaqueRedStr)); ASSERT_EQ(kOpaqueRed, color_->get_color_abgr()); // Verify correct behaviour with poorly formed string data. // // Any string supplied that is less than 8 chars is filled from the front // with zeros (and will thus be completely transparent). // An fully empty string initalizes to all zeroes (transparent black). const string kEmptyString(""); color_.reset(new Color32(kEmptyString)); string expected = "00000000"; ASSERT_EQ(expected, color_->to_string_abgr()); const string kOnlySixCharsGiven("ffffff"); color_.reset(new Color32(kOnlySixCharsGiven)); expected = "00ffffff"; ASSERT_EQ(expected, color_->to_string_abgr()); const string kOnly2CharsGiven("ff"); color_.reset(new Color32(kOnly2CharsGiven)); expected = "000000ff"; ASSERT_EQ(expected, color_->to_string_abgr()); // Only the first eight chars are used for construction from string. Extra // chars at the end of the input string are ignored. const string kTenCharsGiven("aabbccddee"); color_.reset(new Color32(kTenCharsGiven)); expected = "aabbccdd"; ASSERT_EQ(expected, color_->to_string_abgr()); // The input string here has two valid hex values in the first eight chars. // ( the "a" and "c" in "Not a c") and those are the only chars that // won't be replaced with zeroes. const string kBadString("Not a color value"); color_.reset(new Color32(kBadString)); expected = "0000a0c0"; ASSERT_EQ(expected, color_->to_string_abgr()); // Verify construction from a string with a preceding '#' character. const string kHashRed("#ff0000ff"); color_.reset(new Color32(kHashRed)); expected = "ff0000ff"; ASSERT_EQ(expected, color_->to_string_abgr()); // Verify construction from a string with leading whitespace. const string kWhitespace(" \t\ndec0dded"); color_.reset(new Color32(kWhitespace)); expected = "dec0dded"; ASSERT_EQ(expected, color_->to_string_abgr()); // Verify construction from a string with leading whitespace & a hash. const string kHashWhitespace("\r \n#babbb1ed"); color_.reset(new Color32(kHashWhitespace)); expected = "babbb1ed"; ASSERT_EQ(expected, color_->to_string_abgr()); } TEST_F(ColorTest, TestGetSet) { // Verify getters of default state. color_.reset(new Color32()); const uint32_t kFF = 0xff; ASSERT_EQ(kFF, color_->get_alpha()); ASSERT_EQ(kFF, color_->get_blue()); ASSERT_EQ(kFF, color_->get_green()); ASSERT_EQ(kFF, color_->get_red()); // Verify getters of newly set state. const uint32_t kAB = 0xab; color_->set_alpha(kAB); color_->set_blue(kAB); color_->set_green(kAB); color_->set_red(kAB); ASSERT_EQ(kAB, color_->get_alpha()); ASSERT_EQ(kAB, color_->get_blue()); ASSERT_EQ(kAB, color_->get_green()); ASSERT_EQ(kAB, color_->get_red()); // Verify get_color_abgr and get_color_rgba. color_.reset(new Color32(kOpaqueGreen)); const uint32_t kOpaqueGreenARGB = 0xff00ff00; ASSERT_EQ(kOpaqueGreen, color_->get_color_abgr()); ASSERT_EQ(kOpaqueGreenARGB, color_->get_color_argb()); // Verify reconstruction to AABBGGRR string. const string kOpaqueRedStr("ff0000ff"); color_.reset(new Color32(kOpaqueRedStr)); ASSERT_EQ(kOpaqueRedStr, color_->to_string_abgr()); // Verify to_argb_string. ASSERT_EQ(kOpaqueRedStr, color_->to_string_abgr()); const string kOpaqueRedStr_argb("ffff0000"); ASSERT_EQ(kOpaqueRedStr_argb, color_->to_string_argb()); } TEST_F(ColorTest, TestOperators) { // Verify correct behavior of overidden class operators. // Assignment from uint32_t. color_.reset(new Color32()); *color_.get() = kOpaqueGreen; // Same as: Color32 c; c = kOpaqueGreen; ASSERT_EQ(kOpaqueGreen, color_->get_color_abgr()); // Assignment from int. color_.reset(new Color32()); *color_.get() = kOpaqueRed; ASSERT_EQ(kOpaqueRed, color_->get_color_abgr()); // Assignment from reference to object. color_.reset(new Color32()); Color32 color(kOpaqueGreen); *color_.get() = color; ASSERT_EQ(kOpaqueGreen, color_->get_color_abgr()); // Inequality operator. Color32 black(kOpaqueBlack); Color32 green(kOpaqueGreen); ASSERT_TRUE(black != green); // Equality operator. ASSERT_TRUE(black == black); ASSERT_TRUE(green == green); // Greater-than operator. ASSERT_TRUE(green > black); // Less-than operator. ASSERT_TRUE(black < green); } TEST_F(ColorTest, TestSetFromUint32Argb) { color_.reset(new Color32()); color_->set_color_argb(0x7f112233); ASSERT_EQ(static_cast(0x7f), color_->get_alpha()); ASSERT_EQ(static_cast(0x11), color_->get_red()); ASSERT_EQ(static_cast(0x22), color_->get_green()); ASSERT_EQ(static_cast(0x33), color_->get_blue()); } TEST_F(ColorTest, TestSetColorArgbFromString) { // The first 8 characters are a valid color (green). The remainder of the // string is garbage. Assert we correctly set the color. const string kLongStr("01234567nowSomeNonsense"); const string kStr("01234567"); color_.reset(new Color32()); color_->set_color_abgr(kLongStr); ASSERT_EQ(kStr, color_->to_string_abgr()); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/csv_splitter_test.cc000066400000000000000000000132071263603257100217230ustar00rootroot00000000000000// Copyright 2010, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the CsvSplitter class. #include "kml/base/csv_splitter.h" #include "kml/base/file.h" #include "gtest/gtest.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlbase { TEST(CsvSplitterTest, TestSimpleFindNextLine) { CsvSplitter csv_splitter("hi,there\nhow,are,you?\n"); size_t this_end; size_t next_begin = csv_splitter.FindNextLine(&this_end); ASSERT_EQ(static_cast(8), this_end); ASSERT_EQ(static_cast(9), next_begin); } TEST(CsvSplitterTest, TestSimpleSplitCurrentLine) { CsvSplitter csv_splitter("hi,there\nhow,are,you?\n"); StringVector cols; ASSERT_TRUE(csv_splitter.SplitCurrentLine(&cols)); ASSERT_EQ(static_cast(2), cols.size()); ASSERT_EQ("hi", cols[0]); ASSERT_EQ("there", cols[1]); cols.clear(); ASSERT_TRUE(csv_splitter.SplitCurrentLine(&cols)); ASSERT_EQ(static_cast(3), cols.size()); ASSERT_EQ("how", cols[0]); ASSERT_EQ("are", cols[1]); ASSERT_EQ("you?", cols[2]); cols.clear(); ASSERT_FALSE(csv_splitter.SplitCurrentLine(&cols)); ASSERT_TRUE(cols.empty()); } TEST(CsvSplitterTest, TestFindNextLineNoLastNewline) { CsvSplitter csv_splitter("hi,there\nhow,are,you?"); size_t this_end; size_t next_begin = csv_splitter.FindNextLine(&this_end); ASSERT_EQ(static_cast(8), this_end); ASSERT_EQ(static_cast(9), next_begin); StringVector cols; ASSERT_TRUE(csv_splitter.SplitCurrentLine(&cols)); ASSERT_EQ(static_cast(2), cols.size()); } TEST(CsvSplitterTest, TestSplitCurrentLineNoLastNewLine) { CsvSplitter csv_splitter("hi,there\nhow,are,you?"); StringVector cols; ASSERT_TRUE(csv_splitter.SplitCurrentLine(&cols)); ASSERT_EQ(static_cast(2), cols.size()); cols.clear(); ASSERT_TRUE(csv_splitter.SplitCurrentLine(&cols)); ASSERT_EQ(static_cast(3), cols.size()); } // Test line FindNextLine on a file with \r\n line endings. TEST(CsvSplitterTest, TestCrNlFile) { const string kCrNlCsv = kmlbase::File::JoinPaths(DATADIR, kmlbase::File::JoinPaths("csv", "crnl.csv")); string cr_nl_csv; ASSERT_TRUE(File::ReadFileToString(kCrNlCsv, &cr_nl_csv)); CsvSplitter csv_splitter(cr_nl_csv); size_t this_end; size_t next_begin = csv_splitter.FindNextLine(&this_end); ASSERT_EQ(static_cast(5), this_end); ASSERT_EQ(static_cast(7), next_begin); StringVector cols; ASSERT_TRUE(csv_splitter.SplitCurrentLine(&cols)); ASSERT_EQ(static_cast(3), cols.size()); ASSERT_EQ(string("a"), cols[0]); ASSERT_EQ(string("b"), cols[1]); ASSERT_EQ(string("c"), cols[2]); cols.clear(); ASSERT_TRUE(csv_splitter.SplitCurrentLine(&cols)); ASSERT_EQ(static_cast(3), cols.size()); ASSERT_EQ(string("1"), cols[0]); ASSERT_EQ(string("2"), cols[1]); ASSERT_EQ(string("3"), cols[2]); ASSERT_FALSE(csv_splitter.SplitCurrentLine(&cols)); } // Test line FindNextLine on a file with \r line endings. TEST(CsvSplitterTest, TestCrFile) { const string kColleges = kmlbase::File::JoinPaths(DATADIR, kmlbase::File::JoinPaths("csv", "colleges.csv")); string colleges; ASSERT_TRUE(File::ReadFileToString(kColleges, &colleges)); CsvSplitter csv_splitter(colleges); int count = 0; StringVector cols; ASSERT_TRUE(csv_splitter.SplitCurrentLine(&cols)); ASSERT_EQ(string("name"), cols[0]); ASSERT_EQ(string("address"), cols[1]); ASSERT_EQ(string("Website"), cols[2]); ASSERT_EQ(string("Type"), cols[3]); ASSERT_EQ(string("Size"), cols[4]); cols.clear(); while (csv_splitter.SplitCurrentLine(&cols)) { ASSERT_EQ(static_cast(5), cols.size()); if (++count != 2966) { cols.clear(); } } ASSERT_EQ(string("Zion Bible College"), cols[0]); ASSERT_EQ(string("320 South Main Street, Haverhill, Massachusetts 01835"), cols[1]); ASSERT_EQ(string("www.zbc.edu"), cols[2]); ASSERT_EQ(string("4-year, Private not-for-profit"), cols[3]); ASSERT_EQ(string("247"), cols[4]); ASSERT_EQ(2966, count); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/date_time_test.cc000066400000000000000000000074151263603257100211410ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the DateTime class. #include "kml/base/date_time.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" namespace kmlbase { class DateTimeTest : public testing::Test { protected: boost::scoped_ptr date_time_; }; TEST_F(DateTimeTest, TestCreate) { // Call the method under test. const string kDateTime("2008-10-03T09:25:42Z"); date_time_.reset(DateTime::Create(kDateTime)); ASSERT_TRUE(date_time_.get()); ASSERT_EQ(static_cast(1223025942), date_time_->GetTimeT()); ASSERT_EQ(string("09:25:42"), date_time_->GetXsdTime()); ASSERT_EQ(string("2008-10-03"), date_time_->GetXsdDate()); ASSERT_EQ(kDateTime, date_time_->GetXsdDateTime()); } // 2007-01-14T22:57:31.000Z // Verify expected behavior on invalid input. TEST_F(DateTimeTest, TestBad) { date_time_.reset(DateTime::Create("garbage")); ASSERT_FALSE(date_time_.get()); } TEST_F(DateTimeTest, TestToTimeT) { ASSERT_EQ(1223025942, DateTime::ToTimeT("2008-10-03T09:25:42Z")); // Minimum time_t. ASSERT_EQ(0, DateTime::ToTimeT("1970-01-01T00:00:00Z")); // Maximum time_t on 32-bit systems. // TODO: FIXME //ASSERT_EQ((1 << 31) - 1, DateTime::ToTimeT("2038-01-19T03:14:07Z")); //ASSERT_EQ(0, DateTime::ToTimeT("complete invalid input")); } TEST_F(DateTimeTest, TestGetTimeT) { // Minimum time_t. date_time_.reset(DateTime::Create( "1970-01-01T00:00:00Z")); ASSERT_EQ(0, date_time_->GetTimeT()); // Maximum time_t on 32-bit systems.. // TODO FIXME /* date_time_.reset(DateTime::Create("2038-01-19T03:14:07Z")); ASSERT_EQ((1 << 31) - 1, date_time_->GetTimeT()); // Ensure leap day is handled. Check timestamps beginning of leap day. const time_t kLeapMidnight = 4107542399; date_time_.reset(DateTime::Create( "2000-02-28T23:59:59Z")); ASSERT_EQ(kLeapMidnight, date_time_->GetTimeT()); date_time_.reset(DateTime::Create( "2000-02-29T00:00:00Z")); ASSERT_EQ(kLeapMidnight + 1, date_time_->GetTimeT()); // 2100 is not a leap year. const time_t kNotLeapMidnight = 4107542399; date_time_.reset(DateTime::Create( "2100-02-28T23:59:59Z")); ASSERT_EQ(kNotLeapMidnight, date_time_->GetTimeT()); date_time_.reset(DateTime::Create( "2100-03-01T00:00:00Z")); ASSERT_EQ(kNotLeapMidnight + 1, date_time_->GetTimeT()); */ } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/expat_handler_ns_test.cc000066400000000000000000000131271263603257100225210ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the ExpatHandlerNs class. #include "kml/base/expat_handler_ns.h" #include "boost/scoped_ptr.hpp" #include "kml/base/attributes.h" #include "kml/base/expat_parser.h" #include "kml/base/xmlns.h" #include "gtest/gtest.h" using kmlbase::Attributes; using kmlbase::Xmlns; namespace kmlbase { class ExpatHandlerNsTest : public testing::Test { }; // Note: no namespace can use the kExpatNsSeparator (see base/expat_parser.h). static const char kDefaultNamespace[] = "this:is:the:default:namespace"; static const char kDefaultPrefix[] = "default"; static const char kOtherNamespace[] = "this:is:another:namespace"; static const char kOtherPrefix[] = "other"; typedef std::vector StringVector; class TestHandler : public ExpatHandler { public: TestHandler(StringVector* log) : log_(log) {} virtual void StartElement(const string& name, const StringVector& atts) { // TODO: handle attributes log_->push_back(name); } virtual void EndElement(const string& name) { log_->push_back(name); } virtual void CharData(const string& s) { // Nothing namespace/prefix related here. Just ignore. } private: StringVector* log_; }; // This verifies ExpatHandlerNs's StartElement() and EndElement() on XML with // the default namespace. TEST_F(ExpatHandlerNsTest, TestExpatParserDefault) { Attributes attributes; attributes.SetString("xmlns", kDefaultNamespace); boost::scoped_ptr xmlns(Xmlns::Create(attributes)); std::vector log; TestHandler test_handler(&log); ExpatHandlerNs expat_handler_ns(&test_handler, xmlns.get()); const string kXml( string(""); string errors; ASSERT_TRUE(ExpatParser::ParseString(kXml, &expat_handler_ns, &errors, true)); ASSERT_EQ(static_cast(2), log.size()); ASSERT_EQ(string("hi"), log[0]); ASSERT_EQ(string("hi"), log[1]); } // This verifies ExpatHandlerNs's StartElement() and EndElement() on XML with // no default namespace: all elements are prefixed to a namespace mapping // known to the TestHandler. TEST_F(ExpatHandlerNsTest, TestExpatParserPrefixed) { Attributes attributes; attributes.SetString( string("xmlns:") + kDefaultPrefix, kDefaultNamespace); boost::scoped_ptr xmlns(Xmlns::Create(attributes)); std::vector log; TestHandler test_handler(&log); ExpatHandlerNs expat_handler_ns(&test_handler, xmlns.get()); const string kTag("hi"); const string kXml( string("<") + kDefaultPrefix + ":" + kTag + " " + "xmlns:" + kDefaultPrefix + "=\"" + kDefaultNamespace + "\"" + "/>"); string errors; ASSERT_TRUE(ExpatParser::ParseString(kXml, &expat_handler_ns, &errors, true)); ASSERT_EQ(static_cast(2), log.size()); ASSERT_EQ(string(kDefaultPrefix) + ":" + kTag, log[0]); ASSERT_EQ(string(kDefaultPrefix) + ":" + kTag, log[1]); } // This verifies ExpatHandlerNs's StartElement() and EndElement() on XML with // elements in the default namespace and elements in another namespace. TEST_F(ExpatHandlerNsTest, TestExpatParserDefaultAndPrefixed) { Attributes attributes; attributes.SetString("xmlns", kDefaultNamespace); attributes.SetString( string("xmlns:") + kOtherPrefix, kOtherNamespace); boost::scoped_ptr xmlns(Xmlns::Create(attributes)); std::vector log; TestHandler test_handler(&log); ExpatHandlerNs expat_handler_ns(&test_handler, xmlns.get()); const string kHi("hi"); const string kThere("there"); const string kXml( string("<") + kHi + " " + "xmlns=\"" + kDefaultNamespace + "\" " + "xmlns:" + kOtherPrefix + "=\"" + kOtherNamespace + "\">" + "<" + kOtherPrefix + ":" + kThere + "/>" + ""); string errors; ASSERT_TRUE(ExpatParser::ParseString(kXml, &expat_handler_ns, &errors, true)); ASSERT_EQ(static_cast(4), log.size()); ASSERT_EQ(kHi, log[0]); ASSERT_EQ(string(kOtherPrefix) + ":" + kThere, log[1]); ASSERT_EQ(string(kOtherPrefix) + ":" + kThere, log[2]); ASSERT_EQ(kHi, log[3]); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/expat_parser_test.cc000066400000000000000000000272041263603257100217010ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the ExpatParser class. #include "kml/base/expat_parser.h" #include "kml/base/file.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" #include "kml/dom/kml_handler.h" #include "kml/dom/parser_observer.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlbase { // A basic ExpatParser handler that simply reconstructs parsed XML in a string. class TestXmlHandler : public ExpatHandler { public: virtual void StartElement(const string& name, const StringVector& atts) { xml_.append("<" + name + ">"); } virtual void EndElement(const string& name) { xml_.append(""); } virtual void CharData(const string& data) { xml_.append(data); } const string& get_xml() const { return xml_; } private: string xml_; }; class ExpatParserTest : public testing::Test { protected: string errors_; TestXmlHandler handler_; }; // Verify basic usage of the static ParseString method. TEST_F(ExpatParserTest, TestPassingParseString) { const string kXml("foobar"); ASSERT_TRUE(ExpatParser::ParseString(kXml, &handler_, &errors_, false)); ASSERT_TRUE(errors_.empty()); ASSERT_EQ(kXml, handler_.get_xml()); } // Verify failure of ParseString on badly formed XML content. TEST_F(ExpatParserTest, TestFailingParseString) { // kXml is not well-formed. const string kXml("foobar"); ASSERT_FALSE(ExpatParser::ParseString(kXml, &handler_, &errors_, false)); ASSERT_FALSE(errors_.empty()); ASSERT_EQ(kXml, handler_.get_xml()); } // Verify basic usage of the ParseBuffer method. TEST_F(ExpatParserTest, TestPassingParseBuffer) { const string kXml("foobar"); ExpatParser parser(&handler_, false); // Parse the string one character at a time. for (size_t i = 0; i < kXml.length(); ++i) { ASSERT_TRUE(parser.ParseBuffer(kXml.substr(i, 1), &errors_, i == kXml.length()-1)); } ASSERT_EQ(kXml, handler_.get_xml()); } // Verify failure of ParseBuffer on badly formed XML content. TEST_F(ExpatParserTest, TestFailingParseBuffer) { // kXml is not well-formed. const string kXml("foobar"); ExpatParser parser(&handler_, false); // Parse the string one character at a time. for (size_t i = 0; i < kXml.length(); ++i) { ASSERT_TRUE(parser.ParseBuffer(kXml.substr(i, 1), &errors_, false)); ASSERT_TRUE(errors_.empty()); } // Now set the is_final bool to true to indicate that we believe parsing // is done. Expat will check and see that its own parsing state shows // more content is necessary because our XML is missing the closing // tag. ASSERT_FALSE(parser.ParseBuffer("", &errors_, true)); ASSERT_FALSE(errors_.empty()); ASSERT_EQ(kXml, handler_.get_xml()); } // Assert that we detect a mid-stream parsing failure. TEST_F(ExpatParserTest, TestMidstreamFailingParseBuffer) { const string k0(""); const string k1(""); // This is fine. const string k2(""); // XML is badly formed here, missing
. ExpatParser parser(&handler_, false); ASSERT_TRUE(parser.ParseBuffer(k0, &errors_, false)); ASSERT_TRUE(errors_.empty()); ASSERT_TRUE(parser.ParseBuffer(k1, &errors_, false)); ASSERT_TRUE(errors_.empty()); ASSERT_FALSE(parser.ParseBuffer(k2, &errors_, false)); ASSERT_FALSE(errors_.empty()); } // Verify basic usage of the GetInternalBuffer and ParseInternalBuffer methods. TEST_F(ExpatParserTest, TestPassingParseInternalBuffer) { const string kXml("foobar"); ExpatParser parser(&handler_, false); // Parse the string one character at a time. for (size_t i = 0; i < kXml.length(); ++i) { char* buf = static_cast(parser.GetInternalBuffer(1)); *buf = kXml[i]; ASSERT_TRUE(parser.ParseInternalBuffer(1, &errors_, i == kXml.length()-1)); } ASSERT_EQ(kXml, handler_.get_xml()); ASSERT_TRUE(errors_.empty()); } TEST_F(ExpatParserTest, TestFailingInternalBuffer) { const string k0(""); const string k1(""); // This is fine. const string k2(""); // XML is badly formed here, missing . ExpatParser parser(&handler_, false); void* buf = parser.GetInternalBuffer(k0.size()); memcpy(buf, k0.data(), k0.size()); ASSERT_TRUE(parser.ParseInternalBuffer(k0.size(), &errors_, false)); ASSERT_TRUE(errors_.empty()); buf = parser.GetInternalBuffer(k1.size()); memcpy(buf, k1.data(), k1.size()); ASSERT_TRUE(parser.ParseInternalBuffer(k1.size(), &errors_, false)); ASSERT_TRUE(errors_.empty()); buf = parser.GetInternalBuffer(k2.size()); memcpy(buf, k2.data(), k2.size()); ASSERT_FALSE(parser.ParseInternalBuffer(k2.size(), &errors_, true)); ASSERT_FALSE(errors_.empty()); } TEST_F(ExpatParserTest, TestBillionLaughsAttack) { // Ensure that the "billion laughs" buffer overflow attack is handled. // Previously, this would hang libkml. const string kBadXml = string(DATADIR) + "/kml/billion.kml"; string file_data; ASSERT_TRUE(File::ReadFileToString(kBadXml, &file_data)); ASSERT_FALSE(ExpatParser::ParseString(file_data, &handler_, &errors_, false)); ASSERT_FALSE(errors_.empty()); ASSERT_TRUE(handler_.get_xml().empty()); } TEST_F(ExpatParserTest, TestEntitiesStopParser) { // This is malformed XML. const string kBadXml( "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "]>" "&laugh30;" ""); ASSERT_FALSE(ExpatParser::ParseString(kBadXml, &handler_, &errors_, false)); ASSERT_FALSE(errors_.empty()); ASSERT_EQ(string(""), handler_.get_xml()); } TEST_F(ExpatParserTest, TestUnicode) { const string kUnicodeKml( "" "" "one\xe2\x80\x93two" // A UTF-8 encoded en-dash. "" "" ); ASSERT_TRUE(ExpatParser::ParseString(kUnicodeKml, &handler_, &errors_, false)); ASSERT_TRUE(errors_.empty()); // If this roundtrip fails, expect problems in the XML_UNICODE paths. ASSERT_EQ(kUnicodeKml, handler_.get_xml()); } TEST_F(ExpatParserTest, TestUnicodeToUtf8) { // Verify no crash on null inputs. string result_string; const XML_Char input_buffer = 'a'; xmlchar_to_utf8(&input_buffer, NULL); xmlchar_to_utf8(NULL, &result_string); ASSERT_TRUE(result_string.empty()); xmlchar_to_utf8(NULL, NULL); xmlchar_to_utf8(&input_buffer, &result_string); ASSERT_EQ("a", result_string); // Requires this file be built with the same flags used to build libexpat. #if XML_UNICODE ASSERT_TRUE(sizeof(XML_Char) > 1); // Verify successful two byte encoding. result_string.clear(); const XML_Char kutf8_small_g = 0x262; xmlchar_to_utf8(&kutf8_small_g, &result_string); ASSERT_EQ("\xc9\xa2", result_string); // Verify three byte encoding. result_string.clear(); const XML_Char kutf8_degree_celsius = 0x2103; xmlchar_to_utf8(&kutf8_degree_celsius, &result_string); ASSERT_EQ("\xe2\x84\x83", result_string); #else // Verify we don't mangle UTF-8 start if we're just passing through. result_string.clear(); const XML_Char kutf8 = 0xe2 ; xmlchar_to_utf8(&kutf8, &result_string); ASSERT_EQ("\xe2", result_string); #endif // XML_UNICODE } TEST_F(ExpatParserTest, TestXmlUnicodeHandlers) { // The contrived-looking array approach here is so we're safe with either // sane build options or XML_UNICODE. const XML_Char kXMLChar[] = {'<', 'A', '>', '<', 'B', '>', 0 }; const XML_Char kXMLChar2[] = {'<', 'C', '>', '<', 'D', '>', 0 }; const XML_Char kEmptyString[] = { 0 }; string s1; // Ensure roundrip is OK. If this fails, suspect XML_UNICODE mismatches // in linked expat lib and this source. ASSERT_EQ("", xml_char_to_string(kXMLChar)); // Check null inputs. s1 = xml_char_to_string(NULL); ASSERT_TRUE(s1.empty()); // Check empty inputs. s1 = xml_char_to_string(kEmptyString); ASSERT_TRUE(s1.empty()); // Exercise xml_char_to_string_n. s1 = xml_char_to_string_n(kXMLChar, 0); ASSERT_TRUE(s1.empty()); s1 = xml_char_to_string_n(kXMLChar, 3); ASSERT_EQ(s1, ""); // Now the array version. std::vector a; xml_char_to_string_vec(NULL, &a); ASSERT_EQ(a.size(), static_cast(0)); // Check empty array. const XML_Char* kXMLEmptyArray[] = {NULL}; xml_char_to_string_vec(kXMLEmptyArray, &a); ASSERT_EQ(a.size(), static_cast(0)); // Check common case. const XML_Char* kXMLArray[] = {kXMLChar, kXMLChar2, NULL}; xml_char_to_string_vec(kXMLArray, &a); ASSERT_EQ(a.size(), static_cast(2)); ASSERT_EQ(a.at(0), ""); ASSERT_EQ(a.at(1), ""); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/file_test.cc000066400000000000000000000136271263603257100201270ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/base/file.h" #include "gtest/gtest.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error DATADIR must be defined! #endif namespace kmlbase { class FileTest : public testing::Test { }; TEST_F(FileTest, TestReadFileToString) { const string kDoc = string(DATADIR) + "/kmz/doc.kmz"; string file_data; ASSERT_TRUE(File::ReadFileToString(kDoc, &file_data)); ASSERT_FALSE(file_data.empty()); // doc.kmz is 332 bytes. ASSERT_EQ(static_cast(332), file_data.size()); } TEST_F(FileTest, TestWriteStringToFile) { // Create a temp file into which we'll write data. string tempfile; ASSERT_TRUE(File::CreateNewTempFile(&tempfile)); ASSERT_FALSE(tempfile.empty()); // Write some data. const string kText = "tom dick harry"; ASSERT_TRUE(File::WriteStringToFile(kText, tempfile)); // Read the file back into a different string and assert equality. string file_data; ASSERT_TRUE(File::ReadFileToString(tempfile, &file_data)); ASSERT_FALSE(file_data.empty()); ASSERT_EQ(kText, file_data); // Remove the temp file. ASSERT_TRUE(File::Delete(tempfile)); } TEST_F(FileTest, TestExists) { const string kDoc = string(DATADIR) + "/kmz/doc.kmz"; const string kNoSuchFile = string(DATADIR) + "/kmz/nosuchfile"; ASSERT_TRUE(File::Exists(kDoc)); ASSERT_FALSE(File::Exists(kNoSuchFile)); } TEST_F(FileTest, TestDelete) { // Create a temp file. string tempfile; ASSERT_TRUE(File::CreateNewTempFile(&tempfile)); // Assert it was created. ASSERT_FALSE(tempfile.empty()); ASSERT_TRUE(File::Exists(tempfile)); // Delete and confirm removal. ASSERT_TRUE(File::Delete(tempfile)); ASSERT_FALSE(File::Exists(tempfile)); } TEST_F(FileTest, TestCreateNewTempFile) { ASSERT_TRUE(false == File::CreateNewTempFile(NULL)); string temp_filename; ASSERT_TRUE(File::CreateNewTempFile(&temp_filename)); ASSERT_FALSE(temp_filename.empty()); ASSERT_TRUE(File::Delete(temp_filename)); } TEST_F(FileTest, TestJoinPaths) { // TODO: win32 separators for cross-platform testing. const string kPath1NoSep("/tom/dick"); const string kPath1Sep("/tom/dick/"); const string kPath2("harry"); const string kExpected_posix("/tom/dick/harry"); // The following two strings have no real meaning w.r.t. a windows file // system. They merely test correct handling of the underlying code. const string kExpected_win32_nosep("/tom/dick\\harry"); const string kExpected_win32_sep("/tom/dick/\\harry"); // Passing cases. #ifdef WIN32 ASSERT_EQ(kExpected_win32_nosep, File::JoinPaths(kPath1NoSep, kPath2)); ASSERT_EQ(kExpected_win32_sep, File::JoinPaths(kPath1Sep, kPath2)); #else ASSERT_EQ(kExpected_posix, File::JoinPaths(kPath1NoSep, kPath2)); ASSERT_EQ(kExpected_posix, File::JoinPaths(kPath1Sep, kPath2)); const string kBaseDir("../../../../testdata/kmz/"); const string kFilename("kmzfiles/dummy.kml"); const string kExpected("../../../../testdata/kmz/kmzfiles/dummy.kml"); ASSERT_EQ(kExpected, File::JoinPaths(kBaseDir, kFilename)); #endif // Pathological cases. // Joining with an empty string does not modify anything. ASSERT_EQ(kPath1NoSep, File::JoinPaths(kPath1NoSep, "")); ASSERT_EQ(kPath2, File::JoinPaths("", kPath2)); ASSERT_EQ(string(""), File::JoinPaths("", "")); } const static struct { string filepath; string basedir; string filename; } kFilePathTests[] = { {"/tom/dick/harry.txt", "/tom/dick", "harry.txt" }, {"\\tom\\dick\\harry.txt", "\\tom\\dick", "harry.txt"}, {"/harry.txt", "/", "harry.txt" }, {"harry.txt", ".", "harry.txt" }, {"", ".", "" } }; TEST_F(FileTest, TestSplitFilePath) { // Test NULL handling. File::SplitFilePath(kFilePathTests[0].filepath, NULL, NULL); string basedir; File::SplitFilePath(kFilePathTests[0].filepath, &basedir, NULL); ASSERT_EQ(kFilePathTests[0].basedir, basedir); string filename; File::SplitFilePath(kFilePathTests[0].filepath, &basedir, &filename); ASSERT_EQ(kFilePathTests[0].basedir, basedir); ASSERT_EQ(kFilePathTests[0].filename, filename); // Test specific cases. const size_t kSize = sizeof(kFilePathTests)/sizeof(kFilePathTests[0]); for (size_t i = 0; i < kSize; ++i) { string basedir; string filename; File::SplitFilePath(kFilePathTests[i].filepath, &basedir, &filename); ASSERT_EQ(kFilePathTests[i].basedir, basedir); ASSERT_EQ(kFilePathTests[i].filename, filename); } } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/google_internal_test.h000066400000000000000000000034271263603257100222170ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file is a convenience to the build system at Google. #ifndef KML_BASE_GOOGLE_INTERNAL_TEST__ #define KML_BASE_GOOGLE_INTERNAL_TEST__ #include "testing/base/public/googletest.h" #define DATADIR FLAGS_test_srcdir + "/google3/third_party/libkml/testdata" #endif // KML_BASE_GOOGLE_INTERNAL_TEST__ libkml-1.3.0/tests/kml/base/math_util_test.cc000066400000000000000000000163571263603257100212010ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the mathematical functions. #include "kml/base/math_util.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" namespace kmlbase { TEST(BaseMathTest, TestAzimuthBetweenPoints) { // Sanity checks. ASSERT_DOUBLE_EQ(0.0, AzimuthBetweenPoints(0,0,1,0)); ASSERT_DOUBLE_EQ(90.0, AzimuthBetweenPoints(0,0,0,1)); ASSERT_DOUBLE_EQ(180.0, AzimuthBetweenPoints(0,0,-1,0)); ASSERT_DOUBLE_EQ(-90.0, AzimuthBetweenPoints(0,0,0,-1)); ASSERT_NEAR(-180.0, AzimuthBetweenPoints(0,0,-1,-0.0000001), 0.0001); // The example from the Aviation Formulary. const double kLAX_lat = 33.944066; const double kLAX_lng = -118.408294; const double kJFK_lat = 40.642480; const double kJFK_lng = -73.788071; // The known azimuth from LAX to JFK. const double kAzimuth = 65.8687; double az1 = AzimuthBetweenPoints(kLAX_lat, kLAX_lng, kJFK_lat, kJFK_lng); ASSERT_NEAR(kAzimuth, az1, 0.0001); // The return flight. const double kAzimuthReturn = -86.1617; double az2 = AzimuthBetweenPoints(kJFK_lat, kJFK_lng, kLAX_lat, kLAX_lng); ASSERT_NEAR(kAzimuthReturn, az2, 0.0001); } TEST(BaseMathTest, TestDistanceBetweenPoints) { const double kLAX_lat = 33.944066; const double kLAX_lng = -118.408294; const double kJFK_lat = 40.642480; const double kJFK_lng = -73.788071; // The known great circle distance in meters between LAX and JFK. const double kDistance = 3970683.0; double d = DistanceBetweenPoints(kLAX_lat, kLAX_lng, kJFK_lat, kJFK_lng); ASSERT_NEAR(kDistance, d, 0.1); } TEST(BaseMathTest, TestDistanceBetweenPoints3d) { ASSERT_DOUBLE_EQ(0.0, DistanceBetweenPoints3d(0,0,0,0,0,0)); ASSERT_DOUBLE_EQ(1.0, DistanceBetweenPoints3d(0,0,0,0,0,1)); ASSERT_DOUBLE_EQ(1000.0, DistanceBetweenPoints3d(0,0,0,0,0,1000)); // Assert the 2d example works here. double expected = 3970683.0; ASSERT_NEAR(expected, DistanceBetweenPoints3d(33.944066, -118.408294, 0, 40.642480, -73.788071, 0), 0.1); // Put JFK 10,000 km in the sky: expected = 4094670.171; ASSERT_NEAR(expected, DistanceBetweenPoints3d(33.944066, -118.408294, 0, 40.642480, -73.788071, 1000000.0), 0.1); } TEST(BaseMathTest, TestElevationBetweenPoints) { double lat_from = 0; double lng_from = 0; double alt_from = 0; double lat_to = 0.0000000000001; double lng_to = 0.0000000000001; // This is basically a flat line. double alt_to = 0.0; ASSERT_NEAR( 0.0, ElevationBetweenPoints(lat_from, lng_from, alt_from, lat_to, lng_to, alt_to), 0.001); // Near-vertical. alt_to = 10000; ASSERT_NEAR( 90.0, ElevationBetweenPoints(lat_from, lng_from, alt_from, lat_to, lng_to, alt_to), 0.001); lat_to = 0.145; alt_to = 609.6; ASSERT_NEAR( 2.1667, ElevationBetweenPoints(lat_from, lng_from, alt_from, lat_to, lng_to, alt_to), 0.001); lat_from = 37.0; lng_from = -121.98; alt_from = 600; lat_to = 37.0; lng_to = -122.0; alt_to = 200; ASSERT_NEAR( -12.7004, ElevationBetweenPoints(lat_from, lng_from, alt_from, lat_to, lng_to, alt_to), 0.001); } TEST(BaseMathTest, TestLatLngOnRadialFromPoint) { // See http://williams.best.vwh.net/avform.htm#Example // Coordinates of LAX. const double kLAX_lat = 33.944066; const double kLAX_lng = -118.408294; // A distance and radial. const double kDistance = 185200.0; const double kRadial = 66.0; // The known-accurate coordinates of the point along that radial from LAX. const double kRadial_lat = 34.608154; const double kRadial_lng = -116.558327; Vec3 v = LatLngOnRadialFromPoint(kLAX_lat, kLAX_lng, kDistance, kRadial); ASSERT_NEAR(kRadial_lat, v.get_latitude(), 0.000001); ASSERT_NEAR(kRadial_lng, v.get_longitude(), 0.000001); } // Tests the GroundDistanceFromRangeAndElevation() function. TEST(BaseMathTest, TestGroundDistanceFromRangeAndElevation) { ASSERT_NEAR(100.0, GroundDistanceFromRangeAndElevation(100.0, 0.0), 0.000001); ASSERT_NEAR(99.939083, GroundDistanceFromRangeAndElevation(100.0, 2.0), 0.000001); ASSERT_NEAR(17.364818, GroundDistanceFromRangeAndElevation(100.0, 80.0), 0.000001); ASSERT_NEAR(0.0, GroundDistanceFromRangeAndElevation(100.0, 90.0), 0.000001); ASSERT_NEAR(17.364818, GroundDistanceFromRangeAndElevation(100.0, 100.0), 0.000001); } // Tests the HeightFromRangeAndElevation() function. TEST(BaseMathTest, TestHeightFromRangeAndElevation) { ASSERT_NEAR(0.0, HeightFromRangeAndElevation(100.0, 0.0), 0.000001); ASSERT_NEAR(3.489950, HeightFromRangeAndElevation(100.0, 2.0), 0.000001); ASSERT_NEAR(98.480775, HeightFromRangeAndElevation(100.0, 80.0), 0.000001); ASSERT_NEAR(100.0, HeightFromRangeAndElevation(100.0, 90.0), 0.000001); ASSERT_NEAR(98.480775, HeightFromRangeAndElevation(100.0, 100.0), 0.000001); } // Tese test the conversion functions. TEST(BaseMathTest, TestDegToRad) { ASSERT_DOUBLE_EQ(0.0, DegToRad(0.0)); ASSERT_DOUBLE_EQ(M_PI, DegToRad(180.0)); ASSERT_DOUBLE_EQ(M_PI / 2, DegToRad(90.0)); ASSERT_DOUBLE_EQ(M_PI / -2, DegToRad(-90.0)); } TEST(BaseMathTest, TestRadToDeg) { ASSERT_DOUBLE_EQ(0.0, RadToDeg(0)); ASSERT_DOUBLE_EQ(360.0, RadToDeg(2 * M_PI)); ASSERT_DOUBLE_EQ(90.0, RadToDeg(M_PI / 2)); ASSERT_DOUBLE_EQ(-90.0, RadToDeg(M_PI / -2)); } TEST(BaseMathTest, TestMetersToRadians) { ASSERT_DOUBLE_EQ(0, MetersToRadians(0)); ASSERT_DOUBLE_EQ(1, MetersToRadians(6366710)); } TEST(BaseMathTest, TestRadiansToMeters) { ASSERT_DOUBLE_EQ(0, RadiansToMeters(0)); ASSERT_DOUBLE_EQ(6366710, RadiansToMeters(1)); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/net_cache_test.cc000066400000000000000000000266531263603257100211240ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/base/net_cache.h" // Uncomment this #define to enable output of timing results. // #define PRINT_TIME_RESULTS #ifdef PRINT_TIME_RESULTS #include #endif #include "kml/base/memory_file.h" #include "kml/base/net_cache_test_util.h" #include "kml/base/referent.h" #include "gtest/gtest.h" namespace kmlbase { static const size_t kSize0 = 0; static const size_t kSize1 = 1; // This NetCache uses TestDataNetFetcher which maps each URL path to a file // under testdata. The CacheItem is a MemoryFile which holds the file content. const size_t kTestDataNetCacheSize = 10; typedef NetCache TestDataNetCache; // This NetCache CacheItem is an empty which saves no data, however an // empty string indicates that no NullCacheItem is to be created. class NullCacheItem : public Referent { public: static NullCacheItem* CreateFromString(const string& data) { return data.empty() ? NULL : new NullCacheItem; } }; typedef boost::intrusive_ptr NullCacheItemPtr; // This NetCache CacheItem has instrumentation to track creation/deletion. static size_t instrumented_cache_item_count; class InstrumentedCacheItem : public Referent { public: static InstrumentedCacheItem* CreateFromString(const string& data) { return new InstrumentedCacheItem(data); } const string& get_content() const { return content_; } private: InstrumentedCacheItem(const string& content) : content_(content) { ++instrumented_cache_item_count; } ~InstrumentedCacheItem() { --instrumented_cache_item_count; } string content_; }; typedef boost::intrusive_ptr InstrumentedCacheItemPtr; // Since the default NetFetcher always returns false this cache will never // accept content. The size is set to non-zero to verify that cache internal // limits are not the limiter for this behavior. const size_t kNullNetCacheSize = 1; typedef NetCache NullNetCache; // This NetFetcher simply sets the output data to the url itself. class UrlDataNetFetcher : public NetFetcher { public: bool FetchUrl(const string& url, string* data) const { if (data) { *data = url; return true; } return false; } }; // This NetCache essentially maps each URL to a MemoryFile // whose content is that URL. const size_t kUrlDataNetCacheSize = 1234; typedef NetCache UrlDataNetCache; class NetCacheTest : public testing::Test { protected: virtual void SetUp() { null_net_cache_.reset(new NullNetCache(&null_net_fetcher_, kNullNetCacheSize)); testdata_net_cache_.reset(new TestDataNetCache(&testdata_net_fetcher_, kTestDataNetCacheSize)); url_data_net_cache_.reset(new UrlDataNetCache(&url_data_net_fetcher_, kUrlDataNetCacheSize)); } NetFetcher null_net_fetcher_; boost::scoped_ptr null_net_cache_; TestDataNetFetcher testdata_net_fetcher_; boost::scoped_ptr testdata_net_cache_; UrlDataNetFetcher url_data_net_fetcher_; boost::scoped_ptr url_data_net_cache_; }; // Verify very basic usage of the Size() method. TEST_F(NetCacheTest, TestBasicSize) { ASSERT_TRUE(kNullNetCacheSize >= null_net_cache_->Size()); } // Verify basic usage of the Fetch() method. TEST_F(NetCacheTest, TestBasicFetch) { const string kUrl("http://host.com/style/simple.kml"); // Fetch always fails on NullNetCache. ASSERT_FALSE(null_net_cache_->Fetch(kUrl)); ASSERT_EQ(kSize0, null_net_cache_->Size()); // Fetch of a valid testdata path succeeds. ASSERT_TRUE(testdata_net_cache_->Fetch(kUrl)); // TODO read the test file directly and compare content ASSERT_EQ(static_cast(1), testdata_net_cache_->Size()); // Fetch on UrlDataNetCache returns URL. ASSERT_EQ(kUrl, url_data_net_cache_->Fetch(kUrl)->get_content()); ASSERT_EQ(static_cast(1), url_data_net_cache_->Size()); } // Verify basic usage of the LookUp() method. TEST_F(NetCacheTest, TestBasicLookUp) { const string kUrl("http://host.com/style/simple.kml"); // Verify that initially all caches return false for a LookUp of this URL. ASSERT_FALSE(null_net_cache_->LookUp(kUrl)); ASSERT_FALSE(testdata_net_cache_->LookUp(kUrl)); ASSERT_FALSE(url_data_net_cache_->LookUp(kUrl)); // Fetch this URL into the cache in those caches that save content. ASSERT_TRUE(testdata_net_cache_->Fetch(kUrl)); ASSERT_TRUE(url_data_net_cache_->Fetch(kUrl)); // Verify that these caches return true now on LookUp. ASSERT_TRUE(testdata_net_cache_->LookUp(kUrl)); ASSERT_TRUE(url_data_net_cache_->LookUp(kUrl)); } // Verify basic usage of the Save() method. TEST_F(NetCacheTest, TestBasicSave) { const string kUrl("http://host.com/style/simple.kml"); const string kContent("some random blob of data"); MemoryFilePtr test_data_item = MemoryFile::CreateFromString(kContent); ASSERT_TRUE(url_data_net_cache_->Save(kUrl, test_data_item)); ASSERT_EQ(static_cast(1), url_data_net_cache_->Size()); ASSERT_TRUE(url_data_net_cache_->LookUp(kUrl)); ASSERT_EQ(kContent, url_data_net_cache_->Fetch(kUrl)->get_content()); } // Verify basic usage of the Delete() method. TEST_F(NetCacheTest, TestBasicDelete) { const string kUrl("http://host.com/style/simple.kml"); ASSERT_TRUE(url_data_net_cache_->Fetch(kUrl)); ASSERT_TRUE(url_data_net_cache_->Delete(kUrl)); ASSERT_EQ(kSize0, url_data_net_cache_->Size()); ASSERT_FALSE(url_data_net_cache_->LookUp(kUrl)); } // Verify basic usage of the RemoveOldest method. TEST_F(NetCacheTest, TestBasicRemoveOldest) { const string kUrl("http://host.com/style/simple.kml"); ASSERT_TRUE(url_data_net_cache_->Fetch(kUrl)); ASSERT_TRUE(url_data_net_cache_->RemoveOldest()); ASSERT_EQ(kSize0, url_data_net_cache_->Size()); ASSERT_FALSE(url_data_net_cache_->LookUp(kUrl)); } // TODO move to base/string_util.h template inline string ToString(T value) { std::stringstream ss; ss.precision(15); ss << value; return ss.str(); } // Verify that the NetCache never exceeds the maximum configured size and // that it drains fully. TEST_F(NetCacheTest, TestOverflow) { for (size_t i = 0; i < kUrlDataNetCacheSize*2; ++i) { const string kUrl("http://host.com/" + ToString(i)); MemoryFilePtr url_data = url_data_net_cache_->Fetch(kUrl); ASSERT_TRUE(url_data); // UrlDataNetFetcher never fails. // UrlDataNetFetcher simply uses the url as the content. ASSERT_EQ(kUrl, url_data->get_content()); // The most recently Fetch()'ed url is guaranteed to bein the cache. ASSERT_TRUE(url_data_net_cache_->LookUp(kUrl)); const size_t want_size = i < kUrlDataNetCacheSize ? i + 1 : kUrlDataNetCacheSize; ASSERT_EQ(want_size, url_data_net_cache_->Size()); } // Cache is full so LookUp will succeed on all URLs in the 2nd half of the // the test range. for (size_t i = kUrlDataNetCacheSize; i < kUrlDataNetCacheSize*2; ++i) { const string kUrl("http://host.com/" + ToString(i)); ASSERT_TRUE(url_data_net_cache_->LookUp(kUrl)); } // RemoveOldest() removes items one at a time. for (size_t i = 0; i < kUrlDataNetCacheSize; ++i) { ASSERT_TRUE(url_data_net_cache_->RemoveOldest()); ASSERT_EQ(kUrlDataNetCacheSize - i - 1, url_data_net_cache_->Size()); } // Cache is empty so LookUp will fail on all URLs. for (size_t i = 0; i < kUrlDataNetCacheSize*2; ++i) { const string kUrl("http://host.com/" + ToString(i)); ASSERT_FALSE(url_data_net_cache_->LookUp(kUrl)); } // At size 0 RemoveOldest returns false. ASSERT_EQ(kSize0, url_data_net_cache_->Size()); ASSERT_FALSE(url_data_net_cache_->RemoveOldest()); } // Verify that destruction of the cache destroys all items in the cache. TEST_F(NetCacheTest, TestDeleteCache) { // Verify proper operation of the internal InstrumentedCacheItem class. ASSERT_EQ(kSize0, instrumented_cache_item_count); const string kContent("some random stuf"); InstrumentedCacheItemPtr item = InstrumentedCacheItem::CreateFromString(kContent); ASSERT_EQ(kContent, item->get_content()); ASSERT_EQ(kSize1, instrumented_cache_item_count); item = NULL; // Forces delete of object managed by intrusive_ptr. ASSERT_EQ(kSize0, instrumented_cache_item_count); { NetCache net_cache(&url_data_net_fetcher_, kUrlDataNetCacheSize); ASSERT_EQ(kSize0, instrumented_cache_item_count); for (size_t i = 0; i < kUrlDataNetCacheSize*2; ++i) { const string kUrl("http://host.com/" + ToString(i)); InstrumentedCacheItemPtr url_data = net_cache.Fetch(kUrl); const size_t want_size = i < kUrlDataNetCacheSize ? i + 1 : kUrlDataNetCacheSize; ASSERT_EQ(want_size, instrumented_cache_item_count); ASSERT_EQ(want_size, net_cache.Size()); } ASSERT_TRUE(net_cache.RemoveOldest()); ASSERT_EQ(kUrlDataNetCacheSize - 1, instrumented_cache_item_count); ASSERT_EQ(kUrlDataNetCacheSize - 1, net_cache.Size()); } // End of scope deletes net_cache_ and all CacheItems ASSERT_EQ(kSize0, instrumented_cache_item_count); } #ifdef PRINT_TIME_RESULTS // This is a simple timing test to estimate when the cache_count_ rolls over. // On a near-zero-latency network such as the one faked in UrlDataNetFetcher's // FetchUrl (which does no I/O at all) the elapsed time below is 22 seconds on // 2.33 Ghz Intel Core 2 Duo on a MacBook Pro. TEST_F(NetCacheTest, TimingTest) { time_t start = time(NULL); const int count = 1000000; for (int i = 0; i < count; ++i) { ASSERT_TRUE(url_data_net_cache_->Fetch(ToString(i))); } time_t elapsed = time(NULL) - start; std::cerr << count << " Fetch's in " << elapsed << " seconds" << std::endl; // ISO/IEC 988:1999 7.18.2.1 #define UINT64_MAX 18446744073709551615ULL std::cerr << "Seconds to roll over " << (UINT64_MAX/count)*elapsed << std::endl; } #endif } // end namespace kmlengine libkml-1.3.0/tests/kml/base/net_cache_test_util.h000066400000000000000000000054331263603257100220140ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains some utility classes for use with NetCache unit tests. #ifndef KML_BASE_NET_CACHE_TEST_UTIL_H__ #define KML_BASE_NET_CACHE_TEST_UTIL_H__ #include "boost/scoped_ptr.hpp" #include "kml/base/file.h" #include "kml/base/net_cache.h" #include "kml/base/uri_parser.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlbase { // This NetFetcher maps the URI path to the testdata directory. The scheme // and host are ignored. class TestDataNetFetcher : public NetFetcher { public: bool FetchUrl(const string& url, string* data) const { boost::scoped_ptr uri_parser( UriParser::CreateFromParse(url.c_str())); string path; // If the URI parse succeeds, and a data buffer was provided, and the // URI has a path, and the file system read succeeds return true. return uri_parser.get() && data && uri_parser->GetPath(&path) && kmlbase::File::ReadFileToString(kmlbase::File::JoinPaths(DATADIR, path), data); } }; } // end namespace kmlbase #endif // KML_BASE_NET_CACHE_TEST_UTIL_H__ libkml-1.3.0/tests/kml/base/referent_test.cc000066400000000000000000000175671263603257100210310ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the Referent class and the // functions used by boost::intrusive_ptr. #include "kml/base/referent.h" #include #include "boost/intrusive_ptr.hpp" #include "gtest/gtest.h" namespace kmlbase { class ReferentTest : public testing::Test { protected: virtual void SetUp() { derived_ = new Derived; } // This forward declaration is for the benefit of the typedef. class Derived; typedef boost::intrusive_ptr DerivedPtr; // This is a test class for excercising expected usage scenarios of the // Referent class. class Derived : public Referent { public: void set_child(DerivedPtr child) { child_ = child; } void clear_child() { child_ = NULL; } DerivedPtr child() const { return child_; } // This method avoids returning child_ by value for tests that just // wish to verify the ref count of the child. The act of calling // child() introduces yet another value and reference. // This is valid to call only if Derived has a child. int child_ref_count() const { return child_->get_ref_count(); } private: DerivedPtr child_; }; DerivedPtr derived_; void FuncByValue(DerivedPtr d, int expected_ref_count); void FuncByReference(DerivedPtr& d, int expected_ref_count); }; // This test the methods of the Referent class itself. TEST_F(ReferentTest, TestReferent) { Referent referent; // Without intrusive_ptr nothing increases the ref count. // This verifies the initial state of the Referent class. ASSERT_EQ(0, referent.get_ref_count()); // The add_ref() method increments the reference count. referent.add_ref(); ASSERT_EQ(1, referent.get_ref_count()); referent.add_ref(); ASSERT_EQ(2, referent.get_ref_count()); // The release method decrements the reference count. referent.release(); ASSERT_EQ(1, referent.get_ref_count()); } // This tests the intrusive_ptr_add_ref() and intrusive_ptr_release() // functions used by boost::intrusive_ptr. TEST_F(ReferentTest, TestIntrusivePointerFunctions) { Referent* referent = new Referent(); EXPECT_EQ(0, referent->get_ref_count()); intrusive_ptr_add_ref(referent); EXPECT_EQ(1, referent->get_ref_count()); intrusive_ptr_add_ref(referent); EXPECT_EQ(2, referent->get_ref_count()); //coverity [freed_arg] intrusive_ptr_release(referent); //coverity [deref_arg] EXPECT_EQ(1, referent->get_ref_count()); // This deletes referent: intrusive_ptr_release(referent); referent = NULL; } TEST_F(ReferentTest, TestDelete) { // setUp created on instance of Derived. ASSERT_EQ(1, derived_->get_ref_count()); { // Copy the pointer and verify that both see the same underlying object and // use count. DerivedPtr copy = derived_; ASSERT_EQ(copy.get(), derived_.get()); ASSERT_EQ(2, derived_->get_ref_count()); ASSERT_EQ(2, copy->get_ref_count()); } // copy is now out of scope so use count is back to 1 ASSERT_EQ(1, derived_->get_ref_count()); } TEST_F(ReferentTest, TestVector) { const int kCount = 101; { std::vector derived_vec; int n = kCount; while (n--) { // STL vector makes a copy of the smart pointer hence bumps ref count. derived_vec.push_back(derived_); ASSERT_EQ(kCount - n + 1, derived_->get_ref_count()); } // End of scope of vector deletes all vector members. } // derived_vec is now out of scope so use count is back to 1 ASSERT_EQ(1, derived_->get_ref_count()); } // Helper function for TestFunc(). This verifies that passing a DerivedPtr // by value increases the reference count. void ReferentTest::FuncByValue(DerivedPtr d, int expected_ref_count) { ASSERT_EQ(expected_ref_count, derived_->get_ref_count()); ASSERT_EQ(d.get(), derived_.get()); } // Helper function for TestFunc(). This verifies that passing a DerivedPtr // by reference does not increase the reference count. void ReferentTest::FuncByReference(DerivedPtr& d, int expected_ref_count) { ASSERT_EQ(1, derived_->get_ref_count()); ASSERT_EQ(d.get(), derived_.get()); } // This verifies Referent's reference count is proper for pass by value // and pass by reference. TEST_F(ReferentTest, TestFunc) { // Verify initial conditions: ASSERT_EQ(1, derived_->get_ref_count()); // Pass a boost::intrusive_ptr by value thus increasing the reference count. FuncByValue(derived_, 2); // Pass by value now out of scope to reference count back to where it was: ASSERT_EQ(1, derived_->get_ref_count()); // Pass by reference does not increase the reference count. FuncByReference(derived_, 1); } // This test verifies that giving a given child object to a parent increments // the reference count. TEST_F(ReferentTest, TestBasicParentChild) { Derived* bare_pointer; { DerivedPtr child = new Derived; bare_pointer = child.get(); // Verify that adding this child to the parent increments the reference // count. derived_->set_child(child); ASSERT_EQ(2, child->get_ref_count()); // Verify that deleting this child from the parent decrements the reference // count. derived_->clear_child(); ASSERT_EQ(1, child->get_ref_count()); // Set it to the the parent again. derived_->set_child(child); ASSERT_EQ(2, child->get_ref_count()); // End scope for child. } // The parent now owns the only reference. ASSERT_EQ(bare_pointer, derived_->child().get()); ASSERT_EQ(1, derived_->child_ref_count()); } // This verifies that holding a reference to a child of a given parent is still // valid even after the parent is destroyed. TEST_F(ReferentTest, TestGetChild) { // Verify initial conditions: test fixture is only owner of object. ASSERT_EQ(1, derived_->get_ref_count()); // Introduce a block to own child. { DerivedPtr child; // Introduce a block to own parent. { DerivedPtr parent = new Derived; parent->set_child(derived_); child = parent->child(); ASSERT_EQ(derived_, parent->child()); // ReferentTest derived_, child, and child_ within parent. ASSERT_EQ(3, parent->child_ref_count()); // parent now goes out of scope and is destroyed releasing its reference // to the child. } // child is now the only user of the object. ASSERT_EQ(2, child->get_ref_count()); } // Only the test fixture refers to the object. ASSERT_EQ(1, derived_->get_ref_count()); // The object is released when child goes out of scope. } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/string_util_test.cc000066400000000000000000000302331263603257100215430ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/base/string_util.h" #include "gtest/gtest.h" namespace kmlbase { TEST(StringUtilTest, Testb2a_hex) { const uint32_t k00 = 0x00; const uint32_t kff = 0xff; const char* e = "00"; static char a[2]; b2a_hex(k00, a); ASSERT_EQ(0, strcmp(e, a)); e = "ff"; b2a_hex(kff, a); ASSERT_EQ(0, strcmp(e, a)); } TEST(StringUtilTest, TestBasicReplacements) { StringMap sm; sm["old"] = "new"; sm["one"] = "two"; string in("old{old}old one{one}one"); // Verify that supplying neither start nor end terminators produces a simple // key-value replacement. string expected("new{new}new two{two}two"); ASSERT_EQ(expected, CreateExpandedStrings(in, sm, "", "")); // Verify that specifying either of start or end produces the expected // replacement. const string kStart("{"); const string kEnd("}"); expected = "oldnew}old onetwo}one"; ASSERT_EQ(expected, CreateExpandedStrings(in, sm, kStart, "")); expected = "old{newold one{twoone"; ASSERT_EQ(expected, CreateExpandedStrings(in, sm, "", kEnd)); expected = "oldnewold onetwoone"; ASSERT_EQ(expected, CreateExpandedStrings(in, sm, kStart, kEnd)); // Verify that the replacement logic is well-behaved in the presence of // multiple start/end delimiters. in = "{{{old}}}}{}{one}"; expected = "{{new}}}{}two"; ASSERT_EQ(expected, CreateExpandedStrings(in, sm, kStart, kEnd)); } // Verify that a replacement value containing its key doesn't cause an // infinite loop in CreateExpandedStrings. TEST(StringUtilTest, TestReplacementValueContainsKey) { StringMap sm; sm["description"] = "abcdefghi012345$[description]"; const string kIn("abcdefghi012345$[description]"); const string kExpected("abcdefghi012345abcdefghi012345$[description]"); ASSERT_EQ(kExpected, CreateExpandedStrings(kIn, sm, "$[", "]")); } TEST(StringUtilTest, TestSplitStringUsing) { const string kHi("hi"); const string kHow("how"); const string kAre("are"); const string kYou("you"); const string kSep("|"); const string kCsvLine(kHi + kSep + kHow + kSep + kAre + kSep + kYou); std::vector parts; // A line with no separator gets one thing. Special case of the "last" item // on a line. SplitStringUsing(kHi, "|", &parts); ASSERT_EQ(static_cast(1), parts.size()); // A line with 3 separators gets you 4 things. parts.clear(); SplitStringUsing(kCsvLine, "|", &parts); ASSERT_EQ(static_cast(4), parts.size()); ASSERT_EQ(kHi, parts[0]); ASSERT_EQ(kHow, parts[1]); ASSERT_EQ(kAre, parts[2]); ASSERT_EQ(kYou, parts[3]); } class ThingMappingStrings { public: void AddMapping(const string& key, const string& value) { map_[key] = value; } StringMapIterator CreateIterator () { return StringMapIterator(map_); } private: StringMap map_; }; // Verity the StringMapIterator class. TEST(StringUtiltest, TestStringMapIterator) { std::map map; ThingMappingStrings thing; const string k0("a"); const string v0("b"); const string k1("c"); const string v1("d"); const string k2("z"); const string v2("q"); thing.AddMapping(k0, v0); map[k0] = v0; thing.AddMapping(k1, v1); map[k1] = v1; thing.AddMapping(k2, v2); map[k2] = v2; StringMapIterator iter = thing.CreateIterator(); for (; !iter.AtEnd(); iter.Advance()) { ASSERT_EQ(map[iter.Data().first], iter.Data().second); } } // Verify the FromString function template. TEST(StringUtilTest, TestFromString) { double pi; FromString("3.1415926535", &pi); ASSERT_EQ(3.1415926535, pi); bool val; FromString("true", &val); ASSERT_TRUE(val); FromString("1", &val); ASSERT_TRUE(val); FromString("1\n", &val); ASSERT_TRUE(val); FromString("\n1\n", &val); ASSERT_TRUE(val); FromString("false", &val); ASSERT_FALSE(val); FromString("\nfalse", &val); ASSERT_FALSE(val); FromString("false\n", &val); ASSERT_FALSE(val); FromString("\nfalse\n", &val); ASSERT_FALSE(val); FromString("0", &val); ASSERT_FALSE(val); int fsc; FromString("137", &fsc); ASSERT_EQ(137, fsc); } // Verify the ToString function template. TEST(StringUtilTest, TestToString) { ASSERT_EQ(string("3.1415926535"), ToString(3.1415926535)); ASSERT_EQ(string("1"), ToString(1)); ASSERT_EQ(string("-42"), ToString(-42)); ASSERT_EQ(string("1"), ToString(true)); ASSERT_EQ(string("0"), ToString(false)); } TEST(StringUtilTest, TestEndsWith) { ASSERT_TRUE(StringEndsWith("foo", "oo")); ASSERT_FALSE(StringEndsWith("foo", "x")); ASSERT_FALSE(StringEndsWith("foo", "ooooo")); string empty; ASSERT_FALSE(StringEndsWith(empty, empty)); ASSERT_FALSE(StringEndsWith("foo", empty)); ASSERT_FALSE(StringEndsWith(empty, "foo")); ASSERT_TRUE(StringEndsWith("foo", "foo")); } TEST(StringUtilTest, TestStringCaseEqual) { ASSERT_TRUE(StringCaseEqual("foo", "Foo")); ASSERT_TRUE(StringCaseEqual("foo", "fOO")); ASSERT_TRUE(StringCaseEqual("FOO", "Foo")); ASSERT_TRUE(StringCaseEqual("foo", "foo")); ASSERT_TRUE(StringCaseEqual("FOO", "FOO")); ASSERT_TRUE(StringCaseEqual("THIS SOFTWARE IS", "This software is")); ASSERT_FALSE(StringCaseEqual("this", "is not this")); ASSERT_FALSE(StringCaseEqual("this ", "this")); ASSERT_FALSE(StringCaseEqual("this ", " this")); } TEST(StringUtilTest, TestStringToDouble) { double val; ASSERT_TRUE(StringToDouble("3.1415", &val)); ASSERT_TRUE(StringToDouble("3.1415", NULL)); ASSERT_DOUBLE_EQ(3.1415, val); ASSERT_TRUE(StringToDouble("52.566571", &val)); ASSERT_TRUE(StringToDouble("52.566571", NULL)); ASSERT_DOUBLE_EQ(52.566571, val); ASSERT_TRUE(StringToDouble("-1.680006", &val)); ASSERT_TRUE(StringToDouble("-1.680006", NULL)); ASSERT_DOUBLE_EQ(-1.680006, val); ASSERT_TRUE(StringToDouble(".1", &val)); ASSERT_TRUE(StringToDouble(".1", NULL)); ASSERT_DOUBLE_EQ(.1, val); } TEST(StringUtilTest, TestIsDecimalDoubleString) { // Empty string doesn't crash and returns false. ASSERT_FALSE(IsDecimalDoubleString("")); const string empty; ASSERT_FALSE(IsDecimalDoubleString(empty.data())); // Leading space not allowed. ASSERT_FALSE(IsDecimalDoubleString(" 123")); ASSERT_FALSE(IsDecimalDoubleString("\t123")); ASSERT_FALSE(IsDecimalDoubleString("\n123")); ASSERT_FALSE(IsDecimalDoubleString("\r123")); // Leading printable not allowed. ASSERT_FALSE(IsDecimalDoubleString("x123")); ASSERT_FALSE(IsDecimalDoubleString("b123")); ASSERT_FALSE(IsDecimalDoubleString(",123")); // Lack of digit after - and/or . not allowed. ASSERT_FALSE(IsDecimalDoubleString(".")); ASSERT_FALSE(IsDecimalDoubleString(".-")); ASSERT_FALSE(IsDecimalDoubleString(".-5")); ASSERT_FALSE(IsDecimalDoubleString("..5")); ASSERT_FALSE(IsDecimalDoubleString("-")); ASSERT_FALSE(IsDecimalDoubleString("--2")); ASSERT_FALSE(IsDecimalDoubleString("-.")); ASSERT_FALSE(IsDecimalDoubleString("--.")); ASSERT_FALSE(IsDecimalDoubleString("-.z")); // [-][.][0123456789] allowed. ASSERT_TRUE(IsDecimalDoubleString("123")); ASSERT_TRUE(IsDecimalDoubleString(".123")); ASSERT_TRUE(IsDecimalDoubleString("-123")); ASSERT_TRUE(IsDecimalDoubleString("-.123")); ASSERT_TRUE(IsDecimalDoubleString("-123.123")); } TEST(StringUtilTest, TestSkipWhitespace) { const string kSpaceHello(" hello"); ASSERT_EQ(static_cast(1), SkipLeadingWhitespace(kSpaceHello.data(), kSpaceHello.data() + kSpaceHello.size())); const string kNlHello("\nhello"); ASSERT_EQ(static_cast(1), SkipLeadingWhitespace(kNlHello.data(), kNlHello.data() + kNlHello.size())); const string kCrHello("\rhello"); ASSERT_EQ(static_cast(1), SkipLeadingWhitespace(kCrHello.data(), kCrHello.data() + kCrHello.size())); const string kTabHello("\thello"); ASSERT_EQ(static_cast(1), SkipLeadingWhitespace(kTabHello.data(), kTabHello.data() + kTabHello.size())); const string kWsHello("\r \t \n hello"); ASSERT_EQ(static_cast(7), SkipLeadingWhitespace(kWsHello.data(), kWsHello.data() + kWsHello.size())); } TEST(StringUtilTest, TestSplitQuotedUsing) { const string kStuff("\"a\",\"b\",\"c\""); std::vector output; SplitQuotedUsingFromString(kStuff, ',', &output); ASSERT_EQ(static_cast(3), output.size()); ASSERT_EQ(string("a"), output[0]); ASSERT_EQ(string("b"), output[1]); ASSERT_EQ(string("c"), output[2]); const string kStuffDq("\"a,a\",\"b\"\"\",\"c\""); output.clear(); SplitQuotedUsingFromString(kStuffDq, ',', &output); ASSERT_EQ(static_cast(3), output.size()); ASSERT_EQ(string("a,a"), output[0]); ASSERT_EQ(string("b\""), output[1]); ASSERT_EQ(string("c"), output[2]); const string kUnbalanced("\"a\"junk,b,c"); output.clear(); SplitQuotedUsingFromString(kUnbalanced, ',', &output); output.clear(); SplitQuotedUsingFromString("a", ',', &output); ASSERT_EQ(static_cast(1), output.size()); ASSERT_EQ(string("a"), output[0]); output.clear(); SplitQuotedUsingFromString("\"b,b\"", ',', &output); ASSERT_EQ(static_cast(1), output.size()); ASSERT_EQ(string("b,b"), output[0]); output.clear(); SplitQuotedUsingFromString("\"c\"\"x\"\"", ',', &output); ASSERT_EQ(static_cast(1), output.size()); ASSERT_EQ(string("c\"x\""), output[0]); output.clear(); SplitQuotedUsingFromString("\"c\"\"x\"\"", ',', &output); ASSERT_EQ(static_cast(1), output.size()); ASSERT_EQ(string("c\"x\""), output[0]); const string kDqAndNot("a,\"b,b\",\"c\"\"x\"\""); output.clear(); SplitQuotedUsingFromString(kDqAndNot, ',', &output); ASSERT_EQ(static_cast(3), output.size()); ASSERT_EQ(string("a"), output[0]); ASSERT_EQ(string("b,b"), output[1]); ASSERT_EQ(string("c\"x\""), output[2]); output.clear(); SplitQuotedUsingFromString("a,b,c", ',', &output); ASSERT_EQ(static_cast(3), output.size()); ASSERT_EQ(string("a"), output[0]); ASSERT_EQ(string("b"), output[1]); ASSERT_EQ(string("c"), output[2]); output.clear(); SplitQuotedUsingFromString("a,,c", ',', &output); ASSERT_EQ(static_cast(3), output.size()); ASSERT_EQ(string("a"), output[0]); ASSERT_TRUE(output[1].empty()); ASSERT_EQ(string("c"), output[2]); output.clear(); SplitQuotedUsingFromString(",,", ',', &output); ASSERT_EQ(static_cast(3), output.size()); ASSERT_TRUE(output[0].empty()); ASSERT_TRUE(output[1].empty()); ASSERT_TRUE(output[2].empty()); output.clear(); SplitQuotedUsingFromString("a,b,c,", ',', &output); ASSERT_EQ(static_cast(4), output.size()); ASSERT_EQ(string("a"), output[0]); ASSERT_EQ(string("b"), output[1]); ASSERT_EQ(string("c"), output[2]); ASSERT_TRUE(output[3].empty()); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/tempfile_test.cc000066400000000000000000000047521263603257100210140ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/base/tempfile.h" #include "kml/base/file.h" #include "gtest/gtest.h" namespace kmlbase { class TempFileTest : public testing::Test { }; TEST_F(TempFileTest, TestTempFile) { string tempfile_name; // To check successful deletion of tempfile. { TempFilePtr tempfile = TempFile::CreateTempFile(); // The tempfile was created successfully. ASSERT_TRUE(tempfile != 0); // The tempfile has a name. ASSERT_FALSE(tempfile->name().empty()); tempfile_name = tempfile->name(); // The tempfile is accessible. ASSERT_TRUE(File::Exists(tempfile_name)); // We can write and read data. const string s_written("some data"); File::WriteStringToFile(s_written, tempfile_name); string s_read; File::ReadFileToString(tempfile_name, &s_read); ASSERT_EQ(s_written, s_read); } // Use of intrusive_ptr means TempFile's dtor is called at the end of the // block, which deletes the tempfile. ASSERT_FALSE(File::Exists(tempfile_name)); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/time_util_test.cc000066400000000000000000000055321263603257100211770ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Uncomment this #define to enable output of timing results. // #define PRINT_TIME_RESULTS #ifdef PRINT_TIME_RESULTS #include #endif #include "kml/base/time_util.h" #include #include "gtest/gtest.h" namespace kmlbase { class TimeUtilTest : public testing::Test { }; // This verifies the GetMicroTime() function. TEST_F(TimeUtilTest, TestGetMicroTime) { // Get the posix time (second resolution). time_t now = time(NULL); // Get the micro time (microsecond resolution). double later = GetMicroTime(); // Assert that time has passed. ASSERT_PRED_FORMAT2(testing::DoubleLE, static_cast(now), later); // Snapshot the microtime in rapid succession. double even_later = GetMicroTime(); double later_still = GetMicroTime(); // Verify that time does not go backwards. ASSERT_PRED_FORMAT2(testing::DoubleLE, later, even_later); ASSERT_PRED_FORMAT2(testing::DoubleLE, even_later, later_still); // Here are some values 2.16 GHz MacBook Pro running Mac OS X 10.5.3. // now 1215742903 // later 1215742903.291807 // even_later 1215742903.291839 // later_still 1215742903.291839 #ifdef PRINT_TIME_RESULTS std::cerr << now << std::endl; std::cerr.precision(16); std::cerr << later << std::endl; std::cerr << even_later << std::endl; std::cerr << later_still << std::endl; #endif } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/unit_test.h000066400000000000000000000054741263603257100200320ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef KML_BASE_UNIT_TEST_H__ #define KML_BASE_UNIT_TEST_H__ /** * This file provides a simple main() function for running unit tests. * Include this file with any unit test compilation. */ #include #include #include #include #include #include #include #include #define TEST_MAIN int main( int argc, char **argv) {\ /* Create the event manager and test controller */\ CPPUNIT_NS::TestResult controller;\ \ /* Add a listener that colllects test result */\ CPPUNIT_NS::TestResultCollector result;\ controller.addListener(&result);\ \ /* Add a listener that print dots as test run. */\ CPPUNIT_NS::BriefTestProgressListener progress;\ controller.addListener(&progress);\ \ /* Add the top suite to the test runner */\ CPPUNIT_NS::TestRunner runner;\ runner.addTest(CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest());\ runner.run(controller);\ \ /* Print test in a compiler compatible format. */\ CPPUNIT_NS::CompilerOutputter outputter(&result, CPPUNIT_NS::stdCOut());\ outputter.write();\ \ return result.wasSuccessful() ? 0 : 1;\ } #endif // KML_BASE_UNIT_TEST_H__ libkml-1.3.0/tests/kml/base/uri_parser_test.cc000066400000000000000000000400711263603257100213540ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the internal UriParser class. // This is more to test the UriParser interface as the uriparser library has // its own internal unit test suite for its functionality (including example // cases from RFC 3986 itself). // TODO photooverlay $[x] // TODO ;flyTo ,etc #include "kml/base/uri_parser.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" namespace kmlbase { // This test fixture is for the unit test cases of the UriParser class. class UriParserTest : public testing::Test { protected: boost::scoped_ptr uri_parser_; void VerifyUriResolution(const char* base, const char* relative, const char* want_result); }; // Verify basic usage of the CreateFromParse() static method. TEST_F(UriParserTest, TestBasicCreateFromParse) { // Note: since UriParse does not actually generate any networking traffic // the hostnames and TLDs used here generally do not conform to RFC 2606. const string kUrl("http://host.com/path/to/some.kml#id"); uri_parser_.reset(UriParser::CreateFromParse(kUrl.c_str())); ASSERT_TRUE(uri_parser_.get()); string url; ASSERT_TRUE(uri_parser_->ToString(&url)); ASSERT_EQ(kUrl, url); } // Verify basic usage of the CreateResolvedUri() static method. TEST_F(UriParserTest, TestBasicCreateResolvedUri) { const string kHost("http://hi.there.com/"); const string kPath("blah.kml"); const string kBase = kHost + kPath; const string kRelative("images/pretty.jpg"); uri_parser_.reset(UriParser::CreateResolvedUri(kBase.c_str(), kRelative.c_str())); ASSERT_TRUE(uri_parser_.get()); string url; ASSERT_TRUE(uri_parser_->ToString(&url)); ASSERT_EQ(kHost + kRelative, url); } // Verify basic usage of the Parse() method. TEST_F(UriParserTest, TestBasicParse) { const string kUrl("this/is/a/relative/url.kmz/some/file.kml#id"); uri_parser_.reset(new UriParser); ASSERT_TRUE(uri_parser_->Parse(kUrl.c_str())); string url; ASSERT_TRUE(uri_parser_->ToString(&url)); ASSERT_EQ(kUrl, url); } // Verify basic usage of the Normalize() method. TEST_F(UriParserTest, TestBasicNormalize) { const string kUrl("this/../a/relative/url.kmz/../file.kml#id"); const string kNormalized("a/relative/file.kml#id"); uri_parser_.reset(new UriParser); // Parse() does not normalize. ASSERT_TRUE(uri_parser_->Parse(kUrl.c_str())); string url; ASSERT_TRUE(uri_parser_->ToString(&url)); ASSERT_EQ(kUrl, url); // Normalize() normalizes. ASSERT_TRUE(uri_parser_->Normalize()); ASSERT_TRUE(uri_parser_->ToString(&url)); ASSERT_EQ(kNormalized, url); } // Verify basic usage of the Resolve() method. TEST_F(UriParserTest, TestBasicResolve) { const string kBase("http://foo.com/hello/"); const string kRelative("../hi"); const string kResult("http://foo.com/hi"); boost::scoped_ptr base_uri( UriParser::CreateFromParse(kBase.c_str())); boost::scoped_ptr relative_uri( UriParser::CreateFromParse(kRelative.c_str())); uri_parser_.reset(new UriParser); ASSERT_TRUE(uri_parser_->Resolve(*base_uri.get(), *relative_uri.get())); string url; ASSERT_TRUE(uri_parser_->ToString(&url)); ASSERT_EQ(kResult, url); } // Verify basic usage of the ToString() method. TEST_F(UriParserTest, TestBasicToString) { uri_parser_.reset(new UriParser); ASSERT_FALSE(uri_parser_->ToString(NULL)); const string kUrl("a/b/c/d"); ASSERT_TRUE(uri_parser_->Parse(kUrl.c_str())); string url; ASSERT_TRUE(uri_parser_->ToString(&url)); ASSERT_EQ(kUrl, url); } // Verify basic usage of the GetScheme(), GetHost(), GetPort(), GetPath(), // GetQuery(), and GetFragment() methods. TEST_F(UriParserTest, TestBasicGetComponents) { uri_parser_.reset(new UriParser); // Verify NULL uri returns false for all components. ASSERT_FALSE(uri_parser_->GetScheme(NULL)); ASSERT_FALSE(uri_parser_->GetHost(NULL)); ASSERT_FALSE(uri_parser_->GetPort(NULL)); ASSERT_FALSE(uri_parser_->GetPath(NULL)); ASSERT_FALSE(uri_parser_->GetQuery(NULL)); ASSERT_FALSE(uri_parser_->GetFragment(NULL)); // Verify initial state returns false with non-NULL string output arg. string output; ASSERT_FALSE(uri_parser_->GetScheme(&output)); ASSERT_TRUE(output.empty()); ASSERT_FALSE(uri_parser_->GetHost(&output)); ASSERT_TRUE(output.empty()); ASSERT_FALSE(uri_parser_->GetPort(&output)); ASSERT_TRUE(output.empty()); ASSERT_FALSE(uri_parser_->GetPath(&output)); ASSERT_TRUE(output.empty()); ASSERT_FALSE(uri_parser_->GetQuery(&output)); ASSERT_TRUE(output.empty()); ASSERT_FALSE(uri_parser_->GetFragment(&output)); ASSERT_TRUE(output.empty()); // Verify a typical URI. const string kScheme("http"); const string kHost("www.somehost.com"); const string kPath("path/to/some.kml"); const string kUrlNoFragment(kScheme + "://" + kHost + "/" + kPath); const string kFragment("id"); uri_parser_.reset(UriParser::CreateFromParse(kUrlNoFragment.c_str())); // Verify NULL output string returns proper status of component's existence. ASSERT_TRUE(uri_parser_->GetScheme(NULL)); ASSERT_TRUE(uri_parser_->GetHost(NULL)); ASSERT_FALSE(uri_parser_->GetPort(NULL)); ASSERT_TRUE(uri_parser_->GetPath(NULL)); ASSERT_FALSE(uri_parser_->GetQuery(NULL)); ASSERT_FALSE(uri_parser_->GetFragment(NULL)); // Verify output string gets proper result. ASSERT_TRUE(uri_parser_->GetScheme(&output)); ASSERT_EQ(kScheme, output); ASSERT_TRUE(uri_parser_->GetHost(&output)); ASSERT_EQ(kHost, output); ASSERT_TRUE(uri_parser_->GetPath(&output)); ASSERT_EQ(kPath, output); output.clear(); ASSERT_FALSE(uri_parser_->GetFragment(&output)); ASSERT_TRUE(output.empty()); // Verify a URI with fragment. const string kUrlWithFragment(kUrlNoFragment + "#" + kFragment); uri_parser_.reset(UriParser::CreateFromParse(kUrlWithFragment.c_str())); // Verify NULL output string returns proper status of component's existence. ASSERT_TRUE(uri_parser_->GetScheme(NULL)); ASSERT_TRUE(uri_parser_->GetHost(NULL)); ASSERT_FALSE(uri_parser_->GetPort(NULL)); ASSERT_TRUE(uri_parser_->GetPath(NULL)); ASSERT_FALSE(uri_parser_->GetQuery(NULL)); ASSERT_TRUE(uri_parser_->GetFragment(NULL)); // Verify output string gets proper result. ASSERT_TRUE(uri_parser_->GetScheme(&output)); ASSERT_EQ(kScheme, output); ASSERT_TRUE(uri_parser_->GetHost(&output)); ASSERT_EQ(kHost, output); ASSERT_TRUE(uri_parser_->GetPath(&output)); ASSERT_EQ(kPath, output); ASSERT_TRUE(uri_parser_->GetFragment(&output)); ASSERT_EQ(kFragment, output); } // This is a table of URI resolution test cases. The given result is the // proper resolution of the given base with the given relative URI. A "base" // in the context of KML is the URI of the KML file and the "relative" is // something that might appear in an . The unit test suite within // the uriparser library is intended to cover the broad functionality of // that library against the RFC 3986 standard. These unit test cases are // essentially KML-specific examples which all still follow RFC 3986 // (including the ones using KMZ pathnames which is opaque to the RFC 3986 // standard). // TODO: This table does NOT contain some special KMZ handling performed by GE // (which may potentially be left out of libkml). static const struct { const char* base; const char* relative; const char* result; } kUriTestCases[] = { // TODO these first NULL result test cases indicate a need for KML-specific // handling likely elsewhere in libkml. The intention is to keep // UriParser true to the uriparser library. That is, while it is not // directly RFC 3986 valid to resolve against a non-absolute path this // _is_ commonplace and valid in KML. { "x/a.kml", "b.kml", NULL // NOT: "x/b.kml" }, { "a.kml", "b.kml", NULL // NOT: "b.kml" }, { // Note that uriparser requires the base to be absolute (has a scheme). "file://x", "y", "file://x/y" }, { "file:///a.kml", "b.kml", "file:///b.kml" }, { "file://dir/a.kml", "b.kml", "file://dir/b.kml" }, { "http://somehost.net/DIR/path.kml", "/path/starts/with/slash", "http://somehost.net/path/starts/with/slash" }, { "http://somehost.net/DIR/path.kml", "path/does/not/with/slash", "http://somehost.net/DIR/path/does/not/with/slash" }, { "http://web.gaggle.com/cine/me3b/me3b.kml", "../me3b_daily/00.kmz", "http://web.gaggle.com/cine/me3b_daily/00.kmz" }, { // An absolute relative path will just be the result. "http://web.gaggle.com/veho/philly/root/en/philly.kml", "http://web.gaggle.com/veho/philly/philly0/en/mapfinder.kml", "http://web.gaggle.com/veho/philly/philly0/en/mapfinder.kml" }, { "http://web.gaggle.com/veho/philly/root/en/philly.kml", "http://web.gaggle.com/veho/philly/philly0/kart/sat/kml/0.kmz", "http://web.gaggle.com/veho/philly/philly0/kart/sat/kml/0.kmz" }, { "http://web.gaggle.com/vaer/gnrl/loopy/loopster.kml", "loopster/root.kmz", "http://web.gaggle.com/vaer/gnrl/loopy/loopster/root.kmz" }, { "http://web.gaggle.com/cine/me3b_daily/00.kmz", "05.kmz", "http://web.gaggle.com/cine/me3b_daily/05.kmz" }, { // Up outside the KMZ to a normal file. "http://web.gaggle.com/veho/philly/philly0/kart/sat/kml/0.kmz", "../imagery/0_10.jpg", "http://web.gaggle.com/veho/philly/philly0/kart/sat/imagery/0_10.jpg" }, { "http://web.gaggle.com/veho/philly/philly0/kart/sat/kml/0.kmz", "00.kmz", "http://web.gaggle.com/veho/philly/philly0/kart/sat/kml/00.kmz" }, { "http://web.gaggle.com/veho/philly/philly0/kart/sat/kml/0.kmz", "../imagery/0_10.jpg", "http://web.gaggle.com/veho/philly/philly0/kart/sat/imagery/0_10.jpg" }, { "http://web.gaggle.com/vaer/gnrl/loopy/loopster/root.kmz/doc.kml", "level00/0.kml", "http://web.gaggle.com/vaer/gnrl/loopy/loopster/root.kmz/level00/0.kml" }, { "http://web.gaggle.com/vaer/gnrl/loopy/loopster/root.kmz/doc.kml", "level00/0.kml", "http://web.gaggle.com/vaer/gnrl/loopy/loopster/root.kmz/level00/0.kml" }, { "http://web.gaggle.com/vaer/gnrl/loopy/loopster/root.kmz/level00/0.kml", "../level01/02.kml", "http://web.gaggle.com/vaer/gnrl/loopy/loopster/root.kmz/level01/02.kml" }, { "http://web.gaggle.com/vaer/gnrl/loopy/loopster/root.kmz/level01/02.kml", "../level02/020.kml", "http://web.gaggle.com/vaer/gnrl/loopy/loopster/root.kmz/level02/020.kml" }, { // Relative within the same KMZ. "http://web.gaggle.com/vaer/nimbus-now/nrl/loopy/loopster/root.kmz/level02/" "020.kml", "../level03/0202.kml", "http://web.gaggle.com/vaer/nimbus-now/nrl/loopy/loopster/root.kmz/level03/" "0202.kml" }, { // Relative up and over into another KMZ. "http://web.gaggle.com/vaer/nimbus-now/nrl/loopy/loopster/root.kmz/level03/" "0202.kml", "../../images0018.kmz/images/0202.png", "http://web.gaggle.com/vaer/nimbus-now/nrl/loopy/loopster/images0018.kmz/" "images/0202.png" } }; // This is an internal utility to use UriParser::CreateResolvedUri() // to resolve and verify a given test case. void UriParserTest::VerifyUriResolution(const char* base, const char* relative, const char* want_result) { string got_result; if (want_result == NULL) { // We're expecting resolution to fail. ASSERT_EQ(NULL, UriParser::CreateResolvedUri(base, relative)); return; } UriParser *parser = UriParser::CreateResolvedUri(base, relative); parser->ToString(&got_result); delete parser; parser = NULL; ASSERT_EQ(string(want_result), got_result); } // Verify all expected URI resolution test cases. TEST_F(UriParserTest, TestBasicUriResolutionTestCases) { const size_t size = sizeof(kUriTestCases)/sizeof(kUriTestCases[0]); for (size_t i = 0; i < size; ++i) { VerifyUriResolution(kUriTestCases[i].base, kUriTestCases[i].relative, kUriTestCases[i].result); } } static const struct { const char* unix_filename; const char* unix_uri; const char* windows_filename; const char* windows_uri; } kUriFilenameCases[] = { { "/home/libkml/foo.bar", "file:///home/libkml/foo.bar", "C:\\home\\libkml\\foo.bar", "file:///C:/home/libkml/foo.bar" }, { "/this/path has/some spaces in/it", "file:///this/path%20has/some%20spaces%20in/it", "C:\\this\\path has\\some spaces in\\it", "file:///C:/this/path%20has/some%20spaces%20in/it" }, { "some/relative path/to a.file", "some/relative%20path/to%20a.file", "some\\relative path\\to a.file", "some/relative%20path/to%20a.file" } }; TEST_F(UriParserTest, TestUriFilenameConversions) { const size_t size = sizeof(kUriFilenameCases)/sizeof(kUriFilenameCases[0]); for (size_t i = 0; i < size; ++i) { // Unix filename to URI. string unix_uri; ASSERT_TRUE( UriParser::UnixFilenameToUri(kUriFilenameCases[i].unix_filename, &unix_uri)); ASSERT_EQ(string(kUriFilenameCases[i].unix_uri), unix_uri); // Windows filename to URI. string windows_uri; ASSERT_TRUE( UriParser::WindowsFilenameToUri(kUriFilenameCases[i].windows_filename, &windows_uri)); ASSERT_EQ(string(kUriFilenameCases[i].windows_uri), windows_uri); // URI to unix filename. string unix_filename; ASSERT_TRUE(UriParser::UriToUnixFilename(kUriFilenameCases[i].unix_uri, &unix_filename)); ASSERT_EQ(string(kUriFilenameCases[i].unix_filename), unix_filename); // URI to windows filename. string windows_filename; ASSERT_TRUE( UriParser::UriToWindowsFilename(kUriFilenameCases[i].windows_uri, &windows_filename)); ASSERT_EQ(string(kUriFilenameCases[i].windows_filename), windows_filename); } } TEST_F(UriParserTest, TestUriToFilename) { // This simply tests that the ifdef works as expected. string uri; string expected_filename; #ifdef WIN32 uri = "file:///C:/home/libkml/foo.bar"; expected_filename = "C:\\home\\libkml\\foo.bar"; #else uri = "file:///home/libkml/foo.bar"; expected_filename = "/home/libkml/foo.bar"; #endif string filename; ASSERT_TRUE(UriParser::UriToFilename(uri, &filename)); ASSERT_EQ(expected_filename, filename); } TEST_F(UriParserTest, TestFilenameToUri) { // This simply tests that the ifdef works as expected. string filename; string expected_uri; #ifdef WIN32 filename = "C:\\home\\libkml\\foo.bar"; expected_uri = "file:///C:/home/libkml/foo.bar"; #else filename = "/home/libkml/foo.bar"; expected_uri = "file:///home/libkml/foo.bar"; #endif string uri; ASSERT_TRUE(UriParser::FilenameToUri(filename, &uri)); ASSERT_EQ(expected_uri, uri); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/util_test.cc000066400000000000000000000040511263603257100201540ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the util header file. #include "kml/base/util.h" #include "gtest/gtest.h" namespace kmlbase { class UtilTest : public testing::Test { }; TEST_F(UtilTest, TestIntTypedefs) { // Signed. ASSERT_TRUE(1 == sizeof(int8_t)); ASSERT_TRUE(2 == sizeof(int16_t)); ASSERT_TRUE(4 == sizeof(int32_t)); ASSERT_TRUE(8 == sizeof(int64_t)); // Unsigned. ASSERT_TRUE(1 == sizeof(uint8_t)); ASSERT_TRUE(2 == sizeof(uint16_t)); ASSERT_TRUE(4 == sizeof(uint32_t)); ASSERT_TRUE(8 == sizeof(uint64_t)); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/vec3_test.cc000066400000000000000000000116151263603257100200430ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the Vec3 class. #include "kml/base/vec3.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" namespace kmlbase { TEST(Vec3Test, TestConstructEmpty) { Vec3 vec3; ASSERT_EQ(0.0, vec3.get_latitude()); ASSERT_EQ(0.0, vec3.get_longitude()); ASSERT_EQ(0.0, vec3.get_altitude()); ASSERT_FALSE(vec3.has_altitude()); } TEST(Vec3Test, TestConstruct2d) { const double kLatitude(-12.12); const double kLongitude(23.46); Vec3 vec3(kLongitude, kLatitude); ASSERT_EQ(kLatitude, vec3.get_latitude()); ASSERT_EQ(kLongitude, vec3.get_longitude()); ASSERT_EQ(0.0, vec3.get_altitude()); ASSERT_FALSE(vec3.has_altitude()); } TEST(Vec3Test, TestConstruct3d) { const double kLatitude(-12.12); const double kLongitude(23.46); const double kAltitude(54321.0987); Vec3 vec3(kLongitude, kLatitude, kAltitude); ASSERT_EQ(kLatitude, vec3.get_latitude()); ASSERT_EQ(kLongitude, vec3.get_longitude()); ASSERT_EQ(kAltitude, vec3.get_altitude()); ASSERT_TRUE(vec3.has_altitude()); } TEST(Vec3Test, TestSetClearAltitude) { const double kAltitude(54321.0987); Vec3 vec3(1,2); vec3.set_altitude(kAltitude); ASSERT_EQ(kAltitude, vec3.get_altitude()); ASSERT_TRUE(vec3.has_altitude()); vec3.clear_altitude(); ASSERT_EQ(0.0, vec3.get_altitude()); ASSERT_FALSE(vec3.has_altitude()); } TEST(Vec3Test, TestSet3d) { const double k0(0.0); const double k1(1.0); const double k2(2.0); Vec3 vec; vec.set(0, k0); vec.set(1, k1); vec.set(2, k2); ASSERT_EQ(k0, vec.get_longitude()); ASSERT_EQ(k1, vec.get_latitude()); ASSERT_TRUE(vec.has_altitude()); ASSERT_EQ(k2, vec.get_altitude()); } TEST(Vec3Test, TestSet2d) { const double k0(0.0); const double k1(1.0); Vec3 vec; vec.set(0, k0); vec.set(1, k1); ASSERT_EQ(k0, vec.get_longitude()); ASSERT_EQ(k1, vec.get_latitude()); ASSERT_FALSE(vec.has_altitude()); } TEST(Vec3Test, TestEquivalence) { Vec3 vec0(0.1, 1.2, 2.3); Vec3 vec1(1.1, 1.2, 2.3); Vec3 vec2(1.1, 1.2, 0.0); Vec3 vec3(1.1, 1.2); Vec3 vec4(1.1, 1.2, 0.1); ASSERT_FALSE(vec0 == vec1); ASSERT_TRUE(vec0 == vec0); ASSERT_TRUE(vec1 == vec1); ASSERT_TRUE(vec3 == vec3); ASSERT_TRUE(vec2 == vec3); ASSERT_FALSE(vec3 == vec4); } TEST(Vec3Test, TestCopyConstruct3d) { Vec3 vec3d(0.1, 1.2, 2.3); Vec3 copy3d(vec3d); ASSERT_EQ(0.1, copy3d.get_longitude()); ASSERT_EQ(1.2, copy3d.get_latitude()); ASSERT_TRUE(copy3d.has_altitude()); ASSERT_EQ(2.3, copy3d.get_altitude()); } TEST(Vec3Test, TestCopyConstruct2d) { Vec3 vec2d(10.11, -12.13); Vec3 copy2d(vec2d); ASSERT_EQ(10.11, copy2d.get_longitude()); ASSERT_EQ(-12.13, copy2d.get_latitude()); ASSERT_FALSE(copy2d.has_altitude()); ASSERT_EQ(0, copy2d.get_altitude()); } TEST(Vec3Test, TestAssign3d) { Vec3 vec3d(0.1, 1.2, 2.3); Vec3 copy3d; copy3d = vec3d; ASSERT_EQ(0.1, copy3d.get_longitude()); ASSERT_EQ(1.2, copy3d.get_latitude()); ASSERT_TRUE(copy3d.has_altitude()); ASSERT_EQ(2.3, copy3d.get_altitude()); } TEST(Vec3Test, TestAssign2d) { Vec3 vec2d(10.11, -12.13); Vec3 copy2d; copy2d = vec2d; ASSERT_EQ(10.11, copy2d.get_longitude()); ASSERT_EQ(-12.13, copy2d.get_latitude()); ASSERT_FALSE(copy2d.has_altitude()); ASSERT_EQ(0, copy2d.get_altitude()); } TEST(Vec3Test, TestHeadingPitchRoll) { Vec3 vec3(0.1, 1.2, 2.3); ASSERT_EQ(0.1, vec3.get_heading()); ASSERT_EQ(1.2, vec3.get_pitch()); ASSERT_EQ(2.3, vec3.get_roll()); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/version_test.cc000066400000000000000000000054131263603257100206670ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the Version class. #include "kml/base/version.h" #include "gtest/gtest.h" #include "kml/base/string_util.h" namespace kmlbase { TEST(VersionTest, TestVersion) { ASSERT_EQ(LIBKML_MAJOR_VERSION, Version::get_major()); ASSERT_EQ(LIBKML_MINOR_VERSION, Version::get_minor()); ASSERT_EQ(LIBKML_MICRO_VERSION, Version::get_micro()); ASSERT_TRUE(Version::IsCompat(LIBKML_MAJOR_VERSION, LIBKML_MINOR_VERSION, LIBKML_MICRO_VERSION)); ASSERT_TRUE(Version::IsCompat(LIBKML_MAJOR_VERSION, LIBKML_MINOR_VERSION, LIBKML_MICRO_VERSION+1)); ASSERT_TRUE(Version::IsCompat(LIBKML_MAJOR_VERSION, LIBKML_MINOR_VERSION+1, LIBKML_MICRO_VERSION+1)); ASSERT_TRUE(Version::IsCompat(LIBKML_MAJOR_VERSION, LIBKML_MINOR_VERSION+2, LIBKML_MICRO_VERSION+2)); ASSERT_FALSE(Version::IsCompat(LIBKML_MAJOR_VERSION+1, LIBKML_MINOR_VERSION, LIBKML_MICRO_VERSION)); const string kVersion(ToString(LIBKML_MAJOR_VERSION) + "." + ToString(LIBKML_MINOR_VERSION) + "." + ToString(LIBKML_MICRO_VERSION)); ASSERT_EQ(kVersion, Version::GetString()); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/xml_element_test.cc000066400000000000000000000066611263603257100215210ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the XmlElement class. #include "kml/base/xml_element.h" #include "boost/intrusive_ptr.hpp" #include "gtest/gtest.h" #include "kml/base/xml_file.h" namespace kmlbase { // Forward declare TestElement for use the TestElementPtr typedef. class TestElement; // XmlElement derives from Referent such that any derived class can use // boost::intrusive_ptr. typedef boost::intrusive_ptr TestElementPtr; // The typical use case of XmlElement is to derive a concrete (or abstract) // XML element class. class TestElement : public XmlElement { public: bool SetChild(const TestElementPtr& child) { // Any XmlElement taking on a child XmlElement should check parentage of // the potential child using XmlElement::SetParent: if (!child_ && child->SetParent(this)) { // This child had no existing parent so we can make this our own. child_ = child; return true; } return false; } private: TestElementPtr child_; }; // A most basic XmlFile. class TestFile : public XmlFile { }; typedef boost::intrusive_ptr TestFilePtr; TEST(XmlElementTest, TestDefault) { TestElementPtr element = new TestElement; ASSERT_FALSE(element->GetParent()); ASSERT_FALSE(element->GetXmlFile()); ASSERT_TRUE(element->InSameXmlFile(element)); } TEST(XmlElementTest, TestSetGetParent) { TestElementPtr parent = new TestElement; TestElementPtr child = new TestElement; ASSERT_TRUE(parent->SetChild(child)); ASSERT_TRUE(child->GetParent()); ASSERT_FALSE(parent->SetChild(child)); } TEST(XmlElementTest, TestSetSameXmlFile) { TestElementPtr e0 = new TestElement; TestElementPtr e1 = new TestElement; TestFilePtr f0 = new TestFile; TestFilePtr f1 = new TestFile; ASSERT_TRUE(e0->SetXmlFile(f0.get())); ASSERT_TRUE(e1->SetXmlFile(f1.get())); ASSERT_FALSE(e1->InSameXmlFile(e0)); ASSERT_FALSE(e0->InSameXmlFile(e1)); ASSERT_TRUE(e0->InSameXmlFile(e0)); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/xml_file_test.cc000066400000000000000000000054021263603257100207770ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the XmlFile class. #include "kml/base/xml_file.h" #include "gtest/gtest.h" namespace kmlbase { // Derive the simplest possible class to test XmlFile. class TestFile : public XmlFile { public: // Reflect the otherwise protected set_url out to public for unit testing. void set_url(const string& url) { XmlFile::set_url(url); } bool set_root(const XmlElementPtr& element) { return XmlFile::set_root(element); } }; typedef boost::intrusive_ptr TestFilePtr; class TestElement : public XmlElement { public: TestElement(int id) : id_(id) {} int get_id() const { return id_; } private: int id_; }; typedef boost::intrusive_ptr TestElementPtr; TEST(XmlFileTest, TestDefault) { TestFilePtr xml_file = new TestFile; ASSERT_TRUE(xml_file->get_url().empty()); ASSERT_FALSE(xml_file->get_root()); } TEST(XmlFileTest, TestSetGet) { const string kUrl("http://example.com"); const int kId = 42; TestFilePtr xml_file = new TestFile; xml_file->set_url(kUrl); xml_file->set_root(new TestElement(kId)); ASSERT_EQ(kUrl, xml_file->get_url()); TestElementPtr element = boost::static_pointer_cast(xml_file->get_root()); ASSERT_EQ(kId, element->get_id()); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/xml_namespaces_test.cc000066400000000000000000000047001263603257100221770ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "kml/base/xml_namespaces.h" #include "gtest/gtest.h" namespace kmlbase { TEST(XmlNamespacesTest, TestFindXmlNamespaceAndPrefix) { string prefix; string xml_namespace; ASSERT_FALSE(FindXmlNamespaceAndPrefix(XMLNS_NONE, NULL, NULL)); ASSERT_TRUE(FindXmlNamespaceAndPrefix(XMLNS_KML22, NULL, NULL)); ASSERT_TRUE(FindXmlNamespaceAndPrefix(XMLNS_KML22, &prefix, NULL)); ASSERT_TRUE(!prefix.empty()); ASSERT_EQ(string("kml"), prefix); ASSERT_TRUE(FindXmlNamespaceAndPrefix(XMLNS_KML22, NULL, &xml_namespace)); ASSERT_EQ(string("http://www.opengis.net/kml/2.2"), xml_namespace); prefix.clear(); xml_namespace.clear(); ASSERT_TRUE(FindXmlNamespaceAndPrefix(XMLNS_KML22, &prefix, &xml_namespace)); ASSERT_EQ(string("kml"), prefix); ASSERT_EQ(string("http://www.opengis.net/kml/2.2"), xml_namespace); ASSERT_FALSE(FindXmlNamespaceAndPrefix(static_cast(1231231), NULL, NULL)); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/xmlns_test.cc000066400000000000000000000102561263603257100203440ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the Xmlns class. #include "kml/base/xmlns.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" namespace kmlbase { class XmlnsTest : public testing::Test { protected: boost::scoped_ptr attributes_; boost::scoped_ptr xmlns_; }; // Just to pick a random example test case... (this is from ogckml22.xsd). // // Expat turns the above into this list. static const char* kSchemaAttrs[] = { "xmlns", "http://www.w3.org/2001/XMLSchema", "xmlns:kml", "http://www.opengis.net/kml/2.2", "xmlns:atom", "http://www.w3.org/2005/Atom", "xmlns:xal", "urn:oasis:names:tc:ciq:xsdschema:xAL:2.0", "targetNamespace", "http://www.opengis.net/kml/2.2", "elementFormDefault", "qualified", "version", "2.2.0", NULL }; TEST_F(XmlnsTest, TestCreate) { attributes_.reset(Attributes::Create(kSchemaAttrs)); ASSERT_TRUE(attributes_.get()); // This is the method under test. xmlns_.reset(Xmlns::Create(*attributes_)); // The default namespace is the value of the "xmlns" attribute. ASSERT_EQ(string(kSchemaAttrs[1]), xmlns_->get_default()); ASSERT_EQ(string(kSchemaAttrs[3]), xmlns_->GetNamespace("kml")); ASSERT_EQ(string(kSchemaAttrs[5]), xmlns_->GetNamespace("atom")); } // Verify the NULL return path of Create(). TEST_F(XmlnsTest, TestNullCreate) { attributes_.reset(new Attributes); // Empty attributes. xmlns_.reset(Xmlns::Create(*attributes_)); // No attributes, no Xmlns. ASSERT_FALSE(xmlns_.get()); } TEST_F(XmlnsTest, TestGetKey) { attributes_.reset(new Attributes); const string kPrefix("mcn"); const string kNamespace("my:cool:namespace"); attributes_->SetString(string("xmlns:") + kPrefix, kNamespace); xmlns_.reset(Xmlns::Create(*attributes_)); ASSERT_EQ(kPrefix, xmlns_->GetKey(kNamespace)); } // Verify the GetPrefixes() method. TEST_F(XmlnsTest, TestGetPrefixes) { attributes_.reset(Attributes::Create(kSchemaAttrs)); ASSERT_TRUE(attributes_.get()); xmlns_.reset(Xmlns::Create(*attributes_)); // This is the method under test. std::vector prefix_vector; xmlns_->GetPrefixes(&prefix_vector); ASSERT_EQ(static_cast(3), prefix_vector.size()); ASSERT_EQ(string("atom"), prefix_vector[0]); ASSERT_EQ(string("kml"), prefix_vector[1]); ASSERT_EQ(string("xal"), prefix_vector[2]); } } // end namespace kmlbase libkml-1.3.0/tests/kml/base/zip_file_test.cc000066400000000000000000000334031263603257100210030ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the ZipFile class. #include "kml/base/zip_file.h" #include "boost/scoped_ptr.hpp" #include "kml/base/file.h" #include "kml/base/tempfile.h" #include "gtest/gtest.h" #include "minizip/zip.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlbase { class ZipFileTest : public testing::Test { protected: boost::scoped_ptr zip_file_; }; TEST_F(ZipFileTest, TestOpenFromString) { // doc.kmz contains doc.kml and is a valid zip archive. const string kGoodKmz = string(DATADIR) + "/kmz/doc.kmz"; string zip_file_data; ASSERT_TRUE(File::ReadFileToString(kGoodKmz, &zip_file_data)); ASSERT_FALSE(zip_file_data.empty()); zip_file_.reset(ZipFile::OpenFromString(zip_file_data)); ASSERT_TRUE(zip_file_); string kml_data; // doc.kml can be read. ASSERT_TRUE(zip_file_->FindFirstOf(".kml", &kml_data)); ASSERT_FALSE(kml_data.empty()); // nokml.kmz is a valid zip archive, but does not contain any KML files const string kBadKmz = string(DATADIR) + "/kmz/nokml.kmz"; zip_file_data.clear(); ASSERT_TRUE(File::ReadFileToString(kBadKmz, &zip_file_data)); ASSERT_FALSE(zip_file_data.empty()); zip_file_.reset(ZipFile::OpenFromString(zip_file_data)); ASSERT_TRUE(zip_file_); kml_data.clear(); // There is no KML file to read. ASSERT_FALSE(zip_file_->FindFirstOf(".kml", &kml_data)); ASSERT_TRUE(kml_data.empty()); } TEST_F(ZipFileTest, TestOpenFromFile) { // doc.kmz contains doc.kml and is a valid zip archive. const string kGoodKmz = string(DATADIR) + "/kmz/doc.kmz"; zip_file_.reset(ZipFile::OpenFromFile(kGoodKmz.c_str())); ASSERT_TRUE(zip_file_); string kml_data; // doc.kml can be read. ASSERT_TRUE(zip_file_->FindFirstOf(".kml", &kml_data)); ASSERT_FALSE(kml_data.empty()); // nokml.kmz is a valid zip archive, but does not contain any KML files const string kBadKmz = string(DATADIR) + "/kmz/nokml.kmz"; zip_file_.reset(ZipFile::OpenFromFile(kBadKmz.c_str())); ASSERT_TRUE(zip_file_); kml_data.clear(); // There is no KML file to read. ASSERT_FALSE(zip_file_->FindFirstOf(".kml", &kml_data)); ASSERT_TRUE(kml_data.empty()); } TEST_F(ZipFileTest, TestOpenFromBadFile) { // Two kinds of bad file. // 1: a non-existant file: const string kNoSuchFile("nosuchfile.kmz"); zip_file_.reset(ZipFile::OpenFromFile(kNoSuchFile.c_str())); // The file cannot be opened. ASSERT_TRUE(zip_file_ == NULL); // 2: a file that is not a valid KMZ archive. const string kBadKmz= string(DATADIR) + "/kmz/bad.kmz"; zip_file_.reset(ZipFile::OpenFromFile(kBadKmz.c_str())); // The file could not be read. ASSERT_TRUE(zip_file_ == NULL); } TEST_F(ZipFileTest, TestCreate) { // Create a temp file into which we'll write our KMZ data. kmlbase::TempFilePtr tempfile = kmlbase::TempFile::CreateTempFile(); ASSERT_TRUE(tempfile != NULL); // Create a KMZ file containing a KML file that is a placemark called // 'tmp kml'. ZipFile* zip_file = ZipFile::Create(tempfile->name().c_str()); EXPECT_TRUE(zip_file); delete zip_file; zip_file = NULL; // Now read the file, ensuring it was properly written. EXPECT_TRUE(File::Exists(tempfile->name())); } TEST_F(ZipFileTest, TestIsZipData) { // Verify that a valid KMZ archive passes IsKmz(). const string kGoodKmz = string(DATADIR) + "/kmz/doc.kmz"; string kmz_data; File::ReadFileToString(kGoodKmz, &kmz_data); ASSERT_FALSE(kmz_data.empty()); ASSERT_TRUE(ZipFile::IsZipData(kmz_data)); // Verify that an invalid KMZ archive fails IsKmz(). const string kBadKmz = string(DATADIR) + "/kmz/bad.kmz"; kmz_data.clear(); File::ReadFileToString(kBadKmz, &kmz_data); ASSERT_FALSE(kmz_data.empty()); ASSERT_FALSE(ZipFile::IsZipData(kmz_data)); } TEST_F(ZipFileTest, TestFindFirstOf) { const string kGoodKmz = string(DATADIR) + "/kmz/doc.kmz"; zip_file_.reset(ZipFile::OpenFromFile(kGoodKmz.c_str())); ASSERT_TRUE(zip_file_); string kml_data; ASSERT_FALSE(zip_file_->FindFirstOf(".bad", &kml_data)); ASSERT_TRUE(kml_data.empty()); ASSERT_TRUE(zip_file_->FindFirstOf(".kml", &kml_data)); } TEST_F(ZipFileTest, TestGetToc) { // multikml-nodoc.kmz has three kml files added in the following order: // - z/c.kml // - b.kml // - a/a.kml const string kMulti1 = string(DATADIR) + "/kmz/multikml-nodoc.kmz"; zip_file_.reset(ZipFile::OpenFromFile(kMulti1.c_str())); ASSERT_TRUE(zip_file_); StringVector list; zip_file_->GetToc(&list); // 3 files were read into the vector. ASSERT_TRUE(3 == list.size()); // They appear in the same order in which they were added. ASSERT_EQ(string("z/c.kml"), list[0]); ASSERT_EQ(string("b.kml"), list[1]); ASSERT_EQ(string("a/a.kml"), list[2]); } TEST_F(ZipFileTest, TestIsInToc) { const string kGoodKmz = string(DATADIR) + "/kmz/doc.kmz"; zip_file_.reset(ZipFile::OpenFromFile(kGoodKmz.c_str())); ASSERT_TRUE(zip_file_); ASSERT_TRUE(zip_file_->IsInToc("doc.kml")); ASSERT_FALSE(zip_file_->IsInToc("docx.kml")); } TEST_F(ZipFileTest, TestGetEntry) { // nokml.kmz has a file called foo.txt in a folder called foo. const string kNokml = string(DATADIR) + "/kmz/nokml.kmz"; zip_file_.reset(ZipFile::OpenFromFile(kNokml.c_str())); ASSERT_TRUE(zip_file_); string file_data; ASSERT_TRUE(zip_file_->GetEntry("foo/foo.txt", &file_data)); ASSERT_FALSE(file_data.empty()); string tmp = file_data; // But does not have a file called bar.txt in that folder ASSERT_FALSE(zip_file_->GetEntry("foo/bar.txt", &file_data)); // The original data was untouched by this failure. ASSERT_FALSE(file_data.empty()); ASSERT_EQ(tmp, file_data); // Assert we handle a NULL output string. ASSERT_FALSE(zip_file_->GetEntry("bar", NULL)); } TEST_F(ZipFileTest, TestGetKmzData) { const string kGoodKmz = string(DATADIR) + "/kmz/doc.kmz"; string kmz_data; File::ReadFileToString(kGoodKmz, &kmz_data); zip_file_.reset(ZipFile::OpenFromString(kmz_data)); ASSERT_TRUE(zip_file_); ASSERT_EQ(kmz_data, zip_file_->get_data()); } TEST_F(ZipFileTest, TestAddEntry) { TempFilePtr tempfile = TempFile::CreateTempFile(); ASSERT_TRUE(tempfile != NULL); { // Create an empty ZipFile. boost::scoped_ptr zipfile( ZipFile::Create(tempfile->name().c_str())); ASSERT_TRUE(zipfile.get()); // Add three files to the archive. const string kNewKml = ""; ASSERT_TRUE(zipfile->AddEntry(kNewKml, "doc.kml")); ASSERT_TRUE(zipfile->AddEntry(kNewKml, "files/new.kml")); ASSERT_TRUE(zipfile->AddEntry(kNewKml, "other/blah.kml")); // Fails because it points above the archive. ASSERT_FALSE(zipfile->AddEntry(kNewKml, "../invalid.kml")); // Fails because the path is absolute. ASSERT_FALSE(zipfile->AddEntry(kNewKml, "/also/invalid.kml")); } // ZipFile's destructor closes the file handle and cleans up. ASSERT_TRUE(File::Exists(tempfile->name())); // Verify that the archive we created contains the files in order. boost::scoped_ptr created( ZipFile::OpenFromFile(tempfile->name().c_str())); ASSERT_TRUE(created.get()); std::vector list; created->GetToc(&list); ASSERT_EQ(static_cast(3), list.size()); ASSERT_EQ(string("doc.kml"), list[0]); ASSERT_EQ(string("files/new.kml"), list[1]); ASSERT_EQ(string("other/blah.kml"), list[2]); } TEST_F(ZipFileTest, TestAddEntryDupe) { // Assert that calling AddEntry on the same path with new content does not // overwrite the old content. TempFilePtr tempfile = TempFile::CreateTempFile(); ASSERT_TRUE(tempfile != NULL); { boost::scoped_ptr zipfile( ZipFile::Create(tempfile->name().c_str())); ASSERT_TRUE(zipfile.get()); const string kKml = ""; ASSERT_TRUE(zipfile->AddEntry(kKml, "doc.kml")); const string kNewKml = ""; ASSERT_TRUE(zipfile->AddEntry(kNewKml, "doc.kml")); } ASSERT_TRUE(File::Exists(tempfile->name())); boost::scoped_ptr created( ZipFile::OpenFromFile(tempfile->name().c_str())); ASSERT_TRUE(created.get()); string read_kml; ASSERT_TRUE(created->GetEntry("doc.kml", &read_kml)); const string kExpectedKml= ""; ASSERT_EQ(kExpectedKml, read_kml); } TEST_F(ZipFileTest, TestAddEntryBad) { // AddEntry should only be called on a ZipFile object created by // ZipFile::Create. This test asserts sane behavior when OpenFromString // is used instead. const string kGoodKmz = string(DATADIR) + "/kmz/doc.kmz"; string zip_file_data; ASSERT_TRUE(File::ReadFileToString(kGoodKmz, &zip_file_data)); ASSERT_FALSE(zip_file_data.empty()); zip_file_.reset(ZipFile::OpenFromString(zip_file_data)); ASSERT_TRUE(zip_file_.get()); const string kNewKml = ""; ASSERT_FALSE(zip_file_->AddEntry(kNewKml, "doc.kml")); } TEST_F(ZipFileTest, TestBadPkZipData) { // Some ZIP files created with new zip-creation tools can't be uncompressed // by our underlying minizip library. Assert sane behavior. const string kBadKmz = string(DATADIR) + "/kmz/bad-pk-data.kmz"; string zip_file_data; ASSERT_TRUE(File::ReadFileToString(kBadKmz, &zip_file_data)); ASSERT_FALSE(zip_file_data.empty()); zip_file_.reset(ZipFile::OpenFromString(zip_file_data)); ASSERT_FALSE(zip_file_->GetEntry("doc.kml", NULL)); } TEST_F(ZipFileTest, TestBadTooLarge) { // This file crashes Google Earth and previously crashed libkml. // The file has been manipulated such that it reports its uncompressed // size falsely as 4294967294 bytes. const string kBadKmz = string(DATADIR) + "/kmz/bad-too-large.kmz"; string zip_file_data; ASSERT_TRUE(File::ReadFileToString(kBadKmz, &zip_file_data)); ASSERT_FALSE(zip_file_data.empty()); zip_file_.reset(ZipFile::OpenFromString(zip_file_data)); ASSERT_FALSE(zip_file_->GetEntry("hello.kml", NULL)); } TEST_F(ZipFileTest, TestMaxUncompressedSize) { const int kMaxUncompressedZipSize = 104857600; // 100 MB. kmlbase::TempFilePtr tempfile = kmlbase::TempFile::CreateTempFile(); ASSERT_TRUE(tempfile != NULL); zipFile zipfile = zipOpen(tempfile->name().c_str(), 0); ASSERT_TRUE(zipfile); zipOpenNewFileInZip(zipfile, "doc.kml", 0, 0, 0, 0, 0, 0, Z_DEFLATED, Z_DEFAULT_COMPRESSION); string kml; kml.resize(kMaxUncompressedZipSize); // Write one byte beyond the max uncompressed size. zipWriteInFileInZip(zipfile, static_cast(kml.data()), static_cast(kml.size()+1)); zipClose(zipfile, 0); string zip_file_data; ASSERT_TRUE(File::ReadFileToString(tempfile->name(), &zip_file_data)); ASSERT_FALSE(zip_file_data.empty()); zip_file_.reset(ZipFile::OpenFromString(zip_file_data)); zip_file_->set_max_uncompressed_file_size(kMaxUncompressedZipSize); // Assert failure against kMaxUncompressedZipSize. ASSERT_FALSE(zip_file_->GetEntry("doc.kml", NULL)); // Increase the maximum uncompressed size and assert success. zip_file_->set_max_uncompressed_file_size(kMaxUncompressedZipSize + 1); ASSERT_TRUE(zip_file_->GetEntry("doc.kml", NULL)); } TEST_F(ZipFileTest, TestMinizipOverflow) { // These files previously crashed libkml due to the underlying minizip // libraries implementation of mem_read which could hand a negative // size to memcpy. const char* kDefaultKml = "kmlsamples.kml"; const string kOverflowBadOffset = string(DATADIR) + "/kmz/overflow_bad_offset.kmz"; zip_file_.reset(ZipFile::OpenFromFile(kOverflowBadOffset.c_str())); ASSERT_TRUE(zip_file_); ASSERT_FALSE(zip_file_->GetEntry(kDefaultKml, NULL)); const string kOverflowStack = string(DATADIR) + "/kmz/overflow_corrupted_stack.kmz"; zip_file_.reset(ZipFile::OpenFromFile(kOverflowStack.c_str())); ASSERT_TRUE(zip_file_); ASSERT_FALSE(zip_file_->GetEntry(kDefaultKml, NULL)); const string kOverflowOpen = string(DATADIR) + "/kmz/overflow_unzOpenCurrentFile.kmz"; zip_file_.reset(ZipFile::OpenFromFile(kOverflowOpen.c_str())); ASSERT_TRUE(zip_file_); ASSERT_FALSE(zip_file_->GetEntry(kDefaultKml, NULL)); const string kOverflowRead = string(DATADIR) + "/kmz/overflow_unzReadCurrentFile.kmz"; zip_file_.reset(ZipFile::OpenFromFile(kOverflowRead.c_str())); ASSERT_TRUE(zip_file_); ASSERT_TRUE(zip_file_->GetEntry(kDefaultKml, NULL)); } } // end namespace kmlbase libkml-1.3.0/tests/kml/convenience/000077500000000000000000000000001263603257100172135ustar00rootroot00000000000000libkml-1.3.0/tests/kml/convenience/CMakeLists.txt000066400000000000000000000005271263603257100217570ustar00rootroot00000000000000set(TESTS csv_file csv_parser element_counter feature_list google_doc_list google_maps_data google_picasa_web google_spreadsheets gpx_trk_pt_handler http_client kml_feature_list_saver kmz_check_links) foreach(TEST ${TESTS}) build_test( GROUP regionator NAME ${TEST} DEPENDS kmlbase;kmlengine;kmldom;kmlconvenience) endforeach() libkml-1.3.0/tests/kml/convenience/atom_util_test.cc000066400000000000000000000246361263603257100225710ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit test for the AtomUtil API functions. #include "kml/convenience/atom_util.h" #include "gtest/gtest.h" #include "kml/convenience/convenience.h" #include "kml/convenience/http_client.h" #include "kml/convenience/http_client_test_util.h" #include "kml/dom.h" #include "kml/engine/location_util.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlconvenience { TEST(AtomUtilTest, TestCreateBasicEntry) { const string kTitle("War And Peace"); const string kSummary("First there was war, then there was peace"); const kmldom::AtomEntryPtr entry = AtomUtil::CreateBasicEntry(kTitle, kSummary); ASSERT_TRUE(entry.get()); ASSERT_EQ(kTitle, entry->get_title()); ASSERT_EQ(kSummary, entry->get_summary()); } TEST(AtomUtilTest, TestCreateAtomEntryForFeature) { const string kName("a place"); const string kDescription("This is a really great place"); const double kLat(12.12); const double kLon(-38.38); kmldom::PlacemarkPtr placemark = CreatePointPlacemark(kName, kLat, kLon); placemark->set_description(kDescription); const kmldom::AtomEntryPtr entry = AtomUtil::CreateEntryForFeature(placemark); ASSERT_TRUE(entry.get()); ASSERT_EQ(kName, entry->get_title()); ASSERT_EQ(kDescription, entry->get_summary()); ASSERT_TRUE(entry->has_content()); const kmldom::AtomContentPtr content = entry->get_content(); ASSERT_TRUE(content.get()); ASSERT_EQ(static_cast(1), content->get_misplaced_elements_array_size()); placemark = kmldom::AsPlacemark(content->get_misplaced_elements_array_at(0)); ASSERT_TRUE(placemark.get()); double lat; double lon; ASSERT_TRUE(kmlengine::GetFeatureLatLon(placemark, &lat, &lon)); ASSERT_EQ(kLat, lat); ASSERT_EQ(kLon, lon); ASSERT_EQ(kName, placemark->get_name()); ASSERT_EQ(kDescription, placemark->get_description()); } TEST(AtomUtilTest, TestBasicGetContentSrc) { kmldom::AtomContentPtr content = kmldom::KmlFactory::GetFactory()->CreateAtomContent(); const string kSrc("http://somehost.com/some/path/feed/blah"); content->set_src(kSrc); kmldom::AtomEntryPtr entry = kmldom::KmlFactory::GetFactory()->CreateAtomEntry(); entry->set_content(content); string src; ASSERT_TRUE(AtomUtil::GetContentSrc(entry, &src)); ASSERT_EQ(kSrc, src); } TEST(AtomUtilTest, TestFindRelUrl) { kmldom::AtomFeedPtr feed = kmldom::KmlFactory::GetFactory()->CreateAtomFeed(); const string kRelType("fish"); ASSERT_FALSE(AtomUtil::FindRelUrl(*feed.get(), kRelType, NULL)); string href; ASSERT_FALSE(AtomUtil::FindRelUrl(*feed.get(), kRelType, &href)); } TEST(AtomUtilTest, TestCloneEntryFeature) { const string kName("a place"); const double kLat(12.12); const double kLon(-38.38); const kmldom::PlacemarkPtr placemark = CreatePointPlacemark(kName, kLat, kLon); kmldom::AtomEntryPtr entry = AtomUtil::CreateEntryForFeature(placemark); kmldom::FeaturePtr feature = AtomUtil::GetEntryFeature(entry); ASSERT_TRUE(feature.get()); } TEST(AtomUtilTest, TestGetEntryFeature) { kmldom::AtomEntryPtr entry; kmldom::FeaturePtr feature = AtomUtil::GetEntryFeature(entry); } TEST(AtomUtilTest, TestGetFeedFeatures) { kmldom::AtomFeedPtr feed; kmldom::FolderPtr folder; AtomUtil::GetFeedFeatures(feed, folder); } TEST(AtomUtilTest, TestIsOfLinkRel) { kmldom::AtomLinkPtr link = kmldom::KmlFactory::GetFactory()->CreateAtomLink(); // A link with no rel= at all. ASSERT_FALSE(AtomUtil::LinkIsOfRel(link, "post")); link->set_rel("post-is-not-at-the-end"); ASSERT_FALSE(AtomUtil::LinkIsOfRel(link, "post")); link->set_rel("http://foo.com/goo/blah#post"); ASSERT_TRUE(AtomUtil::LinkIsOfRel(link, "post")); link->set_rel("post"); ASSERT_TRUE(AtomUtil::LinkIsOfRel(link, "post")); string empty; ASSERT_FALSE(AtomUtil::LinkIsOfRel(NULL, empty)); } TEST(AtomUtilTest, TestFindLink) { kmldom::AtomFeedPtr feed = kmldom::KmlFactory::GetFactory()->CreateAtomFeed(); const string kEmpty; // Empty/NULL everything just returns NULL w/o crashing. ASSERT_FALSE(AtomUtil::FindLink(*feed, kEmpty, kEmpty)); const string kRel("alternate"); const string kMimeType("text/html"); // NULL AtomFeePtr just returns NULL w/o crashing. ASSERT_FALSE(AtomUtil::FindLink(*feed, kRel, kMimeType)); kmldom::AtomLinkPtr link = kmldom::KmlFactory::GetFactory()->CreateAtomLink(); feed->add_link(link); link->set_rel(kRel); // Have rel=, but not type=. ASSERT_FALSE(AtomUtil::FindLink(*feed, kRel, kMimeType)); link->clear_rel(); link->set_type(kMimeType); // Have type=, but not rel=. ASSERT_FALSE(AtomUtil::FindLink(*feed, kRel, kMimeType)); link->set_rel(kRel); // Have both rel= and type=. kmldom::AtomLinkPtr got_link = AtomUtil::FindLink(*feed, kRel, kMimeType); ASSERT_TRUE(got_link.get()); ASSERT_EQ(kRel, got_link->get_rel()); ASSERT_EQ(kMimeType, got_link->get_type()); kmldom::AtomEntryPtr entry = kmldom::KmlFactory::GetFactory()->CreateAtomEntry(); ASSERT_FALSE(AtomUtil::FindLink(*entry, kRel, kMimeType)); link = kmldom::KmlFactory::GetFactory()->CreateAtomLink(); entry->add_link(link); link->set_rel(kRel); link->set_type(kMimeType); got_link = AtomUtil::FindLink(*feed, kRel, kMimeType); ASSERT_TRUE(got_link.get()); ASSERT_EQ(kRel, got_link->get_rel()); ASSERT_EQ(kMimeType, got_link->get_type()); } TEST(AtomUtilTest, TestFindEntryByTitle) { kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::AtomEntryPtr entry = factory->CreateAtomEntry(); const string kTitle("War and Peace"); entry->set_title(kTitle); kmldom::AtomFeedPtr feed = factory->CreateAtomFeed(); feed->add_entry(entry); kmldom::AtomEntryPtr got_entry = AtomUtil::FindEntryByTitle(feed, kTitle); ASSERT_TRUE(got_entry.get()); ASSERT_EQ(kTitle, got_entry->get_title()); ASSERT_FALSE(AtomUtil::FindEntryByTitle(feed, "Peaceful Warring")); } TEST(AtomUtilTest, TestFindCategoryByScheme) { kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::AtomEntryPtr entry = factory->CreateAtomEntry(); kmldom::AtomCategoryPtr category = factory->CreateAtomCategory(); const string kScheme("http://schemas.google.com/g/2005#kind"); category->set_scheme(kScheme); const string kLabel("document"); category->set_label(kLabel); entry->add_category(category); kmldom::AtomCategoryPtr got_category = AtomUtil::FindCategoryByScheme( *entry, "kind"); ASSERT_TRUE(got_category.get()); ASSERT_EQ(kLabel, got_category->get_label()); } TEST(AtomUtilTest, TestGetAndParseFeed) { TestDataHttpClient test_data_http_client; kmldom::AtomFeedPtr feed = AtomUtil::GetAndParseFeed( "http://example.com/gdata/picasaweb-metafeed.xml", test_data_http_client); ASSERT_TRUE(feed); ASSERT_EQ( string("http://picasaweb.google.com/data/feed/user/ben.gardenfield"), feed->get_id()); ASSERT_EQ(static_cast(17), feed->get_entry_array_size()); ASSERT_FALSE(AtomUtil::GetAndParseFeed("http://example.com/no/such/file", test_data_http_client)); // This is an Atom . ASSERT_FALSE(AtomUtil::GetAndParseFeed( "http://example.com/gmaps/create-map-result.xml", test_data_http_client)); } TEST(AtomUtilTest, TestGetNextFeed) { TestDataHttpClient test_data_http_client; kmldom::AtomFeedPtr feed = AtomUtil::GetAndParseFeed( "http://example.com/gdata/feed0.xml", test_data_http_client); ASSERT_TRUE(feed); // feed0.xml points to feed1.xml kmldom::AtomFeedPtr next = AtomUtil::GetNextFeed(feed, test_data_http_client); ASSERT_TRUE(next); ASSERT_EQ(static_cast(1), next->get_link_array_size()); kmldom::AtomLinkPtr link = next->get_link_array_at(0); ASSERT_TRUE(link); // feed1.xml points to feed2.xml ASSERT_EQ(string("gdata/feed2.xml"), link->get_href()); } TEST(AtomUtilTest, TestGetGdResourceId) { TestDataHttpClient test_data_http_client; kmldom::AtomFeedPtr feed = AtomUtil::GetAndParseFeed( "http://example.com/gdata/doclist-metafeed.xml", test_data_http_client); ASSERT_TRUE(feed); ASSERT_EQ(static_cast(4), feed->get_entry_array_size()); string resource_id; // The 0th in doclist-metafeed.xml has this child: // document:0ARX2bBe7ATEpZHg1a3poY18xOWNwZ2NuN2Qy ASSERT_TRUE(AtomUtil::GetGdResourceId(feed->get_entry_array_at(0), &resource_id)); ASSERT_EQ(string("document:0ARX2bBe7ATEpZHg1a3poY18xOWNwZ2NuN2Qy"), resource_id); } TEST(AtomUtilTest, TestCreateBasicLink) { const string href("a.kml"); const string rel("self"); const string type("application/vnd.google-earth.kml+xml"); kmldom::AtomLinkPtr link = AtomUtil::CreateBasicLink(href, rel, type); ASSERT_TRUE(link); ASSERT_EQ(href, link->get_href()); ASSERT_EQ(rel, link->get_rel()); ASSERT_EQ(type, link->get_type()); } } // end namespace kmlconvenience libkml-1.3.0/tests/kml/convenience/convenience_test.cc000066400000000000000000000465641263603257100230740ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the KML convenience functions. #include "kml/convenience/convenience.h" #include "kml/base/date_time.h" #include "gtest/gtest.h" using kmlbase::DateTime; using kmlbase::Vec3; using kmldom::CameraPtr; using kmldom::ChangePtr; using kmldom::CoordinatesPtr; using kmldom::DataPtr; using kmldom::GxAnimatedUpdatePtr; using kmldom::GxFlyToPtr; using kmldom::GxWaitPtr; using kmldom::KmlFactory; using kmldom::LineStringPtr; using kmldom::LinearRingPtr; using kmldom::LookAtPtr; using kmldom::OuterBoundaryIsPtr; using kmldom::PlacemarkPtr; using kmldom::PointPtr; using kmldom::PolygonPtr; using kmldom::RegionPtr; using kmldom::UpdatePtr; namespace kmlconvenience { // This tests the AddExtendedDataValue() function. TEST(ConvenienceTest, TestAddExtendedDataValue) { const string kName("population"); const string kValue("42000"); PlacemarkPtr placemark = KmlFactory::GetFactory()->CreatePlacemark(); AddExtendedDataValue(kName, kValue, placemark); ASSERT_TRUE(placemark->has_extendeddata()); ASSERT_EQ(static_cast(1), placemark->get_extendeddata()->get_data_array_size()); ASSERT_EQ(kName, placemark->get_extendeddata()->get_data_array_at(0)->get_name()); ASSERT_EQ(kValue, placemark->get_extendeddata()->get_data_array_at(0)->get_value()); } // This tests the CreateAnimatedUpdateChangePoint() function. TEST(ConvenienceTest, TestCreateAnimatedUpdateChangePoint) { const string kTargetId("targetId"); const kmlbase::Vec3 kVec3(1.1, 2.2, 3.3); const double kDuration = 12.3; GxAnimatedUpdatePtr animated_update = CreateAnimatedUpdateChangePoint(kTargetId, kVec3, kDuration); ASSERT_TRUE(animated_update); ASSERT_TRUE(animated_update->has_update()); UpdatePtr update = animated_update->get_update(); ASSERT_TRUE(update); ASSERT_TRUE(update->has_targethref()); ASSERT_EQ(string(""), update->get_targethref()); ASSERT_EQ(static_cast(1), update->get_updateoperation_array_size()); ASSERT_EQ(kmldom::Type_Change, update->get_updateoperation_array_at(0)->Type()); ChangePtr change = kmldom::AsChange(update->get_updateoperation_array_at(0)); ASSERT_TRUE(change); ASSERT_EQ(static_cast(1), change->get_object_array_size()); ASSERT_EQ(kmldom::Type_Placemark, change->get_object_array_at(0)->Type()); PlacemarkPtr placemark = kmldom::AsPlacemark(change->get_object_array_at(0)); ASSERT_TRUE(placemark); ASSERT_TRUE(placemark->has_targetid()); ASSERT_EQ(kTargetId, placemark->get_targetid()); ASSERT_TRUE(placemark->has_geometry()); ASSERT_EQ(kmldom::Type_Point, placemark->get_geometry()->Type()); PointPtr point = kmldom::AsPoint(placemark->get_geometry()); ASSERT_TRUE(point); ASSERT_TRUE(point->has_coordinates()); const CoordinatesPtr& coordinates = point->get_coordinates(); ASSERT_TRUE(coordinates); ASSERT_EQ(static_cast(1), coordinates->get_coordinates_array_size()); const kmlbase::Vec3& vec = coordinates->get_coordinates_array_at(0); ASSERT_TRUE(kVec3 == vec); } // This tests the CreateBasicPolygonPlacemark() function. TEST(ConvenienceTest, TestCreateBasicPolygonPlacemark) { LinearRingPtr linearring = KmlFactory::GetFactory()->CreateLinearRing(); PlacemarkPtr placemark = CreateBasicPolygonPlacemark(linearring); ASSERT_TRUE(placemark); ASSERT_TRUE(placemark->has_geometry()); ASSERT_TRUE(AsPolygon(placemark->get_geometry())); PolygonPtr poly = AsPolygon(placemark->get_geometry()); ASSERT_TRUE(poly->has_outerboundaryis()); ASSERT_TRUE(AsOuterBoundaryIs(poly->get_outerboundaryis())); OuterBoundaryIsPtr ob = AsOuterBoundaryIs(poly->get_outerboundaryis()); ASSERT_TRUE(ob->has_linearring()); ASSERT_TRUE(AsLinearRing(ob->get_linearring())); } // This tests the CreateCamera() function. TEST(ConvenienceTest, TestCreateCamera) { const double kLatitude = 37.0; const double kLongitude = -122.0; const double kAltitude = 12.3; const double kHeading = 180.0; const double kTilt = 32.1; const double kRoll = 0.0; const kmldom::AltitudeModeEnum kAltitudeMode = kmldom::ALTITUDEMODE_ABSOLUTE; CameraPtr camera = CreateCamera(kLatitude, kLongitude, kAltitude, kHeading, kTilt, kRoll, kAltitudeMode); ASSERT_TRUE(camera->has_longitude()); ASSERT_TRUE(camera->has_latitude()); ASSERT_TRUE(camera->has_altitude()); ASSERT_TRUE(camera->has_heading()); ASSERT_TRUE(camera->has_tilt()); ASSERT_TRUE(camera->has_roll()); ASSERT_TRUE(camera->has_altitudemode()); ASSERT_EQ(kLatitude, camera->get_latitude()); ASSERT_EQ(kLongitude, camera->get_longitude()); ASSERT_EQ(kAltitude, camera->get_altitude()); ASSERT_EQ(kHeading, camera->get_heading()); ASSERT_EQ(kTilt, camera->get_tilt()); ASSERT_EQ(kRoll, camera->get_roll()); ASSERT_EQ(kAltitudeMode, camera->get_altitudemode()); } // This tests the CreateCoordinatesCircle() functio. TEST(ConvenienceTest, TestCreateCoordinatesCircle) { const double kLat = 0.0; const double kLng = 0.0; const double kRadius = 100; const size_t kSegments = 360; CoordinatesPtr coords = CreateCoordinatesCircle(kLat, kLng, kRadius, kSegments); ASSERT_EQ(kSegments, coords->get_coordinates_array_size()); } // This tests the CreateDataNameValue() function. TEST(ConvenienceTest, TestCreateDataNameValue) { const string kName("par"); const string kValue("5"); DataPtr data = CreateDataNameValue(kName, kValue); ASSERT_TRUE(data); ASSERT_EQ(kName, data->get_name()); ASSERT_EQ(kValue, data->get_value()); } // This tests the CreateFlyToFromAbstractView function. TEST(ConvenienceTest, TestCreateFlyTo) { const double kLat = 37.1; const double kLng = 122.2; const double kAlt = 123.4; const double kHeading = -32.1; const double kTilt = 89.9; const double kRange = 3456.7; const int kAltitudeMode = kmldom::ALTITUDEMODE_ABSOLUTE; const LookAtPtr lookat = CreateLookAt(kLat, kLng, kAlt, kHeading, kTilt, kRange, kAltitudeMode); const double duration = 38.3; const GxFlyToPtr flyto = CreateFlyTo(lookat, duration); ASSERT_TRUE(flyto); ASSERT_TRUE(flyto->has_abstractview()); ASSERT_EQ(kmldom::Type_LookAt, flyto->get_abstractview()->Type()); LookAtPtr flyto_lookat = kmldom::AsLookAt(flyto->get_abstractview()); ASSERT_EQ(kLat, flyto_lookat->get_latitude()); ASSERT_EQ(kLng, flyto_lookat->get_longitude()); ASSERT_EQ(kAlt, flyto_lookat->get_altitude()); ASSERT_EQ(kHeading, flyto_lookat->get_heading()); ASSERT_EQ(kTilt, flyto_lookat->get_tilt()); ASSERT_EQ(kRange, flyto_lookat->get_range()); ASSERT_EQ(kAltitudeMode, flyto_lookat->get_altitudemode()); ASSERT_TRUE(flyto->has_gx_duration()); ASSERT_DOUBLE_EQ(duration, flyto->get_gx_duration()); } // This tests the CreateFlyToForFeature function. TEST(ConvenienceTest, TestCreateFlyToForFeature) { ASSERT_FALSE(CreateFlyToForFeature(NULL, 0)); const double kLat = 37.0; const double kLng = -122.0; const CoordinatesPtr coords = CreateCoordinatesCircle(kLat, kLng, 50000, 360); ASSERT_TRUE(coords); LineStringPtr linestring = KmlFactory::GetFactory()->CreateLineString(); linestring->set_coordinates(coords); PlacemarkPtr line_placemark = KmlFactory::GetFactory()->CreatePlacemark(); line_placemark->set_geometry(linestring); const double kDuration = 34.2; const GxFlyToPtr flyto = CreateFlyToForFeature(line_placemark, kDuration); ASSERT_TRUE(flyto); ASSERT_TRUE(flyto->has_abstractview()); ASSERT_EQ(kmldom::Type_LookAt, flyto->get_abstractview()->Type()); LookAtPtr l = kmldom::AsLookAt(flyto->get_abstractview()); ASSERT_DOUBLE_EQ(kLat, l->get_latitude()); ASSERT_DOUBLE_EQ(kLng, l->get_longitude()); ASSERT_DOUBLE_EQ(0.0, l->get_altitude()); ASSERT_DOUBLE_EQ(0.0, l->get_heading()); ASSERT_DOUBLE_EQ(0.0, l->get_tilt()); ASSERT_NEAR(134721.0512, l->get_range(), 0.0001); ASSERT_EQ(kmldom::ALTITUDEMODE_RELATIVETOGROUND, l->get_altitudemode()); ASSERT_TRUE(flyto->has_gx_duration()); ASSERT_DOUBLE_EQ(kDuration, flyto->get_gx_duration()); } // This tests the CreateLookAt() function. TEST(ConvenienceTest, TestCreateLookAt) { const double kLatitude = 37.0; const double kLongitude = -122.0; const double kAltitude = 12.3; const double kHeading = 180.0; const double kTilt = 32.1; const double kRange = 1000.3; const kmldom::AltitudeModeEnum kAltitudeMode = kmldom::ALTITUDEMODE_ABSOLUTE; LookAtPtr lookat = CreateLookAt(kLatitude, kLongitude, kAltitude, kHeading, kTilt, kRange, kAltitudeMode); ASSERT_TRUE(lookat->has_longitude()); ASSERT_TRUE(lookat->has_latitude()); ASSERT_TRUE(lookat->has_altitude()); ASSERT_TRUE(lookat->has_heading()); ASSERT_TRUE(lookat->has_tilt()); ASSERT_TRUE(lookat->has_range()); ASSERT_TRUE(lookat->has_altitudemode()); ASSERT_EQ(kLatitude, lookat->get_latitude()); ASSERT_EQ(kLongitude, lookat->get_longitude()); ASSERT_EQ(kAltitude, lookat->get_altitude()); ASSERT_EQ(kHeading, lookat->get_heading()); ASSERT_EQ(kTilt, lookat->get_tilt()); ASSERT_EQ(kRange, lookat->get_range()); ASSERT_EQ(kAltitudeMode, lookat->get_altitudemode()); } // This tests the CreatePointFromLatLonAtts() function. TEST(ConvenienceTest, TestCreatePointFromLatLonAtts) { const char* atts[] = { "lat", "38.38", "lon", "-121.456", NULL }; PointPtr point = CreatePointFromLatLonAtts(atts); ASSERT_TRUE(point); ASSERT_TRUE(point->has_coordinates()); ASSERT_EQ(static_cast(1), point->get_coordinates()->get_coordinates_array_size()); ASSERT_EQ( strtod(atts[1], NULL), point->get_coordinates()->get_coordinates_array_at(0).get_latitude()); ASSERT_EQ( strtod(atts[3], NULL), point->get_coordinates()->get_coordinates_array_at(0).get_longitude()); ASSERT_EQ(0.0, point->get_coordinates()->get_coordinates_array_at(0).get_altitude()); } // This tests the CreatePointFromVec3() function. TEST(ConvenienceTest, TestCreatePointFromVec3) { kmlbase::Vec3 vec3(1.1, 2.2, 3.3); PointPtr point = CreatePointFromVec3(vec3); ASSERT_TRUE(point); ASSERT_TRUE(point->has_coordinates()); ASSERT_EQ(static_cast(1), point->get_coordinates()->get_coordinates_array_size()); ASSERT_EQ( 2.2, point->get_coordinates()->get_coordinates_array_at(0).get_latitude()); ASSERT_EQ( 1.1, point->get_coordinates()->get_coordinates_array_at(0).get_longitude()); ASSERT_EQ( 3.3, point->get_coordinates()->get_coordinates_array_at(0).get_altitude()); } // This tests the CreatePointLatLon() function. TEST(ConvenienceTest, TestCreatePointLatLon) { PointPtr point = CreatePointLatLon(-42.42, 150.160); ASSERT_TRUE(point); ASSERT_TRUE(point->has_coordinates()); ASSERT_EQ(static_cast(1), point->get_coordinates()->get_coordinates_array_size()); ASSERT_EQ( -42.42, point->get_coordinates()->get_coordinates_array_at(0).get_latitude()); ASSERT_EQ( 150.160, point->get_coordinates()->get_coordinates_array_at(0).get_longitude()); ASSERT_EQ( 0.0, point->get_coordinates()->get_coordinates_array_at(0).get_altitude()); } // This tests the CreatePointPlacemark() function. TEST(ConvenienceTest, TestCreatePointPlacemark) { const string kName("my point placemark"); const double kLat = 38.0987123; const double kLon = -123.123; PlacemarkPtr placemark = CreatePointPlacemark(kName, kLat, kLon); ASSERT_EQ(kName, placemark->get_name()); ASSERT_TRUE(placemark->has_geometry()); PointPtr point = kmldom::AsPoint(placemark->get_geometry()); ASSERT_TRUE(point); ASSERT_TRUE(point->has_coordinates()); CoordinatesPtr coordinates = point->get_coordinates(); ASSERT_EQ(static_cast(1), coordinates->get_coordinates_array_size()); Vec3 vec = coordinates->get_coordinates_array_at(0); ASSERT_EQ(kLat, vec.get_latitude()); ASSERT_EQ(kLon, vec.get_longitude()); } // This tests the PointPlacemarkWithTimeStamp() function. TEST(ConvenienceTest, TestCreatePointPlacemarkWithTimeStamp) { const string kWhen("2008-10-03T09:25:42Z"); PointPtr point = KmlFactory::GetFactory()->CreatePoint(); boost::scoped_ptr date_time(DateTime::Create(kWhen)); const char* style_id("my-shared-style"); PlacemarkPtr placemark = CreatePointPlacemarkWithTimeStamp(point, *date_time, style_id); ASSERT_TRUE(placemark); ASSERT_TRUE(placemark->has_geometry()); ASSERT_TRUE(AsPoint(placemark->get_geometry())); ASSERT_TRUE(placemark->has_timeprimitive()); ASSERT_TRUE(AsTimeStamp(placemark->get_timeprimitive())); ASSERT_TRUE(placemark->has_styleurl()); } // This tests the CreateRegion2d() function. TEST(ConvenienceTest, TestCreateRegion2d) { const double kNorth(67.87); const double kSouth(-56.78); const double kEast(98.12); const double kWest(12.34); const double kMinlodpixels(128); const double kMaxlodpixels(512); RegionPtr region = CreateRegion2d(kNorth, kSouth, kEast, kWest, kMinlodpixels, kMaxlodpixels); ASSERT_TRUE(region->has_latlonaltbox()); ASSERT_TRUE(region->has_lod()); ASSERT_EQ(kNorth, region->get_latlonaltbox()->get_north()); ASSERT_EQ(kSouth, region->get_latlonaltbox()->get_south()); ASSERT_EQ(kEast, region->get_latlonaltbox()->get_east()); ASSERT_EQ(kWest, region->get_latlonaltbox()->get_west()); ASSERT_FALSE(region->get_latlonaltbox()->has_minaltitude()); ASSERT_FALSE(region->get_latlonaltbox()->has_maxaltitude()); ASSERT_FALSE(region->get_latlonaltbox()->has_altitudemode()); ASSERT_EQ(kMinlodpixels, region->get_lod()->get_minlodpixels()); ASSERT_EQ(kMaxlodpixels, region->get_lod()->get_maxlodpixels()); ASSERT_FALSE(region->get_lod()->has_minfadeextent()); ASSERT_FALSE(region->get_lod()->has_maxfadeextent()); } TEST(ConvenienceTest, TestCreateWait) { const double kWait(12.3); GxWaitPtr wait = CreateWait(kWait); ASSERT_TRUE(wait); ASSERT_TRUE(wait->has_gx_duration()); ASSERT_DOUBLE_EQ(kWait, wait->get_gx_duration()); } // This tests the GetExtendedDataValue() function. TEST(ConvenienceTest, TestGetExtendedDataValue) { const string kName("yardage"); const string kValue("0"); PlacemarkPtr placemark = CreatePointPlacemark("19", 38, -122); AddExtendedDataValue(kName, kValue, placemark); string value; ASSERT_TRUE(GetExtendedDataValue(placemark, kName, &value)); ASSERT_EQ(kValue, value); const string kNoSuch("no-such-name"); ASSERT_FALSE(GetExtendedDataValue(placemark, kNoSuch, &value)); } // This tests the SetExtendedDataValue() function. TEST(ConvenienceTest, TestSetExtendedDataValue) { const string kName0("name0"); const string kValue0("value0"); const string kName1("name1"); const string kValue1("value1"); PlacemarkPtr placemark = CreatePointPlacemark("19", 38, -122); SetExtendedDataValue(kName0, kValue0, placemark); string value; ASSERT_TRUE(GetExtendedDataValue(placemark, kName0, &value)); ASSERT_EQ(kValue0, value); SetExtendedDataValue(kName1, kValue1, placemark); ASSERT_FALSE(GetExtendedDataValue(placemark, kName0, &value)); ASSERT_TRUE(GetExtendedDataValue(placemark, kName1, &value)); ASSERT_EQ(kValue1, value); } // This tests the SimplifyCoordinates() function. TEST(ConvenienceTest, TestSimplifyCoordinates) { // For reference, the hypotenuse (in meters) of an N by N triangle at the // equator is: // N = Distance // 0.000001 = 0.157147 m // 0.000010 = 1.571475 m // 0.000100 = 15.714748 m // 0.001000 = 157.147485 m // 0.010000 = 1571.474842 m // 0.100000 = 15714.744473 m CoordinatesPtr c1 = KmlFactory::GetFactory()->CreateCoordinates(); c1->add_vec3(Vec3(0.000000, 0.000000, 0.000000)); c1->add_vec3(Vec3(0.000001, 0.000001, 0.000001)); c1->add_vec3(Vec3(0.000003, 0.000003, 0.000003)); c1->add_vec3(Vec3(0.000030, 0.000030, 0.000030)); c1->add_vec3(Vec3(0.000040, 0.000040, 0.000040)); c1->add_vec3(Vec3(0.000070, 0.000070, 0.000070)); c1->add_vec3(Vec3(0.000500, 0.000500, 0.000500)); c1->add_vec3(Vec3(0.000700, 0.000700, 0.000700)); c1->add_vec3(Vec3(0.000900, 0.000900, 0.000900)); // This will not elide near-coincident points. CoordinatesPtr notmerged = KmlFactory::GetFactory()->CreateCoordinates(); SimplifyCoordinates(c1, notmerged, 0.0); ASSERT_EQ(static_cast(9), notmerged->get_coordinates_array_size()); // This will elide the first and second coordinate tuples since they are less // than 0.2 meters apart. CoordinatesPtr merged1 = KmlFactory::GetFactory()->CreateCoordinates(); SimplifyCoordinates(c1, merged1, 0.2); ASSERT_EQ(static_cast(8), merged1->get_coordinates_array_size()); // Assert that the second coordinate was the one elided. ASSERT_DOUBLE_EQ( 0.0, merged1->get_coordinates_array_at(0).get_latitude()); ASSERT_DOUBLE_EQ( 0.000003, merged1->get_coordinates_array_at(1).get_latitude()); ASSERT_DOUBLE_EQ( 0.000030, merged1->get_coordinates_array_at(2).get_latitude()); // A tolerance of 20 meters will elide the first 6 coordinates. CoordinatesPtr merged2 = KmlFactory::GetFactory()->CreateCoordinates(); SimplifyCoordinates(c1, merged2, 20.0); ASSERT_EQ(static_cast(4), merged2->get_coordinates_array_size()); // Assert that the remaining coordinates. ASSERT_DOUBLE_EQ( 0.0, merged2->get_coordinates_array_at(0).get_latitude()); ASSERT_DOUBLE_EQ( 0.0005, merged2->get_coordinates_array_at(1).get_latitude()); ASSERT_DOUBLE_EQ( 0.0007, merged2->get_coordinates_array_at(2).get_latitude()); ASSERT_DOUBLE_EQ( 0.0009, merged2->get_coordinates_array_at(3).get_latitude()); // This distance is greater than the separation of all coordinate elements // and thus all elements after the first will be elided. CoordinatesPtr merged3 = KmlFactory::GetFactory()->CreateCoordinates(); SimplifyCoordinates(c1, merged3, 200.0); ASSERT_EQ(static_cast(1), merged3->get_coordinates_array_size()); // Assert that the only coordinate remaining is the first. ASSERT_DOUBLE_EQ( 0.0, merged2->get_coordinates_array_at(0).get_latitude()); } } // end namespace kmlconvenience libkml-1.3.0/tests/kml/convenience/csv_file_test.cc000066400000000000000000000124141263603257100223550ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the CsvFile class. #include "kml/convenience/csv_file.h" #include #include "gtest/gtest.h" #include "kml/dom.h" #include "kml/convenience/convenience.h" #include "kml/convenience/feature_list.h" #include "kml/engine/bbox.h" #include "kml/engine/location_util.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlconvenience { using kmldom::FolderPtr; using kmldom::KmlFactory; using kmldom::PlacemarkPtr; using kmlconvenience::FeatureList; using std::vector; class CsvFileTest : public testing::Test { protected: void ComparePlacemark(const PlacemarkPtr& placemark, size_t csv_offset); }; TEST_F(CsvFileTest, TestEmpty) { FeatureList feature_list; CsvFile cvs_file(&feature_list); } static const struct CsvTestLine { const char* csv_line; const int score; const double lat; const double lon; const char* name; const char* description; const char* styleurl; } kCsvTestLines[] = { // 0th line of testdata/csv/data.csv { "1733|34.7339215|-109.731499|Potter Mesa|1733 meters Apache AZ", 1733, 34.7339215, -109.731499, "Potter Mesa", "1733 meters Apache AZ", NULL }, // last line of testdata/csv/data.csv { "2143|34.0631006|-110.0189953|Big Mountain|2143 meters Navajo AZ", 2143, 34.0631006, -110.0189953, "Big Mountain", "2143 meters Navajo AZ", NULL } }; void CsvFileTest::ComparePlacemark(const PlacemarkPtr& placemark, size_t csv_offset) { const CsvTestLine& csv_test_line = kCsvTestLines[csv_offset]; int score = kmlconvenience::GetFeatureScore(placemark); double lat, lon; ASSERT_TRUE(kmlengine::GetFeatureLatLon(placemark, &lat, &lon)); ASSERT_EQ(csv_test_line.score, score); ASSERT_EQ(csv_test_line.lat, lat); ASSERT_EQ(csv_test_line.lon, lon); if (csv_test_line.name) { ASSERT_EQ(string(csv_test_line.name), placemark->get_name()); } if (csv_test_line.description) { ASSERT_EQ(string(csv_test_line.description), placemark->get_description()); } if (csv_test_line.styleurl) { ASSERT_EQ(string(csv_test_line.styleurl), placemark->get_styleurl()); } } TEST_F(CsvFileTest, TestParseCsvLine) { FeatureList feature_list; CsvFile csv_file(&feature_list); const size_t kLineCount = sizeof(kCsvTestLines)/sizeof(kCsvTestLines[0]); for (size_t i = 0; i < kLineCount; ++i) { csv_file.ParseCsvLine(kCsvTestLines[i].csv_line); } FolderPtr folder = KmlFactory::GetFactory()->CreateFolder(); feature_list.Save(folder); ASSERT_EQ(kLineCount, folder->get_feature_array_size()); for (size_t i = 0; i < kLineCount; ++i) { PlacemarkPtr placemark = kmldom::AsPlacemark( folder->get_feature_array_at(i)); ASSERT_TRUE(placemark); ComparePlacemark(placemark, i); } } TEST_F(CsvFileTest, TestParseCsvFile) { FeatureList feature_list; CsvFile csv_file(&feature_list); const size_t kTestCsvLines(101); const string kTestCsv(string(DATADIR) + string("/csv/test.csv")); csv_file.ParseCsvFile(kTestCsv.c_str()); FolderPtr folder = KmlFactory::GetFactory()->CreateFolder(); feature_list.Save(folder); ASSERT_EQ(kTestCsvLines, folder->get_feature_array_size()); PlacemarkPtr placemark; ComparePlacemark(kmldom::AsPlacemark(folder->get_feature_array_at(0)), 0); const size_t kTestLineCount = sizeof(kCsvTestLines)/sizeof(kCsvTestLines[0]); ComparePlacemark(kmldom::AsPlacemark( folder->get_feature_array_at(kTestCsvLines-1)), kTestLineCount-1); } } // namespace kmlconvenience libkml-1.3.0/tests/kml/convenience/csv_parser_test.cc000066400000000000000000000531361263603257100227400ustar00rootroot00000000000000// Copyright 2010, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the CsvParser class. #include "kml/convenience/csv_parser.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" #include "kml/base/csv_splitter.h" #include "kml/base/file.h" #include "kml/base/string_util.h" #include "kml/convenience/convenience.h" #include "kml/engine.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlconvenience { // This CsvParserHandler adds each Placemark to the supplied Container and // saves each non OK status to an error log if one is supplied. class ContainerSaver : public CsvParserHandler { public: typedef std::vector > ErrorLog; ContainerSaver(kmldom::ContainerPtr container, ErrorLog* log) : container_(container), log_(log) { } virtual bool HandleLine(int line_number, CsvParserStatus status, kmldom::PlacemarkPtr placemark) { if (status == CSV_PARSER_STATUS_OK) { container_->add_feature(placemark); } else if (log_) { log_->push_back(std::make_pair(line_number, status)); } return true; } private: kmldom::ContainerPtr container_; ErrorLog* log_; }; // This internal utility function returns true iff the given has // a with the given latitude and longitude. static bool CheckPointLatLon(const kmldom::PlacemarkPtr& placemark, double want_lat, double want_lon) { if (placemark && placemark->has_geometry()) { if (kmldom::PointPtr point = kmldom::AsPoint(placemark->get_geometry())) { double got_lat; double got_lon; return kmlengine::GetPointLatLon(point, &got_lat, &got_lon) && want_lat == got_lat && want_lon == got_lon; } } return false; } // This test verifies that a bad schema is detected. TEST(CsvParserTest, TestSetSchemaEmpty) { CsvParserHandler csv_parser_handler; CsvParser csv_parser(NULL, &csv_parser_handler); kmlbase::StringVector empty; ASSERT_EQ(CSV_PARSER_STATUS_BLANK_LINE, csv_parser.SetSchema(empty)); } // This test verifies that a minimal schema is accepted. TEST(CsvParserTest, TestSetSchemaMinimal) { CsvParserHandler csv_parser_handler; CsvParser csv_parser(NULL, &csv_parser_handler); kmlbase::StringVector schema; schema.push_back("latitude"); schema.push_back("longitude"); ASSERT_EQ(CSV_PARSER_STATUS_OK, csv_parser.SetSchema(schema)); } // This test verifies that a schema with items is accepted. TEST(CsvParserTest, TestSetSchemaExtraCols) { kmlbase::CsvSplitter schema_csv("latitude,longitude,par,yardage\n"); kmlbase::StringVector schema; schema_csv.SplitCurrentLine(&schema); CsvParserHandler csv_parser_handler; CsvParser csv_parser(&schema_csv, &csv_parser_handler); ASSERT_EQ(CSV_PARSER_STATUS_OK, csv_parser.SetSchema(schema)); const CsvParser::CsvSchema& csv_schema = csv_parser.GetSchema(); ASSERT_EQ(static_cast(2), csv_schema.size()); ASSERT_EQ(string("par"), csv_schema.find(2)->second); ASSERT_EQ(string("yardage"), csv_schema.find(3)->second); } // This test verifies that a schema with mixed case names is accepted. TEST(CsvParserTest, TestSetSchemaMixedCase) { kmlbase::CsvSplitter schema_csv( "Name,Longitude,Latitude,BlueYardage,WhiteYardage," "MensHandicap,MensPar,RedYardage,WomensHandicap,WomensPar\n"); kmlbase::StringVector schema; schema_csv.SplitCurrentLine(&schema); CsvParserHandler csv_parser_handler; CsvParser csv_parser(&schema_csv, &csv_parser_handler); ASSERT_EQ(CSV_PARSER_STATUS_OK, csv_parser.SetSchema(schema)); const CsvParser::CsvSchema& csv_schema = csv_parser.GetSchema(); ASSERT_EQ(static_cast(7), csv_schema.size()); ASSERT_TRUE(csv_schema.end() == csv_schema.find(0)); ASSERT_EQ("BlueYardage", csv_schema.find(3)->second); ASSERT_EQ("WhiteYardage", csv_schema.find(4)->second); ASSERT_EQ("MensHandicap", csv_schema.find(5)->second); ASSERT_EQ("MensPar", csv_schema.find(6)->second); ASSERT_EQ("RedYardage", csv_schema.find(7)->second); ASSERT_EQ("WomensHandicap", csv_schema.find(8)->second); ASSERT_EQ("WomensPar", csv_schema.find(9)->second); } // This test verifies that schema errors are properly detected. TEST(CsvParserTest, TestSetSchemaErrors) { kmlbase::StringVector schema; boost::scoped_ptr csv_parser(new CsvParser(NULL, NULL)); ASSERT_EQ(CSV_PARSER_STATUS_BLANK_LINE, csv_parser->SetSchema(schema)); schema.clear(); schema.push_back("fish"); schema.push_back("birds"); csv_parser.reset(new CsvParser(NULL, NULL)); ASSERT_EQ(CSV_PARSER_STATUS_NO_LAT_LON, csv_parser->SetSchema(schema)); schema.clear(); schema.push_back("fish"); schema.push_back("longitude"); csv_parser.reset(new CsvParser(NULL, NULL)); ASSERT_EQ(CSV_PARSER_STATUS_NO_LAT_LON, csv_parser->SetSchema(schema)); schema.clear(); schema.push_back("birds"); schema.push_back("latitude"); csv_parser.reset(new CsvParser(NULL, NULL)); ASSERT_EQ(CSV_PARSER_STATUS_NO_LAT_LON, csv_parser->SetSchema(schema)); } // This test verifies that schema errors are properly reported to the // supplied CsvParserHandler. TEST(CsvParserTest, TestParseCsvSetSchemaErrors) { boost::scoped_ptr csv_splitter( new kmlbase::CsvSplitter("\n1,2,3,a,b,c\n")); ContainerSaver::ErrorLog log; ContainerSaver container_saver(NULL, &log); ASSERT_FALSE(CsvParser::ParseCsv(csv_splitter.get(), &container_saver)); ASSERT_EQ(static_cast(1), log.size()); ASSERT_EQ(1, log[0].first); // Schema is always line 1. ASSERT_EQ(CSV_PARSER_STATUS_BLANK_LINE, log[0].second); csv_splitter.reset(new kmlbase::CsvSplitter("a,b\n1,2,3,a,b,c\n")); log.clear(); ASSERT_FALSE(CsvParser::ParseCsv(csv_splitter.get(), &container_saver)); ASSERT_EQ(static_cast(1), log.size()); ASSERT_EQ(1, log[0].first); // Schema is always line 1. ASSERT_EQ(CSV_PARSER_STATUS_NO_LAT_LON, log[0].second); csv_splitter.reset(new kmlbase::CsvSplitter("latitude,b\n1,2,3,a,b,c\n")); log.clear(); ASSERT_FALSE(CsvParser::ParseCsv(csv_splitter.get(), &container_saver)); ASSERT_EQ(static_cast(1), log.size()); ASSERT_EQ(1, log[0].first); // Schema is always line 1. ASSERT_EQ(CSV_PARSER_STATUS_NO_LAT_LON, log[0].second); csv_splitter.reset(new kmlbase::CsvSplitter("longitude,b\n1,2,3,a,b,c\n")); log.clear(); ASSERT_FALSE(CsvParser::ParseCsv(csv_splitter.get(), &container_saver)); ASSERT_EQ(static_cast(1), log.size()); ASSERT_EQ(1, log[0].first); // Schema is always line 1. ASSERT_EQ(CSV_PARSER_STATUS_NO_LAT_LON, log[0].second); } // This test verifies full parse of a simple single line CSV file. TEST(CsvParserTest, TestParseCsvDataOneLine) { kmlbase::CsvSplitter csv_data("name,latitude,longitude\n" "hello,38.1,-121.2\n"); kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ContainerSaver container_saver(folder, NULL); ASSERT_TRUE(CsvParser::ParseCsv(&csv_data, &container_saver)); ASSERT_EQ(static_cast(1), folder->get_feature_array_size()); ASSERT_TRUE(CheckPointLatLon( kmldom::AsPlacemark(folder->get_feature_array_at(0)), 38.1, -121.2)); } // This test verifies full parse of a simple single line CSV file using // all "built-in" fields. TEST(CsvParserTest, TestCsvLineToPlacemarkWithNameAndDescription) { const string kName("Hi there"); const string kDescription("How are you?"); const double kLat(38.123); const double kLon(-123.125); kmlbase::CsvSplitter csv_data( string("name,latitude,longitude,description\n") + kName + "," + kmlbase::ToString(kLat) + "," + kmlbase::ToString(kLon) + "," + kDescription); kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ContainerSaver container_saver(folder, NULL); ASSERT_TRUE(CsvParser::ParseCsv(&csv_data, &container_saver)); ASSERT_EQ(static_cast(1), folder->get_feature_array_size()); kmldom::PlacemarkPtr placemark = kmldom::AsPlacemark(folder->get_feature_array_at(0)); ASSERT_TRUE(placemark); ASSERT_TRUE(CheckPointLatLon(placemark, kLat, kLon)); ASSERT_TRUE(placemark->has_name()); ASSERT_EQ(kName, placemark->get_name()); ASSERT_TRUE(placemark->has_description()); ASSERT_EQ(kDescription, placemark->get_description()); } // This test verifies full parse of a simple single line CSV file using // all "built-in" fields and some fields. TEST(CsvParserTest, TestCsvLineToPlacemarkWithExtendedData) { const string kName("Hi there"); const double kLat(38.123); const double kLon(-123.125); const string kWid("42"); const string kHt("1001"); kmlbase::CsvSplitter csv_data( string("name,longitude,latitude,wid,ht\n") + kName + "," + kmlbase::ToString(kLon) + "," + kmlbase::ToString(kLat) + "," + kWid + "," + kHt); kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ContainerSaver container_saver(folder, NULL); ASSERT_TRUE(CsvParser::ParseCsv(&csv_data, &container_saver)); ASSERT_EQ(static_cast(1), folder->get_feature_array_size()); kmldom::PlacemarkPtr placemark = kmldom::AsPlacemark(folder->get_feature_array_at(0)); ASSERT_TRUE(CheckPointLatLon(placemark, kLat, kLon)); ASSERT_TRUE(placemark->has_extendeddata()); const kmldom::ExtendedDataPtr& ed = placemark->get_extendeddata(); ASSERT_EQ(static_cast(2), ed->get_data_array_size()); ASSERT_EQ(string("wid"), ed->get_data_array_at(0)->get_name()); ASSERT_EQ(kWid, ed->get_data_array_at(0)->get_value()); ASSERT_EQ(string("ht"), ed->get_data_array_at(1)->get_name()); ASSERT_EQ(kHt, ed->get_data_array_at(1)->get_value()); } TEST(CsvParserTest, TestCsvLineToPlacemarkWithQuotedData) { kmlbase::CsvSplitter csv_data("longitude,latitude\n" "\"1.1\",\"-3.3\"\n" "2.2,\"-4.4\"\n" "\"2.2\",-4.4\n"); kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ContainerSaver container_saver(folder, NULL); ASSERT_TRUE(CsvParser::ParseCsv(&csv_data, &container_saver)); ASSERT_EQ(static_cast(3), folder->get_feature_array_size()); kmldom::PlacemarkPtr placemark = kmldom::AsPlacemark(folder->get_feature_array_at(0)); ASSERT_TRUE(CheckPointLatLon(placemark, -3.3, 1.1)); placemark = kmldom::AsPlacemark(folder->get_feature_array_at(1)); ASSERT_TRUE(CheckPointLatLon(placemark, -4.4, 2.2)); placemark = kmldom::AsPlacemark(folder->get_feature_array_at(2)); ASSERT_TRUE(CheckPointLatLon(placemark, -4.4, 2.2)); } // This verifies the CsvParser on a test file. TEST(CsvParserTest, TestLincolnParkGc) { kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ContainerSaver container_saver(folder, NULL); string csv_data; ASSERT_TRUE(kmlbase::File::ReadFileToString( kmlbase::File::JoinPaths(DATADIR, kmlbase::File::JoinPaths("csv", "lincoln-park-gc.csv")), &csv_data)); kmlbase::CsvSplitter csv_splitter(csv_data); ASSERT_TRUE(CsvParser::ParseCsv(&csv_splitter, &container_saver)); ASSERT_EQ(static_cast(18), folder->get_feature_array_size()); double lat_sum = 0; double lon_sum = 0; for (size_t i = 0; i < 18; ++i) { const kmldom::PlacemarkPtr& p = kmldom::AsPlacemark(folder->get_feature_array_at(i)); ASSERT_TRUE(p); ASSERT_EQ(kmlbase::ToString(i+1), p->get_name()); ASSERT_TRUE(p->has_extendeddata()); const kmldom::ExtendedDataPtr ed = p->get_extendeddata(); ASSERT_EQ(static_cast(7), ed->get_data_array_size()); double lat, lon; ASSERT_TRUE(kmlengine::GetFeatureLatLon(p, &lat, &lon)); lat_sum += lat; lon_sum += lon; ASSERT_EQ("BlueYardage", ed->get_data_array_at(0)->get_name()); ASSERT_EQ("WhiteYardage", ed->get_data_array_at(1)->get_name()); ASSERT_EQ("MensHandicap", ed->get_data_array_at(2)->get_name()); ASSERT_EQ("MensPar", ed->get_data_array_at(3)->get_name()); ASSERT_EQ("RedYardage", ed->get_data_array_at(4)->get_name()); ASSERT_EQ("WomensHandicap", ed->get_data_array_at(5)->get_name()); ASSERT_EQ("WomensPar", ed->get_data_array_at(6)->get_name()); } ASSERT_DOUBLE_EQ(680.115712, lat_sum); ASSERT_DOUBLE_EQ(-2204.970429, lon_sum); } // This is a list of errors in lincoln-park-gc-errors.csv: static const struct { const int line_number; const CsvParserStatus status; } kLincolnParkGcErrors[] = { { 2, CSV_PARSER_STATUS_COMMENT }, { 4, CSV_PARSER_STATUS_COMMENT }, { 5, CSV_PARSER_STATUS_BAD_LAT_LON }, { 6, CSV_PARSER_STATUS_COMMENT }, { 7, CSV_PARSER_STATUS_BAD_LAT_LON }, { 8, CSV_PARSER_STATUS_COMMENT }, { 9, CSV_PARSER_STATUS_BAD_LAT_LON }, { 10, CSV_PARSER_STATUS_COMMENT }, { 11, CSV_PARSER_STATUS_BAD_LAT_LON }, { 12, CSV_PARSER_STATUS_COMMENT }, { 13, CSV_PARSER_STATUS_INVALID_DATA }, { 17, CSV_PARSER_STATUS_COMMENT }, }; // This verifies the CsvParser on a test file with known bad lines. TEST(CsvParserTest, TestLincolnParkGcErrors) { kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ContainerSaver::ErrorLog log; ContainerSaver container_saver(folder, &log); string csv_data; ASSERT_TRUE(kmlbase::File::ReadFileToString( kmlbase::File::JoinPaths(DATADIR, kmlbase::File::JoinPaths("csv", "lincoln-park-gc-errors.csv")), &csv_data)); kmlbase::CsvSplitter csv_splitter(csv_data); ASSERT_TRUE(CsvParser::ParseCsv(&csv_splitter, &container_saver)); ASSERT_EQ(static_cast(13), folder->get_feature_array_size()); ASSERT_EQ(static_cast(12), log.size()); size_t nerrs = sizeof(kLincolnParkGcErrors)/sizeof(kLincolnParkGcErrors[0]); ASSERT_EQ(nerrs, log.size()); for (size_t i = 0; i < nerrs; ++i) { ASSERT_EQ(kLincolnParkGcErrors[i].line_number, log[i].first); ASSERT_EQ(kLincolnParkGcErrors[i].status, log[i].second); } } // This verifies that a bad data line is detected. TEST(CsvParserTest, TestBadLineError) { kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ContainerSaver::ErrorLog log; ContainerSaver container_saver(folder, &log); kmlbase::CsvSplitter csv_splitter("latitude,longitude\n" "this,is,bad\n" "1.1,-2.2\n"); ASSERT_TRUE(CsvParser::ParseCsv(&csv_splitter, &container_saver)); ASSERT_EQ(static_cast(1), log.size()); ASSERT_EQ(2, log[0].first); ASSERT_EQ(CSV_PARSER_STATUS_INVALID_DATA, log[0].second); ASSERT_EQ(static_cast(1), folder->get_feature_array_size()); kmldom::PlacemarkPtr placemark = kmldom::AsPlacemark(folder->get_feature_array_at(0)); ASSERT_TRUE(CheckPointLatLon(placemark, 1.1, -2.2)); } TEST(CsvParserTest, TestCsvLineToPlacemarkErrors) { kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ContainerSaver::ErrorLog log; ContainerSaver container_saver(folder, &log); // Create a CsvSplitter over some CSV data with a minimally acceptible // schema and lines that are bad in different ways. kmlbase::CsvSplitter csv_splitter("name,latitude,longitude\n" "this,is,fairly,bad\n" "bad\n" "name,1.1\n" "name,1.1,bad longitude\n" "name,bad latitude,-3.3\n" "name,1.1,-2.2\n"); ASSERT_TRUE(CsvParser::ParseCsv(&csv_splitter, &container_saver)); // There's one good line. ASSERT_EQ(static_cast(1), folder->get_feature_array_size()); // There are three bad lines. ASSERT_EQ(static_cast(5), log.size()); // "this,is,fairly,bad" has too many columns ASSERT_EQ(2, log[0].first); ASSERT_EQ(CSV_PARSER_STATUS_INVALID_DATA, log[0].second); // "bad" has too few columns ASSERT_EQ(3, log[1].first); ASSERT_EQ(CSV_PARSER_STATUS_INVALID_DATA, log[1].second); // "name,1.1" has too few columns ASSERT_EQ(4, log[2].first); ASSERT_EQ(CSV_PARSER_STATUS_INVALID_DATA, log[2].second); // "name,1.1,bad longitude\n" ASSERT_EQ(5, log[3].first); ASSERT_EQ(CSV_PARSER_STATUS_BAD_LAT_LON, log[3].second); ASSERT_EQ(6, log[4].first); ASSERT_EQ(CSV_PARSER_STATUS_BAD_LAT_LON, log[4].second); } TEST(CsvParserTest, TestFeatureId) { kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ContainerSaver container_saver(folder, NULL); kmlbase::CsvSplitter csv_splitter("feature-id,latitude,longitude\n" "abc,1.1,-2.2\n"); ASSERT_TRUE(CsvParser::ParseCsv(&csv_splitter, &container_saver)); ASSERT_EQ(static_cast(1), folder->get_feature_array_size()); const kmldom::PlacemarkPtr p = kmldom::AsPlacemark(folder->get_feature_array_at(0)); ASSERT_TRUE(p); ASSERT_TRUE(p->has_id()); ASSERT_EQ(string("feature-abc"), p->get_id()); ASSERT_TRUE(CheckPointLatLon(p, 1.1, -2.2)); } TEST(CsvParserTest, TestStyleId) { kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ContainerSaver container_saver(folder, NULL); kmlbase::CsvSplitter csv_splitter("feature-id,latitude,longitude,style-id\n" "abc,1.1,-2.2,big\n" "xyz,-1.1,2.2,little\n"); ASSERT_TRUE(CsvParser::ParseCsv(&csv_splitter, &container_saver)); ASSERT_EQ(static_cast(2), folder->get_feature_array_size()); kmldom::PlacemarkPtr p = kmldom::AsPlacemark(folder->get_feature_array_at(0)); ASSERT_TRUE(p); ASSERT_TRUE(p->has_id()); ASSERT_EQ(string("feature-abc"), p->get_id()); ASSERT_TRUE(p->has_styleurl()); ASSERT_EQ(string("style.kml#style-big"), p->get_styleurl()); ASSERT_TRUE(CheckPointLatLon(p, 1.1, -2.2)); p = kmldom::AsPlacemark(folder->get_feature_array_at(1)); ASSERT_TRUE(p); ASSERT_TRUE(p->has_id()); ASSERT_EQ(string("feature-xyz"), p->get_id()); ASSERT_TRUE(p->has_styleurl()); ASSERT_EQ(string("style.kml#style-little"), p->get_styleurl()); ASSERT_TRUE(CheckPointLatLon(p, -1.1, 2.2)); } // This verifies the CsvParser on a test file with both feature-id and style-id // columns. TEST(CsvParserTest, TestGnisAk101) { kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ContainerSaver container_saver(folder, NULL); string csv_data; ASSERT_TRUE(kmlbase::File::ReadFileToString( kmlbase::File::JoinPaths(DATADIR, kmlbase::File::JoinPaths("csv", "gnis-ak-first-101.csv")), &csv_data)); kmlbase::CsvSplitter csv_splitter(csv_data); ASSERT_TRUE(CsvParser::ParseCsv(&csv_splitter, &container_saver)); ASSERT_EQ(static_cast(101), folder->get_feature_array_size()); double lat_sum = 0; double lon_sum = 0; for (size_t i = 0; i < 101; ++i) { const kmldom::PlacemarkPtr& p = kmldom::AsPlacemark(folder->get_feature_array_at(i)); ASSERT_TRUE(p); ASSERT_TRUE(p->has_extendeddata()); const kmldom::ExtendedDataPtr ed = p->get_extendeddata(); ASSERT_EQ(static_cast(14), ed->get_data_array_size()); double lat, lon; ASSERT_TRUE(kmlengine::GetFeatureLatLon(p, &lat, &lon)); lat_sum += lat; lon_sum += lon; ASSERT_EQ("STATE_ALPHA", ed->get_data_array_at(0)->get_name()); ASSERT_EQ("STATE_NUMERIC", ed->get_data_array_at(1)->get_name()); ASSERT_EQ("COUNTY_NAME", ed->get_data_array_at(2)->get_name()); ASSERT_EQ("COUNTY_NUMERIC", ed->get_data_array_at(3)->get_name()); ASSERT_EQ("PRIMARY_LAT_DMS", ed->get_data_array_at(4)->get_name()); ASSERT_EQ("PRIM_LONG_DMS", ed->get_data_array_at(5)->get_name()); ASSERT_EQ("SOURCE_LAT_DMS", ed->get_data_array_at(6)->get_name()); ASSERT_EQ("SOURCE_LONG_DMS", ed->get_data_array_at(7)->get_name()); ASSERT_EQ("SOURCE_LAT_DEC", ed->get_data_array_at(8)->get_name()); ASSERT_EQ("SOURCE_LONG_DEC", ed->get_data_array_at(9)->get_name()); ASSERT_EQ("ELEVATION", ed->get_data_array_at(10)->get_name()); ASSERT_EQ("MAP_NAME", ed->get_data_array_at(11)->get_name()); ASSERT_EQ("DATE_CREATED", ed->get_data_array_at(12)->get_name()); ASSERT_EQ("DATE_EDITED", ed->get_data_array_at(13)->get_name()); } ASSERT_DOUBLE_EQ(6337.5438887, lat_sum); ASSERT_DOUBLE_EQ(-15130.5061107, lon_sum); } } // end namespace kmlconvenience libkml-1.3.0/tests/kml/convenience/element_counter_test.cc000066400000000000000000000111101263603257100237430ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the ElementCounter class. #include "kml/convenience/element_counter.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" #include "kml/dom.h" #include "kml/dom/xsd.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlconvenience { using kmldom::ElementPtr; using kmldom::Parser; using kmldom::Xsd; class ElementCounterTest : public testing::Test { protected: virtual void SetUp() { element_counter_.reset(new ElementCounter(&element_count_map_)); parser_.reset(new Parser); parser_->AddObserver(element_counter_.get()); xsd_ = Xsd::GetSchema(); } ElementCountMap element_count_map_; boost::scoped_ptr element_counter_; boost::scoped_ptr parser_; Xsd* xsd_; }; TEST_F(ElementCounterTest, TestEmpty) { ASSERT_TRUE(element_count_map_.empty()); } TEST_F(ElementCounterTest, TestBasicParse) { ElementPtr root = parser_->Parse("", NULL); ASSERT_TRUE(root); ASSERT_EQ(static_cast(1), element_count_map_.size()); ASSERT_EQ(1, element_count_map_[kmldom::Type_Placemark]); } TEST_F(ElementCounterTest, TestMultipleElements) { const string kKml(""); ElementPtr root = parser_->Parse(kKml, NULL); ASSERT_TRUE(root); ASSERT_EQ(static_cast(2), element_count_map_.size()); ASSERT_EQ(1, element_count_map_[kmldom::Type_Folder]); ASSERT_EQ(2, element_count_map_[kmldom::Type_Placemark]); } TEST_F(ElementCounterTest, TestRepeatedParse) { const string kXml(""); ElementPtr root = parser_->Parse(kXml, NULL); ASSERT_TRUE(root); ASSERT_EQ(static_cast(1), element_count_map_.size()); ASSERT_EQ(1, element_count_map_[kmldom::Type_Placemark]); root = parser_->Parse(kXml, NULL); ASSERT_TRUE(root); ASSERT_EQ(static_cast(1), element_count_map_.size()); ASSERT_EQ(2, element_count_map_[kmldom::Type_Placemark]); } TEST_F(ElementCounterTest, TestEachComplex) { const int kBegin = static_cast(kmldom::Type_Alias); const int kEnd = static_cast(kmldom::Type_ViewVolume) + 1; for (int i = kBegin; i != kEnd; ++i) { kmldom::KmlDomType type_id = static_cast(i); if (type_id == kmldom::Type_IconStyleIcon || type_id == kmldom::Type_Metadata) { continue; } const string kXml(string("<") + xsd_->ElementName(i) + "/>"); ElementPtr root = parser_->Parse(kXml, NULL); ASSERT_TRUE(root); ASSERT_EQ(type_id, root->Type()); ASSERT_EQ(1, element_count_map_[type_id]); } const size_t kExpectedSize = static_cast(kEnd - kBegin - 2); ASSERT_EQ(kExpectedSize, element_count_map_.size()); for (int i = kBegin; i != kEnd; ++i) { kmldom::KmlDomType type_id = static_cast(i); if (type_id == kmldom::Type_IconStyleIcon || type_id == kmldom::Type_Metadata) { continue; } ASSERT_EQ(1, element_count_map_[type_id]); } } } // namespace kmlconvenience libkml-1.3.0/tests/kml/convenience/feature_list_test.cc000066400000000000000000000240021263603257100232450ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the FeatureList class. #include "kml/convenience/feature_list.h" #include "gtest/gtest.h" #include "kml/dom.h" #include "kml/convenience/convenience.h" #include "kml/engine/bbox.h" #include "kml/engine/location_util.h" namespace kmlconvenience { using kmldom::FolderPtr; using kmldom::KmlFactory; using kmldom::PlacemarkPtr; using kmldom::RegionPtr; using kmlengine::Bbox; // Make these contants to avoid cluttering the code with static_cast. static const size_t kSize0 = 0; static const size_t kSize1 = 1; static const struct { double lat, lon; } kPoints[] = { { 46.6864,9.38456 }, { 46.0807,9.00158 }, { 46.6994,9.43047 }, { 46.0706,8.97776 }, { 46.6613,9.1914 }, { 46.0843,9.00969 }, { 46.0884,9.02766 }, { 46.0961,9.05026 }, { 46.078,8.99814 }, { 46.6922,9.40111 }, { 46.0695,8.97107 }, { 46.6065,10.4327 }, { 46.6904,9.18267 }, { 46.0736,8.98457 }, { 46.6938,9.43975 }, { 46.4831,8.7907 }, { 46.0922,9.05428 }, { 46.6982,9.40493 }, { 46.7011,9.407 }, { 46.6247,9.1863 }, { 46.6914,9.3952 } }; class FeatureListTest : public testing::Test { protected: virtual void SetUp() { CreateFeatureList(); } void CreateFeatureList(); int CountPointsInBbox(const Bbox& bbox) const; static RegionPtr CreateRegionFromBbox(const Bbox& bbox, double minlodpixels, double maxlodpixels); size_t initial_input_point_count_; Bbox initial_input_bbox_; FeatureList input_; FeatureList output_; }; // This is an internal utility to count the number of points in the kPoints // array contained by the given bounding box. int FeatureListTest::CountPointsInBbox(const Bbox& bbox) const { int point_count = 0; for (size_t i = 0; i < initial_input_point_count_; ++i) { if (bbox.Contains(kPoints[i].lat, kPoints[i].lon)) { ++point_count; } } return point_count; } // This is an internal utility to create the input_ FeatureList from the // kPoints array. void FeatureListTest::CreateFeatureList() { initial_input_point_count_ = sizeof(kPoints)/sizeof(kPoints[0]); for (size_t i = 0; i < initial_input_point_count_; ++i) { input_.PushBack(kmlconvenience::CreatePointPlacemark("hi", kPoints[i].lat, kPoints[i].lon)); } // This is an internal assertion to verify the FeatureList was created // properly. ASSERT_EQ(initial_input_point_count_, input_.Size()); for (size_t i = 0; i < initial_input_point_count_; ++i) { initial_input_bbox_.ExpandLatLon(kPoints[i].lat, kPoints[i].lon); } } // This verifies that the two FeatureLists within the test fixture are in // the expected state. TEST_F(FeatureListTest, TestDefault) { ASSERT_EQ(initial_input_point_count_, input_.Size()); ASSERT_EQ(kSize0, output_.Size()); } // This verifies the Save method including preservation of order. TEST_F(FeatureListTest, TestSave) { // Create a Folder and save out to it. FolderPtr folder = KmlFactory::GetFactory()->CreateFolder(); input_.Save(folder); // Verify the state of the input_ FeatureList was not changed. ASSERT_EQ(initial_input_point_count_, input_.Size()); // Verify everything was saved. ASSERT_EQ(initial_input_point_count_, folder->get_feature_array_size()); for (size_t i = 0; i < initial_input_point_count_; ++i) { // Verify that these are all Placemarks PlacemarkPtr placemark = kmldom::AsPlacemark(folder->get_feature_array_at(i)); ASSERT_TRUE(placemark); // Verify that each is a proper Point Placemark with lat and lon. double lat, lon; ASSERT_TRUE(kmlengine::GetPlacemarkLatLon(placemark, &lat, &lon)); // Verify that the order from the input_ FeatureList is preserved. ASSERT_EQ(lat, kPoints[i].lat); ASSERT_EQ(lon, kPoints[i].lon); } } // This verifies that the BboxSplit and RegionSplit methods are well behaved // when given a NULL output FeatureList. TEST_F(FeatureListTest, TestNull) { Bbox bbox; ASSERT_EQ(kSize0, input_.BboxSplit(bbox, 0, NULL)); RegionPtr region; ASSERT_EQ(kSize0, input_.RegionSplit(region, 0, NULL)); input_.PushBack(NULL); ASSERT_EQ(initial_input_point_count_, input_.Size()); } // This verifies the PushBack() method. TEST_F(FeatureListTest, TestPushBack) { // Create a point and a bounding box that contains it. const double kLat = 12.34; const double kLon = -65.43; PlacemarkPtr placemark = kmlconvenience::CreatePointPlacemark("hi", kLat, kLon); Bbox bbox; bbox.ExpandLatLon(kLat, kLon); // Remove any points already in this bounding box. This makes the test // more robust in the face of any changes to kPoints. input_.BboxSplit(bbox, 0, NULL); // Verify no points remain within this bounding box. ASSERT_EQ(kSize0, input_.BboxSplit(bbox, 0, NULL)); size_t previous_size = input_.Size(); // Add the new point. input_.PushBack(kmlconvenience::CreatePointPlacemark("hi", kLat, kLon)); ASSERT_EQ(previous_size + 1, input_.Size()); // Split on the point's bounding box and verify exactly it was split out. ASSERT_EQ(kSize1, input_.BboxSplit(bbox, 0, &output_)); // Verify the input is back to its previous size. ASSERT_EQ(previous_size, input_.Size()); // Verify that splitting on this bbox again results in no output // and no change in size. ASSERT_EQ(kSize0, input_.BboxSplit(bbox, 0, &output_)); ASSERT_EQ(previous_size, input_.Size()); } // This is an internal utility to create a KML Region from a Bbox. RegionPtr FeatureListTest::CreateRegionFromBbox(const Bbox& bbox, double minlodpixels, double maxlodpixels) { return kmlconvenience::CreateRegion2d(bbox.get_north(), bbox.get_south(), bbox.get_east(), bbox.get_west(), minlodpixels, maxlodpixels); } // This verifies that splitting on the bounding box for the FeatureList removes // all features from the FeatureList. TEST_F(FeatureListTest, TestRegionSplitAll) { ASSERT_EQ(static_cast(initial_input_point_count_), CountPointsInBbox(initial_input_bbox_)); RegionPtr region = CreateRegionFromBbox(initial_input_bbox_, 128, -1); input_.RegionSplit(region, 0, &output_); ASSERT_EQ(initial_input_point_count_, output_.Size()); ASSERT_EQ(kSize0, input_.Size()); } // This verifies that splitting a bounded number of items from the FeatureList // behaves properly. TEST_F(FeatureListTest, TestRegionSplitSome) { RegionPtr region = CreateRegionFromBbox(initial_input_bbox_, 128, -1); size_t split_count = initial_input_point_count_/4; ASSERT_TRUE(split_count); input_.RegionSplit(region, split_count, &output_); ASSERT_EQ(split_count, output_.Size()); ASSERT_EQ(initial_input_point_count_ - split_count, input_.Size()); } // This verifies that successive RegionSplit() calls on several Regions // covering the extent of the FeatureList's bounding box splits out all // proper features properly. TEST_F(FeatureListTest, TestRegionSplitIncrementally) { double mid_lat, mid_lon; initial_input_bbox_.GetCenter(&mid_lat, &mid_lon); Bbox ne_bbox(initial_input_bbox_.get_north(), mid_lat, initial_input_bbox_.get_east(), mid_lon); size_t ne_point_count = CountPointsInBbox(ne_bbox); RegionPtr ne_region = CreateRegionFromBbox(ne_bbox, 128, -1); ASSERT_EQ(ne_point_count, input_.RegionSplit(ne_region, 0, &output_)); ASSERT_EQ(ne_point_count, output_.Size()); ASSERT_EQ(initial_input_point_count_ - ne_point_count, input_.Size()); Bbox nw_bbox(initial_input_bbox_.get_north(), mid_lat, mid_lon, initial_input_bbox_.get_west()); size_t nw_point_count = CountPointsInBbox(nw_bbox); RegionPtr nw_region = CreateRegionFromBbox(nw_bbox, 128, -1); ASSERT_EQ(nw_point_count, input_.RegionSplit(nw_region, 0, &output_)); ASSERT_EQ(initial_input_point_count_ - ne_point_count - nw_point_count, input_.Size()); Bbox south_bbox(mid_lat, initial_input_bbox_.get_south(), initial_input_bbox_.get_east(), initial_input_bbox_.get_west()); size_t south_point_count = CountPointsInBbox(south_bbox); RegionPtr south_region = CreateRegionFromBbox(south_bbox, 128, -1); ASSERT_EQ(south_point_count, input_.RegionSplit(south_region, 0, &output_)); ASSERT_EQ(kSize0, input_.Size()); ASSERT_EQ(initial_input_point_count_, output_.Size()); } } // namespace kmlconvenience libkml-1.3.0/tests/kml/convenience/google_doc_list_test.cc000066400000000000000000000107221263603257100237170ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the GoogleDocList class. #include "kml/convenience/google_doc_list.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" #include "kml/base/file.h" #include "kml/convenience/http_client.h" #include "kml/convenience/http_client_test_util.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlconvenience { class GoogleDocListTest : public testing::Test { protected: void SetUp() { } boost::scoped_ptr google_doc_list_; }; // This tests NULL use of the Create method. TEST_F(GoogleDocListTest, TestNullCreate) { // NULL/empty args? Null return (no crash, no hang, no exception, etc). ASSERT_FALSE(GoogleDocList::Create(NULL)); } TEST_F(GoogleDocListTest, TestGetMetafeedUri) { // No user of the GoogleDocList class should // assume anything of the metafeed URI itself. But, we // can expect that it exists. ASSERT_TRUE(GoogleDocList::get_metafeed_uri()); } TEST_F(GoogleDocListTest, TestGetScope) { // No user of the GoogleDocList class should // assume anything of the scope. But, we // can expect that it exists. google_doc_list_.reset( GoogleDocList::Create(new HttpClient("dummy"))); ASSERT_FALSE(google_doc_list_->get_scope().empty()); } // This tests basic normal use of the GetMetaFeedXml() method. TEST_F(GoogleDocListTest, TestGetMetaFeedXml) { HttpClient* http_client = new HttpClient("TestGetMetaFeedXml"); http_client->Login("local", "user@gmail.com", "user-password"); google_doc_list_.reset(GoogleDocList::Create(http_client)); ASSERT_TRUE(google_doc_list_.get()); string meta_feed; ASSERT_TRUE(google_doc_list_->GetMetaFeedXml(&meta_feed)); size_t end_of_first_line = meta_feed.find('\n'); ASSERT_NE(string::npos, end_of_first_line); ASSERT_EQ(string("GET ") + google_doc_list_->get_scope() + google_doc_list_->get_metafeed_uri(), meta_feed.substr(0, end_of_first_line)); } TEST_F(GoogleDocListTest, TestGetMetaFeed) { google_doc_list_.reset( GoogleDocList::Create(new OneFileHttpClient( string(DATADIR) + "/gdata/doclist-metafeed.xml"))); ASSERT_TRUE(google_doc_list_.get()); // Call the method under test. kmldom::AtomFeedPtr atom_feed = google_doc_list_->GetMetaFeed(); ASSERT_TRUE(atom_feed.get()); // Check a few things known to be in metafeed.xml: ASSERT_EQ(string("Available Documents - kml.bent@gmail.com"), atom_feed->get_title()); ASSERT_EQ(static_cast(6), atom_feed->get_link_array_size()); ASSERT_EQ(static_cast(4), atom_feed->get_entry_array_size()); ASSERT_EQ(string("Document Number One"), atom_feed->get_entry_array_at(0)->get_title()); ASSERT_EQ(string("oz"), atom_feed->get_entry_array_at(1)->get_title()); ASSERT_EQ(string("gplex"), atom_feed->get_entry_array_at(2)->get_title()); } } // end namespace kmlconvenience libkml-1.3.0/tests/kml/convenience/google_maps_data_test.cc000066400000000000000000000572231263603257100240570ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit test for the GoogleMapsData class. #include "kml/convenience/google_maps_data.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" #include "kml/base/file.h" #include "kml/convenience/atom_util.h" #include "kml/convenience/convenience.h" #include "kml/convenience/http_client.h" #include "kml/convenience/http_client_test_util.h" #include "kml/engine.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlconvenience { class GoogleMapsDataTest : public testing::Test { protected: void SetUp() { } boost::scoped_ptr google_maps_data_; }; // This class simply returns the post_data as the response. class EchoHttpClient : public HttpClient { public: EchoHttpClient() : HttpClient("EchoHttpClient") { } virtual bool SendRequest(HttpMethodEnum http_method, const string& request_uri, const StringPairVector* request_headers, const string* post_data, string* response) const { if (post_data && response) { *response = *post_data; } return true; } }; // This tests NULL use of the Create method. TEST_F(GoogleMapsDataTest, TestNullCreate) { // NULL/empty args? Null return (no crash, no hang, no exception, etc). ASSERT_FALSE(GoogleMapsData::Create(NULL)); } TEST_F(GoogleMapsDataTest, TestGetConstants) { // Assert merely that the constant getters exist and return something. const char* service_name = GoogleMapsData::get_service_name(); ASSERT_TRUE(service_name); ASSERT_TRUE(strlen(service_name)); // It's a null terminated C string. const char* metafeed_uri = GoogleMapsData::get_metafeed_uri(); ASSERT_TRUE(metafeed_uri); ASSERT_TRUE(strlen(metafeed_uri)); // It's a null terminated C string. } // This tests basic use of the Create method and the get_scope() method. TEST_F(GoogleMapsDataTest, TestBasicCreate) { const string kScope = "http://host.com:123"; ASSERT_EQ(0, setenv("GOOGLE_MAPS_DATA_SCOPE", kScope.c_str(), 1)); HttpClient* http_client = new HttpClient("TestBasicCreate"); google_maps_data_.reset(GoogleMapsData::Create(http_client)); // An HttpClient was supplied so a GoogleMapsData was created. ASSERT_TRUE(google_maps_data_.get()); ASSERT_EQ(kScope, google_maps_data_->get_scope()); ASSERT_EQ(http_client, google_maps_data_->get_http_client()); } // This tests that the GoogleMapsData instance destroys the HttpClient when // the GoogleMapsData instance is destroyed. TEST_F(GoogleMapsDataTest, VerifyGoogleMapsDataDestroysHttpClient) { // TODO: } // This tests basic normal use of the GetMetaFeedXml() method. TEST_F(GoogleMapsDataTest, TestGetMetaFeedXml) { HttpClient* http_client = new HttpClient("TestGetMetaFeedXml"); http_client->Login("local", "user@gmail.com", "user-password"); google_maps_data_.reset(GoogleMapsData::Create(http_client)); ASSERT_TRUE(google_maps_data_.get()); string map_feed; ASSERT_TRUE(google_maps_data_->GetMetaFeedXml(&map_feed)); size_t end_of_first_line = map_feed.find('\n'); ASSERT_NE(string::npos, end_of_first_line); ASSERT_EQ(string("GET ") + google_maps_data_->get_scope() + google_maps_data_->get_metafeed_uri(), map_feed.substr(0, end_of_first_line)); } TEST_F(GoogleMapsDataTest, TestGetMetaFeed) { google_maps_data_.reset( GoogleMapsData::Create(new OneFileHttpClient( string(DATADIR) + "/gmaps/metafeed.xml"))); ASSERT_TRUE(google_maps_data_.get()); // Call the method under test. kmldom::AtomFeedPtr atom_feed = google_maps_data_->GetMetaFeed(); ASSERT_TRUE(atom_feed.get()); // Check a few things known to be in metafeed.xml: ASSERT_EQ(string("My maps"), atom_feed->get_title()); ASSERT_EQ(static_cast(5), atom_feed->get_link_array_size()); ASSERT_EQ(static_cast(3), atom_feed->get_entry_array_size()); ASSERT_EQ(string("alaska"), atom_feed->get_entry_array_at(0)->get_title()); ASSERT_EQ(string("canada"), atom_feed->get_entry_array_at(1)->get_title()); ASSERT_EQ(string("this is the title"), atom_feed->get_entry_array_at(2)->get_title()); } TEST_F(GoogleMapsDataTest, TestGetFeatureFeedUri) { kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::AtomContentPtr content = factory->CreateAtomContent(); const string kSrc("http://hello.com/how/are/you"); content->set_src(kSrc); kmldom::AtomEntryPtr entry = factory->CreateAtomEntry(); entry->set_content(content); string feature_feed_uri; ASSERT_TRUE(GoogleMapsData::GetFeatureFeedUri(entry, &feature_feed_uri)); ASSERT_EQ(kSrc, feature_feed_uri); } TEST_F(GoogleMapsDataTest, TestCreateDocumentOfMapFeatures) { string feature_feed_xml; ASSERT_TRUE(kmlbase::File::ReadFileToString( string(DATADIR) + "/gmaps/feature-feed.xml", &feature_feed_xml)); const kmldom::AtomFeedPtr feature_feed = AsAtomFeed(kmldom::ParseAtom(feature_feed_xml, NULL)); ASSERT_TRUE(feature_feed.get()); google_maps_data_.reset( GoogleMapsData::Create(new OneFileHttpClient( string(DATADIR) + "/gmaps/metafeed.xml"))); ASSERT_TRUE(google_maps_data_.get()); const kmldom::ContainerPtr container = google_maps_data_->CreateDocumentOfMapFeatures(feature_feed); ASSERT_TRUE(container.get()); ASSERT_EQ(static_cast(4), container->get_feature_array_size()); // entry 0 is a Point Placemark with IconStyle. kmldom::PlacemarkPtr placemark = kmldom::AsPlacemark(container->get_feature_array_at(0)); ASSERT_TRUE(placemark.get()); ASSERT_EQ(string("Montana"), placemark->get_name()); kmldom::PointPtr point = kmldom::AsPoint(placemark->get_geometry()); ASSERT_TRUE(point.get()); kmldom::StylePtr style = kmldom::AsStyle(placemark->get_styleselector()); ASSERT_TRUE(style->has_iconstyle()); // entry 1 is LineString Placemark with LineStyle placemark = kmldom::AsPlacemark(container->get_feature_array_at(1)); ASSERT_TRUE(placemark.get()); kmldom::LineStringPtr linestring = kmldom::AsLineString(placemark->get_geometry()); ASSERT_TRUE(linestring.get()); style = kmldom::AsStyle(placemark->get_styleselector()); ASSERT_TRUE(style->has_linestyle()); // entry 2 is LineString Placemark with LineStyle placemark = kmldom::AsPlacemark(container->get_feature_array_at(2)); ASSERT_TRUE(placemark.get()); ASSERT_EQ(string("I90 from Missoula to Butte"), placemark->get_name()); linestring = kmldom::AsLineString(placemark->get_geometry()); ASSERT_TRUE(linestring.get()); style = kmldom::AsStyle(placemark->get_styleselector()); ASSERT_TRUE(style->has_linestyle()); // entry 3 is Polygon Placemark with LineStyle and PolyStyle placemark = kmldom::AsPlacemark(container->get_feature_array_at(3)); ASSERT_TRUE(placemark.get()); ASSERT_EQ(string("Glacier National Park"), placemark->get_name()); kmldom::PolygonPtr polygon = kmldom::AsPolygon(placemark->get_geometry()); ASSERT_TRUE(polygon.get()); style = kmldom::AsStyle(placemark->get_styleselector()); ASSERT_TRUE(style->has_linestyle()); ASSERT_TRUE(style->has_polystyle()); } TEST_F(GoogleMapsDataTest, TestGetFeatureFeedXml) { google_maps_data_.reset( GoogleMapsData::Create(new HttpClient("TestHttpClient"))); const string kFeatureFeedUri = "http://host.com/a/b/c"; string http_response; ASSERT_TRUE(google_maps_data_->GetFeatureFeedXml(kFeatureFeedUri, &http_response)); // This test verifies only that GetFeatureFeedXml makes a call on // the installed HttpClient to GET the provided URL. kmlbase::StringVector lines; kmlbase::SplitStringUsing(http_response, "\n", &lines); ASSERT_EQ(string("GET ") + kFeatureFeedUri, lines[0]); } TEST_F(GoogleMapsDataTest, TestGetFeatureFeedByUri) { // This HttpClient always returns an Atom in the http response. // The requested URI is set in a child of the feed. class FakeAtomFeedHttpClient : public HttpClient { public: FakeAtomFeedHttpClient() : HttpClient("FakeAtomFeedHttpClient") { } virtual bool SendRequest(HttpMethodEnum http_method, const string& request_uri, const StringPairVector* request_headers, const string* post_data, string* response) const { kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::AtomLinkPtr link = factory->CreateAtomLink(); link->set_href(request_uri); kmldom::AtomFeedPtr feed = factory->CreateAtomFeed(); feed->add_link(link); // Use kmlengine::KmlFile to emit xmlns'd xml. kmlengine::KmlFilePtr kml_file( kmlengine::KmlFile::CreateFromImport(feed)); kml_file->SerializeToString(response); return true; } }; google_maps_data_.reset( GoogleMapsData::Create(new FakeAtomFeedHttpClient())); const string kFeatureFeedUri = "http://host.com/a/b/c"; // Call the method under test. This is nearly a pure I/O method so we check // here that it makes the expected I/O request: an HTTP GET of the URI. const kmldom::AtomFeedPtr feed = google_maps_data_->GetFeatureFeedByUri(kFeatureFeedUri); ASSERT_TRUE(feed.get()); ASSERT_EQ(static_cast(1), feed->get_link_array_size()); const kmldom::AtomLinkPtr link = feed->get_link_array_at(0); ASSERT_TRUE(link->has_href()); ASSERT_EQ(kFeatureFeedUri, link->get_href()); } static kmldom::AtomEntryPtr CreatePlacemarkEntry(const string& name) { kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_name(name); kmldom::AtomContentPtr content = factory->CreateAtomContent(); // Cast to Element to gain access to the AddElement() method. kmldom::AsElement(content)->AddElement(placemark); kmldom::AtomEntryPtr entry = factory->CreateAtomEntry(); entry->set_content(content); return entry; } TEST_F(GoogleMapsDataTest, TestGetEntryFeature) { const string kName("my name"); kmldom::FeaturePtr feature = GoogleMapsData::GetEntryFeature(CreatePlacemarkEntry(kName)); ASSERT_TRUE(feature.get()); kmldom::PlacemarkPtr placemark = kmldom::AsPlacemark(feature); ASSERT_TRUE(placemark.get()); ASSERT_EQ(kName, placemark->get_name()); } TEST_F(GoogleMapsDataTest, TestGetMapKml) { kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::AtomFeedPtr feed = factory->CreateAtomFeed(); const string kName0("the name of the 0th feature"); feed->add_entry(CreatePlacemarkEntry(kName0)); const string kName1("the name of the 1th feature"); feed->add_entry(CreatePlacemarkEntry(kName1)); const string kName2("the name of the 2th feature"); feed->add_entry(CreatePlacemarkEntry(kName2)); // Create a to save to. kmldom::FolderPtr folder = factory->CreateFolder(); // Call the method under test. ASSERT_EQ(3, GoogleMapsData::GetMapKml(feed, folder)); ASSERT_EQ(static_cast(3), folder->get_feature_array_size()); kmldom::PlacemarkPtr got_placemark = kmldom::AsPlacemark( folder->get_feature_array_at(0)); ASSERT_TRUE(got_placemark.get()); ASSERT_EQ(kName0, got_placemark->get_name()); got_placemark = kmldom::AsPlacemark(folder->get_feature_array_at(1)); ASSERT_TRUE(got_placemark.get()); ASSERT_EQ(kName1, got_placemark->get_name()); got_placemark = kmldom::AsPlacemark(folder->get_feature_array_at(2)); ASSERT_TRUE(got_placemark.get()); ASSERT_EQ(kName2, got_placemark->get_name()); } TEST_F(GoogleMapsDataTest, TestCreateMap) { google_maps_data_.reset(GoogleMapsData::Create(new EchoHttpClient)); ASSERT_TRUE(google_maps_data_.get()); const string kTitle("The Girl With the Dragon Tattoo"); const string kSummary("Wildly suspenseful... an intelligent thriller"); string map_entry_xml; ASSERT_TRUE(google_maps_data_->CreateMap(kTitle, kSummary, &map_entry_xml)); const kmldom::AtomEntryPtr entry = kmldom::AsAtomEntry(kmldom::ParseAtom(map_entry_xml, NULL)); ASSERT_TRUE(entry.get()); ASSERT_TRUE(entry->has_title()); ASSERT_EQ(kTitle, entry->get_title()); ASSERT_TRUE(entry->has_summary()); ASSERT_EQ(kSummary, entry->get_summary()); } TEST_F(GoogleMapsDataTest, TestAddFeature) { google_maps_data_.reset(GoogleMapsData::Create(new EchoHttpClient)); ASSERT_TRUE(google_maps_data_.get()); const string kName("Stieg Larsson"); const string kDescription("At once a murder mystery, love story and..."); const double kLat(38.38); const double kLon(101.101); kmldom::PlacemarkPtr placemark = kmlconvenience::CreatePointPlacemark(kName, kLat, kLon); placemark->set_description(kDescription); string feature_entry_xml; ASSERT_TRUE(google_maps_data_->AddFeature("", placemark, &feature_entry_xml)); const kmldom::AtomEntryPtr entry = kmldom::AsAtomEntry(kmldom::ParseAtom(feature_entry_xml, NULL)); ASSERT_TRUE(entry.get()); ASSERT_TRUE(entry->has_title()); ASSERT_EQ(kName, entry->get_title()); ASSERT_TRUE(entry->has_summary()); ASSERT_EQ(kDescription, entry->get_summary()); const kmldom::AtomContentPtr content = entry->get_content(); ASSERT_TRUE(content.get()); ASSERT_EQ(static_cast(1), content->get_misplaced_elements_array_size()); kmldom::PlacemarkPtr got_placemark = kmldom::AsPlacemark( content->get_misplaced_elements_array_at(0)); ASSERT_EQ(kName, got_placemark->get_name()); ASSERT_EQ(kDescription, got_placemark->get_description()); double got_lat, got_lon; kmlengine::GetFeatureLatLon(placemark, &got_lat, &got_lon); ASSERT_EQ(kLat, got_lat); ASSERT_EQ(kLon, got_lon); } TEST_F(GoogleMapsDataTest, TestPostPlacemarksOnAFolder) { HttpRequestVector request_log; google_maps_data_.reset( GoogleMapsData::Create(new LoggingHttpClient(&request_log))); // PostPlacemarks() ignores things that aren't kmldom::FolderPtr folder = kmldom::KmlFactory::GetFactory()->CreateFolder(); ASSERT_TRUE(request_log.empty()); ASSERT_EQ(0, google_maps_data_->PostPlacemarks(folder, "http://foo.com/")); } TEST_F(GoogleMapsDataTest, TestPostPlacemarksOnOnePlacemark) { HttpRequestVector request_log; google_maps_data_.reset( GoogleMapsData::Create(new LoggingHttpClient(&request_log))); const string kFeatureFeedUri("http://host.com/anything/will/do"); const string kName("Stieg Larsson"); const string kDescription("At once a murder mystery, love story and..."); const double kLat(38.38); const double kLon(101.101); kmldom::PlacemarkPtr placemark = kmlconvenience::CreatePointPlacemark(kName, kLat, kLon); ASSERT_EQ(1, google_maps_data_->PostPlacemarks(placemark, kFeatureFeedUri)); ASSERT_EQ(static_cast(1), request_log.size()); ASSERT_EQ(HTTP_POST, request_log[0].http_method_); ASSERT_EQ(kFeatureFeedUri, request_log[0].request_uri_); } TEST_F(GoogleMapsDataTest, TestPostPlacemarksOnKmlSamples) { HttpRequestVector request_log; google_maps_data_.reset( GoogleMapsData::Create(new LoggingHttpClient(&request_log))); // Read and parse the kmlsamples.kml file. string kml_samples; ASSERT_TRUE(kmlbase::File::ReadFileToString( string(DATADIR) + "/kml/kmlsamples.kml", &kml_samples)); kmlengine::KmlFilePtr kml_file( kmlengine::KmlFile::CreateFromString(kml_samples)); kmldom::FeaturePtr root_feature = kmlengine::GetRootFeature(kml_file->get_root()); // Make up some feature feed uri. const string kFeatureFeedUri("http://host.com/anything/will/do"); // Call the method under test. // There are 20 's in the file, but one has no Geometry. ASSERT_EQ(19, google_maps_data_->PostPlacemarks(root_feature, kFeatureFeedUri)); // Verify there was a request for eqch placemark. ASSERT_EQ(static_cast(19), request_log.size()); for (size_t i = 0; i < request_log.size(); ++i) { // Every request is a POST... ASSERT_EQ(HTTP_POST, request_log[i].http_method_); // ... to the given uri... ASSERT_EQ(kFeatureFeedUri, request_log[i].request_uri_); // ... of an ... const kmldom::AtomEntryPtr entry = kmldom::AsAtomEntry(kmldom::ParseAtom(request_log[i].post_data_, NULL)); ASSERT_TRUE(entry.get()); // ... whose content is a . const kmldom::FeaturePtr feature = AtomUtil::GetEntryFeature(entry); ASSERT_TRUE(feature.get()); ASSERT_EQ(kmldom::Type_Placemark, feature->Type()); } } TEST_F(GoogleMapsDataTest, TestGetSearchFeed) { // Create a GoogleMapsData instance with an HttpClient which simply logs // all requests. HttpRequestVector request_log; google_maps_data_.reset( GoogleMapsData::Create(new LoggingHttpClient(&request_log))); const string uri("http://host.com/user1/map2"); const string params("box=122.175598,37.399217,-122.056783,37.470595"); string atom_feed; ASSERT_TRUE(google_maps_data_->GetSearchFeed(uri, params, &atom_feed)); // Verify that this caused one HTTP GET of the expect query uri. ASSERT_EQ(static_cast(1), request_log.size()); ASSERT_EQ(uri + "?" + params, request_log[0].request_uri_); ASSERT_EQ(HTTP_GET, request_log[0].http_method_); } TEST_F(GoogleMapsDataTest, TestGetSearchFeedUri) { kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::AtomContentPtr content = factory->CreateAtomContent(); const string kBase("http://maps.google.com/maps/feeds/features/201/007/"); content->set_src(kBase + "full"); kmldom::AtomEntryPtr map = factory->CreateAtomEntry(); map->set_content(content); string search_feed_uri; ASSERT_TRUE(GoogleMapsData::GetSearchFeedUri(map, &search_feed_uri)); ASSERT_EQ(kBase + "snippet", search_feed_uri); } TEST_F(GoogleMapsDataTest, TestSearchMapByBbox) { // Create a GoogleMapsData instance with an HttpClient which simply logs // all requests. HttpRequestVector request_log; google_maps_data_.reset( GoogleMapsData::Create(new LoggingHttpClient(&request_log))); // Create a map entry with feature feed. kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::AtomContentPtr content = factory->CreateAtomContent(); const string kBase("http://maps.google.com/maps/feeds/features/201/007/"); content->set_src(kBase + "full"); kmldom::AtomEntryPtr map = factory->CreateAtomEntry(); map->set_content(content); kmlengine::Bbox bbox(48.72, 21.36, -72.03, -126.75); kmldom::AtomFeedPtr feed = google_maps_data_->SearchMapByBbox(map, bbox); // Verify that this caused one HTTP GET of the expect query uri. ASSERT_EQ(static_cast(1), request_log.size()); ASSERT_EQ(kBase + "snippet?box=-126.75,21.36,-72.03,48.72", request_log[0].request_uri_); ASSERT_EQ(HTTP_GET, request_log[0].http_method_); } TEST_F(GoogleMapsDataTest, TestAppendBoxParameter) { string query; GoogleMapsData::AppendBoxParameter(2.2,1.1,4.4,3.3, &query); ASSERT_EQ(string("box=3.3,1.1,4.4,2.2"), query); } TEST_F(GoogleMapsDataTest, TestAppendBoxParameterFromBbox) { string query; kmlengine::Bbox bbox(2.2,1.1,4.4,3.3); GoogleMapsData::AppendBoxParameterFromBbox(bbox, &query); ASSERT_EQ(string("box=3.3,1.1,4.4,2.2"), query); } TEST_F(GoogleMapsDataTest, TestPostCsvGood) { HttpRequestVector request_log; google_maps_data_.reset( GoogleMapsData::Create(new LoggingHttpClient(&request_log))); const string csv_data("name,latitude,longitude\n" "hello,-11.968312,-77.066395\n"); string errors; kmldom::AtomEntryPtr entry = google_maps_data_->PostCsv("title", csv_data, &errors); ASSERT_EQ(static_cast(1), request_log.size()); ASSERT_EQ(HTTP_POST, request_log[0].http_method_); } TEST_F(GoogleMapsDataTest, TestPostCsvBad) { // The TestDataHttpClient is used here to provide a way for the underlying // HttpClient to fail such that we can asser the NULL return of PostCsv. google_maps_data_.reset(GoogleMapsData::Create(new TestDataHttpClient())); ASSERT_FALSE(google_maps_data_->PostCsv("title", "junk", NULL)); } TEST_F(GoogleMapsDataTest, TestPostKml) { HttpRequestVector request_log; google_maps_data_.reset( GoogleMapsData::Create(new LoggingHttpClient(&request_log))); const string kml("hello"); kmldom::AtomEntryPtr entry = google_maps_data_->PostKml("title", kml); ASSERT_EQ(static_cast(1), request_log.size()); ASSERT_EQ(HTTP_POST, request_log[0].http_method_); ASSERT_EQ(kml, request_log[0].post_data_); } TEST_F(GoogleMapsDataTest, TestPostMedia) { HttpRequestVector request_log; google_maps_data_.reset( GoogleMapsData::Create(new LoggingHttpClient(&request_log))); const string slug("slug me"); const string content_type("anything"); const string data("this is the data"); string errors; kmldom::AtomEntryPtr entry = google_maps_data_->PostMedia(slug, content_type, data, &errors); ASSERT_EQ(static_cast(1), request_log.size()); ASSERT_EQ(HTTP_POST, request_log[0].http_method_); ASSERT_EQ(data, request_log[0].post_data_); const StringPairVector& headers = request_log[0].request_headers_; bool found_slug = false; bool found_content_type = false; // Don't require any particular order to the headers. for (size_t i = 0; i < headers.size(); ++i) { if (headers[i].first == "Slug") { found_slug = true; ASSERT_EQ(slug, headers[i].second); } else if (headers[i].first == "Content-Type") { found_content_type = true; ASSERT_EQ(content_type, headers[i].second); } } ASSERT_TRUE(found_slug); ASSERT_TRUE(found_content_type); } TEST_F(GoogleMapsDataTest, TestGetKmlUri) { // Find a map entry in a test file. string maps_feed_xml; ASSERT_TRUE(kmlbase::File::ReadFileToString( string(DATADIR) + "/gmaps/metafeed.xml", &maps_feed_xml)); const kmldom::AtomFeedPtr feed = kmldom::AsAtomFeed(kmldom::ParseAtom(maps_feed_xml, NULL)); ASSERT_TRUE(feed); const string want("http://maps.google.com/maps/ms?msa=0&msid=" "201514259179526663268.0004687a1a3e44d72b6b4&output=kml"); string got; ASSERT_TRUE(GoogleMapsData::GetKmlUri(feed->get_entry_array_at(0), &got)); ASSERT_EQ(want, got); } } // end namespace kmlconvenience libkml-1.3.0/tests/kml/convenience/google_picasa_web_test.cc000066400000000000000000000106771263603257100242250ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the GooglePicasaWeb class. #include "kml/convenience/google_picasa_web.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" #include "kml/base/file.h" #include "kml/convenience/http_client.h" #include "kml/convenience/http_client_test_util.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlconvenience { class GooglePicasaWebTest : public testing::Test { protected: void SetUp() { } boost::scoped_ptr google_picasa_web_; }; // This tests NULL use of the Create method. TEST_F(GooglePicasaWebTest, TestNullCreate) { // NULL/empty args? Null return (no crash, no hang, no exception, etc). ASSERT_FALSE(GooglePicasaWeb::Create(NULL)); } TEST_F(GooglePicasaWebTest, TestGetMetafeedUri) { // No user of the GooglePicasaWeb class should // assume anything of the metafeed URI itself. But, we // can expect that it exists. ASSERT_TRUE(GooglePicasaWeb::get_metafeed_uri()); } TEST_F(GooglePicasaWebTest, TestGetScope) { // No user of the GooglePicasaWeb class should // assume anything of the scope. But, we // can expect that it exists. google_picasa_web_.reset( GooglePicasaWeb::Create(new HttpClient("dummy"))); ASSERT_FALSE(google_picasa_web_->get_scope().empty()); } // This tests basic normal use of the GetMetaFeedXml() method. TEST_F(GooglePicasaWebTest, TestGetMetaFeedXml) { HttpClient* http_client = new HttpClient("TestGetMetaFeedXml"); http_client->Login("local", "user@gmail.com", "user-password"); google_picasa_web_.reset(GooglePicasaWeb::Create(http_client)); ASSERT_TRUE(google_picasa_web_.get()); string meta_feed; ASSERT_TRUE(google_picasa_web_->GetMetaFeedXml(&meta_feed)); size_t end_of_first_line = meta_feed.find('\n'); ASSERT_NE(string::npos, end_of_first_line); ASSERT_EQ(string("GET ") + google_picasa_web_->get_scope() + google_picasa_web_->get_metafeed_uri(), meta_feed.substr(0, end_of_first_line)); } TEST_F(GooglePicasaWebTest, TestGetMetaFeed) { google_picasa_web_.reset( GooglePicasaWeb::Create(new OneFileHttpClient( string(DATADIR) + "/gdata/picasaweb-metafeed.xml"))); ASSERT_TRUE(google_picasa_web_.get()); // Call the method under test. kmldom::AtomFeedPtr atom_feed = google_picasa_web_->GetMetaFeed(); ASSERT_TRUE(atom_feed.get()); // Check a few things known to be in metafeed.xml: ASSERT_EQ(string("ben.gardenfield"), atom_feed->get_title()); ASSERT_EQ(static_cast(5), atom_feed->get_link_array_size()); ASSERT_EQ(static_cast(17), atom_feed->get_entry_array_size()); ASSERT_EQ(string("sydney-manly-nov-09"), atom_feed->get_entry_array_at(0)->get_title()); ASSERT_EQ(string("green-thumbcafe"), atom_feed->get_entry_array_at(16)->get_title()); } } // end namespace kmlconvenience libkml-1.3.0/tests/kml/convenience/google_spreadsheets_test.cc000066400000000000000000000141451263603257100246140ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the GoogleSpreadsheets class. #include "kml/convenience/google_spreadsheets.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" #include "kml/base/file.h" #include "kml/convenience/atom_util.h" #include "kml/convenience/http_client.h" #include "kml/convenience/http_client_test_util.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlconvenience { class GoogleSpreadsheetsTest : public testing::Test { protected: void SetUp() { } boost::scoped_ptr google_spreadsheets_; }; // This tests NULL use of the Create method. TEST_F(GoogleSpreadsheetsTest, TestNullCreate) { // NULL/empty args? Null return (no crash, no hang, no exception, etc). ASSERT_FALSE(GoogleSpreadsheets::Create(NULL)); } TEST_F(GoogleSpreadsheetsTest, TestGetConstants) { // Assert merely that the constant getters exist and return something. const char* service_name = GoogleSpreadsheets::get_service_name(); ASSERT_TRUE(service_name); ASSERT_TRUE(strlen(service_name)); // It's a null terminated C string. const char* metafeed_uri = GoogleSpreadsheets::get_metafeed_uri(); ASSERT_TRUE(metafeed_uri); ASSERT_TRUE(strlen(metafeed_uri)); // It's a null terminated C string. } TEST_F(GoogleSpreadsheetsTest, TestGetScope) { // No user of the GoogleSpreadsheets class should // assume anything of the scope. But, we // can expect that it exists. google_spreadsheets_.reset( GoogleSpreadsheets::Create(new HttpClient("dummy"))); ASSERT_FALSE(google_spreadsheets_->get_scope().empty()); } // This tests basic normal use of the GetMetaFeedXml() method. TEST_F(GoogleSpreadsheetsTest, TestGetMetaFeedXml) { HttpClient* http_client = new HttpClient("TestGetMetaFeedXml"); http_client->Login("local", "user@gmail.com", "user-password"); google_spreadsheets_.reset(GoogleSpreadsheets::Create(http_client)); ASSERT_TRUE(google_spreadsheets_.get()); string meta_feed; ASSERT_TRUE(google_spreadsheets_->GetMetaFeedXml(&meta_feed)); size_t end_of_first_line = meta_feed.find('\n'); ASSERT_NE(string::npos, end_of_first_line); ASSERT_EQ(string("GET ") + google_spreadsheets_->get_scope() + google_spreadsheets_->get_metafeed_uri(), meta_feed.substr(0, end_of_first_line)); } TEST_F(GoogleSpreadsheetsTest, TestGetMetaFeed) { google_spreadsheets_.reset( GoogleSpreadsheets::Create(new OneFileHttpClient( string(DATADIR) + "/gmaps/gsheet-metafeed.xml"))); ASSERT_TRUE(google_spreadsheets_.get()); // Call the method under test. kmldom::AtomFeedPtr atom_feed = google_spreadsheets_->GetMetaFeed(); ASSERT_TRUE(atom_feed.get()); // Check a few things known to be in metafeed.xml: ASSERT_EQ(string("Available Spreadsheets - kml.bent@gmail.com"), atom_feed->get_title()); ASSERT_EQ(static_cast(3), atom_feed->get_link_array_size()); ASSERT_EQ(static_cast(2), atom_feed->get_entry_array_size()); ASSERT_EQ(string("oz"), atom_feed->get_entry_array_at(0)->get_title()); ASSERT_EQ(string("gplex"), atom_feed->get_entry_array_at(1)->get_title()); } TEST_F(GoogleSpreadsheetsTest, TestDownloadSpreadsheet) { // Fetch a feed which has an entry which has a gd:resourceId. TestDataHttpClient test_data_http_client; kmldom::AtomFeedPtr feed = AtomUtil::GetAndParseFeed( "http://example.com/gdata/doclist-metafeed.xml", test_data_http_client); ASSERT_TRUE(feed); HttpRequestVector request_log; google_spreadsheets_.reset( GoogleSpreadsheets::Create(new LoggingHttpClient(&request_log))); string spreadsheet_data; // This asserts that 1) the DownloadSpreadsheet method exists with the // advertised signature and 2) that true can be returned if the entry // specified holds a gd:resourceId. Given that nothing is actually fetched // there's little else to check. ASSERT_TRUE(google_spreadsheets_->DownloadSpreadsheet( feed->get_entry_array_at(0), "csv", &spreadsheet_data)); // That DownloadSpreadsheet is implemented as one HTTP GET is arguably and // implementation detail... ASSERT_EQ(static_cast(1), request_log.size()); ASSERT_EQ(HTTP_GET, request_log[0].http_method_); // Verify that false is returned on an entry with no gd:resourceId. kmldom::AtomEntryPtr entry = kmldom::KmlFactory::GetFactory()->CreateAtomEntry(); ASSERT_FALSE(google_spreadsheets_->DownloadSpreadsheet(entry, "csv", &spreadsheet_data)); } } // end namespace kmlconvenience libkml-1.3.0/tests/kml/convenience/gpx_trk_pt_handler_test.cc000066400000000000000000000213641263603257100244450ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the GpxTrkPtHandler class. #include "kml/convenience/gpx_trk_pt_handler.h" #include #include "kml/base/expat_parser.h" #include "kml/base/file.h" #include "gtest/gtest.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlconvenience { class GpxTrkPtHandlerTest : public testing::Test { protected: kmlbase::StringVector atts_; }; typedef std::pair WhereWhenPair; typedef std::vector PointVector; // This test class implements a GpxTrkPtHandler which simply saves everything // passed to HandlePoint into a vector. class TestGpxTrkPtHandler : public GpxTrkPtHandler { public: TestGpxTrkPtHandler(PointVector* point_vector) : point_vector_(point_vector) { } void HandlePoint(const kmlbase::Vec3& where, const string& when) { point_vector_->push_back(std::make_pair(where, when)); } private: PointVector* point_vector_; }; // By simply compiling this verifies that the HandlePoint method has a default // implementation. TEST_F(GpxTrkPtHandlerTest, TestEmpty) { GpxTrkPtHandler gpx_trk_pt_handler; } // This tests parsing of the element using the StartElement() and // EndElement() methods. TEST_F(GpxTrkPtHandlerTest, TestTrkPt) { PointVector point_vector; TestGpxTrkPtHandler test_gpx_trk_pt_handler(&point_vector); kmlbase::StringVector trk_pt_atts; trk_pt_atts.push_back("lat"); trk_pt_atts.push_back("-123.456"); trk_pt_atts.push_back("lon"); trk_pt_atts.push_back("37.37"); test_gpx_trk_pt_handler.StartElement("trkpt", trk_pt_atts); test_gpx_trk_pt_handler.EndElement("trkpt"); ASSERT_EQ(static_cast(1), point_vector.size()); const kmlbase::Vec3& vec3 = point_vector[0].first; ASSERT_EQ(-123.456, vec3.get_latitude()); ASSERT_EQ(37.37, vec3.get_longitude()); ASSERT_TRUE(point_vector[0].second.empty()); } // This tests parsing of the element using the StartElement(), // EndElement(), and CharData() methods. TEST_F(GpxTrkPtHandlerTest, TestEle) { PointVector point_vector; TestGpxTrkPtHandler test_gpx_trk_pt_handler(&point_vector); // is only parsed within a with both lat and lon. kmlbase::StringVector trk_pt_atts; trk_pt_atts.push_back("lat"); trk_pt_atts.push_back("-123.456"); trk_pt_atts.push_back("lon"); trk_pt_atts.push_back("37.37"); test_gpx_trk_pt_handler.StartElement("trkpt", trk_pt_atts); test_gpx_trk_pt_handler.StartElement("ele", atts_); const char* kEle("12356.789"); test_gpx_trk_pt_handler.CharData(kEle); test_gpx_trk_pt_handler.EndElement("ele"); test_gpx_trk_pt_handler.EndElement("trkpt"); ASSERT_EQ(static_cast(1), point_vector.size()); const kmlbase::Vec3& vec3 = point_vector[0].first; ASSERT_EQ(-123.456, vec3.get_latitude()); ASSERT_EQ(37.37, vec3.get_longitude()); ASSERT_EQ(12356.789, vec3.get_altitude()); } // This tests parsing of the element using the StartElement(), // EndElement(), and CharData() methods. TEST_F(GpxTrkPtHandlerTest, TestTime) { PointVector point_vector; TestGpxTrkPtHandler test_gpx_trk_pt_handler(&point_vector); // two]]>\n" "\n"); ASSERT_EQ(expected, xml); } TEST_F(XmlSerializerTest, TestCdataPassedBySetter) { string crazy_name("foo goo yyyxxx]]> goo"); placemark_->set_name(crazy_name); string xml = SerializePretty(placemark_); string expected("\n" " foo <b> goo <![CDATA[" "xxx<i>yyy</i>xxx]]> </b> goo\n" "\n"); ASSERT_EQ(expected, xml); } TEST_F(XmlSerializerTest, TestSaveBoolFieldByIdAsBool) { // Assert that is serialized correctly. const bool bool_state = true; string expected_result("1"); // A parsed bool is serialized as an int: xml_serializer_->SaveFieldById(Type_open, bool_state); ASSERT_EQ(expected_result, output_); } TEST_F(XmlSerializerTest, TestSaveBoolFieldByIdAsInt) { // Assert that is serialized correctly. const unsigned int int_state = 1; string expected_result("1"); // A parsed int is serialized as an int: xml_serializer_->SaveFieldById(Type_open, int_state); ASSERT_EQ(expected_result, output_); } TEST_F(XmlSerializerTest, TestSaveContent) { // Ensure a simple string is serialized exactly. const string s("tom, dick"); xml_serializer_->SaveContent(s, false); ASSERT_EQ(s, output_); // SaveContent will append continued calls. string t(" and harry"); xml_serializer_->SaveContent(t, false); string expected_result(s + t); ASSERT_EQ(expected_result, output_); } TEST_F(XmlSerializerTest, TestSaveColor) { const kmlbase::Color32 kRed(0xff0000ff); const string kExpected("ff0000ff"); xml_serializer_->SaveColor(Type_color, kRed); ASSERT_EQ(kExpected, output_); } TEST_F(XmlSerializerTest, TestPrecision) { double a = 1.0; // Will round down to int: string expected = "1"; ASSERT_EQ(expected, ToString(a)); double b = 1.1; // Will preserve at current level of precision: expected = "1.1"; ASSERT_EQ(expected, ToString(b)); double c = 1.2345678901234567890; // Will round down to 15 decimals of precision: expected = "1.23456789012346"; ASSERT_EQ(expected, ToString(c)); } // Tests the internal Indent() method. TEST_F(XmlSerializerTest, TestSerializePretty) { placemark_->set_name("hello"); string xml = SerializePretty(placemark_); string expected("\n hello\n\n"); ASSERT_EQ(expected, xml); } // This tests the pretty serialization of an element with no content. TEST_F(XmlSerializerTest, TestSerializePrettyNil) { ASSERT_EQ(string("\n"), SerializePretty(placemark_)); } // This tests the pretty serialization of an element with attributes but // no content. TEST_F(XmlSerializerTest, TestSerializePrettyNilWithAttrs) { placemark_->set_id("hi"); // Adds the id= attribute. ASSERT_EQ(string("\n"), SerializePretty(placemark_)); } // This tests the raw serialization of an element a child element. TEST_F(XmlSerializerTest, TestSerializeRaw) { placemark_->set_name("hello"); string xml = SerializeRaw(placemark_); string expected("hello"); ASSERT_EQ(expected, xml); } // This tests the raw serialization of an element with no content. TEST_F(XmlSerializerTest, TestSerializeRawNil) { ASSERT_EQ(string(""), SerializeRaw(placemark_)); } // This tests the raw serialization of an element with attributes but // no content. TEST_F(XmlSerializerTest, TestSerializeRawNilWithAttrs) { placemark_->set_id("hi"); // Adds the id= attribute. ASSERT_EQ(string(""), SerializeRaw(placemark_)); } TEST_F(XmlSerializerTest, TestSerializeUnknowns) { // Unrecognised elements: const string unknown1("zzz"); const string unknown2(""); placemark_->AddUnknownElement(unknown1); placemark_->AddUnknownElement(unknown2); ASSERT_EQ(static_cast(2), placemark_->get_unknown_elements_array_size()); ASSERT_EQ(unknown1, placemark_->get_unknown_elements_array_at(0)); ASSERT_EQ(unknown2, placemark_->get_unknown_elements_array_at(1)); ASSERT_EQ(string("") + unknown1 + unknown2 + "", SerializeRaw(placemark_)); } TEST_F(XmlSerializerTest, TestSerializeNull) { const string empty; ASSERT_EQ(empty, SerializePretty(NULL)); ASSERT_EQ(empty, SerializeRaw(NULL)); } // This test verifies that SerializeRaw remains compatible with some slightly // unfortunate and non-obvious behavior in libkml 1.2. In libkml 1.2 the // serialization of _always_ emits lon,lat,alt and always // uses "\n" to separate each tuple _even_ using SerializeRaw. TEST_F(XmlSerializerTest, SerializeRawCoordinates) { placemark_ = AsPlacemark(ParseKml( "" " " " 1.2,3.4,5.6 9.8,7.6" " " "")); ASSERT_TRUE(placemark_); const string want( "" "" "1.2,3.4,5.6\n" "9.8,7.6,0\n" "" "" ""); ASSERT_EQ(want, SerializeRaw(placemark_)); } TEST_F(XmlSerializerTest, BasicSerializePrettyToOstream) { kmldom::CoordinatesPtr coordinates = kmldom::KmlFactory::GetFactory()->CreateCoordinates(); coordinates->add_latlng(1,2); kmldom::PointPtr point = kmldom::KmlFactory::GetFactory()->CreatePoint(); point->set_coordinates(coordinates); placemark_->set_geometry(point); placemark_->set_id("pm123"); placemark_->set_name("placemark name"); XmlSerializer::Serialize(placemark_, "\r", " ", string_adapter_.get()); const string want("\r" " placemark name\r" " \r" " \r" " 2,1,0\r" " \r" " \r" "\r"); ASSERT_EQ(want, output_); } TEST_F(XmlSerializerTest, TestGetElementName) { ASSERT_EQ(string(""), GetElementName(NULL)); ASSERT_EQ(string("Placemark"), GetElementName(placemark_)); ASSERT_EQ(string("atom:author"), GetElementName(KmlFactory::GetFactory()->CreateAtomAuthor())); ASSERT_EQ(string("gx:Tour"), GetElementName(KmlFactory::GetFactory()->CreateGxTour())); } } // end namespace kmldom libkml-1.3.0/tests/kml/dom/xsd_test.cc000066400000000000000000000143711263603257100176500ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the Xsd class. #include "kml/dom/xsd.h" #include "kml/dom/kml22.h" #include "gtest/gtest.h" namespace kmldom { class XsdTest : public testing::Test { }; // Verify known good values for ElementId(), ElementType() and ElementName(). TEST_F(XsdTest, TestGoodElement) { ASSERT_EQ(static_cast(Type_Placemark), Xsd::GetSchema()->ElementId("Placemark")); ASSERT_EQ(XSD_COMPLEX_TYPE, Xsd::GetSchema()->ElementType(Type_Placemark)); ASSERT_EQ(string("Placemark"), Xsd::GetSchema()->ElementName(Type_Placemark)); ASSERT_EQ(static_cast(Type_Snippet), Xsd::GetSchema()->ElementId("Snippet")); ASSERT_EQ(XSD_COMPLEX_TYPE, Xsd::GetSchema()->ElementType(Type_Snippet)); ASSERT_EQ(string("Snippet"), Xsd::GetSchema()->ElementName(Type_Snippet)); ASSERT_EQ(static_cast(Type_z), Xsd::GetSchema()->ElementId("z")); ASSERT_EQ(XSD_SIMPLE_TYPE, Xsd::GetSchema()->ElementType(Type_z)); ASSERT_EQ(string("z"), Xsd::GetSchema()->ElementName(Type_z)); ASSERT_EQ(static_cast(Type_XalAddressDetails), Xsd::GetSchema()->ElementId("xal:AddressDetails")); ASSERT_EQ(XSD_COMPLEX_TYPE, Xsd::GetSchema()->ElementType(Type_XalAddressDetails)); ASSERT_EQ(string("xal:AddressDetails"), Xsd::GetSchema()->ElementName(Type_XalAddressDetails)); ASSERT_EQ(static_cast(Type_XalPostalCode), Xsd::GetSchema()->ElementId("xal:PostalCode")); ASSERT_EQ(XSD_COMPLEX_TYPE, Xsd::GetSchema()->ElementType(Type_XalPostalCode)); ASSERT_EQ(string("xal:PostalCode"), Xsd::GetSchema()->ElementName(Type_XalPostalCode)); ASSERT_EQ(static_cast(Type_XalAdministrativeArea), Xsd::GetSchema()->ElementId("xal:AdministrativeArea")); ASSERT_EQ(XSD_COMPLEX_TYPE, Xsd::GetSchema()->ElementType(Type_XalAdministrativeArea)); ASSERT_EQ(string("xal:AdministrativeArea"), Xsd::GetSchema()->ElementName(Type_XalAdministrativeArea)); ASSERT_EQ(static_cast(Type_XalSubAdministrativeArea), Xsd::GetSchema()->ElementId("xal:SubAdministrativeArea")); ASSERT_EQ(XSD_COMPLEX_TYPE, Xsd::GetSchema()->ElementType(Type_XalSubAdministrativeArea)); ASSERT_EQ(string("xal:SubAdministrativeArea"), Xsd::GetSchema()->ElementName(Type_XalSubAdministrativeArea)); ASSERT_EQ(static_cast(Type_xalThoroughfareName), Xsd::GetSchema()->ElementId("xal:ThoroughfareName")); ASSERT_EQ(XSD_SIMPLE_TYPE, Xsd::GetSchema()->ElementType(Type_xalThoroughfareName)); ASSERT_EQ(string("xal:ThoroughfareName"), Xsd::GetSchema()->ElementName(Type_xalThoroughfareName)); // is known to be the last element. ASSERT_EQ(static_cast(Type_GxPlayMode), Xsd::GetSchema()->ElementId("gx:playMode")); ASSERT_EQ(XSD_SIMPLE_TYPE, Xsd::GetSchema()->ElementType(Type_GxPlayMode)); ASSERT_EQ(string("gx:playMode"), Xsd::GetSchema()->ElementName(Type_GxPlayMode)); } // Verify that ElementId(), ElementType() and ElementName() are well // behaved given bad values. TEST_F(XsdTest, TestBadElement) { ASSERT_EQ((int)Type_Unknown, Xsd::GetSchema()->ElementId("unknown")); // Type_Invalid + 1 is known to be a bad value for a type id. ASSERT_EQ(XSD_UNKNOWN, Xsd::GetSchema()->ElementType(Type_Invalid + 1)); ASSERT_EQ(string(""), Xsd::GetSchema()->ElementName(Type_Invalid + 1)); } // Verify that ElementId(), ElementType() and ElementName() are well // behaved given ugly values. TEST_F(XsdTest, TestUglyElement) { ASSERT_EQ((int)Type_Unknown, Xsd::GetSchema()->ElementId("")); ASSERT_EQ(XSD_UNKNOWN, Xsd::GetSchema()->ElementType(0)); ASSERT_EQ(string(""), Xsd::GetSchema()->ElementName(0)); } // Verify that a known enum val has the proper id and vice versa. // Tests the EnumId() and EnumValue() for known good values. TEST_F(XsdTest, TestGoodEnum) { ASSERT_EQ((int)ALTITUDEMODE_CLAMPTOGROUND, Xsd::GetSchema()->EnumId(Type_altitudeMode, "clampToGround")); ASSERT_EQ(string("clampToGround"), Xsd::GetSchema()->EnumValue(Type_altitudeMode, ALTITUDEMODE_CLAMPTOGROUND)); } // Verify that EnumId() is well behaved for an enum value known to be bad. TEST_F(XsdTest, TestBadEnum) { // This was an actual crash. ASSERT_EQ(-1, Xsd::GetSchema()->EnumId(Type_state, "closed open")); } TEST_F(XsdTest, TestBadEnumValue) { // This crashed libkml because Xsd::EnumValue, if passed a negative enum_id, // would try to initialize a string from a NULL pointer. ASSERT_EQ(string(), Xsd::GetSchema()->EnumValue(0, -1)); } // Verify that EnumId() is well behaved for an enum value known to be ugly. TEST_F(XsdTest, TestUglyEnum) { ASSERT_EQ(-1, Xsd::GetSchema()->EnumId(Type_state, "")); } } // end namespace kmldom libkml-1.3.0/tests/kml/engine/000077500000000000000000000000001263603257100161645ustar00rootroot00000000000000libkml-1.3.0/tests/kml/engine/CMakeLists.txt000066400000000000000000000010441263603257100207230ustar00rootroot00000000000000set(TESTS bbox clone entity_mapper feature_balloon feature_visitor feature_view find find_xml_namespaces get_link_parents get_links href id_mapper kmz_cache kml_cache kml_file kml_stream kml_uri kmz_file link_util location_util merge object_id_parser_observer old_schema_parser_observer parse_old_schema schema_parser_observer shared_style_parser_observer style_inliner style_merger style_resolver style_splitter update_processor update) foreach(TEST ${TESTS}) build_test( GROUP engine NAME ${TEST} DEPENDS kmlengine) endforeach() libkml-1.3.0/tests/kml/engine/bbox_test.cc000066400000000000000000000163251263603257100204730ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the Bbox class. #include "kml/engine/bbox.h" #include "gtest/gtest.h" namespace kmlengine { class BboxTest : public testing::Test { protected: void VerifyBounds(const Bbox& bbox, double north, double south, double east, double west); }; // Verify the state of a default Bbox. TEST_F(BboxTest, TestDefault) { Bbox default_bbox; ASSERT_EQ(kMinLat, default_bbox.get_north()); ASSERT_EQ(kMaxLat, default_bbox.get_south()); ASSERT_EQ(kMinLon, default_bbox.get_east()); ASSERT_EQ(kMaxLon, default_bbox.get_west()); ASSERT_EQ(0, default_bbox.GetCenterLat()); ASSERT_EQ(0, default_bbox.GetCenterLon()); } void BboxTest::VerifyBounds(const Bbox& bbox, double north, double south, double east, double west) { // Verify the getters. ASSERT_EQ(north, bbox.get_north()); ASSERT_EQ(south, bbox.get_south()); ASSERT_EQ(east, bbox.get_east()); ASSERT_EQ(west, bbox.get_west()); const double kWantLat((north + south)/2.0); const double kWantLon((east + west)/2.0); // Verify GetCenter(). double mid_lat, mid_lon; bbox.GetCenter(&mid_lat, &mid_lon); ASSERT_EQ(kWantLat, mid_lat); ASSERT_EQ(kWantLon, mid_lon); // Verify GetCenterLat,Lon(). ASSERT_EQ(kWantLat, bbox.GetCenterLat()); ASSERT_EQ(kWantLon, bbox.GetCenterLon()); // Verify Contains(). ASSERT_TRUE(bbox.Contains(mid_lat, mid_lon)); ASSERT_TRUE(bbox.Contains(north, east)); ASSERT_TRUE(bbox.Contains(south, east)); ASSERT_TRUE(bbox.Contains(south, west)); ASSERT_TRUE(bbox.Contains(north, west)); } // Verify copy construction and assignment. TEST_F(BboxTest, TestCopy) { const double kNorth = 2; const double kSouth = 1; const double kEast = 4; const double kWest = 3; // Create a Bbox to copy. Bbox a(kNorth, kSouth, kEast, kWest); // Create a Bbox using the copy constructor. Bbox b(a); VerifyBounds(b, kNorth, kSouth, kEast, kWest); // Create a Bbox and assign to it. Bbox c; c = a; VerifyBounds(c, kNorth, kSouth, kEast, kWest); } // Verify some basic usage. TEST_F(BboxTest, TestBasic) { const double kNorth = 45.45; const double kSouth = -12.12; const double kEast = 123.123; const double kWest = -89.89; Bbox bbox; // Two points is sufficient to define a box. bbox.ExpandLatLon(kNorth, kEast); bbox.ExpandLatLon(kSouth, kWest); VerifyBounds(bbox, kNorth, kSouth, kEast, kWest); } // Verify the constructor. TEST_F(BboxTest, TestConstructor) { const double kNorth = 89.123; const double kSouth = -2.222; const double kEast = -88.888; const double kWest = -154.6789; Bbox bbox(kNorth, kSouth, kEast, kWest); VerifyBounds(bbox, kNorth, kSouth, kEast, kWest); } // Verify bounding box of multiple points. TEST_F(BboxTest, TestMultiple) { const struct { double lat, lon; } kPoints[] = { { 46.3941,10.1168 }, { 46.6356,8.84678 }, { 46.69,8.95711 }, { 46.158,8.97531 }, { 46.1719,8.79744 }, { 46.1217,8.35152 }, { 46.62,8.5706 }, { 46.7067,8.953 }, { 46.6087,8.82036 }, { 46.1546,8.9633 }, { 46.2368,10.1363 }, { 46.7079,9.19907 }, { 45.9296,8.92094 }, { 46.1738,8.84359 }, { 46.5616,8.34504 }, { 46.7389,8.97314 }, { 46.7493,8.23686 }, { 46.7233,8.92272 }, { 45.9528,8.95471 } }; const double kNorthExpected = 46.7493; const double kSouthExpected = 45.9296; const double kEastExpected = 10.1363; const double kWestExpected = 8.23686; Bbox bbox; for (size_t i = 0; i < sizeof(kPoints)/sizeof(kPoints[0]); ++i) { bbox.ExpandLatLon(kPoints[i].lat, kPoints[i].lon); } ASSERT_EQ(kNorthExpected, bbox.get_north()); ASSERT_EQ(kSouthExpected, bbox.get_south()); ASSERT_EQ(kEastExpected, bbox.get_east()); ASSERT_EQ(kWestExpected, bbox.get_west()); const double kLatExpected = (kNorthExpected + kSouthExpected)/2.0; const double kLonExpected = (kEastExpected + kWestExpected)/2.0; double mid_lat, mid_lon; bbox.GetCenter(&mid_lat, &mid_lon); ASSERT_EQ(kLatExpected, mid_lat); ASSERT_EQ(kLonExpected, mid_lon); ASSERT_EQ(kLatExpected, bbox.GetCenterLat()); ASSERT_EQ(kLonExpected, bbox.GetCenterLon()); for (size_t i = 0; i < sizeof(kPoints)/sizeof(kPoints[0]); ++i) { ASSERT_TRUE(bbox.Contains(kPoints[i].lat, kPoints[i].lon)); } VerifyBounds(bbox, kNorthExpected, kSouthExpected, kEastExpected, kWestExpected); } TEST_F(BboxTest, TestExpandFromBbox) { const double kNorth = 89.123; const double kSouth = -2.222; const double kEast = -88.888; const double kWest = -154.6789; Bbox bbox(kNorth, kSouth, kEast, kWest); Bbox another_bbox; another_bbox.ExpandFromBbox(bbox); VerifyBounds(another_bbox, kNorth, kSouth, kEast, kWest); } TEST_F(BboxTest, TestSetNSEW) { Bbox b; b.set_north(37.786807); ASSERT_EQ(37.786807, b.get_north()); b.set_south(37.781563); ASSERT_EQ(37.781563, b.get_south()); b.set_east(-122.494135); ASSERT_EQ(-122.494135, b.get_east()); b.set_west(-122.504031); ASSERT_EQ(-122.504031, b.get_west()); } TEST_F(BboxTest, TestAlignBbox) { Bbox b; b.set_north(37.786807); // Lincoln Park 3 b.set_south(37.781563); // Lincoln Park 7 b.set_east(-122.494135); // Lincoln Park 18 b.set_west(-122.504031); // Lincoln Park 5 Bbox qt(180, -180, 180, -180); b.AlignBbox(&qt, 24); ASSERT_EQ(37.79296875, qt.get_north()); ASSERT_EQ(37.7490234375, qt.get_south()); ASSERT_EQ(-122.4755859375, qt.get_east()); ASSERT_EQ(-122.51953125, qt.get_west()); } TEST_F(BboxTest, TestContainedByBox) { Bbox r(180, -180, 180, -180); Bbox a(1,-1,1,-1); ASSERT_TRUE(a.ContainedByBox(180, -180, 180, -180)); ASSERT_TRUE(a.ContainedByBbox(r)); Bbox b(1000,-1,1,-1); ASSERT_FALSE(b.ContainedByBox(180, -180, 180, -180)); ASSERT_FALSE(b.ContainedByBbox(r)); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/clone_test.cc000066400000000000000000000246251263603257100206430ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the Clone() function. #include "kml/engine/clone.h" #include "kml/dom.h" #include "gtest/gtest.h" using kmlbase::Vec3; using kmldom::CoordinatesPtr; using kmldom::ElementPtr; using kmldom::FolderPtr; using kmldom::GroundOverlayPtr; using kmldom::IconStylePtr; using kmldom::IconStyleIconPtr; using kmldom::KmlFactory; using kmldom::PlacemarkPtr; using kmldom::PointPtr; using kmldom::SnippetPtr; namespace kmlengine { class CloneTest : public testing::Test { protected: virtual void SetUp() { KmlFactory* factory = KmlFactory::GetFactory(); coordinates_ = factory->CreateCoordinates(); folder_ = factory->CreateFolder(); groundoverlay_ = factory->CreateGroundOverlay(); placemark_ = factory->CreatePlacemark(); point_ = factory->CreatePoint(); snippet_ = factory->CreateSnippet(); } CoordinatesPtr coordinates_; FolderPtr folder_; GroundOverlayPtr groundoverlay_; PlacemarkPtr placemark_; PointPtr point_; SnippetPtr snippet_; }; // Verify that a NULL element is handled properly. TEST_F(CloneTest, TestNullClone) { ElementPtr clone = Clone(NULL); ASSERT_FALSE(clone); } // Verify that a empty complex element is cloned properly. TEST_F(CloneTest, TestEmptyClone) { ElementPtr clone = Clone(placemark_); ASSERT_EQ(clone->Type(), placemark_->Type()); } // Verify that a complex element with some fields clones properly. TEST_F(CloneTest, TestCloneFields) { const string kName("clone my name"); const string kId("clone-my-id"); const bool kVisibility = false; // Set the fields. placemark_->set_name(kName); placemark_->set_id(kId); placemark_->set_visibility(kVisibility); // Clone it. ElementPtr clone = Clone(placemark_); // Verify all values were set in the clone. ASSERT_EQ(clone->Type(), placemark_->Type()); PlacemarkPtr cloned_placemark = AsPlacemark(clone); ASSERT_TRUE(cloned_placemark->has_id()); ASSERT_EQ(kId, cloned_placemark->get_id()); ASSERT_TRUE(cloned_placemark->has_name()); ASSERT_EQ(kName, cloned_placemark->get_name()); ASSERT_TRUE(cloned_placemark->has_visibility()); ASSERT_EQ(kVisibility, cloned_placemark->get_visibility()); } // Verify that a complex element with both some fields and complex children // clones properly. TEST_F(CloneTest, TestCloneChildren) { const string kDescription("clone my description"); const string kId("clone-my-id"); const bool kOpen = false; // Set some fields. folder_->set_description(kDescription); folder_->set_id(kId); folder_->set_open(kOpen); folder_->add_feature(placemark_); // Clone it. ElementPtr clone = Clone(folder_); // Verify all values were set in the clone. ASSERT_EQ(clone->Type(), folder_->Type()); FolderPtr cloned_folder = AsFolder(clone); ASSERT_TRUE(cloned_folder->has_id()); ASSERT_EQ(kId, cloned_folder->get_id()); ASSERT_FALSE(cloned_folder->has_name()); ASSERT_TRUE(cloned_folder->has_description()); ASSERT_EQ(kDescription, cloned_folder->get_description()); ASSERT_FALSE(cloned_folder->has_visibility()); ASSERT_TRUE(cloned_folder->has_open()); ASSERT_EQ(kOpen, cloned_folder->get_open()); ASSERT_EQ(static_cast(1), cloned_folder->get_feature_array_size()); ASSERT_EQ(placemark_->Type(), cloned_folder->get_feature_array_at(0)->Type()); } // Verify that an element with an array of complex children and fields // clones properly. TEST_F(CloneTest, TestCloneArray) { // placemark_->set_geometry(point_); folder_->add_feature(placemark_); folder_->add_feature(groundoverlay_); // Clone the Folder. ElementPtr clone = Clone(folder_); // Verify the contents of the Feature array child in the Folder. FolderPtr cloned_folder = AsFolder(clone); ASSERT_EQ(static_cast(2), cloned_folder->get_feature_array_size()); ASSERT_EQ(placemark_->Type(), cloned_folder->get_feature_array_at(0)->Type()); ASSERT_EQ(groundoverlay_->Type(), cloned_folder->get_feature_array_at(1)->Type()); // Verify the Placemark has a Point Geometry. PlacemarkPtr cloned_placemark = AsPlacemark(cloned_folder->get_feature_array_at(0)); ASSERT_TRUE(cloned_placemark->has_geometry()); ASSERT_EQ(point_->Type(), cloned_placemark->get_geometry()->Type()); } // Verify that -style is cloned properly. TEST_F(CloneTest, TestClonePointCoordinates) { // Make a point. const double kLat(38.38); const double kLon(-122.122); const double kAlt(42.42); coordinates_->add_latlngalt(kLat, kLon, kAlt); // Clone ElementPtr clone = Clone(coordinates_); // Verify that a new was created and has the expected content. CoordinatesPtr coordinates_clone = AsCoordinates(clone); ASSERT_TRUE(coordinates_clone); ASSERT_EQ(static_cast(1), coordinates_clone->get_coordinates_array_size()); Vec3 vec3 = coordinates_clone->get_coordinates_array_at(0); ASSERT_DOUBLE_EQ(kLat, vec3.get_latitude()); ASSERT_DOUBLE_EQ(kLon, vec3.get_longitude()); ASSERT_DOUBLE_EQ(kAlt, vec3.get_altitude()); } // Verify that LineString/LinearRing-style is cloned properly. TEST_F(CloneTest, TestCloneLineCoordinates) { // Create a as might be found in /. const size_t kNumPoints(1001); size_t i; for (i = 0; i < kNumPoints; ++i) { coordinates_->add_latlngalt(static_cast(i % 90), static_cast(i % 180), static_cast(i)); } // Clone the ElementPtr element = Clone(coordinates_); // Verify all the points came over okay. CoordinatesPtr cloned_coordinates = AsCoordinates(element); ASSERT_TRUE(cloned_coordinates); ASSERT_EQ(static_cast(kNumPoints), cloned_coordinates->get_coordinates_array_size()); for (i = 0; i < kNumPoints; ++i) { Vec3 vec3 = cloned_coordinates->get_coordinates_array_at(i); ASSERT_EQ(static_cast(i % 90), vec3.get_latitude()); ASSERT_EQ(static_cast(i % 180), vec3.get_longitude()); ASSERT_EQ(static_cast(i), vec3.get_altitude()); } } // Verify that is cloned properly. TEST_F(CloneTest, TestCloneSnippet) { // Clone an empty/default Snippet. ElementPtr element = Clone(snippet_); SnippetPtr cloned_snippet = AsSnippet(element); ASSERT_TRUE(cloned_snippet); ASSERT_EQ(snippet_->get_maxlines(), cloned_snippet->get_maxlines()); ASSERT_EQ(snippet_->get_text(), cloned_snippet->get_text()); const string kText("some snippet text"); snippet_->set_text(kText); cloned_snippet = AsSnippet(Clone(snippet_)); ASSERT_EQ(kText, cloned_snippet->get_text()); } // 's uses has_icon(), etc but is Type_IconStyleIcon. TEST_F(CloneTest, TestCloneIconStyle) { IconStyleIconPtr icon = KmlFactory::GetFactory()->CreateIconStyleIcon(); const string kImage("icon.png"); icon->set_href(kImage); IconStylePtr iconstyle = KmlFactory::GetFactory()->CreateIconStyle(); iconstyle->set_icon(icon); ASSERT_TRUE(iconstyle->has_icon()); ASSERT_EQ(kmldom::Type_IconStyleIcon, iconstyle->get_icon()->Type()); IconStylePtr clone = AsIconStyle(Clone(iconstyle)); ASSERT_TRUE(clone); ASSERT_EQ(kmldom::Type_IconStyle, clone->Type()); ASSERT_TRUE(clone->has_icon()); ASSERT_TRUE(clone->get_icon()->has_href()); ASSERT_EQ(kmldom::Type_IconStyleIcon, clone->get_icon()->Type()); ASSERT_EQ(kImage, clone->get_icon()->get_href()); } TEST_F(CloneTest, TestCloneWithMisplacedChild) { kmldom::IconPtr icon = kmldom::AsIcon(kmldom::Parse("64", NULL)); ASSERT_TRUE(icon); ASSERT_EQ(static_cast(1), icon->get_misplaced_elements_array_size()); ASSERT_EQ(static_cast(0), icon->get_unknown_elements_array_size()); kmldom::IconPtr clone = kmldom::AsIcon(Clone(icon)); ASSERT_TRUE(clone); ASSERT_EQ(static_cast(1), clone->get_misplaced_elements_array_size()); ASSERT_EQ(static_cast(0), clone->get_unknown_elements_array_size()); ASSERT_FALSE(kmldom::SerializePretty(clone).empty()); } TEST_F(CloneTest, TestCloneWithFullyUnknownChild) { // This originally appeared as IconStyle Icon's child, but the bug is // manifested in cloning any element with a fully unknown child. kmldom::IconPtr icon = kmldom::AsIcon(kmldom::Parse("64", NULL)); ASSERT_TRUE(icon); ASSERT_EQ(static_cast(0), icon->get_misplaced_elements_array_size()); ASSERT_EQ(static_cast(1), icon->get_unknown_elements_array_size()); kmldom::IconPtr clone = kmldom::AsIcon(Clone(icon)); ASSERT_TRUE(clone); ASSERT_EQ(static_cast(0), clone->get_misplaced_elements_array_size()); ASSERT_EQ(static_cast(1), clone->get_unknown_elements_array_size()); ASSERT_FALSE(kmldom::SerializePretty(clone).empty()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/entity_mapper_test.cc000066400000000000000000000235001263603257100224120ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the EntityMapper class. #include "kml/engine/entity_mapper.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" #include "kml/base/file.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif using kmlbase::File; using kmldom::DocumentPtr; using kmldom::FeaturePtr; using kmldom::KmlFactory; using kmldom::KmlPtr; using kmldom::PlacemarkPtr; namespace kmlengine { class EntityMapperTest : public testing::Test { protected: KmlFilePtr kml_file_; }; // A hunk of KML that uses all possible entities. const static string kEntityKml( "\n" " \n" " \n" " Trail Head Name]]>\n" " \n" " \n" " The length in miles]]>\n" " \n" " \n" " change in altitude]]>\n" " \n" " \n" " \n" " __NAME__\n" "
__ADDRESS__
\n" " __SNIPPET__\n" " __DESCRIPTION__\n" " \n" " \n" " 1\n" " \n" " \n" " 234\n" " \n" " \n" " Mount Everest\n" " 347.45\n" " 10000\n" " \n" " \n" "
\n" "" ); // A table mapping all entities contained in the above KML document with their // expected replacement strings. const static struct { string entity; string replacement; } kEntityMap[] = { {"id", "foo"}, {"targetId", "bar"}, {"name", "__NAME__"}, {"address", "__ADDRESS__"}, {"Snippet", "__SNIPPET__"}, {"description", "__DESCRIPTION__"}, {"TrailHeadType/ElevationGain", "10000"}, {"TrailHeadType/ElevationGain/displayName", "change in altitude"}, {"TrailHeadType/TrailHeadName", "Mount Everest"}, {"TrailHeadType/TrailHeadName/displayName", "Trail Head Name"}, {"TrailHeadType/TrailLength", "347.45"}, {"TrailHeadType/TrailLength/displayName", "The length in miles"}, {"holeNumber", "1"}, {"holeYardage", "234"}, }; TEST_F(EntityMapperTest, TestGetEntityFields) { string errs; kml_file_ = KmlFile::CreateFromParse(kEntityKml, NULL); ASSERT_TRUE(kml_file_); ASSERT_TRUE(errs.empty()); DocumentPtr doc = kmldom::AsDocument(kml_file_->get_root()); PlacemarkPtr p = kmldom::AsPlacemark(doc->get_feature_array_at(0)); kmlbase::StringMap entity_map; EntityMapper entity_mapper(kml_file_, &entity_map); entity_mapper.GetEntityFields(p); // Verify that the correct number of entities were extracted from the KML. const size_t kSizeEntityMap = sizeof(kEntityMap)/sizeof(kEntityMap[0]); ASSERT_EQ(kSizeEntityMap, entity_map.size()); // Verify that the entity map was populated as expected. for (size_t i = 0; i < kSizeEntityMap; ++i) { // The entity exists within the map. ASSERT_TRUE(entity_map.find(kEntityMap[i].entity) != entity_map.end()); // The entity has the expected replacement text. ASSERT_EQ(kEntityMap[i].replacement, entity_map[kEntityMap[i].entity]); } } // A table mapping entities to their expected replacements. const static struct { string raw_text; string expanded_text; } kReplacments[] = { { "abcdef", "abcdef", }, { "abc$[]def", "abc$[]def", }, { "abc$[noSuchEntity]def", "abc$[noSuchEntity]def", }, { "$[name]$[description]", "__NAME____DESCRIPTION__", }, { "xxx$[name]xxx$[description]xxx", "xxx__NAME__xxx__DESCRIPTION__xxx", }, { " $[name] $[description] ", " __NAME__ __DESCRIPTION__ ", }, { " $[name]$[name] $[description] $[description] $[name]", " __NAME____NAME__ __DESCRIPTION__ __DESCRIPTION__ __NAME__", }, }; TEST_F(EntityMapperTest, TestCreateExpandedEntities) { kml_file_ = KmlFile::CreateFromParse(kEntityKml, NULL); DocumentPtr doc = kmldom::AsDocument(kml_file_->get_root()); PlacemarkPtr p = kmldom::AsPlacemark(doc->get_feature_array_at(0)); kmlbase::StringMap entity_map; EntityMapper entity_mapper(kml_file_, &entity_map); entity_mapper.GetEntityFields(p); // Verify that CreateExpandedEntities handles various kinds of entity // references, spacing, multiple references. for (size_t i = 0; i < sizeof(kReplacments)/sizeof(kReplacments[0]); ++i) { ASSERT_EQ( kReplacments[i].expanded_text, CreateExpandedEntities(kReplacments[i].raw_text, entity_map)); } } TEST_F(EntityMapperTest, TestAltMarkupData) { const string kDataKml = ( "" "" "" "1st display name" "1st" "" "" "2nd display name" "2nd" "" "" "data name" "data description" "" "" ); const struct { const char* key; const char* value; } kKeyValues[] = { { "1st display name", "1st", }, { "2nd display name", "2nd", }, { "name", "data name", }, { "description", "data description", }, }; kml_file_ = KmlFile::CreateFromParse(kDataKml, NULL); ASSERT_TRUE(kml_file_); PlacemarkPtr p = kmldom::AsPlacemark(kml_file_->get_root()); ASSERT_TRUE(p); kmlbase::StringMap entity_map; kmlbase::StringPairVector alt_markup_map; EntityMapper entity_mapper(kml_file_, &entity_map, &alt_markup_map); entity_mapper.GetEntityFields(p); ASSERT_EQ(static_cast(6), entity_map.size()); ASSERT_EQ(static_cast(4), alt_markup_map.size()); for (int i = 0; i < 4; i++) { ASSERT_EQ(kKeyValues[i].key, alt_markup_map[i].first); ASSERT_EQ(kKeyValues[i].value, alt_markup_map[i].second); } // If GetEntityFields is called multiple times, the StringMap is overwritten // and the StringPairVector is appended to. entity_mapper.GetEntityFields(p); ASSERT_EQ(static_cast(6), entity_map.size()); ASSERT_EQ(static_cast(8), alt_markup_map.size()); entity_mapper.GetEntityFields(p); ASSERT_EQ(static_cast(6), entity_map.size()); ASSERT_EQ(static_cast(12), alt_markup_map.size()); } TEST_F(EntityMapperTest, TestAltMarkupSchemaData) { const struct { const char* key; const char* value; } kSchemaDataMappings[] = { { "s_name:simple field display name 1", "one", }, { "s_name:sfield2", "2", }, }; const string kSchemaDataKml = string(DATADIR) + "/kml/schemadata.kml"; string data; string errors; ASSERT_TRUE(File::ReadFileToString(kSchemaDataKml, &data)); kml_file_ = KmlFile::CreateFromParse(data, &errors); ASSERT_FALSE(data.empty()); ASSERT_TRUE(errors.empty()); ASSERT_TRUE(kml_file_); KmlPtr kml = kmldom::AsKml(kml_file_->get_root()); DocumentPtr doc = kmldom::AsDocument(kml->get_feature()); PlacemarkPtr p = kmldom::AsPlacemark(doc->get_feature_array_at(0)); ASSERT_TRUE(p); kmlbase::StringMap entity_map; kmlbase::StringPairVector alt_markup_map; EntityMapper entity_mapper(kml_file_, &entity_map, &alt_markup_map); entity_mapper.GetEntityFields(p); ASSERT_EQ(static_cast(2), alt_markup_map.size()); for (int i = 0; i < 2; i++) { ASSERT_EQ(kSchemaDataMappings[i].key, alt_markup_map[i].first); ASSERT_EQ(kSchemaDataMappings[i].value, alt_markup_map[i].second); } } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/feature_balloon_test.cc000066400000000000000000000215361263603257100227020ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the CreateBalloonText function. #include "kml/engine/feature_balloon.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" #include "kml/base/file.h" #include "kml/engine/kml_file.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif using kmlbase::File; using kmldom::DocumentPtr; using kmldom::FeaturePtr; using kmldom::PlacemarkPtr; namespace kmlengine { class FeatureBalloonTest : public testing::Test { protected: KmlFilePtr kml_file_; }; // A struct of the KML content and the expected balloon text. const static struct { const char* kml; const char* balloontext; } kKml[] = { { // A Feature with neither name nor description has no balloon text. // TODO: geDirections is there by default? "", NULL }, { "foo", "

foo



" }, { "bargoo", "

bar



goo" }, }; TEST_F(FeatureBalloonTest, TestBasicCreateBalloonText) { for (size_t i = 0; i < sizeof(kKml)/sizeof(kKml[0]); ++i) { // Parse the file into a KmlFile object. kml_file_ = KmlFile::CreateFromParse(kKml[i].kml, NULL); // Extract the Placemark. const PlacemarkPtr placemark = kmldom::AsPlacemark(kml_file_->get_root()); // Verify that that balloon text has been composited as expected. const string kResult(CreateBalloonText(kml_file_, placemark)); if (kKml[i].balloontext == NULL) { ASSERT_TRUE(kResult.empty()); } else { ASSERT_EQ(kResult, static_cast(kKml[i].balloontext)); } } } TEST_F(FeatureBalloonTest, TestComplexCreateBalloonText) { // A hunk of KML that requires the ballon to be composited from a // BalloonStyle templated on Data and Schema/SchemaData. const string kKitchenSinkKml( "" "" "" "Trail Head Name
]]>" "" "" "The length in miles
]]>" "" "" "change in altitude
]]>" "" "" "" "__NAME__" "
__ADDRESS__
" "__SNIPPET__" "__DESCRIPTION__" "" "" "" "1" "" "" "234" "" "" "Mount Everest" "347.45" "10000" "" "" "" "-123.115786, 49.283323" "" "
" ""); // The resultant balloon text from the above KML. const string kKitchenSinkBalloonText( "__NAME__

" "__DESCRIPTION__

" "The Trail Head Name is" "Mount Everest
" "The trail is 347.45 miles
" "The climb is 10000 meters

" "$[geDirections]"); // TODO: geDirections. // Parse the file into a KmlFile object. kml_file_ = KmlFile::CreateFromParse(kKitchenSinkKml, NULL); // Extract the Placemark. const DocumentPtr doc = kmldom::AsDocument(kml_file_->get_root()); const PlacemarkPtr placemark = kmldom::AsPlacemark(doc->get_feature_array_at(0)); // Verify that that balloon text has been composited as expected. ASSERT_EQ(kKitchenSinkBalloonText, CreateBalloonText(kml_file_, placemark)); } // A struct of the Feature ID from which we'll pull the KML content, and the // expected balloon text. This maps to testdata/balloon/all-balloons.kml. const static struct { const char* featureid; const char* balloontext; } kFeatures[] = { { "empty-placemark", NULL }, { "empty-name", "



" }, { "empty-description", NULL }, { "empty-name-description", "



" }, { "name", "

named



" }, { "name-description", "

named



described" }, { "name-description-entity", // TODO: the one br is kind of odd... "

named



name is named
id is name-description-entity" }, { "simple-balloon-style", // TODO: same case as above "name is named
id is simple-balloon-style" }, { "extendeddata-data", "to be or not to be that is the question" }, { "extendeddata-schemadata", "She was called Balloon Girl and she had just turned 23" }, { "default-data", "

default data



\n" "\n" "\n" "\n" "\n" "\n" "
1st display name1st
2nd display name2nd
namedata name
descriptiondata description
\n" }, { "default-schemadata", "

default schemadatadata



\n" "\n" "\n" "\n" "
s_name:simple field display name 1one
s_name:sfield22
\n" }, { "default-data-and-schemadata", "

default data and schemadatadata



\n" "\n" "\n" "\n" "\n" "\n" "
1st display name1st
2nd display name2nd
s_name:simple field display name 1one
s_name:sfield22
\n" }, }; TEST_F(FeatureBalloonTest, TestAllBalloonsFile) { const string kBalloonKml = string(DATADIR) + "/balloon/all-balloons.kml"; string data; string errors; ASSERT_TRUE(kmlbase::File::ReadFileToString(kBalloonKml, &data)); kml_file_ = KmlFile::CreateFromParse(data, &errors); ASSERT_FALSE(data.empty()); ASSERT_TRUE(errors.empty()); ASSERT_TRUE(kml_file_); for (size_t i = 0; i < sizeof(kFeatures)/sizeof(kFeatures[0]); ++i) { // Extract the Placemark. const FeaturePtr feature= kmldom::AsFeature(kml_file_->GetObjectById(kFeatures[i].featureid)); // Verify that that balloon text has been composited as expected. const string kActual(CreateBalloonText(kml_file_, feature)); if (kFeatures[i].balloontext == NULL) { ASSERT_TRUE(kActual.empty()); ASSERT_EQ(string(""), kActual); } else { ASSERT_EQ(static_cast(kFeatures[i].balloontext), kActual); } } } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/feature_view_test.cc000066400000000000000000000153731263603257100222300ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the ComputeFeatureLookAt function. #include "kml/engine/feature_view.h" #include "gtest/gtest.h" #include "kml/engine/bbox.h" #include "kml/engine/kml_file.h" using kmldom::CoordinatesPtr; using kmldom::FolderPtr; using kmldom::KmlFactory; using kmldom::LineStringPtr; using kmldom::LocationPtr; using kmldom::LookAtPtr; using kmldom::ModelPtr; using kmldom::PhotoOverlayPtr; using kmldom::PlacemarkPtr; using kmldom::PointPtr; namespace kmlengine { TEST(FeatureViewTest, TestComputeFeatureLookAt) { KmlFactory* factory = KmlFactory::GetFactory(); // Nothing happens when passed NULL. ASSERT_FALSE(ComputeFeatureLookAt(NULL)); // Nothing happens when no abstract view can be computed. ASSERT_FALSE(ComputeFeatureLookAt(factory->CreateDocument())); ASSERT_FALSE(ComputeFeatureLookAt(factory->CreateFolder())); ASSERT_FALSE(ComputeFeatureLookAt(factory->CreatePlacemark())); ASSERT_FALSE(ComputeFeatureLookAt(factory->CreateNetworkLink())); ASSERT_FALSE(ComputeFeatureLookAt(factory->CreateGroundOverlay())); ASSERT_FALSE(ComputeFeatureLookAt(factory->CreateScreenOverlay())); ASSERT_FALSE(ComputeFeatureLookAt(factory->CreatePhotoOverlay())); ASSERT_FALSE(ComputeFeatureLookAt(factory->CreateGxTour())); PlacemarkPtr point_placemark = factory->CreatePlacemark(); PointPtr point = factory->CreatePoint(); CoordinatesPtr coordinates = factory->CreateCoordinates(); const double kLat0 = 37.0; const double kLng0 = -122.0; coordinates->add_latlng(kLat0, kLng0); point->set_coordinates(coordinates); point_placemark->set_geometry(point); ASSERT_TRUE(point_placemark); const LookAtPtr point_lookat = ComputeFeatureLookAt(point_placemark); ASSERT_TRUE(point_lookat); ASSERT_DOUBLE_EQ(-122.0, point_lookat->get_longitude()); ASSERT_DOUBLE_EQ(37.0, point_lookat->get_latitude()); ASSERT_DOUBLE_EQ(0.0, point_lookat->get_altitude()); ASSERT_DOUBLE_EQ(0.0, point_lookat->get_heading()); ASSERT_DOUBLE_EQ(0.0, point_lookat->get_tilt()); ASSERT_DOUBLE_EQ(1000.0, point_lookat->get_range()); ASSERT_DOUBLE_EQ(kmldom::ALTITUDEMODE_RELATIVETOGROUND, point_lookat->get_altitudemode()); PlacemarkPtr line_placemark = factory->CreatePlacemark(); LineStringPtr linestring = factory->CreateLineString(); CoordinatesPtr line_coords = factory->CreateCoordinates(); line_coords->add_latlng(kLat0, kLng0); const double kLat1 = 38.0; const double kLng1 = -121.0; line_coords->add_latlng(kLat1, kLng1); linestring->set_coordinates(line_coords); line_placemark->set_geometry(linestring); const LookAtPtr line_lookat = ComputeFeatureLookAt(line_placemark); ASSERT_TRUE(line_lookat); // We're looking at the center point of the line. ASSERT_DOUBLE_EQ(-121.5, line_lookat->get_longitude()); ASSERT_DOUBLE_EQ(37.5, line_lookat->get_latitude()); ASSERT_DOUBLE_EQ(0.0, line_lookat->get_altitude()); ASSERT_DOUBLE_EQ(0.0, line_lookat->get_heading()); ASSERT_DOUBLE_EQ(0.0, line_lookat->get_tilt()); ASSERT_NEAR(135123.4361, line_lookat->get_range(), 0.0001); ASSERT_DOUBLE_EQ(kmldom::ALTITUDEMODE_RELATIVETOGROUND, line_lookat->get_altitudemode()); } TEST(FeatureViewTest, TestComputeFeatureLookAtFolder) { KmlFactory* factory = KmlFactory::GetFactory(); FolderPtr folder = factory->CreateFolder(); // No abstract view can be computed for this folder. ASSERT_FALSE(ComputeFeatureLookAt(folder)); LocationPtr location = factory->CreateLocation(); location->set_latitude(0); location->set_longitude(0); ModelPtr model = factory->CreateModel(); model->set_location(location); PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_geometry(model); folder->add_feature(placemark); // Now an abstract view can be determined for the folder. LookAtPtr lookat = ComputeFeatureLookAt(folder); ASSERT_TRUE(lookat); ASSERT_DOUBLE_EQ(0.0, lookat->get_latitude()); ASSERT_DOUBLE_EQ(0.0, lookat->get_longitude()); // The range was clamped to 1000 meters. ASSERT_DOUBLE_EQ(1000.0, lookat->get_range()); CoordinatesPtr coords = factory->CreateCoordinates(); coords->add_latlng(10, 10); PointPtr point = factory->CreatePoint(); point->set_coordinates(coords); PhotoOverlayPtr photooverlay = factory->CreatePhotoOverlay(); photooverlay->set_point(point); folder->add_feature(photooverlay); // The folder's abstract view is now at the midpoint of 0,0 10,10 and // encompasses the view of both the model and the photo's point. lookat = ComputeFeatureLookAt(folder); ASSERT_DOUBLE_EQ(5.0, lookat->get_latitude()); ASSERT_DOUBLE_EQ(5.0, lookat->get_longitude()); // The range encompasses 0,0 to 10,10 for our field of view. ASSERT_NEAR(1494183.4444, lookat->get_range(), 0.0001); } TEST(FeatureViewTest, TestComputeBboxLookAt) { Bbox bbox(36.59062, 34.98788, -82.00043, -90.06512); kmldom::LookAtPtr lookat = ComputeBboxLookAt(bbox); ASSERT_TRUE(lookat); // These fields are expected to be set to these values. ASSERT_DOUBLE_EQ(-86.032775, lookat->get_longitude()); ASSERT_DOUBLE_EQ(35.78925, lookat->get_latitude()); ASSERT_DOUBLE_EQ(712928.68603440293, lookat->get_range()); // These fields are not set by ComputeBboxLookAt. ASSERT_FALSE(lookat->has_altitude()); ASSERT_FALSE(lookat->has_heading()); ASSERT_FALSE(lookat->has_tilt()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/feature_visitor_test.cc000066400000000000000000000117741263603257100227560ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the GetRootFeature() and // VisitFeatureHierarchy() functions. #include "kml/engine/feature_visitor.h" #include #include "kml/dom.h" #include "gtest/gtest.h" using kmldom::DocumentPtr; using kmldom::FeaturePtr; using kmldom::FolderPtr; using kmldom::KmlFactory; using kmldom::KmlPtr; using kmldom::PlacemarkPtr; using kmldom::PointPtr; namespace kmlengine { class FeatureVisitorTest : public testing::Test { protected: virtual void SetUp() { factory_ = KmlFactory::GetFactory(); document_ = factory_->CreateDocument(); folder_ = factory_->CreateFolder(); kml_ = factory_->CreateKml(); placemark_ = factory_->CreatePlacemark(); point_ = factory_->CreatePoint(); } KmlFactory* factory_; DocumentPtr document_; FolderPtr folder_; KmlPtr kml_; PlacemarkPtr placemark_; PointPtr point_; }; typedef std::vector feature_vector_t; class TestFeatureVisitor : public FeatureVisitor { public: TestFeatureVisitor(feature_vector_t* feature_vector) : feature_vector_(feature_vector) {} virtual void VisitFeature(const kmldom::FeaturePtr& feature) { feature_vector_->push_back(feature); } private: feature_vector_t* feature_vector_; }; TEST_F(FeatureVisitorTest, TestGetRootFeature) { // Verify NULL is properly returned for non-kml and non-Feature args. ASSERT_FALSE(GetRootFeature(NULL)); ASSERT_FALSE(GetRootFeature(point_)); // Verify NULL is returned for an empty kml element. ASSERT_FALSE(GetRootFeature(kml_)); // Verify the Placemark is found as the root feature. kml_->set_feature(placemark_); ASSERT_EQ(kmldom::Type_Placemark, GetRootFeature(kml_)->Type()); // Verify the Document is found as the root feature. kml_->set_feature(document_); ASSERT_EQ(kmldom::Type_Document, GetRootFeature(kml_)->Type()); } TEST_F(FeatureVisitorTest, TestVisitFeatureHierarchy) { // Create a Feature hierachy with both Features, non-Feature complex elements // and simple elements. placemark_->set_geometry(point_); // Yes, this is not a Feature. placemark_->set_name("names are not confusing"); placemark_->set_abstractview(factory_->CreateLookAt()); folder_->add_feature(placemark_); folder_->set_description("description is not visited"); folder_->set_timeprimitive(factory_->CreateTimeStamp()); document_->add_feature(folder_); document_->set_snippet(factory_->CreateSnippet()); document_->set_region(factory_->CreateRegion()); document_->add_styleselector(factory_->CreateStyle()); document_->add_styleselector(factory_->CreateStyleMap()); // Create a test FeatureVisitor. feature_vector_t feature_vector; TestFeatureVisitor test_feature_visitor(&feature_vector); // Visit the hierarchy. VisitFeatureHierarchy(document_, test_feature_visitor); // Verify all Features were visited in the expected order. ASSERT_EQ(static_cast(3), feature_vector.size()); ASSERT_EQ(kmldom::Type_Document, feature_vector[0]->Type()); ASSERT_EQ(kmldom::Type_Folder, feature_vector[1]->Type()); ASSERT_EQ(kmldom::Type_Placemark, feature_vector[2]->Type()); // Verify that nothing is properly found when passed NULL. feature_vector.clear(); VisitFeatureHierarchy(NULL, test_feature_visitor); ASSERT_TRUE(feature_vector.empty()); // Verify that only 1 Feature is found when passed a non-Container. VisitFeatureHierarchy(placemark_, test_feature_visitor); ASSERT_EQ(static_cast(1), feature_vector.size()); ASSERT_EQ(kmldom::Type_Placemark, feature_vector[0]->Type()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/find_test.cc000066400000000000000000000137731263603257100204650ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the GetElementsById() function // and the ElementFinder class. #include "kml/engine/find.h" #include "kml/dom/kml_funcs.h" #include "kml/dom/kml_factory.h" #include "kml/dom/kml22.h" #include "kml/dom/kmldom.h" #include "gtest/gtest.h" using kmldom::CoordinatesPtr; using kmldom::FolderPtr; using kmldom::GroundOverlayPtr; using kmldom::KmlFactory; using kmldom::PlacemarkPtr; using kmldom::PointPtr; namespace kmlengine { class ElementFinderTest : public testing::Test { protected: virtual void SetUp() { coordinates_ = KmlFactory::GetFactory()->CreateCoordinates(); folder0_ = KmlFactory::GetFactory()->CreateFolder(); folder1_ = KmlFactory::GetFactory()->CreateFolder(); groundoverlay_ = KmlFactory::GetFactory()->CreateGroundOverlay(); placemark0_ = KmlFactory::GetFactory()->CreatePlacemark(); placemark1_ = KmlFactory::GetFactory()->CreatePlacemark(); placemark2_ = KmlFactory::GetFactory()->CreatePlacemark(); point0_ = KmlFactory::GetFactory()->CreatePoint(); point1_ = KmlFactory::GetFactory()->CreatePoint(); } CoordinatesPtr coordinates_; FolderPtr folder0_; FolderPtr folder1_; GroundOverlayPtr groundoverlay_; PlacemarkPtr placemark0_; PlacemarkPtr placemark1_; PlacemarkPtr placemark2_; PointPtr point0_; PointPtr point1_; }; // Verify that GetElementsById() is well behaved when // presented with NULL pointers. TEST_F(ElementFinderTest, TestNullGetElementsById) { GetElementsById(NULL, kmldom::Type_Folder, NULL); } // Verify a normal usage of GetElementsById(). TEST_F(ElementFinderTest, TestBasicGetElementsById) { // Put a variety of elements in a hierarchy. const string kId0("id0"); const string kId1("id1"); point0_->set_coordinates(coordinates_); placemark0_->set_geometry(point0_); placemark0_->set_id(kId0); placemark1_->set_id(kId1); placemark1_->set_geometry(point1_); folder0_->add_feature(placemark0_); folder1_->add_feature(placemark2_); folder0_->add_feature(folder1_); folder0_->add_feature(placemark1_); folder0_->add_feature(groundoverlay_); // Ask for all Placemarks. ElementVector placemarks; GetElementsById(folder0_, kmldom::Type_Placemark, &placemarks); // Verify we got just what we asked for and in depth-first order. ASSERT_EQ(static_cast(3), placemarks.size()); ASSERT_EQ(kId0, AsPlacemark(placemarks[0])->get_id()); ASSERT_TRUE(AsPlacemark(placemarks[1])); ASSERT_EQ(kId1, AsPlacemark(placemarks[2])->get_id()); // Ask for all the Points. ElementVector points; GetElementsById(folder0_, kmldom::Type_Point, &points); // Verify we got the 2 Points in depth-first order. ASSERT_EQ(static_cast(2), points.size()); PointPtr point = AsPoint(points[0]); ASSERT_TRUE(point->has_coordinates()); ASSERT_TRUE(AsPoint(points[1])); // Verify that no elements are found if there are none // of this type in the element hierarchy. ElementVector no_documents; GetElementsById(folder0_, kmldom::Type_Document, &no_documents); ASSERT_TRUE(no_documents.empty()); // As for all Overlays. ElementVector overlays; GetElementsById(folder0_, kmldom::Type_Overlay, &overlays); ASSERT_EQ(static_cast(1), overlays.size()); GroundOverlayPtr groundoverlay = AsGroundOverlay(overlays[0]); // As for all Features. ElementVector features; GetElementsById(folder0_, kmldom::Type_Feature, &features); ASSERT_EQ(static_cast(5), features.size()); // As for all Objects. ElementVector objects; GetElementsById(folder0_, kmldom::Type_Object, &objects); ASSERT_EQ(static_cast(7), objects.size()); } // Verify a normal usage of GetChildElements(). TEST_F(ElementFinderTest, TestBasicGetChildElements) { // Put a variety of elements in a hierarchy. const string kId0("id0"); const string kId1("id1"); point0_->set_coordinates(coordinates_); placemark0_->set_geometry(point0_); placemark0_->set_id(kId0); placemark1_->set_id(kId1); placemark1_->set_geometry(point1_); folder0_->add_feature(placemark0_); folder1_->add_feature(placemark2_); folder0_->add_feature(folder1_); folder0_->add_feature(placemark1_); folder0_->add_feature(groundoverlay_); ElementVector all_elements; ASSERT_EQ(8, GetChildElements(folder0_, true, &all_elements)); ASSERT_EQ(static_cast(8), all_elements.size()); ASSERT_EQ(8, GetChildElements(folder0_, true, NULL)); ElementVector folder0_children; GetChildElements(folder0_, false, &folder0_children); ASSERT_EQ(static_cast(4), folder0_children.size()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/find_xml_namespaces_test.cc000066400000000000000000000131361263603257100235350ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the GetElementsById() function // and the IdMapper class. #include "kml/engine/find_xml_namespaces.h" #include "gtest/gtest.h" #include "kml/base/attributes.h" #include "kml/dom.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif using kmlbase::Attributes; using kmldom::DocumentPtr; using kmldom::GxTourPtr; using kmldom::KmlFactory; namespace kmlengine { // If either or both args to FindXmlNamespaces() is NULL nothing happens and // there is no crash. TEST(FindXmlNamepacesTest, TestNull) { FindXmlNamespaces(NULL, NULL); Attributes xmlns_attributes; FindXmlNamespaces(NULL, &xmlns_attributes); FindXmlNamespaces(KmlFactory::GetFactory()->CreateDocument(), NULL); } TEST(FindXmlNamepacesTest, TestNoNamespaces) { kmldom::DocumentPtr document = KmlFactory::GetFactory()->CreateDocument(); Attributes xmlns_attributes; FindXmlNamespaces(document, &xmlns_attributes); ASSERT_EQ(static_cast(1), xmlns_attributes.GetSize()); } TEST(FindXmlNamepacesTest, TestOneGx) { KmlFactory* factory = KmlFactory::GetFactory(); kmldom::DocumentPtr document = factory->CreateDocument(); document->add_feature(factory->CreateGxTour()); Attributes xmlns_attributes; FindXmlNamespaces(document, &xmlns_attributes); ASSERT_EQ(static_cast(2), xmlns_attributes.GetSize()); string xml_namespace; ASSERT_TRUE(xmlns_attributes.GetValue("gx", &xml_namespace)); } TEST(FindXmlNamepacesTest, TestOneGxAndOneAtom) { KmlFactory* factory = KmlFactory::GetFactory(); kmldom::DocumentPtr document = factory->CreateDocument(); document->add_feature(factory->CreateGxTour()); document->set_atomauthor(factory->CreateAtomAuthor()); Attributes xmlns_attributes; FindXmlNamespaces(document, &xmlns_attributes); ASSERT_EQ(static_cast(3), xmlns_attributes.GetSize()); string xml_namespace; ASSERT_TRUE(xmlns_attributes.GetValue("gx", &xml_namespace)); ASSERT_TRUE(xmlns_attributes.GetValue("atom", &xml_namespace)); } TEST(FindXmlNamepacesTest, TestOneGxAndOneAtomAndOneXal) { KmlFactory* factory = KmlFactory::GetFactory(); kmldom::DocumentPtr document = factory->CreateDocument(); document->add_feature(factory->CreateGxTour()); document->set_atomauthor(factory->CreateAtomAuthor()); document->set_xaladdressdetails(factory->CreateXalAddressDetails()); Attributes xmlns_attributes; FindXmlNamespaces(document, &xmlns_attributes); ASSERT_EQ(static_cast(4), xmlns_attributes.GetSize()); string xml_namespace; ASSERT_TRUE(xmlns_attributes.GetValue("gx", &xml_namespace)); ASSERT_TRUE(xmlns_attributes.GetValue("atom", &xml_namespace)); ASSERT_TRUE(xmlns_attributes.GetValue("xal", &xml_namespace)); } TEST(FindXmlNamepacesTest, TestRootGx) { KmlFactory* factory = KmlFactory::GetFactory(); GxTourPtr tour = factory->CreateGxTour(); Attributes xmlns_attributes; FindXmlNamespaces(tour, &xmlns_attributes); ASSERT_EQ(static_cast(1), xmlns_attributes.GetSize()); string xml_namespace; ASSERT_TRUE(xmlns_attributes.GetValue("gx", &xml_namespace)); } TEST(FindXmlNamepacesTest, TestBasicFindAndInsertXmlNamespaces) { KmlFactory* factory = KmlFactory::GetFactory(); GxTourPtr tour = factory->CreateGxTour(); FindAndInsertXmlNamespaces(tour); Attributes xmlns_attributes; AsElement(tour)->SerializeAttributes(&xmlns_attributes); ASSERT_EQ(static_cast(1), xmlns_attributes.GetSize()); } // TODO: every KML 2.2 element should do set_xmlns(XMLNS_KML22) which should // really be an arg to the Element ctor... #if 0 TEST(FindXmlNamepacesTest, TestBasicFindAndInsertXmlNamespaces) { KmlFactory* factory = KmlFactory::GetFactory(); DocumentPtr document = factory->CreateDocument(); FindAndInsertXmlNamespaces(docment); Attributes xmlns_attributes; AsElement(document)->SerializeAttributes(&xmlns_attributes); // TODO: this fails at present due to Document not setting its namespace. // We could consider XMLNS_NONE == XMLNS_KML22, but that's hacky... ASSERT_EQ(static_cast(1), xmlns_attributes.GetSize()); } #endif } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/get_link_parents_test.cc000066400000000000000000000066051263603257100230710ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the GetLinkParents function. #include "kml/engine/get_link_parents.h" #include "kml/base/file.h" #include "gtest/gtest.h" #include "kml/engine/engine_types.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlengine { class GetLinkParentsTest : public testing::Test { }; // Verify that GetLinks() returns false if given no output vector or bad kml. TEST_F(GetLinkParentsTest, TestNull) { const string nothing; ASSERT_FALSE(GetLinkParents(nothing, NULL)); ElementVector will_remain_empty; ASSERT_FALSE(GetLinkParents("parse will fail", &will_remain_empty)); ASSERT_TRUE(will_remain_empty.empty()); } // Verify that GetParentLinks finds all kinds of parents of links in a KML file. TEST_F(GetLinkParentsTest, TestAll) { const string kAllLinks = string(DATADIR) + "/links/alllinks.kml"; string kml; ASSERT_TRUE(kmlbase::File::ReadFileToString(kAllLinks, &kml)); ElementVector link_parents; ASSERT_TRUE(GetLinkParents(kml, &link_parents)); // This is obviously exactly matched to the content of alllinks.kml. ASSERT_EQ(static_cast(7), link_parents.size()); ASSERT_EQ(kmldom::Type_IconStyle, link_parents[0]->Type()); ASSERT_EQ(kmldom::Type_ItemIcon, link_parents[1]->Type()); ASSERT_EQ(kmldom::Type_NetworkLink, link_parents[2]->Type()); ASSERT_EQ(kmldom::Type_GroundOverlay, link_parents[3]->Type()); ASSERT_EQ(kmldom::Type_ScreenOverlay, link_parents[4]->Type()); ASSERT_EQ(kmldom::Type_PhotoOverlay, link_parents[5]->Type()); ASSERT_EQ(kmldom::Type_Model, link_parents[6]->Type()); #if 0 // TODO: handle styleUrl(?) and SchemaData ASSERT_EQ(string("style.kml#style"), href_vector[6]->Type()); ASSERT_EQ(string("#myschema"), href_vector[7]); #endif } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/get_links_test.cc000066400000000000000000000110111263603257100215030ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the GetLinks function. #include "kml/engine/get_links.h" #include "kml/base/file.h" #include "gtest/gtest.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlengine { class GetLinksTest : public testing::Test { }; // Verify that GetLinks() returns false if given no output vector. TEST_F(GetLinksTest, TestNull) { const string nothing; ASSERT_FALSE(GetLinks(nothing, NULL)); } // Verify very basic usage. TEST_F(GetLinksTest, TestBasic) { const string kHref = "foo.kml"; const string kNetworkLink = "" + kHref + ""; href_vector_t href_vector; ASSERT_TRUE(GetLinks(kNetworkLink, &href_vector)); ASSERT_EQ(static_cast(1), href_vector.size()); ASSERT_EQ(kHref, href_vector[0]); } // Verify that GetLinks finds all kinds of hrefs in a KML file. TEST_F(GetLinksTest, TestAll) { const string kAllLinks = string(DATADIR) + "/links/alllinks.kml"; string kml; ASSERT_TRUE(kmlbase::File::ReadFileToString(kAllLinks, &kml)); href_vector_t href_vector; ASSERT_TRUE(GetLinks(kml, &href_vector)); // This is obviously exactly matched to the content of alllinks.kml. ASSERT_EQ(static_cast(9), href_vector.size()); ASSERT_EQ(string("http://example.com/icon.jpg"), href_vector[0]); ASSERT_EQ(string("itemicon.png"), href_vector[1]); ASSERT_EQ(string("../more.kml"), href_vector[2]); ASSERT_EQ(string("go.jpeg"), href_vector[3]); ASSERT_EQ(string("so.jpeg"), href_vector[4]); ASSERT_EQ(string("po.jpeg"), href_vector[5]); ASSERT_EQ(string("style.kml#style"), href_vector[6]); ASSERT_EQ(string("#myschema"), href_vector[7]); ASSERT_EQ(string("model.dae"), href_vector[8]); } TEST_F(GetLinksTest, TestGetRelativeLinks) { const string kAllLinks = string(DATADIR) + "/links/alllinks.kml"; string kml; ASSERT_TRUE(kmlbase::File::ReadFileToString(kAllLinks, &kml)); href_vector_t href_vector; ASSERT_TRUE(GetRelativeLinks(kml, &href_vector)); // Of the 9 href's in alllinks.kml, the first is remote and the penultimate // is fragment-only. ASSERT_EQ(static_cast(7), href_vector.size()); ASSERT_EQ(string("itemicon.png"), href_vector[0]); ASSERT_EQ(string("../more.kml"), href_vector[1]); ASSERT_EQ(string("go.jpeg"), href_vector[2]); ASSERT_EQ(string("so.jpeg"), href_vector[3]); ASSERT_EQ(string("po.jpeg"), href_vector[4]); ASSERT_EQ(string("style.kml#style"), href_vector[5]); ASSERT_EQ(string("model.dae"), href_vector[6]); // Test NULL/empty args. ASSERT_FALSE(GetRelativeLinks(kml, NULL)); ASSERT_FALSE(GetRelativeLinks("", &href_vector)); ASSERT_EQ(static_cast(7), href_vector.size()); // Test invalid KML input. ASSERT_FALSE(GetRelativeLinks("", &href_vector)); ASSERT_EQ(static_cast(7), href_vector.size()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/href_test.cc000066400000000000000000000135731263603257100204670ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the Href class. #include "kml/engine/href.h" #include "gtest/gtest.h" namespace kmlengine { class HrefTest : public testing::Test { protected: void VerifyString(const char* want, const string& got); }; // Verify usage for a basic absolute href. TEST_F(HrefTest, TestBasicAbsolute) { const string kHttp("http"); const string kFooCom("foo.com"); const string kIndexKml("index.kml"); Href href(kHttp + "://" + kFooCom + "/" + kIndexKml); ASSERT_FALSE(href.IsRelative()); ASSERT_FALSE(href.has_fragment()); ASSERT_EQ(kHttp, href.get_scheme()); ASSERT_EQ(kFooCom, href.get_net_loc()); ASSERT_EQ(kIndexKml, href.get_path()); } // Verify basic usage of the get,set,has,clear_scheme methods. TEST_F(HrefTest, TestSchemeSetGetHasClear) { const string kScheme("http"); Href href; href.set_scheme(kScheme); ASSERT_TRUE(href.has_scheme()); ASSERT_EQ(kScheme, href.get_scheme()); href.clear_scheme(); ASSERT_FALSE(href.has_scheme()); } // Verify basic usage of the get,set,has,clear_net_loc methods. TEST_F(HrefTest, TestNetLocSetGetHasClear) { const string kNetLoc("www.google.com"); Href href; href.set_net_loc(kNetLoc); ASSERT_TRUE(href.has_net_loc()); ASSERT_EQ(kNetLoc, href.get_net_loc()); href.clear_net_loc(); ASSERT_FALSE(href.has_net_loc()); } // Verify basic usage of the get,set,has,clear_path methods. TEST_F(HrefTest, TestPathSetGetHasClear) { const string kPath("a/b/c/d/cool.kml"); Href href; href.set_path(kPath); ASSERT_TRUE(href.has_path()); ASSERT_EQ(kPath, href.get_path()); href.clear_path(); ASSERT_FALSE(href.has_path()); } // Verify basic usage of the get,set,has,clear_fragment methods. TEST_F(HrefTest, TestFragmentSetGetHasClear) { const string kFragment("the-fragment"); Href href; href.set_fragment(kFragment); ASSERT_TRUE(href.has_fragment()); ASSERT_EQ(kFragment, href.get_fragment()); href.clear_fragment(); ASSERT_FALSE(href.has_fragment()); } TEST_F(HrefTest, TestFragmentSimple) { const string kId("hi"); Href href("#" + kId); ASSERT_FALSE(href.has_scheme()); ASSERT_FALSE(href.has_path()); ASSERT_TRUE(href.has_fragment()); ASSERT_EQ(kId, href.get_fragment()); } TEST_F(HrefTest, TestRelativeWithFragment) { const string kPath("style.kml"); const string kId("shared-style"); Href href(kPath + "#" + kId); ASSERT_TRUE(href.IsRelative()); ASSERT_FALSE(href.has_scheme()); ASSERT_TRUE(href.has_path()); ASSERT_TRUE(href.has_fragment()); ASSERT_EQ(kId, href.get_fragment()); ASSERT_EQ(kPath, href.get_path()); } static struct { const char* href; const bool is_relative; const char* scheme; const char* net_loc; const char* path; const char* fragment; } kTestHrefs[] = { { "http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png", false, "http", "maps.google.com", "mapfiles/kml/pushpin/ylw-pushpin.png", NULL }, { "#msn_ylw-pushpin", true, NULL, NULL, NULL, "msn_ylw-pushpin" }, { "files/zermatt.jpg", true, NULL, NULL, "files/zermatt.jpg", NULL } }; // This is a helper function to convert the want string to a string // and compare to got. If want is NULL then got is expected to be empty. void HrefTest::VerifyString(const char* want, const string& got) { if (want) { ASSERT_EQ(string(want), got); } else { ASSERT_TRUE(got.empty()); } } // Verify all hrefs in the kTestHrefs table. TEST_F(HrefTest, TestTestHrefs) { size_t count = sizeof(kTestHrefs)/sizeof(kTestHrefs[0]); for (size_t i = 0; i < count; ++i) { Href href(kTestHrefs[i].href); ASSERT_EQ(kTestHrefs[i].is_relative, href.IsRelative()); VerifyString(kTestHrefs[i].scheme, href.get_scheme()); VerifyString(kTestHrefs[i].net_loc, href.get_net_loc()); VerifyString(kTestHrefs[i].path, href.get_path()); VerifyString(kTestHrefs[i].fragment, href.get_fragment()); } } TEST_F(HrefTest, TestIsFragmentOnly) { const string kJustAFragment("#hi-there"); Href a(kJustAFragment); ASSERT_TRUE(a.IsFragmentOnly()); const string kPathAndFragment("style.kml#shared-style-id"); Href b(kPathAndFragment); ASSERT_FALSE(b.IsFragmentOnly()); } TEST_F(HrefTest, TestIsRelativePath) { const string kJustAFragment("#hi-there"); Href a(kJustAFragment); ASSERT_FALSE(a.IsRelativePath()); const string kPathAndFragment("style.kml#shared-style-id"); Href b(kPathAndFragment); ASSERT_TRUE(b.IsRelativePath()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/id_mapper_test.cc000066400000000000000000000332551263603257100215020ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the GetElementsById() function // and the IdMapper class. #include "kml/engine/id_mapper.h" #include "kml/engine/id_mapper_internal.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" #include "kml/base/file.h" #include "kml/dom/kml_funcs.h" #include "kml/dom/kml_factory.h" #include "kml/dom/kml22.h" #include "kml/dom/kmldom.h" #include "kml/dom/xsd.h" #include "kml/engine/find.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif using kmlbase::File; using kmldom::CoordinatesPtr; using kmldom::ElementPtr; using kmldom::FolderPtr; using kmldom::GroundOverlayPtr; using kmldom::KmlFactory; using kmldom::ObjectPtr; using kmldom::PlacemarkPtr; using kmldom::PointPtr; namespace kmlengine { class IdMapperTest : public testing::Test { protected: virtual void SetUp() { coordinates_ = KmlFactory::GetFactory()->CreateCoordinates(); folder0_ = KmlFactory::GetFactory()->CreateFolder(); folder1_ = KmlFactory::GetFactory()->CreateFolder(); groundoverlay_ = KmlFactory::GetFactory()->CreateGroundOverlay(); placemark0_ = KmlFactory::GetFactory()->CreatePlacemark(); placemark1_ = KmlFactory::GetFactory()->CreatePlacemark(); placemark2_ = KmlFactory::GetFactory()->CreatePlacemark(); point0_ = KmlFactory::GetFactory()->CreatePoint(); point1_ = KmlFactory::GetFactory()->CreatePoint(); id_mapper_.reset(new IdMapper(&object_id_map_, &dup_id_vector_)); } CoordinatesPtr coordinates_; FolderPtr folder0_; FolderPtr folder1_; GroundOverlayPtr groundoverlay_; PlacemarkPtr placemark0_; PlacemarkPtr placemark1_; PlacemarkPtr placemark2_; PointPtr point0_; PointPtr point1_; ObjectIdMap object_id_map_; ElementVector dup_id_vector_; boost::scoped_ptr id_mapper_; }; TEST_F(IdMapperTest, TestIdMapperEmpty) { // Save an element with no id. id_mapper_->SaveElement(folder0_); ASSERT_TRUE(dup_id_vector_.empty()); ASSERT_TRUE(object_id_map_.empty()); } TEST_F(IdMapperTest, TestIdMapperOne) { // Save an element with an id. const string kPlacemark0Id("id-of-placemark0"); placemark0_->set_id(kPlacemark0Id); id_mapper_->SaveElement(placemark0_); ASSERT_TRUE(dup_id_vector_.empty()); ASSERT_EQ(static_cast(1), object_id_map_.size()); ASSERT_EQ(kPlacemark0Id, object_id_map_[kPlacemark0Id]->get_id()); } // Verify MapIds() on an element with an id. TEST_F(IdMapperTest, TestMapIdsOne) { // Save an element with an id. const string kPlacemark0Id("id-of-placemark0"); placemark0_->set_id(kPlacemark0Id); MapIds(placemark0_, &object_id_map_, &dup_id_vector_); ASSERT_TRUE(dup_id_vector_.empty()); ASSERT_EQ(static_cast(1), object_id_map_.size()); ASSERT_EQ(kPlacemark0Id, object_id_map_[kPlacemark0Id]->get_id()); } // Verify MapIds() is well behaved when presented with no dup vector pointer. TEST_F(IdMapperTest, TestMapIdsNoDupVector) { // Save an element with an id. const string kPlacemark0Id("id-of-placemark0"); placemark0_->set_id(kPlacemark0Id); MapIds(placemark0_, &object_id_map_, NULL); ASSERT_EQ(static_cast(1), object_id_map_.size()); ASSERT_EQ(kPlacemark0Id, object_id_map_[kPlacemark0Id]->get_id()); } TEST_F(IdMapperTest, TestIdMapperDupe) { // Save an element whose child has the same id. const string kDupeId("xml-does-not-like-duplicate-ids"); point0_->set_id(kDupeId); placemark0_->set_id(kDupeId); placemark0_->set_geometry(point0_); id_mapper_->SaveElement(placemark0_); // The dupe will be the parent due element simply because it comes first. ASSERT_EQ(static_cast(1), dup_id_vector_.size()); ASSERT_EQ(kmldom::Type_Placemark, dup_id_vector_[0]->Type()); // The id map will hold the last item of this id. ASSERT_EQ(kDupeId, object_id_map_[kDupeId]->get_id()); ASSERT_EQ(kmldom::Type_Point, object_id_map_[kDupeId]->Type()); } TEST_F(IdMapperTest, TestNoIds) { MapIds(folder0_, &object_id_map_, &dup_id_vector_); ASSERT_TRUE(object_id_map_.empty()); ASSERT_TRUE(dup_id_vector_.empty()); folder0_->add_feature(placemark0_); folder0_->add_feature(placemark1_); folder0_->add_feature(placemark2_); // Still nothing with an id. MapIds(folder0_, &object_id_map_, &dup_id_vector_); ASSERT_TRUE(object_id_map_.empty()); ASSERT_TRUE(dup_id_vector_.empty()); } TEST_F(IdMapperTest, TestSomeIds) { const string kId0("id0"); const string kName0("name0"); placemark0_->set_id(kId0); placemark0_->set_name(kName0); const string kId1("id1"); const string kName1("name1"); placemark1_->set_id(kId1); placemark1_->set_name(kName1); folder0_->add_feature(placemark0_); folder0_->add_feature(placemark1_); MapIds(folder0_, &object_id_map_, &dup_id_vector_); // Verify the map has exactly the two expected mappings. ASSERT_EQ(static_cast(2), object_id_map_.size()); // Verifies 1) it was mapped, 2) it's a Placemark, 3) it has the right name. ASSERT_EQ(kName0, AsPlacemark(object_id_map_[kId0])->get_name()); ASSERT_EQ(kName1, AsPlacemark(object_id_map_[kId1])->get_name()); ASSERT_TRUE(dup_id_vector_.empty()); } TEST_F(IdMapperTest, TestAllObjects) { string kml; ASSERT_TRUE(File::ReadFileToString( File::JoinPaths(DATADIR, File::JoinPaths("kml", "all-unknown-attrs-input.kml")), &kml)); ElementPtr root = kmldom::Parse(kml, NULL); MapIds(root, &object_id_map_, &dup_id_vector_); ASSERT_TRUE(dup_id_vector_.empty()); ASSERT_EQ(static_cast(44), object_id_map_.size()); ObjectIdMap::const_iterator iter = object_id_map_.begin(); for (; iter != object_id_map_.end(); ++iter) { const ObjectPtr& object = iter->second; const string& id = iter->first; // The id of the object is the id that maps to the object. ASSERT_EQ(id, object->get_id()); // Each id in all-unknown-attrs-input.kml is the same as the element name. ASSERT_EQ(kmldom::Xsd::GetSchema()->ElementId(id), object->Type()); } } TEST_F(IdMapperTest, TestDupeDetection) { // Create a KML hierarchy with duplicate ids. const string kDupeId("some-id-to-duplicate"); placemark0_->set_id(kDupeId); folder0_->set_id(kDupeId); folder0_->add_feature(placemark0_); // Call the method under test. MapIds(folder0_, &object_id_map_, &dup_id_vector_); ASSERT_EQ(static_cast(1), dup_id_vector_.size()); } TEST_F(IdMapperTest, TestClearIds) { placemark0_->set_id("placemark123"); const string kFolderName("folder name"); folder0_->set_id("folder123"); folder0_->set_name(kFolderName); folder0_->add_feature(placemark0_); FolderPtr folder = AsFolder(ClearIds(folder0_)); ASSERT_TRUE(folder); ASSERT_TRUE(folder->has_name()); ASSERT_EQ(kFolderName, folder->get_name()); ASSERT_EQ(static_cast(1), folder->get_feature_array_size()); ASSERT_FALSE(placemark0_->has_id()); ASSERT_FALSE(folder0_->has_id()); } TEST_F(IdMapperTest, TestClearManyIds) { string kml; ASSERT_TRUE(File::ReadFileToString( File::JoinPaths(DATADIR, File::JoinPaths("kml", "all-unknown-attrs-input.kml")), &kml)); ElementPtr root = kmldom::Parse(kml, NULL); MapIds(root, &object_id_map_, NULL); ASSERT_EQ(static_cast(44), object_id_map_.size()); // Call the method under test. ClearIds(root); object_id_map_.clear(); MapIds(root, &object_id_map_, NULL); ASSERT_TRUE(object_id_map_.empty()); } // Verify well defined behavior on NULL/empty inputs. TEST_F(IdMapperTest, TestRemapIdsNull) { kmlbase::StringMap id_map; ASSERT_EQ(0, RemapIds(object_id_map_, id_map, NULL)); } // Verify remapping for a simple case. TEST_F(IdMapperTest, TestRemapIdsSimple) { const string kId0("id0"); const string kName0("name0"); placemark0_->set_id(kId0); placemark0_->set_name(kName0); const string kId1("id1"); const string kName1("name1"); placemark1_->set_id(kId1); placemark1_->set_name(kName1); folder0_->add_feature(placemark0_); folder0_->add_feature(placemark1_); MapIds(folder0_, &object_id_map_, NULL); kmlbase::StringMap id_map; id_map[kId0] = "newid0"; id_map[kId1] = "newid1"; ASSERT_EQ(0, RemapIds(object_id_map_, id_map, NULL)); ASSERT_TRUE(placemark0_->has_id()); ASSERT_EQ(id_map[kId0], placemark0_->get_id()); ASSERT_TRUE(placemark1_->has_id()); ASSERT_EQ(id_map[kId1], placemark1_->get_id()); } // Verify remapping for a simple case with output object_id_map. TEST_F(IdMapperTest, TestRemapIdsSimpleWithOutput) { const string kId0("id0"); const string kName0("name0"); placemark0_->set_id(kId0); placemark0_->set_name(kName0); const string kId1("id1"); const string kName1("name1"); placemark1_->set_id(kId1); placemark1_->set_name(kName1); const string kFolderId("folder-id"); folder0_->set_id(kFolderId); folder0_->add_feature(placemark0_); folder0_->add_feature(placemark1_); MapIds(folder0_, &object_id_map_, NULL); // This map has mappings for 2 of the ids and one extra. kmlbase::StringMap id_map; id_map[kId0] = "newid0"; id_map[kId1] = "newid1"; id_map["no-such-id"] = "still-no-such-id"; ObjectIdMap output_object_id_map; // One Object's id was cleared... ASSERT_EQ(1, RemapIds(object_id_map_, id_map, &output_object_id_map)); // Two were re-mapped. ASSERT_EQ(static_cast(2), output_object_id_map.size()); ASSERT_TRUE(placemark0_->has_id()); ASSERT_EQ(id_map[kId0], placemark0_->get_id()); ASSERT_TRUE(placemark1_->has_id()); ASSERT_EQ(id_map[kId0], output_object_id_map[id_map[kId0]]->get_id()); ASSERT_EQ(id_map[kId1], output_object_id_map[id_map[kId1]]->get_id()); // Any Object w/o an id mapping is cleared. ASSERT_FALSE(folder0_->has_id()); } TEST_F(IdMapperTest, TestRemapManyIds) { string kml; ASSERT_TRUE(File::ReadFileToString( File::JoinPaths(DATADIR, File::JoinPaths("kml", "all-unknown-attrs-input.kml")), &kml)); ElementPtr root = kmldom::Parse(kml, NULL); MapIds(root, &object_id_map_, NULL); ASSERT_EQ(static_cast(44), object_id_map_.size()); // Create a "newid-OLDID" for half the objects in the file. const string kNewIdBase("newid-"); kmlbase::StringMap id_map; ObjectIdMap::const_iterator iter = object_id_map_.begin(); for (; iter != object_id_map_.end(); ++iter, ++iter) { id_map[iter->first] = kNewIdBase + iter->first; } ObjectIdMap output_object_id_map; ASSERT_EQ(22, RemapIds(object_id_map_, id_map, &output_object_id_map)); ASSERT_EQ(static_cast(22), output_object_id_map.size()); ElementVector all_objects; GetElementsById(root, kmldom::Type_Object, &all_objects); ASSERT_EQ(static_cast(110), all_objects.size()); ElementVector::const_iterator element_iter = all_objects.begin(); int clear_id_count = 0; for (; element_iter != all_objects.end(); ++element_iter) { const kmldom::ObjectPtr& object = AsObject(*element_iter); if (object->has_id()) { ASSERT_EQ(kNewIdBase, object->get_id().substr(0, kNewIdBase.size())); } else { ++clear_id_count; } } ASSERT_EQ(88, clear_id_count); } TEST_F(IdMapperTest, TestUnknownElements) { const string kStyleId("hist1_b"); const string kIconStyleId("khIconStyle671"); const string kKml(string(""); ElementPtr root = kmldom::Parse(kKml, NULL); ASSERT_TRUE(root); MapIds(root, &object_id_map_, NULL); ASSERT_EQ(static_cast(2), object_id_map_.size()); ObjectIdMap::const_iterator find = object_id_map_.find(kIconStyleId); ASSERT_FALSE(find == object_id_map_.end()); kmldom::IconStylePtr iconstyle = kmldom::AsIconStyle(object_id_map_[kIconStyleId]); ASSERT_TRUE(iconstyle); ASSERT_EQ(kIconStyleId, iconstyle->get_id()); find = object_id_map_.find(kStyleId); ASSERT_FALSE(find == object_id_map_.end()); kmldom::StylePtr style = kmldom::AsStyle(object_id_map_[kStyleId]); ASSERT_TRUE(iconstyle); ASSERT_EQ(kStyleId, style->get_id()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/kml_cache_test.cc000066400000000000000000000206411263603257100214430ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the KmlCache class. #include "kml/engine/kml_cache.h" #include "boost/scoped_ptr.hpp" #include "kml/base/file.h" #include "kml/base/net_cache_test_util.h" #include "gtest/gtest.h" #include "kml/dom.h" #include "kml/engine/location_util.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif namespace kmlengine { static const size_t kCacheSize = 137; class KmlCacheTest : public testing::Test { protected: virtual void SetUp() { kml_cache_.reset(new KmlCache(&testdata_net_fetcher_, kCacheSize)); } kmlbase::TestDataNetFetcher testdata_net_fetcher_; boost::scoped_ptr kml_cache_; }; // Verify the FetchKml() and FetchData() with null/bad arguments. TEST_F(KmlCacheTest, TestNullBadFetch) { const string kEmpty; string data; ASSERT_FALSE(kml_cache_->FetchKmlAbsolute(kEmpty)); ASSERT_FALSE(kml_cache_->FetchKmlRelative(kEmpty, kEmpty)); ASSERT_FALSE(kml_cache_->FetchDataRelative(kEmpty, kEmpty, NULL)); ASSERT_FALSE(kml_cache_->FetchDataRelative(kEmpty, kEmpty, &data)); ASSERT_TRUE(data.empty()); const string kGarbage("this is not a url"); ASSERT_FALSE(kml_cache_->FetchKmlAbsolute(kGarbage)); ASSERT_FALSE(kml_cache_->FetchKmlRelative(kGarbage, kGarbage)); ASSERT_FALSE(kml_cache_->FetchDataRelative(kGarbage, kGarbage, &data)); ASSERT_TRUE(data.empty()); } // Verify basic usage of the FetchKml() method on known valid data. TEST_F(KmlCacheTest, TestBasicFetchKml) { // Fetch point-sarnen.kml as it if is a relative NetworkLink from // some mythic.kml in the same directory on the same server. const string kHost("http://www.example.com/"); const string kDir("style/weather"); const string kBaseKml("mythic.kml"); const string kTargetHref("point-sarnen.kml"); const string kBaseUrl(kHost + kDir + "/" + kBaseKml); const string kTargetUrl(kHost + kDir + "/" + kTargetHref); KmlFilePtr kml_file = kml_cache_->FetchKmlRelative(kBaseUrl, kTargetHref); // Verify that this file fetches, parses, has the right url, has a Placemark // with the given id and is at the given lat,lon. ASSERT_TRUE(kml_file); ASSERT_EQ(kTargetUrl, kml_file->get_url()); kmldom::PlacemarkPtr placemark = AsPlacemark(kml_file->GetObjectById("SZXX0026")); ASSERT_TRUE(placemark); double lat, lon; ASSERT_TRUE(kmlengine::GetFeatureLatLon(placemark, &lat, &lon)); ASSERT_EQ(46.9, lat); ASSERT_EQ(8.23, lon); // The preceding should have caused exactly one fetch. //ASSERT_EQ(1, testdata_net_fetcher_.get_fetch_count()); // Verify that fetching it again works fine. kml_file = NULL; // Releases our reference to this KmlFile. placemark = NULL; // Releases our reference to this Placemark kml_file = kml_cache_->FetchKmlRelative(kBaseUrl, kTargetHref); ASSERT_TRUE(kml_file); placemark = AsPlacemark(kml_file->GetObjectById("SZXX0026")); ASSERT_TRUE(placemark); // The immediately preceding should not have caused a fetch. //ASSERT_EQ(1, testdata_net_fetcher_.get_fetch_count()); } // Verify basic usage of the FetchData() method. TEST_F(KmlCacheTest, TestBasicFetchData) { // Fetch the KML from the previous test, but just as raw data. const string kPath("/style/weather/point-sarnen.kml"); const string kUrl(string("http://host.com/" + kPath)); string got_content; ASSERT_TRUE(kml_cache_->FetchDataRelative(kUrl, kUrl, &got_content)); // Read this out of the file system to compare. string want_content; ASSERT_TRUE(kmlbase::File::ReadFileToString( kmlbase::File::JoinPaths(DATADIR, kPath), &want_content)); ASSERT_EQ(want_content, got_content); // Fetch again to verify all is well. got_content.clear(); ASSERT_TRUE(kml_cache_->FetchDataRelative(kUrl, kUrl, &got_content)); ASSERT_EQ(want_content, got_content); } // Verify that the URL of the KmlFile created for a fetch of a KMZ for // the default KML file is as expected. TEST_F(KmlCacheTest, TestBasicFetchKmz) { const string kKmzPath("kmz/radar-animation.kmz"); const string kKmzUrl(string("http://host.com/" + kKmzPath)); KmlFilePtr kml_file = kml_cache_->FetchKmlAbsolute(kKmzUrl); // The KML file in this KMZ archive is known to be doc.kml ASSERT_EQ(string(kKmzUrl + "/doc.kml"), kml_file->get_url()); // Verify that the URL set for the KmlFile for an explicit KML reference // into a KMZ is exactly the same as the fetch URL. const string kLevel03131Path("level03/0131.kml"); const string kLevel03131Url(kKmzUrl + "/" + kLevel03131Path); kml_file = kml_cache_->FetchKmlAbsolute(kLevel03131Url); ASSERT_EQ(kLevel03131Url, kml_file->get_url()); } static struct { const char* base_url; // The URL of a KML file. const char* target_href; // The content of an , in the KML. size_t bytes; // 0 means expected to not exist. bool in_kmz; // verify against TestDataNetFetcher counter } kTestCases[] = { { // This KMZ has the following 4 images within. "http://host.com/kmz/screenoverlay-continents.kmz/doc.kml", "pngs/africa.png", 1863, true }, { "http://host.com/kmz/screenoverlay-continents.kmz/doc.kml", "pngs/europe.png", 1849, true }, { "http://host.com/kmz/screenoverlay-continents.kmz/doc.kml", "pngs/north-america.png", 2167, true }, { "http://host.com/kmz/screenoverlay-continents.kmz/doc.kml", "pngs/south-america.png", 2250, true }, { "http://host.com/kmz/screenoverlay-continents.kmz/doc.kml", "pngs/no-such-file-anywhere.png", 0, false }, { // This KMZ has nothing but the KML. "http://host.com/kmz/rumsey/kml/lc01.kmz/" "khvol/temp/Rumsey/North_America/Lewis_and_Clark_1814/kml/01.kml", "010.kmz", 1552, // TODO 690 something is being to smart an finding the KML in 010.kmz false }, { "http://host.com/kmz/rumsey/kml/lc01.kmz/" "khvol/temp/Rumsey/North_America/Lewis_and_Clark_1814/kml/01.kml", "012.kmz", 1551, // TODO 692 size of KML insize 012.kmz false }, { "http://host.com/kmz/rumsey/kml/lc01.kmz/" "khvol/temp/Rumsey/North_America/Lewis_and_Clark_1814/kml/01.kml", "../imagery/01_4.png", 6742, false }, { "http://host.com/kmz/rumsey/kml/lc01.kmz/" "khvol/temp/Rumsey/North_America/Lewis_and_Clark_1814/kml/01.kml", "../imagery/01_8.png", 7364, false } }; TEST_F(KmlCacheTest, TestFetchDataRelativeTestCases) { size_t size = sizeof(kTestCases)/sizeof(kTestCases[0]); for (size_t i = 0; i < size; ++i) { string data; bool status = kml_cache_->FetchDataRelative(kTestCases[i].base_url, kTestCases[i].target_href, &data); if (kTestCases[i].bytes) { ASSERT_TRUE(status); ASSERT_EQ(kTestCases[i].bytes, data.size()); } else { ASSERT_FALSE(status); } } } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/kml_file_test.cc000066400000000000000000000432351263603257100213230ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the KmlFile class. #include "kml/engine/kml_file.h" #include #include "kml/base/file.h" #include "kml/base/net_cache.h" #include "kml/base/tempfile.h" #include "gtest/gtest.h" #include "kml/dom.h" #include "kml/engine/kml_cache.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif using kmldom::ElementPtr; using kmldom::FolderPtr; using kmldom::KmlFactory; using kmldom::KmlPtr; using kmldom::ObjectPtr; using kmldom::PlacemarkPtr; using kmldom::StyleMapPtr; using kmldom::StyleSelectorPtr; namespace kmlengine { class KmlFileTest : public testing::Test { protected: void VerifyIsPlacemarkWithName(const ElementPtr& root, const string& name); void KmlToKmz(const string& kml_data, string* kmz_data); KmlFilePtr kml_file_; }; // Verify the encoding appears properly in the xml header. TEST_F(KmlFileTest, TestEncoding) { kml_file_ = KmlFile::CreateFromParse("", NULL); ASSERT_TRUE(kml_file_); ASSERT_EQ(string("\n"), kml_file_->CreateXmlHeader()); const string kIso_8859_1("iso-8859-1"); kml_file_->set_encoding(kIso_8859_1); ASSERT_EQ(kIso_8859_1, kml_file_->get_encoding()); ASSERT_EQ(string("\n"), kml_file_->CreateXmlHeader()); } // Verify basic usage of the ParseFromString() method. TEST_F(KmlFileTest, TestBasicParseFromString) { kml_file_ = KmlFile::CreateFromParse("", NULL); ASSERT_TRUE(kml_file_); ElementPtr root = kml_file_->get_root(); // Verify old API exists and functions. ASSERT_EQ(root, kml_file_->root()); ASSERT_TRUE(root); ASSERT_EQ(kmldom::Type_kml, root->Type()); string errors; kml_file_ = KmlFile::CreateFromParse("bad stuff", &errors); ASSERT_FALSE(kml_file_); ASSERT_FALSE(errors.empty()); } TEST_F(KmlFileTest, TestRoot) { kml_file_ = KmlFile::CreateFromParse("", NULL); ElementPtr root = kml_file_->get_root(); ASSERT_TRUE(root); ASSERT_EQ(kmldom::Type_kml, root->Type()); // Verify that any complex element can be used as root. kml_file_ = KmlFile::CreateFromParse("", NULL); ASSERT_EQ(kmldom::Type_Placemark, kml_file_->get_root()->Type()); // Verify old API exists and functions. ASSERT_EQ(kmldom::Type_Placemark, kml_file_->root()->Type()); } TEST_F(KmlFileTest, TestBasicObjectIdParse) { kml_file_ = KmlFile::CreateFromParse( "" "" "", NULL); ASSERT_TRUE(kml_file_); ObjectPtr f = kml_file_->GetObjectById("folder"); ASSERT_EQ(kmldom::Type_Folder, f->Type()); ObjectPtr p = kml_file_->GetObjectById("placemark"); ASSERT_EQ(kmldom::Type_Placemark, p->Type()); } TEST_F(KmlFileTest, TestObjectIdDupePassing) { string errors; const string kDupeId("DUPE"); kml_file_ = KmlFile::CreateFromParse( "" "" "", &errors); // By default the duplicate ids do not cause the parse to fail. ASSERT_TRUE(kml_file_); // Verify an element of the duplicate id exists. ASSERT_TRUE(kml_file_->GetObjectById(kDupeId)); } // TODO: how/if to bring back strict mode for import from xml #if 0 TEST_F(KmlFileTest, TestObjectIdDupeFailing) { string errors; const string kDupeId("DUPE"); kml_file_->set_strict_parse(true); kmldom::ElementPtr root = kml_file_->ParseFromString( "" "" "", &errors); // Verify failure of the parse. ASSERT_FALSE(root); // Verify no element of the duplicate id exists. ASSERT_FALSE(kml_file_->GetObjectById(kDupeId)); } #endif // Verify NULL is returned for a non-existent shared style. TEST_F(KmlFileTest, TestNullGetSharedStyleById) { kml_file_ = KmlFile::CreateFromParse("", NULL); ASSERT_FALSE(kml_file_->GetSharedStyleById("no-such-id")); } // Verify a basic shared style is found and a local style is not found. TEST_F(KmlFileTest, TestBasicGetSharedStyleById) { // Use ParseFromString to insert shared styles into the shared style map. const string kStyleId("share-me"); const string kStyleMapId("me-too"); const string kFolderStyleId("not-me"); kml_file_ = KmlFile::CreateFromParse( "" " kmldom::IconStylePtr iconstyle = factory_->CreateIconStyle(); iconstyle->set_scale(kScale); kmldom::IconStyleIconPtr iconstyleicon = factory_->CreateIconStyleIcon(); iconstyleicon->set_href(kHref); iconstyle->set_icon(iconstyleicon); source_style_->set_iconstyle(iconstyle); // This is what we are merging onto: // iconstyle = factory_->CreateIconStyle(); iconstyle->set_scale(1.5); // Something that is not kScale. iconstyle->set_heading(kHeading); target_style_->set_iconstyle(iconstyle); // Since target_style_ _has_ an IconStyle, this _merges_ IconStyle from src. MergeElements(source_style_, target_style_); // Verify that the result is this: // ASSERT_TRUE(target_style_->has_iconstyle()); ASSERT_EQ(kScale, source_style_->get_iconstyle()->get_scale()); ASSERT_EQ(kScale, target_style_->get_iconstyle()->get_scale()); ASSERT_EQ(kHeading, target_style_->get_iconstyle()->get_heading()); ASSERT_TRUE(source_style_->get_iconstyle()->has_icon()); ASSERT_TRUE(target_style_->get_iconstyle()->has_icon()); ASSERT_TRUE(source_style_->get_iconstyle()->get_icon()->has_href()); ASSERT_TRUE(target_style_->get_iconstyle()->get_icon()->has_href()); ASSERT_EQ(kHref, source_style_->get_iconstyle()->get_icon()->get_href()); ASSERT_EQ(kHref, target_style_->get_iconstyle()->get_icon()->get_href()); } // This is a utility function to create each substyle and set the given // field to the given value. StylePtr MergeTest::SetSubStyles(StylePtr style, double icon_style_scale, const string& label_style_color, double line_style_width, bool poly_style_fill, const string& balloon_style_text, kmldom::ListItemTypeEnum list_style_listitemtype) { // kmldom::IconStylePtr iconstyle = factory_->CreateIconStyle(); iconstyle->set_scale(icon_style_scale); style->set_iconstyle(iconstyle); // kmldom::LabelStylePtr labelstyle = factory_->CreateLabelStyle(); labelstyle->set_color(label_style_color); style->set_labelstyle(labelstyle); // kmldom::LineStylePtr linestyle = factory_->CreateLineStyle(); linestyle->set_width(line_style_width); style->set_linestyle(linestyle); // kmldom::PolyStylePtr polystyle = factory_->CreatePolyStyle(); polystyle->set_fill(poly_style_fill); style->set_polystyle(polystyle); // kmldom::BalloonStylePtr balloonstyle = factory_->CreateBalloonStyle(); balloonstyle->set_text(balloon_style_text); style->set_balloonstyle(balloonstyle); // kmldom::ListStylePtr liststyle = factory_->CreateListStyle(); liststyle->set_listitemtype(list_style_listitemtype); style->set_liststyle(liststyle); return style; } // This is a utility function to verify the given SubStyle fields. void MergeTest::VerifySubStyles(StylePtr style, double icon_style_scale, const string& label_style_color, double line_style_width, bool poly_style_fill, const string& balloon_style_text, kmldom::ListItemTypeEnum list_style_listitemtype) { ASSERT_TRUE(style->has_iconstyle()); ASSERT_TRUE(style->get_iconstyle()->has_scale()); ASSERT_EQ(icon_style_scale, style->get_iconstyle()->get_scale()); ASSERT_TRUE(style->has_labelstyle()); ASSERT_TRUE(style->get_labelstyle()->has_color()); ASSERT_EQ(label_style_color, style->get_labelstyle()->get_color().to_string_abgr()); ASSERT_TRUE(style->has_linestyle()); ASSERT_TRUE(style->get_linestyle()->has_width()); ASSERT_EQ(line_style_width, style->get_linestyle()->get_width()); ASSERT_TRUE(style->has_polystyle()); ASSERT_TRUE(style->get_polystyle()->has_fill()); ASSERT_EQ(poly_style_fill, style->get_polystyle()->get_fill()); ASSERT_TRUE(style->has_balloonstyle()); ASSERT_TRUE(style->get_balloonstyle()->has_text()); ASSERT_EQ(balloon_style_text, style->get_balloonstyle()->get_text()); ASSERT_TRUE(style->has_liststyle()); ASSERT_TRUE(style->get_liststyle()->has_listitemtype()); ASSERT_EQ(static_cast(list_style_listitemtype), style->get_liststyle()->get_listitemtype()); } // This verifies that all SubStyles are merged from a source to target Style. // Note that most field types are represented in this test: double, string, // bool and enum. TEST_F(MergeTest, TestMergeFullStyle) { // Create a Style with the following SubStyle fields. const double kScale(2.2); const string kColor("ff112233"); const double kWidth(3.3); const bool kFill(false); const string kText("This is a bold $[name]"); const kmldom::ListItemTypeEnum kListItemType(kmldom::LISTITEMTYPE_CHECKHIDECHILDREN); SetSubStyles(source_style_, kScale, kColor, kWidth, kFill, kText, kListItemType); // For good measure verify everything was set. VerifySubStyles(source_style_, kScale, kColor, kWidth, kFill, kText, kListItemType); // Make an empty Style and merge in everything from source. MergeElements(source_style_, target_style_); // Verify everything was merged: VerifySubStyles(target_style_, kScale, kColor, kWidth, kFill, kText, kListItemType); // Set source sub style fields to different values. SetSubStyles(source_style_, 1.1, "00110011", 0.2, true, "xxx", kmldom::LISTITEMTYPE_RADIOFOLDER); // Verify target is unscathed. VerifySubStyles(target_style_, kScale, kColor, kWidth, kFill, kText, kListItemType); } // This is a utility method to create a Placemark with a Point. void MergeTest::SetPointPlacemark(PlacemarkPtr placemark, const string& name, double lat, double lon) { placemark->set_name(name); PointPtr point = factory_->CreatePoint(); CoordinatesPtr coordinates = factory_->CreateCoordinates(); coordinates->add_latlng(lat, lon); point->set_coordinates(coordinates); placemark->set_geometry(point); } // This is a utility method to verify the given fields in a Point Placemark. void MergeTest::VerifyPointPlacemark(PlacemarkPtr placemark, const string& name, double lat, double lon) { ASSERT_TRUE(placemark->has_name()); ASSERT_EQ(name, placemark->get_name()); ASSERT_TRUE(placemark->has_geometry()); PointPtr point = kmldom::AsPoint(placemark->get_geometry()); ASSERT_TRUE(point); ASSERT_TRUE(point->has_coordinates()); CoordinatesPtr coordinates = point->get_coordinates(); ASSERT_EQ(static_cast(1), coordinates->get_coordinates_array_size()); Vec3 vec3 = coordinates->get_coordinates_array_at(0); ASSERT_EQ(lat, vec3.get_latitude()); ASSERT_EQ(lon, vec3.get_longitude()); } // This verifies the merge of a Placemark Point element hierarchy. TEST_F(MergeTest, TestMergePointPlacemark) { const string kName("source"); const double kLat(1.1); const double kLon(-1.1); SetPointPlacemark(source_placemark_, kName, kLat, kLon); SetPointPlacemark(target_placemark_, "not source at all", -2.2, 2.2); // Merge the source onto the target. MergeElements(source_placemark_, target_placemark_); // Verify that the target has the expected values. VerifyPointPlacemark(target_placemark_, kName, kLat, kLon); } // This verifies that a group match causes a replacement in the target. // In this case a LineString replaces the Point because both are in // single-value substitution group: Placemark's Geometry. TEST_F(MergeTest, TestMergeSubstitutionGroup) { target_placemark_->set_geometry(point_); source_placemark_->set_geometry(linestring_); MergeElements(source_placemark_, target_placemark_); ASSERT_EQ(kmldom::Type_LineString, target_placemark_->get_geometry()->Type()); } // This verifies that the merge does not introduce any extraneous elements. TEST_F(MergeTest, TestMergeFieldsSerialize) { kmldom::ListStylePtr liststyle = factory_->CreateListStyle(); liststyle->set_listitemtype(kmldom::LISTITEMTYPE_CHECKHIDECHILDREN); source_style_->set_liststyle(liststyle); MergeElements(source_style_, target_style_); ASSERT_EQ(kmldom::SerializeRaw(target_style_), kmldom::SerializeRaw(source_style_)); } // An early version of MergeElements did not properly preserve the state of // previously set attributes. TEST_F(MergeTest, TestMergeAttributes) { const string kId("style-id"); const string kTargetId("style-target-id"); source_style_->set_targetid(kTargetId); target_style_->set_id(kId); MergeElements(source_style_, target_style_); ASSERT_TRUE(target_style_->has_id()); ASSERT_EQ(kId, target_style_->get_id()); ASSERT_TRUE(target_style_->has_targetid()); ASSERT_EQ(kTargetId, target_style_->get_targetid()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/object_id_parser_observer_test.cc000066400000000000000000000201431263603257100247370ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the ObjectIdParserObserver class. #include "kml/engine/object_id_parser_observer.h" #include "boost/scoped_ptr.hpp" #include "kml/dom/kml_funcs.h" // For kmldom::Parse() #include "kml/dom/kml_factory.h" #include "gtest/gtest.h" namespace kmlengine { class ObjectIdParserObserverTest : public testing::Test { protected: virtual void SetUp() { object_id_parser_observer_.reset( new ObjectIdParserObserver(&object_id_map_, false)); } ObjectIdMap object_id_map_; boost::scoped_ptr object_id_parser_observer_; }; // Verify the proper operation of NewElement() for an Object with an id. TEST_F(ObjectIdParserObserverTest, TestBasicNewElementUsage) { // Create an Object with an id. const string kPlacemarkId("pm0"); kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_id(kPlacemarkId); // Pass the Object to ObjectIdParserObserver::NewElement(). bool status = object_id_parser_observer_->NewElement(placemark); ASSERT_EQ(status, true); // Verify that there is only one entry in the map. ASSERT_EQ(static_cast(1), object_id_map_.size()); // Verify that the id maps to the Object. kmldom::ObjectPtr object = object_id_map_[kPlacemarkId]; ASSERT_EQ(kPlacemarkId, object->get_id()); ASSERT_EQ(kmldom::Type_Placemark, object->Type()); } // Verify that NewElement() properly permits a duplicate Object id in its // default state. TEST_F(ObjectIdParserObserverTest, TestNewElementPermitsDupeId) { // By default strict parsing is not enabled. // Create 2 Objects with the same id. const string kId("some-id"); kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_id(kId); kmldom::PointPtr point = factory->CreatePoint(); point->set_id(kId); // Verify that the first use of NewElement() accepts the Object. ASSERT_TRUE(object_id_parser_observer_->NewElement(placemark)); // Verify that the 2nd use of NewElement() also accepts the Object. ASSERT_TRUE(object_id_parser_observer_->NewElement(point)); // Verify that the map has just the second object. // TODO: multimap would allow proper storage and access of duplicate objects. ASSERT_EQ(static_cast(1), object_id_map_.size()); kmldom::ObjectPtr object = object_id_map_[kId]; ASSERT_EQ(kId, object->get_id()); ASSERT_EQ(kmldom::Type_Point, object->Type()); } // Verify that NewElement() properly fails on a duplicate Object if // strict parsing has been enabled. TEST_F(ObjectIdParserObserverTest, TestNewElementFailsDupeId) { // Enable strict parsing. object_id_parser_observer_.reset( new ObjectIdParserObserver(&object_id_map_, true)); // Create 2 Objects with the same id. const string kId("some-id"); kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_id(kId); kmldom::PointPtr point = factory->CreatePoint(); point->set_id(kId); // Verify that the first use of NewElement() accepts the Object. ASSERT_TRUE(object_id_parser_observer_->NewElement(placemark)); // Verify that the 2nd use of NewElement() rejects the Object. ASSERT_FALSE(object_id_parser_observer_->NewElement(point)); // Verify that the map has just the first object. ASSERT_EQ(static_cast(1), object_id_map_.size()); kmldom::ObjectPtr object = object_id_map_[kId]; ASSERT_EQ(kId, object->get_id()); ASSERT_EQ(kmldom::Type_Placemark, object->Type()); } // Verify that ObjectIdParserObserver does nothing with AddChild(). TEST_F(ObjectIdParserObserverTest, TestAddChild) { kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::PlacemarkPtr placemark = factory->CreatePlacemark(); kmldom::PlacemarkPtr point = factory->CreatePlacemark(); // The default AddChild() simply always returns true. ASSERT_TRUE(object_id_parser_observer_->AddChild(placemark, point)); ASSERT_TRUE(object_id_parser_observer_->AddChild(placemark, point)); ASSERT_TRUE(object_id_parser_observer_->AddChild(point, placemark)); ASSERT_TRUE(object_id_parser_observer_->AddChild(NULL, NULL)); } // Verify that the destructor does not affect the map. TEST_F(ObjectIdParserObserverTest, TestDestructor) { // Use NewElement() to populate the map. const string kPlacemarkId("pm0"); const string kPointId("pt0"); kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_id(kPlacemarkId); kmldom::PointPtr point = factory->CreatePoint(); point->set_id(kPointId); ASSERT_TRUE(object_id_parser_observer_->NewElement(placemark)); ASSERT_TRUE(object_id_parser_observer_->NewElement(point)); // Force delete of the underlying object_id_parser_observer object_id_parser_observer_.reset(); // Verify that the object map has exactly the 2 expected mappings. ASSERT_EQ(static_cast(2), object_id_map_.size()); ASSERT_EQ(kmldom::Type_Placemark, object_id_map_[kPlacemarkId]->Type()); ASSERT_EQ(kmldom::Type_Point, object_id_map_[kPointId]->Type()); } // Verify that NewElement ignores a non-Object with id attribute. TEST_F(ObjectIdParserObserverTest, TestNonObjectWithId) { // The Parse() function in kmldom preserves id of a non object as an // unknown attribute. const string kId("kml-is-not-an-object"); kmldom::ElementPtr root = kmldom::Parse("", NULL); // Verify that the parse succeeded and created a non-Object. ASSERT_EQ(kmldom::Type_kml, root->Type()); ASSERT_FALSE(root->IsA(kmldom::Type_Object)); // TODO: use the unknown attribute API to verify the id. ASSERT_TRUE(object_id_parser_observer_->NewElement(root)); // Verify that the object map has no mappings. ASSERT_TRUE(object_id_map_.empty()); // Verify that a map with an Object with this id is not effected by // a call to NewElement() with a non-Object which happens to have an // id attribute with this same value. kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); kmldom::PlacemarkPtr placemark = factory->CreatePlacemark(); placemark->set_id(kId); ASSERT_TRUE(object_id_parser_observer_->NewElement(placemark)); // Verify that a non-Object Element with an id does not return false. ASSERT_TRUE(object_id_parser_observer_->NewElement(root)); // Verify that only a proper Object is in the map. ASSERT_EQ(static_cast(1), object_id_map_.size()); ASSERT_EQ(kmldom::Type_Placemark, object_id_map_[kId]->Type()); ASSERT_EQ(kId, AsObject(object_id_map_[kId])->get_id()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/old_schema_parser_observer_test.cc000066400000000000000000000105531263603257100251170ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the OldSchemaParserObserver class. // TODO: The OldSchemaParserObserver class is still under development. #include "kml/engine/old_schema_parser_observer.h" #include "boost/scoped_ptr.hpp" #include "kml/dom/kml_factory.h" #include "gtest/gtest.h" namespace kmlengine { class OldSchemaParserObserverTest : public testing::Test { protected: virtual void SetUp() { // Make some elements used in most tests. kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); document_ = factory->CreateDocument(); kSchema0Name_ = "schema0"; schema0_ = factory->CreateSchema(); schema0_->set_name(kSchema0Name_); kSchema1Name_ = "schema1"; schema1_ = factory->CreateSchema(); schema1_->set_name(kSchema1Name_); schema_no_name_ = factory->CreateSchema(); schema_parser_observer_.reset( new OldSchemaParserObserver(schema_name_map_)); } kmldom::DocumentPtr document_; string kSchema0Name_; kmldom::SchemaPtr schema0_; string kSchema1Name_; kmldom::SchemaPtr schema1_; kmldom::SchemaPtr schema_no_name_; SchemaNameMap schema_name_map_; boost::scoped_ptr schema_parser_observer_; }; #if 0 // Verify that AddChild() usage with as child of . TEST_F(OldSchemaParserObserverTest, TestAddChildSchema) { // Verify that AddChild() does not detect a dupe. ASSERT_TRUE(schema_parser_observer_->AddChild(document_, schema0_)); // Verify that there is only one entry in the map. ASSERT_EQ(static_cast(1), schema_name_map_.size()); // Verify that the name maps to the Schema. kmldom::SchemaPtr object = schema_name_map_[kSchema0Name_]; ASSERT_EQ(kSchema0Name_, object->get_name()); ASSERT_EQ(kmldom::Type_Schema, object->Type()); // Verify that AddChild() does not detect a dupe. ASSERT_TRUE(schema_parser_observer_->AddChild(document_, schema1_)); // Verify that there are now 2 entries in the map. ASSERT_EQ(static_cast(2), schema_name_map_.size()); // Verify that the id maps to the SchemaMap object = schema_name_map_[kSchema0Name_]; ASSERT_EQ(kSchema0Name_, object->get_name()); ASSERT_EQ(kmldom::Type_Schema, object->Type()); } // Verify that the destructor does not effect the map. TEST_F(OldSchemaParserObserverTest, TestDestructor) { // Use AddChild() to put some entries in the map. ASSERT_TRUE(schema_parser_observer_->AddChild(document_, schema0_)); ASSERT_TRUE(schema_parser_observer_->AddChild(document_, schema1_)); // Verify that deleting the observer does not affect the map. schema_parser_observer_.reset(); // Verify that the object map has exactly the 2 expected mappings. ASSERT_EQ(static_cast(2), schema_name_map_.size()); ASSERT_EQ(kSchema0Name_, schema_name_map_[kSchema0Name_]->get_name()); ASSERT_EQ(kSchema1Name_, schema_name_map_[kSchema1Name_]->get_name()); } #endif } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/parse_old_schema_test.cc000066400000000000000000000062771263603257100230360ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice,// this list of conditions and the following disclaimer in the documentation// and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the ParseOldSchema function. #include "kml/engine/parse_old_schema.h" #include "kml/dom/kml_factory.h" #include "kml/engine/engine_types.h" #include "gtest/gtest.h" using kmldom::PlacemarkPtr; using kmldom::KmlFactory; using kmldom::SchemaPtr; namespace kmlengine { class ParseOldSchemaTest : public testing::Test { protected: void InitSchemaNameMap(); SchemaNameMap schema_name_map_; }; void ParseOldSchemaTest::InitSchemaNameMap() { const string kSchemaName("S_park_boundaries_S"); SchemaPtr schema = KmlFactory::GetFactory()->CreateSchema(); schema->set_name(kSchemaName); schema_name_map_[kSchemaName] = schema; } // Test ConvertOldSchema(). TEST_F(ParseOldSchemaTest, TestConvertOldSchema) { InitSchemaNameMap(); const string kXml( "" "Yosemite" "" ""); string output_xml; ASSERT_TRUE(ConvertOldSchema(kXml, schema_name_map_, &output_xml)); const string kExpected( "" "Yosemite" "" ""); ASSERT_EQ(kExpected, output_xml); } // Test ParseOldSchema(). TEST_F(ParseOldSchemaTest, TestParseOldSchema) { InitSchemaNameMap(); const string kName("Arches NP"); const string kXml( "" "" + kName + "" "" ""); PlacemarkPtr placemark = ParseOldSchema(kXml, schema_name_map_, NULL); ASSERT_TRUE(placemark); ASSERT_TRUE(placemark->has_name()); ASSERT_EQ(kName, placemark->get_name()); ASSERT_TRUE(placemark->has_geometry()); ASSERT_EQ(kmldom::Type_Polygon, placemark->get_geometry()->Type()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/schema_parser_observer_test.cc000066400000000000000000000103711263603257100242570ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the SchemaParserObserver class. #include "kml/engine/schema_parser_observer.h" #include "boost/scoped_ptr.hpp" #include "kml/dom/kml_factory.h" #include "gtest/gtest.h" namespace kmlengine { class SchemaParserObserverTest : public testing::Test { protected: virtual void SetUp() { // Make some elements used in most tests. kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); document_ = factory->CreateDocument(); kSchema0Name_ = "schema0"; schema0_ = factory->CreateSchema(); schema0_->set_name(kSchema0Name_); kSchema1Name_ = "schema1"; schema1_ = factory->CreateSchema(); schema1_->set_name(kSchema1Name_); schema_no_name_ = factory->CreateSchema(); schema_parser_observer_.reset(new SchemaParserObserver(&schema_name_map_)); } kmldom::DocumentPtr document_; string kSchema0Name_; kmldom::SchemaPtr schema0_; string kSchema1Name_; kmldom::SchemaPtr schema1_; kmldom::SchemaPtr schema_no_name_; SchemaNameMap schema_name_map_; boost::scoped_ptr schema_parser_observer_; }; // Verify that AddChild() usage with as child of . TEST_F(SchemaParserObserverTest, TestAddChildSchema) { // Verify that AddChild() does not detect a dupe. ASSERT_TRUE(schema_parser_observer_->AddChild(document_, schema0_)); // Verify that there is only one entry in the map. ASSERT_EQ(static_cast(1), schema_name_map_.size()); // Verify that the name maps to the Schema. kmldom::SchemaPtr object = schema_name_map_[kSchema0Name_]; ASSERT_EQ(kSchema0Name_, object->get_name()); ASSERT_EQ(kmldom::Type_Schema, object->Type()); // Verify that AddChild() does not detect a dupe. ASSERT_TRUE(schema_parser_observer_->AddChild(document_, schema1_)); // Verify that there are now 2 entries in the map. ASSERT_EQ(static_cast(2), schema_name_map_.size()); // Verify that the id maps to the SchemaMap object = schema_name_map_[kSchema0Name_]; ASSERT_EQ(kSchema0Name_, object->get_name()); ASSERT_EQ(kmldom::Type_Schema, object->Type()); } // Verify that the destructor does not effect the map. TEST_F(SchemaParserObserverTest, TestDestructor) { // Use AddChild() to put some entries in the map. ASSERT_TRUE(schema_parser_observer_->AddChild(document_, schema0_)); ASSERT_TRUE(schema_parser_observer_->AddChild(document_, schema1_)); // Verify that deleting the observer does not affect the map. schema_parser_observer_.reset(); // Verify that the object map has exactly the 2 expected mappings. ASSERT_EQ(static_cast(2), schema_name_map_.size()); ASSERT_EQ(kSchema0Name_, schema_name_map_[kSchema0Name_]->get_name()); ASSERT_EQ(kSchema1Name_, schema_name_map_[kSchema1Name_]->get_name()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/shared_style_parser_observer_test.cc000066400000000000000000000155221263603257100255100ustar00rootroot00000000000000// Copyright 2008, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the SharedStyleParserObserver class. #include "kml/engine/shared_style_parser_observer.h" #include "boost/scoped_ptr.hpp" #include "kml/dom/kml_factory.h" #include "gtest/gtest.h" namespace kmlengine { class SharedStyleParserObserverTest : public testing::Test { protected: virtual void SetUp() { // Make some elements used in most tests. kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory(); document_ = factory->CreateDocument(); folder_ = factory->CreateFolder(); kStyle0Id_ = "style0"; style0_ = factory->CreateStyle(); style0_->set_id(kStyle0Id_); kStyle1Id_ = "style1"; style1_ = factory->CreateStyle(); style1_->set_id(kStyle1Id_); kStyleMap0Id_ = "stylemap0"; stylemap0_ = factory->CreateStyleMap(); stylemap0_->set_id(kStyleMap0Id_); style_no_id_ = factory->CreateStyle(); // Create a non-strict SharedStyleParserObserver. shared_style_parser_observer_.reset( new SharedStyleParserObserver(&shared_style_map_, false)); } kmldom::DocumentPtr document_; kmldom::FolderPtr folder_; string kStyle0Id_; kmldom::StylePtr style0_; string kStyle1Id_; kmldom::StylePtr style1_; kmldom::StylePtr style_no_id_; string kStyleMap0Id_; kmldom::StyleMapPtr stylemap0_; SharedStyleMap shared_style_map_; boost::scoped_ptr shared_style_parser_observer_; }; // Verify that AddChild() accepts shared StyleSelectors. TEST_F(SharedStyleParserObserverTest, TestAddChildSharedStyle) { // Verify that AddChild() does not detect a dupe. ASSERT_TRUE(shared_style_parser_observer_->AddChild(document_, style0_)); // Verify that there is only one entry in the map. ASSERT_EQ(static_cast(1), shared_style_map_.size()); // Verify that the id maps to the Style. kmldom::StyleSelectorPtr object = shared_style_map_[kStyle0Id_]; ASSERT_EQ(kStyle0Id_, object->get_id()); ASSERT_EQ(kmldom::Type_Style, object->Type()); // Verify that AddChild() does not detect a dupe. ASSERT_TRUE(shared_style_parser_observer_->AddChild(document_, stylemap0_)); // Verify that there are now 2 entries in the map. ASSERT_EQ(static_cast(2), shared_style_map_.size()); // Verify that the id maps to the StyleMap object = shared_style_map_[kStyleMap0Id_]; ASSERT_EQ(kStyleMap0Id_, object->get_id()); ASSERT_EQ(kmldom::Type_StyleMap, object->Type()); } // Verify that AddChild() does _not_ accept inline StyleSelectors. TEST_F(SharedStyleParserObserverTest, TestAddChildInlineStyle) { // Verify that AddChild() does not detect a dupe. ASSERT_TRUE(shared_style_parser_observer_->AddChild(folder_, style0_)); // Verify that AddChild() does not detect a dupe even when passed the same // parent-child again. ASSERT_TRUE(shared_style_parser_observer_->AddChild(folder_, style0_)); ASSERT_TRUE(shared_style_parser_observer_->AddChild(folder_, stylemap0_)); // Verify that none of the above added anything to the map because although // these were both StyleSelectors with ids neither was a child of Document. ASSERT_TRUE(shared_style_map_.empty()); } // Verify that NewElement() exists and alwyas returns true. TEST_F(SharedStyleParserObserverTest, TestNewElement) { // Verify that NewElement() accepts StyleSelectors. ASSERT_TRUE(shared_style_parser_observer_->NewElement(style0_)); // Verify that a 2nd call succeeds given that NewElement is a nop ASSERT_TRUE(shared_style_parser_observer_->NewElement(style0_)); ASSERT_TRUE(shared_style_parser_observer_->NewElement(style1_)); ASSERT_TRUE(shared_style_parser_observer_->NewElement(stylemap0_)); // Style with no id accepted fine: ASSERT_TRUE(shared_style_parser_observer_->NewElement(style_no_id_)); // Document, Folder both fine... ASSERT_TRUE(shared_style_parser_observer_->NewElement(folder_)); ASSERT_TRUE(shared_style_parser_observer_->NewElement(document_)); } // Verify that AddChild() properly detects a duplicate Object id when // strict_parse is true. TEST_F(SharedStyleParserObserverTest, TestAddChildDetectsDupeId) { boost::scoped_ptr shared_style_parser_observer( new SharedStyleParserObserver(&shared_style_map_, true)); // Pass a parent-child that will be added to the map. ASSERT_TRUE(shared_style_parser_observer->AddChild(document_, style0_)); // Verify that AddChild() detected the dupe. ASSERT_FALSE(shared_style_parser_observer->AddChild(document_, style0_)); // Verify that the map was not affected. ASSERT_EQ(static_cast(1), shared_style_map_.size()); kmldom::ObjectPtr object = shared_style_map_[kStyle0Id_]; ASSERT_EQ(kStyle0Id_, object->get_id()); ASSERT_EQ(kmldom::Type_Style, object->Type()); } // Verify that the destructor does not effect the map. TEST_F(SharedStyleParserObserverTest, TestDestructor) { // Use AddChild() to put some entries in the map. ASSERT_TRUE(shared_style_parser_observer_->AddChild(document_, style0_)); ASSERT_TRUE(shared_style_parser_observer_->AddChild(document_, style1_)); // Verify that deleting the observer does not affect the map. shared_style_parser_observer_.reset(); // Verify that the object map has exactly the 2 expected mappings. ASSERT_EQ(static_cast(2), shared_style_map_.size()); ASSERT_EQ(kStyle0Id_, shared_style_map_[kStyle0Id_]->get_id()); ASSERT_EQ(kStyle1Id_, shared_style_map_[kStyle1Id_]->get_id()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/style_inliner_test.cc000066400000000000000000000202571263603257100224200ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the StyleInliner class. #include "kml/engine/style_inliner.h" #include "kml/engine/style_inliner_internal.h" #include "gtest/gtest.h" #include "kml/base/file.h" // The following define is a convenience for testing inside Google. #ifdef GOOGLE_INTERNAL #include "kml/base/google_internal_test.h" #endif #ifndef DATADIR #error *** DATADIR must be defined! *** #endif using kmlbase::File; using kmldom::DocumentPtr; using kmldom::ElementPtr; using kmldom::FieldPtr; using kmldom::KmlFactory; using kmldom::PlacemarkPtr; using kmldom::StylePtr; using kmldom::Type_styleUrl; using kmldom::UpdatePtr; namespace kmlengine { class StyleInlinerTest : public testing::Test { protected: virtual void SetUp() { kml_factory_ = KmlFactory::GetFactory(); style_inliner_.reset(new StyleInliner); } KmlFactory* kml_factory_; boost::scoped_ptr style_inliner_; }; TEST_F(StyleInlinerTest, CallStyleInlinerMethodsInTypicalUsage) { // Call the StyleInliner methods involved in parsing this: // // ASSERT_FALSE(style_inliner_->EndElement(document, style)); // 4) PlacemarkPtr placemark = kml_factory_->CreatePlacemark(); ASSERT_TRUE(style_inliner_->NewElement(placemark)); // 5) #_0 FieldPtr styleurl = kml_factory_->CreateFieldById(Type_styleUrl); styleurl->set_char_data(string("#") + kStyleId); ASSERT_TRUE(style_inliner_->NewElement(styleurl)); ASSERT_FALSE(style_inliner_->EndElement(placemark, styleurl)); // StyleInliner::EndElement() gives the placemark a style selector // representing that which the styleUrl pointed to. ASSERT_TRUE(placemark->has_styleselector()); // The local style should have no ids. ASSERT_FALSE(placemark->get_styleselector()->has_id()); // 6) ASSERT_TRUE(style_inliner_->EndElement(document, placemark)); document->add_feature(placemark); // Verify the shared style was captured. const SharedStyleMap& shared_styles = style_inliner_->get_shared_styles(); ASSERT_EQ(static_cast(1), shared_styles.size()); ASSERT_EQ(kStyleId, shared_styles.find(kStyleId)->second->get_id()); // Serialize the document and verify a proper overall result. ASSERT_EQ(kExpectedKml, SerializePretty(document)); } TEST_F(StyleInlinerTest, VerifyRemoteStyleUrlNotInlined) { PlacemarkPtr placemark = kml_factory_->CreatePlacemark(); FieldPtr styleurl = kml_factory_->CreateFieldById(Type_styleUrl); styleurl->set_char_data("http://example.com/style.kml#cool-style"); // true == "proceed to add this styleurl to its feature" ASSERT_TRUE(style_inliner_->EndElement(placemark, styleurl)); // true == "proceed to add this styleurl to its feature" styleurl->set_char_data("#non-existent-local-reference"); ASSERT_TRUE(style_inliner_->EndElement(placemark, styleurl)); } TEST_F(StyleInlinerTest, VerifyNoInliningWithinUpdate) { // UpdatePtr update = kml_factory_->CreateUpdate(); ASSERT_TRUE(style_inliner_->NewElement(update)); ASSERT_TRUE(style_inliner_->in_update()); // Since this is somewhere inside an the " "" "" "" "normal" "#style0" "" "" "highlight" "#style1" "" "" "#stylemap0" "" "" "" ""); kml_file_ = KmlFile::CreateFromString(kKml); ASSERT_TRUE(kml_file_); const SharedStyleMap& shared_styles = kml_file_->get_shared_style_map(); ASSERT_EQ(static_cast(3), shared_styles.size()); StyleSelectorPtr styleselector = StyleResolver::CreateResolvedStyleSelector("#stylemap0", shared_styles); ASSERT_TRUE(styleselector); StyleMapPtr stylemap = AsStyleMap(styleselector); ASSERT_TRUE(stylemap); ASSERT_EQ(static_cast(2), stylemap->get_pair_array_size()); PairPtr pair = stylemap->get_pair_array_at(0); ASSERT_TRUE(pair->has_key()); ASSERT_EQ(kmldom::STYLESTATE_NORMAL, pair->get_key()); ASSERT_FALSE(pair->has_styleurl()); ASSERT_TRUE(pair->has_styleselector()); StylePtr style = AsStyle(pair->get_styleselector()); ASSERT_TRUE(style); ASSERT_TRUE(style->has_iconstyle()); ASSERT_FALSE(style->has_labelstyle()); pair = stylemap->get_pair_array_at(1); ASSERT_TRUE(pair->has_key()); ASSERT_EQ(kmldom::STYLESTATE_HIGHLIGHT, pair->get_key()); ASSERT_FALSE(pair->has_styleurl()); ASSERT_TRUE(pair->has_styleselector()); style = AsStyle(pair->get_styleselector()); ASSERT_TRUE(style); ASSERT_FALSE(style->has_iconstyle()); ASSERT_TRUE(style->has_labelstyle()); } } // end namespace kmlengine libkml-1.3.0/tests/kml/engine/style_splitter_test.cc000066400000000000000000000336261263603257100226320ustar00rootroot00000000000000// Copyright 2009, Google Inc. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // 3. Neither the name of Google Inc. nor the names of its contributors may be // used to endorse or promote products derived from this software without // specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO // EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // This file contains the unit tests for the StyleSplitter class. #include "kml/engine/style_splitter.h" #include "kml/engine/style_splitter_internal.h" #include "boost/scoped_ptr.hpp" #include "gtest/gtest.h" #include "kml/base/net_cache_test_util.h" #include "kml/base/string_util.h" #include "kml/dom.h" #include "kml/engine/kml_file.h" using kmlbase::ToString; using kmldom::AsDocument; using kmldom::DocumentPtr; using kmldom::ElementPtr; using kmldom::FeaturePtr; using kmldom::FolderPtr; using kmldom::KmlFactory; using kmldom::Parser; using kmldom::PlacemarkPtr; using kmldom::LineStylePtr; using kmldom::StylePtr; using kmldom::StyleMapPtr; using kmldom::StyleSelectorPtr; namespace kmlengine { class StyleSplitterTest : public testing::Test { protected: virtual void SetUp() { kml_factory_ = KmlFactory::GetFactory(); style_splitter_.reset(new StyleSplitter(&shared_style_map_)); style_splitting_parser_.reset(new Parser); style_splitting_parser_->AddObserver(style_splitter_.get()); } KmlFactory* kml_factory_; SharedStyleMap shared_style_map_; boost::scoped_ptr style_splitter_; boost::scoped_ptr style_splitting_parser_; }; // Call StyleSplitter methods directly in a simple typical case. TEST_F(StyleSplitterTest, CallStyleSplitterMethodsInTypicalUsage) { // Call the StyleSplitter methods involved in parsing this: // // // " the parser calls EndElement() to ask if style should be // made a child of placemark. Verify the answer is false. ASSERT_FALSE(style_splitter_->EndElement(placemark, style)); // This is exactly the situation StyleSplitter handles. Verify that the // Document now has a shared style and that the map has a pointer to it // as well. const string kId0("_0"); ASSERT_EQ(static_cast(1), shared_style_map_.size()); ASSERT_TRUE(shared_style_map_[kId0]); ASSERT_EQ(kId0, shared_style_map_[kId0]->get_id()); ASSERT_EQ(static_cast(1), document->get_styleselector_array_size()); ASSERT_EQ(kId0, document->get_styleselector_array_at(0)->get_id()); // Verify that the placemark instead got a styleUrl ASSERT_TRUE(placemark->has_styleurl()); ASSERT_EQ(string("#") + kId0, placemark->get_styleurl()); // 5) On "" the parser calls EndElement() to ask if placemark // should be made a child of document. Verify the answer is true. ASSERT_TRUE(style_splitter_->EndElement(document, placemark)); // Play like the parser and add the placemark to the document: document->add_feature(placemark); // 6) StyleSplitter is not called by the parser on given that // this is the root element and has no parent. But, the parser does add // Serialize the document and verify a proper overall result. ASSERT_EQ(kExpectedKml, SerializePretty(document)); } TEST_F(StyleSplitterTest, CallStyleSplitterMethodsInComplexTypicalUsage) { // Call StyleSplitter methods directly in a more complex typical case. // Here the already has a shared Style and we verify that this // is not disturbed. And, there is an additional Placemark with no style. // Call the StyleSplitter methods involved in parsing this: // // // // no style // // // \n" " \n" "\n"); string errors; ElementPtr root = style_splitting_parser_->Parse(kNoStyleFolder, &errors); // Verify that this still parses just fine. FolderPtr folder = AsFolder(root); ASSERT_TRUE(folder); ASSERT_TRUE(folder->has_name()); ASSERT_FALSE(folder->has_description()); ASSERT_EQ(static_cast(1), folder->get_feature_array_size()); PlacemarkPtr placemark = AsPlacemark(folder->get_feature_array_at(0)); ASSERT_TRUE(placemark); // No to split this " " " " " ""); ElementPtr root = style_splitting_parser_->Parse(kInlineStyle, &errors); DocumentPtr document = AsDocument(root); ASSERT_TRUE(document); PlacemarkPtr placemark = AsPlacemark(document->get_feature_array_at(0)); ASSERT_TRUE(placemark); ASSERT_TRUE(placemark->has_name()); ASSERT_FALSE(placemark->has_description()); ASSERT_TRUE(placemark->has_styleurl()); ASSERT_EQ(string("#_0"), placemark->get_styleurl()); ASSERT_FALSE(placemark->has_styleselector()); ASSERT_EQ(static_cast(1), shared_style_map_.size()); ASSERT_EQ(static_cast(1), document->get_styleselector_array_size()); StylePtr style = AsStyle(document->get_styleselector_array_at(0)); ASSERT_TRUE(style); ASSERT_TRUE(style->has_id()); ASSERT_EQ(string("_0"), style->get_id()); ASSERT_TRUE(style->has_linestyle()); ASSERT_TRUE(style->get_linestyle()->has_color()); ASSERT_FALSE(style->get_linestyle()->has_width()); const string kExpectedKml( "\n" " \n" " \n" " split me\n" " #_0\n" " \n" " \n" " \n" " \n" "\n"); ASSERT_EQ(kExpectedKml, SerializePretty(root)); } TEST_F(StyleSplitterTest, TestIdCollision) { const string kId("_0"); StylePtr style = kml_factory_->CreateStyle(); style->set_id(kId); shared_style_map_[kId] = style; const string kKml( "\n" " \n" "