thumbnailer-1.1+14.04.20140401.1/0000755000015301777760000000000012316641155016421 5ustar pbusernogroup00000000000000thumbnailer-1.1+14.04.20140401.1/tools/0000755000015301777760000000000012316641155017561 5ustar pbusernogroup00000000000000thumbnailer-1.1+14.04.20140401.1/tools/scaler.cpp0000644000015301777760000000215712316640575021550 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013 Canonical Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by: Jussi Pakkanen */ #include #include #include #include int main(int argc, char **argv) { ImageScaler sc; try { std::string ifilename(argv[1]); std::string ofilename(argv[2]); sc.scale(ifilename, ofilename, TN_SIZE_LARGE, ifilename); } catch(std::runtime_error &e) { printf("Failed: %s\n", e.what()); return 1; } return 0; } thumbnailer-1.1+14.04.20140401.1/tools/lastfmtest.cpp0000644000015301777760000000173712316640575022470 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013 Canonical Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by: Jussi Pakkanen */ #include #include #include #include using namespace std; int main(int /*argc*/, char **/*argv*/) { LastFMDownloader dl; dl.download("The Prodigy", "Music for the Jilted Generation", "image.jpg"); return 0; } thumbnailer-1.1+14.04.20140401.1/tools/imdump.cpp0000644000015301777760000000205712316640575021571 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013 Canonical Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by: Jussi Pakkanen */ #include #include #include #include int main(int argc, char **argv) { gst_init(&argc, &argv); AudioImageExtractor ae; try { ae.extract(argv[1], argv[2]); } catch(std::runtime_error &e) { printf("Failed: %s\n", e.what()); return 1; } return 0; } thumbnailer-1.1+14.04.20140401.1/tools/CMakeLists.txt0000644000015301777760000000072012316640575022325 0ustar pbusernogroup00000000000000#add_executable(imdump imdump.cpp) #target_link_libraries(imdump thumbnailer ${GST_DEPS_LDFLAGS}) add_executable(scaler scaler.cpp ../src/imagescaler.cpp) target_link_libraries(scaler ${IMG_DEPS_LDFLAGS}) add_executable(cachetool cachetool.cpp) target_link_libraries(cachetool thumbnailer) add_executable(lastfmtest lastfmtest.cpp ../src/lastfmdownloader.cpp ../src/soupdownloader.cpp) target_link_libraries(lastfmtest ${SOUP_DEPS_LDFLAGS} ${XML_DEPS_LDFLAGS}) thumbnailer-1.1+14.04.20140401.1/tools/cachetool.cpp0000644000015301777760000000227612316640575022242 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013 Canonical Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by: Jussi Pakkanen */ #include #include #include #include int main(int argc, char **argv) { Thumbnailer t; if(argc != 2) { printf("%s \n", argv[0]); return 1; } std::string ifilename(argv[1]); std::string ofilename = t.get_thumbnail(ifilename, TN_SIZE_LARGE); if(ofilename.empty()) printf("Thumbnail could not be generated.\n"); else printf("Thumbnail file is %s.\n", ofilename.c_str()); return 0; } thumbnailer-1.1+14.04.20140401.1/cmake/0000755000015301777760000000000012316641155017501 5ustar pbusernogroup00000000000000thumbnailer-1.1+14.04.20140401.1/cmake/coverage.cmake0000644000015301777760000000323012316640575022301 0ustar pbusernogroup00000000000000if (CMAKE_BUILD_TYPE MATCHES coverage) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --coverage") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --coverage") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} --coverage") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --coverage") find_program(GCOVR_EXECUTABLE gcovr HINTS ${GCOVR_ROOT} "${GCOVR_ROOT}/bin") if (NOT GCOVR_EXECUTABLE) message(STATUS "Gcovr binary was not found, can not generate XML coverage info.") else () message(STATUS "Gcovr found, can generate XML coverage info.") add_custom_target (coverage-xml WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND "${GCOVR_EXECUTABLE}" --exclude="test.*" -x -r "${CMAKE_SOURCE_DIR}" --object-directory=${CMAKE_BINARY_DIR} -o coverage.xml) endif() find_program(LCOV_EXECUTABLE lcov HINTS ${LCOV_ROOT} "${GCOVR_ROOT}/bin") find_program(GENHTML_EXECUTABLE genhtml HINTS ${GENHTML_ROOT}) if (NOT LCOV_EXECUTABLE) message(STATUS "Lcov binary was not found, can not generate HTML coverage info.") else () if(NOT GENHTML_EXECUTABLE) message(STATUS "Genthml binary not found, can not generate HTML coverage info.") else() message(STATUS "Lcov and genhtml found, can generate HTML coverage info.") add_custom_target (coverage-html WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND "${LCOV_EXECUTABLE}" --directory ${CMAKE_BINARY_DIR} --capture --output-file coverage.info --no-checksum COMMAND "${GENHTML_EXECUTABLE}" --prefix ${CMAKE_BINARY_DIR} --output-directory coveragereport --title "Code Coverage" --legend --show-details coverage.info ) endif() endif() endif() thumbnailer-1.1+14.04.20140401.1/tests/0000755000015301777760000000000012316641155017563 5ustar pbusernogroup00000000000000thumbnailer-1.1+14.04.20140401.1/tests/unique_gobj.cpp0000644000015301777760000001213512316640575022605 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013 Canonical Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by: Jussi Pakkanen */ #include #include #include using namespace std; TEST(Unique_gobj, trivial) { unique_gobj basic(gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480)); ASSERT_TRUE(bool(basic)); ASSERT_TRUE(gdk_pixbuf_get_width(basic.get()) == 640); ASSERT_TRUE(gdk_pixbuf_get_height(basic.get()) == 480); } TEST(Unique_gobj, compare) { GdkPixbuf *pb1 = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); GdkPixbuf *pb2 = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); if(pb1 > pb2) { std::swap(pb1, pb2); } ASSERT_TRUE(pb1 < pb2); unique_gobj u1(pb1); unique_gobj u2(pb2); ASSERT_TRUE(!(u1 == nullptr)); ASSERT_TRUE(u1 != nullptr); ASSERT_TRUE(u1 != u2); ASSERT_TRUE(!(u1 == u2)); ASSERT_TRUE(u1 < u2); ASSERT_TRUE(!(u2 < u1)); ASSERT_TRUE(!(u1 == u2)); ASSERT_TRUE(!(u2 == u1)); ASSERT_TRUE(u1 <= u2); ASSERT_TRUE(!(u2 <= u1)); } // This is its own thing due to need to avoid double release. TEST(Unique_gobj, equality) { GdkPixbuf *pb = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); unique_gobj u1(pb); g_object_ref(G_OBJECT(pb)); unique_gobj u2(pb); ASSERT_TRUE(u1 == u2); ASSERT_TRUE(u2 == u1); ASSERT_TRUE(!(u1 != u2)); ASSERT_TRUE(!(u2 != u1)); } TEST(Unique_gobj, release) { GdkPixbuf *pb = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); unique_gobj u(pb); ASSERT_TRUE(u != nullptr); ASSERT_TRUE(u.get() != nullptr); ASSERT_TRUE(pb == u.release()); ASSERT_TRUE(!u); ASSERT_TRUE(u.get() == nullptr); g_object_unref(pb); } void sub_func(GdkPixbuf *pb) { ASSERT_TRUE(G_OBJECT(pb)->ref_count == 2); unique_gobj u(pb); ASSERT_TRUE(G_OBJECT(pb)->ref_count == 2); // Now it dies and refcount is reduced. } TEST(Unique_gobj, refcount) { GdkPixbuf *pb = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); ASSERT_TRUE(G_OBJECT(pb)->ref_count == 1); g_object_ref(G_OBJECT(pb)); sub_func(pb); ASSERT_TRUE(G_OBJECT(pb)->ref_count == 1); g_object_unref(G_OBJECT(pb)); } TEST(Unique_gobj, swap) { GdkPixbuf *pb1 = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); GdkPixbuf *pb2 = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); unique_gobj u1(pb1); unique_gobj u2(pb2); u1.swap(u2); ASSERT_TRUE(u1.get() == pb2); ASSERT_TRUE(u2.get() == pb1); std::swap(u1, u2); ASSERT_TRUE(u1.get() == pb1); ASSERT_TRUE(u2.get() == pb2); } TEST(Unique_gobj, floating) { GdkPixbuf *pb = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); bool got_exception = false; g_object_force_floating(G_OBJECT(pb)); try { unique_gobj u(pb); } catch(const invalid_argument &c) { got_exception = true; } g_object_unref(G_OBJECT(pb)); ASSERT_TRUE(got_exception); } TEST(Unique_gobj, move) { GdkPixbuf *pb1 = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); GdkPixbuf *pb2 = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); g_object_ref(G_OBJECT(pb1)); unique_gobj u1(pb1); unique_gobj u2(pb2); u1 = std::move(u2); ASSERT_TRUE(u1.get() == pb2); ASSERT_TRUE(!u2); ASSERT_TRUE(G_OBJECT(pb1)->ref_count == 1); g_object_unref(G_OBJECT(pb1)); } TEST(Unique_gobj, null) { GdkPixbuf *pb1 = NULL; GdkPixbuf *pb3 = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); unique_gobj u1(pb1); unique_gobj u2(nullptr); unique_gobj u3(pb3); ASSERT_TRUE(!u1); ASSERT_TRUE(!u2); u3 = nullptr; ASSERT_TRUE(!u3); } TEST(Unique_gobj, reset) { GdkPixbuf *pb1 = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); GdkPixbuf *pb2 = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 640, 480); unique_gobj u(pb1); u.reset(pb2); ASSERT_TRUE(u.get() == pb2); u.reset(nullptr); ASSERT_TRUE(!u); } TEST(Unique_gobj, sizeoftest) { ASSERT_TRUE(sizeof(GdkPixbuf*) == sizeof(unique_gobj)); } TEST(Unique_gobj, deleter) { unique_gobj u1; ASSERT_TRUE(u1.get_deleter() == g_object_unref); } int main(int argc, char **argv) { g_type_init(); // Still needed in precise. ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } thumbnailer-1.1+14.04.20140401.1/tests/testsetup.h.in0000644000015301777760000000012512316640575022404 0ustar pbusernogroup00000000000000#ifndef TESTSETUP_H #define TESTSETUP_H #define TESTDATADIR "@TESTDATADIR@" #endif thumbnailer-1.1+14.04.20140401.1/tests/mediaartcachetest.cpp0000644000015301777760000001025412316640575023750 0ustar pbusernogroup00000000000000/* * Copyright (C) 2013-2014 Canonical Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * Authored by: Jussi Pakkanen */ #include #include #include #include #include #include #include "../include/internal/mediaartcache.h" using namespace std; namespace mediascanner { TEST(MediaArtCacheTest, BasicFunctionality) { MediaArtCache mac; mac.clear(); string artist = "Some Guy"; string album = "Muzak"; const int datasize = 3; char data[datasize] = {'a', 'b', 'c'}; char indata[datasize]; FILE *f; ASSERT_FALSE(mac.has_art(artist, album)); mac.add_art(artist, album, data, datasize); ASSERT_TRUE(mac.has_art(artist, album)); f = fopen(mac.get_art_file(artist, album).c_str(), "r"); ASSERT_TRUE(f); ASSERT_EQ(fread(indata, 1, datasize, f), datasize); fclose(f); ASSERT_EQ(memcmp(indata, data, datasize), 0); mac.clear(); assert(!mac.has_art(artist, album)); } TEST(MediaArtCacheTest, Swapped) { string artist1("foo"); string album1("bar"); string artist2(album1); string album2(artist1); const int datasize = 4; char data1[datasize] = {'a', 'b', 'c', 'd'}; char data2[datasize] = {'d', 'c', 'b', 'e'}; char indata[datasize]; MediaArtCache mac; FILE *f; mac.clear(); ASSERT_FALSE(mac.has_art(artist1, album1)); ASSERT_FALSE(mac.has_art(artist2, album2)); mac.add_art(artist1, album1, data1, datasize); ASSERT_TRUE(mac.has_art(artist1, album1)); ASSERT_FALSE(mac.has_art(artist2, album2)); mac.clear(); mac.add_art(artist2, album2, data2, datasize); ASSERT_FALSE(mac.has_art(artist1, album1)); ASSERT_TRUE(mac.has_art(artist2, album2)); mac.add_art(artist1, album1, data1, datasize); f = fopen(mac.get_art_file(artist1, album1).c_str(), "r"); ASSERT_TRUE(f); ASSERT_EQ(fread(indata, 1, datasize, f), datasize); fclose(f); ASSERT_EQ(memcmp(indata, data1, datasize), 0); f = fopen(mac.get_art_file(artist2, album2).c_str(), "r"); ASSERT_TRUE(f); ASSERT_EQ(fread(indata, 1, datasize, f), datasize); fclose(f); ASSERT_EQ(memcmp(indata, data2, datasize), 0); } static int count_files(const string &dir) { DIR *d = opendir(dir.c_str()); int count = 0; if(!d) { string s = "Something went wrong."; throw s; } struct dirent *entry, *de; entry = (dirent*)malloc(sizeof(dirent) + NAME_MAX); while(readdir_r(d, entry, &de) == 0 && de) { string basename = entry->d_name; if (basename == "." || basename == "..") continue; count++; } closedir(d); free(entry); return count; } TEST(MediaArtCacheTest, Prune) { MediaArtCache mac; mac.clear(); const int max_files = MediaArtCache::MAX_SIZE; string cache_dir = mac.get_cache_dir(); char arr[] = {'a', 'b', 'c'}; ASSERT_EQ(count_files(cache_dir), 0); for(int i=0; i. * * Authored by: Jussi Pakkanen */ #include #include #include #include #include #define TESTIMAGE TESTDATADIR "/testimage.jpg" #define ROTTESTIMAGE TESTDATADIR "/testrotate.jpg" #define TESTVIDEO TESTDATADIR "/testvideo.ogg" using namespace std; bool file_exists(const string &s) { FILE *f = fopen(s.c_str(), "r"); if(f) { fclose(f); return true; } return false; } void copy_file(const string &src, const string &dst) { FILE* f = fopen(src.c_str(), "r"); ASSERT_TRUE(f); fseek(f, 0, SEEK_END); size_t size = ftell(f); char* buf = new char[size]; fseek(f, 0, SEEK_SET); ASSERT_EQ(fread(buf, 1, size, f), size); fclose(f); f = fopen(dst.c_str(), "w"); ASSERT_TRUE(f); ASSERT_EQ(fwrite(buf, 1, size, f), size); fclose(f); delete[] buf; } TEST(Thumbnailer, trivial) { Thumbnailer tn; } static void file_test(Thumbnailer &tn, string &ifile) { int w, h; ASSERT_TRUE(file_exists(ifile)); string thumbfile = tn.get_thumbnail(ifile, TN_SIZE_SMALL, TN_LOCAL); unlink(thumbfile.c_str()); ASSERT_FALSE(file_exists(thumbfile)); string thumbfile2 = tn.get_thumbnail(ifile, TN_SIZE_SMALL, TN_LOCAL); ASSERT_EQ(thumbfile, thumbfile2); ASSERT_TRUE(file_exists(thumbfile)); ASSERT_TRUE(gdk_pixbuf_get_file_info(thumbfile.c_str(), &w, &h)); ASSERT_LE(w, 128); ASSERT_LE(h, 128); } TEST(Thumbnailer, image) { Thumbnailer tn; string imfile(TESTIMAGE); file_test(tn, imfile); } TEST(Thumbnailer, video) { Thumbnailer tn; string videofile(TESTVIDEO); file_test(tn, videofile); } TEST(Thumbnailer, rotate) { Thumbnailer tn; string imfile(ROTTESTIMAGE); int w, h; ASSERT_TRUE(file_exists(imfile)); string thumbfile = tn.get_thumbnail(imfile, TN_SIZE_LARGE); unlink(thumbfile.c_str()); ASSERT_FALSE(file_exists(thumbfile)); string thumbfile2 = tn.get_thumbnail(imfile, TN_SIZE_LARGE); ASSERT_EQ(thumbfile, thumbfile2); ASSERT_TRUE(file_exists(thumbfile)); ASSERT_TRUE(gdk_pixbuf_get_file_info(imfile.c_str(), &w, &h)); ASSERT_GT(w, h); // gdk_pixbuf does not reorient images automatically. ASSERT_TRUE(gdk_pixbuf_get_file_info(thumbfile.c_str(), &w, &h)); ASSERT_GT(h, w); // Has the orientation been straightened during scaling? } TEST(Thumbnailer, video_original) { Thumbnailer tn; int w, h; string videofile(TESTVIDEO); string origsize = tn.get_thumbnail(videofile, TN_SIZE_ORIGINAL); ASSERT_TRUE(file_exists(origsize)); ASSERT_TRUE(gdk_pixbuf_get_file_info(origsize.c_str(), &w, &h)); ASSERT_EQ(w, 1920); ASSERT_EQ(h, 1080); } TEST(Thumbnailer, size) { Thumbnailer tn; int w, h; string imfile(TESTIMAGE); string thumbfile = tn.get_thumbnail(imfile, TN_SIZE_SMALL); string thumbfile2 = tn.get_thumbnail(imfile, TN_SIZE_LARGE); string thumbfile3 = tn.get_thumbnail(imfile, TN_SIZE_XLARGE); ASSERT_FALSE(thumbfile.empty()); ASSERT_FALSE(thumbfile2.empty()); ASSERT_FALSE(thumbfile3.empty()); ASSERT_NE(thumbfile, thumbfile2); ASSERT_NE(thumbfile, thumbfile3); ASSERT_NE(thumbfile2, thumbfile3); ASSERT_TRUE(gdk_pixbuf_get_file_info(thumbfile.c_str(), &w, &h)); ASSERT_EQ(w, 128); ASSERT_LE(h, 128); ASSERT_TRUE(gdk_pixbuf_get_file_info(thumbfile2.c_str(), &w, &h)); ASSERT_EQ(w, 256); ASSERT_LE(h, 256); ASSERT_TRUE(gdk_pixbuf_get_file_info(thumbfile3.c_str(), &w, &h)); ASSERT_EQ(w, 512); ASSERT_LE(h, 512); } TEST(Thumbnailer, deletetest) { Thumbnailer tn; string srcimg(TESTIMAGE); string workimage("working_image.jpg"); copy_file(srcimg, workimage); ASSERT_TRUE(file_exists(workimage)); string thumbfile = tn.get_thumbnail(workimage, TN_SIZE_SMALL); string thumbfile2 = tn.get_thumbnail(workimage, TN_SIZE_LARGE); string thumbfile3 = tn.get_thumbnail(workimage, TN_SIZE_XLARGE); ASSERT_TRUE(file_exists(thumbfile)); ASSERT_TRUE(file_exists(thumbfile2)); ASSERT_TRUE(file_exists(thumbfile3)); unlink(workimage.c_str()); string tmp = tn.get_thumbnail(workimage, TN_SIZE_SMALL); ASSERT_TRUE(tmp.empty()); ASSERT_FALSE(file_exists(thumbfile)); ASSERT_FALSE(file_exists(thumbfile2)); ASSERT_FALSE(file_exists(thumbfile3)); } TEST(Thumbnailer, no_image_cache) { Thumbnailer tn; string srcimg(TESTIMAGE); string dstimg = tn.get_thumbnail(srcimg, TN_SIZE_ORIGINAL); ASSERT_EQ(srcimg, dstimg); } TEST(Thumbnailer, album_art) { // During test suite run we may not have access to the net. // So just test calling to ensure symbol visibility etc work. Thumbnailer tn; string artist("The Prodigy"); string album("Music for the Jilted Generation"); tn.get_album_art(artist, album, TN_SIZE_ORIGINAL, TN_LOCAL); } int main(int argc, char **argv) { g_type_init(); // Still needed in precise. ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } thumbnailer-1.1+14.04.20140401.1/tests/testimage.jpg0000644000015301777760000012472212316640575022264 0ustar pbusernogroup00000000000000JFIFHHCreated with GIMPC     C    DOV8W =xO^8Wz=xpׁ9Qle Vaf+(ًC f+/gIL<ҧI:W4yN&tiS6D"MdI$m"]&ȓdI$y6D"M&ۅ%M XKB٧~* ^'+z=xp׉z¼O^'׆b}f)YZlf(ي6R+(ي͍pgJ:O4yΕ&viSI+LtҹΓ*ti3sI&tm\gI+LO&ɲ$l7D&dI$M&ȓdIlKBV٩+ hRZ}rO^+z=xpׁz¼Fglf+0be1YBle1YC#='L<ҧI:W4yN&ti3I+ɶn6D"M&˲$n6Do&ȓdI$m m )XSBV٩a- hRy׉ =x^'+z=xpՉlf(ي:f+0FZlf1YF͝gJ:O4yΓͪti3sI'T(f)YVa+0J6blšVoΕ:O6ҹΓ*ti3j'T}+y=K?a;nz_n6D"MdI$n6]&ȓdIjKB[5,%+ hJZ- XSBVХQ *z=xp3f+0R lf1YGCle0ًC#=M߻>k+Ѽz?q:L\gI+O'F:N?~y{w_쾮7l6Do&dI%y6D"M&ȓdIhYRZ٩a- XSBVЕ6ihJšwG׉z¬Ob f- 6R lf1hQle+6vJ'L׾i7ѺG>O۽U vytn'I7~߿~c2zwcπ˾l6M&ȗtI$y6D"M&ɲ&VЕ%sSBZ%RZЕ4%sOrx^'++(ي6R+(ي6at1YFVagJ;C(/_6x<7M8e'GBdzͺڻCz7y{?;FGо^@_2 6D"M&ɲ$l6D&R)+ lХ%aM \Х%K L4׉ =9b lf)YClf1YF:f+7ҹΓ)|xֿsIw/u>/J;~L |m8<o"M&ɲ$l6Do&ȟT$%K hJšM XKBVЕ- hJW4G˫cx㕔le1Y6Rf+(ي6Q1YqS:O6yΕ&tiSi+L<ҧI?S.˶n6D"MdI$n6M&ȓtK$y6D#XKBZ)+ZЕ)a- \ХnWz;s+0ي6b lVQlf- Vo'L\gI'W6gJ:O4yϪoo&ȓtI$y6D"M&ȗml6D"MdI + hKBЕ6iXKBЖ,%+W4dדw_>E^W:at)YVQlf- 6be- gJ:O4yΓ:W4i3N&vi3(&ȓdI$y6DM.ȓdIn6D"MdI&Z+ hSBVЕ6iXKB,%sO4k&|vO^I9YF6b+0ي6at1YVQ?Γ:O4yΕ&tiSI+L3Jmdl6D"]dI$m"M&ȓtIl6D#=CBЕM XKBjhJZЕj[dՓV I~0ي6b1YVQ0J,蟡}sIT- XKB+ hJZЕ- XKBVЯkw%nVb f+(alf)Y:f=N&gfoޯgG,GgI+8DG$>"M&O$v3o̻oȗdI"73dA%MVХ%a- hJ斅,%)2jɻVKܚQ[:af+(ي6b1YFValšȣdϲ;I̍||?OS3W~y^ſNs>56ϳK/NC*=x$Z˟2`{gv/|Z~cG?G BSBVХ%a- lҰ,%+ hSfjɫ%MY7rjG?f0Rlf+0J:e1YZ񼫼Ͽ{;?4yܾT.+y<٥ۤΕcCO| d:=OP}'PͿ5G:d7=>}]A㞹z̾m'O|ws/ӘjhJZ%aMVХ%aMS4|=ɫ&KY7rj7Ce+0ًBle1YZle0ي͝+<?ߚy۾3oIo?;ֿ4^ϢqoP3^~o\sNIJhJ榄%K hJ[54%a- XKBW4\n䵓w&-z沲á6alšVa &K'|Ϯ+)W}ؽIOO1mUxo}YG>/ho|2Y7Gg^ݙI/x/Ľ~:XKBЕjhJZjhJZХ[ՒM-dՓw%Q~;6b0J6alšVa2yS/鿠=:O<^f}8\gƾ+ŹO$z.R1~k/|^]诚R{ޝ3iEoY_ ¨}5%JšЕ)a-VЖ%sO&5dՒ&MY5zҳl6R e1ha3sz=u+zWzJ'x |/Z{G}c_/dι_N<#gug+/W><ɲ 2~?cu?H[B٥+ hJZ+ hKB~Kܚn䵓w&-`e0ي:e+0نVa- I*ti3sIT$y6ARЖ)+ hR斄)a- XKB٥aK2jɻMܚ^Փw&Dle0ي:e+0نVa6J'L\gi:T#o"]&ɲ$l6D&ȓdI$o"M&ȗTohJ[5,%+ hRZХ- XSBVХ?p&5dkMY7rZɻVKܚn蟋1hQle+1*ti3si'T>://d?]oW>im6Mim6MDDDDDDEdY,K%333333333w_xw_vgE\n~_vܽ~no'\pݿHbvMv>Nөim6Mim6%dY,K'33333333}if~?/7z/|o9o;8nO#|GAO9^r·1{Wu}oAqKӺ{8m6Mim6MdY,K%33333333?>~c>'+ݸywN/'.qm6Mim6MiDDDDDDDEdY,K$ufw9\<߾vWyg>r۱p<Ѧim6Mig"""""""",K%dffffffff߳\7Tt^_W.߻_)}7ſXד=wݿ~Ge;'z7#ǟ?2Y,K$Oyx~yX@o <Ϋ؞oG~x>izm<^'=_>9/Qܞr=ӶtG?K|3;>=go<'w8:m7wS?!ffffffffn?P~Pz/Ϩz]U:}//캞7oq|o=7c=7]7z~;޸rxo!ǟͮGƛMH33333333?~τ's[9u}%/Xì_{wEtG#i黏'xg⼾yMfffffffg7/7OEW|]t+>xθPu]WO}7Gi7w9==o=Cfffffff~{|Bot_{{|=Ï<]oQm7kkQoc~7g8'Li3333333?=پ~Ϻz/|\-p{ iy_S]6:׃;muLvO6y]Gq?i+Jϓ;|<^>affffffg;|k]O<Ϸx<]n|]/a}7z{/7afz?oA:γng}st+]_ yZm79W)w333333m6Mim6MFޯ\6Offffff m6Mim7u}?5ןg:kWŦDDDDDDDDGim6Mi>'o_㶽|Ǜ6LDDDDDDDDGYM6Mim6Mim6"""""""#im6Mim6Mi33333?im6Mim6Mffffgm6Mim6Mioim6Mim6Mi""""""""#im6Mim6Mi""""""""?5m6Mim6MiDDDDDDDDG333m6Mim6Mim1m6Mim6Mi""""""""? 6im6Mim6M,DDDDDDDDG33m6Mim6Mim?DDDDDDDGK !14@AQqr "0BSa235R#D$%bCTd?eYeYeYeYem6Mim6Mim?    ,K%dK,,,,-im6Mim6M@    dY,K$,,,,Mim6Mim6L    ,K%dY%YeYe,-im6Mim6MiAAAAdY,K%YeYeYeYeim6Mim6MiAAAAK%dY,IeYeYeYeim6Mim6MiaAAAAdY,K%,,,,m6Mim6Mim?     Y,K%dY,,,,im6Mim6Mi    %dY,K%,,,-im6Mim6MiAAAAAdY,K%dY,,iYe[Mim6Mim6MAAAAdY,K%dY,IeYeYe[Mim6Mim6M_H    dY,K%dY,,,-im6Mim6MiAAAAdY,K%dY,,,-im6Min]G_Ⱥ_gYt_އ?_{:gO~:2Ǩf]rk$z㜯AAY  dY,K%dY,IeYeYem6Mim6Mܾv}s_mw&{YmtwpO^SOOg<&~_7Yy_/ov>AAAAY,K%dY,K%dYeYe[Mim6Mim6M9^VD]_On=8/]꼙Azտwy??x_nɾӟ?>Oo%k^Qy?NO~e+SqpoխnɎu긵ʟ]Gzoա?}v7oGO<=0AAAK%dY,K%dY%YeYem6Mim6Mieox>}=;l?3~o|}7~.sw*m9??__}۵ySdz|nONuu..}>y8~\xq狌yS\]6{q_&p>_ux91^>Wn.]rgr=Nj/ş].z>n^7gI~?dyGKgzWAAAK%dY,K%dY,,,Mim6Mim6M9^W{Dc8{y~pK?L/Qq~o^9O=Ep\\gCs~/[߇ncAAAAdY,K%dY,K%dYeYem6Mim6Mi}ewn՟7?˛麗Ǜ ޾x8|82~~gu/#͟ qMy<[x ͳ s濯<<˄~cr/'>¿/Ky~N#CAAAdY,K%dY,K%dYe[Mim6Mim6M{ǃg^W@^'E;rɍo'e/]7ǝ[~Hv>#\~I8ugt=/Dxpqy;6lюZ|y7OɳIW9s?o#{v_Zi]n{~|Λoo){9?Wýqo<rq.~u:x}znf    Y,K%dY,K%dY=ŖYem6Mim6Mim?3ǎ_A=.:F_W_wҞn9|Oǖ<[jg>}oY?*W{7_t~sn/+_9xZϸ9u]ǛG -y|w z_cIgy:GX   Y,K%dY,K%dY Yeim6Mim6Mi AAAAAdY,K%dY,K%d{,m6Mim6Mim2     Y,K%dY,K%dY#,m6Mim6Mim?   $AK%dY,K%dY,K%Ym6Mim6Mim6AY   ,K%dY,K%dY,OYm6Mim6Min׫H~7ϲ_AAAAK%dY,K%dY,K$~m6Mim6Min<]O&F__g   AK%dY,K%dY,K'-im6Mim6M?k˧GGm=WG?wwG]˧<.N}yYtMuۗAAc./.}y %dY,K%dY,K%? Mim6Mim6MgHMfキ}Ө;_gf1`߶ǔzNc=q~n;-{+u98ek?'yMtf|f^ǎ]_ɟ_>wɮz׏?Y=l^<ה?ewվo0us3>kN}^~R.^?>qpc< t\OO\]_Kf4?,ӥO7W~OAPW8O ,g~y=slK%dY,K%dY,~Mim6Mim6M}$}㿦3w.=P^z^|WGm޺-Yv/(gۺN矏zt:^/΋'N).^nN}y_ۗz.wGJs_u} 02]M<9u$~ 9|KWU~OAqތÃΥ־T]7"+rgIJY,K%dY,K%d~CMim6Mim6LmϷ<"qpLú~[ŕ>wC9LJv=އמ~1៕qy#ȟ#v&~uY~|>/ct븏6`z7.OAvyWI|2Y,K%dY,K%dim6Mim6Mi;o>}䇼wfo-?oGױ_ ʏ~o<|?4?]צ\~;|_odAsޟ >Ǚ5dY,K%dY,K%dMim6Mim>lϴ$=ῦ3yiO}&Gױ_ ʏ~o<ꎧqxzO ^:c_sσt=tǁ򾫡{gz|>Av ;~zU8}l9_I~xu`9~s}el,K%dY,K%m6Mim6MYYí>o}G+t?Erg/9 xyޤ=ˠ=>ܻC9ʹ'v<>8yG9y8h|='Osw~Nzp'wr?#g@xw?~/znk|= .^\+Asrt98MwS×_Y/s?n}OVowRp N>uGlK%dY,K%dMim6Mi   |G^oY,K%dY,K%dY,=6Mim6MiAAAv^im6L     Y,K%dY,K%dY>im6~AAAAY,K%dY,K%dY,| Mim?    %dY,K%dY,K%=6MiAAAAK%dY,K%dY,K$|B  !01@4AQq"#$23RSarBbC?eYeYeYeYe2dY,K%dY,K%d    0,,,,w%dY,K%dY,K%    #}YeYeYeYe8AdY,K%dY,K%dAAAAAeeYfYeYeYg   YeYe|c?vVK%t? Aws~kנ>[%}94]?#grɟF|\9AAA>3,,/]x]~SO=.^{{srp:nCGsx> d8>kq};x]d95˜r_Mg^s{,.}zLv\{F_ '庞}6\]wQx8۬}fr'#޽   8,/ydY.>LEM>#dY,oGcdY/ν%.f ggvΓ~Gdt__>3   ,>dY,K%dY,K%AAAA>wMYe%dY,K%dY,K%    =IiYg>K%dY,K%dY,K$AAAAzie_S %dY,K%dY,K$AAAAAi/G7>8PkmO,K%dY,K%dY,H"   Rem6g/Gu{ߠOmidY,K%dY,K%d "  ]n|'~˃?E ş oqk{71_eݙg}vxY{=Iim>|oov7ߧ[ӽO'OGAW.N^Kgd\xߛ|';}77YN|8 C:<9.-ٝg)ߞ?zN=]}wgs _˷vΣ߇Ϯ;G<.>>' ;^9<> y>o/{S9>m6M?*#d]pk^Gּ&;ry5c! .8>_༙;۩z]r?-؝\}lhngsw˳;Y{.̻ z,윝/{'_d{믲^쮯/zO&?'.9Q[Mim>Ox,e~˴K2}K%7N~,]g;=رG5ɕ.IS-/igwN^}^3Gx~\gӧѽ}oWh~>Fv8m6MiY.=K%ٿ~mqdY-st%=;!?<]g<I긾fsGK//uA t{vox?>/t=;ټޓՍ8ѬK1czm6Mi}@Y.=K%ߢ~mq_{%r~{t%c}^x^Q'uܝ^Ggl]=';uw]z>\>zSl5?1O/?hߏp}^ g}K?oyx}K}YQ^Z|u=/9k.7_/<-im6M2Y,Iݞl/_t~,E珹n5,Y,e8zSwr?:g{<NQƼo.~xO%x?}Mze}fFx^.χAu}hp=F{v]tߌ˗{x$gZ=S>}]ջUX;Iyim6MidY,K%dY,K%dAAAA{=ؽt7_&zm6Mim> %dY,K%dY,K%  /t;KυGqy7ݯG7Yϟw'Scv'exWA_Mim6MdY,K%dY,K%ADAst]V>=_ߗNG?pnz^=OMim6MiY,K%dY,K%dY,AAAAALMim6MrY,K%dY,K%dY     Mim6Mi %dY,K%dY,K%    =Mm6Mim6M%dY,K%dY,K%    =Mm6Mim6MͅdY,K%dY,K%    #|Mim6Mi|K%dY,K%dY,K$ADAAALMim6Mi}dY,K%dY,K%d    im6Mim6O %dY,K%dY,K$AAAAGm6Mim6MidY,K%dY,K%AAAAͦim6Mim6M<|K%dY,K%dY,H     m6Mim6Mi|b %dY,K%dY,K% " " Rem6Mim6MiN!1"AQs 234BPRaqrt#5b$0`cCS?]F*X^ |^}Wg\ι]sIfwppi#>,Z[6%PV|}du 0*u>ܭvZ orzUfp4ԭ536F2 <ܭvZςX1?6ֺ1_rSrern=:Z'aX>ޚe^&2(y: B޵hvo=Q ^@ 8 *[IXqqn8qkuu_. >8լrSrer}_dK᠊YoI4yL+V@b^arzԓDJKCsS"K1THssMG5n'z}q8mIq LsT3J-w97q՜R &]祂̉u.8n};+{ 3Wl1܆j% @O &#j꤉zFD1Ȣ|7c8hwz}Srer_>4V aI>}W^>yg 8DwY$z|"<2/ GW^[E#ǒa_jn\K<2g{t*٢I8@`n᪍2}"uZ0e$ N$ka˦.FOʒ}q2/#mDe.Fc4$ yd9c(I *#-锍eqEꙀ/TwEob4jo8;+sqDkN kY.05E`V,>Bs7McVjQaUý4L2o'i°i#Nj%xBzw;JF=C&Ǒ}(J7~+T]&lq8a{k#f;i>1ZǹF[; I =k\j 򟚇b4rm]>ޤs֙.[\sPhmWtǤ)",{V(I¹8Θ&qͷnQ=mqc]op> ~5s ]Gep-l-D=侖EzΣȪ5{+t'M<FI\r6{G΃Opo[rˇU!+l֔5+ܻAzHyK7Ƽ$W>vdp# ÄRO"w(ēڎ,n t05ipzwIFfyGk JoFdU뇤i MK;v@W8!bS>~Q~y1Ŏ\8r=$n6#ymG:NyěF}:eq*)nnk]kuļ5R&a8˗M>Y}:<u-kZֵkZ.}Ci?خ{C菜Ij9: /EBHʖ}^!ʑpƠ#44p>}Ci?خ{C菜Ij9.NꧏF#-PΎEuS$ZqF5g'+2JQgBֱVJfT>Xõ&A=˽DRиk:+.}e൚deTy`tBYn6C ĝ{E c`7%ˣN2j9hߜIN'DMn WXqFW0۫Op. fTJѧ)USDǓnKx/(e{B 8?a:gp(46_X.o*_ o]k}#7Eo)!1AQ@aq0 ?!طU]UPR)JR)JRfBcU]UU)JR)JR.DDDDDDDDv%]UW3B;)JR)JR)ȻB; )JR)JR)DDDDDDDDDX;:!B-꺪R)JR)J\pv5|uUT!B\WUݒ)JR)JR"""""""";!ꚰ!B誯R)JR)JRDDDDDDDDObUWVXB!C󪺺)JR)JR+xn!B!̪%)JR)JR(bU}}7aB!~mUWqJR)JR)K.ĪaB!C򫻪JR)JR)JX싚kB!BuD)JR)JRv%]e!B!~EU_W)JR0,#wG$Ng ɱ Gz}]U!B!C񪫠a)JR)JR ;}E}1} F<bF|G>&$52DDDDDR,o*!B!~5UTR)JR)JR-4-yxL/#P>`F&b˼é/u`y/ s{ز^1Q&X~[S=Z=HSc/=p.49Ѥ!B!ľ)JR)JR,-iK ٍ#&~c3փ'$F3:j -0\ػzy{OܧX 00;a]> 2wEړۨ0ʮUUјB!B!uUF JR)JR)J/0P0,sɗ"$rǮ|[>H?p\99F!B!C)JR)JR)p8NhQ~}{}}:ee p9[cCs9$#[)pY;h*!B!Bu])JR)JR#Ʉ.c'd^:>iW1ggzwj;/SHA3志7aTUXB!B!U)JR)JR)p#ͅ0ry^D19>P",w%FX*^A}LK|Z>>o_0Ȝ2!B!B?ުJR)JR)J"8hEqg 㴹όl&ye1E9(D_b<#N#d`, i `rLn!0ڜGJ8`%1U?$!B!BUJR)JR)JQW#d:O:E =C"t&Э~0Yr3Y]?PTާ'Wz </=\U]B!B!A?TR)JR)JRDDDDDDDDKbUO}U3B!B!B )JR)JR)b"""""""#:/f!B!B?sR)JR)JRUWU\B!B! )JR)JR""""""""t;ꪪB!B!pfx)JR)JR5Q3)5b"""""""#!B!B"fgR)JR)JZ{. DDDDDDDDKbQUV]^XB!B!Bffx.)JR)JRXGL{ԍ] t[t$>+j}%ɨD N#; $?n|əs=sXƟ1N!B!Bff%)JR)JR/ ^NvMm"EvVP}> g3Ofcӈb]L7{X G!B!BL̥)JR)JRD(|Dꑀ;8jMw"-xv; x#8Ե~xK|2w S&.qTyf6.WN/C԰AĜC[~:_Bt ]'?QWhB!B&ffffe)JR)JRb"""""""#꫹gב1' !B!BfffffR)JR(UPб.qjsPJsaYuՄ!B!B&fffffR)JRoj95esu^9!B!BR)JRUVuMXB!B!D̥)JR)p""""""""%*,!B!B!3333332)JRXnꫪ!B!B!)JRuEWt!B!B )JRJ{:hB!B!C3333332)JR"""""""";'!B!Bfffffffe)JRb;!B!B33333332)JVlv5}UU!B!B̥)JRDDDDDDDDGc7_WuЄ!B!B)J\`Jꪮf!B!B)Jb""""""""۱樯B!B!C333333337 6'qZw =a-iԯ:'dޖ ZV0EyQ ]ܗ y7GhKԄؐjxtCq$ޗ ۬h[l?]R#<1C` vu {[}ckz]o)Lx Z{fd56!zObSRƊ훴hKنDdI)LO a僬> Z0jRD;:)Fa)bB$ Ң<6N'9+Z3{KwS?<'R6֌ g;K@.)zM1wCWxQ LB-CVp&.`4wDrC!2v܉g1I%]'Cj_Xբb+)iB~ Ts`w>X y7Ϯg}Q 섘ʙ^\ v3 Lo 'iyS;ʈqi:dV̓` v|+<)D+[*7YҧKĥ[{clإg1h%YD'H앣DKj^w5hCGa-S\08Z=nDw jB80tnO 5n! >2K%X=~O`:-26xT"u?&SXJ o2CB4MS?'0uL-ʊrӟG4gġD=gM N~ åW2\Fyi %YX;|k ކWXh YzbVrڛRrWf oP]B@.XzKr#Cl%sP,ˬh]CCϨX]r2^yjC_9q f]c#^Bl[Vopi.!.ϨD|S#jO`k9Hd&rZ(D9~)(.H "B;SIgLЩ8)IKs/ƨn;/7g0UgE{ J:!˸K4v%D=gwTr-'ջ4r]ã.&,fGކ"W4~Dyu YD/FbE9u0|CXBZzCpKF}SЦ u1 i$@hQ^"ÂgL= }23^@>W@NV}QP͙ ϪF}Y+Ϫc^ $Gkvڃ=h ˜ʁ >(+m+vԥ:-Fᢼx**#˘k4 {" h5g h:!˨ hU`w9 }Cs!h.MĔ^.7ئ.KCc8)ϪKRl0>E9qo+!1AQaq0@P `?X%UUUT((&g333333?*@DVfffYff jPfffYUUUUUUQUff9UUUT* UUUU332f v@ 4̲ꪪD*@AU ̳3 EAYfYfffm=UUUUBUUU@3<ffflߝ*@\f v@jE43333333?A@fffffx330*@A'GdF +7_%paeLg@CN32ͨXDD9m%&pd fTR05DNco_=d*^k185״P8;g ׼jExJf~spx#,Dz?U}ǢᙅN4epvZˆ1]Z/Y| 8@z0+M:d|,MEe缠"o2&pHO2VgnUUUU"UU"F.Oylx|< _urx NzgZΚCg]:쌠?GۈSq0ۇb(`;Yg.p<ISЙy,]5tsyXB"hY9'3o1gѱ xˆ9j.8`6UUU UU %Sb^39  LX>Ƨ(+D<2I9k:j~u*Ds7t'_?؋A@:?89 t5 ]6j&h@dlE z=&[yNO<0fҪPP*9pU8;nvz "QDg$Lh|qx8|הpuz 2=f~jvg.v!|/yX3M 'j@*@VYx^ɣNj][|sXtOo?NB_w͇o4S#Hi UeyXs?U<8'N0++bNy܁wJF0{Oxh.bt'-)Q8=4WvuUyUUH(jPEE03` T[lWd,}'Ba_bhb&zLg fϙcs2`K"ɰ>t[W&#Sd'q}^k;"#OwVv<3K wY^&<vd%r7up\zu3&| Ƶ?3@AAD3_%g!kf>Pfe zY^] QD(wf`+v{g;r!^=^4#/Ef ?{>L U. DL32*&nxtvz iP.>1`D1n`-4_n~U3  }fvbDp"#PUY㉞03= 2x 1z}J DDD}TL2fffYUUUUP DDDA}QE ̳3 E"8PAeUUQP*( """"""#̲ffl߄SDD}0P\333333330e-UUUU( *DDG"""> fYfffgUUUT DDDG,̳33<e-UUUT*!DDDD ,333f UUUUH * ffffffgUUUT""">*+33<ff DQ"""8 ,333UUUT DDDA#* !1AQ 0aq@P?X*Ղ    @ *YeY PAB   (UUUUC,_ª AAA '(UҪYeYzRꪩe AB (UUUVIJ,/UUAAAAo*=UU K,,UUUnAAAA *ieYeY{zY AB ?J"UUUT%YeYeX    ,ߒ T;:2,,/mUUU.X    !TYeYe^*AAAAAP@gUUC,,,UUVAAAA~P*YeYeYe*Y    ҀUUUU,,,UUAAA2("2'wAd;TkSNjuUUT%Ye,^ΪX   '"h<>d|ɂWUQxp|(UPP0?}3Tz#UUU,,,UURA   ג:P8~hn77_mL,QϤtmlL8fiۂq0acWw O xd`jȎd`ꪨK,,,Ye^U.X !AAC)8n4>b?y;pr?YԫÒd)ewrꪫieYeYeYeYlYPAAAAAPeYe,,,J    !Ҁ%UUU:K,,,, `  AA@B eYeYeYeYeAAAAoDjUU eYeYeYeYeAAAA6~ *GT{JYeYeYeYe,AA .+rUPbYeYK,)eYeP#X    Y9]l C t8[A6H`>y>frwuj{+(7:o֪lGYeYeYeYeV.`    Nj8K2LQo"9WnOqdťwwĄ''4GWk2'iy%a285EC?p#u|ply@pˌ2{Gs0~ YeYeYeYeYcAA [w'O؍919Ã2|?e:C~;=D}d^OM!&_\:hٻ?/z&pOyT+Ȟ*s){fx{BW'&ьEYeYe,` AAAY@ TUVnq|N1j`{ԩq,,,,-TAAAPP t p {> ̠4q6t U,+ wǦ eYeYeR,;@D@   UCV8q]Id}ڇ!Bww^+_-hK,,,,/j AAAg UUUU[K,,,,ڈ"AAAPDIJ,,,,@@  o҈ %UUUT,,,,,.A  !TPPYeYeYeYe;qT@  ?KUUUT1,,YeYeY@ ! J(UP*tYeYeYeYeAT!A 4%Ye,,/P  D@P,,,,*AA TD*ieYeYeYeYK   ( "UUUPIJ,YeR,D !fP*ԨK,,,,+ )!1AQa 0@q?.\.Z\W-\p\j嫕W/?!B!B!c1vvnvnvW+^ 嫕rjpՌm!B!Bkۻ]k].kvI嫕r\.Zjr\.W \,!B!B#F}.k~{nx]mݷv]g/W+W+W+sjrC!B!Bw].kkw{ܻ]I|rp^r\aB!B!lkw]ۻ]v]k+W rr\(aB!B!wwkv]kW᫕s\Zjrx~Ͱ!B!BkmݮkK .mݭwW+W+嫖+`<G!B!B%7kvnvݮۻ]Kr\r\5p\W+.{$!B!B!abt]ۻ]km]7t]?rrjr\36!B!Bv]kv]v]ۻ]&_rp\.Z\Z_f!B!Bۺ]rvvnvq?+rW+W-\+up!B!Bqvt].Kwkvo?嫕W+ZjrՉ'%{;r|G lqI>4kt,e,O7Z,\-$ᬦ01w3nliLLȏ~dݜlޚh)2#yY,1SfVQtw{v]k;>/ r[aL Y}{'* SqY/oP푁F5r8ǣ<Kvwk.{_B\5r\<a0fIFiUeǟpQT 6AgG0;Aes28A#4>>fVczAL'OE7lN mݷv]kwkV\pjrAG< 16|RLB!6_ zx\?lOES2c q@f8GqËjlnogO vnvݷv]W+rՉXC"Xj\9=-ih>tN#t }S}Qg0x&HπePep erhpO#`8@c[ ?%Ğ@Gv]v]K_W+Z/r!p N|d 6 {hDDG~DCb%l>]l[i(p} Pp=Dd~?MmU;u~A{Wg,wO3LC. `pϴV[\<'Mfɱ'3g0c< ހغG<u]wv]u,.W+l|?+BUdY2 ,ђ8X5,PA#e*z'Sa8G }Гk6pdxwR ?+y(»wKvnŝݮk;Jr\c3a>B!B! Wkۻnwnvv]vfcesrb_F!B!Bv]zv]mݮkk%+oe!B!B-Ewkۻnvn黥vnv9W+Є!B!B˶Mݮۻ]kۻ]kw5? )JrMPLyRf!B!Bx}.kۺ]vO%)Jae_ 8mTʆT=gl!B!B/]ۻݷvv]vvvEᔥ)\b_Be\gaCf?T>,UK>M@dW _i2'0~@q߈h$r "7MhEdh\bxd=^wnv{6 Y|L/)J}Q.TZv_cmle3òG+D,!L81hLB_/. iw1aLb&:=g`V`Pc l@ r (u #q~e+PO$`3CkÏy>B.۲{h83ޠaP1c˓玛gqA ,eOw?jq~Pݏ^E%)JREਇZ3Ņmu:=Lc ̹u&? VxӪt#4#㢞r7"'K0@&D{>Ȁ BR58:U4>>^N %3_QËzc>f:MGLXJYb ;Vt<`<61Wb%)JR/3 <%r BybP~Ȅ  E%{yY{.oBK _@ȎOY/ '}`Enir,4+O9*3` $?9ϤyzWH~R)|< Fs!cj!XW]}piEyUp Vtex?U[IdWAK kA_a.?ۗa w[ۭ}7Ə})J_7! B!x.՗`8؎o[~פŗA?ȹ SvϾ3K:Kȓu?i=$)ݿfܗ-?YY~)JRax!faxN32})hÁrƣ`,O\ }Fan^ gv5m9=їw =gO3 e {&?{??[}g%>eꯩ}4g_be@X??:N؉JR)|Ͱ;, !RcO[hzRf9#!+ =mV !.[Р&("&"(LGܛ 7O1keA `[-xrK=L3'9BqCaQUnۺFg'zyPz&з qp;yId) y~ cCc%p%G͋|(??R)JR!B!Bhϥv].ۻ]ۻ]tEC~Z0_aNe0?]<<i)JR)|yaB!B! Qv]7v]mݥT]`~z{I6O6}=]K?)JR)KB!B!B]ۻ]kvhț.Y ٟ쫌}A yL'.{;D)JR+3B!B!x].Knk6nkۻnu}0JR)JR !B!Bwk knv]vZ?)JR)JR?yeB!B! vK黵黶mݮkwkJR)JR_aB!B! w]kvnvnv__"R)JR/aB!B!]ۻ.m.Kۺ]ۻn2%)JR)JR?!B!B#Evx]]mٳvxh/JR)JR/!B!B]mݷvvnwkwk7)JR)JR?!B!B%v]rv]k͛3e/)JR)JR!B!B!c1twK黦krt]h_)JR)JR/aB!B!ݮkwkkmݮk/L)JR)JR/XB!B!Z].kKwnvve%)JR)JR+thumbnailer-1.1+14.04.20140401.1/tests/download.cpp0000644000015301777760000000577112316640575022115 0ustar pbusernogroup00000000000000/* * Copyright (C) 2014 Canonical Ltd. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authored by: Jussi Pakkanen */ #include #include #include #include #include #include #include using namespace std; const char *testimage = "abc"; class FakeDownloader : public HttpDownloader { private: constexpr static const char *imloc = "http://dummy"; constexpr static const char *xml = "http://dummy"; public: std::string download(const std::string &url) override { if(url.find("audioscrobbler") != std::string::npos) { return xml; } if(url == imloc) { return testimage; } throw std::runtime_error("Tried to get unknown data from FakeDownloader."); } }; TEST(Downloader, canned) { LastFMDownloader lfdl(new FakeDownloader()); string artist("Some guy"); string album("Some album"); string outfile("/tmp/temptestfile"); unlink(outfile.c_str()); ASSERT_TRUE(lfdl.download(artist, album, outfile)); char output[4]; FILE *f = fopen(outfile.c_str(), "r"); ASSERT_TRUE(f); ASSERT_EQ(fread(output, 1, 3, f), 3); output[3] = '\0'; fclose(f); unlink(outfile.c_str()); string s1(testimage); string s2(output); ASSERT_EQ(s1, s2); } static std::mutex m; static std::condition_variable cv; static bool go = false; static void query_thread(LastFMDownloader *lfdl, int num) { string fname("/tmp/tmpfile"); string artist("Some guy"); string album("Some album"); artist += num; album += num; fname += num; { std::unique_lock lk(m); cv.wait(lk, []{return go;}); } for(int i=0; i<10; i++) { unlink(fname.c_str()); ASSERT_TRUE(lfdl->download(artist, album, fname)); } unlink(fname.c_str()); } TEST(Downloader, threads) { LastFMDownloader lfdl(new FakeDownloader()); vector workers; for(int i=0; i<10; i++) { workers.emplace_back(query_thread, &lfdl, i); } std::this_thread::sleep_for(std::chrono::seconds(1)); { std::lock_guard g(m); go = true; } cv.notify_all(); for(auto &i : workers) { i.join(); } } int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } thumbnailer-1.1+14.04.20140401.1/tests/CMakeLists.txt0000644000015301777760000000310012316640575022322 0ustar pbusernogroup00000000000000if (NOT DEFINED GTEST_ROOT) set(GTEST_ROOT /usr/src/gtest) endif() set(GTEST_SRC_DIR "${GTEST_ROOT}/src") set(GTEST_INCLUDE_DIR ${GTEST_ROOT}) add_library(gtest STATIC ${GTEST_SRC_DIR}/gtest-all.cc ) set_target_properties(gtest PROPERTIES INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIR}) target_link_libraries(gtest ${CMAKE_THREAD_LIBS_INIT}) set(TESTDATADIR ${CMAKE_CURRENT_SOURCE_DIR}) configure_file(testsetup.h.in testsetup.h @ONLY) include_directories(${CMAKE_CURRENT_BINARY_DIR}) add_executable(basic basic.cpp) target_link_libraries(basic thumbnailer gtest) add_test(basic basic) set_property(TEST basic PROPERTY ENVIRONMENT "XDG_CACHE_HOME=${CMAKE_CURRENT_BINARY_DIR}") set_property(TEST basic APPEND PROPERTY ENVIRONMENT "TN_UTILDIR=${CMAKE_BINARY_DIR}/src") add_executable(mediaartcachetest mediaartcachetest.cpp ../src/mediaartcache.cpp) target_link_libraries(mediaartcachetest ${GIO_DEPS_LDFLAGS} gtest) add_test(mediaartcache mediaartcachetest) set_property(TEST mediaartcache PROPERTY ENVIRONMENT "XDG_CACHE_HOME=${CMAKE_CURRENT_BINARY_DIR}") add_executable(downloadtest download.cpp ../src/lastfmdownloader.cpp ../src/soupdownloader.cpp) target_link_libraries(downloadtest ${XML_DEPS_LDFLAGS} ${SOUP_DEPS_LDFLAGS} gtest) add_test(downloadtest downloadtest) # This is only needed here because GStreamer brings in gobject. pkg_check_modules(GOBJ_DEPS REQUIRED gobject-2.0) include_directories(${GOBJ_DEPS_INCLUDE_DIRS}) add_executable(unique_gobj unique_gobj.cpp) target_link_libraries(unique_gobj ${GOBJ_DEPS_LDFLAGS} ${IMG_DEPS_LDFLAGS} gtest) add_test(unique_gobj unique_gobj) thumbnailer-1.1+14.04.20140401.1/tests/testrotate.jpg0000644000015301777760000056655512316640575022516 0ustar pbusernogroup00000000000000JFIF;BExifII*   (1 2iz@!PanasonicDMC-GF1Ver.1.1 2013:06:23 16:49:15PrintIM0250d  ' ''''^''''" "'d0221(<P X`  h|Hp0100p !!)    2013:06:23 16:49:152013:06:23 16:49:15d PanasonicQ  !J"$%R &0291'()*+,-./0123b 456789:;<=>?@ABCD EFGHIJKLMv N* OPQ" R S" T!UZ[\]^_`a!c0132  !DVEPDBAFbʯ̯C<]/6 ƯȯدDE\\ίүЯO DԯL௚گ2`bdfhjlnpr"$V&[9(?֯8 024&6>AEfhjlnrg7{pG  1 *$&. "01& @¦ H O#6 "$&*>.Z(,024BDFD|~JFHNX@Bxz\U ZdbfL " + WBb },f `de@BDF{h'jHȨP¨`ʨPĮ̃ƨ@Ψ $& "(*,.02HJLNPRTVetXZ46dddBDF8:<jtFDާ`b@BDFHJLNPRTVXZ\^ҧħ̧ΧЧʧd§ ST "$&(*,.02468:<>NPRT`bdhfjpvVXES YC  ̫h FD"DD$XZ \ ^ `bdfhjln@ATB<"$&(*,.02468:>IAVDS.  CM DAEBM*$/%[4\*C4[~ KsE5 )t!_GCJ =-Xvk,>GnZaM<e'y.c[]lXI#js|qPRSTFCCV{a?{ p &aF +Qj\ Q }T% <'Dio{!4 !: sI6 +&!_c%j(m(] w@ &X q" qWBCZ    LNSDF9210022200449999:99:99 00:00:00LUMIX G 20/F1.700BG3154473NO-ACCESSORY00000009999:99:99 00:00:009999:99:99 00:00:009999:99:99 00:00:009999:99:99 00:00:00 R980100D"L"(T"  """"&&&&"""""""""""""""""""""""""""""""""""""""""""""""""""""""x! }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?xxc\nEƦ_xF4/Z;0x?QGf4h'=ú˜-s 1z86c~?N[;lsGZ=? 2Ut# t<| 1Oҏ9^ |pT31%٪Zo-G3FǣPOkX~xఋG?(%֞(IB6b.F:KjzΗTzO탌[ wA -X'XǍ!͓F!zg̵}Q*)RW[|8o5cm3o*V*timRx71{9G3lqGs<_,,Qzά$WOq( qJs7P瞣dݚgM!|b9;Oڦh:<`LsS?0d%UvTi @zR`Il/9?JFvMgϊݫQa^ ~SͼnHİqں)Fgm^ڤ[$PGüծaՕ-/°W8'#֢ڻ^Э{3bܨ2&OKR$c}(g7#ҷ#կ/-KX^uc^.9N61XWwlIβI91;I P<#ٯf#;+`G=u&h-<&PJypZkQ[r.N9nQsn#<҉ ,`\sޙ@(dheU`g3]|vnqSRAu)R<|`)dӚ3~z3Y4wfHh qV[!2dFĉ@#(緵wW./F[G$7;[[EM54"ܫ ] WZ%` ^KQ..V-IJ;Hlv敼2_/`07&t#2%ɚ9%y%L=xtsw d0+ nB͒;qOr=,sn;թK0nEC:nbX8V:B`wAFQ)'=I{tKK"c%rn[ ~cwxm8$` r;c=e\4re"ۿ# Z[[Pea9e&d`[$@diٷD#'%z^Q!HiΒA񊲺e /.Rc(bpONGԒ@v Ս-#E8+1.u'pXV""ݾr''7IO6LX.>ok3a cӵ%UY 7,B$dvW=?Yӥd99).k Fn)UU/szS(dxȟ Nya#1P9ոCʙr ȧnuVo=m=Cs:tj&IypⱧ؎vifw=H?jĔH Gŀi$K15Jp6忋? pAs $εpU s5W-,ђ(3ީ\8a+6 DVCdG$'5~q5SY^xhNuCV64FHwt\˼R,q땯M6vKs ;?_jN:\gP_vk? Fq dqTn~izO/nh_1@Th¢g /ie۬/!+7҄*Vxq'OpU8*2I8ޭ=IjV+: V5e+2%*dK #n"JCAʖ@ٳΆy>Y^YL7}kMj-@nks*'~l砧+"msȨ[Q4Ǒݎ܃nV2(nǮj'fPD`Π!1Gc?PU۴I4$'3tR 1n#$@a3e$X@^CV% g0Tx<µ㻾{k%8+5{]6rFpĹvGj&ֵ쥳KBI}ë⍥R7ny2~]f @`2 €yݔ-BJrBlrpN}l_x_OM8y{_jޥnc/bp7Ȓ6:gaXX@L ?1684QVcO5bvd{G-g–ښmxVGfw5%cX? Y㎆{CyֱmGEiڸ.U2$:۵t6ֶYsqꨭ{mboZK{;MT̀皩<4/>QYrKF rena[+wӈRnߟz̟ᇃä t'v?Jk\4 _ |-]9r[2r2jv>,PHz`}qE%nA ~Y3V]W gԤʾT$ţRRrH ʽ֯fFgLPz<})RzjcmϙggJŒm!A]{laCqʥa{:t?R.=N~^{cҪt:´U݃\IdUaNeMb?'Qi3]#c$t<{+E0%'PiVJtd__5DYAcEz-~Qؠ(ʨ{qߞRJ#$])[EÑ+`.-VO%Ӥծ4]3dW-eF~yk1 ][F5JIV9 3=#lSn{ 2scƅ C1m`LUQTĞ:P4J$Ԯw$gZ]y会S)˫en?N)8m|-y,ypFǹ +%,sɭͲ7r9lg^Y%11y&Iqϥ[YX e X{c77vsMke$FGc G1މB{9l*%ekwjnldX`GMǣݞ w{OjK "\ T8G9Z쑮*3>ki;o%#DK*:`n:\ ;0vbgێ~ڈOyƫtKpCɑ9= k^kڏ7Amh;8˹;TԚhiٰtQ3H+Zl`4mmdROmV(L#hDrH;Nv@[BXz9f[%N3|5YkצXB@-GZզyʺwz]]2ݽE,DKko0,oUxuE*퓷I?9S-IHG8Ok"IaI$F԰8#~՛=ee8$ǣ-庂$ 5αgx?4՟($֯FU̹'rA$Tګ}i%Hd+3IUΚnILB\l%ۑؑUȯgG(U93R&ҋmEx܇#pwǯ֦Qc# 2q~6FsM>m!'0Nq9A)i9һPuwo!b==vi+6fn@X\ ?+^ZY ʐzNkVCqꙢ5+7DRBXٮZ&q  g=ZܴRE1m˼^N}9+Qc^-IP&-u `gc8jFTd\mۮj:2מݏ~]>i Hb?/B>ngR< n1ͷ:}k9\Xԕ`a9'g$Ze/*A<{^&`$瞕*V-j@Ĥ~ƶ1w*sߞ|b{#Xg69bJ-ӪG=ho\0cW7-$0$(~8 Y^"gf}AЅ`1=\orZGk/|M<]TxĬ2 qty#w}G\/KFX'YMj.\2d/!ך,qPR̷`Ri>}~uw?ZM.wS|NMh}y}pqSԉ$~y:ti_9!|f Եr/?ƃj,04rCsK:u?ҝKQ#9!\'z^O4GP=o8iƎX*iwjZ>'uB0u+O'C1?uLcJ4WT _;oh3CC! J!1"AQ#2aq B3R$%Cbr4&c 5S>!1AQ"aq2#BRb$3r4 ?ޯ,1طjͪA=uyqVZ; ʻ:u<%~0`ǜ˛^R U P2 5gn)$1fǭ|h~|Ul3k @+$b'Zf{Hqܰ{<%~? 6,_G~r!7AӪۑ!=ЉhE\!+UDf!Vgz+~<0.]9hDە* }֘~,-Ry9o_`+4?Sa<3˚;̺>? :ܥNiUʇheP/ث$ |pLR7-AEx+\Psҝ'_fUKqY4d Uވ#_>ze Lf(vY83Te뤑K[!S~<'qTFwx-Ze 2Nt?ќmWbC \/n"Vt*܁<)'~]fqʐLmTˎ ^LaXUz@V.-KC栕iXӱnzҼ7*: Z uݺ2uM wcWQuTaG8Km쮻Si )V6!4o$F]0d`ڂDo&3"ٛ BIJ6o[[(+{c"`ga"Z{P$@rUi*f@/4wIB{ZYиJJN^76dn*MfGRƉ l1GoC5݅i9n;߃=!}rR`|:QoUqS?eT3ewWק]ܒ\}k ˋf6I޼|y~}P|-xU ]N,m >OW6(M(2qhPꌟ/7=.ع%sfwY[iE "?μy兒i+FX<3f#(qO;vʺ'h2mi)A[щ;㥳 t19{}Zl.)ՊfwN܀I]kc`rGo|;UݢQ=*,0à-xBA!2}>F+s}D|tv}bQ+VQuU1ζɸJ`;ztI69XQNN-6VN\?=Vˑutfb!OyB['X!hqC-v KS+A)Vs?ͭk;-ܝtQN'uRF|/+H4G~h=̮ZjUH?(Չ]G$޺ErSr:иbKubxmkQ6}DŽ|RiްJY >+{dXk?#25ȃIbO|yL% H~)R6}KDF 3Hv?kǒDq5r^^|u7XiV(=Hҳ =-eIA>4~>UCq5'ӪJm^1}MrܕgÈ}#/tO$uKm߶^r*j4LFb::q>:J5kZ:bIT3+WǀU@zւaE%$ }r:ڬ~%CC-z{kj$K܌Z4I5J4MtL@:;@qJ+1# Yq/6FRO=ʖnfc436j6PBFq=U?dZOyTC$MhW@O5ܴgeq7}(ԑPU GG߮ j$~*ZLRn\b<F,x@~uk?mEg)9ֹ*nI5ҹo$edWN޽ lGuQNⅲqRέNUJT̀,ktGBMa1 ^\<k~Q_jXizGfL?/F 3𪯺{YV 2=u"6E  kDk>zEK7XZ2C τUÓ_<s֋qP YiҭU'^<ʦQmHz A$jy)dV4Zh0+<_~zec]4$S9#F~ִ.4;c\/p$3K9' $(R,gt*MWX gHL҂ĦEkvx7O`l֞, Վ/9Y|7TO[ejzWR57!*f'tdeR>\v`!G{-YuilWp:ιh~5N O x$YrǛ5i,XѭNWK`)"Dq$7Gfk! @:SLEz33}[;NxA_F O?7Nht Ul*9VvWj\ 4WiOW!$g??k ~~:<F1vjZ'??Y/TN|6i)=jڛ3WX#^3AL_꫻Wyg x&Qlm}J :x] {I$>T,&^+5+ŎMLq,H<ן=Fqj^kJ$.v@A~QBW[X2~3ݽ8Z)/u|j>94Tt^S}i-Jnd7D׬eĂQ+{v.JS8(Dw.ӧ<B}@7 0~-`ӮNb̿:eȭ53Cfħi<||I$WP6)c&Ls=;!i#_㨶vo.ua@wEuG5_w6c'3~\@|t B$82msMh[҄\AfCcCoܖem?X\;^9تR[I~0K˰smUR5~ F$r9r6Z0J2_o090_ G2a'K]3oʽ6ȭT*Ij/uL#}WswZd,!HC ;>E)翏]9nфj^J"N෎+cΫֈ#gޙ#c, K,P 9VC-y$1X%Txcˎ‚GK&@gLgh ,$oUrGz' 3E 7]trs?_ҏfհc^HxA\+{OG]ʙR%^ ");*B)oy?۬啊 0OåXr7˺+$r5BJnW5))I2u'Wq~++?l+Ѫ4N1a!P$.#4Z,덴1A.X;#IÎ5?d.oU㜴+!ӗcit*Wz*t&Xe⑕{E~]ugH,UG4/?% 0I޳֭fym #cU'^j"'|y=f-!IFIʸY"![SCɁ-`7UgѸ2W'9x=a:%A$**t@]L5`ZemX~~z%5-*eU,)%3<:']gԠ0cלt@v^|sDtWeh YH ׭&/Bߞ(šb%T6Ñl:ݷwJ6#]nX[J4b`ylEڂAǁԅZ89PID4tz6Jr>J )-p,cc+IDh+l__BjwT%ɇGgAھwdTּLew~"TЎjagiחPxt2HkmUi8I-Y$ef+$ .[ݡ#RIL UJRoFx{l& hkݿv'쥚Hb Iߐ\8` >GLJ.[0| ¯?tSN9m4Yg %V6NY>9on,wobAG"(愿}NH||O  >d\ZZؖױn-vY,zy;hb ڭ<5K9K 2K4J?$~ %1?zC4/NӴf ;0VJxB!M_}Se * s0V`HalmWeDNmdi)\{kXH2FE(F孩Mk҂Z@vF2>OΆHB8zbE3CKLk8qYk-}ɾ܊멭de0ъ%%rk LJ9ۯ6(;z=ە$.㫓cœf&ok,bQ,RU~/ y+툭zHPJb>!xVcrPO,<^~S?p@^6H,;;G['yy{iyLV.as_ƕ{\\ foRǒyyBK15 hK4*%;{kkzA˖@H(@qT,8c^:tFk#ux4~\UwUJH)1|"sNb-lKy#@*@T<:kvq3ىdmSìڞ7aA.#4= *&ذ>SZ s|A#Y1tUQlBy ~y~ e5䐌֟s'F{{xH$6H; hTlޙ[ 8۳ %`5[f}.[:.6Fg@2<:ʕuՠV6*kǔ(c\Ym0jd,VkC*ZfmA%οa7ul.F6LS98!r4$_dm–IG@3me*\{Ou%t,D WT8mL 0YW#kc@^0YpQDHG>^F?'\TȀyh>bcCC'q IjzkrBTKST)txxb<|uK\oEIm#j=zKD[LRA.O ?l++O^UZueU31x7woѣJPZԣUl %a^Й3&ǍCܿjJ&lB1[_!ξ>~tz_ (u1CT4q$aUn 7ccx7lږĊQSRqBi@Gיۻو? (׽aWIXh]U{='UݳGpVQ*#*ϥ%ܸOzSd{~vlkSSkGciozz"+ >&Q 5' ]ELm{T\L35]M|tfoǙwv3af%[&-yU@k QSm V`P۩w,lPQA'c:hWY^>VJMq{l@|$k%vJ-LO3 mІG{#X;sVX76 (uiLX  :vt-C (ʄ{ss5\^&X[~qo5^tw z͛V=h2@`0lxޏr嶐4V#%D4/Rʱ db.ʤꆿ~kM4sy 1;#Z]y>MY<W/M-CUy6n2Ef;V/ςtNglg 3EvG;/3"E. oڛJRhS$U<{Zgf{ ׹ ䷟On#(DPɚBJ vG#.BF tMک szeY ]u#Զ8A=Ry>}Qv`IBQ3VqP9E]:VҊvNid?t,2 qҍ[yrڭK%($GY ϟWJ⠚Zk<2I$t$IFcΈe<Хa+GL@=Vىv[%H0G|)<'[uC|4Mu].ާo끢մa-x2`[c=X;#ֳ-<bƵ1y;ּMv E:vx[NJu1ɋ$YQox#L@?;sv>i!T]dUq  !t!~>@w ^pyRlسUQZ"#G F ƴߑKN *#A@  P=IϖҴIi'a(HJ˒:bI$a*wo52,A0nJnBIP@]b#LaJVgx$#D~ $4|J9nU[%Ky"((|5iAG((دN87l|:k$ b[g - yt92,lن698OE: |~tOY;dqDgʘNOe6ů+<}k='J6FO=`6frdbyi xѥhyX†#reHk[OQXb6o܌Xدov)$)Ńh*Iw.gjfilUY4(\l"I05ΠN=9]1B& i~MܩVpF鮸\^b!Ԟpi{"BA66u֞fR6!q&V+yO>RJsp5r6gYk}Rل'I^LA!/֏V2TlEQӦBbHG`,#X%Y}!ɐD > rbWAocnZU#] BC+ Mt?qz^'>͜"*u_N_:㦩[%9,hzrvWL@F-W ,4sJ I%:PӚ1^Bh@ֈ6v5ufPi 9# d"HѱJ7"*Q|L Bkv/{۷@vJ5/*r8V33%z*+h.?_Euotf$+ ,lO' +bFoeiuܼ'̑z\)zFjnVnBEIY P:`l5cխ}˔^1#Ot??Z؋pŃh:R&pyI6K#w^R-\sk`>Ok*2WzᢒNd7$cՕ-[*(SdN۱ފw/m;ml ɒQE'eĝ'Wl"Ŭk8`ϐ4l#|t- mٹ7JOT6O =SuܱUSJDL#ym߿Oqd),Zb`7JX~]OhwY5Y-/0)~~ٱx̎:w.rvX㡿ҿR|G}q "; Fzn?ido{TmΌ>LΨ\y;׀GN.bsaTt6gεzz~y42b @m 3I$pJ::|=i)܁ K'b~l.{F4;RЇF;Tvֳ1`; .׏})>ٞ9g^@;wXphdc̗s^կ8UZ/٠Ëo,fTv<ୱ:뮡͓Z52]ym~R$dՍ ~$>\ڒ|tW R| V*+b$xF( lZKGSqG,_|^[$)'Ǒu[񓝁ng"(}yr1Iy~m%ݧ_ֺؙ5'ͽ\m5,㰡l#>YJ GGCvOPrf9oJ]'*S&v"xHjME' 7ƺ;,*̓ljZF\yu041NƺeGVdv< >B:U~YZdWh|CÌ:x\lb본^kl *+@z?Kqj:v[L[ዻy"sJK:N9nl#5 qLεt R0fcyDZ)YlveлrׯH8@`|OXf/UQIaa(qZ 6Akְ'nqJ+*ٕ WY=e$|O?:N팦6qvhB7[ m<wlշb rډmp> ;F3{{r >52xrAagB7.a~=}nFV fOB u'|*A8 ޒ - zR8QA^BIXkr͖E*yғ:=2NjVQB#Gh#ΠՙyBֵ~W:W14Y1\_JU0 R|JЄ+9aAl5tq)TԆ;>6y<+4[jbU4 E!;OW7 BPIP#$)jcKr,q6^*%`e+Kliu UY,MY;8T( 써  L\(do:ҝ/fZ1gb,Wao)~њg\^U%RVb KPA>>unYme+ҹ5Us$I!_ᬊ7[+ \L*<0؊Ŝ"TI>]3NCoX0PwCׅ1G)RƸ?><|wvƮߓEBU>"<ФqiS%zn@|{#t~?8p׭C'W!V`$ ˌe$(y{d{zEmjHR#r\Y4Y % th#eɭ>b JX8Y ^K῔zQFc?::IYϭцX֠lU̹dBir((HϟIvR|X֒F9}XWӨa@~I][.%5@33RQ1εbe[V`֑CUv5$w:c-elύP˩~9!:$~7wlRy1&-.{UoJ=X]0*P6yqn3/wSaLoT ")$j] Ž٫_jFU䱘ZBxDQB7-޾J^E{/0g~_)& QW}9TZ Niڑd3q޿O:p ++/NImL,y'0έF2BH6Xޝ8 e5fJ^F5PYFQ dkgWOGuw=W)T, OuwUF+rSrXFRhj"h"N ;'%11L2a <摒,?K0-K3X8n6FKw5X|Wgb7hPO?8B~>D㸠v&KSW]Hteu(swgk”aqH㏈Շ/}vBJV {6KD,P[(ߙJGP(gן_uV]$UoeDl %yn6ik8!E\svg{^x]Au_vܑ%mvK[~HOSt !0$mԐ慑V!n3 :goVo_]♣@޶?Z% WR+9Yh#1`hEQN֫Jg_vjn*M@†ltZ:8z. VCIӗoŞA0Vǻ 7bBRw?jf!f;ǗOre׷cB޻2UnYI*| yQ.5kk&HRX;<݃̐+xRw ] jj3Sɒ3~No^{,V'ɉZ1<eRSȃߟ_KU޼=vx`l'ׅWV;RM>Z`q,ܿ<5z0XۿS5>,v:;o]d-yӖRUW29{d{I3M{_Le G|53`$.ߡn|~`bš .Gx;@ן%[[ 2`cot\Kw ^rIk4Q/zER;:#]'䢔VRWXd]Cƾ۔[\zg3hʅVfEhӥ̛EsE D阝rק(2)@{#^ykqЅI?  ~gΖ)bj4rfWt6P |s$߀Su_.!{qm\b>9zp[m,eB'2uNF %֫}T0s`6-:aII4J:v(q26|Oֈw @t-$Yar̐?mBשQN]x!dk4!'˝ 7ƇW$HHTE\W`UNtD_g_??Nuh& Igu>LIJǗODwQsgO*@bnR SY1om~~|"V8xbZtj  ow[jȈPDYiBLͪ,u1'hD#Z#ϟvC8Gk#j#Jв6@""WBb0jζ幒2\ݫC0>GtA xa(-lC 2(&>(#bG5g2y(ܷfwꦵ^dVUiy+c 6Oz)3\v$I;8~Z:BnnuYpaNk6,-ii<2F7E W]S*Jzx+=vՉ=JvIkĞͩ,s VP;7#١Z;)d`c1> `AUMYYpV,R9Gz#н&=T1Uwk:㐦Y X / *#&Mu.[dqwli2UrQ558_M~!+ك8wnMG`y VK!5c,J 5Y?ۤl|N>XJ]ځ<u2ECEu{S}p9csŦ# 6D>xB 6~O_qrMoHc r I k Rڐ7Z[B_ Th$hO$$co7 ~1x ةVUҕ^< ,  5y&bcDF8DT;6ׅiV"<κ :XGo(cג{)(4Fʒκ<ij8˸h٧i5`:c{>5x]On<9bI糅h8{^z|LrAc~Xg]?~8vxXvJ<׃WݥA&d{%*jH`XXa ] 'kNw5޴gƿԔeyEqrw|:AmR3<ԃI"RժrC|hh:[,I;w焈 >nS0'~5IqB߻4H[ݯt|5xf]Op;iX%Wϗf|$zĚF;BG:9urRp7ג5"cXijcsf8Q1:Sl!'6 ήb;!\73Y-s|rػntu5JLLUKc J>Vkic_a'?>Nj!Ľ{_xϝNSx@zݞ&NM>kŒ$|a"y#Uْ6~ݻBiJxۛ@# tyo?h\$Qkv|~VB 6oD ;F:pJgOc.Z^\V:C҆YRbԨwm2|*܏l~< H`y#}.>Eޭ 9skph*j]r>1eSb~#ZΉ$~GMMNK-hI2 ^D1;Sƾ:rӉ^T@&EB@+4l%aj-y㍗C|| x:_[PKA.>y^6۵e7޺?t"DDz^AV,6["Z]aA:u7)'%BJR6!X.읒vL6X'́pH ٖ K(iP:y ?sk6B:P4f_`@cwsQ$4MofmҀj6* ]N@>4?'*Hm^1<"^5b_Gl|['7_!vJ7{2b+bv?zu&fEu+U1c[:-1,pB dSxu?=YVUc^ȼsp N-/ۿNte_ґ9QS3 90LFW֘6< xιcvKpjEbL򙼩 vtvXxz(/L^\WjJr{QbijRof$:c!'~$E^fՅc4BP2X[$Y G$qZtLXl@]Ύ*LѼOb@=_f::>6ߎ< xKOJhgy2 (I=]N'@o;~Ň0A,菾*8Z]oZ>PyԀq*8hj,%0Ԑ8{LN'#^f AI]W|AU6ӏwG?_*Lr4)@!C(,!)V)U O ȑ9>JSzʈ$MفyA|2KYǣSL VjT13dk$*qgR8>tzAPEJ1|=Es"mdV+z젙>"*޶4I pwֵBX!cH]Uaæ'` ꧰v80>c^U Wvdk%y=@y<ֳfOPY?0aE|z/xZْ Ueϯ5fLuWGjJ#H<ZVedxL1AtkUlZLJPdȃ*<- *W8*hA-Ƭ朵~55ִCn_OhVxLj(aH>7~:Yڴ0gfe$$$ mٴ/g 2R9uBͦ;>OǞu[jpH_tLUOwaIWuɚI]HJk} ^wi(C#(x}kQ[A=q]Ja<p\T24+8m2 }bH#}eCptNr̵{p]-w}LJ)_i Z5jѤꑻ߷Vs,P|Hb UaYnt3&bٯ;(5dˢvo}^VG(/- yA@Cj7&ʦ&]g"A)̐H?:C9s*qZs)w꡾+L7b'~f2}PRRU|+=v3-QKK1M3>Lj\\V̥dA CO&+J$(_yɏ,Neڊ:y)>u \{_m7kOL2pTl#~<|ec[fY}kgpHR_;_xKwR! ; cjix+M-/f-HUV߈2xRS^%  %:S!$  }#I8V? A|뎭嫥|/k{~:+LgXfu o3؆ i:mC2 GbE#SIgbbg06TOB//>/}H%d [MO|qw `S/ ?`=ST:^-#W5u,>!té}(09Ϯ{34JX_184yHYU '|ohhɎy+8qʱkQTgQZ=ƿI;glt)LF6lmc `9!#_f%҅jD>eeTz!I:X ]#qEE0)?mU.sAY [2Ft@,lX F9.?O;iJcT ѷC0 v4諬U)M<\7WO t$FekkYύ蓢OGfb*=%+uLL *OvzxIT%?'RN&ljA,#XR99|>zvI?mHpDR:IQq]FQfi$V1ynl6Rɡ?5 B#h2iHזINyMw[-\|$B3/R<#7ϥAHڈPMb*`Z>=^*ZCW^eq>|obc!62])+;q 8^>\ ґU.)dSPd!,3O"H:!=2$O QQqU?{[=SOCQgw]`#juFAOw)wN?J;3cX cCv:o2BE,8udPi|넶_jf0u2]˘9Zܠ5bA#X[?ΠxkGvwD8(-F*Ф?l~dOyߓ%b| `tb%&#BxT?!~t|}`nv~ִ3Mϊ!$qbt8`~|oų(l}fi35&Q| lo\| oǂ|l}y2Y~~Dr6K/-$BҌ]jy0iAWw q\9nL~/-O=fXz\`/y p|~T> QjHH=1eNo!{6F(fFJn1]HȄbkMQ% clmEF Yp83c#ʂ:)w|Cd: G쐘ղ3۪s 3E@EܣǏ vN>qQd}cz'J̧HߍckVRsuң1C}%X,\SC&Pz_*R[ וUx"~~XkpX|gݵx+0N(aŷH?>Hov6&k ƌ2%6|=rJPZ!WdYnۓEdma ?yʸ̶>qr3/8fR PK}\:P?9cΪ~O!GbtHuE2%'%~!]iwӤ,6*qkdqi4 TҲ+ IJc~\$Pb^?<̎ᢙɌ|`A+,ڽ:cf)i^ Հ232'1噁$:!h28޺уo' p%|Z&sDL(jAnRK*cX Dt=ҟX|Q,g(>NJZ$b=yH9;$HvymO$sb%jttt YiDZ! `%H>:rYWhIx~95d.8W3OR(e(PTx:vܞ1s{|CG.": Ifm a_"wzT T?=?lz r]s/ cʓ>zXx~Y魎CV?FQߝ <\yE0F @K&nv]cՒ0΀ ]7!h)'q|h* NnC8zZ"ZYK61TyFA yhlD^+k!xbe)!>xe=G%3Lcz&xCbV NcM龭o?fY6zSCƣ7˲FvOpѐ>r>ŧUncFp#8f; zR.UO䝝HO#`~:t+ UvVG>闋IQ!)Ӿ=VFv:;/5xx+@lL tR{PVd-';[eR*~ש=q0c&:Ć{b,r!}|uH48 0PzڧS~ijUwR4 P*?9!Rcޣ _hGc"U<46? 0uPc"`}%nL :]6I74+{ %?badqH@#A=drxc%dq b !??C| EIO/FmQR=b[k53(j)c|8BP4 ' N>O6ކCk&!zLVў4~Fd|\uL3#^>AZZCi& yDL RhËwj{Qcd/Ki!bO5OgiwM;VS`X* KvaOתق,vyԆR}('['PSQԊu[sQw)w%7lb$]E&)DIb4I[KD䅬Lt,,uhZE )~$=b<74*Fɘ$n!4:|j󎄽RJj2 c>,FU;|^J77dqC!JW<Ϩ_<@Ԩrs *BFvl[`JXI$DiK EԯTI{NTieaI64a.WpZN P}GFA/ܴ{NWӬVlcqA~Q;p+~~zGe22c|RU )y·%v><haˆHg8OJ_Cb:׬]gn{ =egW/| DuvpZGJY/X_PSMb7lR\Ry%NՖ[%x Zѷf~hS>KbXӘ1hf+:-g_(C/ב綠}X|>&f휦Z{s?eYBv4hVJ $Nوt G3vD4npݙUt8 7veEZX$*2#uyVJyvH<\oFa)*8;:q;ݫav&# ܅gr kٻoGTm]5;'7v @!nW(KM'&V,峯st6Bs[ FBi~uұ<[]Y;ڠU%#_` ?mzD*A|J"rT!KR)b@O +Dzsx)e+y4-+{fE@ۥ; .G=9J8j5EIeUK5]oN#ύOu*?4Տh;$3PO) vHn\H@DQlwtiM%Ǥ913, KbɦV'{"g""y+{Y12Ib_$x 6%aCR3*ѣZ(j ye')Њ3&Jbg@$*Ύ|ɐF޾B^F %zw+#}mw`A*Glςڙ;zD_C?7.[+Z>}ZLŪ>?H4AB2D$V{/td1Ŧ'}bG ʧ\`Is^Imj)AW&0jz S#)f1䪱 $#^i+IyFÌ zj$eQ>!#[ғ^z+1ň]h' k,YhՃцIo?;$KIJr*)V#3v_hU?|FNfZZw"ڟ&b[Nٯl;#Vx$|rPHQlbgN6D;RH آPD?;g5+tGǺꑙ<,.Ώ?VI2>5Vi'-sSG"LMn\dfrIv}:񯎒rXRQ-yɾGA0P~wߙ-[~QG=EJ8/D{];N;%Nǝ%JlkEŧdX:Ҕhcv]- "kmF3<+}:uaTҞ+ifٳQW(!'e$_U׷,>ԅN=mQa`Vx3J¦ !k-mw|49> Rӻ)N„3 `kGזҭ[JJΟhZx4E2֌9 d1>^ݫ/cazo{;ىԬH=͏n璤58 % g41eOl-.>&? bJJ;$QDZ/ỵ8Gm0q04-ڬ|M%L QA'CpiO?<DQn4"^ΚVZE,yI'W $[Po!r`VI')6} #[A'j[mhPcˆtʋjq#^Иap&p2HOxڛY;d^n%yc$!E8_Z}`y xߏK˨{l}ȠKӖ#ҀOz~S=[YK*Y%:ک;Mmx3ٿoo:u#ޢ3REfZ8U}Oj+SERI+ed  yz2xlG۟uxL|m#fn.#cI8#6GsrZ+/ppC+Ct%Xq+.FpұB=cZr42I<&s]mie5{#Y^cY6,L$?~|履V"PW1KZ%YVS¼ ;*|ﳚIh"0 6R ,b@ + =yCDi:@I0*;$l?*j8{JuD`xO`qLiDRrwWv/1 {Y$ Q74/ "$qO;Nw4t +ՌתX0;]6|VJXTQɦr1y9Ll)?cE`@qkKZ>z[Zid4 Ec8h=C'ȥְ){)#NL>OLqX?ݶV{Z"ә5(}m?pݳh83 E{--XI-u1<ܐIͶUO#η{r\ld,5:A 2F4 +Âq ܯ)Wٖ7Nk7C9ȽQ]T)ov㭕-@*; |GڍbIȑI 6B6-iUS?׮7";&?F㽓eQm)[uW ~8N?֒j%$4ϲk-zJXHGIg.(PNϒ@?ץ=KtI:"A 9~ֵ}?ijd$̙>9҄I**;WXX*BUO/ [:n͊gHdH@KFī.5|g b!DPwS_#Ws@XFS*P{#b`x"U#Qfkz>!lP|ɠgө^i]ǎd;N* K Ph-۲#G F9H Adx=ZuX'׮U6C@M?Ԯ>=UdDF@WAO/jȕ,QK|I q<=͆auۥOj_JSd9 =cJ$,3_? ~7iЇ%"cܖRi[+ ~AKK)Qr1&jh$ruk,䳫Ո˶) `xו*Yɉiq 3ó)co=V!ej A;yTz&%խf1:7)?/Z u{+c1Xu 4զ}^K/Ӽ9ީSv,hϼQjv|(!Ŵd-JoG oWrۥRAKmJ,.|]pfIyߞؠ)N(2rL-AoFabLAQC:^?#z^UY̊U`x+꽆{e(^A%"qUXH#e܆V 2h[;OTGt{5J,\lR)p?/Fƀ ZV="f'q^*mš|.mgo_wnR)ѣ$Ql {v1qdݑWn>QЎӴVk26ү4ܽxkHHg-&W8|u4 rPѰ5|lx )H= pP9 ?>O=l8cNMuNQ3fju$^W+?pUk~ӿsH!%RrIā,DV0z`jNsH}grj3NT߭3O rHYGpCNifkc^zvh? oOay{޳{r8FjXK0RUZpTain1z5m/@=ercz[w_I~zͳjI#$v-A6q<[&PԪ<$E m_Y T=8-_ PiCx 6AR3El}ْX1#+e( qćSxza$#Z'yf,W^wZ.pm3HbNy2[d !<^U U?<|@+`1Ij#KZUHT,UJyn-ya^K+fGQ]ߝkli2T<A,EIm὘b#%Zq,SFPyֈE4vob~\4$-x_i4X~C8L|n!4qQ'C+h>yí6au}ǥp?˕SbB̈ ! u@[1LTRWE!u&'6bN{huK\6< GN&> @cb=t|hnڷnbR\ bb;pPP#|iq4E)2=QZfFxy=qRTWJ/qzh,/ 'Od7hë}ED_}"[>AݞZx]F$Wd2z7RWJyVĩ2ظF ee8H g_#тEyG"e1xlI~Z~X6tz#G%,A})qh%Hd"=ث$f2?WNY'2,mIJXc|NπףTSZ^ +C5:ZY+qˈO˻wSfYo ={Ó-fi%F֕qt46LFxmL۰ uKP&HX)deC:~,~lvj;dWXh#${}0b[ߑǥ.o͢Cq!cM\6{+3k mۼcՕD\WWo!qL=gKdHMF?B>AT_`%^V+v,w1a3D=/wHw__eH^6I}i|j>)*D$taM&d_c;rނCɘ%uUf/.a36#BDl|[hSjN_PT)yڬAw30g I,M`\XS[O,~k۫}-C]mU:Vn6~Xc&. n@TԄ!+cL)`ZtI#ŶIx_=Z.E:IS*ZkY<Op-VvύII'~o4nOyQGvRAޔ+)&rT-uVO{T w7գkGdӡǖ▹[K%ʝŮC 6FCؽ4h*B)!67-VOrLU |ɈF`ֵ=n6uN?t gR&)`5}27!tN4#.nrxc56$y{D ƘN٤ld? [MJ8=ƫqd䭿x~?TO~S)lj#|٧Q4CuG=/hDr]q$vF͊L/r/m"h;$/=zeeɋ*xÄ{Dx|bDgr>T4Vf㻏F z+Mq"L%3Aڧl5twWvS6KbpE(E :4wzbs򙏕 %ۈw\Vݵ r2Z^;?b/z^ kl—A%E %N:rZҜ =zԩOOrkO ׿~ifdZB,)XϷy p~ v; ])PM,p3#:h ŖSDL (u߾ McѬd̜ n}r{ d^,ŮJbIVB΢RWIB@g}UܹnI8z!dޔS.VqNPHՙV\N5c!Wb1XHɑ S^zptʂN98]`Ito(nm_Q  m%cݕ-IrQirSdV$|t] Q#<* Vk6hEha3%&C5BDhy4pesIJY($HW^L[Xg-%D`v|VU 㧆㲯Zј~*NQl"Ĝ%"<F||Օ(&~^7Ǔ7-9dHdEH|]TvY{R<<{aI7^Vm |yr>˞ -ݎJ8G 㭆] f䃃{¯31|OFn=i_,FBXUtFI!ve;[$?V1fOGؐ1e!oĸuo(֥*$is2u̘h~eHB f;%ǑNXZs!vէӱ1sp[Q{3|lB<;]ht,vaGltRFzP175 #`5ˋ0Yx$/]oǏu9! / b 8{RHYNqqi:B?ƇFVFfb՚fVTD?AG_XJBU>H٬Wnz]L c|ˍz?G-ܮ#m2ML|l;VkGl ±%k+/?{b=r uc}>ʵ[TfhMO$o痏EҵFjġ#Rq{3/ZTfFx(><\cwD!e\$ ӷM۶rdVq+Q#V# 0dVbZ21!C:0גWd^jHb-ڞ3Dsl k^*\?I84Yފ<%0XB[f.[JQd \ 6 \9)IޘZ"ԙAϙMeȂ Cs{8Y9=}ȿk y(DNgGfr -ƫ^L`RWSɽ`WtqK%VVI;1n%!@y$<A>_"*(I ĄTنǬXAHT ǁv| |xiVhm5))QdžWq(cRSo˚1KJJd@k^u^^@Ty+F, Z P 9yKB1enWva:6}'$&ηE֡ 5fTܯxeQyޒ40F1P?ףT1񱔷eK'L> 8;nDƉ7,dWJ9!$;K;̌X?̾{ ,RYrO14a@FF:liNSφ:1'lmlqV ,,mXof Ue2|xcC+'Xi_! sʠF[XxP4NGsd?믍E E3T(~z8)n;\|U]i_nC=ԛ%WV`vmF97eGOYK)s[) bˁʺ2<K/>yc*3=0(d{KQp!>}͂?q+v}&I}<޾hD֓0Dda<-L=nEg{7ڎcqڟDx. 3UJ%=7en"61=^ykw9/^MnvTy?ޞ{k&c$lDV%X6]{]p{ӷ#̑? q+lmMVǮ>qi\F'v[RC3-|yOP(\|s5)il5?de.~e}onwʓF~\1s =۝B&NlK6> U6SI*7֠e1~lqٚ;[ДIt cɇQc+0GfWf#WREׂ7hGzw/sf(i3jS"ڱc܀cG_i'$ ҋםZ}30ŌjgXeWEAB DFM}Zh:Ƒ;X$nqx` x'#)'>9%8i(Ä.K/ :e6_aP̣d䎱;;Oxu%lG6N:ylkWoc.@sJ/vwmS* 6D}DJxT:}c|SMkoP$om׎)ܰdV׷%p~˫~ vb383P(QPVS|Ng)5 O_[~Zۭ^Cq5fK%jpDflNAo6#]S'Y2O LfZUZ_}KQ+CV<ɉPrm~v[u2˲1ZT#sS/h-eeȵw@?5}$ ۈhى{mB;։o:uƜu&>ŝcrslA3%w3"?ݱW⥽,xs}Jܦ Lah3>_A66 aW_? |J8M]&b(1ք\w;zx8IOpK}rN՝]i2U#aFnAvNO}Zˍ.uҊۿ9|)/Zirt˲|hccڵ bb9(@:c}"R!;M8`9UaܹZ8ٳ֞Lv:!DsWKJ]7 Zy5 dsX`x[$uV{R|IVQ 7奓Ni1f-r4jv]lc/%U,/IŕMDŴy<#7;${#B nzcelg wcZzvl+W8\|H;Kyl׵+ G#ϝuwanѸ&AϘYH-d15Wq >?#fjr*ItѴˎQ}Nц4*i)X溃 Gܑtӫ YB=^>v 2G1?ao>䑲}:w@ꋌ;:#mRnB(w66޵&u6DGJ Wm :]q ow|9?cd>~LAvc|q,bpgcIPjXwH| >z+UXJI'H#Rq<=fxҰ'xDmrPgpB;u}K)8>'$!TD/]ܸH1k)(ktե׳6fZAerI;-c@8":I%80?y #E?+[GyAFw0No8Ԫ F|8f[7~"d,m^P ԺBrx_ RܞxJcgrLKWQ!Nly[42aj]"-AEJou:✶JI9u8ʆRzZ*uDPOш#^4dtcܙ3c1b ϸYYvr)clx:6:Z\A?MyWTW1ێVEgg*e0&Yd.[@^+=w{ S񩋧-"bvxNHR:n+?I;sq.C%Ǐ _*2([oڽ/j dEeuŋH*t]޸oUGnAPBGdEp5#?A_u7->QRZ@;U-ienc?6v~v+(K7e=RR_ۏf(K*@ٸƇ-s::c;]Ô/=l:{;{nJSm1E *ޒԳw|LY~!jg@֬yU_'uP@{X< nl5gF.dc@0?ĨUT|d3ݡҼFY#[Vx<cgX6 GtF厔Ic͔qD6|lѯ8W;-dz͒WO41Lr2׻&c  kGN2pؕjRG,cEA MVy^을XFrFT ¼2Vʍ4`6f< /.$`<7\XK-;v"SHy~VKpyxR͜w,Ꮠ6<N󠺤5}6sҏm wӬ'&4_rSΊWpwoťYFً(b8 cۭhΧg?*@(U.>x"NoC;#MjW; };_kkJA94' humɬѷV_>ր!w;v~Jta#$P/Uߒ +p֥#?*\M;ojױFFRleq!Y|lN֣b21zjM"4$|!8ɼmIX R4uv8ܯF͈# |i\~0 \WR4Z~J=k?uyE+ rDGqL1g^[mb벑Ȁ~~׫ݳFȨ]5@Wŏ.A?#>ةԼ =>WuHX"18ە27A *tI z33RX'd=\NFIri@Dy_>$)Uyѯ2'vY%dhع nqu<9e7A"GHXW ;v=˚F8Cז\<Ǔo^rrapXݻ%df$Y?lz1DPJ~ܒECZ(1tI2ȾK w)؎([Yz謅gtM09~*cRlk>(dxTج0AiK7vi\XxF'b_['^~ۯD{~ܮQeW'Fϖ€OT@-O[rζnpRij&XhĤL2o9}0V-G.JtCCR;ڒJlэVY )Ft\}@ R//{% & t}MA`y|L{j v;k9ԦskJFJ$}-VO&e!J&5I@_ROAP [k$dtE T܍+iaVnzOKF<'^)¤1Jpc*27-seY2Vy"qC)#\Ag)byRTA y;Hl(ָ 7(L9QRbo%.͎F.Aъ"fY#4e$յÒ|u߻~>X2Yrvog8_;|VӸʗjwhasScmzzͮɭҴey؊f;>K#z=|]w"Vv-y0)F䯒 _-;>[*E֖_^Q;Hnp~bޞ >@:G`pǵUZx%f3bJ/,H_@{F %>^Fʴ4^ܹ)"Kͦk{[(_ltmey}}j5i)=C-@( UV@:d%i"FJRRAFy|Gfk9.2; cѿX_Dxw5H3w}rVK K_€vwf&7?_x Gnէ3Krf4^S"+I``?$Ё[ԣrzfYܢ7BWP9 'L֑F6qA$ db]7#oN-d_:RnЦ)d`ᮭInb*~v?56VDRUKs(vjrXLfs%e{|WnEQ|<R5C;d./%B9ƈz|t-.#>,'ϗ\IYMT%5!Cǃ;$r?{㭛qVJ Y䋜,tR)FC}ԫjTږ22[ Tˆ:S]Z'vWjl{$J| G * DKvyE$.Ԫݠm)I'Jkfk7(\1Ȓ _? y(=g-nFB$U8$o^Nu.<LꢥO:4TF(Q-Me4< ŤST?;=im(w5T;A[R'44nJXD52:.<7u=XOoPdp9،pAHܼ"6J|e>*w&Im !e*Qv&A{~X*\%Z\> eT4-Ek]ܹkI_"Ïs?hl ڿ7]pX N&J>8] 7BW}T?ym$qpR"6Βۯ>:1}8<&[x f :cd|l86 I9!8<$h k^'j{b,&%`J<*1kd ~9, bm񚿺<6ն>tS,I1]#,dֶ!YC3=O~b\߷ `=P_[#>9.kqQ/y+/KcJ]lY  $@$5Z,_sޚ}]J2>P. zNƘ>x O@P >5vo7\Ez/VX䬆T2 J;@`-n\i`ɓarA"FqZ8,#F,⃎/CPgS΢PMl'hu? -'YkhX[Ⰷg\V\fҫBTxV_&wtԪ-X{qE%l Ghm@ObeTP2sÐ0׀;\lS:by(mN3!XD<w7P;p:KQ5ejύi< + <ҡ Uh1㉤B4_ԍ篫$-Ǖ*\g4G=cjXZQki^IT i|]>cQA âE<vG4f>x)j@ L//q',HXhyF~.wF3/8*[QY,c Oo~vJZ{X9bhr ZlFYj[ԭpvG1iUjYS'H)G+rPt@Mecz [3/y*52St#%OյvWV*X 5_|Z39.+)w;-nѢ.pThg`㟓xffry+T$[~2'<Hom6H>zͽ"Ԃpq8;m۶sU>s&QD݇) Uuַ78+K\m8gh]$Jj[|I^H)pӊ}JR`}(uV/pݯw픎9^?rhii<v up+ӆw~*E{!4 䝓th 2hFAȦM{)Eې$i4_j[cao2 9fYҗ_ !e(hkKqdBDzǯ 3KWg#5׮݄}-xTCjH¨"R^=>#kdnܟSv!+% >:^q 'sǭ(|M)>6\4nVZ/W$#B>|[Lw߸*CďTǣ4P3pN[:3(`J`kXY8BF^}'Zϩ`^LtKbqԿU(y>z;QnwLo/Nd][ۊ$Q}ŎF]6O* [)PIQ}{g1C#c,L_$@hbu(`lĐ[@ut:^دJ:uj fHظ4  Ǚ 9p81934S~ʢEFhU#rW'|#^:Pmts{9ZZh8XA61ן'mn+P!I$Juʩ,}yUf+cphQF8xm?&.Ƽ].Oݑd1BzmaOį!/XE 棈zބ &VżS^HPX|<| A`bz K\E]q> [M^;x-ƍ =kJ5푤K6Rt>wW+VeRĵ"AUoq~Y6oOSpO⠧zIV:&l WtSY%cȨ>]oqR+,ZxH}o{w(-<"z=PHe_]U-efA F=:O֒HfYm'[o kmզrGBEuC GG/'>0wP-iF)wFK}]B8lnA%Z)+(o֡n4g "F)jgNĸǭ<ݧ[zcοeaɊIҨ~w~t뫾RA2DVQdI0w2)I,jhffX}oM";F竷YXPmI~ 8v7NJ_oja>VM?Qi2sVjylHqq;'ԁ)V6W=OQ1xnۧL#-+Pq>G떭6/]4D<%nr6j,CkMV# \t VO)- =f*ac>BRR(a~A4VVFq)D+a|n'ڷ, o5V3K¢u|AP|.^9Kibw4II Rk}lױ7H3Jm!T8}wlԠKhӉjڞ;/ mm9FU|yG*Jt=ׂ@,{H)F̤<ƼN,nqs Hc|?Ղ^r󅬌N=uMf,&m\MI @xE2@UtUByx{yxLDwca0Rzֵ[Zώс Pw|61Rȥ*FyAߖ^)rRlO]#י8 ;cVZOaCy'4ъOr=KP魛1gZxӢ2'N<oǃ[R(˪>TRJ۠#J=Rgr'A\j#>go1AV59jVITfWM)#B}Cjrf Xr)Rê:#NGX> ^jEg#' Q G/l6zJQIc v`F: ha5lTyŖ@_#֫2q6_ e0V rxBrIF PDA["?FŎ|)I ie4Q*'zuGQ~{tJs;#qRcK1XB:xΥ w^ dD^%5m [f3iަl=}ljiX (̑1JXzv;lN_ui-Sy OMr ǘlע^v]o#UKTjŪhgT{+:+`JB<ŠSEتPDmD,lJ7Xz sFwm-YZV898C?П'=rE8ז%pcra,XkhOCuI;E)f*/޲bݲdu5M-t8Q(LK0y8KD U꣉$FBoY6N0>VB@BF*n|:sYKkV]x莶# arkra-1Kڔf.[fr4hl$CzȊ&VCzkҰvAa; vz6 5w.UkY$#5+'%Vy$T>C*i8#ӕ3A ܟ{TWI,6^h_;"9?@O;ˏhK7UHsNx>5WWhu5gv<KZ\.Bw"~FQD"L^y8[(!X ΆZ<8%)H#;H4Z9V.8;K$Yd1uPGGH}\UrjFU!i4ukD[tNdy  *|K{-ltd$?r]J`Nt>.h ,*eS")S`!/F6wuiI ILRyd!n\YPcG1p^*\Oi*w ZIٹ-*U, WA^Gg{ H9|=xWDaB5vУzkGظ튦F(JI3c/Bf'JF^`(H]>=-=7ec\|x-FЅr+.h썑@#mx y-*vKnj#)/^cZ(Y,A6XDgI?>H)Uní2tlYUHގ~>v5qÔD*g=4L)W'Q1iCa._W!d'ͱ:nK}~>^ه;a]/yb-Bz9}gKF=}w(չ`fۊnvc%جػ*9_Hr6WaMﴙ56{?dc8 ]R@p ^Er wCaѢTO33Τy㏥5NrOjL.X:q1ByYXP1X(dMrd#8)%b9h"cC_Z ԳI g /N.2[^2fV `wCd'5?<"۱MCޛɐ+@Cͩ\Fv JX9Xܜ?r(KKZq hLevcρ.[TYy,b̿(u~lj\g,J PM,4%P* g<0rZx|N0w3o&q y_i(:ѷ ms_^(/D9yV7bw~ѭ[9?8̃d2܈5 #Vi{fa'= :]1r~^!^..cOnrx?ttp[mB$^;>UcfC}vބF3Yd \"u+4$ߴ7m`Y>Ǜ"RN->]+'OڿblxXmbONNعvҀZ3Z~zy~=7'uG“ 0;5Iw&_#,L9|~ *|1<&Fǂ8q 8ueoZ&aV=9[YUM(g2sp_V-RF;'fQگY,Q5a u%kuŘ ޤH*k1̒18r PB(܆ o}HO^Kyj,9 qV~#mGV+AbEb)wU1]Ǎ1Oӌ]0MQ4d))xU$XZR5k j5;JXP>Gd0O¦F#z _)U7嚵rEU` [AF%`WjdŠ)n\cvh y k^W'rvI0>jxVvJ w&K"1.Fn›ͤn'Kc7mYo'MVa&c5yamxCxOQ p tzduO 7#zzs˲e1x5^RQH*ˍIws23p Ps7O!ZVUQZôXs5i_Z+o927&OmU%Y'(ݩWAhZ:8$8BOh/R;s%49_rlUBÿ4~.@Gɷ~Z2 y-Z p[+1:yL17cx$?6? oP. R1XWe|l|@mLS}mEW;jjxXsYb7vT 䯲K/)ڴgօzi9;>Y*A'T̳x$wq>ŽB`O6R (~U' [S 84+=ŝ=dKddrܱiǴ•`k]YHT"yR3;QTT7|a{S!R8D(ҹXwEfabX^8%z. P ><$zO"w~tPyXqjSXmJ)'e~ ;oץ>"\eݫ:gRx$ ڷ :KjI; 1j'ӏ4օ"-!BHWGtO1Of|s6+d@0~wozS6@&7iЋX,f1^"6#ϖ>['=|h,) Y!v>Zw|vwt |=5$gYJ:ޒb8XnVÕg[Htܟ2 :䯽rαFO.~?=Z֐AGP2S"]͌3^k1RwRFSFL6Ѓ|^<WZ 52GX=j)p^4?껒h,~_Uo 9FlZ ">4koC:m‚`dI;j9 u)4;1ً V([Ψ}ԴrF}`k(b06*䚭xދGH;ߐ'ۼ a!2O_ZU|b!LWk"dj . ֛μhonQi+߿^ql9ą, R~Ha)Dmi*vwAQbE{K/Ewҏ:_`dK[ZIdGx.ce>6B *N`זP}cZy쑊aJ'c~6}ϴso |tJ\y&ޯb$E:]{1#ɱ [-˄xWqP 4C-y! FF9mz֘'d6[=:rSpE.Xm( @Xk+$Z[1l݈3fPCGFW)gTFAX+P@~1mW)])L_B޻J%CV]j+)BN5Oyˋǥ?e} cuZsXKɤ'c>j9 ց!B>1C~:uoM 䤏 NCiA&-rZk1.Jy0Rh\# oz'8[~>ۊkHu_:3駧K%_3!tS*śJWqreeg: 䑱gشsOs#n9FS`E xRI*6Tҵxi[|}in9 o|od1 ={Kd٘<*e!;uzP}EX]{aJ>ef2D?>ԄxGi_0 ؈.*Wu_mMrUs{K/N&;ruDʺ0!>:UÓCRKJSⲯ{wͲHA?Sp;o"zc6 6V Q;m.OW}3]QYFhw&Qז~WFww5*tQ԰WdRb_=|'x*S_k|YĐBU,#k ZhJeK Ӭxt`MF3e!1@O ;P:)@N|oIWVq}fs {qvUg5b[dx}M1jR휖b]%\naeFw HC* ȶnwLإ$6|'jEZ1)G7/q-z i);jM-5lԱZ&;jkeni+!\YwPğuŊ̍-['*<uXy;4NAPīAĻVoTWUG2#hg3DN٦Sڳe-ɪ8 sH=XZEV$nOc ]~rڦ;ǣC`(YAm>|N؅3 x"wV9O:qj~"rIf s,SbacfRX;'K>vַs-f'%0SWVvk}M$$o׼P*)Bz5W'jZܒ2Xkgl{b#-ܘİF Dh7;>Fcl-xK)E!C$'bwRTiz<^2_IlۉGwG#'~bWH{ě\Cܼ>zhB纱zu[ge$48XuK( ttWwb:C9[qT~u-{!pܱ-vIֶQl[v0$sPq+Oz*MÚ+ߧvghttɴvuǎe#5ٚH i%\Wp oGњ[R }>4o%(i+ӖH$h>GNW(}Mh3䲜G3o X>OƷե]҄*-0R)@_Zs/OSbPKXݣ>ONp[u+LG$u+x DO:vq}N,F͹f8Ho ߐ?U~,JvkFv@//\z'VZ D.Խ5Jz[Q{ldeO;O6N;N|*cΉ>!clJtLڛKRU)K K-xݖH1:[Fδ@wA^0U!Fj**hojǎe}hIrG&6jBA>3uf}Ӎ%{Һ3qF܈oQ]l-&KAȖm}mKE a($^(O3Up_3UZ@c&+>? ]^wlwk—9*hBWn _bZW>Bj-6BS?q[uK&b/ǐqsrAV%Tǖ<&N&9!D֩|c +5 ~><#. 18?Vk4I6 :횳FWGD Ntg&W;mdrPQXol391m QKNN0Oreۚl564XU\7j<-:2MjDaihk`8)1XSqZ\HI9?J'];Ns$Lyl͋rFNB,3~^1ڕc.]ÏRlfTMV!!ctB$x wD[Qlvbrt!x$Pj4V~~6~G;+QR[ˣ Jip_WZX"d4VԠ:=\<ݥ6ᎍWNy X8J<7#^7#dz XbXmmwԛ*CA8湓j~ݸoZ ahcUl@]BQbu<vE^0 PK/IwIlǀT^E$X/؇%hS*@Qɀ'[#.#M}VRLo%X%Ր'`l;r4Kjcs]:FF{"9dط H{ #@ ݽ<*bvN5rS^\%Et:}vN ELM.:8Ǝu: u)$s& B} ~Un뭘ŋ_a_h<38wB;Gм'g&'8?Ik帨 v|)$wU%w\85,b$u72Ar>W'Lpڭ$\e>FePA,X.^7JIJ3m Q\rkZk-YX`$r?!È*`3Td^;LT1ԇc+ a/~vz_!TǾf=xVK=ldpݷ{԰ƁcEHسL^u 3JNḠ$ׅ<>N\B֮`g$fۄee'[Bk4hF8UmO׸s 8lc933u8FGw֗6J ##^[j 5Uܳumx35,~%fp H;G۵UOQ^8 bB$Gīl9զcmG⧗l1³E&D҇#ay]I;LxYyK*{c $y*P2yNܧ5l”fټ2V9l>6࢓~ܫJĎ?ӫ//2w~gX<2X\^}YB*qyW`!FDxlږ}}*V=b Vdm[*0ُv(5;e AAU=%V('K~Fٴ'A>WZ<͘n~UQtF'3ڒy_? |6jdfܔ׋v䧈l7as1um;C%]&O$#8]od3[ǀGM F'22^݊f%UV7G]SʶP_}26jfrPGORR(r0,r*fms~<-7ژ痜T㟍(ؒ<Np$!gT4'P#HAf^XjE)7!:o[^yec*4²Lk!sO֞[9 ǿ rH}e&Ṍ ܰ6#fb 5?zc5.EZ ] 'C/& n3]Ot+9ϜV^`7:KOsؾب`[3>\ <:ԀH=k. W65j܎YV.?<fWr'\3A {)hDMIPGwuP qp/S>}C:db6rO+w x8EltLr  9vSH\lvD&21 a!Sa.P=1לT.vJ9Y$ sA[x˦g<xސ$ƜuLAL trW)Z[Ie&G0 <rĖ/^#jdd}G!e}گt6mqzVOk> [p"<*TZfdd%Q gPN8&Gn ]Hdyh le1?-1foX5P5/rk6.Kl*=G.1;,"i&F:HH,p6zm(iU+l"Egx>'} X9}ΔY30dPB)߃OM9ϥ%+H'j{(;nUidUf1C,j NF`Vh֪=[20K@8Vc`-3MEթO|4QW'z] K( E1~7lS㒾~5U24oɜs '4;#*$4=tYLn\߷ċeuK wAmCp5WViYٍ ѫoڮVH @IgٟF3ZrpR!!CcZ;Aoߖ.b*q9Fr^u]ug?}_!zR=kbvX箊Z.RH%IaiGCs?>#Bc{%_Qa? ~ɠH 6FN=v vtqH~?tSh~vxԃEay]UI(Q1Zޢx;/stwG6\L~)u? lI~ݪQǿbqm홿,|+_2Y 3hWuco KCև^EYX!b!Qkο}Nf "7o+QL'9@A$xcd-# K#Dx:Wccj}K(>|Bcd65;8% _{kwPgp__?ė!~(BlFu+u0#?ziuⲨ5hKj;CM4B}VEzw<^IU;K{cꝲ;NU FN㭝=jn㞝NF =G,T-ϵi܏8?Ji@P|(^fd? ?gË  5գ?_c\/Om]1j]Kp[ t; o}Uay ">J*AAS[:GM&ad6 ~v\);;uY xHWG[ie^3̳IU>\K3( u<{6JHPJy: fןAaf}o8D ޠB@F_2ڃx޼~%e4)-y_z+|{:K'~kb'\^PrzazC~}:;m=hr}i"Y=޵ZO֙}>׍k_ݩi╤k@J yw%_;z˙c~ 3cKrכ7{Ku5{Qr`{6+ρi=]%m'_1}zZx2@͕8ܟbEvǘn{]oZ㐳ݳv'&2ֵ1,*? k+)񣿟>L6??[Q=i7oܱӡVwCꣀ[#V|IR8> >HkoJi8-}= q~F~LL2V"wgӣjwlƬOGq{HQJ#x=Ter]J=LV_3FUC; <jRs$ = !=ʭLoO3e*##~N FHF'mkXױ[#,wQ< NI J:o:{lerN2>4T %&?imfkz]EM 1I9`@XΊ 5=K7|Hsq8[2?kJ낣;|* ;:>Aj\yF6h S44Xu]u6|va|F`zV>3RIv ]]$r#nJ;'[Roszo`;_!.i;x1 k|YHRtH*=3R"f?vHV;"F#y ^l.U&Rr<=AZAW—Sb|oov➕#_لf ΍h^ !'g鵭ÖTrx{*R+tSw^ӡqەWSefEFrg~%WDuݻG6:J׆<`(qsf1AfjE[ax.6Pre|/}eciL{•RI*@F `O=r.Аw$s!ݽBG(}ѵM /u/'~KV<"E\iaH%;|kƺp[ _j+ZRy}%!rA<$pc]Y`y5U-Vl~uzxp1֦wե]auf'eyfMj q+8 %7ȝhIj,:Q:ɪyRYXl~BS e-4nR+eBA A*VS)IyQLIu8m<Ǩ;nVc* rl؃첯Z;V t qD 뙥 ۹YēG)~Ku'  t\te󽷕2ܴ4^֜:!@feUQ뤕n6HI<ϖ* I'sS-YOnԐJ%\LV/s,*Bק3>JiIeּ6|^lG<4H)HEVf1*Px ڊyp^~; 5 Thd~Y䠎1fVƂǍ)B rsPǖ$^ n ­ɯ`1P[еmJ +'{O-(>AOtwwyHI`֎,9eu弔Ck0ˊ\֚Q8ڽfkd2}?xUZ ӊTX6* Gܫ׻cn什eT4w!w>E =$Tšh֏^Z ~rʕX 'U]]~Н+bl}5aQX(%o$50=kݾ]PAeEԌF^;v>GWO{ǜ3 kJ`niNQ(;I/|}ȊU|U*< lu"x2:ok7|d !B`ToqdwhXbOR՘%?lL $O> JYn|bI5IJXt IRN^w@{*NO6K{?%&iJb{I#ozcqz/aaCgX[y,9aFu?Öw-TvSv.uS/fYchZ*Mcc $'{'G+5)z5%@=;u_B$$F}<$gR.+#]+)$|Gl#o ;ߍo-AZMjEur4a,}go=еj4&Uv^Ìc#Jظ"=6אbT?ʦ/-ͳIWђ~Ƹ6[$^Y6ܘĖk`kz7vAwx!ڂ}ʤ(;VM!A#]hvGv:nӂf\uCtAa(;$>{\NUMѐk^t<Όˏ2 GJY{zyZ|WBkξh(d>>@'OA[+RVx԰WȅY>r94f=xF/m( =?DA^w67#tN+-֣8̬}p ܁h?a-=RdOAWq/URb⍦H |<ݲPy2|sKBNBxlVR,%=LlM]u+Aecd`qછ.~" LsԘ2U :[.-nV^b(dlƼ upm31QſM:מOzB;~39"Ee#UޔKk'Zex\R m>wsoex%)6d1׏?_лŏݏ'p.N+CJ'QXcWYBN8b MT H=z>Thz?fpSfw'nBo,3D5\I>mn Y\SΩ]K?_b߹ |q;u%X\BP -5;xOǗ!fRNoإM:gfϮt\]=9i7PRcsys4ҀImw\KjQ$[2X $bE΄J?;Aj_Χt3J  8?s` <>#b;q<ڃJJx }Q][J sTb6V x #'X4e(d6U[CyNNZ>[4Ec&T:2;q8fN<7sH)uL qʪnԛr֭vo).pCm!>00դ֧WeeAa}}>բa ?jO¹ X%}ʹ]Hh W;OV'n^1U!w-lRI)D`ŝnI4 |~F0 4~oh~>{N|h>~KNI